{"version":3,"file":"girder-core.umd.cjs","names":["toString","hasOwnProperty","isObject","isUndefined","toString","toString","isFunction","hasObjectTag","isFunction","isArrayBuffer","has","hasOwnProperty","has","isFinite","isSymbol","isNaN","isNumber","getByteLength","isDataView","isBufferLike","toString","isFunction","has","keys","isObject","has","getLength","isArray","isString","isArguments","keys","keys","_","getByteLength","_","toString","isDataView","isTypedArray","getByteLength","isFunction","keys","has","isObject","getLength","isFunction","keys","keys","keys","isFunction","keys","isObject","create","clone","isObject","isArray","extend","toPath","isArray","_","get","isUndefined","has","_has","extendOwn","isFunction","isObject","isArray","_","keys","get","keys","escapeMap","escapeMap","unescapeMap","template","defaults","_","isFunction","_","isObject","_","isFunction","getLength","flatten","getLength","isArrayLike","isArray","isArguments","flatten","bind","has","delay","_","now","now","wrap","keys","getLength","getLength","getLength","isNaN","findIndex","findLastIndex","isArrayLike","findIndex","isArrayLike","keys","map","isArrayLike","keys","isArrayLike","keys","isArrayLike","keys","some","isArrayLike","keys","isArrayLike","indexOf","isFunction","map","map","max","isArrayLike","min","isArrayLike","toArray","isArray","isString","isArrayLike","map","isArrayLike","toArray","getLength","map","group","group","has","group","group","has","group","isArrayLike","keys","isFunction","flatten","isFunction","map","flatten","pick","_flatten","flatten","difference","getLength","flatten","getLength","max","getLength","getLength","_","_","_","_","allExports","exports","HOUR","MINUTE","SECOND","WEEK","indexOf","defaults","format","_","Backbone","apiRoot","_","Backbone","Backbone","_","$","apiRoot","_","Backbone","_","currentUser","getCurrentUser","_","_","$","AccessType","Core","text","escape","links","version","version","Autolinker","DATE_YYMMDD","DATE_DAY","DATE_MINUTE","DATE_SECOND","formatDate","formatSize","renderMarkdown","capitalize","$","Backbone","_","formatSize","_","_","$","_","Backbone","_","_","getCurrentUser","AccessType","jQuery","Backbone","pug_attr","pug_escape","pug_classes","pug_classes_array","pug_classes_object","pug_has_own_property","pug_match_html","template","Backbone","$","_","ConfirmDialogTemplate","_","jQuery","Backbone","_","pug_attr","pug_escape","pug_match_html","template","LayoutFooterTemplate","pug_attr","pug_escape","pug_classes","pug_classes_array","pug_classes_object","pug_has_own_property","pug_match_html","template","getCurrentUser","LayoutGlobalNavTemplate","Backbone","pug_attr","pug_escape","pug_match_html","template","jQuery","LayoutHeaderUserTemplate","getCurrentUser","jQuery","jQuery","pug_attr","pug_escape","pug_match_html","template","pug_escape","pug_match_html","template","pug_attr","pug_escape","pug_match_html","template","pug_attr","pug_escape","pug_classes","pug_classes_array","pug_classes_object","pug_has_own_property","pug_match_html","template","_","SearchFieldTemplate","SearchHelpTemplate","SearchModeSelectTemplate","SearchResultsTemplate","pug_attr","pug_escape","pug_match_html","pug_has_own_property","pug_style","template","LayoutHeaderTemplate","_","template","_","LoginDialogTemplate","pug_attr","pug_escape","pug_classes","pug_classes_array","pug_classes_object","pug_has_own_property","pug_match_html","pug_style","template","TaskProgressTemplate","template","LayoutProgressAreaTemplate","_","pug_escape","pug_match_html","template","getCurrentUser","RegisterDialogTemplate","template","ResetPasswordDialogTemplate","pug_attr","pug_escape","pug_classes","pug_classes_array","pug_classes_object","pug_has_own_property","pug_match_html","template","template","template","getCurrentUser","AdminConsoleTemplate","template","EditAssetstoreWidgetTemplate","$","template","jQuery","jQuery","NewAssetstoreTemplate","pug_attr","pug_escape","pug_classes","pug_classes_array","pug_classes_object","pug_has_own_property","pug_match_html","template","pug_attr","pug_escape","pug_classes","pug_classes_array","pug_classes_object","pug_has_own_property","pug_match_html","template","pug_attr","pug_escape","pug_classes","pug_classes_array","pug_classes_object","pug_has_own_property","pug_match_html","template","pug_attr","pug_escape","pug_classes","pug_classes_array","pug_classes_object","pug_has_own_property","pug_match_html","template","template","LoadingAnimationTemplate","_","getCurrentUser","accessEditorTemplate","accessEditorNonModalTemplate","accessEntryTemplate","AccessType","pug_escape","pug_match_html","template","CheckedActionsMenuTemplate","AccessType","HierarchyWidget","pug_attr","pug_escape","pug_match_html","template","CollectionInfoDialogTemplate","formatDate","formatSize","renderMarkdown","pug_attr","pug_escape","pug_match_html","template","jQuery","formatSize","_","MarkdownWidgetTemplate","template","EditCollectionWidgetTemplate","$","template","EditFolderWidgetTemplate","$","_","template","EditItemWidgetTemplate","$","_","pug_attr","pug_escape","pug_match_html","template","FolderInfoDialogTemplate","formatDate","formatSize","renderMarkdown","pug_attr","pug_escape","pug_match_html","template","FolderListTemplate","_","pug_attr","pug_escape","pug_classes","pug_classes_array","pug_classes_object","pug_has_own_property","pug_match_html","template","_","ItemListTemplate","formatSize","pug_attr","pug_escape","pug_match_html","template","pug_escape","pug_match_html","template","pug_escape","pug_match_html","template","pug_attr","pug_escape","pug_match_html","template","pug_escape","pug_match_html","template","exports","d","module","_","AccessType","MetadatumEditWidgetTemplate","JsonMetadatumEditWidgetTemplate","JSONEditor","MetadatumViewTemplate","JsonMetadatumViewTemplate","MetadataWidgetTemplate","pug_attr","pug_escape","pug_match_html","template","pug_attr","pug_escape","pug_match_html","template","_","UploadWidgetTemplate","UploadWidgetNonModalTemplate","formatSize","pug_attr","pug_escape","pug_match_html","template","pug_attr","pug_escape","pug_match_html","template","pug_attr","pug_escape","pug_match_html","template","renderMarkdown","HierarchyBreadcrumbTemplate","HierarchyPaginatedTemplate","HierarchyWidget","_","allModels","HierarchyWidgetTemplate","AccessType","capitalize","formatSize","pug_attr","pug_escape","pug_match_html","template","events","getCurrentUser","RootSelectorWidgetTemplate","_","pug_attr","pug_escape","pug_match_html","template","_","$","BrowserWidgetTemplate","HierarchyWidget","pug_escape","pug_match_html","template","$","FilesystemImportTemplate","pug_escape","pug_match_html","template","$","S3ImportTemplate","getCurrentUser","AssetstoresTemplate","formatSize","pug_escape","pug_match_html","template","PaginateWidgetTemplate","pug_attr","pug_escape","pug_match_html","template","CollectionListTemplate","getCurrentUser","formatDate","formatSize","pug_attr","pug_escape","pug_match_html","template","CollectionPageTemplate","AccessType","renderMarkdown","HierarchyWidget","_","formatSize","HierarchyWidget","_","pug_attr","pug_escape","pug_match_html","template","FrontPageTemplate","getCurrentUser","pug_attr","pug_escape","pug_match_html","template","getCurrentUser","EditGroupWidgetTemplate","$","pug_attr","pug_escape","pug_match_html","template","GroupListTemplate","getCurrentUser","formatDate","pug_attr","pug_escape","pug_match_html","template","SortCollectionWidgetTemplate","pug_attr","pug_escape","pug_match_html","template","getCurrentUser","UserListTemplate","formatDate","formatSize","pug_escape","pug_match_html","template","UserPageTemplate","AccessType","HierarchyWidget","_","pug_attr","pug_escape","pug_match_html","template","_","AccessType","GroupAdminListTemplate","pug_attr","pug_escape","pug_match_html","template","_","GroupInviteListTemplate","AccessType","pug_escape","pug_match_html","template","pug_attr","pug_escape","pug_match_html","template","AccessType","GroupInviteDialogTemplate","_","$","GroupMemberListTemplate","pug_attr","pug_escape","pug_match_html","template","AccessType","_","GroupModListTemplate","pug_attr","pug_escape","pug_match_html","template","getCurrentUser","AccessType","GroupPageTemplate","$","_","pug_attr","pug_escape","pug_match_html","template","EditFileWidgetTemplate","pug_escape","pug_match_html","template","FileInfoDialogTemplate","formatDate","pug_attr","pug_escape","pug_match_html","template","FileListTemplate","AccessType","formatSize","pug_attr","pug_escape","pug_match_html","template","ItemBreadcrumbTemplate","pug_attr","pug_escape","pug_match_html","template","ItemPageTemplate","AccessType","formatSize","formatDate","renderMarkdown","_","pug_attr","pug_escape","pug_match_html","template","PluginsTemplate","_","pug_attr","pug_escape","pug_match_html","template","_","SystemConfigurationTemplate","pug_attr","pug_escape","pug_match_html","template","_","getCurrentUser","EditApiKeyWidgetTemplate","$","pug_attr","pug_escape","pug_match_html","template","ApiKeyListTemplate","moment","module","template","pug_escape","pug_match_html","template","template","UserOtpBeginTemplate","OTPAuth","UserOtpEnableTemplate","UserOtpDisableTemplate","pug_attr","pug_escape","pug_match_html","template","getCurrentUser","AccessType","UserAccountTemplate","PaginateWidgetTemplate","_","pug_escape","pug_match_html","template","pug_attr","pug_escape","pug_classes","pug_classes_array","pug_classes_object","pug_has_own_property","pug_match_html","template","_","SearchResultsTemplate","SearchResultsTypeTemplate","getCurrentUser","_","$","LayoutTemplate","getCurrentUser","AlertTemplate","Backbone","pug_escape","pug_match_html","template","_","dateTimeRangeWidgetTemplate","moment","template","_","dateTimeWidgetTemplate","moment","pug_escape","pug_match_html","template","PluginConfigBreadcrumbTemplate","_","TimelineTemplate"],"sources":["../node_modules/jquery/dist/jquery.js","../node_modules/underscore/modules/_setup.js","../node_modules/underscore/modules/restArguments.js","../node_modules/underscore/modules/isObject.js","../node_modules/underscore/modules/isNull.js","../node_modules/underscore/modules/isUndefined.js","../node_modules/underscore/modules/isBoolean.js","../node_modules/underscore/modules/isElement.js","../node_modules/underscore/modules/_tagTester.js","../node_modules/underscore/modules/isString.js","../node_modules/underscore/modules/isNumber.js","../node_modules/underscore/modules/isDate.js","../node_modules/underscore/modules/isRegExp.js","../node_modules/underscore/modules/isError.js","../node_modules/underscore/modules/isSymbol.js","../node_modules/underscore/modules/isArrayBuffer.js","../node_modules/underscore/modules/isFunction.js","../node_modules/underscore/modules/_hasObjectTag.js","../node_modules/underscore/modules/_stringTagBug.js","../node_modules/underscore/modules/isDataView.js","../node_modules/underscore/modules/isArray.js","../node_modules/underscore/modules/_has.js","../node_modules/underscore/modules/isArguments.js","../node_modules/underscore/modules/isFinite.js","../node_modules/underscore/modules/isNaN.js","../node_modules/underscore/modules/constant.js","../node_modules/underscore/modules/_createSizePropertyCheck.js","../node_modules/underscore/modules/_shallowProperty.js","../node_modules/underscore/modules/_getByteLength.js","../node_modules/underscore/modules/_isBufferLike.js","../node_modules/underscore/modules/isTypedArray.js","../node_modules/underscore/modules/_getLength.js","../node_modules/underscore/modules/_collectNonEnumProps.js","../node_modules/underscore/modules/keys.js","../node_modules/underscore/modules/isEmpty.js","../node_modules/underscore/modules/isMatch.js","../node_modules/underscore/modules/underscore.js","../node_modules/underscore/modules/_toBufferView.js","../node_modules/underscore/modules/isEqual.js","../node_modules/underscore/modules/allKeys.js","../node_modules/underscore/modules/_methodFingerprint.js","../node_modules/underscore/modules/isMap.js","../node_modules/underscore/modules/isWeakMap.js","../node_modules/underscore/modules/isSet.js","../node_modules/underscore/modules/isWeakSet.js","../node_modules/underscore/modules/values.js","../node_modules/underscore/modules/pairs.js","../node_modules/underscore/modules/invert.js","../node_modules/underscore/modules/functions.js","../node_modules/underscore/modules/_createAssigner.js","../node_modules/underscore/modules/extend.js","../node_modules/underscore/modules/extendOwn.js","../node_modules/underscore/modules/defaults.js","../node_modules/underscore/modules/_baseCreate.js","../node_modules/underscore/modules/create.js","../node_modules/underscore/modules/clone.js","../node_modules/underscore/modules/tap.js","../node_modules/underscore/modules/toPath.js","../node_modules/underscore/modules/_toPath.js","../node_modules/underscore/modules/_deepGet.js","../node_modules/underscore/modules/get.js","../node_modules/underscore/modules/has.js","../node_modules/underscore/modules/identity.js","../node_modules/underscore/modules/matcher.js","../node_modules/underscore/modules/property.js","../node_modules/underscore/modules/_optimizeCb.js","../node_modules/underscore/modules/_baseIteratee.js","../node_modules/underscore/modules/iteratee.js","../node_modules/underscore/modules/_cb.js","../node_modules/underscore/modules/mapObject.js","../node_modules/underscore/modules/noop.js","../node_modules/underscore/modules/propertyOf.js","../node_modules/underscore/modules/times.js","../node_modules/underscore/modules/random.js","../node_modules/underscore/modules/now.js","../node_modules/underscore/modules/_createEscaper.js","../node_modules/underscore/modules/_escapeMap.js","../node_modules/underscore/modules/escape.js","../node_modules/underscore/modules/_unescapeMap.js","../node_modules/underscore/modules/unescape.js","../node_modules/underscore/modules/templateSettings.js","../node_modules/underscore/modules/template.js","../node_modules/underscore/modules/result.js","../node_modules/underscore/modules/uniqueId.js","../node_modules/underscore/modules/chain.js","../node_modules/underscore/modules/_executeBound.js","../node_modules/underscore/modules/partial.js","../node_modules/underscore/modules/bind.js","../node_modules/underscore/modules/_isArrayLike.js","../node_modules/underscore/modules/_flatten.js","../node_modules/underscore/modules/bindAll.js","../node_modules/underscore/modules/memoize.js","../node_modules/underscore/modules/delay.js","../node_modules/underscore/modules/defer.js","../node_modules/underscore/modules/throttle.js","../node_modules/underscore/modules/debounce.js","../node_modules/underscore/modules/wrap.js","../node_modules/underscore/modules/negate.js","../node_modules/underscore/modules/compose.js","../node_modules/underscore/modules/after.js","../node_modules/underscore/modules/before.js","../node_modules/underscore/modules/once.js","../node_modules/underscore/modules/findKey.js","../node_modules/underscore/modules/_createPredicateIndexFinder.js","../node_modules/underscore/modules/findIndex.js","../node_modules/underscore/modules/findLastIndex.js","../node_modules/underscore/modules/sortedIndex.js","../node_modules/underscore/modules/_createIndexFinder.js","../node_modules/underscore/modules/indexOf.js","../node_modules/underscore/modules/lastIndexOf.js","../node_modules/underscore/modules/find.js","../node_modules/underscore/modules/findWhere.js","../node_modules/underscore/modules/each.js","../node_modules/underscore/modules/map.js","../node_modules/underscore/modules/_createReduce.js","../node_modules/underscore/modules/reduce.js","../node_modules/underscore/modules/reduceRight.js","../node_modules/underscore/modules/filter.js","../node_modules/underscore/modules/reject.js","../node_modules/underscore/modules/every.js","../node_modules/underscore/modules/some.js","../node_modules/underscore/modules/contains.js","../node_modules/underscore/modules/invoke.js","../node_modules/underscore/modules/pluck.js","../node_modules/underscore/modules/where.js","../node_modules/underscore/modules/max.js","../node_modules/underscore/modules/min.js","../node_modules/underscore/modules/toArray.js","../node_modules/underscore/modules/sample.js","../node_modules/underscore/modules/shuffle.js","../node_modules/underscore/modules/sortBy.js","../node_modules/underscore/modules/_group.js","../node_modules/underscore/modules/groupBy.js","../node_modules/underscore/modules/indexBy.js","../node_modules/underscore/modules/countBy.js","../node_modules/underscore/modules/partition.js","../node_modules/underscore/modules/size.js","../node_modules/underscore/modules/_keyInObj.js","../node_modules/underscore/modules/pick.js","../node_modules/underscore/modules/omit.js","../node_modules/underscore/modules/initial.js","../node_modules/underscore/modules/first.js","../node_modules/underscore/modules/rest.js","../node_modules/underscore/modules/last.js","../node_modules/underscore/modules/compact.js","../node_modules/underscore/modules/flatten.js","../node_modules/underscore/modules/difference.js","../node_modules/underscore/modules/without.js","../node_modules/underscore/modules/uniq.js","../node_modules/underscore/modules/union.js","../node_modules/underscore/modules/intersection.js","../node_modules/underscore/modules/unzip.js","../node_modules/underscore/modules/zip.js","../node_modules/underscore/modules/object.js","../node_modules/underscore/modules/range.js","../node_modules/underscore/modules/chunk.js","../node_modules/underscore/modules/_chainResult.js","../node_modules/underscore/modules/mixin.js","../node_modules/underscore/modules/underscore-array-methods.js","../node_modules/underscore/modules/index.js","../node_modules/underscore/modules/index-default.js","../node_modules/underscore/modules/index-all.js","../node_modules/backbone/backbone.js","../node_modules/moment/dist/moment.js","../src/events.js","../src/rest.js","../src/models/Model.js","../src/utilities/EventStream.js","../src/models/UserModel.js","../src/auth.js","../src/models/AccessControlledModel.js","../src/models/ApiKeyModel.js","../src/constants.js","../node_modules/remarkable/dist/esm/index.browser.js","../node_modules/autolinker/dist/es2015/version.js","../node_modules/autolinker/dist/es2015/utils.js","../node_modules/autolinker/dist/es2015/html-tag.js","../node_modules/autolinker/dist/es2015/truncate/truncate-smart.js","../node_modules/autolinker/dist/es2015/truncate/truncate-middle.js","../node_modules/autolinker/dist/es2015/truncate/truncate-end.js","../node_modules/autolinker/dist/es2015/anchor-tag-builder.js","../node_modules/autolinker/dist/es2015/match/match.js","../node_modules/tslib/tslib.es6.mjs","../node_modules/autolinker/dist/es2015/match/email-match.js","../node_modules/autolinker/dist/es2015/match/hashtag-match.js","../node_modules/autolinker/dist/es2015/match/mention-match.js","../node_modules/autolinker/dist/es2015/match/phone-match.js","../node_modules/autolinker/dist/es2015/match/url-match.js","../node_modules/autolinker/dist/es2015/matcher/matcher.js","../node_modules/autolinker/dist/es2015/regex-lib.js","../node_modules/autolinker/dist/es2015/matcher/tld-regex.js","../node_modules/autolinker/dist/es2015/matcher/email-matcher.js","../node_modules/autolinker/dist/es2015/matcher/url-match-validator.js","../node_modules/autolinker/dist/es2015/matcher/url-matcher.js","../node_modules/autolinker/dist/es2015/matcher/hashtag-matcher.js","../node_modules/autolinker/dist/es2015/matcher/phone-matcher.js","../node_modules/autolinker/dist/es2015/matcher/mention-matcher.js","../node_modules/autolinker/dist/es2015/htmlParser/parse-html.js","../node_modules/autolinker/dist/es2015/autolinker.js","../node_modules/autolinker/dist/es2015/index.js","../node_modules/remarkable/dist/esm/linkify.js","../src/misc.js","../src/collections/Collection.js","../src/collections/ApiKeyCollection.js","../src/models/AssetstoreModel.js","../src/collections/AssetstoreCollection.js","../src/models/MetadataMixin.js","../src/models/CollectionModel.js","../src/collections/CollectionCollection.js","../src/models/FolderModel.js","../src/models/ItemModel.js","../src/utilities/S3UploadHandler.js","../src/models/FileModel.js","../src/collections/FileCollection.js","../src/collections/FolderCollection.js","../src/models/GroupModel.js","../src/collections/GroupCollection.js","../src/collections/ItemCollection.js","../src/collections/UserCollection.js","../src/collections/index.js","../node_modules/bootstrap/js/modal.js","../src/utilities/jquery/girderModal.js","../src/router.js","../src/templates/widgets/confirmDialog.pug","../src/dialog.js","../src/models/index.js","../src/pluginUtils.js","../src/utilities/PluginUtils.js","../src/utilities/index.js","../node_modules/bootstrap/js/alert.js","../src/views/View.js","../src/templates/layout/layoutFooter.pug","../src/views/layout/FooterView.js","../src/templates/layout/layoutGlobalNav.pug","../src/views/layout/GlobalNavView.js","../src/templates/layout/layoutHeaderUser.pug","../node_modules/bootstrap/js/dropdown.js","../src/views/layout/HeaderUserView.js","../node_modules/bootstrap/js/tooltip.js","../node_modules/bootstrap/js/popover.js","../src/templates/widgets/searchField.pug","../src/templates/widgets/searchHelp.pug","../src/templates/widgets/searchModeSelect.pug","../src/templates/widgets/searchResults.pug","../src/views/widgets/SearchFieldWidget.js","../src/templates/layout/layoutHeader.pug","../src/views/layout/HeaderView.js","../src/templates/layout/loginDialog.pug","../src/utilities/jquery/girderEnable.js","../src/views/layout/LoginView.js","../node_modules/sprintf-js/src/sprintf.js","../src/templates/widgets/taskProgress.pug","../src/views/widgets/TaskProgressWidget.js","../src/templates/layout/layoutProgressArea.pug","../src/views/layout/ProgressListView.js","../src/templates/layout/registerDialog.pug","../src/views/layout/RegisterView.js","../src/templates/layout/resetPasswordDialog.pug","../src/views/layout/ResetPasswordView.js","../src/templates/layout/alert.pug","../src/templates/layout/layout.pug","../src/templates/body/adminConsole.pug","../src/views/body/AdminView.js","../src/templates/widgets/editAssetstoreWidget.pug","../src/views/widgets/EditAssetstoreWidget.js","../src/templates/widgets/newAssetstore.pug","../node_modules/bootstrap/js/collapse.js","../node_modules/bootstrap/js/transition.js","../src/views/widgets/NewAssetstoreWidget.js","../src/templates/body/assetstores.pug","../node_modules/apexcharts/dist/apexcharts.esm.js","../src/templates/widgets/accessEditorNonModal.pug","../src/templates/widgets/accessEditor.pug","../src/templates/widgets/accessEntry.pug","../src/templates/widgets/loadingAnimation.pug","../src/views/widgets/LoadingAnimation.js","../src/views/widgets/AccessWidget.js","../src/templates/widgets/checkedActionsMenu.pug","../src/views/widgets/CheckedMenuWidget.js","../src/templates/widgets/collectionInfoDialog.pug","../src/views/widgets/CollectionInfoWidget.js","../src/templates/widgets/markdownWidget.pug","../node_modules/bootstrap/js/tab.js","../src/views/widgets/MarkdownWidget.js","../src/templates/widgets/editCollectionWidget.pug","../src/views/widgets/EditCollectionWidget.js","../src/templates/widgets/editFolderWidget.pug","../src/views/widgets/EditFolderWidget.js","../src/templates/widgets/editItemWidget.pug","../src/views/widgets/EditItemWidget.js","../src/templates/widgets/folderInfoDialog.pug","../src/views/widgets/FolderInfoWidget.js","../src/templates/widgets/folderList.pug","../src/views/widgets/FolderListWidget.js","../src/templates/widgets/itemList.pug","../src/views/widgets/ItemListWidget.js","../src/templates/widgets/jsonMetadatumEditWidget.pug","../src/templates/widgets/jsonMetadatumView.pug","../src/templates/widgets/metadataWidget.pug","../src/templates/widgets/metadatumEditWidget.pug","../src/templates/widgets/metadatumView.pug","../node_modules/jsoneditor/dist/jsoneditor.js","../node_modules/jsoneditor/dist/jsoneditor.css","../src/views/widgets/MetadataWidget.js","../src/templates/widgets/uploadWidget.pug","../src/templates/widgets/uploadWidgetNonModal.pug","../src/views/widgets/UploadWidget.js","../src/templates/widgets/hierarchyBreadcrumb.pug","../src/templates/widgets/hierarchyPaginated.pug","../src/templates/widgets/hierarchyWidget.pug","../src/views/widgets/HierarchyWidget.js","../src/templates/widgets/rootSelectorWidget.pug","../src/views/widgets/RootSelectorWidget.js","../src/templates/widgets/browserWidget.pug","../src/views/widgets/BrowserWidget.js","../src/templates/body/filesystemImport.pug","../src/views/body/FilesystemImportView.js","../src/templates/body/s3Import.pug","../src/views/body/S3ImportView.js","../src/views/body/AssetstoresView.js","../src/templates/widgets/paginateWidget.pug","../src/views/widgets/PaginateWidget.js","../src/templates/body/collectionList.pug","../src/views/body/CollectionsView.js","../src/templates/body/collectionPage.pug","../src/views/body/CollectionView.js","../src/views/body/FolderView.js","../src/templates/body/frontPage.pug","../src/views/body/FrontPageView.js","../src/templates/widgets/editGroupWidget.pug","../src/views/widgets/EditGroupWidget.js","../src/templates/body/groupList.pug","../src/views/body/GroupsView.js","../src/templates/widgets/sortCollectionWidget.pug","../src/views/widgets/SortCollectionWidget.js","../src/templates/body/userList.pug","../src/views/body/UsersView.js","../src/templates/body/userPage.pug","../src/views/body/UserView.js","../src/templates/widgets/groupAdminList.pug","../src/views/widgets/GroupAdminsWidget.js","../src/templates/widgets/groupInviteList.pug","../src/views/widgets/GroupInvitesWidget.js","../src/templates/widgets/groupInviteDialog.pug","../src/templates/widgets/groupMemberList.pug","../src/views/widgets/GroupMembersWidget.js","../src/templates/widgets/groupModList.pug","../src/views/widgets/GroupModsWidget.js","../src/templates/body/groupPage.pug","../src/views/body/GroupView.js","../src/templates/widgets/editFileWidget.pug","../src/views/widgets/EditFileWidget.js","../src/templates/widgets/fileInfoDialog.pug","../src/views/widgets/FileInfoWidget.js","../src/templates/widgets/fileList.pug","../src/views/widgets/FileListWidget.js","../src/templates/widgets/itemBreadcrumb.pug","../src/views/widgets/ItemBreadcrumbWidget.js","../src/templates/body/itemPage.pug","../src/views/body/ItemView.js","../src/templates/body/plugins.pug","../src/views/body/PluginsView.js","../src/models/CollectionCreationPolicyModel.js","../src/templates/body/systemConfiguration.pug","../node_modules/bootstrap-switch/dist/js/bootstrap-switch.js","../node_modules/bootstrap-switch/dist/css/bootstrap3/bootstrap-switch.css","../src/views/body/SystemConfigurationView.js","../src/templates/widgets/editApiKeyWidget.pug","../src/views/widgets/EditApiKeyWidget.js","../src/templates/widgets/apiKeyList.pug","../src/views/widgets/ApiKeyListWidget.js","../node_modules/qrcode/lib/can-promise.js","../node_modules/qrcode/lib/core/utils.js","../node_modules/qrcode/lib/core/error-correction-level.js","../node_modules/qrcode/lib/core/bit-buffer.js","../node_modules/qrcode/lib/core/bit-matrix.js","../node_modules/qrcode/lib/core/alignment-pattern.js","../node_modules/qrcode/lib/core/finder-pattern.js","../node_modules/qrcode/lib/core/mask-pattern.js","../node_modules/qrcode/lib/core/error-correction-code.js","../node_modules/qrcode/lib/core/galois-field.js","../node_modules/qrcode/lib/core/polynomial.js","../node_modules/qrcode/lib/core/reed-solomon-encoder.js","../node_modules/qrcode/lib/core/version-check.js","../node_modules/qrcode/lib/core/regex.js","../node_modules/qrcode/lib/core/mode.js","../node_modules/qrcode/lib/core/version.js","../node_modules/qrcode/lib/core/format-info.js","../node_modules/qrcode/lib/core/numeric-data.js","../node_modules/qrcode/lib/core/alphanumeric-data.js","../node_modules/qrcode/lib/core/byte-data.js","../node_modules/qrcode/lib/core/kanji-data.js","../node_modules/dijkstrajs/dijkstra.js","../node_modules/qrcode/lib/core/segments.js","../node_modules/qrcode/lib/core/qrcode.js","../node_modules/qrcode/lib/renderer/utils.js","../node_modules/qrcode/lib/renderer/canvas.js","../node_modules/qrcode/lib/renderer/svg-tag.js","../node_modules/qrcode/lib/browser.js","../node_modules/url/node_modules/punycode/punycode.js","../node_modules/es-errors/type.js","../__vite-browser-external","../node_modules/object-inspect/index.js","../node_modules/side-channel-list/index.js","../node_modules/es-object-atoms/index.js","../node_modules/es-errors/index.js","../node_modules/es-errors/eval.js","../node_modules/es-errors/range.js","../node_modules/es-errors/ref.js","../node_modules/es-errors/syntax.js","../node_modules/es-errors/uri.js","../node_modules/math-intrinsics/abs.js","../node_modules/math-intrinsics/floor.js","../node_modules/math-intrinsics/max.js","../node_modules/math-intrinsics/min.js","../node_modules/math-intrinsics/pow.js","../node_modules/math-intrinsics/round.js","../node_modules/math-intrinsics/isNaN.js","../node_modules/math-intrinsics/sign.js","../node_modules/gopd/gOPD.js","../node_modules/gopd/index.js","../node_modules/es-define-property/index.js","../node_modules/has-symbols/shams.js","../node_modules/has-symbols/index.js","../node_modules/get-proto/Reflect.getPrototypeOf.js","../node_modules/get-proto/Object.getPrototypeOf.js","../node_modules/function-bind/implementation.js","../node_modules/function-bind/index.js","../node_modules/call-bind-apply-helpers/functionCall.js","../node_modules/call-bind-apply-helpers/functionApply.js","../node_modules/call-bind-apply-helpers/reflectApply.js","../node_modules/call-bind-apply-helpers/actualApply.js","../node_modules/call-bind-apply-helpers/index.js","../node_modules/dunder-proto/get.js","../node_modules/get-proto/index.js","../node_modules/hasown/index.js","../node_modules/get-intrinsic/index.js","../node_modules/call-bound/index.js","../node_modules/side-channel-map/index.js","../node_modules/side-channel-weakmap/index.js","../node_modules/side-channel/index.js","../node_modules/qs/lib/formats.js","../node_modules/qs/lib/utils.js","../node_modules/qs/lib/stringify.js","../node_modules/qs/lib/parse.js","../node_modules/qs/lib/index.js","../node_modules/url/url.js","../node_modules/url-otpauth/index.js","../src/templates/widgets/userOtpBegin.pug","../src/templates/widgets/userOtpEnable.pug","../src/templates/widgets/userOtpDisable.pug","../src/views/widgets/UserOtpManagementWidget.js","../src/templates/body/userAccount.pug","../src/views/body/UserAccountView.js","../src/views/widgets/SearchPaginateWidget.js","../src/templates/body/searchResults.pug","../src/templates/body/searchResultsType.pug","../src/views/body/SearchResultsView.js","../src/routes.js","../src/views/App.js","../src/views/body/index.js","../src/views/layout/index.js","../src/templates/widgets/dateTimeRangeWidget.pug","../src/views/widgets/DateTimeRangeWidget.js","../src/templates/widgets/dateTimeWidget.pug","../src/views/widgets/DateTimeWidget.js","../src/templates/widgets/pluginConfigBreadcrumb.pug","../src/views/widgets/PluginConfigBreadcrumbWidget.js","../src/templates/widgets/timeline.pug","../src/views/widgets/TimelineWidget.js","../src/views/widgets/index.js","../src/views/index.js","../src/index.ts"],"sourcesContent":["/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\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 #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      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\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\n\tversion = \"3.5.1\",\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\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[ 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\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( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\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}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\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\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\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: http://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]\n\t\t// 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\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": 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\t\"needsContext\": 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\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\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// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\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 = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( 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, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\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\tresults.push( 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, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\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\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( 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 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\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 ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\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 ) || rcombinators.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\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 = nid.replace( rcssescape, fcssescape );\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( rtrim, \"$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 (see Issue #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 Sizzle\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 * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\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\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"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\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.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\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\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 Sizzle 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// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, 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\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\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 ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\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\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\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\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && 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\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\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\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( 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\tcontains( 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\tcontains( 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( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\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 eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\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 eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( 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// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\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 Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.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 contains( context, elem );\n};\n\nSizzle.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 (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.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 */\nSizzle.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\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( 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\tresults.splice( 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\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\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\t\"ATTR\": 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 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).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\t\"CHILD\": 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\tSizzle.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\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": 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\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = 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 elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.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\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": 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, uniqueCache, 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\tnode.nodeName.toLowerCase() === 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\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ 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\tuniqueCache[ 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\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ 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\tnode.nodeName.toLowerCase() === 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\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ 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\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://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\tSizzle.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 Sizzle 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( 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\t\"not\": 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( rtrim, \"$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 (issue #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\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( 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// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": 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\tSizzle.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\t\"target\": 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\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\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\t\"empty\": function( elem ) {\n\n\t\t\t// http://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\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear 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\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": 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\t\"odd\": 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\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\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\t\"gt\": 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\ntokenize = Sizzle.tokenize = function( 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 = rcombinators.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( rtrim, \" \" )\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\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\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, uniqueCache, 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\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ 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\tuniqueCache[ 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\tSizzle( 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,\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 || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\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\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\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( 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( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\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 (issue #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// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$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: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\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\tresults.push( 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\tSizzle.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\ncompile = Sizzle.compile = function( 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(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\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 Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( 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\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 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 ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\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// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\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\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\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\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\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 (#9521)\n\t// Strict HTML recognition (#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 Sizzle\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.stackTrace );\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 stack, 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.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = 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 master Deferred\n\t\t\tmaster = 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\tmaster.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, master.done( updateFunc( i ) ).resolve, master.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 ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.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 ), master.reject );\n\t\t}\n\n\t\treturn master.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\njQuery.Deferred.exceptionHook = function( error, stack ) {\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, error.stack, stack );\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 #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\tvalue :\n\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 (#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 #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 (#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 (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#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 (#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 (#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 (#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\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\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\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\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\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 (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #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 (#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\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\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\", returnTrue );\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, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\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 notAsync, 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\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\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\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\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\t\t\t\t\t\treturn result.value;\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 the\n\t\t\t\t// 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.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\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 (#504, #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\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\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\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, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\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\tdelegateType: delegateType\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\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 (#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// Reenable 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\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 Sizzle here for performance reasons: 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 getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #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 (#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\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\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\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 ) > 3;\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\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, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\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\trcustomProp = /^--/,\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\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\tif ( box === \"margin\" ) {\n\t\t\tdelta += 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;\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\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": 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 (#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 #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 (#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\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\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\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\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/* 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 )` (#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\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\t\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.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\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// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#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 classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\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\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\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\telem.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 classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\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\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\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\telem.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 type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\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\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\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = 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\"\" :\n\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\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 (#14686, #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 (#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\n\n\nsupport.focusin = \"onfocusin\" in window;\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 (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#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 = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ 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 (#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\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\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;\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\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\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} )\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} )\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// #7653, #8125, #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 (#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\toriginAnchor.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 #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\t\tjQuery( callbackContext ) :\n\t\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 (#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 #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 (#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// #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\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\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 (#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// #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 #8605, #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// #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\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\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( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( 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.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each( ( \"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// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\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, \"\" );\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// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","// Current version.\nexport var VERSION = '1.13.8';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = (typeof self == 'object' && self.self === self && self) ||\n          (typeof global == 'object' && global.global === global && global) ||\n          Function('return this')() ||\n          {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n    slice = ArrayProto.slice,\n    toString = ObjProto.toString,\n    hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n    supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n    nativeKeys = Object.keys,\n    nativeCreate = Object.create,\n    nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n    _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n  'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n  startIndex = startIndex == null ? func.length - 1 : +startIndex;\n  return function() {\n    var length = Math.max(arguments.length - startIndex, 0),\n        rest = Array(length),\n        index = 0;\n    for (; index < length; index++) {\n      rest[index] = arguments[index + startIndex];\n    }\n    switch (startIndex) {\n      case 0: return func.call(this, rest);\n      case 1: return func.call(this, arguments[0], rest);\n      case 2: return func.call(this, arguments[0], arguments[1], rest);\n    }\n    var args = Array(startIndex + 1);\n    for (index = 0; index < startIndex; index++) {\n      args[index] = arguments[index];\n    }\n    args[startIndex] = rest;\n    return func.apply(this, args);\n  };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n  var type = typeof obj;\n  return type === 'function' || (type === 'object' && !!obj);\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n  return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n  return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n  return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n  return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n  var tag = '[object ' + name + ']';\n  return function(obj) {\n    return toString.call(obj) === tag;\n  };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n  isFunction = function(obj) {\n    return typeof obj == 'function' || false;\n  };\n}\n\nexport default isFunction;\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n","import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\n// Also, there are cases where an application can override the native\n// `DataView` object, in cases like that we can't use the constructor\n// safely and should just rely on alternate `DataView` checks\nexport var hasDataViewBug = (\n      supportsDataView && (!/\\[native code\\]/.test(String(DataView)) || hasObjectTag(new DataView(new ArrayBuffer(8))))\n    ),\n    isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n","import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasDataViewBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\n// Also, in cases where the native `DataView` is\n// overridden we can't rely on the tag itself.\nfunction alternateIsDataView(obj) {\n  return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasDataViewBug ? alternateIsDataView : isDataView);\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n  return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n  if (!isArguments(arguments)) {\n    isArguments = function(obj) {\n      return has(obj, 'callee');\n    };\n  }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n  return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n  return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n  return function() {\n    return value;\n  };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n  return function(collection) {\n    var sizeProperty = getSizeProperty(collection);\n    return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n  }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n  return function(obj) {\n    return obj == null ? void 0 : obj[key];\n  };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n  // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n  // Otherwise, fall back on the above regular expression.\n  return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n                isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n  var hash = {};\n  for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n  return {\n    contains: function(key) { return hash[key] === true; },\n    push: function(key) {\n      hash[key] = true;\n      return keys.push(key);\n    }\n  };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n  keys = emulatedSet(keys);\n  var nonEnumIdx = nonEnumerableProps.length;\n  var constructor = obj.constructor;\n  var proto = (isFunction(constructor) && constructor.prototype) || ObjProto;\n\n  // Constructor is a special case.\n  var prop = 'constructor';\n  if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n  while (nonEnumIdx--) {\n    prop = nonEnumerableProps[nonEnumIdx];\n    if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n      keys.push(prop);\n    }\n  }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n  if (!isObject(obj)) return [];\n  if (nativeKeys) return nativeKeys(obj);\n  var keys = [];\n  for (var key in obj) if (has(obj, key)) keys.push(key);\n  // Ahem, IE < 9.\n  if (hasEnumBug) collectNonEnumProps(obj, keys);\n  return keys;\n}\n","import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n  if (obj == null) return true;\n  // Skip the more expensive `toString`-based type checks if `obj` has no\n  // `.length`.\n  var length = getLength(obj);\n  if (typeof length == 'number' && (\n    isArray(obj) || isString(obj) || isArguments(obj)\n  )) return length === 0;\n  return getLength(keys(obj)) === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n  var _keys = keys(attrs), length = _keys.length;\n  if (object == null) return !length;\n  var obj = Object(object);\n  for (var i = 0; i < length; i++) {\n    var key = _keys[i];\n    if (attrs[key] !== obj[key] || !(key in obj)) return false;\n  }\n  return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n  if (obj instanceof _) return obj;\n  if (!(this instanceof _)) return new _(obj);\n  this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n  return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n  return String(this._wrapped);\n};\n","import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n  return new Uint8Array(\n    bufferSource.buffer || bufferSource,\n    bufferSource.byteOffset || 0,\n    getByteLength(bufferSource)\n  );\n}\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasDataViewBug }  from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n  var todo = [{a: a, b: b}];\n  // Initializing stacks of traversed objects for cycle detection.\n  var aStack = [], bStack = [];\n\n  while (todo.length) {\n    var frame = todo.pop();\n    if (frame === true) {\n      // Remove the first object from the stack of traversed objects.\n      aStack.pop();\n      bStack.pop();\n      continue;\n    }\n    a = frame.a;\n    b = frame.b;\n\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n    if (a === b) {\n      if (a !== 0 || 1 / a === 1 / b) continue;\n      return false;\n    }\n    // `null` or `undefined` only equal to itself (strict comparison).\n    if (a == null || b == null) return false;\n    // `NaN`s are equivalent, but non-reflexive.\n    if (a !== a) {\n      if (b !== b) continue;\n      return false;\n    }\n    // Exhaust primitive checks\n    var type = typeof a;\n    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n\n// Internal recursive comparison function for `_.isEqual`.\n    // Unwrap any wrapped objects.\n    if (a instanceof _) a = a._wrapped;\n    if (b instanceof _) b = b._wrapped;\n    // Compare `[[Class]]` names.\n    var className = toString.call(a);\n    if (className !== toString.call(b)) return false;\n    // Work around a bug in IE 10 - Edge 13.\n    if (hasDataViewBug && className == '[object Object]' && isDataView(a)) {\n      if (!isDataView(b)) return false;\n      className = tagDataView;\n    }\n    switch (className) {\n      // These types are compared by value.\n    case '[object RegExp]':\n      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n    case '[object String]':\n      // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n      // equivalent to `new String(\"5\")`.\n      if ('' + a === '' + b) continue;\n      return false;\n    case '[object Number]':\n      todo.push({a: +a, b: +b});\n      continue;\n    case '[object Date]':\n    case '[object Boolean]':\n      // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n      // millisecond representations. Note that invalid dates with millisecond representations\n      // of `NaN` are not equivalent.\n      if (+a === +b) continue;\n      return false;\n    case '[object Symbol]':\n      if (SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b)) continue;\n      return false;\n    case '[object ArrayBuffer]':\n    case tagDataView:\n      // Coerce to typed array so we can fall through.\n      todo.push({a: toBufferView(a), b: toBufferView(b)});\n      continue;\n    }\n\n    var areArrays = className === '[object Array]';\n    if (!areArrays && isTypedArray(a)) {\n      var byteLength = getByteLength(a);\n      if (byteLength !== getByteLength(b)) return false;\n      if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) continue;\n      areArrays = true;\n    }\n    if (!areArrays) {\n      if (typeof a != 'object' || typeof b != 'object') return false;\n\n      // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n      // from different frames are.\n      var aCtor = a.constructor, bCtor = b.constructor;\n      if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n                               isFunction(bCtor) && bCtor instanceof bCtor)\n          && ('constructor' in a && 'constructor' in b)) {\n        return false;\n      }\n    }\n\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n    var length = aStack.length;\n    while (length--) {\n      // Linear search. Performance is inversely proportional to the number of\n      // unique nested structures.\n      if (aStack[length] === a) {\n        if (bStack[length] === b) break;\n        return false;\n      }\n    }\n    if (length >= 0) continue;\n\n    // Add the first object to the stack of traversed objects.\n    aStack.push(a);\n    bStack.push(b);\n    todo.push(true);\n\n    // Recursively compare objects and arrays.\n    if (areArrays) {\n      // Compare array lengths to determine if a deep comparison is necessary.\n      length = a.length;\n      if (length !== b.length) return false;\n      // Deep compare the contents, ignoring non-numeric properties.\n      while (length--) {\n        todo.push({a: a[length], b: b[length]});\n      }\n    } else {\n      // Deep compare objects.\n      var _keys = keys(a), key;\n      length = _keys.length;\n      // Ensure that both objects contain the same number of properties before comparing deep equality.\n      if (keys(b).length !== length) return false;\n      while (length--) {\n        // Deep compare each member\n        key = _keys[length];\n        if (!has(b, key)) return false;\n        todo.push({a: a[key], b: b[key]});\n      }\n    }\n  }\n  return true;\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n  if (!isObject(obj)) return [];\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  // Ahem, IE < 9.\n  if (hasEnumBug) collectNonEnumProps(obj, keys);\n  return keys;\n}\n","import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n  var length = getLength(methods);\n  return function(obj) {\n    if (obj == null) return false;\n    // `Map`, `WeakMap` and `Set` have no enumerable keys.\n    var keys = allKeys(obj);\n    if (getLength(keys)) return false;\n    for (var i = 0; i < length; i++) {\n      if (!isFunction(obj[methods[i]])) return false;\n    }\n    // If we are testing against `WeakMap`, we need to ensure that\n    // `obj` doesn't have a `forEach` method in order to distinguish\n    // it from a regular `Map`.\n    return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n  };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n    hasName = 'has',\n    commonInit = ['clear', 'delete'],\n    mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n    weakMapMethods = commonInit.concat(mapTail),\n    setMethods = ['add'].concat(commonInit, forEachName, hasName);\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n  var _keys = keys(obj);\n  var length = _keys.length;\n  var values = Array(length);\n  for (var i = 0; i < length; i++) {\n    values[i] = obj[_keys[i]];\n  }\n  return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n  var _keys = keys(obj);\n  var length = _keys.length;\n  var pairs = Array(length);\n  for (var i = 0; i < length; i++) {\n    pairs[i] = [_keys[i], obj[_keys[i]]];\n  }\n  return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n  var result = {};\n  var _keys = keys(obj);\n  for (var i = 0, length = _keys.length; i < length; i++) {\n    result[obj[_keys[i]]] = _keys[i];\n  }\n  return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n  var names = [];\n  for (var key in obj) {\n    if (isFunction(obj[key])) names.push(key);\n  }\n  return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n  return function(obj) {\n    var length = arguments.length;\n    if (defaults) obj = Object(obj);\n    if (length < 2 || obj == null) return obj;\n    for (var index = 1; index < length; index++) {\n      var source = arguments[index],\n          keys = keysFunc(source),\n          l = keys.length;\n      for (var i = 0; i < l; i++) {\n        var key = keys[i];\n        if (!defaults || obj[key] === void 0) obj[key] = source[key];\n      }\n    }\n    return obj;\n  };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n  return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n  if (!isObject(prototype)) return {};\n  if (nativeCreate) return nativeCreate(prototype);\n  var Ctor = ctor();\n  Ctor.prototype = prototype;\n  var result = new Ctor;\n  Ctor.prototype = null;\n  return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n  var result = baseCreate(prototype);\n  if (props) extendOwn(result, props);\n  return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n  if (!isObject(obj)) return obj;\n  return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n  interceptor(obj);\n  return obj;\n}\n","import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n  return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n","import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n  return _.toPath(path);\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n  var length = path.length;\n  for (var i = 0; i < length; i++) {\n    if (obj == null) return void 0;\n    obj = obj[path[i]];\n  }\n  return length ? obj : void 0;\n}\n","import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n  var value = deepGet(object, toPath(path));\n  return isUndefined(value) ? defaultValue : value;\n}\n","import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n  path = toPath(path);\n  var length = path.length;\n  for (var i = 0; i < length; i++) {\n    var key = path[i];\n    if (!_has(obj, key)) return false;\n    obj = obj[key];\n  }\n  return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n  return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n  attrs = extendOwn({}, attrs);\n  return function(obj) {\n    return isMatch(obj, attrs);\n  };\n}\n","import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n  path = toPath(path);\n  return function(obj) {\n    return deepGet(obj, path);\n  };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n  if (context === void 0) return func;\n  switch (argCount == null ? 3 : argCount) {\n    case 1: return function(value) {\n      return func.call(context, value);\n    };\n    // The 2-argument case is omitted because we’re not using it.\n    case 3: return function(value, index, collection) {\n      return func.call(context, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(context, accumulator, value, index, collection);\n    };\n  }\n  return function() {\n    return func.apply(context, arguments);\n  };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n  if (value == null) return identity;\n  if (isFunction(value)) return optimizeCb(value, context, argCount);\n  if (isObject(value) && !isArray(value)) return matcher(value);\n  return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n  return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n  if (_.iteratee !== iteratee) return _.iteratee(value, context);\n  return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n  iteratee = cb(iteratee, context);\n  var _keys = keys(obj),\n      length = _keys.length,\n      results = {};\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys[index];\n    results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n  }\n  return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n  if (obj == null) return noop;\n  return function(path) {\n    return get(obj, path);\n  };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n  var accum = Array(Math.max(0, n));\n  iteratee = optimizeCb(iteratee, context, 1);\n  for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n  return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n  if (max == null) {\n    max = min;\n    min = 0;\n  }\n  return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n  return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n  var escaper = function(match) {\n    return map[match];\n  };\n  // Regexes for identifying a key that needs to be escaped.\n  var source = '(?:' + keys(map).join('|') + ')';\n  var testRegexp = RegExp(source);\n  var replaceRegexp = RegExp(source, 'g');\n  return function(string) {\n    string = string == null ? '' : '' + string;\n    return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n  };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#x27;',\n  '`': '&#x60;'\n};\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n  evaluate: /<%([\\s\\S]+?)%>/g,\n  interpolate: /<%=([\\s\\S]+?)%>/g,\n  escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n  \"'\": \"'\",\n  '\\\\': '\\\\',\n  '\\r': 'r',\n  '\\n': 'n',\n  '\\u2028': 'u2028',\n  '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n  return '\\\\' + escapes[match];\n}\n\n// In order to prevent third-party code injection through\n// `_.templateSettings.variable`, we test it against the following regular\n// expression. It is intentionally a bit more liberal than just matching valid\n// identifiers, but still prevents possible loopholes through defaults or\n// destructuring assignment.\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n  if (!settings && oldSettings) settings = oldSettings;\n  settings = defaults({}, settings, _.templateSettings);\n\n  // Combine delimiters into one regular expression via alternation.\n  var matcher = RegExp([\n    (settings.escape || noMatch).source,\n    (settings.interpolate || noMatch).source,\n    (settings.evaluate || noMatch).source\n  ].join('|') + '|$', 'g');\n\n  // Compile the template source, escaping string literals appropriately.\n  var index = 0;\n  var source = \"__p+='\";\n  text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n    source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n    index = offset + match.length;\n\n    if (escape) {\n      source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n    } else if (interpolate) {\n      source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n    } else if (evaluate) {\n      source += \"';\\n\" + evaluate + \"\\n__p+='\";\n    }\n\n    // Adobe VMs need the match returned to produce the correct offset.\n    return match;\n  });\n  source += \"';\\n\";\n\n  var argument = settings.variable;\n  if (argument) {\n    // Insure against third-party code injection. (CVE-2021-23358)\n    if (!bareIdentifier.test(argument)) throw new Error(\n      'variable is not a bare identifier: ' + argument\n    );\n  } else {\n    // If a variable is not specified, place data values in local scope.\n    source = 'with(obj||{}){\\n' + source + '}\\n';\n    argument = 'obj';\n  }\n\n  source = \"var __t,__p='',__j=Array.prototype.join,\" +\n    \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n    source + 'return __p;\\n';\n\n  var render;\n  try {\n    render = new Function(argument, '_', source);\n  } catch (e) {\n    e.source = source;\n    throw e;\n  }\n\n  var template = function(data) {\n    return render.call(this, data, _);\n  };\n\n  // Provide the compiled source as a convenience for precompilation.\n  template.source = 'function(' + argument + '){\\n' + source + '}';\n\n  return template;\n}\n","import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n  path = toPath(path);\n  var length = path.length;\n  if (!length) {\n    return isFunction(fallback) ? fallback.call(obj) : fallback;\n  }\n  for (var i = 0; i < length; i++) {\n    var prop = obj == null ? void 0 : obj[path[i]];\n    if (prop === void 0) {\n      prop = fallback;\n      i = length; // Ensure we don't continue iterating.\n    }\n    obj = isFunction(prop) ? prop.call(obj) : prop;\n  }\n  return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n  var id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n  var instance = _(obj);\n  instance._chain = true;\n  return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n  if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n  var self = baseCreate(sourceFunc.prototype);\n  var result = sourceFunc.apply(self, args);\n  if (isObject(result)) return result;\n  return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n  var placeholder = partial.placeholder;\n  var bound = function() {\n    var position = 0, length = boundArgs.length;\n    var args = Array(length);\n    for (var i = 0; i < length; i++) {\n      args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n    }\n    while (position < arguments.length) args.push(arguments[position++]);\n    return executeBound(func, bound, this, this, args);\n  };\n  return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n  if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n  var bound = restArguments(function(callArgs) {\n    return executeBound(func, bound, context, this, args.concat(callArgs));\n  });\n  return bound;\n});\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict) {\n  if (!depth && depth !== 0) depth = Infinity;\n  var output = [], idx = 0, i = 0, length = getLength(input) || 0, stack = [];\n  while (true) {\n    if (i >= length) {\n      if (!stack.length) break;\n      var frame = stack.pop();\n      i = frame.i;\n      input = frame.v;\n      length = getLength(input);\n      continue;\n    }\n    var value = input[i++];\n    if (stack.length >= depth) {\n      output[idx++] = value;\n    } else if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n      // Flatten current level of array or arguments object.\n      stack.push({i: i, v: input});\n      i = 0;\n      input = value;\n      length = getLength(input);\n    } else if (!strict) {\n      output[idx++] = value;\n    }\n  }\n  return output;\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n  keys = flatten(keys, false, false);\n  var index = keys.length;\n  if (index < 1) throw new Error('bindAll must be passed function names');\n  while (index--) {\n    var key = keys[index];\n    obj[key] = bind(obj[key], obj);\n  }\n  return obj;\n});\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n  var memoize = function(key) {\n    var cache = memoize.cache;\n    var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n    if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n    return cache[address];\n  };\n  memoize.cache = {};\n  return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n  return setTimeout(function() {\n    return func.apply(null, args);\n  }, wait);\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n  var timeout, context, args, result;\n  var previous = 0;\n  if (!options) options = {};\n\n  var later = function() {\n    previous = options.leading === false ? 0 : now();\n    timeout = null;\n    result = func.apply(context, args);\n    if (!timeout) context = args = null;\n  };\n\n  var throttled = function() {\n    var _now = now();\n    if (!previous && options.leading === false) previous = _now;\n    var remaining = wait - (_now - previous);\n    context = this;\n    args = arguments;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      previous = _now;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout(later, remaining);\n    }\n    return result;\n  };\n\n  throttled.cancel = function() {\n    clearTimeout(timeout);\n    previous = 0;\n    timeout = context = args = null;\n  };\n\n  return throttled;\n}\n","import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n  var timeout, previous, args, result, context;\n\n  var later = function() {\n    var passed = now() - previous;\n    if (wait > passed) {\n      timeout = setTimeout(later, wait - passed);\n    } else {\n      timeout = null;\n      if (!immediate) result = func.apply(context, args);\n      // This check is needed because `func` can recursively invoke `debounced`.\n      if (!timeout) args = context = null;\n    }\n  };\n\n  var debounced = restArguments(function(_args) {\n    context = this;\n    args = _args;\n    previous = now();\n    if (!timeout) {\n      timeout = setTimeout(later, wait);\n      if (immediate) result = func.apply(context, args);\n    }\n    return result;\n  });\n\n  debounced.cancel = function() {\n    clearTimeout(timeout);\n    timeout = args = context = null;\n  };\n\n  return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n  return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n  return function() {\n    return !predicate.apply(this, arguments);\n  };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n  var args = arguments;\n  var start = args.length - 1;\n  return function() {\n    var i = start;\n    var result = args[start].apply(this, arguments);\n    while (i--) result = args[i].call(this, result);\n    return result;\n  };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n  return function() {\n    if (--times < 1) {\n      return func.apply(this, arguments);\n    }\n  };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n  var memo;\n  return function() {\n    if (--times > 0) {\n      memo = func.apply(this, arguments);\n    }\n    if (times <= 1) func = null;\n    return memo;\n  };\n}\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = keys(obj), key;\n  for (var i = 0, length = _keys.length; i < length; i++) {\n    key = _keys[i];\n    if (predicate(obj[key], key, obj)) return key;\n  }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n  return function(array, predicate, context) {\n    predicate = cb(predicate, context);\n    var length = getLength(array);\n    var index = dir > 0 ? 0 : length - 1;\n    for (; index >= 0 && index < length; index += dir) {\n      if (predicate(array[index], index, array)) return index;\n    }\n    return -1;\n  };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n  iteratee = cb(iteratee, context, 1);\n  var value = iteratee(obj);\n  var low = 0, high = getLength(array);\n  while (low < high) {\n    var mid = Math.floor((low + high) / 2);\n    if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n  }\n  return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n  return function(array, item, idx) {\n    var i = 0, length = getLength(array);\n    if (typeof idx == 'number') {\n      if (dir > 0) {\n        i = idx >= 0 ? idx : Math.max(idx + length, i);\n      } else {\n        length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n      }\n    } else if (sortedIndex && idx && length) {\n      idx = sortedIndex(array, item);\n      return array[idx] === item ? idx : -1;\n    }\n    if (item !== item) {\n      idx = predicateFind(slice.call(array, i, length), isNaN);\n      return idx >= 0 ? idx + i : -1;\n    }\n    for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n      if (array[idx] === item) return idx;\n    }\n    return -1;\n  };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n  var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n  var key = keyFinder(obj, predicate, context);\n  if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n  return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n  iteratee = optimizeCb(iteratee, context);\n  var i, length;\n  if (isArrayLike(obj)) {\n    for (i = 0, length = obj.length; i < length; i++) {\n      iteratee(obj[i], i, obj);\n    }\n  } else {\n    var _keys = keys(obj);\n    for (i = 0, length = _keys.length; i < length; i++) {\n      iteratee(obj[_keys[i]], _keys[i], obj);\n    }\n  }\n  return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n  iteratee = cb(iteratee, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length,\n      results = Array(length);\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    results[index] = iteratee(obj[currentKey], currentKey, obj);\n  }\n  return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n  // Wrap code that reassigns argument variables in a separate function than\n  // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n  var reducer = function(obj, iteratee, memo, initial) {\n    var _keys = !isArrayLike(obj) && keys(obj),\n        length = (_keys || obj).length,\n        index = dir > 0 ? 0 : length - 1;\n    if (!initial) {\n      memo = obj[_keys ? _keys[index] : index];\n      index += dir;\n    }\n    for (; index >= 0 && index < length; index += dir) {\n      var currentKey = _keys ? _keys[index] : index;\n      memo = iteratee(memo, obj[currentKey], currentKey, obj);\n    }\n    return memo;\n  };\n\n  return function(obj, iteratee, memo, context) {\n    var initial = arguments.length >= 3;\n    return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n  };\n}\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n  var results = [];\n  predicate = cb(predicate, context);\n  each(obj, function(value, index, list) {\n    if (predicate(value, index, list)) results.push(value);\n  });\n  return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n  return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length;\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    if (!predicate(obj[currentKey], currentKey, obj)) return false;\n  }\n  return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length;\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    if (predicate(obj[currentKey], currentKey, obj)) return true;\n  }\n  return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n  if (!isArrayLike(obj)) obj = values(obj);\n  if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n  return indexOf(obj, item, fromIndex) >= 0;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n  var contextPath, func;\n  if (isFunction(path)) {\n    func = path;\n  } else {\n    path = toPath(path);\n    contextPath = path.slice(0, -1);\n    path = path[path.length - 1];\n  }\n  return map(obj, function(context) {\n    var method = func;\n    if (!method) {\n      if (contextPath && contextPath.length) {\n        context = deepGet(context, contextPath);\n      }\n      if (context == null) return void 0;\n      method = context[path];\n    }\n    return method == null ? method : method.apply(context, args);\n  });\n});\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n  return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n  return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n  var result = -Infinity, lastComputed = -Infinity,\n      value, computed;\n  if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n    obj = isArrayLike(obj) ? obj : values(obj);\n    for (var i = 0, length = obj.length; i < length; i++) {\n      value = obj[i];\n      if (value != null && value > result) {\n        result = value;\n      }\n    }\n  } else {\n    iteratee = cb(iteratee, context);\n    each(obj, function(v, index, list) {\n      computed = iteratee(v, index, list);\n      if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n        result = v;\n        lastComputed = computed;\n      }\n    });\n  }\n  return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n  var result = Infinity, lastComputed = Infinity,\n      value, computed;\n  if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n    obj = isArrayLike(obj) ? obj : values(obj);\n    for (var i = 0, length = obj.length; i < length; i++) {\n      value = obj[i];\n      if (value != null && value < result) {\n        result = value;\n      }\n    }\n  } else {\n    iteratee = cb(iteratee, context);\n    each(obj, function(v, index, list) {\n      computed = iteratee(v, index, list);\n      if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n        result = v;\n        lastComputed = computed;\n      }\n    });\n  }\n  return result;\n}\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n  if (!obj) return [];\n  if (isArray(obj)) return slice.call(obj);\n  if (isString(obj)) {\n    // Keep surrogate pair characters together.\n    return obj.match(reStrSymbol);\n  }\n  if (isArrayLike(obj)) return map(obj, identity);\n  return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\nimport toArray from './toArray.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n  if (n == null || guard) {\n    if (!isArrayLike(obj)) obj = values(obj);\n    return obj[random(obj.length - 1)];\n  }\n  var sample = toArray(obj);\n  var length = getLength(sample);\n  n = Math.max(Math.min(n, length), 0);\n  var last = length - 1;\n  for (var index = 0; index < n; index++) {\n    var rand = random(index, last);\n    var temp = sample[index];\n    sample[index] = sample[rand];\n    sample[rand] = temp;\n  }\n  return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n  return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n  var index = 0;\n  iteratee = cb(iteratee, context);\n  return pluck(map(obj, function(value, key, list) {\n    return {\n      value: value,\n      index: index++,\n      criteria: iteratee(value, key, list)\n    };\n  }).sort(function(left, right) {\n    var a = left.criteria;\n    var b = right.criteria;\n    if (a !== b) {\n      if (a > b || a === void 0) return 1;\n      if (a < b || b === void 0) return -1;\n    }\n    return left.index - right.index;\n  }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n  return function(obj, iteratee, context) {\n    var result = partition ? [[], []] : {};\n    iteratee = cb(iteratee, context);\n    each(obj, function(value, index) {\n      var key = iteratee(value, index, obj);\n      behavior(result, value, key);\n    });\n    return result;\n  };\n}\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n  if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n  result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n  if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n  result[pass ? 0 : 1].push(value);\n}, true);\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n  if (obj == null) return 0;\n  return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n  return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n  var result = {}, iteratee = keys[0];\n  if (obj == null) return result;\n  if (isFunction(iteratee)) {\n    if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n    keys = allKeys(obj);\n  } else {\n    iteratee = keyInObj;\n    keys = flatten(keys, false, false);\n    obj = Object(obj);\n  }\n  for (var i = 0, length = keys.length; i < length; i++) {\n    var key = keys[i];\n    var value = obj[key];\n    if (iteratee(value, key, obj)) result[key] = value;\n  }\n  return result;\n});\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n  var iteratee = keys[0], context;\n  if (isFunction(iteratee)) {\n    iteratee = negate(iteratee);\n    if (keys.length > 1) context = keys[1];\n  } else {\n    keys = map(flatten(keys, false, false), String);\n    iteratee = function(value, key) {\n      return !contains(keys, key);\n    };\n  }\n  return pick(obj, iteratee, context);\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n  return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n  if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n  if (n == null || guard) return array[0];\n  return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n  return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n  if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n  if (n == null || guard) return array[array.length - 1];\n  return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n  return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n  return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n  rest = flatten(rest, true, true);\n  return filter(array, function(value){\n    return !contains(rest, value);\n  });\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n  return difference(array, otherArrays);\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n  if (!isBoolean(isSorted)) {\n    context = iteratee;\n    iteratee = isSorted;\n    isSorted = false;\n  }\n  if (iteratee != null) iteratee = cb(iteratee, context);\n  var result = [];\n  var seen = [];\n  for (var i = 0, length = getLength(array); i < length; i++) {\n    var value = array[i],\n        computed = iteratee ? iteratee(value, i, array) : value;\n    if (isSorted && !iteratee) {\n      if (!i || seen !== computed) result.push(value);\n      seen = computed;\n    } else if (iteratee) {\n      if (!contains(seen, computed)) {\n        seen.push(computed);\n        result.push(value);\n      }\n    } else if (!contains(result, value)) {\n      result.push(value);\n    }\n  }\n  return result;\n}\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n  return uniq(flatten(arrays, true, true));\n});\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n  var result = [];\n  var argsLength = arguments.length;\n  for (var i = 0, length = getLength(array); i < length; i++) {\n    var item = array[i];\n    if (contains(result, item)) continue;\n    var j;\n    for (j = 1; j < argsLength; j++) {\n      if (!contains(arguments[j], item)) break;\n    }\n    if (j === argsLength) result.push(item);\n  }\n  return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n  var length = (array && max(array, getLength).length) || 0;\n  var result = Array(length);\n\n  for (var index = 0; index < length; index++) {\n    result[index] = pluck(array, index);\n  }\n  return result;\n}\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import getLength  from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n  var result = {};\n  for (var i = 0, length = getLength(list); i < length; i++) {\n    if (values) {\n      result[list[i]] = values[i];\n    } else {\n      result[list[i][0]] = list[i][1];\n    }\n  }\n  return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n  if (stop == null) {\n    stop = start || 0;\n    start = 0;\n  }\n  if (!step) {\n    step = stop < start ? -1 : 1;\n  }\n\n  var length = Math.max(Math.ceil((stop - start) / step), 0);\n  var range = Array(length);\n\n  for (var idx = 0; idx < length; idx++, start += step) {\n    range[idx] = start;\n  }\n\n  return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n  if (count == null || count < 1) return [];\n  var result = [];\n  var i = 0, length = array.length;\n  while (i < length) {\n    result.push(slice.call(array, i, i += count));\n  }\n  return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n  return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n  each(functions(obj), function(name) {\n    var func = _[name] = obj[name];\n    _.prototype[name] = function() {\n      var args = [this._wrapped];\n      push.apply(args, arguments);\n      return chainResult(this, func.apply(_, args));\n    };\n  });\n  return _;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n  var method = ArrayProto[name];\n  _.prototype[name] = function() {\n    var obj = this._wrapped;\n    if (obj != null) {\n      method.apply(obj, arguments);\n      if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n        delete obj[0];\n      }\n    }\n    return chainResult(this, obj);\n  };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n  var method = ArrayProto[name];\n  _.prototype[name] = function() {\n    var obj = this._wrapped;\n    if (obj != null) obj = method.apply(obj, arguments);\n    return chainResult(this, obj);\n  };\n});\n\nexport default _;\n","// Named Exports\n// =============\n\n//     Underscore.js 1.13.8\n//     https://underscorejs.org\n//     (c) 2009-2026 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors\n//     Underscore may be freely distributed under the MIT license.\n\n// Baseline setup.\nexport { VERSION } from './_setup.js';\nexport { default as restArguments } from './restArguments.js';\n\n// Object Functions\n// ----------------\n// Our most fundamental functions operate on any JavaScript object.\n// Most functions in Underscore depend on at least one function in this section.\n\n// A group of functions that check the types of core JavaScript values.\n// These are often informally referred to as the \"isType\" functions.\nexport { default as isObject } from './isObject.js';\nexport { default as isNull } from './isNull.js';\nexport { default as isUndefined } from './isUndefined.js';\nexport { default as isBoolean } from './isBoolean.js';\nexport { default as isElement } from './isElement.js';\nexport { default as isString } from './isString.js';\nexport { default as isNumber } from './isNumber.js';\nexport { default as isDate } from './isDate.js';\nexport { default as isRegExp } from './isRegExp.js';\nexport { default as isError } from './isError.js';\nexport { default as isSymbol } from './isSymbol.js';\nexport { default as isArrayBuffer } from './isArrayBuffer.js';\nexport { default as isDataView } from './isDataView.js';\nexport { default as isArray } from './isArray.js';\nexport { default as isFunction } from './isFunction.js';\nexport { default as isArguments } from './isArguments.js';\nexport { default as isFinite } from './isFinite.js';\nexport { default as isNaN } from './isNaN.js';\nexport { default as isTypedArray } from './isTypedArray.js';\nexport { default as isEmpty } from './isEmpty.js';\nexport { default as isMatch } from './isMatch.js';\nexport { default as isEqual } from './isEqual.js';\nexport { default as isMap } from './isMap.js';\nexport { default as isWeakMap } from './isWeakMap.js';\nexport { default as isSet } from './isSet.js';\nexport { default as isWeakSet } from './isWeakSet.js';\n\n// Functions that treat an object as a dictionary of key-value pairs.\nexport { default as keys } from './keys.js';\nexport { default as allKeys } from './allKeys.js';\nexport { default as values } from './values.js';\nexport { default as pairs } from './pairs.js';\nexport { default as invert } from './invert.js';\nexport { default as functions,\n         default as methods   } from './functions.js';\nexport { default as extend } from './extend.js';\nexport { default as extendOwn,\n         default as assign    } from './extendOwn.js';\nexport { default as defaults } from './defaults.js';\nexport { default as create } from './create.js';\nexport { default as clone } from './clone.js';\nexport { default as tap } from './tap.js';\nexport { default as get } from './get.js';\nexport { default as has } from './has.js';\nexport { default as mapObject } from './mapObject.js';\n\n// Utility Functions\n// -----------------\n// A bit of a grab bag: Predicate-generating functions for use with filters and\n// loops, string escaping and templating, create random numbers and unique ids,\n// and functions that facilitate Underscore's chaining and iteration conventions.\nexport { default as identity } from './identity.js';\nexport { default as constant } from './constant.js';\nexport { default as noop } from './noop.js';\nexport { default as toPath } from './toPath.js';\nexport { default as property } from './property.js';\nexport { default as propertyOf } from './propertyOf.js';\nexport { default as matcher,\n         default as matches } from './matcher.js';\nexport { default as times } from './times.js';\nexport { default as random } from './random.js';\nexport { default as now } from './now.js';\nexport { default as escape } from './escape.js';\nexport { default as unescape } from './unescape.js';\nexport { default as templateSettings } from './templateSettings.js';\nexport { default as template } from './template.js';\nexport { default as result } from './result.js';\nexport { default as uniqueId } from './uniqueId.js';\nexport { default as chain } from './chain.js';\nexport { default as iteratee } from './iteratee.js';\n\n// Function (ahem) Functions\n// -------------------------\n// These functions take a function as an argument and return a new function\n// as the result. Also known as higher-order functions.\nexport { default as partial } from './partial.js';\nexport { default as bind } from './bind.js';\nexport { default as bindAll } from './bindAll.js';\nexport { default as memoize } from './memoize.js';\nexport { default as delay } from './delay.js';\nexport { default as defer } from './defer.js';\nexport { default as throttle } from './throttle.js';\nexport { default as debounce } from './debounce.js';\nexport { default as wrap } from './wrap.js';\nexport { default as negate } from './negate.js';\nexport { default as compose } from './compose.js';\nexport { default as after } from './after.js';\nexport { default as before } from './before.js';\nexport { default as once } from './once.js';\n\n// Finders\n// -------\n// Functions that extract (the position of) a single element from an object\n// or array based on some criterion.\nexport { default as findKey } from './findKey.js';\nexport { default as findIndex } from './findIndex.js';\nexport { default as findLastIndex } from './findLastIndex.js';\nexport { default as sortedIndex } from './sortedIndex.js';\nexport { default as indexOf } from './indexOf.js';\nexport { default as lastIndexOf } from './lastIndexOf.js';\nexport { default as find,\n         default as detect } from './find.js';\nexport { default as findWhere } from './findWhere.js';\n\n// Collection Functions\n// --------------------\n// Functions that work on any collection of elements: either an array, or\n// an object of key-value pairs.\nexport { default as each,\n         default as forEach } from './each.js';\nexport { default as map,\n         default as collect } from './map.js';\nexport { default as reduce,\n         default as foldl,\n         default as inject } from './reduce.js';\nexport { default as reduceRight,\n         default as foldr       } from './reduceRight.js';\nexport { default as filter,\n         default as select } from './filter.js';\nexport { default as reject } from './reject.js';\nexport { default as every,\n         default as all   } from './every.js';\nexport { default as some,\n         default as any  } from './some.js';\nexport { default as contains,\n         default as includes,\n         default as include  } from './contains.js';\nexport { default as invoke } from './invoke.js';\nexport { default as pluck } from './pluck.js';\nexport { default as where } from './where.js';\nexport { default as max } from './max.js';\nexport { default as min } from './min.js';\nexport { default as shuffle } from './shuffle.js';\nexport { default as sample } from './sample.js';\nexport { default as sortBy } from './sortBy.js';\nexport { default as groupBy } from './groupBy.js';\nexport { default as indexBy } from './indexBy.js';\nexport { default as countBy } from './countBy.js';\nexport { default as partition } from './partition.js';\nexport { default as toArray } from './toArray.js';\nexport { default as size } from './size.js';\n\n// `_.pick` and `_.omit` are actually object functions, but we put\n// them here in order to create a more natural reading order in the\n// monolithic build as they depend on `_.contains`.\nexport { default as pick } from './pick.js';\nexport { default as omit } from './omit.js';\n\n// Array Functions\n// ---------------\n// Functions that operate on arrays (and array-likes) only, because they’re\n// expressed in terms of operations on an ordered list of values.\nexport { default as first,\n         default as head,\n         default as take  } from './first.js';\nexport { default as initial } from './initial.js';\nexport { default as last } from './last.js';\nexport { default as rest,\n         default as tail,\n         default as drop } from './rest.js';\nexport { default as compact } from './compact.js';\nexport { default as flatten } from './flatten.js';\nexport { default as without } from './without.js';\nexport { default as uniq,\n         default as unique } from './uniq.js';\nexport { default as union } from './union.js';\nexport { default as intersection } from './intersection.js';\nexport { default as difference } from './difference.js';\nexport { default as unzip,\n         default as transpose } from './unzip.js';\nexport { default as zip } from './zip.js';\nexport { default as object } from './object.js';\nexport { default as range } from './range.js';\nexport { default as chunk } from './chunk.js';\n\n// OOP\n// ---\n// These modules support the \"object-oriented\" calling style. See also\n// `underscore.js` and `index-default.js`.\nexport { default as mixin } from './mixin.js';\nexport { default } from './underscore-array-methods.js';\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","// ESM Exports\n// ===========\n// This module is the package entry point for ES module users. In other words,\n// it is the module they are interfacing with when they import from the whole\n// package instead of from a submodule, like this:\n//\n// ```js\n// import { map } from 'underscore';\n// ```\n//\n// The difference with `./index-default`, which is the package entry point for\n// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and\n// default exports are considered to be siblings, so when you have a default\n// export, its properties are not automatically available as named exports. For\n// this reason, we re-export the named exports in addition to providing the same\n// default export as in `./index-default`.\nexport { default } from './index-default.js';\nexport * from './index.js';\n","//     Backbone.js 1.6.1\n\n//     (c) 2010-2024 Jeremy Ashkenas and DocumentCloud\n//     Backbone may be freely distributed under the MIT license.\n//     For all details and documentation:\n//     http://backbonejs.org\n\n(function(factory) {\n\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 ||\n            typeof global == 'object' && global.global === global && global;\n\n  // Set up Backbone appropriately for the environment. Start with AMD.\n  if (typeof define === 'function' && define.amd) {\n    define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n      // Export global even in AMD case in case this script is loaded with\n      // others that may still expect a global Backbone.\n      root.Backbone = factory(root, exports, _, $);\n    });\n\n  // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n  } else if (typeof exports !== 'undefined') {\n    var _ = require('underscore'), $;\n    try { $ = require('jquery'); } catch (e) {}\n    factory(root, exports, _, $);\n\n  // Finally, as a browser global.\n  } else {\n    root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);\n  }\n\n})(function(root, Backbone, _, $) {\n\n  // Initial Setup\n  // -------------\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;\n\n  // Create a local reference to a common array method we'll want to use later.\n  var slice = Array.prototype.slice;\n\n  // Current version of the library. Keep in sync with `package.json`.\n  Backbone.VERSION = '1.6.1';\n\n  // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n  // the `$` variable.\n  Backbone.$ = $;\n\n  // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n  // to its previous owner. Returns a reference to this Backbone object.\n  Backbone.noConflict = function() {\n    root.Backbone = previousBackbone;\n    return this;\n  };\n\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  Backbone.emulateHTTP = false;\n\n  // 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  Backbone.emulateJSON = false;\n\n  // Backbone.Events\n  // ---------------\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  var Events = Backbone.Events = {};\n\n  // Regular expression used to split event strings.\n  var eventSplitter = /\\s+/;\n\n  // A private global variable to share between listeners and listenees.\n  var _listening;\n\n  // 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  var eventsApi = function(iteratee, events, name, callback, opts) {\n    var i = 0, names;\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      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    return events;\n  };\n\n  // Bind an event to a `callback` function. Passing `\"all\"` will bind\n  // the callback to all events fired.\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;\n      // Allow the listening to use a counter, instead of tracking\n      // callbacks for library interop\n      _listening.interop = false;\n    }\n\n    return this;\n  };\n\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  Events.listenTo = function(obj, name, callback) {\n    if (!obj) return this;\n    var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n    var listeningTo = this._listeningTo || (this._listeningTo = {});\n    var listening = _listening = listeningTo[id];\n\n    // This object is not listening to any other events on `obj` yet.\n    // Setup the necessary references to track the listening callbacks.\n    if (!listening) {\n      this._listenId || (this._listenId = _.uniqueId('l'));\n      listening = _listening = listeningTo[id] = new Listening(this, obj);\n    }\n\n    // Bind callbacks on obj.\n    var error = tryCatchOn(obj, name, callback, this);\n    _listening = void 0;\n\n    if (error) throw error;\n    // If the target obj is not Backbone.Events, track events manually.\n    if (listening.interop) listening.on(name, callback);\n\n    return this;\n  };\n\n  // The reducing API that adds a callback to the `events` object.\n  var onApi = function(events, name, callback, options) {\n    if (callback) {\n      var handlers = events[name] || (events[name] = []);\n      var context = options.context, ctx = options.ctx, listening = options.listening;\n      if (listening) listening.count++;\n\n      handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n    }\n    return events;\n  };\n\n  // An try-catch guarded #on function, to prevent poisoning the global\n  // `_listening` variable.\n  var tryCatchOn = function(obj, name, callback, context) {\n    try {\n      obj.on(name, callback, context);\n    } catch (e) {\n      return e;\n    }\n  };\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  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\n    return this;\n  };\n\n  // Tell this object to stop listening to either specific events ... or\n  // to every object it's currently listening to.\n  Events.stopListening = function(obj, name, callback) {\n    var listeningTo = this._listeningTo;\n    if (!listeningTo) return this;\n\n    var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n    for (var i = 0; i < ids.length; i++) {\n      var listening = listeningTo[ids[i]];\n\n      // If listening doesn't exist, this object is not currently\n      // listening to obj. Break out early.\n      if (!listening) break;\n\n      listening.obj.off(name, callback, this);\n      if (listening.interop) listening.off(name, callback);\n    }\n    if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n\n    return this;\n  };\n\n  // The reducing API that removes a callback from the `events` object.\n  var offApi = function(events, name, callback, options) {\n    if (!events) return;\n\n    var context = options.context, listeners = options.listeners;\n    var i = 0, names;\n\n    // Delete all event listeners and \"drop\" events.\n    if (!name && !context && !callback) {\n      for (names = _.keys(listeners); i < names.length; i++) {\n        listeners[names[i]].cleanup();\n      }\n      return;\n    }\n\n    names = name ? [name] : _.keys(events);\n    for (; i < names.length; i++) {\n      name = names[i];\n      var handlers = events[name];\n\n      // Bail out if there are no events stored.\n      if (!handlers) break;\n\n      // Find any remaining events.\n      var remaining = [];\n      for (var j = 0; j < handlers.length; j++) {\n        var handler = handlers[j];\n        if (\n          callback && callback !== handler.callback &&\n            callback !== handler.callback._callback ||\n              context && context !== handler.context\n        ) {\n          remaining.push(handler);\n        } else {\n          var listening = handler.listening;\n          if (listening) listening.off(name, callback);\n        }\n      }\n\n      // Replace events if there are any remaining.  Otherwise, clean up.\n      if (remaining.length) {\n        events[name] = remaining;\n      } else {\n        delete events[name];\n      }\n    }\n\n    return events;\n  };\n\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  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  };\n\n  // Inversion-of-control versions of `once`.\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  };\n\n  // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n  // `offer` unbinds the `onceWrapper` after it has been called.\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      once._callback = callback;\n    }\n    return map;\n  };\n\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  Events.trigger = function(name) {\n    if (!this._events) return this;\n\n    var length = Math.max(0, arguments.length - 1);\n    var args = Array(length);\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  };\n\n  // Handles triggering the appropriate event callbacks.\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    return objEvents;\n  };\n\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  var triggerEvents = function(events, args) {\n    var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n    switch (args.length) {\n      case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n      case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n      case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n      case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n      default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n    }\n  };\n\n  // A listening class that tracks and cleans up memory bindings\n  // when all callbacks have been offed.\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;\n\n  // 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  Listening.prototype.off = function(name, callback) {\n    var cleanup;\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    if (cleanup) this.cleanup();\n  };\n\n  // Cleans up memory bindings between the listener and the listenee.\n  Listening.prototype.cleanup = function() {\n    delete this.listener._listeningTo[this.obj._listenId];\n    if (!this.interop) delete this.obj._listeners[this.id];\n  };\n\n  // Aliases for backwards compatibility.\n  Events.bind   = Events.on;\n  Events.unbind = Events.off;\n\n  // Allow the `Backbone` object to serve as a global event bus, for folks who\n  // want global \"pubsub\" in a convenient place.\n  _.extend(Backbone, Events);\n\n  // Backbone.Model\n  // --------------\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\n  // Create a new model with the specified attributes. A client id (`cid`)\n  // is automatically generated and assigned for you.\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    var defaults = _.result(this, 'defaults');\n\n    // Just _.defaults would work fine, but the additional _.extends\n    // is in there for historical reasons. See #3843.\n    attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n\n    this.set(attrs, options);\n    this.changed = {};\n    this.initialize.apply(this, arguments);\n  };\n\n  // Attach all inheritable methods to the Model prototype.\n  _.extend(Model.prototype, Events, {\n\n    // A hash of attributes whose current and previous value differ.\n    changed: null,\n\n    // The value returned during the last failed validation.\n    validationError: null,\n\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\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\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\n    // Initialize is an empty function by default. Override it with your own\n    // initialization logic.\n    initialize: function(){},\n\n    // Return a copy of the model's `attributes` object.\n    toJSON: function(options) {\n      return _.clone(this.attributes);\n    },\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\n    // Get the value of an attribute.\n    get: function(attr) {\n      return this.attributes[attr];\n    },\n\n    // Get the HTML-escaped value of an attribute.\n    escape: function(attr) {\n      return _.escape(this.get(attr));\n    },\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\n    // Special-cased proxy to underscore's `_.matches` method.\n    matches: function(attrs) {\n      return !!_.iteratee(attrs, this)(this.attributes);\n    },\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;\n\n      // Handle both `\"key\", value` and `{key: value}` -style arguments.\n      var attrs;\n      if (typeof key === 'object') {\n        attrs = key;\n        options = val;\n      } else {\n        (attrs = {})[key] = val;\n      }\n\n      options || (options = {});\n\n      // Run validation.\n      if (!this._validate(attrs, options)) return false;\n\n      // Extract attributes and options.\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;\n\n      // For each `set` attribute, update or delete the current value.\n      for (var attr in attrs) {\n        val = attrs[attr];\n        if (!_.isEqual(current[attr], val)) changes.push(attr);\n        if (!_.isEqual(prev[attr], val)) {\n          changed[attr] = val;\n        } else {\n          delete changed[attr];\n        }\n        unset ? delete current[attr] : current[attr] = val;\n      }\n\n      // Update the `id`.\n      if (this.idAttribute in attrs) {\n        var prevId = this.id;\n        this.id = this.get(this.idAttribute);\n        if (this.id !== prevId) {\n          this.trigger('changeId', this, prevId, options);\n        }\n      }\n\n      // Trigger all relevant attribute changes.\n      if (!silent) {\n        if (changes.length) this._pending = options;\n        for (var i = 0; i < changes.length; i++) {\n          this.trigger('change:' + changes[i], this, current[changes[i]], options);\n        }\n      }\n\n      // You might be wondering why there's a `while` loop here. Changes can\n      // be recursively nested within `\"change\"` events.\n      if (changing) return this;\n      if (!silent) {\n        while (this._pending) {\n          options = this._pending;\n          this._pending = false;\n          this.trigger('change', this, options);\n        }\n      }\n      this._pending = false;\n      this._changing = false;\n      return this;\n    },\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, {unset: true}));\n    },\n\n    // Clear all attributes on the model, firing `\"change\"`.\n    clear: function(options) {\n      var attrs = {};\n      for (var key in this.attributes) attrs[key] = void 0;\n      return this.set(attrs, _.extend({}, options, {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\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      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      return hasChanged ? changed : false;\n    },\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\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\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({parse: true}, options);\n      var model = this;\n      var success = options.success;\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      wrapError(this, options);\n      return this.sync('read', this, options);\n    },\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      if (key == null || typeof key === 'object') {\n        attrs = key;\n        options = val;\n      } else {\n        (attrs = {})[key] = val;\n      }\n\n      options = _.extend({validate: true, parse: true}, options);\n      var wait = options.wait;\n\n      // 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      if (attrs && !wait) {\n        if (!this.set(attrs, options)) return false;\n      } else if (!this._validate(attrs, options)) {\n        return false;\n      }\n\n      // After a successful server-side save, the client is (optionally)\n      // updated with the server-side state.\n      var model = this;\n      var success = options.success;\n      var attributes = this.attributes;\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      wrapError(this, options);\n\n      // Set temporary attributes if `{wait: true}` to properly find new ids.\n      if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\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);\n\n      // Restore attributes.\n      this.attributes = attributes;\n\n      return xhr;\n    },\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      if (this.isNew()) {\n        _.defer(options.success);\n      } else {\n        wrapError(this, options);\n        xhr = this.sync('delete', this, options);\n      }\n      if (!wait) destroy();\n      return xhr;\n    },\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 =\n        _.result(this, 'urlRoot') ||\n        _.result(this.collection, 'url') ||\n        urlError();\n      if (this.isNew()) return base;\n      var id = this.get(this.idAttribute);\n      return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n    },\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\n    // Create a new model with identical attributes to this one.\n    clone: function() {\n      return new this.constructor(this.attributes);\n    },\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\n    // Check if the model is currently in a valid state.\n    isValid: function(options) {\n      return this._validate({}, _.extend({}, options, {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, {validationError: error}));\n      return false;\n    }\n\n  });\n\n  // Backbone.Collection\n  // -------------------\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\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  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    this._reset();\n    this.initialize.apply(this, arguments);\n    if (models) this.reset(models, _.extend({silent: true}, options));\n  };\n\n  // Default options for `Collection#set`.\n  var setOptions = {add: true, remove: true, merge: true};\n  var addOptions = {add: true, remove: false};\n\n  // Splices `insert` into `array` at index `at`.\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    for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n    for (i = 0; i < length; i++) array[i + at] = insert[i];\n    for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n  };\n\n  // Define the Collection's inheritable methods.\n  _.extend(Collection.prototype, Events, {\n\n    // The default model for a collection is just a **Backbone.Model**.\n    // This should be overridden in most cases.\n    model: Model,\n\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 Collection.\n    preinitialize: function(){},\n\n    // Initialize is an empty function by default. Override it with your own\n    // initialization logic.\n    initialize: function(){},\n\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) { return model.toJSON(options); });\n    },\n\n    // Proxy `Backbone.sync` by default.\n    sync: function() {\n      return Backbone.sync.apply(this, arguments);\n    },\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({merge: false}, options, addOptions));\n    },\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      var removed = this._removeModels(models, options);\n      if (!options.silent && removed.length) {\n        options.changes = {added: [], merged: [], removed: removed};\n        this.trigger('update', this, options);\n      }\n      return singular ? removed[0] : removed;\n    },\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\n      options = _.extend({}, setOptions, options);\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\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\n      var set = [];\n      var toAdd = [];\n      var toMerge = [];\n      var toRemove = [];\n      var modelMap = {};\n\n      var add = options.add;\n      var merge = options.merge;\n      var remove = options.remove;\n\n      var sort = false;\n      var sortable = this.comparator && at == null && options.sort !== false;\n      var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n      // Turn bare objects into model references, and prevent invalid models\n      // from being added.\n      var model, i;\n      for (i = 0; i < models.length; i++) {\n        model = models[i];\n\n        // If a duplicate is found, prevent it from being added and\n        // optionally merge it into the existing model.\n        var existing = this.get(model);\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          if (!modelMap[existing.cid]) {\n            modelMap[existing.cid] = true;\n            set.push(existing);\n          }\n          models[i] = existing;\n\n        // 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          if (model) {\n            toAdd.push(model);\n            this._addReference(model, options);\n            modelMap[model.cid] = true;\n            set.push(model);\n          }\n        }\n      }\n\n      // Remove stale models.\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        if (toRemove.length) this._removeModels(toRemove, options);\n      }\n\n      // See if sorting is needed, update `length` and splice in new models.\n      var orderChanged = false;\n      var replace = !sortable && add && remove;\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      }\n\n      // Silently sort the collection if appropriate.\n      if (sort) this.sort({silent: true});\n\n      // Unless silenced, it's time to fire all appropriate add/sort/update events.\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        if (sort || orderChanged) this.trigger('sort', this, options);\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      }\n\n      // Return the added (or merged) model (or models).\n      return singular ? models[0] : models;\n    },\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      for (var i = 0; i < this.models.length; i++) {\n        this._removeReference(this.models[i], options);\n      }\n      options.previousModels = this.models;\n      this._reset();\n      models = this.add(models, _.extend({silent: true}, options));\n      if (!options.silent) this.trigger('reset', this, options);\n      return models;\n    },\n\n    // Add a model to the end of the collection.\n    push: function(model, options) {\n      return this.add(model, _.extend({at: this.length}, options));\n    },\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\n    // Add a model to the beginning of the collection.\n    unshift: function(model, options) {\n      return this.add(model, _.extend({at: 0}, options));\n    },\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\n    // Slice out a sub-array of models from the collection.\n    slice: function() {\n      return slice.apply(this.models, arguments);\n    },\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] ||\n        this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj, obj.idAttribute)] ||\n        obj.cid && this._byId[obj.cid];\n    },\n\n    // Returns `true` if the model is in the collection.\n    has: function(obj) {\n      return this.get(obj) != null;\n    },\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\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\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\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\n      var length = comparator.length;\n      if (_.isFunction(comparator)) comparator = comparator.bind(this);\n\n      // Run sort based on type of `comparator`.\n      if (length === 1 || _.isString(comparator)) {\n        this.models = this.sortBy(comparator);\n      } else {\n        this.models.sort(comparator);\n      }\n      if (!options.silent) this.trigger('sort', this, options);\n      return this;\n    },\n\n    // Pluck an attribute from each model in the collection.\n    pluck: function(attr) {\n      return this.map(attr + '');\n    },\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({parse: true}, options);\n      var success = options.success;\n      var collection = this;\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      wrapError(this, options);\n      return this.sync('read', this, options);\n    },\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      options.success = function(m, resp, callbackOpts) {\n        if (wait) {\n          m.off('error', collection._forwardPristineError, collection);\n          collection.add(m, callbackOpts);\n        }\n        if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n      };\n      // In case of wait:true, our collection is not listening to any\n      // of the model's events yet, so it will not forward the error\n      // event. In this special case, we need to listen for it\n      // separately and handle the event just once.\n      // (The reason we don't need to do this for the sync event is\n      // in the success handler above: we add the model first, which\n      // causes the collection to listen, and then invoke the callback\n      // that triggers the event.)\n      if (wait) {\n        model.once('error', this._forwardPristineError, this);\n      }\n      model.save(null, options);\n      return model;\n    },\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\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\n    // Define how to uniquely identify models in the collection.\n    modelId: function(attrs, idAttribute) {\n      return attrs[idAttribute || this.model.prototype.idAttribute || 'id'];\n    },\n\n    // Get an iterator of all models in this collection.\n    values: function() {\n      return new CollectionIterator(this, ITERATOR_VALUES);\n    },\n\n    // Get an iterator of all model IDs in this collection.\n    keys: function() {\n      return new CollectionIterator(this, ITERATOR_KEYS);\n    },\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\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\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      options = options ? _.clone(options) : {};\n      options.collection = this;\n\n      var model;\n      if (this.model.prototype) {\n        model = new this.model(attrs, options);\n      } else {\n        // ES class methods didn't have prototype\n        model = this.model(attrs, options);\n      }\n\n      if (!model.validationError) return model;\n      this.trigger('invalid', this, model.validationError, options);\n      return false;\n    },\n\n    // Internal method called by both remove and set.\n    _removeModels: function(models, options) {\n      var removed = [];\n      for (var i = 0; i < models.length; i++) {\n        var model = this.get(models[i]);\n        if (!model) continue;\n\n        var index = this.indexOf(model);\n        this.models.splice(index, 1);\n        this.length--;\n\n        // Remove references before triggering 'remove' event to prevent an\n        // infinite loop. #3693\n        delete this._byId[model.cid];\n        var id = this.modelId(model.attributes, model.idAttribute);\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        this._removeReference(model, options);\n      }\n      if (models.length > 0 && !options.silent) delete options.index;\n      return removed;\n    },\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\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, model.idAttribute);\n      if (id != null) this._byId[id] = model;\n      model.on('all', this._onModelEvent, this);\n    },\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, model.idAttribute);\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\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        if (event === 'changeId') {\n          var prevId = this.modelId(model.previousAttributes(), model.idAttribute);\n          var id = this.modelId(model.attributes, model.idAttribute);\n          if (prevId != null) delete this._byId[prevId];\n          if (id != null) this._byId[id] = model;\n        }\n      }\n      this.trigger.apply(this, arguments);\n    },\n\n    // Internal callback method used in `create`. It serves as a\n    // stand-in for the `_onModelEvent` method, which is not yet bound\n    // during the `wait` period of the `create` call. We still want to\n    // forward any `'error'` event at the end of the `wait` period,\n    // hence a customized callback.\n    _forwardPristineError: function(model, collection, options) {\n      // Prevent double forward if the model was already in the\n      // collection before the call to `create`.\n      if (this.has(model)) return;\n      this._onModelEvent('error', model, collection, options);\n    }\n  });\n\n  // Defining an @@iterator method implements JavaScript's Iterable protocol.\n  // In modern ES2015 browsers, this value is found at Symbol.iterator.\n  /* global Symbol */\n  var $$iterator = typeof Symbol === 'function' && Symbol.iterator;\n  if ($$iterator) {\n    Collection.prototype[$$iterator] = Collection.prototype.values;\n  }\n\n  // CollectionIterator\n  // ------------------\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  var CollectionIterator = function(collection, kind) {\n    this._collection = collection;\n    this._kind = kind;\n    this._index = 0;\n  };\n\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  var ITERATOR_VALUES = 1;\n  var ITERATOR_KEYS = 2;\n  var ITERATOR_KEYSVALUES = 3;\n\n  // All Iterators should themselves be Iterable.\n  if ($$iterator) {\n    CollectionIterator.prototype[$$iterator] = function() {\n      return this;\n    };\n  }\n\n  CollectionIterator.prototype.next = function() {\n    if (this._collection) {\n\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        this._index++;\n\n        // Construct a value depending on what kind of values should be iterated.\n        var value;\n        if (this._kind === ITERATOR_VALUES) {\n          value = model;\n        } else {\n          var id = this._collection.modelId(model.attributes, model.idAttribute);\n          if (this._kind === ITERATOR_KEYS) {\n            value = id;\n          } else { // ITERATOR_KEYSVALUES\n            value = [id, model];\n          }\n        }\n        return {value: value, done: false};\n      }\n\n      // Once exhausted, remove the reference to the collection so future\n      // calls to the next method always return done.\n      this._collection = void 0;\n    }\n\n    return {value: void 0, done: true};\n  };\n\n  // Backbone.View\n  // -------------\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\n  // Creating a Backbone.View creates its initial element outside of the DOM,\n  // if an existing element is not provided...\n  var View = Backbone.View = function(options) {\n    this.cid = _.uniqueId('view');\n    this.preinitialize.apply(this, arguments);\n    _.extend(this, _.pick(options, viewOptions));\n    this._ensureElement();\n    this.initialize.apply(this, arguments);\n  };\n\n  // Cached regex to split keys for `delegate`.\n  var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n  // List of view options to be set as properties.\n  var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n  // Set up all inheritable **Backbone.View** properties and methods.\n  _.extend(View.prototype, Events, {\n\n    // The default `tagName` of a View's element is `\"div\"`.\n    tagName: 'div',\n\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\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\n    // Initialize is an empty function by default. Override it with your own\n    // initialization logic.\n    initialize: function(){},\n\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\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      this.stopListening();\n      return this;\n    },\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\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      this._setElement(element);\n      this.delegateEvents();\n      return this;\n    },\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\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      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      return this;\n    },\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\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\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\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\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        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        this._setAttributes(attrs);\n      } else {\n        this.setElement(_.result(this, 'el'));\n      }\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\n  });\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  var addMethod = function(base, length, method, attribute) {\n    switch (length) {\n      case 1: return function() {\n        return base[method](this[attribute]);\n      };\n      case 2: return function(value) {\n        return base[method](this[attribute], value);\n      };\n      case 3: return function(iteratee, context) {\n        return base[method](this[attribute], cb(iteratee, this), context);\n      };\n      case 4: return function(iteratee, defaultVal, context) {\n        return base[method](this[attribute], cb(iteratee, this), defaultVal, context);\n      };\n      default: 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  };\n\n  // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\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) { return model.get(iteratee); };\n    return iteratee;\n  };\n  var modelMatcher = function(attrs) {\n    var matcher = _.matches(attrs);\n    return function(model) {\n      return matcher(model.attributes);\n    };\n  };\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  var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n    foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n    select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n    contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n    head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n    without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n    isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n    sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n\n  // Underscore methods that we want to implement on the Model, mapped to the\n  // number of arguments they take.\n  var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n    omit: 0, chain: 1, isEmpty: 1};\n\n  // Mix in each Underscore method as a proxy to `Collection#models`.\n\n  _.each([\n    [Collection, collectionMethods, 'models'],\n    [Model, modelMethods, 'attributes']\n  ], 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      addUnderscoreMethods(Base, obj, mappings, attribute);\n    };\n\n    addUnderscoreMethods(Base, _, methods, attribute);\n  });\n\n  // Backbone.sync\n  // -------------\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  Backbone.sync = function(method, model, options) {\n    var type = methodMap[method];\n\n    // Default options, unless specified.\n    _.defaults(options || (options = {}), {\n      emulateHTTP: Backbone.emulateHTTP,\n      emulateJSON: Backbone.emulateJSON\n    });\n\n    // Default JSON-request options.\n    var params = {type: type, dataType: 'json'};\n\n    // Ensure that we have a URL.\n    if (!options.url) {\n      params.url = _.result(model, 'url') || urlError();\n    }\n\n    // Ensure that we have the appropriate request data.\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    }\n\n    // For older servers, emulate JSON by encoding the request into an HTML-form.\n    if (options.emulateJSON) {\n      params.contentType = 'application/x-www-form-urlencoded';\n      params.data = params.data ? {model: params.data} : {};\n    }\n\n    // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n    // And an `X-HTTP-Method-Override` header.\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      options.beforeSend = function(xhr) {\n        xhr.setRequestHeader('X-HTTP-Method-Override', type);\n        if (beforeSend) return beforeSend.apply(this, arguments);\n      };\n    }\n\n    // Don't process data on a non-GET request.\n    if (params.type !== 'GET' && !options.emulateJSON) {\n      params.processData = false;\n    }\n\n    // Pass along `textStatus` and `errorThrown` from jQuery.\n    var error = options.error;\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    };\n\n    // Make the request, allowing the user to override any Ajax options.\n    var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n    model.trigger('request', model, xhr, options);\n    return xhr;\n  };\n\n  // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n  var methodMap = {\n    'create': 'POST',\n    'update': 'PUT',\n    'patch': 'PATCH',\n    'delete': 'DELETE',\n    'read': 'GET'\n  };\n\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  Backbone.ajax = function() {\n    return Backbone.$.ajax.apply(Backbone.$, arguments);\n  };\n\n  // Backbone.Router\n  // ---------------\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  var Router = Backbone.Router = function(options) {\n    options || (options = {});\n    this.preinitialize.apply(this, arguments);\n    if (options.routes) this.routes = options.routes;\n    this._bindRoutes();\n    this.initialize.apply(this, arguments);\n  };\n\n  // Cached regular expressions for matching named param parts and splatted\n  // parts of route strings.\n  var optionalParam = /\\((.*?)\\)/g;\n  var namedParam    = /(\\(\\?)?:\\w+/g;\n  var splatParam    = /\\*\\w+/g;\n  var escapeRegExp  = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n  // Set up all inheritable **Backbone.Router** properties and methods.\n  _.extend(Router.prototype, Events, {\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 Router.\n    preinitialize: function(){},\n\n    // Initialize is an empty function by default. Override it with your own\n    // initialization logic.\n    initialize: function(){},\n\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      if (_.isFunction(name)) {\n        callback = name;\n        name = '';\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        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\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\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\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      var route, routes = _.keys(this.routes);\n      while ((route = routes.pop()) != null) {\n        this.route(route, this.routes[route]);\n      }\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, '\\\\$&')\n      .replace(optionalParam, '(?:$1)?')\n      .replace(namedParam, function(match, optional) {\n        return optional ? match : '([^/?]+)';\n      })\n      .replace(splatParam, '([^?]*?)');\n      return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n    },\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\n  });\n\n  // Backbone.History\n  // ----------------\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  var History = Backbone.History = function() {\n    this.handlers = [];\n    this.checkUrl = this.checkUrl.bind(this);\n\n    // Ensure that `History` can be used outside of the browser.\n    if (typeof window !== 'undefined') {\n      this.location = window.location;\n      this.history = window.history;\n    }\n  };\n\n  // Cached regex for stripping a leading hash/slash and trailing space.\n  var routeStripper = /^[#\\/]|\\s+$/g;\n\n  // Cached regex for stripping leading and trailing slashes.\n  var rootStripper = /^\\/+|\\/+$/g;\n\n  // Cached regex for stripping urls of hash.\n  var pathStripper = /#.*$/;\n\n  // Has the history handling already been started?\n  History.started = false;\n\n  // Set up all inheritable **Backbone.History** properties and methods.\n  _.extend(History.prototype, Events, {\n\n    // The default interval to poll for hash changes, if necessary, is\n    // twenty times a second.\n    interval: 50,\n\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\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\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\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\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\n    // Get the pathname and search params, without the root.\n    getPath: function() {\n      var path = this.decodeFragment(\n        this.location.pathname + this.getSearch()\n      ).slice(this.root.length - 1);\n      return path.charAt(0) === '/' ? path.slice(1) : path;\n    },\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      return fragment.replace(routeStripper, '');\n    },\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;\n\n      // Figure out the initial configuration. Do we need an iframe?\n      // Is pushState desired ... is it available?\n      this.options          = _.extend({root: '/'}, this.options, options);\n      this.root             = this.options.root;\n      this._trailingSlash   = this.options.trailingSlash;\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();\n\n      // Normalize root to always include a leading and trailing slash.\n      this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n      // Transition from hashChange to pushState or vice versa if both are\n      // requested.\n      if (this._wantsHashChange && this._wantsPushState) {\n\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());\n          // Return immediately as browser will do redirect to new url\n          return true;\n\n        // 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(), {replace: true});\n        }\n\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      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;\n        // Using `appendChild` will throw on IE < 9 if the document is not ready.\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      }\n\n      // Add a cross-platform `addEventListener` shim for older browsers.\n      var addEventListener = window.addEventListener || function(eventName, listener) {\n        return attachEvent('on' + eventName, listener);\n      };\n\n      // Depending on whether we're using pushState or hashes, and whether\n      // 'onhashchange' is supported, determine how we check the URL state.\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\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      };\n\n      // Remove window listeners.\n      if (this._usePushState) {\n        removeEventListener('popstate', this.checkUrl, false);\n      } else if (this._useHashChange && !this.iframe) {\n        removeEventListener('hashchange', this.checkUrl, false);\n      }\n\n      // Clean up the iframe if necessary.\n      if (this.iframe) {\n        document.body.removeChild(this.iframe);\n        this.iframe = null;\n      }\n\n      // Some environments will throw when clearing an undefined interval.\n      if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n      History.started = false;\n    },\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({route: route, 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();\n\n      // If the user pressed the back button, the iframe's hash will have\n      // changed and we should use that for comparison.\n      if (current === this.fragment && this.iframe) {\n        current = this.getHash(this.iframe.contentWindow);\n      }\n\n      if (current === this.fragment) {\n        if (!this.matchRoot()) return this.notfound();\n        return false;\n      }\n      if (this.iframe) this.navigate(current);\n      this.loadUrl();\n    },\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 this.notfound();\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      }) || this.notfound();\n    },\n\n    // When no route could be matched, this method is called internally to\n    // trigger the `'notfound'` event. It returns `false` so that it can be used\n    // in tail position.\n    notfound: function() {\n      this.trigger('notfound');\n      return false;\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 = {trigger: !!options};\n\n      // Normalize the fragment.\n      fragment = this.getFragment(fragment || '');\n\n      // Strip trailing slash on the root unless _trailingSlash is true\n      var rootPath = this.root;\n      if (!this._trailingSlash && (fragment === '' || fragment.charAt(0) === '?')) {\n        rootPath = rootPath.slice(0, -1) || '/';\n      }\n      var url = rootPath + fragment;\n\n      // Strip the fragment of the query and hash for matching.\n      fragment = fragment.replace(pathStripper, '');\n\n      // Decode for matching.\n      var decodedFragment = this.decodeFragment(fragment);\n\n      if (this.fragment === decodedFragment) return;\n      this.fragment = decodedFragment;\n\n      // If pushState is available, we use it to set the fragment as a real URL.\n      if (this._usePushState) {\n        this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n      // 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        if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n          var iWindow = this.iframe.contentWindow;\n\n          // 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          if (!options.replace) {\n            iWindow.document.open();\n            iWindow.document.close();\n          }\n\n          this._updateHash(iWindow.location, fragment, options.replace);\n        }\n\n      // If you've told us that you explicitly don't want fallback hashchange-\n      // based history, then `navigate` becomes a page refresh.\n      } else {\n        return this.location.assign(url);\n      }\n      if (options.trigger) return this.loadUrl(fragment);\n    },\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\n  });\n\n  // Create the default Backbone.history.\n  Backbone.history = new History;\n\n  // Helpers\n  // -------\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  var extend = function(protoProps, staticProps) {\n    var parent = this;\n    var child;\n\n    // 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    if (protoProps && _.has(protoProps, 'constructor')) {\n      child = protoProps.constructor;\n    } else {\n      child = function(){ return parent.apply(this, arguments); };\n    }\n\n    // Add static properties to the constructor function, if supplied.\n    _.extend(child, parent, staticProps);\n\n    // Set the prototype chain to inherit from `parent`, without calling\n    // `parent`'s constructor function and add the prototype properties.\n    child.prototype = _.create(parent.prototype, protoProps);\n    child.prototype.constructor = child;\n\n    // Set a convenience property in case the parent's prototype is needed\n    // later.\n    child.__super__ = parent.prototype;\n\n    return child;\n  };\n\n  // Set up inheritance for the model, collection, router, view and history.\n  Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n  // Throw an error when a URL is needed, and none is supplied.\n  var urlError = function() {\n    throw new Error('A \"url\" property or function must be specified');\n  };\n\n  // Wrap an optional error callback with a fallback error event.\n  var wrapError = function(model, options) {\n    var error = options.error;\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  // Provide useful information when things go wrong. This method is not meant\n  // to be used directly; it merely provides the necessary introspection for the\n  // external `debugInfo` function.\n  Backbone._debug = function() {\n    return {root: root, _: _};\n  };\n\n  return Backbone;\n});\n","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\nvar hookCallback;\n\nfunction hooks() {\n    return hookCallback.apply(null, arguments);\n}\n\n// This is done to register the method called with moment()\n// without creating circular dependencies.\nfunction setHookCallback(callback) {\n    hookCallback = callback;\n}\n\nfunction isArray(input) {\n    return (\n        input instanceof Array ||\n        Object.prototype.toString.call(input) === '[object Array]'\n    );\n}\n\nfunction isObject(input) {\n    // IE8 will treat undefined and null as object if it wasn't for\n    // input != null\n    return (\n        input != null &&\n        Object.prototype.toString.call(input) === '[object Object]'\n    );\n}\n\nfunction hasOwnProp(a, b) {\n    return Object.prototype.hasOwnProperty.call(a, b);\n}\n\nfunction isObjectEmpty(obj) {\n    if (Object.getOwnPropertyNames) {\n        return Object.getOwnPropertyNames(obj).length === 0;\n    } else {\n        var k;\n        for (k in obj) {\n            if (hasOwnProp(obj, k)) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n\nfunction isUndefined(input) {\n    return input === void 0;\n}\n\nfunction isNumber(input) {\n    return (\n        typeof input === 'number' ||\n        Object.prototype.toString.call(input) === '[object Number]'\n    );\n}\n\nfunction isDate(input) {\n    return (\n        input instanceof Date ||\n        Object.prototype.toString.call(input) === '[object Date]'\n    );\n}\n\nfunction map(arr, fn) {\n    var res = [],\n        i,\n        arrLen = arr.length;\n    for (i = 0; i < arrLen; ++i) {\n        res.push(fn(arr[i], i));\n    }\n    return res;\n}\n\nfunction extend(a, b) {\n    for (var i in b) {\n        if (hasOwnProp(b, i)) {\n            a[i] = b[i];\n        }\n    }\n\n    if (hasOwnProp(b, 'toString')) {\n        a.toString = b.toString;\n    }\n\n    if (hasOwnProp(b, 'valueOf')) {\n        a.valueOf = b.valueOf;\n    }\n\n    return a;\n}\n\nfunction createUTC(input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, true).utc();\n}\n\nfunction defaultParsingFlags() {\n    // We need to deep clone this object.\n    return {\n        empty: false,\n        unusedTokens: [],\n        unusedInput: [],\n        overflow: -2,\n        charsLeftOver: 0,\n        nullInput: false,\n        invalidEra: null,\n        invalidMonth: null,\n        invalidFormat: false,\n        userInvalidated: false,\n        iso: false,\n        parsedDateParts: [],\n        era: null,\n        meridiem: null,\n        rfc2822: false,\n        weekdayMismatch: false,\n    };\n}\n\nfunction getParsingFlags(m) {\n    if (m._pf == null) {\n        m._pf = defaultParsingFlags();\n    }\n    return m._pf;\n}\n\nvar some;\nif (Array.prototype.some) {\n    some = Array.prototype.some;\n} else {\n    some = function (fun) {\n        var t = Object(this),\n            len = t.length >>> 0,\n            i;\n\n        for (i = 0; i < len; i++) {\n            if (i in t && fun.call(this, t[i], i, t)) {\n                return true;\n            }\n        }\n\n        return false;\n    };\n}\n\nfunction isValid(m) {\n    var flags = null,\n        parsedParts = false,\n        isNowValid = m._d && !isNaN(m._d.getTime());\n    if (isNowValid) {\n        flags = getParsingFlags(m);\n        parsedParts = some.call(flags.parsedDateParts, function (i) {\n            return i != null;\n        });\n        isNowValid =\n            flags.overflow < 0 &&\n            !flags.empty &&\n            !flags.invalidEra &&\n            !flags.invalidMonth &&\n            !flags.invalidWeekday &&\n            !flags.weekdayMismatch &&\n            !flags.nullInput &&\n            !flags.invalidFormat &&\n            !flags.userInvalidated &&\n            (!flags.meridiem || (flags.meridiem && parsedParts));\n        if (m._strict) {\n            isNowValid =\n                isNowValid &&\n                flags.charsLeftOver === 0 &&\n                flags.unusedTokens.length === 0 &&\n                flags.bigHour === undefined;\n        }\n    }\n    if (Object.isFrozen == null || !Object.isFrozen(m)) {\n        m._isValid = isNowValid;\n    } else {\n        return isNowValid;\n    }\n    return m._isValid;\n}\n\nfunction createInvalid(flags) {\n    var m = createUTC(NaN);\n    if (flags != null) {\n        extend(getParsingFlags(m), flags);\n    } else {\n        getParsingFlags(m).userInvalidated = true;\n    }\n\n    return m;\n}\n\n// Plugins that add properties should also add the key here (null value),\n// so we can properly clone ourselves.\nvar momentProperties = (hooks.momentProperties = []),\n    updateInProgress = false;\n\nfunction copyConfig(to, from) {\n    var i,\n        prop,\n        val,\n        momentPropertiesLen = momentProperties.length;\n\n    if (!isUndefined(from._isAMomentObject)) {\n        to._isAMomentObject = from._isAMomentObject;\n    }\n    if (!isUndefined(from._i)) {\n        to._i = from._i;\n    }\n    if (!isUndefined(from._f)) {\n        to._f = from._f;\n    }\n    if (!isUndefined(from._l)) {\n        to._l = from._l;\n    }\n    if (!isUndefined(from._strict)) {\n        to._strict = from._strict;\n    }\n    if (!isUndefined(from._tzm)) {\n        to._tzm = from._tzm;\n    }\n    if (!isUndefined(from._isUTC)) {\n        to._isUTC = from._isUTC;\n    }\n    if (!isUndefined(from._offset)) {\n        to._offset = from._offset;\n    }\n    if (!isUndefined(from._pf)) {\n        to._pf = getParsingFlags(from);\n    }\n    if (!isUndefined(from._locale)) {\n        to._locale = from._locale;\n    }\n\n    if (momentPropertiesLen > 0) {\n        for (i = 0; i < momentPropertiesLen; i++) {\n            prop = momentProperties[i];\n            val = from[prop];\n            if (!isUndefined(val)) {\n                to[prop] = val;\n            }\n        }\n    }\n\n    return to;\n}\n\n// Moment prototype object\nfunction Moment(config) {\n    copyConfig(this, config);\n    this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n    if (!this.isValid()) {\n        this._d = new Date(NaN);\n    }\n    // Prevent infinite loop in case updateOffset creates new moment\n    // objects.\n    if (updateInProgress === false) {\n        updateInProgress = true;\n        hooks.updateOffset(this);\n        updateInProgress = false;\n    }\n}\n\nfunction isMoment(obj) {\n    return (\n        obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n    );\n}\n\nfunction warn(msg) {\n    if (\n        hooks.suppressDeprecationWarnings === false &&\n        typeof console !== 'undefined' &&\n        console.warn\n    ) {\n        console.warn('Deprecation warning: ' + msg);\n    }\n}\n\nfunction deprecate(msg, fn) {\n    var firstTime = true;\n\n    return extend(function () {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(null, msg);\n        }\n        if (firstTime) {\n            var args = [],\n                arg,\n                i,\n                key,\n                argLen = arguments.length;\n            for (i = 0; i < argLen; i++) {\n                arg = '';\n                if (typeof arguments[i] === 'object') {\n                    arg += '\\n[' + i + '] ';\n                    for (key in arguments[0]) {\n                        if (hasOwnProp(arguments[0], key)) {\n                            arg += key + ': ' + arguments[0][key] + ', ';\n                        }\n                    }\n                    arg = arg.slice(0, -2); // Remove trailing comma and space\n                } else {\n                    arg = arguments[i];\n                }\n                args.push(arg);\n            }\n            warn(\n                msg +\n                    '\\nArguments: ' +\n                    Array.prototype.slice.call(args).join('') +\n                    '\\n' +\n                    new Error().stack\n            );\n            firstTime = false;\n        }\n        return fn.apply(this, arguments);\n    }, fn);\n}\n\nvar deprecations = {};\n\nfunction deprecateSimple(name, msg) {\n    if (hooks.deprecationHandler != null) {\n        hooks.deprecationHandler(name, msg);\n    }\n    if (!deprecations[name]) {\n        warn(msg);\n        deprecations[name] = true;\n    }\n}\n\nhooks.suppressDeprecationWarnings = false;\nhooks.deprecationHandler = null;\n\nfunction isFunction(input) {\n    return (\n        (typeof Function !== 'undefined' && input instanceof Function) ||\n        Object.prototype.toString.call(input) === '[object Function]'\n    );\n}\n\nfunction set(config) {\n    var prop, i;\n    for (i in config) {\n        if (hasOwnProp(config, i)) {\n            prop = config[i];\n            if (isFunction(prop)) {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n    }\n    this._config = config;\n    // Lenient ordinal parsing accepts just a number in addition to\n    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n    // TODO: Remove \"ordinalParse\" fallback in next major release.\n    this._dayOfMonthOrdinalParseLenient = new RegExp(\n        (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n            '|' +\n            /\\d{1,2}/.source\n    );\n}\n\nfunction mergeConfigs(parentConfig, childConfig) {\n    var res = extend({}, parentConfig),\n        prop;\n    for (prop in childConfig) {\n        if (hasOwnProp(childConfig, prop)) {\n            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                res[prop] = {};\n                extend(res[prop], parentConfig[prop]);\n                extend(res[prop], childConfig[prop]);\n            } else if (childConfig[prop] != null) {\n                res[prop] = childConfig[prop];\n            } else {\n                delete res[prop];\n            }\n        }\n    }\n    for (prop in parentConfig) {\n        if (\n            hasOwnProp(parentConfig, prop) &&\n            !hasOwnProp(childConfig, prop) &&\n            isObject(parentConfig[prop])\n        ) {\n            // make sure changes to properties don't modify parent config\n            res[prop] = extend({}, res[prop]);\n        }\n    }\n    return res;\n}\n\nfunction Locale(config) {\n    if (config != null) {\n        this.set(config);\n    }\n}\n\nvar keys;\n\nif (Object.keys) {\n    keys = Object.keys;\n} else {\n    keys = function (obj) {\n        var i,\n            res = [];\n        for (i in obj) {\n            if (hasOwnProp(obj, i)) {\n                res.push(i);\n            }\n        }\n        return res;\n    };\n}\n\nvar defaultCalendar = {\n    sameDay: '[Today at] LT',\n    nextDay: '[Tomorrow at] LT',\n    nextWeek: 'dddd [at] LT',\n    lastDay: '[Yesterday at] LT',\n    lastWeek: '[Last] dddd [at] LT',\n    sameElse: 'L',\n};\n\nfunction calendar(key, mom, now) {\n    var output = this._calendar[key] || this._calendar['sameElse'];\n    return isFunction(output) ? output.call(mom, now) : output;\n}\n\nfunction zeroFill(number, targetLength, forceSign) {\n    var absNumber = '' + Math.abs(number),\n        zerosToFill = targetLength - absNumber.length,\n        sign = number >= 0;\n    return (\n        (sign ? (forceSign ? '+' : '') : '-') +\n        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n        absNumber\n    );\n}\n\nvar formattingTokens =\n        /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n    localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n    formatFunctions = {},\n    formatTokenFunctions = {};\n\n// token:    'M'\n// padded:   ['MM', 2]\n// ordinal:  'Mo'\n// callback: function () { this.month() + 1 }\nfunction addFormatToken(token, padded, ordinal, callback) {\n    var func = callback;\n    if (typeof callback === 'string') {\n        func = function () {\n            return this[callback]();\n        };\n    }\n    if (token) {\n        formatTokenFunctions[token] = func;\n    }\n    if (padded) {\n        formatTokenFunctions[padded[0]] = function () {\n            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n        };\n    }\n    if (ordinal) {\n        formatTokenFunctions[ordinal] = function () {\n            return this.localeData().ordinal(\n                func.apply(this, arguments),\n                token\n            );\n        };\n    }\n}\n\nfunction removeFormattingTokens(input) {\n    if (input.match(/\\[[\\s\\S]/)) {\n        return input.replace(/^\\[|\\]$/g, '');\n    }\n    return input.replace(/\\\\/g, '');\n}\n\nfunction makeFormatFunction(format) {\n    var array = format.match(formattingTokens),\n        i,\n        length;\n\n    for (i = 0, length = array.length; i < length; i++) {\n        if (formatTokenFunctions[array[i]]) {\n            array[i] = formatTokenFunctions[array[i]];\n        } else {\n            array[i] = removeFormattingTokens(array[i]);\n        }\n    }\n\n    return function (mom) {\n        var output = '',\n            i;\n        for (i = 0; i < length; i++) {\n            output += isFunction(array[i])\n                ? array[i].call(mom, format)\n                : array[i];\n        }\n        return output;\n    };\n}\n\n// format date using native date object\nfunction formatMoment(m, format) {\n    if (!m.isValid()) {\n        return m.localeData().invalidDate();\n    }\n\n    format = expandFormat(format, m.localeData());\n    formatFunctions[format] =\n        formatFunctions[format] || makeFormatFunction(format);\n\n    return formatFunctions[format](m);\n}\n\nfunction expandFormat(format, locale) {\n    var i = 5;\n\n    function replaceLongDateFormatTokens(input) {\n        return locale.longDateFormat(input) || input;\n    }\n\n    localFormattingTokens.lastIndex = 0;\n    while (i >= 0 && localFormattingTokens.test(format)) {\n        format = format.replace(\n            localFormattingTokens,\n            replaceLongDateFormatTokens\n        );\n        localFormattingTokens.lastIndex = 0;\n        i -= 1;\n    }\n\n    return format;\n}\n\nvar defaultLongDateFormat = {\n    LTS: 'h:mm:ss A',\n    LT: 'h:mm A',\n    L: 'MM/DD/YYYY',\n    LL: 'MMMM D, YYYY',\n    LLL: 'MMMM D, YYYY h:mm A',\n    LLLL: 'dddd, MMMM D, YYYY h:mm A',\n};\n\nfunction longDateFormat(key) {\n    var format = this._longDateFormat[key],\n        formatUpper = this._longDateFormat[key.toUpperCase()];\n\n    if (format || !formatUpper) {\n        return format;\n    }\n\n    this._longDateFormat[key] = formatUpper\n        .match(formattingTokens)\n        .map(function (tok) {\n            if (\n                tok === 'MMMM' ||\n                tok === 'MM' ||\n                tok === 'DD' ||\n                tok === 'dddd'\n            ) {\n                return tok.slice(1);\n            }\n            return tok;\n        })\n        .join('');\n\n    return this._longDateFormat[key];\n}\n\nvar defaultInvalidDate = 'Invalid date';\n\nfunction invalidDate() {\n    return this._invalidDate;\n}\n\nvar defaultOrdinal = '%d',\n    defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\nfunction ordinal(number) {\n    return this._ordinal.replace('%d', number);\n}\n\nvar defaultRelativeTime = {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    ss: '%d seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    w: 'a week',\n    ww: '%d weeks',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years',\n};\n\nfunction relativeTime(number, withoutSuffix, string, isFuture) {\n    var output = this._relativeTime[string];\n    return isFunction(output)\n        ? output(number, withoutSuffix, string, isFuture)\n        : output.replace(/%d/i, number);\n}\n\nfunction pastFuture(diff, output) {\n    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n    return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n}\n\nvar aliases = {\n    D: 'date',\n    dates: 'date',\n    date: 'date',\n    d: 'day',\n    days: 'day',\n    day: 'day',\n    e: 'weekday',\n    weekdays: 'weekday',\n    weekday: 'weekday',\n    E: 'isoWeekday',\n    isoweekdays: 'isoWeekday',\n    isoweekday: 'isoWeekday',\n    DDD: 'dayOfYear',\n    dayofyears: 'dayOfYear',\n    dayofyear: 'dayOfYear',\n    h: 'hour',\n    hours: 'hour',\n    hour: 'hour',\n    ms: 'millisecond',\n    milliseconds: 'millisecond',\n    millisecond: 'millisecond',\n    m: 'minute',\n    minutes: 'minute',\n    minute: 'minute',\n    M: 'month',\n    months: 'month',\n    month: 'month',\n    Q: 'quarter',\n    quarters: 'quarter',\n    quarter: 'quarter',\n    s: 'second',\n    seconds: 'second',\n    second: 'second',\n    gg: 'weekYear',\n    weekyears: 'weekYear',\n    weekyear: 'weekYear',\n    GG: 'isoWeekYear',\n    isoweekyears: 'isoWeekYear',\n    isoweekyear: 'isoWeekYear',\n    w: 'week',\n    weeks: 'week',\n    week: 'week',\n    W: 'isoWeek',\n    isoweeks: 'isoWeek',\n    isoweek: 'isoWeek',\n    y: 'year',\n    years: 'year',\n    year: 'year',\n};\n\nfunction normalizeUnits(units) {\n    return typeof units === 'string'\n        ? aliases[units] || aliases[units.toLowerCase()]\n        : undefined;\n}\n\nfunction normalizeObjectUnits(inputObject) {\n    var normalizedInput = {},\n        normalizedProp,\n        prop;\n\n    for (prop in inputObject) {\n        if (hasOwnProp(inputObject, prop)) {\n            normalizedProp = normalizeUnits(prop);\n            if (normalizedProp) {\n                normalizedInput[normalizedProp] = inputObject[prop];\n            }\n        }\n    }\n\n    return normalizedInput;\n}\n\nvar priorities = {\n    date: 9,\n    day: 11,\n    weekday: 11,\n    isoWeekday: 11,\n    dayOfYear: 4,\n    hour: 13,\n    millisecond: 16,\n    minute: 14,\n    month: 8,\n    quarter: 7,\n    second: 15,\n    weekYear: 1,\n    isoWeekYear: 1,\n    week: 5,\n    isoWeek: 5,\n    year: 1,\n};\n\nfunction getPrioritizedUnits(unitsObj) {\n    var units = [],\n        u;\n    for (u in unitsObj) {\n        if (hasOwnProp(unitsObj, u)) {\n            units.push({ unit: u, priority: priorities[u] });\n        }\n    }\n    units.sort(function (a, b) {\n        return a.priority - b.priority;\n    });\n    return units;\n}\n\nvar match1 = /\\d/, //       0 - 9\n    match2 = /\\d\\d/, //      00 - 99\n    match3 = /\\d{3}/, //     000 - 999\n    match4 = /\\d{4}/, //    0000 - 9999\n    match6 = /[+-]?\\d{6}/, // -999999 - 999999\n    match1to2 = /\\d\\d?/, //       0 - 99\n    match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n    match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n    match1to3 = /\\d{1,3}/, //       0 - 999\n    match1to4 = /\\d{1,4}/, //       0 - 9999\n    match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n    matchUnsigned = /\\d+/, //       0 - inf\n    matchSigned = /[+-]?\\d+/, //    -inf - inf\n    matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n    matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n    matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    // includes scottish gaelic two word and hyphenated months\n    matchWord =\n        /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n    match1to2NoLeadingZero = /^[1-9]\\d?/, //         1-99\n    match1to2HasZero = /^([1-9]\\d|\\d)/, //           0-99\n    regexes;\n\nregexes = {};\n\nfunction addRegexToken(token, regex, strictRegex) {\n    regexes[token] = isFunction(regex)\n        ? regex\n        : function (isStrict, localeData) {\n              return isStrict && strictRegex ? strictRegex : regex;\n          };\n}\n\nfunction getParseRegexForToken(token, config) {\n    if (!hasOwnProp(regexes, token)) {\n        return new RegExp(unescapeFormat(token));\n    }\n\n    return regexes[token](config._strict, config._locale);\n}\n\n// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\nfunction unescapeFormat(s) {\n    return regexEscape(\n        s\n            .replace('\\\\', '')\n            .replace(\n                /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                function (matched, p1, p2, p3, p4) {\n                    return p1 || p2 || p3 || p4;\n                }\n            )\n    );\n}\n\nfunction regexEscape(s) {\n    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nfunction absFloor(number) {\n    if (number < 0) {\n        // -0 -> 0\n        return Math.ceil(number) || 0;\n    } else {\n        return Math.floor(number);\n    }\n}\n\nfunction toInt(argumentForCoercion) {\n    var coercedNumber = +argumentForCoercion,\n        value = 0;\n\n    if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n        value = absFloor(coercedNumber);\n    }\n\n    return value;\n}\n\nvar tokens = {};\n\nfunction addParseToken(token, callback) {\n    var i,\n        func = callback,\n        tokenLen;\n    if (typeof token === 'string') {\n        token = [token];\n    }\n    if (isNumber(callback)) {\n        func = function (input, array) {\n            array[callback] = toInt(input);\n        };\n    }\n    tokenLen = token.length;\n    for (i = 0; i < tokenLen; i++) {\n        tokens[token[i]] = func;\n    }\n}\n\nfunction addWeekParseToken(token, callback) {\n    addParseToken(token, function (input, array, config, token) {\n        config._w = config._w || {};\n        callback(input, config._w, config, token);\n    });\n}\n\nfunction addTimeToArrayFromToken(token, input, config) {\n    if (input != null && hasOwnProp(tokens, token)) {\n        tokens[token](input, config._a, config, token);\n    }\n}\n\nfunction isLeapYear(year) {\n    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\nvar YEAR = 0,\n    MONTH = 1,\n    DATE = 2,\n    HOUR = 3,\n    MINUTE = 4,\n    SECOND = 5,\n    MILLISECOND = 6,\n    WEEK = 7,\n    WEEKDAY = 8;\n\n// FORMATTING\n\naddFormatToken('Y', 0, 0, function () {\n    var y = this.year();\n    return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n});\n\naddFormatToken(0, ['YY', 2], 0, function () {\n    return this.year() % 100;\n});\n\naddFormatToken(0, ['YYYY', 4], 0, 'year');\naddFormatToken(0, ['YYYYY', 5], 0, 'year');\naddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n// PARSING\n\naddRegexToken('Y', matchSigned);\naddRegexToken('YY', match1to2, match2);\naddRegexToken('YYYY', match1to4, match4);\naddRegexToken('YYYYY', match1to6, match6);\naddRegexToken('YYYYYY', match1to6, match6);\n\naddParseToken(['YYYYY', 'YYYYYY'], YEAR);\naddParseToken('YYYY', function (input, array) {\n    array[YEAR] =\n        input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n});\naddParseToken('YY', function (input, array) {\n    array[YEAR] = hooks.parseTwoDigitYear(input);\n});\naddParseToken('Y', function (input, array) {\n    array[YEAR] = parseInt(input, 10);\n});\n\n// HELPERS\n\nfunction daysInYear(year) {\n    return isLeapYear(year) ? 366 : 365;\n}\n\n// HOOKS\n\nhooks.parseTwoDigitYear = function (input) {\n    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n};\n\n// MOMENTS\n\nvar getSetYear = makeGetSet('FullYear', true);\n\nfunction getIsLeapYear() {\n    return isLeapYear(this.year());\n}\n\nfunction makeGetSet(unit, keepTime) {\n    return function (value) {\n        if (value != null) {\n            set$1(this, unit, value);\n            hooks.updateOffset(this, keepTime);\n            return this;\n        } else {\n            return get(this, unit);\n        }\n    };\n}\n\nfunction get(mom, unit) {\n    if (!mom.isValid()) {\n        return NaN;\n    }\n\n    var d = mom._d,\n        isUTC = mom._isUTC;\n\n    switch (unit) {\n        case 'Milliseconds':\n            return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n        case 'Seconds':\n            return isUTC ? d.getUTCSeconds() : d.getSeconds();\n        case 'Minutes':\n            return isUTC ? d.getUTCMinutes() : d.getMinutes();\n        case 'Hours':\n            return isUTC ? d.getUTCHours() : d.getHours();\n        case 'Date':\n            return isUTC ? d.getUTCDate() : d.getDate();\n        case 'Day':\n            return isUTC ? d.getUTCDay() : d.getDay();\n        case 'Month':\n            return isUTC ? d.getUTCMonth() : d.getMonth();\n        case 'FullYear':\n            return isUTC ? d.getUTCFullYear() : d.getFullYear();\n        default:\n            return NaN; // Just in case\n    }\n}\n\nfunction set$1(mom, unit, value) {\n    var d, isUTC, year, month, date;\n\n    if (!mom.isValid() || isNaN(value)) {\n        return;\n    }\n\n    d = mom._d;\n    isUTC = mom._isUTC;\n\n    switch (unit) {\n        case 'Milliseconds':\n            return void (isUTC\n                ? d.setUTCMilliseconds(value)\n                : d.setMilliseconds(value));\n        case 'Seconds':\n            return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n        case 'Minutes':\n            return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n        case 'Hours':\n            return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n        case 'Date':\n            return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n        // case 'Day': // Not real\n        //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n        // case 'Month': // Not used because we need to pass two variables\n        //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n        case 'FullYear':\n            break; // See below ...\n        default:\n            return; // Just in case\n    }\n\n    year = value;\n    month = mom.month();\n    date = mom.date();\n    date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n    void (isUTC\n        ? d.setUTCFullYear(year, month, date)\n        : d.setFullYear(year, month, date));\n}\n\n// MOMENTS\n\nfunction stringGet(units) {\n    units = normalizeUnits(units);\n    if (isFunction(this[units])) {\n        return this[units]();\n    }\n    return this;\n}\n\nfunction stringSet(units, value) {\n    if (typeof units === 'object') {\n        units = normalizeObjectUnits(units);\n        var prioritized = getPrioritizedUnits(units),\n            i,\n            prioritizedLen = prioritized.length;\n        for (i = 0; i < prioritizedLen; i++) {\n            this[prioritized[i].unit](units[prioritized[i].unit]);\n        }\n    } else {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units](value);\n        }\n    }\n    return this;\n}\n\nfunction mod(n, x) {\n    return ((n % x) + x) % x;\n}\n\nvar indexOf;\n\nif (Array.prototype.indexOf) {\n    indexOf = Array.prototype.indexOf;\n} else {\n    indexOf = function (o) {\n        // I know\n        var i;\n        for (i = 0; i < this.length; ++i) {\n            if (this[i] === o) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\n\nfunction daysInMonth(year, month) {\n    if (isNaN(year) || isNaN(month)) {\n        return NaN;\n    }\n    var modMonth = mod(month, 12);\n    year += (month - modMonth) / 12;\n    return modMonth === 1\n        ? isLeapYear(year)\n            ? 29\n            : 28\n        : 31 - ((modMonth % 7) % 2);\n}\n\n// FORMATTING\n\naddFormatToken('M', ['MM', 2], 'Mo', function () {\n    return this.month() + 1;\n});\n\naddFormatToken('MMM', 0, 0, function (format) {\n    return this.localeData().monthsShort(this, format);\n});\n\naddFormatToken('MMMM', 0, 0, function (format) {\n    return this.localeData().months(this, format);\n});\n\n// PARSING\n\naddRegexToken('M', match1to2, match1to2NoLeadingZero);\naddRegexToken('MM', match1to2, match2);\naddRegexToken('MMM', function (isStrict, locale) {\n    return locale.monthsShortRegex(isStrict);\n});\naddRegexToken('MMMM', function (isStrict, locale) {\n    return locale.monthsRegex(isStrict);\n});\n\naddParseToken(['M', 'MM'], function (input, array) {\n    array[MONTH] = toInt(input) - 1;\n});\n\naddParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n    var month = config._locale.monthsParse(input, token, config._strict);\n    // if we didn't find a month name, mark the date as invalid.\n    if (month != null) {\n        array[MONTH] = month;\n    } else {\n        getParsingFlags(config).invalidMonth = input;\n    }\n});\n\n// LOCALES\n\nvar defaultLocaleMonths =\n        'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n    defaultLocaleMonthsShort =\n        'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n    defaultMonthsShortRegex = matchWord,\n    defaultMonthsRegex = matchWord;\n\nfunction localeMonths(m, format) {\n    if (!m) {\n        return isArray(this._months)\n            ? this._months\n            : this._months['standalone'];\n    }\n    return isArray(this._months)\n        ? this._months[m.month()]\n        : this._months[\n              (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                  ? 'format'\n                  : 'standalone'\n          ][m.month()];\n}\n\nfunction localeMonthsShort(m, format) {\n    if (!m) {\n        return isArray(this._monthsShort)\n            ? this._monthsShort\n            : this._monthsShort['standalone'];\n    }\n    return isArray(this._monthsShort)\n        ? this._monthsShort[m.month()]\n        : this._monthsShort[\n              MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n          ][m.month()];\n}\n\nfunction handleStrictParse(monthName, format, strict) {\n    var i,\n        ii,\n        mom,\n        llc = monthName.toLocaleLowerCase();\n    if (!this._monthsParse) {\n        // this is not used\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n        for (i = 0; i < 12; ++i) {\n            mom = createUTC([2000, i]);\n            this._shortMonthsParse[i] = this.monthsShort(\n                mom,\n                ''\n            ).toLocaleLowerCase();\n            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'MMM') {\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'MMM') {\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._longMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeMonthsParse(monthName, format, strict) {\n    var i, mom, regex;\n\n    if (this._monthsParseExact) {\n        return handleStrictParse.call(this, monthName, format, strict);\n    }\n\n    if (!this._monthsParse) {\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n    }\n\n    // TODO: add sorting\n    // Sorting makes sure if one month (or abbr) is a prefix of another\n    // see sorting in computeMonthsParse\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        if (strict && !this._longMonthsParse[i]) {\n            this._longMonthsParse[i] = new RegExp(\n                '^' + this.months(mom, '').replace('.', '') + '$',\n                'i'\n            );\n            this._shortMonthsParse[i] = new RegExp(\n                '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                'i'\n            );\n        }\n        if (!strict && !this._monthsParse[i]) {\n            regex =\n                '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (\n            strict &&\n            format === 'MMMM' &&\n            this._longMonthsParse[i].test(monthName)\n        ) {\n            return i;\n        } else if (\n            strict &&\n            format === 'MMM' &&\n            this._shortMonthsParse[i].test(monthName)\n        ) {\n            return i;\n        } else if (!strict && this._monthsParse[i].test(monthName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction setMonth(mom, value) {\n    if (!mom.isValid()) {\n        // No op\n        return mom;\n    }\n\n    if (typeof value === 'string') {\n        if (/^\\d+$/.test(value)) {\n            value = toInt(value);\n        } else {\n            value = mom.localeData().monthsParse(value);\n            // TODO: Another silent failure?\n            if (!isNumber(value)) {\n                return mom;\n            }\n        }\n    }\n\n    var month = value,\n        date = mom.date();\n\n    date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n    void (mom._isUTC\n        ? mom._d.setUTCMonth(month, date)\n        : mom._d.setMonth(month, date));\n    return mom;\n}\n\nfunction getSetMonth(value) {\n    if (value != null) {\n        setMonth(this, value);\n        hooks.updateOffset(this, true);\n        return this;\n    } else {\n        return get(this, 'Month');\n    }\n}\n\nfunction getDaysInMonth() {\n    return daysInMonth(this.year(), this.month());\n}\n\nfunction monthsShortRegex(isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsShortStrictRegex;\n        } else {\n            return this._monthsShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsShortRegex')) {\n            this._monthsShortRegex = defaultMonthsShortRegex;\n        }\n        return this._monthsShortStrictRegex && isStrict\n            ? this._monthsShortStrictRegex\n            : this._monthsShortRegex;\n    }\n}\n\nfunction monthsRegex(isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsStrictRegex;\n        } else {\n            return this._monthsRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            this._monthsRegex = defaultMonthsRegex;\n        }\n        return this._monthsStrictRegex && isStrict\n            ? this._monthsStrictRegex\n            : this._monthsRegex;\n    }\n}\n\nfunction computeMonthsParse() {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var shortPieces = [],\n        longPieces = [],\n        mixedPieces = [],\n        i,\n        mom,\n        shortP,\n        longP;\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        shortP = regexEscape(this.monthsShort(mom, ''));\n        longP = regexEscape(this.months(mom, ''));\n        shortPieces.push(shortP);\n        longPieces.push(longP);\n        mixedPieces.push(longP);\n        mixedPieces.push(shortP);\n    }\n    // Sorting makes sure if one month (or abbr) is a prefix of another it\n    // will match the longer piece.\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n\n    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._monthsShortRegex = this._monthsRegex;\n    this._monthsStrictRegex = new RegExp(\n        '^(' + longPieces.join('|') + ')',\n        'i'\n    );\n    this._monthsShortStrictRegex = new RegExp(\n        '^(' + shortPieces.join('|') + ')',\n        'i'\n    );\n}\n\nfunction createDate(y, m, d, h, M, s, ms) {\n    // can't just apply() to create a date:\n    // https://stackoverflow.com/q/181348\n    var date;\n    // the date constructor remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n        // preserve leap years using a full 400 year cycle, then reset\n        date = new Date(y + 400, m, d, h, M, s, ms);\n        if (isFinite(date.getFullYear())) {\n            date.setFullYear(y);\n        }\n    } else {\n        date = new Date(y, m, d, h, M, s, ms);\n    }\n\n    return date;\n}\n\nfunction createUTCDate(y) {\n    var date, args;\n    // the Date.UTC function remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n        args = Array.prototype.slice.call(arguments);\n        // preserve leap years using a full 400 year cycle, then reset\n        args[0] = y + 400;\n        date = new Date(Date.UTC.apply(null, args));\n        if (isFinite(date.getUTCFullYear())) {\n            date.setUTCFullYear(y);\n        }\n    } else {\n        date = new Date(Date.UTC.apply(null, arguments));\n    }\n\n    return date;\n}\n\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n        fwd = 7 + dow - doy,\n        // first-week day local weekday -- which local weekday is fwd\n        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n    return -fwdlw + fwd - 1;\n}\n\n// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\nfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n    var localWeekday = (7 + weekday - dow) % 7,\n        weekOffset = firstWeekOffset(year, dow, doy),\n        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n        resYear,\n        resDayOfYear;\n\n    if (dayOfYear <= 0) {\n        resYear = year - 1;\n        resDayOfYear = daysInYear(resYear) + dayOfYear;\n    } else if (dayOfYear > daysInYear(year)) {\n        resYear = year + 1;\n        resDayOfYear = dayOfYear - daysInYear(year);\n    } else {\n        resYear = year;\n        resDayOfYear = dayOfYear;\n    }\n\n    return {\n        year: resYear,\n        dayOfYear: resDayOfYear,\n    };\n}\n\nfunction weekOfYear(mom, dow, doy) {\n    var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n        resWeek,\n        resYear;\n\n    if (week < 1) {\n        resYear = mom.year() - 1;\n        resWeek = week + weeksInYear(resYear, dow, doy);\n    } else if (week > weeksInYear(mom.year(), dow, doy)) {\n        resWeek = week - weeksInYear(mom.year(), dow, doy);\n        resYear = mom.year() + 1;\n    } else {\n        resYear = mom.year();\n        resWeek = week;\n    }\n\n    return {\n        week: resWeek,\n        year: resYear,\n    };\n}\n\nfunction weeksInYear(year, dow, doy) {\n    var weekOffset = firstWeekOffset(year, dow, doy),\n        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n}\n\n// FORMATTING\n\naddFormatToken('w', ['ww', 2], 'wo', 'week');\naddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n// PARSING\n\naddRegexToken('w', match1to2, match1to2NoLeadingZero);\naddRegexToken('ww', match1to2, match2);\naddRegexToken('W', match1to2, match1to2NoLeadingZero);\naddRegexToken('WW', match1to2, match2);\n\naddWeekParseToken(\n    ['w', 'ww', 'W', 'WW'],\n    function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    }\n);\n\n// HELPERS\n\n// LOCALES\n\nfunction localeWeek(mom) {\n    return weekOfYear(mom, this._week.dow, this._week.doy).week;\n}\n\nvar defaultLocaleWeek = {\n    dow: 0, // Sunday is the first day of the week.\n    doy: 6, // The week that contains Jan 6th is the first week of the year.\n};\n\nfunction localeFirstDayOfWeek() {\n    return this._week.dow;\n}\n\nfunction localeFirstDayOfYear() {\n    return this._week.doy;\n}\n\n// MOMENTS\n\nfunction getSetWeek(input) {\n    var week = this.localeData().week(this);\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\nfunction getSetISOWeek(input) {\n    var week = weekOfYear(this, 1, 4).week;\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('d', 0, 'do', 'day');\n\naddFormatToken('dd', 0, 0, function (format) {\n    return this.localeData().weekdaysMin(this, format);\n});\n\naddFormatToken('ddd', 0, 0, function (format) {\n    return this.localeData().weekdaysShort(this, format);\n});\n\naddFormatToken('dddd', 0, 0, function (format) {\n    return this.localeData().weekdays(this, format);\n});\n\naddFormatToken('e', 0, 0, 'weekday');\naddFormatToken('E', 0, 0, 'isoWeekday');\n\n// PARSING\n\naddRegexToken('d', match1to2);\naddRegexToken('e', match1to2);\naddRegexToken('E', match1to2);\naddRegexToken('dd', function (isStrict, locale) {\n    return locale.weekdaysMinRegex(isStrict);\n});\naddRegexToken('ddd', function (isStrict, locale) {\n    return locale.weekdaysShortRegex(isStrict);\n});\naddRegexToken('dddd', function (isStrict, locale) {\n    return locale.weekdaysRegex(isStrict);\n});\n\naddWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n    var weekday = config._locale.weekdaysParse(input, token, config._strict);\n    // if we didn't get a weekday name, mark the date as invalid\n    if (weekday != null) {\n        week.d = weekday;\n    } else {\n        getParsingFlags(config).invalidWeekday = input;\n    }\n});\n\naddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n    week[token] = toInt(input);\n});\n\n// HELPERS\n\nfunction parseWeekday(input, locale) {\n    if (typeof input !== 'string') {\n        return input;\n    }\n\n    if (!isNaN(input)) {\n        return parseInt(input, 10);\n    }\n\n    input = locale.weekdaysParse(input);\n    if (typeof input === 'number') {\n        return input;\n    }\n\n    return null;\n}\n\nfunction parseIsoWeekday(input, locale) {\n    if (typeof input === 'string') {\n        return locale.weekdaysParse(input) % 7 || 7;\n    }\n    return isNaN(input) ? null : input;\n}\n\n// LOCALES\nfunction shiftWeekdays(ws, n) {\n    return ws.slice(n, 7).concat(ws.slice(0, n));\n}\n\nvar defaultLocaleWeekdays =\n        'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    defaultWeekdaysRegex = matchWord,\n    defaultWeekdaysShortRegex = matchWord,\n    defaultWeekdaysMinRegex = matchWord;\n\nfunction localeWeekdays(m, format) {\n    var weekdays = isArray(this._weekdays)\n        ? this._weekdays\n        : this._weekdays[\n              m && m !== true && this._weekdays.isFormat.test(format)\n                  ? 'format'\n                  : 'standalone'\n          ];\n    return m === true\n        ? shiftWeekdays(weekdays, this._week.dow)\n        : m\n          ? weekdays[m.day()]\n          : weekdays;\n}\n\nfunction localeWeekdaysShort(m) {\n    return m === true\n        ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n        : m\n          ? this._weekdaysShort[m.day()]\n          : this._weekdaysShort;\n}\n\nfunction localeWeekdaysMin(m) {\n    return m === true\n        ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n        : m\n          ? this._weekdaysMin[m.day()]\n          : this._weekdaysMin;\n}\n\nfunction handleStrictParse$1(weekdayName, format, strict) {\n    var i,\n        ii,\n        mom,\n        llc = weekdayName.toLocaleLowerCase();\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._minWeekdaysParse = [];\n\n        for (i = 0; i < 7; ++i) {\n            mom = createUTC([2000, 1]).day(i);\n            this._minWeekdaysParse[i] = this.weekdaysMin(\n                mom,\n                ''\n            ).toLocaleLowerCase();\n            this._shortWeekdaysParse[i] = this.weekdaysShort(\n                mom,\n                ''\n            ).toLocaleLowerCase();\n            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'dddd') {\n            ii = indexOf.call(this._weekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'dddd') {\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeWeekdaysParse(weekdayName, format, strict) {\n    var i, mom, regex;\n\n    if (this._weekdaysParseExact) {\n        return handleStrictParse$1.call(this, weekdayName, format, strict);\n    }\n\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._minWeekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._fullWeekdaysParse = [];\n    }\n\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n\n        mom = createUTC([2000, 1]).day(i);\n        if (strict && !this._fullWeekdaysParse[i]) {\n            this._fullWeekdaysParse[i] = new RegExp(\n                '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                'i'\n            );\n            this._shortWeekdaysParse[i] = new RegExp(\n                '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                'i'\n            );\n            this._minWeekdaysParse[i] = new RegExp(\n                '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                'i'\n            );\n        }\n        if (!this._weekdaysParse[i]) {\n            regex =\n                '^' +\n                this.weekdays(mom, '') +\n                '|^' +\n                this.weekdaysShort(mom, '') +\n                '|^' +\n                this.weekdaysMin(mom, '');\n            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (\n            strict &&\n            format === 'dddd' &&\n            this._fullWeekdaysParse[i].test(weekdayName)\n        ) {\n            return i;\n        } else if (\n            strict &&\n            format === 'ddd' &&\n            this._shortWeekdaysParse[i].test(weekdayName)\n        ) {\n            return i;\n        } else if (\n            strict &&\n            format === 'dd' &&\n            this._minWeekdaysParse[i].test(weekdayName)\n        ) {\n            return i;\n        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction getSetDayOfWeek(input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n\n    var day = get(this, 'Day');\n    if (input != null) {\n        input = parseWeekday(input, this.localeData());\n        return this.add(input - day, 'd');\n    } else {\n        return day;\n    }\n}\n\nfunction getSetLocaleDayOfWeek(input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n    return input == null ? weekday : this.add(input - weekday, 'd');\n}\n\nfunction getSetISODayOfWeek(input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n\n    // behaves the same as moment#day except\n    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n    // as a setter, sunday should belong to the previous week.\n\n    if (input != null) {\n        var weekday = parseIsoWeekday(input, this.localeData());\n        return this.day(this.day() % 7 ? weekday : weekday - 7);\n    } else {\n        return this.day() || 7;\n    }\n}\n\nfunction weekdaysRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysStrictRegex;\n        } else {\n            return this._weekdaysRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            this._weekdaysRegex = defaultWeekdaysRegex;\n        }\n        return this._weekdaysStrictRegex && isStrict\n            ? this._weekdaysStrictRegex\n            : this._weekdaysRegex;\n    }\n}\n\nfunction weekdaysShortRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysShortStrictRegex;\n        } else {\n            return this._weekdaysShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n            this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n        }\n        return this._weekdaysShortStrictRegex && isStrict\n            ? this._weekdaysShortStrictRegex\n            : this._weekdaysShortRegex;\n    }\n}\n\nfunction weekdaysMinRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysMinStrictRegex;\n        } else {\n            return this._weekdaysMinRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n            this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n        }\n        return this._weekdaysMinStrictRegex && isStrict\n            ? this._weekdaysMinStrictRegex\n            : this._weekdaysMinRegex;\n    }\n}\n\nfunction computeWeekdaysParse() {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var minPieces = [],\n        shortPieces = [],\n        longPieces = [],\n        mixedPieces = [],\n        i,\n        mom,\n        minp,\n        shortp,\n        longp;\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, 1]).day(i);\n        minp = regexEscape(this.weekdaysMin(mom, ''));\n        shortp = regexEscape(this.weekdaysShort(mom, ''));\n        longp = regexEscape(this.weekdays(mom, ''));\n        minPieces.push(minp);\n        shortPieces.push(shortp);\n        longPieces.push(longp);\n        mixedPieces.push(minp);\n        mixedPieces.push(shortp);\n        mixedPieces.push(longp);\n    }\n    // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n    // will match the longer piece.\n    minPieces.sort(cmpLenRev);\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n\n    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._weekdaysShortRegex = this._weekdaysRegex;\n    this._weekdaysMinRegex = this._weekdaysRegex;\n\n    this._weekdaysStrictRegex = new RegExp(\n        '^(' + longPieces.join('|') + ')',\n        'i'\n    );\n    this._weekdaysShortStrictRegex = new RegExp(\n        '^(' + shortPieces.join('|') + ')',\n        'i'\n    );\n    this._weekdaysMinStrictRegex = new RegExp(\n        '^(' + minPieces.join('|') + ')',\n        'i'\n    );\n}\n\n// FORMATTING\n\nfunction hFormat() {\n    return this.hours() % 12 || 12;\n}\n\nfunction kFormat() {\n    return this.hours() || 24;\n}\n\naddFormatToken('H', ['HH', 2], 0, 'hour');\naddFormatToken('h', ['hh', 2], 0, hFormat);\naddFormatToken('k', ['kk', 2], 0, kFormat);\n\naddFormatToken('hmm', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('hmmss', 0, 0, function () {\n    return (\n        '' +\n        hFormat.apply(this) +\n        zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2)\n    );\n});\n\naddFormatToken('Hmm', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('Hmmss', 0, 0, function () {\n    return (\n        '' +\n        this.hours() +\n        zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2)\n    );\n});\n\nfunction meridiem(token, lowercase) {\n    addFormatToken(token, 0, 0, function () {\n        return this.localeData().meridiem(\n            this.hours(),\n            this.minutes(),\n            lowercase\n        );\n    });\n}\n\nmeridiem('a', true);\nmeridiem('A', false);\n\n// PARSING\n\nfunction matchMeridiem(isStrict, locale) {\n    return locale._meridiemParse;\n}\n\naddRegexToken('a', matchMeridiem);\naddRegexToken('A', matchMeridiem);\naddRegexToken('H', match1to2, match1to2HasZero);\naddRegexToken('h', match1to2, match1to2NoLeadingZero);\naddRegexToken('k', match1to2, match1to2NoLeadingZero);\naddRegexToken('HH', match1to2, match2);\naddRegexToken('hh', match1to2, match2);\naddRegexToken('kk', match1to2, match2);\n\naddRegexToken('hmm', match3to4);\naddRegexToken('hmmss', match5to6);\naddRegexToken('Hmm', match3to4);\naddRegexToken('Hmmss', match5to6);\n\naddParseToken(['H', 'HH'], HOUR);\naddParseToken(['k', 'kk'], function (input, array, config) {\n    var kInput = toInt(input);\n    array[HOUR] = kInput === 24 ? 0 : kInput;\n});\naddParseToken(['a', 'A'], function (input, array, config) {\n    config._isPm = config._locale.isPM(input);\n    config._meridiem = input;\n});\naddParseToken(['h', 'hh'], function (input, array, config) {\n    array[HOUR] = toInt(input);\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmmss', function (input, array, config) {\n    var pos1 = input.length - 4,\n        pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('Hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n});\naddParseToken('Hmmss', function (input, array, config) {\n    var pos1 = input.length - 4,\n        pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n});\n\n// LOCALES\n\nfunction localeIsPM(input) {\n    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n    // Using charAt should be more compatible.\n    return (input + '').toLowerCase().charAt(0) === 'p';\n}\n\nvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour they want. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    getSetHour = makeGetSet('Hours', true);\n\nfunction localeMeridiem(hours, minutes, isLower) {\n    if (hours > 11) {\n        return isLower ? 'pm' : 'PM';\n    } else {\n        return isLower ? 'am' : 'AM';\n    }\n}\n\nvar baseConfig = {\n    calendar: defaultCalendar,\n    longDateFormat: defaultLongDateFormat,\n    invalidDate: defaultInvalidDate,\n    ordinal: defaultOrdinal,\n    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n    relativeTime: defaultRelativeTime,\n\n    months: defaultLocaleMonths,\n    monthsShort: defaultLocaleMonthsShort,\n\n    week: defaultLocaleWeek,\n\n    weekdays: defaultLocaleWeekdays,\n    weekdaysMin: defaultLocaleWeekdaysMin,\n    weekdaysShort: defaultLocaleWeekdaysShort,\n\n    meridiemParse: defaultLocaleMeridiemParse,\n};\n\n// internal storage for locale config files\nvar locales = {},\n    localeFamilies = {},\n    globalLocale;\n\nfunction commonPrefix(arr1, arr2) {\n    var i,\n        minl = Math.min(arr1.length, arr2.length);\n    for (i = 0; i < minl; i += 1) {\n        if (arr1[i] !== arr2[i]) {\n            return i;\n        }\n    }\n    return minl;\n}\n\nfunction normalizeLocale(key) {\n    return key ? key.toLowerCase().replace('_', '-') : key;\n}\n\n// pick the locale from the array\n// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\nfunction chooseLocale(names) {\n    var i = 0,\n        j,\n        next,\n        locale,\n        split;\n\n    while (i < names.length) {\n        split = normalizeLocale(names[i]).split('-');\n        j = split.length;\n        next = normalizeLocale(names[i + 1]);\n        next = next ? next.split('-') : null;\n        while (j > 0) {\n            locale = loadLocale(split.slice(0, j).join('-'));\n            if (locale) {\n                return locale;\n            }\n            if (\n                next &&\n                next.length >= j &&\n                commonPrefix(split, next) >= j - 1\n            ) {\n                //the next array item is better than a shallower substring of this one\n                break;\n            }\n            j--;\n        }\n        i++;\n    }\n    return globalLocale;\n}\n\nfunction isLocaleNameSane(name) {\n    // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n    // Ensure name is available and function returns boolean\n    return !!(name && name.match('^[^/\\\\\\\\]*$'));\n}\n\nfunction loadLocale(name) {\n    var oldLocale = null,\n        aliasedRequire;\n    // TODO: Find a better way to register and load all the locales in Node\n    if (\n        locales[name] === undefined &&\n        typeof module !== 'undefined' &&\n        module &&\n        module.exports &&\n        isLocaleNameSane(name)\n    ) {\n        try {\n            oldLocale = globalLocale._abbr;\n            aliasedRequire = require;\n            aliasedRequire('./locale/' + name);\n            getSetGlobalLocale(oldLocale);\n        } catch (e) {\n            // mark as not found to avoid repeating expensive file require call causing high CPU\n            // when trying to find en-US, en_US, en-us for every format call\n            locales[name] = null; // null means not found\n        }\n    }\n    return locales[name];\n}\n\n// This function will load locale and then set the global locale.  If\n// no arguments are passed in, it will simply return the current global\n// locale key.\nfunction getSetGlobalLocale(key, values) {\n    var data;\n    if (key) {\n        if (isUndefined(values)) {\n            data = getLocale(key);\n        } else {\n            data = defineLocale(key, values);\n        }\n\n        if (data) {\n            // moment.duration._locale = moment._locale = data;\n            globalLocale = data;\n        } else {\n            if (typeof console !== 'undefined' && console.warn) {\n                //warn user if arguments are passed but the locale could not be set\n                console.warn(\n                    'Locale ' + key + ' not found. Did you forget to load it?'\n                );\n            }\n        }\n    }\n\n    return globalLocale._abbr;\n}\n\nfunction defineLocale(name, config) {\n    if (config !== null) {\n        var locale,\n            parentConfig = baseConfig;\n        config.abbr = name;\n        if (locales[name] != null) {\n            deprecateSimple(\n                'defineLocaleOverride',\n                'use moment.updateLocale(localeName, config) to change ' +\n                    'an existing locale. moment.defineLocale(localeName, ' +\n                    'config) should only be used for creating a new locale ' +\n                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n            );\n            parentConfig = locales[name]._config;\n        } else if (config.parentLocale != null) {\n            if (locales[config.parentLocale] != null) {\n                parentConfig = locales[config.parentLocale]._config;\n            } else {\n                locale = loadLocale(config.parentLocale);\n                if (locale != null) {\n                    parentConfig = locale._config;\n                } else {\n                    if (!localeFamilies[config.parentLocale]) {\n                        localeFamilies[config.parentLocale] = [];\n                    }\n                    localeFamilies[config.parentLocale].push({\n                        name: name,\n                        config: config,\n                    });\n                    return null;\n                }\n            }\n        }\n        locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n        if (localeFamilies[name]) {\n            localeFamilies[name].forEach(function (x) {\n                defineLocale(x.name, x.config);\n            });\n        }\n\n        // backwards compat for now: also set the locale\n        // make sure we set the locale AFTER all child locales have been\n        // created, so we won't end up with the child locale set.\n        getSetGlobalLocale(name);\n\n        return locales[name];\n    } else {\n        // useful for testing\n        delete locales[name];\n        return null;\n    }\n}\n\nfunction updateLocale(name, config) {\n    if (config != null) {\n        var locale,\n            tmpLocale,\n            parentConfig = baseConfig;\n\n        if (locales[name] != null && locales[name].parentLocale != null) {\n            // Update existing child locale in-place to avoid memory-leaks\n            locales[name].set(mergeConfigs(locales[name]._config, config));\n        } else {\n            // MERGE\n            tmpLocale = loadLocale(name);\n            if (tmpLocale != null) {\n                parentConfig = tmpLocale._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            if (tmpLocale == null) {\n                // updateLocale is called for creating a new locale\n                // Set abbr so it will have a name (getters return\n                // undefined otherwise).\n                config.abbr = name;\n            }\n            locale = new Locale(config);\n            locale.parentLocale = locales[name];\n            locales[name] = locale;\n        }\n\n        // backwards compat for now: also set the locale\n        getSetGlobalLocale(name);\n    } else {\n        // pass null for config to unupdate, useful for tests\n        if (locales[name] != null) {\n            if (locales[name].parentLocale != null) {\n                locales[name] = locales[name].parentLocale;\n                if (name === getSetGlobalLocale()) {\n                    getSetGlobalLocale(name);\n                }\n            } else if (locales[name] != null) {\n                delete locales[name];\n            }\n        }\n    }\n    return locales[name];\n}\n\n// returns locale data\nfunction getLocale(key) {\n    var locale;\n\n    if (key && key._locale && key._locale._abbr) {\n        key = key._locale._abbr;\n    }\n\n    if (!key) {\n        return globalLocale;\n    }\n\n    if (!isArray(key)) {\n        //short-circuit everything else\n        locale = loadLocale(key);\n        if (locale) {\n            return locale;\n        }\n        key = [key];\n    }\n\n    return chooseLocale(key);\n}\n\nfunction listLocales() {\n    return keys(locales);\n}\n\nfunction checkOverflow(m) {\n    var overflow,\n        a = m._a;\n\n    if (a && getParsingFlags(m).overflow === -2) {\n        overflow =\n            a[MONTH] < 0 || a[MONTH] > 11\n                ? MONTH\n                : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                  ? DATE\n                  : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                      ? MINUTE\n                      : a[SECOND] < 0 || a[SECOND] > 59\n                        ? SECOND\n                        : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                          ? MILLISECOND\n                          : -1;\n\n        if (\n            getParsingFlags(m)._overflowDayOfYear &&\n            (overflow < YEAR || overflow > DATE)\n        ) {\n            overflow = DATE;\n        }\n        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n            overflow = WEEK;\n        }\n        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n            overflow = WEEKDAY;\n        }\n\n        getParsingFlags(m).overflow = overflow;\n    }\n\n    return m;\n}\n\n// iso 8601 regex\n// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\nvar extendedIsoRegex =\n        /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n    basicIsoRegex =\n        /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n    tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n    isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n        ['YYYYYYMMDD', /[+-]\\d{10}/],\n        ['YYYYMMDD', /\\d{8}/],\n        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n        ['YYYYDDD', /\\d{7}/],\n        ['YYYYMM', /\\d{6}/, false],\n        ['YYYY', /\\d{4}/, false],\n    ],\n    // iso time formats and regexes\n    isoTimes = [\n        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /\\d\\d:\\d\\d/],\n        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n        ['HHmm', /\\d\\d\\d\\d/],\n        ['HH', /\\d\\d/],\n    ],\n    aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n    rfc2822 =\n        /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n    obsOffsets = {\n        UT: 0,\n        GMT: 0,\n        EDT: -4 * 60,\n        EST: -5 * 60,\n        CDT: -5 * 60,\n        CST: -6 * 60,\n        MDT: -6 * 60,\n        MST: -7 * 60,\n        PDT: -7 * 60,\n        PST: -8 * 60,\n    };\n\n// date from iso format\nfunction configFromISO(config) {\n    var i,\n        l,\n        string = config._i,\n        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n        allowTime,\n        dateFormat,\n        timeFormat,\n        tzFormat,\n        isoDatesLen = isoDates.length,\n        isoTimesLen = isoTimes.length;\n\n    if (match) {\n        getParsingFlags(config).iso = true;\n        for (i = 0, l = isoDatesLen; i < l; i++) {\n            if (isoDates[i][1].exec(match[1])) {\n                dateFormat = isoDates[i][0];\n                allowTime = isoDates[i][2] !== false;\n                break;\n            }\n        }\n        if (dateFormat == null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[3]) {\n            for (i = 0, l = isoTimesLen; i < l; i++) {\n                if (isoTimes[i][1].exec(match[3])) {\n                    // match[2] should be 'T' or space\n                    timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                    break;\n                }\n            }\n            if (timeFormat == null) {\n                config._isValid = false;\n                return;\n            }\n        }\n        if (!allowTime && timeFormat != null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[4]) {\n            if (tzRegex.exec(match[4])) {\n                tzFormat = 'Z';\n            } else {\n                config._isValid = false;\n                return;\n            }\n        }\n        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n        configFromStringAndFormat(config);\n    } else {\n        config._isValid = false;\n    }\n}\n\nfunction extractFromRFC2822Strings(\n    yearStr,\n    monthStr,\n    dayStr,\n    hourStr,\n    minuteStr,\n    secondStr\n) {\n    var result = [\n        untruncateYear(yearStr),\n        defaultLocaleMonthsShort.indexOf(monthStr),\n        parseInt(dayStr, 10),\n        parseInt(hourStr, 10),\n        parseInt(minuteStr, 10),\n    ];\n\n    if (secondStr) {\n        result.push(parseInt(secondStr, 10));\n    }\n\n    return result;\n}\n\nfunction untruncateYear(yearStr) {\n    var year = parseInt(yearStr, 10);\n    if (year <= 49) {\n        return 2000 + year;\n    } else if (year <= 999) {\n        return 1900 + year;\n    }\n    return year;\n}\n\nfunction preprocessRFC2822(s) {\n    // Remove comments and folding whitespace and replace multiple-spaces with a single space\n    return s\n        .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n        .replace(/(\\s\\s+)/g, ' ')\n        .replace(/^\\s\\s*/, '')\n        .replace(/\\s\\s*$/, '');\n}\n\nfunction checkWeekday(weekdayStr, parsedInput, config) {\n    if (weekdayStr) {\n        // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n        var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n            weekdayActual = new Date(\n                parsedInput[0],\n                parsedInput[1],\n                parsedInput[2]\n            ).getDay();\n        if (weekdayProvided !== weekdayActual) {\n            getParsingFlags(config).weekdayMismatch = true;\n            config._isValid = false;\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction calculateOffset(obsOffset, militaryOffset, numOffset) {\n    if (obsOffset) {\n        return obsOffsets[obsOffset];\n    } else if (militaryOffset) {\n        // the only allowed military tz is Z\n        return 0;\n    } else {\n        var hm = parseInt(numOffset, 10),\n            m = hm % 100,\n            h = (hm - m) / 100;\n        return h * 60 + m;\n    }\n}\n\n// date and time from ref 2822 format\nfunction configFromRFC2822(config) {\n    var match = rfc2822.exec(preprocessRFC2822(config._i)),\n        parsedArray;\n    if (match) {\n        parsedArray = extractFromRFC2822Strings(\n            match[4],\n            match[3],\n            match[2],\n            match[5],\n            match[6],\n            match[7]\n        );\n        if (!checkWeekday(match[1], parsedArray, config)) {\n            return;\n        }\n\n        config._a = parsedArray;\n        config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n        config._d = createUTCDate.apply(null, config._a);\n        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n        getParsingFlags(config).rfc2822 = true;\n    } else {\n        config._isValid = false;\n    }\n}\n\n// date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\nfunction configFromString(config) {\n    var matched = aspNetJsonRegex.exec(config._i);\n    if (matched !== null) {\n        config._d = new Date(+matched[1]);\n        return;\n    }\n\n    configFromISO(config);\n    if (config._isValid === false) {\n        delete config._isValid;\n    } else {\n        return;\n    }\n\n    configFromRFC2822(config);\n    if (config._isValid === false) {\n        delete config._isValid;\n    } else {\n        return;\n    }\n\n    if (config._strict) {\n        config._isValid = false;\n    } else {\n        // Final attempt, use Input Fallback\n        hooks.createFromInputFallback(config);\n    }\n}\n\nhooks.createFromInputFallback = deprecate(\n    'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n        'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n    function (config) {\n        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n    }\n);\n\n// Pick the first defined of two or three arguments.\nfunction defaults(a, b, c) {\n    if (a != null) {\n        return a;\n    }\n    if (b != null) {\n        return b;\n    }\n    return c;\n}\n\nfunction currentDateArray(config) {\n    // hooks is actually the exported moment object\n    var nowValue = new Date(hooks.now());\n    if (config._useUTC) {\n        return [\n            nowValue.getUTCFullYear(),\n            nowValue.getUTCMonth(),\n            nowValue.getUTCDate(),\n        ];\n    }\n    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n}\n\n// convert an array to a date.\n// the array should mirror the parameters below\n// note: all values past the year are optional and will default to the lowest possible value.\n// [year, month, day , hour, minute, second, millisecond]\nfunction configFromArray(config) {\n    var i,\n        date,\n        input = [],\n        currentDate,\n        expectedWeekday,\n        yearToUse;\n\n    if (config._d) {\n        return;\n    }\n\n    currentDate = currentDateArray(config);\n\n    //compute day of the year from weeks and weekdays\n    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n        dayOfYearFromWeekInfo(config);\n    }\n\n    //if the day of the year is set, figure out what it is\n    if (config._dayOfYear != null) {\n        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n        if (\n            config._dayOfYear > daysInYear(yearToUse) ||\n            config._dayOfYear === 0\n        ) {\n            getParsingFlags(config)._overflowDayOfYear = true;\n        }\n\n        date = createUTCDate(yearToUse, 0, config._dayOfYear);\n        config._a[MONTH] = date.getUTCMonth();\n        config._a[DATE] = date.getUTCDate();\n    }\n\n    // Default to current date.\n    // * if no year, month, day of month are given, default to today\n    // * if day of month is given, default month and year\n    // * if month is given, default only year\n    // * if year is given, don't default anything\n    for (i = 0; i < 3 && config._a[i] == null; ++i) {\n        config._a[i] = input[i] = currentDate[i];\n    }\n\n    // Zero out whatever was not defaulted, including time\n    for (; i < 7; i++) {\n        config._a[i] = input[i] =\n            config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n    }\n\n    // Check for 24:00:00.000\n    if (\n        config._a[HOUR] === 24 &&\n        config._a[MINUTE] === 0 &&\n        config._a[SECOND] === 0 &&\n        config._a[MILLISECOND] === 0\n    ) {\n        config._nextDay = true;\n        config._a[HOUR] = 0;\n    }\n\n    config._d = (config._useUTC ? createUTCDate : createDate).apply(\n        null,\n        input\n    );\n    expectedWeekday = config._useUTC\n        ? config._d.getUTCDay()\n        : config._d.getDay();\n\n    // Apply timezone offset from input. The actual utcOffset can be changed\n    // with parseZone.\n    if (config._tzm != null) {\n        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n    }\n\n    if (config._nextDay) {\n        config._a[HOUR] = 24;\n    }\n\n    // check for mismatching day of week\n    if (\n        config._w &&\n        typeof config._w.d !== 'undefined' &&\n        config._w.d !== expectedWeekday\n    ) {\n        getParsingFlags(config).weekdayMismatch = true;\n    }\n}\n\nfunction dayOfYearFromWeekInfo(config) {\n    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n    w = config._w;\n    if (w.GG != null || w.W != null || w.E != null) {\n        dow = 1;\n        doy = 4;\n\n        // TODO: We need to take the current isoWeekYear, but that depends on\n        // how we interpret now (local, utc, fixed offset). So create\n        // a now version of current config (take local/utc/offset flags, and\n        // create now).\n        weekYear = defaults(\n            w.GG,\n            config._a[YEAR],\n            weekOfYear(createLocal(), 1, 4).year\n        );\n        week = defaults(w.W, 1);\n        weekday = defaults(w.E, 1);\n        if (weekday < 1 || weekday > 7) {\n            weekdayOverflow = true;\n        }\n    } else {\n        dow = config._locale._week.dow;\n        doy = config._locale._week.doy;\n\n        curWeek = weekOfYear(createLocal(), dow, doy);\n\n        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n        // Default to current week.\n        week = defaults(w.w, curWeek.week);\n\n        if (w.d != null) {\n            // weekday -- low day numbers are considered next week\n            weekday = w.d;\n            if (weekday < 0 || weekday > 6) {\n                weekdayOverflow = true;\n            }\n        } else if (w.e != null) {\n            // local weekday -- counting starts from beginning of week\n            weekday = w.e + dow;\n            if (w.e < 0 || w.e > 6) {\n                weekdayOverflow = true;\n            }\n        } else {\n            // default to beginning of week\n            weekday = dow;\n        }\n    }\n    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n        getParsingFlags(config)._overflowWeeks = true;\n    } else if (weekdayOverflow != null) {\n        getParsingFlags(config)._overflowWeekday = true;\n    } else {\n        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n        config._a[YEAR] = temp.year;\n        config._dayOfYear = temp.dayOfYear;\n    }\n}\n\n// constant that refers to the ISO standard\nhooks.ISO_8601 = function () {};\n\n// constant that refers to the RFC 2822 form\nhooks.RFC_2822 = function () {};\n\n// date from string and format string\nfunction configFromStringAndFormat(config) {\n    // TODO: Move this to another part of the creation flow to prevent circular deps\n    if (config._f === hooks.ISO_8601) {\n        configFromISO(config);\n        return;\n    }\n    if (config._f === hooks.RFC_2822) {\n        configFromRFC2822(config);\n        return;\n    }\n    config._a = [];\n    getParsingFlags(config).empty = true;\n\n    // This array is used to make a Date, either with `new Date` or `Date.UTC`\n    var string = '' + config._i,\n        i,\n        parsedInput,\n        tokens,\n        token,\n        skipped,\n        stringLength = string.length,\n        totalParsedInputLength = 0,\n        era,\n        tokenLen;\n\n    tokens =\n        expandFormat(config._f, config._locale).match(formattingTokens) || [];\n    tokenLen = tokens.length;\n    for (i = 0; i < tokenLen; i++) {\n        token = tokens[i];\n        parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n            [])[0];\n        if (parsedInput) {\n            skipped = string.substr(0, string.indexOf(parsedInput));\n            if (skipped.length > 0) {\n                getParsingFlags(config).unusedInput.push(skipped);\n            }\n            string = string.slice(\n                string.indexOf(parsedInput) + parsedInput.length\n            );\n            totalParsedInputLength += parsedInput.length;\n        }\n        // don't parse if it's not a known token\n        if (formatTokenFunctions[token]) {\n            if (parsedInput) {\n                getParsingFlags(config).empty = false;\n            } else {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n            addTimeToArrayFromToken(token, parsedInput, config);\n        } else if (config._strict && !parsedInput) {\n            getParsingFlags(config).unusedTokens.push(token);\n        }\n    }\n\n    // add remaining unparsed input length to the string\n    getParsingFlags(config).charsLeftOver =\n        stringLength - totalParsedInputLength;\n    if (string.length > 0) {\n        getParsingFlags(config).unusedInput.push(string);\n    }\n\n    // clear _12h flag if hour is <= 12\n    if (\n        config._a[HOUR] <= 12 &&\n        getParsingFlags(config).bigHour === true &&\n        config._a[HOUR] > 0\n    ) {\n        getParsingFlags(config).bigHour = undefined;\n    }\n\n    getParsingFlags(config).parsedDateParts = config._a.slice(0);\n    getParsingFlags(config).meridiem = config._meridiem;\n    // handle meridiem\n    config._a[HOUR] = meridiemFixWrap(\n        config._locale,\n        config._a[HOUR],\n        config._meridiem\n    );\n\n    // handle era\n    era = getParsingFlags(config).era;\n    if (era !== null) {\n        config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n    }\n\n    configFromArray(config);\n    checkOverflow(config);\n}\n\nfunction meridiemFixWrap(locale, hour, meridiem) {\n    var isPm;\n\n    if (meridiem == null) {\n        // nothing to do\n        return hour;\n    }\n    if (locale.meridiemHour != null) {\n        return locale.meridiemHour(hour, meridiem);\n    } else if (locale.isPM != null) {\n        // Fallback\n        isPm = locale.isPM(meridiem);\n        if (isPm && hour < 12) {\n            hour += 12;\n        }\n        if (!isPm && hour === 12) {\n            hour = 0;\n        }\n        return hour;\n    } else {\n        // this is not supposed to happen\n        return hour;\n    }\n}\n\n// date from string and array of format strings\nfunction configFromStringAndArray(config) {\n    var tempConfig,\n        bestMoment,\n        scoreToBeat,\n        i,\n        currentScore,\n        validFormatFound,\n        bestFormatIsValid = false,\n        configfLen = config._f.length;\n\n    if (configfLen === 0) {\n        getParsingFlags(config).invalidFormat = true;\n        config._d = new Date(NaN);\n        return;\n    }\n\n    for (i = 0; i < configfLen; i++) {\n        currentScore = 0;\n        validFormatFound = false;\n        tempConfig = copyConfig({}, config);\n        if (config._useUTC != null) {\n            tempConfig._useUTC = config._useUTC;\n        }\n        tempConfig._f = config._f[i];\n        configFromStringAndFormat(tempConfig);\n\n        if (isValid(tempConfig)) {\n            validFormatFound = true;\n        }\n\n        // if there is any input that was not parsed add a penalty for that format\n        currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n        //or tokens\n        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n        getParsingFlags(tempConfig).score = currentScore;\n\n        if (!bestFormatIsValid) {\n            if (\n                scoreToBeat == null ||\n                currentScore < scoreToBeat ||\n                validFormatFound\n            ) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n                if (validFormatFound) {\n                    bestFormatIsValid = true;\n                }\n            }\n        } else {\n            if (currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n    }\n\n    extend(config, bestMoment || tempConfig);\n}\n\nfunction configFromObject(config) {\n    if (config._d) {\n        return;\n    }\n\n    var i = normalizeObjectUnits(config._i),\n        dayOrDate = i.day === undefined ? i.date : i.day;\n    config._a = map(\n        [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n        function (obj) {\n            return obj && parseInt(obj, 10);\n        }\n    );\n\n    configFromArray(config);\n}\n\nfunction createFromConfig(config) {\n    var res = new Moment(checkOverflow(prepareConfig(config)));\n    if (res._nextDay) {\n        // Adding is smart enough around DST\n        res.add(1, 'd');\n        res._nextDay = undefined;\n    }\n\n    return res;\n}\n\nfunction prepareConfig(config) {\n    var input = config._i,\n        format = config._f;\n\n    config._locale = config._locale || getLocale(config._l);\n\n    if (input === null || (format === undefined && input === '')) {\n        return createInvalid({ nullInput: true });\n    }\n\n    if (typeof input === 'string') {\n        config._i = input = config._locale.preparse(input);\n    }\n\n    if (isMoment(input)) {\n        return new Moment(checkOverflow(input));\n    } else if (isDate(input)) {\n        config._d = input;\n    } else if (isArray(format)) {\n        configFromStringAndArray(config);\n    } else if (format) {\n        configFromStringAndFormat(config);\n    } else {\n        configFromInput(config);\n    }\n\n    if (!isValid(config)) {\n        config._d = null;\n    }\n\n    return config;\n}\n\nfunction configFromInput(config) {\n    var input = config._i;\n    if (isUndefined(input)) {\n        config._d = new Date(hooks.now());\n    } else if (isDate(input)) {\n        config._d = new Date(input.valueOf());\n    } else if (typeof input === 'string') {\n        configFromString(config);\n    } else if (isArray(input)) {\n        config._a = map(input.slice(0), function (obj) {\n            return parseInt(obj, 10);\n        });\n        configFromArray(config);\n    } else if (isObject(input)) {\n        configFromObject(config);\n    } else if (isNumber(input)) {\n        // from milliseconds\n        config._d = new Date(input);\n    } else {\n        hooks.createFromInputFallback(config);\n    }\n}\n\nfunction createLocalOrUTC(input, format, locale, strict, isUTC) {\n    var c = {};\n\n    if (format === true || format === false) {\n        strict = format;\n        format = undefined;\n    }\n\n    if (locale === true || locale === false) {\n        strict = locale;\n        locale = undefined;\n    }\n\n    if (\n        (isObject(input) && isObjectEmpty(input)) ||\n        (isArray(input) && input.length === 0)\n    ) {\n        input = undefined;\n    }\n    // object construction must be done this way.\n    // https://github.com/moment/moment/issues/1423\n    c._isAMomentObject = true;\n    c._useUTC = c._isUTC = isUTC;\n    c._l = locale;\n    c._i = input;\n    c._f = format;\n    c._strict = strict;\n\n    return createFromConfig(c);\n}\n\nfunction createLocal(input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, false);\n}\n\nvar prototypeMin = deprecate(\n        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    ),\n    prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n// Pick a moment m from moments so that m[fn](other) is true for all\n// other. This relies on the function fn to be transitive.\n//\n// moments should either be an array of moment objects or an array, whose\n// first element is an array of moment objects.\nfunction pickBy(fn, moments) {\n    var res, i;\n    if (moments.length === 1 && isArray(moments[0])) {\n        moments = moments[0];\n    }\n    if (!moments.length) {\n        return createLocal();\n    }\n    res = moments[0];\n    for (i = 1; i < moments.length; ++i) {\n        if (!moments[i].isValid() || moments[i][fn](res)) {\n            res = moments[i];\n        }\n    }\n    return res;\n}\n\n// TODO: Use [].sort instead?\nfunction min() {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isBefore', args);\n}\n\nfunction max() {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isAfter', args);\n}\n\nvar now = function () {\n    return Date.now ? Date.now() : +new Date();\n};\n\nvar ordering = [\n    'year',\n    'quarter',\n    'month',\n    'week',\n    'day',\n    'hour',\n    'minute',\n    'second',\n    'millisecond',\n];\n\nfunction isDurationValid(m) {\n    var key,\n        unitHasDecimal = false,\n        i,\n        orderLen = ordering.length;\n    for (key in m) {\n        if (\n            hasOwnProp(m, key) &&\n            !(\n                indexOf.call(ordering, key) !== -1 &&\n                (m[key] == null || !isNaN(m[key]))\n            )\n        ) {\n            return false;\n        }\n    }\n\n    for (i = 0; i < orderLen; ++i) {\n        if (m[ordering[i]]) {\n            if (unitHasDecimal) {\n                return false; // only allow non-integers for smallest unit\n            }\n            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                unitHasDecimal = true;\n            }\n        }\n    }\n\n    return true;\n}\n\nfunction isValid$1() {\n    return this._isValid;\n}\n\nfunction createInvalid$1() {\n    return createDuration(NaN);\n}\n\nfunction Duration(duration) {\n    var normalizedInput = normalizeObjectUnits(duration),\n        years = normalizedInput.year || 0,\n        quarters = normalizedInput.quarter || 0,\n        months = normalizedInput.month || 0,\n        weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n        days = normalizedInput.day || 0,\n        hours = normalizedInput.hour || 0,\n        minutes = normalizedInput.minute || 0,\n        seconds = normalizedInput.second || 0,\n        milliseconds = normalizedInput.millisecond || 0;\n\n    this._isValid = isDurationValid(normalizedInput);\n\n    // representation for dateAddRemove\n    this._milliseconds =\n        +milliseconds +\n        seconds * 1e3 + // 1000\n        minutes * 6e4 + // 1000 * 60\n        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n    // Because of dateAddRemove treats 24 hours as different from a\n    // day when working around DST, we need to store them separately\n    this._days = +days + weeks * 7;\n    // It is impossible to translate months into days without knowing\n    // which months you are are talking about, so we have to store\n    // it separately.\n    this._months = +months + quarters * 3 + years * 12;\n\n    this._data = {};\n\n    this._locale = getLocale();\n\n    this._bubble();\n}\n\nfunction isDuration(obj) {\n    return obj instanceof Duration;\n}\n\nfunction absRound(number) {\n    if (number < 0) {\n        return Math.round(-1 * number) * -1;\n    } else {\n        return Math.round(number);\n    }\n}\n\n// compare two arrays, return the number of differences\nfunction compareArrays(array1, array2, dontConvert) {\n    var len = Math.min(array1.length, array2.length),\n        lengthDiff = Math.abs(array1.length - array2.length),\n        diffs = 0,\n        i;\n    for (i = 0; i < len; i++) {\n        if (\n            (dontConvert && array1[i] !== array2[i]) ||\n            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n        ) {\n            diffs++;\n        }\n    }\n    return diffs + lengthDiff;\n}\n\n// FORMATTING\n\nfunction offset(token, separator) {\n    addFormatToken(token, 0, 0, function () {\n        var offset = this.utcOffset(),\n            sign = '+';\n        if (offset < 0) {\n            offset = -offset;\n            sign = '-';\n        }\n        return (\n            sign +\n            zeroFill(~~(offset / 60), 2) +\n            separator +\n            zeroFill(~~offset % 60, 2)\n        );\n    });\n}\n\noffset('Z', ':');\noffset('ZZ', '');\n\n// PARSING\n\naddRegexToken('Z', matchShortOffset);\naddRegexToken('ZZ', matchShortOffset);\naddParseToken(['Z', 'ZZ'], function (input, array, config) {\n    config._useUTC = true;\n    config._tzm = offsetFromString(matchShortOffset, input);\n});\n\n// HELPERS\n\n// timezone chunker\n// '+10:00' > ['10',  '00']\n// '-1530'  > ['-15', '30']\nvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\nfunction offsetFromString(matcher, string) {\n    var matches = (string || '').match(matcher),\n        chunk,\n        parts,\n        minutes;\n\n    if (matches === null) {\n        return null;\n    }\n\n    chunk = matches[matches.length - 1] || [];\n    parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n    minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n    return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n}\n\n// Return a moment from input, that is local/utc/zone equivalent to model.\nfunction cloneWithOffset(input, model) {\n    var res, diff;\n    if (model._isUTC) {\n        res = model.clone();\n        diff =\n            (isMoment(input) || isDate(input)\n                ? input.valueOf()\n                : createLocal(input).valueOf()) - res.valueOf();\n        // Use low-level api, because this fn is low-level api.\n        res._d.setTime(res._d.valueOf() + diff);\n        hooks.updateOffset(res, false);\n        return res;\n    } else {\n        return createLocal(input).local();\n    }\n}\n\nfunction getDateOffset(m) {\n    // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n    // https://github.com/moment/moment/pull/1871\n    return -Math.round(m._d.getTimezoneOffset());\n}\n\n// HOOKS\n\n// This function will be called whenever a moment is mutated.\n// It is intended to keep the offset in sync with the timezone.\nhooks.updateOffset = function () {};\n\n// MOMENTS\n\n// keepLocalTime = true means only change the timezone, without\n// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n// +0200, so we adjust the time as needed, to be valid.\n//\n// Keeping the time actually adds/subtracts (one hour)\n// from the actual represented time. That is why we call updateOffset\n// a second time. In case it wants us to change the offset again\n// _changeInProgress == true case, then we have to adjust, because\n// there is no such time in the given timezone.\nfunction getSetOffset(input, keepLocalTime, keepMinutes) {\n    var offset = this._offset || 0,\n        localAdjust;\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    if (input != null) {\n        if (typeof input === 'string') {\n            input = offsetFromString(matchShortOffset, input);\n            if (input === null) {\n                return this;\n            }\n        } else if (Math.abs(input) < 16 && !keepMinutes) {\n            input = input * 60;\n        }\n        if (!this._isUTC && keepLocalTime) {\n            localAdjust = getDateOffset(this);\n        }\n        this._offset = input;\n        this._isUTC = true;\n        if (localAdjust != null) {\n            this.add(localAdjust, 'm');\n        }\n        if (offset !== input) {\n            if (!keepLocalTime || this._changeInProgress) {\n                addSubtract(\n                    this,\n                    createDuration(input - offset, 'm'),\n                    1,\n                    false\n                );\n            } else if (!this._changeInProgress) {\n                this._changeInProgress = true;\n                hooks.updateOffset(this, true);\n                this._changeInProgress = null;\n            }\n        }\n        return this;\n    } else {\n        return this._isUTC ? offset : getDateOffset(this);\n    }\n}\n\nfunction getSetZone(input, keepLocalTime) {\n    if (input != null) {\n        if (typeof input !== 'string') {\n            input = -input;\n        }\n\n        this.utcOffset(input, keepLocalTime);\n\n        return this;\n    } else {\n        return -this.utcOffset();\n    }\n}\n\nfunction setOffsetToUTC(keepLocalTime) {\n    return this.utcOffset(0, keepLocalTime);\n}\n\nfunction setOffsetToLocal(keepLocalTime) {\n    if (this._isUTC) {\n        this.utcOffset(0, keepLocalTime);\n        this._isUTC = false;\n\n        if (keepLocalTime) {\n            this.subtract(getDateOffset(this), 'm');\n        }\n    }\n    return this;\n}\n\nfunction setOffsetToParsedOffset() {\n    if (this._tzm != null) {\n        this.utcOffset(this._tzm, false, true);\n    } else if (typeof this._i === 'string') {\n        var tZone = offsetFromString(matchOffset, this._i);\n        if (tZone != null) {\n            this.utcOffset(tZone);\n        } else {\n            this.utcOffset(0, true);\n        }\n    }\n    return this;\n}\n\nfunction hasAlignedHourOffset(input) {\n    if (!this.isValid()) {\n        return false;\n    }\n    input = input ? createLocal(input).utcOffset() : 0;\n\n    return (this.utcOffset() - input) % 60 === 0;\n}\n\nfunction isDaylightSavingTime() {\n    return (\n        this.utcOffset() > this.clone().month(0).utcOffset() ||\n        this.utcOffset() > this.clone().month(5).utcOffset()\n    );\n}\n\nfunction isDaylightSavingTimeShifted() {\n    if (!isUndefined(this._isDSTShifted)) {\n        return this._isDSTShifted;\n    }\n\n    var c = {},\n        other;\n\n    copyConfig(c, this);\n    c = prepareConfig(c);\n\n    if (c._a) {\n        other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n        this._isDSTShifted =\n            this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n    } else {\n        this._isDSTShifted = false;\n    }\n\n    return this._isDSTShifted;\n}\n\nfunction isLocal() {\n    return this.isValid() ? !this._isUTC : false;\n}\n\nfunction isUtcOffset() {\n    return this.isValid() ? this._isUTC : false;\n}\n\nfunction isUtc() {\n    return this.isValid() ? this._isUTC && this._offset === 0 : false;\n}\n\n// ASP.NET json date format regex\nvar aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    // and further modified to allow for strings containing both week and day\n    isoRegex =\n        /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\nfunction createDuration(input, key) {\n    var duration = input,\n        // matching against regexp is expensive, do it on demand\n        match = null,\n        sign,\n        ret,\n        diffRes;\n\n    if (isDuration(input)) {\n        duration = {\n            ms: input._milliseconds,\n            d: input._days,\n            M: input._months,\n        };\n    } else if (isNumber(input) || !isNaN(+input)) {\n        duration = {};\n        if (key) {\n            duration[key] = +input;\n        } else {\n            duration.milliseconds = +input;\n        }\n    } else if ((match = aspNetRegex.exec(input))) {\n        sign = match[1] === '-' ? -1 : 1;\n        duration = {\n            y: 0,\n            d: toInt(match[DATE]) * sign,\n            h: toInt(match[HOUR]) * sign,\n            m: toInt(match[MINUTE]) * sign,\n            s: toInt(match[SECOND]) * sign,\n            ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n        };\n    } else if ((match = isoRegex.exec(input))) {\n        sign = match[1] === '-' ? -1 : 1;\n        duration = {\n            y: parseIso(match[2], sign),\n            M: parseIso(match[3], sign),\n            w: parseIso(match[4], sign),\n            d: parseIso(match[5], sign),\n            h: parseIso(match[6], sign),\n            m: parseIso(match[7], sign),\n            s: parseIso(match[8], sign),\n        };\n    } else if (duration == null) {\n        // checks for null or undefined\n        duration = {};\n    } else if (\n        typeof duration === 'object' &&\n        ('from' in duration || 'to' in duration)\n    ) {\n        diffRes = momentsDifference(\n            createLocal(duration.from),\n            createLocal(duration.to)\n        );\n\n        duration = {};\n        duration.ms = diffRes.milliseconds;\n        duration.M = diffRes.months;\n    }\n\n    ret = new Duration(duration);\n\n    if (isDuration(input) && hasOwnProp(input, '_locale')) {\n        ret._locale = input._locale;\n    }\n\n    if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n        ret._isValid = input._isValid;\n    }\n\n    return ret;\n}\n\ncreateDuration.fn = Duration.prototype;\ncreateDuration.invalid = createInvalid$1;\n\nfunction parseIso(inp, sign) {\n    // We'd normally use ~~inp for this, but unfortunately it also\n    // converts floats to ints.\n    // inp may be undefined, so careful calling replace on it.\n    var res = inp && parseFloat(inp.replace(',', '.'));\n    // apply sign while we're at it\n    return (isNaN(res) ? 0 : res) * sign;\n}\n\nfunction positiveMomentsDifference(base, other) {\n    var res = {};\n\n    res.months =\n        other.month() - base.month() + (other.year() - base.year()) * 12;\n    if (base.clone().add(res.months, 'M').isAfter(other)) {\n        --res.months;\n    }\n\n    res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n    return res;\n}\n\nfunction momentsDifference(base, other) {\n    var res;\n    if (!(base.isValid() && other.isValid())) {\n        return { milliseconds: 0, months: 0 };\n    }\n\n    other = cloneWithOffset(other, base);\n    if (base.isBefore(other)) {\n        res = positiveMomentsDifference(base, other);\n    } else {\n        res = positiveMomentsDifference(other, base);\n        res.milliseconds = -res.milliseconds;\n        res.months = -res.months;\n    }\n\n    return res;\n}\n\n// TODO: remove 'name' arg after deprecation is removed\nfunction createAdder(direction, name) {\n    return function (val, period) {\n        var dur, tmp;\n        //invert the arguments, but complain about it\n        if (period !== null && !isNaN(+period)) {\n            deprecateSimple(\n                name,\n                'moment().' +\n                    name +\n                    '(period, number) is deprecated. Please use moment().' +\n                    name +\n                    '(number, period). ' +\n                    'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n            );\n            tmp = val;\n            val = period;\n            period = tmp;\n        }\n\n        dur = createDuration(val, period);\n        addSubtract(this, dur, direction);\n        return this;\n    };\n}\n\nfunction addSubtract(mom, duration, isAdding, updateOffset) {\n    var milliseconds = duration._milliseconds,\n        days = absRound(duration._days),\n        months = absRound(duration._months);\n\n    if (!mom.isValid()) {\n        // No op\n        return;\n    }\n\n    updateOffset = updateOffset == null ? true : updateOffset;\n\n    if (months) {\n        setMonth(mom, get(mom, 'Month') + months * isAdding);\n    }\n    if (days) {\n        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n    }\n    if (milliseconds) {\n        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n    }\n    if (updateOffset) {\n        hooks.updateOffset(mom, days || months);\n    }\n}\n\nvar add = createAdder(1, 'add'),\n    subtract = createAdder(-1, 'subtract');\n\nfunction isString(input) {\n    return typeof input === 'string' || input instanceof String;\n}\n\n// type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\nfunction isMomentInput(input) {\n    return (\n        isMoment(input) ||\n        isDate(input) ||\n        isString(input) ||\n        isNumber(input) ||\n        isNumberOrStringArray(input) ||\n        isMomentInputObject(input) ||\n        input === null ||\n        input === undefined\n    );\n}\n\nfunction isMomentInputObject(input) {\n    var objectTest = isObject(input) && !isObjectEmpty(input),\n        propertyTest = false,\n        properties = [\n            'years',\n            'year',\n            'y',\n            'months',\n            'month',\n            'M',\n            'days',\n            'day',\n            'd',\n            'dates',\n            'date',\n            'D',\n            'hours',\n            'hour',\n            'h',\n            'minutes',\n            'minute',\n            'm',\n            'seconds',\n            'second',\n            's',\n            'milliseconds',\n            'millisecond',\n            'ms',\n        ],\n        i,\n        property,\n        propertyLen = properties.length;\n\n    for (i = 0; i < propertyLen; i += 1) {\n        property = properties[i];\n        propertyTest = propertyTest || hasOwnProp(input, property);\n    }\n\n    return objectTest && propertyTest;\n}\n\nfunction isNumberOrStringArray(input) {\n    var arrayTest = isArray(input),\n        dataTypeTest = false;\n    if (arrayTest) {\n        dataTypeTest =\n            input.filter(function (item) {\n                return !isNumber(item) && isString(input);\n            }).length === 0;\n    }\n    return arrayTest && dataTypeTest;\n}\n\nfunction isCalendarSpec(input) {\n    var objectTest = isObject(input) && !isObjectEmpty(input),\n        propertyTest = false,\n        properties = [\n            'sameDay',\n            'nextDay',\n            'lastDay',\n            'nextWeek',\n            'lastWeek',\n            'sameElse',\n        ],\n        i,\n        property;\n\n    for (i = 0; i < properties.length; i += 1) {\n        property = properties[i];\n        propertyTest = propertyTest || hasOwnProp(input, property);\n    }\n\n    return objectTest && propertyTest;\n}\n\nfunction getCalendarFormat(myMoment, now) {\n    var diff = myMoment.diff(now, 'days', true);\n    return diff < -6\n        ? 'sameElse'\n        : diff < -1\n          ? 'lastWeek'\n          : diff < 0\n            ? 'lastDay'\n            : diff < 1\n              ? 'sameDay'\n              : diff < 2\n                ? 'nextDay'\n                : diff < 7\n                  ? 'nextWeek'\n                  : 'sameElse';\n}\n\nfunction calendar$1(time, formats) {\n    // Support for single parameter, formats only overload to the calendar function\n    if (arguments.length === 1) {\n        if (!arguments[0]) {\n            time = undefined;\n            formats = undefined;\n        } else if (isMomentInput(arguments[0])) {\n            time = arguments[0];\n            formats = undefined;\n        } else if (isCalendarSpec(arguments[0])) {\n            formats = arguments[0];\n            time = undefined;\n        }\n    }\n    // We want to compare the start of today, vs this.\n    // Getting start-of-today depends on whether we're local/utc/offset or not.\n    var now = time || createLocal(),\n        sod = cloneWithOffset(now, this).startOf('day'),\n        format = hooks.calendarFormat(this, sod) || 'sameElse',\n        output =\n            formats &&\n            (isFunction(formats[format])\n                ? formats[format].call(this, now)\n                : formats[format]);\n\n    return this.format(\n        output || this.localeData().calendar(format, this, createLocal(now))\n    );\n}\n\nfunction clone() {\n    return new Moment(this);\n}\n\nfunction isAfter(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(units) || 'millisecond';\n    if (units === 'millisecond') {\n        return this.valueOf() > localInput.valueOf();\n    } else {\n        return localInput.valueOf() < this.clone().startOf(units).valueOf();\n    }\n}\n\nfunction isBefore(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(units) || 'millisecond';\n    if (units === 'millisecond') {\n        return this.valueOf() < localInput.valueOf();\n    } else {\n        return this.clone().endOf(units).valueOf() < localInput.valueOf();\n    }\n}\n\nfunction isBetween(from, to, units, inclusivity) {\n    var localFrom = isMoment(from) ? from : createLocal(from),\n        localTo = isMoment(to) ? to : createLocal(to);\n    if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n        return false;\n    }\n    inclusivity = inclusivity || '()';\n    return (\n        (inclusivity[0] === '('\n            ? this.isAfter(localFrom, units)\n            : !this.isBefore(localFrom, units)) &&\n        (inclusivity[1] === ')'\n            ? this.isBefore(localTo, units)\n            : !this.isAfter(localTo, units))\n    );\n}\n\nfunction isSame(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input),\n        inputMs;\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(units) || 'millisecond';\n    if (units === 'millisecond') {\n        return this.valueOf() === localInput.valueOf();\n    } else {\n        inputMs = localInput.valueOf();\n        return (\n            this.clone().startOf(units).valueOf() <= inputMs &&\n            inputMs <= this.clone().endOf(units).valueOf()\n        );\n    }\n}\n\nfunction isSameOrAfter(input, units) {\n    return this.isSame(input, units) || this.isAfter(input, units);\n}\n\nfunction isSameOrBefore(input, units) {\n    return this.isSame(input, units) || this.isBefore(input, units);\n}\n\nfunction diff(input, units, asFloat) {\n    var that, zoneDelta, output;\n\n    if (!this.isValid()) {\n        return NaN;\n    }\n\n    that = cloneWithOffset(input, this);\n\n    if (!that.isValid()) {\n        return NaN;\n    }\n\n    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n    units = normalizeUnits(units);\n\n    switch (units) {\n        case 'year':\n            output = monthDiff(this, that) / 12;\n            break;\n        case 'month':\n            output = monthDiff(this, that);\n            break;\n        case 'quarter':\n            output = monthDiff(this, that) / 3;\n            break;\n        case 'second':\n            output = (this - that) / 1e3;\n            break; // 1000\n        case 'minute':\n            output = (this - that) / 6e4;\n            break; // 1000 * 60\n        case 'hour':\n            output = (this - that) / 36e5;\n            break; // 1000 * 60 * 60\n        case 'day':\n            output = (this - that - zoneDelta) / 864e5;\n            break; // 1000 * 60 * 60 * 24, negate dst\n        case 'week':\n            output = (this - that - zoneDelta) / 6048e5;\n            break; // 1000 * 60 * 60 * 24 * 7, negate dst\n        default:\n            output = this - that;\n    }\n\n    return asFloat ? output : absFloor(output);\n}\n\nfunction monthDiff(a, b) {\n    if (a.date() < b.date()) {\n        // end-of-month calculations work correct when the start month has more\n        // days than the end month.\n        return -monthDiff(b, a);\n    }\n    // difference in months\n    var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n        // b is in (anchor - 1 month, anchor + 1 month)\n        anchor = a.clone().add(wholeMonthDiff, 'months'),\n        anchor2,\n        adjust;\n\n    if (b - anchor < 0) {\n        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor - anchor2);\n    } else {\n        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor2 - anchor);\n    }\n\n    //check for negative zero, return zero if negative zero\n    return -(wholeMonthDiff + adjust) || 0;\n}\n\nhooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\nhooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\nfunction toString() {\n    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n}\n\nfunction toISOString(keepOffset) {\n    if (!this.isValid()) {\n        return null;\n    }\n    var utc = keepOffset !== true,\n        m = utc ? this.clone().utc() : this;\n    if (m.year() < 0 || m.year() > 9999) {\n        return formatMoment(\n            m,\n            utc\n                ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n    if (isFunction(Date.prototype.toISOString)) {\n        // native implementation is ~50x faster, use it when we can\n        if (utc) {\n            return this.toDate().toISOString();\n        } else {\n            return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                .toISOString()\n                .replace('Z', formatMoment(m, 'Z'));\n        }\n    }\n    return formatMoment(\n        m,\n        utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n    );\n}\n\n/**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\nfunction inspect() {\n    if (!this.isValid()) {\n        return 'moment.invalid(/* ' + this._i + ' */)';\n    }\n    var func = 'moment',\n        zone = '',\n        prefix,\n        year,\n        datetime,\n        suffix;\n    if (!this.isLocal()) {\n        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n        zone = 'Z';\n    }\n    prefix = '[' + func + '(\"]';\n    year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n    datetime = '-MM-DD[T]HH:mm:ss.SSS';\n    suffix = zone + '[\")]';\n\n    return this.format(prefix + year + datetime + suffix);\n}\n\nfunction format(inputString) {\n    if (!inputString) {\n        inputString = this.isUtc()\n            ? hooks.defaultFormatUtc\n            : hooks.defaultFormat;\n    }\n    var output = formatMoment(this, inputString);\n    return this.localeData().postformat(output);\n}\n\nfunction from(time, withoutSuffix) {\n    if (\n        this.isValid() &&\n        ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n    ) {\n        return createDuration({ to: this, from: time })\n            .locale(this.locale())\n            .humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction fromNow(withoutSuffix) {\n    return this.from(createLocal(), withoutSuffix);\n}\n\nfunction to(time, withoutSuffix) {\n    if (\n        this.isValid() &&\n        ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n    ) {\n        return createDuration({ from: this, to: time })\n            .locale(this.locale())\n            .humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction toNow(withoutSuffix) {\n    return this.to(createLocal(), withoutSuffix);\n}\n\n// If passed a locale key, it will set the locale for this\n// instance.  Otherwise, it will return the locale configuration\n// variables for this instance.\nfunction locale(key) {\n    var newLocaleData;\n\n    if (key === undefined) {\n        return this._locale._abbr;\n    } else {\n        newLocaleData = getLocale(key);\n        if (newLocaleData != null) {\n            this._locale = newLocaleData;\n        }\n        return this;\n    }\n}\n\nvar lang = deprecate(\n    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n    function (key) {\n        if (key === undefined) {\n            return this.localeData();\n        } else {\n            return this.locale(key);\n        }\n    }\n);\n\nfunction localeData() {\n    return this._locale;\n}\n\nvar MS_PER_SECOND = 1000,\n    MS_PER_MINUTE = 60 * MS_PER_SECOND,\n    MS_PER_HOUR = 60 * MS_PER_MINUTE,\n    MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n// actual modulo - handles negative numbers (for dates before 1970):\nfunction mod$1(dividend, divisor) {\n    return ((dividend % divisor) + divisor) % divisor;\n}\n\nfunction localStartOfDate(y, m, d) {\n    // the date constructor remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n        // preserve leap years using a full 400 year cycle, then reset\n        return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n    } else {\n        return new Date(y, m, d).valueOf();\n    }\n}\n\nfunction utcStartOfDate(y, m, d) {\n    // Date.UTC remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n        // preserve leap years using a full 400 year cycle, then reset\n        return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n    } else {\n        return Date.UTC(y, m, d);\n    }\n}\n\nfunction startOf(units) {\n    var time, startOfDate;\n    units = normalizeUnits(units);\n    if (units === undefined || units === 'millisecond' || !this.isValid()) {\n        return this;\n    }\n\n    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n    switch (units) {\n        case 'year':\n            time = startOfDate(this.year(), 0, 1);\n            break;\n        case 'quarter':\n            time = startOfDate(\n                this.year(),\n                this.month() - (this.month() % 3),\n                1\n            );\n            break;\n        case 'month':\n            time = startOfDate(this.year(), this.month(), 1);\n            break;\n        case 'week':\n            time = startOfDate(\n                this.year(),\n                this.month(),\n                this.date() - this.weekday()\n            );\n            break;\n        case 'isoWeek':\n            time = startOfDate(\n                this.year(),\n                this.month(),\n                this.date() - (this.isoWeekday() - 1)\n            );\n            break;\n        case 'day':\n        case 'date':\n            time = startOfDate(this.year(), this.month(), this.date());\n            break;\n        case 'hour':\n            time = this._d.valueOf();\n            time -= mod$1(\n                time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                MS_PER_HOUR\n            );\n            break;\n        case 'minute':\n            time = this._d.valueOf();\n            time -= mod$1(time, MS_PER_MINUTE);\n            break;\n        case 'second':\n            time = this._d.valueOf();\n            time -= mod$1(time, MS_PER_SECOND);\n            break;\n    }\n\n    this._d.setTime(time);\n    hooks.updateOffset(this, true);\n    return this;\n}\n\nfunction endOf(units) {\n    var time, startOfDate;\n    units = normalizeUnits(units);\n    if (units === undefined || units === 'millisecond' || !this.isValid()) {\n        return this;\n    }\n\n    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n    switch (units) {\n        case 'year':\n            time = startOfDate(this.year() + 1, 0, 1) - 1;\n            break;\n        case 'quarter':\n            time =\n                startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3) + 3,\n                    1\n                ) - 1;\n            break;\n        case 'month':\n            time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n            break;\n        case 'week':\n            time =\n                startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday() + 7\n                ) - 1;\n            break;\n        case 'isoWeek':\n            time =\n                startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1) + 7\n                ) - 1;\n            break;\n        case 'day':\n        case 'date':\n            time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n            break;\n        case 'hour':\n            time = this._d.valueOf();\n            time +=\n                MS_PER_HOUR -\n                mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                ) -\n                1;\n            break;\n        case 'minute':\n            time = this._d.valueOf();\n            time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n            break;\n        case 'second':\n            time = this._d.valueOf();\n            time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n            break;\n    }\n\n    this._d.setTime(time);\n    hooks.updateOffset(this, true);\n    return this;\n}\n\nfunction valueOf() {\n    return this._d.valueOf() - (this._offset || 0) * 60000;\n}\n\nfunction unix() {\n    return Math.floor(this.valueOf() / 1000);\n}\n\nfunction toDate() {\n    return new Date(this.valueOf());\n}\n\nfunction toArray() {\n    var m = this;\n    return [\n        m.year(),\n        m.month(),\n        m.date(),\n        m.hour(),\n        m.minute(),\n        m.second(),\n        m.millisecond(),\n    ];\n}\n\nfunction toObject() {\n    var m = this;\n    return {\n        years: m.year(),\n        months: m.month(),\n        date: m.date(),\n        hours: m.hours(),\n        minutes: m.minutes(),\n        seconds: m.seconds(),\n        milliseconds: m.milliseconds(),\n    };\n}\n\nfunction toJSON() {\n    // new Date(NaN).toJSON() === null\n    return this.isValid() ? this.toISOString() : null;\n}\n\nfunction isValid$2() {\n    return isValid(this);\n}\n\nfunction parsingFlags() {\n    return extend({}, getParsingFlags(this));\n}\n\nfunction invalidAt() {\n    return getParsingFlags(this).overflow;\n}\n\nfunction creationData() {\n    return {\n        input: this._i,\n        format: this._f,\n        locale: this._locale,\n        isUTC: this._isUTC,\n        strict: this._strict,\n    };\n}\n\naddFormatToken('N', 0, 0, 'eraAbbr');\naddFormatToken('NN', 0, 0, 'eraAbbr');\naddFormatToken('NNN', 0, 0, 'eraAbbr');\naddFormatToken('NNNN', 0, 0, 'eraName');\naddFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\naddFormatToken('y', ['y', 1], 'yo', 'eraYear');\naddFormatToken('y', ['yy', 2], 0, 'eraYear');\naddFormatToken('y', ['yyy', 3], 0, 'eraYear');\naddFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\naddRegexToken('N', matchEraAbbr);\naddRegexToken('NN', matchEraAbbr);\naddRegexToken('NNN', matchEraAbbr);\naddRegexToken('NNNN', matchEraName);\naddRegexToken('NNNNN', matchEraNarrow);\n\naddParseToken(\n    ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n    function (input, array, config, token) {\n        var era = config._locale.erasParse(input, token, config._strict);\n        if (era) {\n            getParsingFlags(config).era = era;\n        } else {\n            getParsingFlags(config).invalidEra = input;\n        }\n    }\n);\n\naddRegexToken('y', matchUnsigned);\naddRegexToken('yy', matchUnsigned);\naddRegexToken('yyy', matchUnsigned);\naddRegexToken('yyyy', matchUnsigned);\naddRegexToken('yo', matchEraYearOrdinal);\n\naddParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\naddParseToken(['yo'], function (input, array, config, token) {\n    var match;\n    if (config._locale._eraYearOrdinalRegex) {\n        match = input.match(config._locale._eraYearOrdinalRegex);\n    }\n\n    if (config._locale.eraYearOrdinalParse) {\n        array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n    } else {\n        array[YEAR] = parseInt(input, 10);\n    }\n});\n\nfunction localeEras(m, format) {\n    var i,\n        l,\n        date,\n        eras = this._eras || getLocale('en')._eras;\n    for (i = 0, l = eras.length; i < l; ++i) {\n        switch (typeof eras[i].since) {\n            case 'string':\n                // truncate time\n                date = hooks(eras[i].since).startOf('day');\n                eras[i].since = date.valueOf();\n                break;\n        }\n\n        switch (typeof eras[i].until) {\n            case 'undefined':\n                eras[i].until = +Infinity;\n                break;\n            case 'string':\n                // truncate time\n                date = hooks(eras[i].until).startOf('day').valueOf();\n                eras[i].until = date.valueOf();\n                break;\n        }\n    }\n    return eras;\n}\n\nfunction localeErasParse(eraName, format, strict) {\n    var i,\n        l,\n        eras = this.eras(),\n        name,\n        abbr,\n        narrow;\n    eraName = eraName.toUpperCase();\n\n    for (i = 0, l = eras.length; i < l; ++i) {\n        name = eras[i].name.toUpperCase();\n        abbr = eras[i].abbr.toUpperCase();\n        narrow = eras[i].narrow.toUpperCase();\n\n        if (strict) {\n            switch (format) {\n                case 'N':\n                case 'NN':\n                case 'NNN':\n                    if (abbr === eraName) {\n                        return eras[i];\n                    }\n                    break;\n\n                case 'NNNN':\n                    if (name === eraName) {\n                        return eras[i];\n                    }\n                    break;\n\n                case 'NNNNN':\n                    if (narrow === eraName) {\n                        return eras[i];\n                    }\n                    break;\n            }\n        } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n            return eras[i];\n        }\n    }\n}\n\nfunction localeErasConvertYear(era, year) {\n    var dir = era.since <= era.until ? +1 : -1;\n    if (year === undefined) {\n        return hooks(era.since).year();\n    } else {\n        return hooks(era.since).year() + (year - era.offset) * dir;\n    }\n}\n\nfunction getEraName() {\n    var i,\n        l,\n        val,\n        eras = this.localeData().eras();\n    for (i = 0, l = eras.length; i < l; ++i) {\n        // truncate time\n        val = this.clone().startOf('day').valueOf();\n\n        if (eras[i].since <= val && val <= eras[i].until) {\n            return eras[i].name;\n        }\n        if (eras[i].until <= val && val <= eras[i].since) {\n            return eras[i].name;\n        }\n    }\n\n    return '';\n}\n\nfunction getEraNarrow() {\n    var i,\n        l,\n        val,\n        eras = this.localeData().eras();\n    for (i = 0, l = eras.length; i < l; ++i) {\n        // truncate time\n        val = this.clone().startOf('day').valueOf();\n\n        if (eras[i].since <= val && val <= eras[i].until) {\n            return eras[i].narrow;\n        }\n        if (eras[i].until <= val && val <= eras[i].since) {\n            return eras[i].narrow;\n        }\n    }\n\n    return '';\n}\n\nfunction getEraAbbr() {\n    var i,\n        l,\n        val,\n        eras = this.localeData().eras();\n    for (i = 0, l = eras.length; i < l; ++i) {\n        // truncate time\n        val = this.clone().startOf('day').valueOf();\n\n        if (eras[i].since <= val && val <= eras[i].until) {\n            return eras[i].abbr;\n        }\n        if (eras[i].until <= val && val <= eras[i].since) {\n            return eras[i].abbr;\n        }\n    }\n\n    return '';\n}\n\nfunction getEraYear() {\n    var i,\n        l,\n        dir,\n        val,\n        eras = this.localeData().eras();\n    for (i = 0, l = eras.length; i < l; ++i) {\n        dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n        // truncate time\n        val = this.clone().startOf('day').valueOf();\n\n        if (\n            (eras[i].since <= val && val <= eras[i].until) ||\n            (eras[i].until <= val && val <= eras[i].since)\n        ) {\n            return (\n                (this.year() - hooks(eras[i].since).year()) * dir +\n                eras[i].offset\n            );\n        }\n    }\n\n    return this.year();\n}\n\nfunction erasNameRegex(isStrict) {\n    if (!hasOwnProp(this, '_erasNameRegex')) {\n        computeErasParse.call(this);\n    }\n    return isStrict ? this._erasNameRegex : this._erasRegex;\n}\n\nfunction erasAbbrRegex(isStrict) {\n    if (!hasOwnProp(this, '_erasAbbrRegex')) {\n        computeErasParse.call(this);\n    }\n    return isStrict ? this._erasAbbrRegex : this._erasRegex;\n}\n\nfunction erasNarrowRegex(isStrict) {\n    if (!hasOwnProp(this, '_erasNarrowRegex')) {\n        computeErasParse.call(this);\n    }\n    return isStrict ? this._erasNarrowRegex : this._erasRegex;\n}\n\nfunction matchEraAbbr(isStrict, locale) {\n    return locale.erasAbbrRegex(isStrict);\n}\n\nfunction matchEraName(isStrict, locale) {\n    return locale.erasNameRegex(isStrict);\n}\n\nfunction matchEraNarrow(isStrict, locale) {\n    return locale.erasNarrowRegex(isStrict);\n}\n\nfunction matchEraYearOrdinal(isStrict, locale) {\n    return locale._eraYearOrdinalRegex || matchUnsigned;\n}\n\nfunction computeErasParse() {\n    var abbrPieces = [],\n        namePieces = [],\n        narrowPieces = [],\n        mixedPieces = [],\n        i,\n        l,\n        erasName,\n        erasAbbr,\n        erasNarrow,\n        eras = this.eras();\n\n    for (i = 0, l = eras.length; i < l; ++i) {\n        erasName = regexEscape(eras[i].name);\n        erasAbbr = regexEscape(eras[i].abbr);\n        erasNarrow = regexEscape(eras[i].narrow);\n\n        namePieces.push(erasName);\n        abbrPieces.push(erasAbbr);\n        narrowPieces.push(erasNarrow);\n        mixedPieces.push(erasName);\n        mixedPieces.push(erasAbbr);\n        mixedPieces.push(erasNarrow);\n    }\n\n    this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n    this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n    this._erasNarrowRegex = new RegExp(\n        '^(' + narrowPieces.join('|') + ')',\n        'i'\n    );\n}\n\n// FORMATTING\n\naddFormatToken(0, ['gg', 2], 0, function () {\n    return this.weekYear() % 100;\n});\n\naddFormatToken(0, ['GG', 2], 0, function () {\n    return this.isoWeekYear() % 100;\n});\n\nfunction addWeekYearFormatToken(token, getter) {\n    addFormatToken(0, [token, token.length], 0, getter);\n}\n\naddWeekYearFormatToken('gggg', 'weekYear');\naddWeekYearFormatToken('ggggg', 'weekYear');\naddWeekYearFormatToken('GGGG', 'isoWeekYear');\naddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n// ALIASES\n\n// PARSING\n\naddRegexToken('G', matchSigned);\naddRegexToken('g', matchSigned);\naddRegexToken('GG', match1to2, match2);\naddRegexToken('gg', match1to2, match2);\naddRegexToken('GGGG', match1to4, match4);\naddRegexToken('gggg', match1to4, match4);\naddRegexToken('GGGGG', match1to6, match6);\naddRegexToken('ggggg', match1to6, match6);\n\naddWeekParseToken(\n    ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n    function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    }\n);\n\naddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n    week[token] = hooks.parseTwoDigitYear(input);\n});\n\n// MOMENTS\n\nfunction getSetWeekYear(input) {\n    return getSetWeekYearHelper.call(\n        this,\n        input,\n        this.week(),\n        this.weekday() + this.localeData()._week.dow,\n        this.localeData()._week.dow,\n        this.localeData()._week.doy\n    );\n}\n\nfunction getSetISOWeekYear(input) {\n    return getSetWeekYearHelper.call(\n        this,\n        input,\n        this.isoWeek(),\n        this.isoWeekday(),\n        1,\n        4\n    );\n}\n\nfunction getISOWeeksInYear() {\n    return weeksInYear(this.year(), 1, 4);\n}\n\nfunction getISOWeeksInISOWeekYear() {\n    return weeksInYear(this.isoWeekYear(), 1, 4);\n}\n\nfunction getWeeksInYear() {\n    var weekInfo = this.localeData()._week;\n    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getWeeksInWeekYear() {\n    var weekInfo = this.localeData()._week;\n    return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getSetWeekYearHelper(input, week, weekday, dow, doy) {\n    var weeksTarget;\n    if (input == null) {\n        return weekOfYear(this, dow, doy).year;\n    } else {\n        weeksTarget = weeksInYear(input, dow, doy);\n        if (week > weeksTarget) {\n            week = weeksTarget;\n        }\n        return setWeekAll.call(this, input, week, weekday, dow, doy);\n    }\n}\n\nfunction setWeekAll(weekYear, week, weekday, dow, doy) {\n    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n    this.year(date.getUTCFullYear());\n    this.month(date.getUTCMonth());\n    this.date(date.getUTCDate());\n    return this;\n}\n\n// FORMATTING\n\naddFormatToken('Q', 0, 'Qo', 'quarter');\n\n// PARSING\n\naddRegexToken('Q', match1);\naddParseToken('Q', function (input, array) {\n    array[MONTH] = (toInt(input) - 1) * 3;\n});\n\n// MOMENTS\n\nfunction getSetQuarter(input) {\n    return input == null\n        ? Math.ceil((this.month() + 1) / 3)\n        : this.month((input - 1) * 3 + (this.month() % 3));\n}\n\n// FORMATTING\n\naddFormatToken('D', ['DD', 2], 'Do', 'date');\n\n// PARSING\n\naddRegexToken('D', match1to2, match1to2NoLeadingZero);\naddRegexToken('DD', match1to2, match2);\naddRegexToken('Do', function (isStrict, locale) {\n    // TODO: Remove \"ordinalParse\" fallback in next major release.\n    return isStrict\n        ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n        : locale._dayOfMonthOrdinalParseLenient;\n});\n\naddParseToken(['D', 'DD'], DATE);\naddParseToken('Do', function (input, array) {\n    array[DATE] = toInt(input.match(match1to2)[0]);\n});\n\n// MOMENTS\n\nvar getSetDayOfMonth = makeGetSet('Date', true);\n\n// FORMATTING\n\naddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n// PARSING\n\naddRegexToken('DDD', match1to3);\naddRegexToken('DDDD', match3);\naddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n    config._dayOfYear = toInt(input);\n});\n\n// HELPERS\n\n// MOMENTS\n\nfunction getSetDayOfYear(input) {\n    var dayOfYear =\n        Math.round(\n            (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n        ) + 1;\n    return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('m', ['mm', 2], 0, 'minute');\n\n// PARSING\n\naddRegexToken('m', match1to2, match1to2HasZero);\naddRegexToken('mm', match1to2, match2);\naddParseToken(['m', 'mm'], MINUTE);\n\n// MOMENTS\n\nvar getSetMinute = makeGetSet('Minutes', false);\n\n// FORMATTING\n\naddFormatToken('s', ['ss', 2], 0, 'second');\n\n// PARSING\n\naddRegexToken('s', match1to2, match1to2HasZero);\naddRegexToken('ss', match1to2, match2);\naddParseToken(['s', 'ss'], SECOND);\n\n// MOMENTS\n\nvar getSetSecond = makeGetSet('Seconds', false);\n\n// FORMATTING\n\naddFormatToken('S', 0, 0, function () {\n    return ~~(this.millisecond() / 100);\n});\n\naddFormatToken(0, ['SS', 2], 0, function () {\n    return ~~(this.millisecond() / 10);\n});\n\naddFormatToken(0, ['SSS', 3], 0, 'millisecond');\naddFormatToken(0, ['SSSS', 4], 0, function () {\n    return this.millisecond() * 10;\n});\naddFormatToken(0, ['SSSSS', 5], 0, function () {\n    return this.millisecond() * 100;\n});\naddFormatToken(0, ['SSSSSS', 6], 0, function () {\n    return this.millisecond() * 1000;\n});\naddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n    return this.millisecond() * 10000;\n});\naddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n    return this.millisecond() * 100000;\n});\naddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n    return this.millisecond() * 1000000;\n});\n\n// PARSING\n\naddRegexToken('S', match1to3, match1);\naddRegexToken('SS', match1to3, match2);\naddRegexToken('SSS', match1to3, match3);\n\nvar token, getSetMillisecond;\nfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n    addRegexToken(token, matchUnsigned);\n}\n\nfunction parseMs(input, array) {\n    array[MILLISECOND] = toInt(('0.' + input) * 1000);\n}\n\nfor (token = 'S'; token.length <= 9; token += 'S') {\n    addParseToken(token, parseMs);\n}\n\ngetSetMillisecond = makeGetSet('Milliseconds', false);\n\n// FORMATTING\n\naddFormatToken('z', 0, 0, 'zoneAbbr');\naddFormatToken('zz', 0, 0, 'zoneName');\n\n// MOMENTS\n\nfunction getZoneAbbr() {\n    return this._isUTC ? 'UTC' : '';\n}\n\nfunction getZoneName() {\n    return this._isUTC ? 'Coordinated Universal Time' : '';\n}\n\nvar proto = Moment.prototype;\n\nproto.add = add;\nproto.calendar = calendar$1;\nproto.clone = clone;\nproto.diff = diff;\nproto.endOf = endOf;\nproto.format = format;\nproto.from = from;\nproto.fromNow = fromNow;\nproto.to = to;\nproto.toNow = toNow;\nproto.get = stringGet;\nproto.invalidAt = invalidAt;\nproto.isAfter = isAfter;\nproto.isBefore = isBefore;\nproto.isBetween = isBetween;\nproto.isSame = isSame;\nproto.isSameOrAfter = isSameOrAfter;\nproto.isSameOrBefore = isSameOrBefore;\nproto.isValid = isValid$2;\nproto.lang = lang;\nproto.locale = locale;\nproto.localeData = localeData;\nproto.max = prototypeMax;\nproto.min = prototypeMin;\nproto.parsingFlags = parsingFlags;\nproto.set = stringSet;\nproto.startOf = startOf;\nproto.subtract = subtract;\nproto.toArray = toArray;\nproto.toObject = toObject;\nproto.toDate = toDate;\nproto.toISOString = toISOString;\nproto.inspect = inspect;\nif (typeof Symbol !== 'undefined' && Symbol.for != null) {\n    proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n        return 'Moment<' + this.format() + '>';\n    };\n}\nproto.toJSON = toJSON;\nproto.toString = toString;\nproto.unix = unix;\nproto.valueOf = valueOf;\nproto.creationData = creationData;\nproto.eraName = getEraName;\nproto.eraNarrow = getEraNarrow;\nproto.eraAbbr = getEraAbbr;\nproto.eraYear = getEraYear;\nproto.year = getSetYear;\nproto.isLeapYear = getIsLeapYear;\nproto.weekYear = getSetWeekYear;\nproto.isoWeekYear = getSetISOWeekYear;\nproto.quarter = proto.quarters = getSetQuarter;\nproto.month = getSetMonth;\nproto.daysInMonth = getDaysInMonth;\nproto.week = proto.weeks = getSetWeek;\nproto.isoWeek = proto.isoWeeks = getSetISOWeek;\nproto.weeksInYear = getWeeksInYear;\nproto.weeksInWeekYear = getWeeksInWeekYear;\nproto.isoWeeksInYear = getISOWeeksInYear;\nproto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\nproto.date = getSetDayOfMonth;\nproto.day = proto.days = getSetDayOfWeek;\nproto.weekday = getSetLocaleDayOfWeek;\nproto.isoWeekday = getSetISODayOfWeek;\nproto.dayOfYear = getSetDayOfYear;\nproto.hour = proto.hours = getSetHour;\nproto.minute = proto.minutes = getSetMinute;\nproto.second = proto.seconds = getSetSecond;\nproto.millisecond = proto.milliseconds = getSetMillisecond;\nproto.utcOffset = getSetOffset;\nproto.utc = setOffsetToUTC;\nproto.local = setOffsetToLocal;\nproto.parseZone = setOffsetToParsedOffset;\nproto.hasAlignedHourOffset = hasAlignedHourOffset;\nproto.isDST = isDaylightSavingTime;\nproto.isLocal = isLocal;\nproto.isUtcOffset = isUtcOffset;\nproto.isUtc = isUtc;\nproto.isUTC = isUtc;\nproto.zoneAbbr = getZoneAbbr;\nproto.zoneName = getZoneName;\nproto.dates = deprecate(\n    'dates accessor is deprecated. Use date instead.',\n    getSetDayOfMonth\n);\nproto.months = deprecate(\n    'months accessor is deprecated. Use month instead',\n    getSetMonth\n);\nproto.years = deprecate(\n    'years accessor is deprecated. Use year instead',\n    getSetYear\n);\nproto.zone = deprecate(\n    'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n    getSetZone\n);\nproto.isDSTShifted = deprecate(\n    'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n    isDaylightSavingTimeShifted\n);\n\nfunction createUnix(input) {\n    return createLocal(input * 1000);\n}\n\nfunction createInZone() {\n    return createLocal.apply(null, arguments).parseZone();\n}\n\nfunction preParsePostFormat(string) {\n    return string;\n}\n\nvar proto$1 = Locale.prototype;\n\nproto$1.calendar = calendar;\nproto$1.longDateFormat = longDateFormat;\nproto$1.invalidDate = invalidDate;\nproto$1.ordinal = ordinal;\nproto$1.preparse = preParsePostFormat;\nproto$1.postformat = preParsePostFormat;\nproto$1.relativeTime = relativeTime;\nproto$1.pastFuture = pastFuture;\nproto$1.set = set;\nproto$1.eras = localeEras;\nproto$1.erasParse = localeErasParse;\nproto$1.erasConvertYear = localeErasConvertYear;\nproto$1.erasAbbrRegex = erasAbbrRegex;\nproto$1.erasNameRegex = erasNameRegex;\nproto$1.erasNarrowRegex = erasNarrowRegex;\n\nproto$1.months = localeMonths;\nproto$1.monthsShort = localeMonthsShort;\nproto$1.monthsParse = localeMonthsParse;\nproto$1.monthsRegex = monthsRegex;\nproto$1.monthsShortRegex = monthsShortRegex;\nproto$1.week = localeWeek;\nproto$1.firstDayOfYear = localeFirstDayOfYear;\nproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\nproto$1.weekdays = localeWeekdays;\nproto$1.weekdaysMin = localeWeekdaysMin;\nproto$1.weekdaysShort = localeWeekdaysShort;\nproto$1.weekdaysParse = localeWeekdaysParse;\n\nproto$1.weekdaysRegex = weekdaysRegex;\nproto$1.weekdaysShortRegex = weekdaysShortRegex;\nproto$1.weekdaysMinRegex = weekdaysMinRegex;\n\nproto$1.isPM = localeIsPM;\nproto$1.meridiem = localeMeridiem;\n\nfunction get$1(format, index, field, setter) {\n    var locale = getLocale(),\n        utc = createUTC().set(setter, index);\n    return locale[field](utc, format);\n}\n\nfunction listMonthsImpl(format, index, field) {\n    if (isNumber(format)) {\n        index = format;\n        format = undefined;\n    }\n\n    format = format || '';\n\n    if (index != null) {\n        return get$1(format, index, field, 'month');\n    }\n\n    var i,\n        out = [];\n    for (i = 0; i < 12; i++) {\n        out[i] = get$1(format, i, field, 'month');\n    }\n    return out;\n}\n\n// ()\n// (5)\n// (fmt, 5)\n// (fmt)\n// (true)\n// (true, 5)\n// (true, fmt, 5)\n// (true, fmt)\nfunction listWeekdaysImpl(localeSorted, format, index, field) {\n    if (typeof localeSorted === 'boolean') {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    } else {\n        format = localeSorted;\n        index = format;\n        localeSorted = false;\n\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    }\n\n    var locale = getLocale(),\n        shift = localeSorted ? locale._week.dow : 0,\n        i,\n        out = [];\n\n    if (index != null) {\n        return get$1(format, (index + shift) % 7, field, 'day');\n    }\n\n    for (i = 0; i < 7; i++) {\n        out[i] = get$1(format, (i + shift) % 7, field, 'day');\n    }\n    return out;\n}\n\nfunction listMonths(format, index) {\n    return listMonthsImpl(format, index, 'months');\n}\n\nfunction listMonthsShort(format, index) {\n    return listMonthsImpl(format, index, 'monthsShort');\n}\n\nfunction listWeekdays(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n}\n\nfunction listWeekdaysShort(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n}\n\nfunction listWeekdaysMin(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n}\n\ngetSetGlobalLocale('en', {\n    eras: [\n        {\n            since: '0001-01-01',\n            until: +Infinity,\n            offset: 1,\n            name: 'Anno Domini',\n            narrow: 'AD',\n            abbr: 'AD',\n        },\n        {\n            since: '0000-12-31',\n            until: -Infinity,\n            offset: 1,\n            name: 'Before Christ',\n            narrow: 'BC',\n            abbr: 'BC',\n        },\n    ],\n    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal: function (number) {\n        var b = number % 10,\n            output =\n                toInt((number % 100) / 10) === 1\n                    ? 'th'\n                    : b === 1\n                      ? 'st'\n                      : b === 2\n                        ? 'nd'\n                        : b === 3\n                          ? 'rd'\n                          : 'th';\n        return number + output;\n    },\n});\n\n// Side effect imports\n\nhooks.lang = deprecate(\n    'moment.lang is deprecated. Use moment.locale instead.',\n    getSetGlobalLocale\n);\nhooks.langData = deprecate(\n    'moment.langData is deprecated. Use moment.localeData instead.',\n    getLocale\n);\n\nvar mathAbs = Math.abs;\n\nfunction abs() {\n    var data = this._data;\n\n    this._milliseconds = mathAbs(this._milliseconds);\n    this._days = mathAbs(this._days);\n    this._months = mathAbs(this._months);\n\n    data.milliseconds = mathAbs(data.milliseconds);\n    data.seconds = mathAbs(data.seconds);\n    data.minutes = mathAbs(data.minutes);\n    data.hours = mathAbs(data.hours);\n    data.months = mathAbs(data.months);\n    data.years = mathAbs(data.years);\n\n    return this;\n}\n\nfunction addSubtract$1(duration, input, value, direction) {\n    var other = createDuration(input, value);\n\n    duration._milliseconds += direction * other._milliseconds;\n    duration._days += direction * other._days;\n    duration._months += direction * other._months;\n\n    return duration._bubble();\n}\n\n// supports only 2.0-style add(1, 's') or add(duration)\nfunction add$1(input, value) {\n    return addSubtract$1(this, input, value, 1);\n}\n\n// supports only 2.0-style subtract(1, 's') or subtract(duration)\nfunction subtract$1(input, value) {\n    return addSubtract$1(this, input, value, -1);\n}\n\nfunction absCeil(number) {\n    if (number < 0) {\n        return Math.floor(number);\n    } else {\n        return Math.ceil(number);\n    }\n}\n\nfunction bubble() {\n    var milliseconds = this._milliseconds,\n        days = this._days,\n        months = this._months,\n        data = this._data,\n        seconds,\n        minutes,\n        hours,\n        years,\n        monthsFromDays;\n\n    // if we have a mix of positive and negative values, bubble down first\n    // check: https://github.com/moment/moment/issues/2166\n    if (\n        !(\n            (milliseconds >= 0 && days >= 0 && months >= 0) ||\n            (milliseconds <= 0 && days <= 0 && months <= 0)\n        )\n    ) {\n        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n        days = 0;\n        months = 0;\n    }\n\n    // The following code bubbles up values, see the tests for\n    // examples of what that means.\n    data.milliseconds = milliseconds % 1000;\n\n    seconds = absFloor(milliseconds / 1000);\n    data.seconds = seconds % 60;\n\n    minutes = absFloor(seconds / 60);\n    data.minutes = minutes % 60;\n\n    hours = absFloor(minutes / 60);\n    data.hours = hours % 24;\n\n    days += absFloor(hours / 24);\n\n    // convert days to months\n    monthsFromDays = absFloor(daysToMonths(days));\n    months += monthsFromDays;\n    days -= absCeil(monthsToDays(monthsFromDays));\n\n    // 12 months -> 1 year\n    years = absFloor(months / 12);\n    months %= 12;\n\n    data.days = days;\n    data.months = months;\n    data.years = years;\n\n    return this;\n}\n\nfunction daysToMonths(days) {\n    // 400 years have 146097 days (taking into account leap year rules)\n    // 400 years have 12 months === 4800\n    return (days * 4800) / 146097;\n}\n\nfunction monthsToDays(months) {\n    // the reverse of daysToMonths\n    return (months * 146097) / 4800;\n}\n\nfunction as(units) {\n    if (!this.isValid()) {\n        return NaN;\n    }\n    var days,\n        months,\n        milliseconds = this._milliseconds;\n\n    units = normalizeUnits(units);\n\n    if (units === 'month' || units === 'quarter' || units === 'year') {\n        days = this._days + milliseconds / 864e5;\n        months = this._months + daysToMonths(days);\n        switch (units) {\n            case 'month':\n                return months;\n            case 'quarter':\n                return months / 3;\n            case 'year':\n                return months / 12;\n        }\n    } else {\n        // handle milliseconds separately because of floating point math errors (issue #1867)\n        days = this._days + Math.round(monthsToDays(this._months));\n        switch (units) {\n            case 'week':\n                return days / 7 + milliseconds / 6048e5;\n            case 'day':\n                return days + milliseconds / 864e5;\n            case 'hour':\n                return days * 24 + milliseconds / 36e5;\n            case 'minute':\n                return days * 1440 + milliseconds / 6e4;\n            case 'second':\n                return days * 86400 + milliseconds / 1000;\n            // Math.floor prevents floating point math errors here\n            case 'millisecond':\n                return Math.floor(days * 864e5) + milliseconds;\n            default:\n                throw new Error('Unknown unit ' + units);\n        }\n    }\n}\n\nfunction makeAs(alias) {\n    return function () {\n        return this.as(alias);\n    };\n}\n\nvar asMilliseconds = makeAs('ms'),\n    asSeconds = makeAs('s'),\n    asMinutes = makeAs('m'),\n    asHours = makeAs('h'),\n    asDays = makeAs('d'),\n    asWeeks = makeAs('w'),\n    asMonths = makeAs('M'),\n    asQuarters = makeAs('Q'),\n    asYears = makeAs('y'),\n    valueOf$1 = asMilliseconds;\n\nfunction clone$1() {\n    return createDuration(this);\n}\n\nfunction get$2(units) {\n    units = normalizeUnits(units);\n    return this.isValid() ? this[units + 's']() : NaN;\n}\n\nfunction makeGetter(name) {\n    return function () {\n        return this.isValid() ? this._data[name] : NaN;\n    };\n}\n\nvar milliseconds = makeGetter('milliseconds'),\n    seconds = makeGetter('seconds'),\n    minutes = makeGetter('minutes'),\n    hours = makeGetter('hours'),\n    days = makeGetter('days'),\n    months = makeGetter('months'),\n    years = makeGetter('years');\n\nfunction weeks() {\n    return absFloor(this.days() / 7);\n}\n\nvar round = Math.round,\n    thresholds = {\n        ss: 44, // a few seconds to seconds\n        s: 45, // seconds to minute\n        m: 45, // minutes to hour\n        h: 22, // hours to day\n        d: 26, // days to month/week\n        w: null, // weeks to month\n        M: 11, // months to year\n    };\n\n// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\nfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n}\n\nfunction relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n    var duration = createDuration(posNegDuration).abs(),\n        seconds = round(duration.as('s')),\n        minutes = round(duration.as('m')),\n        hours = round(duration.as('h')),\n        days = round(duration.as('d')),\n        months = round(duration.as('M')),\n        weeks = round(duration.as('w')),\n        years = round(duration.as('y')),\n        a =\n            (seconds <= thresholds.ss && ['s', seconds]) ||\n            (seconds < thresholds.s && ['ss', seconds]) ||\n            (minutes <= 1 && ['m']) ||\n            (minutes < thresholds.m && ['mm', minutes]) ||\n            (hours <= 1 && ['h']) ||\n            (hours < thresholds.h && ['hh', hours]) ||\n            (days <= 1 && ['d']) ||\n            (days < thresholds.d && ['dd', days]);\n\n    if (thresholds.w != null) {\n        a =\n            a ||\n            (weeks <= 1 && ['w']) ||\n            (weeks < thresholds.w && ['ww', weeks]);\n    }\n    a = a ||\n        (months <= 1 && ['M']) ||\n        (months < thresholds.M && ['MM', months]) ||\n        (years <= 1 && ['y']) || ['yy', years];\n\n    a[2] = withoutSuffix;\n    a[3] = +posNegDuration > 0;\n    a[4] = locale;\n    return substituteTimeAgo.apply(null, a);\n}\n\n// This function allows you to set the rounding function for relative time strings\nfunction getSetRelativeTimeRounding(roundingFunction) {\n    if (roundingFunction === undefined) {\n        return round;\n    }\n    if (typeof roundingFunction === 'function') {\n        round = roundingFunction;\n        return true;\n    }\n    return false;\n}\n\n// This function allows you to set a threshold for relative time strings\nfunction getSetRelativeTimeThreshold(threshold, limit) {\n    if (thresholds[threshold] === undefined) {\n        return false;\n    }\n    if (limit === undefined) {\n        return thresholds[threshold];\n    }\n    thresholds[threshold] = limit;\n    if (threshold === 's') {\n        thresholds.ss = limit - 1;\n    }\n    return true;\n}\n\nfunction humanize(argWithSuffix, argThresholds) {\n    if (!this.isValid()) {\n        return this.localeData().invalidDate();\n    }\n\n    var withSuffix = false,\n        th = thresholds,\n        locale,\n        output;\n\n    if (typeof argWithSuffix === 'object') {\n        argThresholds = argWithSuffix;\n        argWithSuffix = false;\n    }\n    if (typeof argWithSuffix === 'boolean') {\n        withSuffix = argWithSuffix;\n    }\n    if (typeof argThresholds === 'object') {\n        th = Object.assign({}, thresholds, argThresholds);\n        if (argThresholds.s != null && argThresholds.ss == null) {\n            th.ss = argThresholds.s - 1;\n        }\n    }\n\n    locale = this.localeData();\n    output = relativeTime$1(this, !withSuffix, th, locale);\n\n    if (withSuffix) {\n        output = locale.pastFuture(+this, output);\n    }\n\n    return locale.postformat(output);\n}\n\nvar abs$1 = Math.abs;\n\nfunction sign(x) {\n    return (x > 0) - (x < 0) || +x;\n}\n\nfunction toISOString$1() {\n    // for ISO strings we do not use the normal bubbling rules:\n    //  * milliseconds bubble up until they become hours\n    //  * days do not bubble at all\n    //  * months bubble up until they become years\n    // This is because there is no context-free conversion between hours and days\n    // (think of clock changes)\n    // and also not between days and months (28-31 days per month)\n    if (!this.isValid()) {\n        return this.localeData().invalidDate();\n    }\n\n    var seconds = abs$1(this._milliseconds) / 1000,\n        days = abs$1(this._days),\n        months = abs$1(this._months),\n        minutes,\n        hours,\n        years,\n        s,\n        total = this.asSeconds(),\n        totalSign,\n        ymSign,\n        daysSign,\n        hmsSign;\n\n    if (!total) {\n        // this is the same as C#'s (Noda) and python (isodate)...\n        // but not other JS (goog.date)\n        return 'P0D';\n    }\n\n    // 3600 seconds -> 60 minutes -> 1 hour\n    minutes = absFloor(seconds / 60);\n    hours = absFloor(minutes / 60);\n    seconds %= 60;\n    minutes %= 60;\n\n    // 12 months -> 1 year\n    years = absFloor(months / 12);\n    months %= 12;\n\n    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n    s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n    totalSign = total < 0 ? '-' : '';\n    ymSign = sign(this._months) !== sign(total) ? '-' : '';\n    daysSign = sign(this._days) !== sign(total) ? '-' : '';\n    hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n    return (\n        totalSign +\n        'P' +\n        (years ? ymSign + years + 'Y' : '') +\n        (months ? ymSign + months + 'M' : '') +\n        (days ? daysSign + days + 'D' : '') +\n        (hours || minutes || seconds ? 'T' : '') +\n        (hours ? hmsSign + hours + 'H' : '') +\n        (minutes ? hmsSign + minutes + 'M' : '') +\n        (seconds ? hmsSign + s + 'S' : '')\n    );\n}\n\nvar proto$2 = Duration.prototype;\n\nproto$2.isValid = isValid$1;\nproto$2.abs = abs;\nproto$2.add = add$1;\nproto$2.subtract = subtract$1;\nproto$2.as = as;\nproto$2.asMilliseconds = asMilliseconds;\nproto$2.asSeconds = asSeconds;\nproto$2.asMinutes = asMinutes;\nproto$2.asHours = asHours;\nproto$2.asDays = asDays;\nproto$2.asWeeks = asWeeks;\nproto$2.asMonths = asMonths;\nproto$2.asQuarters = asQuarters;\nproto$2.asYears = asYears;\nproto$2.valueOf = valueOf$1;\nproto$2._bubble = bubble;\nproto$2.clone = clone$1;\nproto$2.get = get$2;\nproto$2.milliseconds = milliseconds;\nproto$2.seconds = seconds;\nproto$2.minutes = minutes;\nproto$2.hours = hours;\nproto$2.days = days;\nproto$2.weeks = weeks;\nproto$2.months = months;\nproto$2.years = years;\nproto$2.humanize = humanize;\nproto$2.toISOString = toISOString$1;\nproto$2.toString = toISOString$1;\nproto$2.toJSON = toISOString$1;\nproto$2.locale = locale;\nproto$2.localeData = localeData;\n\nproto$2.toIsoString = deprecate(\n    'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n    toISOString$1\n);\nproto$2.lang = lang;\n\n// FORMATTING\n\naddFormatToken('X', 0, 0, 'unix');\naddFormatToken('x', 0, 0, 'valueOf');\n\n// PARSING\n\naddRegexToken('x', matchSigned);\naddRegexToken('X', matchTimestamp);\naddParseToken('X', function (input, array, config) {\n    config._d = new Date(parseFloat(input) * 1000);\n});\naddParseToken('x', function (input, array, config) {\n    config._d = new Date(toInt(input));\n});\n\n//! moment.js\n\nhooks.version = '2.30.1';\n\nsetHookCallback(createLocal);\n\nhooks.fn = proto;\nhooks.min = min;\nhooks.max = max;\nhooks.now = now;\nhooks.utc = createUTC;\nhooks.unix = createUnix;\nhooks.months = listMonths;\nhooks.isDate = isDate;\nhooks.locale = getSetGlobalLocale;\nhooks.invalid = createInvalid;\nhooks.duration = createDuration;\nhooks.isMoment = isMoment;\nhooks.weekdays = listWeekdays;\nhooks.parseZone = createInZone;\nhooks.localeData = getLocale;\nhooks.isDuration = isDuration;\nhooks.monthsShort = listMonthsShort;\nhooks.weekdaysMin = listWeekdaysMin;\nhooks.defineLocale = defineLocale;\nhooks.updateLocale = updateLocale;\nhooks.locales = listLocales;\nhooks.weekdaysShort = listWeekdaysShort;\nhooks.normalizeUnits = normalizeUnits;\nhooks.relativeTimeRounding = getSetRelativeTimeRounding;\nhooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\nhooks.calendarFormat = getCalendarFormat;\nhooks.prototype = proto;\n\n// currently HTML5 input type only supports 24-hour formats\nhooks.HTML5_FMT = {\n    DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n    DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n    DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n    DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n    TIME: 'HH:mm', // <input type=\"time\" />\n    TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n    TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n    WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n    MONTH: 'YYYY-MM', // <input type=\"month\" />\n};\n\nexport default hooks;\n","import _ from 'underscore';\nimport Backbone from 'backbone';\n\nvar girderEvents = _.clone(Backbone.Events);\n\nexport default girderEvents;\n","import $ from 'jquery';\nimport _ from 'underscore';\nimport Backbone from 'backbone';\n\nimport events from '@girder/core/events';\nimport { getCurrentToken, setCurrentUser, setCurrentToken } from '@girder/core/auth';\n\nlet apiRoot;\nlet publicSettings = null;\nvar uploadHandlers = {};\nvar uploadChunkSize = 1024 * 1024 * 64; // 64MB\n\n/**\n * Get the root path to the API.\n *\n * This may be an absolute path, or a path relative to the application root. It will never include\n * a trailing slash.\n *\n * @returns {string}\n */\nfunction getApiRoot() {\n    return apiRoot;\n}\n\n/**\n * Set the root path to the API.\n *\n * @param {string} root The root path for the API.\n */\nfunction setApiRoot(root) {\n    // Strip trailing slash\n    apiRoot = root.replace(/\\/$/, '');\n}\n\n/**\n * Get the public settings fetched at application startup (from\n * \"system/public_settings\"), so callers don't need to re-fetch them.\n *\n * @returns {?Object} The cached public settings, or null if not yet fetched.\n */\nfunction getPublicSettings() {\n    return publicSettings;\n}\n\n/**\n * Set the cached public settings. Called once by the application bootstrap\n * after fetching \"system/public_settings\".\n *\n * @param {Object} settings The public settings response.\n */\nfunction setPublicSettings(settings) {\n    publicSettings = settings;\n}\n\n/**\n * Make a request to the REST API.\n *\n * This is a wrapper around {@link http://api.jquery.com/jQuery.ajax/ $.ajax}, which also handles\n * authentication and routing to the Girder API, and provides a default for error notification.\n *\n * Most users of this method should attach a \"done\" handler to the return value. In cases where the\n * server is ordinarily expected to return a non-200 status (e.g. validating user input), the\n * \"error: null\" argument should probably be provided, and errors should be processed via an\n * attached \"fail\" handler.\n *\n * Before this function is called, the API root must be set (which typically happens automatically).\n *\n * @param {Object} opts Options for the request, most of which will be passed through to $.ajax.\n * @param {string} opts.url The resource path, relative to the API root, without leading or trailing\n *        slashes. e.g. \"user/login\"\n * @param {string} [opts.method='GET'] The HTTP method to invoke.\n * @param {string|Object} [opts.data] The query string or form parameter object.\n * @param {?Function} [opts.error] An error callback, as documented in\n *        {@link http://api.jquery.com/jQuery.ajax/ $.ajax}, or null. If not provided, this will\n *        have a default behavior of triggering a 'g:alert' global event, with details of the\n *        error, and logging the error to the console. It is recommended that you do not ever pass\n *        a non-null callback function, and handle errors via promise rejection handlers instead.\n * @param {string} [opts.girderToken] An alternative auth token to use for this request.\n * @returns {$.Promise} A jqXHR promise, which resolves and rejects\n *          {@link http://api.jquery.com/jQuery.ajax/#jqXHR as documented by $.ajax}.\n */\nconst restRequest = function (opts) {\n    opts = opts || {};\n    const defaults = {\n        // the default 'method' is 'GET', as set by 'jquery.ajax'\n\n        girderToken: getCurrentToken() || window.localStorage.getItem('girderToken'),\n\n        error: (error, status) => {\n            let info;\n            if (error.status === 401) {\n                setCurrentUser(null);\n                setCurrentToken(null);\n                events.trigger('g:loginUi');\n                info = {\n                    text: 'You must log in to view this resource',\n                    type: 'warning',\n                    timeout: 4000,\n                    icon: 'info'\n                };\n            } else if (error.status === 403) {\n                info = {\n                    text: 'Access denied. See the console for more details.',\n                    type: 'danger',\n                    timeout: 5000,\n                    icon: 'attention'\n                };\n            } else if (error.status === 0 && error.statusText === 'abort') {\n                /* We expected this abort, so do nothing. */\n                return;\n            } else if (error.status === 500 && error.responseJSON &&\n                error.responseJSON.type === 'girder') {\n                info = {\n                    text: error.responseJSON.message,\n                    type: 'warning',\n                    timeout: 5000,\n                    icon: 'info'\n                };\n            } else if (status === 'parsererror') {\n                info = {\n                    text: 'A parser error occurred while communicating with the ' +\n                          'server (did you use the correct value for `dataType`?). ' +\n                          'Details have been logged in the console.',\n                    type: 'danger',\n                    timeout: 5000,\n                    icon: 'attention'\n                };\n            } else {\n                info = {\n                    text: 'An error occurred while communicating with the ' +\n                          'server. Details have been logged in the console.',\n                    type: 'danger',\n                    timeout: 5000,\n                    icon: 'attention'\n                };\n            }\n            events.trigger('g:alert', info);\n            console.error(error.status + ' ' + error.statusText, error.responseText);\n        }\n    };\n\n    // Overwrite defaults with passed opts, but do not mutate opts\n    const args = _.extend({}, defaults, opts);\n\n    try {\n        // If the data is too large for a GET or PUT request, convert it to a POST request.\n        // Girder's REST API handles this for all requests.\n        if ((!args.method || args.method === 'GET' || args.method === 'PUT') && args.data && !args.contentType) {\n            if (JSON.stringify(args.data).length > 1536) {\n                args.headers = args.header || {};\n                args.headers['X-HTTP-Method-Override'] = args.method || 'GET';\n                args.method = 'POST';\n            }\n        }\n    } catch (err) { }\n\n    if (!args.url) {\n        throw new Error('restRequest requires a \"url\" argument');\n    }\n    args.url = `${getApiRoot()}${args.url.substring(0, 1) === '/' ? '' : '/'}${args.url}`;\n\n    if (args.girderToken) {\n        args.headers = args.headers || {};\n        args.headers['Girder-Token'] = args.girderToken;\n        delete args.girderToken;\n    }\n\n    return Backbone.$.ajax(args);\n};\n\n// All requests from Backbone should go through restRequest, adding authentication and the API root.\nBackbone.ajax = restRequest;\n\n/* Pending rest requests are listed in this pool so that they can be aborted or\n* checked if still processing. */\nvar restXhrPool = {};\nvar restXhrCount = 0;\n$(document).ajaxSend(function (event, xhr) {\n    restXhrCount += 1;\n    xhr.girderXhrNumber = restXhrCount;\n    restXhrPool[restXhrCount] = xhr;\n});\n$(document).ajaxComplete(function (event, xhr) {\n    var num = xhr.girderXhrNumber;\n    if (num && restXhrPool[num]) {\n        delete restXhrPool[num];\n    }\n});\n\n/* Get the number of outstanding rest requests.\n * :param category: if specified, only count those requests that have\n *                  xhr.girder[category] set to a truthy value.\n * :returns: the number of outstanding requests.\n */\nfunction numberOutstandingRestRequests(category) {\n    if (category) {\n        return _.filter(restXhrPool, function (xhr) {\n            return xhr.girder && xhr.girder[category];\n        }).length;\n    }\n    return _.size(restXhrPool);\n}\n\n/* Cancel outstanding rest requests.\n * :param category: if specified, only abort those requests that have\n *                  xhr.girder[category] set to a truthy value.\n */\nfunction cancelRestRequests(category) {\n    _.each(restXhrPool, function (xhr) {\n        if (category && (!xhr.girder || !xhr.girder[category])) {\n            return;\n        }\n        if (xhr.abort) {\n            xhr.abort();\n        }\n    });\n}\n\n/*\n * Get Upload Chunk Size\n */\nfunction getUploadChunkSize() {\n    return uploadChunkSize;\n}\n\n/*\n * Set Upload Chunk Size\n */\nfunction setUploadChunkSize(val) {\n    uploadChunkSize = val;\n}\n\nexport {\n    getApiRoot,\n    setApiRoot,\n    getPublicSettings,\n    setPublicSettings,\n    uploadHandlers,\n    restRequest,\n    numberOutstandingRestRequests,\n    cancelRestRequests,\n    getUploadChunkSize,\n    setUploadChunkSize\n};\n","import $ from 'jquery';\nimport _ from 'underscore';\nimport Backbone from 'backbone';\n\nimport { restRequest, getApiRoot } from '@girder/core/rest';\n\n/**\n * All models should descend from this base model, which provides a number\n * of utilities for synchronization.\n */\nvar Model = Backbone.Model.extend({\n    resourceName: null,\n    altUrl: null,\n    idAttribute: '_id',\n\n    /**\n     * Convenience method for incrementing numeric properties.\n     * @param {string} attr The attribute to increment.\n     * @param {number} [amount] The amount to increment by. Defaults to 1.\n     */\n    increment: function (attr, amount) {\n        if (amount === undefined) {\n            amount = 1;\n        }\n        if (!amount) {\n            return;\n        }\n        return this.set(attr, this.get(attr) + amount);\n    },\n\n    /**\n     * Get the name for this resource. By default, just the name attribute.\n     */\n    name: function () {\n        return this.get('name');\n    },\n\n    /**\n     * Save this model to the server. If this is a new model, meaning it has no\n     * _id attribute, this will create it. If the _id is set, we update the\n     * existing model. Triggers g:saved on success, and g:error on error.\n     */\n    save: function () {\n        if (this.altUrl === null && this.resourceName === null) {\n            throw new Error('An altUrl or resourceName must be set on the Model.');\n        }\n\n        var path, type;\n        if (this.has('_id')) {\n            path = (this.altUrl || this.resourceName) + '/' + this.get('_id');\n            type = 'PUT';\n        } else {\n            path = (this.altUrl || this.resourceName);\n            type = 'POST';\n        }\n        /* Don't save attributes which are objects using this call.  For\n         * instance, if the metadata of an item has keys that contain non-ascii\n         * values, they won't get handled by the rest call. */\n        var data = {};\n        _.each(this.keys(), function (key) {\n            var value = this.get(key);\n            if (!_.isObject(value)) {\n                data[key] = value;\n            }\n        }, this);\n\n        return restRequest({\n            url: path,\n            method: type,\n            data: data,\n            error: null // don't do default error behavior (validation may fail)\n        }).done((resp) => {\n            this.set(resp);\n            this.trigger('g:saved');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /**\n     * Fetch a single resource from the server. Triggers g:fetched on success,\n     * or g:error on error.\n     *\n     * @param {object|undefined} opts: additional options, which can include:\n     *     ignoreError: true - ignore the default error handler\n     *     extraPath - a string to append to the end of the resource URL\n     *     data - a dictionary of parameters to pass to the endpoint.\n     */\n    fetch: function (opts) {\n        if (this.altUrl === null && this.resourceName === null) {\n            throw new Error('An altUrl or resourceName must be set on the Model.');\n        }\n\n        opts = opts || {};\n        var restOpts = {\n            url: `${this.altUrl || this.resourceName}/${this.id}`\n        };\n        if (opts.extraPath) {\n            restOpts.url += '/' + opts.extraPath;\n        }\n        if (opts.ignoreError) {\n            restOpts.error = null;\n        }\n        if (opts.data) {\n            restOpts.data = opts.data;\n        }\n        return restRequest(restOpts).done((resp) => {\n            this.set(resp);\n            if (opts.extraPath) {\n                this.trigger('g:fetched.' + opts.extraPath);\n            } else {\n                this.trigger('g:fetched');\n            }\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /**\n     * Get the path for downloading this resource via the API. Can be used\n     * as the href property of a direct download link.\n     * @param params {Object} list of key-value parameters to include in the\n     *    query string.\n     */\n    downloadUrl: function (params) {\n        let url = `${getApiRoot()}/${this.altUrl || this.resourceName}/${this.id}/download`;\n\n        if (params) {\n            url += '?' + $.param(params);\n        }\n\n        return url;\n    },\n\n    /**\n     * For models that can be downloaded, this method can be used to\n     * initiate the download in the browser.\n     */\n    download: function () {\n        window.location.assign(this.downloadUrl());\n    },\n\n    /**\n     * Delete the model on the server.\n     * @param opts Options, may contain:\n     *   throwError Whether to throw an error (bool, default=true)\n     *   progress Whether to record progress (bool, default=false)\n     */\n    destroy: function (opts) {\n        if (this.altUrl === null && this.resourceName === null) {\n            throw new Error('An altUrl or resourceName must be set on the Model.');\n        }\n\n        var args = {\n            url: `${this.altUrl || this.resourceName}/${this.id}`,\n            method: 'DELETE'\n        };\n\n        opts = opts || {};\n        if (opts.progress === true) {\n            args.url += '?progress=true';\n        }\n\n        if (opts.throwError !== false) {\n            args.error = null;\n        }\n\n        return restRequest(args).done(() => {\n            if (this.collection) {\n                this.collection.remove(this);\n            }\n            this.trigger('g:deleted');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /**\n     * Return the access level with respect to the current user\n     */\n    getAccessLevel: function () {\n        return this.get('_accessLevel');\n    }\n\n});\n\nexport default Model;\n","import _ from 'underscore';\nimport Backbone from 'backbone';\n\nimport { getCurrentToken } from '@girder/core/auth';\n\nconst appElement = document.getElementById('app');\nlet apiRoot = (appElement && appElement.getAttribute('root')) || '';\napiRoot += (apiRoot.endsWith('/') ? '' : '/') + 'api/v1';\nif (!apiRoot.startsWith('/') && apiRoot.indexOf(':') < 0) {\n    apiRoot = '/' + apiRoot;\n}\nlet notifyRoot = apiRoot.endsWith('/api/v1') ? apiRoot.slice(0, -6) : apiRoot;\nnotifyRoot = notifyRoot.endsWith('/') ? notifyRoot.slice(0, -1) : notifyRoot;\n\n/**\n * The EventStream is an abstraction for server-sent events / long-polling via a\n * per-user event channel endpoint using a WebSocket. When events are\n * received on the websocket channel, this triggers a Backbone event of the form\n * 'g:event.<type>' where <type> is the value of the event type field.\n * Listeners can bind to specific event types on the channel.\n */\nfunction EventStream(settings) {\n    // Possible states are 'closed', 'stopped', 'started'\n    this._state = 'closed';\n\n    // Create context bindings only once, so they can be referenced when unbinding events\n    this._onVisibilityStateChange = _.bind(this._onVisibilityStateChange, this);\n    this._onMessage = _.bind(this._onMessage, this);\n    this._onError = _.bind(this._onError, this);\n\n    return _.extend(this, Backbone.Events);\n}\n\nEventStream.prototype._onVisibilityStateChange = function () {\n    if (document.visibilityState === 'visible' && this._state === 'stopped') {\n        this._start();\n    } else if (document.visibilityState === 'hidden' && this._state === 'started') {\n        this._stop();\n    }\n};\n\nEventStream.prototype._onMessage = function (e) {\n    let obj;\n    try {\n        obj = window.JSON.parse(e.data);\n    } catch (err) {\n        console.error('Invalid JSON from notification stream: ' + e.data + ',' + err);\n        this.trigger('g:error', e);\n        return;\n    }\n    this.trigger('g:event.' + obj.type, obj);\n};\n\nEventStream.prototype._onError = function () {\n    // TODO: Handle error\n};\n\nEventStream.prototype.open = function () {\n    if (!window.EventSource) {\n        console.error('EventSource is not supported on this platform.');\n        this.trigger('g:eventStream.disable');\n        return;\n    }\n    if (this._state !== 'closed') {\n        console.warn('EventStream should be closed.');\n        return;\n    }\n\n    this._state = 'stopped';\n    this._start();\n\n    document.addEventListener('visibilitychange', this._onVisibilityStateChange);\n};\n\nEventStream.prototype._start = function () {\n    if (this._state !== 'stopped') {\n        console.warn('EventStream should be stopped');\n        return;\n    }\n    this._websocket = new WebSocket(`${notifyRoot}/notifications/me?token=${getCurrentToken()}`);\n    this._websocket.onmessage = this._onMessage;\n    this._websocket.onerror = this._onError;\n\n    this._state = 'started';\n    this.trigger('g:eventStream.start');\n};\n\nEventStream.prototype._stop = function () {\n    if (this._state !== 'started') {\n        console.warn('EventStream should be started');\n        return;\n    }\n\n    this._websocket.close();\n    this._websocket = null;\n\n    this._state = 'stopped';\n    this.trigger('g:eventStream.stop');\n};\n\nEventStream.prototype.close = function () {\n    if (this._state === 'closed') {\n        console.warn('EventStream should not be closed');\n        return;\n    }\n\n    document.removeEventListener('visibilitychange', this._onVisibilityStateChange);\n\n    if (this._state === 'started') {\n        this._stop();\n    }\n\n    this._state = 'closed';\n    this.trigger('g:eventStream.close');\n};\n\nconst eventStream = new EventStream();\n\nexport default eventStream;\n","import _ from 'underscore';\n\nimport { fetchCurrentUser, setCurrentToken, setCurrentUser } from '@girder/core/auth';\nimport events from '@girder/core/events';\nimport Model from '@girder/core/models/Model';\nimport { restRequest } from '@girder/core/rest';\nimport eventStream from '@girder/core/utilities/EventStream';\n\nvar UserModel = Model.extend({\n    resourceName: 'user',\n\n    /**\n     * Calling this function mutates the model in one of two ways: (1) if a user\n     * is currently logged into Girder, the model will reflect that user; (2) if\n     * no user is logged in, the model will become clear.  To know which path\n     * occurred, you can call this method, then install a one-time event handler\n     * for the model's change event.  In that handler, calling isNew() on the\n     * model will tell if you if a user is logged in (false) or not (true).\n     *\n     * This is equivalent to invoking fetchCurrentUser(), then calling\n     * clear() or set() on the model depending on whether the result of the call\n     * is null or not.\n     */\n    current: function () {\n        fetchCurrentUser()\n            .done((user) => {\n                if (user) {\n                    this.set(user);\n                } else {\n                    this.clear();\n                }\n            });\n    },\n\n    name: function () {\n        return this.get('firstName') + ' ' + this.get('lastName');\n    },\n\n    /**\n     * When this user is added to a group, call this on the user model.\n     */\n    addToGroup: function (groupId) {\n        var groups = this.get('groups') || [];\n        groups.push(groupId);\n        this.set('groups', groups);\n    },\n\n    /**\n     * When this user is removed from a group, call this on the user model.\n     */\n    removeFromGroup: function (groupId) {\n        var groups = this.get('groups') || [];\n        var index = groups.indexOf(groupId);\n\n        while (index >= 0) {\n            groups.splice(index, 1);\n            index = groups.indexOf(groupId);\n        }\n\n        this.set('groups', groups);\n    },\n\n    /**\n     * When this user is invited to a group, call this on the user model.\n     */\n    addInvitation: function (groupId, level) {\n        var invites = this.get('groupInvites') || [];\n        invites.push({\n            groupId: groupId,\n            level: level\n        });\n\n        this.set('groupInvites', invites);\n    },\n\n    /**\n     * When this user's invitation is deleted, either by joining the group or\n     * having the invitation deleted manually, this should be called on the user\n     * model.\n     */\n    removeInvitation: function (groupId) {\n        var invites = this.get('groupInvites') || [];\n        var filtered = _.reject(invites, _.matcher({ groupId: groupId }));\n\n        this.set('groupInvites', filtered);\n    },\n\n    /**\n     * Change the password for this user.\n     */\n    changePassword: function (oldPassword, newPassword) {\n        return restRequest({\n            url: `${this.resourceName}/password`,\n            data: {\n                old: oldPassword,\n                new: newPassword\n            },\n            method: 'PUT',\n            error: null\n        }).done(() => {\n            this.trigger('g:passwordChanged');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /**\n     * Change the password for another user (as an admin).\n     */\n    adminChangePassword: function (newPassword) {\n        return restRequest({\n            url: `${this.resourceName}/${this.id}/password`,\n            data: {\n                password: newPassword\n            },\n            method: 'PUT',\n            error: null\n        }).done(() => {\n            this.trigger('g:passwordChanged');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    initializeEnableOtp: function () {\n        return restRequest({\n            url: `user/${this.id}/otp`,\n            method: 'POST',\n            error: null\n        })\n            .then((resp) => {\n                return resp.totpUri;\n            });\n    },\n\n    finializeEnableOtp: function (otpToken) {\n        return restRequest({\n            url: `user/${this.id}/otp`,\n            method: 'PUT',\n            headers: {\n                'Girder-OTP': otpToken\n            },\n            error: null\n        })\n            .done(() => {\n                this.set('otp', true);\n            });\n    },\n\n    disableOtp: function () {\n        return restRequest({\n            url: `user/${this.id}/otp`,\n            method: 'DELETE',\n            error: null\n        })\n            .done(() => {\n                this.set('otp', false);\n            });\n    }\n}, {\n    fromTemporaryToken: function (userId, token) {\n        return restRequest({\n            url: `user/password/temporary/${userId}`,\n            method: 'GET',\n            data: { token: token },\n            error: null\n        }).done((resp) => {\n            resp.user.token = resp.authToken.token;\n            eventStream.close();\n            setCurrentUser(new UserModel(resp.user));\n            setCurrentToken(resp.authToken.token);\n            eventStream.open();\n            events.trigger('g:login-changed');\n        });\n    },\n\n    sendVerificationEmail: function (login) {\n        return restRequest({\n            url: 'user/verification',\n            method: 'POST',\n            data: {\n                login: login\n            },\n            error: null\n        });\n    }\n});\n\nexport default UserModel;\n","import _ from 'underscore';\n\nimport UserModel from '@girder/core/models/UserModel';\nimport events from '@girder/core/events';\nimport { restRequest } from '@girder/core/rest';\n\n// TODO: this might need some fixing/testing, as it seems that\n// girder.corsAuth could be an override. See login doc below.\nvar corsAuth = false;\nvar currentUser = null;\nvar currentToken = window.localStorage.getItem('girderToken');\n\nfunction getCurrentUser() {\n    return currentUser;\n}\n\nfunction setCurrentUser(user) {\n    currentUser = user;\n}\n\nfunction getCurrentToken() {\n    return currentToken;\n}\n\nfunction setCurrentToken(token) {\n    currentToken = token;\n}\n\nfunction fetchCurrentUser() {\n    return restRequest({\n        method: 'GET',\n        url: '/user/me'\n    });\n}\n\n/**\n * Encode password using TextEncoder to support unicode\n */\nfunction basicAuthEncode(username, password) {\n    const encoder = new TextEncoder();\n    const data = encoder.encode(username + ':' + password);\n    return 'Basic ' + btoa(String.fromCharCode(...data));\n}\n\n/**\n * Log in to the server. If successful, sets the value of currentUser\n * and currentToken and triggers the \"g:login\" and \"g:login.success\".\n * On failure, triggers the \"g:login.error\" event.\n *\n * @param username The username or email to login as.\n * @param password The password to use.\n * @param otpToken An optional one-time password to include with the login.\n */\nfunction login(username, password, otpToken = null) {\n    var auth = basicAuthEncode(username, password);\n\n    const headers = {\n        Authorization: auth\n    };\n    if (_.isString(otpToken)) {\n        // Use _.isString to send header with empty string\n        headers['Girder-OTP'] = otpToken;\n    }\n    return restRequest({\n        method: 'GET',\n        url: '/user/authentication',\n        headers: headers,\n        error: null\n    }).then(function (response) {\n        response.user.token = response.authToken;\n\n        setCurrentUser(new UserModel(response.user));\n        setCurrentToken(response.user.token.token);\n\n        window.localStorage.setItem('girderToken', response.user.token.token);\n\n        events.trigger('g:login.success', response.user);\n        events.trigger('g:login', response);\n\n        return response.user;\n    }).fail(function (jqxhr) {\n        events.trigger('g:login.error', jqxhr.status, jqxhr);\n    });\n}\n\nfunction logout() {\n    return restRequest({\n        method: 'DELETE',\n        url: '/user/authentication'\n    }).done(function () {\n        setCurrentUser(null);\n        setCurrentToken(null);\n\n        window.localStorage.removeItem('girderToken');\n\n        events.trigger('g:login', null);\n        events.trigger('g:logout.success');\n    }).fail(function (jqxhr) {\n        events.trigger('g:logout.error', jqxhr.status, jqxhr);\n    });\n}\n\nexport {\n    corsAuth,\n    getCurrentUser,\n    setCurrentUser,\n    getCurrentToken,\n    setCurrentToken,\n    fetchCurrentUser,\n    login,\n    logout\n};\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport Model from '@girder/core/models/Model';\nimport { restRequest } from '@girder/core/rest';\n\n/**\n * Models corresponding to AccessControlledModels on the server should extend\n * from this object. It provides utilities for managing and storing the\n * access control list on\n */\nvar AccessControlledModel = Model.extend({\n    /**\n     * Saves the access control list on this model to the server. Saves the\n     * state of whatever this model's \"access\" parameter is set to, which\n     * should be an object of the form:\n     *    {groups: [{id: <groupId>, level: <accessLevel>}, ...],\n     *     users: [{id: <userId>, level: <accessLevel>}, ...]}\n     * The \"public\" attribute of this model should also be set as a boolean.\n     * When done, triggers the 'g:accessListSaved' event on the model.\n     */\n    updateAccess: function (params) {\n        if (this.altUrl === null && this.resourceName === null) {\n            throw new Error('An altUrl or resourceName must be set on the Model.');\n        }\n\n        return restRequest({\n            url: `${this.altUrl || this.resourceName}/${this.id}/access`,\n            method: 'PUT',\n            data: _.extend({\n                access: JSON.stringify(this.get('access')),\n                public: this.get('public'),\n                publicFlags: JSON.stringify(this.get('publicFlags') || [])\n            }, params || {})\n        }).done(() => {\n            this.trigger('g:accessListSaved');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /**\n     * Fetches the access control list from the server, and sets it as the\n     * access property.\n     * @param force By default, this only fetches access if it hasn't already\n     *              been set on the model. If you want to force a refresh\n     *              anyway, set this param to true.\n     */\n    fetchAccess: function (force) {\n        if (this.altUrl === null && this.resourceName === null) {\n            throw new Error('An altUrl or resourceName must be set on the Model.');\n        }\n\n        if (!this.get('access') || force) {\n            return restRequest({\n                url: `${this.altUrl || this.resourceName}/${this.id}/access`,\n                method: 'GET'\n            }).done((resp) => {\n                if (resp.access) {\n                    this.set(resp);\n                } else {\n                    this.set('access', resp);\n                }\n                this.trigger('g:accessFetched');\n                return resp;\n            }).fail((err) => {\n                this.trigger('g:error', err);\n            });\n        } else {\n            this.trigger('g:accessFetched');\n            return $.Deferred().resolve(this.get('access')).promise();\n        }\n    }\n});\n\nexport default AccessControlledModel;\n","import AccessControlledModel from '@girder/core/models/AccessControlledModel';\nimport { restRequest } from '@girder/core/rest';\n\nvar ApiKeyModel = AccessControlledModel.extend({\n    resourceName: 'api_key',\n\n    setActive: function (active) {\n        return restRequest({\n            url: `api_key/${this.id}`,\n            method: 'PUT',\n            data: {\n                active: active\n            }\n        }).done(() => {\n            this.set({ active: active });\n            this.trigger('g:setActive');\n        });\n    },\n\n    save: function () {\n        // Scope needs to be sent to the server as JSON\n        var scope = this.get('scope');\n        this.set('scope', JSON.stringify(scope), { silent: true }); // eslint-disable-line backbone/no-silent\n        var promise = AccessControlledModel.prototype.save.call(this, arguments);\n        // Restore scope to its original state\n        this.set('scope', scope, { silent: true }); // eslint-disable-line backbone/no-silent\n        return promise;\n    }\n});\n\nexport default ApiKeyModel;\n","var SORT_ASC = 1;\nvar SORT_DESC = -1;\n\nvar MONTHS = [\n    'January', 'February', 'March', 'April', 'May', 'June', 'July',\n    'August', 'September', 'October', 'November', 'December'\n];\n\nvar AccessType = {\n    NONE: -1,\n    READ: 0,\n    WRITE: 1,\n    ADMIN: 2\n};\n\nvar AssetstoreType = {\n    FILESYSTEM: 0,\n    S3: 2\n};\n\nvar Layout = {\n    DEFAULT: 'default',\n    EMPTY: 'empty'\n};\n\nexport {\n    SORT_ASC, SORT_DESC,\n    MONTHS,\n    AccessType,\n    AssetstoreType,\n    Layout\n};\n","var textarea;\n\nfunction decodeEntity(name) {\n  textarea = textarea || document.createElement('textarea');\n  textarea.innerHTML = '&' + name + ';';\n  return textarea.value;\n}\n\n/**\n * Utility functions\n */\n\nfunction typeOf(obj) {\n  return Object.prototype.toString.call(obj);\n}\n\nfunction isString(obj) {\n  return typeOf(obj) === '[object String]';\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n  return object\n    ? hasOwn.call(object, key)\n    : false;\n}\n\n// Extend objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = [].slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be object');\n    }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar UNESCAPE_MD_RE = /\\\\([\\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;\n\nfunction unescapeMd(str) {\n  if (str.indexOf('\\\\') < 0) { return str; }\n  return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n  /*eslint no-bitwise:0*/\n  // broken sequence\n  if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n  // never used\n  if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n  if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n  // control codes\n  if (c >= 0x00 && c <= 0x08) { return false; }\n  if (c === 0x0B) { return false; }\n  if (c >= 0x0E && c <= 0x1F) { return false; }\n  if (c >= 0x7F && c <= 0x9F) { return false; }\n  // out of range\n  if (c > 0x10FFFF) { return false; }\n  return true;\n}\n\nfunction fromCodePoint(c) {\n  /*eslint no-bitwise:0*/\n  if (c > 0xffff) {\n    c -= 0x10000;\n    var surrogate1 = 0xd800 + (c >> 10),\n        surrogate2 = 0xdc00 + (c & 0x3ff);\n\n    return String.fromCharCode(surrogate1, surrogate2);\n  }\n  return String.fromCharCode(c);\n}\n\nvar NAMED_ENTITY_RE   = /&([a-z#][a-z0-9]{1,31});/gi;\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nfunction replaceEntityPattern(match, name) {\n  var code = 0;\n  var decoded = decodeEntity(name);\n\n  if (name !== decoded) {\n    return decoded;\n  } else if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    code = name[1].toLowerCase() === 'x' ?\n      parseInt(name.slice(2), 16)\n    :\n      parseInt(name.slice(1), 10);\n    if (isValidEntityCode(code)) {\n      return fromCodePoint(code);\n    }\n  }\n  return match;\n}\n\nfunction replaceEntities(str) {\n  if (str.indexOf('&') < 0) { return str; }\n\n  return str.replace(NAMED_ENTITY_RE, replaceEntityPattern);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n  return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n  if (HTML_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n  }\n  return str;\n}\n\nvar utils = /*#__PURE__*/Object.freeze({\n  isString: isString,\n  has: has,\n  assign: assign,\n  unescapeMd: unescapeMd,\n  isValidEntityCode: isValidEntityCode,\n  fromCodePoint: fromCodePoint,\n  replaceEntities: replaceEntities,\n  escapeHtml: escapeHtml\n});\n\n/**\n * Renderer rules cache\n */\n\nvar rules = {};\n\n/**\n * Blockquotes\n */\n\nrules.blockquote_open = function(/* tokens, idx, options, env */) {\n  return '<blockquote>\\n';\n};\n\nrules.blockquote_close = function(tokens, idx /*, options, env */) {\n  return '</blockquote>' + getBreak(tokens, idx);\n};\n\n/**\n * Code\n */\n\nrules.code = function(tokens, idx /*, options, env */) {\n  if (tokens[idx].block) {\n    return '<pre><code>' + escapeHtml(tokens[idx].content) + '</code></pre>' + getBreak(tokens, idx);\n  }\n  return '<code>' + escapeHtml(tokens[idx].content) + '</code>';\n};\n\n/**\n * Fenced code blocks\n */\n\nrules.fence = function(tokens, idx, options, env, instance) {\n  var token = tokens[idx];\n  var langClass = '';\n  var langPrefix = options.langPrefix;\n  var langName = '', fences, fenceName;\n  var highlighted;\n\n  if (token.params) {\n\n    //\n    // ```foo bar\n    //\n    // Try custom renderer \"foo\" first. That will simplify overwrite\n    // for diagrams, latex, and any other fenced block with custom look\n    //\n\n    fences = token.params.split(/\\s+/g);\n    fenceName = fences.join(' ');\n\n    if (has(instance.rules.fence_custom, fences[0])) {\n      return instance.rules.fence_custom[fences[0]](tokens, idx, options, env, instance);\n    }\n\n    langName = escapeHtml(replaceEntities(unescapeMd(fenceName)));\n    langClass = ' class=\"' + langPrefix + langName + '\"';\n  }\n\n  if (options.highlight) {\n    highlighted = options.highlight.apply(options.highlight, [ token.content ].concat(fences))\n      || escapeHtml(token.content);\n  } else {\n    highlighted = escapeHtml(token.content);\n  }\n\n  return '<pre><code' + langClass + '>'\n        + highlighted\n        + '</code></pre>'\n        + getBreak(tokens, idx);\n};\n\nrules.fence_custom = {};\n\n/**\n * Headings\n */\n\nrules.heading_open = function(tokens, idx /*, options, env */) {\n  return '<h' + tokens[idx].hLevel + '>';\n};\nrules.heading_close = function(tokens, idx /*, options, env */) {\n  return '</h' + tokens[idx].hLevel + '>\\n';\n};\n\n/**\n * Horizontal rules\n */\n\nrules.hr = function(tokens, idx, options /*, env */) {\n  return (options.xhtmlOut ? '<hr />' : '<hr>') + getBreak(tokens, idx);\n};\n\n/**\n * Bullets\n */\n\nrules.bullet_list_open = function(/* tokens, idx, options, env */) {\n  return '<ul>\\n';\n};\nrules.bullet_list_close = function(tokens, idx /*, options, env */) {\n  return '</ul>' + getBreak(tokens, idx);\n};\n\n/**\n * List items\n */\n\nrules.list_item_open = function(/* tokens, idx, options, env */) {\n  return '<li>';\n};\nrules.list_item_close = function(/* tokens, idx, options, env */) {\n  return '</li>\\n';\n};\n\n/**\n * Ordered list items\n */\n\nrules.ordered_list_open = function(tokens, idx /*, options, env */) {\n  var token = tokens[idx];\n  var order = token.order > 1 ? ' start=\"' + token.order + '\"' : '';\n  return '<ol' + order + '>\\n';\n};\nrules.ordered_list_close = function(tokens, idx /*, options, env */) {\n  return '</ol>' + getBreak(tokens, idx);\n};\n\n/**\n * Paragraphs\n */\n\nrules.paragraph_open = function(tokens, idx /*, options, env */) {\n  return tokens[idx].tight ? '' : '<p>';\n};\nrules.paragraph_close = function(tokens, idx /*, options, env */) {\n  var addBreak = !(tokens[idx].tight && idx && tokens[idx - 1].type === 'inline' && !tokens[idx - 1].content);\n  return (tokens[idx].tight ? '' : '</p>') + (addBreak ? getBreak(tokens, idx) : '');\n};\n\n/**\n * Links\n */\n\nrules.link_open = function(tokens, idx, options /* env */) {\n  var title = tokens[idx].title ? (' title=\"' + escapeHtml(replaceEntities(tokens[idx].title)) + '\"') : '';\n  var target = options.linkTarget ? (' target=\"' + options.linkTarget + '\"') : '';\n  return '<a href=\"' + escapeHtml(tokens[idx].href) + '\"' + title + target + '>';\n};\nrules.link_close = function(/* tokens, idx, options, env */) {\n  return '</a>';\n};\n\n/**\n * Images\n */\n\nrules.image = function(tokens, idx, options /*, env */) {\n  var src = ' src=\"' + escapeHtml(tokens[idx].src) + '\"';\n  var title = tokens[idx].title ? (' title=\"' + escapeHtml(replaceEntities(tokens[idx].title)) + '\"') : '';\n  var alt = ' alt=\"' + (tokens[idx].alt ? escapeHtml(replaceEntities(unescapeMd(tokens[idx].alt))) : '') + '\"';\n  var suffix = options.xhtmlOut ? ' /' : '';\n  return '<img' + src + alt + title + suffix + '>';\n};\n\n/**\n * Tables\n */\n\nrules.table_open = function(/* tokens, idx, options, env */) {\n  return '<table>\\n';\n};\nrules.table_close = function(/* tokens, idx, options, env */) {\n  return '</table>\\n';\n};\nrules.thead_open = function(/* tokens, idx, options, env */) {\n  return '<thead>\\n';\n};\nrules.thead_close = function(/* tokens, idx, options, env */) {\n  return '</thead>\\n';\n};\nrules.tbody_open = function(/* tokens, idx, options, env */) {\n  return '<tbody>\\n';\n};\nrules.tbody_close = function(/* tokens, idx, options, env */) {\n  return '</tbody>\\n';\n};\nrules.tr_open = function(/* tokens, idx, options, env */) {\n  return '<tr>';\n};\nrules.tr_close = function(/* tokens, idx, options, env */) {\n  return '</tr>\\n';\n};\nrules.th_open = function(tokens, idx /*, options, env */) {\n  var token = tokens[idx];\n  return '<th'\n    + (token.align ? ' style=\"text-align:' + token.align + '\"' : '')\n    + '>';\n};\nrules.th_close = function(/* tokens, idx, options, env */) {\n  return '</th>';\n};\nrules.td_open = function(tokens, idx /*, options, env */) {\n  var token = tokens[idx];\n  return '<td'\n    + (token.align ? ' style=\"text-align:' + token.align + '\"' : '')\n    + '>';\n};\nrules.td_close = function(/* tokens, idx, options, env */) {\n  return '</td>';\n};\n\n/**\n * Bold\n */\n\nrules.strong_open = function(/* tokens, idx, options, env */) {\n  return '<strong>';\n};\nrules.strong_close = function(/* tokens, idx, options, env */) {\n  return '</strong>';\n};\n\n/**\n * Italicize\n */\n\nrules.em_open = function(/* tokens, idx, options, env */) {\n  return '<em>';\n};\nrules.em_close = function(/* tokens, idx, options, env */) {\n  return '</em>';\n};\n\n/**\n * Strikethrough\n */\n\nrules.del_open = function(/* tokens, idx, options, env */) {\n  return '<del>';\n};\nrules.del_close = function(/* tokens, idx, options, env */) {\n  return '</del>';\n};\n\n/**\n * Insert\n */\n\nrules.ins_open = function(/* tokens, idx, options, env */) {\n  return '<ins>';\n};\nrules.ins_close = function(/* tokens, idx, options, env */) {\n  return '</ins>';\n};\n\n/**\n * Highlight\n */\n\nrules.mark_open = function(/* tokens, idx, options, env */) {\n  return '<mark>';\n};\nrules.mark_close = function(/* tokens, idx, options, env */) {\n  return '</mark>';\n};\n\n/**\n * Super- and sub-script\n */\n\nrules.sub = function(tokens, idx /*, options, env */) {\n  return '<sub>' + escapeHtml(tokens[idx].content) + '</sub>';\n};\nrules.sup = function(tokens, idx /*, options, env */) {\n  return '<sup>' + escapeHtml(tokens[idx].content) + '</sup>';\n};\n\n/**\n * Breaks\n */\n\nrules.hardbreak = function(tokens, idx, options /*, env */) {\n  return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\nrules.softbreak = function(tokens, idx, options /*, env */) {\n  return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n/**\n * Text\n */\n\nrules.text = function(tokens, idx /*, options, env */) {\n  return escapeHtml(tokens[idx].content);\n};\n\n/**\n * Content\n */\n\nrules.htmlblock = function(tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\nrules.htmltag = function(tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\n\n/**\n * Abbreviations, initialism\n */\n\nrules.abbr_open = function(tokens, idx /*, options, env */) {\n  return '<abbr title=\"' + escapeHtml(replaceEntities(tokens[idx].title)) + '\">';\n};\nrules.abbr_close = function(/* tokens, idx, options, env */) {\n  return '</abbr>';\n};\n\n/**\n * Footnotes\n */\n\nrules.footnote_ref = function(tokens, idx) {\n  var n = Number(tokens[idx].id + 1).toString();\n  var id = 'fnref' + n;\n  if (tokens[idx].subId > 0) {\n    id += ':' + tokens[idx].subId;\n  }\n  return '<sup class=\"footnote-ref\"><a href=\"#fn' + n + '\" id=\"' + id + '\">[' + n + ']</a></sup>';\n};\nrules.footnote_block_open = function(tokens, idx, options) {\n  var hr = options.xhtmlOut\n    ? '<hr class=\"footnotes-sep\" />\\n'\n    : '<hr class=\"footnotes-sep\">\\n';\n  return hr + '<section class=\"footnotes\">\\n<ol class=\"footnotes-list\">\\n';\n};\nrules.footnote_block_close = function() {\n  return '</ol>\\n</section>\\n';\n};\nrules.footnote_open = function(tokens, idx) {\n  var id = Number(tokens[idx].id + 1).toString();\n  return '<li id=\"fn' + id + '\"  class=\"footnote-item\">';\n};\nrules.footnote_close = function() {\n  return '</li>\\n';\n};\nrules.footnote_anchor = function(tokens, idx) {\n  var n = Number(tokens[idx].id + 1).toString();\n  var id = 'fnref' + n;\n  if (tokens[idx].subId > 0) {\n    id += ':' + tokens[idx].subId;\n  }\n  return ' <a href=\"#' + id + '\" class=\"footnote-backref\">↩</a>';\n};\n\n/**\n * Definition lists\n */\n\nrules.dl_open = function() {\n  return '<dl>\\n';\n};\nrules.dt_open = function() {\n  return '<dt>';\n};\nrules.dd_open = function() {\n  return '<dd>';\n};\nrules.dl_close = function() {\n  return '</dl>\\n';\n};\nrules.dt_close = function() {\n  return '</dt>\\n';\n};\nrules.dd_close = function() {\n  return '</dd>\\n';\n};\n\n/**\n * Helper functions\n */\n\nfunction nextToken(tokens, idx) {\n  if (++idx >= tokens.length - 2) {\n    return idx;\n  }\n  if ((tokens[idx].type === 'paragraph_open' && tokens[idx].tight) &&\n      (tokens[idx + 1].type === 'inline' && tokens[idx + 1].content.length === 0) &&\n      (tokens[idx + 2].type === 'paragraph_close' && tokens[idx + 2].tight)) {\n    return nextToken(tokens, idx + 2);\n  }\n  return idx;\n}\n\n/**\n * Check to see if `\\n` is needed before the next token.\n *\n * @param  {Array} `tokens`\n * @param  {Number} `idx`\n * @return {String} Empty string or newline\n * @api private\n */\n\nvar getBreak = rules.getBreak = function getBreak(tokens, idx) {\n  idx = nextToken(tokens, idx);\n  if (idx < tokens.length && tokens[idx].type === 'list_item_close') {\n    return '';\n  }\n  return '\\n';\n};\n\n/**\n * Renderer class. Renders HTML and exposes `rules` to allow\n * local modifications.\n */\n\nfunction Renderer() {\n  this.rules = assign({}, rules);\n\n  // exported helper, for custom rules only\n  this.getBreak = rules.getBreak;\n}\n\n/**\n * Render a string of inline HTML with the given `tokens` and\n * `options`.\n *\n * @param  {Array} `tokens`\n * @param  {Object} `options`\n * @param  {Object} `env`\n * @return {String}\n * @api public\n */\n\nRenderer.prototype.renderInline = function (tokens, options, env) {\n  var _rules = this.rules;\n  var len = tokens.length, i = 0;\n  var result = '';\n\n  while (len--) {\n    result += _rules[tokens[i].type](tokens, i++, options, env, this);\n  }\n\n  return result;\n};\n\n/**\n * Render a string of HTML with the given `tokens` and\n * `options`.\n *\n * @param  {Array} `tokens`\n * @param  {Object} `options`\n * @param  {Object} `env`\n * @return {String}\n * @api public\n */\n\nRenderer.prototype.render = function (tokens, options, env) {\n  var _rules = this.rules;\n  var len = tokens.length, i = -1;\n  var result = '';\n\n  while (++i < len) {\n    if (tokens[i].type === 'inline') {\n      result += this.renderInline(tokens[i].children, options, env);\n    } else {\n      result += _rules[tokens[i].type](tokens, i, options, env, this);\n    }\n  }\n  return result;\n};\n\n/**\n * Ruler is a helper class for building responsibility chains from\n * parse rules. It allows:\n *\n *   - easy stack rules chains\n *   - getting main chain and named chains content (as arrays of functions)\n *\n * Helper methods, should not be used directly.\n * @api private\n */\n\nfunction Ruler() {\n  // List of added rules. Each element is:\n  //\n  // { name: XXX,\n  //   enabled: Boolean,\n  //   fn: Function(),\n  //   alt: [ name2, name3 ] }\n  //\n  this.__rules__ = [];\n\n  // Cached rule chains.\n  //\n  // First level - chain name, '' for default.\n  // Second level - digital anchor for fast filtering by charcodes.\n  //\n  this.__cache__ = null;\n}\n\n/**\n * Find the index of a rule by `name`.\n *\n * @param  {String} `name`\n * @return {Number} Index of the given `name`\n * @api private\n */\n\nRuler.prototype.__find__ = function (name) {\n  var len = this.__rules__.length;\n  var i = -1;\n\n  while (len--) {\n    if (this.__rules__[++i].name === name) {\n      return i;\n    }\n  }\n  return -1;\n};\n\n/**\n * Build the rules lookup cache\n *\n * @api private\n */\n\nRuler.prototype.__compile__ = function () {\n  var self = this;\n  var chains = [ '' ];\n\n  // collect unique names\n  self.__rules__.forEach(function (rule) {\n    if (!rule.enabled) {\n      return;\n    }\n\n    rule.alt.forEach(function (altName) {\n      if (chains.indexOf(altName) < 0) {\n        chains.push(altName);\n      }\n    });\n  });\n\n  self.__cache__ = {};\n\n  chains.forEach(function (chain) {\n    self.__cache__[chain] = [];\n    self.__rules__.forEach(function (rule) {\n      if (!rule.enabled) {\n        return;\n      }\n\n      if (chain && rule.alt.indexOf(chain) < 0) {\n        return;\n      }\n      self.__cache__[chain].push(rule.fn);\n    });\n  });\n};\n\n/**\n * Ruler public methods\n * ------------------------------------------------\n */\n\n/**\n * Replace rule function\n *\n * @param  {String} `name` Rule name\n * @param  {Function `fn`\n * @param  {Object} `options`\n * @api private\n */\n\nRuler.prototype.at = function (name, fn, options) {\n  var idx = this.__find__(name);\n  var opt = options || {};\n\n  if (idx === -1) {\n    throw new Error('Parser rule not found: ' + name);\n  }\n\n  this.__rules__[idx].fn = fn;\n  this.__rules__[idx].alt = opt.alt || [];\n  this.__cache__ = null;\n};\n\n/**\n * Add a rule to the chain before given the `ruleName`.\n *\n * @param  {String}   `beforeName`\n * @param  {String}   `ruleName`\n * @param  {Function} `fn`\n * @param  {Object}   `options`\n * @api private\n */\n\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n  var idx = this.__find__(beforeName);\n  var opt = options || {};\n\n  if (idx === -1) {\n    throw new Error('Parser rule not found: ' + beforeName);\n  }\n\n  this.__rules__.splice(idx, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n/**\n * Add a rule to the chain after the given `ruleName`.\n *\n * @param  {String}   `afterName`\n * @param  {String}   `ruleName`\n * @param  {Function} `fn`\n * @param  {Object}   `options`\n * @api private\n */\n\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n  var idx = this.__find__(afterName);\n  var opt = options || {};\n\n  if (idx === -1) {\n    throw new Error('Parser rule not found: ' + afterName);\n  }\n\n  this.__rules__.splice(idx + 1, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n/**\n * Add a rule to the end of chain.\n *\n * @param  {String}   `ruleName`\n * @param  {Function} `fn`\n * @param  {Object}   `options`\n * @return {String}\n */\n\nRuler.prototype.push = function (ruleName, fn, options) {\n  var opt = options || {};\n\n  this.__rules__.push({\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n/**\n * Enable a rule or list of rules.\n *\n * @param  {String|Array} `list` Name or array of rule names to enable\n * @param  {Boolean} `strict` If `true`, all non listed rules will be disabled.\n * @api private\n */\n\nRuler.prototype.enable = function (list, strict) {\n  list = !Array.isArray(list)\n    ? [ list ]\n    : list;\n\n  // In strict mode disable all existing rules first\n  if (strict) {\n    this.__rules__.forEach(function (rule) {\n      rule.enabled = false;\n    });\n  }\n\n  // Search by name and enable\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n    if (idx < 0) {\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = true;\n  }, this);\n\n  this.__cache__ = null;\n};\n\n\n/**\n * Disable a rule or list of rules.\n *\n * @param  {String|Array} `list` Name or array of rule names to disable\n * @api private\n */\n\nRuler.prototype.disable = function (list) {\n  list = !Array.isArray(list)\n    ? [ list ]\n    : list;\n\n  // Search by name and disable\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n    if (idx < 0) {\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = false;\n  }, this);\n\n  this.__cache__ = null;\n};\n\n/**\n * Get a rules list as an array of functions.\n *\n * @param  {String} `chainName`\n * @return {Object}\n * @api private\n */\n\nRuler.prototype.getRules = function (chainName) {\n  if (this.__cache__ === null) {\n    this.__compile__();\n  }\n  return this.__cache__[chainName] || [];\n};\n\nfunction block(state) {\n\n  if (state.inlineMode) {\n    state.tokens.push({\n      type: 'inline',\n      content: state.src.replace(/\\n/g, ' ').trim(),\n      level: 0,\n      lines: [ 0, 1 ],\n      children: []\n    });\n\n  } else {\n    state.block.parse(state.src, state.options, state.env, state.tokens);\n  }\n}\n\n// Inline parser state\n\nfunction StateInline(src, parserInline, options, env, outTokens) {\n  this.src = src;\n  this.env = env;\n  this.options = options;\n  this.parser = parserInline;\n  this.tokens = outTokens;\n  this.pos = 0;\n  this.posMax = this.src.length;\n  this.level = 0;\n  this.pending = '';\n  this.pendingLevel = 0;\n\n  this.cache = [];        // Stores { start: end } pairs. Useful for backtrack\n                          // optimization of pairs parse (emphasis, strikes).\n\n  // Link parser state vars\n\n  this.isInLabel = false; // Set true when seek link label - we should disable\n                          // \"paired\" rules (emphasis, strikes) to not skip\n                          // tailing `]`\n\n  this.linkLevel = 0;     // Increment for each nesting link. Used to prevent\n                          // nesting in definitions\n\n  this.linkContent = '';  // Temporary storage for link url\n\n  this.labelUnmatchedScopes = 0; // Track unpaired `[` for link labels\n                                 // (backtrack optimization)\n}\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n  this.tokens.push({\n    type: 'text',\n    content: this.pending,\n    level: this.pendingLevel\n  });\n  this.pending = '';\n};\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (token) {\n  if (this.pending) {\n    this.pushPending();\n  }\n\n  this.tokens.push(token);\n  this.pendingLevel = this.level;\n};\n\n// Store value to cache.\n// !!! Implementation has parser-specific optimizations\n// !!! keys MUST be integer, >= 0; values MUST be integer, > 0\n//\nStateInline.prototype.cacheSet = function (key, val) {\n  for (var i = this.cache.length; i <= key; i++) {\n    this.cache.push(0);\n  }\n\n  this.cache[key] = val;\n};\n\n// Get cache value\n//\nStateInline.prototype.cacheGet = function (key) {\n  return key < this.cache.length ? this.cache[key] : 0;\n};\n\n/**\n * Parse link labels\n *\n * This function assumes that first character (`[`) already matches;\n * returns the end of the label.\n *\n * @param  {Object} state\n * @param  {Number} start\n * @api private\n */\n\nfunction parseLinkLabel(state, start) {\n  var level, found, marker,\n      labelEnd = -1,\n      max = state.posMax,\n      oldPos = state.pos,\n      oldFlag = state.isInLabel;\n\n  if (state.isInLabel) { return -1; }\n\n  if (state.labelUnmatchedScopes) {\n    state.labelUnmatchedScopes--;\n    return -1;\n  }\n\n  state.pos = start + 1;\n  state.isInLabel = true;\n  level = 1;\n\n  while (state.pos < max) {\n    marker = state.src.charCodeAt(state.pos);\n    if (marker === 0x5B /* [ */) {\n      level++;\n    } else if (marker === 0x5D /* ] */) {\n      level--;\n      if (level === 0) {\n        found = true;\n        break;\n      }\n    }\n\n    state.parser.skipToken(state);\n  }\n\n  if (found) {\n    labelEnd = state.pos;\n    state.labelUnmatchedScopes = 0;\n  } else {\n    state.labelUnmatchedScopes = level - 1;\n  }\n\n  // restore old state\n  state.pos = oldPos;\n  state.isInLabel = oldFlag;\n\n  return labelEnd;\n}\n\n// Parse abbreviation definitions, i.e. `*[abbr]: description`\n\n\nfunction parseAbbr(str, parserInline, options, env) {\n  var state, labelEnd, pos, max, label, title;\n\n  if (str.charCodeAt(0) !== 0x2A/* * */) { return -1; }\n  if (str.charCodeAt(1) !== 0x5B/* [ */) { return -1; }\n\n  if (str.indexOf(']:') === -1) { return -1; }\n\n  state = new StateInline(str, parserInline, options, env, []);\n  labelEnd = parseLinkLabel(state, 1);\n\n  if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return -1; }\n\n  max = state.posMax;\n\n  // abbr title is always one line, so looking for ending \"\\n\" here\n  for (pos = labelEnd + 2; pos < max; pos++) {\n    if (state.src.charCodeAt(pos) === 0x0A) { break; }\n  }\n\n  label = str.slice(2, labelEnd);\n  title = str.slice(labelEnd + 2, pos).trim();\n  if (title.length === 0) { return -1; }\n  if (!env.abbreviations) { env.abbreviations = {}; }\n  // prepend ':' to avoid conflict with Object.prototype members\n  if (typeof env.abbreviations[':' + label] === 'undefined') {\n    env.abbreviations[':' + label] = title;\n  }\n\n  return pos;\n}\n\nfunction abbr(state) {\n  var tokens = state.tokens, i, l, content, pos;\n\n  if (state.inlineMode) {\n    return;\n  }\n\n  // Parse inlines\n  for (i = 1, l = tokens.length - 1; i < l; i++) {\n    if (tokens[i - 1].type === 'paragraph_open' &&\n        tokens[i].type === 'inline' &&\n        tokens[i + 1].type === 'paragraph_close') {\n\n      content = tokens[i].content;\n      while (content.length) {\n        pos = parseAbbr(content, state.inline, state.options, state.env);\n        if (pos < 0) { break; }\n        content = content.slice(pos).trim();\n      }\n\n      tokens[i].content = content;\n      if (!content.length) {\n        tokens[i - 1].tight = true;\n        tokens[i + 1].tight = true;\n      }\n    }\n  }\n}\n\nfunction normalizeLink(url) {\n  var normalized = replaceEntities(url);\n  // We shouldn't care about the result of malformed URIs,\n  // and should not throw an exception.\n  try {\n    normalized = decodeURI(normalized);\n  } catch (err) {}\n  return encodeURI(normalized);\n}\n\n/**\n * Parse link destination\n *\n *   - on success it returns a string and updates state.pos;\n *   - on failure it returns null\n *\n * @param  {Object} state\n * @param  {Number} pos\n * @api private\n */\n\nfunction parseLinkDestination(state, pos) {\n  var code, level, link,\n      start = pos,\n      max = state.posMax;\n\n  if (state.src.charCodeAt(pos) === 0x3C /* < */) {\n    pos++;\n    while (pos < max) {\n      code = state.src.charCodeAt(pos);\n      if (code === 0x0A /* \\n */) { return false; }\n      if (code === 0x3E /* > */) {\n        link = normalizeLink(unescapeMd(state.src.slice(start + 1, pos)));\n        if (!state.parser.validateLink(link)) { return false; }\n        state.pos = pos + 1;\n        state.linkContent = link;\n        return true;\n      }\n      if (code === 0x5C /* \\ */ && pos + 1 < max) {\n        pos += 2;\n        continue;\n      }\n\n      pos++;\n    }\n\n    // no closing '>'\n    return false;\n  }\n\n  // this should be ... } else { ... branch\n\n  level = 0;\n  while (pos < max) {\n    code = state.src.charCodeAt(pos);\n\n    if (code === 0x20) { break; }\n\n    // ascii control chars\n    if (code < 0x20 || code === 0x7F) { break; }\n\n    if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos += 2;\n      continue;\n    }\n\n    if (code === 0x28 /* ( */) {\n      level++;\n      if (level > 1) { break; }\n    }\n\n    if (code === 0x29 /* ) */) {\n      level--;\n      if (level < 0) { break; }\n    }\n\n    pos++;\n  }\n\n  if (start === pos) { return false; }\n\n  link = unescapeMd(state.src.slice(start, pos));\n  if (!state.parser.validateLink(link)) { return false; }\n\n  state.linkContent = link;\n  state.pos = pos;\n  return true;\n}\n\n/**\n * Parse link title\n *\n *   - on success it returns a string and updates state.pos;\n *   - on failure it returns null\n *\n * @param  {Object} state\n * @param  {Number} pos\n * @api private\n */\n\nfunction parseLinkTitle(state, pos) {\n  var code,\n      start = pos,\n      max = state.posMax,\n      marker = state.src.charCodeAt(pos);\n\n  if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return false; }\n\n  pos++;\n\n  // if opening marker is \"(\", switch it to closing marker \")\"\n  if (marker === 0x28) { marker = 0x29; }\n\n  while (pos < max) {\n    code = state.src.charCodeAt(pos);\n    if (code === marker) {\n      state.pos = pos + 1;\n      state.linkContent = unescapeMd(state.src.slice(start + 1, pos));\n      return true;\n    }\n    if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos += 2;\n      continue;\n    }\n\n    pos++;\n  }\n\n  return false;\n}\n\nfunction normalizeReference(str) {\n  // use .toUpperCase() instead of .toLowerCase()\n  // here to avoid a conflict with Object.prototype\n  // members (most notably, `__proto__`)\n  return str.trim().replace(/\\s+/g, ' ').toUpperCase();\n}\n\nfunction parseReference(str, parser, options, env) {\n  var state, labelEnd, pos, max, code, start, href, title, label;\n\n  if (str.charCodeAt(0) !== 0x5B/* [ */) { return -1; }\n\n  if (str.indexOf(']:') === -1) { return -1; }\n\n  state = new StateInline(str, parser, options, env, []);\n  labelEnd = parseLinkLabel(state, 0);\n\n  if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return -1; }\n\n  max = state.posMax;\n\n  // [label]:   destination   'title'\n  //         ^^^ skip optional whitespace here\n  for (pos = labelEnd + 2; pos < max; pos++) {\n    code = state.src.charCodeAt(pos);\n    if (code !== 0x20 && code !== 0x0A) { break; }\n  }\n\n  // [label]:   destination   'title'\n  //            ^^^^^^^^^^^ parse this\n  if (!parseLinkDestination(state, pos)) { return -1; }\n  href = state.linkContent;\n  pos = state.pos;\n\n  // [label]:   destination   'title'\n  //                       ^^^ skipping those spaces\n  start = pos;\n  for (pos = pos + 1; pos < max; pos++) {\n    code = state.src.charCodeAt(pos);\n    if (code !== 0x20 && code !== 0x0A) { break; }\n  }\n\n  // [label]:   destination   'title'\n  //                          ^^^^^^^ parse this\n  if (pos < max && start !== pos && parseLinkTitle(state, pos)) {\n    title = state.linkContent;\n    pos = state.pos;\n  } else {\n    title = '';\n    pos = start;\n  }\n\n  // ensure that the end of the line is empty\n  while (pos < max && state.src.charCodeAt(pos) === 0x20/* space */) { pos++; }\n  if (pos < max && state.src.charCodeAt(pos) !== 0x0A) { return -1; }\n\n  label = normalizeReference(str.slice(1, labelEnd));\n  if (typeof env.references[label] === 'undefined') {\n    env.references[label] = { title: title, href: href };\n  }\n\n  return pos;\n}\n\n\nfunction references(state) {\n  var tokens = state.tokens, i, l, content, pos;\n\n  state.env.references = state.env.references || {};\n\n  if (state.inlineMode) {\n    return;\n  }\n\n  // Scan definitions in paragraph inlines\n  for (i = 1, l = tokens.length - 1; i < l; i++) {\n    if (tokens[i].type === 'inline' &&\n        tokens[i - 1].type === 'paragraph_open' &&\n        tokens[i + 1].type === 'paragraph_close') {\n\n      content = tokens[i].content;\n      while (content.length) {\n        pos = parseReference(content, state.inline, state.options, state.env);\n        if (pos < 0) { break; }\n        content = content.slice(pos).trim();\n      }\n\n      tokens[i].content = content;\n      if (!content.length) {\n        tokens[i - 1].tight = true;\n        tokens[i + 1].tight = true;\n      }\n    }\n  }\n}\n\nfunction inline(state) {\n  var tokens = state.tokens, tok, i, l;\n\n  // Parse inlines\n  for (i = 0, l = tokens.length; i < l; i++) {\n    tok = tokens[i];\n    if (tok.type === 'inline') {\n      state.inline.parse(tok.content, state.options, state.env, tok.children);\n    }\n  }\n}\n\nfunction footnote_block(state) {\n  var i, l, j, t, lastParagraph, list, tokens, current, currentLabel,\n      level = 0,\n      insideRef = false,\n      refTokens = {};\n\n  if (!state.env.footnotes) { return; }\n\n  state.tokens = state.tokens.filter(function(tok) {\n    if (tok.type === 'footnote_reference_open') {\n      insideRef = true;\n      current = [];\n      currentLabel = tok.label;\n      return false;\n    }\n    if (tok.type === 'footnote_reference_close') {\n      insideRef = false;\n      // prepend ':' to avoid conflict with Object.prototype members\n      refTokens[':' + currentLabel] = current;\n      return false;\n    }\n    if (insideRef) { current.push(tok); }\n    return !insideRef;\n  });\n\n  if (!state.env.footnotes.list) { return; }\n  list = state.env.footnotes.list;\n\n  state.tokens.push({\n    type: 'footnote_block_open',\n    level: level++\n  });\n  for (i = 0, l = list.length; i < l; i++) {\n    state.tokens.push({\n      type: 'footnote_open',\n      id: i,\n      level: level++\n    });\n\n    if (list[i].tokens) {\n      tokens = [];\n      tokens.push({\n        type: 'paragraph_open',\n        tight: false,\n        level: level++\n      });\n      tokens.push({\n        type: 'inline',\n        content: '',\n        level: level,\n        children: list[i].tokens\n      });\n      tokens.push({\n        type: 'paragraph_close',\n        tight: false,\n        level: --level\n      });\n    } else if (list[i].label) {\n      tokens = refTokens[':' + list[i].label];\n    }\n\n    state.tokens = state.tokens.concat(tokens);\n    if (state.tokens[state.tokens.length - 1].type === 'paragraph_close') {\n      lastParagraph = state.tokens.pop();\n    } else {\n      lastParagraph = null;\n    }\n\n    t = list[i].count > 0 ? list[i].count : 1;\n    for (j = 0; j < t; j++) {\n      state.tokens.push({\n        type: 'footnote_anchor',\n        id: i,\n        subId: j,\n        level: level\n      });\n    }\n\n    if (lastParagraph) {\n      state.tokens.push(lastParagraph);\n    }\n\n    state.tokens.push({\n      type: 'footnote_close',\n      level: --level\n    });\n  }\n  state.tokens.push({\n    type: 'footnote_block_close',\n    level: --level\n  });\n}\n\n// Enclose abbreviations in <abbr> tags\n//\n\nvar PUNCT_CHARS = ' \\n()[]\\'\".,!?-';\n\n\n// from Google closure library\n// http://closure-library.googlecode.com/git-history/docs/local_closure_goog_string_string.js.source.html#line1021\nfunction regEscape(s) {\n  return s.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g, '\\\\$1');\n}\n\n\nfunction abbr2(state) {\n  var i, j, l, tokens, token, text, nodes, pos, level, reg, m, regText,\n      blockTokens = state.tokens;\n\n  if (!state.env.abbreviations) { return; }\n  if (!state.env.abbrRegExp) {\n    regText = '(^|[' + PUNCT_CHARS.split('').map(regEscape).join('') + '])'\n            + '(' + Object.keys(state.env.abbreviations).map(function (x) {\n                      return x.substr(1);\n                    }).sort(function (a, b) {\n                      return b.length - a.length;\n                    }).map(regEscape).join('|') + ')'\n            + '($|[' + PUNCT_CHARS.split('').map(regEscape).join('') + '])';\n    state.env.abbrRegExp = new RegExp(regText, 'g');\n  }\n  reg = state.env.abbrRegExp;\n\n  for (j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline') { continue; }\n    tokens = blockTokens[j].children;\n\n    // We scan from the end, to keep position when new tags added.\n    for (i = tokens.length - 1; i >= 0; i--) {\n      token = tokens[i];\n      if (token.type !== 'text') { continue; }\n\n      pos = 0;\n      text = token.content;\n      reg.lastIndex = 0;\n      level = token.level;\n      nodes = [];\n\n      while ((m = reg.exec(text))) {\n        if (reg.lastIndex > pos) {\n          nodes.push({\n            type: 'text',\n            content: text.slice(pos, m.index + m[1].length),\n            level: level\n          });\n        }\n\n        nodes.push({\n          type: 'abbr_open',\n          title: state.env.abbreviations[':' + m[2]],\n          level: level++\n        });\n        nodes.push({\n          type: 'text',\n          content: m[2],\n          level: level\n        });\n        nodes.push({\n          type: 'abbr_close',\n          level: --level\n        });\n        pos = reg.lastIndex - m[3].length;\n      }\n\n      if (!nodes.length) { continue; }\n\n      if (pos < text.length) {\n        nodes.push({\n          type: 'text',\n          content: text.slice(pos),\n          level: level\n        });\n      }\n\n      // replace current node\n      blockTokens[j].children = tokens = [].concat(tokens.slice(0, i), nodes, tokens.slice(i + 1));\n    }\n  }\n}\n\n// Simple typographical replacements\n//\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - miltiplication 2 x 4 -> 2 × 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n  'c': '©',\n  'r': '®',\n  'p': '§',\n  'tm': '™'\n};\n\nfunction replaceScopedAbbr(str) {\n  if (str.indexOf('(') < 0) { return str; }\n\n  return str.replace(SCOPED_ABBR_RE, function(match, name) {\n    return SCOPED_ABBR[name.toLowerCase()];\n  });\n}\n\n\nfunction replace(state) {\n  var i, token, text, inlineTokens, blkIdx;\n\n  if (!state.options.typographer) { return; }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n    if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n    inlineTokens = state.tokens[blkIdx].children;\n\n    for (i = inlineTokens.length - 1; i >= 0; i--) {\n      token = inlineTokens[i];\n      if (token.type === 'text') {\n        text = token.content;\n\n        text = replaceScopedAbbr(text);\n\n        if (RARE_RE.test(text)) {\n          text = text\n            .replace(/\\+-/g, '±')\n            // .., ..., ....... -> …\n            // but ?..... & !..... -> ?.. & !..\n            .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n            .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n            // em-dash\n            .replace(/(^|[^-])---([^-]|$)/mg, '$1\\u2014$2')\n            // en-dash\n            .replace(/(^|\\s)--(\\s|$)/mg, '$1\\u2013$2')\n            .replace(/(^|[^-\\s])--([^-\\s]|$)/mg, '$1\\u2013$2');\n        }\n\n        token.content = text;\n      }\n    }\n  }\n}\n\n// Convert straight quotation marks to typographic ones\n//\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar PUNCT_RE = /[-\\s()\\[\\]]/;\nvar APOSTROPHE = '’';\n\n// This function returns true if the character at `pos`\n// could be inside a word.\nfunction isLetter(str, pos) {\n  if (pos < 0 || pos >= str.length) { return false; }\n  return !PUNCT_RE.test(str[pos]);\n}\n\n\nfunction replaceAt(str, index, ch) {\n  return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\n\nfunction smartquotes(state) {\n  /*eslint max-depth:0*/\n  var i, token, text, t, pos, max, thisLevel, lastSpace, nextSpace, item,\n      canOpen, canClose, j, isSingle, blkIdx, tokens,\n      stack;\n\n  if (!state.options.typographer) { return; }\n\n  stack = [];\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n    if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n    tokens = state.tokens[blkIdx].children;\n    stack.length = 0;\n\n    for (i = 0; i < tokens.length; i++) {\n      token = tokens[i];\n\n      if (token.type !== 'text' || QUOTE_TEST_RE.test(token.text)) { continue; }\n\n      thisLevel = tokens[i].level;\n\n      for (j = stack.length - 1; j >= 0; j--) {\n        if (stack[j].level <= thisLevel) { break; }\n      }\n      stack.length = j + 1;\n\n      text = token.content;\n      pos = 0;\n      max = text.length;\n\n      /*eslint no-labels:0,block-scoped-var:0*/\n      OUTER:\n      while (pos < max) {\n        QUOTE_RE.lastIndex = pos;\n        t = QUOTE_RE.exec(text);\n        if (!t) { break; }\n\n        lastSpace = !isLetter(text, t.index - 1);\n        pos = t.index + 1;\n        isSingle = (t[0] === \"'\");\n        nextSpace = !isLetter(text, pos);\n\n        if (!nextSpace && !lastSpace) {\n          // middle of word\n          if (isSingle) {\n            token.content = replaceAt(token.content, t.index, APOSTROPHE);\n          }\n          continue;\n        }\n\n        canOpen = !nextSpace;\n        canClose = !lastSpace;\n\n        if (canClose) {\n          // this could be a closing quote, rewind the stack to get a match\n          for (j = stack.length - 1; j >= 0; j--) {\n            item = stack[j];\n            if (stack[j].level < thisLevel) { break; }\n            if (item.single === isSingle && stack[j].level === thisLevel) {\n              item = stack[j];\n              if (isSingle) {\n                tokens[item.token].content = replaceAt(tokens[item.token].content, item.pos, state.options.quotes[2]);\n                token.content = replaceAt(token.content, t.index, state.options.quotes[3]);\n              } else {\n                tokens[item.token].content = replaceAt(tokens[item.token].content, item.pos, state.options.quotes[0]);\n                token.content = replaceAt(token.content, t.index, state.options.quotes[1]);\n              }\n              stack.length = j;\n              continue OUTER;\n            }\n          }\n        }\n\n        if (canOpen) {\n          stack.push({\n            token: i,\n            pos: t.index,\n            single: isSingle,\n            level: thisLevel\n          });\n        } else if (canClose && isSingle) {\n          token.content = replaceAt(token.content, t.index, APOSTROPHE);\n        }\n      }\n    }\n  }\n}\n\n/**\n * Core parser `rules`\n */\n\nvar _rules = [\n  [ 'block',          block          ],\n  [ 'abbr',           abbr           ],\n  [ 'references',     references     ],\n  [ 'inline',         inline         ],\n  [ 'footnote_tail',  footnote_block  ],\n  [ 'abbr2',          abbr2          ],\n  [ 'replacements',   replace   ],\n  [ 'smartquotes',    smartquotes    ],\n];\n\n/**\n * Class for top level (`core`) parser rules\n *\n * @api private\n */\n\nfunction Core() {\n  this.options = {};\n  this.ruler = new Ruler();\n  for (var i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n}\n\n/**\n * Process rules with the given `state`\n *\n * @param  {Object} `state`\n * @api private\n */\n\nCore.prototype.process = function (state) {\n  var i, l, rules;\n  rules = this.ruler.getRules('');\n  for (i = 0, l = rules.length; i < l; i++) {\n    rules[i](state);\n  }\n};\n\n// Parser state class\n\nfunction StateBlock(src, parser, options, env, tokens) {\n  var ch, s, start, pos, len, indent, indent_found;\n\n  this.src = src;\n\n  // Shortcuts to simplify nested calls\n  this.parser = parser;\n\n  this.options = options;\n\n  this.env = env;\n\n  //\n  // Internal state vartiables\n  //\n\n  this.tokens = tokens;\n\n  this.bMarks = [];  // line begin offsets for fast jumps\n  this.eMarks = [];  // line end offsets for fast jumps\n  this.tShift = [];  // indent for each line\n\n  // block parser variables\n  this.blkIndent  = 0; // required block content indent\n                       // (for example, if we are in list)\n  this.line       = 0; // line index in src\n  this.lineMax    = 0; // lines count\n  this.tight      = false;  // loose/tight mode for lists\n  this.parentType = 'root'; // if `list`, block parser stops on two newlines\n  this.ddIndent   = -1; // indent of the current dd block (-1 if there isn't any)\n\n  this.level = 0;\n\n  // renderer\n  this.result = '';\n\n  // Create caches\n  // Generate markers.\n  s = this.src;\n  indent = 0;\n  indent_found = false;\n\n  for (start = pos = indent = 0, len = s.length; pos < len; pos++) {\n    ch = s.charCodeAt(pos);\n\n    if (!indent_found) {\n      if (ch === 0x20/* space */) {\n        indent++;\n        continue;\n      } else {\n        indent_found = true;\n      }\n    }\n\n    if (ch === 0x0A || pos === len - 1) {\n      if (ch !== 0x0A) { pos++; }\n      this.bMarks.push(start);\n      this.eMarks.push(pos);\n      this.tShift.push(indent);\n\n      indent_found = false;\n      indent = 0;\n      start = pos + 1;\n    }\n  }\n\n  // Push fake entry to simplify cache bounds checks\n  this.bMarks.push(s.length);\n  this.eMarks.push(s.length);\n  this.tShift.push(0);\n\n  this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n  return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n  for (var max = this.lineMax; from < max; from++) {\n    if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n      break;\n    }\n  }\n  return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n  for (var max = this.src.length; pos < max; pos++) {\n    if (this.src.charCodeAt(pos) !== 0x20/* space */) { break; }\n  }\n  return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n  for (var max = this.src.length; pos < max; pos++) {\n    if (this.src.charCodeAt(pos) !== code) { break; }\n  }\n  return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n  if (pos <= min) { return pos; }\n\n  while (pos > min) {\n    if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n  }\n  return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n  var i, first, last, queue, shift,\n      line = begin;\n\n  if (begin >= end) {\n    return '';\n  }\n\n  // Opt: don't use push queue for single line;\n  if (line + 1 === end) {\n    first = this.bMarks[line] + Math.min(this.tShift[line], indent);\n    last = keepLastLF ? this.eMarks[line] + 1 : this.eMarks[line];\n    return this.src.slice(first, last);\n  }\n\n  queue = new Array(end - begin);\n\n  for (i = 0; line < end; line++, i++) {\n    shift = this.tShift[line];\n    if (shift > indent) { shift = indent; }\n    if (shift < 0) { shift = 0; }\n\n    first = this.bMarks[line] + shift;\n\n    if (line + 1 < end || keepLastLF) {\n      // No need for bounds check because we have fake entry on tail.\n      last = this.eMarks[line] + 1;\n    } else {\n      last = this.eMarks[line];\n    }\n\n    queue[i] = this.src.slice(first, last);\n  }\n\n  return queue.join('');\n};\n\n// Code block (4 spaces padded)\n\nfunction code(state, startLine, endLine/*, silent*/) {\n  var nextLine, last;\n\n  if (state.tShift[startLine] - state.blkIndent < 4) { return false; }\n\n  last = nextLine = startLine + 1;\n\n  while (nextLine < endLine) {\n    if (state.isEmpty(nextLine)) {\n      nextLine++;\n      continue;\n    }\n    if (state.tShift[nextLine] - state.blkIndent >= 4) {\n      nextLine++;\n      last = nextLine;\n      continue;\n    }\n    break;\n  }\n\n  state.line = nextLine;\n  state.tokens.push({\n    type: 'code',\n    content: state.getLines(startLine, last, 4 + state.blkIndent, true),\n    block: true,\n    lines: [ startLine, state.line ],\n    level: state.level\n  });\n\n  return true;\n}\n\n// fences (``` lang, ~~~ lang)\n\nfunction fences(state, startLine, endLine, silent) {\n  var marker, len, params, nextLine, mem,\n      haveEndMarker = false,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  if (pos + 3 > max) { return false; }\n\n  marker = state.src.charCodeAt(pos);\n\n  if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n    return false;\n  }\n\n  // scan marker length\n  mem = pos;\n  pos = state.skipChars(pos, marker);\n\n  len = pos - mem;\n\n  if (len < 3) { return false; }\n\n  params = state.src.slice(pos, max).trim();\n\n  if (params.indexOf('`') >= 0) { return false; }\n\n  // Since start is found, we can report success here in validation mode\n  if (silent) { return true; }\n\n  // search end of block\n  nextLine = startLine;\n\n  for (;;) {\n    nextLine++;\n    if (nextLine >= endLine) {\n      // unclosed block should be autoclosed by end of document.\n      // also block seems to be autoclosed by end of parent\n      break;\n    }\n\n    pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos < max && state.tShift[nextLine] < state.blkIndent) {\n      // non-empty line with negative indent should stop the list:\n      // - ```\n      //  test\n      break;\n    }\n\n    if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n    if (state.tShift[nextLine] - state.blkIndent >= 4) {\n      // closing fence should be indented less than 4 spaces\n      continue;\n    }\n\n    pos = state.skipChars(pos, marker);\n\n    // closing code fence must be at least as long as the opening one\n    if (pos - mem < len) { continue; }\n\n    // make sure tail has spaces only\n    pos = state.skipSpaces(pos);\n\n    if (pos < max) { continue; }\n\n    haveEndMarker = true;\n    // found!\n    break;\n  }\n\n  // If a fence has heading spaces, they should be removed from its inner block\n  len = state.tShift[startLine];\n\n  state.line = nextLine + (haveEndMarker ? 1 : 0);\n  state.tokens.push({\n    type: 'fence',\n    params: params,\n    content: state.getLines(startLine + 1, nextLine, len, true),\n    lines: [ startLine, state.line ],\n    level: state.level\n  });\n\n  return true;\n}\n\n// Block quotes\n\nfunction blockquote(state, startLine, endLine, silent) {\n  var nextLine, lastLineEmpty, oldTShift, oldBMarks, oldIndent, oldParentType, lines,\n      terminatorRules,\n      i, l, terminate,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  if (pos > max) { return false; }\n\n  // check the block quote marker\n  if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  // we know that it's going to be a valid blockquote,\n  // so no point trying to find the end of it in silent mode\n  if (silent) { return true; }\n\n  // skip one optional space after '>'\n  if (state.src.charCodeAt(pos) === 0x20) { pos++; }\n\n  oldIndent = state.blkIndent;\n  state.blkIndent = 0;\n\n  oldBMarks = [ state.bMarks[startLine] ];\n  state.bMarks[startLine] = pos;\n\n  // check if we have an empty blockquote\n  pos = pos < max ? state.skipSpaces(pos) : pos;\n  lastLineEmpty = pos >= max;\n\n  oldTShift = [ state.tShift[startLine] ];\n  state.tShift[startLine] = pos - state.bMarks[startLine];\n\n  terminatorRules = state.parser.ruler.getRules('blockquote');\n\n  // Search the end of the block\n  //\n  // Block ends with either:\n  //  1. an empty line outside:\n  //     ```\n  //     > test\n  //\n  //     ```\n  //  2. an empty line inside:\n  //     ```\n  //     >\n  //     test\n  //     ```\n  //  3. another tag\n  //     ```\n  //     > test\n  //      - - -\n  //     ```\n  for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n    pos = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos >= max) {\n      // Case 1: line is not inside the blockquote, and this line is empty.\n      break;\n    }\n\n    if (state.src.charCodeAt(pos++) === 0x3E/* > */) {\n      // This line is inside the blockquote.\n\n      // skip one optional space after '>'\n      if (state.src.charCodeAt(pos) === 0x20) { pos++; }\n\n      oldBMarks.push(state.bMarks[nextLine]);\n      state.bMarks[nextLine] = pos;\n\n      pos = pos < max ? state.skipSpaces(pos) : pos;\n      lastLineEmpty = pos >= max;\n\n      oldTShift.push(state.tShift[nextLine]);\n      state.tShift[nextLine] = pos - state.bMarks[nextLine];\n      continue;\n    }\n\n    // Case 2: line is not inside the blockquote, and the last line was empty.\n    if (lastLineEmpty) { break; }\n\n    // Case 3: another tag found.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n\n    oldBMarks.push(state.bMarks[nextLine]);\n    oldTShift.push(state.tShift[nextLine]);\n\n    // A negative number means that this is a paragraph continuation;\n    //\n    // Any negative number will do the job here, but it's better for it\n    // to be large enough to make any bugs obvious.\n    state.tShift[nextLine] = -1337;\n  }\n\n  oldParentType = state.parentType;\n  state.parentType = 'blockquote';\n  state.tokens.push({\n    type: 'blockquote_open',\n    lines: lines = [ startLine, 0 ],\n    level: state.level++\n  });\n  state.parser.tokenize(state, startLine, nextLine);\n  state.tokens.push({\n    type: 'blockquote_close',\n    level: --state.level\n  });\n  state.parentType = oldParentType;\n  lines[1] = state.line;\n\n  // Restore original tShift; this might not be necessary since the parser\n  // has already been here, but just to make sure we can do that.\n  for (i = 0; i < oldTShift.length; i++) {\n    state.bMarks[i + startLine] = oldBMarks[i];\n    state.tShift[i + startLine] = oldTShift[i];\n  }\n  state.blkIndent = oldIndent;\n\n  return true;\n}\n\n// Horizontal rule\n\nfunction hr(state, startLine, endLine, silent) {\n  var marker, cnt, ch,\n      pos = state.bMarks[startLine],\n      max = state.eMarks[startLine];\n\n  pos += state.tShift[startLine];\n\n  if (pos > max) { return false; }\n\n  marker = state.src.charCodeAt(pos++);\n\n  // Check hr marker\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x5F/* _ */) {\n    return false;\n  }\n\n  // markers can be mixed with spaces, but there should be at least 3 one\n\n  cnt = 1;\n  while (pos < max) {\n    ch = state.src.charCodeAt(pos++);\n    if (ch !== marker && ch !== 0x20/* space */) { return false; }\n    if (ch === marker) { cnt++; }\n  }\n\n  if (cnt < 3) { return false; }\n\n  if (silent) { return true; }\n\n  state.line = startLine + 1;\n  state.tokens.push({\n    type: 'hr',\n    lines: [ startLine, state.line ],\n    level: state.level\n  });\n\n  return true;\n}\n\n// Lists\n\n// Search `[-+*][\\n ]`, returns next pos arter marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n  var marker, pos, max;\n\n  pos = state.bMarks[startLine] + state.tShift[startLine];\n  max = state.eMarks[startLine];\n\n  if (pos >= max) { return -1; }\n\n  marker = state.src.charCodeAt(pos++);\n  // Check bullet\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x2B/* + */) {\n    return -1;\n  }\n\n  if (pos < max && state.src.charCodeAt(pos) !== 0x20) {\n    // \" 1.test \" - is not a list item\n    return -1;\n  }\n\n  return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos arter marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n  var ch,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  if (pos + 1 >= max) { return -1; }\n\n  ch = state.src.charCodeAt(pos++);\n\n  if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n  for (;;) {\n    // EOL -> fail\n    if (pos >= max) { return -1; }\n\n    ch = state.src.charCodeAt(pos++);\n\n    if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n      continue;\n    }\n\n    // found valid marker\n    if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n      break;\n    }\n\n    return -1;\n  }\n\n\n  if (pos < max && state.src.charCodeAt(pos) !== 0x20/* space */) {\n    // \" 1.test \" - is not a list item\n    return -1;\n  }\n  return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n  var i, l,\n      level = state.level + 2;\n\n  for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n    if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n      state.tokens[i + 2].tight = true;\n      state.tokens[i].tight = true;\n      i += 2;\n    }\n  }\n}\n\n\nfunction list(state, startLine, endLine, silent) {\n  var nextLine,\n      indent,\n      oldTShift,\n      oldIndent,\n      oldTight,\n      oldParentType,\n      start,\n      posAfterMarker,\n      max,\n      indentAfterMarker,\n      markerValue,\n      markerCharCode,\n      isOrdered,\n      contentStart,\n      listTokIdx,\n      prevEmptyEnd,\n      listLines,\n      itemLines,\n      tight = true,\n      terminatorRules,\n      i, l, terminate;\n\n  // Detect list type and position after marker\n  if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n    isOrdered = true;\n  } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n    isOrdered = false;\n  } else {\n    return false;\n  }\n\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  // We should terminate list on style change. Remember first one to compare.\n  markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n  // For validation mode we can terminate immediately\n  if (silent) { return true; }\n\n  // Start list\n  listTokIdx = state.tokens.length;\n\n  if (isOrdered) {\n    start = state.bMarks[startLine] + state.tShift[startLine];\n    markerValue = Number(state.src.substr(start, posAfterMarker - start - 1));\n\n    state.tokens.push({\n      type: 'ordered_list_open',\n      order: markerValue,\n      lines: listLines = [ startLine, 0 ],\n      level: state.level++\n    });\n\n  } else {\n    state.tokens.push({\n      type: 'bullet_list_open',\n      lines: listLines = [ startLine, 0 ],\n      level: state.level++\n    });\n  }\n\n  //\n  // Iterate list items\n  //\n\n  nextLine = startLine;\n  prevEmptyEnd = false;\n  terminatorRules = state.parser.ruler.getRules('list');\n\n  while (nextLine < endLine) {\n    contentStart = state.skipSpaces(posAfterMarker);\n    max = state.eMarks[nextLine];\n\n    if (contentStart >= max) {\n      // trimming space in \"-    \\n  3\" case, indent is 1 here\n      indentAfterMarker = 1;\n    } else {\n      indentAfterMarker = contentStart - posAfterMarker;\n    }\n\n    // If we have more than 4 spaces, the indent is 1\n    // (the rest is just indented code block)\n    if (indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n    // If indent is less than 1, assume that it's one, example:\n    //  \"-\\n  test\"\n    if (indentAfterMarker < 1) { indentAfterMarker = 1; }\n\n    // \"  -  test\"\n    //  ^^^^^ - calculating total length of this thing\n    indent = (posAfterMarker - state.bMarks[nextLine]) + indentAfterMarker;\n\n    // Run subparser & write tokens\n    state.tokens.push({\n      type: 'list_item_open',\n      lines: itemLines = [ startLine, 0 ],\n      level: state.level++\n    });\n\n    oldIndent = state.blkIndent;\n    oldTight = state.tight;\n    oldTShift = state.tShift[startLine];\n    oldParentType = state.parentType;\n    state.tShift[startLine] = contentStart - state.bMarks[startLine];\n    state.blkIndent = indent;\n    state.tight = true;\n    state.parentType = 'list';\n\n    state.parser.tokenize(state, startLine, endLine, true);\n\n    // If any of list item is tight, mark list as tight\n    if (!state.tight || prevEmptyEnd) {\n      tight = false;\n    }\n    // Item become loose if finish with empty line,\n    // but we should filter last element, because it means list finish\n    prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n    state.blkIndent = oldIndent;\n    state.tShift[startLine] = oldTShift;\n    state.tight = oldTight;\n    state.parentType = oldParentType;\n\n    state.tokens.push({\n      type: 'list_item_close',\n      level: --state.level\n    });\n\n    nextLine = startLine = state.line;\n    itemLines[1] = nextLine;\n    contentStart = state.bMarks[startLine];\n\n    if (nextLine >= endLine) { break; }\n\n    if (state.isEmpty(nextLine)) {\n      break;\n    }\n\n    //\n    // Try to check if list is terminated or continued.\n    //\n    if (state.tShift[nextLine] < state.blkIndent) { break; }\n\n    // fail if terminating block found\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n\n    // fail if list has another type\n    if (isOrdered) {\n      posAfterMarker = skipOrderedListMarker(state, nextLine);\n      if (posAfterMarker < 0) { break; }\n    } else {\n      posAfterMarker = skipBulletListMarker(state, nextLine);\n      if (posAfterMarker < 0) { break; }\n    }\n\n    if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n  }\n\n  // Finilize list\n  state.tokens.push({\n    type: isOrdered ? 'ordered_list_close' : 'bullet_list_close',\n    level: --state.level\n  });\n  listLines[1] = nextLine;\n\n  state.line = nextLine;\n\n  // mark paragraphs tight if needed\n  if (tight) {\n    markTightParagraphs(state, listTokIdx);\n  }\n\n  return true;\n}\n\n// Process footnote reference list\n\nfunction footnote(state, startLine, endLine, silent) {\n  var oldBMark, oldTShift, oldParentType, pos, label,\n      start = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // line should be at least 5 chars - \"[^x]:\"\n  if (start + 4 > max) { return false; }\n\n  if (state.src.charCodeAt(start) !== 0x5B/* [ */) { return false; }\n  if (state.src.charCodeAt(start + 1) !== 0x5E/* ^ */) { return false; }\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  for (pos = start + 2; pos < max; pos++) {\n    if (state.src.charCodeAt(pos) === 0x20) { return false; }\n    if (state.src.charCodeAt(pos) === 0x5D /* ] */) {\n      break;\n    }\n  }\n\n  if (pos === start + 2) { return false; } // no empty footnote labels\n  if (pos + 1 >= max || state.src.charCodeAt(++pos) !== 0x3A /* : */) { return false; }\n  if (silent) { return true; }\n  pos++;\n\n  if (!state.env.footnotes) { state.env.footnotes = {}; }\n  if (!state.env.footnotes.refs) { state.env.footnotes.refs = {}; }\n  label = state.src.slice(start + 2, pos - 2);\n  state.env.footnotes.refs[':' + label] = -1;\n\n  state.tokens.push({\n    type: 'footnote_reference_open',\n    label: label,\n    level: state.level++\n  });\n\n  oldBMark = state.bMarks[startLine];\n  oldTShift = state.tShift[startLine];\n  oldParentType = state.parentType;\n  state.tShift[startLine] = state.skipSpaces(pos) - pos;\n  state.bMarks[startLine] = pos;\n  state.blkIndent += 4;\n  state.parentType = 'footnote';\n\n  if (state.tShift[startLine] < state.blkIndent) {\n    state.tShift[startLine] += state.blkIndent;\n    state.bMarks[startLine] -= state.blkIndent;\n  }\n\n  state.parser.tokenize(state, startLine, endLine, true);\n\n  state.parentType = oldParentType;\n  state.blkIndent -= 4;\n  state.tShift[startLine] = oldTShift;\n  state.bMarks[startLine] = oldBMark;\n\n  state.tokens.push({\n    type: 'footnote_reference_close',\n    level: --state.level\n  });\n\n  return true;\n}\n\n// heading (#, ##, ...)\n\nfunction heading(state, startLine, endLine, silent) {\n  var ch, level, tmp,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  if (pos >= max) { return false; }\n\n  ch  = state.src.charCodeAt(pos);\n\n  if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n  // count heading level\n  level = 1;\n  ch = state.src.charCodeAt(++pos);\n  while (ch === 0x23/* # */ && pos < max && level <= 6) {\n    level++;\n    ch = state.src.charCodeAt(++pos);\n  }\n\n  if (level > 6 || (pos < max && ch !== 0x20/* space */)) { return false; }\n\n  if (silent) { return true; }\n\n  // Let's cut tails like '    ###  ' from the end of string\n\n  max = state.skipCharsBack(max, 0x20, pos); // space\n  tmp = state.skipCharsBack(max, 0x23, pos); // #\n  if (tmp > pos && state.src.charCodeAt(tmp - 1) === 0x20/* space */) {\n    max = tmp;\n  }\n\n  state.line = startLine + 1;\n\n  state.tokens.push({ type: 'heading_open',\n    hLevel: level,\n    lines: [ startLine, state.line ],\n    level: state.level\n  });\n\n  // only if header is not empty\n  if (pos < max) {\n    state.tokens.push({\n      type: 'inline',\n      content: state.src.slice(pos, max).trim(),\n      level: state.level + 1,\n      lines: [ startLine, state.line ],\n      children: []\n    });\n  }\n  state.tokens.push({ type: 'heading_close', hLevel: level, level: state.level });\n\n  return true;\n}\n\n// lheading (---, ===)\n\nfunction lheading(state, startLine, endLine/*, silent*/) {\n  var marker, pos, max,\n      next = startLine + 1;\n\n  if (next >= endLine) { return false; }\n  if (state.tShift[next] < state.blkIndent) { return false; }\n\n  // Scan next line\n\n  if (state.tShift[next] - state.blkIndent > 3) { return false; }\n\n  pos = state.bMarks[next] + state.tShift[next];\n  max = state.eMarks[next];\n\n  if (pos >= max) { return false; }\n\n  marker = state.src.charCodeAt(pos);\n\n  if (marker !== 0x2D/* - */ && marker !== 0x3D/* = */) { return false; }\n\n  pos = state.skipChars(pos, marker);\n\n  pos = state.skipSpaces(pos);\n\n  if (pos < max) { return false; }\n\n  pos = state.bMarks[startLine] + state.tShift[startLine];\n\n  state.line = next + 1;\n  state.tokens.push({\n    type: 'heading_open',\n    hLevel: marker === 0x3D/* = */ ? 1 : 2,\n    lines: [ startLine, state.line ],\n    level: state.level\n  });\n  state.tokens.push({\n    type: 'inline',\n    content: state.src.slice(pos, state.eMarks[startLine]).trim(),\n    level: state.level + 1,\n    lines: [ startLine, state.line - 1 ],\n    children: []\n  });\n  state.tokens.push({\n    type: 'heading_close',\n    hLevel: marker === 0x3D/* = */ ? 1 : 2,\n    level: state.level\n  });\n\n  return true;\n}\n\n// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\nvar html_blocks = {};\n\n[\n  'article',\n  'aside',\n  'button',\n  'blockquote',\n  'body',\n  'canvas',\n  'caption',\n  'col',\n  'colgroup',\n  'dd',\n  'div',\n  'dl',\n  'dt',\n  'embed',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'hr',\n  'iframe',\n  'li',\n  'map',\n  'object',\n  'ol',\n  'output',\n  'p',\n  'pre',\n  'progress',\n  'script',\n  'section',\n  'style',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'tr',\n  'thead',\n  'ul',\n  'video'\n].forEach(function (name) { html_blocks[name] = true; });\n\n// HTML block\n\n\nvar HTML_TAG_OPEN_RE = /^<([a-zA-Z]{1,15})[\\s\\/>]/;\nvar HTML_TAG_CLOSE_RE = /^<\\/([a-zA-Z]{1,15})[\\s>]/;\n\nfunction isLetter$1(ch) {\n  /*eslint no-bitwise:0*/\n  var lc = ch | 0x20; // to lower case\n  return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\nfunction htmlblock(state, startLine, endLine, silent) {\n  var ch, match, nextLine,\n      pos = state.bMarks[startLine],\n      max = state.eMarks[startLine],\n      shift = state.tShift[startLine];\n\n  pos += shift;\n\n  if (!state.options.html) { return false; }\n\n  if (shift > 3 || pos + 2 >= max) { return false; }\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n  ch = state.src.charCodeAt(pos + 1);\n\n  if (ch === 0x21/* ! */ || ch === 0x3F/* ? */) {\n    // Directive start / comment start / processing instruction start\n    if (silent) { return true; }\n\n  } else if (ch === 0x2F/* / */ || isLetter$1(ch)) {\n\n    // Probably start or end of tag\n    if (ch === 0x2F/* \\ */) {\n      // closing tag\n      match = state.src.slice(pos, max).match(HTML_TAG_CLOSE_RE);\n      if (!match) { return false; }\n    } else {\n      // opening tag\n      match = state.src.slice(pos, max).match(HTML_TAG_OPEN_RE);\n      if (!match) { return false; }\n    }\n    // Make sure tag name is valid\n    if (html_blocks[match[1].toLowerCase()] !== true) { return false; }\n    if (silent) { return true; }\n\n  } else {\n    return false;\n  }\n\n  // If we are here - we detected HTML block.\n  // Let's roll down till empty line (block end).\n  nextLine = startLine + 1;\n  while (nextLine < state.lineMax && !state.isEmpty(nextLine)) {\n    nextLine++;\n  }\n\n  state.line = nextLine;\n  state.tokens.push({\n    type: 'htmlblock',\n    level: state.level,\n    lines: [ startLine, state.line ],\n    content: state.getLines(startLine, nextLine, 0, true)\n  });\n\n  return true;\n}\n\n// GFM table, non-standard\n\nfunction getLine(state, line) {\n  var pos = state.bMarks[line] + state.blkIndent,\n      max = state.eMarks[line];\n\n  return state.src.substr(pos, max - pos);\n}\n\nfunction table(state, startLine, endLine, silent) {\n  var ch, lineText, pos, i, nextLine, rows, cell,\n      aligns, t, tableLines, tbodyLines;\n\n  // should have at least three lines\n  if (startLine + 2 > endLine) { return false; }\n\n  nextLine = startLine + 1;\n\n  if (state.tShift[nextLine] < state.blkIndent) { return false; }\n\n  // first character of the second line should be '|' or '-'\n\n  pos = state.bMarks[nextLine] + state.tShift[nextLine];\n  if (pos >= state.eMarks[nextLine]) { return false; }\n\n  ch = state.src.charCodeAt(pos);\n  if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */) { return false; }\n\n  lineText = getLine(state, startLine + 1);\n  if (!/^[-:| ]+$/.test(lineText)) { return false; }\n\n  rows = lineText.split('|');\n  if (rows <= 2) { return false; }\n  aligns = [];\n  for (i = 0; i < rows.length; i++) {\n    t = rows[i].trim();\n    if (!t) {\n      // allow empty columns before and after table, but not in between columns;\n      // e.g. allow ` |---| `, disallow ` ---||--- `\n      if (i === 0 || i === rows.length - 1) {\n        continue;\n      } else {\n        return false;\n      }\n    }\n\n    if (!/^:?-+:?$/.test(t)) { return false; }\n    if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n      aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n    } else if (t.charCodeAt(0) === 0x3A/* : */) {\n      aligns.push('left');\n    } else {\n      aligns.push('');\n    }\n  }\n\n  lineText = getLine(state, startLine).trim();\n  if (lineText.indexOf('|') === -1) { return false; }\n  rows = lineText.replace(/^\\||\\|$/g, '').split('|');\n  if (aligns.length !== rows.length) { return false; }\n  if (silent) { return true; }\n\n  state.tokens.push({\n    type: 'table_open',\n    lines: tableLines = [ startLine, 0 ],\n    level: state.level++\n  });\n  state.tokens.push({\n    type: 'thead_open',\n    lines: [ startLine, startLine + 1 ],\n    level: state.level++\n  });\n\n  state.tokens.push({\n    type: 'tr_open',\n    lines: [ startLine, startLine + 1 ],\n    level: state.level++\n  });\n  for (i = 0; i < rows.length; i++) {\n    state.tokens.push({\n      type: 'th_open',\n      align: aligns[i],\n      lines: [ startLine, startLine + 1 ],\n      level: state.level++\n    });\n    state.tokens.push({\n      type: 'inline',\n      content: rows[i].trim(),\n      lines: [ startLine, startLine + 1 ],\n      level: state.level,\n      children: []\n    });\n    state.tokens.push({ type: 'th_close', level: --state.level });\n  }\n  state.tokens.push({ type: 'tr_close', level: --state.level });\n  state.tokens.push({ type: 'thead_close', level: --state.level });\n\n  state.tokens.push({\n    type: 'tbody_open',\n    lines: tbodyLines = [ startLine + 2, 0 ],\n    level: state.level++\n  });\n\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.tShift[nextLine] < state.blkIndent) { break; }\n\n    lineText = getLine(state, nextLine).trim();\n    if (lineText.indexOf('|') === -1) { break; }\n    rows = lineText.replace(/^\\||\\|$/g, '').split('|');\n\n    state.tokens.push({ type: 'tr_open', level: state.level++ });\n    for (i = 0; i < rows.length; i++) {\n      state.tokens.push({ type: 'td_open', align: aligns[i], level: state.level++ });\n      // 0x7c === '|'\n      cell = rows[i].substring(\n          rows[i].charCodeAt(0) === 0x7c ? 1 : 0,\n          rows[i].charCodeAt(rows[i].length - 1) === 0x7c ? rows[i].length - 1 : rows[i].length\n      ).trim();\n      state.tokens.push({\n        type: 'inline',\n        content: cell,\n        level: state.level,\n        children: []\n      });\n      state.tokens.push({ type: 'td_close', level: --state.level });\n    }\n    state.tokens.push({ type: 'tr_close', level: --state.level });\n  }\n  state.tokens.push({ type: 'tbody_close', level: --state.level });\n  state.tokens.push({ type: 'table_close', level: --state.level });\n\n  tableLines[1] = tbodyLines[1] = nextLine;\n  state.line = nextLine;\n  return true;\n}\n\n// Definition lists\n\n// Search `[:~][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipMarker(state, line) {\n  var pos, marker,\n      start = state.bMarks[line] + state.tShift[line],\n      max = state.eMarks[line];\n\n  if (start >= max) { return -1; }\n\n  // Check bullet\n  marker = state.src.charCodeAt(start++);\n  if (marker !== 0x7E/* ~ */ && marker !== 0x3A/* : */) { return -1; }\n\n  pos = state.skipSpaces(start);\n\n  // require space after \":\"\n  if (start === pos) { return -1; }\n\n  // no empty definitions, e.g. \"  : \"\n  if (pos >= max) { return -1; }\n\n  return pos;\n}\n\nfunction markTightParagraphs$1(state, idx) {\n  var i, l,\n      level = state.level + 2;\n\n  for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n    if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n      state.tokens[i + 2].tight = true;\n      state.tokens[i].tight = true;\n      i += 2;\n    }\n  }\n}\n\nfunction deflist(state, startLine, endLine, silent) {\n  var contentStart,\n      ddLine,\n      dtLine,\n      itemLines,\n      listLines,\n      listTokIdx,\n      nextLine,\n      oldIndent,\n      oldDDIndent,\n      oldParentType,\n      oldTShift,\n      oldTight,\n      prevEmptyEnd,\n      tight;\n\n  if (silent) {\n    // quirk: validation mode validates a dd block only, not a whole deflist\n    if (state.ddIndent < 0) { return false; }\n    return skipMarker(state, startLine) >= 0;\n  }\n\n  nextLine = startLine + 1;\n  if (state.isEmpty(nextLine)) {\n    if (++nextLine > endLine) { return false; }\n  }\n\n  if (state.tShift[nextLine] < state.blkIndent) { return false; }\n  contentStart = skipMarker(state, nextLine);\n  if (contentStart < 0) { return false; }\n\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  // Start list\n  listTokIdx = state.tokens.length;\n\n  state.tokens.push({\n    type: 'dl_open',\n    lines: listLines = [ startLine, 0 ],\n    level: state.level++\n  });\n\n  //\n  // Iterate list items\n  //\n\n  dtLine = startLine;\n  ddLine = nextLine;\n\n  // One definition list can contain multiple DTs,\n  // and one DT can be followed by multiple DDs.\n  //\n  // Thus, there is two loops here, and label is\n  // needed to break out of the second one\n  //\n  /*eslint no-labels:0,block-scoped-var:0*/\n  OUTER:\n  for (;;) {\n    tight = true;\n    prevEmptyEnd = false;\n\n    state.tokens.push({\n      type: 'dt_open',\n      lines: [ dtLine, dtLine ],\n      level: state.level++\n    });\n    state.tokens.push({\n      type: 'inline',\n      content: state.getLines(dtLine, dtLine + 1, state.blkIndent, false).trim(),\n      level: state.level + 1,\n      lines: [ dtLine, dtLine ],\n      children: []\n    });\n    state.tokens.push({\n      type: 'dt_close',\n      level: --state.level\n    });\n\n    for (;;) {\n      state.tokens.push({\n        type: 'dd_open',\n        lines: itemLines = [ nextLine, 0 ],\n        level: state.level++\n      });\n\n      oldTight = state.tight;\n      oldDDIndent = state.ddIndent;\n      oldIndent = state.blkIndent;\n      oldTShift = state.tShift[ddLine];\n      oldParentType = state.parentType;\n      state.blkIndent = state.ddIndent = state.tShift[ddLine] + 2;\n      state.tShift[ddLine] = contentStart - state.bMarks[ddLine];\n      state.tight = true;\n      state.parentType = 'deflist';\n\n      state.parser.tokenize(state, ddLine, endLine, true);\n\n      // If any of list item is tight, mark list as tight\n      if (!state.tight || prevEmptyEnd) {\n        tight = false;\n      }\n      // Item become loose if finish with empty line,\n      // but we should filter last element, because it means list finish\n      prevEmptyEnd = (state.line - ddLine) > 1 && state.isEmpty(state.line - 1);\n\n      state.tShift[ddLine] = oldTShift;\n      state.tight = oldTight;\n      state.parentType = oldParentType;\n      state.blkIndent = oldIndent;\n      state.ddIndent = oldDDIndent;\n\n      state.tokens.push({\n        type: 'dd_close',\n        level: --state.level\n      });\n\n      itemLines[1] = nextLine = state.line;\n\n      if (nextLine >= endLine) { break OUTER; }\n\n      if (state.tShift[nextLine] < state.blkIndent) { break OUTER; }\n      contentStart = skipMarker(state, nextLine);\n      if (contentStart < 0) { break; }\n\n      ddLine = nextLine;\n\n      // go to the next loop iteration:\n      // insert DD tag and repeat checking\n    }\n\n    if (nextLine >= endLine) { break; }\n    dtLine = nextLine;\n\n    if (state.isEmpty(dtLine)) { break; }\n    if (state.tShift[dtLine] < state.blkIndent) { break; }\n\n    ddLine = dtLine + 1;\n    if (ddLine >= endLine) { break; }\n    if (state.isEmpty(ddLine)) { ddLine++; }\n    if (ddLine >= endLine) { break; }\n\n    if (state.tShift[ddLine] < state.blkIndent) { break; }\n    contentStart = skipMarker(state, ddLine);\n    if (contentStart < 0) { break; }\n\n    // go to the next loop iteration:\n    // insert DT and DD tags and repeat checking\n  }\n\n  // Finilize list\n  state.tokens.push({\n    type: 'dl_close',\n    level: --state.level\n  });\n  listLines[1] = nextLine;\n\n  state.line = nextLine;\n\n  // mark paragraphs tight if needed\n  if (tight) {\n    markTightParagraphs$1(state, listTokIdx);\n  }\n\n  return true;\n}\n\n// Paragraph\n\nfunction paragraph(state, startLine/*, endLine*/) {\n  var endLine, content, terminate, i, l,\n      nextLine = startLine + 1,\n      terminatorRules;\n\n  endLine = state.lineMax;\n\n  // jump line-by-line until empty one or EOF\n  if (nextLine < endLine && !state.isEmpty(nextLine)) {\n    terminatorRules = state.parser.ruler.getRules('paragraph');\n\n    for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n      // this would be a code block normally, but after paragraph\n      // it's considered a lazy continuation regardless of what's there\n      if (state.tShift[nextLine] - state.blkIndent > 3) { continue; }\n\n      // Some tags can terminate paragraph without empty line.\n      terminate = false;\n      for (i = 0, l = terminatorRules.length; i < l; i++) {\n        if (terminatorRules[i](state, nextLine, endLine, true)) {\n          terminate = true;\n          break;\n        }\n      }\n      if (terminate) { break; }\n    }\n  }\n\n  content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n  state.line = nextLine;\n  if (content.length) {\n    state.tokens.push({\n      type: 'paragraph_open',\n      tight: false,\n      lines: [ startLine, state.line ],\n      level: state.level\n    });\n    state.tokens.push({\n      type: 'inline',\n      content: content,\n      level: state.level + 1,\n      lines: [ startLine, state.line ],\n      children: []\n    });\n    state.tokens.push({\n      type: 'paragraph_close',\n      tight: false,\n      level: state.level\n    });\n  }\n\n  return true;\n}\n\n/**\n * Parser rules\n */\n\nvar _rules$1 = [\n  [ 'code',       code ],\n  [ 'fences',     fences,     [ 'paragraph', 'blockquote', 'list' ] ],\n  [ 'blockquote', blockquote, [ 'paragraph', 'blockquote', 'list' ] ],\n  [ 'hr',         hr,         [ 'paragraph', 'blockquote', 'list' ] ],\n  [ 'list',       list,       [ 'paragraph', 'blockquote' ] ],\n  [ 'footnote',   footnote,   [ 'paragraph' ] ],\n  [ 'heading',    heading,    [ 'paragraph', 'blockquote' ] ],\n  [ 'lheading',   lheading ],\n  [ 'htmlblock',  htmlblock,  [ 'paragraph', 'blockquote' ] ],\n  [ 'table',      table,      [ 'paragraph' ] ],\n  [ 'deflist',    deflist,    [ 'paragraph' ] ],\n  [ 'paragraph',  paragraph ]\n];\n\n/**\n * Block Parser class\n *\n * @api private\n */\n\nfunction ParserBlock() {\n  this.ruler = new Ruler();\n  for (var i = 0; i < _rules$1.length; i++) {\n    this.ruler.push(_rules$1[i][0], _rules$1[i][1], {\n      alt: (_rules$1[i][2] || []).slice()\n    });\n  }\n}\n\n/**\n * Generate tokens for the given input range.\n *\n * @param  {Object} `state` Has properties like `src`, `parser`, `options` etc\n * @param  {Number} `startLine`\n * @param  {Number} `endLine`\n * @api private\n */\n\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n  var rules = this.ruler.getRules('');\n  var len = rules.length;\n  var line = startLine;\n  var hasEmptyLines = false;\n  var ok, i;\n\n  while (line < endLine) {\n    state.line = line = state.skipEmptyLines(line);\n    if (line >= endLine) {\n      break;\n    }\n\n    // Termination condition for nested calls.\n    // Nested calls currently used for blockquotes & lists\n    if (state.tShift[line] < state.blkIndent) {\n      break;\n    }\n\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.line`\n    // - update `state.tokens`\n    // - return true\n\n    for (i = 0; i < len; i++) {\n      ok = rules[i](state, line, endLine, false);\n      if (ok) {\n        break;\n      }\n    }\n\n    // set state.tight iff we had an empty line before current tag\n    // i.e. latest empty line should not count\n    state.tight = !hasEmptyLines;\n\n    // paragraph might \"eat\" one newline after it in nested lists\n    if (state.isEmpty(state.line - 1)) {\n      hasEmptyLines = true;\n    }\n\n    line = state.line;\n\n    if (line < endLine && state.isEmpty(line)) {\n      hasEmptyLines = true;\n      line++;\n\n      // two empty lines should stop the parser in list mode\n      if (line < endLine && state.parentType === 'list' && state.isEmpty(line)) { break; }\n      state.line = line;\n    }\n  }\n};\n\nvar TABS_SCAN_RE = /[\\n\\t]/g;\nvar NEWLINES_RE  = /\\r[\\n\\u0085]|[\\u2424\\u2028\\u0085]/g;\nvar SPACES_RE    = /\\u00a0/g;\n\n/**\n * Tokenize the given `str`.\n *\n * @param  {String} `str` Source string\n * @param  {Object} `options`\n * @param  {Object} `env`\n * @param  {Array} `outTokens`\n * @api private\n */\n\nParserBlock.prototype.parse = function (str, options, env, outTokens) {\n  var state, lineStart = 0, lastTabPos = 0;\n  if (!str) { return []; }\n\n  // Normalize spaces\n  str = str.replace(SPACES_RE, ' ');\n\n  // Normalize newlines\n  str = str.replace(NEWLINES_RE, '\\n');\n\n  // Replace tabs with proper number of spaces (1..4)\n  if (str.indexOf('\\t') >= 0) {\n    str = str.replace(TABS_SCAN_RE, function (match, offset) {\n      var result;\n      if (str.charCodeAt(offset) === 0x0A) {\n        lineStart = offset + 1;\n        lastTabPos = 0;\n        return match;\n      }\n      result = '    '.slice((offset - lineStart - lastTabPos) % 4);\n      lastTabPos = offset - lineStart + 1;\n      return result;\n    });\n  }\n\n  state = new StateBlock(str, this, options, env, outTokens);\n  this.tokenize(state, state.line, state.lineMax);\n};\n\n// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\nfunction isTerminatorChar(ch) {\n  switch (ch) {\n    case 0x0A/* \\n */:\n    case 0x5C/* \\ */:\n    case 0x60/* ` */:\n    case 0x2A/* * */:\n    case 0x5F/* _ */:\n    case 0x5E/* ^ */:\n    case 0x5B/* [ */:\n    case 0x5D/* ] */:\n    case 0x21/* ! */:\n    case 0x26/* & */:\n    case 0x3C/* < */:\n    case 0x3E/* > */:\n    case 0x7B/* { */:\n    case 0x7D/* } */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x40/* @ */:\n    case 0x7E/* ~ */:\n    case 0x2B/* + */:\n    case 0x3D/* = */:\n    case 0x3A/* : */:\n      return true;\n    default:\n      return false;\n  }\n}\n\nfunction text(state, silent) {\n  var pos = state.pos;\n\n  while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n    pos++;\n  }\n\n  if (pos === state.pos) { return false; }\n\n  if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n  state.pos = pos;\n\n  return true;\n}\n\n// Proceess '\\n'\n\nfunction newline(state, silent) {\n  var pmax, max, pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n  pmax = state.pending.length - 1;\n  max = state.posMax;\n\n  // '  \\n' -> hardbreak\n  // Lookup in pending chars is bad practice! Don't copy to other rules!\n  // Pending string is stored in concat mode, indexed lookups will cause\n  // convertion to flat mode.\n  if (!silent) {\n    if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n      if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n        // Strip out all trailing spaces on this line.\n        for (var i = pmax - 2; i >= 0; i--) {\n          if (state.pending.charCodeAt(i) !== 0x20) {\n            state.pending = state.pending.substring(0, i + 1);\n            break;\n          }\n        }\n        state.push({\n          type: 'hardbreak',\n          level: state.level\n        });\n      } else {\n        state.pending = state.pending.slice(0, -1);\n        state.push({\n          type: 'softbreak',\n          level: state.level\n        });\n      }\n\n    } else {\n      state.push({\n        type: 'softbreak',\n        level: state.level\n      });\n    }\n  }\n\n  pos++;\n\n  // skip heading spaces for next line\n  while (pos < max && state.src.charCodeAt(pos) === 0x20) { pos++; }\n\n  state.pos = pos;\n  return true;\n}\n\n// Proceess escaped chars and hardbreaks\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n  .split('').forEach(function(ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nfunction escape(state, silent) {\n  var ch, pos = state.pos, max = state.posMax;\n\n  if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n  pos++;\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (ch < 256 && ESCAPED[ch] !== 0) {\n      if (!silent) { state.pending += state.src[pos]; }\n      state.pos += 2;\n      return true;\n    }\n\n    if (ch === 0x0A) {\n      if (!silent) {\n        state.push({\n          type: 'hardbreak',\n          level: state.level\n        });\n      }\n\n      pos++;\n      // skip leading whitespaces from next line\n      while (pos < max && state.src.charCodeAt(pos) === 0x20) { pos++; }\n\n      state.pos = pos;\n      return true;\n    }\n  }\n\n  if (!silent) { state.pending += '\\\\'; }\n  state.pos++;\n  return true;\n}\n\n// Parse backticks\n\nfunction backticks(state, silent) {\n  var start, max, marker, matchStart, matchEnd,\n      pos = state.pos,\n      ch = state.src.charCodeAt(pos);\n\n  if (ch !== 0x60/* ` */) { return false; }\n\n  start = pos;\n  pos++;\n  max = state.posMax;\n\n  while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n  marker = state.src.slice(start, pos);\n\n  matchStart = matchEnd = pos;\n\n  while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n    matchEnd = matchStart + 1;\n\n    while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n    if (matchEnd - matchStart === marker.length) {\n      if (!silent) {\n        state.push({\n          type: 'code',\n          content: state.src.slice(pos, matchStart)\n                              .replace(/[ \\n]+/g, ' ')\n                              .trim(),\n          block: false,\n          level: state.level\n        });\n      }\n      state.pos = matchEnd;\n      return true;\n    }\n  }\n\n  if (!silent) { state.pending += marker; }\n  state.pos += marker.length;\n  return true;\n}\n\n// Process ~~deleted text~~\n\nfunction del(state, silent) {\n  var found,\n      pos,\n      stack,\n      max = state.posMax,\n      start = state.pos,\n      lastChar,\n      nextChar;\n\n  if (state.src.charCodeAt(start) !== 0x7E/* ~ */) { return false; }\n  if (silent) { return false; } // don't run any pairs in validation mode\n  if (start + 4 >= max) { return false; }\n  if (state.src.charCodeAt(start + 1) !== 0x7E/* ~ */) { return false; }\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  lastChar = start > 0 ? state.src.charCodeAt(start - 1) : -1;\n  nextChar = state.src.charCodeAt(start + 2);\n\n  if (lastChar === 0x7E/* ~ */) { return false; }\n  if (nextChar === 0x7E/* ~ */) { return false; }\n  if (nextChar === 0x20 || nextChar === 0x0A) { return false; }\n\n  pos = start + 2;\n  while (pos < max && state.src.charCodeAt(pos) === 0x7E/* ~ */) { pos++; }\n  if (pos > start + 3) {\n    // sequence of 4+ markers taking as literal, same as in a emphasis\n    state.pos += pos - start;\n    if (!silent) { state.pending += state.src.slice(start, pos); }\n    return true;\n  }\n\n  state.pos = start + 2;\n  stack = 1;\n\n  while (state.pos + 1 < max) {\n    if (state.src.charCodeAt(state.pos) === 0x7E/* ~ */) {\n      if (state.src.charCodeAt(state.pos + 1) === 0x7E/* ~ */) {\n        lastChar = state.src.charCodeAt(state.pos - 1);\n        nextChar = state.pos + 2 < max ? state.src.charCodeAt(state.pos + 2) : -1;\n        if (nextChar !== 0x7E/* ~ */ && lastChar !== 0x7E/* ~ */) {\n          if (lastChar !== 0x20 && lastChar !== 0x0A) {\n            // closing '~~'\n            stack--;\n          } else if (nextChar !== 0x20 && nextChar !== 0x0A) {\n            // opening '~~'\n            stack++;\n          } // else {\n            //  // standalone ' ~~ ' indented with spaces\n            // }\n          if (stack <= 0) {\n            found = true;\n            break;\n          }\n        }\n      }\n    }\n\n    state.parser.skipToken(state);\n  }\n\n  if (!found) {\n    // parser failed to find ending tag, so it's not valid emphasis\n    state.pos = start;\n    return false;\n  }\n\n  // found!\n  state.posMax = state.pos;\n  state.pos = start + 2;\n\n  if (!silent) {\n    state.push({ type: 'del_open', level: state.level++ });\n    state.parser.tokenize(state);\n    state.push({ type: 'del_close', level: --state.level });\n  }\n\n  state.pos = state.posMax + 2;\n  state.posMax = max;\n  return true;\n}\n\n// Process ++inserted text++\n\nfunction ins(state, silent) {\n  var found,\n      pos,\n      stack,\n      max = state.posMax,\n      start = state.pos,\n      lastChar,\n      nextChar;\n\n  if (state.src.charCodeAt(start) !== 0x2B/* + */) { return false; }\n  if (silent) { return false; } // don't run any pairs in validation mode\n  if (start + 4 >= max) { return false; }\n  if (state.src.charCodeAt(start + 1) !== 0x2B/* + */) { return false; }\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  lastChar = start > 0 ? state.src.charCodeAt(start - 1) : -1;\n  nextChar = state.src.charCodeAt(start + 2);\n\n  if (lastChar === 0x2B/* + */) { return false; }\n  if (nextChar === 0x2B/* + */) { return false; }\n  if (nextChar === 0x20 || nextChar === 0x0A) { return false; }\n\n  pos = start + 2;\n  while (pos < max && state.src.charCodeAt(pos) === 0x2B/* + */) { pos++; }\n  if (pos !== start + 2) {\n    // sequence of 3+ markers taking as literal, same as in a emphasis\n    state.pos += pos - start;\n    if (!silent) { state.pending += state.src.slice(start, pos); }\n    return true;\n  }\n\n  state.pos = start + 2;\n  stack = 1;\n\n  while (state.pos + 1 < max) {\n    if (state.src.charCodeAt(state.pos) === 0x2B/* + */) {\n      if (state.src.charCodeAt(state.pos + 1) === 0x2B/* + */) {\n        lastChar = state.src.charCodeAt(state.pos - 1);\n        nextChar = state.pos + 2 < max ? state.src.charCodeAt(state.pos + 2) : -1;\n        if (nextChar !== 0x2B/* + */ && lastChar !== 0x2B/* + */) {\n          if (lastChar !== 0x20 && lastChar !== 0x0A) {\n            // closing '++'\n            stack--;\n          } else if (nextChar !== 0x20 && nextChar !== 0x0A) {\n            // opening '++'\n            stack++;\n          } // else {\n            //  // standalone ' ++ ' indented with spaces\n            // }\n          if (stack <= 0) {\n            found = true;\n            break;\n          }\n        }\n      }\n    }\n\n    state.parser.skipToken(state);\n  }\n\n  if (!found) {\n    // parser failed to find ending tag, so it's not valid emphasis\n    state.pos = start;\n    return false;\n  }\n\n  // found!\n  state.posMax = state.pos;\n  state.pos = start + 2;\n\n  if (!silent) {\n    state.push({ type: 'ins_open', level: state.level++ });\n    state.parser.tokenize(state);\n    state.push({ type: 'ins_close', level: --state.level });\n  }\n\n  state.pos = state.posMax + 2;\n  state.posMax = max;\n  return true;\n}\n\n// Process ==highlighted text==\n\nfunction mark(state, silent) {\n  var found,\n      pos,\n      stack,\n      max = state.posMax,\n      start = state.pos,\n      lastChar,\n      nextChar;\n\n  if (state.src.charCodeAt(start) !== 0x3D/* = */) { return false; }\n  if (silent) { return false; } // don't run any pairs in validation mode\n  if (start + 4 >= max) { return false; }\n  if (state.src.charCodeAt(start + 1) !== 0x3D/* = */) { return false; }\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  lastChar = start > 0 ? state.src.charCodeAt(start - 1) : -1;\n  nextChar = state.src.charCodeAt(start + 2);\n\n  if (lastChar === 0x3D/* = */) { return false; }\n  if (nextChar === 0x3D/* = */) { return false; }\n  if (nextChar === 0x20 || nextChar === 0x0A) { return false; }\n\n  pos = start + 2;\n  while (pos < max && state.src.charCodeAt(pos) === 0x3D/* = */) { pos++; }\n  if (pos !== start + 2) {\n    // sequence of 3+ markers taking as literal, same as in a emphasis\n    state.pos += pos - start;\n    if (!silent) { state.pending += state.src.slice(start, pos); }\n    return true;\n  }\n\n  state.pos = start + 2;\n  stack = 1;\n\n  while (state.pos + 1 < max) {\n    if (state.src.charCodeAt(state.pos) === 0x3D/* = */) {\n      if (state.src.charCodeAt(state.pos + 1) === 0x3D/* = */) {\n        lastChar = state.src.charCodeAt(state.pos - 1);\n        nextChar = state.pos + 2 < max ? state.src.charCodeAt(state.pos + 2) : -1;\n        if (nextChar !== 0x3D/* = */ && lastChar !== 0x3D/* = */) {\n          if (lastChar !== 0x20 && lastChar !== 0x0A) {\n            // closing '=='\n            stack--;\n          } else if (nextChar !== 0x20 && nextChar !== 0x0A) {\n            // opening '=='\n            stack++;\n          } // else {\n            //  // standalone ' == ' indented with spaces\n            // }\n          if (stack <= 0) {\n            found = true;\n            break;\n          }\n        }\n      }\n    }\n\n    state.parser.skipToken(state);\n  }\n\n  if (!found) {\n    // parser failed to find ending tag, so it's not valid emphasis\n    state.pos = start;\n    return false;\n  }\n\n  // found!\n  state.posMax = state.pos;\n  state.pos = start + 2;\n\n  if (!silent) {\n    state.push({ type: 'mark_open', level: state.level++ });\n    state.parser.tokenize(state);\n    state.push({ type: 'mark_close', level: --state.level });\n  }\n\n  state.pos = state.posMax + 2;\n  state.posMax = max;\n  return true;\n}\n\n// Process *this* and _that_\n\nfunction isAlphaNum(code) {\n  return (code >= 0x30 /* 0 */ && code <= 0x39 /* 9 */) ||\n         (code >= 0x41 /* A */ && code <= 0x5A /* Z */) ||\n         (code >= 0x61 /* a */ && code <= 0x7A /* z */);\n}\n\n// parse sequence of emphasis markers,\n// \"start\" should point at a valid marker\nfunction scanDelims(state, start) {\n  var pos = start, lastChar, nextChar, count,\n      can_open = true,\n      can_close = true,\n      max = state.posMax,\n      marker = state.src.charCodeAt(start);\n\n  lastChar = start > 0 ? state.src.charCodeAt(start - 1) : -1;\n\n  while (pos < max && state.src.charCodeAt(pos) === marker) { pos++; }\n  if (pos >= max) { can_open = false; }\n  count = pos - start;\n\n  if (count >= 4) {\n    // sequence of four or more unescaped markers can't start/end an emphasis\n    can_open = can_close = false;\n  } else {\n    nextChar = pos < max ? state.src.charCodeAt(pos) : -1;\n\n    // check whitespace conditions\n    if (nextChar === 0x20 || nextChar === 0x0A) { can_open = false; }\n    if (lastChar === 0x20 || lastChar === 0x0A) { can_close = false; }\n\n    if (marker === 0x5F /* _ */) {\n      // check if we aren't inside the word\n      if (isAlphaNum(lastChar)) { can_open = false; }\n      if (isAlphaNum(nextChar)) { can_close = false; }\n    }\n  }\n\n  return {\n    can_open: can_open,\n    can_close: can_close,\n    delims: count\n  };\n}\n\nfunction emphasis(state, silent) {\n  var startCount,\n      count,\n      found,\n      oldCount,\n      newCount,\n      stack,\n      res,\n      max = state.posMax,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (marker !== 0x5F/* _ */ && marker !== 0x2A /* * */) { return false; }\n  if (silent) { return false; } // don't run any pairs in validation mode\n\n  res = scanDelims(state, start);\n  startCount = res.delims;\n  if (!res.can_open) {\n    state.pos += startCount;\n    if (!silent) { state.pending += state.src.slice(start, state.pos); }\n    return true;\n  }\n\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  state.pos = start + startCount;\n  stack = [ startCount ];\n\n  while (state.pos < max) {\n    if (state.src.charCodeAt(state.pos) === marker) {\n      res = scanDelims(state, state.pos);\n      count = res.delims;\n      if (res.can_close) {\n        oldCount = stack.pop();\n        newCount = count;\n\n        while (oldCount !== newCount) {\n          if (newCount < oldCount) {\n            stack.push(oldCount - newCount);\n            break;\n          }\n\n          // assert(newCount > oldCount)\n          newCount -= oldCount;\n\n          if (stack.length === 0) { break; }\n          state.pos += oldCount;\n          oldCount = stack.pop();\n        }\n\n        if (stack.length === 0) {\n          startCount = oldCount;\n          found = true;\n          break;\n        }\n        state.pos += count;\n        continue;\n      }\n\n      if (res.can_open) { stack.push(count); }\n      state.pos += count;\n      continue;\n    }\n\n    state.parser.skipToken(state);\n  }\n\n  if (!found) {\n    // parser failed to find ending tag, so it's not valid emphasis\n    state.pos = start;\n    return false;\n  }\n\n  // found!\n  state.posMax = state.pos;\n  state.pos = start + startCount;\n\n  if (!silent) {\n    if (startCount === 2 || startCount === 3) {\n      state.push({ type: 'strong_open', level: state.level++ });\n    }\n    if (startCount === 1 || startCount === 3) {\n      state.push({ type: 'em_open', level: state.level++ });\n    }\n\n    state.parser.tokenize(state);\n\n    if (startCount === 1 || startCount === 3) {\n      state.push({ type: 'em_close', level: --state.level });\n    }\n    if (startCount === 2 || startCount === 3) {\n      state.push({ type: 'strong_close', level: --state.level });\n    }\n  }\n\n  state.pos = state.posMax + startCount;\n  state.posMax = max;\n  return true;\n}\n\n// Process ~subscript~\n\n// same as UNESCAPE_MD_RE plus a space\nvar UNESCAPE_RE = /\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;\n\nfunction sub(state, silent) {\n  var found,\n      content,\n      max = state.posMax,\n      start = state.pos;\n\n  if (state.src.charCodeAt(start) !== 0x7E/* ~ */) { return false; }\n  if (silent) { return false; } // don't run any pairs in validation mode\n  if (start + 2 >= max) { return false; }\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  state.pos = start + 1;\n\n  while (state.pos < max) {\n    if (state.src.charCodeAt(state.pos) === 0x7E/* ~ */) {\n      found = true;\n      break;\n    }\n\n    state.parser.skipToken(state);\n  }\n\n  if (!found || start + 1 === state.pos) {\n    state.pos = start;\n    return false;\n  }\n\n  content = state.src.slice(start + 1, state.pos);\n\n  // don't allow unescaped spaces/newlines inside\n  if (content.match(/(^|[^\\\\])(\\\\\\\\)*\\s/)) {\n    state.pos = start;\n    return false;\n  }\n\n  // found!\n  state.posMax = state.pos;\n  state.pos = start + 1;\n\n  if (!silent) {\n    state.push({\n      type: 'sub',\n      level: state.level,\n      content: content.replace(UNESCAPE_RE, '$1')\n    });\n  }\n\n  state.pos = state.posMax + 1;\n  state.posMax = max;\n  return true;\n}\n\n// Process ^superscript^\n\n// same as UNESCAPE_MD_RE plus a space\nvar UNESCAPE_RE$1 = /\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;\n\nfunction sup(state, silent) {\n  var found,\n      content,\n      max = state.posMax,\n      start = state.pos;\n\n  if (state.src.charCodeAt(start) !== 0x5E/* ^ */) { return false; }\n  if (silent) { return false; } // don't run any pairs in validation mode\n  if (start + 2 >= max) { return false; }\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  state.pos = start + 1;\n\n  while (state.pos < max) {\n    if (state.src.charCodeAt(state.pos) === 0x5E/* ^ */) {\n      found = true;\n      break;\n    }\n\n    state.parser.skipToken(state);\n  }\n\n  if (!found || start + 1 === state.pos) {\n    state.pos = start;\n    return false;\n  }\n\n  content = state.src.slice(start + 1, state.pos);\n\n  // don't allow unescaped spaces/newlines inside\n  if (content.match(/(^|[^\\\\])(\\\\\\\\)*\\s/)) {\n    state.pos = start;\n    return false;\n  }\n\n  // found!\n  state.posMax = state.pos;\n  state.pos = start + 1;\n\n  if (!silent) {\n    state.push({\n      type: 'sup',\n      level: state.level,\n      content: content.replace(UNESCAPE_RE$1, '$1')\n    });\n  }\n\n  state.pos = state.posMax + 1;\n  state.posMax = max;\n  return true;\n}\n\n// Process [links](<to> \"stuff\")\n\n\nfunction links(state, silent) {\n  var labelStart,\n      labelEnd,\n      label,\n      href,\n      title,\n      pos,\n      ref,\n      code,\n      isImage = false,\n      oldPos = state.pos,\n      max = state.posMax,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (marker === 0x21/* ! */) {\n    isImage = true;\n    marker = state.src.charCodeAt(++start);\n  }\n\n  if (marker !== 0x5B/* [ */) { return false; }\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  labelStart = start + 1;\n  labelEnd = parseLinkLabel(state, start);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false; }\n\n  pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (code !== 0x20 && code !== 0x0A) { break; }\n    }\n    if (pos >= max) { return false; }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos;\n    if (parseLinkDestination(state, pos)) {\n      href = state.linkContent;\n      pos = state.pos;\n    } else {\n      href = '';\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                ^^ skipping these spaces\n    start = pos;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (code !== 0x20 && code !== 0x0A) { break; }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                  ^^^^^^^ parsing link title\n    if (pos < max && start !== pos && parseLinkTitle(state, pos)) {\n      title = state.linkContent;\n      pos = state.pos;\n\n      // [link](  <href>  \"title\"  )\n      //                         ^^ skipping these spaces\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n        if (code !== 0x20 && code !== 0x0A) { break; }\n      }\n    } else {\n      title = '';\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      state.pos = oldPos;\n      return false;\n    }\n    pos++;\n  } else {\n    //\n    // Link reference\n    //\n\n    // do not allow nested reference links\n    if (state.linkLevel > 0) { return false; }\n\n    // [foo]  [bar]\n    //      ^^ optional whitespace (can include newlines)\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (code !== 0x20 && code !== 0x0A) { break; }\n    }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1;\n      pos = parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = start - 1;\n      }\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) {\n      if (typeof label === 'undefined') {\n        pos = labelEnd + 1;\n      }\n      label = state.src.slice(labelStart, labelEnd);\n    }\n\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    state.pos = labelStart;\n    state.posMax = labelEnd;\n\n    if (isImage) {\n      state.push({\n        type: 'image',\n        src: href,\n        title: title,\n        alt: state.src.substr(labelStart, labelEnd - labelStart),\n        level: state.level\n      });\n    } else {\n      state.push({\n        type: 'link_open',\n        href: href,\n        title: title,\n        level: state.level++\n      });\n      state.linkLevel++;\n      state.parser.tokenize(state);\n      state.linkLevel--;\n      state.push({ type: 'link_close', level: --state.level });\n    }\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n}\n\n// Process inline footnotes (^[...])\n\n\nfunction footnote_inline(state, silent) {\n  var labelStart,\n      labelEnd,\n      footnoteId,\n      oldLength,\n      max = state.posMax,\n      start = state.pos;\n\n  if (start + 2 >= max) { return false; }\n  if (state.src.charCodeAt(start) !== 0x5E/* ^ */) { return false; }\n  if (state.src.charCodeAt(start + 1) !== 0x5B/* [ */) { return false; }\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  labelStart = start + 2;\n  labelEnd = parseLinkLabel(state, start + 1);\n\n  // parser failed to find ']', so it's not a valid note\n  if (labelEnd < 0) { return false; }\n\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    if (!state.env.footnotes) { state.env.footnotes = {}; }\n    if (!state.env.footnotes.list) { state.env.footnotes.list = []; }\n    footnoteId = state.env.footnotes.list.length;\n\n    state.pos = labelStart;\n    state.posMax = labelEnd;\n\n    state.push({\n      type: 'footnote_ref',\n      id: footnoteId,\n      level: state.level\n    });\n    state.linkLevel++;\n    oldLength = state.tokens.length;\n    state.parser.tokenize(state);\n    state.env.footnotes.list[footnoteId] = { tokens: state.tokens.splice(oldLength) };\n    state.linkLevel--;\n  }\n\n  state.pos = labelEnd + 1;\n  state.posMax = max;\n  return true;\n}\n\n// Process footnote references ([^...])\n\nfunction footnote_ref(state, silent) {\n  var label,\n      pos,\n      footnoteId,\n      footnoteSubId,\n      max = state.posMax,\n      start = state.pos;\n\n  // should be at least 4 chars - \"[^x]\"\n  if (start + 3 > max) { return false; }\n\n  if (!state.env.footnotes || !state.env.footnotes.refs) { return false; }\n  if (state.src.charCodeAt(start) !== 0x5B/* [ */) { return false; }\n  if (state.src.charCodeAt(start + 1) !== 0x5E/* ^ */) { return false; }\n  if (state.level >= state.options.maxNesting) { return false; }\n\n  for (pos = start + 2; pos < max; pos++) {\n    if (state.src.charCodeAt(pos) === 0x20) { return false; }\n    if (state.src.charCodeAt(pos) === 0x0A) { return false; }\n    if (state.src.charCodeAt(pos) === 0x5D /* ] */) {\n      break;\n    }\n  }\n\n  if (pos === start + 2) { return false; } // no empty footnote labels\n  if (pos >= max) { return false; }\n  pos++;\n\n  label = state.src.slice(start + 2, pos - 1);\n  if (typeof state.env.footnotes.refs[':' + label] === 'undefined') { return false; }\n\n  if (!silent) {\n    if (!state.env.footnotes.list) { state.env.footnotes.list = []; }\n\n    if (state.env.footnotes.refs[':' + label] < 0) {\n      footnoteId = state.env.footnotes.list.length;\n      state.env.footnotes.list[footnoteId] = { label: label, count: 0 };\n      state.env.footnotes.refs[':' + label] = footnoteId;\n    } else {\n      footnoteId = state.env.footnotes.refs[':' + label];\n    }\n\n    footnoteSubId = state.env.footnotes.list[footnoteId].count;\n    state.env.footnotes.list[footnoteId].count++;\n\n    state.push({\n      type: 'footnote_ref',\n      id: footnoteId,\n      subId: footnoteSubId,\n      level: state.level\n    });\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n}\n\n// List of valid url schemas, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#autolinks\n\nvar url_schemas = [\n  'coap',\n  'doi',\n  'javascript',\n  'aaa',\n  'aaas',\n  'about',\n  'acap',\n  'cap',\n  'cid',\n  'crid',\n  'data',\n  'dav',\n  'dict',\n  'dns',\n  'file',\n  'ftp',\n  'geo',\n  'go',\n  'gopher',\n  'h323',\n  'http',\n  'https',\n  'iax',\n  'icap',\n  'im',\n  'imap',\n  'info',\n  'ipp',\n  'iris',\n  'iris.beep',\n  'iris.xpc',\n  'iris.xpcs',\n  'iris.lwz',\n  'ldap',\n  'mailto',\n  'mid',\n  'msrp',\n  'msrps',\n  'mtqp',\n  'mupdate',\n  'news',\n  'nfs',\n  'ni',\n  'nih',\n  'nntp',\n  'opaquelocktoken',\n  'pop',\n  'pres',\n  'rtsp',\n  'service',\n  'session',\n  'shttp',\n  'sieve',\n  'sip',\n  'sips',\n  'sms',\n  'snmp',\n  'soap.beep',\n  'soap.beeps',\n  'tag',\n  'tel',\n  'telnet',\n  'tftp',\n  'thismessage',\n  'tn3270',\n  'tip',\n  'tv',\n  'urn',\n  'vemmi',\n  'ws',\n  'wss',\n  'xcon',\n  'xcon-userid',\n  'xmlrpc.beep',\n  'xmlrpc.beeps',\n  'xmpp',\n  'z39.50r',\n  'z39.50s',\n  'adiumxtra',\n  'afp',\n  'afs',\n  'aim',\n  'apt',\n  'attachment',\n  'aw',\n  'beshare',\n  'bitcoin',\n  'bolo',\n  'callto',\n  'chrome',\n  'chrome-extension',\n  'com-eventbrite-attendee',\n  'content',\n  'cvs',\n  'dlna-playsingle',\n  'dlna-playcontainer',\n  'dtn',\n  'dvb',\n  'ed2k',\n  'facetime',\n  'feed',\n  'finger',\n  'fish',\n  'gg',\n  'git',\n  'gizmoproject',\n  'gtalk',\n  'hcp',\n  'icon',\n  'ipn',\n  'irc',\n  'irc6',\n  'ircs',\n  'itms',\n  'jar',\n  'jms',\n  'keyparc',\n  'lastfm',\n  'ldaps',\n  'magnet',\n  'maps',\n  'market',\n  'message',\n  'mms',\n  'ms-help',\n  'msnim',\n  'mumble',\n  'mvn',\n  'notes',\n  'oid',\n  'palm',\n  'paparazzi',\n  'platform',\n  'proxy',\n  'psyc',\n  'query',\n  'res',\n  'resource',\n  'rmi',\n  'rsync',\n  'rtmp',\n  'secondlife',\n  'sftp',\n  'sgn',\n  'skype',\n  'smb',\n  'soldat',\n  'spotify',\n  'ssh',\n  'steam',\n  'svn',\n  'teamspeak',\n  'things',\n  'udp',\n  'unreal',\n  'ut2004',\n  'ventrilo',\n  'view-source',\n  'webcal',\n  'wtai',\n  'wyciwyg',\n  'xfire',\n  'xri',\n  'ymsgr'\n];\n\n// Process autolinks '<protocol:...>'\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE    = /^<([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/;\nvar AUTOLINK_RE = /^<([a-zA-Z.\\-]{1,25}):([^<>\\x00-\\x20]*)>/;\n\n\nfunction autolink(state, silent) {\n  var tail, linkMatch, emailMatch, url, fullUrl, pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n  tail = state.src.slice(pos);\n\n  if (tail.indexOf('>') < 0) { return false; }\n\n  linkMatch = tail.match(AUTOLINK_RE);\n\n  if (linkMatch) {\n    if (url_schemas.indexOf(linkMatch[1].toLowerCase()) < 0) { return false; }\n\n    url = linkMatch[0].slice(1, -1);\n    fullUrl = normalizeLink(url);\n    if (!state.parser.validateLink(url)) { return false; }\n\n    if (!silent) {\n      state.push({\n        type: 'link_open',\n        href: fullUrl,\n        level: state.level\n      });\n      state.push({\n        type: 'text',\n        content: url,\n        level: state.level + 1\n      });\n      state.push({ type: 'link_close', level: state.level });\n    }\n\n    state.pos += linkMatch[0].length;\n    return true;\n  }\n\n  emailMatch = tail.match(EMAIL_RE);\n\n  if (emailMatch) {\n\n    url = emailMatch[0].slice(1, -1);\n\n    fullUrl = normalizeLink('mailto:' + url);\n    if (!state.parser.validateLink(fullUrl)) { return false; }\n\n    if (!silent) {\n      state.push({\n        type: 'link_open',\n        href: fullUrl,\n        level: state.level\n      });\n      state.push({\n        type: 'text',\n        content: url,\n        level: state.level + 1\n      });\n      state.push({ type: 'link_close', level: state.level });\n    }\n\n    state.pos += emailMatch[0].length;\n    return true;\n  }\n\n  return false;\n}\n\n// Regexps to match html elements\n\nfunction replace$1(regex, options) {\n  regex = regex.source;\n  options = options || '';\n\n  return function self(name, val) {\n    if (!name) {\n      return new RegExp(regex, options);\n    }\n    val = val.source || val;\n    regex = regex.replace(name, val);\n    return self;\n  };\n}\n\n\nvar attr_name     = /[a-zA-Z_:][a-zA-Z0-9:._-]*/;\n\nvar unquoted      = /[^\"'=<>`\\x00-\\x20]+/;\nvar single_quoted = /'[^']*'/;\nvar double_quoted = /\"[^\"]*\"/;\n\n/*eslint no-spaced-func:0*/\nvar attr_value  = replace$1(/(?:unquoted|single_quoted|double_quoted)/)\n                    ('unquoted', unquoted)\n                    ('single_quoted', single_quoted)\n                    ('double_quoted', double_quoted)\n                    ();\n\nvar attribute   = replace$1(/(?:\\s+attr_name(?:\\s*=\\s*attr_value)?)/)\n                    ('attr_name', attr_name)\n                    ('attr_value', attr_value)\n                    ();\n\nvar open_tag    = replace$1(/<[A-Za-z][A-Za-z0-9]*attribute*\\s*\\/?>/)\n                    ('attribute', attribute)\n                    ();\n\nvar close_tag   = /<\\/[A-Za-z][A-Za-z0-9]*\\s*>/;\nvar comment     = /<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->/;\nvar processing  = /<[?].*?[?]>/;\nvar declaration = /<![A-Z]+\\s+[^>]*>/;\nvar cdata       = /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/;\n\nvar HTML_TAG_RE = replace$1(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)\n  ('open_tag', open_tag)\n  ('close_tag', close_tag)\n  ('comment', comment)\n  ('processing', processing)\n  ('declaration', declaration)\n  ('cdata', cdata)\n  ();\n\n// Process html tags\n\n\nfunction isLetter$2(ch) {\n  /*eslint no-bitwise:0*/\n  var lc = ch | 0x20; // to lower case\n  return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nfunction htmltag(state, silent) {\n  var ch, match, max, pos = state.pos;\n\n  if (!state.options.html) { return false; }\n\n  // Check start\n  max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n      pos + 2 >= max) {\n    return false;\n  }\n\n  // Quick fail on second char\n  ch = state.src.charCodeAt(pos + 1);\n  if (ch !== 0x21/* ! */ &&\n      ch !== 0x3F/* ? */ &&\n      ch !== 0x2F/* / */ &&\n      !isLetter$2(ch)) {\n    return false;\n  }\n\n  match = state.src.slice(pos).match(HTML_TAG_RE);\n  if (!match) { return false; }\n\n  if (!silent) {\n    state.push({\n      type: 'htmltag',\n      content: state.src.slice(pos, pos + match[0].length),\n      level: state.level\n    });\n  }\n  state.pos += match[0].length;\n  return true;\n}\n\n// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i;\nvar NAMED_RE   = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nfunction entity(state, silent) {\n  var ch, code, match, pos = state.pos, max = state.posMax;\n\n  if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n  if (pos + 1 < max) {\n    ch = state.src.charCodeAt(pos + 1);\n\n    if (ch === 0x23 /* # */) {\n      match = state.src.slice(pos).match(DIGITAL_RE);\n      if (match) {\n        if (!silent) {\n          code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n          state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n        }\n        state.pos += match[0].length;\n        return true;\n      }\n    } else {\n      match = state.src.slice(pos).match(NAMED_RE);\n      if (match) {\n        var decoded = decodeEntity(match[1]);\n        if (match[1] !== decoded) {\n          if (!silent) { state.pending += decoded; }\n          state.pos += match[0].length;\n          return true;\n        }\n      }\n    }\n  }\n\n  if (!silent) { state.pending += '&'; }\n  state.pos++;\n  return true;\n}\n\n/**\n * Inline Parser `rules`\n */\n\nvar _rules$2 = [\n  [ 'text',            text ],\n  [ 'newline',         newline ],\n  [ 'escape',          escape ],\n  [ 'backticks',       backticks ],\n  [ 'del',             del ],\n  [ 'ins',             ins ],\n  [ 'mark',            mark ],\n  [ 'emphasis',        emphasis ],\n  [ 'sub',             sub ],\n  [ 'sup',             sup ],\n  [ 'links',           links ],\n  [ 'footnote_inline', footnote_inline ],\n  [ 'footnote_ref',    footnote_ref ],\n  [ 'autolink',        autolink ],\n  [ 'htmltag',         htmltag ],\n  [ 'entity',          entity ]\n];\n\n/**\n * Inline Parser class. Note that link validation is stricter\n * in Remarkable than what is specified by CommonMark. If you\n * want to change this you can use a custom validator.\n *\n * @api private\n */\n\nfunction ParserInline() {\n  this.ruler = new Ruler();\n  for (var i = 0; i < _rules$2.length; i++) {\n    this.ruler.push(_rules$2[i][0], _rules$2[i][1]);\n  }\n\n  // Can be overridden with a custom validator\n  this.validateLink = validateLink;\n}\n\n/**\n * Skip a single token by running all rules in validation mode.\n * Returns `true` if any rule reports success.\n *\n * @param  {Object} `state`\n * @api privage\n */\n\nParserInline.prototype.skipToken = function (state) {\n  var rules = this.ruler.getRules('');\n  var len = rules.length;\n  var pos = state.pos;\n  var i, cached_pos;\n\n  if ((cached_pos = state.cacheGet(pos)) > 0) {\n    state.pos = cached_pos;\n    return;\n  }\n\n  for (i = 0; i < len; i++) {\n    if (rules[i](state, true)) {\n      state.cacheSet(pos, state.pos);\n      return;\n    }\n  }\n\n  state.pos++;\n  state.cacheSet(pos, state.pos);\n};\n\n/**\n * Generate tokens for the given input range.\n *\n * @param  {Object} `state`\n * @api private\n */\n\nParserInline.prototype.tokenize = function (state) {\n  var rules = this.ruler.getRules('');\n  var len = rules.length;\n  var end = state.posMax;\n  var ok, i;\n\n  while (state.pos < end) {\n\n    // Try all possible rules.\n    // On success, the rule should:\n    //\n    // - update `state.pos`\n    // - update `state.tokens`\n    // - return true\n    for (i = 0; i < len; i++) {\n      ok = rules[i](state, false);\n\n      if (ok) {\n        break;\n      }\n    }\n\n    if (ok) {\n      if (state.pos >= end) { break; }\n      continue;\n    }\n\n    state.pending += state.src[state.pos++];\n  }\n\n  if (state.pending) {\n    state.pushPending();\n  }\n};\n\n/**\n * Parse the given input string.\n *\n * @param  {String} `str`\n * @param  {Object} `options`\n * @param  {Object} `env`\n * @param  {Array} `outTokens`\n * @api private\n */\n\nParserInline.prototype.parse = function (str, options, env, outTokens) {\n  var state = new StateInline(str, this, options, env, outTokens);\n  this.tokenize(state);\n};\n\n/**\n * Validate the given `url` by checking for bad protocols.\n *\n * @param  {String} `url`\n * @return {Boolean}\n */\n\nfunction validateLink(url) {\n  var BAD_PROTOCOLS = [ 'vbscript', 'javascript', 'file', 'data' ];\n  var str = url.trim().toLowerCase();\n  // Care about digital entities \"javascript&#x3A;alert(1)\"\n  str = replaceEntities(str);\n  if (str.indexOf(':') !== -1 && BAD_PROTOCOLS.indexOf(str.split(':')[0]) !== -1) {\n    return false;\n  }\n  return true;\n}\n\n// Remarkable default options\n\nvar defaultConfig = {\n  options: {\n    html:         false,        // Enable HTML tags in source\n    xhtmlOut:     false,        // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkTarget:   '',           // set target to open link in\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Set doubles to '«»' for Russian, '„“' for German.\n    quotes: '“”‘’',\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if input not changed\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   20            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'block',\n        'inline',\n        'references',\n        'replacements',\n        'smartquotes',\n        'references',\n        'abbr2',\n        'footnote_tail'\n      ]\n    },\n\n    block: {\n      rules: [\n        'blockquote',\n        'code',\n        'fences',\n        'footnote',\n        'heading',\n        'hr',\n        'htmlblock',\n        'lheading',\n        'list',\n        'paragraph',\n        'table'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'autolink',\n        'backticks',\n        'del',\n        'emphasis',\n        'entity',\n        'escape',\n        'footnote_ref',\n        'htmltag',\n        'links',\n        'newline',\n        'text'\n      ]\n    }\n  }\n};\n\n// Remarkable default options\n\nvar fullConfig = {\n  options: {\n    html:         false,        // Enable HTML tags in source\n    xhtmlOut:     false,        // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkTarget:   '',           // set target to open link in\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Set doubles to '«»' for Russian, '„“' for German.\n    quotes:       '“”‘’',\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if input not changed\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight:     null,\n\n    maxNesting:    20            // Internal protection, recursion limit\n  },\n\n  components: {\n    // Don't restrict core/block/inline rules\n    core: {},\n    block: {},\n    inline: {}\n  }\n};\n\n// Commonmark default options\n\nvar commonmarkConfig = {\n  options: {\n    html:         true,         // Enable HTML tags in source\n    xhtmlOut:     true,         // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkTarget:   '',           // set target to open link in\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Set doubles to '«»' for Russian, '„“' for German.\n    quotes: '“”‘’',\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if input not changed\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   20            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'block',\n        'inline',\n        'references',\n        'abbr2'\n      ]\n    },\n\n    block: {\n      rules: [\n        'blockquote',\n        'code',\n        'fences',\n        'heading',\n        'hr',\n        'htmlblock',\n        'lheading',\n        'list',\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'autolink',\n        'backticks',\n        'emphasis',\n        'entity',\n        'escape',\n        'htmltag',\n        'links',\n        'newline',\n        'text'\n      ]\n    }\n  }\n};\n\n/**\n * Preset configs\n */\n\nvar config = {\n  'default': defaultConfig,\n  'full': fullConfig,\n  'commonmark': commonmarkConfig\n};\n\n/**\n * The `StateCore` class manages state.\n *\n * @param {Object} `instance` Remarkable instance\n * @param {String} `str` Markdown string\n * @param {Object} `env`\n */\n\nfunction StateCore(instance, str, env) {\n  this.src = str;\n  this.env = env;\n  this.options = instance.options;\n  this.tokens = [];\n  this.inlineMode = false;\n\n  this.inline = instance.inline;\n  this.block = instance.block;\n  this.renderer = instance.renderer;\n  this.typographer = instance.typographer;\n}\n\n/**\n * The main `Remarkable` class. Create an instance of\n * `Remarkable` with a `preset` and/or `options`.\n *\n * @param {String} `preset` If no preset is given, `default` is used.\n * @param {Object} `options`\n */\n\nfunction Remarkable(preset, options) {\n  if (typeof preset !== 'string') {\n    options = preset;\n    preset = 'default';\n  }\n\n  if (options && options.linkify != null) {\n    console.warn(\n      'linkify option is removed. Use linkify plugin instead:\\n\\n' +\n      'import Remarkable from \\'remarkable\\';\\n' +\n      'import linkify from \\'remarkable/linkify\\';\\n' +\n      'new Remarkable().use(linkify)\\n'\n    );\n  }\n\n  this.inline   = new ParserInline();\n  this.block    = new ParserBlock();\n  this.core     = new Core();\n  this.renderer = new Renderer();\n  this.ruler    = new Ruler();\n\n  this.options  = {};\n  this.configure(config[preset]);\n  this.set(options || {});\n}\n\n/**\n * Set options as an alternative to passing them\n * to the constructor.\n *\n * ```js\n * md.set({typographer: true});\n * ```\n * @param {Object} `options`\n * @api public\n */\n\nRemarkable.prototype.set = function (options) {\n  assign(this.options, options);\n};\n\n/**\n * Batch loader for components rules states, and options\n *\n * @param  {Object} `presets`\n */\n\nRemarkable.prototype.configure = function (presets) {\n  var self = this;\n\n  if (!presets) { throw new Error('Wrong `remarkable` preset, check name/content'); }\n  if (presets.options) { self.set(presets.options); }\n  if (presets.components) {\n    Object.keys(presets.components).forEach(function (name) {\n      if (presets.components[name].rules) {\n        self[name].ruler.enable(presets.components[name].rules, true);\n      }\n    });\n  }\n};\n\n/**\n * Use a plugin.\n *\n * ```js\n * var md = new Remarkable();\n *\n * md.use(plugin1)\n *   .use(plugin2, opts)\n *   .use(plugin3);\n * ```\n *\n * @param  {Function} `plugin`\n * @param  {Object} `options`\n * @return {Object} `Remarkable` for chaining\n */\n\nRemarkable.prototype.use = function (plugin, options) {\n  plugin(this, options);\n  return this;\n};\n\n\n/**\n * Parse the input `string` and return a tokens array.\n * Modifies `env` with definitions data.\n *\n * @param  {String} `string`\n * @param  {Object} `env`\n * @return {Array} Array of tokens\n */\n\nRemarkable.prototype.parse = function (str, env) {\n  var state = new StateCore(this, str, env);\n  this.core.process(state);\n  return state.tokens;\n};\n\n/**\n * The main `.render()` method that does all the magic :)\n *\n * @param  {String} `string`\n * @param  {Object} `env`\n * @return {String} Rendered HTML.\n */\n\nRemarkable.prototype.render = function (str, env) {\n  env = env || {};\n  return this.renderer.render(this.parse(str, env), this.options, env);\n};\n\n/**\n * Parse the given content `string` as a single string.\n *\n * @param  {String} `string`\n * @param  {Object} `env`\n * @return {Array} Array of tokens\n */\n\nRemarkable.prototype.parseInline = function (str, env) {\n  var state = new StateCore(this, str, env);\n  state.inlineMode = true;\n  this.core.process(state);\n  return state.tokens;\n};\n\n/**\n * Render a single content `string`, without wrapping it\n * to paragraphs\n *\n * @param  {String} `str`\n * @param  {Object} `env`\n * @return {String}\n */\n\nRemarkable.prototype.renderInline = function (str, env) {\n  env = env || {};\n  return this.renderer.render(this.parseInline(str, env), this.options, env);\n};\n\nexport { Remarkable, utils };\n","// Important: this file is generated from the 'build' script and should not be\n// edited directly\nexport var version = '3.16.2';\n//# sourceMappingURL=version.js.map","/**\n * Assigns (shallow copies) the properties of `src` onto `dest`, if the\n * corresponding property on `dest` === `undefined`.\n *\n * @param {Object} dest The destination object.\n * @param {Object} src The source object.\n * @return {Object} The destination object (`dest`)\n */\nexport function defaults(dest, src) {\n    for (var prop in src) {\n        if (src.hasOwnProperty(prop) && dest[prop] === undefined) {\n            dest[prop] = src[prop];\n        }\n    }\n    return dest;\n}\n/**\n * Truncates the `str` at `len - ellipsisChars.length`, and adds the `ellipsisChars` to the\n * end of the string (by default, two periods: '..'). If the `str` length does not exceed\n * `len`, the string will be returned unchanged.\n *\n * @param {String} str The string to truncate and add an ellipsis to.\n * @param {Number} truncateLen The length to truncate the string at.\n * @param {String} [ellipsisChars=...] The ellipsis character(s) to add to the end of `str`\n *   when truncated. Defaults to '...'\n */\nexport function ellipsis(str, truncateLen, ellipsisChars) {\n    var ellipsisLength;\n    if (str.length > truncateLen) {\n        if (ellipsisChars == null) {\n            ellipsisChars = '&hellip;';\n            ellipsisLength = 3;\n        }\n        else {\n            ellipsisLength = ellipsisChars.length;\n        }\n        str = str.substring(0, truncateLen - ellipsisLength) + ellipsisChars;\n    }\n    return str;\n}\n/**\n * Supports `Array.prototype.indexOf()` functionality for old IE (IE8 and below).\n *\n * @param {Array} arr The array to find an element of.\n * @param {*} element The element to find in the array, and return the index of.\n * @return {Number} The index of the `element`, or -1 if it was not found.\n */\nexport function indexOf(arr, element) {\n    // @ts-ignore - As far as TypeScript is concerned, this method will always\n    // exist (lowest \"lib\" in TS is \"ES5\"). Hence we need to ignore this error\n    // to support IE8 which only implements ES3 and doesn't have this method\n    if (Array.prototype.indexOf) {\n        return arr.indexOf(element);\n    }\n    else {\n        for (var i = 0, len = arr.length; i < len; i++) {\n            if (arr[i] === element)\n                return i;\n        }\n        return -1;\n    }\n}\n/**\n * Removes array elements based on a filtering function. Mutates the input\n * array.\n *\n * Using this instead of the ES5 Array.prototype.filter() function, to allow\n * Autolinker compatibility with IE8, and also to prevent creating many new\n * arrays in memory for filtering.\n *\n * @param {Array} arr The array to remove elements from. This array is\n *   mutated.\n * @param {Function} fn A function which should return `true` to\n *   remove an element.\n * @return {Array} The mutated input `arr`.\n */\nexport function remove(arr, fn) {\n    for (var i = arr.length - 1; i >= 0; i--) {\n        if (fn(arr[i]) === true) {\n            arr.splice(i, 1);\n        }\n    }\n}\n/**\n * Performs the functionality of what modern browsers do when `String.prototype.split()` is called\n * with a regular expression that contains capturing parenthesis.\n *\n * For example:\n *\n *     // Modern browsers:\n *     \"a,b,c\".split( /(,)/ );  // --> [ 'a', ',', 'b', ',', 'c' ]\n *\n *     // Old IE (including IE8):\n *     \"a,b,c\".split( /(,)/ );  // --> [ 'a', 'b', 'c' ]\n *\n * This method emulates the functionality of modern browsers for the old IE case.\n *\n * @param {String} str The string to split.\n * @param {RegExp} splitRegex The regular expression to split the input `str` on. The splitting\n *   character(s) will be spliced into the array, as in the \"modern browsers\" example in the\n *   description of this method.\n *   Note #1: the supplied regular expression **must** have the 'g' flag specified.\n *   Note #2: for simplicity's sake, the regular expression does not need\n *   to contain capturing parenthesis - it will be assumed that any match has them.\n * @return {String[]} The split array of strings, with the splitting character(s) included.\n */\nexport function splitAndCapture(str, splitRegex) {\n    if (!splitRegex.global)\n        throw new Error(\"`splitRegex` must have the 'g' flag set\");\n    var result = [], lastIdx = 0, match;\n    while ((match = splitRegex.exec(str))) {\n        result.push(str.substring(lastIdx, match.index));\n        result.push(match[0]); // push the splitting char(s)\n        lastIdx = match.index + match[0].length;\n    }\n    result.push(str.substring(lastIdx));\n    return result;\n}\n/**\n * Function that should never be called but is used to check that every\n * enum value is handled using TypeScript's 'never' type.\n */\nexport function throwUnhandledCaseError(theValue) {\n    throw new Error(\"Unhandled case for value: '\".concat(theValue, \"'\"));\n}\n//# sourceMappingURL=utils.js.map","import { indexOf } from './utils';\n/**\n * @class Autolinker.HtmlTag\n * @extends Object\n *\n * Represents an HTML tag, which can be used to easily build/modify HTML tags programmatically.\n *\n * Autolinker uses this abstraction to create HTML tags, and then write them out as strings. You may also use\n * this class in your code, especially within a {@link Autolinker#replaceFn replaceFn}.\n *\n * ## Examples\n *\n * Example instantiation:\n *\n *     var tag = new Autolinker.HtmlTag( {\n *         tagName : 'a',\n *         attrs   : { 'href': 'http://google.com', 'class': 'external-link' },\n *         innerHtml : 'Google'\n *     } );\n *\n *     tag.toAnchorString();  // <a href=\"http://google.com\" class=\"external-link\">Google</a>\n *\n *     // Individual accessor methods\n *     tag.getTagName();                 // 'a'\n *     tag.getAttr( 'href' );            // 'http://google.com'\n *     tag.hasClass( 'external-link' );  // true\n *\n *\n * Using mutator methods (which may be used in combination with instantiation config properties):\n *\n *     var tag = new Autolinker.HtmlTag();\n *     tag.setTagName( 'a' );\n *     tag.setAttr( 'href', 'http://google.com' );\n *     tag.addClass( 'external-link' );\n *     tag.setInnerHtml( 'Google' );\n *\n *     tag.getTagName();                 // 'a'\n *     tag.getAttr( 'href' );            // 'http://google.com'\n *     tag.hasClass( 'external-link' );  // true\n *\n *     tag.toAnchorString();  // <a href=\"http://google.com\" class=\"external-link\">Google</a>\n *\n *\n * ## Example use within a {@link Autolinker#replaceFn replaceFn}\n *\n *     var html = Autolinker.link( \"Test google.com\", {\n *         replaceFn : function( match ) {\n *             var tag = match.buildTag();  // returns an {@link Autolinker.HtmlTag} instance, configured with the Match's href and anchor text\n *             tag.setAttr( 'rel', 'nofollow' );\n *\n *             return tag;\n *         }\n *     } );\n *\n *     // generated html:\n *     //   Test <a href=\"http://google.com\" target=\"_blank\" rel=\"nofollow\">google.com</a>\n *\n *\n * ## Example use with a new tag for the replacement\n *\n *     var html = Autolinker.link( \"Test google.com\", {\n *         replaceFn : function( match ) {\n *             var tag = new Autolinker.HtmlTag( {\n *                 tagName : 'button',\n *                 attrs   : { 'title': 'Load URL: ' + match.getAnchorHref() },\n *                 innerHtml : 'Load URL: ' + match.getAnchorText()\n *             } );\n *\n *             return tag;\n *         }\n *     } );\n *\n *     // generated html:\n *     //   Test <button title=\"Load URL: http://google.com\">Load URL: google.com</button>\n */\nvar HtmlTag = /** @class */ (function () {\n    /**\n     * @method constructor\n     * @param {Object} [cfg] The configuration properties for this class, in an Object (map)\n     */\n    function HtmlTag(cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        /**\n         * @cfg {String} tagName\n         *\n         * The tag name. Ex: 'a', 'button', etc.\n         *\n         * Not required at instantiation time, but should be set using {@link #setTagName} before {@link #toAnchorString}\n         * is executed.\n         */\n        this.tagName = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Object.<String, String>} attrs\n         *\n         * An key/value Object (map) of attributes to create the tag with. The keys are the attribute names, and the\n         * values are the attribute values.\n         */\n        this.attrs = {}; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String} innerHTML\n         *\n         * The inner HTML for the tag.\n         */\n        this.innerHTML = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @protected\n         * @property {RegExp} whitespaceRegex\n         *\n         * Regular expression used to match whitespace in a string of CSS classes.\n         */\n        this.whitespaceRegex = /\\s+/; // default value just to get the above doc comment in the ES5 output and documentation generator\n        this.tagName = cfg.tagName || '';\n        this.attrs = cfg.attrs || {};\n        this.innerHTML = cfg.innerHtml || cfg.innerHTML || ''; // accept either the camelCased form or the fully capitalized acronym as in the DOM\n    }\n    /**\n     * Sets the tag name that will be used to generate the tag with.\n     *\n     * @param {String} tagName\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setTagName = function (tagName) {\n        this.tagName = tagName;\n        return this;\n    };\n    /**\n     * Retrieves the tag name.\n     *\n     * @return {String}\n     */\n    HtmlTag.prototype.getTagName = function () {\n        return this.tagName || '';\n    };\n    /**\n     * Sets an attribute on the HtmlTag.\n     *\n     * @param {String} attrName The attribute name to set.\n     * @param {String} attrValue The attribute value to set.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setAttr = function (attrName, attrValue) {\n        var tagAttrs = this.getAttrs();\n        tagAttrs[attrName] = attrValue;\n        return this;\n    };\n    /**\n     * Retrieves an attribute from the HtmlTag. If the attribute does not exist, returns `undefined`.\n     *\n     * @param {String} attrName The attribute name to retrieve.\n     * @return {String} The attribute's value, or `undefined` if it does not exist on the HtmlTag.\n     */\n    HtmlTag.prototype.getAttr = function (attrName) {\n        return this.getAttrs()[attrName];\n    };\n    /**\n     * Sets one or more attributes on the HtmlTag.\n     *\n     * @param {Object.<String, String>} attrs A key/value Object (map) of the attributes to set.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setAttrs = function (attrs) {\n        Object.assign(this.getAttrs(), attrs);\n        return this;\n    };\n    /**\n     * Retrieves the attributes Object (map) for the HtmlTag.\n     *\n     * @return {Object.<String, String>} A key/value object of the attributes for the HtmlTag.\n     */\n    HtmlTag.prototype.getAttrs = function () {\n        return this.attrs || (this.attrs = {});\n    };\n    /**\n     * Sets the provided `cssClass`, overwriting any current CSS classes on the HtmlTag.\n     *\n     * @param {String} cssClass One or more space-separated CSS classes to set (overwrite).\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setClass = function (cssClass) {\n        return this.setAttr('class', cssClass);\n    };\n    /**\n     * Convenience method to add one or more CSS classes to the HtmlTag. Will not add duplicate CSS classes.\n     *\n     * @param {String} cssClass One or more space-separated CSS classes to add.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.addClass = function (cssClass) {\n        var classAttr = this.getClass(), whitespaceRegex = this.whitespaceRegex, classes = !classAttr ? [] : classAttr.split(whitespaceRegex), newClasses = cssClass.split(whitespaceRegex), newClass;\n        while ((newClass = newClasses.shift())) {\n            if (indexOf(classes, newClass) === -1) {\n                classes.push(newClass);\n            }\n        }\n        this.getAttrs()['class'] = classes.join(' ');\n        return this;\n    };\n    /**\n     * Convenience method to remove one or more CSS classes from the HtmlTag.\n     *\n     * @param {String} cssClass One or more space-separated CSS classes to remove.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.removeClass = function (cssClass) {\n        var classAttr = this.getClass(), whitespaceRegex = this.whitespaceRegex, classes = !classAttr ? [] : classAttr.split(whitespaceRegex), removeClasses = cssClass.split(whitespaceRegex), removeClass;\n        while (classes.length && (removeClass = removeClasses.shift())) {\n            var idx = indexOf(classes, removeClass);\n            if (idx !== -1) {\n                classes.splice(idx, 1);\n            }\n        }\n        this.getAttrs()['class'] = classes.join(' ');\n        return this;\n    };\n    /**\n     * Convenience method to retrieve the CSS class(es) for the HtmlTag, which will each be separated by spaces when\n     * there are multiple.\n     *\n     * @return {String}\n     */\n    HtmlTag.prototype.getClass = function () {\n        return this.getAttrs()['class'] || '';\n    };\n    /**\n     * Convenience method to check if the tag has a CSS class or not.\n     *\n     * @param {String} cssClass The CSS class to check for.\n     * @return {Boolean} `true` if the HtmlTag has the CSS class, `false` otherwise.\n     */\n    HtmlTag.prototype.hasClass = function (cssClass) {\n        return (' ' + this.getClass() + ' ').indexOf(' ' + cssClass + ' ') !== -1;\n    };\n    /**\n     * Sets the inner HTML for the tag.\n     *\n     * @param {String} html The inner HTML to set.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setInnerHTML = function (html) {\n        this.innerHTML = html;\n        return this;\n    };\n    /**\n     * Backwards compatibility method name.\n     *\n     * @param {String} html The inner HTML to set.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setInnerHtml = function (html) {\n        return this.setInnerHTML(html);\n    };\n    /**\n     * Retrieves the inner HTML for the tag.\n     *\n     * @return {String}\n     */\n    HtmlTag.prototype.getInnerHTML = function () {\n        return this.innerHTML || '';\n    };\n    /**\n     * Backward compatibility method name.\n     *\n     * @return {String}\n     */\n    HtmlTag.prototype.getInnerHtml = function () {\n        return this.getInnerHTML();\n    };\n    /**\n     * Override of superclass method used to generate the HTML string for the tag.\n     *\n     * @return {String}\n     */\n    HtmlTag.prototype.toAnchorString = function () {\n        var tagName = this.getTagName(), attrsStr = this.buildAttrsStr();\n        attrsStr = attrsStr ? ' ' + attrsStr : ''; // prepend a space if there are actually attributes\n        return ['<', tagName, attrsStr, '>', this.getInnerHtml(), '</', tagName, '>'].join('');\n    };\n    /**\n     * Support method for {@link #toAnchorString}, returns the string space-separated key=\"value\" pairs, used to populate\n     * the stringified HtmlTag.\n     *\n     * @protected\n     * @return {String} Example return: `attr1=\"value1\" attr2=\"value2\"`\n     */\n    HtmlTag.prototype.buildAttrsStr = function () {\n        if (!this.attrs)\n            return ''; // no `attrs` Object (map) has been set, return empty string\n        var attrs = this.getAttrs(), attrsArr = [];\n        for (var prop in attrs) {\n            if (attrs.hasOwnProperty(prop)) {\n                attrsArr.push(prop + '=\"' + attrs[prop] + '\"');\n            }\n        }\n        return attrsArr.join(' ');\n    };\n    return HtmlTag;\n}());\nexport { HtmlTag };\n//# sourceMappingURL=html-tag.js.map","/**\n * Date: 2015-10-05\n * Author: Kasper Søfren <soefritz@gmail.com> (https://github.com/kafoso)\n *\n * A truncation feature, where the ellipsis will be placed at a section within\n * the URL making it still somewhat human readable.\n *\n * @param {String} url\t\t\t\t\t\t A URL.\n * @param {Number} truncateLen\t\t The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars\t The characters to place within the url, e.g. \"...\".\n * @return {String} The truncated URL.\n */\nexport function truncateSmart(url, truncateLen, ellipsisChars) {\n    var ellipsisLengthBeforeParsing;\n    var ellipsisLength;\n    if (ellipsisChars == null) {\n        ellipsisChars = '&hellip;';\n        ellipsisLength = 3;\n        ellipsisLengthBeforeParsing = 8;\n    }\n    else {\n        ellipsisLength = ellipsisChars.length;\n        ellipsisLengthBeforeParsing = ellipsisChars.length;\n    }\n    var parse_url = function (url) {\n        // Functionality inspired by PHP function of same name\n        var urlObj = {};\n        var urlSub = url;\n        var match = urlSub.match(/^([a-z]+):\\/\\//i);\n        if (match) {\n            urlObj.scheme = match[1];\n            urlSub = urlSub.substr(match[0].length);\n        }\n        match = urlSub.match(/^(.*?)(?=(\\?|#|\\/|$))/i);\n        if (match) {\n            urlObj.host = match[1];\n            urlSub = urlSub.substr(match[0].length);\n        }\n        match = urlSub.match(/^\\/(.*?)(?=(\\?|#|$))/i);\n        if (match) {\n            urlObj.path = match[1];\n            urlSub = urlSub.substr(match[0].length);\n        }\n        match = urlSub.match(/^\\?(.*?)(?=(#|$))/i);\n        if (match) {\n            urlObj.query = match[1];\n            urlSub = urlSub.substr(match[0].length);\n        }\n        match = urlSub.match(/^#(.*?)$/i);\n        if (match) {\n            urlObj.fragment = match[1];\n            //urlSub = urlSub.substr(match[0].length);  -- not used. Uncomment if adding another block.\n        }\n        return urlObj;\n    };\n    var buildUrl = function (urlObj) {\n        var url = '';\n        if (urlObj.scheme && urlObj.host) {\n            url += urlObj.scheme + '://';\n        }\n        if (urlObj.host) {\n            url += urlObj.host;\n        }\n        if (urlObj.path) {\n            url += '/' + urlObj.path;\n        }\n        if (urlObj.query) {\n            url += '?' + urlObj.query;\n        }\n        if (urlObj.fragment) {\n            url += '#' + urlObj.fragment;\n        }\n        return url;\n    };\n    var buildSegment = function (segment, remainingAvailableLength) {\n        var remainingAvailableLengthHalf = remainingAvailableLength / 2, startOffset = Math.ceil(remainingAvailableLengthHalf), endOffset = -1 * Math.floor(remainingAvailableLengthHalf), end = '';\n        if (endOffset < 0) {\n            end = segment.substr(endOffset);\n        }\n        return segment.substr(0, startOffset) + ellipsisChars + end;\n    };\n    if (url.length <= truncateLen) {\n        return url;\n    }\n    var availableLength = truncateLen - ellipsisLength;\n    var urlObj = parse_url(url);\n    // Clean up the URL\n    if (urlObj.query) {\n        var matchQuery = urlObj.query.match(/^(.*?)(?=(\\?|\\#))(.*?)$/i);\n        if (matchQuery) {\n            // Malformed URL; two or more \"?\". Removed any content behind the 2nd.\n            urlObj.query = urlObj.query.substr(0, matchQuery[1].length);\n            url = buildUrl(urlObj);\n        }\n    }\n    if (url.length <= truncateLen) {\n        return url;\n    }\n    if (urlObj.host) {\n        urlObj.host = urlObj.host.replace(/^www\\./, '');\n        url = buildUrl(urlObj);\n    }\n    if (url.length <= truncateLen) {\n        return url;\n    }\n    // Process and build the URL\n    var str = '';\n    if (urlObj.host) {\n        str += urlObj.host;\n    }\n    if (str.length >= availableLength) {\n        if (urlObj.host.length == truncateLen) {\n            return (urlObj.host.substr(0, truncateLen - ellipsisLength) + ellipsisChars).substr(0, availableLength + ellipsisLengthBeforeParsing);\n        }\n        return buildSegment(str, availableLength).substr(0, availableLength + ellipsisLengthBeforeParsing);\n    }\n    var pathAndQuery = '';\n    if (urlObj.path) {\n        pathAndQuery += '/' + urlObj.path;\n    }\n    if (urlObj.query) {\n        pathAndQuery += '?' + urlObj.query;\n    }\n    if (pathAndQuery) {\n        if ((str + pathAndQuery).length >= availableLength) {\n            if ((str + pathAndQuery).length == truncateLen) {\n                return (str + pathAndQuery).substr(0, truncateLen);\n            }\n            var remainingAvailableLength = availableLength - str.length;\n            return (str + buildSegment(pathAndQuery, remainingAvailableLength)).substr(0, availableLength + ellipsisLengthBeforeParsing);\n        }\n        else {\n            str += pathAndQuery;\n        }\n    }\n    if (urlObj.fragment) {\n        var fragment = '#' + urlObj.fragment;\n        if ((str + fragment).length >= availableLength) {\n            if ((str + fragment).length == truncateLen) {\n                return (str + fragment).substr(0, truncateLen);\n            }\n            var remainingAvailableLength2 = availableLength - str.length;\n            return (str + buildSegment(fragment, remainingAvailableLength2)).substr(0, availableLength + ellipsisLengthBeforeParsing);\n        }\n        else {\n            str += fragment;\n        }\n    }\n    if (urlObj.scheme && urlObj.host) {\n        var scheme = urlObj.scheme + '://';\n        if ((str + scheme).length < availableLength) {\n            return (scheme + str).substr(0, truncateLen);\n        }\n    }\n    if (str.length <= truncateLen) {\n        return str;\n    }\n    var end = '';\n    if (availableLength > 0) {\n        end = str.substr(-1 * Math.floor(availableLength / 2));\n    }\n    return (str.substr(0, Math.ceil(availableLength / 2)) + ellipsisChars + end).substr(0, availableLength + ellipsisLengthBeforeParsing);\n}\n//# sourceMappingURL=truncate-smart.js.map","/**\n * Date: 2015-10-05\n * Author: Kasper Søfren <soefritz@gmail.com> (https://github.com/kafoso)\n *\n * A truncation feature, where the ellipsis will be placed in the dead-center of the URL.\n *\n * @param {String} url             A URL.\n * @param {Number} truncateLen     The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars   The characters to place within the url, e.g. \"..\".\n * @return {String} The truncated URL.\n */\nexport function truncateMiddle(url, truncateLen, ellipsisChars) {\n    if (url.length <= truncateLen) {\n        return url;\n    }\n    var ellipsisLengthBeforeParsing;\n    var ellipsisLength;\n    if (ellipsisChars == null) {\n        ellipsisChars = '&hellip;';\n        ellipsisLengthBeforeParsing = 8;\n        ellipsisLength = 3;\n    }\n    else {\n        ellipsisLengthBeforeParsing = ellipsisChars.length;\n        ellipsisLength = ellipsisChars.length;\n    }\n    var availableLength = truncateLen - ellipsisLength;\n    var end = '';\n    if (availableLength > 0) {\n        end = url.substr(-1 * Math.floor(availableLength / 2));\n    }\n    return (url.substr(0, Math.ceil(availableLength / 2)) + ellipsisChars + end).substr(0, availableLength + ellipsisLengthBeforeParsing);\n}\n//# sourceMappingURL=truncate-middle.js.map","import { ellipsis } from '../utils';\n/**\n * A truncation feature where the ellipsis will be placed at the end of the URL.\n *\n * @param {String} anchorText\n * @param {Number} truncateLen The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars The characters to place within the url, e.g. \"..\".\n * @return {String} The truncated URL.\n */\nexport function truncateEnd(anchorText, truncateLen, ellipsisChars) {\n    return ellipsis(anchorText, truncateLen, ellipsisChars);\n}\n//# sourceMappingURL=truncate-end.js.map","import { HtmlTag } from './html-tag';\nimport { truncateSmart } from './truncate/truncate-smart';\nimport { truncateMiddle } from './truncate/truncate-middle';\nimport { truncateEnd } from './truncate/truncate-end';\n/**\n * @protected\n * @class Autolinker.AnchorTagBuilder\n * @extends Object\n *\n * Builds anchor (&lt;a&gt;) tags for the Autolinker utility when a match is\n * found.\n *\n * Normally this class is instantiated, configured, and used internally by an\n * {@link Autolinker} instance, but may actually be used indirectly in a\n * {@link Autolinker#replaceFn replaceFn} to create {@link Autolinker.HtmlTag HtmlTag}\n * instances which may be modified before returning from the\n * {@link Autolinker#replaceFn replaceFn}. For example:\n *\n *     var html = Autolinker.link( \"Test google.com\", {\n *         replaceFn : function( match ) {\n *             var tag = match.buildTag();  // returns an {@link Autolinker.HtmlTag} instance\n *             tag.setAttr( 'rel', 'nofollow' );\n *\n *             return tag;\n *         }\n *     } );\n *\n *     // generated html:\n *     //   Test <a href=\"http://google.com\" target=\"_blank\" rel=\"nofollow\">google.com</a>\n */\nvar AnchorTagBuilder = /** @class */ (function () {\n    /**\n     * @method constructor\n     * @param {Object} [cfg] The configuration options for the AnchorTagBuilder instance, specified in an Object (map).\n     */\n    function AnchorTagBuilder(cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        /**\n         * @cfg {Boolean} newWindow\n         * @inheritdoc Autolinker#newWindow\n         */\n        this.newWindow = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Object} truncate\n         * @inheritdoc Autolinker#truncate\n         */\n        this.truncate = {}; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String} className\n         * @inheritdoc Autolinker#className\n         */\n        this.className = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        this.newWindow = cfg.newWindow || false;\n        this.truncate = cfg.truncate || {};\n        this.className = cfg.className || '';\n    }\n    /**\n     * Generates the actual anchor (&lt;a&gt;) tag to use in place of the\n     * matched text, via its `match` object.\n     *\n     * @param {Autolinker.match.Match} match The Match instance to generate an\n     *   anchor tag from.\n     * @return {Autolinker.HtmlTag} The HtmlTag instance for the anchor tag.\n     */\n    AnchorTagBuilder.prototype.build = function (match) {\n        return new HtmlTag({\n            tagName: 'a',\n            attrs: this.createAttrs(match),\n            innerHtml: this.processAnchorText(match.getAnchorText()),\n        });\n    };\n    /**\n     * Creates the Object (map) of the HTML attributes for the anchor (&lt;a&gt;)\n     *   tag being generated.\n     *\n     * @protected\n     * @param {Autolinker.match.Match} match The Match instance to generate an\n     *   anchor tag from.\n     * @return {Object} A key/value Object (map) of the anchor tag's attributes.\n     */\n    AnchorTagBuilder.prototype.createAttrs = function (match) {\n        var attrs = {\n            href: match.getAnchorHref(), // we'll always have the `href` attribute\n        };\n        var cssClass = this.createCssClass(match);\n        if (cssClass) {\n            attrs['class'] = cssClass;\n        }\n        if (this.newWindow) {\n            attrs['target'] = '_blank';\n            attrs['rel'] = 'noopener noreferrer'; // Issue #149. See https://mathiasbynens.github.io/rel-noopener/\n        }\n        if (this.truncate) {\n            if (this.truncate.length && this.truncate.length < match.getAnchorText().length) {\n                attrs['title'] = match.getAnchorHref();\n            }\n        }\n        return attrs;\n    };\n    /**\n     * Creates the CSS class that will be used for a given anchor tag, based on\n     * the `matchType` and the {@link #className} config.\n     *\n     * Example returns:\n     *\n     * - \"\"                                      // no {@link #className}\n     * - \"myLink myLink-url\"                     // url match\n     * - \"myLink myLink-email\"                   // email match\n     * - \"myLink myLink-phone\"                   // phone match\n     * - \"myLink myLink-hashtag\"                 // hashtag match\n     * - \"myLink myLink-mention myLink-twitter\"  // mention match with Twitter service\n     *\n     * @protected\n     * @param {Autolinker.match.Match} match The Match instance to generate an\n     *   anchor tag from.\n     * @return {String} The CSS class string for the link. Example return:\n     *   \"myLink myLink-url\". If no {@link #className} was configured, returns\n     *   an empty string.\n     */\n    AnchorTagBuilder.prototype.createCssClass = function (match) {\n        var className = this.className;\n        if (!className) {\n            return '';\n        }\n        else {\n            var returnClasses = [className], cssClassSuffixes = match.getCssClassSuffixes();\n            for (var i = 0, len = cssClassSuffixes.length; i < len; i++) {\n                returnClasses.push(className + '-' + cssClassSuffixes[i]);\n            }\n            return returnClasses.join(' ');\n        }\n    };\n    /**\n     * Processes the `anchorText` by truncating the text according to the\n     * {@link #truncate} config.\n     *\n     * @private\n     * @param {String} anchorText The anchor tag's text (i.e. what will be\n     *   displayed).\n     * @return {String} The processed `anchorText`.\n     */\n    AnchorTagBuilder.prototype.processAnchorText = function (anchorText) {\n        anchorText = this.doTruncate(anchorText);\n        return anchorText;\n    };\n    /**\n     * Performs the truncation of the `anchorText` based on the {@link #truncate}\n     * option. If the `anchorText` is longer than the length specified by the\n     * {@link #truncate} option, the truncation is performed based on the\n     * `location` property. See {@link #truncate} for details.\n     *\n     * @private\n     * @param {String} anchorText The anchor tag's text (i.e. what will be\n     *   displayed).\n     * @return {String} The truncated anchor text.\n     */\n    AnchorTagBuilder.prototype.doTruncate = function (anchorText) {\n        var truncate = this.truncate;\n        if (!truncate || !truncate.length)\n            return anchorText;\n        var truncateLength = truncate.length, truncateLocation = truncate.location;\n        if (truncateLocation === 'smart') {\n            return truncateSmart(anchorText, truncateLength);\n        }\n        else if (truncateLocation === 'middle') {\n            return truncateMiddle(anchorText, truncateLength);\n        }\n        else {\n            return truncateEnd(anchorText, truncateLength);\n        }\n    };\n    return AnchorTagBuilder;\n}());\nexport { AnchorTagBuilder };\n//# sourceMappingURL=anchor-tag-builder.js.map","/**\n * @abstract\n * @class Autolinker.match.Match\n *\n * Represents a match found in an input string which should be Autolinked. A Match object is what is provided in a\n * {@link Autolinker#replaceFn replaceFn}, and may be used to query for details about the match.\n *\n * For example:\n *\n *     var input = \"...\";  // string with URLs, Email Addresses, and Mentions (Twitter, Instagram, Soundcloud)\n *\n *     var linkedText = Autolinker.link( input, {\n *         replaceFn : function( match ) {\n *             console.log( \"href = \", match.getAnchorHref() );\n *             console.log( \"text = \", match.getAnchorText() );\n *\n *             switch( match.getType() ) {\n *                 case 'url' :\n *                     console.log( \"url: \", match.getUrl() );\n *\n *                 case 'email' :\n *                     console.log( \"email: \", match.getEmail() );\n *\n *                 case 'mention' :\n *                     console.log( \"mention: \", match.getMention() );\n *             }\n *         }\n *     } );\n *\n * See the {@link Autolinker} class for more details on using the {@link Autolinker#replaceFn replaceFn}.\n */\nvar Match = /** @class */ (function () {\n    /**\n     * @member Autolinker.match.Match\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function Match(cfg) {\n        /**\n         * @cfg {Autolinker.AnchorTagBuilder} tagBuilder (required)\n         *\n         * Reference to the AnchorTagBuilder instance to use to generate an anchor\n         * tag for the Match.\n         */\n        // @ts-ignore\n        this.__jsduckDummyDocProp = null; // property used just to get the above doc comment into the ES5 output and documentation generator\n        /**\n         * @cfg {String} matchedText (required)\n         *\n         * The original text that was matched by the {@link Autolinker.matcher.Matcher}.\n         */\n        this.matchedText = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Number} offset (required)\n         *\n         * The offset of where the match was made in the input string.\n         */\n        this.offset = 0; // default value just to get the above doc comment in the ES5 output and documentation generator\n        this.tagBuilder = cfg.tagBuilder;\n        this.matchedText = cfg.matchedText;\n        this.offset = cfg.offset;\n    }\n    /**\n     * Returns the original text that was matched.\n     *\n     * @return {String}\n     */\n    Match.prototype.getMatchedText = function () {\n        return this.matchedText;\n    };\n    /**\n     * Sets the {@link #offset} of where the match was made in the input string.\n     *\n     * A {@link Autolinker.matcher.Matcher} will be fed only HTML text nodes,\n     * and will therefore set an original offset that is relative to the HTML\n     * text node itself. However, we want this offset to be relative to the full\n     * HTML input string, and thus if using {@link Autolinker#parse} (rather\n     * than calling a {@link Autolinker.matcher.Matcher} directly), then this\n     * offset is corrected after the Matcher itself has done its job.\n     *\n     * @param {Number} offset\n     */\n    Match.prototype.setOffset = function (offset) {\n        this.offset = offset;\n    };\n    /**\n     * Returns the offset of where the match was made in the input string. This\n     * is the 0-based index of the match.\n     *\n     * @return {Number}\n     */\n    Match.prototype.getOffset = function () {\n        return this.offset;\n    };\n    /**\n     * Returns the CSS class suffix(es) for this match.\n     *\n     * A CSS class suffix is appended to the {@link Autolinker#className} in\n     * the {@link Autolinker.AnchorTagBuilder} when a match is translated into\n     * an anchor tag.\n     *\n     * For example, if {@link Autolinker#className} was configured as 'myLink',\n     * and this method returns `[ 'url' ]`, the final class name of the element\n     * will become: 'myLink myLink-url'.\n     *\n     * The match may provide multiple CSS class suffixes to be appended to the\n     * {@link Autolinker#className} in order to facilitate better styling\n     * options for different match criteria. See {@link Autolinker.match.Mention}\n     * for an example.\n     *\n     * By default, this method returns a single array with the match's\n     * {@link #getType type} name, but may be overridden by subclasses.\n     *\n     * @return {String[]}\n     */\n    Match.prototype.getCssClassSuffixes = function () {\n        return [this.getType()];\n    };\n    /**\n     * Builds and returns an {@link Autolinker.HtmlTag} instance based on the\n     * Match.\n     *\n     * This can be used to easily generate anchor tags from matches, and either\n     * return their HTML string, or modify them before doing so.\n     *\n     * Example Usage:\n     *\n     *     var tag = match.buildTag();\n     *     tag.addClass( 'cordova-link' );\n     *     tag.setAttr( 'target', '_system' );\n     *\n     *     tag.toAnchorString();  // <a href=\"http://google.com\" class=\"cordova-link\" target=\"_system\">Google</a>\n     *\n     * Example Usage in {@link Autolinker#replaceFn}:\n     *\n     *     var html = Autolinker.link( \"Test google.com\", {\n     *         replaceFn : function( match ) {\n     *             var tag = match.buildTag();  // returns an {@link Autolinker.HtmlTag} instance\n     *             tag.setAttr( 'rel', 'nofollow' );\n     *\n     *             return tag;\n     *         }\n     *     } );\n     *\n     *     // generated html:\n     *     //   Test <a href=\"http://google.com\" target=\"_blank\" rel=\"nofollow\">google.com</a>\n     */\n    Match.prototype.buildTag = function () {\n        return this.tagBuilder.build(this);\n    };\n    return Match;\n}());\nexport { Match };\n//# sourceMappingURL=match.js.map","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","import { __extends } from \"tslib\";\nimport { Match } from './match';\n/**\n * @class Autolinker.match.Email\n * @extends Autolinker.match.Match\n *\n * Represents a Email match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\nvar EmailMatch = /** @class */ (function (_super) {\n    __extends(EmailMatch, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function EmailMatch(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @cfg {String} email (required)\n         *\n         * The email address that was matched.\n         */\n        _this.email = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        _this.email = cfg.email;\n        return _this;\n    }\n    /**\n     * Returns a string name for the type of match that this class represents.\n     * For the case of EmailMatch, returns 'email'.\n     *\n     * @return {String}\n     */\n    EmailMatch.prototype.getType = function () {\n        return 'email';\n    };\n    /**\n     * Returns the email address that was matched.\n     *\n     * @return {String}\n     */\n    EmailMatch.prototype.getEmail = function () {\n        return this.email;\n    };\n    /**\n     * Returns the anchor href that should be generated for the match.\n     *\n     * @return {String}\n     */\n    EmailMatch.prototype.getAnchorHref = function () {\n        return 'mailto:' + this.email;\n    };\n    /**\n     * Returns the anchor text that should be generated for the match.\n     *\n     * @return {String}\n     */\n    EmailMatch.prototype.getAnchorText = function () {\n        return this.email;\n    };\n    return EmailMatch;\n}(Match));\nexport { EmailMatch };\n//# sourceMappingURL=email-match.js.map","import { __extends } from \"tslib\";\nimport { Match } from './match';\n/**\n * @class Autolinker.match.Hashtag\n * @extends Autolinker.match.Match\n *\n * Represents a Hashtag match found in an input string which should be\n * Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more\n * details.\n */\nvar HashtagMatch = /** @class */ (function (_super) {\n    __extends(HashtagMatch, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function HashtagMatch(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @cfg {String} serviceName\n         *\n         * The service to point hashtag matches to. See {@link Autolinker#hashtag}\n         * for available values.\n         */\n        _this.serviceName = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String} hashtag (required)\n         *\n         * The HashtagMatch that was matched, without the '#'.\n         */\n        _this.hashtag = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        _this.serviceName = cfg.serviceName;\n        _this.hashtag = cfg.hashtag;\n        return _this;\n    }\n    /**\n     * Returns a string name for the type of match that this class represents.\n     * For the case of HashtagMatch, returns 'hashtag'.\n     *\n     * @return {String}\n     */\n    HashtagMatch.prototype.getType = function () {\n        return 'hashtag';\n    };\n    /**\n     * Returns the configured {@link #serviceName} to point the HashtagMatch to.\n     * Ex: 'facebook', 'twitter'.\n     *\n     * @return {String}\n     */\n    HashtagMatch.prototype.getServiceName = function () {\n        return this.serviceName;\n    };\n    /**\n     * Returns the matched hashtag, without the '#' character.\n     *\n     * @return {String}\n     */\n    HashtagMatch.prototype.getHashtag = function () {\n        return this.hashtag;\n    };\n    /**\n     * Returns the anchor href that should be generated for the match.\n     *\n     * @return {String}\n     */\n    HashtagMatch.prototype.getAnchorHref = function () {\n        var serviceName = this.serviceName, hashtag = this.hashtag;\n        switch (serviceName) {\n            case 'twitter':\n                return 'https://twitter.com/hashtag/' + hashtag;\n            case 'facebook':\n                return 'https://www.facebook.com/hashtag/' + hashtag;\n            case 'instagram':\n                return 'https://instagram.com/explore/tags/' + hashtag;\n            case 'tiktok':\n                return 'https://www.tiktok.com/tag/' + hashtag;\n            default:\n                // Shouldn't happen because Autolinker's constructor should block any invalid values, but just in case.\n                throw new Error('Unknown service name to point hashtag to: ' + serviceName);\n        }\n    };\n    /**\n     * Returns the anchor text that should be generated for the match.\n     *\n     * @return {String}\n     */\n    HashtagMatch.prototype.getAnchorText = function () {\n        return '#' + this.hashtag;\n    };\n    return HashtagMatch;\n}(Match));\nexport { HashtagMatch };\n//# sourceMappingURL=hashtag-match.js.map","import { __extends } from \"tslib\";\nimport { Match } from './match';\n/**\n * @class Autolinker.match.Mention\n * @extends Autolinker.match.Match\n *\n * Represents a Mention match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\nvar MentionMatch = /** @class */ (function (_super) {\n    __extends(MentionMatch, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function MentionMatch(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @cfg {String} serviceName\n         *\n         * The service to point mention matches to. See {@link Autolinker#mention}\n         * for available values.\n         */\n        _this.serviceName = 'twitter'; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String} mention (required)\n         *\n         * The Mention that was matched, without the '@' character.\n         */\n        _this.mention = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        _this.mention = cfg.mention;\n        _this.serviceName = cfg.serviceName;\n        return _this;\n    }\n    /**\n     * Returns a string name for the type of match that this class represents.\n     * For the case of MentionMatch, returns 'mention'.\n     *\n     * @return {String}\n     */\n    MentionMatch.prototype.getType = function () {\n        return 'mention';\n    };\n    /**\n     * Returns the mention, without the '@' character.\n     *\n     * @return {String}\n     */\n    MentionMatch.prototype.getMention = function () {\n        return this.mention;\n    };\n    /**\n     * Returns the configured {@link #serviceName} to point the mention to.\n     * Ex: 'instagram', 'twitter', 'soundcloud'.\n     *\n     * @return {String}\n     */\n    MentionMatch.prototype.getServiceName = function () {\n        return this.serviceName;\n    };\n    /**\n     * Returns the anchor href that should be generated for the match.\n     *\n     * @return {String}\n     */\n    MentionMatch.prototype.getAnchorHref = function () {\n        switch (this.serviceName) {\n            case 'twitter':\n                return 'https://twitter.com/' + this.mention;\n            case 'instagram':\n                return 'https://instagram.com/' + this.mention;\n            case 'soundcloud':\n                return 'https://soundcloud.com/' + this.mention;\n            case 'tiktok':\n                return 'https://www.tiktok.com/@' + this.mention;\n            default:\n                // Shouldn't happen because Autolinker's constructor should block any invalid values, but just in case.\n                throw new Error('Unknown service name to point mention to: ' + this.serviceName);\n        }\n    };\n    /**\n     * Returns the anchor text that should be generated for the match.\n     *\n     * @return {String}\n     */\n    MentionMatch.prototype.getAnchorText = function () {\n        return '@' + this.mention;\n    };\n    /**\n     * Returns the CSS class suffixes that should be used on a tag built with\n     * the match. See {@link Autolinker.match.Match#getCssClassSuffixes} for\n     * details.\n     *\n     * @return {String[]}\n     */\n    MentionMatch.prototype.getCssClassSuffixes = function () {\n        var cssClassSuffixes = _super.prototype.getCssClassSuffixes.call(this), serviceName = this.getServiceName();\n        if (serviceName) {\n            cssClassSuffixes.push(serviceName);\n        }\n        return cssClassSuffixes;\n    };\n    return MentionMatch;\n}(Match));\nexport { MentionMatch };\n//# sourceMappingURL=mention-match.js.map","import { __extends } from \"tslib\";\nimport { Match } from './match';\n/**\n * @class Autolinker.match.Phone\n * @extends Autolinker.match.Match\n *\n * Represents a Phone number match found in an input string which should be\n * Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more\n * details.\n */\nvar PhoneMatch = /** @class */ (function (_super) {\n    __extends(PhoneMatch, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function PhoneMatch(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @protected\n         * @property {String} number (required)\n         *\n         * The phone number that was matched, without any delimiter characters.\n         *\n         * Note: This is a string to allow for prefixed 0's.\n         */\n        _this.number = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @protected\n         * @property  {Boolean} plusSign (required)\n         *\n         * `true` if the matched phone number started with a '+' sign. We'll include\n         * it in the `tel:` URL if so, as this is needed for international numbers.\n         *\n         * Ex: '+1 (123) 456 7879'\n         */\n        _this.plusSign = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        _this.number = cfg.number;\n        _this.plusSign = cfg.plusSign;\n        return _this;\n    }\n    /**\n     * Returns a string name for the type of match that this class represents.\n     * For the case of PhoneMatch, returns 'phone'.\n     *\n     * @return {String}\n     */\n    PhoneMatch.prototype.getType = function () {\n        return 'phone';\n    };\n    /**\n     * Returns the phone number that was matched as a string, without any\n     * delimiter characters.\n     *\n     * Note: This is a string to allow for prefixed 0's.\n     *\n     * @return {String}\n     */\n    PhoneMatch.prototype.getPhoneNumber = function () {\n        return this.number;\n    };\n    /**\n     * Alias of {@link #getPhoneNumber}, returns the phone number that was\n     * matched as a string, without any delimiter characters.\n     *\n     * Note: This is a string to allow for prefixed 0's.\n     *\n     * @return {String}\n     */\n    PhoneMatch.prototype.getNumber = function () {\n        return this.getPhoneNumber();\n    };\n    /**\n     * Returns the anchor href that should be generated for the match.\n     *\n     * @return {String}\n     */\n    PhoneMatch.prototype.getAnchorHref = function () {\n        return 'tel:' + (this.plusSign ? '+' : '') + this.number;\n    };\n    /**\n     * Returns the anchor text that should be generated for the match.\n     *\n     * @return {String}\n     */\n    PhoneMatch.prototype.getAnchorText = function () {\n        return this.matchedText;\n    };\n    return PhoneMatch;\n}(Match));\nexport { PhoneMatch };\n//# sourceMappingURL=phone-match.js.map","import { __extends } from \"tslib\";\nimport { Match } from './match';\n/**\n * @class Autolinker.match.Url\n * @extends Autolinker.match.Match\n *\n * Represents a Url match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\nvar UrlMatch = /** @class */ (function (_super) {\n    __extends(UrlMatch, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function UrlMatch(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @cfg {String} url (required)\n         *\n         * The url that was matched.\n         */\n        _this.url = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {\"scheme\"/\"www\"/\"tld\"} urlMatchType (required)\n         *\n         * The type of URL match that this class represents. This helps to determine\n         * if the match was made in the original text with a prefixed scheme (ex:\n         * 'http://www.google.com'), a prefixed 'www' (ex: 'www.google.com'), or\n         * was matched by a known top-level domain (ex: 'google.com').\n         */\n        _this.urlMatchType = 'scheme'; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} protocolUrlMatch (required)\n         *\n         * `true` if the URL is a match which already has a protocol (i.e.\n         * 'http://'), `false` if the match was from a 'www' or known TLD match.\n         */\n        _this.protocolUrlMatch = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} protocolRelativeMatch (required)\n         *\n         * `true` if the URL is a protocol-relative match. A protocol-relative match\n         * is a URL that starts with '//', and will be either http:// or https://\n         * based on the protocol that the site is loaded under.\n         */\n        _this.protocolRelativeMatch = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Object} stripPrefix (required)\n         *\n         * The Object form of {@link Autolinker#cfg-stripPrefix}.\n         */\n        _this.stripPrefix = {\n            scheme: true,\n            www: true,\n        }; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} stripTrailingSlash (required)\n         * @inheritdoc Autolinker#cfg-stripTrailingSlash\n         */\n        _this.stripTrailingSlash = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} decodePercentEncoding (required)\n         * @inheritdoc Autolinker#cfg-decodePercentEncoding\n         */\n        _this.decodePercentEncoding = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @private\n         * @property {RegExp} schemePrefixRegex\n         *\n         * A regular expression used to remove the 'http://' or 'https://' from\n         * URLs.\n         */\n        _this.schemePrefixRegex = /^(https?:\\/\\/)?/i;\n        /**\n         * @private\n         * @property {RegExp} wwwPrefixRegex\n         *\n         * A regular expression used to remove the 'www.' from URLs.\n         */\n        _this.wwwPrefixRegex = /^(https?:\\/\\/)?(www\\.)?/i;\n        /**\n         * @private\n         * @property {RegExp} protocolRelativeRegex\n         *\n         * The regular expression used to remove the protocol-relative '//' from the {@link #url} string, for purposes\n         * of {@link #getAnchorText}. A protocol-relative URL is, for example, \"//yahoo.com\"\n         */\n        _this.protocolRelativeRegex = /^\\/\\//;\n        /**\n         * @private\n         * @property {Boolean} protocolPrepended\n         *\n         * Will be set to `true` if the 'http://' protocol has been prepended to the {@link #url} (because the\n         * {@link #url} did not have a protocol)\n         */\n        _this.protocolPrepended = false;\n        _this.urlMatchType = cfg.urlMatchType;\n        _this.url = cfg.url;\n        _this.protocolUrlMatch = cfg.protocolUrlMatch;\n        _this.protocolRelativeMatch = cfg.protocolRelativeMatch;\n        _this.stripPrefix = cfg.stripPrefix;\n        _this.stripTrailingSlash = cfg.stripTrailingSlash;\n        _this.decodePercentEncoding = cfg.decodePercentEncoding;\n        return _this;\n    }\n    /**\n     * Returns a string name for the type of match that this class represents.\n     * For the case of UrlMatch, returns 'url'.\n     *\n     * @return {String}\n     */\n    UrlMatch.prototype.getType = function () {\n        return 'url';\n    };\n    /**\n     * Returns a string name for the type of URL match that this class\n     * represents.\n     *\n     * This helps to determine if the match was made in the original text with a\n     * prefixed scheme (ex: 'http://www.google.com'), a prefixed 'www' (ex:\n     * 'www.google.com'), or was matched by a known top-level domain (ex:\n     * 'google.com').\n     *\n     * @return {\"scheme\"/\"www\"/\"tld\"}\n     */\n    UrlMatch.prototype.getUrlMatchType = function () {\n        return this.urlMatchType;\n    };\n    /**\n     * Returns the url that was matched, assuming the protocol to be 'http://' if the original\n     * match was missing a protocol.\n     *\n     * @return {String}\n     */\n    UrlMatch.prototype.getUrl = function () {\n        var url = this.url;\n        // if the url string doesn't begin with a protocol, assume 'http://'\n        if (!this.protocolRelativeMatch && !this.protocolUrlMatch && !this.protocolPrepended) {\n            url = this.url = 'http://' + url;\n            this.protocolPrepended = true;\n        }\n        return url;\n    };\n    /**\n     * Returns the anchor href that should be generated for the match.\n     *\n     * @return {String}\n     */\n    UrlMatch.prototype.getAnchorHref = function () {\n        var url = this.getUrl();\n        return url.replace(/&amp;/g, '&'); // any &amp;'s in the URL should be converted back to '&' if they were displayed as &amp; in the source html\n    };\n    /**\n     * Returns the anchor text that should be generated for the match.\n     *\n     * @return {String}\n     */\n    UrlMatch.prototype.getAnchorText = function () {\n        var anchorText = this.getMatchedText();\n        if (this.protocolRelativeMatch) {\n            // Strip off any protocol-relative '//' from the anchor text\n            anchorText = this.stripProtocolRelativePrefix(anchorText);\n        }\n        if (this.stripPrefix.scheme) {\n            anchorText = this.stripSchemePrefix(anchorText);\n        }\n        if (this.stripPrefix.www) {\n            anchorText = this.stripWwwPrefix(anchorText);\n        }\n        if (this.stripTrailingSlash) {\n            anchorText = this.removeTrailingSlash(anchorText); // remove trailing slash, if there is one\n        }\n        if (this.decodePercentEncoding) {\n            anchorText = this.removePercentEncoding(anchorText);\n        }\n        return anchorText;\n    };\n    // ---------------------------------------\n    // Utility Functionality\n    /**\n     * Strips the scheme prefix (such as \"http://\" or \"https://\") from the given\n     * `url`.\n     *\n     * @private\n     * @param {String} url The text of the anchor that is being generated, for\n     *   which to strip off the url scheme.\n     * @return {String} The `url`, with the scheme stripped.\n     */\n    UrlMatch.prototype.stripSchemePrefix = function (url) {\n        return url.replace(this.schemePrefixRegex, '');\n    };\n    /**\n     * Strips the 'www' prefix from the given `url`.\n     *\n     * @private\n     * @param {String} url The text of the anchor that is being generated, for\n     *   which to strip off the 'www' if it exists.\n     * @return {String} The `url`, with the 'www' stripped.\n     */\n    UrlMatch.prototype.stripWwwPrefix = function (url) {\n        return url.replace(this.wwwPrefixRegex, '$1'); // leave any scheme ($1), it one exists\n    };\n    /**\n     * Strips any protocol-relative '//' from the anchor text.\n     *\n     * @private\n     * @param {String} text The text of the anchor that is being generated, for which to strip off the\n     *   protocol-relative prefix (such as stripping off \"//\")\n     * @return {String} The `anchorText`, with the protocol-relative prefix stripped.\n     */\n    UrlMatch.prototype.stripProtocolRelativePrefix = function (text) {\n        return text.replace(this.protocolRelativeRegex, '');\n    };\n    /**\n     * Removes any trailing slash from the given `anchorText`, in preparation for the text to be displayed.\n     *\n     * @private\n     * @param {String} anchorText The text of the anchor that is being generated, for which to remove any trailing\n     *   slash ('/') that may exist.\n     * @return {String} The `anchorText`, with the trailing slash removed.\n     */\n    UrlMatch.prototype.removeTrailingSlash = function (anchorText) {\n        if (anchorText.charAt(anchorText.length - 1) === '/') {\n            anchorText = anchorText.slice(0, -1);\n        }\n        return anchorText;\n    };\n    /**\n     * Decodes percent-encoded characters from the given `anchorText`, in\n     * preparation for the text to be displayed.\n     *\n     * @private\n     * @param {String} anchorText The text of the anchor that is being\n     *   generated, for which to decode any percent-encoded characters.\n     * @return {String} The `anchorText`, with the percent-encoded characters\n     *   decoded.\n     */\n    UrlMatch.prototype.removePercentEncoding = function (anchorText) {\n        // First, convert a few of the known % encodings to the corresponding\n        // HTML entities that could accidentally be interpretted as special\n        // HTML characters\n        var preProcessedEntityAnchorText = anchorText\n            .replace(/%22/gi, '&quot;') // \" char\n            .replace(/%26/gi, '&amp;') // & char\n            .replace(/%27/gi, '&#39;') // ' char\n            .replace(/%3C/gi, '&lt;') // < char\n            .replace(/%3E/gi, '&gt;'); // > char\n        try {\n            // Now attempt to decode the rest of the anchor text\n            return decodeURIComponent(preProcessedEntityAnchorText);\n        }\n        catch (e) {\n            // Invalid % escape sequence in the anchor text\n            return preProcessedEntityAnchorText;\n        }\n    };\n    return UrlMatch;\n}(Match));\nexport { UrlMatch };\n//# sourceMappingURL=url-match.js.map","/**\n * @abstract\n * @class Autolinker.matcher.Matcher\n *\n * An abstract class and interface for individual matchers to find matches in\n * an input string with linkified versions of them.\n *\n * Note that Matchers do not take HTML into account - they must be fed the text\n * nodes of any HTML string, which is handled by {@link Autolinker#parse}.\n */\nvar Matcher = /** @class */ (function () {\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Matcher\n     *   instance, specified in an Object (map).\n     */\n    function Matcher(cfg) {\n        /**\n         * @cfg {Autolinker.AnchorTagBuilder} tagBuilder (required)\n         *\n         * Reference to the AnchorTagBuilder instance to use to generate HTML tags\n         * for {@link Autolinker.match.Match Matches}.\n         */\n        // @ts-ignore\n        this.__jsduckDummyDocProp = null; // property used just to get the above doc comment into the ES5 output and documentation generator\n        this.tagBuilder = cfg.tagBuilder;\n    }\n    return Matcher;\n}());\nexport { Matcher };\n//# sourceMappingURL=matcher.js.map","/*\n * This file builds and stores a library of the common regular expressions used\n * by the Autolinker utility.\n *\n * Other regular expressions may exist ad-hoc, but these are generally the\n * regular expressions that are shared between source files.\n */\n/**\n * Regular expression to match upper and lowercase ASCII letters\n */\nexport var letterRe = /[A-Za-z]/;\n/**\n * Regular expression to match ASCII digits\n */\nexport var digitRe = /[\\d]/;\n/**\n * Regular expression to match everything *except* ASCII digits\n */\nexport var nonDigitRe = /[\\D]/;\n/**\n * Regular expression to match whitespace\n */\nexport var whitespaceRe = /\\s/;\n/**\n * Regular expression to match quote characters\n */\nexport var quoteRe = /['\"]/;\n/**\n * Regular expression to match the range of ASCII control characters (0-31), and\n * the backspace char (127)\n */\nexport var controlCharsRe = /[\\x00-\\x1F\\x7F]/;\n/**\n * The string form of a regular expression that would match all of the\n * alphabetic (\"letter\") chars in the unicode character set when placed in a\n * RegExp character class (`[]`). This includes all international alphabetic\n * characters.\n *\n * These would be the characters matched by unicode regex engines `\\p{L}`\n * escape (\"all letters\").\n *\n * Taken from the XRegExp library: http://xregexp.com/ (thanks @https://github.com/slevithan)\n * Specifically: http://xregexp.com/v/3.2.0/xregexp-all.js, the 'Letter'\n *   regex's bmp\n *\n * VERY IMPORTANT: This set of characters is defined inside of a Regular\n *   Expression literal rather than a string literal to prevent UglifyJS from\n *   compressing the unicode escape sequences into their actual unicode\n *   characters. If Uglify compresses these into the unicode characters\n *   themselves, this results in the error \"Range out of order in character\n *   class\" when these characters are used inside of a Regular Expression\n *   character class (`[]`). See usages of this const. Alternatively, we can set\n *   the UglifyJS option `ascii_only` to true for the build, but that doesn't\n *   help others who are pulling in Autolinker into their own build and running\n *   UglifyJS themselves.\n */\n// prettier-ignore\nexport var alphaCharsStr = /A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC/\n    .source; // see note in above variable description\n/**\n * The string form of a regular expression that would match all emoji characters\n * Based on the emoji regex defined in this article: https://thekevinscott.com/emojis-in-javascript/\n */\nexport var emojiStr = /\\u2700-\\u27bf\\udde6-\\uddff\\ud800-\\udbff\\udc00-\\udfff\\ufe0e\\ufe0f\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0\\ud83c\\udffb-\\udfff\\u200d\\u3299\\u3297\\u303d\\u3030\\u24c2\\ud83c\\udd70-\\udd71\\udd7e-\\udd7f\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01-\\ude02\\ude1a\\ude2f\\ude32-\\ude3a\\ude50-\\ude51\\u203c\\u2049\\u25aa-\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u00a9\\u00ae\\u2122\\u2139\\udc04\\u2600-\\u26FF\\u2b05\\u2b06\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u231a\\u231b\\u2328\\u23cf\\u23e9-\\u23f3\\u23f8-\\u23fa\\udccf\\u2935\\u2934\\u2190-\\u21ff/\n    .source;\n/**\n * The string form of a regular expression that would match all of the\n * combining mark characters in the unicode character set when placed in a\n * RegExp character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines `\\p{M}`\n * escape (\"all marks\").\n *\n * Taken from the XRegExp library: http://xregexp.com/ (thanks @https://github.com/slevithan)\n * Specifically: http://xregexp.com/v/3.2.0/xregexp-all.js, the 'Mark'\n *   regex's bmp\n *\n * VERY IMPORTANT: This set of characters is defined inside of a Regular\n *   Expression literal rather than a string literal to prevent UglifyJS from\n *   compressing the unicode escape sequences into their actual unicode\n *   characters. If Uglify compresses these into the unicode characters\n *   themselves, this results in the error \"Range out of order in character\n *   class\" when these characters are used inside of a Regular Expression\n *   character class (`[]`). See usages of this const. Alternatively, we can set\n *   the UglifyJS option `ascii_only` to true for the build, but that doesn't\n *   help others who are pulling in Autolinker into their own build and running\n *   UglifyJS themselves.\n */\n// prettier-ignore\nexport var marksStr = /\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D4-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F/\n    .source; // see note in above variable description\n/**\n * The string form of a regular expression that would match all of the\n * alphabetic (\"letter\") chars, emoji, and combining marks in the unicode character set\n * when placed in a RegExp character class (`[]`). This includes all\n * international alphabetic characters.\n *\n * These would be the characters matched by unicode regex engines `\\p{L}\\p{M}`\n * escapes and emoji characters.\n */\nexport var alphaCharsAndMarksStr = alphaCharsStr + emojiStr + marksStr;\n/**\n * The string form of a regular expression that would match all of the\n * decimal number chars in the unicode character set when placed in a RegExp\n * character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines `\\p{Nd}`\n * escape (\"all decimal numbers\")\n *\n * Taken from the XRegExp library: http://xregexp.com/ (thanks @https://github.com/slevithan)\n * Specifically: http://xregexp.com/v/3.2.0/xregexp-all.js, the 'Decimal_Number'\n *   regex's bmp\n *\n * VERY IMPORTANT: This set of characters is defined inside of a Regular\n *   Expression literal rather than a string literal to prevent UglifyJS from\n *   compressing the unicode escape sequences into their actual unicode\n *   characters. If Uglify compresses these into the unicode characters\n *   themselves, this results in the error \"Range out of order in character\n *   class\" when these characters are used inside of a Regular Expression\n *   character class (`[]`). See usages of this const. Alternatively, we can set\n *   the UglifyJS option `ascii_only` to true for the build, but that doesn't\n *   help others who are pulling in Autolinker into their own build and running\n *   UglifyJS themselves.\n */\n// prettier-ignore\nexport var decimalNumbersStr = /0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19/\n    .source; // see note in above variable description\n/**\n * The string form of a regular expression that would match all of the\n * letters and decimal number chars in the unicode character set when placed in\n * a RegExp character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines\n * `[\\p{L}\\p{Nd}]` escape (\"all letters and decimal numbers\")\n */\nexport var alphaNumericCharsStr = alphaCharsAndMarksStr + decimalNumbersStr;\n/**\n * The string form of a regular expression that would match all of the\n * letters, combining marks, and decimal number chars in the unicode character\n * set when placed in a RegExp character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines\n * `[\\p{L}\\p{M}\\p{Nd}]` escape (\"all letters, combining marks, and decimal\n * numbers\")\n */\nexport var alphaNumericAndMarksCharsStr = alphaCharsAndMarksStr + decimalNumbersStr;\n/**\n * The regular expression that will match a single letter of the\n * {@link #alphaNumericAndMarksCharsStr}.\n */\nexport var alphaNumericAndMarksCharRe = new RegExp(\"[\".concat(alphaNumericAndMarksCharsStr, \"]\"));\n// Simplified IP regular expression\nvar ipStr = '(?:[' + decimalNumbersStr + ']{1,3}\\\\.){3}[' + decimalNumbersStr + ']{1,3}';\n// Protected domain label which do not allow \"-\" or \"_\" character on the beginning and the end of a single label\n// prettier-ignore\nvar domainLabelStr = '[' + alphaNumericAndMarksCharsStr + '](?:[' + alphaNumericAndMarksCharsStr + '\\\\-_]{0,61}[' + alphaNumericAndMarksCharsStr + '])?';\nvar getDomainLabelStr = function (group) {\n    return '(?=(' + domainLabelStr + '))\\\\' + group;\n};\n/**\n * A function to match domain names of a URL or email address.\n * Ex: 'google', 'yahoo', 'some-other-company', etc.\n */\n// prettier-ignore\nexport var getDomainNameStr = function (group) {\n    return '(?:' + getDomainLabelStr(group) + '(?:\\\\.' + getDomainLabelStr(group + 1) + '){0,126}|' + ipStr + ')';\n};\n/**\n * A regular expression to match domain names of a URL or email address.\n * Ex: 'google', 'yahoo', 'some-other-company', etc.\n */\nexport var domainNameRegex = new RegExp('[' + alphaNumericAndMarksCharsStr + '.\\\\-]*[' + alphaNumericAndMarksCharsStr + '\\\\-]');\n/**\n * A regular expression that is simply the character class of the characters\n * that may be used in a domain name, minus the '-' or '.'\n */\nexport var domainNameCharRegex = alphaNumericAndMarksCharRe;\n//# sourceMappingURL=regex-lib.js.map","// NOTE: THIS IS A GENERATED FILE\n// To update with the latest TLD list, run `npm run update-tld-regex`\nexport var tldRegex = /(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|travelchannel|wolterskluwer|xn--cckwcxetd|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--4dbrk0ce|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--q7ce6a|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--qxa6a|xn--tckwe|xn--vhquv|yodobashi|موريتانيا|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|etisalat|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|البحرين|الجزائر|العليان|پاکستان|كاثوليك|இந்தியா|abarth|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|loans|locus|lotte|lotto|macys|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|ישראל|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kids|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|アマゾン|グーグル|クラウド|ポイント|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceo|cfa|cfd|com|cpa|crs|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ລາວ|ストア|セール|みんな|中文网|亚马逊|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|ευ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|广东|微博|慈善|手机|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/;\n//# sourceMappingURL=tld-regex.js.map","import { __assign, __extends } from \"tslib\";\nimport { Matcher } from './matcher';\nimport { alphaNumericAndMarksCharsStr, domainNameCharRegex } from '../regex-lib';\nimport { EmailMatch } from '../match/email-match';\nimport { throwUnhandledCaseError } from '../utils';\nimport { tldRegex } from './tld-regex';\n// For debugging: search for other \"For debugging\" lines\n// import CliTable from 'cli-table';\n// RegExp objects which are shared by all instances of EmailMatcher. These are\n// here to avoid re-instantiating the RegExp objects if `Autolinker.link()` is\n// called multiple times, thus instantiating EmailMatcher and its RegExp\n// objects each time (which is very expensive - see https://github.com/gregjacobs/Autolinker.js/issues/314).\n// See descriptions of the properties where they are used for details about them\nvar localPartCharRegex = new RegExp(\"[\".concat(alphaNumericAndMarksCharsStr, \"!#$%&'*+/=?^_`{|}~-]\"));\nvar strictTldRegex = new RegExp(\"^\".concat(tldRegex.source, \"$\"));\n/**\n * @class Autolinker.matcher.Email\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find email matches in an input string.\n *\n * See this class's superclass ({@link Autolinker.matcher.Matcher}) for more details.\n */\nvar EmailMatcher = /** @class */ (function (_super) {\n    __extends(EmailMatcher, _super);\n    function EmailMatcher() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /**\n         * Valid characters that can be used in the \"local\" part of an email address,\n         * i.e. the \"name\" part of \"name@site.com\"\n         */\n        _this.localPartCharRegex = localPartCharRegex;\n        /**\n         * Stricter TLD regex which adds a beginning and end check to ensure\n         * the string is a valid TLD\n         */\n        _this.strictTldRegex = strictTldRegex;\n        return _this;\n    }\n    /**\n     * @inheritdoc\n     */\n    EmailMatcher.prototype.parseMatches = function (text) {\n        var tagBuilder = this.tagBuilder, localPartCharRegex = this.localPartCharRegex, strictTldRegex = this.strictTldRegex, matches = [], len = text.length, noCurrentEmailMatch = new CurrentEmailMatch();\n        // for matching a 'mailto:' prefix\n        var mailtoTransitions = {\n            m: 'a',\n            a: 'i',\n            i: 'l',\n            l: 't',\n            t: 'o',\n            o: ':',\n        };\n        var charIdx = 0, state = 0 /* NonEmailMatch */, currentEmailMatch = noCurrentEmailMatch;\n        // For debugging: search for other \"For debugging\" lines\n        // const table = new CliTable( {\n        // \thead: [ 'charIdx', 'char', 'state', 'charIdx', 'currentEmailAddress.idx', 'hasDomainDot' ]\n        // } );\n        while (charIdx < len) {\n            var char = text.charAt(charIdx);\n            // For debugging: search for other \"For debugging\" lines\n            // table.push(\n            // \t[ charIdx, char, State[ state ], charIdx, currentEmailAddress.idx, currentEmailAddress.hasDomainDot ]\n            // );\n            switch (state) {\n                case 0 /* NonEmailMatch */:\n                    stateNonEmailAddress(char);\n                    break;\n                case 1 /* Mailto */:\n                    stateMailTo(text.charAt(charIdx - 1), char);\n                    break;\n                case 2 /* LocalPart */:\n                    stateLocalPart(char);\n                    break;\n                case 3 /* LocalPartDot */:\n                    stateLocalPartDot(char);\n                    break;\n                case 4 /* AtSign */:\n                    stateAtSign(char);\n                    break;\n                case 5 /* DomainChar */:\n                    stateDomainChar(char);\n                    break;\n                case 6 /* DomainHyphen */:\n                    stateDomainHyphen(char);\n                    break;\n                case 7 /* DomainDot */:\n                    stateDomainDot(char);\n                    break;\n                default:\n                    throwUnhandledCaseError(state);\n            }\n            // For debugging: search for other \"For debugging\" lines\n            // table.push(\n            // \t[ charIdx, char, State[ state ], charIdx, currentEmailAddress.idx, currentEmailAddress.hasDomainDot ]\n            // );\n            charIdx++;\n        }\n        // Capture any valid match at the end of the string\n        captureMatchIfValidAndReset();\n        // For debugging: search for other \"For debugging\" lines\n        //console.log( '\\n' + table.toString() );\n        return matches;\n        // Handles the state when we're not in an email address\n        function stateNonEmailAddress(char) {\n            if (char === 'm') {\n                beginEmailMatch(1 /* Mailto */);\n            }\n            else if (localPartCharRegex.test(char)) {\n                beginEmailMatch();\n            }\n            else {\n                // not an email address character, continue\n            }\n        }\n        // Handles if we're reading a 'mailto:' prefix on the string\n        function stateMailTo(prevChar, char) {\n            if (prevChar === ':') {\n                // We've reached the end of the 'mailto:' prefix\n                if (localPartCharRegex.test(char)) {\n                    state = 2 /* LocalPart */;\n                    currentEmailMatch = new CurrentEmailMatch(__assign(__assign({}, currentEmailMatch), { hasMailtoPrefix: true }));\n                }\n                else {\n                    // we've matched 'mailto:' but didn't get anything meaningful\n                    // immediately afterwards (for example, we encountered a\n                    // space character, or an '@' character which formed 'mailto:@'\n                    resetToNonEmailMatchState();\n                }\n            }\n            else if (mailtoTransitions[prevChar] === char) {\n                // We're currently reading the 'mailto:' prefix, stay in\n                // Mailto state\n            }\n            else if (localPartCharRegex.test(char)) {\n                // We we're reading a prefix of 'mailto:', but encountered a\n                // different character that didn't continue the prefix\n                state = 2 /* LocalPart */;\n            }\n            else if (char === '.') {\n                // We we're reading a prefix of 'mailto:', but encountered a\n                // dot character\n                state = 3 /* LocalPartDot */;\n            }\n            else if (char === '@') {\n                // We we're reading a prefix of 'mailto:', but encountered a\n                // an @ character\n                state = 4 /* AtSign */;\n            }\n            else {\n                // not an email address character, return to \"NonEmailAddress\" state\n                resetToNonEmailMatchState();\n            }\n        }\n        // Handles the state when we're currently in the \"local part\" of an\n        // email address (as opposed to the \"domain part\")\n        function stateLocalPart(char) {\n            if (char === '.') {\n                state = 3 /* LocalPartDot */;\n            }\n            else if (char === '@') {\n                state = 4 /* AtSign */;\n            }\n            else if (localPartCharRegex.test(char)) {\n                // stay in the \"local part\" of the email address\n            }\n            else {\n                // not an email address character, return to \"NonEmailAddress\" state\n                resetToNonEmailMatchState();\n            }\n        }\n        // Handles the state where we've read\n        function stateLocalPartDot(char) {\n            if (char === '.') {\n                // We read a second '.' in a row, not a valid email address\n                // local part\n                resetToNonEmailMatchState();\n            }\n            else if (char === '@') {\n                // We read the '@' character immediately after a dot ('.'), not\n                // an email address\n                resetToNonEmailMatchState();\n            }\n            else if (localPartCharRegex.test(char)) {\n                state = 2 /* LocalPart */;\n            }\n            else {\n                // Anything else, not an email address\n                resetToNonEmailMatchState();\n            }\n        }\n        function stateAtSign(char) {\n            if (domainNameCharRegex.test(char)) {\n                state = 5 /* DomainChar */;\n            }\n            else {\n                // Anything else, not an email address\n                resetToNonEmailMatchState();\n            }\n        }\n        function stateDomainChar(char) {\n            if (char === '.') {\n                state = 7 /* DomainDot */;\n            }\n            else if (char === '-') {\n                state = 6 /* DomainHyphen */;\n            }\n            else if (domainNameCharRegex.test(char)) {\n                // Stay in the DomainChar state\n            }\n            else {\n                // Anything else, we potentially matched if the criteria has\n                // been met\n                captureMatchIfValidAndReset();\n            }\n        }\n        function stateDomainHyphen(char) {\n            if (char === '-' || char === '.') {\n                // Not valid to have two hyphens (\"--\") or hypen+dot (\"-.\")\n                captureMatchIfValidAndReset();\n            }\n            else if (domainNameCharRegex.test(char)) {\n                state = 5 /* DomainChar */;\n            }\n            else {\n                // Anything else\n                captureMatchIfValidAndReset();\n            }\n        }\n        function stateDomainDot(char) {\n            if (char === '.' || char === '-') {\n                // not valid to have two dots (\"..\") or dot+hypen (\".-\")\n                captureMatchIfValidAndReset();\n            }\n            else if (domainNameCharRegex.test(char)) {\n                state = 5 /* DomainChar */;\n                // After having read a '.' and then a valid domain character,\n                // we now know that the domain part of the email is valid, and\n                // we have found at least a partial EmailMatch (however, the\n                // email address may have additional characters from this point)\n                currentEmailMatch = new CurrentEmailMatch(__assign(__assign({}, currentEmailMatch), { hasDomainDot: true }));\n            }\n            else {\n                // Anything else\n                captureMatchIfValidAndReset();\n            }\n        }\n        function beginEmailMatch(newState) {\n            if (newState === void 0) { newState = 2 /* LocalPart */; }\n            state = newState;\n            currentEmailMatch = new CurrentEmailMatch({ idx: charIdx });\n        }\n        function resetToNonEmailMatchState() {\n            state = 0 /* NonEmailMatch */;\n            currentEmailMatch = noCurrentEmailMatch;\n        }\n        /*\n         * Captures the current email address as an EmailMatch if it's valid,\n         * and resets the state to read another email address.\n         */\n        function captureMatchIfValidAndReset() {\n            if (currentEmailMatch.hasDomainDot) {\n                // we need at least one dot in the domain to be considered a valid email address\n                var matchedText = text.slice(currentEmailMatch.idx, charIdx);\n                // If we read a '.' or '-' char that ended the email address\n                // (valid domain name characters, but only valid email address\n                // characters if they are followed by something else), strip\n                // it off now\n                if (/[-.]$/.test(matchedText)) {\n                    matchedText = matchedText.slice(0, -1);\n                }\n                var emailAddress = currentEmailMatch.hasMailtoPrefix\n                    ? matchedText.slice('mailto:'.length)\n                    : matchedText;\n                // if the email address has a valid TLD, add it to the list of matches\n                if (doesEmailHaveValidTld(emailAddress)) {\n                    matches.push(new EmailMatch({\n                        tagBuilder: tagBuilder,\n                        matchedText: matchedText,\n                        offset: currentEmailMatch.idx,\n                        email: emailAddress,\n                    }));\n                }\n            }\n            resetToNonEmailMatchState();\n            /**\n             * Determines if the given email address has a valid TLD or not\n             * @param {string} emailAddress - email address\n             * @return {Boolean} - true is email have valid TLD, false otherwise\n             */\n            function doesEmailHaveValidTld(emailAddress) {\n                var emailAddressTld = emailAddress.split('.').pop() || '';\n                var emailAddressNormalized = emailAddressTld.toLowerCase();\n                var isValidTld = strictTldRegex.test(emailAddressNormalized);\n                return isValidTld;\n            }\n        }\n    };\n    return EmailMatcher;\n}(Matcher));\nexport { EmailMatcher };\nvar CurrentEmailMatch = /** @class */ (function () {\n    function CurrentEmailMatch(cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        this.idx = cfg.idx !== undefined ? cfg.idx : -1;\n        this.hasMailtoPrefix = !!cfg.hasMailtoPrefix;\n        this.hasDomainDot = !!cfg.hasDomainDot;\n    }\n    return CurrentEmailMatch;\n}());\n//# sourceMappingURL=email-matcher.js.map","import { alphaCharsStr } from '../regex-lib';\n/**\n * @private\n * @class Autolinker.matcher.UrlMatchValidator\n * @singleton\n *\n * Used by Autolinker to filter out false URL positives from the\n * {@link Autolinker.matcher.Url UrlMatcher}.\n *\n * Due to the limitations of regular expressions (including the missing feature\n * of look-behinds in JS regular expressions), we cannot always determine the\n * validity of a given match. This class applies a bit of additional logic to\n * filter out any false positives that have been matched by the\n * {@link Autolinker.matcher.Url UrlMatcher}.\n */\nvar UrlMatchValidator = /** @class */ (function () {\n    function UrlMatchValidator() {\n    }\n    /**\n     * Determines if a given URL match found by the {@link Autolinker.matcher.Url UrlMatcher}\n     * is valid. Will return `false` for:\n     *\n     * 1) URL matches which do not have at least have one period ('.') in the\n     *    domain name (effectively skipping over matches like \"abc:def\").\n     *    However, URL matches with a protocol will be allowed (ex: 'http://localhost')\n     * 2) URL matches which do not have at least one word character in the\n     *    domain name (effectively skipping over matches like \"git:1.0\").\n     *    However, URL matches with a protocol will be allowed (ex: 'intra-net://271219.76')\n     * 3) A protocol-relative url match (a URL beginning with '//') whose\n     *    previous character is a word character (effectively skipping over\n     *    strings like \"abc//google.com\")\n     *\n     * Otherwise, returns `true`.\n     *\n     * @param {String} urlMatch The matched URL, if there was one. Will be an\n     *   empty string if the match is not a URL match.\n     * @param {String} protocolUrlMatch The match URL string for a protocol\n     *   match. Ex: 'http://yahoo.com'. This is used to match something like\n     *   'http://localhost', where we won't double check that the domain name\n     *   has at least one '.' in it.\n     * @return {Boolean} `true` if the match given is valid and should be\n     *   processed, or `false` if the match is invalid and/or should just not be\n     *   processed.\n     */\n    UrlMatchValidator.isValid = function (urlMatch, protocolUrlMatch) {\n        if ((protocolUrlMatch && !this.isValidUriScheme(protocolUrlMatch)) ||\n            this.urlMatchDoesNotHaveProtocolOrDot(urlMatch, protocolUrlMatch) || // At least one period ('.') must exist in the URL match for us to consider it an actual URL, *unless* it was a full protocol match (like 'http://localhost')\n            (this.urlMatchDoesNotHaveAtLeastOneWordChar(urlMatch, protocolUrlMatch) && // At least one letter character must exist in the domain name after a protocol match. Ex: skip over something like \"git:1.0\"\n                !this.isValidIpAddress(urlMatch)) || // Except if it's an IP address\n            this.containsMultipleDots(urlMatch)) {\n            return false;\n        }\n        return true;\n    };\n    UrlMatchValidator.isValidIpAddress = function (uriSchemeMatch) {\n        var newRegex = new RegExp(this.hasFullProtocolRegex.source + this.ipRegex.source);\n        var uriScheme = uriSchemeMatch.match(newRegex);\n        return uriScheme !== null;\n    };\n    UrlMatchValidator.containsMultipleDots = function (urlMatch) {\n        var stringBeforeSlash = urlMatch;\n        if (this.hasFullProtocolRegex.test(urlMatch)) {\n            stringBeforeSlash = urlMatch.split('://')[1];\n        }\n        return stringBeforeSlash.split('/')[0].indexOf('..') > -1;\n    };\n    /**\n     * Determines if the URI scheme is a valid scheme to be autolinked. Returns\n     * `false` if the scheme is 'javascript:' or 'vbscript:'\n     *\n     * @private\n     * @param {String} uriSchemeMatch The match URL string for a full URI scheme\n     *   match. Ex: 'http://yahoo.com' or 'mailto:a@a.com'.\n     * @return {Boolean} `true` if the scheme is a valid one, `false` otherwise.\n     */\n    UrlMatchValidator.isValidUriScheme = function (uriSchemeMatch) {\n        var uriSchemeMatchArr = uriSchemeMatch.match(this.uriSchemeRegex), uriScheme = uriSchemeMatchArr && uriSchemeMatchArr[0].toLowerCase();\n        return uriScheme !== 'javascript:' && uriScheme !== 'vbscript:';\n    };\n    /**\n     * Determines if a URL match does not have either:\n     *\n     * a) a full protocol (i.e. 'http://'), or\n     * b) at least one dot ('.') in the domain name (for a non-full-protocol\n     *    match).\n     *\n     * Either situation is considered an invalid URL (ex: 'git:d' does not have\n     * either the '://' part, or at least one dot in the domain name. If the\n     * match was 'git:abc.com', we would consider this valid.)\n     *\n     * @private\n     * @param {String} urlMatch The matched URL, if there was one. Will be an\n     *   empty string if the match is not a URL match.\n     * @param {String} protocolUrlMatch The match URL string for a protocol\n     *   match. Ex: 'http://yahoo.com'. This is used to match something like\n     *   'http://localhost', where we won't double check that the domain name\n     *   has at least one '.' in it.\n     * @return {Boolean} `true` if the URL match does not have a full protocol,\n     *   or at least one dot ('.') in a non-full-protocol match.\n     */\n    UrlMatchValidator.urlMatchDoesNotHaveProtocolOrDot = function (urlMatch, protocolUrlMatch) {\n        return (!!urlMatch &&\n            (!protocolUrlMatch || !this.hasFullProtocolRegex.test(protocolUrlMatch)) &&\n            urlMatch.indexOf('.') === -1);\n    };\n    /**\n     * Determines if a URL match does not have either:\n     *\n     * a) a full protocol (i.e. 'http://'), or\n     * b) at least one word character after the protocol (i.e. in the domain name)\n     *\n     * At least one letter character must exist in the domain name after a\n     * protocol match. Ex: skip over something like \"git:1.0\"\n     *\n     * @private\n     * @param {String} urlMatch The matched URL, if there was one. Will be an\n     *   empty string if the match is not a URL match.\n     * @param {String} protocolUrlMatch The match URL string for a protocol\n     *   match. Ex: 'http://yahoo.com'. This is used to know whether or not we\n     *   have a protocol in the URL string, in order to check for a word\n     *   character after the protocol separator (':').\n     * @return {Boolean} `true` if the URL match does not have a full protocol, or\n     * at least one word character in it, `false` otherwise.\n     */\n    UrlMatchValidator.urlMatchDoesNotHaveAtLeastOneWordChar = function (urlMatch, protocolUrlMatch) {\n        if (urlMatch && protocolUrlMatch) {\n            return (!this.hasFullProtocolRegex.test(protocolUrlMatch) &&\n                !this.hasWordCharAfterProtocolRegex.test(urlMatch));\n        }\n        else {\n            return false;\n        }\n    };\n    /**\n     * Regex to test for a full protocol, with the two trailing slashes. Ex: 'http://'\n     *\n     * @private\n     * @property {RegExp} hasFullProtocolRegex\n     */\n    UrlMatchValidator.hasFullProtocolRegex = /^[A-Za-z][-.+A-Za-z0-9]*:\\/\\//;\n    /**\n     * Regex to find the URI scheme, such as 'mailto:'.\n     *\n     * This is used to filter out 'javascript:' and 'vbscript:' schemes.\n     *\n     * @private\n     * @property {RegExp} uriSchemeRegex\n     */\n    UrlMatchValidator.uriSchemeRegex = /^[A-Za-z][-.+A-Za-z0-9]*:/;\n    /**\n     * Regex to determine if at least one word char exists after the protocol (i.e. after the ':')\n     *\n     * @private\n     * @property {RegExp} hasWordCharAfterProtocolRegex\n     */\n    UrlMatchValidator.hasWordCharAfterProtocolRegex = new RegExp(':[^\\\\s]*?[' + alphaCharsStr + ']');\n    /**\n     * Regex to determine if the string is a valid IP address\n     *\n     * @private\n     * @property {RegExp} ipRegex\n     */\n    UrlMatchValidator.ipRegex = /[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?(:[0-9]*)?\\/?$/;\n    return UrlMatchValidator;\n}());\nexport { UrlMatchValidator };\n//# sourceMappingURL=url-match-validator.js.map","import { __extends } from \"tslib\";\nimport { Matcher } from './matcher';\nimport { alphaNumericCharsStr, alphaNumericAndMarksCharsStr, getDomainNameStr } from '../regex-lib';\nimport { tldRegex } from './tld-regex';\nimport { UrlMatch } from '../match/url-match';\nimport { UrlMatchValidator } from './url-match-validator';\n// RegExp objects which are shared by all instances of UrlMatcher. These are\n// here to avoid re-instantiating the RegExp objects if `Autolinker.link()` is\n// called multiple times, thus instantiating UrlMatcher and its RegExp\n// objects each time (which is very expensive - see https://github.com/gregjacobs/Autolinker.js/issues/314).\n// See descriptions of the properties where they are used for details about them\n// prettier-ignore\nvar matcherRegex = (function () {\n    var schemeRegex = /(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\\/\\/)(?!\\d+\\/?)(?:\\/\\/)?)/, // match protocol, allow in format \"http://\" or \"mailto:\". However, do not match the first part of something like 'link:http://www.google.com' (i.e. don't match \"link:\"). Also, make sure we don't interpret 'google.com:8000' as if 'google.com' was a protocol here (i.e. ignore a trailing port number in this regex)\n    wwwRegex = /(?:www\\.)/, // starting with 'www.'\n    // Allow optional path, query string, and hash anchor, not ending in the following characters: \"?!:,.;\"\n    // http://blog.codinghorror.com/the-problem-with-urls/\n    urlSuffixRegex = new RegExp('[/?#](?:[' + alphaNumericAndMarksCharsStr + '\\\\-+&@#/%=~_()|\\'$*\\\\[\\\\]{}?!:,.;^\\u2713]*[' + alphaNumericAndMarksCharsStr + '\\\\-+&@#/%=~_()|\\'$*\\\\[\\\\]{}\\u2713])?');\n    return new RegExp([\n        '(?:',\n        '(',\n        schemeRegex.source,\n        getDomainNameStr(2),\n        ')',\n        '|',\n        '(',\n        '(//)?',\n        wwwRegex.source,\n        getDomainNameStr(6),\n        ')',\n        '|',\n        '(',\n        '(//)?',\n        getDomainNameStr(10) + '\\\\.',\n        tldRegex.source,\n        '(?![-' + alphaNumericCharsStr + '])',\n        ')',\n        ')',\n        '(?::[0-9]+)?',\n        '(?:' + urlSuffixRegex.source + ')?' // match for path, query string, and/or hash anchor - optional\n    ].join(\"\"), 'gi');\n})();\nvar wordCharRegExp = new RegExp('[' + alphaNumericAndMarksCharsStr + ']');\n/**\n * @class Autolinker.matcher.Url\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find URL matches in an input string.\n *\n * See this class's superclass ({@link Autolinker.matcher.Matcher}) for more details.\n */\nvar UrlMatcher = /** @class */ (function (_super) {\n    __extends(UrlMatcher, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match instance,\n     *   specified in an Object (map).\n     */\n    function UrlMatcher(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @cfg {Object} stripPrefix (required)\n         *\n         * The Object form of {@link Autolinker#cfg-stripPrefix}.\n         */\n        _this.stripPrefix = {\n            scheme: true,\n            www: true,\n        }; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} stripTrailingSlash (required)\n         * @inheritdoc Autolinker#stripTrailingSlash\n         */\n        _this.stripTrailingSlash = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} decodePercentEncoding (required)\n         * @inheritdoc Autolinker#decodePercentEncoding\n         */\n        _this.decodePercentEncoding = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @protected\n         * @property {RegExp} matcherRegex\n         *\n         * The regular expression to match URLs with an optional scheme, port\n         * number, path, query string, and hash anchor.\n         *\n         * Example matches:\n         *\n         *     http://google.com\n         *     www.google.com\n         *     google.com/path/to/file?q1=1&q2=2#myAnchor\n         *\n         *\n         * This regular expression will have the following capturing groups:\n         *\n         * 1.  Group that matches a scheme-prefixed URL (i.e. 'http://google.com').\n         *     This is used to match scheme URLs with just a single word, such as\n         *     'http://localhost', where we won't double check that the domain name\n         *     has at least one dot ('.') in it.\n         * 2.  Group that matches a 'www.' prefixed URL. This is only matched if the\n         *     'www.' text was not prefixed by a scheme (i.e.: not prefixed by\n         *     'http://', 'ftp:', etc.)\n         * 3.  A protocol-relative ('//') match for the case of a 'www.' prefixed\n         *     URL. Will be an empty string if it is not a protocol-relative match.\n         *     We need to know the character before the '//' in order to determine\n         *     if it is a valid match or the // was in a string we don't want to\n         *     auto-link.\n         * 4.  Group that matches a known TLD (top level domain), when a scheme\n         *     or 'www.'-prefixed domain is not matched.\n         * 5.  A protocol-relative ('//') match for the case of a known TLD prefixed\n         *     URL. Will be an empty string if it is not a protocol-relative match.\n         *     See #3 for more info.\n         */\n        _this.matcherRegex = matcherRegex;\n        /**\n         * A regular expression to use to check the character before a protocol-relative\n         * URL match. We don't want to match a protocol-relative URL if it is part\n         * of another word.\n         *\n         * For example, we want to match something like \"Go to: //google.com\",\n         * but we don't want to match something like \"abc//google.com\"\n         *\n         * This regular expression is used to test the character before the '//'.\n         *\n         * @protected\n         * @type {RegExp} wordCharRegExp\n         */\n        _this.wordCharRegExp = wordCharRegExp;\n        _this.stripPrefix = cfg.stripPrefix;\n        _this.stripTrailingSlash = cfg.stripTrailingSlash;\n        _this.decodePercentEncoding = cfg.decodePercentEncoding;\n        return _this;\n    }\n    /**\n     * @inheritdoc\n     */\n    UrlMatcher.prototype.parseMatches = function (text) {\n        var matcherRegex = this.matcherRegex, stripPrefix = this.stripPrefix, stripTrailingSlash = this.stripTrailingSlash, decodePercentEncoding = this.decodePercentEncoding, tagBuilder = this.tagBuilder, matches = [], match;\n        var _loop_1 = function () {\n            var matchStr = match[0], schemeUrlMatch = match[1], wwwUrlMatch = match[4], wwwProtocolRelativeMatch = match[5], \n            //tldUrlMatch = match[ 8 ],  -- not needed at the moment\n            tldProtocolRelativeMatch = match[9], offset = match.index, protocolRelativeMatch = wwwProtocolRelativeMatch || tldProtocolRelativeMatch, prevChar = text.charAt(offset - 1);\n            if (!UrlMatchValidator.isValid(matchStr, schemeUrlMatch)) {\n                return \"continue\";\n            }\n            // If the match is preceded by an '@' character, then it is either\n            // an email address or a username. Skip these types of matches.\n            if (offset > 0 && prevChar === '@') {\n                return \"continue\";\n            }\n            // If it's a protocol-relative '//' match, but the character before the '//'\n            // was a word character (i.e. a letter/number), then we found the '//' in the\n            // middle of another word (such as \"asdf//asdf.com\"). In this case, skip the\n            // match.\n            if (offset > 0 && protocolRelativeMatch && this_1.wordCharRegExp.test(prevChar)) {\n                return \"continue\";\n            }\n            // If the URL ends with a question mark, don't include the question\n            // mark as part of the URL. We'll assume the question mark was the\n            // end of a sentence, such as: \"Going to google.com?\"\n            if (/\\?$/.test(matchStr)) {\n                matchStr = matchStr.substr(0, matchStr.length - 1);\n            }\n            // Handle a closing parenthesis or square bracket at the end of the\n            // match, and exclude it if there is not a matching open parenthesis\n            // or square bracket in the match itself.\n            if (this_1.matchHasUnbalancedClosingParen(matchStr)) {\n                matchStr = matchStr.substr(0, matchStr.length - 1); // remove the trailing \")\"\n            }\n            else {\n                // Handle an invalid character after the TLD\n                var pos = this_1.matchHasInvalidCharAfterTld(matchStr, schemeUrlMatch);\n                if (pos > -1) {\n                    matchStr = matchStr.substr(0, pos); // remove the trailing invalid chars\n                }\n            }\n            // The autolinker accepts many characters in a url's scheme (like `fake://test.com`).\n            // However, in cases where a URL is missing whitespace before an obvious link,\n            // (for example: `nowhitespacehttp://www.test.com`), we only want the match to start\n            // at the http:// part. We will check if the match contains a common scheme and then\n            // shift the match to start from there.\n            var foundCommonScheme = ['http://', 'https://'].find(function (commonScheme) { return !!schemeUrlMatch && schemeUrlMatch.indexOf(commonScheme) !== -1; });\n            if (foundCommonScheme) {\n                // If we found an overmatched URL, we want to find the index\n                // of where the match should start and shift the match to\n                // start from the beginning of the common scheme\n                var indexOfSchemeStart = matchStr.indexOf(foundCommonScheme);\n                matchStr = matchStr.substr(indexOfSchemeStart);\n                schemeUrlMatch = schemeUrlMatch.substr(indexOfSchemeStart);\n                offset = offset + indexOfSchemeStart;\n            }\n            var urlMatchType = schemeUrlMatch\n                ? 'scheme'\n                : wwwUrlMatch\n                    ? 'www'\n                    : 'tld', protocolUrlMatch = !!schemeUrlMatch;\n            matches.push(new UrlMatch({\n                tagBuilder: tagBuilder,\n                matchedText: matchStr,\n                offset: offset,\n                urlMatchType: urlMatchType,\n                url: matchStr,\n                protocolUrlMatch: protocolUrlMatch,\n                protocolRelativeMatch: !!protocolRelativeMatch,\n                stripPrefix: stripPrefix,\n                stripTrailingSlash: stripTrailingSlash,\n                decodePercentEncoding: decodePercentEncoding,\n            }));\n        };\n        var this_1 = this;\n        while ((match = matcherRegex.exec(text)) !== null) {\n            _loop_1();\n        }\n        return matches;\n    };\n    /**\n     * Determines if a match found has an unmatched closing parenthesis,\n     * square bracket or curly bracket. If so, the symbol will be removed\n     * from the match itself, and appended after the generated anchor tag.\n     *\n     * A match may have an extra closing parenthesis at the end of the match\n     * because the regular expression must include parenthesis for URLs such as\n     * \"wikipedia.com/something_(disambiguation)\", which should be auto-linked.\n     *\n     * However, an extra parenthesis *will* be included when the URL itself is\n     * wrapped in parenthesis, such as in the case of:\n     *     \"(wikipedia.com/something_(disambiguation))\"\n     * In this case, the last closing parenthesis should *not* be part of the\n     * URL itself, and this method will return `true`.\n     *\n     * For square brackets in URLs such as in PHP arrays, the same behavior as\n     * parenthesis discussed above should happen:\n     *     \"[http://www.example.com/foo.php?bar[]=1&bar[]=2&bar[]=3]\"\n     * The closing square bracket should not be part of the URL itself, and this\n     * method will return `true`.\n     *\n     * @protected\n     * @param {String} matchStr The full match string from the {@link #matcherRegex}.\n     * @return {Boolean} `true` if there is an unbalanced closing parenthesis or\n     *   square bracket at the end of the `matchStr`, `false` otherwise.\n     */\n    UrlMatcher.prototype.matchHasUnbalancedClosingParen = function (matchStr) {\n        var endChar = matchStr.charAt(matchStr.length - 1);\n        var startChar;\n        if (endChar === ')') {\n            startChar = '(';\n        }\n        else if (endChar === ']') {\n            startChar = '[';\n        }\n        else if (endChar === '}') {\n            startChar = '{';\n        }\n        else {\n            return false; // not a close parenthesis or square bracket\n        }\n        // Find if there are the same number of open braces as close braces in\n        // the URL string, minus the last character (which we have already\n        // determined to be either ')', ']' or '}'\n        var numOpenBraces = 0;\n        for (var i = 0, len = matchStr.length - 1; i < len; i++) {\n            var char = matchStr.charAt(i);\n            if (char === startChar) {\n                numOpenBraces++;\n            }\n            else if (char === endChar) {\n                numOpenBraces = Math.max(numOpenBraces - 1, 0);\n            }\n        }\n        // If the number of open braces matches the number of close braces in\n        // the URL minus the last character, then the match has *unbalanced*\n        // braces because of the last character. Example of unbalanced braces\n        // from the regex match:\n        //     \"http://example.com?a[]=1]\"\n        if (numOpenBraces === 0) {\n            return true;\n        }\n        return false;\n    };\n    /**\n     * Determine if there's an invalid character after the TLD in a URL. Valid\n     * characters after TLD are ':/?#'. Exclude scheme matched URLs from this\n     * check.\n     *\n     * @protected\n     * @param {String} urlMatch The matched URL, if there was one. Will be an\n     *   empty string if the match is not a URL match.\n     * @param {String} schemeUrlMatch The match URL string for a scheme\n     *   match. Ex: 'http://yahoo.com'. This is used to match something like\n     *   'http://localhost', where we won't double check that the domain name\n     *   has at least one '.' in it.\n     * @return {Number} the position where the invalid character was found. If\n     *   no such character was found, returns -1\n     */\n    UrlMatcher.prototype.matchHasInvalidCharAfterTld = function (urlMatch, schemeUrlMatch) {\n        if (!urlMatch) {\n            return -1;\n        }\n        var offset = 0;\n        if (schemeUrlMatch) {\n            offset = urlMatch.indexOf(':');\n            urlMatch = urlMatch.slice(offset);\n        }\n        // prettier-ignore\n        var re = new RegExp(\"^((.?\\/\\/)?[-.\" + alphaNumericAndMarksCharsStr + \"]*[-\" + alphaNumericAndMarksCharsStr + \"]\\\\.[-\" + alphaNumericAndMarksCharsStr + \"]+)\");\n        var res = re.exec(urlMatch);\n        if (res === null) {\n            return -1;\n        }\n        offset += res[1].length;\n        urlMatch = urlMatch.slice(res[1].length);\n        if (/^[^-.A-Za-z0-9:\\/?#]/.test(urlMatch)) {\n            return offset;\n        }\n        return -1;\n    };\n    return UrlMatcher;\n}(Matcher));\nexport { UrlMatcher };\n//# sourceMappingURL=url-matcher.js.map","import { __extends } from \"tslib\";\nimport { Matcher } from './matcher';\nimport { alphaNumericAndMarksCharRe, alphaNumericAndMarksCharsStr } from '../regex-lib';\nimport { HashtagMatch } from '../match/hashtag-match';\nimport { throwUnhandledCaseError } from '../utils';\n// For debugging: search for other \"For debugging\" lines\n// import CliTable from 'cli-table';\nvar hashtagTextCharRe = new RegExp(\"[_\".concat(alphaNumericAndMarksCharsStr, \"]\"));\n/**\n * @class Autolinker.matcher.Hashtag\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find HashtagMatch matches in an input string.\n */\nvar HashtagMatcher = /** @class */ (function (_super) {\n    __extends(HashtagMatcher, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match instance,\n     *   specified in an Object (map).\n     */\n    function HashtagMatcher(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @cfg {String} service\n         *\n         * A string for the service name to have hashtags (ex: \"#myHashtag\")\n         * auto-linked to. The currently-supported values are:\n         *\n         * - 'twitter'\n         * - 'facebook'\n         * - 'instagram'\n         * - 'tiktok'\n         */\n        _this.serviceName = 'twitter'; // default value just to get the above doc comment in the ES5 output and documentation generator\n        _this.serviceName = cfg.serviceName;\n        return _this;\n    }\n    /**\n     * @inheritdoc\n     */\n    HashtagMatcher.prototype.parseMatches = function (text) {\n        var tagBuilder = this.tagBuilder;\n        var serviceName = this.serviceName;\n        var matches = [];\n        var len = text.length;\n        var charIdx = 0, hashCharIdx = -1, state = 0 /* None */;\n        // For debugging: search for other \"For debugging\" lines\n        // const table = new CliTable( {\n        // \thead: [ 'charIdx', 'char', 'state', 'charIdx', 'currentEmailAddress.idx', 'hasDomainDot' ]\n        // } );\n        while (charIdx < len) {\n            var char = text.charAt(charIdx);\n            // For debugging: search for other \"For debugging\" lines\n            // table.push(\n            // \t[ charIdx, char, State[ state ], charIdx, currentEmailAddress.idx, currentEmailAddress.hasDomainDot ]\n            // );\n            switch (state) {\n                case 0 /* None */:\n                    stateNone(char);\n                    break;\n                case 1 /* NonHashtagWordChar */:\n                    stateNonHashtagWordChar(char);\n                    break;\n                case 2 /* HashtagHashChar */:\n                    stateHashtagHashChar(char);\n                    break;\n                case 3 /* HashtagTextChar */:\n                    stateHashtagTextChar(char);\n                    break;\n                default:\n                    throwUnhandledCaseError(state);\n            }\n            // For debugging: search for other \"For debugging\" lines\n            // table.push(\n            // \t[ charIdx, char, State[ state ], charIdx, currentEmailAddress.idx, currentEmailAddress.hasDomainDot ]\n            // );\n            charIdx++;\n        }\n        // Capture any valid match at the end of the string\n        captureMatchIfValid();\n        // For debugging: search for other \"For debugging\" lines\n        //console.log( '\\n' + table.toString() );\n        return matches;\n        // Handles the state when we're not in a hashtag or any word\n        function stateNone(char) {\n            if (char === '#') {\n                state = 2 /* HashtagHashChar */;\n                hashCharIdx = charIdx;\n            }\n            else if (alphaNumericAndMarksCharRe.test(char)) {\n                state = 1 /* NonHashtagWordChar */;\n            }\n            else {\n                // not a hashtag character ('#') or word char, stay in State.None\n            }\n        }\n        // Handles the state when we've encountered a word character but are not\n        // in a hashtag. This is used to distinguish between a standalone\n        // hashtag such as '#Stuff' vs a hash char that is part of a word like\n        // 'asdf#stuff' (the latter of which would not be a match)\n        function stateNonHashtagWordChar(char) {\n            if (alphaNumericAndMarksCharRe.test(char)) {\n                // continue in NonHashtagWordChar state\n            }\n            else {\n                state = 0 /* None */;\n            }\n        }\n        // Handles the state when we've just encountered a '#' character\n        function stateHashtagHashChar(char) {\n            if (hashtagTextCharRe.test(char)) {\n                // '#' char with valid hash text char following\n                state = 3 /* HashtagTextChar */;\n            }\n            else if (alphaNumericAndMarksCharRe.test(char)) {\n                state = 1 /* NonHashtagWordChar */;\n            }\n            else {\n                state = 0 /* None */;\n            }\n        }\n        // Handles the state when we're currently in the hash tag's text chars\n        function stateHashtagTextChar(char) {\n            if (hashtagTextCharRe.test(char)) {\n                // Continue reading characters in the HashtagText state\n            }\n            else {\n                captureMatchIfValid();\n                hashCharIdx = -1;\n                if (alphaNumericAndMarksCharRe.test(char)) {\n                    state = 1 /* NonHashtagWordChar */;\n                }\n                else {\n                    state = 0 /* None */;\n                }\n            }\n        }\n        /*\n         * Captures the current hashtag as a HashtagMatch if it's valid.\n         */\n        function captureMatchIfValid() {\n            if (hashCharIdx > -1 && charIdx - hashCharIdx <= 140) {\n                // Max length of 140 for a hashtag ('#' char + 139 word chars)\n                var matchedText = text.slice(hashCharIdx, charIdx);\n                var match = new HashtagMatch({\n                    tagBuilder: tagBuilder,\n                    matchedText: matchedText,\n                    offset: hashCharIdx,\n                    serviceName: serviceName,\n                    hashtag: matchedText.slice(1),\n                });\n                matches.push(match);\n            }\n        }\n    };\n    return HashtagMatcher;\n}(Matcher));\nexport { HashtagMatcher };\nexport var hashtagServices = ['twitter', 'facebook', 'instagram', 'tiktok'];\n//# sourceMappingURL=hashtag-matcher.js.map","import { __extends } from \"tslib\";\nimport { Matcher } from './matcher';\nimport { PhoneMatch } from '../match/phone-match';\nimport { nonDigitRe } from '../regex-lib';\n// RegExp objects which are shared by all instances of PhoneMatcher. These are\n// here to avoid re-instantiating the RegExp objects if `Autolinker.link()` is\n// called multiple times, thus instantiating PhoneMatcher and its RegExp\n// objects each time (which is very expensive - see https://github.com/gregjacobs/Autolinker.js/issues/314).\n// See descriptions of the properties where they are used for details about them\n// Over the years, many people have added to this regex, but it should have been\n// split up by country. Maybe one day we can break this down.\nvar mostPhoneNumbers = /(?:(?:(?:(\\+)?\\d{1,3}[-\\040.]?)?\\(?\\d{3}\\)?[-\\040.]?\\d{3}[-\\040.]?\\d{4})|(?:(\\+)(?:9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\\040.]?(?:\\d[-\\040.]?){6,12}\\d+))([,;]+[0-9]+#?)*/;\n// Regex for Japanese phone numbers\nvar japanesePhoneRe = /(0([1-9]{1}-?[1-9]\\d{3}|[1-9]{2}-?\\d{3}|[1-9]{2}\\d{1}-?\\d{2}|[1-9]{2}\\d{2}-?\\d{1})-?\\d{4}|0[789]0-?\\d{4}-?\\d{4}|050-?\\d{4}-?\\d{4})/;\n// Combined regex\nvar phoneMatcherRegex = new RegExp(\"\".concat(mostPhoneNumbers.source, \"|\").concat(japanesePhoneRe.source), 'g');\n/**\n * @class Autolinker.matcher.Phone\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find Phone number matches in an input string.\n *\n * See this class's superclass ({@link Autolinker.matcher.Matcher}) for more\n * details.\n */\nvar PhoneMatcher = /** @class */ (function (_super) {\n    __extends(PhoneMatcher, _super);\n    function PhoneMatcher() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /**\n         * The regular expression to match Phone numbers. Example matches:\n         *\n         *     (123) 456-7890\n         *     123 456 7890\n         *     123-456-7890\n         *     +18004441234,,;,10226420346#\n         *     +1 (800) 444 1234\n         *     10226420346#\n         *     1-800-444-1234,1022,64,20346#\n         *\n         * This regular expression has the following capturing groups:\n         *\n         * 1 or 2. The prefixed '+' sign, if there is one.\n         *\n         * @protected\n         * @property {RegExp} matcherRegex\n         */\n        _this.matcherRegex = phoneMatcherRegex;\n        return _this;\n    }\n    /**\n     * @inheritdoc\n     */\n    PhoneMatcher.prototype.parseMatches = function (text) {\n        var matcherRegex = this.matcherRegex, tagBuilder = this.tagBuilder, matches = [], match;\n        while ((match = matcherRegex.exec(text)) !== null) {\n            // Remove non-numeric values from phone number string\n            var matchedText = match[0], cleanNumber = matchedText.replace(/[^0-9,;#]/g, ''), // strip out non-digit characters exclude comma semicolon and #\n            plusSign = !!(match[1] || match[2]), // match[ 1 ] or match[ 2 ] is the prefixed plus sign, if there is one\n            before = match.index == 0 ? '' : text.substr(match.index - 1, 1), after = text.substr(match.index + matchedText.length, 1), contextClear = !before.match(/\\d/) && !after.match(/\\d/);\n            if (this.testMatch(match[3]) && this.testMatch(matchedText) && contextClear) {\n                matches.push(new PhoneMatch({\n                    tagBuilder: tagBuilder,\n                    matchedText: matchedText,\n                    offset: match.index,\n                    number: cleanNumber,\n                    plusSign: plusSign,\n                }));\n            }\n        }\n        return matches;\n    };\n    PhoneMatcher.prototype.testMatch = function (text) {\n        return nonDigitRe.test(text);\n    };\n    return PhoneMatcher;\n}(Matcher));\nexport { PhoneMatcher };\n//# sourceMappingURL=phone-matcher.js.map","import { __extends } from \"tslib\";\nimport { Matcher } from './matcher';\nimport { alphaNumericAndMarksCharsStr } from '../regex-lib';\nimport { MentionMatch } from '../match/mention-match';\n// RegExp objects which are shared by all instances of MentionMatcher. These are\n// here to avoid re-instantiating the RegExp objects if `Autolinker.link()` is\n// called multiple times, thus instantiating MentionMatcher and its RegExp\n// objects each time (which is very expensive - see https://github.com/gregjacobs/Autolinker.js/issues/314).\n// See descriptions of the properties where they are used for details about them\nvar twitterRegex = new RegExp(\"@[_\".concat(alphaNumericAndMarksCharsStr, \"]{1,50}(?![_\").concat(alphaNumericAndMarksCharsStr, \"])\"), 'g'); // lookahead used to make sure we don't match something above 50 characters\nvar instagramRegex = new RegExp(\"@[_.\".concat(alphaNumericAndMarksCharsStr, \"]{1,30}(?![_\").concat(alphaNumericAndMarksCharsStr, \"])\"), 'g'); // lookahead used to make sure we don't match something above 30 characters\nvar soundcloudRegex = new RegExp(\"@[-_.\".concat(alphaNumericAndMarksCharsStr, \"]{1,50}(?![-_\").concat(alphaNumericAndMarksCharsStr, \"])\"), 'g'); // lookahead used to make sure we don't match something above 50 characters\n// TikTok usernames are 1-24 characters containing letters, numbers, underscores\n// and periods, but cannot end in a period: https://support.tiktok.com/en/getting-started/setting-up-your-profile/changing-your-username\nvar tiktokRegex = new RegExp(\"@[_.\".concat(alphaNumericAndMarksCharsStr, \"]{1,23}[_\").concat(alphaNumericAndMarksCharsStr, \"](?![_\").concat(alphaNumericAndMarksCharsStr, \"])\"), 'g'); // lookahead used to make sure we don't match something above 24 characters\nvar nonWordCharRegex = new RegExp('[^' + alphaNumericAndMarksCharsStr + ']');\n/**\n * @class Autolinker.matcher.Mention\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find/replace username matches in an input string.\n */\nvar MentionMatcher = /** @class */ (function (_super) {\n    __extends(MentionMatcher, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match instance,\n     *   specified in an Object (map).\n     */\n    function MentionMatcher(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @cfg {'twitter'/'instagram'/'soundcloud'} protected\n         *\n         * The name of service to link @mentions to.\n         *\n         * Valid values are: 'twitter', 'instagram', 'soundcloud', or 'tiktok'\n         */\n        _this.serviceName = 'twitter'; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * Hash of regular expression to match username handles. Example match:\n         *\n         *     @asdf\n         *\n         * @private\n         * @property {Object} matcherRegexes\n         */\n        _this.matcherRegexes = {\n            twitter: twitterRegex,\n            instagram: instagramRegex,\n            soundcloud: soundcloudRegex,\n            tiktok: tiktokRegex,\n        };\n        /**\n         * The regular expression to use to check the character before a username match to\n         * make sure we didn't accidentally match an email address.\n         *\n         * For example, the string \"asdf@asdf.com\" should not match \"@asdf\" as a username.\n         *\n         * @private\n         * @property {RegExp} nonWordCharRegex\n         */\n        _this.nonWordCharRegex = nonWordCharRegex;\n        _this.serviceName = cfg.serviceName;\n        return _this;\n    }\n    /**\n     * @inheritdoc\n     */\n    MentionMatcher.prototype.parseMatches = function (text) {\n        var serviceName = this.serviceName, matcherRegex = this.matcherRegexes[this.serviceName], nonWordCharRegex = this.nonWordCharRegex, tagBuilder = this.tagBuilder, matches = [], match;\n        if (!matcherRegex) {\n            return matches;\n        }\n        while ((match = matcherRegex.exec(text)) !== null) {\n            var offset = match.index, prevChar = text.charAt(offset - 1);\n            // If we found the match at the beginning of the string, or we found the match\n            // and there is a whitespace char in front of it (meaning it is not an email\n            // address), then it is a username match.\n            if (offset === 0 || nonWordCharRegex.test(prevChar)) {\n                var matchedText = match[0].replace(/\\.+$/g, ''), // strip off trailing .\n                mention = matchedText.slice(1); // strip off the '@' character at the beginning\n                matches.push(new MentionMatch({\n                    tagBuilder: tagBuilder,\n                    matchedText: matchedText,\n                    offset: offset,\n                    serviceName: serviceName,\n                    mention: mention,\n                }));\n            }\n        }\n        return matches;\n    };\n    return MentionMatcher;\n}(Matcher));\nexport { MentionMatcher };\n//# sourceMappingURL=mention-matcher.js.map","import { __assign } from \"tslib\";\nimport { letterRe, digitRe, whitespaceRe, quoteRe, controlCharsRe } from '../regex-lib';\nimport { throwUnhandledCaseError } from '../utils';\n// For debugging: search for other \"For debugging\" lines\n// import CliTable from 'cli-table';\n/**\n * Parses an HTML string, calling the callbacks to notify of tags and text.\n *\n * ## History\n *\n * This file previously used a regular expression to find html tags in the input\n * text. Unfortunately, we ran into a bunch of catastrophic backtracking issues\n * with certain input text, causing Autolinker to either hang or just take a\n * really long time to parse the string.\n *\n * The current code is intended to be a O(n) algorithm that walks through\n * the string in one pass, and tries to be as cheap as possible. We don't need\n * to implement the full HTML spec, but rather simply determine where the string\n * looks like an HTML tag, and where it looks like text (so that we can autolink\n * that).\n *\n * This state machine parser is intended just to be a simple but performant\n * parser of HTML for the subset of requirements we have. We simply need to:\n *\n * 1. Determine where HTML tags are\n * 2. Determine the tag name (Autolinker specifically only cares about <a>,\n *    <script>, and <style> tags, so as not to link any text within them)\n *\n * We don't need to:\n *\n * 1. Create a parse tree\n * 2. Auto-close tags with invalid markup\n * 3. etc.\n *\n * The other intention behind this is that we didn't want to add external\n * dependencies on the Autolinker utility which would increase its size. For\n * instance, adding htmlparser2 adds 125kb to the minified output file,\n * increasing its final size from 47kb to 172kb (at the time of writing). It\n * also doesn't work exactly correctly, treating the string \"<3 blah blah blah\"\n * as an HTML tag.\n *\n * Reference for HTML spec:\n *\n *     https://www.w3.org/TR/html51/syntax.html#sec-tokenization\n *\n * @param {String} html The HTML to parse\n * @param {Object} callbacks\n * @param {Function} callbacks.onOpenTag Callback function to call when an open\n *   tag is parsed. Called with the tagName as its argument.\n * @param {Function} callbacks.onCloseTag Callback function to call when a close\n *   tag is parsed. Called with the tagName as its argument. If a self-closing\n *   tag is found, `onCloseTag` is called immediately after `onOpenTag`.\n * @param {Function} callbacks.onText Callback function to call when text (i.e\n *   not an HTML tag) is parsed. Called with the text (string) as its first\n *   argument, and offset (number) into the string as its second.\n */\nexport function parseHtml(html, _a) {\n    var onOpenTag = _a.onOpenTag, onCloseTag = _a.onCloseTag, onText = _a.onText, onComment = _a.onComment, onDoctype = _a.onDoctype;\n    var noCurrentTag = new CurrentTag();\n    var charIdx = 0, len = html.length, state = 0 /* Data */, currentDataIdx = 0, // where the current data start index is\n    currentTag = noCurrentTag; // describes the current tag that is being read\n    // For debugging: search for other \"For debugging\" lines\n    // const table = new CliTable( {\n    // \thead: [ 'charIdx', 'char', 'state', 'currentDataIdx', 'currentOpenTagIdx', 'tag.type' ]\n    // } );\n    while (charIdx < len) {\n        var char = html.charAt(charIdx);\n        // For debugging: search for other \"For debugging\" lines\n        // ALSO: Temporarily remove the 'const' keyword on the State enum\n        // table.push(\n        // \t[ charIdx, char, State[ state ], currentDataIdx, currentTag.idx, currentTag.idx === -1 ? '' : currentTag.type ]\n        // );\n        switch (state) {\n            case 0 /* Data */:\n                stateData(char);\n                break;\n            case 1 /* TagOpen */:\n                stateTagOpen(char);\n                break;\n            case 2 /* EndTagOpen */:\n                stateEndTagOpen(char);\n                break;\n            case 3 /* TagName */:\n                stateTagName(char);\n                break;\n            case 4 /* BeforeAttributeName */:\n                stateBeforeAttributeName(char);\n                break;\n            case 5 /* AttributeName */:\n                stateAttributeName(char);\n                break;\n            case 6 /* AfterAttributeName */:\n                stateAfterAttributeName(char);\n                break;\n            case 7 /* BeforeAttributeValue */:\n                stateBeforeAttributeValue(char);\n                break;\n            case 8 /* AttributeValueDoubleQuoted */:\n                stateAttributeValueDoubleQuoted(char);\n                break;\n            case 9 /* AttributeValueSingleQuoted */:\n                stateAttributeValueSingleQuoted(char);\n                break;\n            case 10 /* AttributeValueUnquoted */:\n                stateAttributeValueUnquoted(char);\n                break;\n            case 11 /* AfterAttributeValueQuoted */:\n                stateAfterAttributeValueQuoted(char);\n                break;\n            case 12 /* SelfClosingStartTag */:\n                stateSelfClosingStartTag(char);\n                break;\n            case 13 /* MarkupDeclarationOpenState */:\n                stateMarkupDeclarationOpen(char);\n                break;\n            case 14 /* CommentStart */:\n                stateCommentStart(char);\n                break;\n            case 15 /* CommentStartDash */:\n                stateCommentStartDash(char);\n                break;\n            case 16 /* Comment */:\n                stateComment(char);\n                break;\n            case 17 /* CommentEndDash */:\n                stateCommentEndDash(char);\n                break;\n            case 18 /* CommentEnd */:\n                stateCommentEnd(char);\n                break;\n            case 19 /* CommentEndBang */:\n                stateCommentEndBang(char);\n                break;\n            case 20 /* Doctype */:\n                stateDoctype(char);\n                break;\n            default:\n                throwUnhandledCaseError(state);\n        }\n        // For debugging: search for other \"For debugging\" lines\n        // ALSO: Temporarily remove the 'const' keyword on the State enum\n        // table.push(\n        // \t[ charIdx, char, State[ state ], currentDataIdx, currentTag.idx, currentTag.idx === -1 ? '' : currentTag.type ]\n        // );\n        charIdx++;\n    }\n    if (currentDataIdx < charIdx) {\n        emitText();\n    }\n    // For debugging: search for other \"For debugging\" lines\n    // console.log( '\\n' + table.toString() );\n    // Called when non-tags are being read (i.e. the text around HTML †ags)\n    // https://www.w3.org/TR/html51/syntax.html#data-state\n    function stateData(char) {\n        if (char === '<') {\n            startNewTag();\n        }\n    }\n    // Called after a '<' is read from the Data state\n    // https://www.w3.org/TR/html51/syntax.html#tag-open-state\n    function stateTagOpen(char) {\n        if (char === '!') {\n            state = 13 /* MarkupDeclarationOpenState */;\n        }\n        else if (char === '/') {\n            state = 2 /* EndTagOpen */;\n            currentTag = new CurrentTag(__assign(__assign({}, currentTag), { isClosing: true }));\n        }\n        else if (char === '<') {\n            // start of another tag (ignore the previous, incomplete one)\n            startNewTag();\n        }\n        else if (letterRe.test(char)) {\n            // tag name start (and no '/' read)\n            state = 3 /* TagName */;\n            currentTag = new CurrentTag(__assign(__assign({}, currentTag), { isOpening: true }));\n        }\n        else {\n            // Any other\n            state = 0 /* Data */;\n            currentTag = noCurrentTag;\n        }\n    }\n    // After a '<x', '</x' sequence is read (where 'x' is a letter character),\n    // this is to continue reading the tag name\n    // https://www.w3.org/TR/html51/syntax.html#tag-name-state\n    function stateTagName(char) {\n        if (whitespaceRe.test(char)) {\n            currentTag = new CurrentTag(__assign(__assign({}, currentTag), { name: captureTagName() }));\n            state = 4 /* BeforeAttributeName */;\n        }\n        else if (char === '<') {\n            // start of another tag (ignore the previous, incomplete one)\n            startNewTag();\n        }\n        else if (char === '/') {\n            currentTag = new CurrentTag(__assign(__assign({}, currentTag), { name: captureTagName() }));\n            state = 12 /* SelfClosingStartTag */;\n        }\n        else if (char === '>') {\n            currentTag = new CurrentTag(__assign(__assign({}, currentTag), { name: captureTagName() }));\n            emitTagAndPreviousTextNode(); // resets to Data state as well\n        }\n        else if (!letterRe.test(char) && !digitRe.test(char) && char !== ':') {\n            // Anything else that does not form an html tag. Note: the colon\n            // character is accepted for XML namespaced tags\n            resetToDataState();\n        }\n        else {\n            // continue reading tag name\n        }\n    }\n    // Called after the '/' is read from a '</' sequence\n    // https://www.w3.org/TR/html51/syntax.html#end-tag-open-state\n    function stateEndTagOpen(char) {\n        if (char === '>') {\n            // parse error. Encountered \"</>\". Skip it without treating as a tag\n            resetToDataState();\n        }\n        else if (letterRe.test(char)) {\n            state = 3 /* TagName */;\n        }\n        else {\n            // some other non-tag-like character, don't treat this as a tag\n            resetToDataState();\n        }\n    }\n    // https://www.w3.org/TR/html51/syntax.html#before-attribute-name-state\n    function stateBeforeAttributeName(char) {\n        if (whitespaceRe.test(char)) {\n            // stay in BeforeAttributeName state - continue reading chars\n        }\n        else if (char === '/') {\n            state = 12 /* SelfClosingStartTag */;\n        }\n        else if (char === '>') {\n            emitTagAndPreviousTextNode(); // resets to Data state as well\n        }\n        else if (char === '<') {\n            // start of another tag (ignore the previous, incomplete one)\n            startNewTag();\n        }\n        else if (char === \"=\" || quoteRe.test(char) || controlCharsRe.test(char)) {\n            // \"Parse error\" characters that, according to the spec, should be\n            // appended to the attribute name, but we'll treat these characters\n            // as not forming a real HTML tag\n            resetToDataState();\n        }\n        else {\n            // Any other char, start of a new attribute name\n            state = 5 /* AttributeName */;\n        }\n    }\n    // https://www.w3.org/TR/html51/syntax.html#attribute-name-state\n    function stateAttributeName(char) {\n        if (whitespaceRe.test(char)) {\n            state = 6 /* AfterAttributeName */;\n        }\n        else if (char === '/') {\n            state = 12 /* SelfClosingStartTag */;\n        }\n        else if (char === '=') {\n            state = 7 /* BeforeAttributeValue */;\n        }\n        else if (char === '>') {\n            emitTagAndPreviousTextNode(); // resets to Data state as well\n        }\n        else if (char === '<') {\n            // start of another tag (ignore the previous, incomplete one)\n            startNewTag();\n        }\n        else if (quoteRe.test(char)) {\n            // \"Parse error\" characters that, according to the spec, should be\n            // appended to the attribute name, but we'll treat these characters\n            // as not forming a real HTML tag\n            resetToDataState();\n        }\n        else {\n            // anything else: continue reading attribute name\n        }\n    }\n    // https://www.w3.org/TR/html51/syntax.html#after-attribute-name-state\n    function stateAfterAttributeName(char) {\n        if (whitespaceRe.test(char)) {\n            // ignore the character - continue reading\n        }\n        else if (char === '/') {\n            state = 12 /* SelfClosingStartTag */;\n        }\n        else if (char === '=') {\n            state = 7 /* BeforeAttributeValue */;\n        }\n        else if (char === '>') {\n            emitTagAndPreviousTextNode();\n        }\n        else if (char === '<') {\n            // start of another tag (ignore the previous, incomplete one)\n            startNewTag();\n        }\n        else if (quoteRe.test(char)) {\n            // \"Parse error\" characters that, according to the spec, should be\n            // appended to the attribute name, but we'll treat these characters\n            // as not forming a real HTML tag\n            resetToDataState();\n        }\n        else {\n            // Any other character, start a new attribute in the current tag\n            state = 5 /* AttributeName */;\n        }\n    }\n    // https://www.w3.org/TR/html51/syntax.html#before-attribute-value-state\n    function stateBeforeAttributeValue(char) {\n        if (whitespaceRe.test(char)) {\n            // ignore the character - continue reading\n        }\n        else if (char === \"\\\"\") {\n            state = 8 /* AttributeValueDoubleQuoted */;\n        }\n        else if (char === \"'\") {\n            state = 9 /* AttributeValueSingleQuoted */;\n        }\n        else if (/[>=`]/.test(char)) {\n            // Invalid chars after an '=' for an attribute value, don't count\n            // the current tag as an HTML tag\n            resetToDataState();\n        }\n        else if (char === '<') {\n            // start of another tag (ignore the previous, incomplete one)\n            startNewTag();\n        }\n        else {\n            // Any other character, consider it an unquoted attribute value\n            state = 10 /* AttributeValueUnquoted */;\n        }\n    }\n    // https://www.w3.org/TR/html51/syntax.html#attribute-value-double-quoted-state\n    function stateAttributeValueDoubleQuoted(char) {\n        if (char === \"\\\"\") {\n            // end the current double-quoted attribute\n            state = 11 /* AfterAttributeValueQuoted */;\n        }\n        else {\n            // consume the character as part of the double-quoted attribute value\n        }\n    }\n    // https://www.w3.org/TR/html51/syntax.html#attribute-value-single-quoted-state\n    function stateAttributeValueSingleQuoted(char) {\n        if (char === \"'\") {\n            // end the current single-quoted attribute\n            state = 11 /* AfterAttributeValueQuoted */;\n        }\n        else {\n            // consume the character as part of the double-quoted attribute value\n        }\n    }\n    // https://www.w3.org/TR/html51/syntax.html#attribute-value-unquoted-state\n    function stateAttributeValueUnquoted(char) {\n        if (whitespaceRe.test(char)) {\n            state = 4 /* BeforeAttributeName */;\n        }\n        else if (char === '>') {\n            emitTagAndPreviousTextNode();\n        }\n        else if (char === '<') {\n            // start of another tag (ignore the previous, incomplete one)\n            startNewTag();\n        }\n        else {\n            // Any other character, treat it as part of the attribute value\n        }\n    }\n    // https://www.w3.org/TR/html51/syntax.html#after-attribute-value-quoted-state\n    function stateAfterAttributeValueQuoted(char) {\n        if (whitespaceRe.test(char)) {\n            state = 4 /* BeforeAttributeName */;\n        }\n        else if (char === '/') {\n            state = 12 /* SelfClosingStartTag */;\n        }\n        else if (char === '>') {\n            emitTagAndPreviousTextNode();\n        }\n        else if (char === '<') {\n            // start of another tag (ignore the previous, incomplete one)\n            startNewTag();\n        }\n        else {\n            // Any other character, \"parse error\". Spec says to switch to the\n            // BeforeAttributeState and re-consume the character, as it may be\n            // the start of a new attribute name\n            state = 4 /* BeforeAttributeName */;\n            reconsumeCurrentCharacter();\n        }\n    }\n    // A '/' has just been read in the current tag (presumably for '/>'), and\n    // this handles the next character\n    // https://www.w3.org/TR/html51/syntax.html#self-closing-start-tag-state\n    function stateSelfClosingStartTag(char) {\n        if (char === '>') {\n            currentTag = new CurrentTag(__assign(__assign({}, currentTag), { isClosing: true }));\n            emitTagAndPreviousTextNode(); // resets to Data state as well\n        }\n        else {\n            state = 4 /* BeforeAttributeName */;\n        }\n    }\n    // https://www.w3.org/TR/html51/syntax.html#markup-declaration-open-state\n    // (HTML Comments or !DOCTYPE)\n    function stateMarkupDeclarationOpen(char) {\n        if (html.substr(charIdx, 2) === '--') {\n            // html comment\n            charIdx += 2; // \"consume\" characters\n            currentTag = new CurrentTag(__assign(__assign({}, currentTag), { type: 'comment' }));\n            state = 14 /* CommentStart */;\n        }\n        else if (html.substr(charIdx, 7).toUpperCase() === 'DOCTYPE') {\n            charIdx += 7; // \"consume\" characters\n            currentTag = new CurrentTag(__assign(__assign({}, currentTag), { type: 'doctype' }));\n            state = 20 /* Doctype */;\n        }\n        else {\n            // At this point, the spec specifies that the state machine should\n            // enter the \"bogus comment\" state, in which case any character(s)\n            // after the '<!' that were read should become an HTML comment up\n            // until the first '>' that is read (or EOF). Instead, we'll assume\n            // that a user just typed '<!' as part of text data\n            resetToDataState();\n        }\n    }\n    // Handles after the sequence '<!--' has been read\n    // https://www.w3.org/TR/html51/syntax.html#comment-start-state\n    function stateCommentStart(char) {\n        if (char === '-') {\n            // We've read the sequence '<!---' at this point (3 dashes)\n            state = 15 /* CommentStartDash */;\n        }\n        else if (char === '>') {\n            // At this point, we'll assume the comment wasn't a real comment\n            // so we'll just emit it as data. We basically read the sequence\n            // '<!-->'\n            resetToDataState();\n        }\n        else {\n            // Any other char, take it as part of the comment\n            state = 16 /* Comment */;\n        }\n    }\n    // We've read the sequence '<!---' at this point (3 dashes)\n    // https://www.w3.org/TR/html51/syntax.html#comment-start-dash-state\n    function stateCommentStartDash(char) {\n        if (char === '-') {\n            // We've read '<!----' (4 dashes) at this point\n            state = 18 /* CommentEnd */;\n        }\n        else if (char === '>') {\n            // At this point, we'll assume the comment wasn't a real comment\n            // so we'll just emit it as data. We basically read the sequence\n            // '<!--->'\n            resetToDataState();\n        }\n        else {\n            // Anything else, take it as a valid comment\n            state = 16 /* Comment */;\n        }\n    }\n    // Currently reading the comment's text (data)\n    // https://www.w3.org/TR/html51/syntax.html#comment-state\n    function stateComment(char) {\n        if (char === '-') {\n            state = 17 /* CommentEndDash */;\n        }\n        else {\n            // Any other character, stay in the Comment state\n        }\n    }\n    // When we we've read the first dash inside a comment, it may signal the\n    // end of the comment if we read another dash\n    // https://www.w3.org/TR/html51/syntax.html#comment-end-dash-state\n    function stateCommentEndDash(char) {\n        if (char === '-') {\n            state = 18 /* CommentEnd */;\n        }\n        else {\n            // Wasn't a dash, must still be part of the comment\n            state = 16 /* Comment */;\n        }\n    }\n    // After we've read two dashes inside a comment, it may signal the end of\n    // the comment if we then read a '>' char\n    // https://www.w3.org/TR/html51/syntax.html#comment-end-state\n    function stateCommentEnd(char) {\n        if (char === '>') {\n            emitTagAndPreviousTextNode();\n        }\n        else if (char === '!') {\n            state = 19 /* CommentEndBang */;\n        }\n        else if (char === '-') {\n            // A 3rd '-' has been read: stay in the CommentEnd state\n        }\n        else {\n            // Anything else, switch back to the comment state since we didn't\n            // read the full \"end comment\" sequence (i.e. '-->')\n            state = 16 /* Comment */;\n        }\n    }\n    // We've read the sequence '--!' inside of a comment\n    // https://www.w3.org/TR/html51/syntax.html#comment-end-bang-state\n    function stateCommentEndBang(char) {\n        if (char === '-') {\n            // We read the sequence '--!-' inside of a comment. The last dash\n            // could signify that the comment is going to close\n            state = 17 /* CommentEndDash */;\n        }\n        else if (char === '>') {\n            // End of comment with the sequence '--!>'\n            emitTagAndPreviousTextNode();\n        }\n        else {\n            // The '--!' was not followed by a '>', continue reading the\n            // comment's text\n            state = 16 /* Comment */;\n        }\n    }\n    /**\n     * For DOCTYPES in particular, we don't care about the attributes. Just\n     * advance to the '>' character and emit the tag, unless we find a '<'\n     * character in which case we'll start a new tag.\n     *\n     * Example doctype tag:\n     *    <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n     *\n     * Actual spec: https://www.w3.org/TR/html51/syntax.html#doctype-state\n     */\n    function stateDoctype(char) {\n        if (char === '>') {\n            emitTagAndPreviousTextNode();\n        }\n        else if (char === '<') {\n            startNewTag();\n        }\n        else {\n            // stay in the Doctype state\n        }\n    }\n    /**\n     * Resets the state back to the Data state, and removes the current tag.\n     *\n     * We'll generally run this function whenever a \"parse error\" is\n     * encountered, where the current tag that is being read no longer looks\n     * like a real HTML tag.\n     */\n    function resetToDataState() {\n        state = 0 /* Data */;\n        currentTag = noCurrentTag;\n    }\n    /**\n     * Starts a new HTML tag at the current index, ignoring any previous HTML\n     * tag that was being read.\n     *\n     * We'll generally run this function whenever we read a new '<' character,\n     * including when we read a '<' character inside of an HTML tag that we were\n     * previously reading.\n     */\n    function startNewTag() {\n        state = 1 /* TagOpen */;\n        currentTag = new CurrentTag({ idx: charIdx });\n    }\n    /**\n     * Once we've decided to emit an open tag, that means we can also emit the\n     * text node before it.\n     */\n    function emitTagAndPreviousTextNode() {\n        var textBeforeTag = html.slice(currentDataIdx, currentTag.idx);\n        if (textBeforeTag) {\n            // the html tag was the first element in the html string, or two\n            // tags next to each other, in which case we should not emit a text\n            // node\n            onText(textBeforeTag, currentDataIdx);\n        }\n        if (currentTag.type === 'comment') {\n            onComment(currentTag.idx);\n        }\n        else if (currentTag.type === 'doctype') {\n            onDoctype(currentTag.idx);\n        }\n        else {\n            if (currentTag.isOpening) {\n                onOpenTag(currentTag.name, currentTag.idx);\n            }\n            if (currentTag.isClosing) {\n                // note: self-closing tags will emit both opening and closing\n                onCloseTag(currentTag.name, currentTag.idx);\n            }\n        }\n        // Since we just emitted a tag, reset to the data state for the next char\n        resetToDataState();\n        currentDataIdx = charIdx + 1;\n    }\n    function emitText() {\n        var text = html.slice(currentDataIdx, charIdx);\n        onText(text, currentDataIdx);\n        currentDataIdx = charIdx + 1;\n    }\n    /**\n     * Captures the tag name from the start of the tag to the current character\n     * index, and converts it to lower case\n     */\n    function captureTagName() {\n        var startIdx = currentTag.idx + (currentTag.isClosing ? 2 : 1);\n        return html.slice(startIdx, charIdx).toLowerCase();\n    }\n    /**\n     * Causes the main loop to re-consume the current character, such as after\n     * encountering a \"parse error\" that changed state and needs to reconsume\n     * the same character in that new state.\n     */\n    function reconsumeCurrentCharacter() {\n        charIdx--;\n    }\n}\nvar CurrentTag = /** @class */ (function () {\n    function CurrentTag(cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        this.idx = cfg.idx !== undefined ? cfg.idx : -1;\n        this.type = cfg.type || 'tag';\n        this.name = cfg.name || '';\n        this.isOpening = !!cfg.isOpening;\n        this.isClosing = !!cfg.isClosing;\n    }\n    return CurrentTag;\n}());\n//# sourceMappingURL=parse-html.js.map","import { version } from './version';\nimport { defaults, remove, splitAndCapture } from './utils';\nimport { AnchorTagBuilder } from './anchor-tag-builder';\nimport { Match } from './match/match';\nimport { EmailMatch } from './match/email-match';\nimport { HashtagMatch } from './match/hashtag-match';\nimport { MentionMatch } from './match/mention-match';\nimport { PhoneMatch } from './match/phone-match';\nimport { UrlMatch } from './match/url-match';\nimport { Matcher } from './matcher/matcher';\nimport { HtmlTag } from './html-tag';\nimport { EmailMatcher } from './matcher/email-matcher';\nimport { UrlMatcher } from './matcher/url-matcher';\nimport { HashtagMatcher, hashtagServices } from './matcher/hashtag-matcher';\nimport { PhoneMatcher } from './matcher/phone-matcher';\nimport { MentionMatcher } from './matcher/mention-matcher';\nimport { parseHtml } from './htmlParser/parse-html';\n/**\n * @class Autolinker\n * @extends Object\n *\n * Utility class used to process a given string of text, and wrap the matches in\n * the appropriate anchor (&lt;a&gt;) tags to turn them into links.\n *\n * Any of the configuration options may be provided in an Object provided\n * to the Autolinker constructor, which will configure how the {@link #link link()}\n * method will process the links.\n *\n * For example:\n *\n *     var autolinker = new Autolinker( {\n *         newWindow : false,\n *         truncate  : 30\n *     } );\n *\n *     var html = autolinker.link( \"Joe went to www.yahoo.com\" );\n *     // produces: 'Joe went to <a href=\"http://www.yahoo.com\">yahoo.com</a>'\n *\n *\n * The {@link #static-link static link()} method may also be used to inline\n * options into a single call, which may be more convenient for one-off uses.\n * For example:\n *\n *     var html = Autolinker.link( \"Joe went to www.yahoo.com\", {\n *         newWindow : false,\n *         truncate  : 30\n *     } );\n *     // produces: 'Joe went to <a href=\"http://www.yahoo.com\">yahoo.com</a>'\n *\n *\n * ## Custom Replacements of Links\n *\n * If the configuration options do not provide enough flexibility, a {@link #replaceFn}\n * may be provided to fully customize the output of Autolinker. This function is\n * called once for each URL/Email/Phone#/Hashtag/Mention (Twitter, Instagram, Soundcloud)\n * match that is encountered.\n *\n * For example:\n *\n *     var input = \"...\";  // string with URLs, Email Addresses, Phone #s, Hashtags, and Mentions (Twitter, Instagram, Soundcloud)\n *\n *     var linkedText = Autolinker.link( input, {\n *         replaceFn : function( match ) {\n *             console.log( \"href = \", match.getAnchorHref() );\n *             console.log( \"text = \", match.getAnchorText() );\n *\n *             switch( match.getType() ) {\n *                 case 'url' :\n *                     console.log( \"url: \", match.getUrl() );\n *\n *                     if( match.getUrl().indexOf( 'mysite.com' ) === -1 ) {\n *                         var tag = match.buildTag();  // returns an `Autolinker.HtmlTag` instance, which provides mutator methods for easy changes\n *                         tag.setAttr( 'rel', 'nofollow' );\n *                         tag.addClass( 'external-link' );\n *\n *                         return tag;\n *\n *                     } else {\n *                         return true;  // let Autolinker perform its normal anchor tag replacement\n *                     }\n *\n *                 case 'email' :\n *                     var email = match.getEmail();\n *                     console.log( \"email: \", email );\n *\n *                     if( email === \"my@own.address\" ) {\n *                         return false;  // don't auto-link this particular email address; leave as-is\n *                     } else {\n *                         return;  // no return value will have Autolinker perform its normal anchor tag replacement (same as returning `true`)\n *                     }\n *\n *                 case 'phone' :\n *                     var phoneNumber = match.getPhoneNumber();\n *                     console.log( phoneNumber );\n *\n *                     return '<a href=\"http://newplace.to.link.phone.numbers.to/\">' + phoneNumber + '</a>';\n *\n *                 case 'hashtag' :\n *                     var hashtag = match.getHashtag();\n *                     console.log( hashtag );\n *\n *                     return '<a href=\"http://newplace.to.link.hashtag.handles.to/\">' + hashtag + '</a>';\n *\n *                 case 'mention' :\n *                     var mention = match.getMention();\n *                     console.log( mention );\n *\n *                     return '<a href=\"http://newplace.to.link.mention.to/\">' + mention + '</a>';\n *             }\n *         }\n *     } );\n *\n *\n * The function may return the following values:\n *\n * - `true` (Boolean): Allow Autolinker to replace the match as it normally\n *   would.\n * - `false` (Boolean): Do not replace the current match at all - leave as-is.\n * - Any String: If a string is returned from the function, the string will be\n *   used directly as the replacement HTML for the match.\n * - An {@link Autolinker.HtmlTag} instance, which can be used to build/modify\n *   an HTML tag before writing out its HTML text.\n */\nvar Autolinker = /** @class */ (function () {\n    /**\n     * @method constructor\n     * @param {Object} [cfg] The configuration options for the Autolinker instance,\n     *   specified in an Object (map).\n     */\n    function Autolinker(cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        /**\n         * The Autolinker version number exposed on the instance itself.\n         *\n         * Ex: 0.25.1\n         */\n        this.version = Autolinker.version;\n        /**\n         * @cfg {Boolean/Object} [urls]\n         *\n         * `true` if URLs should be automatically linked, `false` if they should not\n         * be. Defaults to `true`.\n         *\n         * Examples:\n         *\n         *     urls: true\n         *\n         *     // or\n         *\n         *     urls: {\n         *         schemeMatches : true,\n         *         wwwMatches    : true,\n         *         tldMatches    : true\n         *     }\n         *\n         * As shown above, this option also accepts an Object form with 3 properties\n         * to allow for more customization of what exactly gets linked. All default\n         * to `true`:\n         *\n         * @cfg {Boolean} [urls.schemeMatches] `true` to match URLs found prefixed\n         *   with a scheme, i.e. `http://google.com`, or `other+scheme://google.com`,\n         *   `false` to prevent these types of matches.\n         * @cfg {Boolean} [urls.wwwMatches] `true` to match urls found prefixed with\n         *   `'www.'`, i.e. `www.google.com`. `false` to prevent these types of\n         *   matches. Note that if the URL had a prefixed scheme, and\n         *   `schemeMatches` is true, it will still be linked.\n         * @cfg {Boolean} [urls.tldMatches] `true` to match URLs with known top\n         *   level domains (.com, .net, etc.) that are not prefixed with a scheme or\n         *   `'www.'`. This option attempts to match anything that looks like a URL\n         *   in the given text. Ex: `google.com`, `asdf.org/?page=1`, etc. `false`\n         *   to prevent these types of matches.\n         */\n        this.urls = {}; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [email=true]\n         *\n         * `true` if email addresses should be automatically linked, `false` if they\n         * should not be.\n         */\n        this.email = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [phone=true]\n         *\n         * `true` if Phone numbers (\"(555)555-5555\") should be automatically linked,\n         * `false` if they should not be.\n         */\n        this.phone = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean/String} [hashtag=false]\n         *\n         * A string for the service name to have hashtags (ex: \"#myHashtag\")\n         * auto-linked to. The currently-supported values are:\n         *\n         * - 'twitter'\n         * - 'facebook'\n         * - 'instagram'\n         *\n         * Pass `false` to skip auto-linking of hashtags.\n         */\n        this.hashtag = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String/Boolean} [mention=false]\n         *\n         * A string for the service name to have mentions (ex: \"@myuser\")\n         * auto-linked to. The currently supported values are:\n         *\n         * - 'twitter'\n         * - 'instagram'\n         * - 'soundcloud'\n         *\n         * Defaults to `false` to skip auto-linking of mentions.\n         */\n        this.mention = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [newWindow=true]\n         *\n         * `true` if the links should open in a new window, `false` otherwise.\n         */\n        this.newWindow = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean/Object} [stripPrefix=true]\n         *\n         * `true` if 'http://' (or 'https://') and/or the 'www.' should be stripped\n         * from the beginning of URL links' text, `false` otherwise. Defaults to\n         * `true`.\n         *\n         * Examples:\n         *\n         *     stripPrefix: true\n         *\n         *     // or\n         *\n         *     stripPrefix: {\n         *         scheme : true,\n         *         www    : true\n         *     }\n         *\n         * As shown above, this option also accepts an Object form with 2 properties\n         * to allow for more customization of what exactly is prevented from being\n         * displayed. Both default to `true`:\n         *\n         * @cfg {Boolean} [stripPrefix.scheme] `true` to prevent the scheme part of\n         *   a URL match from being displayed to the user. Example:\n         *   `'http://google.com'` will be displayed as `'google.com'`. `false` to\n         *   not strip the scheme. NOTE: Only an `'http://'` or `'https://'` scheme\n         *   will be removed, so as not to remove a potentially dangerous scheme\n         *   (such as `'file://'` or `'javascript:'`)\n         * @cfg {Boolean} [stripPrefix.www] www (Boolean): `true` to prevent the\n         *   `'www.'` part of a URL match from being displayed to the user. Ex:\n         *   `'www.google.com'` will be displayed as `'google.com'`. `false` to not\n         *   strip the `'www'`.\n         */\n        this.stripPrefix = {\n            scheme: true,\n            www: true,\n        }; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [stripTrailingSlash=true]\n         *\n         * `true` to remove the trailing slash from URL matches, `false` to keep\n         *  the trailing slash.\n         *\n         *  Example when `true`: `http://google.com/` will be displayed as\n         *  `http://google.com`.\n         */\n        this.stripTrailingSlash = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [decodePercentEncoding=true]\n         *\n         * `true` to decode percent-encoded characters in URL matches, `false` to keep\n         *  the percent-encoded characters.\n         *\n         *  Example when `true`: `https://en.wikipedia.org/wiki/San_Jos%C3%A9` will\n         *  be displayed as `https://en.wikipedia.org/wiki/San_José`.\n         */\n        this.decodePercentEncoding = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Number/Object} [truncate=0]\n         *\n         * ## Number Form\n         *\n         * A number for how many characters matched text should be truncated to\n         * inside the text of a link. If the matched text is over this number of\n         * characters, it will be truncated to this length by adding a two period\n         * ellipsis ('..') to the end of the string.\n         *\n         * For example: A url like 'http://www.yahoo.com/some/long/path/to/a/file'\n         * truncated to 25 characters might look something like this:\n         * 'yahoo.com/some/long/pat..'\n         *\n         * Example Usage:\n         *\n         *     truncate: 25\n         *\n         *\n         *  Defaults to `0` for \"no truncation.\"\n         *\n         *\n         * ## Object Form\n         *\n         * An Object may also be provided with two properties: `length` (Number) and\n         * `location` (String). `location` may be one of the following: 'end'\n         * (default), 'middle', or 'smart'.\n         *\n         * Example Usage:\n         *\n         *     truncate: { length: 25, location: 'middle' }\n         *\n         * @cfg {Number} [truncate.length=0] How many characters to allow before\n         *   truncation will occur. Defaults to `0` for \"no truncation.\"\n         * @cfg {\"end\"/\"middle\"/\"smart\"} [truncate.location=\"end\"]\n         *\n         * - 'end' (default): will truncate up to the number of characters, and then\n         *   add an ellipsis at the end. Ex: 'yahoo.com/some/long/pat..'\n         * - 'middle': will truncate and add the ellipsis in the middle. Ex:\n         *   'yahoo.com/s..th/to/a/file'\n         * - 'smart': for URLs where the algorithm attempts to strip out unnecessary\n         *   parts first (such as the 'www.', then URL scheme, hash, etc.),\n         *   attempting to make the URL human-readable before looking for a good\n         *   point to insert the ellipsis if it is still too long. Ex:\n         *   'yahoo.com/some..to/a/file'. For more details, see\n         *   {@link Autolinker.truncate.TruncateSmart}.\n         */\n        this.truncate = {\n            length: 0,\n            location: 'end',\n        }; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String} className\n         *\n         * A CSS class name to add to the generated links. This class will be added\n         * to all links, as well as this class plus match suffixes for styling\n         * url/email/phone/hashtag/mention links differently.\n         *\n         * For example, if this config is provided as \"myLink\", then:\n         *\n         * - URL links will have the CSS classes: \"myLink myLink-url\"\n         * - Email links will have the CSS classes: \"myLink myLink-email\", and\n         * - Phone links will have the CSS classes: \"myLink myLink-phone\"\n         * - Hashtag links will have the CSS classes: \"myLink myLink-hashtag\"\n         * - Mention links will have the CSS classes: \"myLink myLink-mention myLink-[type]\"\n         *   where [type] is either \"instagram\", \"twitter\" or \"soundcloud\"\n         */\n        this.className = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Function} replaceFn\n         *\n         * A function to individually process each match found in the input string.\n         *\n         * See the class's description for usage.\n         *\n         * The `replaceFn` can be called with a different context object (`this`\n         * reference) using the {@link #context} cfg.\n         *\n         * This function is called with the following parameter:\n         *\n         * @cfg {Autolinker.match.Match} replaceFn.match The Match instance which\n         *   can be used to retrieve information about the match that the `replaceFn`\n         *   is currently processing. See {@link Autolinker.match.Match} subclasses\n         *   for details.\n         */\n        this.replaceFn = null; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Object} context\n         *\n         * The context object (`this` reference) to call the `replaceFn` with.\n         *\n         * Defaults to this Autolinker instance.\n         */\n        this.context = undefined; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [sanitizeHtml=false]\n         *\n         * `true` to HTML-encode the start and end brackets of existing HTML tags found\n         * in the input string. This will escape `<` and `>` characters to `&lt;` and\n         * `&gt;`, respectively.\n         *\n         * Setting this to `true` will prevent XSS (Cross-site Scripting) attacks,\n         * but will remove the significance of existing HTML tags in the input string. If\n         * you would like to maintain the significance of existing HTML tags while also\n         * making the output HTML string safe, leave this option as `false` and use a\n         * tool like https://github.com/cure53/DOMPurify (or others) on the input string\n         * before running Autolinker.\n         */\n        this.sanitizeHtml = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @private\n         * @property {Autolinker.matcher.Matcher[]} matchers\n         *\n         * The {@link Autolinker.matcher.Matcher} instances for this Autolinker\n         * instance.\n         *\n         * This is lazily created in {@link #getMatchers}.\n         */\n        this.matchers = null;\n        /**\n         * @private\n         * @property {Autolinker.AnchorTagBuilder} tagBuilder\n         *\n         * The AnchorTagBuilder instance used to build match replacement anchor tags.\n         * Note: this is lazily instantiated in the {@link #getTagBuilder} method.\n         */\n        this.tagBuilder = null;\n        // Note: when `this.something` is used in the rhs of these assignments,\n        //       it refers to the default values set above the constructor\n        this.urls = this.normalizeUrlsCfg(cfg.urls);\n        this.email = typeof cfg.email === 'boolean' ? cfg.email : this.email;\n        this.phone = typeof cfg.phone === 'boolean' ? cfg.phone : this.phone;\n        this.hashtag = cfg.hashtag || this.hashtag;\n        this.mention = cfg.mention || this.mention;\n        this.newWindow = typeof cfg.newWindow === 'boolean' ? cfg.newWindow : this.newWindow;\n        this.stripPrefix = this.normalizeStripPrefixCfg(cfg.stripPrefix);\n        this.stripTrailingSlash =\n            typeof cfg.stripTrailingSlash === 'boolean'\n                ? cfg.stripTrailingSlash\n                : this.stripTrailingSlash;\n        this.decodePercentEncoding =\n            typeof cfg.decodePercentEncoding === 'boolean'\n                ? cfg.decodePercentEncoding\n                : this.decodePercentEncoding;\n        this.sanitizeHtml = cfg.sanitizeHtml || false;\n        // Validate the value of the `mention` cfg\n        var mention = this.mention;\n        if (mention !== false &&\n            ['twitter', 'instagram', 'soundcloud', 'tiktok'].indexOf(mention) === -1) {\n            throw new Error(\"invalid `mention` cfg '\".concat(mention, \"' - see docs\"));\n        }\n        // Validate the value of the `hashtag` cfg\n        var hashtag = this.hashtag;\n        if (hashtag !== false && hashtagServices.indexOf(hashtag) === -1) {\n            throw new Error(\"invalid `hashtag` cfg '\".concat(hashtag, \"' - see docs\"));\n        }\n        this.truncate = this.normalizeTruncateCfg(cfg.truncate);\n        this.className = cfg.className || this.className;\n        this.replaceFn = cfg.replaceFn || this.replaceFn;\n        this.context = cfg.context || this;\n    }\n    /**\n     * Automatically links URLs, Email addresses, Phone Numbers, Twitter handles,\n     * Hashtags, and Mentions found in the given chunk of HTML. Does not link URLs\n     * found within HTML tags.\n     *\n     * For instance, if given the text: `You should go to http://www.yahoo.com`,\n     * then the result will be `You should go to &lt;a href=\"http://www.yahoo.com\"&gt;http://www.yahoo.com&lt;/a&gt;`\n     *\n     * Example:\n     *\n     *     var linkedText = Autolinker.link( \"Go to google.com\", { newWindow: false } );\n     *     // Produces: \"Go to <a href=\"http://google.com\">google.com</a>\"\n     *\n     * @static\n     * @param {String} textOrHtml The HTML or text to find matches within (depending\n     *   on if the {@link #urls}, {@link #email}, {@link #phone}, {@link #mention},\n     *   {@link #hashtag}, and {@link #mention} options are enabled).\n     * @param {Object} [options] Any of the configuration options for the Autolinker\n     *   class, specified in an Object (map). See the class description for an\n     *   example call.\n     * @return {String} The HTML text, with matches automatically linked.\n     */\n    Autolinker.link = function (textOrHtml, options) {\n        var autolinker = new Autolinker(options);\n        return autolinker.link(textOrHtml);\n    };\n    /**\n     * Parses the input `textOrHtml` looking for URLs, email addresses, phone\n     * numbers, username handles, and hashtags (depending on the configuration\n     * of the Autolinker instance), and returns an array of {@link Autolinker.match.Match}\n     * objects describing those matches (without making any replacements).\n     *\n     * Note that if parsing multiple pieces of text, it is slightly more efficient\n     * to create an Autolinker instance, and use the instance-level {@link #parse}\n     * method.\n     *\n     * Example:\n     *\n     *     var matches = Autolinker.parse( \"Hello google.com, I am asdf@asdf.com\", {\n     *         urls: true,\n     *         email: true\n     *     } );\n     *\n     *     console.log( matches.length );           // 2\n     *     console.log( matches[ 0 ].getType() );   // 'url'\n     *     console.log( matches[ 0 ].getUrl() );    // 'google.com'\n     *     console.log( matches[ 1 ].getType() );   // 'email'\n     *     console.log( matches[ 1 ].getEmail() );  // 'asdf@asdf.com'\n     *\n     * @static\n     * @param {String} textOrHtml The HTML or text to find matches within\n     *   (depending on if the {@link #urls}, {@link #email}, {@link #phone},\n     *   {@link #hashtag}, and {@link #mention} options are enabled).\n     * @param {Object} [options] Any of the configuration options for the Autolinker\n     *   class, specified in an Object (map). See the class description for an\n     *   example call.\n     * @return {Autolinker.match.Match[]} The array of Matches found in the\n     *   given input `textOrHtml`.\n     */\n    Autolinker.parse = function (textOrHtml, options) {\n        var autolinker = new Autolinker(options);\n        return autolinker.parse(textOrHtml);\n    };\n    /**\n     * Normalizes the {@link #urls} config into an Object with 3 properties:\n     * `schemeMatches`, `wwwMatches`, and `tldMatches`, all Booleans.\n     *\n     * See {@link #urls} config for details.\n     *\n     * @private\n     * @param {Boolean/Object} urls\n     * @return {Object}\n     */\n    Autolinker.prototype.normalizeUrlsCfg = function (urls) {\n        if (urls == null)\n            urls = true; // default to `true`\n        if (typeof urls === 'boolean') {\n            return { schemeMatches: urls, wwwMatches: urls, tldMatches: urls };\n        }\n        else {\n            // object form\n            return {\n                schemeMatches: typeof urls.schemeMatches === 'boolean' ? urls.schemeMatches : true,\n                wwwMatches: typeof urls.wwwMatches === 'boolean' ? urls.wwwMatches : true,\n                tldMatches: typeof urls.tldMatches === 'boolean' ? urls.tldMatches : true,\n            };\n        }\n    };\n    /**\n     * Normalizes the {@link #stripPrefix} config into an Object with 2\n     * properties: `scheme`, and `www` - both Booleans.\n     *\n     * See {@link #stripPrefix} config for details.\n     *\n     * @private\n     * @param {Boolean/Object} stripPrefix\n     * @return {Object}\n     */\n    Autolinker.prototype.normalizeStripPrefixCfg = function (stripPrefix) {\n        if (stripPrefix == null)\n            stripPrefix = true; // default to `true`\n        if (typeof stripPrefix === 'boolean') {\n            return { scheme: stripPrefix, www: stripPrefix };\n        }\n        else {\n            // object form\n            return {\n                scheme: typeof stripPrefix.scheme === 'boolean' ? stripPrefix.scheme : true,\n                www: typeof stripPrefix.www === 'boolean' ? stripPrefix.www : true,\n            };\n        }\n    };\n    /**\n     * Normalizes the {@link #truncate} config into an Object with 2 properties:\n     * `length` (Number), and `location` (String).\n     *\n     * See {@link #truncate} config for details.\n     *\n     * @private\n     * @param {Number/Object} truncate\n     * @return {Object}\n     */\n    Autolinker.prototype.normalizeTruncateCfg = function (truncate) {\n        if (typeof truncate === 'number') {\n            return { length: truncate, location: 'end' };\n        }\n        else {\n            // object, or undefined/null\n            return defaults(truncate || {}, {\n                length: Number.POSITIVE_INFINITY,\n                location: 'end',\n            });\n        }\n    };\n    /**\n     * Parses the input `textOrHtml` looking for URLs, email addresses, phone\n     * numbers, username handles, and hashtags (depending on the configuration\n     * of the Autolinker instance), and returns an array of {@link Autolinker.match.Match}\n     * objects describing those matches (without making any replacements).\n     *\n     * This method is used by the {@link #link} method, but can also be used to\n     * simply do parsing of the input in order to discover what kinds of links\n     * there are and how many.\n     *\n     * Example usage:\n     *\n     *     var autolinker = new Autolinker( {\n     *         urls: true,\n     *         email: true\n     *     } );\n     *\n     *     var matches = autolinker.parse( \"Hello google.com, I am asdf@asdf.com\" );\n     *\n     *     console.log( matches.length );           // 2\n     *     console.log( matches[ 0 ].getType() );   // 'url'\n     *     console.log( matches[ 0 ].getUrl() );    // 'google.com'\n     *     console.log( matches[ 1 ].getType() );   // 'email'\n     *     console.log( matches[ 1 ].getEmail() );  // 'asdf@asdf.com'\n     *\n     * @param {String} textOrHtml The HTML or text to find matches within\n     *   (depending on if the {@link #urls}, {@link #email}, {@link #phone},\n     *   {@link #hashtag}, and {@link #mention} options are enabled).\n     * @return {Autolinker.match.Match[]} The array of Matches found in the\n     *   given input `textOrHtml`.\n     */\n    Autolinker.prototype.parse = function (textOrHtml) {\n        var _this = this;\n        var skipTagNames = ['a', 'style', 'script'], skipTagsStackCount = 0, // used to only Autolink text outside of anchor/script/style tags. We don't want to autolink something that is already linked inside of an <a> tag, for instance\n        matches = [];\n        // Find all matches within the `textOrHtml` (but not matches that are\n        // already nested within <a>, <style> and <script> tags)\n        parseHtml(textOrHtml, {\n            onOpenTag: function (tagName) {\n                if (skipTagNames.indexOf(tagName) >= 0) {\n                    skipTagsStackCount++;\n                }\n            },\n            onText: function (text, offset) {\n                // Only process text nodes that are not within an <a>, <style> or <script> tag\n                if (skipTagsStackCount === 0) {\n                    // \"Walk around\" common HTML entities. An '&nbsp;' (for example)\n                    // could be at the end of a URL, but we don't want to\n                    // include the trailing '&' in the URL. See issue #76\n                    // TODO: Handle HTML entities separately in parseHtml() and\n                    // don't emit them as \"text\" except for &amp; entities\n                    var htmlCharacterEntitiesRegex = /(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/gi;\n                    var textSplit = splitAndCapture(text, htmlCharacterEntitiesRegex);\n                    var currentOffset_1 = offset;\n                    textSplit.forEach(function (splitText, i) {\n                        // even number matches are text, odd numbers are html entities\n                        if (i % 2 === 0) {\n                            var textNodeMatches = _this.parseText(splitText, currentOffset_1);\n                            matches.push.apply(matches, textNodeMatches);\n                        }\n                        currentOffset_1 += splitText.length;\n                    });\n                }\n            },\n            onCloseTag: function (tagName) {\n                if (skipTagNames.indexOf(tagName) >= 0) {\n                    skipTagsStackCount = Math.max(skipTagsStackCount - 1, 0); // attempt to handle extraneous </a> tags by making sure the stack count never goes below 0\n                }\n            },\n            onComment: function (offset) { },\n            onDoctype: function (offset) { }, // no need to process doctype nodes\n        });\n        // After we have found all matches, remove subsequent matches that\n        // overlap with a previous match. This can happen for instance with URLs,\n        // where the url 'google.com/#link' would match '#link' as a hashtag.\n        matches = this.compactMatches(matches);\n        // And finally, remove matches for match types that have been turned\n        // off. We needed to have all match types turned on initially so that\n        // things like hashtags could be filtered out if they were really just\n        // part of a URL match (for instance, as a named anchor).\n        matches = this.removeUnwantedMatches(matches);\n        return matches;\n    };\n    /**\n     * After we have found all matches, we need to remove matches that overlap\n     * with a previous match. This can happen for instance with URLs, where the\n     * url 'google.com/#link' would match '#link' as a hashtag. Because the\n     * '#link' part is contained in a larger match that comes before the HashTag\n     * match, we'll remove the HashTag match.\n     *\n     * @private\n     * @param {Autolinker.match.Match[]} matches\n     * @return {Autolinker.match.Match[]}\n     */\n    Autolinker.prototype.compactMatches = function (matches) {\n        // First, the matches need to be sorted in order of offset\n        matches.sort(function (a, b) {\n            return a.getOffset() - b.getOffset();\n        });\n        var i = 0;\n        while (i < matches.length - 1) {\n            var match = matches[i], offset = match.getOffset(), matchedTextLength = match.getMatchedText().length, endIdx = offset + matchedTextLength;\n            if (i + 1 < matches.length) {\n                // Remove subsequent matches that equal offset with current match\n                if (matches[i + 1].getOffset() === offset) {\n                    var removeIdx = matches[i + 1].getMatchedText().length > matchedTextLength ? i : i + 1;\n                    matches.splice(removeIdx, 1);\n                    continue;\n                }\n                // Remove subsequent matches that overlap with the current match\n                if (matches[i + 1].getOffset() < endIdx) {\n                    matches.splice(i + 1, 1);\n                    continue;\n                }\n            }\n            i++;\n        }\n        return matches;\n    };\n    /**\n     * Removes matches for matchers that were turned off in the options. For\n     * example, if {@link #hashtag hashtags} were not to be matched, we'll\n     * remove them from the `matches` array here.\n     *\n     * Note: we *must* use all Matchers on the input string, and then filter\n     * them out later. For example, if the options were `{ url: false, hashtag: true }`,\n     * we wouldn't want to match the text '#link' as a HashTag inside of the text\n     * 'google.com/#link'. The way the algorithm works is that we match the full\n     * URL first (which prevents the accidental HashTag match), and then we'll\n     * simply throw away the URL match.\n     *\n     * @private\n     * @param {Autolinker.match.Match[]} matches The array of matches to remove\n     *   the unwanted matches from. Note: this array is mutated for the\n     *   removals.\n     * @return {Autolinker.match.Match[]} The mutated input `matches` array.\n     */\n    Autolinker.prototype.removeUnwantedMatches = function (matches) {\n        if (!this.hashtag)\n            remove(matches, function (match) {\n                return match.getType() === 'hashtag';\n            });\n        if (!this.email)\n            remove(matches, function (match) {\n                return match.getType() === 'email';\n            });\n        if (!this.phone)\n            remove(matches, function (match) {\n                return match.getType() === 'phone';\n            });\n        if (!this.mention)\n            remove(matches, function (match) {\n                return match.getType() === 'mention';\n            });\n        if (!this.urls.schemeMatches) {\n            remove(matches, function (m) {\n                return m.getType() === 'url' && m.getUrlMatchType() === 'scheme';\n            });\n        }\n        if (!this.urls.wwwMatches) {\n            remove(matches, function (m) { return m.getType() === 'url' && m.getUrlMatchType() === 'www'; });\n        }\n        if (!this.urls.tldMatches) {\n            remove(matches, function (m) { return m.getType() === 'url' && m.getUrlMatchType() === 'tld'; });\n        }\n        return matches;\n    };\n    /**\n     * Parses the input `text` looking for URLs, email addresses, phone\n     * numbers, username handles, and hashtags (depending on the configuration\n     * of the Autolinker instance), and returns an array of {@link Autolinker.match.Match}\n     * objects describing those matches.\n     *\n     * This method processes a **non-HTML string**, and is used to parse and\n     * match within the text nodes of an HTML string. This method is used\n     * internally by {@link #parse}.\n     *\n     * @private\n     * @param {String} text The text to find matches within (depending on if the\n     *   {@link #urls}, {@link #email}, {@link #phone},\n     *   {@link #hashtag}, and {@link #mention} options are enabled). This must be a non-HTML string.\n     * @param {Number} [offset=0] The offset of the text node within the\n     *   original string. This is used when parsing with the {@link #parse}\n     *   method to generate correct offsets within the {@link Autolinker.match.Match}\n     *   instances, but may be omitted if calling this method publicly.\n     * @return {Autolinker.match.Match[]} The array of Matches found in the\n     *   given input `text`.\n     */\n    Autolinker.prototype.parseText = function (text, offset) {\n        if (offset === void 0) { offset = 0; }\n        offset = offset || 0;\n        var matchers = this.getMatchers(), matches = [];\n        for (var i = 0, numMatchers = matchers.length; i < numMatchers; i++) {\n            var textMatches = matchers[i].parseMatches(text);\n            // Correct the offset of each of the matches. They are originally\n            // the offset of the match within the provided text node, but we\n            // need to correct them to be relative to the original HTML input\n            // string (i.e. the one provided to #parse).\n            for (var j = 0, numTextMatches = textMatches.length; j < numTextMatches; j++) {\n                textMatches[j].setOffset(offset + textMatches[j].getOffset());\n            }\n            matches.push.apply(matches, textMatches);\n        }\n        return matches;\n    };\n    /**\n     * Automatically links URLs, Email addresses, Phone numbers, Hashtags,\n     * and Mentions (Twitter, Instagram, Soundcloud) found in the given chunk of HTML. Does not link\n     * URLs found within HTML tags.\n     *\n     * For instance, if given the text: `You should go to http://www.yahoo.com`,\n     * then the result will be `You should go to\n     * &lt;a href=\"http://www.yahoo.com\"&gt;http://www.yahoo.com&lt;/a&gt;`\n     *\n     * This method finds the text around any HTML elements in the input\n     * `textOrHtml`, which will be the text that is processed. Any original HTML\n     * elements will be left as-is, as well as the text that is already wrapped\n     * in anchor (&lt;a&gt;) tags.\n     *\n     * @param {String} textOrHtml The HTML or text to autolink matches within\n     *   (depending on if the {@link #urls}, {@link #email}, {@link #phone}, {@link #hashtag}, and {@link #mention} options are enabled).\n     * @return {String} The HTML, with matches automatically linked.\n     */\n    Autolinker.prototype.link = function (textOrHtml) {\n        if (!textOrHtml) {\n            return '';\n        } // handle `null` and `undefined` (for JavaScript users that don't have TypeScript support)\n        /* We would want to sanitize the start and end characters of a tag\n         * before processing the string in order to avoid an XSS scenario.\n         * This behaviour can be changed by toggling the sanitizeHtml option.\n         */\n        if (this.sanitizeHtml) {\n            textOrHtml = textOrHtml.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n        }\n        var matches = this.parse(textOrHtml), newHtml = [], lastIndex = 0;\n        for (var i = 0, len = matches.length; i < len; i++) {\n            var match = matches[i];\n            newHtml.push(textOrHtml.substring(lastIndex, match.getOffset()));\n            newHtml.push(this.createMatchReturnVal(match));\n            lastIndex = match.getOffset() + match.getMatchedText().length;\n        }\n        newHtml.push(textOrHtml.substring(lastIndex)); // handle the text after the last match\n        return newHtml.join('');\n    };\n    /**\n     * Creates the return string value for a given match in the input string.\n     *\n     * This method handles the {@link #replaceFn}, if one was provided.\n     *\n     * @private\n     * @param {Autolinker.match.Match} match The Match object that represents\n     *   the match.\n     * @return {String} The string that the `match` should be replaced with.\n     *   This is usually the anchor tag string, but may be the `matchStr` itself\n     *   if the match is not to be replaced.\n     */\n    Autolinker.prototype.createMatchReturnVal = function (match) {\n        // Handle a custom `replaceFn` being provided\n        var replaceFnResult;\n        if (this.replaceFn) {\n            replaceFnResult = this.replaceFn.call(this.context, match); // Autolinker instance is the context\n        }\n        if (typeof replaceFnResult === 'string') {\n            return replaceFnResult; // `replaceFn` returned a string, use that\n        }\n        else if (replaceFnResult === false) {\n            return match.getMatchedText(); // no replacement for the match\n        }\n        else if (replaceFnResult instanceof HtmlTag) {\n            return replaceFnResult.toAnchorString();\n        }\n        else {\n            // replaceFnResult === true, or no/unknown return value from function\n            // Perform Autolinker's default anchor tag generation\n            var anchorTag = match.buildTag(); // returns an Autolinker.HtmlTag instance\n            return anchorTag.toAnchorString();\n        }\n    };\n    /**\n     * Lazily instantiates and returns the {@link Autolinker.matcher.Matcher}\n     * instances for this Autolinker instance.\n     *\n     * @private\n     * @return {Autolinker.matcher.Matcher[]}\n     */\n    Autolinker.prototype.getMatchers = function () {\n        if (!this.matchers) {\n            var tagBuilder = this.getTagBuilder();\n            var matchers = [\n                new HashtagMatcher({\n                    tagBuilder: tagBuilder,\n                    serviceName: this.hashtag,\n                }),\n                new EmailMatcher({ tagBuilder: tagBuilder }),\n                new PhoneMatcher({ tagBuilder: tagBuilder }),\n                new MentionMatcher({\n                    tagBuilder: tagBuilder,\n                    serviceName: this.mention,\n                }),\n                new UrlMatcher({\n                    tagBuilder: tagBuilder,\n                    stripPrefix: this.stripPrefix,\n                    stripTrailingSlash: this.stripTrailingSlash,\n                    decodePercentEncoding: this.decodePercentEncoding,\n                }),\n            ];\n            return (this.matchers = matchers);\n        }\n        else {\n            return this.matchers;\n        }\n    };\n    /**\n     * Returns the {@link #tagBuilder} instance for this Autolinker instance,\n     * lazily instantiating it if it does not yet exist.\n     *\n     * @private\n     * @return {Autolinker.AnchorTagBuilder}\n     */\n    Autolinker.prototype.getTagBuilder = function () {\n        var tagBuilder = this.tagBuilder;\n        if (!tagBuilder) {\n            tagBuilder = this.tagBuilder = new AnchorTagBuilder({\n                newWindow: this.newWindow,\n                truncate: this.truncate,\n                className: this.className,\n            });\n        }\n        return tagBuilder;\n    };\n    // NOTE: must be 'export default' here for UMD module\n    /**\n     * @static\n     * @property {String} version\n     *\n     * The Autolinker version number in the form major.minor.patch\n     *\n     * Ex: 3.15.0\n     */\n    Autolinker.version = version;\n    /**\n     * For backwards compatibility with Autolinker 1.x, the AnchorTagBuilder\n     * class is provided as a static on the Autolinker class.\n     */\n    Autolinker.AnchorTagBuilder = AnchorTagBuilder;\n    /**\n     * For backwards compatibility with Autolinker 1.x, the HtmlTag class is\n     * provided as a static on the Autolinker class.\n     */\n    Autolinker.HtmlTag = HtmlTag;\n    /**\n     * For backwards compatibility with Autolinker 1.x, the Matcher classes are\n     * provided as statics on the Autolinker class.\n     */\n    Autolinker.matcher = {\n        Email: EmailMatcher,\n        Hashtag: HashtagMatcher,\n        Matcher: Matcher,\n        Mention: MentionMatcher,\n        Phone: PhoneMatcher,\n        Url: UrlMatcher,\n    };\n    /**\n     * For backwards compatibility with Autolinker 1.x, the Match classes are\n     * provided as statics on the Autolinker class.\n     */\n    Autolinker.match = {\n        Email: EmailMatch,\n        Hashtag: HashtagMatch,\n        Match: Match,\n        Mention: MentionMatch,\n        Phone: PhoneMatch,\n        Url: UrlMatch,\n    };\n    return Autolinker;\n}());\nexport default Autolinker;\n//# sourceMappingURL=autolinker.js.map","// WARNING: This file is modified a bit when it is compiled into index.js in\n// order to support nodejs interoperability with require('autolinker') directly.\n// This is done by the buildSrcFixCommonJsIndexTask() function in the gulpfile.\n// See that function for more details.\nimport Autolinker from './autolinker';\nexport default Autolinker;\nexport { Autolinker };\nexport * from './autolinker';\nexport * from './anchor-tag-builder';\nexport * from './html-tag';\nexport * from './match/index';\nexport * from './matcher/index';\n//# sourceMappingURL=index.js.map","import Autolinker from 'autolinker';\n\n// Autoconvert URL-like texts to links\n\n\nvar LINK_SCAN_RE = /www|@|\\:\\/\\//;\n\n\nfunction isLinkOpen(str) {\n  return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\n\n// Stupid fabric to avoid singletons, for thread safety.\n// Required for engines like Nashorn.\n//\nfunction createLinkifier() {\n  var links = [];\n  var autolinker = new Autolinker({\n    stripPrefix: false,\n    url: true,\n    email: true,\n    replaceFn: function (match) {\n      // Only collect matched strings but don't change anything.\n      switch (match.getType()) {\n        /*eslint default-case:0*/\n        case 'url':\n          links.push({\n            text: match.matchedText,\n            url: match.getUrl()\n          });\n          break;\n        case 'email':\n          links.push({\n            text: match.matchedText,\n            // normalize email protocol\n            url: 'mailto:' + match.getEmail().replace(/^mailto:/i, '')\n          });\n          break;\n      }\n      return false;\n    }\n  });\n\n  return {\n    links: links,\n    autolinker: autolinker\n  };\n}\n\n\nfunction parseTokens(state) {\n  var i, j, l, tokens, token, text, nodes, ln, pos, level, htmlLinkLevel,\n      blockTokens = state.tokens,\n      linkifier = null, links, autolinker;\n\n  for (j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline') { continue; }\n    tokens = blockTokens[j].children;\n\n    htmlLinkLevel = 0;\n\n    // We scan from the end, to keep position when new tags added.\n    // Use reversed logic in links start/end match\n    for (i = tokens.length - 1; i >= 0; i--) {\n      token = tokens[i];\n\n      // Skip content of markdown links\n      if (token.type === 'link_close') {\n        i--;\n        while (tokens[i].level !== token.level && tokens[i].type !== 'link_open') {\n          i--;\n        }\n        continue;\n      }\n\n      // Skip content of html tag links\n      if (token.type === 'htmltag') {\n        if (isLinkOpen(token.content) && htmlLinkLevel > 0) {\n          htmlLinkLevel--;\n        }\n        if (isLinkClose(token.content)) {\n          htmlLinkLevel++;\n        }\n      }\n      if (htmlLinkLevel > 0) { continue; }\n\n      if (token.type === 'text' && LINK_SCAN_RE.test(token.content)) {\n\n        // Init linkifier in lazy manner, only if required.\n        if (!linkifier) {\n          linkifier = createLinkifier();\n          links = linkifier.links;\n          autolinker = linkifier.autolinker;\n        }\n\n        text = token.content;\n        links.length = 0;\n        autolinker.link(text);\n\n        if (!links.length) { continue; }\n\n        // Now split string to nodes\n        nodes = [];\n        level = token.level;\n\n        for (ln = 0; ln < links.length; ln++) {\n\n          if (!state.inline.validateLink(links[ln].url)) { continue; }\n\n          pos = text.indexOf(links[ln].text);\n\n          if (pos) {\n            nodes.push({\n              type: 'text',\n              content: text.slice(0, pos),\n              level: level\n            });\n          }\n          nodes.push({\n            type: 'link_open',\n            href: links[ln].url,\n            title: '',\n            level: level++\n          });\n          nodes.push({\n            type: 'text',\n            content: links[ln].text,\n            level: level\n          });\n          nodes.push({\n            type: 'link_close',\n            level: --level\n          });\n          text = text.slice(pos + links[ln].text.length);\n        }\n        if (text.length) {\n          nodes.push({\n            type: 'text',\n            content: text,\n            level: level\n          });\n        }\n\n        // replace current node\n        blockTokens[j].children = tokens = [].concat(tokens.slice(0, i), nodes, tokens.slice(i + 1));\n      }\n    }\n  }\n}\nfunction linkify(md) {\n  md.core.ruler.push('linkify', parseTokens);\n}\n\nexport { linkify };\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport { MONTHS } from '@girder/core/constants';\n\nimport { Remarkable } from 'remarkable';\n\nimport { linkify } from 'remarkable/linkify';\n\n/**\n * This file contains utility functions for general use in the application\n */\nvar DATE_YYMMDD = -1;\nvar DATE_MONTH = 0;\nvar DATE_DAY = 1;\nvar DATE_MINUTE = 2;\nvar DATE_SECOND = 3;\n\n/**\n * Format a date string to the given resolution.\n * @param datestr The date string to format.\n * @param resolution The resolution, defaults to 'day'. Minimum is month.\n */\nfunction formatDate(datestr, resolution) {\n    datestr = datestr.replace(' ', 'T'); // Cross-browser accepted date format\n    var date = new Date(datestr);\n    var output = MONTHS[date.getMonth()];\n\n    resolution = resolution || DATE_MONTH;\n\n    if (resolution === DATE_YYMMDD) {\n        var yyyy = date.getFullYear();\n        var mm = ('0' + (date.getMonth() + 1)).slice(-2);\n        var dd = ('0' + date.getDate()).slice(-2);\n        return yyyy + '-' + mm + '-' + dd;\n    }\n\n    if (resolution >= DATE_DAY) {\n        output += ' ' + date.getDate() + ',';\n    }\n\n    output += ' ' + date.getFullYear();\n\n    if (resolution >= DATE_MINUTE) {\n        output += ' at ' + date.getHours() + ':' +\n            ('0' + date.getMinutes()).slice(-2);\n    }\n    if (resolution >= DATE_SECOND) {\n        output += ':' + ('0' + date.getSeconds()).slice(-2);\n    }\n\n    return output;\n}\n\n/**\n * Format a size in bytes into a human-readable string with metric unit\n * prefixes.\n */\nfunction formatSize(sizeBytes) {\n    if (sizeBytes < 1024) {\n        return sizeBytes + ' B';\n    }\n    var i, sizeVal = sizeBytes, precision = 1;\n    for (i = 0; sizeVal >= 1024; i += 1) {\n        sizeVal /= 1024;\n    }\n    // If we are just reporting a low number, no need for decimal places.\n    if (sizeVal < 10) {\n        precision = 3;\n    } else if (sizeVal < 100) {\n        precision = 2;\n    }\n    return sizeVal.toFixed(precision) + ' ' +\n        ['B', 'kB', 'MB', 'GB', 'TB'][Math.min(i, 4)];\n}\n\n/**\n * Like formatSize, but more generic. Returns a human-readable format\n * of an integer using metric prefixes. The caller is expected to append any\n * unit string if necessary.\n *\n * @param {integer} n The number to format.\n * @param {Object} [opts={}] Formatting options. These include:\n *   - {integer} [maxLen] Max number of digits in the output.\n *   - {integer} [base=1000] Base for the prefixes (usually 1000 or 1024).\n *   - {string} [sep=''] Separator between numeric value and metric prefix.\n */\nfunction formatCount(n, opts) {\n    n = n || 0;\n    opts = opts || {};\n\n    var i = 0,\n        base = opts.base || 1000,\n        sep = opts.sep || '',\n        maxLen = opts.maxLen || 3,\n        precision = maxLen - 1;\n\n    for (; n > base; i += 1) {\n        n /= base;\n    }\n\n    if (!i) {\n        precision = 0;\n    } else if (n > 100) {\n        precision -= 2;\n    } else if (n > 10) {\n        precision -= 1;\n    }\n\n    return n.toFixed(Math.max(0, precision)) + sep +\n        ['', 'k', 'M', 'G', 'T'][Math.min(i, 4)];\n}\n\n/**\n * This comparator can be used by collections that wish to support locale-based\n * sorting.  The locale specifies how upper and lower case are compared.\n */\nfunction localeComparator(model1, model2) {\n    var a1 = model1.get(this.sortField),\n        a2 = model2.get(this.sortField);\n\n    if (a1 !== undefined && a1.localeCompare) {\n        var result = a1.localeCompare(a2) * this.sortDir;\n        if (result || !this.secondarySortField) {\n            return result;\n        }\n        a1 = model1.get(this.secondarySortField);\n        a2 = model2.get(this.secondarySortField);\n        return a1.localeCompare(a2) * this.sortDir;\n    }\n\n    return a1 > a2 ? this.sortDir : (a1 < a2 ? -this.sortDir : 0);\n}\n\n/**\n * This comparator can be passed to the sort function on javascript arrays.\n */\nfunction localeSort(a1, a2) {\n    if (a1 !== undefined && a1.localeCompare) {\n        return a1.localeCompare(a2);\n    }\n    return a1 > a2 ? 1 : (a1 < a2 ? -1 : 0);\n}\n\n/**\n * Return the model class name given its collection name.\n * @param name Collection name, e.g. 'user'\n */\nfunction getModelClassByName(name) {\n    var className = name.charAt(0).toUpperCase();\n    return className + name.substr(1) + 'Model';\n}\n\nfunction parseQueryString(queryString) {\n    var params = {};\n    if (queryString) {\n        _.each(queryString.replace(/\\+/g, ' ').split(/&/g), function (el) {\n            var aux = el.split('='), val;\n            if (aux.length > 1) {\n                val = decodeURIComponent(el.substr(aux[0].length + 1));\n            }\n            params[decodeURIComponent(aux[0])] = val;\n        });\n    }\n    return params;\n}\n\n/**\n * Create a set of flags that can be OR'd (|) together to define a set of\n * options.\n *\n * @param {Array} options An array of strings defining the option names.\n * @param {string} allOption If you want an option that enables all options,\n *                 pass its name as this parameter.\n * @return {Object} An object mapping the names of options to values.\n */\nfunction defineFlags(options, allOption) {\n    var i = 0,\n        obj = {};\n\n    if (allOption) {\n        obj[allOption] = 1;\n    }\n    _.each(options, function (opt) {\n        obj[opt] = 1 << i;\n\n        if (allOption) {\n            obj[allOption] |= obj[opt];\n        }\n\n        i += 1;\n    });\n\n    return obj;\n}\n\n/**\n * Transform markdown into HTML and render it into the given element. If no\n * element is provided, simply returns the HTML.\n *\n * @param val The markdown text input.\n * @param el The element to render the output HTML into, or falsy to simply\n *        return the HTML value.\n */\nvar renderMarkdown = (function () {\n    var md = new Remarkable().use(linkify);\n    return function (val, el) {\n        if (el) {\n            $(el).html(md.render(val));\n        } else {\n            return md.render(val);\n        }\n    };\n}());\n\n/**\n * Capitalize the first character of a string.\n */\nfunction capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.substring(1);\n}\n\nfunction splitRoute(route) {\n    if (!route) {\n        return { base: '', name: '' };\n    }\n    var firstIndex = route.indexOf('?'),\n        lastIndex = route.lastIndexOf('?'),\n        dialogName,\n        baseRoute;\n\n    if (firstIndex === -1) {\n        baseRoute = route;\n    } else {\n        baseRoute = route.slice(0, firstIndex);\n    }\n\n    if (lastIndex === -1) {\n        dialogName = '';\n    } else {\n        dialogName = route.slice(lastIndex + 1);\n    }\n\n    return { name: dialogName, base: baseRoute };\n}\n\nfunction _whenAll(promises) {\n    return $.when(...promises).then((...results) => results);\n}\n\nexport {\n    DATE_YYMMDD,\n    DATE_MONTH,\n    DATE_DAY,\n    DATE_MINUTE,\n    DATE_SECOND,\n    formatDate,\n    formatSize,\n    formatCount,\n    localeComparator,\n    localeSort,\n    getModelClassByName,\n    parseQueryString,\n    defineFlags,\n    renderMarkdown,\n    capitalize,\n    splitRoute,\n    _whenAll\n};\n","import _ from 'underscore';\nimport Backbone from 'backbone';\n\nimport { localeComparator } from '@girder/core/misc';\nimport Model from '@girder/core/models/Model';\nimport { restRequest } from '@girder/core/rest';\nimport { SORT_ASC } from '@girder/core/constants';\n\n/**\n * All collections should descend from this collection base class, which\n * provides nice utilities for pagination and sorting.\n */\nvar Collection = Backbone.Collection.extend({\n    model: Model,\n    resourceName: null,\n\n    sortField: 'name',\n    sortDir: SORT_ASC,\n    comparator: localeComparator,\n\n    // Number of records to fetch per page\n    pageLimit: 25,\n    offset: 0,\n\n    // Alternative fetch URL\n    altUrl: null,\n\n    /**\n     * Append mode can be used to append pages to the collection rather than\n     * simply replacing its contents when a new page is fetched. For the sake\n     * of least surprise, this property should not be changed in the definition\n     * of collections, but after they are instantiated.\n     */\n    append: false,\n\n    /**\n     * Client-side filtering: set to a function that takes an instance of this\n     * collection's model and returns true for each instance that should be\n     * included in this collection.  For the sake of least surprise, this\n     * property should not be changed in the definition of collections, but\n     * after they are instantiated.\n     */\n    filterFunc: null,\n\n    /**\n     * If filtering and not appending, this stack is used to record the offsets\n     * at which prior pages had been fetched.\n     */\n    pageOffsetStack: null,\n\n    /**\n     * Number of items in the collection returned by 'girder-total-count' header\n     */\n    _totalCount: 0,\n\n    /**\n     * Returns a boolean of whether or not this collection has previous pages,\n     * i.e. if the offset of the current page start is > 0\n     */\n    hasPreviousPage: function () {\n        if (this.filterFunc) {\n            if (this.append) { return false; }\n            this.pageOffsetStack = this.pageOffsetStack || [];\n            return (this.pageOffsetStack.length > 1);\n        }\n        return this.offset - this.length > 0;\n    },\n\n    /**\n     * After you have called fetch() on a collection, this method will tell\n     * you whether there are more pages remaining to be fetched, or if you\n     * have hit the end.\n     */\n    hasNextPage: function () {\n        return this._hasMorePages;\n    },\n    /**\n     *  This value is populated whenever the list length exceeds the pageLimit.\n     *  It is used to determine how many pages are needed based on the page limit\n     *  it is retrieved from the response header 'girder-total-count'\n     *  @returns {number} total number of items retrieved\n     */\n    getTotalCount: function () {\n        return this._totalCount || 0;\n    },\n    /**\n     * Fetch the previous page of this collection, emitting g:changed when done.\n     */\n    fetchPreviousPage: function (params) {\n        if (this.filterFunc) {\n            if (this.append) {\n                this.offset = 0;\n            } else {\n                this.pageOffsetStack = this.pageOffsetStack || [];\n                if (this.pageOffsetStack.length) {\n                    this.pageOffsetStack.pop();\n                }\n\n                this.offset = (\n                    this.pageOffsetStack.length ? this.pageOffsetStack.pop() : 0\n                );\n            }\n        } else {\n            this.offset = Math.max(\n                0,\n                this.offset - this.length - this.pageLimit);\n        }\n        return this.fetch(_.extend({}, this.params, params || {}));\n    },\n\n    /**\n     * Fetch the next page of this collection, emitting g:changed when done.\n     */\n    fetchNextPage: function (params) {\n        return this.fetch(_.extend({}, this.params, params || {}));\n    },\n\n    /**\n     * @returns {number} the 0-indexed page number of the current page. Add 1 to this\n     * result when displaying it to the user.\n     *\n     * If this collection hasn't been fully initialized (i.e.: before any pages\n     * have been fetched), pageNum() may return a page number < 0 to signal that\n     * there is no \"current page\".\n     */\n    pageNum: function () {\n        if (this.filterFunc) {\n            if (this.append) { return 0; }\n            this.pageOffsetStack = this.pageOffsetStack || [];\n            return this.pageOffsetStack.length - 1;\n        }\n        return Math.ceil((this.offset - this.length) / this.pageLimit);\n    },\n\n    /**\n     * Sets a specific pagenumber for loading by calculating the offset\n     * @param {Number} pageNumber The 0 indexed page that should be loaded based on the pageLimit size\n     * @param {Object} params Additional parameters to pass to the fetch call\n     * @returns {Promise} a fetch promise to retrieve more data\n     */\n    fetchPage: function (pageNumber, params) {\n        // Make sure the page Number is within range, pageNumber is indexed at 0\n        if (!this.append && pageNumber * this.pageLimit < this._totalCount && pageNumber >= 0) {\n            this.offset = pageNumber * this.pageLimit;\n            return this.fetch(_.extend({}, this.params, params || {}));\n        }\n    },\n\n    /**\n     * Fetches the next page of this collection, replacing the existing models\n     * of this collection with the requested page. If the next page contains\n     * any records (i.e. it was not already on the last page), this will\n     * trigger g:changed.\n     * @param params Any additional parameters to be passed with the request.\n     * @param reset Set this to true to re-fetch the current page.\n     */\n    fetch: function (params, reset) {\n        if (this.altUrl === null && this.resourceName === null) {\n            throw new Error('An altUrl or resourceName must be set on the Collection.');\n        }\n\n        if (this.filterFunc && !this.append) {\n            this.pageOffsetStack = this.pageOffsetStack || [];\n        }\n\n        if (reset) {\n            if (this.filterFunc && !this.append) {\n                this.pageOffsetStack = [];\n            }\n            this.offset = 0;\n        } else {\n            this.params = params || {};\n        }\n\n        if (this.filterFunc && !this.append) {\n            this.pageOffsetStack.push(this.offset);\n        }\n\n        var limit = this.pageLimit > 0 ? this.pageLimit + 1 : 0;\n\n        var finalList = []; /* will be built up in pieces */\n\n        function fetchListFragment() {\n            var xhr = restRequest({\n                url: this.altUrl || this.resourceName,\n                data: _.extend({\n                    limit: limit,\n                    offset: this.offset,\n                    sort: this.sortField,\n                    sortdir: this.sortDir\n                }, this.params)\n            });\n\n            var result = xhr.then((list) => {\n                if (this.pageLimit > 0 && list.length > this.pageLimit) {\n                    // This means we have more pages to display still. Pop off\n                    // the extra that we fetched.\n                    list.pop();\n                    this._totalCount = xhr.getResponseHeader('girder-total-count');\n                    this._hasMorePages = true;\n                } else {\n                    this._hasMorePages = false;\n                }\n\n                var offsetDelta = list.length;\n\n                /*\n                 * If filtering, decorate the list with their pre-filtered\n                 * indexes.  The index will be needed when adjusting the offset.\n                 */\n                if (this.filterFunc) {\n                    var filter = this.filterFunc;\n                    list = (\n                        list\n                            .map(function (x, index) { return [index, x]; })\n                            .filter(function (tuple) {\n                                return filter(tuple[1]);\n                            })\n                    );\n                }\n\n                var numUsed = list.length;\n                var wantMorePages = (\n                    (this.pageLimit === 0) ||\n                    (finalList.length + numUsed < this.pageLimit)\n                );\n\n                /* page is complete */\n                if (!wantMorePages && this.pageLimit > 0) {\n                    /*\n                     * If we fetched more data than we needed to complete the\n                     * page, then newNumUsed will be < numUsed ...\n                     */\n                    var newNumUsed = this.pageLimit - finalList.length;\n                    if (numUsed > newNumUsed) {\n                        /*\n                         * ...therefore, entries are being left out at the end,\n                         * so they necessarily remain to be fetched.\n                         */\n                        this._hasMorePages = true;\n                        numUsed = newNumUsed;\n                    }\n\n                    /*\n                     * correct the offset: it must be advanced beyond the\n                     * last element that got used.\n                     */\n                    if (this.filterFunc) {\n                        /*\n                         * If filtering, consult the index for the last element\n                         * to be featured on this page.\n                         */\n                        offsetDelta = list[numUsed - 1][0] + 1;\n                    } else {\n                        /*\n                         * Otherwise, the first numUsed elements will be\n                         * unconditionally featured.\n                         */\n                        offsetDelta = numUsed;\n                    }\n                }\n\n                list = list.slice(0, numUsed);\n                /* If filtering, undecorate the list. */\n                if (this.filterFunc) {\n                    list = list.map(function (tuple) { return tuple[1]; });\n                }\n\n                finalList = finalList.concat(list);\n                this.offset += offsetDelta;\n\n                if (wantMorePages && this._hasMorePages) {\n                    return fetchListFragment.apply(this);\n                } else {\n                    if (finalList.length > 0 || reset) {\n                        if (this.append && !reset) {\n                            this.add(finalList);\n                        } else {\n                            this.reset(finalList);\n                        }\n                    }\n\n                    this.trigger('g:changed');\n                }\n                return undefined;\n            });\n            xhr.girder = { fetch: true };\n            return result;\n        }\n\n        return fetchListFragment.apply(this);\n    }\n});\n\nexport default Collection;\n","import ApiKeyModel from '@girder/core/models/ApiKeyModel';\nimport Collection from '@girder/core/collections/Collection';\n\nvar ApiKeyCollection = Collection.extend({\n    resourceName: 'api_key',\n    model: ApiKeyModel\n});\n\nexport default ApiKeyCollection;\n","import _ from 'underscore';\n\nimport { formatSize } from '@girder/core/misc';\nimport Model from '@girder/core/models/Model';\nimport { restRequest } from '@girder/core/rest';\n\nvar AssetstoreModel = Model.extend({\n    resourceName: 'assetstore',\n\n    capacityKnown: function () {\n        var cap = this.get('capacity');\n        return cap && cap.free !== null && cap.total !== null;\n    },\n\n    capacityString: function () {\n        var cap = this.get('capacity');\n        return formatSize(cap.free) + ' free of ' +\n            formatSize(cap.total) + ' total';\n    },\n\n    import: function (params) {\n        return restRequest({\n            url: `assetstore/${this.id}/import`,\n            method: 'POST',\n            data: params,\n            error: null\n        }).done((resp) => {\n            this.trigger('g:imported', resp);\n        }).fail((resp) => {\n            this.trigger('g:error', resp);\n        });\n    },\n\n    save: function () {\n        if (_.isNumber(this.get('perms'))) {\n            // Coerce to an octal string to disambiguate\n            this.set('perms', this.get('perms').toString(8));\n        }\n        return Model.prototype.save.call(this, arguments);\n    }\n});\n\nexport default AssetstoreModel;\n","import AssetstoreModel from '@girder/core/models/AssetstoreModel';\nimport Collection from '@girder/core/collections/Collection';\n\nvar AssetstoreCollection = Collection.extend({\n    resourceName: 'assetstore',\n    model: AssetstoreModel,\n    pageLimit: 1000\n});\n\nexport default AssetstoreCollection;\n","import _ from 'underscore';\n\nimport { restRequest } from '@girder/core/rest';\n\nvar MetadataMixin = {\n    _sendMetadata: function (metadata, successCallback, errorCallback, opts) {\n        opts = opts || {};\n        restRequest({\n            url: opts.path ||\n                ((this.altUrl || this.resourceName) + `/${this.id}/metadata?allowNull=true`),\n            contentType: 'application/json',\n            data: JSON.stringify(metadata),\n            method: 'PUT',\n            error: null\n        }).done((resp) => {\n            this.set(opts.field || 'meta', resp.meta);\n            if (_.isFunction(successCallback)) {\n                successCallback();\n            }\n        }).fail((err) => {\n            err.message = err.responseJSON.message;\n            if (_.isFunction(errorCallback)) {\n                errorCallback(err);\n            }\n        });\n    },\n\n    addMetadata: function (key, value, successCallback, errorCallback, opts) {\n        opts = opts || {};\n        var datum = {};\n        datum[key] = value;\n        var meta = this.get(opts.field || 'meta');\n        if (meta && _.has(meta, key)) {\n            if (_.isFunction(errorCallback)) {\n                errorCallback({ message: key + ' is already a metadata key' });\n            }\n        } else {\n            this._sendMetadata(datum, successCallback, errorCallback, opts);\n        }\n    },\n\n    removeMetadata: function (key, successCallback, errorCallback, opts) {\n        if (!_.isArray(key)) {\n            key = [key];\n        }\n        restRequest({\n            url: opts.path ||\n                ((this.altUrl || this.resourceName) + `/${this.id}/metadata`),\n            contentType: 'application/json',\n            data: JSON.stringify(key),\n            method: 'DELETE',\n            error: null\n        }).done((resp) => {\n            this.set(opts.field || 'meta', resp.meta);\n            if (_.isFunction(successCallback)) {\n                successCallback();\n            }\n        }).fail((err) => {\n            err.message = err.responseJSON.message;\n            if (_.isFunction(errorCallback)) {\n                errorCallback(err);\n            }\n        });\n    },\n\n    editMetadata: function (newKey, oldKey, value, successCallback, errorCallback, opts) {\n        opts = opts || {};\n\n        if (newKey === oldKey) {\n            var datum = {};\n            datum[newKey] = value;\n            this._sendMetadata(datum, successCallback, errorCallback, opts);\n        } else {\n            if (_.has(this.get(opts.field || 'meta'), newKey)) {\n                if (_.isFunction(errorCallback)) {\n                    errorCallback({ message: newKey + ' is already a metadata key' });\n                }\n            } else {\n                var metas = {};\n                metas[oldKey] = null;\n                metas[newKey] = value;\n                this._sendMetadata(metas, successCallback, errorCallback, opts);\n            }\n        }\n    }\n};\n\nexport default MetadataMixin;\n","import _ from 'underscore';\n\nimport AccessControlledModel from '@girder/core/models/AccessControlledModel';\nimport MetadataMixin from '@girder/core/models/MetadataMixin';\n\nvar CollectionModel = AccessControlledModel.extend({\n    resourceName: 'collection'\n});\n\n_.extend(CollectionModel.prototype, MetadataMixin);\n\nexport default CollectionModel;\n","import Collection from '@girder/core/collections/Collection';\nimport CollectionModel from '@girder/core/models/CollectionModel';\n\nvar CollectionCollection = Collection.extend({\n    resourceName: 'collection',\n    model: CollectionModel\n});\n\nexport default CollectionCollection;\n","import _ from 'underscore';\n\nimport AccessControlledModel from '@girder/core/models/AccessControlledModel';\nimport MetadataMixin from '@girder/core/models/MetadataMixin';\nimport { restRequest } from '@girder/core/rest';\n\nvar FolderModel = AccessControlledModel.extend({\n    resourceName: 'folder',\n\n    getRootPath: function () {\n        return restRequest({\n            url: `${this.resourceName}/${this.id}/rootpath`\n        });\n    },\n\n    /**\n     * Remove the contents of the folder.\n     */\n    removeContents: function () {\n        return restRequest({\n            url: `${this.resourceName}/${this.id}/contents`,\n            method: 'DELETE'\n        }).done(() => {\n            this.trigger('g:success');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    }\n});\n\n_.extend(FolderModel.prototype, MetadataMixin);\n\nexport default FolderModel;\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport FileCollection from '@girder/core/collections/FileCollection';\nimport FolderModel from '@girder/core/models/FolderModel';\nimport MetadataMixin from '@girder/core/models/MetadataMixin';\nimport Model from '@girder/core/models/Model';\nimport { restRequest } from '@girder/core/rest';\n\nvar ItemModel = Model.extend({\n    resourceName: 'item',\n\n    /**\n     * Get the access level of the item if it is set. Takes an optional callback\n     * to be called once the access level is fetched (or immediately if it has\n     * already been fetched).\n     */\n    getAccessLevel: function (callback) {\n        callback = callback || $.noop;\n\n        if (this.has('_accessLevel')) {\n            callback(this.get('_accessLevel'));\n            return this.get('_accessLevel');\n        }\n        if (this.parent && this.parent.getAccessLevel()) {\n            this.set('_accessLevel', this.parent.getAccessLevel());\n            callback(this.get('_accessLevel'));\n            return this.get('_accessLevel');\n        } else {\n            var parent = new FolderModel();\n            parent.set({\n                _id: this.get('folderId')\n            }).once('g:fetched', function () {\n                this.parent = parent;\n                this.set('_accessLevel', this.parent.getAccessLevel());\n                callback(this.get('_accessLevel'));\n            }, this).fetch();\n        }\n    },\n\n    /**\n     * Get the path to the root of the hierarchy\n     */\n    getRootPath: function (callback) {\n        return restRequest({\n            url: `${this.resourceName}/${this.id}/rootpath`\n        }).done((resp) => {\n            callback(resp);\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /**\n     * Get the files within the item.\n     */\n    getFiles: function () {\n        return restRequest({\n            url: `${this.resourceName}/${this.id}/files`\n        }).then((resp) => {\n            const fileCollection = new FileCollection(resp);\n            this.trigger('g:files', fileCollection);\n            return fileCollection;\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    }\n});\n\n_.extend(ItemModel.prototype, MetadataMixin);\n\nexport default ItemModel;\n","import _ from 'underscore';\nimport Backbone from 'backbone';\n\nimport { restRequest, uploadHandlers } from '@girder/core/rest';\n\n/**\n * This is the upload handler for the \"s3\" behavior, which is responsible for\n * uploading data to an s3 assetstore type directly from the user agent, using\n * either the single-request or multi-chunk protocol depending on the size of\n * the file.\n *\n * The flow here is to make requests to Girder for each required chunk of\n * the upload, which Girder authorizes and signs using HMAC. Those signatures\n * are sent, along with the bytes, to the appropriate S3 bucket. For multi-\n * chunk uploads, one final request is required after all chunks have been\n * sent in order to create the final unified record in S3.\n */\n// Constructor\nuploadHandlers.s3 = function (params) {\n    this.params = params;\n    this.startByte = 0;\n    return _.extend(this, Backbone.Events);\n};\n\nvar prototype = uploadHandlers.s3.prototype;\n\nprototype._xhrProgress = function (event) {\n    if (!event.lengthComputable) {\n        return;\n    }\n\n    // We only want to count bytes of the actual file, not the bytes of\n    // the request body corresponding to the other form parameters model\n    // we are also sending.\n    var loaded = this.payloadLength + event.loaded - event.total;\n\n    if (loaded >= 0) {\n        this.trigger('g:upload.progress', {\n            startByte: this.startByte,\n            loaded: loaded,\n            total: this.params.file.size,\n            file: this.params.file\n        });\n    }\n};\n\nprototype.execute = function () {\n    var s3Info = this.params.upload.s3;\n\n    var xhr = new XMLHttpRequest();\n    xhr.open(s3Info.request.method, s3Info.request.url);\n    _.each(s3Info.request.headers, (v, k) => {\n        xhr.setRequestHeader(k, v);\n    });\n\n    if (s3Info.chunked) {\n        this._multiChunkUpload(xhr);\n    } else {\n        this.payloadLength = this.params.file.size;\n        xhr.onload = () => {\n            if (xhr.status === 200) {\n                this.trigger('g:upload.chunkSent', {\n                    bytes: this.payloadLength\n                });\n\n                restRequest({\n                    url: 'file/completion',\n                    method: 'POST',\n                    data: {\n                        uploadId: this.params.upload._id\n                    },\n                    error: null\n                }).done((resp) => {\n                    this.trigger('g:upload.complete', resp);\n                }).fail((resp) => {\n                    var msg;\n\n                    if (resp.status === 0) {\n                        msg = 'Could not connect to the server.';\n                    } else {\n                        msg = 'An error occurred when resuming upload, check console.';\n                    }\n                    this.trigger('g:upload.error', {\n                        message: msg\n                    });\n                });\n            } else {\n                this.trigger('g:upload.error', {\n                    message: 'Error occurred uploading to S3 (' + xhr.status + ').'\n                });\n            }\n        };\n\n        xhr.upload.addEventListener('progress', (event) => {\n            this._xhrProgress(event);\n        });\n\n        xhr.addEventListener('error', (event) => {\n            this.trigger('g:upload.error', {\n                message: 'Error occurred uploading to S3.',\n                event: event\n            });\n        });\n\n        xhr.send(this.params.file);\n    }\n};\n\nprototype.resume = function () {\n    if (this.params.upload.s3.chunked) {\n        return this._sendNextChunk();\n    }\n\n    // If this is a single-chunk upload, we have to use the offset method\n    // to re-generate the initial request with a new timestamp.\n    restRequest({\n        url: 'file/offset',\n        method: 'GET',\n        data: {\n            uploadId: this.params.upload._id\n        },\n        error: null\n    }).done((resp) => {\n        this.params.upload.s3.request = resp;\n        this.execute();\n    }).fail((resp) => {\n        var msg;\n\n        if (resp.status === 0) {\n            msg = 'Could not connect to the Girder server.';\n        } else {\n            msg = 'An error occurred when resuming upload, check console.';\n        }\n        this.trigger('g:upload.error', {\n            message: msg\n        });\n    });\n};\n\n/**\n * If the file being uploaded is larger than a single chunk length, it\n * should be uploaded using the S3 multipart protocol.\n */\nprototype._multiChunkUpload = function (xhr) {\n    this.eTagList = {};\n    this.startByte = 0;\n    this.chunkN = 1;\n\n    xhr.onload = () => {\n        if (xhr.status === 200) {\n            this.s3UploadId = xhr.responseText.match(/<UploadId>(.*)<\\/UploadId>/).pop();\n            this._sendNextChunk();\n        } else {\n            this.trigger('g:upload.error', {\n                message: 'Error while initializing multichunk S3 upload.',\n                event: event\n            });\n        }\n    };\n\n    xhr.addEventListener('error', (event) => {\n        this.trigger('g:upload.error', {\n            message: 'Error occurred uploading to S3.',\n            event: event\n        });\n    });\n\n    xhr.send();\n};\n\n/**\n * Internal helper method used during multichunk upload protocol. This\n * requests a signed chunk upload request from Girder, then uses that\n * authorized request to send the chunk to S3.\n */\nprototype._sendNextChunk = function () {\n    var sliceFn = this.params.file.webkitSlice ? 'webkitSlice' : 'slice';\n    var data = this.params.file[sliceFn](this.startByte,\n        this.startByte + this.params.upload.s3.chunkLength);\n    this.payloadLength = data.size;\n\n    // Get the authorized request from Girder\n    restRequest({\n        url: 'file/chunk',\n        method: 'POST',\n        data: {\n            offset: 0,\n            chunk: JSON.stringify({\n                s3UploadId: this.s3UploadId,\n                partNumber: this.chunkN,\n                contentLength: this.payloadLength\n            }),\n            uploadId: this.params.upload._id\n        },\n        error: null\n    }).done((resp) => {\n        // Send the chunk to S3\n        var xhr = new XMLHttpRequest();\n        xhr.open(resp.s3.request.method, resp.s3.request.url);\n\n        xhr.onload = () => {\n            if (xhr.status === 200) {\n                this.trigger('g:upload.chunkSent', {\n                    bytes: this.payloadLength\n                });\n                this.eTagList[this.chunkN] = xhr.getResponseHeader('ETag');\n                this.startByte += this.payloadLength;\n                this.chunkN += 1;\n\n                if (this.startByte < this.params.file.size) {\n                    this._sendNextChunk();\n                } else {\n                    this._finalizeMultiChunkUpload();\n                }\n            } else {\n                this.trigger('g:upload.error', {\n                    message: 'Error occurred uploading to S3 (' + xhr.status + ').'\n                });\n            }\n        };\n\n        xhr.upload.addEventListener('progress', (event) => {\n            this._xhrProgress(event);\n        });\n\n        xhr.addEventListener('error', (event) => {\n            this.trigger('g:upload.error', {\n                message: 'Error occurred uploading to S3.',\n                event: event\n            });\n        });\n\n        xhr.send(data);\n    }).fail(() => {\n        this.trigger('g:upload.error', {\n            message: 'Error getting signed chunk request from Girder.'\n        });\n    });\n};\n\n/**\n * When all chunks of a multichunk upload have been sent, this must be\n * called in order to finalize the upload.\n */\nprototype._finalizeMultiChunkUpload = function () {\n    restRequest({\n        url: 'file/completion',\n        method: 'POST',\n        data: {\n            uploadId: this.params.upload._id\n        },\n        error: null\n    }).done((resp) => {\n        this.trigger('g:upload.complete', resp);\n    }).fail((resp) => {\n        const msg = resp.status === 0\n            ? 'Could not connect to the server.'\n            : 'Upload error during finalize, check console.';\n        this.trigger('g:upload.error', {\n            message: msg\n        });\n    });\n};\n","import _ from 'underscore';\n\nimport FolderModel from '@girder/core/models/FolderModel';\nimport ItemModel from '@girder/core/models/ItemModel';\nimport Model from '@girder/core/models/Model';\nimport { restRequest, uploadHandlers, getUploadChunkSize } from '@girder/core/rest';\nimport '@girder/core/utilities/S3UploadHandler'; // imported for side effect\n\nvar FileModel = Model.extend({\n    resourceName: 'file',\n    resumeInfo: null,\n\n    _wrapData: function (data, type) {\n        var wrapped = data;\n\n        if (!(data instanceof Blob)) {\n            if (!_.isArray(data)) {\n                wrapped = [data];\n            }\n            wrapped = new Blob(wrapped, {\n                type: type\n            });\n        }\n\n        return wrapped;\n    },\n\n    /**\n     * Upload into an existing file object (i.e. this model) to change its\n     * contents. This does not change the name or MIME type of the existing\n     * file.\n     * @param data A browser File object, browser Blob object, or raw data to be uploaded.\n     */\n    updateContents: function (data) {\n        data = this._wrapData(data);\n\n        this.upload(null, data, {\n            url: `file/${this.id}/contents`,\n            method: 'PUT',\n            data: {\n                size: data.size\n            }\n        });\n    },\n\n    /**\n     * Upload data to a new file in a given container\n     * @param Model A constructor for the parent model (either FolderModel or ItemModel).\n     * @param model The parent model to upload to, or a string containing the id thereof.\n     * @param data The data to upload - either a string, File object, or Blob object.\n     * @param name The name of the file to create (optional if data is a File).\n     * @param type The mime type of the file (optional).\n     */\n    _uploadToContainer: function (Model, model, data, name, type) {\n        if (_.isString(model)) {\n            model = new Model({\n                _id: model\n            });\n        }\n\n        data = this._wrapData(data, type);\n        data.name = name;\n\n        this.upload(model, data);\n    },\n\n    /**\n     * Upload data to a new file in a given folder\n     * @param parentFolder The parent folder to upload to, or a string containing the id thereof.\n     * @param data The data to upload - either a string, File object, or Blob object.\n     * @param name The name of the file to create (optional if data is a File).\n     * @param type The mime type of the file (optional).\n     */\n    uploadToFolder: function (parentFolder, data, name, type) {\n        this._uploadToContainer(FolderModel, parentFolder, data, name, type);\n    },\n\n    /**\n     * Upload data to a new file in a given folder\n     * @param parentItem The parent item to upload to, or a string containing the id thereof.\n     * @param data The data to upload - either a string, File object, or Blob object.\n     * @param name The name of the file to create (optional if data is a File).\n     * @param type The mime type of the file (optional).\n     */\n    uploadToItem: function (parentItem, data, name, type) {\n        this._uploadToContainer(ItemModel, parentItem, data, name, type);\n    },\n\n    /**\n     * Upload a file. Handles uploading into all of the core assetstore types.\n     * @param parentModel The parent folder or item to upload into.\n     * @param file The browser File object to be uploaded.\n     * @param [_restParams] Override the rest request parameters. This is meant\n     * for internal use; do not pass this parameter.\n     * @param [otherParams] Optional Object containing other parameters for the\n     * initUpload request.\n     */\n    upload: function (parentModel, file, _restParams, otherParams) {\n        this.startByte = 0;\n        this.resumeInfo = null;\n        this.uploadHandler = null;\n        _restParams = _restParams || {\n            url: 'file',\n            method: 'POST',\n            data: _.extend({\n                parentType: parentModel.resourceName,\n                parentId: parentModel.get('_id'),\n                name: file.name,\n                size: file.size,\n                mimeType: file.type || 'application/octet-stream'\n            }, otherParams)\n        };\n\n        // Authenticate and generate the upload token for this file\n        restRequest(_restParams).done((upload) => {\n            var behavior = upload.behavior;\n            if (behavior && uploadHandlers[behavior]) {\n                this.uploadHandler = new uploadHandlers[behavior]({\n                    upload: upload,\n                    parentModel: parentModel,\n                    file: file\n                });\n                this.uploadHandler.on({\n                    'g:upload.complete': function (params) {\n                        this.set(params);\n                        this.trigger('g:upload.complete', params);\n                        this.uploadHandler = null;\n                    },\n                    'g:upload.chunkSent': function (params) {\n                        this.trigger('g:upload.chunkSent', params);\n                    },\n                    'g:upload.error': function (params) {\n                        this.trigger('g:upload.error', params);\n                    },\n                    'g:upload.errorStarting': function (params) {\n                        this.trigger('g:upload.errorStarting', params);\n                    },\n                    'g:upload.progress': function (params) {\n                        this.trigger('g:upload.progress', {\n                            startByte: params.startByte,\n                            loaded: params.loaded,\n                            total: params.file.size,\n                            file: params.file\n                        });\n                    }\n                }, this);\n                return this.uploadHandler.execute();\n            }\n\n            if (file.size > 0) {\n                // Begin uploading chunks of this file\n                this._uploadChunk(file, upload._id);\n            } else {\n                // Empty file, so we are done\n                this.set(upload);\n                this.trigger('g:upload.complete');\n            }\n        }).fail((resp) => {\n            var text = 'Error: ', identifier;\n\n            if (resp.status === 0) {\n                text += 'Connection to the server interrupted.';\n            } else {\n                text += resp.responseJSON.message;\n                identifier = resp.responseJSON.identifier;\n            }\n            this.trigger('g:upload.errorStarting', {\n                message: text,\n                identifier: identifier,\n                response: resp\n            });\n        });\n    },\n\n    /**\n     * If an error was triggered during the upload of this file, call this\n     * in order to attempt to resume it.\n     */\n    resumeUpload: function () {\n        if (this.uploadHandler !== null && this.uploadHandler.resume) {\n            return this.uploadHandler.resume();\n        }\n\n        // Request the actual offset we need to resume at\n        restRequest({\n            url: 'file/offset',\n            method: 'GET',\n            data: {\n                uploadId: this.resumeInfo.uploadId\n            },\n            error: null\n        }).done((resp) => {\n            this.startByte = resp.offset;\n            this._uploadChunk(this.resumeInfo.file, this.resumeInfo.uploadId);\n        }).fail((resp) => {\n            var msg;\n\n            if (resp.status === 0) {\n                msg = 'Could not connect to the server.';\n            } else {\n                msg = 'An error occurred when resuming upload, check console.';\n            }\n            this.trigger('g:upload.error', {\n                message: msg,\n                response: resp\n            });\n        });\n    },\n\n    abortUpload: function () {\n        if (!this.resumeInfo || !this.resumeInfo.uploadId) {\n            return;\n        }\n        restRequest({\n            url: 'system/uploads',\n            method: 'DELETE',\n            data: {\n                uploadId: this.resumeInfo.uploadId\n            },\n            error: null,\n            done: null\n        });\n    },\n\n    _uploadChunk: function (file, uploadId) {\n        var endByte = Math.min(this.startByte + getUploadChunkSize(), file.size);\n\n        this.chunkLength = endByte - this.startByte;\n        var sliceFn = file.webkitSlice ? 'webkitSlice' : 'slice';\n        var blob = file[sliceFn](this.startByte, endByte);\n\n        restRequest({\n            url: `file/chunk?offset=${this.startByte}&uploadId=${uploadId}`,\n            method: 'POST',\n            data: blob,\n            contentType: false,\n            processData: false,\n            success: (resp) => {\n                this.trigger('g:upload.chunkSent', {\n                    bytes: endByte - this.startByte\n                });\n\n                if (endByte === file.size) {\n                    this.startByte = 0;\n                    this.resumeInfo = null;\n                    this.set(resp);\n                    this.trigger('g:upload.complete');\n                } else {\n                    this.startByte = endByte;\n                    this._uploadChunk(file, uploadId);\n                }\n            },\n            error: (resp) => {\n                var text = 'Error: ', identifier;\n\n                if (resp.status === 0) {\n                    text += 'Connection to the server interrupted.';\n                } else {\n                    text += resp.responseJSON.message;\n                    identifier = resp.responseJSON.identifier;\n                }\n\n                this.resumeInfo = {\n                    uploadId: uploadId,\n                    file: file\n                };\n\n                this.trigger('g:upload.error', {\n                    message: text,\n                    identifier: identifier,\n                    response: resp\n                });\n            },\n            xhr: () => {\n                // Custom XHR so we can register a progress handler\n                var xhr = new window.XMLHttpRequest();\n                xhr.upload.addEventListener('progress', (e) => {\n                    this._uploadProgress(file, e);\n                });\n                return xhr;\n            }\n        });\n    },\n\n    /**\n     * Progress callback from XHR during upload. This will trigger useful\n     * progress events under the 'upload.progress' tag.\n     */\n    _uploadProgress: function (file, event) {\n        if (!event.lengthComputable) {\n            return;\n        }\n\n        // We only want to count bytes of the actual file, not the bytes of\n        // the request body corresponding to the other form parameters model\n        // we are also sending.\n        var loaded = this.chunkLength + event.loaded - event.total;\n\n        if (loaded >= 0) {\n            this.trigger('g:upload.progress', {\n                startByte: this.startByte,\n                loaded: loaded,\n                total: file.size,\n                file: file\n            });\n        }\n    }\n});\n\nexport default FileModel;\n","import Collection from '@girder/core/collections/Collection';\nimport FileModel from '@girder/core/models/FileModel';\n\nvar FileCollection = Collection.extend({\n    resourceName: 'file',\n    model: FileModel,\n\n    pageLimit: 100\n});\n\nexport default FileCollection;\n","import Collection from '@girder/core/collections/Collection';\nimport FolderModel from '@girder/core/models/FolderModel';\n\nvar FolderCollection = Collection.extend({\n    resourceName: 'folder',\n    model: FolderModel,\n\n    pageLimit: 100\n});\n\nexport default FolderCollection;\n","import _ from 'underscore';\n\nimport AccessControlledModel from '@girder/core/models/AccessControlledModel';\nimport { AccessType } from '@girder/core/constants';\nimport { getCurrentUser } from '@girder/core/auth';\nimport { restRequest } from '@girder/core/rest';\n\nvar GroupModel = AccessControlledModel.extend({\n    resourceName: 'group',\n\n    /**\n     * Send an invitation to this group to the user identified by userId.\n     * Requires moderator (write) access on the group.\n     * @param userId The ID of the user to invite.\n     * @param accessType The access level to invite them as.\n     * @param request Set to true if this is accepting a user's request to join.\n     * @param [params] Additional parameters to pass with the request.\n     */\n    sendInvitation: function (userId, accessType, request, params) {\n        params = params || {};\n        return restRequest({\n            url: `${this.resourceName}/${this.id}/invitation`,\n            data: _.extend({\n                userId: userId,\n                level: accessType\n            }, params),\n            method: 'POST',\n            error: null\n        }).done((resp) => {\n            this.set(resp);\n\n            if (!request && userId === getCurrentUser().get('_id')) {\n                if (params.force) {\n                    getCurrentUser().addToGroup(this.get('_id'));\n                } else {\n                    getCurrentUser().addInvitation(this.get('_id'), accessType);\n                }\n            }\n            this.trigger('g:invited');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /**\n     * Accept an invitation to join a group. Only call this if the user has\n     * already been invited to the group.\n     */\n    joinGroup: function () {\n        return restRequest({\n            url: `${this.resourceName}/${this.id}/member`,\n            method: 'POST'\n        }).done((resp) => {\n            getCurrentUser().addToGroup(this.get('_id'));\n            getCurrentUser().removeInvitation(this.get('_id'));\n\n            this.set(resp);\n\n            this.trigger('g:joined');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /**\n     * This will create an invitation request on this group for the current\n     * user. Requires read access on the group. If the user already has an\n     * outstanding invitation to this group, call joinGroup instead.\n     */\n    requestInvitation: function () {\n        return restRequest({\n            url: `${this.resourceName}/${this.id}/member`,\n            method: 'POST'\n        }).done((resp) => {\n            this.set(resp);\n\n            this.trigger('g:inviteRequested');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /**\n     * Promote a user to moderator or administrator. Requires admin access\n     * on the group.\n     * @param user The user model of the user being promoted\n     * @param level The AccessLevel (WRITE or ADMIN) to promote to\n     */\n    promoteUser: function (user, level) {\n        var role;\n        if (level === AccessType.WRITE) {\n            role = 'moderator';\n        } else if (level === AccessType.ADMIN) {\n            role = 'admin';\n        }\n        return restRequest({\n            url: `${this.resourceName}/${this.id}/${role}`,\n            data: {\n                userId: user.get('_id')\n            },\n            method: 'POST'\n        }).done((resp) => {\n            this.set(resp);\n\n            this.trigger('g:promoted');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /**\n     * Demote a user to ordinary member status. Requires admin access on the\n     * group.\n     * @param userId The id of the user to demote.\n     * @param level The current access level of the user.\n     */\n    demoteUser: function (userId, level) {\n        var role;\n        if (level === AccessType.WRITE) {\n            role = 'moderator';\n        } else if (level === AccessType.ADMIN) {\n            role = 'admin';\n        }\n        return restRequest({\n            url: `${this.resourceName}/${this.id}/${role}?userId=${userId}`,\n            method: 'DELETE'\n        }).done((resp) => {\n            this.set(resp);\n\n            this.trigger('g:demoted');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /**\n     * Remove a member of a group, or if the user is not already a member,\n     * this will simply delete any outstanding membership request or\n     * invitation for this user.\n     * @param userId The ID of the user to remove.\n     */\n    removeMember: function (userId) {\n        return restRequest({\n            url: `${this.resourceName}/${this.id}/member?userId=${userId}`,\n            method: 'DELETE'\n        }).done((resp) => {\n            if (userId === getCurrentUser().get('_id')) {\n                getCurrentUser().removeFromGroup(this.get('_id'));\n            }\n\n            this.set(resp);\n\n            this.trigger('g:removed');\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    },\n\n    /* Check if the current user has the authority in this group to directly\n     * add members.\n     *\n     * @returns: true if adding members is allowed.\n     */\n    mayAddMembers: function () {\n        if (getCurrentUser().get('admin')) {\n            return true;\n        }\n        var groupAddAllowed;\n        var addToGroupPolicy = this.get('_addToGroupPolicy');\n        if (addToGroupPolicy === 'nomod' || addToGroupPolicy === 'yesmod') {\n            groupAddAllowed = 'mod';\n        } else if (addToGroupPolicy === 'noadmin' || addToGroupPolicy === 'yesadmin') {\n            groupAddAllowed = 'admin';\n        } else {\n            return false;\n        }\n        var addAllowed = this.get('addAllowed') || '';\n        if (addAllowed === 'no' || (addToGroupPolicy.substr(0, 3) !== 'yes' &&\n                addAllowed.substr(0, 3) !== 'yes')) {\n            return false;\n        }\n        if (addAllowed === 'yesadmin') {\n            groupAddAllowed = 'admin';\n        }\n        if (groupAddAllowed === 'admin' &&\n                this.get('_accessLevel') >= AccessType.ADMIN) {\n            return true;\n        }\n        if (groupAddAllowed === 'mod' &&\n                this.get('_accessLevel') >= AccessType.WRITE) {\n            return true;\n        }\n        return false;\n    }\n});\n\nexport default GroupModel;\n","import Collection from '@girder/core/collections/Collection';\nimport GroupModel from '@girder/core/models/GroupModel';\n\nvar GroupCollection = Collection.extend({\n    resourceName: 'group',\n    model: GroupModel\n});\n\nexport default GroupCollection;\n","import Collection from '@girder/core/collections/Collection';\nimport ItemModel from '@girder/core/models/ItemModel';\n\nvar ItemCollection = Collection.extend({\n    resourceName: 'item',\n    model: ItemModel,\n\n    pageLimit: 100\n});\n\nexport default ItemCollection;\n","import Collection from '@girder/core/collections/Collection';\nimport UserModel from '@girder/core/models/UserModel';\nimport { restRequest } from '@girder/core/rest';\n\nvar UserCollection = Collection.extend({\n    resourceName: 'user',\n    model: UserModel,\n\n    // Override default sort field\n    sortField: 'lastName',\n    secondarySortField: 'firstName'\n}, {\n    getTotalCount: function () {\n        return restRequest({\n            url: 'user/details',\n            method: 'GET'\n        })\n            .then((resp) => {\n                return resp.nUsers;\n            });\n    }\n});\n\nexport default UserCollection;\n","import ApiKeyCollection from './ApiKeyCollection';\nimport AssetstoreCollection from './AssetstoreCollection';\nimport Collection from './Collection';\nimport CollectionCollection from './CollectionCollection';\nimport FileCollection from './FileCollection';\nimport FolderCollection from './FolderCollection';\nimport GroupCollection from './GroupCollection';\nimport ItemCollection from './ItemCollection';\nimport UserCollection from './UserCollection';\n\nexport {\n    ApiKeyCollection,\n    AssetstoreCollection,\n    Collection,\n    CollectionCollection,\n    FileCollection,\n    FolderCollection,\n    GroupCollection,\n    ItemCollection,\n    UserCollection\n};\n","/* ========================================================================\n * Bootstrap: modal.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options = options\n    this.$body = $(document.body)\n    this.$element = $(element)\n    this.$dialog = this.$element.find('.modal-dialog')\n    this.$backdrop = null\n    this.isShown = null\n    this.originalBodyPad = null\n    this.scrollbarWidth = 0\n    this.ignoreBackdropClick = false\n    this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION = '3.4.1'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n          this.$element[0] !== e.target &&\n          !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    var scrollbarWidth = this.scrollbarWidth\n    if (this.bodyIsOverflowing) {\n      this.$body.css('padding-right', bodyPad + scrollbarWidth)\n      $(this.fixedContent).each(function (index, element) {\n        var actualPadding = element.style.paddingRight\n        var calculatedPadding = $(element).css('padding-right')\n        $(element)\n          .data('padding-right', actualPadding)\n          .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n      })\n    }\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n    $(this.fixedContent).each(function (index, element) {\n      var padding = $(element).data('padding-right')\n      $(element).removeData('padding-right')\n      element.style.paddingRight = padding ? padding : ''\n    })\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this = $(this)\n      var data = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this = $(this)\n    var href = $this.attr('href')\n    var target = $this.attr('data-target') ||\n      (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n    var $target = $(document).find(target)\n    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n","import $ from 'jquery';\n\nimport 'bootstrap/js/modal';\n\n/**\n * This should be used instead of calling bootstrap's modal() jQuery\n * method directly. This unbinds all previous events from the dialog,\n * then calls modal on it and binds the bootstrap close events.\n * @param view The view object. Pass \"false\" for special cases where the\n *             dialog does not correspond to a View object.  Pass 'close'\n *             to just close an open modal dialog.\n */\n$.fn.girderModal = function (view) {\n    /* If we have a modal dialog open, or one is in the process of closing,\n     * close that dialog before opening the new one.  This prevents\n     * layering modal dialogs, but also makes sure that we don't have a\n     * problem switching from one modal dialog to another. */\n    if ($(this).is('.modal')) {\n        /* We have to reach into the backbone modal object a little to see\n         * if we need to do anything.  By turning off the fade as we\n         * remove the old dialog, the removal is synchronous and we are\n         * sure it is gone before we add the new dialog. */\n        if ($(this).data('bs.modal') && $(this).data('bs.modal').isShown) {\n            var elem = $($(this).data('bs.modal').$element);\n            var hasFade = elem.hasClass('fade');\n            elem.removeClass('fade');\n            $(this).modal('hide');\n            elem.toggleClass('fade', hasFade);\n        }\n    }\n    if (view !== 'close') {\n        this.off();\n        // It seems as if $foo.girderModal().on('shown.bs.modal', callback)\n        // does not trigger the callback because the call to modal() below is showing\n        // the modal (and sending the 'shown.bs.modal' event) *before* we get to\n        // register the event in .on('shown.bs.modal', cb). Let's show\n        // the modal in the next animation frame to fix this behavior for now.\n        setTimeout(() => {\n            this.modal().find('[data-dismiss=\"modal\"]').off('click').on('click', () => {\n                this.modal('hide');\n            });\n        }, 0);\n        if (view !== false) {\n            view.delegateEvents();\n        }\n    }\n    return this;\n};\n","import $ from 'jquery';\nimport Backbone from 'backbone';\n\nimport events from '@girder/core/events';\nimport { parseQueryString } from '@girder/core/misc';\n\nimport '@girder/core/utilities/jquery/girderModal';\n\nvar Router = Backbone.Router.extend({\n    initialize: function () {\n        this._enabled = true;\n    },\n\n    execute: function (callback, args) {\n        args.push(parseQueryString(args.pop()));\n        var queryString = args[args.length - 1];\n        if (callback) {\n            callback.apply(this, args);\n        }\n\n        // handle \"top level\" dialogs\n        if (queryString.dialog === 'login') {\n            events.trigger('g:loginUi');\n        } else if (queryString.dialog === 'register') {\n            events.trigger('g:registerUi');\n        } else if (queryString.dialog === 'resetpassword') {\n            events.trigger('g:resetPasswordUi');\n        }\n    },\n\n    /**\n     * Set or get the enabled state of the router. Call with a boolean argument\n     * to set the enabled state, or with no arguments to get the state.\n     */\n    enabled: function () {\n        if (arguments.length) {\n            this._enabled = !!arguments[0];\n        }\n        return this._enabled;\n    },\n\n    navigate: function () {\n        if (this._enabled) {\n            Backbone.Router.prototype.navigate.apply(this, arguments);\n        }\n    }\n});\n\nvar router = new Router();\n\n// When the back button is pressed, we want to close open modals.\nrouter.on('route', function (route, params) {\n    if (!params.slice(-1)[0].dialog) {\n        $('.modal').girderModal('close');\n    }\n});\n\nexport default router;\n",".modal-dialog\n  .modal-content\n    .modal-body\n      p\n      if params.msgConfirmation\n        p.g-additional-text\n        p.g-additional-instruction\n          | You need to enter '#{params.yesText.toUpperCase()} #{params.name}'\n          | and then click on the \"#{params.yesText}\" button\n        input#g-confirm-text.input-sm.form-control(type='text', name='confirmMsg')\n        spam.g-msg-error\n    .modal-footer\n      a.btn.btn-small.btn-default(data-dismiss=\"modal\")= params.noText\n      a#g-confirm-button.btn.btn-small(class=params.yesClass)= params.yesText\n","import $ from 'jquery';\nimport _ from 'underscore';\nimport Backbone from 'backbone';\n\nimport router from '@girder/core/router';\nimport { parseQueryString, splitRoute } from '@girder/core/misc';\n\nimport ConfirmDialogTemplate from '@girder/core/templates/widgets/confirmDialog.pug';\n\nimport '@girder/core/utilities/jquery/girderModal';\n\nfunction handleClose(name, options, nameId) {\n    if (!router.enabled()) {\n        return;\n    }\n    var curRoute = Backbone.history.fragment,\n        routeParts = splitRoute(curRoute),\n        queryString = parseQueryString(routeParts.name),\n        dialogName = queryString.dialog,\n        dialogId = queryString.dialogid;\n    delete queryString.dialog;\n    delete queryString.dialogid;\n    var unparsedQueryString = $.param(queryString);\n    if (unparsedQueryString.length > 0) {\n        unparsedQueryString = '?' + unparsedQueryString;\n    }\n    if (dialogName === name && dialogId === nameId) {\n        router.navigate(routeParts.base + unparsedQueryString, options);\n    }\n}\n\nfunction handleOpen(name, options, nameId) {\n    if (!router.enabled()) {\n        return;\n    }\n    var curRoute = Backbone.history.fragment,\n        routeParts = splitRoute(curRoute),\n        queryString = parseQueryString(routeParts.name),\n        dialogName = queryString.dialog,\n        dialogId = queryString.dialogid;\n\n    if (dialogName !== name || nameId !== dialogId) {\n        queryString.dialog = name;\n        if (nameId) {\n            queryString.dialogid = nameId;\n        }\n        var unparsedQueryString = $.param(queryString);\n        if (unparsedQueryString.length > 0) {\n            unparsedQueryString = '?' + unparsedQueryString;\n        }\n        router.navigate(routeParts.base + unparsedQueryString, options);\n    }\n}\n\n/**\n * Prompt the user to confirm an action.\n * @param {Object} [params] Parameters controlling this function's behavior.\n * @param {String} [params.text] The text to prompt the user with.\n * @param {String} [params.yesText] The text for the confirm button.\n * @param {String} [params.yesClass] Class string to apply to the confirm button.\n * @param {String} [params.noText] The text for the no/cancel button.\n * @param {Boolean} [params.escapedHtml] If you want to render the text as HTML rather than\n *        plain text, set this to true to acknowledge that you have escaped any\n *        user-created data within the text to prevent XSS exploits.\n * @param {Boolean} [params.msgConfirmation] If you want to add a new security before\n *        perform an action. This will ask to enter a specific string \"params.yesText params.name\"\n * @param {String} [params.additionalText] Additional text to display before the confirmation\n *        input.\n * @param {String} [params.name] The name to enter in order to confirm an action.\n * @param {Function} [params.confirmCallback]Callback function when the user confirms the action.\n */\nfunction confirm(params) {\n    params = _.extend({\n        text: 'Are you sure?',\n        yesText: 'Yes',\n        yesClass: 'btn-danger',\n        noText: 'Cancel',\n        escapedHtml: false,\n        msgConfirmation: false,\n        additionalText: '',\n        name: ''\n    }, params);\n    $('#g-dialog-container').html(ConfirmDialogTemplate({\n        params: params\n    })).girderModal(false).one('hidden.bs.modal', function () {\n        $('#g-confirm-button').off('click');\n    });\n\n    const el = $('#g-dialog-container').find('.modal-body>p:first-child');\n    if (params.escapedHtml) {\n        el.html(params.text);\n    } else {\n        el.text(params.text);\n    }\n    if (params.msgConfirmation) {\n        if (params.escapedHtml) {\n            $('.g-additional-text').html(params.additionalText);\n        } else {\n            $('.g-additional-text').text(params.additionalText);\n        }\n    }\n\n    $('#g-confirm-button').off('click').on('click', function () {\n        if (params.msgConfirmation) {\n            const key = `${params.yesText.toUpperCase()} ${params.name}`;\n            const msg = $('#g-confirm-text').val();\n            if (msg.toUpperCase() === key.toUpperCase()) {\n                $('#g-dialog-container').modal('hide');\n                params.confirmCallback();\n            } else if (msg.toUpperCase() === '') {\n                $('.g-msg-error').html(`Error: You need to enter <b>'${key}'</b>.`);\n                $('.g-msg-error').css('color', 'red');\n            } else {\n                $('.g-msg-error').html(`Error: <b>'${msg}'</b> isn't <b>'${key}'</b>`);\n                $('.g-msg-error').css('color', 'red');\n            }\n        } else {\n            $('#g-dialog-container').modal('hide');\n            params.confirmCallback();\n        }\n    });\n}\n\nexport {\n    confirm,\n    handleClose,\n    handleOpen\n};\n","import AccessControlledModel from './AccessControlledModel';\nimport ApiKeyModel from './ApiKeyModel';\nimport AssetstoreModel from './AssetstoreModel';\nimport CollectionModel from './CollectionModel';\nimport FileModel from './FileModel';\nimport FolderModel from './FolderModel';\nimport GroupModel from './GroupModel';\nimport ItemModel from './ItemModel';\nimport MetadataMixin from './MetadataMixin';\nimport Model from './Model';\nimport UserModel from './UserModel';\n\nexport {\n    AccessControlledModel,\n    ApiKeyModel,\n    AssetstoreModel,\n    CollectionModel,\n    FileModel,\n    FolderModel,\n    GroupModel,\n    ItemModel,\n    MetadataMixin,\n    Model,\n    UserModel\n};\n","/**\n * Expose the symbols for a girder plugin under the window.girder.plugins\n * namespace. Required since each plugin is loaded dynamically.\n */\nvar registerPluginNamespace = function (pluginName, symbols) {\n    window.girder.plugins[pluginName] = symbols;\n};\n\nexport {\n    registerPluginNamespace\n};\n","import _ from 'underscore';\n\n/**\n * Wrap the prototype method of a given object.\n *\n * @param obj The object whose prototype to extend, e.g. MyView\n * @param funcName The name of the function to wrap, e.g. \"render\"\n * @param wrapper The wrapper function, which should be a function taking the\n *     underlying wrapped function as its first argument. The wrapped function\n *     should be called with .call(this[, arguments]) inside of the wrapper in\n *     order to preserve \"this\" semantics.\n */\nfunction wrap(obj, funcName, wrapper) {\n    obj.prototype[funcName] = _.wrap(obj.prototype[funcName], wrapper);\n}\n\nvar _pluginConfigRoutes = {};\n\n/**\n * Expose a plugin configuration page via the admin plugins page.\n * @param pluginName The canonical plugin name, i.e. its directory name\n * @param route The route to trigger that will render the plugin config.\n */\nfunction exposePluginConfig(pluginName, route) {\n    _pluginConfigRoutes[pluginName] = route;\n}\n\nfunction getPluginConfigRoute(pluginName) {\n    return _pluginConfigRoutes[pluginName];\n}\n\nexport {\n    exposePluginConfig,\n    getPluginConfigRoute,\n    wrap\n};\n","import eventStream from './EventStream';\nimport * as PluginUtils from './PluginUtils';\nimport * as S3UploadHandler from './S3UploadHandler';\n\nexport {\n    eventStream,\n    PluginUtils,\n    S3UploadHandler\n};\n","/* ========================================================================\n * Bootstrap: alert.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.4.1'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    selector    = selector === '#' ? [] : selector\n    var $parent = $(document).find(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n","import _ from 'underscore';\nimport Backbone from 'backbone';\n\nimport events from '@girder/core/events';\nimport eventStream from '@girder/core/utilities/EventStream';\n\nvar View = Backbone.View.extend({\n    // eslint-disable-next-line backbone/no-constructor\n    constructor: function (opts) {\n        if (opts && _.has(opts, 'parentView')) {\n            if (opts.parentView) {\n                opts.parentView.registerChildView(this);\n                this.parentView = opts.parentView;\n            }\n        } else {\n            console.error('View created with no parentView property set. ' +\n                          'This view may not be garbage collected.');\n        }\n        Backbone.View.prototype.constructor.apply(this, arguments);\n    },\n\n    /**\n     * Remove a view, unbinding its events and removing its listeners on\n     * events so that it can be garbage collected.\n     */\n    destroy: function () {\n        _.each(this._childViews, function (child) {\n            child.destroy();\n        });\n        this._childViews = null;\n\n        this.undelegateEvents();\n        this.stopListening();\n        this.off();\n        events.off(null, null, this);\n        eventStream.off(null, null, this);\n\n        if (this.parentView) {\n            this.parentView.unregisterChildView(this);\n        }\n\n        // Modal views need special cleanup.\n        if (this.$el.is('.modal')) {\n            var el = this.$el;\n            if (el.data('bs.modal') && el.data('bs.modal').isShown) {\n                el.on('hidden.bs.modal', function () {\n                    el.empty().off().removeData();\n                }).modal('hide');\n                el.modal('removeBackdrop');\n            } else {\n                el.modal('hideModal');\n                el.modal('removeBackdrop');\n                el.empty().off().removeData();\n            }\n        } else {\n            this.$el.empty().off().removeData();\n        }\n    },\n\n    /**\n     * It's typically not necessary to call this directly. Instead, instantiate\n     * child views with the \"parentView\" field.\n     */\n    registerChildView: function (child) {\n        this._childViews = this._childViews || [];\n        this._childViews.push(child);\n    },\n\n    /**\n     * Typically, you will not need to call this method directly. Calling\n     * destroy on a child element will automatically unregister it from its\n     * parent view if the parent view was specified.\n     */\n    unregisterChildView: function (child) {\n        this._childViews = _.without(this._childViews, child);\n    }\n});\n\nexport default View;\n",".g-footer-links\n  a#g-about-link(href=\"http://girder.readthedocs.org/en/latest/user-guide.html\") About\n  if contactHref\n    a#g-contact-link(href=contactHref) Contact\n  a(href=apiRoot) Web API\n  a#g-bug-link(href=\"https://github.com/girder/girder/issues/new\") Report a bug\n  if privacyNoticeLink\n    a#g-privacy-notice-link(href=privacyNoticeLink) Privacy Notice\n\n.g-footer-info\n  | &copy; Kitware, Inc.\n","import View from '@girder/core/views/View';\nimport { getApiRoot } from '@girder/core/rest';\n\nimport LayoutFooterTemplate from '@girder/core/templates/layout/layoutFooter.pug';\n\nimport '@girder/core/stylesheets/layout/footer.styl';\n\n/**\n * This view shows the footer in the layout.\n */\nvar LayoutFooterView = View.extend({\n\n    initialize: function (settings) {\n        const contactEmail = settings.contactEmail || null;\n        this.contactHref = contactEmail !== null ? `mailto:${contactEmail}` : null;\n        this.privacyNoticeHref = settings.privacyNoticeHref || null;\n    },\n\n    render: function () {\n        this.$el.html(LayoutFooterTemplate({\n            apiRoot: getApiRoot(),\n            contactHref: this.contactHref,\n            privacyNoticeLink: this.privacyNoticeHref\n        }));\n        return this;\n    }\n});\n\nexport default LayoutFooterView;\n",".g-global-nav-main\n  ul.g-global-nav\n    each navItem in navItems\n      li.g-global-nav-li\n        a.g-nav-link(g-target=navItem.target, g-name=navItem.name, href=`#${navItem.target}`)\n          i(class=navItem.icon)\n          span= navItem.name\n","import $ from 'jquery';\nimport Backbone from 'backbone';\n\nimport router from '@girder/core/router';\nimport View from '@girder/core/views/View';\nimport events from '@girder/core/events';\nimport { getCurrentUser } from '@girder/core/auth';\n\nimport LayoutGlobalNavTemplate from '@girder/core/templates/layout/layoutGlobalNav.pug';\n\nimport '@girder/core/stylesheets/layout/globalNav.styl';\n\n/**\n * This view shows a list of global navigation links that should be\n * displayed at all times.\n */\nvar LayoutGlobalNavView = View.extend({\n    events: {\n        'click .g-nav-link': function (event) {\n            event.preventDefault(); // so we can keep the href\n\n            var link = $(event.currentTarget);\n\n            router.navigate(link.attr('g-target'), { trigger: true });\n\n            // Must call this after calling navigateTo, since that\n            // deactivates all global nav links.\n            link.parent().addClass('g-active');\n        }\n    },\n\n    initialize: function (settings) {\n        events.on('g:highlightItem', this.selectForView, this);\n        events.on('g:login', this.render, this);\n        events.on('g:logout', this.render, this);\n        events.on('g:login-changed', this.render, this);\n\n        settings = settings || {};\n        if (settings.navItems) {\n            this.navItems = settings.navItems;\n        } else {\n            this.defaultNavItems = [{\n                name: 'Collections',\n                icon: 'icon-sitemap',\n                target: 'collections'\n            }, {\n                name: 'Groups',\n                icon: 'icon-users',\n                target: 'groups'\n            }];\n        }\n    },\n\n    render: function () {\n        var navItems;\n        if (this.navItems) {\n            navItems = this.navItems;\n        } else {\n            navItems = this.defaultNavItems;\n            const currentUser = getCurrentUser()\n            if (currentUser) {\n                // copy navItems so that this.defaultNavItems is unchanged\n                navItems = navItems.slice();\n                navItems.push({\n                    name: 'Users',\n                    icon: 'icon-user',\n                    target: 'users'\n                });\n                navItems.push({\n                    name: 'My Folders',\n                    icon: 'icon-folder',\n                    target: 'user/' + currentUser.id\n                });\n                const userIsAdmin = currentUser.get('admin')\n                if (userIsAdmin) {\n                    navItems.push({\n                        name: 'Admin console',\n                        icon: 'icon-wrench',\n                        target: 'admin'\n                    });\n                }\n            }\n        }\n        this.$el.html(LayoutGlobalNavTemplate({\n            navItems: navItems\n        }));\n\n        if (Backbone.history.fragment) {\n            this.$('[g-target=\"' + Backbone.history.fragment + '\"]')\n                .parent().addClass('g-active');\n        }\n\n        return this;\n    },\n\n    /**\n     * Highlight the item with the given target attribute, which is the name\n     * of the view it navigates to.\n     */\n    selectForView: function (viewName) {\n        this.deactivateAll();\n        this.$('[g-name=\"' + viewName.slice(0, -4) + '\"]').parent().addClass('g-active');\n    },\n\n    deactivateAll: function () {\n        this.$('.g-global-nav-li').removeClass('g-active');\n    }\n});\n\nexport default LayoutGlobalNavView;\n",".g-user-text\n  if user\n    a.g-user-dropdown-link(data-toggle=\"dropdown\", data-target=\"#g-user-action-menu\")\n      | #[i.icon-user] #{user.get('login')}\n      i.icon-down-open\n    #g-user-action-menu.dropdown\n      ul.dropdown-menu(role=\"menu\")\n        li(role=\"presentation\")\n          a.g-my-folders(href=`#user/${user.id}`)\n            i.icon-folder\n            | My folders\n        li(role=\"presentation\")\n          a.g-my-settings(href=`#useraccount/${user.id}/info`)\n            i.icon-cog\n            | My account\n        li.divider(role=\"presentation\")\n        li(role=\"presentation\")\n          a.g-logout\n            i.icon-logout\n            | Log out\n  else\n    if registrationPolicy !== 'closed'\n      a.g-register Register\n      .g-or-text or\n    a.g-login Log In\n      i.icon-login\n","/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.4.1'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector !== '#' ? $(document).find(selector) : null\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n","import View from '@girder/core/views/View';\nimport events from '@girder/core/events';\nimport { logout, getCurrentUser } from '@girder/core/auth';\n\nimport LayoutHeaderUserTemplate from '@girder/core/templates/layout/layoutHeaderUser.pug';\n\nimport '@girder/core/stylesheets/layout/headerUser.styl';\n\nimport 'bootstrap/js/dropdown';\n\n/**\n * This view shows the user menu, or register/sign in links if the user is\n * not logged in.\n */\nvar LayoutHeaderUserView = View.extend({\n    events: {\n        'click a.g-login': function () {\n            events.trigger('g:loginUi');\n        },\n\n        'click a.g-register': function () {\n            events.trigger('g:registerUi');\n        },\n\n        'click a.g-logout': logout\n    },\n\n    initialize: function (settings) {\n        this.registrationPolicy = settings.registrationPolicy;\n\n        events.on('g:login', this.render, this);\n        events.on('g:login-changed', this.render, this);\n        events.on('g:logout', this.render, this);\n    },\n\n    render: function () {\n        this.$el.html(LayoutHeaderUserTemplate({\n            user: getCurrentUser(),\n            registrationPolicy: this.registrationPolicy\n        }));\n        return this;\n    }\n});\n\nexport default LayoutHeaderUserView;\n","/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n  'use strict';\n\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n  var uriAttrs = [\n    'background',\n    'cite',\n    'href',\n    'itemtype',\n    'longdesc',\n    'poster',\n    'src',\n    'xlink:href'\n  ]\n\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  }\n\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase()\n\n    if ($.inArray(attrName, allowedAttributeList) !== -1) {\n      if ($.inArray(attrName, uriAttrs) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n      }\n\n      return true\n    }\n\n    var regExp = $(allowedAttributeList).filter(function (index, value) {\n      return value instanceof RegExp\n    })\n\n    // Check if a regular expression validates the attribute.\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml)\n    }\n\n    // IE 8 and below don't support createHTMLDocument\n    if (!document.implementation || !document.implementation.createHTMLDocument) {\n      return unsafeHtml\n    }\n\n    var createdDocument = document.implementation.createHTMLDocument('sanitization')\n    createdDocument.body.innerHTML = unsafeHtml\n\n    var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n    var elements = $(createdDocument.body).find('*')\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var el = elements[i]\n      var elName = el.nodeName.toLowerCase()\n\n      if ($.inArray(elName, whitelistKeys) === -1) {\n        el.parentNode.removeChild(el)\n\n        continue\n      }\n\n      var attributeList = $.map(el.attributes, function (el) { return el })\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n      for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n        if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n          el.removeAttribute(attributeList[j].nodeName)\n        }\n      }\n    }\n\n    return createdDocument.body.innerHTML\n  }\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.4.1'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    },\n    sanitize : true,\n    sanitizeFn : null,\n    whiteList : DefaultWhitelist\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    var dataAttributes = this.$element.data()\n\n    for (var dataAttr in dataAttributes) {\n      if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n        delete dataAttributes[dataAttr]\n      }\n    }\n\n    options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    if (options.sanitize) {\n      options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    if (this.options.html) {\n      if (this.options.sanitize) {\n        title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n      }\n\n      $tip.find('.tooltip-inner').html(title)\n    } else {\n      $tip.find('.tooltip-inner').text(title)\n    }\n\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n  Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n    return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n  }\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: popover.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.4.1'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    if (this.options.html) {\n      var typeContent = typeof content\n\n      if (this.options.sanitize) {\n        title = this.sanitizeHtml(title)\n\n        if (typeContent === 'string') {\n          content = this.sanitizeHtml(content)\n        }\n      }\n\n      $tip.find('.popover-title').html(title)\n      $tip.find('.popover-content').children().detach().end()[\n        typeContent === 'string' ? 'html' : 'append'\n      ](content)\n    } else {\n      $tip.find('.popover-title').text(title)\n      $tip.find('.popover-content').children().detach().end().text(content)\n    }\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n        o.content.call($e[0]) :\n        o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n",".g-search-wrapper\n  a.g-search-options-button.btn.btn-sm(title=\"Show search help\")\n    i.g-search-state.icon-search\n  input.g-search-field.form-control.input-sm(\n    type=\"text\", placeholder=placeholder, mode-select=(modes.length > 1 ? \"on\" : \"off\"))\n  .g-search-results.dropdown\n    ul.dropdown-menu(role=\"menu\")\n  if modes.length > 1\n    a.g-search-mode-choose.btn.btn-sm(title=\"Search mode\")\n      i.icon-down-dir\n","p.g-search-help-text= modeHelp\nif mode === 'text'\n  ul.g-search-examples-list\n    li\n      code cat dog\n      |  returns documents containing either \"cat\" or \"dog\".\n    li\n      code \"cat\" \"dog\"\n      |  returns documents containing both \"cat\" and \"dog\".\n    li\n      code \"cat dog\"\n      |  returns documents containing the phrase \"cat dog\".\n","p Choose search mode:\n\nfor mode in modes\n  .radio\n    label\n      input.g-search-mode-radio(\n          type=\"radio\", name=\"search-mode\", value=mode,\n          checked=(mode === currentMode ? 'checked' : undefined))\n      = getModeDescription(mode)\n","each result in results\n  li.g-search-result\n    a.g-search-result-element(data-resource-id=result.id, data-resource-type=result.type, data-resource-icon=result.icon, tabindex=\"-1\")\n      i(class=`icon-${result.icon}`)\n      | #{result.text}\nif results.length === 0\n  li.g-no-search-results.disabled\n    a(tabindex=\"-1\")\n      i.icon-block\n        | No results found\nelse\n  li.g-search-result\n    a.g-search-result-page-link(data-resource-type=\"resultPage\")\n      | ...\n","import $ from 'jquery';\nimport _ from 'underscore';\n// Bootstrap tooltip is required by popover\nimport 'bootstrap/js/tooltip';\nimport 'bootstrap/js/popover';\n\nimport View from '@girder/core/views/View';\nimport { restRequest } from '@girder/core/rest';\nimport router from '@girder/core/router';\n\nimport SearchFieldTemplate from '@girder/core/templates/widgets/searchField.pug';\nimport SearchHelpTemplate from '@girder/core/templates/widgets/searchHelp.pug';\nimport SearchModeSelectTemplate from '@girder/core/templates/widgets/searchModeSelect.pug';\nimport SearchResultsTemplate from '@girder/core/templates/widgets/searchResults.pug';\nimport '@girder/core/stylesheets/widgets/searchFieldWidget.styl';\n\n/**\n * This widget provides a text field that will search any set of data types\n * and show matching results as the user types. Results can be clicked,\n * triggering a callback.\n */\nvar SearchFieldWidget = View.extend({\n    events: {\n        'input .g-search-field': 'search',\n\n        'click .g-search-mode-radio': function (e) {\n            this.currentMode = $(e.target).val();\n            this.hideResults().search();\n\n            window.setTimeout(() => {\n                this.$('.g-search-mode-choose').popover('hide');\n            }, 250);\n        },\n\n        'click .g-search-result>a': function (e) {\n            this._resultClicked($(e.currentTarget));\n        },\n\n        'keydown .g-search-field': function (e) {\n            var code = e.keyCode || e.which;\n            var list, pos;\n            if (code === 13 && this.noResourceSelected) { /* enter without resource selected */\n                e.preventDefault();\n                if (this.$('.g-search-field').val() !== '' && !this.noResultsPage) {\n                    this._goToResultPage(this.$('.g-search-field').val(), this.currentMode);\n                }\n            } else if (code === 40 || code === 38) {\n                this.noResourceSelected = false;\n                if (code === 40) { /* down arrow */\n                    list = this.$('.g-search-result');\n                    pos = list.index(list.filter('.g-search-selected')) + 1;\n                    list.removeClass('g-search-selected');\n                    if (pos < list.length) {\n                        list.eq(pos).addClass('g-search-selected');\n                    }\n                    if (pos === list.length) {\n                        this.noResourceSelected = true;\n                    }\n                } else if (code === 38) { /* up arrow */\n                    list = this.$('.g-search-result');\n                    pos = list.index(list.filter('.g-search-selected')) - 1;\n                    list.removeClass('g-search-selected');\n                    if (pos === -1) {\n                        this.noResourceSelected = true;\n                    }\n                    if (pos === -2) {\n                        pos = list.length - 1;\n                    }\n                    if (pos >= 0) {\n                        list.eq(pos).addClass('g-search-selected');\n                    }\n                }\n            } else if (code === 13) { /* enter with resource selected */\n                e.preventDefault();\n                this.noResourceSelected = true;\n                var link = this.$('.g-search-result.g-search-selected>a');\n                if (link.length) {\n                    this._resultClicked(link);\n                }\n            }\n        }\n    },\n\n    /**\n     * @param [settings.placeholder=\"Search...\"] The placeholder text for the input field.\n     * @param [settings.getInfoCallback] For custom resource types, this callback can\n     *        be passed in to resolve their title and icon. This callback should\n     *        return an object with \"icon\" and \"text\" fields if it can resolve\n     *        the result, or return falsy otherwise.\n     * @param [settings.modes=[\"text\", \"prefix\"]] A string or list of strings\n     *        representing the allowed search modes. Supported modes: \"text\", \"prefix\".\n     *        If multiple are allowed, users are able to select which one to use\n     *        via a dropdown.\n     * @param [settings.noResultsPage=false] If truthy, don't jump to a results\n     *        page if enter is typed with a list of search results.\n     */\n    initialize: function (settings) {\n        this.ajaxLock = false;\n        this.pending = null;\n        this.noResourceSelected = true;\n        this.placeholder = settings.placeholder || 'Search...';\n        this.noResultsPage = settings.noResultsPage || false;\n        this.getInfoCallback = settings.getInfoCallback || null;\n        /* The order of settings.types give the order of the display of the elements :\n         *     ['collection', 'folder', 'item'] will be render like this\n         *       [icon-collection] Collections..\n         *       [icon-folder] Folders..\n         *       [icon-item] Items..\n         */\n        this.types = settings.types || [];\n        this.modes = settings.modes || SearchFieldWidget.getModes();\n\n        if (!_.isArray(this.modes)) {\n            this.modes = [this.modes];\n        }\n\n        this.currentMode = this.modes[0];\n\n        // Do not change the icon for fast searches, to prevent jitter\n        this._animatePending = _.debounce(this._animatePending, 100);\n    },\n\n    search: function () {\n        var q = this.$('.g-search-field').val();\n\n        if (!q) {\n            this.hideResults();\n            return this;\n        }\n\n        if (this.ajaxLock) {\n            this.pending = q;\n        } else {\n            this._doSearch(q);\n        }\n\n        return this;\n    },\n\n    _goToResultPage: function (query, mode) {\n        this.resetState();\n        router.navigate(`#search/results?query=${query}&mode=${mode}`, { trigger: true });\n    },\n\n    _resultClicked: function (link) {\n        if (link.data('resourceType') === 'resultPage') {\n            this._goToResultPage(this.$('.g-search-field').val(), this.currentMode);\n        } else {\n            this.trigger('g:resultClicked', {\n                type: link.data('resourceType'),\n                id: link.data('resourceId'),\n                text: link.text().trim(),\n                icon: link.data('resourceIcon')\n            });\n        }\n    },\n\n    render: function () {\n        this.$el.html(SearchFieldTemplate({\n            placeholder: this.placeholder,\n            modes: this.modes,\n            currentMode: this.currentMode\n        }));\n\n        this.$('.g-search-options-button').popover({\n            trigger: 'click',\n            viewport: {\n                selector: 'body',\n                padding: 10\n            },\n            content: () => {\n                return SearchHelpTemplate({\n                    mode: this.currentMode,\n                    modeHelp: SearchFieldWidget.getModeHelp(this.currentMode)\n                });\n            },\n            html: true,\n            sanitize: false\n        }).on('hide.bs.popover', function () {\n            // always Set the popover's click state to false when hidden\n            // even when hidden by clicking outside the element itself\n            const popover = $(this).data('bs.popover');\n            if (popover) {\n                popover.inState.click = false;\n            }\n        });\n\n        this.$('.g-search-mode-choose').popover({\n            trigger: 'click',\n            viewport: {\n                selector: 'body',\n                padding: 10\n            },\n            content: () => {\n                return SearchModeSelectTemplate({\n                    modes: this.modes,\n                    currentMode: this.currentMode,\n                    getModeDescription: SearchFieldWidget.getModeDescription\n                });\n            },\n            html: true,\n            sanitize: false\n        }).on('hide.bs.popover', function () {\n            // always Set the popover's click state to false when hidden\n            // even when hidden by clicking outside the element itself\n            const popover = $(this).data('bs.popover');\n            if (popover) {\n                popover.inState.click = false;\n            }\n        });\n\n        // Dismiss the \"Search Mode\" popover when clicking outside the popover and its trigger\n        $(document).on('click.searchModePopover', (e) => {\n            const $trigger = this.$('.g-search-mode-choose');\n            const clickedTrigger = $trigger.is(e.target) || $trigger.has(e.target).length > 0;\n            const clickedPopover = $(e.target).closest('.popover').length > 0;\n            if (!clickedTrigger && !clickedPopover) {\n                $trigger.popover('hide');\n            }\n        });\n\n        // Dismiss the \"Search Help\" popover when clicking outside the popover and its trigger\n        $(document).on('click.searchHelpPopover', (e) => {\n            const $trigger = this.$('.g-search-options-button');\n            const clickedTrigger = $trigger.is(e.target) || $trigger.has(e.target).length > 0;\n            const clickedPopover = $(e.target).closest('.popover').length > 0;\n            if (!clickedTrigger && !clickedPopover) {\n                $trigger.popover('hide');\n            }\n        });\n\n        return this;\n    },\n\n    /**\n     * Parent views should call this if they wish to hide the result list.\n     */\n    hideResults: function () {\n        this.$('.dropdown').removeClass('open');\n        return this;\n    },\n\n    /**\n     * Parent views should call this if they wish to clear the search text.\n     */\n    clearText: function () {\n        this.$('.g-search-field').val('');\n        return this;\n    },\n\n    /**\n     * Parent views should call this if they wish to reset the search widget,\n     * i.e. clear it and hide any results.\n     */\n    resetState: function () {\n        return this.hideResults().clearText();\n    },\n\n    _animatePending: function () {\n        const isPending = this.ajaxLock;\n        this.$('.g-search-state')\n            .toggleClass('icon-search', !isPending)\n            .toggleClass('icon-spin4 animate-spin', isPending);\n    },\n\n    _doSearch: function (q) {\n        this.ajaxLock = true;\n        this.pending = null;\n        this._animatePending();\n\n        restRequest({\n            url: 'resource/search',\n            data: {\n                q: q,\n                mode: this.currentMode,\n                types: JSON.stringify(_.intersection(\n                    this.types,\n                    SearchFieldWidget.getModeTypes(this.currentMode))\n                )\n            }\n        }).done((results) => {\n            this.ajaxLock = false;\n            this._animatePending();\n\n            if (this.pending) {\n                this._doSearch(this.pending);\n            } else {\n                if (!this.$('.g-search-field').val()) {\n                    // The search field is empty, so this widget probably had \"this.resetState\"\n                    // called while the search was pending. So, don't render the (now obsolete)\n                    // results.\n                    return;\n                }\n\n                var resources = [];\n                _.each(this.types, function (type) {\n                    _.each(results[type] || [], function (result) {\n                        var text, icon;\n                        if (type === 'user') {\n                            text = result.firstName + ' ' + result.lastName +\n                                ' (' + result.login + ')';\n                            icon = 'user';\n                        } else if (type === 'group') {\n                            text = result.name;\n                            icon = 'users';\n                        } else if (type === 'collection') {\n                            text = result.name;\n                            icon = 'sitemap';\n                        } else if (type === 'folder') {\n                            text = result.name;\n                            icon = 'folder';\n                        } else if (type === 'item') {\n                            text = result.name;\n                            icon = 'doc-text-inv';\n                        } else {\n                            if (this.getInfoCallback) {\n                                var res = this.getInfoCallback(type, result);\n                                if (res) {\n                                    text = res.text;\n                                    icon = res.icon;\n                                }\n                            }\n                            if (!text || !icon) {\n                                text = '[unknown type]';\n                                icon = 'attention';\n                            }\n                        }\n                        resources.push({\n                            type: type,\n                            id: result._id,\n                            text: text,\n                            icon: icon\n                        });\n                    }, this);\n                }, this);\n                this.$('.g-search-results>ul').html(SearchResultsTemplate({\n                    results: resources.slice(0, 6)\n                }));\n                this.$('.dropdown').addClass('open');\n            }\n        });\n    }\n}, {\n    _allowedSearchMode: {},\n\n    addMode: function (mode, types, description, help) {\n        if (_.has(SearchFieldWidget._allowedSearchMode, mode)) {\n            throw new Error(`The mode \"${mode}\" exist already. You can't change it`);\n        }\n        SearchFieldWidget._allowedSearchMode[mode] = {\n            types: types,\n            description: description,\n            help: help\n        };\n    },\n\n    getModes: function () {\n        return _.keys(SearchFieldWidget._allowedSearchMode);\n    },\n\n    getModeTypes: function (mode) {\n        return SearchFieldWidget._allowedSearchMode[mode].types;\n    },\n\n    getModeDescription: function (mode) {\n        return SearchFieldWidget._allowedSearchMode[mode].description;\n    },\n\n    getModeHelp: function (mode) {\n        return SearchFieldWidget._allowedSearchMode[mode].help;\n    },\n\n    removeMode: function (mode) {\n        delete SearchFieldWidget._allowedSearchMode[mode];\n    }\n});\n\nSearchFieldWidget.addMode(\n    'text',\n    ['item', 'folder', 'group', 'collection', 'user'],\n    'Full text search',\n    `By default, search results will be returned if they contain\n     any of the terms of the search. If you wish to search for documents\n     containing all of the terms, place them in quotes.\n     Examples:`\n);\nSearchFieldWidget.addMode(\n    'prefix',\n    ['item', 'folder', 'group', 'collection', 'user'],\n    'Search by prefix',\n    `You are searching by prefix.\n     Start typing the first letters of whatever you are searching for.`\n);\n\nexport default SearchFieldWidget;\n",".g-header-wrapper(style=`background-color: ${bannerColor}; color: ${textColor}`)\n  .g-app-title #{brandName}\n\n  form.g-quick-search-form(role=\"form\")\n    .form-group.g-quick-search-container\n\n  .g-current-user-wrapper\n  .g-clear-both\n","import _ from 'underscore';\n\nimport LayoutHeaderUserView from '@girder/core/views/layout/HeaderUserView';\nimport router from '@girder/core/router';\nimport SearchFieldWidget from '@girder/core/views/widgets/SearchFieldWidget';\nimport View from '@girder/core/views/View';\n\nimport LayoutHeaderTemplate from '@girder/core/templates/layout/layoutHeader.pug';\n\nimport '@girder/core/stylesheets/layout/header.styl';\n\n/**\n * This view shows the header in the layout.\n */\nvar LayoutHeaderView = View.extend({\n    events: {\n        'click .g-app-title': function () {\n            router.navigate('', { trigger: true });\n        }\n    },\n\n    initialize: function (settings) {\n        this.brandName = settings.brandName || 'Girder';\n        this.bannerColor = settings.bannerColor || '#3F3B3B';\n\n        this.userView = new LayoutHeaderUserView({\n            parentView: this,\n            registrationPolicy: settings.registrationPolicy\n        });\n\n        /*\n         * The order of types correspond to the order of the displayed types results on the dialog box.\n         */\n        this.searchWidget = new SearchFieldWidget({\n            placeholder: 'Search...',\n            types: ['collection', 'folder', 'item', 'group', 'user'],\n            parentView: this\n        }).on('g:resultClicked', function (result) {\n            this.searchWidget.resetState();\n            router.navigate(result.type + '/' + result.id, {\n                trigger: true\n            });\n        }, this);\n    },\n\n    render: function () {\n        var textColor = this._getTextColor(this.bannerColor);\n        this.$el.html(LayoutHeaderTemplate({\n            brandName: this.brandName,\n            bannerColor: this.bannerColor,\n            textColor: textColor\n        }));\n        this.userView.setElement(this.$('.g-current-user-wrapper')).render();\n        if (textColor !== '#ffffff') {\n            // We will lose the hover color by setting this, so only do that if necessary\n            this.userView.$('.g-user-text a').css('color', textColor);\n        }\n        this.searchWidget.setElement(this.$('.g-quick-search-container')).render();\n\n        return this;\n    },\n\n    _getTextColor: function (bannerColor) {\n        // https://stackoverflow.com/a/3943023\n        const hexRed = bannerColor.substr(1, 2);\n        const hexGreen = bannerColor.substr(3, 2);\n        const hexBlue = bannerColor.substr(5, 2);\n        const sRGB = _.map([hexRed, hexGreen, hexBlue], (hexComponent) =>\n            parseInt(hexComponent, 16) / 255.0\n        );\n        const linearRBG = _.map(sRGB, (component) =>\n            (component <= 0.03928)\n                ? component / 12.92\n                : Math.pow((component + 0.055) / 1.055, 2.4)\n        );\n        const L = 0.2126 * linearRBG[0] + 0.7152 * linearRBG[1] + 0.0722 * linearRBG[2];\n        return ((L + 0.05) / (0.0 + 0.05) > (1.0 + 0.05) / (L + 0.05))\n            ? '#000000'\n            : '#ffffff';\n    }\n});\n\nexport default LayoutHeaderView;\n",".modal-dialog\n  .modal-content\n    form#g-login-form.modal-form(role=\"form\")\n      .modal-header\n        button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n        h4.modal-title Log in\n      .modal-body\n        if enablePasswordLogin\n          .form-group\n            label.control-label(for=\"g-login\") Login or email\n            input#g-login.input-sm.form-control(type=\"text\", placeholder=\"Enter login\")\n          .form-group\n            label.control-label(for=\"g-password\") Password\n            input#g-password.input-sm.form-control(type=\"password\", placeholder=\"Enter password\")\n          #g-login-otp-group.form-group.hidden\n            label.control-label(for=\"g-login-otp\") Two-factor code\n            input#g-login-otp.input-sm.form-control(\n              type='text', minlength=6, maxlength=6, placeholder=\"Your 6-digit two-factor authentication code, if enabled\")\n          .g-validation-failed-message\n          .g-bottom-message\n            if registrationPolicy !== 'closed'\n              | Don't have an account yet?\n              a.g-register-link  Register here.\n              |  |\n            a.g-forgot-password  Forgot your password?\n      .modal-footer\n        a.btn.btn-default(data-dismiss=\"modal\") Close\n        button#g-login-button.btn.btn-primary(type=\"submit\")\n          i.icon-login\n          |  Login\n","import $ from 'jquery';\n\n/**\n * Helper selector to enable/disable inputs elements\n *\n * @param enable Whether to enable the element or not\n */\n$.fn.girderEnable = function (enable) {\n    var selection = $(this);\n    if (selection.is(':input')) {\n        selection.prop('disabled', !enable);\n    }\n    if (!enable) {\n        selection.addClass('disabled');\n    } else {\n        selection.removeClass('disabled');\n    }\n    return this;\n};\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport View from '@girder/core/views/View';\nimport events from '@girder/core/events';\nimport { handleClose, handleOpen } from '@girder/core/dialog';\nimport { login } from '@girder/core/auth';\nimport UserModel from '@girder/core/models/UserModel';\n\nimport LoginDialogTemplate from '@girder/core/templates/layout/loginDialog.pug';\n\nimport '@girder/core/utilities/jquery/girderEnable';\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This view shows a login modal dialog.\n */\nvar LoginView = View.extend({\n    events: {\n        'submit #g-login-form': function (e) {\n            e.preventDefault();\n\n            this.$('#g-login-button').girderEnable(false);\n            this.$('.g-validation-failed-message').text('');\n\n            const loginName = this.$('#g-login').val();\n            const password = this.$('#g-password').val();\n            const otpToken = this.$('#g-login-otp-group').hasClass('hidden') ? null : this.$('#g-login-otp').val();\n            login(loginName, password, otpToken)\n                .done(() => {\n                    this.$el.modal('hide');\n                })\n                .fail((err) => {\n                    if (err.responseJSON.message.indexOf('Girder-OTP') !== -1 &&\n                        this.$('#g-login-otp-group').hasClass('hidden')\n                    ) {\n                        this.$('#g-login-otp-group').removeClass('hidden');\n                        this.$('#g-login-otp').trigger('focus');\n                        return;\n                    }\n\n                    this.$('.g-validation-failed-message').text(err.responseJSON.message);\n\n                    if (err.responseJSON.extra === 'emailVerification') {\n                        var html = err.responseJSON.message +\n                            ' <a class=\"g-send-verification-email\">Click here to send verification email.</a>';\n                        $('.g-validation-failed-message').html(html);\n                    }\n                })\n                .always(() => {\n                    this.$('#g-login-button').girderEnable(true);\n                });\n        },\n\n        'click .g-send-verification-email': function () {\n            this.$('.g-validation-failed-message').html('');\n\n            const loginName = this.$('#g-login').val();\n            UserModel.sendVerificationEmail(loginName)\n                .done((resp) => {\n                    this.$('.g-validation-failed-message').html(resp.message);\n                }).fail((err) => {\n                    this.$('.g-validation-failed-message').html(err.responseJSON.message);\n                });\n        },\n\n        'click a.g-register-link': function () {\n            events.trigger('g:registerUi');\n        },\n\n        'click a.g-forgot-password': function () {\n            events.trigger('g:resetPasswordUi');\n        }\n    },\n\n    initialize: function (settings) {\n        this.registrationPolicy = settings.registrationPolicy;\n        this.enablePasswordLogin = _.has(settings, 'enablePasswordLogin') ? settings.enablePasswordLogin : true;\n    },\n\n    render: function () {\n        this.$el.html(LoginDialogTemplate({\n            registrationPolicy: this.registrationPolicy,\n            enablePasswordLogin: this.enablePasswordLogin,\n            showOtp: true\n        })).girderModal(this)\n            .on('shown.bs.modal', () => {\n                this.$('#g-login').trigger('focus');\n            }).on('hidden.bs.modal', () => {\n                handleClose('login', { replace: true });\n            });\n\n        handleOpen('login', { replace: true });\n        this.$('#g-login').trigger('focus');\n\n        return this;\n    }\n});\n\nexport default LoginView;\n","(function(window) {\n    var re = {\n        not_string: /[^s]/,\n        number: /[diefg]/,\n        json: /[j]/,\n        not_json: /[^j]/,\n        text: /^[^\\x25]+/,\n        modulo: /^\\x25{2}/,\n        placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^\\)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijosuxX])/,\n        key: /^([a-z_][a-z_\\d]*)/i,\n        key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n        index_access: /^\\[(\\d+)\\]/,\n        sign: /^[\\+\\-]/\n    }\n\n    function sprintf() {\n        var key = arguments[0], cache = sprintf.cache\n        if (!(cache[key] && cache.hasOwnProperty(key))) {\n            cache[key] = sprintf.parse(key)\n        }\n        return sprintf.format.call(null, cache[key], arguments)\n    }\n\n    sprintf.format = function(parse_tree, argv) {\n        var cursor = 1, tree_length = parse_tree.length, node_type = \"\", arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = \"\"\n        for (i = 0; i < tree_length; i++) {\n            node_type = get_type(parse_tree[i])\n            if (node_type === \"string\") {\n                output[output.length] = parse_tree[i]\n            }\n            else if (node_type === \"array\") {\n                match = parse_tree[i] // convenience purposes only\n                if (match[2]) { // keyword argument\n                    arg = argv[cursor]\n                    for (k = 0; k < match[2].length; k++) {\n                        if (!arg.hasOwnProperty(match[2][k])) {\n                            throw new Error(sprintf(\"[sprintf] property '%s' does not exist\", match[2][k]))\n                        }\n                        arg = arg[match[2][k]]\n                    }\n                }\n                else if (match[1]) { // positional argument (explicit)\n                    arg = argv[match[1]]\n                }\n                else { // positional argument (implicit)\n                    arg = argv[cursor++]\n                }\n\n                if (get_type(arg) == \"function\") {\n                    arg = arg()\n                }\n\n                if (re.not_string.test(match[8]) && re.not_json.test(match[8]) && (get_type(arg) != \"number\" && isNaN(arg))) {\n                    throw new TypeError(sprintf(\"[sprintf] expecting number but found %s\", get_type(arg)))\n                }\n\n                if (re.number.test(match[8])) {\n                    is_positive = arg >= 0\n                }\n\n                switch (match[8]) {\n                    case \"b\":\n                        arg = arg.toString(2)\n                    break\n                    case \"c\":\n                        arg = String.fromCharCode(arg)\n                    break\n                    case \"d\":\n                    case \"i\":\n                        arg = parseInt(arg, 10)\n                    break\n                    case \"j\":\n                        arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0)\n                    break\n                    case \"e\":\n                        arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential()\n                    break\n                    case \"f\":\n                        arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg)\n                    break\n                    case \"g\":\n                        arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg)\n                    break\n                    case \"o\":\n                        arg = arg.toString(8)\n                    break\n                    case \"s\":\n                        arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg)\n                    break\n                    case \"u\":\n                        arg = arg >>> 0\n                    break\n                    case \"x\":\n                        arg = arg.toString(16)\n                    break\n                    case \"X\":\n                        arg = arg.toString(16).toUpperCase()\n                    break\n                }\n                if (re.json.test(match[8])) {\n                    output[output.length] = arg\n                }\n                else {\n                    if (re.number.test(match[8]) && (!is_positive || match[3])) {\n                        sign = is_positive ? \"+\" : \"-\"\n                        arg = arg.toString().replace(re.sign, \"\")\n                    }\n                    else {\n                        sign = \"\"\n                    }\n                    pad_character = match[4] ? match[4] === \"0\" ? \"0\" : match[4].charAt(1) : \" \"\n                    pad_length = match[6] - (sign + arg).length\n                    pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : \"\") : \"\"\n                    output[output.length] = match[5] ? sign + arg + pad : (pad_character === \"0\" ? sign + pad + arg : pad + sign + arg)\n                }\n            }\n        }\n        return output.join(\"\")\n    }\n\n    sprintf.cache = {}\n\n    sprintf.parse = function(fmt) {\n        var _fmt = fmt, match = [], parse_tree = [], arg_names = 0\n        while (_fmt) {\n            if ((match = re.text.exec(_fmt)) !== null) {\n                parse_tree[parse_tree.length] = match[0]\n            }\n            else if ((match = re.modulo.exec(_fmt)) !== null) {\n                parse_tree[parse_tree.length] = \"%\"\n            }\n            else if ((match = re.placeholder.exec(_fmt)) !== null) {\n                if (match[2]) {\n                    arg_names |= 1\n                    var field_list = [], replacement_field = match[2], field_match = []\n                    if ((field_match = re.key.exec(replacement_field)) !== null) {\n                        field_list[field_list.length] = field_match[1]\n                        while ((replacement_field = replacement_field.substring(field_match[0].length)) !== \"\") {\n                            if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n                                field_list[field_list.length] = field_match[1]\n                            }\n                            else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n                                field_list[field_list.length] = field_match[1]\n                            }\n                            else {\n                                throw new SyntaxError(\"[sprintf] failed to parse named argument key\")\n                            }\n                        }\n                    }\n                    else {\n                        throw new SyntaxError(\"[sprintf] failed to parse named argument key\")\n                    }\n                    match[2] = field_list\n                }\n                else {\n                    arg_names |= 2\n                }\n                if (arg_names === 3) {\n                    throw new Error(\"[sprintf] mixing positional and named placeholders is not (yet) supported\")\n                }\n                parse_tree[parse_tree.length] = match\n            }\n            else {\n                throw new SyntaxError(\"[sprintf] unexpected placeholder\")\n            }\n            _fmt = _fmt.substring(match[0].length)\n        }\n        return parse_tree\n    }\n\n    var vsprintf = function(fmt, argv, _argv) {\n        _argv = (argv || []).slice(0)\n        _argv.splice(0, 0, fmt)\n        return sprintf.apply(null, _argv)\n    }\n\n    /**\n     * helpers\n     */\n    function get_type(variable) {\n        return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase()\n    }\n\n    function str_repeat(input, multiplier) {\n        return Array(multiplier + 1).join(input)\n    }\n\n    /**\n     * export to either browser or node.js\n     */\n    if (typeof exports !== \"undefined\") {\n        exports.sprintf = sprintf\n        exports.vsprintf = vsprintf\n    }\n    else {\n        window.sprintf = sprintf\n        window.vsprintf = vsprintf\n\n        if (typeof define === \"function\" && define.amd) {\n            define(function() {\n                return {\n                    sprintf: sprintf,\n                    vsprintf: vsprintf\n                }\n            })\n        }\n    }\n})(typeof window === \"undefined\" ? this : window);\n",".g-task-progress-top\n  .g-task-progress-bar.progress(class=progressClass)\n    .progress-bar(class=barClass, style=`width: ${width};`)\n      .progress-status\n        .progress-percent\n          = percentText\n        .progress-left\n          = timeLeftText\n  .g-task-progress-title(title=progress.data.title)\n    if progress.data.resource && progress.data.resource._id && progress.data.resourceName\n      a(title=progress.data.title, href='#' + progress.data.resourceName + '/' + progress.data.resource._id)\n        = progress.data.title\n    else\n      = progress.data.title\n.g-task-progress-bottom\n  .g-task-progress-message= progress.data.message\n","import { sprintf } from 'sprintf-js';\n\nimport View from '@girder/core/views/View';\n\nimport TaskProgressTemplate from '@girder/core/templates/widgets/taskProgress.pug';\n\nimport '@girder/core/stylesheets/widgets/taskProgress.styl';\n\n/**\n * This widget renders the state of a progress notification.\n */\nvar TaskProgressWidget = View.extend({\n\n    initialize: function (settings) {\n        this.progress = settings.progress;\n    },\n\n    render: function () {\n        var width = '0', barClass = [], progressClass = [], percentText = '',\n            timeLeftText = '';\n\n        if (this.progress.data.state === 'active') {\n            if (this.progress.data.total <= 0) {\n                width = '100%';\n                barClass.push('progress-bar-warning');\n                progressClass.push('progress-striped', 'active');\n            } else if (this.progress.data.current <= 0) {\n                width = '0';\n                percentText = '0%';\n            } else if (this.progress.data.current >= this.progress.data.total) {\n                percentText = width = '100%';\n            } else {\n                var percent = (100 * this.progress.data.current /\n                    this.progress.data.total);\n                width = Math.round(percent) + '%';\n                percentText = percent.toFixed(1) + '%';\n                var timeLeft = parseInt(this.progress.estimatedTotalTime - (\n                    this.progress.updatedTime - this.progress.startTime), 10);\n                if (timeLeft >= 3600) {\n                    timeLeftText = sprintf('%d:%02d:%02d left',\n                        timeLeft / 3600, (timeLeft / 60) % 60, timeLeft % 60);\n                } else if (timeLeft > 0) {\n                    timeLeftText = sprintf('%d:%02d left',\n                        timeLeft / 60, timeLeft % 60);\n                }\n            }\n        } else if (this.progress.data.state === 'success') {\n            width = '100%';\n            barClass.push('progress-bar-success');\n\n            this._scheduleHide(5000);\n        } else if (this.progress.data.state === 'error') {\n            width = '100%';\n            barClass.push('progress-bar-danger');\n\n            this._scheduleHide(10000);\n        }\n\n        this.$el.html(TaskProgressTemplate({\n            progress: this.progress,\n            width: width,\n            barClass: barClass.join(' '),\n            progressClass: progressClass.join(' '),\n            percentText: percentText,\n            timeLeftText: timeLeftText\n        }));\n        return this;\n    },\n\n    /**\n     * Renders an update of the progress object.\n     */\n    update: function (progress) {\n        this.progress = progress;\n        this.render();\n    },\n\n    /**\n     * Schedule a hide event to be triggered in the future.\n     */\n    _scheduleHide: function (ms) {\n        window.setTimeout(() => {\n            this.$el.fadeOut(500, () => {\n                this.remove();\n                this.trigger('g:hide', this.progress);\n            });\n        }, ms);\n    }\n});\n\nexport default TaskProgressWidget;\n",".g-progress-list-container\n","import _ from 'underscore';\n\nimport TaskProgressWidget from '@girder/core/views/widgets/TaskProgressWidget';\nimport View from '@girder/core/views/View';\n\nimport LayoutProgressAreaTemplate from '@girder/core/templates/layout/layoutProgressArea.pug';\n\nimport '@girder/core/stylesheets/layout/progressArea.styl';\n\n/**\n * Container showing list of active tasks that are reporting progress\n * via a EventStream object.\n */\nvar ProgressListView = View.extend({\n\n    initialize: function (settings) {\n        this.eventStream = settings.eventStream;\n        this.listenTo(this.eventStream, 'g:event.progress', this._handleProgress, this);\n        // if the event stream disconnects, clear the progress so we don't have\n        // stale values lingering.\n        this.listenTo(this.eventStream, 'g:eventStream.stop', this._clearProgress, this);\n\n        // map progress IDs to widgets\n        this._map = {};\n    },\n\n    render: function () {\n        this.$el.html(LayoutProgressAreaTemplate());\n\n        this._onUpdate();\n\n        return this;\n    },\n\n    _handleProgress: function (progress) {\n        if (_.has(this._map, progress._id)) {\n            this._map[progress._id].update(progress);\n        } else {\n            this._map[progress._id] = new TaskProgressWidget({\n                className: 'g-progress-widget-container',\n                progress: progress,\n                parentView: null\n            }).on('g:hide', function (p) {\n                this._map[p._id].destroy();\n                delete this._map[p._id];\n                this._onUpdate();\n            }, this).render();\n            this._map[progress._id].$el.appendTo(this.$('.g-progress-list-container'));\n        }\n        this._onUpdate();\n    },\n\n    _clearProgress: function () {\n        const needsUpdate = !_.isEmpty(this._map);\n        _.each(this._map, (progressWidget, progressId) => {\n            progressWidget.destroy();\n            progressWidget.remove();\n            delete this._map[progressId];\n        });\n        if (needsUpdate) {\n            this._onUpdate();\n        }\n    },\n\n    _onUpdate: function () {\n        this.$el.toggle(!_.isEmpty(this._map));\n    }\n});\n\nexport default ProgressListView;\n",".modal-dialog\n  .modal-content\n    form#g-register-form.modal-form(role=\"form\")\n      .modal-header\n        button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n        h4.modal-title= title\n      .modal-body\n        #g-group-login.form-group\n          label.control-label(for=\"g-login\") Choose a login name\n          input#g-login.input-sm.form-control(type=\"text\", placeholder=\"Login\")\n        #g-group-email.form-group\n          label.control-label(for=\"g-email\") Enter email address\n          input#g-email.input-sm.form-control(type=\"text\", placeholder=\"Email\")\n        #g-group-firstName.form-group\n          label.control-label(for=\"g-firstName\") Enter first name\n          input#g-firstName.input-sm.form-control(type=\"text\", placeholder=\"First name\")\n        #g-group-lastName.form-group\n          label.control-label(for=\"g-lastName\") Enter last name\n          input#g-lastName.input-sm.form-control(type=\"text\", placeholder=\"Last name\")\n        #g-group-password.form-group\n          label.control-label(for=\"g-password\") Choose a password\n          input#g-password.input-sm.form-control(type=\"password\", placeholder=\"Password\")\n        #g-group-password2.form-group\n          label.control-label(for=\"g-password2\") Retype password\n          input#g-password2.input-sm.form-control(type=\"password\", placeholder=\"Password\")\n        .g-validation-failed-message\n        if !currentUser\n          .g-bottom-message\n            | Already have an account?\n            a.g-login-link  Log in here.\n      .modal-footer\n        a.btn.btn-default(data-dismiss=\"modal\") Close\n        button#g-register-button.btn.btn-primary(type=\"submit\")\n          i.icon-plus-circled\n          |  Register\n","import UserModel from '@girder/core/models/UserModel';\nimport View from '@girder/core/views/View';\nimport events from '@girder/core/events';\nimport { getCurrentUser, setCurrentUser, getCurrentToken, setCurrentToken } from '@girder/core/auth';\nimport { handleClose, handleOpen } from '@girder/core/dialog';\n\nimport RegisterDialogTemplate from '@girder/core/templates/layout/registerDialog.pug';\n\nimport '@girder/core/utilities/jquery/girderEnable';\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This view shows a register modal dialog.\n */\nvar RegisterView = View.extend({\n    events: {\n        'submit #g-register-form': function (e) {\n            e.preventDefault();\n\n            this.$('.form-group').removeClass('has-error');\n\n            if (this.$('#g-password').val() !== this.$('#g-password2').val()) {\n                this.$('#g-group-password,#g-group-password2').addClass('has-error');\n                this.$('#g-password').trigger('focus');\n                this.$('.g-validation-failed-message').text('Passwords must match.');\n                return;\n            }\n\n            var user = new UserModel({\n                login: this.$('#g-login').val(),\n                password: this.$('#g-password').val(),\n                email: this.$('#g-email').val(),\n                firstName: this.$('#g-firstName').val(),\n                lastName: this.$('#g-lastName').val()\n            });\n            user.on('g:saved', function () {\n                if (getCurrentUser()) {\n                    this.trigger('g:userCreated', {\n                        user: user\n                    });\n                } else {\n                    var authToken = user.get('authToken') || {};\n\n                    if (authToken.token) {\n                        setCurrentUser(user);\n                        setCurrentToken(authToken.token);\n                        window.localStorage.setItem('girderToken', getCurrentToken());\n\n                        events.trigger('g:login');\n                    } else {\n                        events.trigger('g:alert', {\n                            icon: 'ok',\n                            text: 'Check your email to verify registration.',\n                            type: 'success',\n                            timeout: 4000\n                        });\n                    }\n\n                    handleClose('register', { replace: true });\n                }\n\n                this.$el.modal('hide');\n            }, this).on('g:error', function (err) {\n                var resp = err.responseJSON;\n                this.$('.g-validation-failed-message').text(resp.message);\n                if (resp.field) {\n                    this.$('#g-group-' + resp.field).addClass('has-error');\n                    this.$('#g-' + resp.field).trigger('focus');\n                }\n                this.$('#g-register-button').girderEnable(true);\n            }, this).save();\n\n            this.$('#g-register-button').girderEnable(false);\n            this.$('.g-validation-failed-message').text('');\n        },\n\n        'click a.g-login-link': function () {\n            events.trigger('g:loginUi');\n        }\n    },\n\n    render: function () {\n        this.$el.html(RegisterDialogTemplate({\n            currentUser: getCurrentUser(),\n            title: getCurrentUser() ? 'Create new user' : 'Sign up'\n        })).girderModal(this)\n            .on('shown.bs.modal', () => {\n                this.$('#g-login').trigger('focus');\n            }).on('hidden.bs.modal', () => {\n                handleClose('register', { replace: true });\n            });\n        this.$('#g-login').trigger('focus');\n\n        handleOpen('register', { replace: true });\n\n        return this;\n    }\n\n});\n\nexport default RegisterView;\n",".modal-dialog\n  .modal-content\n    form#g-reset-password-form.modal-form(role=\"form\")\n      .modal-header\n        button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n        h4.modal-title Forgotten password\n      .modal-body\n        .g-password-reset-explanation\n          | If you have forgotten your password, enter your email address here.\n          | You will be sent an email with a temporary access link, from\n          | which you can reset your password.\n        .form-group\n          label.control-label(for=\"g-email\") Email\n          input#g-email.input-sm.form-control(type=\"text\", placeholder=\"Enter your email\")\n        .g-validation-failed-message\n        .g-bottom-message\n          if registrationPolicy !== 'closed'\n            a.g-register-link  Register\n            |  |\n          a.g-login-link  Login\n      .modal-footer\n        a.btn.btn-default(data-dismiss=\"modal\") Close\n        button#g-reset-password-button.btn.btn-primary(type=\"submit\")\n          i.icon-mail\n          |  Submit\n","import View from '@girder/core/views/View';\nimport events from '@girder/core/events';\nimport { handleClose, handleOpen } from '@girder/core/dialog';\nimport { restRequest } from '@girder/core/rest';\n\nimport ResetPasswordDialogTemplate from '@girder/core/templates/layout/resetPasswordDialog.pug';\n\nimport '@girder/core/utilities/jquery/girderEnable';\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This view shows a modal dialog for resetting a forgotten password.\n */\nvar ResetPasswordView = View.extend({\n    events: {\n        'submit #g-reset-password-form': function (e) {\n            e.preventDefault();\n            restRequest({\n                url: 'user/password/temporary',\n                data: {\n                    email: this.$('#g-email').val().trim()\n                },\n                method: 'PUT',\n                error: null // don't do default error behavior\n            }).done(() => {\n                this.$el.modal('hide');\n                events.trigger('g:alert', {\n                    icon: 'mail-alt',\n                    text: 'Password reset email sent.',\n                    type: 'success'\n                });\n            }).fail((err) => {\n                this.$('.g-validation-failed-message').text(err.responseJSON.message);\n                this.$('#g-reset-password-button').girderEnable(true);\n            });\n\n            this.$('#g-reset-password-button').girderEnable(false);\n            this.$('.g-validation-failed-message').text('');\n        },\n\n        'click a.g-register-link': function () {\n            events.trigger('g:registerUi');\n        },\n\n        'click a.g-login-link': function () {\n            events.trigger('g:loginUi');\n        }\n    },\n\n    initialize: function (settings) {\n        this.registrationPolicy = settings.registrationPolicy;\n    },\n\n    render: function () {\n        this.$el.html(ResetPasswordDialogTemplate({\n            registrationPolicy: this.registrationPolicy\n        })).girderModal(this).on('shown.bs.modal', () => {\n            this.$('#g-email').trigger('focus');\n        }).on('hidden.bs.modal', () => {\n            handleClose('resetpassword', { replace: true });\n        });\n        this.$('#g-email').trigger('focus');\n\n        handleOpen('resetpassword', { replace: true });\n\n        return this;\n    }\n});\n\nexport default ResetPasswordView;\n",".alert.alert-dismissable(class=`alert-${type}`)\n  button.close(type=\"button\", data-dismiss=\"alert\", aria-hidden=\"true\") &times;\n  if icon\n    i(class=`icon-${icon}`)\n  |  #{text}\n","#g-app-header-container\n#g-global-nav-container\n#g-app-body-container.g-default-layout\n#g-app-footer-container\n\n#g-app-progress-container\n\n//- Set tabindex on modal element to allow closing modal by pressing Escape. See:\n//- - http://getbootstrap.com/javascript/#modals-examples\n//- - http://stackoverflow.com/questions/12630156/\n#g-dialog-container.modal.fade(tabindex=\"-1\")\n#g-alerts-container\n","ul.g-admin-options\n  li\n    a.g-server-config(href=\"#settings\")\n      i.icon-cog-alt\n      |  Server configuration\n  li\n    a.g-plugins-config(href=\"#plugins\")\n      i.icon-puzzle\n      |  Plugins\n  li\n    a.g-assetstore-config(href=\"#assetstores\")\n      i.icon-box-1\n      |  Assetstores\n","import View from '@girder/core/views/View';\nimport { cancelRestRequests } from '@girder/core/rest';\nimport { getCurrentUser } from '@girder/core/auth';\n\nimport AdminConsoleTemplate from '@girder/core/templates/body/adminConsole.pug';\n\nimport '@girder/core/stylesheets/body/adminConsole.styl';\n\n/**\n * This view shows the admin console, which links to all available admin pages.\n */\nvar AdminView = View.extend({\n    initialize: function () {\n        cancelRestRequests('fetch');\n        this.render();\n    },\n\n    render: function () {\n        if (!getCurrentUser() || !getCurrentUser().get('admin')) {\n            this.$el.text('Must be logged in as admin to view this page.');\n            return;\n        }\n        this.$el.html(AdminConsoleTemplate());\n\n        return this;\n    }\n});\n\nexport default AdminView;\n",".modal-dialog\n  .modal-content\n    form#g-assetstore-edit-form.modal-form(role=\"form\")\n      .modal-header\n        button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n        h4.modal-title\n          | Edit assetstore\n      .modal-body\n        .g-assetstore-form-fields\n          .form-group\n            label.control-label(for=\"g-edit-name\") Assetstore Name\n            input#g-edit-name.input-sm.form-control(type=\"text\", placeholder=\"Name\")\n          if assetstore.get('type') === types.FILESYSTEM\n            .form-group\n              label.control-label(for=\"g-edit-fs-root\") Root directory\n              input#g-edit-fs-root.input-sm.form-control(type=\"text\", placeholder=\"Root directory\")\n            .form-group\n              label.control-label(for=\"g-edit-fs-perms\") File creation permissions (octal)\n              input#g-edit-fs-perms.input-sm.form-control(type=\"text\", placeholder=\"600\")\n          if assetstore.get('type') === types.S3\n            .form-group\n              label.control-label(for=\"g-edit-s3-bucket\") S3 bucket name\n              input#g-edit-s3-bucket.input-sm.form-control(type=\"text\", placeholder=\"Bucket\")\n            .form-group\n              label.control-label(for=\"g-edit-s3-prefix\") Path prefix (optional)\n              input#g-edit-s3-prefix.input-sm.form-control(type=\"text\", placeholder=\"Prefix\")\n            .form-group\n              label.control-label(for=\"g-edit-s3-access-key-id\") Access key ID\n              input#g-edit-s3-access-key-id.input-sm.form-control(type=\"text\", placeholder=\"Access key ID\")\n            .form-group\n              label.control-label(for=\"g-edit-s3-secret\") Secret access key\n              input#g-edit-s3-secret.input-sm.form-control(type=\"text\", placeholder=\"Secret access key\")\n            .form-group\n              label.control-label(for=\"g-edit-s3-service\") Service\n              input#g-edit-s3-service.input-sm.form-control(type=\"text\", placeholder=\"Service\", title=\"The service if different from s3.amazonaws.com, such as storage.googleapis.com.\")\n            .form-group\n              label.control-label(for=\"g-edit-s3-region\") Region\n              input#g-edit-s3-region.input-sm.form-control(type=\"text\", placeholder=\"Region\")\n            .checkbox\n              label\n                input#g-edit-s3-infercredentials(type=\"checkbox\")\n                | Infer Credentials\n            .checkbox\n              label\n                input#g-edit-s3-readonly(type=\"checkbox\")\n                | Read only\n            .checkbox\n              label\n                input#g-edit-s3-sse(type=\"checkbox\")\n                | Server side encryption\n            .checkbox\n              label\n                input#g-edit-s3-accelerated-endpoint(type=\"checkbox\")\n                | Allow S3 accelerated endpoint\n        if assetstore.get('hasFiles')\n          div\n            i.icon-attention\n            | #[b Warning:] This assetstore contains files.  If you edit where the assetstore is located or how it is reached, those files may become unreachable.\n        .g-validation-failed-message\n      .modal-footer\n        a.btn.btn-small.btn-default(data-dismiss=\"modal\") Cancel\n        if !assetstore.get('hasFiles')\n          button.g-save-assetstore.btn.btn-small.btn-primary(type=\"submit\")\n            i.icon-edit\n            | Save\n        else\n          button.g-save-assetstore.btn.btn-small.btn-primary.btn-danger(type=\"submit\")\n            i.icon-edit\n            | Save\n            i.icon-attention\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport View from '@girder/core/views/View';\nimport { AssetstoreType } from '@girder/core/constants';\nimport { handleClose, handleOpen } from '@girder/core/dialog';\n\nimport EditAssetstoreWidgetTemplate from '@girder/core/templates/widgets/editAssetstoreWidget.pug';\n\nimport '@girder/core/utilities/jquery/girderEnable';\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This widget is used to edit an existing assetstore.\n */\nvar EditAssetstoreWidget = View.extend({\n    events: {\n        'submit #g-assetstore-edit-form': function (e) {\n            e.preventDefault();\n\n            var fields = this.fieldsMap[this.model.get('type')].get.call(this);\n            fields.name = this.$('#g-edit-name').val();\n\n            this.updateAssetstore(fields);\n\n            this.$('button.g-save-assetstore').girderEnable(false);\n            this.$('.g-validation-failed-message').text('');\n        }\n    },\n\n    initialize: function (settings) {\n        this.model = settings.model || null;\n    },\n\n    /**\n     * This maps each type of assetstore to a function to getter and setter\n     * functions. The set functions are responsible for populating the dialog\n     * fields with the appropriate current model values, and the get functions\n     * are responsible for reading the user input values from the dialog and\n     * returning a set of fields (excluding the name field) to set on the model.\n     *\n     * This is meant to make it easy for plugins that add new assetstore types\n     * to extend this dialog to allow the setting of custom fields using whatever\n     * widgets make the most sense. By adding a new field to this object, this\n     * edit dialog can support any type of assetstore dynamically.\n     *\n     * Since the keys of this array are values defined by variables,\n     * we set them after this class rather than inline with object creation syntax.\n     */\n    fieldsMap: {},\n\n    render: function () {\n        var modal = this.$el.html(EditAssetstoreWidgetTemplate({\n            assetstore: this.model,\n            types: AssetstoreType\n        })).girderModal(this).on('shown.bs.modal', () => {\n            this.$('#g-edit-name').trigger('focus');\n            handleOpen('assetstoreedit', undefined, this.model.get('id'));\n            this.$('#g-edit-name').val(this.model.get('name'));\n            this.fieldsMap[this.model.get('type')].set.call(this);\n        }).on('hidden.bs.modal', () => {\n            handleClose('assetstoreedit', undefined, this.model.get('id'));\n        });\n        modal.trigger($.Event('ready.girder.modal', { relatedTarget: modal }));\n        return this;\n    },\n\n    updateAssetstore: function (fields) {\n        var oldfields = {};\n        var model = this.model;\n        _.each(fields, function (value, key) {\n            oldfields[key] = model.get(key);\n        });\n        this.model.set(fields);\n        this.model.on('g:saved', function () {\n            this.$el.modal('hide');\n            this.trigger('g:saved', this.model);\n        }, this).on('g:error', function (err) {\n            this.$('.g-validation-failed-message').text(err.responseJSON.message);\n            this.$('button.g-save-assetstore').girderEnable(true);\n            this.$('#g-' + err.responseJSON.field).trigger('focus');\n            this.model.set(oldfields);\n        }, this).save();\n    }\n});\n\nvar fieldsMap = EditAssetstoreWidget.prototype.fieldsMap;\n\nfieldsMap[AssetstoreType.FILESYSTEM] = {\n    get: function () {\n        return {\n            root: this.$('#g-edit-fs-root').val(),\n            perms: this.$('#g-edit-fs-perms').val()\n        };\n    },\n    set: function () {\n        var permStr = this.model.get('perms') ? this.model.get('perms').toString(8) : '600';\n        this.$('#g-edit-fs-perms').val(permStr);\n        this.$('#g-edit-fs-root').val(this.model.get('root'));\n    }\n};\n\nfieldsMap[AssetstoreType.S3] = {\n    get: function () {\n        return {\n            bucket: this.$('#g-edit-s3-bucket').val(),\n            prefix: this.$('#g-edit-s3-prefix').val(),\n            accessKeyId: this.$('#g-edit-s3-access-key-id').val(),\n            secret: this.$('#g-edit-s3-secret').val(),\n            service: this.$('#g-edit-s3-service').val(),\n            region: this.$('#g-edit-s3-region').val(),\n            readOnly: this.$('#g-edit-s3-readonly').is(':checked'),\n            inferCredentials: this.$('#g-edit-s3-infercredentials').is(':checked'),\n            serverSideEncryption: this.$('#g-edit-s3-sse').is(':checked'),\n            allowS3AcceleratedTransfer: this.$('#g-edit-s3-accelerated-endpoint').is(':checked')\n        };\n    },\n    set: function () {\n        this.$('#g-edit-s3-bucket').val(this.model.get('bucket'));\n        this.$('#g-edit-s3-prefix').val(this.model.get('prefix'));\n        this.$('#g-edit-s3-access-key-id').val(this.model.get('accessKeyId'));\n        this.$('#g-edit-s3-secret').val(this.model.get('secret'));\n        this.$('#g-edit-s3-service').val(this.model.get('service'));\n        this.$('#g-edit-s3-region').val(this.model.get('region'));\n        this.$('#g-edit-s3-readonly').attr('checked',\n            this.model.get('readOnly') ? 'checked' : undefined);\n        this.$('#g-edit-s3-infercredentials').attr('checked',\n            (this.model.get('inferCredentials') ? 'checked' : undefined));\n        this.$('#g-edit-s3-sse').attr('checked',\n            (this.model.get('serverSideEncryption') ? 'checked' : undefined));\n        this.$('#g-edit-s3-accelerated-endpoint').attr('checked',\n            (this.model.get('allowS3AcceleratedTransfer') ? 'checked' : undefined));\n    }\n};\n\nexport default EditAssetstoreWidget;\n","#g-assetstore-accordion.panel-group\n  .panel.panel-default\n    .panel-heading(data-toggle=\"collapse\",\n        data-parent=\"#g-assetstore-accordion\",\n        data-target=\"#g-create-fs-tab\")\n      .panel-title\n        a\n          i.icon-hdd\n          span Create new #[b Filesystem] assetstore\n    #g-create-fs-tab.panel-collapse.collapse\n      .panel-body\n        p.\n          This type of assetstore will store files in a directory on the\n          local filesystem, using content-addressed storage to ensure that\n          data is never duplicated on disk. Just specify the root directory\n          that files will be stored under.\n        p.\n          If the specified root directory does not already exist, the server\n          will attempt to create it.\n        form#g-new-fs-form(role=\"form\")\n          .form-group\n            label.control-label(for=\"g-new-fs-name\") Assetstore name\n            input#g-new-fs-name.input-sm.form-control(type=\"text\", placeholder=\"Name\")\n          .form-group\n            label.control-label(for=\"g-new-fs-root\") Root directory\n            input#g-new-fs-root.input-sm.form-control(\n              type=\"text\", placeholder=\"Root directory\")\n          p#g-new-fs-error.g-validation-failed-message\n          input.g-new-assetstore-submit.btn.btn-sm.btn-primary(type=\"submit\", value=\"Create\")\n\n  .panel.panel-default\n    .panel-heading(data-toggle=\"collapse\",\n        data-parent=\"#g-assetstore-accordion\",\n        data-target=\"#g-create-s3-tab\")\n      .panel-title\n        a\n          i.icon-upload-cloud\n          span Create new #[b Amazon S3] assetstore\n    #g-create-s3-tab.panel-collapse.collapse\n      .panel-body\n        p.\n          This type of assetstore keeps files in\n          an #[a(target=\"_blank\", href=\"http://aws.amazon.com/s3/\") Amazon S3]\n          bucket. The service defaults to s3.amazonaws.com. You can specify an\n          alternate service, including an optional protocol and port using the\n          form [http[s]://](service domain)[:(port)].\n        form#g-new-s3-form(role=\"form\")\n          .form-group\n            label.control-label(for=\"g-new-s3-name\") Assetstore name\n            input#g-new-s3-name.input-sm.form-control(type=\"text\", placeholder=\"Name\")\n          .form-group\n            label.control-label(for=\"g-new-s3-bucket\") S3 bucket name\n            input#g-new-s3-bucket.input-sm.form-control(type=\"text\", placeholder=\"Bucket\")\n          .form-group\n            label.control-label(for=\"g-new-s3-prefix\") Path prefix (optional)\n            input#g-new-s3-prefix.input-sm.form-control(type=\"text\", placeholder=\"Prefix\")\n          .form-group\n            label.control-label(for=\"g-new-s3-access-key-id\") Access key ID\n            input#g-new-s3-access-key-id.input-sm.form-control(type=\"text\", placeholder=\"Access key ID\")\n          .form-group\n            label.control-label(for=\"g-new-s3-secret\") Secret access key\n            input#g-new-s3-secret.input-sm.form-control(type=\"text\", placeholder=\"Secret access key\")\n          .form-group\n            label.control-label(for=\"g-new-s3-service\") Service\n            input#g-new-s3-service.input-sm.form-control(type=\"text\", placeholder=\"Service\", title=\"The service if different from s3.amazonaws.com, such as storage.googleapis.com.\")\n          .form-group\n            label.control-label(for=\"g-new-s3-region\") Region\n            input#g-new-s3-region.input-sm.form-control(type=\"text\", placeholder=\"Region\")\n          .checkbox\n            label\n              input#g-new-s3-readonly(type=\"checkbox\")\n              | Read only\n          .checkbox\n            label\n              input#g-new-s3-infercredentials(type=\"checkbox\")\n              | Infer Credentials\n          .checkbox\n            label\n              input#g-new-s3-sse(type=\"checkbox\")\n              | Server side encryption\n          .checkbox\n            label\n              input#g-new-s3-accelerated-endpoint(type=\"checkbox\")\n              | Allow S3 accelerated endpoint\n\n          p#g-new-s3-error.g-validation-failed-message\n          input.g-new-assetstore-submit.btn.btn-sm.btn-primary(type=\"submit\", value=\"Create\")\n","/* ========================================================================\n * Bootstrap: collapse.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.4.1'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(document).find(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(document).find(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // https://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n","import AssetstoreModel from '@girder/core/models/AssetstoreModel';\nimport View from '@girder/core/views/View';\nimport { AssetstoreType } from '@girder/core/constants';\n\nimport NewAssetstoreTemplate from '@girder/core/templates/widgets/newAssetstore.pug';\n\nimport 'bootstrap/js/collapse';\nimport 'bootstrap/js/transition';\n\nimport '@girder/core/utilities/jquery/girderEnable';\n\n/**\n * This widget is for creating new assetstores. The parent view is responsible\n * for checking admin privileges before rendering this widget.\n */\nvar NewAssetstoreWidget = View.extend({\n    events: {\n        'submit #g-new-fs-form': function (e) {\n            this.createAssetstore(e, this.$('#g-new-fs-error'), {\n                type: AssetstoreType.FILESYSTEM,\n                name: this.$('#g-new-fs-name').val(),\n                root: this.$('#g-new-fs-root').val()\n            });\n        },\n\n        'submit #g-new-s3-form': function (e) {\n            this.createAssetstore(e, this.$('#g-new-s3-error'), {\n                type: AssetstoreType.S3,\n                name: this.$('#g-new-s3-name').val(),\n                bucket: this.$('#g-new-s3-bucket').val(),\n                prefix: this.$('#g-new-s3-prefix').val(),\n                accessKeyId: this.$('#g-new-s3-access-key-id').val(),\n                secret: this.$('#g-new-s3-secret').val(),\n                service: this.$('#g-new-s3-service').val(),\n                region: this.$('#g-new-s3-region').val(),\n                readOnly: this.$('#g-new-s3-readonly').is(':checked'),\n                inferCredentials: this.$('#g-new-s3-infercredentials').is(':checked'),\n                serverSideEncryption: this.$('#g-new-s3-sse').is(':checked'),\n                allowS3AcceleratedTransfer: this.$('#g-new-s3-accelerated-endpoint').is(':checked')\n            });\n        }\n    },\n\n    render: function () {\n        this.$el.html(NewAssetstoreTemplate());\n        return this;\n    },\n\n    /**\n     * Call this to make the request to the server to create the assetstore.\n     * @param e The submit event from the form.\n     * @param container The element to write the error message into.\n     * @param data The form data to POST to /assetstore\n     */\n    createAssetstore: function (e, container, data) {\n        e.preventDefault();\n        this.$('.g-new-assetstore-submit').girderEnable(false);\n        container.empty();\n\n        var assetstore = new AssetstoreModel();\n        assetstore.set(data);\n        assetstore.on('g:saved', function () {\n            this.$('.g-new-assetstore-submit').girderEnable(true);\n            this.trigger('g:created', assetstore);\n        }, this).on('g:error', function (err) {\n            this.$('.g-new-assetstore-submit').girderEnable(true);\n            container.text(err.responseJSON.message);\n        }, this).save();\n    }\n});\n\nexport default NewAssetstoreWidget;\n",".g-current-assetstores-container\n  .g-body-title Assetstores\n  if !assetstores.length\n    .g-bottom-message.\n      You must create an assetstore before you can upload files to the server.\n      Select from the options below to create one.\n  else\n    .g-bottom-message.\n      Below is a list of all of the assetstores available to the server. The\n      one set as \"current\" is the one that uploaded files will be written to.\n  each assetstore in assetstores\n    .g-assetstore-container.panel.panel-default(class=assetstore.get('current') ? 'g-assetstore-current' : undefined)\n      .panel-body\n        .g-assetstore-info-section(assetstore-type=assetstore.get('type'), cid=assetstore.cid)\n          div\n            b Name:\n            span.g-assetstore-name  #{assetstore.get('name')}\n            if assetstore.get('current')\n              span.g-assetstore-current-text\n                |  (Current assetstore)\n          div\n            b Unique ID:\n            span.g-assetstore-id  #{assetstore.id}\n          if assetstore.get('type') === types.FILESYSTEM\n            div\n              b Type:\n              span.g-assetstore-type  Filesystem\n            div\n              b Root path:\n              span.g-assetstore-root  #{assetstore.get('root')}\n            div\n              b File creation permissions (octal):\n              span.g-assetstore-perms  #{(assetstore.get('perms') || 0o600).toString(8)}\n          else if assetstore.get('type') === types.S3\n            div\n              b Type:\n              span.g-assetstore-type  S3\n            div\n              b Bucket:\n              span.g-assetstore-bucket  #{assetstore.get('bucket')}\n            if assetstore.get('prefix')\n              div\n                b Path prefix:\n                span.g-assetstore-prefix  #{assetstore.get('prefix')}\n            div\n              b Access key ID:\n              span.g-access-key-id  #{assetstore.get('accessKeyId')}\n            div\n              b Secret access key:\n              span.g-secret-key  #{assetstore.get('secret') && '[hidden]'}\n            div\n              b Service:\n              span.g-service-key  #{assetstore.get('service')}\n            div\n              b Region:\n              span.g-region-key  #{assetstore.get('region')}\n\n        if assetstore.capacityKnown()\n          div\n            b Capacity:\n            span.g-assetstore-capacity  #{assetstore.capacityString()}\n            .g-assetstore-capacity-chart(cid=assetstore.cid)\n        .g-assetstore-buttons\n          button.g-edit-assetstore.btn.btn-sm.btn-default(\n              cid=assetstore.cid) Edit\n          if !assetstore.get('hasFiles')\n            button.g-delete-assetstore.btn.btn-sm.btn-danger(\n                cid=assetstore.cid) Delete\n          else\n            .g-assetstore-button-container(title=\"You must delete all files from the assetstore before you can delete the assetstore.\")\n              button.g-delete-assetstore.btn.btn-sm.btn-danger.disabled(\n                  cid=assetstore.cid, disabled) Delete\n          if !assetstore.get('current') && !assetstore.get('readOnly')\n            button.g-set-current.btn.btn-sm.btn-primary(\n              cid=assetstore.cid) Set as current\n\n          if importableTypes.indexOf(assetstore.get('type')) !== -1\n            .g-assetstore-import-button-container\n              a.g-import-button.btn.btn-sm.btn-success(href=`#assetstore/${assetstore.id}/import`)\n                i.icon-link-ext\n                |  Import data\n\n#g-new-assetstore-container\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __async = (__this, __arguments, generator) => {\n  return new Promise((resolve, reject) => {\n    var fulfilled = (value) => {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var rejected = (value) => {\n      try {\n        step(generator.throw(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n    step((generator = generator.apply(__this, __arguments)).next());\n  });\n};\n/*!\n * ApexCharts v5.16.0\n * (c) 2018-2026 ApexCharts\n */\nclass Environment {\n  /**\n   * Check if running in server-side rendering environment (Node.js)\n   * @returns {boolean} True if in SSR/Node.js, false if in browser\n   */\n  static isSSR() {\n    return typeof window === \"undefined\" || typeof document === \"undefined\";\n  }\n  /**\n   * Check if running in browser environment\n   * @returns {boolean} True if in browser, false if in SSR/Node.js\n   */\n  static isBrowser() {\n    return !this.isSSR();\n  }\n  /**\n   * Check if a specific browser API is available\n   * @param {string} api - Name of the API to check (e.g., 'ResizeObserver')\n   * @returns {boolean} True if API is available\n   */\n  static hasAPI(api) {\n    if (this.isSSR()) return false;\n    return typeof /** @type {any} */\n    window[api] !== \"undefined\";\n  }\n  /**\n   * Returns the global Apex config object regardless of environment.\n   * In browser: window.Apex; in SSR/Node.js: global.Apex; fallback: {}.\n   * @returns {any}\n   */\n  static getApex() {\n    if (typeof window !== \"undefined\" && window.Apex) return window.Apex;\n    if (typeof global !== \"undefined\" && global.Apex) return global.Apex;\n    return {};\n  }\n}\nclass SSRElement {\n  /**\n   * @param {string} nodeName\n   * @param {any} namespaceURI\n   */\n  constructor(nodeName, namespaceURI = null) {\n    this.nodeName = nodeName;\n    this.namespaceURI = namespaceURI;\n    this.attributes = /* @__PURE__ */ new Map();\n    this.children = [];\n    this.textContent = \"\";\n    this.style = {};\n    this.classList = new SSRClassList();\n    this.parentNode = /** @type {SSRElement | null} */\n    null;\n    this._ssrWidth = void 0;\n    this._ssrHeight = void 0;\n    this._ssrMode = void 0;\n  }\n  /**\n   * @param {string} name\n   * @param {any} value\n   */\n  setAttribute(name2, value) {\n    this.attributes.set(name2, value);\n  }\n  /**\n   * @param {string} name\n   */\n  getAttribute(name2) {\n    return this.attributes.get(name2);\n  }\n  /**\n   * @param {string} name\n   */\n  removeAttribute(name2) {\n    this.attributes.delete(name2);\n  }\n  /**\n   * @param {string} name\n   */\n  hasAttribute(name2) {\n    return this.attributes.has(name2);\n  }\n  /**\n   * @param {any} child\n   */\n  appendChild(child) {\n    if (child && child !== this) {\n      if (child.parentNode && child.parentNode !== this) {\n        child.parentNode.removeChild(child);\n      } else if (child.parentNode === this) {\n        const index = this.children.indexOf(child);\n        if (index !== -1) this.children.splice(index, 1);\n      }\n      child.parentNode = this;\n      this.children.push(child);\n    }\n    return child;\n  }\n  /**\n   * @param {any} child\n   */\n  removeChild(child) {\n    const index = this.children.indexOf(child);\n    if (index !== -1) {\n      this.children.splice(index, 1);\n      child.parentNode = null;\n    }\n    return child;\n  }\n  /**\n   * @param {any} newNode\n   * @param {any} referenceNode\n   */\n  insertBefore(newNode, referenceNode) {\n    if (!referenceNode) {\n      return this.appendChild(newNode);\n    }\n    if (newNode.parentNode && newNode.parentNode !== this) {\n      newNode.parentNode.removeChild(newNode);\n    } else if (newNode.parentNode === this) {\n      const existingIndex = this.children.indexOf(newNode);\n      if (existingIndex !== -1) this.children.splice(existingIndex, 1);\n    }\n    const index = this.children.indexOf(referenceNode);\n    if (index !== -1) {\n      newNode.parentNode = this;\n      this.children.splice(index, 0, newNode);\n    }\n    return newNode;\n  }\n  cloneNode(deep = false) {\n    const clone = new SSRElement(this.nodeName, this.namespaceURI);\n    clone.textContent = this.textContent;\n    this.attributes.forEach((value, key) => {\n      clone.attributes.set(key, value);\n    });\n    Object.assign(clone.style, this.style);\n    if (deep) {\n      this.children.forEach((child) => {\n        if (child.cloneNode) {\n          clone.appendChild(child.cloneNode(true));\n        }\n      });\n    }\n    return clone;\n  }\n  getBoundingClientRect() {\n    return {\n      width: this._ssrWidth || 0,\n      height: this._ssrHeight || 0,\n      top: 0,\n      left: 0,\n      right: this._ssrWidth || 0,\n      bottom: this._ssrHeight || 0,\n      x: 0,\n      y: 0\n    };\n  }\n  getRootNode() {\n    let root = this;\n    while (root.parentNode) {\n      root = root.parentNode;\n    }\n    return root;\n  }\n  querySelector() {\n    return null;\n  }\n  querySelectorAll() {\n    return [];\n  }\n  getElementsByClassName() {\n    return [];\n  }\n  addEventListener() {\n  }\n  removeEventListener() {\n  }\n  get childNodes() {\n    return this.children;\n  }\n  toString() {\n    let attrs = \"\";\n    this.attributes.forEach((value, key) => {\n      attrs += ` ${key}=\"${value}\"`;\n    });\n    if (this.children.length === 0 && !this.textContent) {\n      return `<${this.nodeName}${attrs}/>`;\n    }\n    const childrenStr = this.children.map((c) => c.toString()).join(\"\");\n    return `<${this.nodeName}${attrs}>${this.textContent}${childrenStr}</${this.nodeName}>`;\n  }\n  // Property getters/setters\n  get innerHTML() {\n    return this.children.map((c) => c.toString()).join(\"\");\n  }\n  set innerHTML(value) {\n    this.children = [];\n    this.textContent = value;\n  }\n  get outerHTML() {\n    return this.toString();\n  }\n  get isConnected() {\n    return true;\n  }\n}\nclass SSRClassList {\n  constructor() {\n    this.classes = /* @__PURE__ */ new Set();\n  }\n  add(...classNames) {\n    classNames.forEach((name2) => this.classes.add(name2));\n  }\n  remove(...classNames) {\n    classNames.forEach((name2) => this.classes.delete(name2));\n  }\n  /**\n   * @param {string} className\n   */\n  contains(className) {\n    return this.classes.has(className);\n  }\n  /**\n   * @param {string} className\n   * @param {any} force\n   */\n  toggle(className, force) {\n    if (force === true) {\n      this.classes.add(className);\n      return true;\n    } else if (force === false) {\n      this.classes.delete(className);\n      return false;\n    } else {\n      if (this.classes.has(className)) {\n        this.classes.delete(className);\n        return false;\n      } else {\n        this.classes.add(className);\n        return true;\n      }\n    }\n  }\n  toString() {\n    return Array.from(this.classes).join(\" \");\n  }\n}\nclass SSRDOMShim {\n  constructor() {\n    this.SVGNS = \"http://www.w3.org/2000/svg\";\n    this.XLINKNS = \"http://www.w3.org/1999/xlink\";\n  }\n  /**\n   * Create SVG element with namespace\n   * @param {string} namespaceURI - Namespace URI\n   * @param {string} qualifiedName - Element tag name\n   * @returns {SSRElement} Mock SVG element\n   */\n  createElementNS(namespaceURI, qualifiedName) {\n    return new SSRElement(qualifiedName, namespaceURI);\n  }\n  /**\n   * Create text node\n   * @param {string} data - Text content\n   * @returns {object} Text node mock\n   */\n  createTextNode(data) {\n    const node = {\n      nodeName: \"#text\",\n      nodeType: 3,\n      textContent: data,\n      toString() {\n        return node.textContent;\n      }\n    };\n    return node;\n  }\n  /**\n   * Query selector (returns null in SSR)\n   * @returns {null}\n   */\n  querySelector() {\n    return null;\n  }\n  /**\n   * Query selector all (returns empty array in SSR)\n   * @returns {any[]}\n   */\n  querySelectorAll() {\n    return [];\n  }\n  /**\n   * Get computed style (returns empty object in SSR)\n   * @returns {object}\n   */\n  getComputedStyle() {\n    return {};\n  }\n  /**\n   * Get bounding client rect for element\n   * @param {SSRElement} element - Element to measure\n   * @returns {object} Mock dimensions\n   */\n  getBoundingClientRect(element) {\n    if (element && element.getBoundingClientRect) {\n      return element.getBoundingClientRect();\n    }\n    return {\n      width: 0,\n      height: 0,\n      top: 0,\n      left: 0,\n      right: 0,\n      bottom: 0,\n      x: 0,\n      y: 0\n    };\n  }\n  /**\n   * Create mock XMLSerializer for SSR\n   * @returns {object} XMLSerializer mock\n   */\n  createXMLSerializer() {\n    return {\n      /**\n       * @param {Element} element\n       */\n      serializeToString(element) {\n        return element.toString ? element.toString() : \"\";\n      }\n    };\n  }\n  /**\n   * Create mock DOMParser for SSR\n   * @returns {object} DOMParser mock\n   */\n  createDOMParser() {\n    return {\n      /**\n       * @param {string} str\n       * @param {string} _type\n       */\n      parseFromString(str, _type) {\n        const root = new SSRElement(\"root\");\n        root.innerHTML = str;\n        return {\n          documentElement: root\n        };\n      }\n    };\n  }\n}\nlet shim = null;\nlet xmlSerializerInstance = null;\nlet domParserInstance = null;\nclass BrowserAPIs {\n  /**\n   * Initialize the SSR shim if in SSR environment\n   * Must be called before using other methods\n   */\n  static init() {\n    if (Environment.isSSR() && !shim) {\n      shim = new SSRDOMShim();\n    }\n  }\n  /**\n   * Create an HTML element\n   * @param {string} tagName - Element tag name\n   * @returns {HTMLElement} HTML element\n   */\n  static createElement(tagName) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.createElementNS(null, tagName);\n    }\n    return document.createElement(tagName);\n  }\n  /**\n   * Create an SVG element with namespace\n   * @param {string} namespaceURI - Namespace URI\n   * @param {string} qualifiedName - Element tag name\n   * @returns {HTMLElement} created element\n   */\n  static createElementNS(namespaceURI, qualifiedName) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.createElementNS(namespaceURI, qualifiedName);\n    }\n    return (\n      /** @type {HTMLElement} */\n      document.createElementNS(namespaceURI, qualifiedName)\n    );\n  }\n  /**\n   * Create a text node\n   * @param {string} data - Text content\n   * @returns {Text|object} Text node\n   */\n  static createTextNode(data) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.createTextNode(data);\n    }\n    return document.createTextNode(data);\n  }\n  /**\n   * Query selector\n   * @param {string} selector - CSS selector\n   * @returns {Element|null}\n   */\n  static querySelector(selector) {\n    if (Environment.isSSR()) {\n      return null;\n    }\n    return document.querySelector(selector);\n  }\n  /**\n   * Query selector all\n   * @param {string} selector - CSS selector\n   * @returns {NodeList|any[]}\n   */\n  static querySelectorAll(selector) {\n    if (Environment.isSSR()) {\n      return [];\n    }\n    return document.querySelectorAll(selector);\n  }\n  /**\n   * Get computed style for an element\n   * @param {Element} element - Element to get styles for\n   * @returns {CSSStyleDeclaration|object}\n   */\n  static getComputedStyle(element) {\n    if (Environment.isSSR()) {\n      return {};\n    }\n    return window.getComputedStyle(element);\n  }\n  /**\n   * Get bounding client rect for an element\n   * @param {Element} element - Element to measure\n   * @returns {DOMRect|object}\n   */\n  static getBoundingClientRect(element) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.getBoundingClientRect(element);\n    }\n    return element ? element.getBoundingClientRect() : {\n      width: 0,\n      height: 0,\n      top: 0,\n      left: 0,\n      right: 0,\n      bottom: 0,\n      x: 0,\n      y: 0\n    };\n  }\n  /**\n   * Get XMLSerializer instance\n   * @returns {XMLSerializer|object}\n   */\n  static getXMLSerializer() {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      if (!xmlSerializerInstance) {\n        xmlSerializerInstance = shim.createXMLSerializer();\n      }\n      return xmlSerializerInstance;\n    }\n    if (!xmlSerializerInstance) {\n      xmlSerializerInstance = new XMLSerializer();\n    }\n    return xmlSerializerInstance;\n  }\n  /**\n   * Get DOMParser instance\n   * @returns {DOMParser|object}\n   */\n  static getDOMParser() {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      if (!domParserInstance) {\n        domParserInstance = shim.createDOMParser();\n      }\n      return domParserInstance;\n    }\n    if (!domParserInstance) {\n      domParserInstance = new DOMParser();\n    }\n    return domParserInstance;\n  }\n  /**\n   * Add event listener to window\n   * @param {string} event - Event name\n   * @param {EventListenerOrEventListenerObject} handler - Event handler\n   * @param {object} options - Event options\n   */\n  static addWindowEventListener(event, handler, options2) {\n    if (Environment.isBrowser()) {\n      window.addEventListener(event, handler, options2);\n    }\n  }\n  /**\n   * Remove event listener from window\n   * @param {string} event - Event name\n   * @param {EventListenerOrEventListenerObject} handler - Event handler\n   * @param {object} options - Event options\n   */\n  static removeWindowEventListener(event, handler, options2) {\n    if (Environment.isBrowser()) {\n      window.removeEventListener(event, handler, options2);\n    }\n  }\n  /**\n   * Request animation frame\n   * @param {FrameRequestCallback} callback - Callback function\n   * @returns {number|null}\n   */\n  static requestAnimationFrame(callback) {\n    if (Environment.isBrowser()) {\n      return window.requestAnimationFrame(callback);\n    }\n    callback(0);\n    return null;\n  }\n  /**\n   * Cancel animation frame\n   * @param {number} id - Animation frame ID\n   */\n  static cancelAnimationFrame(id) {\n    if (Environment.isBrowser() && id) {\n      window.cancelAnimationFrame(id);\n    }\n  }\n  /**\n   * Check if element exists\n   * @param {Element} element - Element to check\n   * @returns {boolean}\n   */\n  static elementExists(element) {\n    if (!element) return false;\n    if (Environment.isSSR()) {\n      return element._ssrMode === true || element.nodeName !== void 0;\n    }\n    return element.getRootNode ? element.getRootNode({ composed: true }) === document || element.isConnected : false;\n  }\n  /**\n   * Get window object (or null in SSR)\n   * @returns {Window|null}\n   */\n  static getWindow() {\n    return Environment.isBrowser() ? window : null;\n  }\n  /**\n   * Get document object (or null in SSR)\n   * @returns {Document|null}\n   */\n  static getDocument() {\n    return Environment.isBrowser() ? document : null;\n  }\n  /**\n   * Get the shim instance (for testing purposes)\n   * @returns {SSRDOMShim|null}\n   */\n  static _getShim() {\n    return shim;\n  }\n  /**\n   * Reset the shim instance (for testing purposes)\n   */\n  static _resetShim() {\n    shim = null;\n    xmlSerializerInstance = null;\n    domParserInstance = null;\n  }\n}\nlet Utils$1 = class Utils {\n  /**\n   * @param {*} item\n   */\n  static isObject(item) {\n    return item && typeof item === \"object\" && !Array.isArray(item);\n  }\n  // Type checking that works across different window objects\n  /**\n   * @param {string} type\n   * @param {string} val\n   */\n  static is(type, val) {\n    return Object.prototype.toString.call(val) === \"[object \" + type + \"]\";\n  }\n  static isSafari() {\n    return Environment.isBrowser() && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  }\n  // to extend defaults with user options\n  // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873\n  /**\n   * @param {any} target\n   * @param {any} source\n   */\n  static extend(target, source) {\n    const output = Object.assign({}, target);\n    if (this.isObject(target) && this.isObject(source)) {\n      Object.keys(source).forEach((key) => {\n        if (this.isObject(source[key])) {\n          if (!(key in target)) {\n            Object.assign(output, {\n              [key]: source[key]\n            });\n          } else {\n            output[key] = this.extend(target[key], source[key]);\n          }\n        } else {\n          Object.assign(output, {\n            [key]: source[key]\n          });\n        }\n      });\n    }\n    return output;\n  }\n  /**\n   * @param {any[]} arrToExtend\n   * @param {any} resultArr\n   */\n  static extendArray(arrToExtend, resultArr) {\n    const extendedArr = [];\n    arrToExtend.map((item) => {\n      extendedArr.push(Utils.extend(resultArr, item));\n    });\n    arrToExtend = extendedArr;\n    return arrToExtend;\n  }\n  // If month counter exceeds 12, it starts again from 1\n  /**\n   * @param {number} month\n   */\n  static monthMod(month) {\n    return month % 12;\n  }\n  /**\n   * clone object with optional shallow copy for performance\n   * @param {*} source - Source object to clone\n   * @param {WeakMap<any, any>} visited - Circular reference tracker\n   * @param {boolean} shallow - If true, performs shallow copy (default: false)\n   * @returns {*} Cloned object\n   */\n  static clone(source, visited = /* @__PURE__ */ new WeakMap(), shallow = false) {\n    if (source === null || typeof source !== \"object\") {\n      return source;\n    }\n    if (visited.has(source)) {\n      return visited.get(source);\n    }\n    let cloneResult;\n    if (Array.isArray(source)) {\n      if (shallow) {\n        cloneResult = source.slice();\n      } else {\n        cloneResult = [];\n        visited.set(source, cloneResult);\n        for (let i = 0; i < source.length; i++) {\n          cloneResult[i] = this.clone(source[i], visited, false);\n        }\n      }\n    } else if (source instanceof Date) {\n      cloneResult = new Date(source.getTime());\n    } else {\n      if (shallow) {\n        cloneResult = Object.assign({}, source);\n      } else {\n        cloneResult = {};\n        visited.set(source, cloneResult);\n        for (const prop in source) {\n          if (Object.prototype.hasOwnProperty.call(source, prop)) {\n            cloneResult[prop] = this.clone(\n              /** @type {Record<string,any>} */\n              source[prop],\n              visited,\n              false\n            );\n          }\n        }\n      }\n    }\n    return cloneResult;\n  }\n  /**\n   * Shallow clone for performance when deep clone isn't needed\n   * @param {*} source - Source to clone\n   * @returns {*} Shallow cloned object\n   */\n  static shallowClone(source) {\n    if (source === null || typeof source !== \"object\") {\n      return source;\n    }\n    if (Array.isArray(source)) {\n      return source.slice();\n    }\n    return Object.assign({}, source);\n  }\n  /**\n   * Fast shallow equality check for objects\n   * @param {Object} obj1 - First object\n   * @param {Object} obj2 - Second object\n   * @returns {boolean} True if shallowly equal\n   */\n  static shallowEqual(obj1, obj2) {\n    if (obj1 === obj2) return true;\n    if (!obj1 || !obj2) return false;\n    if (typeof obj1 !== \"object\" || typeof obj2 !== \"object\") {\n      return obj1 === obj2;\n    }\n    const keys1 = Object.keys(obj1);\n    const keys2 = Object.keys(obj2);\n    if (keys1.length !== keys2.length) return false;\n    for (const key of keys1) {\n      if (\n        /** @type {Record<string,any>} */\n        obj1[key] !== /** @type {Record<string,any>} */\n        obj2[key]\n      )\n        return false;\n    }\n    return true;\n  }\n  /**\n   * @param {number} x\n   */\n  static log10(x) {\n    return Math.log(x) / Math.LN10;\n  }\n  /**\n   * @param {number} x\n   */\n  static roundToBase10(x) {\n    return Math.pow(10, Math.floor(Math.log10(x)));\n  }\n  /**\n   * @param {number} x\n   * @param {number} base\n   */\n  static roundToBase(x, base) {\n    return Math.pow(base, Math.floor(Math.log(x) / Math.log(base)));\n  }\n  /**\n   * @param {any} val\n   */\n  static parseNumber(val) {\n    if (typeof val === \"number\" || val === null) return val;\n    return parseFloat(val);\n  }\n  /**\n   * @param {number} num\n   */\n  static stripNumber(num, precision = 2) {\n    return Number.isInteger(num) ? num : parseFloat(num.toPrecision(precision));\n  }\n  static randomId() {\n    return (Math.random() + 1).toString(36).substring(4);\n  }\n  /**\n   * @param {number} num\n   */\n  static noExponents(num) {\n    if (num.toString().includes(\"e\")) {\n      return Math.round(num);\n    }\n    return num;\n  }\n  /**\n   * @param {any} element\n   */\n  static elementExists(element) {\n    if (!element || !element.isConnected) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * detects if an element is inside a Shadow DOM\n   * @param {any} el\n   */\n  static isInShadowDOM(el) {\n    if (!el || !el.getRootNode) {\n      return false;\n    }\n    const rootNode = el.getRootNode();\n    return rootNode && rootNode !== document && Utils.is(\"ShadowRoot\", rootNode);\n  }\n  /**\n   * gets the shadow root host element\n   * @param {any} el\n   */\n  static getShadowRootHost(el) {\n    if (!Utils.isInShadowDOM(el)) {\n      return null;\n    }\n    const rootNode = el.getRootNode();\n    return rootNode.host || null;\n  }\n  /**\n   * @param {any} el\n   */\n  static getDimensions(el) {\n    if (!el) return [0, 0];\n    if (Environment.isSSR()) {\n      return [el._ssrWidth || 400, el._ssrHeight || 300];\n    }\n    let computedStyle;\n    try {\n      computedStyle = getComputedStyle(el, null);\n    } catch (e) {\n      return [el.clientWidth || 0, el.clientHeight || 0];\n    }\n    let elementWidth = el.clientWidth;\n    let elementHeight = el.clientHeight;\n    if (!elementWidth || !elementHeight) {\n      const rect = el.getBoundingClientRect();\n      elementWidth = elementWidth || rect.width;\n      elementHeight = elementHeight || rect.height;\n    }\n    elementHeight -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom);\n    elementWidth -= parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight);\n    return [elementWidth, elementHeight];\n  }\n  /**\n   * @returns {any}\n   * @param {any} element\n   */\n  static getBoundingClientRect(element) {\n    if (!element) {\n      return {\n        top: 0,\n        right: 0,\n        bottom: 0,\n        left: 0,\n        width: 0,\n        height: 0,\n        x: 0,\n        y: 0\n      };\n    }\n    if (Environment.isSSR()) {\n      return BrowserAPIs.getBoundingClientRect(element);\n    }\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      width: element.clientWidth,\n      height: element.clientHeight,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n  /**\n   * @param {any[]} arr\n   */\n  static getLargestStringFromArr(arr) {\n    return arr.reduce((a, b) => {\n      if (Array.isArray(b)) {\n        b = b.reduce((aa, bb) => aa.length > bb.length ? aa : bb);\n      }\n      return a.length > b.length ? a : b;\n    }, 0);\n  }\n  // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-12342275\n  static hexToRgba(hex = \"#999999\", opacity = 0.6) {\n    if (hex.substring(0, 1) !== \"#\") {\n      hex = \"#999999\";\n    }\n    const hexStr = hex.replace(\"#\", \"\");\n    const h = hexStr.match(new RegExp(\"(.{\" + hexStr.length / 3 + \"})\", \"g\")) || [];\n    for (let i = 0; i < h.length; i++) {\n      h[i] = parseInt(h[i].length === 1 ? h[i] + h[i] : h[i], 16);\n    }\n    if (typeof opacity !== \"undefined\") h.push(opacity);\n    return \"rgba(\" + h.join(\",\") + \")\";\n  }\n  /**\n   * @param {string} rgba\n   */\n  static getOpacityFromRGBA(rgba) {\n    return parseFloat(rgba.replace(/^.*,(.+)\\)/, \"$1\"));\n  }\n  /**\n   * Parse a #RGB or #RRGGBB hex colour string into [r,g,b] in 0–255.\n   * Returns null for invalid input. Used by getContrastRatio.\n   * @param {string} hex\n   * @returns {[number, number, number] | null}\n   */\n  static parseHex(hex) {\n    if (typeof hex !== \"string\") return null;\n    let h = hex.trim().replace(\"#\", \"\");\n    if (h.length === 3) {\n      h = h.split(\"\").map((c) => c + c).join(\"\");\n    }\n    if (!/^[0-9a-fA-F]{6}$/.test(h)) return null;\n    return [\n      parseInt(h.slice(0, 2), 16),\n      parseInt(h.slice(2, 4), 16),\n      parseInt(h.slice(4, 6), 16)\n    ];\n  }\n  /**\n   * Relative luminance per WCAG 2.x (https://www.w3.org/TR/WCAG22/#dfn-relative-luminance).\n   * @param {[number, number, number]} rgb 0–255 sRGB triplet\n   * @returns {number} 0.0–1.0\n   */\n  static relativeLuminance([r, g, b]) {\n    const channel = (c) => {\n      const v = c / 255;\n      return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n    };\n    return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b);\n  }\n  /**\n   * WCAG contrast ratio between two hex colours. Returns 0 for invalid input.\n   * Range: 1 (identical) … 21 (#000 vs #fff).\n   * WCAG AA requires ≥ 4.5 for normal text and ≥ 3.0 for large text / UI components.\n   * @param {string} hex1\n   * @param {string} hex2\n   * @returns {number}\n   */\n  static getContrastRatio(hex1, hex2) {\n    const rgb1 = Utils.parseHex(hex1);\n    const rgb2 = Utils.parseHex(hex2);\n    if (!rgb1 || !rgb2) return 0;\n    const l1 = Utils.relativeLuminance(rgb1);\n    const l2 = Utils.relativeLuminance(rgb2);\n    const lighter = Math.max(l1, l2);\n    const darker = Math.min(l1, l2);\n    return (lighter + 0.05) / (darker + 0.05);\n  }\n  /**\n   * @param {any} rgb\n   */\n  static rgb2hex(rgb) {\n    rgb = rgb.match(\n      /^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i\n    );\n    return rgb && rgb.length === 4 ? \"#\" + (\"0\" + parseInt(rgb[1], 10).toString(16)).slice(-2) + (\"0\" + parseInt(rgb[2], 10).toString(16)).slice(-2) + (\"0\" + parseInt(rgb[3], 10).toString(16)).slice(-2) : \"\";\n  }\n  /**\n   * @param {number} percent\n   * @param {string} color\n   */\n  shadeRGBColor(percent, color) {\n    const f = color.split(\",\"), t = percent < 0 ? 0 : 255, p = percent < 0 ? percent * -1 : percent, R = parseInt(f[0].slice(4), 10), G = parseInt(f[1], 10), B = parseInt(f[2], 10);\n    return \"rgb(\" + (Math.round((t - R) * p) + R) + \",\" + (Math.round((t - G) * p) + G) + \",\" + (Math.round((t - B) * p) + B) + \")\";\n  }\n  /**\n   * @param {number} percent\n   * @param {string} color\n   */\n  shadeHexColor(percent, color) {\n    const f = parseInt(color.slice(1), 16), t = percent < 0 ? 0 : 255, p = percent < 0 ? percent * -1 : percent, R = f >> 16, G = f >> 8 & 255, B = f & 255;\n    return \"#\" + (16777216 + (Math.round((t - R) * p) + R) * 65536 + (Math.round((t - G) * p) + G) * 256 + (Math.round((t - B) * p) + B)).toString(16).slice(1);\n  }\n  // beautiful color shading blending code\n  // http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors\n  /**\n   * @param {number} p\n   * @param {string} color\n   */\n  shadeColor(p, color) {\n    if (Utils.isColorHex(color)) {\n      return this.shadeHexColor(p, color);\n    } else {\n      return this.shadeRGBColor(p, color);\n    }\n  }\n  /**\n   * @param {string} color\n   */\n  static isColorHex(color) {\n    return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(color);\n  }\n  /**\n   * @param {string} color\n   */\n  static isCSSVariable(color) {\n    if (typeof color !== \"string\") return false;\n    const value = color.trim();\n    return value.startsWith(\"var(\") && value.endsWith(\")\");\n  }\n  /**\n   * @param {string} color\n   */\n  static getThemeColor(color) {\n    if (!Utils.isCSSVariable(color)) return color;\n    if (Environment.isSSR()) return color;\n    const tempElem = document.createElement(\"div\");\n    tempElem.style.cssText = \"position:fixed; left: -9999px; visibility:hidden;\";\n    tempElem.style.color = color;\n    document.body.appendChild(tempElem);\n    let computedColor;\n    try {\n      computedColor = window.getComputedStyle(tempElem).color;\n    } finally {\n      if (tempElem.parentNode) {\n        tempElem.parentNode.removeChild(tempElem);\n      }\n    }\n    return computedColor;\n  }\n  /**\n   * @param {string} color\n   * @param {number} opacity\n   */\n  static applyOpacityToColor(color, opacity) {\n    const value = Number(opacity);\n    if (!Number.isFinite(value)) return color;\n    if (value <= 0) return \"transparent\";\n    if (value >= 1) return color;\n    const percent = Math.round(value * 100);\n    return `color-mix(in srgb, ${color} ${percent}%, transparent)`;\n  }\n  /**\n   * @param {number} size\n   * @param {number} dataPointsLen\n   */\n  static getPolygonPos(size, dataPointsLen) {\n    const dotsArray = [];\n    const angle = Math.PI * 2 / dataPointsLen;\n    for (let i = 0; i < dataPointsLen; i++) {\n      const curPos = {};\n      curPos.x = size * Math.sin(i * angle);\n      curPos.y = -size * Math.cos(i * angle);\n      dotsArray.push(curPos);\n    }\n    return dotsArray;\n  }\n  /**\n   * @param {number} centerX\n   * @param {number} centerY\n   * @param {number} radius\n   * @param {number} angleInDegrees\n   */\n  static polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n    const angleInRadians = (angleInDegrees - 90) * Math.PI / 180;\n    return {\n      x: centerX + radius * Math.cos(angleInRadians),\n      y: centerY + radius * Math.sin(angleInRadians)\n    };\n  }\n  /**\n   * @param {string} str\n   */\n  static escapeString(str, escapeWith = \"x\") {\n    let newStr = str.toString().slice();\n    newStr = newStr.replace(/[` ~!@#$%^&*()|+=?;:'\",.<>{}[\\]\\\\/]/gi, escapeWith);\n    return newStr;\n  }\n  /**\n   * @param {number} val\n   */\n  static negToZero(val) {\n    return val < 0 ? 0 : val;\n  }\n  /**\n   * @param {any[]} arr\n   * @param {number} old_index\n   * @param {number} new_index\n   */\n  static moveIndexInArray(arr, old_index, new_index) {\n    if (new_index >= arr.length) {\n      let k = new_index - arr.length + 1;\n      while (k--) {\n        arr.push(void 0);\n      }\n    }\n    arr.splice(new_index, 0, arr.splice(old_index, 1)[0]);\n    return arr;\n  }\n  /**\n   * @param {string} s\n   */\n  static extractNumber(s) {\n    return parseFloat(s.replace(/[^\\d.]*/g, \"\"));\n  }\n  /**\n   * @param {any} el\n   * @param {string} cls\n   */\n  static findAncestor(el, cls) {\n    while ((el = el.parentElement) && !el.classList.contains(cls)) ;\n    return el;\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} styles\n   */\n  static setELstyles(el, styles) {\n    for (const key in styles) {\n      if (Object.prototype.hasOwnProperty.call(styles, key)) {\n        el.style.key = styles[key];\n      }\n    }\n  }\n  // prevents JS prevision errors when adding\n  /**\n   * @param {number} a\n   * @param {number} b\n   */\n  static preciseAddition(a, b) {\n    const aDecimals = (String(a).split(\".\")[1] || \"\").length;\n    const bDecimals = (String(b).split(\".\")[1] || \"\").length;\n    const factor = Math.pow(10, Math.max(aDecimals, bDecimals));\n    return (Math.round(a * factor) + Math.round(b * factor)) / factor;\n  }\n  /**\n   * @param {any} value\n   */\n  static isNumber(value) {\n    return !isNaN(value) && parseFloat(String(Number(value))) === value && !isNaN(parseInt(value, 10));\n  }\n  /**\n   * @param {number} n\n   */\n  static isFloat(n) {\n    return Number(n) === n && n % 1 !== 0;\n  }\n  static isMsEdge() {\n    if (Environment.isSSR()) return false;\n    const ua = window.navigator.userAgent;\n    const edge = ua.indexOf(\"Edge/\");\n    if (edge > 0) {\n      return parseInt(ua.substring(edge + 5, ua.indexOf(\".\", edge)), 10);\n    }\n    return false;\n  }\n  //\n  // Find the Greatest Common Divisor of two numbers\n  //\n  /**\n   * @param {number} a\n   * @param {number} b\n   */\n  static getGCD(a, b, p = 7) {\n    let factor = Math.pow(10, p - Math.floor(Math.log10(Math.max(a, b))));\n    if (factor > 1) {\n      a = Math.round(Math.abs(a) * factor);\n      b = Math.round(Math.abs(b) * factor);\n    } else {\n      factor = 1;\n    }\n    while (b) {\n      const t = b;\n      b = a % b;\n      a = t;\n    }\n    return a / factor;\n  }\n  /**\n   * @param {number} n\n   */\n  static getPrimeFactors(n) {\n    const factors = [];\n    let divisor = 2;\n    while (n >= 2) {\n      if (n % divisor == 0) {\n        factors.push(divisor);\n        n = n / divisor;\n      } else {\n        divisor++;\n      }\n    }\n    return factors;\n  }\n  /**\n   * @param {number} a\n   * @param {number} b\n   */\n  static mod(a, b, p = 7) {\n    const big = Math.pow(10, p - Math.floor(Math.log10(Math.max(a, b))));\n    a = Math.round(Math.abs(a) * big);\n    b = Math.round(Math.abs(b) * big);\n    return a % b / big;\n  }\n};\nclass DateTime {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.months31 = [1, 3, 5, 7, 8, 10, 12];\n    this.months30 = [2, 4, 6, 9, 11];\n    this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n  }\n  /**\n   * @param {any} date\n   */\n  isValidDate(date) {\n    if (typeof date === \"number\") {\n      return false;\n    }\n    return !isNaN(this.parseDate(date));\n  }\n  /**\n   * @param {any} dateStr\n   */\n  getTimeStamp(dateStr) {\n    if (!Date.parse(dateStr)) {\n      return dateStr;\n    }\n    const utc = this.w.config.xaxis.labels.datetimeUTC;\n    return !utc ? new Date(dateStr).getTime() : new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime();\n  }\n  /**\n   * @param {any} timestamp\n   */\n  getDate(timestamp) {\n    const utc = this.w.config.xaxis.labels.datetimeUTC;\n    return utc ? new Date(new Date(timestamp).toUTCString()) : new Date(timestamp);\n  }\n  /**\n   * @param {string} dateStr\n   */\n  parseDate(dateStr) {\n    const parsed = Date.parse(dateStr);\n    if (!isNaN(parsed)) {\n      return this.getTimeStamp(dateStr);\n    }\n    let output = Date.parse(dateStr.replace(/-/g, \"/\").replace(/[a-z]+/gi, \" \"));\n    output = this.getTimeStamp(output);\n    return output;\n  }\n  // This fixes the difference of x-axis labels between chrome/safari\n  // Fixes #1726, #1544, #1485, #1255\n  /**\n   * @param {string} dateStr\n   */\n  parseDateWithTimezone(dateStr) {\n    return Date.parse(dateStr.replace(/-/g, \"/\").replace(/[a-z]+/gi, \" \"));\n  }\n  // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191\n  /**\n   * @param {Date} date\n   * @param {string} format\n   */\n  formatDate(date, format) {\n    const locale = this.w.globals.locale;\n    const utc = this.w.config.xaxis.labels.datetimeUTC;\n    const MMMM = [\"\\0\", ...locale.months];\n    const MMM = [\"\u0001\", ...locale.shortMonths];\n    const dddd = [\"\u0002\", ...locale.days];\n    const ddd = [\"\u0003\", ...locale.shortDays];\n    function ii(i, len = 2) {\n      let s2 = i + \"\";\n      while (s2.length < len) s2 = \"0\" + s2;\n      return s2;\n    }\n    const y = utc ? date.getUTCFullYear() : date.getFullYear();\n    format = format.replace(/(^|[^\\\\])yyyy+/g, \"$1\" + y);\n    format = format.replace(/(^|[^\\\\])yy/g, \"$1\" + y.toString().substr(2, 2));\n    format = format.replace(/(^|[^\\\\])y/g, \"$1\" + y);\n    const M = (utc ? date.getUTCMonth() : date.getMonth()) + 1;\n    format = format.replace(/(^|[^\\\\])MMMM+/g, \"$1\" + MMMM[0]);\n    format = format.replace(/(^|[^\\\\])MMM/g, \"$1\" + MMM[0]);\n    format = format.replace(/(^|[^\\\\])MM/g, \"$1\" + ii(M));\n    format = format.replace(/(^|[^\\\\])M/g, \"$1\" + M);\n    const d = utc ? date.getUTCDate() : date.getDate();\n    format = format.replace(/(^|[^\\\\])dddd+/g, \"$1\" + dddd[0]);\n    format = format.replace(/(^|[^\\\\])ddd/g, \"$1\" + ddd[0]);\n    format = format.replace(/(^|[^\\\\])dd/g, \"$1\" + ii(d));\n    format = format.replace(/(^|[^\\\\])d/g, \"$1\" + d);\n    const H = utc ? date.getUTCHours() : date.getHours();\n    format = format.replace(/(^|[^\\\\])HH+/g, \"$1\" + ii(H));\n    format = format.replace(/(^|[^\\\\])H/g, \"$1\" + H);\n    const h = H > 12 ? H - 12 : H === 0 ? 12 : H;\n    format = format.replace(/(^|[^\\\\])hh+/g, \"$1\" + ii(h));\n    format = format.replace(/(^|[^\\\\])h/g, \"$1\" + h);\n    const m = utc ? date.getUTCMinutes() : date.getMinutes();\n    format = format.replace(/(^|[^\\\\])mm+/g, \"$1\" + ii(m));\n    format = format.replace(/(^|[^\\\\])m/g, \"$1\" + m);\n    const s = utc ? date.getUTCSeconds() : date.getSeconds();\n    format = format.replace(/(^|[^\\\\])ss+/g, \"$1\" + ii(s));\n    format = format.replace(/(^|[^\\\\])s/g, \"$1\" + s);\n    let f = utc ? date.getUTCMilliseconds() : date.getMilliseconds();\n    format = format.replace(/(^|[^\\\\])fff+/g, \"$1\" + ii(f, 3));\n    f = Math.round(f / 10);\n    format = format.replace(/(^|[^\\\\])ff/g, \"$1\" + ii(f));\n    f = Math.round(f / 10);\n    format = format.replace(/(^|[^\\\\])f/g, \"$1\" + f);\n    const T = H < 12 ? \"AM\" : \"PM\";\n    format = format.replace(/(^|[^\\\\])TT+/g, \"$1\" + T);\n    format = format.replace(/(^|[^\\\\])T/g, \"$1\" + T.charAt(0));\n    const t = T.toLowerCase();\n    format = format.replace(/(^|[^\\\\])tt+/g, \"$1\" + t);\n    format = format.replace(/(^|[^\\\\])t/g, \"$1\" + t.charAt(0));\n    let tz = -date.getTimezoneOffset();\n    let K = utc || !tz ? \"Z\" : tz > 0 ? \"+\" : \"-\";\n    if (!utc) {\n      tz = Math.abs(tz);\n      const tzHrs = Math.floor(tz / 60);\n      const tzMin = tz % 60;\n      K += ii(tzHrs) + \":\" + ii(tzMin);\n    }\n    format = format.replace(/(^|[^\\\\])K/g, \"$1\" + K);\n    const day = (utc ? date.getUTCDay() : date.getDay()) + 1;\n    format = format.replace(new RegExp(dddd[0], \"g\"), dddd[day]);\n    format = format.replace(new RegExp(ddd[0], \"g\"), ddd[day]);\n    format = format.replace(new RegExp(MMMM[0], \"g\"), MMMM[M]);\n    format = format.replace(new RegExp(MMM[0], \"g\"), MMM[M]);\n    format = format.replace(/\\\\(.)/g, \"$1\");\n    return format;\n  }\n  /**\n   * @param {number} minX\n   * @param {number} maxX\n   */\n  getTimeUnitsfromTimestamp(minX, maxX) {\n    const w = this.w;\n    if (w.config.xaxis.min !== void 0) {\n      minX = w.config.xaxis.min;\n    }\n    if (w.config.xaxis.max !== void 0) {\n      maxX = w.config.xaxis.max;\n    }\n    const tsMin = this.getDate(minX);\n    const tsMax = this.getDate(maxX);\n    const minD = this.formatDate(tsMin, \"yyyy MM dd HH mm ss fff\").split(\" \");\n    const maxD = this.formatDate(tsMax, \"yyyy MM dd HH mm ss fff\").split(\" \");\n    return {\n      minMillisecond: parseInt(minD[6], 10),\n      maxMillisecond: parseInt(maxD[6], 10),\n      minSecond: parseInt(minD[5], 10),\n      maxSecond: parseInt(maxD[5], 10),\n      minMinute: parseInt(minD[4], 10),\n      maxMinute: parseInt(maxD[4], 10),\n      minHour: parseInt(minD[3], 10),\n      maxHour: parseInt(maxD[3], 10),\n      minDate: parseInt(minD[2], 10),\n      maxDate: parseInt(maxD[2], 10),\n      minMonth: parseInt(minD[1], 10) - 1,\n      maxMonth: parseInt(maxD[1], 10) - 1,\n      minYear: parseInt(minD[0], 10),\n      maxYear: parseInt(maxD[0], 10)\n    };\n  }\n  /**\n   * @param {number} year\n   */\n  isLeapYear(year) {\n    return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n  }\n  /**\n   * @param {number} month\n   * @param {number} year\n   * @param {number} subtract\n   */\n  calculcateLastDaysOfMonth(month, year, subtract) {\n    const days = this.determineDaysOfMonths(month, year);\n    return days - subtract;\n  }\n  /**\n   * @param {number} year\n   */\n  determineDaysOfYear(year) {\n    let days = 365;\n    if (this.isLeapYear(year)) {\n      days = 366;\n    }\n    return days;\n  }\n  /**\n   * @param {number} year\n   * @param {number} month\n   * @param {number} date\n   */\n  determineRemainingDaysOfYear(year, month, date) {\n    let dayOfYear = this.daysCntOfYear[month] + date;\n    if (month > 1 && this.isLeapYear(year)) dayOfYear++;\n    return dayOfYear;\n  }\n  /**\n   * @param {number} month\n   * @param {number} year\n   */\n  determineDaysOfMonths(month, year) {\n    let days = 30;\n    month = Utils$1.monthMod(month);\n    switch (true) {\n      case this.months30.indexOf(month) > -1:\n        if (month === 2) {\n          if (this.isLeapYear(year)) {\n            days = 29;\n          } else {\n            days = 28;\n          }\n        }\n        break;\n      case this.months31.indexOf(month) > -1:\n        days = 31;\n        break;\n      default:\n        days = 31;\n        break;\n    }\n    return days;\n  }\n  // ───────────────────────────────────────────────────────────────────────────\n  // Pure date helpers used by the v6 single-interval TimeScale.\n  // Native Date setters/getters do all rollover work (leap years, month\n  // length, year crossings), eliminating the manual rollover code that was\n  // the source of the historical TimeScale boundary bugs.\n  // ───────────────────────────────────────────────────────────────────────────\n  /**\n   * Extract calendar fields from a timestamp. Month is 0-indexed (matches\n   * Date.getMonth / getUTCMonth).\n   *\n   * @param {number} timestamp\n   * @param {boolean} isUTC\n   * @returns {{ year: number, month: number, date: number, hour: number, minute: number, second: number, ms: number, weekday: number }}\n   */\n  getDateFields(timestamp, isUTC) {\n    const d = new Date(timestamp);\n    return isUTC ? {\n      year: d.getUTCFullYear(),\n      month: d.getUTCMonth(),\n      date: d.getUTCDate(),\n      hour: d.getUTCHours(),\n      minute: d.getUTCMinutes(),\n      second: d.getUTCSeconds(),\n      ms: d.getUTCMilliseconds(),\n      weekday: d.getUTCDay()\n    } : {\n      year: d.getFullYear(),\n      month: d.getMonth(),\n      date: d.getDate(),\n      hour: d.getHours(),\n      minute: d.getMinutes(),\n      second: d.getSeconds(),\n      ms: d.getMilliseconds(),\n      weekday: d.getDay()\n    };\n  }\n  /**\n   * Advance a timestamp by `count` units. Native setters handle cross-month,\n   * cross-year, leap-year, and DST rollover correctly.\n   *\n   * @param {number} timestamp\n   * @param {'year'|'month'|'week'|'day'|'hour'|'minute'|'second'} unit\n   * @param {number} count  may be negative\n   * @param {boolean} isUTC\n   * @returns {number}\n   */\n  addInterval(timestamp, unit, count, isUTC) {\n    const d = new Date(timestamp);\n    if (isUTC) {\n      switch (unit) {\n        case \"year\":\n          d.setUTCFullYear(d.getUTCFullYear() + count);\n          break;\n        case \"month\":\n          d.setUTCMonth(d.getUTCMonth() + count);\n          break;\n        case \"week\":\n          d.setUTCDate(d.getUTCDate() + count * 7);\n          break;\n        case \"day\":\n          d.setUTCDate(d.getUTCDate() + count);\n          break;\n        case \"hour\":\n          d.setUTCHours(d.getUTCHours() + count);\n          break;\n        case \"minute\":\n          d.setUTCMinutes(d.getUTCMinutes() + count);\n          break;\n        case \"second\":\n          d.setUTCSeconds(d.getUTCSeconds() + count);\n          break;\n      }\n    } else {\n      switch (unit) {\n        case \"year\":\n          d.setFullYear(d.getFullYear() + count);\n          break;\n        case \"month\":\n          d.setMonth(d.getMonth() + count);\n          break;\n        case \"week\":\n          d.setDate(d.getDate() + count * 7);\n          break;\n        case \"day\":\n          d.setDate(d.getDate() + count);\n          break;\n        case \"hour\":\n          d.setHours(d.getHours() + count);\n          break;\n        case \"minute\":\n          d.setMinutes(d.getMinutes() + count);\n          break;\n        case \"second\":\n          d.setSeconds(d.getSeconds() + count);\n          break;\n      }\n    }\n    return d.getTime();\n  }\n  /**\n   * Snap a timestamp UP to the next boundary aligned with `step` units of\n   * `unit`. Returns the input unchanged if already on a boundary. Alignment\n   * rules per unit:\n   *   - second: 0/step/2*step/... seconds within a minute (step must divide 60)\n   *   - minute: 0/step/2*step/... minutes within an hour (step must divide 60)\n   *   - hour:   0/step/... hours within a day (step must divide 24)\n   *   - day:    every day (step always 1)\n   *   - week:   next Monday on a `step`-week stride from a fixed epoch Monday\n   *   - month:  Jan/Apr/Jul/Oct for step=3, Jan/Jul for step=6 (step must divide 12)\n   *   - year:   year % step === 0\n   *\n   * @param {number} timestamp\n   * @param {'year'|'month'|'week'|'day'|'hour'|'minute'|'second'} unit\n   * @param {number} step\n   * @param {boolean} isUTC\n   * @returns {number}\n   */\n  ceilToBoundary(timestamp, unit, step, isUTC) {\n    const d = new Date(timestamp);\n    if (isUTC) {\n      switch (unit) {\n        case \"second\": {\n          const s = d.getUTCSeconds();\n          const aligned = Math.ceil(s / step) * step;\n          if (aligned === s && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(aligned);\n          return d.getTime();\n        }\n        case \"minute\": {\n          const m = d.getUTCMinutes();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(aligned);\n          return d.getTime();\n        }\n        case \"hour\": {\n          const h = d.getUTCHours();\n          const aligned = Math.ceil(h / step) * step;\n          if (aligned === h && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(aligned);\n          return d.getTime();\n        }\n        case \"day\": {\n          if (d.getUTCHours() === 0 && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(0);\n          d.setUTCDate(d.getUTCDate() + 1);\n          return d.getTime();\n        }\n        case \"week\": {\n          const MS_PER_WEEK = 7 * 24 * 60 * 60 * 1e3;\n          const REF_MONDAY_UTC = Date.UTC(1970, 0, 5);\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(0);\n          const startOfDay = d.getTime();\n          const weeksSinceRef = Math.ceil(\n            (startOfDay - REF_MONDAY_UTC) / MS_PER_WEEK\n          );\n          const alignedWeeks = Math.ceil(weeksSinceRef / step) * step;\n          const aligned = REF_MONDAY_UTC + alignedWeeks * MS_PER_WEEK;\n          if (aligned >= timestamp) return aligned;\n          return aligned + step * MS_PER_WEEK;\n        }\n        case \"month\": {\n          const m = d.getUTCMonth();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getUTCDate() === 1 && d.getUTCHours() === 0 && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(0);\n          d.setUTCDate(1);\n          d.setUTCMonth(aligned);\n          return d.getTime();\n        }\n        case \"year\": {\n          const y = d.getUTCFullYear();\n          const aligned = Math.ceil(y / step) * step;\n          if (aligned === y && d.getUTCMonth() === 0 && d.getUTCDate() === 1 && d.getUTCHours() === 0 && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          return Date.UTC(aligned, 0, 1);\n        }\n      }\n    } else {\n      switch (unit) {\n        case \"second\": {\n          const s = d.getSeconds();\n          const aligned = Math.ceil(s / step) * step;\n          if (aligned === s && d.getMilliseconds() === 0) return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(aligned);\n          return d.getTime();\n        }\n        case \"minute\": {\n          const m = d.getMinutes();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(aligned);\n          return d.getTime();\n        }\n        case \"hour\": {\n          const h = d.getHours();\n          const aligned = Math.ceil(h / step) * step;\n          if (aligned === h && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(aligned);\n          return d.getTime();\n        }\n        case \"day\": {\n          if (d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(0);\n          d.setDate(d.getDate() + 1);\n          return d.getTime();\n        }\n        case \"week\": {\n          const MS_PER_WEEK = 7 * 24 * 60 * 60 * 1e3;\n          const REF_MONDAY_LOCAL = new Date(1970, 0, 5).getTime();\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(0);\n          const startOfDay = d.getTime();\n          const weeksSinceRef = Math.ceil(\n            (startOfDay - REF_MONDAY_LOCAL) / MS_PER_WEEK\n          );\n          const alignedWeeks = Math.ceil(weeksSinceRef / step) * step;\n          const aligned = REF_MONDAY_LOCAL + alignedWeeks * MS_PER_WEEK;\n          if (aligned >= timestamp) return aligned;\n          return aligned + step * MS_PER_WEEK;\n        }\n        case \"month\": {\n          const m = d.getMonth();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getDate() === 1 && d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(0);\n          d.setDate(1);\n          d.setMonth(aligned);\n          return d.getTime();\n        }\n        case \"year\": {\n          const y = d.getFullYear();\n          const aligned = Math.ceil(y / step) * step;\n          if (aligned === y && d.getMonth() === 0 && d.getDate() === 1 && d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          return new Date(aligned, 0, 1).getTime();\n        }\n      }\n    }\n    return timestamp;\n  }\n  /**\n   * Test whether a timestamp falls exactly on a unit boundary (start of year,\n   * start of month, start of day, etc.). Used by the multi-resolution\n   * formatter to upgrade a tick's display unit to a coarser scale.\n   *\n   * @param {number} timestamp\n   * @param {'year'|'month'|'day'|'hour'|'minute'|'second'} unit\n   * @param {boolean} isUTC\n   * @returns {boolean}\n   */\n  isAtBoundary(timestamp, unit, isUTC) {\n    const f = this.getDateFields(timestamp, isUTC);\n    switch (unit) {\n      case \"year\":\n        return f.month === 0 && f.date === 1 && f.hour === 0 && f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"month\":\n        return f.date === 1 && f.hour === 0 && f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"day\":\n        return f.hour === 0 && f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"hour\":\n        return f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"minute\":\n        return f.second === 0 && f.ms === 0;\n      case \"second\":\n        return f.ms === 0;\n    }\n    return false;\n  }\n}\nclass Formatters {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.tooltipKeyFormat = \"dd MMM\";\n  }\n  /**\n   * @param {Function} fn\n   * @param {any} val\n   * @param {any} timestamp\n   * @param {any} _opts\n   */\n  xLabelFormat(fn, val, timestamp, _opts) {\n    const w = this.w;\n    if (w.config.xaxis.type === \"datetime\") {\n      if (w.config.xaxis.labels.formatter === void 0) {\n        if (w.config.tooltip.x.formatter === void 0) {\n          const datetimeObj = new DateTime(this.w);\n          return datetimeObj.formatDate(\n            datetimeObj.getDate(val),\n            w.config.tooltip.x.format\n          );\n        }\n      }\n    }\n    return fn(val, timestamp, _opts);\n  }\n  /**\n   * @param {any} val\n   */\n  defaultGeneralFormatter(val) {\n    if (Array.isArray(val)) {\n      return val.map((v) => {\n        return v;\n      });\n    } else {\n      return val;\n    }\n  }\n  /**\n   * @param {any} v\n   * @param {ApexYAxis} yaxe\n   */\n  defaultYFormatter(v, yaxe) {\n    const w = this.w;\n    if (Utils$1.isNumber(v)) {\n      if (w.globals.yValueDecimal !== 0) {\n        v = v.toFixed(\n          yaxe.decimalsInFloat !== void 0 ? yaxe.decimalsInFloat : w.globals.yValueDecimal\n        );\n      } else {\n        const f = v.toFixed(0);\n        v = Number(f) === v ? f : v.toFixed(1);\n      }\n    }\n    return v;\n  }\n  setLabelFormatters() {\n    const w = this.w;\n    const fmt = w.formatters;\n    fmt.xaxisTooltipFormatter = (val) => {\n      return this.defaultGeneralFormatter(val);\n    };\n    fmt.ttKeyFormatter = (val) => {\n      return this.defaultGeneralFormatter(val);\n    };\n    fmt.ttZFormatter = (val) => {\n      return val;\n    };\n    fmt.legendFormatter = (val) => {\n      return this.defaultGeneralFormatter(val);\n    };\n    if (w.config.xaxis.labels.formatter !== void 0) {\n      fmt.xLabelFormatter = w.config.xaxis.labels.formatter;\n    } else {\n      fmt.xLabelFormatter = (val) => {\n        if (Utils$1.isNumber(val)) {\n          if (!w.config.xaxis.convertedCatToNumeric && w.config.xaxis.type === \"numeric\") {\n            if (Utils$1.isNumber(w.config.xaxis.decimalsInFloat)) {\n              return val.toFixed(w.config.xaxis.decimalsInFloat);\n            } else {\n              const diff = w.globals.maxX - w.globals.minX;\n              if (diff > 0) {\n                const step = diff / 10;\n                const decimals = Math.max(0, -Math.floor(Math.log10(step)));\n                return val.toFixed(decimals);\n              }\n              return val.toFixed(0);\n            }\n          }\n          if (w.globals.isBarHorizontal) {\n            const range = w.globals.maxY - /** @type {any} */\n            w.globals.minYArr;\n            if (range < 4) {\n              return val.toFixed(1);\n            }\n          }\n          return val.toFixed(0);\n        }\n        return val;\n      };\n    }\n    if (typeof w.config.tooltip.x.formatter === \"function\") {\n      fmt.ttKeyFormatter = w.config.tooltip.x.formatter;\n    } else {\n      fmt.ttKeyFormatter = fmt.xLabelFormatter;\n    }\n    if (typeof w.config.xaxis.tooltip.formatter === \"function\") {\n      fmt.xaxisTooltipFormatter = w.config.xaxis.tooltip.formatter;\n    }\n    if (Array.isArray(w.config.tooltip.y)) {\n      fmt.ttVal = w.config.tooltip.y;\n    } else {\n      if (w.config.tooltip.y.formatter !== void 0) {\n        fmt.ttVal = w.config.tooltip.y;\n      }\n    }\n    if (w.config.tooltip.z.formatter !== void 0) {\n      fmt.ttZFormatter = w.config.tooltip.z.formatter;\n    }\n    if (w.config.legend.formatter !== void 0) {\n      fmt.legendFormatter = w.config.legend.formatter;\n    }\n    fmt.yLabelFormatters = [];\n    w.config.yaxis.forEach((yaxe, i) => {\n      if (yaxe.labels.formatter !== void 0) {\n        fmt.yLabelFormatters[i] = yaxe.labels.formatter;\n      } else if (w.config.chart.type === \"violin\") {\n        const round = (v) => typeof v === \"number\" && isFinite(v) ? `${Math.round(v * 100) / 100}` : v;\n        fmt.yLabelFormatters[i] = (val) => {\n          if (!w.globals.xyCharts) return val;\n          return Array.isArray(val) ? val.map(round) : round(val);\n        };\n      } else {\n        fmt.yLabelFormatters[i] = (val) => {\n          if (!w.globals.xyCharts) return val;\n          if (Array.isArray(val)) {\n            return val.map((v) => {\n              return this.defaultYFormatter(v, yaxe);\n            });\n          } else {\n            return this.defaultYFormatter(val, yaxe);\n          }\n        };\n      }\n    });\n    return w.globals;\n  }\n  heatmapLabelFormatters() {\n    const w = this.w;\n    if (w.config.chart.type === \"heatmap\") {\n      w.globals.yAxisScale[0].result = /** @type {any} */\n      w.seriesData.seriesNames.slice();\n      const longest = (\n        /** @type {any} */\n        w.seriesData.seriesNames.reduce(\n          (a, b) => a.length > b.length ? a : b,\n          0\n        )\n      );\n      w.globals.yAxisScale[0].niceMax = longest;\n      w.globals.yAxisScale[0].niceMin = longest;\n    }\n  }\n}\nconst getRangeValues = ({\n  isTimeline,\n  seriesIndex,\n  dataPointIndex,\n  y1,\n  y2,\n  w\n}) => {\n  var _a;\n  let start = w.rangeData.seriesRangeStart[seriesIndex][dataPointIndex];\n  let end = w.rangeData.seriesRangeEnd[seriesIndex][dataPointIndex];\n  let ylabel = w.labelData.labels[dataPointIndex];\n  let seriesName = w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : \"\";\n  const yLbFormatter = w.formatters.ttKeyFormatter;\n  const yLbTitleFormatter = w.config.tooltip.y.title.formatter;\n  const opts = {\n    w,\n    seriesIndex,\n    dataPointIndex,\n    start,\n    end\n  };\n  if (typeof yLbTitleFormatter === \"function\") {\n    seriesName = yLbTitleFormatter(seriesName, opts);\n  }\n  if ((_a = w.config.series[seriesIndex].data[dataPointIndex]) == null ? void 0 : _a.x) {\n    ylabel = w.config.series[seriesIndex].data[dataPointIndex].x;\n  }\n  if (!isTimeline) {\n    if (w.config.xaxis.type === \"datetime\") {\n      const xFormat = new Formatters(w);\n      ylabel = xFormat.xLabelFormat(\n        w.formatters.ttKeyFormatter,\n        ylabel,\n        ylabel,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(w).formatDate,\n          w\n        }\n      );\n    }\n  }\n  if (typeof yLbFormatter === \"function\") {\n    ylabel = yLbFormatter(ylabel, opts);\n  }\n  if (Number.isFinite(y1) && Number.isFinite(y2)) {\n    start = y1;\n    end = y2;\n  }\n  let startVal = \"\";\n  let endVal = \"\";\n  const color = w.globals.colors[seriesIndex];\n  if (w.config.tooltip.x.formatter === void 0) {\n    if (w.config.xaxis.type === \"datetime\") {\n      const datetimeObj = new DateTime(w);\n      startVal = datetimeObj.formatDate(\n        datetimeObj.getDate(start),\n        w.config.tooltip.x.format\n      );\n      endVal = datetimeObj.formatDate(\n        datetimeObj.getDate(end),\n        w.config.tooltip.x.format\n      );\n    } else {\n      startVal = start;\n      endVal = end;\n    }\n  } else {\n    startVal = w.config.tooltip.x.formatter(start);\n    endVal = w.config.tooltip.x.formatter(end);\n  }\n  return { start, end, startVal, endVal, ylabel, color, seriesName };\n};\nconst buildRangeTooltipHTML = (opts) => {\n  let { color, seriesName, ylabel, start, end, seriesIndex, dataPointIndex } = opts;\n  const formatter = opts.w.globals.tooltip.tooltipLabels.getFormatters(seriesIndex);\n  start = formatter.yLbFormatter(start);\n  end = formatter.yLbFormatter(end);\n  const val = formatter.yLbFormatter(\n    opts.w.seriesData.series[seriesIndex][dataPointIndex]\n  );\n  let valueHTML = \"\";\n  const rangeValues = `<span class=\"value start-value\">\n  ${start}\n  </span> <span class=\"separator\">-</span> <span class=\"value end-value\">\n  ${end}\n  </span>`;\n  if (opts.w.globals.comboCharts) {\n    if (opts.w.config.series[seriesIndex].type === \"rangeArea\" || opts.w.config.series[seriesIndex].type === \"rangeBar\") {\n      valueHTML = rangeValues;\n    } else {\n      valueHTML = `<span>${val}</span>`;\n    }\n  } else {\n    valueHTML = rangeValues;\n  }\n  return '<div class=\"apexcharts-tooltip-rangebar\"><div> <span class=\"series-name\" style=\"color: ' + color + '\">' + (seriesName ? seriesName : \"\") + '</span></div><div> <span class=\"category\">' + ylabel + \": </span> \" + valueHTML + \" </div></div>\";\n};\nclass Defaults {\n  /**\n   * @param {Record<string, any>} opts\n   */\n  constructor(opts) {\n    this.opts = opts;\n  }\n  hideYAxis() {\n    this.opts.yaxis[0].show = false;\n    this.opts.yaxis[0].title.text = \"\";\n    this.opts.yaxis[0].axisBorder.show = false;\n    this.opts.yaxis[0].axisTicks.show = false;\n    this.opts.yaxis[0].floating = true;\n  }\n  line() {\n    return {\n      dataLabels: {\n        enabled: false\n      },\n      stroke: {\n        width: 5,\n        curve: \"straight\"\n      },\n      markers: {\n        size: 0,\n        hover: {\n          sizeOffset: 6\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  /**\n   * @param {Record<string, any>} defaults\n   */\n  sparkline(defaults) {\n    this.hideYAxis();\n    const ret = {\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      },\n      legend: {\n        show: false\n      },\n      xaxis: {\n        labels: {\n          show: false\n        },\n        tooltip: {\n          enabled: false\n        },\n        axisBorder: {\n          show: false\n        },\n        axisTicks: {\n          show: false\n        }\n      },\n      chart: {\n        toolbar: {\n          show: false\n        },\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        enabled: false\n      }\n    };\n    return Utils$1.extend(defaults, ret);\n  }\n  slope() {\n    this.hideYAxis();\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        },\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        enabled: true,\n        /**\n         * @param {any} val\n         * @param {Record<string, any>} opts\n         */\n        formatter(val, opts) {\n          const seriesName = opts.w.config.series[opts.seriesIndex].name;\n          return val !== null ? seriesName + \": \" + val : \"\";\n        },\n        background: {\n          enabled: false\n        },\n        offsetX: -5\n      },\n      grid: {\n        xaxis: {\n          lines: {\n            show: true\n          }\n        },\n        yaxis: {\n          lines: {\n            show: false\n          }\n        }\n      },\n      xaxis: {\n        position: \"top\",\n        labels: {\n          style: {\n            fontSize: 14,\n            fontWeight: 900\n          }\n        },\n        tooltip: {\n          enabled: false\n        },\n        crosshairs: {\n          show: false\n        }\n      },\n      markers: {\n        size: 8,\n        hover: {\n          sizeOffset: 1\n        }\n      },\n      legend: {\n        show: false\n      },\n      tooltip: {\n        shared: false,\n        intersect: true,\n        followCursor: true\n      },\n      stroke: {\n        width: 5,\n        curve: \"straight\"\n      }\n    };\n  }\n  bar() {\n    return {\n      chart: {\n        stacked: false\n      },\n      plotOptions: {\n        bar: {\n          dataLabels: {\n            position: \"center\"\n          }\n        }\n      },\n      dataLabels: {\n        style: {\n          colors: [\"#fff\"]\n        },\n        background: {\n          enabled: false\n        }\n      },\n      stroke: {\n        width: 0,\n        lineCap: \"square\"\n      },\n      fill: {\n        opacity: 0.85\n      },\n      legend: {\n        markers: {\n          shape: \"square\"\n        }\n      },\n      tooltip: {\n        shared: false,\n        intersect: true\n      },\n      xaxis: {\n        tooltip: {\n          enabled: false\n        },\n        tickPlacement: \"between\",\n        crosshairs: {\n          width: \"barWidth\",\n          position: \"back\",\n          fill: {\n            type: \"gradient\"\n          },\n          dropShadow: {\n            enabled: false\n          },\n          stroke: {\n            width: 0\n          }\n        }\n      }\n    };\n  }\n  funnel() {\n    this.hideYAxis();\n    return __spreadProps(__spreadValues({}, this.bar()), {\n      chart: {\n        animations: {\n          speed: 800,\n          animateGradually: {\n            enabled: false\n          }\n        }\n      },\n      plotOptions: {\n        bar: {\n          horizontal: true,\n          borderRadiusApplication: \"around\",\n          borderRadius: 0,\n          dataLabels: {\n            position: \"center\"\n          }\n        }\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n      xaxis: {\n        labels: {\n          show: false\n        },\n        tooltip: {\n          enabled: false\n        },\n        axisBorder: {\n          show: false\n        },\n        axisTicks: {\n          show: false\n        }\n      }\n    });\n  }\n  pyramid() {\n    return this.funnel();\n  }\n  gauge() {\n    const base = this.radialBar();\n    return __spreadProps(__spreadValues({}, base), {\n      plotOptions: {\n        radialBar: {\n          startAngle: -135,\n          endAngle: 135,\n          hollow: {\n            margin: 0,\n            size: \"60%\"\n          },\n          track: {\n            background: \"#e7e7e7\",\n            strokeWidth: \"100%\",\n            margin: 5\n          },\n          dataLabels: {\n            name: {\n              show: false\n            },\n            value: {\n              show: true,\n              fontSize: \"32px\",\n              fontWeight: 600,\n              offsetY: 8\n            }\n          }\n        }\n      }\n    });\n  }\n  candlestick() {\n    return {\n      stroke: {\n        width: 1\n      },\n      fill: {\n        opacity: 1\n      },\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: true,\n        custom: ({ seriesIndex, dataPointIndex, w }) => {\n          return this._getBoxTooltip(\n            w,\n            seriesIndex,\n            dataPointIndex,\n            [\"Open\", \"High\", \"\", \"Low\", \"Close\"],\n            \"candlestick\"\n          );\n        }\n      },\n      states: {\n        active: {\n          filter: {\n            type: \"none\"\n          }\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  boxPlot() {\n    return {\n      chart: {\n        animations: {\n          dynamicAnimation: {\n            enabled: false\n          }\n        }\n      },\n      stroke: {\n        width: 1,\n        colors: [\"#24292e\"]\n      },\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: true,\n        custom: ({ seriesIndex, dataPointIndex, w }) => {\n          return this._getBoxTooltip(\n            w,\n            seriesIndex,\n            dataPointIndex,\n            [\"Minimum\", \"Q1\", \"Median\", \"Q3\", \"Maximum\"],\n            \"boxPlot\"\n          );\n        }\n      },\n      markers: {\n        size: 7,\n        strokeWidth: 1,\n        strokeColors: \"#111\"\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  violin() {\n    return {\n      chart: {\n        // Violins are a per-category distribution plot (discrete category\n        // x-axis), so range zooming/panning is meaningless — off by default.\n        zoom: {\n          enabled: false\n        },\n        animations: {\n          dynamicAnimation: {\n            enabled: false\n          }\n        }\n      },\n      stroke: {\n        width: 1,\n        colors: [\"#24292e\"]\n      },\n      fill: {\n        opacity: 0.7\n      },\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: true,\n        custom: ({ seriesIndex, dataPointIndex, w }) => {\n          return this._getViolinTooltip(w, seriesIndex, dataPointIndex);\n        }\n      },\n      states: {\n        active: {\n          filter: {\n            type: \"none\"\n          }\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  rangeBar() {\n    const handleTimelineTooltip = (opts) => {\n      const { color, seriesName, ylabel, startVal, endVal } = getRangeValues(__spreadProps(__spreadValues({}, opts), {\n        isTimeline: true\n      }));\n      return buildRangeTooltipHTML(__spreadProps(__spreadValues({}, opts), {\n        color,\n        seriesName,\n        ylabel,\n        start: startVal,\n        end: endVal\n      }));\n    };\n    const handleRangeColumnTooltip = (opts) => {\n      const { color, seriesName, ylabel, start, end } = getRangeValues(opts);\n      return buildRangeTooltipHTML(__spreadProps(__spreadValues({}, opts), {\n        color,\n        seriesName,\n        ylabel,\n        start,\n        end\n      }));\n    };\n    return {\n      chart: {\n        animations: {\n          animateGradually: false\n        }\n      },\n      stroke: {\n        width: 0,\n        lineCap: \"square\"\n      },\n      plotOptions: {\n        bar: {\n          borderRadius: 0,\n          dataLabels: {\n            position: \"center\"\n          }\n        }\n      },\n      dataLabels: {\n        enabled: false,\n        /**\n         * @param {any} val\n         */\n        formatter(val, { seriesIndex, dataPointIndex, w }) {\n          const getVal = () => {\n            const start = w.rangeData.seriesRangeStart[seriesIndex][dataPointIndex];\n            const end = w.rangeData.seriesRangeEnd[seriesIndex][dataPointIndex];\n            return end - start;\n          };\n          if (w.globals.comboCharts) {\n            if (w.config.series[seriesIndex].type === \"rangeBar\" || w.config.series[seriesIndex].type === \"rangeArea\") {\n              return getVal();\n            } else {\n              return val;\n            }\n          } else {\n            return getVal();\n          }\n        },\n        background: {\n          enabled: false\n        },\n        style: {\n          colors: [\"#fff\"]\n        }\n      },\n      markers: {\n        size: 10\n      },\n      tooltip: {\n        shared: false,\n        followCursor: true,\n        /**\n         * @param {Record<string, any>} opts\n         */\n        custom(opts) {\n          if (opts.w.config.plotOptions && opts.w.config.plotOptions.bar && opts.w.config.plotOptions.bar.horizontal) {\n            return handleTimelineTooltip(opts);\n          } else {\n            return handleRangeColumnTooltip(opts);\n          }\n        }\n      },\n      xaxis: {\n        tickPlacement: \"between\",\n        tooltip: {\n          enabled: false\n        },\n        crosshairs: {\n          stroke: {\n            width: 0\n          }\n        }\n      }\n    };\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  dumbbell(opts) {\n    var _a, _b;\n    if (!((_a = opts.plotOptions.bar) == null ? void 0 : _a.barHeight)) {\n      opts.plotOptions.bar.barHeight = 2;\n    }\n    if (!((_b = opts.plotOptions.bar) == null ? void 0 : _b.columnWidth)) {\n      opts.plotOptions.bar.columnWidth = 2;\n    }\n    return opts;\n  }\n  area() {\n    return {\n      stroke: {\n        width: 4,\n        fill: {\n          type: \"solid\",\n          gradient: {\n            inverseColors: false,\n            shade: \"light\",\n            type: \"vertical\",\n            opacityFrom: 0.65,\n            opacityTo: 0.5,\n            stops: [0, 100, 100]\n          }\n        }\n      },\n      fill: {\n        type: \"gradient\",\n        gradient: {\n          inverseColors: false,\n          shade: \"light\",\n          type: \"vertical\",\n          opacityFrom: 0.65,\n          opacityTo: 0.5,\n          stops: [0, 100, 100]\n        }\n      },\n      markers: {\n        size: 0,\n        hover: {\n          sizeOffset: 6\n        }\n      },\n      tooltip: {\n        followCursor: false\n      }\n    };\n  }\n  rangeArea() {\n    const handleRangeAreaTooltip = (opts) => {\n      const { color, seriesName, ylabel, start, end } = getRangeValues(opts);\n      return buildRangeTooltipHTML(__spreadProps(__spreadValues({}, opts), {\n        color,\n        seriesName,\n        ylabel,\n        start,\n        end\n      }));\n    };\n    return {\n      stroke: {\n        curve: \"straight\",\n        width: 0\n      },\n      fill: {\n        type: \"solid\",\n        opacity: 0.6\n      },\n      markers: {\n        size: 0\n      },\n      states: {\n        hover: {\n          filter: {\n            type: \"none\"\n          }\n        },\n        active: {\n          filter: {\n            type: \"none\"\n          }\n        }\n      },\n      tooltip: {\n        intersect: false,\n        shared: true,\n        followCursor: true,\n        /**\n         * @param {Record<string, any>} opts\n         */\n        custom(opts) {\n          return handleRangeAreaTooltip(opts);\n        }\n      }\n    };\n  }\n  /**\n   * @param {Record<string, any>} defaults\n   */\n  brush(defaults) {\n    const ret = {\n      chart: {\n        toolbar: {\n          autoSelected: \"selection\",\n          show: false\n        },\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        enabled: false\n      },\n      stroke: {\n        width: 1\n      },\n      tooltip: {\n        enabled: false\n      },\n      xaxis: {\n        tooltip: {\n          enabled: false\n        }\n      }\n    };\n    return Utils$1.extend(defaults, ret);\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  stacked100(opts) {\n    opts.dataLabels = opts.dataLabels || {};\n    opts.dataLabels.formatter = opts.dataLabels.formatter || void 0;\n    const existingDataLabelFormatter = opts.dataLabels.formatter;\n    opts.yaxis.forEach((yaxe, index) => {\n      opts.yaxis[index].min = 0;\n      opts.yaxis[index].max = 100;\n    });\n    const isBar = opts.chart.type === \"bar\";\n    if (isBar) {\n      opts.dataLabels.formatter = existingDataLabelFormatter || /**\n       * @param {any} val\n       */\n      function(val) {\n        if (typeof val === \"number\") {\n          return val ? val.toFixed(0) + \"%\" : val;\n        }\n        return val;\n      };\n    }\n    return opts;\n  }\n  stackedBars() {\n    const barDefaults = this.bar();\n    return __spreadProps(__spreadValues({}, barDefaults), {\n      plotOptions: __spreadProps(__spreadValues({}, barDefaults.plotOptions), {\n        bar: __spreadProps(__spreadValues({}, barDefaults.plotOptions.bar), {\n          borderRadiusApplication: \"end\",\n          borderRadiusWhenStacked: \"last\"\n        })\n      })\n    });\n  }\n  // This function removes the left and right spacing in chart for line/area/scatter if xaxis type = category for those charts by converting xaxis = numeric. Numeric/Datetime xaxis prevents the unnecessary spacing in the left/right of the chart area\n  /**\n   * @param {Record<string, any>} opts\n   */\n  convertCatToNumeric(opts) {\n    opts.xaxis.convertedCatToNumeric = true;\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   * @param {any} cats\n   */\n  convertCatToNumericXaxis(opts, cats) {\n    opts.xaxis.type = \"numeric\";\n    opts.xaxis.labels = opts.xaxis.labels || {};\n    opts.xaxis.labels.formatter = opts.xaxis.labels.formatter || /**\n     * @param {any} val\n     */\n    function(val) {\n      return Utils$1.isNumber(val) ? Math.floor(val) : val;\n    };\n    const defaultFormatter = opts.xaxis.labels.formatter;\n    let labels = opts.xaxis.categories && opts.xaxis.categories.length ? opts.xaxis.categories : opts.labels;\n    if (cats && cats.length) {\n      labels = cats.map((c) => {\n        return Array.isArray(c) ? c : String(c);\n      });\n    }\n    if (labels && labels.length) {\n      opts.xaxis.labels.formatter = function(val) {\n        return Utils$1.isNumber(val) ? defaultFormatter(labels[Math.floor(val) - 1]) : defaultFormatter(val);\n      };\n    }\n    opts.xaxis.categories = [];\n    opts.labels = [];\n    opts.xaxis.tickAmount = opts.xaxis.tickAmount || \"dataPoints\";\n    return opts;\n  }\n  bubble() {\n    return {\n      dataLabels: {\n        style: {\n          colors: [\"#fff\"]\n        }\n      },\n      tooltip: {\n        shared: false,\n        intersect: true\n      },\n      xaxis: {\n        crosshairs: {\n          width: 0\n        }\n      },\n      fill: {\n        type: \"solid\",\n        gradient: {\n          shade: \"light\",\n          inverse: true,\n          shadeIntensity: 0.55,\n          opacityFrom: 0.4,\n          opacityTo: 0.8\n        }\n      }\n    };\n  }\n  scatter() {\n    return {\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: false,\n        intersect: true\n      },\n      markers: {\n        size: 6,\n        strokeWidth: 1,\n        hover: {\n          sizeOffset: 2\n        }\n      }\n    };\n  }\n  heatmap() {\n    return {\n      chart: {\n        stacked: false\n      },\n      fill: {\n        opacity: 1\n      },\n      dataLabels: {\n        style: {\n          colors: [\"#fff\"]\n        }\n      },\n      stroke: {\n        colors: [\"#fff\"]\n      },\n      tooltip: {\n        followCursor: true,\n        marker: {\n          show: false\n        },\n        x: {\n          show: false\n        }\n      },\n      legend: {\n        position: \"top\",\n        markers: {\n          shape: \"square\"\n        }\n      },\n      grid: {\n        padding: {\n          right: 20\n        }\n      }\n    };\n  }\n  treemap() {\n    return {\n      chart: {\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        style: {\n          fontSize: 14,\n          fontWeight: 600,\n          colors: [\"#fff\"]\n        }\n      },\n      stroke: {\n        show: true,\n        width: 2,\n        colors: [\"#fff\"]\n      },\n      legend: {\n        show: false\n      },\n      fill: {\n        opacity: 1,\n        gradient: {\n          stops: [0, 100]\n        }\n      },\n      tooltip: {\n        followCursor: true,\n        x: {\n          show: false\n        }\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          show: false\n        },\n        tooltip: {\n          enabled: false\n        }\n      }\n    };\n  }\n  pie() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      plotOptions: {\n        pie: {\n          donut: {\n            labels: {\n              show: false\n            }\n          }\n        }\n      },\n      dataLabels: {\n        /**\n         * @param {number} val\n         */\n        formatter(val) {\n          return val.toFixed(1) + \"%\";\n        },\n        style: {\n          colors: [\"#fff\"]\n        },\n        background: {\n          enabled: false\n        },\n        dropShadow: {\n          enabled: true\n        }\n      },\n      stroke: {\n        colors: [\"#fff\"]\n      },\n      fill: {\n        opacity: 1,\n        gradient: {\n          shade: \"light\",\n          stops: [0, 100]\n        }\n      },\n      tooltip: {\n        theme: \"dark\",\n        fillSeriesColor: true\n      },\n      legend: {\n        position: \"right\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  donut() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      dataLabels: {\n        /**\n         * @param {number} val\n         */\n        formatter(val) {\n          return val.toFixed(1) + \"%\";\n        },\n        style: {\n          colors: [\"#fff\"]\n        },\n        background: {\n          enabled: false\n        },\n        dropShadow: {\n          enabled: true\n        }\n      },\n      stroke: {\n        colors: [\"#fff\"]\n      },\n      fill: {\n        opacity: 1,\n        gradient: {\n          shade: \"light\",\n          shadeIntensity: 0.35,\n          stops: [80, 100],\n          opacityFrom: 1,\n          opacityTo: 1\n        }\n      },\n      tooltip: {\n        theme: \"dark\",\n        fillSeriesColor: true\n      },\n      legend: {\n        position: \"right\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  polarArea() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      dataLabels: {\n        /**\n         * @param {number} val\n         */\n        formatter(val) {\n          return val.toFixed(1) + \"%\";\n        },\n        enabled: false\n      },\n      stroke: {\n        show: true,\n        width: 2\n      },\n      fill: {\n        opacity: 0.7\n      },\n      tooltip: {\n        theme: \"dark\",\n        fillSeriesColor: true\n      },\n      legend: {\n        position: \"right\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  radar() {\n    this.opts.yaxis[0].labels.offsetY = this.opts.yaxis[0].labels.offsetY ? this.opts.yaxis[0].labels.offsetY : 6;\n    return {\n      dataLabels: {\n        enabled: false,\n        style: {\n          fontSize: \"11px\"\n        }\n      },\n      stroke: {\n        width: 2\n      },\n      markers: {\n        size: 5,\n        strokeWidth: 1,\n        strokeOpacity: 1\n      },\n      fill: {\n        opacity: 0.2\n      },\n      tooltip: {\n        shared: false,\n        intersect: true,\n        followCursor: true\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      },\n      xaxis: {\n        labels: {\n          formatter: (val) => val,\n          style: {\n            colors: [\"#a8a8a8\"],\n            fontSize: \"11px\"\n          }\n        },\n        tooltip: {\n          enabled: false\n        },\n        crosshairs: {\n          show: false\n        }\n      }\n    };\n  }\n  radialBar() {\n    return {\n      chart: {\n        animations: {\n          dynamicAnimation: {\n            enabled: true,\n            speed: 800\n          }\n        },\n        toolbar: {\n          show: false\n        }\n      },\n      stroke: {\n        // Radial value arcs are stroked open arcs; square/round caps would\n        // extend the stroke half a stroke-width past each endpoint, making\n        // the \"starting edge\" visibly stick out past the geometric arc.\n        // Butt cap is the only one that aligns with the arc's true angular\n        // span. Without this, a chart that previously was a bar (whose\n        // defaults set lineCap='square') would carry that cap across into\n        // the radial render after a type morph.\n        lineCap: \"butt\"\n      },\n      fill: {\n        gradient: {\n          shade: \"dark\",\n          shadeIntensity: 0.4,\n          inverseColors: false,\n          type: \"diagonal2\",\n          opacityFrom: 1,\n          opacityTo: 1,\n          stops: [70, 98, 100]\n        }\n      },\n      legend: {\n        show: false,\n        position: \"right\"\n      },\n      tooltip: {\n        enabled: false,\n        fillSeriesColor: true\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   * @param {any[]} labels\n   * @param {string} chartType\n   */\n  _getBoxTooltip(w, seriesIndex, dataPointIndex, labels, chartType) {\n    const o = w.candleData.seriesCandleO[seriesIndex][dataPointIndex];\n    const h = w.candleData.seriesCandleH[seriesIndex][dataPointIndex];\n    const m = w.candleData.seriesCandleM[seriesIndex][dataPointIndex];\n    const l = w.candleData.seriesCandleL[seriesIndex][dataPointIndex];\n    const c = w.candleData.seriesCandleC[seriesIndex][dataPointIndex];\n    const _si = (\n      /** @type {Record<string,any>} */\n      w.config.series[seriesIndex]\n    );\n    if (_si.type && _si.type !== chartType) {\n      return `<div class=\"apexcharts-custom-tooltip\">\n          ${_si.name ? _si.name : \"series-\" + (seriesIndex + 1)}: <strong>${w.seriesData.series[seriesIndex][dataPointIndex]}</strong>\n        </div>`;\n    } else {\n      return `<div class=\"apexcharts-tooltip-box apexcharts-tooltip-${w.config.chart.type}\"><div>${labels[0]}: <span class=\"value\">` + o + `</span></div><div>${labels[1]}: <span class=\"value\">` + h + \"</span></div>\" + (m ? `<div>${labels[2]}: <span class=\"value\">` + m + \"</span></div>\" : \"\") + `<div>${labels[3]}: <span class=\"value\">` + l + `</span></div><div>${labels[4]}: <span class=\"value\">` + c + \"</span></div></div>\";\n    }\n  }\n  /**\n   * Shared tooltip for a violin: distribution value range and observation\n   * count. Per-point hover is intentionally unsupported (jitter renders as a\n   * single path), so the tooltip summarizes the violin as a whole.\n   *\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   */\n  _getViolinTooltip(w, seriesIndex, dataPointIndex) {\n    var _a, _b, _c;\n    const minV = (_a = w.violinData.seriesViolinMin[seriesIndex]) == null ? void 0 : _a[dataPointIndex];\n    const maxV = (_b = w.violinData.seriesViolinMax[seriesIndex]) == null ? void 0 : _b[dataPointIndex];\n    const pts = ((_c = w.violinData.seriesViolinPoints[seriesIndex]) == null ? void 0 : _c[dataPointIndex]) || [];\n    const name2 = (\n      /** @type {Record<string,any>} */\n      w.config.series[seriesIndex].name || \"series-\" + (seriesIndex + 1)\n    );\n    return `<div class=\"apexcharts-tooltip-box apexcharts-tooltip-${w.config.chart.type}\"><div class=\"apexcharts-tooltip-violin-name\">${name2}</div><div>Min: <span class=\"value\">${minV}</span></div><div>Max: <span class=\"value\">${maxV}</span></div><div>Observations: <span class=\"value\">${pts.length}</span></div></div>`;\n  }\n}\nconst name = \"en\";\nconst options = { \"months\": [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"], \"shortMonths\": [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], \"days\": [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], \"shortDays\": [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], \"toolbar\": { \"exportToSVG\": \"Download SVG\", \"exportToPNG\": \"Download PNG\", \"exportToCSV\": \"Download CSV\", \"menu\": \"Menu\", \"selection\": \"Selection\", \"selectionZoom\": \"Selection Zoom\", \"zoomIn\": \"Zoom In\", \"zoomOut\": \"Zoom Out\", \"pan\": \"Panning\", \"reset\": \"Reset Zoom\" } };\nconst en = {\n  name,\n  options\n};\nclass Options {\n  constructor() {\n    this.yAxis = {\n      show: true,\n      showAlways: false,\n      showForNullSeries: true,\n      seriesName: void 0,\n      opposite: false,\n      reversed: false,\n      logarithmic: false,\n      logBase: 10,\n      tickAmount: void 0,\n      stepSize: void 0,\n      forceNiceScale: false,\n      alignZero: false,\n      max: void 0,\n      min: void 0,\n      floating: false,\n      decimalsInFloat: void 0,\n      labels: {\n        show: true,\n        showDuplicates: false,\n        minWidth: 0,\n        maxWidth: 160,\n        offsetX: 0,\n        offsetY: 0,\n        align: void 0,\n        rotate: 0,\n        padding: 20,\n        style: {\n          colors: [],\n          fontSize: \"11px\",\n          fontWeight: 400,\n          fontFamily: void 0,\n          cssClass: \"\"\n        },\n        formatter: void 0\n      },\n      axisBorder: {\n        show: false,\n        color: \"#e0e0e0\",\n        width: 1,\n        offsetX: 0,\n        offsetY: 0\n      },\n      axisTicks: {\n        show: false,\n        color: \"#e0e0e0\",\n        width: 6,\n        offsetX: 0,\n        offsetY: 0\n      },\n      title: {\n        text: void 0,\n        rotate: -90,\n        offsetY: 0,\n        offsetX: 0,\n        style: {\n          color: void 0,\n          fontSize: \"11px\",\n          fontWeight: 900,\n          fontFamily: void 0,\n          cssClass: \"\"\n        }\n      },\n      tooltip: {\n        enabled: false,\n        offsetX: 0\n      },\n      crosshairs: {\n        show: true,\n        position: \"front\",\n        stroke: {\n          color: \"#b6b6b6\",\n          width: 1,\n          dashArray: 0\n        }\n      }\n    };\n    this.pointAnnotation = {\n      id: void 0,\n      x: 0,\n      y: null,\n      yAxisIndex: 0,\n      seriesIndex: void 0,\n      mouseEnter: void 0,\n      mouseLeave: void 0,\n      click: void 0,\n      marker: {\n        size: 4,\n        fillColor: \"#fff\",\n        strokeWidth: 2,\n        strokeColor: \"#333\",\n        shape: \"circle\",\n        offsetX: 0,\n        offsetY: 0,\n        // radius: 2, // DEPRECATED\n        cssClass: \"\"\n      },\n      label: {\n        borderColor: \"#c2c2c2\",\n        borderWidth: 1,\n        borderRadius: 2,\n        text: void 0,\n        textAnchor: \"middle\",\n        offsetX: 0,\n        offsetY: 0,\n        mouseEnter: void 0,\n        mouseLeave: void 0,\n        click: void 0,\n        style: {\n          background: \"#fff\",\n          color: void 0,\n          fontSize: \"11px\",\n          fontFamily: void 0,\n          fontWeight: 400,\n          cssClass: \"\",\n          padding: {\n            left: 5,\n            right: 5,\n            top: 2,\n            bottom: 2\n          }\n        }\n      },\n      customSVG: {\n        // this will be deprecated in the next major version as it is going to be replaced with a better alternative below (image)\n        SVG: void 0,\n        cssClass: void 0,\n        offsetX: 0,\n        offsetY: 0\n      },\n      image: {\n        path: void 0,\n        width: 20,\n        height: 20,\n        offsetX: 0,\n        offsetY: 0\n      }\n    };\n    this.yAxisAnnotation = {\n      id: void 0,\n      y: 0,\n      y2: null,\n      strokeDashArray: 1,\n      fillColor: \"#c2c2c2\",\n      borderColor: \"#c2c2c2\",\n      borderWidth: 1,\n      opacity: 0.3,\n      offsetX: 0,\n      offsetY: 0,\n      width: \"100%\",\n      yAxisIndex: 0,\n      label: {\n        borderColor: \"#c2c2c2\",\n        borderWidth: 1,\n        borderRadius: 2,\n        text: void 0,\n        textAnchor: \"end\",\n        position: \"right\",\n        offsetX: 0,\n        offsetY: -3,\n        mouseEnter: void 0,\n        mouseLeave: void 0,\n        click: void 0,\n        style: {\n          background: \"#fff\",\n          color: void 0,\n          fontSize: \"11px\",\n          fontFamily: void 0,\n          fontWeight: 400,\n          cssClass: \"\",\n          padding: {\n            left: 5,\n            right: 5,\n            top: 2,\n            bottom: 2\n          }\n        }\n      }\n    };\n    this.xAxisAnnotation = {\n      id: void 0,\n      x: 0,\n      x2: null,\n      strokeDashArray: 1,\n      fillColor: \"#c2c2c2\",\n      borderColor: \"#c2c2c2\",\n      borderWidth: 1,\n      opacity: 0.3,\n      offsetX: 0,\n      offsetY: 0,\n      label: {\n        borderColor: \"#c2c2c2\",\n        borderWidth: 1,\n        borderRadius: 2,\n        text: void 0,\n        textAnchor: \"middle\",\n        orientation: \"vertical\",\n        position: \"top\",\n        offsetX: 0,\n        offsetY: 0,\n        mouseEnter: void 0,\n        mouseLeave: void 0,\n        click: void 0,\n        style: {\n          background: \"#fff\",\n          color: void 0,\n          fontSize: \"11px\",\n          fontFamily: void 0,\n          fontWeight: 400,\n          cssClass: \"\",\n          padding: {\n            left: 5,\n            right: 5,\n            top: 2,\n            bottom: 2\n          }\n        }\n      }\n    };\n    this.text = {\n      x: 0,\n      y: 0,\n      text: \"\",\n      textAnchor: \"start\",\n      foreColor: void 0,\n      fontSize: \"13px\",\n      fontFamily: void 0,\n      fontWeight: 400,\n      appendTo: \".apexcharts-annotations\",\n      backgroundColor: \"transparent\",\n      borderColor: \"#c2c2c2\",\n      borderRadius: 0,\n      borderWidth: 0,\n      paddingLeft: 4,\n      paddingRight: 4,\n      paddingTop: 2,\n      paddingBottom: 2\n    };\n  }\n  init() {\n    return {\n      annotations: {\n        yaxis: [this.yAxisAnnotation],\n        xaxis: [this.xAxisAnnotation],\n        points: [this.pointAnnotation],\n        texts: [],\n        images: [],\n        shapes: []\n      },\n      chart: {\n        animations: {\n          // Master switch — set false to render charts without any animation.\n          // Each chart type gets a tailored initial-mount animation by default:\n          //   line/area/rangeArea/radar: pen-stroke draw + radial fill bloom\n          //   bar/stacked/range/funnel:  grow from baseline (+ stagger)\n          //   scatter/bubble:            scale-up pop with overshoot\n          //   heatmap:                   diagonal-wave cell reveal\n          //   treemap:                   largest-tile-first cascade\n          //   pie/donut/polar/gauge:     arc sweep + needle settle\n          // Speed is controlled by `speed`; per-element stagger by\n          // `animateGradually.enabled` / `animateGradually.delay`.\n          enabled: true,\n          speed: 800,\n          animateGradually: {\n            // Drives per-element stagger across all chart types. When enabled,\n            // bars/heatmap-cells/scatter-points/treemap-tiles reveal in\n            // sequence; line/area markers fade in progressively along the\n            // draw. `delay` is the requested step in ms (auto-capped per\n            // chart so total stagger ≤ ~half the animation duration).\n            delay: 150,\n            enabled: true\n          },\n          dynamicAnimation: {\n            // Data-change (updateSeries) animation. Independent from the\n            // initial-mount animations above.\n            enabled: true,\n            speed: 350\n          },\n          chartTypeMorph: {\n            // Cross-type morph (updateOptions changing chart.type). Bridges\n            // the destroy+recreate flicker by sampling source + target paths\n            // into N evenly-spaced perimeter points and tweening point-by-point\n            // with rotation-search alignment, so the transition is always smooth\n            // and non-self-intersecting even between very different shapes (bar\n            // rect ↔ pie wedge / radial arc). Supported pairs include bar ↔\n            // pie / donut / radialBar / polarArea / funnel / pyramid (plus the\n            // trivial pie ↔ donut ↔ polarArea cases). Falls back to instant\n            // snap when types or data shape are incompatible.\n            enabled: true,\n            speed: 600\n          },\n          // Honor the OS-level prefers-reduced-motion setting. When true (default)\n          // and the user has the accessibility preference enabled, all initial-mount\n          // animations are skipped and the chart renders instantly.\n          respectReducedMotion: true,\n          // Above this many data points, per-element morph + stagger (which\n          // spins up one JS-driven animation timeline per path — three chained\n          // tweens each in morphSVG) is replaced by a single GPU-composited\n          // opacity fade of the whole series. Thousands of candlesticks/bars\n          // otherwise jank the main thread on initial render and on every zoom.\n          // The fade reuses the existing delayedElements reveal so the result\n          // still animates in, just at O(1) cost instead of O(n). Set to 0 to\n          // always animate per-element regardless of dataset size.\n          largeDatasetThreshold: 1e3\n        },\n        background: \"\",\n        locales: [en],\n        defaultLocale: \"en\",\n        dropShadow: {\n          enabled: false,\n          enabledOnSeries: void 0,\n          top: 2,\n          left: 2,\n          blur: 4,\n          color: \"#000\",\n          opacity: 0.7\n        },\n        events: {\n          animationEnd: void 0,\n          beforeMount: void 0,\n          mounted: void 0,\n          updated: void 0,\n          click: void 0,\n          mouseMove: void 0,\n          mouseLeave: void 0,\n          xAxisLabelClick: void 0,\n          legendClick: void 0,\n          markerClick: void 0,\n          selection: void 0,\n          dataPointSelection: void 0,\n          dataPointMouseEnter: void 0,\n          dataPointMouseLeave: void 0,\n          beforeZoom: void 0,\n          beforeResetZoom: void 0,\n          zoomed: void 0,\n          scrolled: void 0,\n          brushScrolled: void 0,\n          keyDown: void 0,\n          keyUp: void 0\n        },\n        foreColor: \"#373d3f\",\n        fontFamily: \"Helvetica, Arial, sans-serif\",\n        height: \"auto\",\n        parentHeightOffset: 15,\n        redrawOnParentResize: true,\n        redrawOnWindowResize: true,\n        id: void 0,\n        group: void 0,\n        nonce: void 0,\n        offsetX: 0,\n        offsetY: 0,\n        injectStyleSheet: true,\n        selection: {\n          enabled: false,\n          type: \"x\",\n          // selectedPoints: undefined, // default datapoints that should be selected automatically\n          fill: {\n            color: \"#24292e\",\n            opacity: 0.1\n          },\n          stroke: {\n            width: 1,\n            color: \"#24292e\",\n            opacity: 0.4,\n            dashArray: 3\n          },\n          xaxis: {\n            min: void 0,\n            max: void 0\n          },\n          yaxis: {\n            min: void 0,\n            max: void 0\n          }\n        },\n        sparkline: {\n          enabled: false\n        },\n        brush: {\n          enabled: false,\n          autoScaleYaxis: true,\n          target: void 0,\n          targets: void 0\n        },\n        stacked: false,\n        stackOnlyBar: true,\n        // mixed chart with stacked bars and line series - incorrect line draw #907\n        stackType: \"normal\",\n        toolbar: {\n          show: true,\n          offsetX: 0,\n          offsetY: 0,\n          tools: {\n            download: true,\n            selection: true,\n            zoom: true,\n            zoomin: true,\n            zoomout: true,\n            pan: true,\n            reset: true,\n            customIcons: []\n          },\n          export: {\n            csv: {\n              filename: void 0,\n              columnDelimiter: \",\",\n              headerCategory: \"category\",\n              headerValue: \"value\",\n              categoryFormatter: void 0,\n              valueFormatter: void 0\n            },\n            png: {\n              filename: void 0\n            },\n            svg: {\n              filename: void 0\n            },\n            scale: void 0,\n            width: void 0\n          },\n          autoSelected: \"zoom\"\n          // accepts -> zoom, pan, selection\n        },\n        type: \"line\",\n        width: \"100%\",\n        zoom: {\n          enabled: true,\n          type: \"x\",\n          autoScaleYaxis: false,\n          allowMouseWheelZoom: true,\n          zoomedArea: {\n            fill: {\n              color: \"#90CAF9\",\n              opacity: 0.4\n            },\n            stroke: {\n              color: \"#0D47A1\",\n              opacity: 0.4,\n              width: 1\n            }\n          }\n        },\n        accessibility: {\n          enabled: true,\n          description: void 0,\n          announcements: {\n            enabled: true\n          },\n          keyboard: {\n            enabled: true,\n            navigation: {\n              enabled: true,\n              wrapAround: false\n            }\n          }\n        },\n        dataReducer: {\n          enabled: false,\n          algorithm: \"lttb\",\n          targetPoints: 250,\n          threshold: 500\n        }\n      },\n      parsing: {\n        x: void 0,\n        y: void 0\n      },\n      plotOptions: {\n        line: {\n          isSlopeChart: false,\n          colors: {\n            threshold: 0,\n            colorAboveThreshold: void 0,\n            colorBelowThreshold: void 0\n          }\n        },\n        area: {\n          fillTo: \"origin\"\n        },\n        bar: {\n          horizontal: false,\n          columnWidth: \"70%\",\n          // should be in percent 0 - 100\n          barHeight: \"70%\",\n          // should be in percent 0 - 100\n          distributed: false,\n          borderRadius: 0,\n          borderRadiusApplication: \"around\",\n          // [around, end]\n          borderRadiusWhenStacked: \"last\",\n          // [all, last]\n          rangeBarOverlap: true,\n          rangeBarGroupRows: false,\n          hideZeroBarsWhenGrouped: false,\n          isDumbbell: false,\n          dumbbellColors: void 0,\n          isFunnel: false,\n          isFunnel3d: true,\n          colors: {\n            ranges: [],\n            backgroundBarColors: [],\n            backgroundBarOpacity: 1,\n            backgroundBarRadius: 0\n          },\n          dataLabels: {\n            position: \"top\",\n            // top, center, bottom\n            maxItems: 100,\n            hideOverflowingLabels: true,\n            orientation: \"horizontal\",\n            total: {\n              enabled: false,\n              formatter: void 0,\n              offsetX: 0,\n              offsetY: 0,\n              style: {\n                color: \"#373d3f\",\n                fontSize: \"12px\",\n                fontFamily: void 0,\n                fontWeight: 600\n              }\n            }\n          }\n        },\n        bubble: {\n          zScaling: true,\n          minBubbleRadius: void 0,\n          maxBubbleRadius: void 0\n        },\n        scatter: {\n          // Spread overlapping points apart (\"jitter\"). Two uses, one engine:\n          //  - Strip plot: supply data as { x: 'Category', y: [v1, v2, ...] }.\n          //    Each category becomes a band and the values are scattered\n          //    horizontally within it. Marker styling comes from the standard\n          //    `markers` / `colors` config.\n          //  - Overplotting: ordinary { x, y } points get a small random offset\n          //    so dense clusters fan out. The underlying data (and tooltip\n          //    values) stay exact — only the drawn position moves.\n          // Offsets are in axis units (x: 1 = one category step) and are\n          // deterministic (stable across re-renders, SSR-safe).\n          jitter: {\n            enabled: false,\n            x: 0,\n            // max ± horizontal offset, in x-axis units\n            y: 0,\n            // max ± vertical offset, in y-axis units\n            distributed: false,\n            // single series: colour each band differently\n            maxPoints: 5e3\n            // per band; excess values are stride-thinned\n          }\n        },\n        candlestick: {\n          colors: {\n            upward: \"#00B746\",\n            downward: \"#EF403C\"\n          },\n          wick: {\n            useFillColor: true\n          }\n        },\n        boxPlot: {\n          colors: {\n            upper: \"#00E396\",\n            lower: \"#008FFB\"\n          },\n          // Optional individual observations (\"jitter\") overlaid on each box.\n          // Inert unless a data point supplies a `points: number[]` array; off\n          // by default so existing boxPlot charts are unchanged.\n          points: {\n            show: false,\n            shape: \"circle\",\n            // 'circle' | 'square'\n            size: 2.5,\n            // radius (px)\n            jitter: 0.5,\n            // 0..1 fraction of the box half-width to scatter within\n            maxPoints: 3e3,\n            // cap per box; excess is stride-thinned\n            opacity: 0.9,\n            // 'series-dark' (default) → a darker shade of the series colour,\n            // 'series' → the series colour, or any literal colour string.\n            fillColor: \"series-dark\",\n            strokeColor: \"#fff\",\n            strokeWidth: 1\n            // Optional `colorScale` (undeclared so a user object merges cleanly)\n            // colours each dot by its value: { colors, min, max, steps }\n          }\n        },\n        violin: {\n          // Multiply the density-derived half-width. 1 = density's own maxWeight\n          // maps to half the category slot.\n          bandwidthScale: 1,\n          // 'individual' → every violin uses the full slot width (scaled to its\n          // own peak). 'group' → all violins share one scale (the densest in the\n          // series), so widths stay proportional to density across categories.\n          normalize: \"individual\",\n          // Individual observations (\"jitter\") overlaid on the violin shape.\n          points: {\n            show: true,\n            shape: \"circle\",\n            // 'circle' | 'square'\n            size: 2.5,\n            // radius (px)\n            jitter: 0.5,\n            // 0..1 fraction of the half-width to scatter within\n            constrainToViolin: true,\n            // clamp jitter to the density width at each value\n            maxPoints: 3e3,\n            // cap per violin; excess is stride-thinned\n            opacity: 0.9,\n            // Default: a darker shade of each violin's own colour, with a white\n            // outline. fillColor accepts 'series-dark' (default), 'series' (the\n            // violin's colour as-is), or any literal colour string.\n            fillColor: \"series-dark\",\n            strokeColor: \"#fff\",\n            strokeWidth: 1\n            // Optional `colorScale` (left undeclared so a user object merges\n            // cleanly) colours each dot by its value along a ramp:\n            //   { colors: ['#0d0887', … '#f0f921'], min, max, steps }\n          }\n        },\n        heatmap: {\n          radius: 2,\n          enableShades: true,\n          shadeIntensity: 0.5,\n          reverseNegativeShade: false,\n          distributed: false,\n          useFillColorAsStroke: false,\n          colorScale: {\n            inverse: false,\n            ranges: [],\n            min: void 0,\n            max: void 0,\n            // Replaces the default categorical legend with a continuous\n            // gradient stripe + a hover indicator arrow. Honors\n            // `chart.legend.position` (top / right / bottom / left).\n            gradientLegend: {\n              enabled: false,\n              // Strip length along the legend's long axis. Accepts a number\n              // (pixels) or a percentage string. For top/bottom placement the\n              // percentage is resolved against the chart's SVG width; for\n              // left/right placement, against the SVG height.\n              width: \"70%\",\n              height: \"70%\",\n              thickness: 12,\n              // Alignment of the strip within the legend area:\n              //  - top/bottom: 'start' = left, 'center', 'end' = right\n              //  - left/right: 'start' = top,  'center', 'end' = bottom\n              align: \"center\",\n              // Number of gradient stops sampled from the shade function when\n              // no explicit `ranges` are provided.\n              stops: 16,\n              // Show min/max labels at the ends of the strip.\n              showLabels: true,\n              // Show a value tooltip next to the arrow when hovering a cell.\n              showHoverValue: true,\n              labelStyle: {\n                fontSize: \"11px\",\n                fontFamily: void 0,\n                colors: void 0\n              },\n              arrow: {\n                size: 8,\n                color: void 0\n                // falls back to chart.foreColor\n              },\n              formatter: void 0\n              // (val) => string, for min/max + hover value\n            }\n          }\n        },\n        funnel: {\n          // 'rectangle' preserves the existing centered-rectangle funnel\n          // geometry. 'trapezoid' produces continuous sloped sides between\n          // consecutive stages (each stage's bottom width matches the next\n          // stage's top width).\n          shape: \"rectangle\",\n          // For shape: 'trapezoid' only — what to do with the last stage's\n          // bottom edge: 'flat' (parallel sides) or 'taper' (taper to a point).\n          lastShape: \"flat\"\n        },\n        treemap: {\n          enableShades: true,\n          shadeIntensity: 0.5,\n          distributed: false,\n          reverseNegativeShade: false,\n          useFillColorAsStroke: false,\n          borderRadius: 4,\n          dataLabels: {\n            format: \"scale\"\n            // scale | truncate\n          },\n          colorScale: {\n            inverse: false,\n            ranges: [],\n            min: void 0,\n            max: void 0\n          },\n          seriesTitle: {\n            show: true,\n            offsetY: 1,\n            offsetX: 1,\n            borderColor: \"#000\",\n            borderWidth: 1,\n            borderRadius: 2,\n            style: {\n              background: \"rgba(0, 0, 0, 0.6)\",\n              color: \"#fff\",\n              fontSize: \"12px\",\n              fontFamily: void 0,\n              fontWeight: 400,\n              cssClass: \"\",\n              padding: {\n                left: 6,\n                right: 6,\n                top: 2,\n                bottom: 2\n              }\n            }\n          }\n        },\n        radialBar: {\n          inverseOrder: false,\n          startAngle: 0,\n          endAngle: 360,\n          offsetX: 0,\n          offsetY: 0,\n          // Gauge sub-shape. 'arc' (default) renders the existing filled\n          // value-arc gauge; 'needle' replaces the value-arc with a rotating\n          // pointer/needle. Bands and ticks are independent and work for both\n          // shapes.\n          shape: \"arc\",\n          // Value-to-angle mapping. Defaults to the existing 0..100 range\n          // used by radialBar. Override for gauges that need a custom domain\n          // (e.g. min: 0, max: 240 for a speedometer).\n          min: 0,\n          max: 100,\n          // Threshold bands rendered as colored arc segments along the gauge\n          // arc (e.g. [{from:0,to:30,color:'#FF4560'}, ...]). Bands draw\n          // behind the value-arc and tick marks. Set to [] (default) to\n          // disable.\n          bands: [],\n          bandsStyle: {\n            // % of arc radius. Slightly less than the value-arc stroke so\n            // the value-arc reads on top by default.\n            strokeWidth: \"40%\",\n            // px gap between consecutive bands.\n            gap: 0,\n            // Hide the track when bands cover the full range; the bands\n            // themselves act as the visual backdrop.\n            hideTrackWhenPresent: true\n          },\n          // Tick marks rendered along (outside) the gauge arc.\n          ticks: {\n            show: false,\n            major: {\n              count: 11,\n              length: 10,\n              width: 2,\n              color: \"#666\",\n              // 'inside' draws ticks from `radius - length` to `radius`;\n              // 'outside' draws from `radius` to `radius + length`.\n              placement: \"outside\"\n            },\n            minor: {\n              count: 4,\n              // minor ticks BETWEEN each pair of major ticks\n              length: 5,\n              width: 1,\n              color: \"#999\",\n              placement: \"outside\"\n            },\n            labels: {\n              show: false,\n              offset: 6,\n              fontSize: \"11px\",\n              fontFamily: void 0,\n              fontWeight: 400,\n              color: \"#666\",\n              /** @param {number} v */\n              formatter(v) {\n                return String(v);\n              }\n            }\n          },\n          // Needle/dial configuration. Only applies when `shape: 'needle'`.\n          needle: {\n            color: \"#333\",\n            // Needle length as a % of the gauge radius (string like '85%')\n            // or as an absolute px number.\n            length: \"85%\",\n            // px width of the needle line at the base.\n            baseWidth: 4,\n            // px width of the needle tip (tapered if smaller than baseWidth).\n            tipWidth: 1,\n            // px offset from the geometric arc center on Y. Positive values\n            // push the needle base down (toward the chord midpoint of a\n            // ∩-shape gauge); negative pushes up. The needle rotates around\n            // this shifted point.\n            offsetY: 0,\n            // When true, also render the filled value-arc alongside the\n            // needle. Default false preserves the previous needle-only\n            // behavior. Useful for gauges that want a progress ring plus a\n            // pointer indicator.\n            showValueArc: false,\n            animation: {\n              enabled: true,\n              duration: 800,\n              easing: \"ease-out\"\n            }\n          },\n          hollow: {\n            margin: 5,\n            size: \"50%\",\n            background: \"transparent\",\n            image: void 0,\n            imageWidth: 150,\n            imageHeight: 150,\n            imageOffsetX: 0,\n            imageOffsetY: 0,\n            imageClipped: true,\n            position: \"front\",\n            // Optional stroke around the hollow ring. Combined with\n            // `strokeDasharray` this produces a dashed indicator circle\n            // around the value text — useful for gauge designs where the\n            // value sits inside its own boundary.\n            stroke: void 0,\n            strokeWidth: 1,\n            strokeDasharray: void 0,\n            dropShadow: {\n              enabled: false,\n              top: 0,\n              left: 0,\n              blur: 3,\n              color: \"#000\",\n              opacity: 0.5\n            }\n          },\n          track: {\n            show: true,\n            startAngle: void 0,\n            endAngle: void 0,\n            background: \"#f2f2f2\",\n            strokeWidth: \"97%\",\n            opacity: 1,\n            margin: 5,\n            // margin is in pixels\n            dropShadow: {\n              enabled: false,\n              top: 0,\n              left: 0,\n              blur: 3,\n              color: \"#000\",\n              opacity: 0.5\n            }\n          },\n          dataLabels: {\n            show: true,\n            name: {\n              show: true,\n              fontSize: \"16px\",\n              fontFamily: void 0,\n              fontWeight: 600,\n              color: void 0,\n              offsetY: 0,\n              /**\n               * @param {any} val\n               */\n              formatter(val) {\n                return val;\n              }\n            },\n            value: {\n              show: true,\n              fontSize: \"14px\",\n              fontFamily: void 0,\n              fontWeight: 400,\n              color: void 0,\n              offsetY: 16,\n              /**\n               * @param {any} val\n               */\n              formatter(val) {\n                return val + \"%\";\n              }\n            },\n            total: {\n              show: false,\n              label: \"Total\",\n              fontSize: \"16px\",\n              fontWeight: 600,\n              fontFamily: void 0,\n              color: void 0,\n              /**\n               * @param {import('../../types/internal').ChartStateW} w\n               */\n              formatter(w) {\n                return (\n                  /**\n                   * @param {number} a\n                   * @param {number} b\n                   */\n                  w.globals.seriesTotals.reduce((a, b) => a + b, 0) / w.seriesData.series.length + \"%\"\n                );\n              }\n            }\n          },\n          barLabels: {\n            enabled: false,\n            offsetX: 0,\n            offsetY: 0,\n            useSeriesColors: true,\n            fontFamily: void 0,\n            fontWeight: 600,\n            fontSize: \"16px\",\n            /**\n             * @param {any} val\n             */\n            formatter(val) {\n              return val;\n            },\n            onClick: void 0\n          }\n        },\n        pie: {\n          customScale: 1,\n          offsetX: 0,\n          offsetY: 0,\n          startAngle: 0,\n          endAngle: 360,\n          expandOnClick: true,\n          dataLabels: {\n            // These are the percentage values which are displayed on slice\n            offset: 0,\n            // offset by which labels will move outside\n            minAngleToShowLabel: 10,\n            // External (outer) labels: render the category/series name outside\n            // the slice, joined to it by a leader (connector) line, so users\n            // don't have to map legend colors back to slices. The percentage\n            // keeps rendering inside the slice (governed by dataLabels.enabled).\n            // Pie + donut only; ignored for polarArea (radial length already\n            // encodes the value there).\n            external: {\n              show: false,\n              // master switch for the external (outer) labels\n              offsetX: 0,\n              offsetY: 0,\n              fontSize: void 0,\n              // falls back to dataLabels.style.fontSize\n              fontFamily: void 0,\n              // falls back to dataLabels.style.fontFamily\n              fontWeight: void 0,\n              // falls back to dataLabels.style.fontWeight\n              color: void 0,\n              // defaults to chart.foreColor (readable text)\n              /**\n               * Return a string (single line) or an array of strings (stacked\n               * lines, e.g. [name, percent + '%']).\n               * @param {string} name\n               * @param {{ seriesIndex: number, percent: number, value: number, w: any }} opts\n               * @returns {string | string[]}\n               */\n              formatter: void 0,\n              connector: {\n                show: true,\n                width: 1,\n                color: void 0,\n                // defaults to the slice color\n                length: 16,\n                // horizontal run after the radial elbow (px)\n                gap: 6\n                // radial gap from slice edge to the elbow point (px)\n              }\n            }\n          },\n          donut: {\n            size: \"65%\",\n            background: \"transparent\",\n            labels: {\n              // These are the inner labels appearing inside donut\n              show: false,\n              name: {\n                show: true,\n                fontSize: \"16px\",\n                fontFamily: void 0,\n                fontWeight: 600,\n                color: void 0,\n                offsetY: -10,\n                /**\n                 * @param {any} val\n                 */\n                formatter(val) {\n                  return val;\n                }\n              },\n              value: {\n                show: true,\n                fontSize: \"20px\",\n                fontFamily: void 0,\n                fontWeight: 400,\n                color: void 0,\n                offsetY: 10,\n                /**\n                 * @param {any} val\n                 */\n                formatter(val) {\n                  return val;\n                }\n              },\n              total: {\n                show: false,\n                showAlways: false,\n                label: \"Total\",\n                fontSize: \"16px\",\n                fontWeight: 400,\n                fontFamily: void 0,\n                color: void 0,\n                /**\n                 * @param {import('../../types/internal').ChartStateW} w\n                 */\n                formatter(w) {\n                  return w.globals.seriesTotals.reduce((a, b) => a + b, 0);\n                }\n              }\n            }\n          }\n        },\n        polarArea: {\n          rings: {\n            strokeWidth: 1,\n            strokeColor: \"#e8e8e8\"\n          },\n          spokes: {\n            strokeWidth: 1,\n            connectorColors: \"#e8e8e8\"\n          }\n        },\n        radar: {\n          size: void 0,\n          offsetX: 0,\n          offsetY: 0,\n          polygons: {\n            // strokeColor: '#e8e8e8', // should be deprecated in the minor version i.e 3.2\n            strokeWidth: 1,\n            strokeColors: \"#e8e8e8\",\n            connectorColors: \"#e8e8e8\",\n            fill: {\n              colors: void 0\n            }\n          }\n        }\n      },\n      colors: void 0,\n      dataLabels: {\n        enabled: true,\n        enabledOnSeries: void 0,\n        /**\n         * @param {any} val\n         */\n        formatter(val) {\n          return val !== null ? val : \"\";\n        },\n        textAnchor: \"middle\",\n        distributed: false,\n        offsetX: 0,\n        offsetY: 0,\n        style: {\n          fontSize: \"12px\",\n          fontFamily: void 0,\n          fontWeight: 600,\n          colors: void 0\n        },\n        background: {\n          enabled: true,\n          foreColor: \"#fff\",\n          backgroundColor: void 0,\n          borderRadius: 2,\n          padding: 4,\n          opacity: 0.9,\n          borderWidth: 1,\n          borderColor: \"#fff\",\n          dropShadow: {\n            enabled: false,\n            top: 1,\n            left: 1,\n            blur: 1,\n            color: \"#000\",\n            opacity: 0.8\n          }\n        },\n        dropShadow: {\n          enabled: false,\n          top: 1,\n          left: 1,\n          blur: 1,\n          color: \"#000\",\n          opacity: 0.8\n        }\n      },\n      fill: {\n        type: \"solid\",\n        colors: void 0,\n        // array of colors\n        opacity: 0.85,\n        gradient: {\n          shade: \"dark\",\n          type: \"horizontal\",\n          shadeIntensity: 0.5,\n          gradientToColors: void 0,\n          inverseColors: true,\n          opacityFrom: 1,\n          opacityTo: 1,\n          stops: [0, 50, 100],\n          colorStops: []\n        },\n        image: {\n          src: [],\n          width: void 0,\n          // optional\n          height: void 0\n          // optional\n        },\n        pattern: {\n          style: \"squares\",\n          // String | Array of Strings\n          width: 6,\n          height: 6,\n          strokeWidth: 2\n        }\n      },\n      forecastDataPoints: {\n        count: 0,\n        fillOpacity: 0.5,\n        strokeWidth: void 0,\n        dashArray: 4\n      },\n      grid: {\n        show: true,\n        borderColor: \"#e0e0e0\",\n        strokeDashArray: 0,\n        position: \"back\",\n        xaxis: {\n          lines: {\n            show: false\n          }\n        },\n        yaxis: {\n          lines: {\n            show: true\n          }\n        },\n        row: {\n          colors: void 0,\n          // takes as array which will be repeated on rows\n          opacity: 0.5\n        },\n        column: {\n          colors: void 0,\n          // takes an array which will be repeated on columns\n          opacity: 0.5\n        },\n        padding: {\n          top: 0,\n          right: 10,\n          bottom: 0,\n          left: 12\n        }\n      },\n      labels: [],\n      drilldown: {\n        // Opt-in. When false, the Drilldown feature module stays inert even if\n        // it was imported. Requires `import 'apexcharts/features/drilldown'`.\n        enabled: false,\n        // Child levels referenced by a data point's `drilldown: '<id>'` field.\n        // Each: { id, name?, data, chart?, xaxis?, yaxis?, colors?, plotOptions? }\n        series: [],\n        breadcrumb: {\n          show: true,\n          position: \"top-left\",\n          // 'top-left' | 'top-right'\n          separator: \" / \",\n          rootLabel: \"All\",\n          offsetX: 0,\n          offsetY: 0\n          // formatter: (label, { index, depth }) => label,\n        },\n        // Animation is delegated to the chart's update pipeline; `enabled`\n        // gates whether the drill transition animates at all.\n        animation: {\n          enabled: true,\n          // Anchor the drill transition at the clicked point: the child unfolds\n          // outward from it (and settles back on drill-up) instead of the chart\n          // simply re-rendering. A gentle scale layered on the SVG; opt-in.\n          zoomFromPoint: false,\n          // Base duration (ms) of the transition, used only when zoomFromPoint\n          // is true. The fade-out phase runs a little shorter than this.\n          speed: 260\n        }\n        // Optional async resolver, called when a drillable point has no inline\n        // match in `series`: ({ point, seriesIndex, dataPointIndex }) => childSeries\n        // onDrillDown: undefined,\n      },\n      legend: {\n        show: true,\n        showForSingleSeries: false,\n        showForNullSeries: true,\n        showForZeroSeries: true,\n        floating: false,\n        position: \"bottom\",\n        // whether to position legends in 1 of 4\n        // direction - top, bottom, left, right\n        horizontalAlign: \"center\",\n        // when position top/bottom, you can specify whether to align legends left, right or center\n        inverseOrder: false,\n        fontSize: \"12px\",\n        fontFamily: void 0,\n        fontWeight: 400,\n        width: void 0,\n        height: void 0,\n        formatter: void 0,\n        tooltipHoverFormatter: void 0,\n        offsetX: -20,\n        offsetY: 4,\n        customLegendItems: [],\n        clusterGroupedSeries: true,\n        clusterGroupedSeriesOrientation: \"vertical\",\n        labels: {\n          colors: void 0,\n          useSeriesColors: false\n        },\n        markers: {\n          size: 7,\n          fillColors: void 0,\n          strokeWidth: 1,\n          shape: void 0,\n          offsetX: 0,\n          offsetY: 0,\n          customHTML: void 0,\n          onClick: void 0\n        },\n        itemMargin: {\n          horizontal: 5,\n          vertical: 4\n        },\n        onItemClick: {\n          toggleDataSeries: true\n        },\n        onItemHover: {\n          highlightDataSeries: true\n        }\n      },\n      markers: {\n        discrete: [],\n        size: 0,\n        colors: void 0,\n        strokeColors: \"#fff\",\n        strokeWidth: 2,\n        strokeOpacity: 0.9,\n        strokeDashArray: 0,\n        fillOpacity: 1,\n        shape: \"circle\",\n        offsetX: 0,\n        offsetY: 0,\n        showNullDataPoints: true,\n        onClick: void 0,\n        onDblClick: void 0,\n        hover: {\n          size: void 0,\n          sizeOffset: 3\n        }\n      },\n      noData: {\n        text: void 0,\n        align: \"center\",\n        offsetX: 0,\n        offsetY: 0,\n        style: {\n          color: void 0,\n          fontSize: \"14px\",\n          fontFamily: void 0\n        }\n      },\n      responsive: [],\n      // breakpoints should follow ascending order 400, then 700, then 1000\n      series: void 0,\n      states: {\n        hover: {\n          filter: {\n            type: \"lighten\"\n          }\n        },\n        active: {\n          allowMultipleDataPointsSelection: false,\n          filter: {\n            type: \"darken\"\n          }\n        }\n      },\n      title: {\n        text: void 0,\n        align: \"left\",\n        margin: 5,\n        offsetX: 0,\n        offsetY: 0,\n        floating: false,\n        style: {\n          fontSize: \"14px\",\n          fontWeight: 900,\n          fontFamily: void 0,\n          color: void 0\n        }\n      },\n      subtitle: {\n        text: void 0,\n        align: \"left\",\n        margin: 5,\n        offsetX: 0,\n        offsetY: 30,\n        floating: false,\n        style: {\n          fontSize: \"12px\",\n          fontWeight: 400,\n          fontFamily: void 0,\n          color: void 0\n        }\n      },\n      stroke: {\n        show: true,\n        curve: \"smooth\",\n        // \"smooth\" / \"straight\" / \"monotoneCubic\" / \"stepline\" / \"linestep\"\n        lineCap: \"butt\",\n        // round, butt , square\n        width: 2,\n        colors: void 0,\n        // array of colors\n        dashArray: 0,\n        // single value or array of values\n        fill: {\n          type: \"solid\",\n          colors: void 0,\n          // array of colors\n          opacity: 0.85,\n          gradient: {\n            shade: \"dark\",\n            type: \"horizontal\",\n            shadeIntensity: 0.5,\n            gradientToColors: void 0,\n            inverseColors: true,\n            opacityFrom: 1,\n            opacityTo: 1,\n            stops: [0, 50, 100],\n            colorStops: []\n          }\n        }\n      },\n      tooltip: {\n        enabled: true,\n        enabledOnSeries: void 0,\n        shared: true,\n        hideEmptySeries: false,\n        followCursor: false,\n        // when disabled, the tooltip will show on top of the series instead of mouse position\n        intersect: false,\n        // when enabled, tooltip will only show when user directly hovers over point\n        inverseOrder: false,\n        arrow: true,\n        custom: void 0,\n        fillSeriesColor: false,\n        theme: \"light\",\n        cssClass: \"\",\n        style: {\n          fontSize: \"12px\",\n          fontFamily: void 0,\n          background: void 0\n        },\n        onDatasetHover: {\n          highlightDataSeries: false\n        },\n        x: {\n          // x value\n          show: true,\n          format: \"dd MMM\",\n          // dd/MM, dd MMM yy, dd MMM yyyy\n          formatter: void 0\n          // a custom user supplied formatter function\n        },\n        y: {\n          formatter: void 0,\n          title: {\n            /**\n             * @param {string} seriesName\n             */\n            formatter(seriesName) {\n              return seriesName ? seriesName + \": \" : \"\";\n            }\n          }\n        },\n        z: {\n          formatter: void 0,\n          title: \"Size: \"\n        },\n        marker: {\n          show: true,\n          fillColors: void 0\n        },\n        items: {\n          display: \"flex\"\n        },\n        fixed: {\n          enabled: false,\n          position: \"topRight\",\n          // topRight, topLeft, bottomRight, bottomLeft\n          offsetX: 0,\n          offsetY: 0\n        }\n      },\n      xaxis: {\n        type: \"category\",\n        categories: [],\n        convertedCatToNumeric: false,\n        // internal property which should not be altered outside\n        offsetX: 0,\n        offsetY: 0,\n        overwriteCategories: void 0,\n        labels: {\n          show: true,\n          rotate: -45,\n          rotateAlways: false,\n          hideOverlappingLabels: true,\n          trim: false,\n          minHeight: void 0,\n          maxHeight: 120,\n          showDuplicates: true,\n          style: {\n            colors: [],\n            fontSize: \"12px\",\n            fontWeight: 400,\n            fontFamily: void 0,\n            cssClass: \"\"\n          },\n          offsetX: 0,\n          offsetY: 0,\n          format: void 0,\n          formatter: void 0,\n          // custom formatter function which will override format\n          datetimeUTC: true,\n          datetimeFormatter: {\n            // Base format per interval unit. TimeScale.formatDates folds in\n            // coarser context automatically when the data range spans it\n            // (e.g. month-scale across years → 'MMM yyyy', hour-scale across\n            // days → 'dd MMM HH:mm'). Customizing a base format that already\n            // includes the higher-unit token disables the auto-expansion for\n            // that level.\n            year: \"yyyy\",\n            month: \"MMM\",\n            day: \"dd MMM\",\n            hour: \"HH:mm\",\n            minute: \"HH:mm\",\n            second: \"HH:mm:ss\"\n          }\n        },\n        group: {\n          groups: [],\n          style: {\n            colors: [],\n            fontSize: \"12px\",\n            fontWeight: 400,\n            fontFamily: void 0,\n            cssClass: \"\"\n          }\n        },\n        axisBorder: {\n          show: true,\n          color: \"#e0e0e0\",\n          width: \"100%\",\n          height: 1,\n          offsetX: 0,\n          offsetY: 0\n        },\n        axisTicks: {\n          show: true,\n          color: \"#e0e0e0\",\n          height: 6,\n          offsetX: 0,\n          offsetY: 0\n        },\n        stepSize: void 0,\n        tickAmount: void 0,\n        tickPlacement: \"on\",\n        min: void 0,\n        max: void 0,\n        range: void 0,\n        floating: false,\n        decimalsInFloat: void 0,\n        position: \"bottom\",\n        title: {\n          text: void 0,\n          offsetX: 0,\n          offsetY: 0,\n          style: {\n            color: void 0,\n            fontSize: \"12px\",\n            fontWeight: 900,\n            fontFamily: void 0,\n            cssClass: \"\"\n          }\n        },\n        crosshairs: {\n          show: true,\n          width: 1,\n          // tickWidth/barWidth or an integer\n          position: \"back\",\n          opacity: 0.9,\n          stroke: {\n            color: \"#b6b6b6\",\n            width: 1,\n            dashArray: 3\n          },\n          fill: {\n            type: \"solid\",\n            // solid, gradient\n            color: \"#B1B9C4\",\n            gradient: {\n              colorFrom: \"#D8E3F0\",\n              colorTo: \"#BED1E6\",\n              stops: [0, 100],\n              opacityFrom: 0.4,\n              opacityTo: 0.5\n            }\n          },\n          dropShadow: {\n            enabled: false,\n            left: 0,\n            top: 0,\n            blur: 1,\n            opacity: 0.8\n          }\n        },\n        tooltip: {\n          enabled: false,\n          offsetY: 0,\n          formatter: void 0,\n          style: {\n            fontSize: \"12px\",\n            fontFamily: void 0\n          }\n        }\n      },\n      yaxis: this.yAxis,\n      theme: {\n        mode: \"\",\n        palette: \"palette1\",\n        // If defined, it will overwrite globals.colors variable\n        monochrome: {\n          // monochrome allows you to select just 1 color and fill out the rest with light/dark shade (intensity can be selected)\n          enabled: false,\n          color: \"#008FFB\",\n          shadeTo: \"light\",\n          shadeIntensity: 0.65\n        },\n        accessibility: {\n          colorBlindMode: \"\"\n          // '' | 'deuteranopia' | 'protanopia' | 'tritanopia' | 'highContrast'\n        }\n      }\n    };\n  }\n}\nclass Config {\n  /**\n   * @param {Record<string, any>} opts\n   */\n  constructor(opts) {\n    this.opts = opts;\n  }\n  /** @param {{responsiveOverride: any}} opts */\n  init({ responsiveOverride }) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n    let opts = this.opts;\n    const options2 = new Options();\n    const defaults = new Defaults(opts);\n    opts = this.normalizeAliasedChartType(opts);\n    this.chartType = opts.chart.type;\n    opts = this.extendYAxis(opts);\n    opts = this.extendAnnotations(opts);\n    let config = options2.init();\n    let newDefaults = {};\n    if (opts && typeof opts === \"object\") {\n      let chartDefaults = {};\n      const chartTypes = [\n        \"line\",\n        \"area\",\n        \"bar\",\n        \"candlestick\",\n        \"boxPlot\",\n        \"violin\",\n        \"rangeBar\",\n        \"rangeArea\",\n        \"bubble\",\n        \"scatter\",\n        \"heatmap\",\n        \"treemap\",\n        \"pie\",\n        \"polarArea\",\n        \"donut\",\n        \"radar\",\n        \"radialBar\"\n      ];\n      const requestedType = opts.chart.requestedType;\n      if (requestedType === \"funnel\" || requestedType === \"pyramid\") {\n        chartDefaults = /** @type {any} */\n        defaults[requestedType]();\n      } else if (requestedType === \"gauge\") {\n        chartDefaults = defaults.gauge();\n      } else if (chartTypes.indexOf(opts.chart.type) !== -1) {\n        chartDefaults = /** @type {any} */\n        defaults[opts.chart.type]();\n      } else {\n        chartDefaults = defaults.line();\n      }\n      if ((_b = (_a = opts.plotOptions) == null ? void 0 : _a.bar) == null ? void 0 : _b.isFunnel) {\n        chartDefaults = defaults.funnel();\n      }\n      if (opts.chart.stacked && opts.chart.type === \"bar\") {\n        chartDefaults = defaults.stackedBars();\n      }\n      if ((_c = opts.chart.brush) == null ? void 0 : _c.enabled) {\n        chartDefaults = defaults.brush(chartDefaults);\n      }\n      if ((_e = (_d = opts.plotOptions) == null ? void 0 : _d.line) == null ? void 0 : _e.isSlopeChart) {\n        chartDefaults = defaults.slope();\n      }\n      if (opts.chart.stacked && opts.chart.stackType === \"100%\") {\n        opts = defaults.stacked100(opts);\n      }\n      if ((_g = (_f = opts.plotOptions) == null ? void 0 : _f.bar) == null ? void 0 : _g.isDumbbell) {\n        opts = defaults.dumbbell(opts);\n      }\n      this.checkForDarkTheme(Environment.getApex());\n      this.checkForDarkTheme(opts);\n      opts.xaxis = opts.xaxis || Environment.getApex().xaxis || {};\n      if (!responsiveOverride) {\n        opts.xaxis.convertedCatToNumeric = false;\n      }\n      opts = this.checkForCatToNumericXAxis(this.chartType, chartDefaults, opts);\n      if (((_h = opts.chart.sparkline) == null ? void 0 : _h.enabled) || ((_j = (_i = Environment.getApex().chart) == null ? void 0 : _i.sparkline) == null ? void 0 : _j.enabled)) {\n        chartDefaults = defaults.sparkline(chartDefaults);\n      }\n      newDefaults = Utils$1.extend(config, chartDefaults);\n    }\n    const mergedWithDefaultConfig = Utils$1.extend(\n      newDefaults,\n      Environment.getApex()\n    );\n    config = Utils$1.extend(mergedWithDefaultConfig, opts);\n    config = this.handleUserInputErrors(config);\n    return config;\n  }\n  /**\n   * Promoted chart-type aliases — `funnel`, `pyramid`, `gauge` — render via\n   * the existing `bar` (with `isFunnel`) and `radialBar` pathways. To keep\n   * the ~20 internal `chart.type === 'bar' | 'radialBar'` checks working\n   * unchanged, we normalize `chart.type` to the base renderer name here and\n   * preserve the user-facing name on `chart.requestedType` for the public\n   * API and for default selection.\n   *\n   * @param {Record<string, any>} opts\n   * @returns {Record<string, any>}\n   */\n  normalizeAliasedChartType(opts) {\n    if (!opts || !opts.chart) return opts;\n    const requested = opts.chart.type;\n    if (requested !== \"funnel\" && requested !== \"pyramid\" && requested !== \"gauge\") {\n      return opts;\n    }\n    opts.chart.requestedType = requested;\n    if (requested === \"funnel\" || requested === \"pyramid\") {\n      opts.plotOptions = opts.plotOptions || {};\n      opts.plotOptions.bar = opts.plotOptions.bar || {};\n      opts.plotOptions.bar.isFunnel = true;\n      opts.plotOptions.bar.horizontal = true;\n      opts.chart.type = \"bar\";\n      if (requested === \"pyramid\") {\n        opts.plotOptions.bar.isPyramid = true;\n      } else {\n        opts.plotOptions.bar.isPyramid = false;\n      }\n    } else if (requested === \"gauge\") {\n      opts.chart.type = \"radialBar\";\n    }\n    return opts;\n  }\n  /**\n   * @param {string} chartType\n   * @param {Record<string, any>} chartDefaults\n   * @param {Record<string, any>} opts\n   */\n  checkForCatToNumericXAxis(chartType, chartDefaults, opts) {\n    var _a, _b, _c, _d, _e;\n    const defaults = new Defaults(opts);\n    const isBarHorizontal = (chartType === \"bar\" || chartType === \"boxPlot\" || chartType === \"violin\") && ((_b = (_a = opts.plotOptions) == null ? void 0 : _a.bar) == null ? void 0 : _b.horizontal);\n    const unsupportedZoom = chartType === \"pie\" || chartType === \"polarArea\" || chartType === \"donut\" || chartType === \"radar\" || chartType === \"radialBar\" || chartType === \"heatmap\";\n    const notNumericXAxis = opts.xaxis.type !== \"datetime\" && opts.xaxis.type !== \"numeric\";\n    const isScatterJitter = (chartType === \"scatter\" || chartType === \"bubble\") && ((_e = (_d = (_c = opts.plotOptions) == null ? void 0 : _c.scatter) == null ? void 0 : _d.jitter) == null ? void 0 : _e.enabled);\n    const tickPlacement = opts.xaxis.tickPlacement ? opts.xaxis.tickPlacement : chartDefaults.xaxis && chartDefaults.xaxis.tickPlacement;\n    if (!isBarHorizontal && !unsupportedZoom && !isScatterJitter && notNumericXAxis && tickPlacement !== \"between\") {\n      opts = defaults.convertCatToNumeric(opts);\n    }\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   * @param {import('../../types/internal').ChartStateW} [w]\n   */\n  extendYAxis(opts, w) {\n    const options2 = new Options();\n    if (typeof opts.yaxis === \"undefined\" || !opts.yaxis || Array.isArray(opts.yaxis) && opts.yaxis.length === 0) {\n      opts.yaxis = {};\n    }\n    const globalApex = Environment.getApex();\n    if (opts.yaxis.constructor !== Array && globalApex.yaxis && globalApex.yaxis.constructor !== Array) {\n      opts.yaxis = Utils$1.extend(opts.yaxis, globalApex.yaxis);\n    }\n    if (opts.yaxis.constructor !== Array) {\n      opts.yaxis = [Utils$1.extend(options2.yAxis, opts.yaxis)];\n    } else {\n      opts.yaxis = Utils$1.extendArray(opts.yaxis, options2.yAxis);\n    }\n    let isLogY = false;\n    opts.yaxis.forEach((y) => {\n      if (y.logarithmic) {\n        isLogY = true;\n      }\n    });\n    let series = opts.series;\n    if (w && !series) {\n      series = w.config.series;\n    }\n    if (isLogY && series.length !== opts.yaxis.length && series.length) {\n      opts.yaxis = series.map((s, i) => {\n        if (!s.name) {\n          series[i].name = `series-${i + 1}`;\n        }\n        if (opts.yaxis[i]) {\n          opts.yaxis[i].seriesName = series[i].name;\n          return opts.yaxis[i];\n        } else {\n          const newYaxis = Utils$1.extend(options2.yAxis, opts.yaxis[0]);\n          newYaxis.show = false;\n          return newYaxis;\n        }\n      });\n    }\n    if (isLogY && series.length > 1 && series.length !== opts.yaxis.length) {\n      console.warn(\n        \"A multi-series logarithmic chart should have equal number of series and y-axes\"\n      );\n    }\n    return opts;\n  }\n  // annotations also accepts array, so we need to extend them manually\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendAnnotations(opts) {\n    if (typeof opts.annotations === \"undefined\") {\n      opts.annotations = {};\n      opts.annotations.yaxis = [];\n      opts.annotations.xaxis = [];\n      opts.annotations.points = [];\n    }\n    opts = this.extendYAxisAnnotations(opts);\n    opts = this.extendXAxisAnnotations(opts);\n    opts = this.extendPointAnnotations(opts);\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendYAxisAnnotations(opts) {\n    const options2 = new Options();\n    opts.annotations.yaxis = Utils$1.extendArray(\n      typeof opts.annotations.yaxis !== \"undefined\" ? opts.annotations.yaxis : [],\n      options2.yAxisAnnotation\n    );\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendXAxisAnnotations(opts) {\n    const options2 = new Options();\n    opts.annotations.xaxis = Utils$1.extendArray(\n      typeof opts.annotations.xaxis !== \"undefined\" ? opts.annotations.xaxis : [],\n      options2.xAxisAnnotation\n    );\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendPointAnnotations(opts) {\n    const options2 = new Options();\n    opts.annotations.points = Utils$1.extendArray(\n      typeof opts.annotations.points !== \"undefined\" ? opts.annotations.points : [],\n      options2.pointAnnotation\n    );\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  checkForDarkTheme(opts) {\n    if (opts.theme && opts.theme.mode === \"dark\") {\n      if (!opts.tooltip) {\n        opts.tooltip = {};\n      }\n      if (opts.tooltip.theme !== \"light\") {\n        opts.tooltip.theme = \"dark\";\n      }\n      if (!opts.chart.foreColor) {\n        opts.chart.foreColor = \"#f6f7f8\";\n      }\n      if (!opts.theme.palette) {\n        opts.theme.palette = \"palette4\";\n      }\n    }\n  }\n  /**\n   * @param {any} opts\n   */\n  handleUserInputErrors(opts) {\n    const config = opts;\n    if (config.tooltip.shared && config.tooltip.intersect) {\n      throw new Error(\n        \"tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.\"\n      );\n    }\n    if (config.chart.type === \"bar\" && config.plotOptions.bar.horizontal) {\n      if (config.yaxis.length > 1) {\n        throw new Error(\n          \"Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false\"\n        );\n      }\n      if (config.yaxis[0].reversed) {\n        config.yaxis[0].opposite = true;\n      }\n      config.xaxis.tooltip.enabled = false;\n      config.yaxis[0].tooltip.enabled = false;\n      config.chart.zoom.enabled = false;\n    }\n    if (config.chart.type === \"bar\" || config.chart.type === \"rangeBar\") {\n      if (config.tooltip.shared) {\n        if (config.xaxis.crosshairs.width === \"barWidth\" && config.series.length > 1) {\n          config.xaxis.crosshairs.width = \"tickWidth\";\n        }\n      }\n    }\n    if (config.chart.type === \"candlestick\" || config.chart.type === \"boxPlot\") {\n      if (config.yaxis[0].reversed) {\n        console.warn(\n          `Reversed y-axis in ${config.chart.type} chart is not supported.`\n        );\n        config.yaxis[0].reversed = false;\n      }\n    }\n    return config;\n  }\n}\nconst LINE_HEIGHT_RATIO = 1.618;\nconst NICE_SCALE_ALLOWED_MAG_MSD = [\n  [1, 1, 2, 5, 5, 5, 10, 10, 10, 10, 10],\n  [1, 1, 2, 5, 5, 5, 10, 10, 10, 10, 10]\n];\nconst NICE_SCALE_DEFAULT_TICKS = [\n  1,\n  2,\n  4,\n  4,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  24\n];\nclass Globals {\n  /**\n   * @param {any} gl\n   */\n  initGlobalVars(gl) {\n    gl.series = [];\n    gl.seriesCandleO = [];\n    gl.seriesCandleH = [];\n    gl.seriesCandleM = [];\n    gl.seriesCandleL = [];\n    gl.seriesCandleC = [];\n    gl.seriesRangeStart = [];\n    gl.seriesRangeEnd = [];\n    gl.seriesRange = [];\n    gl.seriesPercent = [];\n    gl.seriesGoals = [];\n    gl.seriesX = [];\n    gl.seriesZ = [];\n    gl.seriesNames = [];\n    gl.seriesTotals = [];\n    gl.seriesLog = [];\n    gl.seriesColors = [];\n    gl.stackedSeriesTotals = [];\n    gl.seriesXvalues = [];\n    gl.seriesYvalues = [];\n    gl.dataWasParsed = false;\n    gl.originalSeries = null;\n    gl.maxValsInArrayIndex = 0;\n    gl.yValueDecimal = 0;\n    gl.allSeriesHasEqualX = true;\n    gl.labels = [];\n    gl.hasXaxisGroups = false;\n    gl.groups = [];\n    gl.barGroups = [];\n    gl.lineGroups = [];\n    gl.areaGroups = [];\n    gl.hasSeriesGroups = false;\n    gl.seriesGroups = [];\n    gl.categoryLabels = [];\n    gl.timescaleLabels = [];\n    gl.noLabelsProvided = false;\n    gl.isXNumeric = false;\n    gl.skipLastTimelinelabel = false;\n    gl.skipFirstTimelinelabel = false;\n    gl.isDataXYZ = false;\n    gl.isMultiLineX = false;\n    gl.isMultipleYAxis = false;\n    gl.maxY = -Number.MAX_VALUE;\n    gl.minY = Number.MIN_VALUE;\n    gl.minYArr = [];\n    gl.maxYArr = [];\n    gl.maxX = -Number.MAX_VALUE;\n    gl.minX = Number.MAX_VALUE;\n    gl.initialMaxX = -Number.MAX_VALUE;\n    gl.initialMinX = Number.MAX_VALUE;\n    gl.maxDate = 0;\n    gl.minDate = Number.MAX_VALUE;\n    gl.minZ = Number.MAX_VALUE;\n    gl.maxZ = -Number.MAX_VALUE;\n    gl.minXDiff = Number.MAX_VALUE;\n    gl.yAxisScale = [];\n    gl.xAxisScale = null;\n    gl.xAxisTicksPositions = [];\n    gl.xRange = 0;\n    gl.yRange = [];\n    gl.zRange = 0;\n    gl.dataPoints = 0;\n    gl.xTickAmount = 0;\n    gl.multiAxisTickAmount = 0;\n    gl.disableZoomIn = false;\n    gl.disableZoomOut = false;\n    gl.yLabelsCoords = [];\n    gl.yTitleCoords = [];\n    gl.barPadForNumericAxis = 0;\n    gl.padHorizontal = 0;\n    gl.rotateXLabels = false;\n    gl.overlappingXLabels = false;\n    gl.radialSize = 0;\n    gl.barHeight = 0;\n    gl.barWidth = 0;\n    gl.animationEnded = false;\n    gl.isDestroyed = false;\n    gl.bulkRevealScheduled = false;\n    gl.resizeTimer = null;\n    gl.selectionResizeTimer = null;\n    gl.lastWheelExecution = 0;\n    gl.delayedElements = [];\n    gl.pointsArray = [];\n    gl.dataLabelsRects = [];\n    gl.lastDrawnDataLabelsIndexes = [];\n    gl.textRectsCache = /* @__PURE__ */ new Map();\n    gl.domCache = /* @__PURE__ */ new Map();\n    gl.dimensionCache = {};\n    gl.cachedSelectors = {};\n    if (!gl.seriesNS) {\n      this._attachNamespaces(gl);\n    }\n  }\n  /**\n   * Attach domain-grouped namespace sub-objects onto gl.\n   * Each sub-object is a plain object whose properties are defined as\n   * getters/setters that read/write the canonical flat properties on gl.\n   * This means there is exactly ONE storage location per value — no copies,\n   * no sync needed.\n   *\n   * Namespaces:\n   *   gl.series  — parsed series data and chart-type-specific arrays\n   *   gl.axes    — axis bounds, scales, ranges, tick state\n   *   gl.layout  — SVG/grid dimensions, translations, label sizes\n   *   gl.cache   — DOM caches, timers, observers, drawing scratch space\n   *\n   * Note: interact state lives on w.interact (not gl) — see Base.js.\n   * @param {any} gl\n   */\n  _attachNamespaces(gl) {\n    const proxy = (ns, key, nsKey = key) => {\n      Object.defineProperty(ns, nsKey, {\n        get() {\n          return gl[key];\n        },\n        set(v) {\n          gl[key] = v;\n        },\n        enumerable: true,\n        configurable: true\n      });\n    };\n    const seriesNS = {};\n    proxy(seriesNS, \"series\", \"data\");\n    for (const key of [\n      \"seriesNames\",\n      \"seriesX\",\n      \"seriesZ\",\n      \"seriesXvalues\",\n      \"seriesYvalues\",\n      \"seriesGoals\",\n      \"seriesLog\",\n      \"seriesColors\",\n      \"seriesPercent\",\n      \"seriesTotals\",\n      \"stackedSeriesTotals\",\n      \"seriesCandleO\",\n      \"seriesCandleH\",\n      \"seriesCandleM\",\n      \"seriesCandleL\",\n      \"seriesCandleC\",\n      \"seriesRangeStart\",\n      \"seriesRangeEnd\",\n      \"seriesRange\",\n      \"seriesYAxisMap\",\n      \"seriesYAxisReverseMap\",\n      \"seriesGroups\",\n      \"barGroups\",\n      \"lineGroups\",\n      \"areaGroups\",\n      \"originalSeries\",\n      \"collapsedSeries\",\n      \"collapsedSeriesIndices\",\n      \"ancillaryCollapsedSeries\",\n      \"ancillaryCollapsedSeriesIndices\",\n      \"allSeriesCollapsed\",\n      \"risingSeries\",\n      \"previousPaths\",\n      \"ignoreYAxisIndexes\",\n      \"labels\",\n      \"categoryLabels\",\n      \"timescaleLabels\",\n      \"groups\"\n    ]) {\n      proxy(seriesNS, key);\n    }\n    Object.defineProperty(gl, \"seriesNS\", {\n      value: seriesNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n    const axesNS = {};\n    for (const key of [\n      \"minX\",\n      \"maxX\",\n      \"initialMinX\",\n      \"initialMaxX\",\n      \"minY\",\n      \"maxY\",\n      \"minYArr\",\n      \"maxYArr\",\n      \"minZ\",\n      \"maxZ\",\n      \"minDate\",\n      \"maxDate\",\n      \"minXDiff\",\n      \"xRange\",\n      \"yRange\",\n      \"zRange\",\n      \"xAxisScale\",\n      \"yAxisScale\",\n      \"xAxisTicksPositions\",\n      \"xTickAmount\",\n      \"multiAxisTickAmount\",\n      \"dataPoints\",\n      \"maxValsInArrayIndex\",\n      \"isXNumeric\",\n      \"isMultipleYAxis\",\n      \"isMultiLineX\",\n      \"isDataXYZ\",\n      \"dataFormatXNumeric\",\n      \"allSeriesHasEqualX\",\n      \"hasNullValues\",\n      \"dataWasParsed\",\n      \"hasXaxisGroups\",\n      \"hasSeriesGroups\",\n      \"skipFirstTimelinelabel\",\n      \"skipLastTimelinelabel\",\n      \"yValueDecimal\",\n      \"invalidLogScale\",\n      \"noLabelsProvided\"\n    ]) {\n      proxy(axesNS, key);\n    }\n    Object.defineProperty(gl, \"axes\", {\n      value: axesNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n    const layoutNS = {};\n    for (const key of [\n      \"svgWidth\",\n      \"svgHeight\",\n      \"gridWidth\",\n      \"gridHeight\",\n      \"translateX\",\n      \"translateY\",\n      \"translateXAxisX\",\n      \"translateXAxisY\",\n      \"translateYAxisX\",\n      \"xAxisLabelsHeight\",\n      \"xAxisGroupLabelsHeight\",\n      \"xAxisLabelsWidth\",\n      \"yAxisLabelsWidth\",\n      \"yAxisWidths\",\n      \"yLabelsCoords\",\n      \"yTitleCoords\",\n      \"padHorizontal\",\n      \"barPadForNumericAxis\",\n      \"rotateXLabels\",\n      \"scaleX\",\n      \"scaleY\",\n      \"radialSize\",\n      \"defaultLabels\",\n      \"overlappingXLabels\"\n    ]) {\n      proxy(layoutNS, key);\n    }\n    Object.defineProperty(gl, \"layout\", {\n      value: layoutNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n    const cacheNS = {};\n    for (const key of [\n      \"domCache\",\n      \"dimensionCache\",\n      \"cachedSelectors\",\n      \"textRectsCache\",\n      \"pointsArray\",\n      \"dataLabelsRects\",\n      \"lastDrawnDataLabelsIndexes\",\n      \"delayedElements\",\n      \"resizeTimer\",\n      \"selectionResizeTimer\",\n      \"resizeObserver\"\n    ]) {\n      proxy(cacheNS, key);\n    }\n    Object.defineProperty(gl, \"cache\", {\n      value: cacheNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n  }\n  /**\n   * Persistent chart state — set ONCE at chart construction and intentionally NOT\n   * reset by initGlobalVars.  These values must survive updateSeries / re-render.\n   *\n   * Rule: if a value is recalculated fresh on every render it belongs in\n   * initGlobalVars instead, not here.\n   * @returns {import('../../types/internal').ChartGlobals}\n   * @param {Record<string, any>} config\n   */\n  globalVars(config) {\n    const globals = {\n      // ── Identity (set once, never changes) ───────────────────────────────────\n      chartID: null,\n      // full chart ID: \"apexcharts-<cuid>\"\n      cuid: null,\n      // random suffix only\n      // ── Event registry (accumulates listeners, never reset) ───────────────────\n      events: {\n        beforeMount: [],\n        mounted: [],\n        updated: [],\n        clicked: [],\n        selection: [],\n        dataPointSelection: [],\n        zoomed: [],\n        scrolled: []\n      },\n      // ── Theme colors (set by Theme module after config merge) ─────────────────\n      colors: [],\n      fill: { colors: [] },\n      stroke: { colors: [] },\n      dataLabels: { style: { colors: [] } },\n      radarPolygons: { fill: { colors: [] } },\n      markers: {\n        colors: [],\n        size: config.markers.size,\n        largestSize: 0\n      },\n      // ── Device / environment detected once at startup ─────────────────────────\n      // Note: isTouchDevice lives on w.interact — see Base.js. Shim installed there.\n      LINE_HEIGHT_RATIO,\n      // ── Chart-type flags (derived from config, set during Core.mount) ─────────\n      axisCharts: true,\n      // false for pie/radial/treemap etc.\n      isSlopeChart: config.plotOptions.line.isSlopeChart,\n      comboCharts: false,\n      // true when mixing line + column series\n      // ── Config snapshots (backups for zoom-reset / updateOptions) ────────────\n      initialConfig: null,\n      // deep clone of the original user config\n      initialSeries: [],\n      lastXAxis: [],\n      lastYAxis: [],\n      // ── User interaction state (must survive re-renders) ──────────────────────\n      // Note: zoomEnabled, panEnabled, selectionEnabled, zoomed, selection,\n      //       visibleXRange, selectedDataPoints, mousedown, clientX, clientY,\n      //       lastClientPosition, lastWheelExecution, capturedSeriesIndex,\n      //       capturedDataPointIndex, disableZoomIn, disableZoomOut, isTouchDevice\n      //       live on w.interact — see Base.js. Backward-compat shims installed there.\n      // Series collapse state (user-driven, must persist across re-renders)\n      allSeriesCollapsed: false,\n      collapsedSeries: [],\n      collapsedSeriesIndices: [],\n      ancillaryCollapsedSeries: [],\n      ancillaryCollapsedSeriesIndices: [],\n      risingSeries: [],\n      // series being re-shown after collapse\n      ignoreYAxisIndexes: [],\n      // y-axis indices excluded during series collapse\n      // ── Lifecycle / update flags ──────────────────────────────────────────────\n      isDirty: false,\n      // true when user called an update method manually\n      isExecCalled: false,\n      // true when update came via exec()\n      dataChanged: false,\n      // true when series data was changed dynamically\n      resized: false,\n      // true after a container resize\n      // ── Data format flags (derived from config/series, stable between renders) ─\n      // Note: dataFormatXNumeric lives on w.axisFlags — see Base.js. Shim installed there.\n      invalidLogScale: false,\n      // true when log scale requested but data is invalid\n      hasNullValues: false,\n      // true when any series contains null values\n      // Persistent data tracking\n      columnSeries: null,\n      // tracks which series are rendered as bars/columns\n      yaxis: null,\n      // resolved yaxis config array\n      total: 0,\n      // running total (used by pie/radial)\n      // ── Animation control ─────────────────────────────────────────────────────\n      shouldAnimate: true,\n      previousPaths: [],\n      // paths from previous render — source for enter animation\n      // ── SVG viewport (set by Dimensions, but persistent as layout anchor) ─────\n      svgWidth: 0,\n      svgHeight: 0,\n      // Note: gridWidth, gridHeight, translateX, translateY, translateXAxisX,\n      // translateXAxisY, xAxisLabelsHeight, xAxisGroupLabelsHeight, xAxisLabelsWidth,\n      // rotateXLabels, xAxisHeight, yLabelsCoords, yTitleCoords live on w.layout —\n      // see Base.js. Backward-compat shims installed there.\n      defaultLabels: false,\n      // Note: formatter properties (xLabelFormatter, yLabelFormatters, etc.) live on\n      // w.formatters — see Base.js. Backward-compat shims installed there.\n      yAxisLabelsWidth: 0,\n      scaleX: 1,\n      scaleY: 1,\n      translateYAxisX: [],\n      yAxisWidths: [],\n      // ── Instances (created once, replaced only on full re-init) ──────────────\n      tooltip: null,\n      resizeObserver: null,\n      // ── Locale (loaded once; changes only via setLocale()) ───────────────────\n      locale: {},\n      // ── Method queue (deferred calls during async operations) ────────────────\n      memory: {\n        methodsToExec: []\n      },\n      // ── Scale configuration constants — imported from utils/Constants.js ──────\n      niceScaleAllowedMagMsd: NICE_SCALE_ALLOWED_MAG_MSD,\n      niceScaleDefaultTicks: NICE_SCALE_DEFAULT_TICKS,\n      // ── Multi-axis series mapping ─────────────────────────────────────────────\n      seriesYAxisMap: [],\n      // yAxis index → series indices[]\n      seriesYAxisReverseMap: [],\n      // series index → yAxis index\n      noData: false\n      // true when there is nothing to render\n    };\n    return (\n      /** @type {import('../../types/internal').ChartGlobals} */\n      /** @type {unknown} */\n      globals\n    );\n  }\n  /**\n   * @param {Record<string, any>} config\n   */\n  init(config) {\n    const globals = this.globalVars(config);\n    this.initGlobalVars(globals);\n    globals.initialConfig = Utils$1.extend({}, config);\n    globals.initialSeries = Utils$1.clone(config.series);\n    globals.lastXAxis = Utils$1.clone(\n      /** @type {NonNullable<typeof globals.initialConfig>} */\n      globals.initialConfig.xaxis\n    );\n    globals.lastYAxis = Utils$1.clone(\n      /** @type {NonNullable<typeof globals.initialConfig>} */\n      globals.initialConfig.yaxis\n    );\n    return globals;\n  }\n}\nclass Base {\n  /**\n   * @param {object} opts\n   */\n  constructor(opts) {\n    this.opts = opts;\n  }\n  /**\n   * Build and return the full chart state object `w`.\n   * @returns {import('../types/internal').ChartStateW}\n   */\n  init() {\n    const config = new Config(this.opts).init({ responsiveOverride: false });\n    const globals = new Globals().init(config);\n    const w = {\n      config,\n      globals,\n      dom: {},\n      // DOM node cache — lives here, not inside globals\n      interact: {\n        // Tool mode (derived from toolbar config at construction, updated by Toolbar)\n        zoomEnabled: config.chart.toolbar.autoSelected === \"zoom\" && config.chart.toolbar.tools.zoom && config.chart.zoom.enabled,\n        panEnabled: config.chart.toolbar.autoSelected === \"pan\" && config.chart.toolbar.tools.pan,\n        selectionEnabled: config.chart.toolbar.autoSelected === \"selection\" && config.chart.toolbar.tools.selection,\n        // Zoom / pan state (user-driven, must persist across re-renders)\n        zoomed: false,\n        selection: void 0,\n        visibleXRange: void 0,\n        selectedDataPoints: [],\n        // Mouse / pointer state\n        mousedown: false,\n        clientX: null,\n        clientY: null,\n        lastClientPosition: {},\n        lastWheelExecution: 0,\n        // Tooltip capture state\n        capturedSeriesIndex: -1,\n        capturedDataPointIndex: -1,\n        // Timescale zoom bounds (reset per render by TimeScale)\n        disableZoomIn: false,\n        disableZoomOut: false,\n        // Device detection (set once at construction)\n        isTouchDevice: Environment.isBrowser() ? \"ontouchstart\" in window || navigator.maxTouchPoints > 0 : false\n      },\n      formatters: {\n        // Populated by Formatters.setLabelFormatters() each render\n        xLabelFormatter: void 0,\n        yLabelFormatters: [],\n        xaxisTooltipFormatter: void 0,\n        ttKeyFormatter: void 0,\n        ttVal: void 0,\n        ttZFormatter: void 0,\n        legendFormatter: void 0\n      },\n      // Candlestick / boxplot OHLC arrays — written by Data.handleCandleStickBoxData()\n      // each render; empty for all other chart types.\n      candleData: {\n        seriesCandleO: [],\n        seriesCandleH: [],\n        seriesCandleM: [],\n        seriesCandleL: [],\n        seriesCandleC: [],\n        // Optional raw observations per boxPlot data point ([i][j] = number[]),\n        // rendered as jitter dots. Empty unless boxPlot points are supplied.\n        seriesBoxPoints: []\n      },\n      // Range chart arrays — written by Data.handleRangeData() each render;\n      // empty for all other chart types.\n      rangeData: {\n        seriesRangeStart: [],\n        seriesRangeEnd: [],\n        seriesRange: []\n      },\n      // Violin distribution arrays — written by Data.handleViolinData() each\n      // render; empty for all other chart types.\n      //   seriesViolinDensity[i][j] = { values:number[], weights:number[], maxWeight:number }\n      //   seriesViolinPoints[i][j]  = number[] (raw observations, value-axis units)\n      //   seriesViolinMin/Max[i][j] = number (extent of density + points — drives Range.js)\n      violinData: {\n        seriesViolinDensity: [],\n        seriesViolinPoints: [],\n        seriesViolinMin: [],\n        seriesViolinMax: []\n      },\n      // Label / category data — written by Data.parseData() and TimeScale each render.\n      labelData: {\n        labels: [],\n        categoryLabels: [],\n        timescaleLabels: [],\n        // written by TimeScale.calculateTimeScaleMinMax()\n        hasXaxisGroups: false,\n        groups: [],\n        seriesGroups: []\n      },\n      // Axis / parsing behaviour flags — written by Data.parseData() each render.\n      axisFlags: {\n        isXNumeric: false,\n        dataFormatXNumeric: false,\n        isDataXYZ: false,\n        isRangeData: false,\n        isRangeBar: false,\n        isMultiLineX: false,\n        noLabelsProvided: false,\n        dataWasParsed: false\n      },\n      // Parsed series data — written by Data.parseData() each render.\n      // Note: initialSeries and originalSeries are intentionally excluded —\n      // they are persistent (survive re-renders) and remain on w.globals.\n      seriesData: {\n        series: [],\n        // main y-values array\n        seriesNames: [],\n        seriesX: [],\n        seriesZ: [],\n        seriesColors: [],\n        seriesGoals: [],\n        stackedSeriesTotals: [],\n        stackedSeriesTotalsByGroups: []\n      },\n      // Grid / axis layout computed by Dimensions.plotCoords() each render.\n      // gridWidth/gridHeight/translateX/translateY are also used as starting\n      // points by Dimensions on the next render (accumulated values), so the\n      // shim must be bidirectional — reads and writes both route correctly.\n      layout: {\n        gridHeight: 0,\n        gridWidth: 0,\n        translateX: 0,\n        translateY: 0,\n        translateXAxisX: 0,\n        translateXAxisY: 0,\n        rotateXLabels: false,\n        xAxisHeight: 0,\n        xAxisLabelsHeight: 0,\n        xAxisGroupLabelsHeight: 0,\n        xAxisLabelsWidth: 0,\n        yLabelsCoords: [],\n        yTitleCoords: []\n      }\n    };\n    Object.defineProperty(globals, \"dom\", {\n      get() {\n        return w.dom;\n      },\n      set(v) {\n        w.dom = v;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    for (const key of [\n      \"xLabelFormatter\",\n      \"yLabelFormatters\",\n      \"xaxisTooltipFormatter\",\n      \"ttKeyFormatter\",\n      \"ttVal\",\n      \"ttZFormatter\",\n      \"legendFormatter\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.formatters[key]\n          );\n        },\n        set(v) {\n          w.formatters[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"zoomEnabled\",\n      \"panEnabled\",\n      \"selectionEnabled\",\n      \"zoomed\",\n      \"selection\",\n      \"visibleXRange\",\n      \"selectedDataPoints\",\n      \"mousedown\",\n      \"clientX\",\n      \"clientY\",\n      \"lastClientPosition\",\n      \"lastWheelExecution\",\n      \"capturedSeriesIndex\",\n      \"capturedDataPointIndex\",\n      \"disableZoomIn\",\n      \"disableZoomOut\",\n      \"isTouchDevice\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.interact[key]\n          );\n        },\n        set(v) {\n          w.interact[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"gridHeight\",\n      \"gridWidth\",\n      \"translateX\",\n      \"translateY\",\n      \"translateXAxisX\",\n      \"translateXAxisY\",\n      \"rotateXLabels\",\n      \"xAxisHeight\",\n      \"xAxisLabelsHeight\",\n      \"xAxisGroupLabelsHeight\",\n      \"xAxisLabelsWidth\",\n      \"yLabelsCoords\",\n      \"yTitleCoords\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.layout[key]\n          );\n        },\n        set(v) {\n          w.layout[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"series\",\n      \"seriesNames\",\n      \"seriesX\",\n      \"seriesZ\",\n      \"seriesColors\",\n      \"seriesGoals\",\n      \"stackedSeriesTotals\",\n      \"stackedSeriesTotalsByGroups\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.seriesData[key]\n          );\n        },\n        set(v) {\n          w.seriesData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"isXNumeric\",\n      \"dataFormatXNumeric\",\n      \"isDataXYZ\",\n      \"isRangeData\",\n      \"isRangeBar\",\n      \"isMultiLineX\",\n      \"noLabelsProvided\",\n      \"dataWasParsed\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.axisFlags[key]\n          );\n        },\n        set(v) {\n          w.axisFlags[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"labels\",\n      \"categoryLabels\",\n      \"timescaleLabels\",\n      \"hasXaxisGroups\",\n      \"groups\",\n      \"seriesGroups\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.labelData[key]\n          );\n        },\n        set(v) {\n          w.labelData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\"seriesRangeStart\", \"seriesRangeEnd\", \"seriesRange\"]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.rangeData[key]\n          );\n        },\n        set(v) {\n          w.rangeData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"seriesCandleO\",\n      \"seriesCandleH\",\n      \"seriesCandleM\",\n      \"seriesCandleL\",\n      \"seriesCandleC\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.candleData[key]\n          );\n        },\n        set(v) {\n          w.candleData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"seriesViolinDensity\",\n      \"seriesViolinPoints\",\n      \"seriesViolinMin\",\n      \"seriesViolinMax\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.violinData[key]\n          );\n        },\n        set(v) {\n          w.violinData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    return (\n      /** @type {import('../types/internal').ChartStateW} */\n      /** @type {unknown} */\n      w\n    );\n  }\n}\nclass CoreUtils {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  /**\n   * @param {any[]} series\n   * @param {string} chartType\n   */\n  static checkComboSeries(series, chartType) {\n    let comboCharts = false;\n    let comboBarCount = 0;\n    let comboCount = 0;\n    if (chartType === void 0) {\n      chartType = \"line\";\n    }\n    if (series.length && typeof series[0].type !== \"undefined\") {\n      series.forEach((s) => {\n        if (s.type === \"bar\" || s.type === \"column\" || s.type === \"candlestick\" || s.type === \"boxPlot\" || s.type === \"violin\") {\n          comboBarCount++;\n        }\n        if (typeof s.type !== \"undefined\" && s.type !== chartType) {\n          comboCount++;\n        }\n      });\n    }\n    if (comboCount > 0) {\n      comboCharts = true;\n    }\n    return {\n      comboBarCount,\n      comboCharts\n    };\n  }\n  /**\n   * @memberof CoreUtils\n   * returns the sum of all individual values in a multiple stacked series\n   * Eg. w.seriesData.series = [[32,33,43,12], [2,3,5,1]]\n   *  @return [34,36,48,13]\n   * @param {number[]} excludedSeriesIndices\n   **/\n  getStackedSeriesTotals(excludedSeriesIndices = []) {\n    const w = this.w;\n    const total = [];\n    if (w.seriesData.series.length === 0) return total;\n    for (let i = 0; i < w.seriesData.series[w.globals.maxValsInArrayIndex].length; i++) {\n      let t = 0;\n      for (let j = 0; j < w.seriesData.series.length; j++) {\n        if (typeof w.seriesData.series[j][i] !== \"undefined\" && excludedSeriesIndices.indexOf(j) === -1) {\n          t += w.seriesData.series[j][i];\n        }\n      }\n      total.push(t);\n    }\n    return total;\n  }\n  // get total of the all values inside all series\n  /**\n   * @param {number | null} [index]\n   */\n  getSeriesTotalByIndex(index = null) {\n    if (index === null) {\n      return (\n        /** @type {any[]} */\n        this.w.config.series.reduce(\n          (acc, cur) => acc + cur,\n          0\n        )\n      );\n    } else {\n      const seriesAtIndex = this.w.seriesData.series[index];\n      if (!Array.isArray(seriesAtIndex)) {\n        return seriesAtIndex != null ? seriesAtIndex : 0;\n      }\n      return seriesAtIndex.reduce(\n        (acc, cur) => acc + cur,\n        0\n      );\n    }\n  }\n  /**\n   * @memberof CoreUtils\n   * returns the sum of values in a multiple stacked grouped charts\n   * Eg. w.seriesData.series = [[32,33,43,12], [2,3,5,1], [43, 23, 34, 22]]\n   * series 1 and 2 are in a group, while series 3 is in another group\n   *  @return [[34, 36, 48, 12], [43, 23, 34, 22]]\n   **/\n  getStackedSeriesTotalsByGroups() {\n    const w = this.w;\n    const total = [];\n    w.labelData.seriesGroups.forEach((sg) => {\n      const includedIndexes = [];\n      w.config.series.forEach((s, si) => {\n        if (sg.indexOf(w.seriesData.seriesNames[si]) > -1) {\n          includedIndexes.push(si);\n        }\n      });\n      const excludedIndices = w.seriesData.series.map((_, fi) => includedIndexes.indexOf(fi) === -1 ? fi : -1).filter((f) => f !== -1);\n      total.push(this.getStackedSeriesTotals(excludedIndices));\n    });\n    return total;\n  }\n  setSeriesYAxisMappings() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    let axisSeriesMap = [];\n    const seriesYAxisReverseMap = [];\n    const unassignedSeriesIndices = [];\n    const seriesNameArrayStyle = this.w.seriesData.series.length > cnf.yaxis.length || /**\n     * @param {ApexYAxis} a\n     */\n    cnf.yaxis.some((a) => Array.isArray(a.seriesName));\n    cnf.series.forEach((_s, i) => {\n      unassignedSeriesIndices.push(i);\n      seriesYAxisReverseMap.push(null);\n    });\n    cnf.yaxis.forEach(\n      (_yaxe, yi) => {\n        axisSeriesMap[yi] = [];\n      }\n    );\n    const unassignedYAxisIndices = [];\n    cnf.yaxis.forEach((yaxe, yi) => {\n      let assigned = false;\n      if (yaxe.seriesName) {\n        let seriesNames = [];\n        if (Array.isArray(yaxe.seriesName)) {\n          seriesNames = yaxe.seriesName;\n        } else {\n          seriesNames.push(yaxe.seriesName);\n        }\n        seriesNames.forEach((name2) => {\n          cnf.series.forEach((s, si) => {\n            if (\n              /** @type {any} */\n              s.name === name2\n            ) {\n              let remove = si;\n              if (yi === si || seriesNameArrayStyle) {\n                if (!seriesNameArrayStyle || unassignedSeriesIndices.indexOf(si) > -1) {\n                  axisSeriesMap[yi].push([yi, si]);\n                } else {\n                  console.warn(\n                    \"Series '\" + /** @type {any} */\n                    s.name + \"' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes.\"\n                  );\n                }\n              } else {\n                axisSeriesMap[si].push([si, yi]);\n                remove = yi;\n              }\n              assigned = true;\n              remove = unassignedSeriesIndices.indexOf(remove);\n              if (remove !== -1) {\n                unassignedSeriesIndices.splice(remove, 1);\n              }\n            }\n          });\n        });\n      }\n      if (!assigned) {\n        unassignedYAxisIndices.push(yi);\n      }\n    });\n    axisSeriesMap = axisSeriesMap.map((yaxe) => {\n      const ra = [];\n      yaxe.forEach((sa) => {\n        seriesYAxisReverseMap[sa[1]] = sa[0];\n        ra.push(sa[1]);\n      });\n      return ra;\n    });\n    let lastUnassignedYAxis = cnf.yaxis.length - 1;\n    for (let i = 0; i < unassignedYAxisIndices.length; i++) {\n      lastUnassignedYAxis = unassignedYAxisIndices[i];\n      axisSeriesMap[lastUnassignedYAxis] = [];\n      if (unassignedSeriesIndices) {\n        const si = unassignedSeriesIndices[0];\n        unassignedSeriesIndices.shift();\n        axisSeriesMap[lastUnassignedYAxis].push(si);\n        seriesYAxisReverseMap[si] = lastUnassignedYAxis;\n      } else {\n        break;\n      }\n    }\n    unassignedSeriesIndices.forEach((i) => {\n      axisSeriesMap[lastUnassignedYAxis].push(i);\n      seriesYAxisReverseMap[i] = lastUnassignedYAxis;\n    });\n    gl.seriesYAxisMap = axisSeriesMap.map((x) => x);\n    gl.seriesYAxisReverseMap = seriesYAxisReverseMap.map((x) => x);\n    gl.seriesYAxisMap.forEach((axisSeries, ai) => {\n      axisSeries.forEach((si) => {\n        if (\n          /** @type {any} */\n          cnf.series[si] && /** @type {any} */\n          cnf.series[si].group === void 0\n        ) {\n          const _series = (\n            /** @type {any} */\n            cnf.series[si]\n          );\n          _series.group = \"apexcharts-axis-\".concat(ai.toString());\n        }\n      });\n    });\n  }\n  /**\n   * @param {number | null} [index]\n   */\n  isSeriesNull(index = null) {\n    let r = [];\n    const series = (\n      /** @type {any[]} */\n      this.w.config.series\n    );\n    if (index === null) {\n      r = series.filter((d) => d !== null);\n    } else if (series[index] && Array.isArray(series[index].data)) {\n      r = series[index].data.filter((d) => d !== null);\n    } else {\n      r = series[index] !== null && series[index] !== void 0 ? [series[index]] : [];\n    }\n    return r.length === 0;\n  }\n  /**\n   * @param {number} index\n   */\n  seriesHaveSameValues(index) {\n    const seriesAtIndex = this.w.seriesData.series[index];\n    if (!Array.isArray(seriesAtIndex)) {\n      return true;\n    }\n    return seriesAtIndex.every(\n      (val, i, arr) => val === arr[0]\n    );\n  }\n  /**\n   * @param {any[]} labels\n   */\n  getCategoryLabels(labels) {\n    const w = this.w;\n    let catLabels = labels.slice();\n    if (w.config.xaxis.convertedCatToNumeric) {\n      catLabels = labels.map((i) => {\n        return w.config.xaxis.labels.formatter(i - w.globals.minX + 1);\n      });\n    }\n    return catLabels;\n  }\n  // maxValsInArrayIndex is the index of series[] which has the largest number of items\n  getLargestSeries() {\n    const w = this.w;\n    w.globals.maxValsInArrayIndex = w.seriesData.series.map((a) => a.length).indexOf(\n      Math.max.apply(\n        Math,\n        /**\n         * @param {number[]} a\n         */\n        w.seriesData.series.map((a) => a.length)\n      )\n    );\n  }\n  getLargestMarkerSize() {\n    const w = this.w;\n    let size = 0;\n    w.globals.markers.size.forEach((m) => {\n      size = Math.max(size, m);\n    });\n    if (w.config.markers.discrete && w.config.markers.discrete.length) {\n      w.config.markers.discrete.forEach((m) => {\n        size = Math.max(size, m.size);\n      });\n    }\n    if (size > 0) {\n      if (w.config.markers.hover.size > 0) {\n        size = w.config.markers.hover.size;\n      } else {\n        size += w.config.markers.hover.sizeOffset;\n      }\n    }\n    w.globals.markers.largestSize = size;\n    return size;\n  }\n  /**\n   * @memberof Core\n   * returns the sum of all values in a series\n   * Eg. w.seriesData.series = [[32,33,43,12], [2,3,5,1]]\n   *  @return [120, 11]\n   **/\n  getSeriesTotals() {\n    const w = this.w;\n    w.globals.seriesTotals = w.seriesData.series.map((ser) => {\n      let total = 0;\n      if (Array.isArray(ser)) {\n        for (let j = 0; j < ser.length; j++) {\n          total += ser[j];\n        }\n      } else {\n        total += ser;\n      }\n      return total;\n    });\n  }\n  /**\n   * @param {number} minX\n   * @param {number} maxX\n   */\n  getSeriesTotalsXRange(minX, maxX) {\n    const w = this.w;\n    const seriesTotalsXRange = w.seriesData.series.map((ser, index) => {\n      let total = 0;\n      for (let j = 0; j < ser.length; j++) {\n        if (w.seriesData.seriesX[index][j] > minX && w.seriesData.seriesX[index][j] < maxX) {\n          total += ser[j];\n        }\n      }\n      return total;\n    });\n    return seriesTotalsXRange;\n  }\n  /**\n   * @memberof CoreUtils\n   * returns the percentage value of all individual values which can be used in a 100% stacked series\n   * Eg. w.seriesData.series = [[32, 33, 43, 12], [2, 3, 5, 1]]\n   *  @return [[94.11, 91.66, 89.58, 92.30], [5.88, 8.33, 10.41, 7.7]]\n   **/\n  getPercentSeries() {\n    const w = this.w;\n    w.globals.seriesPercent = w.seriesData.series.map((ser) => {\n      const seriesPercent = [];\n      if (Array.isArray(ser)) {\n        for (let j = 0; j < ser.length; j++) {\n          const total = w.seriesData.stackedSeriesTotals[j];\n          let percent = 0;\n          if (total) {\n            percent = 100 * ser[j] / total;\n          }\n          seriesPercent.push(percent);\n        }\n      } else {\n        const total = w.globals.seriesTotals.reduce((acc, val) => acc + val, 0);\n        const percent = 100 * ser / total;\n        seriesPercent.push(percent);\n      }\n      return seriesPercent;\n    });\n  }\n  getCalculatedRatios() {\n    const w = this.w;\n    const gl = w.globals;\n    const yRatio = [];\n    let invertedYRatio = 0;\n    let xRatio = 0;\n    let invertedXRatio = 0;\n    let zRatio = 0;\n    let baseLineY = [];\n    let baseLineInvertedY = 0.1;\n    let baseLineX = 0;\n    gl.yRange = [];\n    if (gl.isMultipleYAxis) {\n      for (let i = 0; i < gl.minYArr.length; i++) {\n        gl.yRange.push(Math.abs(gl.minYArr[i] - gl.maxYArr[i]));\n        baseLineY.push(0);\n      }\n    } else {\n      gl.yRange.push(Math.abs(gl.minY - gl.maxY));\n    }\n    gl.xRange = Math.abs(gl.maxX - gl.minX);\n    gl.zRange = Math.abs(gl.maxZ - gl.minZ);\n    for (let i = 0; i < gl.yRange.length; i++) {\n      yRatio.push(gl.yRange[i] / this.w.layout.gridHeight);\n    }\n    xRatio = gl.xRange / this.w.layout.gridWidth;\n    invertedYRatio = /** @type {any} */\n    gl.yRange / this.w.layout.gridWidth;\n    invertedXRatio = gl.xRange / this.w.layout.gridHeight;\n    zRatio = gl.zRange / this.w.layout.gridHeight * 16;\n    if (!zRatio) {\n      zRatio = 1;\n    }\n    if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) {\n      const _hasNegsGl = (\n        /** @type {any} */\n        gl\n      );\n      _hasNegsGl.hasNegs = true;\n    }\n    if (w.globals.seriesYAxisReverseMap.length > 0) {\n      const scaleBaseLineYScale = (y, i) => {\n        const yAxis = w.config.yaxis[w.globals.seriesYAxisReverseMap[i]];\n        const sign = y < 0 ? -1 : 1;\n        y = Math.abs(y);\n        if (yAxis.logarithmic) {\n          y = this.getBaseLog(yAxis.logBase, y);\n        }\n        return -sign * y / yRatio[i];\n      };\n      if (gl.isMultipleYAxis) {\n        baseLineY = [];\n        for (let i = 0; i < yRatio.length; i++) {\n          baseLineY.push(scaleBaseLineYScale(gl.minYArr[i], i));\n        }\n      } else {\n        baseLineY = [];\n        baseLineY.push(scaleBaseLineYScale(gl.minY, 0));\n        if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) {\n          baseLineInvertedY = -gl.minY / invertedYRatio;\n          baseLineX = gl.minX / xRatio;\n        }\n      }\n    } else {\n      baseLineY = [];\n      baseLineY.push(0);\n      baseLineInvertedY = 0;\n      baseLineX = 0;\n    }\n    return {\n      yRatio,\n      invertedYRatio,\n      zRatio,\n      xRatio,\n      invertedXRatio,\n      baseLineInvertedY,\n      baseLineY,\n      baseLineX\n    };\n  }\n  /**\n   * @param {any[]} series\n   */\n  getLogSeries(series) {\n    const w = this.w;\n    w.globals.seriesLog = series.map((s, i) => {\n      const yAxisIndex = w.globals.seriesYAxisReverseMap[i];\n      if (w.config.yaxis[yAxisIndex] && w.config.yaxis[yAxisIndex].logarithmic) {\n        return s.map((d) => {\n          if (d === null) return null;\n          return this.getLogVal(w.config.yaxis[yAxisIndex].logBase, d, i);\n        });\n      } else {\n        return s;\n      }\n    });\n    return w.globals.invalidLogScale ? series : w.globals.seriesLog;\n  }\n  /**\n   * @param {number} val\n   * @param {number} seriesIndex\n   * @returns {number}\n   */\n  getLogValAtSeriesIndex(val, seriesIndex) {\n    if (val === null) return (\n      /** @type {any} */\n      null\n    );\n    const w = this.w;\n    const yAxisIndex = w.globals.seriesYAxisReverseMap[seriesIndex];\n    if (w.config.yaxis[yAxisIndex] && w.config.yaxis[yAxisIndex].logarithmic) {\n      return this.getLogVal(\n        w.config.yaxis[yAxisIndex].logBase,\n        val,\n        seriesIndex\n      );\n    }\n    return val;\n  }\n  /**\n   * @param {number} base\n   * @param {number} value\n   */\n  getBaseLog(base, value) {\n    return Math.log(value) / Math.log(base);\n  }\n  /**\n   * @param {number} b\n   * @param {number} d\n   * @param {number} seriesIndex\n   */\n  getLogVal(b, d, seriesIndex) {\n    if (d <= 0) {\n      return 0;\n    }\n    const w = this.w;\n    const min_log_val = w.globals.minYArr[seriesIndex] === 0 ? -1 : this.getBaseLog(b, w.globals.minYArr[seriesIndex]);\n    const max_log_val = w.globals.maxYArr[seriesIndex] === 0 ? 0 : this.getBaseLog(b, w.globals.maxYArr[seriesIndex]);\n    const number_of_height_levels = max_log_val - min_log_val;\n    if (d < 1) return d / number_of_height_levels;\n    const log_height_value = this.getBaseLog(b, d) - min_log_val;\n    return log_height_value / number_of_height_levels;\n  }\n  /**\n   * @param {number[]} yRatio\n   */\n  getLogYRatios(yRatio) {\n    const w = this.w;\n    const gl = this.w.globals;\n    const _gl = (\n      /** @type {any} */\n      gl\n    );\n    _gl.yLogRatio = yRatio.slice();\n    _gl.logYRange = /** @type {any[]} */\n    gl.yRange.map(\n      (_, i) => {\n        const yAxisIndex = w.globals.seriesYAxisReverseMap[i];\n        if (w.config.yaxis[yAxisIndex] && this.w.config.yaxis[yAxisIndex].logarithmic) {\n          let maxY = -Number.MAX_VALUE;\n          let minY = Number.MIN_VALUE;\n          let range = 1;\n          gl.seriesLog.forEach(\n            (s, si) => {\n              s.forEach((v) => {\n                if (w.config.yaxis[si] && w.config.yaxis[si].logarithmic) {\n                  maxY = Math.max(v, maxY);\n                  minY = Math.min(v, minY);\n                }\n              });\n            }\n          );\n          range = Math.pow(gl.yRange[i], Math.abs(minY - maxY) / gl.yRange[i]);\n          _gl.yLogRatio[i] = range / this.w.layout.gridHeight;\n          return range;\n        }\n      }\n    );\n    return _gl.invalidLogScale ? yRatio.slice() : _gl.yLogRatio;\n  }\n  // Some config objects can be array - and we need to extend them correctly\n  /**\n   * @param {any} configInstance\n   * @param {Record<string, any>} options\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  static extendArrayProps(configInstance, options2, w) {\n    var _a, _b;\n    if (options2 == null ? void 0 : options2.yaxis) {\n      options2 = configInstance.extendYAxis(options2, w);\n    }\n    if (options2 == null ? void 0 : options2.annotations) {\n      if (options2.annotations.yaxis) {\n        options2 = configInstance.extendYAxisAnnotations(options2);\n      }\n      if ((_a = options2 == null ? void 0 : options2.annotations) == null ? void 0 : _a.xaxis) {\n        options2 = configInstance.extendXAxisAnnotations(options2);\n      }\n      if ((_b = options2 == null ? void 0 : options2.annotations) == null ? void 0 : _b.points) {\n        options2 = configInstance.extendPointAnnotations(options2);\n      }\n    }\n    return options2;\n  }\n  // Series of the same group and type can be stacked together distinct from\n  // other series of the same type on the same axis.\n  /**\n   * @param {Record<string, any>} typeSeries\n   * @param {string[]} typeGroups\n   * @param {string} type\n   * @param {string} chartClass\n   */\n  drawSeriesByGroup(typeSeries, typeGroups, type, chartClass) {\n    const w = this.w;\n    const graph = [];\n    if (typeSeries.series.length > 0) {\n      typeGroups.forEach((gn) => {\n        const gs = [];\n        const gi = [];\n        typeSeries.i.forEach((i, ii) => {\n          if (\n            /** @type {Record<string,any>} */\n            w.config.series[i].group === gn\n          ) {\n            gs.push(typeSeries.series[ii]);\n            gi.push(i);\n          }\n        });\n        gs.length > 0 && graph.push(\n          /** @type {any} */\n          chartClass.draw(gs, type, gi)\n        );\n      });\n    }\n    return graph;\n  }\n}\nconst SVGNS$1 = \"http://www.w3.org/2000/svg\";\nfunction easeOutCubic(t) {\n  return 1 - Math.pow(1 - t, 3);\n}\nfunction easeOutBack(t) {\n  const c1 = 1.70158;\n  const c3 = c1 + 1;\n  return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n}\nlet _reducedMotionMql = null;\nfunction prefersReducedMotion() {\n  if (!Environment.isBrowser()) return false;\n  try {\n    if (!_reducedMotionMql) {\n      _reducedMotionMql = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n    }\n    return !!_reducedMotionMql.matches;\n  } catch (_) {\n    return false;\n  }\n}\nfunction applyProgressiveReveal(el, x, w) {\n  if (!Environment.isBrowser()) return false;\n  if (w.globals.dataChanged || w.globals.resized) return false;\n  const animCfg = w.config.chart.animations;\n  if (!animCfg || animCfg.enabled === false) return false;\n  const chartType = w.config.chart.type;\n  if (chartType !== \"line\" && chartType !== \"area\" && chartType !== \"rangeArea\") {\n    return false;\n  }\n  if (!(w.layout.gridWidth > 0)) return false;\n  const drawSpeed = (animCfg.speed || 800) * 2;\n  const xRatio = Math.max(0, Math.min(1, x / w.layout.gridWidth));\n  const easedT = 1 - Math.cbrt(1 - xRatio);\n  const revealDelay = easedT * drawSpeed;\n  const node = el.node;\n  const style = node.style;\n  style.opacity = \"0\";\n  let startAnchor = null;\n  const tick = (now) => {\n    if (startAnchor === null) startAnchor = now;\n    if (now - startAnchor >= revealDelay) {\n      style.opacity = \"\";\n    } else {\n      BrowserAPIs.requestAnimationFrame(tick);\n    }\n  };\n  BrowserAPIs.requestAnimationFrame(tick);\n  return true;\n}\nfunction applyAnimationPolicy(w) {\n  const anim = w.config.chart.animations;\n  if (!anim) return;\n  if (anim.respectReducedMotion !== false && prefersReducedMotion()) {\n    anim.enabled = false;\n    if (anim.dynamicAnimation) anim.dynamicAnimation.enabled = false;\n  }\n}\nfunction computeStagger(opts) {\n  const style = opts.style;\n  const index = opts.index || 0;\n  const baseDelay = typeof opts.baseDelay === \"number\" ? opts.baseDelay : 40;\n  const row = opts.row || 0;\n  const col = opts.col || 0;\n  const groupIndex = opts.groupIndex || 0;\n  const perGroup = opts.perGroup || 1;\n  const centerDistance = opts.centerDistance || 0;\n  switch (style) {\n    case \"none\":\n      return 0;\n    case \"diagonal\":\n      return (row + col) * baseDelay;\n    case \"group\":\n      return groupIndex * baseDelay + index % perGroup * (baseDelay / 4);\n    case \"centroid\":\n      return centerDistance * baseDelay * (index + 1);\n    case \"sequential\":\n    default:\n      return index * baseDelay;\n  }\n}\nclass Animations {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} [ctx]\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} from\n   * @param {Record<string, any>} to\n   * @param {object} speed\n   */\n  animateLine(el, from, to, speed) {\n    el.attr(from).animate(speed).attr(to);\n  }\n  /*\n   ** Animate radius of a circle element\n   * @param {any} el\n   * @param {number} speed\n   * @param {string} easing\n   * @param {Function} cb\n   */\n  /** @param {any} el @param {any} speed @param {any} easing @param {any} cb */\n  animateMarker(el, speed, easing, cb) {\n    el.attr({\n      opacity: 0\n    }).animate(speed).attr({\n      opacity: 1\n    }).after(() => {\n      cb();\n    });\n  }\n  /**\n   * Scale-up \"pop\" effect for scatter/bubble markers. Animates\n   * `transform: scale(0 → 1)` (with `easeOutBack` overshoot) plus opacity,\n   * around the marker's own center via `transform-box: fill-box`.\n   *\n   * Falls back to instant render in SSR / when shouldAnimate is false.\n   *\n   * @param {any} el\n   * @param {{ speed: number, delay?: number, onComplete?: () => void }} params\n   */\n  animatePop(el, { speed, delay = 0, onComplete }) {\n    const w = this.w;\n    if (!Environment.isBrowser() || !w.globals.shouldAnimate || speed < 1) {\n      if (onComplete) onComplete();\n      return;\n    }\n    const node = el.node;\n    const style = node.style;\n    style.transformBox = \"fill-box\";\n    style.transformOrigin = \"center\";\n    style.transform = \"scale(0)\";\n    style.opacity = \"0\";\n    const startAt = performance.now() + delay;\n    const step = (now) => {\n      const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n      style.transform = `scale(${easeOutBack(t)})`;\n      style.opacity = String(Math.min(1, t * 2));\n      if (t < 1) {\n        BrowserAPIs.requestAnimationFrame(step);\n      } else {\n        style.transform = \"\";\n        style.transformOrigin = \"\";\n        style.transformBox = \"\";\n        style.opacity = \"\";\n        if (onComplete) onComplete();\n      }\n    };\n    BrowserAPIs.requestAnimationFrame(step);\n  }\n  /*\n   ** Animate rect properties\n   * @param {any} el\n   * @param {any} from\n   * @param {any} to\n   * @param {number} speed\n   * @param {Function} fn\n   */\n  /** @param {any} el @param {any} from @param {any} to @param {any} speed @param {any} fn @param {number} [delay] */\n  animateRect(el, from, to, speed, fn, delay = 0) {\n    el.attr(from).animate(speed, delay).attr(to).after(() => fn());\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  animatePathsGradually(params) {\n    const { el, realIndex, j, fill, pathFrom, pathTo, speed, delay } = params;\n    const me = this;\n    const w = this.w;\n    let delayFactor = 0;\n    if (w.config.chart.animations.animateGradually.enabled) {\n      delayFactor = w.config.chart.animations.animateGradually.delay;\n    }\n    if (w.config.chart.animations.dynamicAnimation.enabled && w.globals.dataChanged && w.config.chart.type !== \"bar\") {\n      delayFactor = 0;\n    }\n    me.morphSVG(\n      el,\n      realIndex,\n      j,\n      w.config.chart.type === \"line\" && !w.globals.comboCharts ? \"stroke\" : fill,\n      pathFrom,\n      pathTo,\n      speed,\n      delay * delayFactor\n    );\n  }\n  /**\n   * Opacity-fade reveal (see Graphics.renderPaths `revealViaFade`): hide this\n   * path immediately, then reveal the whole series in a single CSS opacity fade\n   * once the synchronous draw pass has finished. Used for two cases that both\n   * want to avoid per-path morphs: the large-dataset bulk render (>\n   * largeDatasetThreshold) and candlestick/boxPlot data-change updates (where an\n   * index-based morph would slide candles around on zoom). Every faded path is\n   * pushed to delayedElements, but only the first one schedules the reveal — a\n   * lone requestAnimationFrame fires after all paths are in the DOM, so N paths\n   * cost one frame callback instead of N morph timelines. The guard flag is\n   * reset inside the callback (and in initGlobalVars) so subsequent renders\n   * re-arm it.\n   * @param {any} el\n   */\n  revealBulk(el) {\n    const w = this.w;\n    el.node.classList.add(\"apexcharts-element-hidden\");\n    w.globals.delayedElements.push({ el: el.node });\n    if (!Environment.isBrowser() || !w.globals.shouldAnimate) {\n      this.animationCompleted(el);\n      return;\n    }\n    if (!w.globals.bulkRevealScheduled) {\n      w.globals.bulkRevealScheduled = true;\n      BrowserAPIs.requestAnimationFrame(() => {\n        if (w.globals.isDestroyed) return;\n        w.globals.bulkRevealScheduled = false;\n        this.animationCompleted(el);\n      });\n    }\n  }\n  showDelayedElements() {\n    this.w.globals.delayedElements.forEach((d) => {\n      const ele = d.el;\n      ele.classList.remove(\"apexcharts-element-hidden\");\n      ele.classList.add(\"apexcharts-hidden-element-shown\");\n    });\n  }\n  /**\n   * @param {any} el\n   */\n  animationCompleted(el) {\n    const w = this.w;\n    if (w.globals.animationEnded) return;\n    w.globals.animationEnded = true;\n    this.showDelayedElements();\n    if (typeof w.config.chart.events.animationEnd === \"function\") {\n      w.config.chart.events.animationEnd(this.ctx, { el, w });\n    }\n  }\n  /**\n   * Initial-mount \"pen-stroke\" draw effect for line / area / rangeArea paths.\n   *\n   * Stroke paths animate `stroke-dashoffset` from total length → 0.\n   * Fill paths animate the width of a per-series SVG `<mask>` rect from 0 → gridWidth,\n   * which coexists with the existing `clip-path: gridRectMask` (mask + clip-path\n   * are independent SVG attributes).\n   *\n   * For radar / radial shapes, pass `mask: { type: 'radial', cx, cy, r }` to\n   * use a circular mask that blooms from center outward instead of the default\n   * left-to-right rect wipe.\n   *\n   * @param {any} el            - SVG.js path element\n   * @param {{realIndex: number, j?: number, isFill: boolean, isLast: boolean, speed: number, delay: number, mask?: {type: 'rect'|'radial', cx?: number, cy?: number, r?: number}}} params\n   */\n  animateDraw(el, { realIndex, j, isFill, isLast, speed, delay, mask: maskShape }) {\n    const w = this.w;\n    const me = this;\n    const finalize = () => {\n      if (isLast && w.globals.shouldAnimate) {\n        me.animationCompleted(el);\n      }\n      me.showDelayedElements();\n    };\n    if (!Environment.isBrowser() || !w.globals.shouldAnimate || speed < 1) {\n      finalize();\n      return;\n    }\n    const node = el.node;\n    const runMaskReveal = () => {\n      const pad = 4;\n      const isRadial = maskShape && maskShape.type === \"radial\";\n      const targetWidth = w.layout.gridWidth + pad * 2;\n      const radialCx = maskShape && maskShape.cx || 0;\n      const radialCy = maskShape && maskShape.cy || 0;\n      const targetRadius = (maskShape && maskShape.r || w.layout.gridWidth / 2) + pad;\n      const maskId = `apexDrawMask${w.globals.cuid}-${realIndex}-${j != null ? j : 0}-${isFill ? \"f\" : \"s\"}`;\n      const mask = BrowserAPIs.createElementNS(SVGNS$1, \"mask\");\n      mask.setAttribute(\"id\", maskId);\n      mask.setAttribute(\"maskUnits\", \"userSpaceOnUse\");\n      let revealEl;\n      if (isRadial) {\n        const region = targetRadius;\n        mask.setAttribute(\"x\", String(radialCx - region));\n        mask.setAttribute(\"y\", String(radialCy - region));\n        mask.setAttribute(\"width\", String(region * 2));\n        mask.setAttribute(\"height\", String(region * 2));\n        revealEl = BrowserAPIs.createElementNS(SVGNS$1, \"circle\");\n        revealEl.setAttribute(\"cx\", String(radialCx));\n        revealEl.setAttribute(\"cy\", String(radialCy));\n        revealEl.setAttribute(\"r\", \"0\");\n        revealEl.setAttribute(\"fill\", \"#fff\");\n      } else {\n        mask.setAttribute(\"x\", String(-pad));\n        mask.setAttribute(\"y\", String(-pad));\n        mask.setAttribute(\"width\", String(targetWidth));\n        mask.setAttribute(\"height\", String(w.layout.gridHeight + pad * 2));\n        revealEl = BrowserAPIs.createElementNS(SVGNS$1, \"rect\");\n        revealEl.setAttribute(\"x\", String(-pad));\n        revealEl.setAttribute(\"y\", String(-pad));\n        revealEl.setAttribute(\"width\", \"0\");\n        revealEl.setAttribute(\"height\", String(w.layout.gridHeight + pad * 2));\n        revealEl.setAttribute(\"fill\", \"#fff\");\n      }\n      mask.appendChild(revealEl);\n      w.dom.elDefs.node.appendChild(mask);\n      node.setAttribute(\"mask\", `url(#${maskId})`);\n      const startAt = performance.now() + (delay || 0);\n      const step = (now) => {\n        if (w.globals.isDestroyed) return;\n        const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n        const eased = easeOutCubic(t);\n        if (isRadial) {\n          revealEl.setAttribute(\"r\", String(eased * targetRadius));\n        } else {\n          revealEl.setAttribute(\"width\", String(eased * targetWidth));\n        }\n        if (t < 1) {\n          BrowserAPIs.requestAnimationFrame(step);\n        } else {\n          node.removeAttribute(\"mask\");\n          if (mask.parentNode) mask.parentNode.removeChild(mask);\n          finalize();\n        }\n      };\n      BrowserAPIs.requestAnimationFrame(step);\n    };\n    const runStrokeDraw = (len) => {\n      node.setAttribute(\"stroke-dasharray\", String(len));\n      node.setAttribute(\"stroke-dashoffset\", String(len));\n      const startAt = performance.now() + (delay || 0);\n      const step = (now) => {\n        if (w.globals.isDestroyed) return;\n        const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n        node.setAttribute(\"stroke-dashoffset\", String(len * (1 - easeOutCubic(t))));\n        if (t < 1) {\n          BrowserAPIs.requestAnimationFrame(step);\n        } else {\n          node.removeAttribute(\"stroke-dasharray\");\n          node.removeAttribute(\"stroke-dashoffset\");\n          finalize();\n        }\n      };\n      BrowserAPIs.requestAnimationFrame(step);\n    };\n    BrowserAPIs.requestAnimationFrame(() => {\n      if (w.globals.isDestroyed) return;\n      if (isFill) {\n        runMaskReveal();\n        return;\n      }\n      const existingDash = node.getAttribute(\"stroke-dasharray\");\n      const hasCustomDash = !!existingDash && existingDash !== \"0\" && existingDash !== \"\";\n      if (hasCustomDash) {\n        runMaskReveal();\n        return;\n      }\n      let len = 0;\n      try {\n        if (typeof node.getTotalLength === \"function\") {\n          len = node.getTotalLength();\n        }\n      } catch (_) {\n        len = 0;\n      }\n      if (!len) {\n        finalize();\n        return;\n      }\n      runStrokeDraw(len);\n    });\n  }\n  // SVG.js animation for morphing one path to another\n  /**\n   * @param {any} el\n   * @param {number} realIndex\n   * @param {number} j\n   * @param {string} fill\n   * @param {string} pathFrom\n   * @param {string} pathTo\n   * @param {number} speed\n   * @param {number} delay\n   */\n  morphSVG(el, realIndex, j, fill, pathFrom, pathTo, speed, delay) {\n    var _a, _b;\n    const w = this.w;\n    if (!pathFrom) {\n      pathFrom = el.attr(\"pathFrom\");\n    }\n    if (!pathTo) {\n      pathTo = el.attr(\"pathTo\");\n    }\n    const disableAnimationForCorrupPath = () => {\n      if (w.config.chart.type === \"radar\") {\n        speed = 1;\n      }\n      return `M 0 ${w.layout.gridHeight}`;\n    };\n    if (!pathFrom || pathFrom.indexOf(\"undefined\") > -1 || pathFrom.indexOf(\"NaN\") > -1) {\n      pathFrom = disableAnimationForCorrupPath();\n    }\n    if (!pathTo.trim() || pathTo.indexOf(\"undefined\") > -1 || pathTo.indexOf(\"NaN\") > -1) {\n      pathTo = disableAnimationForCorrupPath();\n    }\n    if (!w.globals.shouldAnimate) {\n      speed = 1;\n    }\n    const crossTypeMorph = ((_b = (_a = this.ctx) == null ? void 0 : _a.morphTypeChange) == null ? void 0 : _b.isActive()) === true;\n    const morphAlgo = crossTypeMorph ? \"polygons\" : \"commands\";\n    el.plot(pathFrom).animate(1, delay).plot(pathFrom).animate(speed, delay).plot(pathTo, morphAlgo).after(() => {\n      if (Utils$1.isNumber(j)) {\n        if (j === w.seriesData.series[w.globals.maxValsInArrayIndex].length - 2 && w.globals.shouldAnimate) {\n          this.animationCompleted(el);\n        }\n      } else if (fill !== \"none\" && w.globals.shouldAnimate) {\n        if (!w.globals.comboCharts && realIndex === w.seriesData.series.length - 1 || w.globals.comboCharts) {\n          this.animationCompleted(el);\n        }\n      }\n      this.showDelayedElements();\n    });\n  }\n}\nclass Filters {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  // create a re-usable filter which can be appended other filter effects and applied to multiple elements\n  /**\n   * @param {any} el\n   * @param {number} i\n   */\n  getDefaultFilter(el, i) {\n    const w = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (w.config.chart.dropShadow.enabled) {\n      this.dropShadow(el, w.config.chart.dropShadow, i);\n    }\n  }\n  /**\n   * @param {any} el\n   * @param {number} i\n   * @param {string} filterType\n   */\n  applyFilter(el, i, filterType) {\n    var _a, _b, _c;\n    const w = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (filterType === \"none\") {\n      this.getDefaultFilter(el, i);\n      return;\n    }\n    const shadowAttr = w.config.chart.dropShadow;\n    const brightnessFactor = filterType === \"lighten\" ? 2 : 0.3;\n    if (el.filterWith) {\n      el.filterWith((add) => {\n        add.colorMatrix({\n          type: \"matrix\",\n          values: `\n            ${brightnessFactor} 0 0 0 0\n            0 ${brightnessFactor} 0 0 0\n            0 0 ${brightnessFactor} 0 0\n            0 0 0 1 0\n          `,\n          in: \"SourceGraphic\",\n          result: \"brightness\"\n        });\n        if (shadowAttr.enabled) {\n          this.addShadow(add, i, shadowAttr, \"brightness\");\n        }\n      });\n      if (!shadowAttr.noUserSpaceOnUse) {\n        (_b = (_a = el.filterer()) == null ? void 0 : _a.node) == null ? void 0 : _b.setAttribute(\"filterUnits\", \"userSpaceOnUse\");\n      }\n      this._scaleFilterSize((_c = el.filterer()) == null ? void 0 : _c.node);\n    }\n  }\n  // appends dropShadow to the filter object which can be chained with other filter effects\n  /**\n   * @param {any} add\n   * @param {number} i\n   * @param {Record<string, any>} attrs\n   * @param {string} source\n   */\n  addShadow(add, i, attrs, source) {\n    var _a;\n    const w = this.w;\n    let { blur, top, left, color, opacity } = attrs;\n    color = Array.isArray(color) ? color[i] : color;\n    if (((_a = w.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _a.length) > 0) {\n      if (w.config.chart.dropShadow.enabledOnSeries.indexOf(i) === -1) {\n        return add;\n      }\n    }\n    add.offset({\n      in: source,\n      dx: left,\n      dy: top,\n      result: \"offset\"\n    });\n    add.gaussianBlur({\n      in: \"offset\",\n      stdDeviation: blur,\n      result: \"blur\"\n    });\n    add.flood({\n      \"flood-color\": color,\n      \"flood-opacity\": opacity,\n      result: \"flood\"\n    });\n    add.composite({\n      in: \"flood\",\n      in2: \"blur\",\n      operator: \"in\",\n      result: \"shadow\"\n    });\n    add.merge([\"shadow\", source]);\n  }\n  // directly adds dropShadow to the element and returns the same element.\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} attrs\n   */\n  dropShadow(el, attrs, i = 0) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (Utils$1.isMsEdge() && w.config.chart.type === \"radialBar\") {\n      return el;\n    }\n    if (((_a = w.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _a.length) > 0) {\n      if (((_b = w.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _b.indexOf(i)) === -1) {\n        return el;\n      }\n    }\n    if (el.filterWith) {\n      el.filterWith((add) => {\n        this.addShadow(add, i, attrs, \"SourceGraphic\");\n      });\n      if (!attrs.noUserSpaceOnUse) {\n        (_d = (_c = el.filterer()) == null ? void 0 : _c.node) == null ? void 0 : _d.setAttribute(\"filterUnits\", \"userSpaceOnUse\");\n      }\n      this._scaleFilterSize((_e = el.filterer()) == null ? void 0 : _e.node);\n    }\n    return el;\n  }\n  /**\n   * @param {any} el\n   * @param {number} realIndex\n   * @param {number} dataPointIndex\n   */\n  setSelectionFilter(el, realIndex, dataPointIndex) {\n    const w = this.w;\n    if (typeof w.interact.selectedDataPoints[realIndex] !== \"undefined\") {\n      if (w.interact.selectedDataPoints[realIndex].indexOf(dataPointIndex) > -1) {\n        el.node.setAttribute(\"selected\", true);\n        const activeFilter = w.config.states.active.filter;\n        if (activeFilter !== \"none\") {\n          this.applyFilter(el, realIndex, activeFilter.type);\n        }\n      }\n    }\n  }\n  /**\n   * @param {any} el\n   */\n  _scaleFilterSize(el) {\n    if (!el) return;\n    const setAttributes = (attrs) => {\n      for (const key in attrs) {\n        if (Object.prototype.hasOwnProperty.call(attrs, key)) {\n          el.setAttribute(key, attrs[key]);\n        }\n      }\n    };\n    setAttributes({\n      width: \"200%\",\n      height: \"200%\",\n      x: \"-50%\",\n      y: \"-50%\"\n    });\n  }\n}\nclass Graphics {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext | null} ctx\n   */\n  constructor(w, ctx = null) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /*****************************************************************************\n   *                                                                            *\n   *  SVG Path Rounding Function                                                *\n   *  Copyright (C) 2014 Yona Appletree                                         *\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   * SVG Path rounding function. Takes an input path string and outputs a path\n   * string where all line-line corners have been rounded. Only supports absolute\n   * commands at the moment.\n   *\n   * @param pathString The SVG input path\n   * @param radius The amount to round the corners, either a value in the SVG\n   *               coordinate space, or, if useFractionalRadius is true, a value\n   *               from 0 to 1.\n   * @returns A new SVG path string with the rounding\n   * @param {string} pathString\n   * @param {number} radius\n   */\n  roundPathCorners(pathString, radius) {\n    if (pathString.indexOf(\"NaN\") > -1) pathString = \"\";\n    function moveTowardsLength(movingPoint, targetPoint, amount) {\n      var width = targetPoint.x - movingPoint.x;\n      var height = targetPoint.y - movingPoint.y;\n      var distance = Math.sqrt(width * width + height * height);\n      return moveTowardsFractional(\n        movingPoint,\n        targetPoint,\n        Math.min(1, amount / distance)\n      );\n    }\n    function moveTowardsFractional(movingPoint, targetPoint, fraction) {\n      return {\n        x: movingPoint.x + (targetPoint.x - movingPoint.x) * fraction,\n        y: movingPoint.y + (targetPoint.y - movingPoint.y) * fraction\n      };\n    }\n    function adjustCommand(cmd, newPoint) {\n      if (cmd.length > 2) {\n        cmd[cmd.length - 2] = newPoint.x;\n        cmd[cmd.length - 1] = newPoint.y;\n      }\n    }\n    function pointForCommand(cmd) {\n      return {\n        x: parseFloat(cmd[cmd.length - 2]),\n        y: parseFloat(cmd[cmd.length - 1])\n      };\n    }\n    var pathParts = pathString.split(/[,\\s]/).reduce(function(parts, part) {\n      var match = part.match(/^([a-zA-Z])(.+)/);\n      if (match) {\n        parts.push(match[1]);\n        parts.push(match[2]);\n      } else {\n        parts.push(part);\n      }\n      return parts;\n    }, []);\n    var commands = pathParts.reduce(function(commands2, part) {\n      if (parseFloat(part) == part && commands2.length) {\n        commands2[commands2.length - 1].push(part);\n      } else {\n        commands2.push([part]);\n      }\n      return commands2;\n    }, []);\n    var resultCommands = [];\n    if (commands.length > 1) {\n      var startPoint = pointForCommand(commands[0]);\n      var virtualCloseLine = null;\n      if (commands[commands.length - 1][0] == \"Z\" && commands[0].length > 2) {\n        virtualCloseLine = [\"L\", startPoint.x, startPoint.y];\n        commands[commands.length - 1] = virtualCloseLine;\n      }\n      resultCommands.push(commands[0]);\n      for (var cmdIndex = 1; cmdIndex < commands.length; cmdIndex++) {\n        var prevCmd = resultCommands[resultCommands.length - 1];\n        var curCmd = commands[cmdIndex];\n        var nextCmd = curCmd == virtualCloseLine ? commands[1] : commands[cmdIndex + 1];\n        if (nextCmd && prevCmd && prevCmd.length > 2 && curCmd[0] == \"L\" && nextCmd.length > 2 && nextCmd[0] == \"L\") {\n          var prevPoint = pointForCommand(prevCmd);\n          var curPoint = pointForCommand(curCmd);\n          var nextPoint = pointForCommand(nextCmd);\n          var curveStart, curveEnd;\n          curveStart = moveTowardsLength(curPoint, prevPoint, radius);\n          curveEnd = moveTowardsLength(curPoint, nextPoint, radius);\n          adjustCommand(curCmd, curveStart);\n          curCmd.origPoint = curPoint;\n          resultCommands.push(curCmd);\n          var startControl = moveTowardsFractional(curveStart, curPoint, 0.5);\n          var endControl = moveTowardsFractional(curPoint, curveEnd, 0.5);\n          var curveCmd = [\n            \"C\",\n            startControl.x,\n            startControl.y,\n            endControl.x,\n            endControl.y,\n            curveEnd.x,\n            curveEnd.y\n          ];\n          curveCmd.origPoint = curPoint;\n          resultCommands.push(curveCmd);\n        } else {\n          resultCommands.push(curCmd);\n        }\n      }\n      if (virtualCloseLine) {\n        var newStartPoint = pointForCommand(\n          resultCommands[resultCommands.length - 1]\n        );\n        resultCommands.push([\"Z\"]);\n        adjustCommand(resultCommands[0], newStartPoint);\n      }\n    } else {\n      resultCommands = commands;\n    }\n    return resultCommands.reduce(function(str, c) {\n      return str + c.join(\" \") + \" \";\n    }, \"\");\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   * @param {number | null} [strokeWidth]\n   */\n  drawLine(x1, y1, x2, y2, lineColor = \"#a8a8a8\", dashArray = 0, strokeWidth = null, strokeLineCap = \"butt\") {\n    const w = this.w;\n    const line = w.dom.Paper.line().attr({\n      x1,\n      y1,\n      x2,\n      y2,\n      stroke: lineColor,\n      \"stroke-dasharray\": dashArray,\n      \"stroke-width\": strokeWidth,\n      \"stroke-linecap\": strokeLineCap\n    });\n    return line;\n  }\n  /**\n   * @param {number | null} [strokeWidth]\n   * @param {string | null} [strokeColor]\n   */\n  drawRect(x1 = 0, y1 = 0, x2 = 0, y2 = 0, radius = 0, color = \"#fefefe\", opacity = 1, strokeWidth = null, strokeColor = null, strokeDashArray = 0) {\n    const w = this.w;\n    const rect = w.dom.Paper.rect();\n    rect.attr({\n      x: x1,\n      y: y1,\n      width: x2 > 0 ? x2 : 0,\n      height: y2 > 0 ? y2 : 0,\n      rx: radius,\n      ry: radius,\n      opacity,\n      \"stroke-width\": strokeWidth !== null ? strokeWidth : 0,\n      stroke: strokeColor !== null ? strokeColor : \"none\",\n      \"stroke-dasharray\": strokeDashArray\n    });\n    rect.node.setAttribute(\"fill\", color);\n    return rect;\n  }\n  /**\n   * @param {string} polygonString\n   */\n  drawPolygon(polygonString, stroke = \"#e1e1e1\", strokeWidth = 1, fill = \"none\") {\n    const w = this.w;\n    const polygon = w.dom.Paper.polygon(polygonString).attr({\n      fill,\n      stroke,\n      \"stroke-width\": strokeWidth\n    });\n    return polygon;\n  }\n  /**\n   * @param {number} radius\n   * @param {Record<string, any> | null} attrs\n   */\n  drawCircle(radius, attrs = null) {\n    const w = this.w;\n    if (radius < 0) radius = 0;\n    const c = w.dom.Paper.circle(radius * 2);\n    if (attrs !== null) {\n      c.attr(attrs);\n    }\n    return c;\n  }\n  /** @param {{ d?: string, stroke?: string, strokeWidth?: number, fill: any, fillOpacity?: number, strokeOpacity?: number, classes?: any, strokeLinecap?: any, strokeDashArray?: number }} opts */\n  drawPath({\n    d = \"\",\n    stroke = \"#a8a8a8\",\n    strokeWidth = 1,\n    fill,\n    fillOpacity = 1,\n    strokeOpacity = 1,\n    classes,\n    strokeLinecap = null,\n    strokeDashArray = 0\n  }) {\n    const w = this.w;\n    if (strokeLinecap === null) {\n      strokeLinecap = w.config.stroke.lineCap;\n    }\n    if (d.indexOf(\"undefined\") > -1 || d.indexOf(\"NaN\") > -1) {\n      d = `M 0 ${w.layout.gridHeight}`;\n    }\n    const p = w.dom.Paper.path(d).attr({\n      fill,\n      \"fill-opacity\": fillOpacity,\n      stroke,\n      \"stroke-opacity\": strokeOpacity,\n      \"stroke-linecap\": strokeLinecap,\n      \"stroke-width\": strokeWidth,\n      \"stroke-dasharray\": strokeDashArray,\n      class: classes\n    });\n    return p;\n  }\n  /**\n   * @param {Record<string, any> | null} attrs\n   */\n  group(attrs = null) {\n    const w = this.w;\n    const g = w.dom.Paper.group();\n    if (attrs !== null) {\n      g.attr(attrs);\n    }\n    return g;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  move(x, y) {\n    const move = [\"M\", x, y].join(\" \");\n    return move;\n  }\n  /**\n   * @param {number | null} x\n   * @param {number | null} y\n   * @param {string | null} hORv\n   * @returns {string}\n   */\n  line(x, y, hORv = null) {\n    if (hORv === \"H\") return [\" H\", x].join(\" \");\n    if (hORv === \"V\") return [\" V\", y].join(\" \");\n    return [\" L\", x, y].join(\" \");\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   * @param {number} x\n   * @param {number} y\n   */\n  curve(x1, y1, x2, y2, x, y) {\n    const curve = [\"C\", x1, y1, x2, y2, x, y].join(\" \");\n    return curve;\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x\n   * @param {number} y\n   */\n  quadraticCurve(x1, y1, x, y) {\n    const curve = [\"Q\", x1, y1, x, y].join(\" \");\n    return curve;\n  }\n  /**\n   * @param {number} rx\n   * @param {number} ry\n   * @param {number} axisRotation\n   * @param {number} largeArcFlag\n   * @param {number} sweepFlag\n   * @param {number} x\n   * @param {number} y\n   */\n  arc(rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y, relative = false) {\n    let coord = \"A\";\n    if (relative) coord = \"a\";\n    const arc = [\n      coord,\n      rx,\n      ry,\n      axisRotation,\n      largeArcFlag,\n      sweepFlag,\n      x,\n      y\n    ].join(\" \");\n    return arc;\n  }\n  /**\n   * @memberof Graphics\n   * @param {Record<string, any>} opts\n   *  i = series's index\n   *  realIndex = realIndex is series's actual index when it was drawn time. After several redraws, the iterating \"i\" may change in loops, but realIndex doesn't\n   *  pathFrom = existing pathFrom to animateTo\n   *  pathTo = new Path to which d attr will be animated from pathFrom to pathTo\n   *  stroke = line Color\n   *  strokeWidth = width of path Line\n   *  fill = it can be gradient, single color, pattern or image\n   *  animationDelay = how much to delay when starting animation (in milliseconds)\n   *  dataChangeSpeed = for dynamic animations, when data changes\n   *  className = class attribute to add\n   * @return {any} svg.js path object\n   **/\n  renderPaths({\n    j,\n    realIndex,\n    pathFrom,\n    pathTo,\n    stroke,\n    strokeWidth,\n    strokeLinecap,\n    fill,\n    animationDelay,\n    initialSpeed,\n    dataChangeSpeed,\n    className,\n    chartType,\n    shouldClipToGrid = true,\n    bindEventsOnPaths = true,\n    drawShadow = true,\n    drawMask = null\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const anim = new Animations(this.w, (_a = this.ctx) != null ? _a : void 0);\n    const initialAnim = this.w.config.chart.animations.enabled;\n    const dynamicAnim = initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n    if (pathFrom && pathFrom.startsWith(\"M 0 0 \") && pathTo) {\n      const moveCommand = pathTo.match(/^M\\s+[\\d.-]+\\s+[\\d.-]+/);\n      if (moveCommand) {\n        pathFrom = pathFrom.replace(/^M\\s+0\\s+0/, moveCommand[0]);\n      }\n    }\n    let d;\n    const shouldAnimate = !!(initialAnim && !w.globals.resized || dynamicAnim && w.globals.dataChanged && w.globals.shouldAnimate);\n    const isDrawableSeries = typeof className === \"string\" && (className.indexOf(\"apexcharts-line\") > -1 || className.indexOf(\"apexcharts-area\") > -1 || className.indexOf(\"apexcharts-rangeArea\") > -1 || className.indexOf(\"apexcharts-radar\") > -1);\n    const useDrawMode = !!(initialAnim && !w.globals.resized && !w.globals.dataChanged && isDrawableSeries);\n    const largeThreshold = (_b = w.config.chart.animations.largeDatasetThreshold) != null ? _b : 0;\n    const bulkRender = !!(shouldAnimate && !useDrawMode && largeThreshold > 0 && w.globals.dataPoints > largeThreshold);\n    const isCandleOrBox = chartType === \"candlestick\" || chartType === \"boxPlot\";\n    const fadeOnDataChange = !!(isCandleOrBox && shouldAnimate && !useDrawMode && w.globals.dataChanged);\n    const revealViaFade = bulkRender || fadeOnDataChange;\n    if (shouldAnimate && !useDrawMode && !revealViaFade) {\n      d = pathFrom;\n    } else {\n      d = pathTo;\n      if (!shouldAnimate) {\n        w.globals.animationEnded = true;\n      }\n    }\n    const strokeDashArrayOpt = w.config.stroke.dashArray;\n    let strokeDashArray = 0;\n    if (Array.isArray(strokeDashArrayOpt)) {\n      strokeDashArray = strokeDashArrayOpt[realIndex];\n    } else {\n      strokeDashArray = w.config.stroke.dashArray;\n    }\n    const el = this.drawPath({\n      d,\n      stroke,\n      strokeWidth,\n      fill,\n      fillOpacity: 1,\n      classes: className,\n      strokeLinecap,\n      strokeDashArray\n    });\n    el.attr(\"index\", realIndex);\n    if (shouldClipToGrid) {\n      if (chartType === \"bar\" && !w.globals.isBarHorizontal || w.globals.comboCharts) {\n        el.attr({\n          \"clip-path\": `url(#gridRectBarMask${w.globals.cuid})`\n        });\n      } else {\n        el.attr({\n          \"clip-path\": `url(#gridRectMask${w.globals.cuid})`\n        });\n      }\n    }\n    if (w.config.chart.dropShadow.enabled && drawShadow) {\n      filters.dropShadow(el, w.config.chart.dropShadow, realIndex);\n    }\n    if (bindEventsOnPaths) {\n      el.node.addEventListener(\"mouseenter\", this.pathMouseEnter.bind(this, el));\n      el.node.addEventListener(\"mouseleave\", this.pathMouseLeave.bind(this, el));\n      el.node.addEventListener(\"mousedown\", this.pathMouseDown.bind(this, el));\n    }\n    el.attr({\n      pathTo,\n      pathFrom\n    });\n    const defaultAnimateOpts = {\n      el,\n      j,\n      realIndex,\n      pathFrom,\n      pathTo,\n      fill,\n      strokeWidth,\n      delay: animationDelay\n    };\n    if (initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n      if (useDrawMode) {\n        const drawSpeed = initialSpeed * 2;\n        const isFill = stroke === \"none\" || strokeWidth === 0;\n        const seriesCount = w.seriesData.series.length;\n        const isLast = w.globals.comboCharts ? true : realIndex === seriesCount - 1;\n        anim.animateDraw(el, {\n          realIndex,\n          j,\n          isFill,\n          isLast,\n          speed: drawSpeed,\n          delay: 0,\n          mask: drawMask\n        });\n      } else if (!revealViaFade) {\n        anim.animatePathsGradually(__spreadProps(__spreadValues({}, defaultAnimateOpts), {\n          speed: initialSpeed\n        }));\n      }\n    } else {\n      if ((w.globals.resized || !w.globals.dataChanged) && !revealViaFade) {\n        anim.showDelayedElements();\n      }\n    }\n    if (w.globals.dataChanged && dynamicAnim && shouldAnimate && !revealViaFade) {\n      anim.animatePathsGradually(__spreadProps(__spreadValues({}, defaultAnimateOpts), {\n        speed: dataChangeSpeed\n      }));\n    }\n    if (revealViaFade) {\n      anim.revealBulk(el);\n    }\n    return el;\n  }\n  /**\n   * @param {string} style\n   * @param {number} width\n   * @param {number} height\n   */\n  drawPattern(style, width, height, stroke = \"#a8a8a8\", strokeWidth = 0) {\n    const w = this.w;\n    const p = w.dom.Paper.pattern(width, height, (add) => {\n      if (style === \"horizontalLines\") {\n        add.line(0, 0, height, 0).stroke({ color: stroke, width: strokeWidth + 1 });\n      } else if (style === \"verticalLines\") {\n        add.line(0, 0, 0, width).stroke({ color: stroke, width: strokeWidth + 1 });\n      } else if (style === \"slantedLines\") {\n        add.line(0, 0, width, height).stroke({ color: stroke, width: strokeWidth });\n      } else if (style === \"squares\") {\n        add.rect(width, height).fill(\"none\").stroke({ color: stroke, width: strokeWidth });\n      } else if (style === \"circles\") {\n        add.circle(width).fill(\"none\").stroke({ color: stroke, width: strokeWidth });\n      }\n    });\n    return p;\n  }\n  /**\n   * @param {string} style\n   * @param {string} gfrom\n   * @param {string} gto\n   * @param {number} opacityFrom\n   * @param {number} opacityTo\n   * @param {number | null} [size]\n   * @param {number[] | null} stops\n   * @param {any[]} colorStops\n   */\n  drawGradient(style, gfrom, gto, opacityFrom, opacityTo, size = null, stops = null, colorStops = [], i = 0) {\n    const w = this.w;\n    let g;\n    if (gfrom.length < 9 && gfrom.indexOf(\"#\") === 0) {\n      gfrom = Utils$1.hexToRgba(gfrom, opacityFrom);\n    }\n    if (gto.length < 9 && gto.indexOf(\"#\") === 0) {\n      gto = Utils$1.hexToRgba(gto, opacityTo);\n    }\n    let stop1 = 0;\n    let stop2 = 1;\n    let stop3 = 1;\n    let stop4 = null;\n    if (stops !== null) {\n      stop1 = typeof stops[0] !== \"undefined\" ? stops[0] / 100 : 0;\n      stop2 = typeof stops[1] !== \"undefined\" ? stops[1] / 100 : 1;\n      stop3 = typeof stops[2] !== \"undefined\" ? stops[2] / 100 : 1;\n      stop4 = typeof stops[3] !== \"undefined\" ? stops[3] / 100 : null;\n    }\n    const radial = !!(w.config.chart.type === \"donut\" || w.config.chart.type === \"pie\" || w.config.chart.type === \"polarArea\" || w.config.chart.type === \"bubble\");\n    if (!colorStops || colorStops.length === 0) {\n      g = w.dom.Paper.gradient(\n        radial ? \"radial\" : \"linear\",\n        (add) => {\n          add.stop(stop1, gfrom, opacityFrom);\n          add.stop(stop2, gto, opacityTo);\n          add.stop(stop3, gto, opacityTo);\n          if (stop4 !== null) {\n            add.stop(stop4, gfrom, opacityFrom);\n          }\n        }\n      );\n    } else {\n      g = w.dom.Paper.gradient(\n        radial ? \"radial\" : \"linear\",\n        (add) => {\n          const gradientStops = Array.isArray(colorStops[i]) ? colorStops[i] : colorStops;\n          gradientStops.forEach((s) => {\n            add.stop(s.offset / 100, s.color, s.opacity);\n          });\n        }\n      );\n    }\n    if (!radial) {\n      if (style === \"vertical\") {\n        g.from(0, 0).to(0, 1);\n      } else if (style === \"diagonal\") {\n        g.from(0, 0).to(1, 1);\n      } else if (style === \"horizontal\") {\n        g.from(0, 1).to(1, 1);\n      } else if (style === \"diagonal2\") {\n        g.from(1, 0).to(0, 1);\n      }\n    } else {\n      const offx = w.layout.gridWidth / 2;\n      const offy = w.layout.gridHeight / 2;\n      if (w.config.chart.type !== \"bubble\") {\n        g.attr({\n          gradientUnits: \"userSpaceOnUse\",\n          cx: offx,\n          cy: offy,\n          r: size\n        });\n      } else {\n        g.attr({\n          cx: 0.5,\n          cy: 0.5,\n          r: 0.8,\n          fx: 0.2,\n          fy: 0.2\n        });\n      }\n    }\n    return g;\n  }\n  /** @param {{ text: any, maxWidth: any, fontSize: any, fontFamily?: any }} opts */\n  getTextBasedOnMaxWidth({ text, maxWidth, fontSize, fontFamily }) {\n    const tRects = this.getTextRects(text, fontSize, fontFamily, \"\");\n    const wordWidth = tRects.width / text.length;\n    const wordsBasedOnWidth = Math.floor(maxWidth / wordWidth);\n    if (maxWidth < tRects.width) {\n      return text.slice(0, wordsBasedOnWidth - 3) + \"...\";\n    }\n    return text;\n  }\n  /**\n   * @param {{ x: any, y: any, text: any, textAnchor?: any, fontSize?: any, fontFamily?: any, fontWeight?: any, foreColor?: any, opacity?: any, maxWidth?: any, cssClass?: string, isPlainText?: boolean, dominantBaseline?: string }} opts\n   */\n  drawText({\n    x,\n    y,\n    text,\n    textAnchor,\n    fontSize,\n    fontFamily,\n    fontWeight,\n    foreColor,\n    opacity,\n    maxWidth,\n    cssClass = \"\",\n    isPlainText = true,\n    dominantBaseline = \"auto\"\n  }) {\n    const w = this.w;\n    if (typeof text === \"undefined\") text = \"\";\n    let truncatedText = text;\n    if (!textAnchor) {\n      textAnchor = \"start\";\n    }\n    if (!foreColor || !foreColor.length) {\n      foreColor = w.config.chart.foreColor;\n    }\n    fontFamily = fontFamily || w.config.chart.fontFamily;\n    fontSize = fontSize || \"11px\";\n    fontWeight = fontWeight || \"regular\";\n    const commonProps = {\n      maxWidth,\n      fontSize,\n      fontFamily\n    };\n    let elText;\n    if (Array.isArray(text)) {\n      elText = w.dom.Paper.text((add) => {\n        for (let i = 0; i < text.length; i++) {\n          truncatedText = text[i];\n          if (maxWidth) {\n            truncatedText = this.getTextBasedOnMaxWidth(__spreadValues({\n              text: text[i]\n            }, commonProps));\n          }\n          i === 0 ? add.tspan(truncatedText) : add.tspan(truncatedText).newLine();\n        }\n      });\n    } else {\n      if (maxWidth) {\n        truncatedText = this.getTextBasedOnMaxWidth(__spreadValues({\n          text\n        }, commonProps));\n      }\n      elText = isPlainText ? w.dom.Paper.plain(text) : (\n        /**\n         * @param {any} add\n         */\n        w.dom.Paper.text((add) => add.tspan(truncatedText))\n      );\n    }\n    elText.attr({\n      x,\n      y,\n      \"text-anchor\": textAnchor,\n      \"dominant-baseline\": dominantBaseline,\n      \"font-size\": fontSize,\n      \"font-family\": fontFamily,\n      \"font-weight\": fontWeight,\n      fill: foreColor,\n      class: \"apexcharts-text \" + cssClass\n    });\n    elText.node.style.fontFamily = fontFamily;\n    elText.node.style.opacity = opacity;\n    return elText;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {string} type\n   * @param {number} size\n   */\n  getMarkerPath(x, y, type, size) {\n    let d = \"\";\n    switch (type) {\n      case \"cross\":\n        size = size / 1.4;\n        d = `M ${x - size} ${y - size} L ${x + size} ${y + size}  M ${x - size} ${y + size} L ${x + size} ${y - size}`;\n        break;\n      case \"plus\":\n        size = size / 1.12;\n        d = `M ${x - size} ${y} L ${x + size} ${y}  M ${x} ${y - size} L ${x} ${y + size}`;\n        break;\n      case \"star\":\n      case \"sparkle\": {\n        let points = 5;\n        size = size * 1.15;\n        if (type === \"sparkle\") {\n          size = size / 1.1;\n          points = 4;\n        }\n        const step = Math.PI / points;\n        for (let i = 0; i <= 2 * points; i++) {\n          const angle = i * step;\n          const radius = i % 2 === 0 ? size : size / 2;\n          const xPos = x + radius * Math.sin(angle);\n          const yPos = y - radius * Math.cos(angle);\n          d += (i === 0 ? \"M\" : \"L\") + xPos + \",\" + yPos;\n        }\n        d += \"Z\";\n        break;\n      }\n      case \"triangle\":\n        d = `M ${x} ${y - size} \n             L ${x + size} ${y + size} \n             L ${x - size} ${y + size} \n             Z`;\n        break;\n      case \"square\":\n      case \"rect\":\n        size = size / 1.125;\n        d = `M ${x - size} ${y - size} \n           L ${x + size} ${y - size} \n           L ${x + size} ${y + size} \n           L ${x - size} ${y + size} \n           Z`;\n        break;\n      case \"diamond\":\n        size = size * 1.05;\n        d = `M ${x} ${y - size} \n             L ${x + size} ${y} \n             L ${x} ${y + size} \n             L ${x - size} ${y} \n            Z`;\n        break;\n      case \"line\":\n        size = size / 1.1;\n        d = `M ${x - size} ${y} \n           L ${x + size} ${y}`;\n        break;\n      case \"circle\":\n      default:\n        size = size * 2;\n        d = `M ${x}, ${y} \n           m -${size / 2}, 0 \n           a ${size / 2},${size / 2} 0 1,0 ${size},0 \n           a ${size / 2},${size / 2} 0 1,0 -${size},0`;\n        break;\n    }\n    return d;\n  }\n  /**\n   * @param {number} x - The x-coordinate of the marker\n   * @param {number} y - The y-coordinate of the marker\n   * @param {string} type - Marker shape type\n   * @param {number} size - The size of the marker\n   * @param {Record<string, any>} opts - The options for the marker\n   * @returns {any} The created marker.\n   */\n  drawMarkerShape(x, y, type, size, opts) {\n    const path = this.drawPath({\n      d: this.getMarkerPath(x, y, type, size),\n      stroke: opts.pointStrokeColor,\n      strokeDashArray: opts.pointStrokeDashArray,\n      strokeWidth: opts.pointStrokeWidth,\n      fill: opts.pointFillColor,\n      fillOpacity: opts.pointFillOpacity,\n      strokeOpacity: opts.pointStrokeOpacity\n    });\n    path.attr({\n      cx: x,\n      cy: y,\n      shape: opts.shape,\n      class: opts.class ? opts.class : \"\"\n    });\n    return path;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {Record<string, any>} opts\n   */\n  drawMarker(x, y, opts) {\n    x = x || 0;\n    let size = opts.pSize || 0;\n    if (!Utils$1.isNumber(y)) {\n      size = 0;\n      y = 0;\n    }\n    return this.drawMarkerShape(x, y, opts == null ? void 0 : opts.shape, size, __spreadValues(__spreadValues({}, opts), opts.shape === \"line\" || opts.shape === \"plus\" || opts.shape === \"cross\" ? {\n      pointStrokeColor: opts.pointFillColor,\n      pointStrokeOpacity: opts.pointFillOpacity\n    } : {}));\n  }\n  /**\n   * @param {any} path\n   * @param {Event | null} [e]\n   */\n  pathMouseEnter(path, e) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const i = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i) || isNaN(j)) return;\n    if (typeof w.config.chart.events.dataPointMouseEnter === \"function\") {\n      w.config.chart.events.dataPointMouseEnter(e, this.ctx, {\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    Graphics._fireEvent(w, \"dataPointMouseEnter\", [\n      e,\n      this.ctx,\n      { seriesIndex: i, dataPointIndex: j, w }\n    ]);\n    if (w.config.states.active.filter.type !== \"none\") {\n      if (path.node.getAttribute(\"selected\") === \"true\") {\n        return;\n      }\n    }\n    if (w.config.states.hover.filter.type !== \"none\") {\n      if (!w.interact.isTouchDevice) {\n        const hoverFilter = w.config.states.hover.filter;\n        filters.applyFilter(path, i, hoverFilter.type);\n      }\n    }\n  }\n  /**\n   * @param {any} path\n   * @param {Event | null} [e]\n   */\n  pathMouseLeave(path, e) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const i = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i) || isNaN(j)) return;\n    if (typeof w.config.chart.events.dataPointMouseLeave === \"function\") {\n      w.config.chart.events.dataPointMouseLeave(e, this.ctx, {\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    Graphics._fireEvent(w, \"dataPointMouseLeave\", [\n      e,\n      this.ctx,\n      { seriesIndex: i, dataPointIndex: j, w }\n    ]);\n    if (w.config.states.active.filter.type !== \"none\") {\n      if (path.node.getAttribute(\"selected\") === \"true\") {\n        return;\n      }\n    }\n    if (w.config.states.hover.filter.type !== \"none\") {\n      filters.getDefaultFilter(path, i);\n    }\n  }\n  /**\n   * @param {any} path\n   * @param {Event | null} e\n   */\n  pathMouseDown(path, e) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const i = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i) || isNaN(j)) return;\n    let selected = \"false\";\n    if (path.node.getAttribute(\"selected\") === \"true\") {\n      path.node.setAttribute(\"selected\", \"false\");\n      const index = w.interact.selectedDataPoints[i].indexOf(j);\n      if (index > -1) {\n        w.interact.selectedDataPoints[i].splice(index, 1);\n      }\n    } else {\n      if (!w.config.states.active.allowMultipleDataPointsSelection && w.interact.selectedDataPoints.length > 0) {\n        w.interact.selectedDataPoints = [];\n        const elPaths = w.dom.Paper.find(\n          \".apexcharts-series path:not(.apexcharts-decoration-element)\"\n        );\n        const elCircles = w.dom.Paper.find(\n          \".apexcharts-series circle:not(.apexcharts-decoration-element), .apexcharts-series rect:not(.apexcharts-decoration-element)\"\n        );\n        const deSelect = (els) => {\n          Array.prototype.forEach.call(els, (el) => {\n            el.node.setAttribute(\"selected\", \"false\");\n            filters.getDefaultFilter(el, i);\n          });\n        };\n        deSelect(elPaths);\n        deSelect(elCircles);\n      }\n      path.node.setAttribute(\"selected\", \"true\");\n      selected = \"true\";\n      if (typeof w.interact.selectedDataPoints[i] === \"undefined\") {\n        w.interact.selectedDataPoints[i] = [];\n      }\n      w.interact.selectedDataPoints[i].push(j);\n    }\n    if (selected === \"true\") {\n      const activeFilter = w.config.states.active.filter;\n      if (activeFilter !== \"none\") {\n        filters.applyFilter(path, i, activeFilter.type);\n      } else {\n        if (w.config.states.hover.filter !== \"none\") {\n          if (!w.interact.isTouchDevice) {\n            const hoverFilter = w.config.states.hover.filter;\n            filters.applyFilter(path, i, hoverFilter.type);\n          }\n        }\n      }\n    } else {\n      if (w.config.states.active.filter.type !== \"none\") {\n        if (w.config.states.hover.filter.type !== \"none\" && !w.interact.isTouchDevice) {\n          const hoverFilter = w.config.states.hover.filter;\n          filters.applyFilter(path, i, hoverFilter.type);\n        } else {\n          filters.getDefaultFilter(path, i);\n        }\n      }\n    }\n    if (typeof w.config.chart.events.dataPointSelection === \"function\") {\n      w.config.chart.events.dataPointSelection(e, this.ctx, {\n        selectedDataPoints: w.interact.selectedDataPoints,\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    if (e) {\n      Graphics._fireEvent(w, \"dataPointSelection\", [\n        e,\n        this.ctx,\n        {\n          selectedDataPoints: w.interact.selectedDataPoints,\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        }\n      ]);\n    }\n  }\n  /**\n   * @param {any} el\n   * @returns {{ x: number, y: number }}\n   */\n  rotateAroundCenter(el) {\n    let coord = (\n      /** @type {any} */\n      {}\n    );\n    if (el && typeof el.getBBox === \"function\") {\n      coord = el.getBBox();\n    }\n    const x = coord.x + coord.width / 2;\n    const y = coord.y + coord.height / 2;\n    return {\n      x,\n      y\n    };\n  }\n  /**\n   * Sets up event delegation on a parent group element.\n   * Uses mouseover/mouseout (which bubble) to simulate mouseenter/mouseleave\n   * on matching child elements, reducing per-element listener overhead.\n   * @param {any} parentGroup\n   * @param {string} targetSelector\n   */\n  setupEventDelegation(parentGroup, targetSelector) {\n    let currentHovered = null;\n    parentGroup.node.addEventListener(\"mouseover\", (e) => {\n      const targetNode = Graphics._findDelegateTarget(\n        e.target,\n        parentGroup.node,\n        targetSelector\n      );\n      if (!targetNode || targetNode === currentHovered) return;\n      if (currentHovered && /** @type {any} */\n      currentHovered.instance) {\n        this.pathMouseLeave(\n          /** @type {any} */\n          currentHovered.instance,\n          e\n        );\n      }\n      currentHovered = targetNode;\n      if (targetNode.instance) {\n        this.pathMouseEnter(targetNode.instance, e);\n      }\n    });\n    parentGroup.node.addEventListener(\"mouseout\", (e) => {\n      if (!currentHovered) return;\n      const relatedNode = e.relatedTarget ? Graphics._findDelegateTarget(\n        e.relatedTarget,\n        parentGroup.node,\n        targetSelector\n      ) : null;\n      if (relatedNode !== currentHovered) {\n        if (currentHovered && /** @type {any} */\n        currentHovered.instance) {\n          this.pathMouseLeave(\n            /** @type {any} */\n            currentHovered.instance,\n            e\n          );\n        }\n        currentHovered = null;\n      }\n    });\n    parentGroup.node.addEventListener(\"mousedown\", (e) => {\n      const targetNode = Graphics._findDelegateTarget(\n        e.target,\n        parentGroup.node,\n        targetSelector\n      );\n      if (targetNode && targetNode.instance) {\n        this.pathMouseDown(targetNode.instance, e);\n      }\n    });\n  }\n  // Fire a named event from w.globals.events without requiring a ctx reference.\n  // Mirrors Events.fireEvent() but reads the registry directly from w so that\n  // pathMouseEnter/Leave/Down work even when this.ctx is null (Graphics instances\n  // created without a ctx arg for drawing-only use cases).\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {string} name\n   * @param {any[]} args\n   */\n  static _fireEvent(w, name2, args) {\n    const evs = w.globals.events;\n    if (!evs || !Object.prototype.hasOwnProperty.call(evs, name2)) return;\n    const handlers = (\n      /** @type {Record<string,any>} */\n      evs[name2]\n    );\n    for (let i = 0; i < handlers.length; i++) {\n      handlers[i].apply(null, args);\n    }\n  }\n  /**\n   * @param {any} node\n   * @param {Record<string, any>} boundary\n   * @param {string} selector\n   */\n  static _findDelegateTarget(node, boundary, selector) {\n    while (node && node !== boundary && node !== document) {\n      if (node.matches && node.matches(selector)) return node;\n      node = node.parentNode;\n    }\n    return null;\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} attrs\n   */\n  static setAttrs(el, attrs) {\n    for (const key in attrs) {\n      if (Object.prototype.hasOwnProperty.call(attrs, key)) {\n        el.setAttribute(key, attrs[key]);\n      }\n    }\n  }\n  /**\n   * @param {string} text\n   * @param {string} fontSize\n   * @param {string | null | undefined} [fontFamily]\n   * @param {string} [transform]\n   * @returns {{ width: number, height: number }}\n   */\n  getTextRects(text, fontSize, fontFamily, transform, useBBox = true) {\n    const w = this.w;\n    const cacheKey = [text, fontSize, fontFamily, transform, useBBox].join(\"\\0\");\n    const cache = w.globals.textRectsCache;\n    if (cache && cache.has(cacheKey)) {\n      return (\n        /** @type {{ width: number, height: number }} */\n        cache.get(cacheKey)\n      );\n    }\n    const virtualText = this.drawText({\n      x: -200,\n      y: -200,\n      text,\n      textAnchor: \"start\",\n      fontSize,\n      fontFamily,\n      foreColor: \"#fff\",\n      opacity: 0\n    });\n    if (transform) {\n      virtualText.attr(\"transform\", transform);\n    }\n    w.dom.Paper.add(virtualText);\n    let rect = virtualText.bbox();\n    const bboxY = rect.y;\n    if (!useBBox) {\n      rect = virtualText.node.getBoundingClientRect();\n    }\n    virtualText.remove();\n    const result = {\n      width: rect.width,\n      height: rect.height,\n      // Offset from the text element's `y` (alphabetic baseline) to the\n      // bbox vertical center. For most fonts this is NEGATIVE (bbox center\n      // sits above the baseline because the ascender is taller than the\n      // descender). Use as: `text_y = desired_visual_center_y - centerOffset`.\n      // Only populated when useBBox=true (the default).\n      centerOffset: useBBox ? bboxY + rect.height / 2 - -200 : 0\n    };\n    if (cache) {\n      cache.set(cacheKey, result);\n    }\n    return result;\n  }\n  /**\n   * append ... to long text\n   * http://stackoverflow.com/questions/9241315/trimming-text-to-a-given-pixel-width-in-svg\n   * @memberof Graphics\n   * @param {Record<string, any>} textObj\n   * @param {string} textString\n   * @param {number} width\n   **/\n  placeTextWithEllipsis(textObj, textString, width) {\n    if (typeof textObj.getComputedTextLength !== \"function\") return;\n    textObj.textContent = textString;\n    if (textString.length > 0) {\n      if (textObj.getComputedTextLength() >= width / 1.1) {\n        for (let x = textString.length - 3; x > 0; x -= 3) {\n          if (textObj.getSubStringLength(0, x) <= width / 1.1) {\n            textObj.textContent = textString.substring(0, x) + \"...\";\n            return;\n          }\n        }\n        textObj.textContent = \".\";\n      }\n    }\n  }\n}\nconst SVGNS = \"http://www.w3.org/2000/svg\";\nclass Point {\n  /**\n   * @param {number|{x:number,y:number}} x\n   * @param {number} [y]\n   */\n  constructor(x, y) {\n    if (typeof x === \"object\") {\n      this.x = x.x;\n      this.y = x.y;\n    } else {\n      this.x = x || 0;\n      this.y = y || 0;\n    }\n  }\n  /**\n   * @param {Matrix} matrix\n   */\n  transform(matrix) {\n    return matrix.apply(this);\n  }\n  clone() {\n    return new Point(this.x, this.y);\n  }\n}\nclass Matrix {\n  /**\n   * Defaults to the identity matrix when called with no args.\n   * @param {number} [a]\n   * @param {number} [b]\n   * @param {number} [c]\n   * @param {number} [d]\n   * @param {number} [e]\n   * @param {number} [f]\n   */\n  constructor(a, b, c, d, e, f) {\n    this.a = a != null ? a : 1;\n    this.b = b != null ? b : 0;\n    this.c = c != null ? c : 0;\n    this.d = d != null ? d : 1;\n    this.e = e != null ? e : 0;\n    this.f = f != null ? f : 0;\n  }\n  /**\n   * @param {number} deg\n   */\n  rotate(deg) {\n    const rad = deg * Math.PI / 180;\n    const cos = Math.cos(rad);\n    const sin = Math.sin(rad);\n    return this.multiply(new Matrix(cos, sin, -sin, cos, 0, 0));\n  }\n  /**\n   * @param {number} sx\n   * @param {number} sy\n   */\n  scale(sx, sy) {\n    return this.multiply(new Matrix(sx, 0, 0, sy != null ? sy : sx, 0, 0));\n  }\n  /**\n   * @param {Matrix} m\n   */\n  multiply(m) {\n    return new Matrix(\n      this.a * m.a + this.c * m.b,\n      this.b * m.a + this.d * m.b,\n      this.a * m.c + this.c * m.d,\n      this.b * m.c + this.d * m.d,\n      this.a * m.e + this.c * m.f + this.e,\n      this.b * m.e + this.d * m.f + this.f\n    );\n  }\n  /**\n   * @param {Point} point\n   */\n  apply(point) {\n    return new Point(\n      this.a * point.x + this.c * point.y + this.e,\n      this.b * point.x + this.d * point.y + this.f\n    );\n  }\n}\nclass Box {\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number} w\n   * @param {number} h\n   */\n  constructor(x, y, w, h) {\n    this.x = x;\n    this.y = y;\n    this.w = w;\n    this.h = h;\n    this.width = w;\n    this.height = h;\n    this.x2 = x + w;\n    this.y2 = y + h;\n  }\n}\nclass Fill {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.opts = null;\n    this.seriesIndex = 0;\n    this.patternIDs = [];\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  clippedImgArea(params) {\n    const w = this.w;\n    const cnf = w.config;\n    const svgW = parseInt(String(w.layout.gridWidth), 10);\n    const svgH = parseInt(String(w.layout.gridHeight), 10);\n    const size = svgW > svgH ? svgW : svgH;\n    const fillImg = params.image;\n    let imgWidth = 0;\n    let imgHeight = 0;\n    if (typeof params.width === \"undefined\" && typeof params.height === \"undefined\") {\n      if (cnf.fill.image.width !== void 0 && cnf.fill.image.height !== void 0) {\n        imgWidth = cnf.fill.image.width + 1;\n        imgHeight = cnf.fill.image.height;\n      } else {\n        imgWidth = size + 1;\n        imgHeight = size;\n      }\n    } else {\n      imgWidth = params.width;\n      imgHeight = params.height;\n    }\n    const elPattern = BrowserAPIs.createElementNS(SVGNS, \"pattern\");\n    Graphics.setAttrs(elPattern, {\n      id: params.patternID,\n      patternUnits: params.patternUnits ? params.patternUnits : \"userSpaceOnUse\",\n      width: imgWidth + \"px\",\n      height: imgHeight + \"px\"\n    });\n    const elImage = BrowserAPIs.createElementNS(SVGNS, \"image\");\n    elPattern.appendChild(elImage);\n    const SVGLib = Environment.isBrowser() ? (\n      /** @type {any} */\n      window.SVG\n    ) : (\n      /** @type {any} */\n      global.SVG\n    );\n    elImage.setAttributeNS(SVGLib.xlink, \"href\", fillImg);\n    Graphics.setAttrs(elImage, {\n      x: 0,\n      y: 0,\n      preserveAspectRatio: \"none\",\n      width: imgWidth + \"px\",\n      height: imgHeight + \"px\"\n    });\n    elImage.style.opacity = params.opacity;\n    w.dom.elDefs.node.appendChild(elPattern);\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  getSeriesIndex(opts) {\n    const w = this.w;\n    const cType = w.config.chart.type;\n    if ((cType === \"bar\" || cType === \"rangeBar\") && w.config.plotOptions.bar.distributed || cType === \"heatmap\" || cType === \"treemap\") {\n      this.seriesIndex = opts.seriesNumber;\n    } else {\n      this.seriesIndex = opts.seriesNumber % w.seriesData.series.length;\n    }\n    return this.seriesIndex;\n  }\n  /**\n   * @param {number[]} data\n   * @param {Record<string, any>} multiColorConfig\n   */\n  computeColorStops(data, multiColorConfig) {\n    const w = this.w;\n    let maxPositive = null;\n    let minNegative = null;\n    for (const value of data) {\n      if (value >= multiColorConfig.threshold) {\n        if (maxPositive === null || value > maxPositive) {\n          maxPositive = value;\n        }\n      } else {\n        if (minNegative === null || value < minNegative) {\n          minNegative = value;\n        }\n      }\n    }\n    if (maxPositive === null) {\n      maxPositive = multiColorConfig.threshold;\n    }\n    if (minNegative === null) {\n      minNegative = multiColorConfig.threshold;\n    }\n    let totalRange = maxPositive - multiColorConfig.threshold + (multiColorConfig.threshold - minNegative);\n    if (totalRange === 0) {\n      totalRange = 1;\n    }\n    const negativePercentage = (multiColorConfig.threshold - minNegative) / totalRange * 100;\n    let offset = 100 - negativePercentage;\n    offset = Math.max(0, Math.min(offset, 100));\n    return [\n      {\n        offset,\n        color: multiColorConfig.colorAboveThreshold,\n        opacity: w.config.fill.opacity\n      },\n      {\n        offset: 0,\n        color: multiColorConfig.colorBelowThreshold,\n        opacity: w.config.fill.opacity\n      }\n    ];\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  fillPath(opts) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    this.opts = opts;\n    const cnf = this.w.config;\n    let pathFill;\n    let patternFill, gradientFill;\n    this.seriesIndex = this.getSeriesIndex(opts);\n    const drawMultiColorLine = cnf.plotOptions.line.colors.colorAboveThreshold && cnf.plotOptions.line.colors.colorBelowThreshold;\n    const fillColors = this.getFillColors();\n    let fillColor = fillColors[this.seriesIndex];\n    if (w.seriesData.seriesColors[this.seriesIndex] !== void 0) {\n      fillColor = w.seriesData.seriesColors[this.seriesIndex];\n    }\n    if (typeof fillColor === \"function\") {\n      fillColor = fillColor({\n        seriesIndex: this.seriesIndex,\n        dataPointIndex: opts.dataPointIndex,\n        value: opts.value,\n        w\n      });\n    }\n    const fillType = opts.fillType ? opts.fillType : this.getFillType(this.seriesIndex);\n    let fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity;\n    const useGradient = fillType === \"gradient\" || drawMultiColorLine;\n    if (opts.color) {\n      fillColor = opts.color;\n    }\n    const seriesItem = (\n      /** @type {Record<string,any>} */\n      w.config.series[this.seriesIndex]\n    );\n    if ((_b = (_a = seriesItem == null ? void 0 : seriesItem.data) == null ? void 0 : _a[opts.dataPointIndex]) == null ? void 0 : _b.fillColor) {\n      fillColor = (_d = (_c = seriesItem == null ? void 0 : seriesItem.data) == null ? void 0 : _c[opts.dataPointIndex]) == null ? void 0 : _d.fillColor;\n    }\n    if (!fillColor) {\n      fillColor = \"#fff\";\n      console.warn(\"undefined color - ApexCharts\");\n    }\n    if (opts.opacity !== void 0 && opts.opacity !== null) fillOpacity = opts.opacity;\n    let defaultColor = fillColor;\n    if (Utils$1.isCSSVariable(fillColor)) {\n      defaultColor = Utils$1.applyOpacityToColor(fillColor, fillOpacity);\n    } else if (fillColor.indexOf(\"rgb\") === -1) {\n      if (fillColor.indexOf(\"#\") === -1) {\n        defaultColor = fillColor;\n      } else if (fillColor.length < 9) {\n        defaultColor = Utils$1.hexToRgba(fillColor, fillOpacity);\n      }\n    } else {\n      if (fillColor.indexOf(\"rgba\") > -1) {\n        fillOpacity = Utils$1.getOpacityFromRGBA(fillColor);\n      } else {\n        defaultColor = Utils$1.hexToRgba(Utils$1.rgb2hex(fillColor), fillOpacity);\n      }\n    }\n    const resolvedFillColor = Utils$1.isCSSVariable(fillColor) ? Utils$1.getThemeColor(fillColor) : fillColor;\n    if (fillType === \"pattern\") {\n      patternFill = this.handlePatternFill({\n        fillConfig: opts.fillConfig,\n        patternFill,\n        fillColor: resolvedFillColor,\n        defaultColor\n      });\n    }\n    if (useGradient) {\n      const colorStops = cnf.fill.gradient.colorStops ? [...cnf.fill.gradient.colorStops] : [];\n      let type = cnf.fill.gradient.type;\n      if (drawMultiColorLine) {\n        colorStops[this.seriesIndex] = this.computeColorStops(\n          w.seriesData.series[this.seriesIndex],\n          cnf.plotOptions.line.colors\n        );\n        type = \"vertical\";\n      }\n      gradientFill = this.handleGradientFill({\n        type,\n        fillConfig: opts.fillConfig,\n        fillColor: resolvedFillColor,\n        fillOpacity,\n        colorStops,\n        i: this.seriesIndex\n      });\n    }\n    if (fillType === \"image\") {\n      const imgSrc = cnf.fill.image.src;\n      const patternID = opts.patternID ? opts.patternID : \"\";\n      const patternKey = `pattern${w.globals.cuid}${opts.seriesNumber + 1}${patternID}`;\n      if (this.patternIDs.indexOf(patternKey) === -1) {\n        this.clippedImgArea({\n          opacity: fillOpacity,\n          image: Array.isArray(imgSrc) ? opts.seriesNumber < imgSrc.length ? imgSrc[opts.seriesNumber] : imgSrc[0] : imgSrc,\n          width: opts.width ? opts.width : void 0,\n          height: opts.height ? opts.height : void 0,\n          patternUnits: opts.patternUnits,\n          patternID: patternKey\n        });\n        this.patternIDs.push(patternKey);\n      }\n      pathFill = `url(#${patternKey})`;\n    } else if (useGradient) {\n      pathFill = gradientFill;\n    } else if (fillType === \"pattern\") {\n      pathFill = patternFill;\n    } else {\n      pathFill = defaultColor;\n    }\n    if (opts.solid) {\n      pathFill = defaultColor;\n    }\n    return pathFill;\n  }\n  /**\n   * @param {number} seriesIndex\n   */\n  getFillType(seriesIndex) {\n    const w = this.w;\n    if (Array.isArray(w.config.fill.type)) {\n      return w.config.fill.type[seriesIndex];\n    } else {\n      return w.config.fill.type;\n    }\n  }\n  getFillColors() {\n    const w = this.w;\n    const cnf = w.config;\n    const opts = this.opts;\n    let fillColors = [];\n    if (w.globals.comboCharts) {\n      if (\n        /** @type {Record<string,any>} */\n        w.config.series[this.seriesIndex].type === \"line\"\n      ) {\n        if (Array.isArray(w.globals.stroke.colors)) {\n          fillColors = w.globals.stroke.colors;\n        } else {\n          fillColors.push(w.globals.stroke.colors);\n        }\n      } else {\n        if (Array.isArray(w.globals.fill.colors)) {\n          fillColors = w.globals.fill.colors;\n        } else {\n          fillColors.push(w.globals.fill.colors);\n        }\n      }\n    } else {\n      if (cnf.chart.type === \"line\") {\n        if (Array.isArray(w.globals.stroke.colors)) {\n          fillColors = w.globals.stroke.colors;\n        } else {\n          fillColors.push(w.globals.stroke.colors);\n        }\n      } else {\n        if (Array.isArray(w.globals.fill.colors)) {\n          fillColors = w.globals.fill.colors;\n        } else {\n          fillColors.push(w.globals.fill.colors);\n        }\n      }\n    }\n    if (typeof opts.fillColors !== \"undefined\") {\n      fillColors = [];\n      if (Array.isArray(opts.fillColors)) {\n        fillColors = opts.fillColors.slice();\n      } else {\n        fillColors.push(opts.fillColors);\n      }\n    }\n    return fillColors;\n  }\n  /** @param {{fillConfig: any, patternFill: any, fillColor: any, defaultColor: any}} opts */\n  handlePatternFill({ fillConfig, patternFill, fillColor, defaultColor }) {\n    let fillCnf = this.w.config.fill;\n    if (fillConfig) {\n      fillCnf = fillConfig;\n    }\n    const opts = this.opts;\n    const graphics = new Graphics(this.w);\n    const patternStrokeWidth = Array.isArray(fillCnf.pattern.strokeWidth) ? fillCnf.pattern.strokeWidth[this.seriesIndex] : fillCnf.pattern.strokeWidth;\n    const patternLineColor = fillColor;\n    if (Array.isArray(fillCnf.pattern.style)) {\n      if (typeof fillCnf.pattern.style[opts.seriesNumber] !== \"undefined\") {\n        const pf = graphics.drawPattern(\n          fillCnf.pattern.style[opts.seriesNumber],\n          fillCnf.pattern.width,\n          fillCnf.pattern.height,\n          patternLineColor,\n          patternStrokeWidth\n        );\n        patternFill = pf;\n      } else {\n        patternFill = defaultColor;\n      }\n    } else {\n      patternFill = graphics.drawPattern(\n        fillCnf.pattern.style,\n        fillCnf.pattern.width,\n        fillCnf.pattern.height,\n        patternLineColor,\n        patternStrokeWidth\n      );\n    }\n    return patternFill;\n  }\n  handleGradientFill({\n    type,\n    fillColor,\n    fillOpacity,\n    fillConfig,\n    colorStops,\n    i\n  }) {\n    let fillCnf = this.w.config.fill;\n    if (fillConfig) {\n      fillCnf = __spreadValues(__spreadValues({}, fillCnf), fillConfig);\n    }\n    const opts = this.opts;\n    const graphics = new Graphics(this.w);\n    const utils = new Utils$1();\n    type = type || fillCnf.gradient.type;\n    let gradientFrom = fillColor;\n    let gradientTo;\n    let opacityFrom = fillCnf.gradient.opacityFrom === void 0 ? fillOpacity : Array.isArray(fillCnf.gradient.opacityFrom) ? fillCnf.gradient.opacityFrom[i] : fillCnf.gradient.opacityFrom;\n    if (gradientFrom.indexOf(\"rgba\") > -1) {\n      opacityFrom = Utils$1.getOpacityFromRGBA(gradientFrom);\n    }\n    let opacityTo = fillCnf.gradient.opacityTo === void 0 ? fillOpacity : Array.isArray(fillCnf.gradient.opacityTo) ? fillCnf.gradient.opacityTo[i] : fillCnf.gradient.opacityTo;\n    if (fillCnf.gradient.gradientToColors === void 0 || fillCnf.gradient.gradientToColors.length === 0) {\n      if (fillCnf.gradient.shade === \"dark\") {\n        gradientTo = utils.shadeColor(\n          parseFloat(fillCnf.gradient.shadeIntensity) * -1,\n          fillColor.indexOf(\"rgb\") > -1 ? Utils$1.rgb2hex(fillColor) : fillColor\n        );\n      } else {\n        gradientTo = utils.shadeColor(\n          parseFloat(fillCnf.gradient.shadeIntensity),\n          fillColor.indexOf(\"rgb\") > -1 ? Utils$1.rgb2hex(fillColor) : fillColor\n        );\n      }\n    } else {\n      if (fillCnf.gradient.gradientToColors[opts.seriesNumber]) {\n        const gToColor = fillCnf.gradient.gradientToColors[opts.seriesNumber];\n        gradientTo = gToColor;\n        if (gToColor.indexOf(\"rgba\") > -1) {\n          opacityTo = Utils$1.getOpacityFromRGBA(gToColor);\n        }\n      } else {\n        gradientTo = fillColor;\n      }\n    }\n    if (fillCnf.gradient.gradientFrom) {\n      gradientFrom = fillCnf.gradient.gradientFrom;\n    }\n    if (fillCnf.gradient.gradientTo) {\n      gradientTo = fillCnf.gradient.gradientTo;\n    }\n    if (fillCnf.gradient.inverseColors) {\n      const t = gradientFrom;\n      gradientFrom = gradientTo;\n      gradientTo = t;\n    }\n    if (gradientFrom.indexOf(\"rgb\") > -1) {\n      gradientFrom = Utils$1.rgb2hex(gradientFrom);\n    }\n    if (gradientTo.indexOf(\"rgb\") > -1) {\n      gradientTo = Utils$1.rgb2hex(gradientTo);\n    }\n    return graphics.drawGradient(\n      type,\n      gradientFrom,\n      gradientTo,\n      opacityFrom,\n      opacityTo,\n      opts.size,\n      fillCnf.gradient.stops,\n      colorStops,\n      i\n    );\n  }\n}\nclass Markers {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this._filters = new Filters(this.w);\n    this._graphics = new Graphics(this.w, this.ctx);\n  }\n  setGlobalMarkerSize() {\n    const w = this.w;\n    w.globals.markers.size = Array.isArray(w.config.markers.size) ? w.config.markers.size : [w.config.markers.size];\n    if (w.globals.markers.size.length > 0) {\n      if (w.globals.markers.size.length < w.seriesData.series.length + 1) {\n        for (let i = 0; i <= w.seriesData.series.length; i++) {\n          if (typeof w.globals.markers.size[i] === \"undefined\") {\n            w.globals.markers.size.push(w.globals.markers.size[0]);\n          }\n        }\n      }\n    } else {\n      w.globals.markers.size = w.config.series.map(\n        () => (\n          /** @type {number} */\n          w.config.markers.size\n        )\n      );\n    }\n  }\n  /** @param {{ pointsPos?: any, seriesIndex?: any, j?: any, pSize?: any, alwaysDrawMarker?: boolean, isVirtualPoint?: boolean }} opts */\n  plotChartMarkers({\n    pointsPos,\n    seriesIndex,\n    j,\n    pSize,\n    alwaysDrawMarker = false,\n    isVirtualPoint = false\n  }) {\n    const w = this.w;\n    const i = seriesIndex;\n    const p = pointsPos;\n    let elMarkersWrap = null;\n    const graphics = new Graphics(this.w);\n    const hasDiscreteMarkers = w.config.markers.discrete && w.config.markers.discrete.length;\n    if (Array.isArray(p.x)) {\n      for (let q = 0; q < p.x.length; q++) {\n        let markerElement;\n        let dataPointIndex = j;\n        let invalidMarker = !Utils$1.isNumber(p.y[q]);\n        if (w.globals.markers.largestSize === 0 && w.globals.hasNullValues && w.seriesData.series[i][j + 1] !== null && !isVirtualPoint) {\n          invalidMarker = true;\n        }\n        if (j === 1 && q === 0) dataPointIndex = 0;\n        if (j === 1 && q === 1) dataPointIndex = 1;\n        let markerClasses = \"apexcharts-marker\";\n        if ((w.config.chart.type === \"line\" || w.config.chart.type === \"area\") && !w.globals.comboCharts && !w.config.tooltip.intersect) {\n          markerClasses += \" no-pointer-events\";\n        }\n        const shouldMarkerDraw = Array.isArray(w.config.markers.size) ? w.globals.markers.size[seriesIndex] > 0 : w.config.markers.size > 0;\n        if (shouldMarkerDraw || alwaysDrawMarker || hasDiscreteMarkers) {\n          if (!invalidMarker) {\n            markerClasses += ` w${Utils$1.randomId()}`;\n          }\n          const opts = this.getMarkerConfig({\n            cssClass: markerClasses,\n            seriesIndex,\n            dataPointIndex\n          });\n          const _si = (\n            /** @type {Record<string,any>} */\n            w.config.series[i]\n          );\n          if (_si.data[dataPointIndex]) {\n            if (_si.data[dataPointIndex].fillColor) {\n              opts.pointFillColor = _si.data[dataPointIndex].fillColor;\n            }\n            if (_si.data[dataPointIndex].strokeColor) {\n              opts.pointStrokeColor = _si.data[dataPointIndex].strokeColor;\n            }\n          }\n          if (typeof pSize !== \"undefined\") {\n            opts.pSize = pSize;\n          }\n          if (p.x[q] < -w.globals.markers.largestSize || p.x[q] > w.layout.gridWidth + w.globals.markers.largestSize || p.y[q] < -w.globals.markers.largestSize || p.y[q] > w.layout.gridHeight + w.globals.markers.largestSize) {\n            opts.pSize = 0;\n          }\n          if (!invalidMarker) {\n            const shouldCreateMarkerWrap = w.globals.markers.size[seriesIndex] > 0 || alwaysDrawMarker || hasDiscreteMarkers;\n            if (shouldCreateMarkerWrap && !elMarkersWrap) {\n              elMarkersWrap = graphics.group({\n                class: alwaysDrawMarker || hasDiscreteMarkers ? \"\" : \"apexcharts-series-markers\"\n              });\n              elMarkersWrap.attr(\n                \"clip-path\",\n                `url(#gridRectMarkerMask${w.globals.cuid})`\n              );\n              this.setupMarkerDelegation(elMarkersWrap);\n            }\n            markerElement = graphics.drawMarker(p.x[q], p.y[q], opts);\n            markerElement.attr(\"rel\", dataPointIndex);\n            markerElement.attr(\"j\", dataPointIndex);\n            markerElement.attr(\"index\", seriesIndex);\n            markerElement.node.setAttribute(\"default-marker-size\", opts.pSize);\n            applyProgressiveReveal(markerElement, p.x[q], w);\n            this._filters.setSelectionFilter(\n              markerElement,\n              seriesIndex,\n              dataPointIndex\n            );\n            if (elMarkersWrap) {\n              elMarkersWrap.add(markerElement);\n            }\n          }\n        } else {\n          if (typeof w.globals.pointsArray[seriesIndex] === \"undefined\")\n            w.globals.pointsArray[seriesIndex] = [];\n          w.globals.pointsArray[seriesIndex].push([p.x[q], p.y[q]]);\n        }\n      }\n    }\n    return elMarkersWrap;\n  }\n  /** @param {{cssClass: any, seriesIndex: any, dataPointIndex?: any, radius?: any, size?: any, strokeWidth?: any}} opts */\n  getMarkerConfig({\n    cssClass,\n    seriesIndex,\n    dataPointIndex = null,\n    radius = null,\n    size = null,\n    strokeWidth = null\n  }) {\n    const w = this.w;\n    const pStyle = this.getMarkerStyle(seriesIndex);\n    let pSize = size === null ? w.globals.markers.size[seriesIndex] : size;\n    const m = w.config.markers;\n    if (dataPointIndex !== null && m.discrete.length) {\n      m.discrete.map((marker) => {\n        if (marker.seriesIndex === seriesIndex && marker.dataPointIndex === dataPointIndex) {\n          pStyle.pointStrokeColor = marker.strokeColor;\n          pStyle.pointFillColor = marker.fillColor;\n          pSize = marker.size;\n          pStyle.pointShape = marker.shape;\n        }\n      });\n    }\n    return {\n      pSize: radius === null ? pSize : radius,\n      pRadius: radius !== null ? radius : m.radius,\n      pointStrokeWidth: strokeWidth !== null ? strokeWidth : Array.isArray(m.strokeWidth) ? m.strokeWidth[seriesIndex] : m.strokeWidth,\n      pointStrokeColor: pStyle.pointStrokeColor,\n      pointFillColor: pStyle.pointFillColor,\n      shape: pStyle.pointShape || (Array.isArray(m.shape) ? m.shape[seriesIndex] : m.shape),\n      class: cssClass,\n      pointStrokeOpacity: Array.isArray(m.strokeOpacity) ? m.strokeOpacity[seriesIndex] : m.strokeOpacity,\n      pointStrokeDashArray: Array.isArray(m.strokeDashArray) ? m.strokeDashArray[seriesIndex] : m.strokeDashArray,\n      pointFillOpacity: Array.isArray(m.fillOpacity) ? m.fillOpacity[seriesIndex] : m.fillOpacity,\n      seriesIndex\n    };\n  }\n  /**\n   * @param {any} parentGroup\n   */\n  setupMarkerDelegation(parentGroup) {\n    const w = this.w;\n    const selector = \".apexcharts-marker\";\n    this._graphics.setupEventDelegation(parentGroup, selector);\n    parentGroup.node.addEventListener(\"click\", (e) => {\n      if (w.config.markers.onClick) {\n        const targetNode = Graphics._findDelegateTarget(\n          e.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode) w.config.markers.onClick(e);\n      }\n    });\n    parentGroup.node.addEventListener(\"dblclick\", (e) => {\n      if (w.config.markers.onDblClick) {\n        const targetNode = Graphics._findDelegateTarget(\n          e.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode) w.config.markers.onDblClick(e);\n      }\n    });\n    parentGroup.node.addEventListener(\n      \"touchstart\",\n      (e) => {\n        const targetNode = Graphics._findDelegateTarget(\n          e.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode && targetNode.instance) {\n          this._graphics.pathMouseDown(targetNode.instance, e);\n        }\n      },\n      { passive: true }\n    );\n  }\n  /**\n   * @param {any} marker\n   */\n  addEvents(marker) {\n    const w = this.w;\n    marker.node.addEventListener(\n      \"mouseenter\",\n      this._graphics.pathMouseEnter.bind(this.ctx, marker)\n    );\n    marker.node.addEventListener(\n      \"mouseleave\",\n      this._graphics.pathMouseLeave.bind(this.ctx, marker)\n    );\n    marker.node.addEventListener(\n      \"mousedown\",\n      this._graphics.pathMouseDown.bind(this.ctx, marker)\n    );\n    marker.node.addEventListener(\"click\", w.config.markers.onClick);\n    marker.node.addEventListener(\"dblclick\", w.config.markers.onDblClick);\n    marker.node.addEventListener(\n      \"touchstart\",\n      this._graphics.pathMouseDown.bind(this.ctx, marker),\n      { passive: true }\n    );\n  }\n  /**\n   * @returns {any}\n   * @param {number} seriesIndex\n   */\n  getMarkerStyle(seriesIndex) {\n    const w = this.w;\n    const colors = w.globals.markers.colors;\n    const strokeColors = w.config.markers.strokeColor || w.config.markers.strokeColors;\n    const pointStrokeColor = Array.isArray(strokeColors) ? strokeColors[seriesIndex] : strokeColors;\n    const pointFillColor = Array.isArray(colors) ? colors[seriesIndex] : colors;\n    return {\n      pointStrokeColor,\n      pointFillColor\n    };\n  }\n}\nclass Scatter {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.initialAnim = this.w.config.chart.animations.enabled;\n    this.anim = new Animations(this.w);\n    this.filters = new Filters(this.w);\n    this.fill = new Fill(this.w);\n    this.markers = new Markers(this.w, this.ctx);\n    this.graphics = new Graphics(this.w);\n  }\n  /**\n   * @param {Element} elSeries\n   * @param {number} j\n   * @param {Record<string, any>} opts\n   */\n  draw(elSeries, j, opts) {\n    const w = this.w;\n    const graphics = this.graphics;\n    const realIndex = opts.realIndex;\n    const pointsPos = opts.pointsPos;\n    const zRatio = opts.zRatio;\n    const elPointsMain = opts.elParent;\n    const elPointsWrap = graphics.group({\n      class: `apexcharts-series-markers apexcharts-series-${w.config.chart.type}`\n    });\n    elPointsWrap.attr(\"clip-path\", `url(#gridRectMarkerMask${w.globals.cuid})`);\n    this.markers.setupMarkerDelegation(elPointsWrap);\n    if (Array.isArray(pointsPos.x)) {\n      for (let q = 0; q < pointsPos.x.length; q++) {\n        let dataPointIndex = j + 1;\n        let shouldDraw = true;\n        if (j === 0 && q === 0) dataPointIndex = 0;\n        if (j === 0 && q === 1) dataPointIndex = 1;\n        let radius = w.globals.markers.size[realIndex];\n        if (zRatio !== Infinity) {\n          const bubble = w.config.plotOptions.bubble;\n          radius = w.seriesData.seriesZ[realIndex][dataPointIndex];\n          if (bubble.zScaling) {\n            radius /= zRatio;\n          }\n          if (bubble.minBubbleRadius && radius < bubble.minBubbleRadius) {\n            radius = bubble.minBubbleRadius;\n          }\n          if (bubble.maxBubbleRadius && radius > bubble.maxBubbleRadius) {\n            radius = bubble.maxBubbleRadius;\n          }\n        }\n        const x = pointsPos.x[q];\n        const y = pointsPos.y[q];\n        radius = radius || 0;\n        if (y === null || typeof w.seriesData.series[realIndex][dataPointIndex] === \"undefined\") {\n          shouldDraw = false;\n        }\n        if (shouldDraw) {\n          const point = this.drawPoint(\n            x,\n            y,\n            radius,\n            realIndex,\n            dataPointIndex,\n            j\n          );\n          elPointsWrap.add(point);\n        }\n        elPointsMain.add(elPointsWrap);\n      }\n    }\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number} radius\n   * @param {number} realIndex\n   * @param {number} dataPointIndex\n   * @param {number} j\n   */\n  drawPoint(x, y, radius, realIndex, dataPointIndex, j) {\n    var _a, _b;\n    const w = this.w;\n    const i = realIndex;\n    const anim = this.anim;\n    const filters = this.filters;\n    const fill = this.fill;\n    const markers = this.markers;\n    const graphics = this.graphics;\n    const markerConfig = markers.getMarkerConfig({\n      cssClass: \"apexcharts-marker\",\n      seriesIndex: i,\n      dataPointIndex,\n      radius: w.config.chart.type === \"bubble\" || w.globals.comboCharts && w.config.series[realIndex] && /** @type {Record<string,any>} */\n      w.config.series[realIndex].type === \"bubble\" ? radius : null\n    });\n    let pathFillCircle = fill.fillPath({\n      seriesNumber: realIndex,\n      dataPointIndex,\n      color: markerConfig.pointFillColor,\n      patternUnits: \"objectBoundingBox\",\n      value: w.seriesData.series[realIndex][j]\n    });\n    const el = graphics.drawMarker(x, y, markerConfig);\n    const _si = (\n      /** @type {Record<string,any>} */\n      w.config.series[i]\n    );\n    if (_si.data[dataPointIndex]) {\n      if (_si.data[dataPointIndex].fillColor) {\n        pathFillCircle = _si.data[dataPointIndex].fillColor;\n      }\n    }\n    const jt = (_a = w.config.plotOptions.scatter) == null ? void 0 : _a.jitter;\n    if ((jt == null ? void 0 : jt.enabled) && jt.distributed && w.globals.colors.length) {\n      const bandIdx = Math.round((_b = w.seriesData.seriesX[realIndex]) == null ? void 0 : _b[dataPointIndex]);\n      if (!isNaN(bandIdx)) {\n        pathFillCircle = w.globals.colors[bandIdx % w.globals.colors.length];\n      }\n    }\n    el.attr({\n      fill: pathFillCircle\n    });\n    if (w.config.chart.dropShadow.enabled) {\n      const dropShadow = w.config.chart.dropShadow;\n      filters.dropShadow(el, dropShadow, realIndex);\n    }\n    if (this.initialAnim && !w.globals.dataChanged && !w.globals.resized) {\n      const animCfg = w.config.chart.animations;\n      const popSpeed = animCfg.speed;\n      const totalPoints = w.globals.dataPoints || 1;\n      const gradCfg = animCfg.animateGradually;\n      const gradEnabled = gradCfg && gradCfg.enabled !== false;\n      const baseDelay = gradEnabled ? Math.min(20, popSpeed * 0.5 / Math.max(1, totalPoints)) : 0;\n      const delay = computeStagger({\n        style: baseDelay > 0 ? \"sequential\" : \"none\",\n        index: dataPointIndex,\n        baseDelay\n      });\n      anim.animatePop(el, {\n        speed: popSpeed,\n        delay,\n        onComplete: () => anim.animationCompleted(el)\n      });\n    } else {\n      w.globals.animationEnded = true;\n    }\n    el.attr({\n      rel: dataPointIndex,\n      j: dataPointIndex,\n      index: realIndex,\n      \"default-marker-size\": markerConfig.pSize\n    });\n    filters.setSelectionFilter(el, realIndex, dataPointIndex);\n    el.node.classList.add(\"apexcharts-marker\");\n    return el;\n  }\n  /**\n   * @param {number} y\n   */\n  centerTextInBubble(y) {\n    const w = this.w;\n    y = y + parseInt(w.config.dataLabels.style.fontSize, 10) / 4;\n    return {\n      y\n    };\n  }\n}\nclass DataLabels {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext | null} ctx\n   */\n  constructor(w, ctx = null) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  // When there are many datalabels to be printed, and some of them overlaps each other in the same series, this method will take care of that\n  // Also, when datalabels exceeds the drawable area and get clipped off, we need to adjust and move some pixels to make them visible again\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {any} val\n   * @param {number} i\n   * @param {number} dataPointIndex\n   * @param {boolean} alwaysDrawDataLabel\n   * @param {string} fontSize\n   */\n  dataLabelsCorrection(x, y, val, i, dataPointIndex, alwaysDrawDataLabel, fontSize) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let drawnextLabel = false;\n    const textRects = (\n      /** @type {any} */\n      graphics.getTextRects(val, fontSize)\n    );\n    const width = textRects.width;\n    const height = textRects.height;\n    if (y < 0) y = 0;\n    if (y > w.layout.gridHeight + height) y = w.layout.gridHeight + height / 2;\n    if (typeof /** @type {any} */\n    w.globals.dataLabelsRects[i] === \"undefined\") {\n      w.globals.dataLabelsRects[i] = [];\n    }\n    w.globals.dataLabelsRects[i].push({\n      x,\n      y,\n      width,\n      height\n    });\n    const len = (\n      /** @type {any} */\n      w.globals.dataLabelsRects[i].length - 2\n    );\n    const lastDrawnIndex = typeof w.globals.lastDrawnDataLabelsIndexes[i] !== \"undefined\" ? w.globals.lastDrawnDataLabelsIndexes[i][w.globals.lastDrawnDataLabelsIndexes[i].length - 1] : 0;\n    if (typeof /** @type {any} */\n    w.globals.dataLabelsRects[i][len] !== \"undefined\") {\n      const lastDataLabelRect = (\n        /** @type {any} */\n        w.globals.dataLabelsRects[i][lastDrawnIndex]\n      );\n      if (\n        // next label forward and x not intersecting\n        x > lastDataLabelRect.x + lastDataLabelRect.width || y > lastDataLabelRect.y + lastDataLabelRect.height || y + height < lastDataLabelRect.y || x + width < lastDataLabelRect.x\n      ) {\n        drawnextLabel = true;\n      }\n    }\n    if (dataPointIndex === 0 || alwaysDrawDataLabel) {\n      drawnextLabel = true;\n    }\n    return {\n      x,\n      y,\n      textRects,\n      drawnextLabel\n    };\n  }\n  /** @param {{type: any, pos: any, i: any, j: any, isRangeStart: any, strokeWidth?: any}} opts */\n  drawDataLabel({ type, pos, i, j, isRangeStart, strokeWidth = 2 }) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const dataLabelsConfig = w.config.dataLabels;\n    let x = 0;\n    let y = 0;\n    let dataPointIndex = j;\n    let elDataLabelsWrap = null;\n    const seriesCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) !== -1;\n    if (seriesCollapsed || !dataLabelsConfig.enabled || !Array.isArray(pos.x)) {\n      return elDataLabelsWrap;\n    }\n    elDataLabelsWrap = graphics.group({\n      class: \"apexcharts-data-labels\"\n    });\n    for (let q = 0; q < pos.x.length; q++) {\n      x = pos.x[q] + dataLabelsConfig.offsetX;\n      y = pos.y[q] + dataLabelsConfig.offsetY + strokeWidth;\n      if (!isNaN(x)) {\n        if (j === 1 && q === 0) dataPointIndex = 0;\n        if (j === 1 && q === 1) dataPointIndex = 1;\n        let val = w.seriesData.series[i][dataPointIndex];\n        if (type === \"rangeArea\") {\n          if (isRangeStart) {\n            val = w.rangeData.seriesRangeStart[i][dataPointIndex];\n          } else {\n            val = w.rangeData.seriesRangeEnd[i][dataPointIndex];\n          }\n        }\n        let text = \"\";\n        const getText = (v) => {\n          return w.config.dataLabels.formatter(v, {\n            seriesIndex: i,\n            dataPointIndex,\n            w\n          });\n        };\n        if (w.config.chart.type === \"bubble\") {\n          val = w.seriesData.seriesZ[i][dataPointIndex];\n          text = getText(val);\n          y = pos.y[q];\n          const scatter = new Scatter(\n            this.w,\n            /** @type {import('../types/internal').ChartContext} */\n            this.ctx\n          );\n          const centerTextInBubbleCoords = scatter.centerTextInBubble(y);\n          y = centerTextInBubbleCoords.y;\n        } else {\n          if (typeof val !== \"undefined\") {\n            text = getText(val);\n          }\n        }\n        let textAnchor = w.config.dataLabels.textAnchor;\n        if (w.globals.isSlopeChart) {\n          if (dataPointIndex === 0) {\n            textAnchor = \"end\";\n          } else if (dataPointIndex === /** @type {Record<string,any>} */\n          w.config.series[i].data.length - 1) {\n            textAnchor = \"start\";\n          } else {\n            textAnchor = \"middle\";\n          }\n        }\n        this.plotDataLabelsText({\n          x,\n          y,\n          text,\n          i,\n          j: dataPointIndex,\n          parent: elDataLabelsWrap,\n          offsetCorrection: true,\n          dataLabelsConfig: w.config.dataLabels,\n          textAnchor\n        });\n      }\n    }\n    return elDataLabelsWrap;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  plotDataLabelsText(opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let {\n      x,\n      y,\n      i,\n      j,\n      text,\n      textAnchor,\n      fontSize,\n      parent,\n      dataLabelsConfig,\n      color,\n      alwaysDrawDataLabel,\n      offsetCorrection,\n      className\n    } = opts;\n    let dataLabelText = null;\n    if (Array.isArray(w.config.dataLabels.enabledOnSeries)) {\n      if (w.config.dataLabels.enabledOnSeries.indexOf(i) < 0) {\n        return dataLabelText;\n      }\n    }\n    let correctedLabels = {\n      x,\n      y,\n      drawnextLabel: true,\n      textRects: null\n    };\n    if (offsetCorrection) {\n      correctedLabels = this.dataLabelsCorrection(\n        x,\n        y,\n        text,\n        i,\n        j,\n        alwaysDrawDataLabel,\n        parseInt(\n          /** @type {any} */\n          dataLabelsConfig.style.fontSize,\n          10\n        ).toString()\n      );\n    }\n    if (!w.interact.zoomed) {\n      x = correctedLabels.x;\n      y = correctedLabels.y;\n    }\n    if (correctedLabels.textRects) {\n      const barPad = w.globals.barPadForNumericAxis || 0;\n      if (x < -(barPad + 20) - /** @type {any} */\n      correctedLabels.textRects.width || x > w.layout.gridWidth + /** @type {any} */\n      correctedLabels.textRects.width + barPad + 30) {\n        text = \"\";\n      }\n    }\n    let dataLabelColor = w.globals.dataLabels.style.colors[i];\n    if ((w.config.chart.type === \"bar\" || w.config.chart.type === \"rangeBar\") && w.config.plotOptions.bar.distributed || w.config.dataLabels.distributed) {\n      dataLabelColor = w.globals.dataLabels.style.colors[j];\n    }\n    if (typeof dataLabelColor === \"function\") {\n      dataLabelColor = /** @type {any} */\n      dataLabelColor({\n        series: w.seriesData.series,\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    if (color) {\n      dataLabelColor = color;\n    }\n    let offX = dataLabelsConfig.offsetX;\n    let offY = dataLabelsConfig.offsetY;\n    if (w.config.chart.type === \"bar\" || w.config.chart.type === \"rangeBar\") {\n      offX = 0;\n      offY = 0;\n    }\n    if (w.globals.isSlopeChart) {\n      if (j !== 0) {\n        offX = dataLabelsConfig.offsetX * -2 + 5;\n      }\n      if (j !== 0 && j !== /** @type {Record<string,any>} */\n      w.config.series[i].data.length - 1) {\n        offX = 0;\n      }\n    }\n    if (correctedLabels.drawnextLabel) {\n      if (textAnchor === \"middle\") {\n        if (x === w.layout.gridWidth) {\n          textAnchor = \"end\";\n        }\n      }\n      dataLabelText = graphics.drawText({\n        x: x + offX,\n        y: y + offY,\n        foreColor: dataLabelColor,\n        textAnchor: textAnchor || dataLabelsConfig.textAnchor,\n        text,\n        fontSize: fontSize || dataLabelsConfig.style.fontSize,\n        fontFamily: dataLabelsConfig.style.fontFamily,\n        fontWeight: dataLabelsConfig.style.fontWeight || \"normal\"\n      });\n      dataLabelText.attr({\n        class: className || \"apexcharts-datalabel\",\n        cx: x,\n        cy: y\n      });\n      if (dataLabelsConfig.dropShadow.enabled) {\n        const textShadow = dataLabelsConfig.dropShadow;\n        const filters = new Filters(this.w);\n        filters.dropShadow(dataLabelText, textShadow);\n      }\n      parent.add(dataLabelText);\n      applyProgressiveReveal(dataLabelText, x, w);\n      if (typeof w.globals.lastDrawnDataLabelsIndexes[i] === \"undefined\") {\n        w.globals.lastDrawnDataLabelsIndexes[i] = [];\n      }\n      w.globals.lastDrawnDataLabelsIndexes[i].push(j);\n    }\n    return dataLabelText;\n  }\n  /**\n   * @param {Element} el\n   * @param {{x: number, y: number, width: number, height: number}} coords\n   */\n  addBackgroundToDataLabel(el, coords) {\n    const w = this.w;\n    const bCnf = w.config.dataLabels.background;\n    const paddingH = bCnf.padding;\n    const paddingV = bCnf.padding / 2;\n    const width = coords.width;\n    const height = coords.height;\n    const graphics = new Graphics(this.w);\n    const elRect = graphics.drawRect(\n      coords.x - paddingH,\n      coords.y - paddingV / 2,\n      width + paddingH * 2,\n      height + paddingV,\n      bCnf.borderRadius,\n      w.config.chart.background === \"transparent\" || !w.config.chart.background ? \"#fff\" : w.config.chart.background,\n      bCnf.opacity,\n      bCnf.borderWidth,\n      bCnf.borderColor\n    );\n    if (bCnf.dropShadow.enabled) {\n      const filters = new Filters(this.w);\n      filters.dropShadow(elRect, bCnf.dropShadow);\n    }\n    return elRect;\n  }\n  dataLabelsBackground() {\n    var _a;\n    const w = this.w;\n    if (w.config.chart.type === \"bubble\") return;\n    const elDataLabels = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-datalabels text\"\n    );\n    for (let i = 0; i < elDataLabels.length; i++) {\n      const el = elDataLabels[i];\n      const coords = (\n        /** @type {SVGGraphicsElement} */\n        el.getBBox()\n      );\n      let elRect = null;\n      if (coords.width && coords.height) {\n        elRect = this.addBackgroundToDataLabel(el, coords);\n      }\n      if (elRect) {\n        (_a = el.parentNode) == null ? void 0 : _a.insertBefore(elRect.node, el);\n        const background = w.config.dataLabels.background.backgroundColor || el.getAttribute(\"fill\");\n        const shouldAnim = w.config.chart.animations.enabled && !w.globals.resized && !w.globals.dataChanged;\n        if (shouldAnim) {\n          elRect.animate().attr({ fill: background });\n        } else {\n          elRect.attr({ fill: background });\n        }\n        el.setAttribute(\"fill\", w.config.dataLabels.background.foreColor);\n        const cxAttr = el.getAttribute(\"cx\");\n        if (cxAttr !== null) {\n          applyProgressiveReveal(elRect, parseFloat(cxAttr), w);\n        }\n      }\n    }\n  }\n  bringForward() {\n    const w = this.w;\n    const elDataLabelsNodes = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-datalabels\"\n    );\n    const elSeries = w.dom.baseEl.querySelector(\n      \".apexcharts-plot-series:last-child\"\n    );\n    for (let i = 0; i < elDataLabelsNodes.length; i++) {\n      if (elSeries) {\n        elSeries.insertBefore(elDataLabelsNodes[i], elSeries.nextSibling);\n      }\n    }\n  }\n}\nclass PerformanceCache {\n  /**\n   * Invalidate all caches\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   */\n  static invalidateAll(w) {\n    if (!w || !w.globals) return;\n    if (w.globals.cachedSelectors) {\n      w.globals.cachedSelectors = {};\n    }\n    if (w.globals.domCache) {\n      w.globals.domCache.clear();\n    }\n    w.globals.dimensionCache = {};\n  }\n  /**\n   * Invalidate dimension cache only\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   */\n  static invalidateDimensions(w) {\n    if (!w || !w.globals) return;\n    w.globals.dimensionCache = {};\n  }\n  /**\n   * Invalidate selector cache only\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   */\n  static invalidateSelectors(w) {\n    if (!w || !w.globals) return;\n    if (w.globals.cachedSelectors) {\n      w.globals.cachedSelectors = {};\n    }\n  }\n  /**\n   * Get cached selector result or compute and cache it\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @param {Function} queryFn - Function to execute if not cached\n   * @returns {*} Cached or newly computed result\n   */\n  static getCachedSelector(w, key, queryFn) {\n    if (!w || !w.globals) return queryFn();\n    if (!w.globals.cachedSelectors) {\n      w.globals.cachedSelectors = {};\n    }\n    if (!w.globals.cachedSelectors[key]) {\n      w.globals.cachedSelectors[key] = queryFn();\n    }\n    return w.globals.cachedSelectors[key];\n  }\n  /**\n   * Get cached dimension or compute and cache it\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @param {Function} computeFn - Function to compute dimensions\n   * @param {number} maxAge - Maximum cache age in milliseconds (default: 1000ms)\n   * @returns {*} Cached or newly computed dimensions\n   */\n  static getCachedDimension(w, key, computeFn, maxAge = 1e3) {\n    if (!w || !w.globals) return computeFn();\n    if (!w.globals.dimensionCache) {\n      w.globals.dimensionCache = {};\n    }\n    const cache = w.globals.dimensionCache[key];\n    const now = Date.now();\n    if (cache && cache.lastUpdate && now - cache.lastUpdate < maxAge) {\n      return cache.value;\n    }\n    const value = computeFn();\n    w.globals.dimensionCache[key] = {\n      value,\n      lastUpdate: now\n    };\n    return value;\n  }\n  /**\n   * Cache a DOM element reference\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @param {Element} element - DOM element to cache\n   */\n  static cacheDOMElement(w, key, element) {\n    if (!w || !w.globals) return;\n    if (!w.globals.domCache) {\n      w.globals.domCache = /* @__PURE__ */ new Map();\n    }\n    w.globals.domCache.set(key, element);\n  }\n  /**\n   * Get cached DOM element\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @returns {Element|null} Cached element or null\n   */\n  static getCachedDOMElement(w, key) {\n    if (!w || !w.globals || !w.globals.domCache) return null;\n    return w.globals.domCache.get(key) || null;\n  }\n}\nclass AxesUtils {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w, { theme = null, timeScale = null } = {}) {\n    this.w = w;\n    this.theme = theme;\n    this.timeScale = timeScale;\n  }\n  // Based on the formatter function, get the label text and position\n  /**\n   * @param {any[]} labels\n   * @param {Array<Record<string, any>>} timescaleLabels\n   * @param {number} x\n   * @param {number} i\n   * @param {any[]} drawnLabels\n   */\n  getLabel(labels, timescaleLabels, x, i, drawnLabels = [], fontSize = \"12px\", isLeafGroup = true) {\n    const w = this.w;\n    const rawLabel = typeof labels[i] === \"undefined\" ? \"\" : labels[i];\n    let label = rawLabel;\n    const xlbFormatter = w.formatters.xLabelFormatter;\n    const customFormatter = w.config.xaxis.labels.formatter;\n    const xFormat = new Formatters(this.w);\n    const timestamp = rawLabel;\n    if (isLeafGroup) {\n      label = /** @type {any} */\n      xFormat.xLabelFormat(\n        xlbFormatter,\n        rawLabel,\n        timestamp,\n        {\n          i,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        }\n      );\n      if (customFormatter !== void 0) {\n        label = customFormatter(rawLabel, labels[i], {\n          i,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        });\n      }\n    }\n    if (timescaleLabels.length > 0) {\n      x = timescaleLabels[i].position;\n      label = timescaleLabels[i].value;\n    } else {\n      if (w.config.xaxis.type === \"datetime\" && customFormatter === void 0) {\n        label = \"\";\n      }\n    }\n    if (typeof label === \"undefined\") label = \"\";\n    label = Array.isArray(label) ? label : label.toString();\n    const graphics = new Graphics(this.w);\n    let textRect = {};\n    if (w.layout.rotateXLabels && isLeafGroup) {\n      textRect = graphics.getTextRects(\n        label,\n        parseInt(fontSize, 10).toString(),\n        null,\n        `rotate(${w.config.xaxis.labels.rotate} 0 0)`,\n        false\n      );\n    } else {\n      textRect = graphics.getTextRects(label, parseInt(fontSize, 10).toString());\n    }\n    const allowDuplicatesInTimeScale = !w.config.xaxis.labels.showDuplicates && this.timeScale;\n    if (!Array.isArray(label) && (String(label) === \"NaN\" || drawnLabels.indexOf(label) >= 0 && allowDuplicatesInTimeScale)) {\n      label = \"\";\n    }\n    return {\n      x,\n      text: label,\n      textRect\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {any} label\n   * @param {number} labelsLen\n   */\n  checkLabelBasedOnTickamount(i, label, labelsLen) {\n    const w = this.w;\n    let ticks = w.config.xaxis.tickAmount;\n    if (ticks === \"dataPoints\") ticks = Math.round(w.layout.gridWidth / 120);\n    if (ticks > labelsLen) return label;\n    const tickMultiple = Math.round(labelsLen / (ticks + 1));\n    if (i % tickMultiple === 0) {\n      return label;\n    } else {\n      label.text = \"\";\n    }\n    return label;\n  }\n  /**\n   * @param {number} i\n   * @param {any} label\n   * @param {number} labelsLen\n   * @param {any[]} drawnLabels\n   * @param {Array<Record<string, any>>} drawnLabelsRects\n   */\n  checkForOverflowingLabels(i, label, labelsLen, drawnLabels, drawnLabelsRects) {\n    const w = this.w;\n    if (i === 0) {\n      if (w.globals.skipFirstTimelinelabel) {\n        label.text = \"\";\n      }\n    }\n    if (i === labelsLen - 1) {\n      if (w.globals.skipLastTimelinelabel) {\n        label.text = \"\";\n      }\n    }\n    if (w.config.xaxis.labels.hideOverlappingLabels && drawnLabels.length > 0) {\n      const prev = drawnLabelsRects[drawnLabelsRects.length - 1];\n      if (w.config.xaxis.labels.trim && w.config.xaxis.type !== \"datetime\") {\n        return label;\n      }\n      if (\n        /** @type {any} */\n        label.x < prev.textRect.width / (w.layout.rotateXLabels ? Math.abs(w.config.xaxis.labels.rotate) / 12 : 1.01) + prev.x\n      ) {\n        label.text = \"\";\n      }\n    }\n    return label;\n  }\n  /**\n   * @param {number} i\n   * @param {any[]} labels\n   */\n  checkForReversedLabels(i, labels) {\n    const w = this.w;\n    if (w.config.yaxis[i] && w.config.yaxis[i].reversed) {\n      labels.reverse();\n    }\n    return labels;\n  }\n  /**\n   * @param {number} index\n   */\n  yAxisAllSeriesCollapsed(index) {\n    const gl = this.w.globals;\n    return !gl.seriesYAxisMap[index].some((si) => {\n      return gl.collapsedSeriesIndices.indexOf(si) === -1;\n    });\n  }\n  // Method to translate annotation.yAxisIndex values from\n  // seriesName-as-a-string values to seriesName-as-an-array values (old style\n  // series mapping to new style).\n  /**\n   * @param {number} index\n   */\n  translateYAxisIndex(index) {\n    const w = this.w;\n    const gl = w.globals;\n    const yaxis = w.config.yaxis;\n    const newStyle = w.seriesData.series.length > yaxis.length || /**\n     * @param {Record<string, any>} a\n     */\n    yaxis.some((a) => Array.isArray(a.seriesName));\n    if (newStyle) {\n      return index;\n    } else {\n      return gl.seriesYAxisReverseMap[index];\n    }\n  }\n  /**\n   * @param {number} index\n   */\n  isYAxisHidden(index) {\n    const w = this.w;\n    const yaxis = w.config.yaxis[index];\n    if (!yaxis.show || this.yAxisAllSeriesCollapsed(index)) {\n      return true;\n    }\n    if (!yaxis.showForNullSeries) {\n      const seriesIndices = w.globals.seriesYAxisMap[index];\n      const coreUtils = new CoreUtils(this.w);\n      return seriesIndices.every((si) => coreUtils.isSeriesNull(si));\n    }\n    return false;\n  }\n  // get the label color for y-axis\n  // realIndex is the actual series index, while i is the tick Index\n  /**\n   * @param {string[]} yColors\n   * @param {number} realIndex\n   */\n  getYAxisForeColor(yColors, realIndex) {\n    var _a;\n    const w = this.w;\n    if (Array.isArray(yColors) && w.globals.yAxisScale[realIndex]) {\n      (_a = this.theme) == null ? void 0 : _a.pushExtraColors(\n        yColors,\n        w.globals.yAxisScale[realIndex].result.length,\n        false\n      );\n    }\n    return yColors;\n  }\n  /**\n   * @param {number} x\n   * @param {number} tickAmount\n   * @param {Record<string, any>} axisBorder\n   * @param {Record<string, any>} axisTicks\n   * @param {number} realIndex\n   * @param {any} labelsDivider\n   * @param {any} elYaxis\n   */\n  drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let tY = w.layout.translateY + w.config.yaxis[realIndex].labels.offsetY;\n    if (w.globals.isBarHorizontal) {\n      tY = 0;\n    } else if (w.config.chart.type === \"heatmap\") {\n      tY += labelsDivider / 2;\n    }\n    if (axisTicks.show && tickAmount > 0) {\n      if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width;\n      for (let i = tickAmount; i >= 0; i--) {\n        const elTick = graphics.drawLine(\n          x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX,\n          tY + axisTicks.offsetY,\n          x + axisBorder.offsetX + axisTicks.offsetX,\n          tY + axisTicks.offsetY,\n          axisTicks.color\n        );\n        elYaxis.add(elTick);\n        tY += labelsDivider;\n      }\n    }\n  }\n}\nclass XAxis {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   * @param {any} [elgrid]\n   */\n  constructor(w, ctx, elgrid) {\n    this.w = w;\n    this.ctx = ctx;\n    this.elgrid = elgrid;\n    this.axesUtils = new AxesUtils(w, {\n      theme: ctx.theme,\n      timeScale: ctx.timeScale\n    });\n    this.xaxisLabels = w.labelData.labels.slice();\n    if (w.labelData.timescaleLabels.length > 0 && !w.globals.isBarHorizontal) {\n      this.xaxisLabels = w.labelData.timescaleLabels.slice();\n    }\n    if (w.config.xaxis.overwriteCategories) {\n      this.xaxisLabels = w.config.xaxis.overwriteCategories;\n    }\n    this.drawnLabels = [];\n    this.drawnLabelsRects = [];\n    if (w.config.xaxis.position === \"top\") {\n      this.offY = 0;\n    } else {\n      this.offY = w.layout.gridHeight;\n    }\n    this.offY = this.offY + w.config.xaxis.axisBorder.offsetY;\n    this.isCategoryBarHorizontal = w.config.chart.type === \"bar\" && w.config.plotOptions.bar.horizontal;\n    this.xaxisFontSize = w.config.xaxis.labels.style.fontSize;\n    this.xaxisFontFamily = w.config.xaxis.labels.style.fontFamily;\n    this.xaxisForeColors = w.config.xaxis.labels.style.colors;\n    this.xaxisBorderWidth = w.config.xaxis.axisBorder.width;\n    if (this.isCategoryBarHorizontal) {\n      this.xaxisBorderWidth = w.config.yaxis[0].axisBorder.width.toString();\n    }\n    if (String(this.xaxisBorderWidth).indexOf(\"%\") > -1) {\n      this.xaxisBorderWidth = w.layout.gridWidth * parseInt(this.xaxisBorderWidth, 10) / 100;\n    } else {\n      this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth, 10);\n    }\n    this.xaxisBorderHeight = w.config.xaxis.axisBorder.height;\n    this.yaxis = w.config.yaxis[0];\n  }\n  drawXaxis() {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elXaxis = graphics.group({\n      class: \"apexcharts-xaxis\",\n      transform: `translate(${w.config.xaxis.offsetX}, ${w.config.xaxis.offsetY})`\n    });\n    const elXaxisTexts = graphics.group({\n      class: \"apexcharts-xaxis-texts-g\",\n      transform: `translate(${w.layout.translateXAxisX}, ${w.layout.translateXAxisY})`\n    });\n    elXaxis.add(elXaxisTexts);\n    let labels = [];\n    for (let i = 0; i < this.xaxisLabels.length; i++) {\n      labels.push(this.xaxisLabels[i]);\n    }\n    this.drawXAxisLabelAndGroup(\n      true,\n      graphics,\n      elXaxisTexts,\n      labels,\n      w.axisFlags.isXNumeric,\n      (i, colWidth) => colWidth\n    );\n    if (w.labelData.hasXaxisGroups) {\n      const labelsGroup = w.labelData.groups;\n      labels = [];\n      for (let i = 0; i < labelsGroup.length; i++) {\n        labels.push(labelsGroup[i].title);\n      }\n      const overwriteStyles = (\n        /** @type {any} */\n        {}\n      );\n      if (w.config.xaxis.group.style) {\n        overwriteStyles.xaxisFontSize = w.config.xaxis.group.style.fontSize;\n        overwriteStyles.xaxisFontFamily = w.config.xaxis.group.style.fontFamily;\n        overwriteStyles.xaxisForeColors = w.config.xaxis.group.style.colors;\n        overwriteStyles.fontWeight = w.config.xaxis.group.style.fontWeight;\n        overwriteStyles.cssClass = w.config.xaxis.group.style.cssClass;\n      }\n      this.drawXAxisLabelAndGroup(\n        false,\n        graphics,\n        elXaxisTexts,\n        labels,\n        false,\n        (i, colWidth) => labelsGroup[i].cols * colWidth,\n        overwriteStyles\n      );\n    }\n    if (w.config.xaxis.title.text !== void 0) {\n      const elXaxisTitle = graphics.group({\n        class: \"apexcharts-xaxis-title\"\n      });\n      const elXAxisTitleText = graphics.drawText({\n        x: w.layout.gridWidth / 2 + w.config.xaxis.title.offsetX,\n        y: this.offY + parseFloat(this.xaxisFontSize) + (w.config.xaxis.position === \"bottom\" ? w.layout.xAxisLabelsHeight : -w.layout.xAxisLabelsHeight - 10) + w.config.xaxis.title.offsetY,\n        text: w.config.xaxis.title.text,\n        textAnchor: \"middle\",\n        fontSize: w.config.xaxis.title.style.fontSize,\n        fontFamily: w.config.xaxis.title.style.fontFamily,\n        fontWeight: w.config.xaxis.title.style.fontWeight,\n        foreColor: w.config.xaxis.title.style.color,\n        cssClass: \"apexcharts-xaxis-title-text \" + w.config.xaxis.title.style.cssClass\n      });\n      elXaxisTitle.add(elXAxisTitleText);\n      elXaxis.add(elXaxisTitle);\n    }\n    if (w.config.xaxis.axisBorder.show) {\n      const offX = w.globals.barPadForNumericAxis;\n      const elHorzLine = graphics.drawLine(\n        w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX - offX,\n        this.offY,\n        this.xaxisBorderWidth + offX,\n        this.offY,\n        w.config.xaxis.axisBorder.color,\n        0,\n        this.xaxisBorderHeight\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n        this.elgrid.elGridBorders.add(elHorzLine);\n      } else {\n        elXaxis.add(elHorzLine);\n      }\n    }\n    return elXaxis;\n  }\n  /**\n   * @param {Record<string, any>} [overwriteStyles]\n   * @param {boolean} isLeafGroup\n   * @param {import('../Graphics').default} graphics\n   * @param {any} elXaxisTexts\n   * @param {any[]} labels\n   * @param {boolean} isXNumeric\n   * @param {any} colWidthCb\n   */\n  drawXAxisLabelAndGroup(isLeafGroup, graphics, elXaxisTexts, labels, isXNumeric, colWidthCb, overwriteStyles = {}) {\n    var _a, _b;\n    const drawnLabels = [];\n    const drawnLabelsRects = [];\n    const w = this.w;\n    const xaxisFontSize = overwriteStyles.xaxisFontSize || this.xaxisFontSize;\n    const xaxisFontFamily = overwriteStyles.xaxisFontFamily || this.xaxisFontFamily;\n    const xaxisForeColors = overwriteStyles.xaxisForeColors || this.xaxisForeColors;\n    const fontWeight = overwriteStyles.fontWeight || w.config.xaxis.labels.style.fontWeight;\n    const cssClass = overwriteStyles.cssClass || w.config.xaxis.labels.style.cssClass;\n    let colWidth;\n    let xPos = w.globals.padHorizontal;\n    const labelsLen = labels.length;\n    let dataPoints = w.config.xaxis.type === \"category\" ? w.globals.dataPoints : labelsLen;\n    if (dataPoints === 0 && labelsLen > dataPoints) dataPoints = labelsLen;\n    if (isXNumeric) {\n      const len = Math.max(\n        Number(w.config.xaxis.tickAmount) || 1,\n        dataPoints > 1 ? dataPoints - 1 : dataPoints\n      );\n      colWidth = w.layout.gridWidth / Math.min(len, labelsLen - 1);\n      xPos = xPos + colWidthCb(0, colWidth) / 2 + w.config.xaxis.labels.offsetX;\n    } else {\n      colWidth = w.layout.gridWidth / dataPoints;\n      xPos = xPos + colWidthCb(0, colWidth) + w.config.xaxis.labels.offsetX;\n    }\n    for (let i = 0; i <= labelsLen - 1; i++) {\n      let x = xPos - colWidthCb(i, colWidth) / 2 + w.config.xaxis.labels.offsetX;\n      if (i === 0 && labelsLen === 1 && colWidth / 2 === xPos && dataPoints === 1) {\n        x = w.layout.gridWidth / 2;\n      }\n      let label = this.axesUtils.getLabel(\n        labels,\n        w.labelData.timescaleLabels,\n        x,\n        i,\n        drawnLabels,\n        xaxisFontSize,\n        isLeafGroup\n      );\n      let offsetYCorrection = 28;\n      if (w.layout.rotateXLabels && isLeafGroup) {\n        offsetYCorrection = 22;\n      }\n      if (w.config.xaxis.title.text && w.config.xaxis.position === \"top\") {\n        offsetYCorrection += parseFloat(w.config.xaxis.title.style.fontSize) + 2;\n      }\n      if (!isLeafGroup) {\n        offsetYCorrection = offsetYCorrection + parseFloat(xaxisFontSize) + (w.layout.xAxisLabelsHeight - w.layout.xAxisGroupLabelsHeight) + (w.layout.rotateXLabels ? 10 : 0);\n      }\n      const isCategoryTickAmounts = typeof w.config.xaxis.tickAmount !== \"undefined\" && w.config.xaxis.tickAmount !== \"dataPoints\" && w.config.xaxis.type !== \"datetime\";\n      if (isCategoryTickAmounts) {\n        label = this.axesUtils.checkLabelBasedOnTickamount(i, label, labelsLen);\n      } else {\n        label = this.axesUtils.checkForOverflowingLabels(\n          i,\n          label,\n          labelsLen,\n          drawnLabels,\n          drawnLabelsRects\n        );\n      }\n      const getCatForeColor = () => {\n        return isLeafGroup && w.config.xaxis.convertedCatToNumeric ? xaxisForeColors[w.globals.minX + i - 1] : xaxisForeColors[i];\n      };\n      const labelRectWidth = (\n        /** @type {any} */\n        (_b = (_a = label.textRect) == null ? void 0 : _a.width) != null ? _b : 0\n      );\n      const halfWidth = labelRectWidth / 2;\n      const fullyOutsideGrid = label.x + halfWidth < 0;\n      if (w.config.xaxis.labels.show && !fullyOutsideGrid) {\n        const elText = graphics.drawText({\n          x: label.x,\n          y: this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection - (w.config.xaxis.position === \"top\" ? w.layout.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0),\n          text: label.text,\n          textAnchor: \"middle\",\n          fontWeight,\n          fontSize: xaxisFontSize,\n          fontFamily: xaxisFontFamily,\n          foreColor: Array.isArray(xaxisForeColors) ? getCatForeColor() : xaxisForeColors,\n          isPlainText: false,\n          cssClass: (isLeafGroup ? \"apexcharts-xaxis-label \" : \"apexcharts-xaxis-group-label \") + cssClass\n        });\n        elXaxisTexts.add(elText);\n        elText.on(\"click\", (e) => {\n          if (typeof w.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w, {\n              labelIndex: i\n            });\n            w.config.chart.events.xAxisLabelClick(e, this.ctx, opts);\n          }\n        });\n        if (isLeafGroup) {\n          const elTooltipTitle = BrowserAPIs.createElementNS(SVGNS, \"title\");\n          elTooltipTitle.textContent = Array.isArray(label.text) ? label.text.join(\" \") : label.text;\n          elText.node.appendChild(elTooltipTitle);\n          if (label.text !== \"\") {\n            drawnLabels.push(label.text);\n            drawnLabelsRects.push(label);\n          }\n        }\n      }\n      if (i < labelsLen - 1) {\n        xPos = xPos + colWidthCb(i + 1, colWidth);\n      }\n    }\n  }\n  // this actually becomes the vertical axis (for bar charts)\n  /**\n   * @param {number} realIndex\n   */\n  drawXaxisInversed(realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const translateYAxisX = w.config.yaxis[0].opposite ? w.globals.translateYAxisX[realIndex] : 0;\n    const elYaxis = graphics.group({\n      class: \"apexcharts-yaxis apexcharts-xaxis-inversed\",\n      rel: realIndex\n    });\n    const elYaxisTexts = graphics.group({\n      class: \"apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g\",\n      transform: \"translate(\" + translateYAxisX + \", 0)\"\n    });\n    elYaxis.add(elYaxisTexts);\n    const labels = [];\n    if (w.config.yaxis[realIndex].show) {\n      for (let i = 0; i < this.xaxisLabels.length; i++) {\n        labels.push(this.xaxisLabels[i]);\n      }\n    }\n    const colHeight = w.layout.gridHeight / labels.length;\n    let yPos = -(colHeight / 2.2);\n    const lbFormatter = w.formatters.yLabelFormatters[0];\n    const ylabels = w.config.yaxis[0].labels;\n    if (ylabels.show) {\n      for (let i = 0; i <= labels.length - 1; i++) {\n        let label = typeof labels[i] === \"undefined\" ? \"\" : labels[i];\n        label = lbFormatter(label, {\n          seriesIndex: realIndex,\n          dataPointIndex: i,\n          w\n        });\n        const yColors = this.axesUtils.getYAxisForeColor(\n          ylabels.style.colors,\n          realIndex\n        );\n        const getForeColor = () => {\n          return Array.isArray(yColors) ? yColors[i] : yColors;\n        };\n        let multiY = 0;\n        if (Array.isArray(label)) {\n          multiY = label.length / 2 * parseInt(ylabels.style.fontSize, 10);\n        }\n        let offsetX = ylabels.offsetX - 15;\n        let textAnchor = \"end\";\n        if (this.yaxis.opposite) {\n          textAnchor = \"start\";\n        }\n        if (w.config.yaxis[0].labels.align === \"left\") {\n          offsetX = ylabels.offsetX;\n          textAnchor = \"start\";\n        } else if (w.config.yaxis[0].labels.align === \"center\") {\n          offsetX = ylabels.offsetX;\n          textAnchor = \"middle\";\n        } else if (w.config.yaxis[0].labels.align === \"right\") {\n          textAnchor = \"end\";\n        }\n        const elLabel = graphics.drawText({\n          x: offsetX,\n          y: yPos + colHeight + ylabels.offsetY - multiY,\n          text: label,\n          textAnchor,\n          foreColor: getForeColor(),\n          fontSize: ylabels.style.fontSize,\n          fontFamily: ylabels.style.fontFamily,\n          fontWeight: ylabels.style.fontWeight,\n          isPlainText: false,\n          cssClass: \"apexcharts-yaxis-label \" + ylabels.style.cssClass,\n          maxWidth: ylabels.maxWidth\n        });\n        elYaxisTexts.add(elLabel);\n        elLabel.on(\"click\", (e) => {\n          if (typeof w.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w, {\n              labelIndex: i\n            });\n            w.config.chart.events.xAxisLabelClick(e, this.ctx, opts);\n          }\n        });\n        const elTooltipTitle = BrowserAPIs.createElementNS(SVGNS, \"title\");\n        elTooltipTitle.textContent = Array.isArray(label) ? label.join(\" \") : label;\n        elLabel.node.appendChild(elTooltipTitle);\n        if (w.config.yaxis[realIndex].labels.rotate !== 0) {\n          const labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node);\n          elLabel.node.setAttribute(\n            \"transform\",\n            `rotate(${w.config.yaxis[realIndex].labels.rotate} 0 ${labelRotatingCenter.y})`\n          );\n        }\n        yPos = yPos + colHeight;\n      }\n    }\n    if (w.config.yaxis[0].title.text !== void 0) {\n      const elXaxisTitle = graphics.group({\n        class: \"apexcharts-yaxis-title apexcharts-xaxis-title-inversed\",\n        transform: \"translate(\" + translateYAxisX + \", 0)\"\n      });\n      const elXAxisTitleText = graphics.drawText({\n        x: w.config.yaxis[0].title.offsetX,\n        y: w.layout.gridHeight / 2 + w.config.yaxis[0].title.offsetY,\n        text: w.config.yaxis[0].title.text,\n        textAnchor: \"middle\",\n        foreColor: w.config.yaxis[0].title.style.color,\n        fontSize: w.config.yaxis[0].title.style.fontSize,\n        fontWeight: w.config.yaxis[0].title.style.fontWeight,\n        fontFamily: w.config.yaxis[0].title.style.fontFamily,\n        cssClass: \"apexcharts-yaxis-title-text \" + w.config.yaxis[0].title.style.cssClass\n      });\n      elXaxisTitle.add(elXAxisTitleText);\n      elYaxis.add(elXaxisTitle);\n    }\n    let offX = 0;\n    if (this.isCategoryBarHorizontal && w.config.yaxis[0].opposite) {\n      offX = w.layout.gridWidth;\n    }\n    const axisBorder = w.config.xaxis.axisBorder;\n    if (axisBorder.show) {\n      const elVerticalLine = graphics.drawLine(\n        w.globals.padHorizontal + axisBorder.offsetX + offX,\n        1 + axisBorder.offsetY,\n        w.globals.padHorizontal + axisBorder.offsetX + offX,\n        w.layout.gridHeight + axisBorder.offsetY,\n        axisBorder.color,\n        0\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n        this.elgrid.elGridBorders.add(elVerticalLine);\n      } else {\n        elYaxis.add(elVerticalLine);\n      }\n    }\n    if (w.config.yaxis[0].axisTicks.show) {\n      this.axesUtils.drawYAxisTicks(\n        offX,\n        labels.length,\n        w.config.yaxis[0].axisBorder,\n        w.config.yaxis[0].axisTicks,\n        0,\n        colHeight,\n        elYaxis\n      );\n    }\n    return elYaxis;\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y2\n   * @param {any} appendToElement\n   */\n  drawXaxisTicks(x1, y2, appendToElement) {\n    const w = this.w;\n    const x2 = x1;\n    if (x1 < 0 || x1 - 2 > w.layout.gridWidth) return;\n    const y1 = this.offY + w.config.xaxis.axisTicks.offsetY;\n    y2 = y2 + y1 + w.config.xaxis.axisTicks.height;\n    if (w.config.xaxis.position === \"top\") {\n      y2 = y1 - w.config.xaxis.axisTicks.height;\n    }\n    if (w.config.xaxis.axisTicks.show) {\n      const graphics = new Graphics(this.w);\n      const line = graphics.drawLine(\n        x1 + w.config.xaxis.axisTicks.offsetX,\n        y1 + w.config.xaxis.offsetY,\n        x2 + w.config.xaxis.axisTicks.offsetX,\n        y2 + w.config.xaxis.offsetY,\n        w.config.xaxis.axisTicks.color\n      );\n      appendToElement.add(line);\n      line.node.classList.add(\"apexcharts-xaxis-tick\");\n    }\n  }\n  getXAxisTicksPositions() {\n    const w = this.w;\n    const xAxisTicksPositions = [];\n    const xCount = this.xaxisLabels.length;\n    let x1 = w.globals.padHorizontal;\n    if (w.labelData.timescaleLabels.length > 0) {\n      for (let i = 0; i < xCount; i++) {\n        x1 = this.xaxisLabels[i].position;\n        xAxisTicksPositions.push(x1);\n      }\n    } else {\n      const xCountForCategoryCharts = xCount;\n      for (let i = 0; i < xCountForCategoryCharts; i++) {\n        let x1Count = xCountForCategoryCharts;\n        if (w.axisFlags.isXNumeric && w.config.chart.type !== \"bar\") {\n          x1Count -= 1;\n        }\n        x1 = x1 + w.layout.gridWidth / x1Count;\n        xAxisTicksPositions.push(x1);\n      }\n    }\n    return xAxisTicksPositions;\n  }\n  // to rotate x-axis labels or to put ... for longer text in xaxis\n  xAxisLabelCorrections() {\n    var _a, _b, _c;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const xAxis = w.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g\");\n    const xAxisTexts = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)\"\n    );\n    const yAxisTextsInversed = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-yaxis-inversed text\"\n    );\n    const xAxisTextsInversed = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-xaxis-inversed-texts-g text tspan\"\n    );\n    if (w.layout.rotateXLabels || w.config.xaxis.labels.rotateAlways) {\n      for (let xat = 0; xat < xAxisTexts.length; xat++) {\n        const textRotatingCenter = graphics.rotateAroundCenter(xAxisTexts[xat]);\n        textRotatingCenter.y = textRotatingCenter.y - 1;\n        textRotatingCenter.x = textRotatingCenter.x + 1;\n        xAxisTexts[xat].setAttribute(\n          \"transform\",\n          `rotate(${w.config.xaxis.labels.rotate} ${textRotatingCenter.x} ${textRotatingCenter.y})`\n        );\n        xAxisTexts[xat].setAttribute(\"text-anchor\", `end`);\n        xAxis == null ? void 0 : xAxis.setAttribute(\"transform\", `translate(0, ${-10})`);\n        const tSpan = xAxisTexts[xat].childNodes;\n        if (w.config.xaxis.labels.trim) {\n          Array.prototype.forEach.call(tSpan, (ts) => {\n            graphics.placeTextWithEllipsis(\n              ts,\n              ts.textContent,\n              w.layout.xAxisLabelsHeight - (w.config.legend.position === \"bottom\" ? 20 : 10)\n            );\n          });\n        }\n      }\n    } else {\n      const width = w.layout.gridWidth / (w.labelData.labels.length + 1);\n      for (let xat = 0; xat < xAxisTexts.length; xat++) {\n        const tSpan = xAxisTexts[xat].childNodes;\n        if (w.config.xaxis.labels.trim && w.config.xaxis.type !== \"datetime\") {\n          Array.prototype.forEach.call(tSpan, (ts) => {\n            graphics.placeTextWithEllipsis(ts, ts.textContent, width);\n          });\n        }\n      }\n    }\n    if (yAxisTextsInversed.length > 0) {\n      const firstLabelPosX = (\n        /** @type {SVGGraphicsElement} */\n        yAxisTextsInversed[yAxisTextsInversed.length - 1].getBBox()\n      );\n      const lastLabelPosX = (\n        /** @type {SVGGraphicsElement} */\n        yAxisTextsInversed[0].getBBox()\n      );\n      if (firstLabelPosX.x < -20) {\n        (_a = yAxisTextsInversed[yAxisTextsInversed.length - 1].parentNode) == null ? void 0 : _a.removeChild(\n          yAxisTextsInversed[yAxisTextsInversed.length - 1]\n        );\n      }\n      if (lastLabelPosX.x + lastLabelPosX.width > w.layout.gridWidth && !w.globals.isBarHorizontal) {\n        (_b = yAxisTextsInversed[0].parentNode) == null ? void 0 : _b.removeChild(yAxisTextsInversed[0]);\n      }\n      for (let xat = 0; xat < xAxisTextsInversed.length; xat++) {\n        graphics.placeTextWithEllipsis(\n          xAxisTextsInversed[xat],\n          (_c = xAxisTextsInversed[xat].textContent) != null ? _c : \"\",\n          w.config.yaxis[0].labels.maxWidth - (w.config.yaxis[0].title.text ? parseFloat(w.config.yaxis[0].title.style.fontSize) * 2 : 0) - 15\n        );\n      }\n    }\n  }\n  // renderXAxisBands() {\n  //   let w = this.w;\n  //   let plotBand = document.createElementNS(SVGNS, 'rect')\n  //   w.dom.elGraphical.add(plotBand)\n  // }\n}\nclass Grid {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.xaxisLabels = w.labelData.labels.slice();\n    this.axesUtils = new AxesUtils(ctx.w, {\n      theme: ctx.theme,\n      timeScale: ctx.timeScale\n    });\n    this.isRangeBar = w.rangeData.seriesRange.length && w.globals.isBarHorizontal;\n    if (w.labelData.timescaleLabels.length > 0) {\n      this.xaxisLabels = w.labelData.timescaleLabels.slice();\n    }\n  }\n  /**\n   * @param {any} elGrid\n   */\n  drawGridArea(elGrid = null) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    if (!elGrid) {\n      elGrid = graphics.group({ class: \"apexcharts-grid\" });\n    }\n    const elVerticalLine = graphics.drawLine(\n      w.globals.padHorizontal,\n      1,\n      w.globals.padHorizontal,\n      w.layout.gridHeight,\n      \"transparent\"\n    );\n    const elHorzLine = graphics.drawLine(\n      w.globals.padHorizontal,\n      w.layout.gridHeight,\n      w.layout.gridWidth,\n      w.layout.gridHeight,\n      \"transparent\"\n    );\n    elGrid.add(elHorzLine);\n    elGrid.add(elVerticalLine);\n    return elGrid;\n  }\n  drawGrid() {\n    const gl = this.w.globals;\n    if (gl.axisCharts) {\n      const elgrid = this.renderGrid();\n      this.drawGridArea(elgrid.el);\n      return elgrid;\n    }\n    return null;\n  }\n  createGridMask() {\n    const w = this.w;\n    const gl = w.globals;\n    const graphics = new Graphics(this.w);\n    const strokeSize = Array.isArray(w.config.stroke.width) ? Math.max(...w.config.stroke.width) : w.config.stroke.width;\n    const createClipPath = (id) => {\n      const clipPath = BrowserAPIs.createElementNS(SVGNS, \"clipPath\");\n      clipPath.setAttribute(\"id\", id);\n      return clipPath;\n    };\n    w.dom.elGridRectMask = createClipPath(`gridRectMask${gl.cuid}`);\n    w.dom.elGridRectBarMask = createClipPath(`gridRectBarMask${gl.cuid}`);\n    w.dom.elGridRectMarkerMask = createClipPath(`gridRectMarkerMask${gl.cuid}`);\n    w.dom.elForecastMask = createClipPath(`forecastMask${gl.cuid}`);\n    w.dom.elNonForecastMask = createClipPath(`nonForecastMask${gl.cuid}`);\n    const hasBar = [\"bar\", \"rangeBar\", \"candlestick\", \"boxPlot\", \"violin\"].includes(\n      w.config.chart.type\n    ) || w.globals.comboBarCount > 0;\n    let barWidthLeft = 0;\n    let barWidthRight = 0;\n    if (hasBar && w.axisFlags.isXNumeric && !w.globals.isBarHorizontal) {\n      barWidthLeft = Math.max(\n        w.config.grid.padding.left,\n        gl.barPadForNumericAxis\n      );\n      barWidthRight = Math.max(\n        w.config.grid.padding.right,\n        gl.barPadForNumericAxis\n      );\n    }\n    w.dom.elGridRect = graphics.drawRect(\n      -strokeSize / 2 - 2,\n      -strokeSize / 2 - 2,\n      w.layout.gridWidth + strokeSize + 4,\n      w.layout.gridHeight + strokeSize + 4,\n      0,\n      \"#fff\"\n    );\n    w.dom.elGridRectBar = graphics.drawRect(\n      -strokeSize / 2 - barWidthLeft - 2,\n      -strokeSize / 2 - 2,\n      w.layout.gridWidth + strokeSize + barWidthRight + barWidthLeft + 4,\n      w.layout.gridHeight + strokeSize + 4,\n      0,\n      \"#fff\"\n    );\n    const markerSize = w.globals.markers.largestSize;\n    w.dom.elGridRectMarker = graphics.drawRect(\n      Math.min(-strokeSize / 2 - barWidthLeft - 2, -markerSize),\n      -markerSize,\n      w.layout.gridWidth + Math.max(strokeSize + barWidthRight + barWidthLeft + 4, markerSize * 2),\n      w.layout.gridHeight + markerSize * 2,\n      0,\n      \"#fff\"\n    );\n    w.dom.elGridRectMask.appendChild(w.dom.elGridRect.node);\n    w.dom.elGridRectBarMask.appendChild(w.dom.elGridRectBar.node);\n    w.dom.elGridRectMarkerMask.appendChild(w.dom.elGridRectMarker.node);\n    const defs = w.dom.elDefs.node;\n    defs.appendChild(w.dom.elGridRectMask);\n    defs.appendChild(w.dom.elGridRectBarMask);\n    defs.appendChild(w.dom.elGridRectMarkerMask);\n    defs.appendChild(w.dom.elForecastMask);\n    defs.appendChild(w.dom.elNonForecastMask);\n  }\n  /** @param {{i: any, x1: any, y1: any, x2: any, y2: any, xCount: any, parent: any}} opts */\n  _drawGridLines({ i, x1, y1, x2, y2, xCount, parent }) {\n    const w = this.w;\n    const shouldDraw = () => {\n      if (i === 0 && w.globals.skipFirstTimelinelabel) return false;\n      if (i === xCount - 1 && w.globals.skipLastTimelinelabel && !w.config.xaxis.labels.formatter)\n        return false;\n      if (w.config.chart.type === \"radar\") return false;\n      return true;\n    };\n    if (shouldDraw()) {\n      if (w.config.grid.xaxis.lines.show) {\n        this._drawGridLine({ i, x1, y1, x2, y2, xCount, parent });\n      }\n      let y_2 = 0;\n      if (w.labelData.hasXaxisGroups && w.config.xaxis.tickPlacement === \"between\") {\n        const groups = w.labelData.groups;\n        if (groups) {\n          let gacc = 0;\n          for (let gi = 0; gacc < i && gi < groups.length; gi++) {\n            gacc += groups[gi].cols;\n          }\n          if (gacc === i) {\n            y_2 = w.layout.xAxisLabelsHeight * 0.6;\n          }\n        }\n      }\n      const xAxis = new XAxis(this.w, this.ctx);\n      xAxis.drawXaxisTicks(x1, y_2, w.dom.elGraphical);\n    }\n  }\n  /** @param {{i: any, x1: any, y1: any, x2: any, y2: any, xCount: any, parent: any}} opts */\n  _drawGridLine({ i, x1, y1, x2, y2, xCount, parent }) {\n    const w = this.w;\n    const isHorzLine = parent.node.classList.contains(\n      \"apexcharts-gridlines-horizontal\"\n    );\n    const offX = w.globals.barPadForNumericAxis;\n    const excludeBorders = y1 === 0 && y2 === 0 || x1 === 0 && x2 === 0 || y1 === w.layout.gridHeight && y2 === w.layout.gridHeight || w.globals.isBarHorizontal && (i === 0 || i === xCount - 1);\n    const graphics = new Graphics(this.w);\n    const line = graphics.drawLine(\n      x1 - (isHorzLine ? offX : 0),\n      y1,\n      x2 + (isHorzLine ? offX : 0),\n      y2,\n      w.config.grid.borderColor,\n      w.config.grid.strokeDashArray\n    );\n    line.node.classList.add(\"apexcharts-gridline\");\n    if (excludeBorders && w.config.grid.show) {\n      this.elGridBorders.add(line);\n    } else {\n      parent.add(line);\n    }\n  }\n  /** @param {{c: any, x1: any, y1: any, x2: any, y2: any, type: any}} opts */\n  _drawGridBandRect({ c, x1, y1, x2, y2, type }) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const offX = w.globals.barPadForNumericAxis;\n    const color = w.config.grid[type].colors[c];\n    const rect = graphics.drawRect(\n      x1 - (type === \"row\" ? offX : 0),\n      y1,\n      x2 + (type === \"row\" ? offX * 2 : 0),\n      y2,\n      0,\n      color,\n      w.config.grid[type].opacity\n    );\n    this.elg.add(rect);\n    rect.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n    rect.node.classList.add(`apexcharts-grid-${type}`);\n  }\n  /** @param {{xCount: any, tickAmount: any}} opts */\n  _drawXYLines({ xCount, tickAmount }) {\n    var _a;\n    const w = this.w;\n    const datetimeLines = ({ xC, x1, y1, x2, y2 }) => {\n      for (let i = 0; i < xC; i++) {\n        x1 = /** @type {any} */\n        this.xaxisLabels[i].position;\n        x2 = /** @type {any} */\n        this.xaxisLabels[i].position;\n        this._drawGridLines({\n          i,\n          x1,\n          y1,\n          x2,\n          y2,\n          xCount,\n          parent: this.elgridLinesV\n        });\n      }\n    };\n    const categoryLines = ({ xC, x1, y1, x2, y2 }) => {\n      for (let i = 0; i < xC + (w.axisFlags.isXNumeric ? 0 : 1); i++) {\n        if (i === 0 && xC === 1 && w.globals.dataPoints === 1) {\n          x1 = w.layout.gridWidth / 2;\n          x2 = x1;\n        }\n        this._drawGridLines({\n          i,\n          x1,\n          y1,\n          x2,\n          y2,\n          xCount,\n          parent: this.elgridLinesV\n        });\n        x1 += w.layout.gridWidth / (w.axisFlags.isXNumeric ? xC - 1 : xC);\n        x2 = x1;\n      }\n    };\n    if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) {\n      const x1 = w.globals.padHorizontal;\n      const y1 = 0;\n      let x2;\n      const y2 = w.layout.gridHeight;\n      if (w.labelData.timescaleLabels.length) {\n        datetimeLines({ xC: xCount, x1, y1, x2, y2 });\n      } else {\n        if (w.axisFlags.isXNumeric) {\n          xCount = (_a = w.globals.xAxisScale) == null ? void 0 : _a.result.length;\n        }\n        categoryLines({ xC: xCount, x1, y1, x2, y2 });\n      }\n    }\n    if (w.config.grid.yaxis.lines.show) {\n      const x1 = 0;\n      let y1 = 0;\n      let y2 = 0;\n      const x2 = w.layout.gridWidth;\n      let tA = tickAmount + 1;\n      if (this.isRangeBar) {\n        tA = w.labelData.labels.length;\n      }\n      for (let i = 0; i < tA + (this.isRangeBar ? 1 : 0); i++) {\n        this._drawGridLine({\n          i,\n          xCount: tA + (this.isRangeBar ? 1 : 0),\n          x1,\n          y1,\n          x2,\n          y2,\n          parent: this.elgridLinesH\n        });\n        y1 += w.layout.gridHeight / (this.isRangeBar ? tA : tickAmount);\n        y2 = y1;\n      }\n    }\n  }\n  /** @param {{ xCount?: any, tickAmount?: any }} opts */\n  _drawInvertedXYLines({ xCount }) {\n    const w = this.w;\n    if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) {\n      let x1 = w.globals.padHorizontal;\n      const y1 = 0;\n      let x2;\n      const y2 = w.layout.gridHeight;\n      for (let i = 0; i < xCount + 1; i++) {\n        if (w.config.grid.xaxis.lines.show) {\n          this._drawGridLine({\n            i,\n            xCount: xCount + 1,\n            x1,\n            y1,\n            x2,\n            y2,\n            parent: this.elgridLinesV\n          });\n        }\n        const xAxis = new XAxis(this.w, this.ctx);\n        xAxis.drawXaxisTicks(x1, 0, w.dom.elGraphical);\n        x1 += w.layout.gridWidth / xCount;\n        x2 = x1;\n      }\n    }\n    if (w.config.grid.yaxis.lines.show) {\n      const x1 = 0;\n      let y1 = 0;\n      let y2 = 0;\n      const x2 = w.layout.gridWidth;\n      for (let i = 0; i < w.globals.dataPoints + 1; i++) {\n        this._drawGridLine({\n          i,\n          xCount: w.globals.dataPoints + 1,\n          x1,\n          y1,\n          x2,\n          y2,\n          parent: this.elgridLinesH\n        });\n        y1 += w.layout.gridHeight / w.globals.dataPoints;\n        y2 = y1;\n      }\n    }\n  }\n  renderGrid() {\n    var _a, _b, _c;\n    const w = this.w;\n    const gl = w.globals;\n    const graphics = new Graphics(this.w);\n    this.elg = graphics.group({ class: \"apexcharts-grid\" });\n    this.elgridLinesH = graphics.group({\n      class: \"apexcharts-gridlines-horizontal\"\n    });\n    this.elgridLinesV = graphics.group({\n      class: \"apexcharts-gridlines-vertical\"\n    });\n    this.elGridBorders = graphics.group({ class: \"apexcharts-grid-borders\" });\n    this.elg.add(this.elgridLinesH);\n    this.elg.add(this.elgridLinesV);\n    if (!w.config.grid.show) {\n      this.elgridLinesV.hide();\n      this.elgridLinesH.hide();\n      this.elGridBorders.hide();\n    }\n    let gridAxisIndex = 0;\n    while (gridAxisIndex < gl.seriesYAxisMap.length && gl.ignoreYAxisIndexes.includes(gridAxisIndex)) {\n      gridAxisIndex++;\n    }\n    if (gridAxisIndex === gl.seriesYAxisMap.length) {\n      gridAxisIndex = 0;\n    }\n    let yTickAmount = gl.yAxisScale[gridAxisIndex].result.length - 1;\n    let xCount;\n    if (!gl.isBarHorizontal || this.isRangeBar) {\n      xCount = this.xaxisLabels.length;\n      if (this.isRangeBar) {\n        yTickAmount = w.labelData.labels.length;\n        if (w.config.xaxis.tickAmount && w.config.xaxis.labels.formatter) {\n          xCount = w.config.xaxis.tickAmount;\n        }\n        if (((_c = (_b = (_a = gl.yAxisScale) == null ? void 0 : _a[gridAxisIndex]) == null ? void 0 : _b.result) == null ? void 0 : _c.length) > 0 && w.config.xaxis.type !== \"datetime\") {\n          xCount = gl.yAxisScale[gridAxisIndex].result.length - 1;\n        }\n      }\n      this._drawXYLines({ xCount, tickAmount: yTickAmount });\n    } else {\n      xCount = yTickAmount;\n      yTickAmount = gl.xTickAmount;\n      this._drawInvertedXYLines({ xCount, tickAmount: yTickAmount });\n    }\n    this.drawGridBands(xCount, yTickAmount);\n    return {\n      el: this.elg,\n      elGridBorders: this.elGridBorders,\n      xAxisTickWidth: w.layout.gridWidth / xCount\n    };\n  }\n  /**\n   * @param {number} xCount\n   * @param {number} tickAmount\n   */\n  drawGridBands(xCount, tickAmount) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const drawBands = (type, count, x1, y1, x2, y2) => {\n      for (let i = 0, c = 0; i < count; i++, c++) {\n        if (c >= w.config.grid[type].colors.length) {\n          c = 0;\n        }\n        this._drawGridBandRect({ c, x1, y1, x2, y2, type });\n        y1 += w.layout.gridHeight / tickAmount;\n      }\n    };\n    if (((_a = w.config.grid.row.colors) == null ? void 0 : _a.length) > 0) {\n      drawBands(\n        \"row\",\n        tickAmount,\n        0,\n        0,\n        w.layout.gridWidth,\n        w.layout.gridHeight / tickAmount\n      );\n    }\n    if (((_b = w.config.grid.column.colors) == null ? void 0 : _b.length) > 0) {\n      let xc = !w.globals.isBarHorizontal && w.config.xaxis.tickPlacement === \"on\" && (w.config.xaxis.type === \"category\" || w.config.xaxis.convertedCatToNumeric) ? xCount - 1 : xCount;\n      if (w.axisFlags.isXNumeric) {\n        xc = ((_d = (_c = w.globals.xAxisScale) == null ? void 0 : _c.result.length) != null ? _d : 1) - 1;\n      }\n      let x1 = w.globals.padHorizontal;\n      const y1 = 0;\n      let x2 = w.globals.padHorizontal + w.layout.gridWidth / xc;\n      const y2 = w.layout.gridHeight;\n      for (let i = 0, c = 0; i < xCount; i++, c++) {\n        if (c >= w.config.grid.column.colors.length) {\n          c = 0;\n        }\n        if (w.config.xaxis.type === \"datetime\") {\n          x1 = /** @type {any} */\n          this.xaxisLabels[i].position;\n          x2 = /** @type {any} */\n          (((_e = this.xaxisLabels[i + 1]) == null ? void 0 : _e.position) || w.layout.gridWidth) - /** @type {any} */\n          this.xaxisLabels[i].position;\n        }\n        this._drawGridBandRect({ c, x1, y1, x2, y2, type: \"column\" });\n        x1 += w.layout.gridWidth / xc;\n      }\n    }\n  }\n}\nclass Scales {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.coreUtils = new CoreUtils(this.w);\n  }\n  // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axis\n  // This routine creates the Y axis values for a graph.\n  /**\n   * @param {number} yMin\n   * @param {number} yMax\n   */\n  niceScale(yMin, yMax, index = 0) {\n    const jsPrecision = 1e-11;\n    const w = this.w;\n    const gl = w.globals;\n    let axisCnf;\n    let maxTicks;\n    let gotMin;\n    let gotMax;\n    if (gl.isBarHorizontal) {\n      axisCnf = w.config.xaxis;\n      maxTicks = Math.max((gl.svgWidth - 100) / 25, 2);\n    } else {\n      axisCnf = w.config.yaxis[index];\n      maxTicks = Math.max((gl.svgHeight - 100) / 15, 2);\n    }\n    if (!Utils$1.isNumber(maxTicks)) {\n      maxTicks = 10;\n    }\n    gotMin = axisCnf.min !== void 0 && axisCnf.min !== null;\n    gotMax = axisCnf.max !== void 0 && axisCnf.min !== null;\n    let gotStepSize = axisCnf.stepSize !== void 0 && axisCnf.stepSize !== null;\n    let gotTickAmount = axisCnf.tickAmount !== void 0 && axisCnf.tickAmount !== null;\n    let ticks = gotTickAmount ? axisCnf.tickAmount : NICE_SCALE_DEFAULT_TICKS[Math.min(\n      Math.round(maxTicks / 2),\n      NICE_SCALE_DEFAULT_TICKS.length - 1\n    )];\n    if (gl.isMultipleYAxis && !gotTickAmount && gl.multiAxisTickAmount > 0) {\n      ticks = gl.multiAxisTickAmount;\n      gotTickAmount = true;\n    }\n    if (ticks === \"dataPoints\") {\n      ticks = gl.dataPoints - 1;\n    } else {\n      ticks = Math.abs(Math.round(ticks));\n    }\n    if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils$1.isNumber(yMin) && !Utils$1.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) {\n      yMin = Utils$1.isNumber(axisCnf.min) ? axisCnf.min : 0;\n      yMax = Utils$1.isNumber(axisCnf.max) ? axisCnf.max : yMin + ticks;\n      gl.allSeriesCollapsed = false;\n    }\n    if (yMin > yMax) {\n      console.warn(\n        \"axis.min cannot be greater than axis.max: swapping min and max\"\n      );\n      const temp = yMax;\n      yMax = yMin;\n      yMin = temp;\n    } else if (yMin === yMax) {\n      yMin = yMin === 0 ? 0 : yMin - 1;\n      yMax = yMax === 0 ? 2 : yMax + 1;\n    }\n    const result = [];\n    if (ticks < 1) {\n      ticks = 1;\n    }\n    let tiks = ticks;\n    let range = Math.abs(yMax - yMin);\n    const proximityRatio = 0.15;\n    if (!gotMin && yMin > 0 && yMin / range < proximityRatio) {\n      yMin = 0;\n      gotMin = true;\n    }\n    if (!gotMax && yMax < 0 && -yMax / range < proximityRatio) {\n      yMax = 0;\n      gotMax = true;\n    }\n    range = Math.abs(yMax - yMin);\n    let stepSize = range / tiks;\n    let niceStep = stepSize;\n    const mag = Math.floor(Math.log10(niceStep));\n    const magPow = Math.pow(10, mag);\n    let magMsd = Math.ceil(niceStep / magPow);\n    magMsd = NICE_SCALE_ALLOWED_MAG_MSD[gl.yValueDecimal === 0 ? 0 : 1][magMsd];\n    niceStep = magMsd * magPow;\n    stepSize = niceStep;\n    if (gl.isBarHorizontal && axisCnf.stepSize && axisCnf.type !== \"datetime\") {\n      stepSize = axisCnf.stepSize;\n      gotStepSize = true;\n    } else if (gotStepSize) {\n      stepSize = axisCnf.stepSize;\n    }\n    if (gotStepSize) {\n      if (axisCnf.forceNiceScale) {\n        const stepMag = Math.floor(Math.log10(stepSize));\n        stepSize *= Math.pow(10, mag - stepMag);\n      }\n    }\n    if (gotMin && gotMax) {\n      let crudeStep = range / tiks;\n      if (gotTickAmount) {\n        if (gotStepSize) {\n          if (Utils$1.mod(range, stepSize) != 0) {\n            const gcdStep = Utils$1.getGCD(stepSize, crudeStep);\n            if (crudeStep / gcdStep < 10) {\n              stepSize = gcdStep;\n            } else {\n              stepSize = crudeStep;\n            }\n          } else {\n            if (Utils$1.mod(stepSize, crudeStep) == 0) {\n              stepSize = crudeStep;\n            } else {\n              crudeStep = stepSize;\n              gotTickAmount = false;\n            }\n          }\n        } else {\n          stepSize = crudeStep;\n        }\n      } else {\n        if (gotStepSize) {\n          if (Utils$1.mod(range, stepSize) == 0) {\n            crudeStep = stepSize;\n          } else {\n            stepSize = crudeStep;\n          }\n        } else {\n          if (Utils$1.mod(range, stepSize) == 0) {\n            crudeStep = stepSize;\n          } else {\n            tiks = Math.ceil(range / stepSize);\n            crudeStep = range / tiks;\n            const gcdStep = Utils$1.getGCD(range, stepSize);\n            if (range / gcdStep < maxTicks) {\n              crudeStep = gcdStep;\n            }\n            stepSize = crudeStep;\n          }\n        }\n      }\n      tiks = Math.round(range / stepSize);\n    } else {\n      if (!gotMin && !gotMax) {\n        if (gl.isMultipleYAxis && gotTickAmount) {\n          const tMin = stepSize * Math.floor(yMin / stepSize);\n          let tMax = tMin + stepSize * tiks;\n          if (tMax < yMax) {\n            stepSize *= 2;\n          }\n          yMin = tMin;\n          tMax = yMax;\n          yMax = yMin + stepSize * tiks;\n          range = Math.abs(yMax - yMin);\n          if (yMin > 0 && yMin < Math.abs(tMax - yMax)) {\n            yMin = 0;\n            yMax = stepSize * tiks;\n          }\n          if (yMax < 0 && -yMax < Math.abs(tMin - yMin)) {\n            yMax = 0;\n            yMin = -stepSize * tiks;\n          }\n        } else {\n          yMin = stepSize * Math.floor(yMin / stepSize);\n          yMax = stepSize * Math.ceil(yMax / stepSize);\n        }\n      } else if (gotMax) {\n        if (gotTickAmount) {\n          yMin = yMax - stepSize * tiks;\n        } else {\n          const yMinPrev = yMin;\n          yMin = stepSize * Math.floor(yMin / stepSize);\n          if (Math.abs(yMax - yMin) / Utils$1.getGCD(range, stepSize) > maxTicks) {\n            yMin = yMax - stepSize * ticks;\n            yMin += stepSize * Math.floor((yMinPrev - yMin) / stepSize);\n          }\n        }\n      } else if (gotMin) {\n        if (gotTickAmount) {\n          yMax = yMin + stepSize * tiks;\n        } else {\n          const yMaxPrev = yMax;\n          yMax = stepSize * Math.ceil(yMax / stepSize);\n          if (Math.abs(yMax - yMin) / Utils$1.getGCD(range, stepSize) > maxTicks) {\n            yMax = yMin + stepSize * ticks;\n            yMax += stepSize * Math.ceil((yMaxPrev - yMax) / stepSize);\n          }\n        }\n      }\n      range = Math.abs(yMax - yMin);\n      stepSize = Utils$1.getGCD(range, stepSize);\n      tiks = Math.round(range / stepSize);\n    }\n    if (!gotTickAmount && !(gotMin || gotMax)) {\n      tiks = Math.ceil((range - jsPrecision) / (stepSize + jsPrecision));\n      if (tiks > 16 && Utils$1.getPrimeFactors(tiks).length < 2) {\n        tiks++;\n      }\n    }\n    if (!gotTickAmount && axisCnf.forceNiceScale && gl.yValueDecimal === 0 && tiks > range) {\n      tiks = range;\n      stepSize = Math.round(range / tiks);\n    }\n    if (tiks > maxTicks && (!(gotTickAmount || gotStepSize) || axisCnf.forceNiceScale)) {\n      const pf = Utils$1.getPrimeFactors(tiks);\n      const last = pf.length - 1;\n      let tt = tiks;\n      reduceLoop: for (var xFactors = 0; xFactors < last; xFactors++) {\n        for (var lowest = 0; lowest <= last - xFactors; lowest++) {\n          const stop = Math.min(lowest + xFactors, last);\n          let t = tt;\n          let div = 1;\n          for (var next = lowest; next <= stop; next++) {\n            div *= pf[next];\n          }\n          t /= div;\n          if (t < maxTicks) {\n            tt = t;\n            break reduceLoop;\n          }\n        }\n      }\n      if (tt === tiks) {\n        stepSize = range;\n      } else {\n        stepSize = range / tt;\n      }\n      tiks = Math.round(range / stepSize);\n    }\n    if (gl.isMultipleYAxis && gl.multiAxisTickAmount == 0 && gl.ignoreYAxisIndexes.indexOf(index) < 0) {\n      gl.multiAxisTickAmount = tiks;\n    }\n    let val = yMin - stepSize;\n    const err = stepSize * jsPrecision;\n    do {\n      val += stepSize;\n      result.push(Utils$1.stripNumber(val, 7));\n    } while (yMax - val > err);\n    return {\n      result,\n      niceMin: result[0],\n      niceMax: result[result.length - 1]\n    };\n  }\n  /** @param {number} yMin @param {number} yMax @param {number|string} ticks @param {number} index @param {number|undefined} step */\n  linearScale(yMin, yMax, ticks = 10, index = 0, step = void 0) {\n    const range = Math.abs(yMax - yMin);\n    let result = [];\n    if (yMin === yMax) {\n      result = [yMin];\n      return {\n        result,\n        niceMin: result[0],\n        niceMax: result[result.length - 1]\n      };\n    }\n    ticks = this._adjustTicksForSmallRange(ticks, index, range);\n    if (\n      /** @type {any} */\n      ticks === \"dataPoints\"\n    ) {\n      ticks = this.w.globals.dataPoints - 1;\n    }\n    const ticksNum = (\n      /** @type {number} */\n      ticks\n    );\n    if (!step) {\n      step = range / ticksNum;\n    }\n    const MIN_PRECISION = 2;\n    if (step !== 0 && isFinite(step)) {\n      const magnitude = Math.floor(Math.log10(Math.abs(step)));\n      const precision = Math.max(MIN_PRECISION, -magnitude + MIN_PRECISION);\n      const multiplier = Math.pow(10, precision);\n      step = Math.round((step + Number.EPSILON) * multiplier) / multiplier;\n    }\n    let tickCount = ticks === Number.MAX_VALUE ? 5 : ticksNum;\n    if (ticks === Number.MAX_VALUE) {\n      step = 1;\n    }\n    let v = yMin;\n    while (tickCount >= 0) {\n      result.push(v);\n      v = Utils$1.preciseAddition(v, step);\n      tickCount -= 1;\n    }\n    return {\n      result,\n      niceMin: result[0],\n      niceMax: result[result.length - 1]\n    };\n  }\n  /**\n   * @param {number} yMin\n   * @param {number} yMax\n   * @param {number} base\n   */\n  logarithmicScaleNice(yMin, yMax, base) {\n    if (yMax <= 0) yMax = Math.max(yMin, base);\n    if (yMin <= 0) yMin = Math.min(yMax, base);\n    const logs = [];\n    const logMax = Math.ceil(Math.log(yMax) / Math.log(base) + 1);\n    const logMin = Math.floor(Math.log(yMin) / Math.log(base));\n    for (let i = logMin; i < logMax; i++) {\n      logs.push(Math.pow(base, i));\n    }\n    return {\n      result: logs,\n      niceMin: logs[0],\n      niceMax: logs[logs.length - 1]\n    };\n  }\n  /**\n   * @param {number} yMin\n   * @param {number} yMax\n   * @param {number} base\n   */\n  logarithmicScale(yMin, yMax, base) {\n    if (yMax <= 0) yMax = Math.max(yMin, base);\n    if (yMin <= 0) yMin = Math.min(yMax, base);\n    const logs = [];\n    const logMax = Math.log(yMax) / Math.log(base);\n    const logMin = Math.log(yMin) / Math.log(base);\n    const logRange = logMax - logMin;\n    const ticks = Math.round(logRange);\n    const logTickSpacing = logRange / ticks;\n    for (let i = 0, logTick = logMin; i < ticks; i++, logTick += logTickSpacing) {\n      logs.push(Math.pow(base, logTick));\n    }\n    logs.push(Math.pow(base, logMax));\n    return {\n      result: logs,\n      niceMin: yMin,\n      niceMax: yMax\n    };\n  }\n  /**\n   * @param {number | string} ticks\n   * @param {number} index\n   * @param {number} range\n   */\n  _adjustTicksForSmallRange(ticks, index, range) {\n    let newTicks = ticks;\n    if (typeof index !== \"undefined\" && this.w.config.yaxis[index].labels.formatter && this.w.config.yaxis[index].tickAmount === void 0) {\n      const formattedVal = Number(\n        this.w.config.yaxis[index].labels.formatter(1)\n      );\n      if (Utils$1.isNumber(formattedVal) && this.w.globals.yValueDecimal === 0) {\n        newTicks = Math.ceil(range);\n      }\n    }\n    return newTicks < ticks ? newTicks : ticks;\n  }\n  /**\n   * @param {number} index\n   * @param {number} minY\n   * @param {number} maxY\n   */\n  setYScaleForIndex(index, minY, maxY) {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    const y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index];\n    if (typeof gl.yAxisScale[index] === \"undefined\") {\n      gl.yAxisScale[index] = [];\n    }\n    const range = Math.abs(maxY - minY);\n    if (y.logarithmic && range <= 5) {\n      gl.invalidLogScale = true;\n    }\n    if (y.logarithmic && range > 5) {\n      gl.allSeriesCollapsed = false;\n      gl.yAxisScale[index] = y.forceNiceScale ? this.logarithmicScaleNice(minY, maxY, y.logBase) : this.logarithmicScale(minY, maxY, y.logBase);\n    } else {\n      if (maxY === -Number.MAX_VALUE || !Utils$1.isNumber(maxY) || minY === Number.MAX_VALUE || !Utils$1.isNumber(minY)) {\n        gl.yAxisScale[index] = this.niceScale(\n          Number.MIN_VALUE,\n          0,\n          index\n        );\n      } else {\n        gl.allSeriesCollapsed = false;\n        gl.yAxisScale[index] = this.niceScale(\n          minY,\n          maxY,\n          index\n        );\n      }\n    }\n  }\n  /**\n   * @param {number} minX\n   * @param {number} maxX\n   */\n  setXScale(minX, maxX) {\n    const w = this.w;\n    const gl = w.globals;\n    if (maxX === -Number.MAX_VALUE || !Utils$1.isNumber(maxX)) {\n      gl.xAxisScale = this.linearScale(0, 10, 10);\n    } else {\n      const ticks = gl.xTickAmount;\n      gl.xAxisScale = this.linearScale(\n        minX,\n        maxX,\n        ticks,\n        0,\n        w.config.xaxis.max === void 0 ? w.config.xaxis.stepSize : void 0\n      );\n    }\n    return gl.xAxisScale;\n  }\n  scaleMultipleYAxes() {\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    this.coreUtils.setSeriesYAxisMappings();\n    const axisSeriesMap = gl.seriesYAxisMap;\n    const minYArr = gl.minYArr;\n    const maxYArr = gl.maxYArr;\n    const alignZeroParticipants = [];\n    const canAlignZero = !gl.isBarHorizontal;\n    gl.allSeriesCollapsed = true;\n    gl.barGroups = [];\n    axisSeriesMap.forEach((axisSeries, ai) => {\n      const groupNames = [];\n      axisSeries.forEach((as) => {\n        var _a;\n        const group = (\n          /** @type {Record<string,any>} */\n          (_a = cnf.series[as]) == null ? void 0 : _a.group\n        );\n        if (groupNames.indexOf(group) < 0) {\n          groupNames.push(group);\n        }\n      });\n      if (axisSeries.length > 0) {\n        let minY = Number.MAX_VALUE;\n        let maxY = -Number.MAX_VALUE;\n        let lowestY = minY;\n        let highestY = maxY;\n        let seriesType;\n        let seriesGroupName;\n        if (cnf.chart.stacked) {\n          const mapSeries = new Array(gl.dataPoints).fill(0);\n          const sumSeries = [];\n          const posSeries = [];\n          const negSeries = [];\n          groupNames.forEach(() => {\n            sumSeries.push(mapSeries.map(() => Number.MIN_VALUE));\n            posSeries.push(mapSeries.map(() => Number.MIN_VALUE));\n            negSeries.push(mapSeries.map(() => Number.MIN_VALUE));\n          });\n          for (let i = 0; i < axisSeries.length; i++) {\n            if (!seriesType && /** @type {Record<string,any>} */\n            cnf.series[axisSeries[i]].type) {\n              seriesType = /** @type {Record<string,any>} */\n              cnf.series[axisSeries[i]].type;\n            }\n            const si = axisSeries[i];\n            if (\n              /** @type {Record<string,any>} */\n              cnf.series[si].group\n            ) {\n              seriesGroupName = /** @type {Record<string,any>} */\n              cnf.series[si].group;\n            } else {\n              seriesGroupName = \"axis-\".concat(ai.toString());\n            }\n            const collapsed = !(gl.collapsedSeriesIndices.indexOf(si) < 0 && gl.ancillaryCollapsedSeriesIndices.indexOf(si) < 0);\n            if (!collapsed) {\n              gl.allSeriesCollapsed = false;\n              groupNames.forEach((gn, gni) => {\n                if (\n                  /** @type {Record<string,any>} */\n                  cnf.series[si].group === gn\n                ) {\n                  for (let j = 0; j < this.w.seriesData.series[si].length; j++) {\n                    const val = this.w.seriesData.series[si][j];\n                    if (val >= 0) {\n                      posSeries[gni][j] += val;\n                    } else {\n                      negSeries[gni][j] += val;\n                    }\n                    sumSeries[gni][j] += val;\n                    lowestY = Math.min(lowestY, val);\n                    highestY = Math.max(highestY, val);\n                  }\n                }\n              });\n            }\n            if (seriesType === \"bar\" || seriesType === \"column\") {\n              gl.barGroups.push(seriesGroupName);\n            }\n          }\n          if (!seriesType) {\n            seriesType = cnf.chart.type;\n          }\n          if (seriesType === \"bar\" || seriesType === \"column\") {\n            groupNames.forEach((gn, gni) => {\n              minY = Math.min(minY, Math.min.apply(null, negSeries[gni]));\n              maxY = Math.max(maxY, Math.max.apply(null, posSeries[gni]));\n            });\n          } else {\n            groupNames.forEach((gn, gni) => {\n              lowestY = Math.min(lowestY, Math.min.apply(null, sumSeries[gni]));\n              highestY = Math.max(\n                highestY,\n                Math.max.apply(null, sumSeries[gni])\n              );\n            });\n            minY = lowestY;\n            maxY = highestY;\n          }\n          if (minY === Number.MIN_VALUE && maxY === Number.MIN_VALUE) {\n            maxY = -Number.MAX_VALUE;\n          }\n        } else {\n          for (let i = 0; i < axisSeries.length; i++) {\n            const si = axisSeries[i];\n            minY = Math.min(minY, minYArr[si]);\n            maxY = Math.max(maxY, maxYArr[si]);\n            const collapsed = !(gl.collapsedSeriesIndices.indexOf(si) < 0 && gl.ancillaryCollapsedSeriesIndices.indexOf(si) < 0);\n            if (!collapsed) {\n              gl.allSeriesCollapsed = false;\n            }\n          }\n        }\n        if (cnf.yaxis[ai].min !== void 0) {\n          if (typeof cnf.yaxis[ai].min === \"function\") {\n            minY = cnf.yaxis[ai].min(minY);\n          } else {\n            minY = cnf.yaxis[ai].min;\n          }\n        }\n        if (cnf.yaxis[ai].max !== void 0) {\n          if (typeof cnf.yaxis[ai].max === \"function\") {\n            maxY = cnf.yaxis[ai].max(maxY);\n          } else {\n            maxY = cnf.yaxis[ai].max;\n          }\n        }\n        gl.barGroups = gl.barGroups.filter((v, i, a) => a.indexOf(v) === i);\n        const yaxe = cnf.yaxis[ai];\n        const participates = canAlignZero && yaxe.alignZero === true && !yaxe.logarithmic && yaxe.min === void 0 && yaxe.max === void 0 && gl.ignoreYAxisIndexes.indexOf(ai) < 0 && Utils$1.isNumber(minY) && Utils$1.isNumber(maxY);\n        if (participates) {\n          alignZeroParticipants.push({ ai, minY, maxY });\n        } else {\n          this.setYScaleForIndex(ai, minY, maxY);\n          axisSeries.forEach((si) => {\n            minYArr[si] = gl.yAxisScale[ai].niceMin;\n            maxYArr[si] = gl.yAxisScale[ai].niceMax;\n          });\n        }\n      } else {\n        this.setYScaleForIndex(ai, 0, -Number.MAX_VALUE);\n      }\n    });\n    if (alignZeroParticipants.length >= 2) {\n      alignZeroParticipants.forEach((p) => {\n        this.setYScaleForIndex(p.ai, p.minY, p.maxY);\n        axisSeriesMap[p.ai].forEach((si) => {\n          minYArr[si] = gl.yAxisScale[p.ai].niceMin;\n          maxYArr[si] = gl.yAxisScale[p.ai].niceMax;\n        });\n      });\n      let targetRatio = 0;\n      alignZeroParticipants.forEach((p) => {\n        const scale = gl.yAxisScale[p.ai];\n        const range = scale.niceMax - scale.niceMin;\n        if (range > 0) {\n          const r = -scale.niceMin / range;\n          if (r > targetRatio) targetRatio = r;\n        }\n      });\n      if (targetRatio > 1) targetRatio = 1;\n      if (targetRatio < 0) targetRatio = 0;\n      const niceRoundUp = (raw) => {\n        if (raw <= 0) return 1;\n        const mag = Math.floor(Math.log10(raw));\n        const magPow = Math.pow(10, mag);\n        const msd = raw / magPow;\n        let mult;\n        if (msd <= 1 + 1e-9) mult = 1;\n        else if (msd <= 2 + 1e-9) mult = 2;\n        else if (msd <= 2.5 + 1e-9) mult = 2.5;\n        else if (msd <= 5 + 1e-9) mult = 5;\n        else mult = 10;\n        return mult * magPow;\n      };\n      alignZeroParticipants.forEach((p) => {\n        const scale = gl.yAxisScale[p.ai];\n        if (!scale.result || scale.result.length < 2) return;\n        const range = scale.niceMax - scale.niceMin;\n        if (range <= 0) return;\n        const r = -scale.niceMin / range;\n        if (Math.abs(r - targetRatio) <= 1e-9) return;\n        const extendMin = r < targetRatio && targetRatio < 1 - 1e-9;\n        const extendMaxOnly = !extendMin && r > targetRatio && targetRatio > 1e-9;\n        if (!extendMin && !extendMaxOnly) return;\n        const targetNiceMin = extendMin ? -targetRatio * scale.niceMax / (1 - targetRatio) : scale.niceMin;\n        const targetNiceMax = extendMaxOnly ? -scale.niceMin * (1 - targetRatio) / targetRatio : scale.niceMax;\n        const newRange = targetNiceMax - targetNiceMin;\n        if (newRange <= 0) return;\n        const desiredTicks = Math.max(scale.result.length, 5);\n        const newStep = niceRoundUp(newRange / Math.max(desiredTicks - 1, 1));\n        if (newStep <= 0) return;\n        let newNiceMin;\n        let newNiceMax;\n        if (extendMin) {\n          newNiceMin = Math.floor(targetNiceMin / newStep + 1e-9) * newStep;\n          const requiredMax = targetRatio > 1e-9 ? newNiceMin * (targetRatio - 1) / targetRatio : scale.niceMax;\n          const maxNeeded = Math.max(requiredMax, scale.niceMax);\n          newNiceMax = Math.ceil(maxNeeded / newStep - 1e-9) * newStep;\n        } else {\n          newNiceMax = Math.ceil(targetNiceMax / newStep - 1e-9) * newStep;\n          const requiredMin = targetRatio < 1 - 1e-9 ? -targetRatio * newNiceMax / (1 - targetRatio) : scale.niceMin;\n          const minNeeded = Math.min(requiredMin, scale.niceMin);\n          newNiceMin = Math.floor(minNeeded / newStep + 1e-9) * newStep;\n        }\n        scale.result = [];\n        for (let v = newNiceMin; v <= newNiceMax + newStep * 1e-9; v = Utils$1.preciseAddition(v, newStep)) {\n          scale.result.push(Utils$1.stripNumber(v, 7));\n        }\n        scale.niceMin = newNiceMin;\n        scale.niceMax = newNiceMax;\n        axisSeriesMap[p.ai].forEach((si) => {\n          minYArr[si] = scale.niceMin;\n          maxYArr[si] = scale.niceMax;\n        });\n      });\n    } else if (alignZeroParticipants.length === 1) {\n      const p = alignZeroParticipants[0];\n      this.setYScaleForIndex(p.ai, p.minY, p.maxY);\n      axisSeriesMap[p.ai].forEach((si) => {\n        minYArr[si] = gl.yAxisScale[p.ai].niceMin;\n        maxYArr[si] = gl.yAxisScale[p.ai].niceMax;\n      });\n    }\n  }\n}\nclass Range {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.scales = new Scales(this.w);\n  }\n  init() {\n    this.setYRange();\n    this.setXRange();\n    this.setZRange();\n  }\n  /**\n   * @param {number} startingSeriesIndex\n   * @param {number | null} [endingSeriesIndex]\n   */\n  getMinYMaxY(startingSeriesIndex, lowestY = Number.MAX_VALUE, highestY = -Number.MAX_VALUE, endingSeriesIndex = null) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    let maxY = -Number.MAX_VALUE;\n    let minY = Number.MIN_VALUE;\n    if (endingSeriesIndex === null) {\n      endingSeriesIndex = startingSeriesIndex + 1;\n    }\n    const series = this.w.seriesData.series;\n    let seriesMin = series;\n    let seriesMax = series;\n    if (cnf.chart.type === \"candlestick\") {\n      seriesMin = this.w.candleData.seriesCandleL;\n      seriesMax = this.w.candleData.seriesCandleH;\n    } else if (cnf.chart.type === \"boxPlot\") {\n      seriesMin = this.w.candleData.seriesCandleO;\n      seriesMax = this.w.candleData.seriesCandleC;\n    } else if (cnf.chart.type === \"violin\") {\n      seriesMin = this.w.violinData.seriesViolinMin;\n      seriesMax = this.w.violinData.seriesViolinMax;\n    } else if (this.w.axisFlags.isRangeData) {\n      seriesMin = this.w.rangeData.seriesRangeStart;\n      seriesMax = this.w.rangeData.seriesRangeEnd;\n    }\n    let autoScaleYaxis = false;\n    if (this.w.seriesData.seriesX.length >= endingSeriesIndex) {\n      const brush = (\n        /** @type {any} */\n        (_a = gl.brushSource) == null ? void 0 : _a.w.config.chart.brush\n      );\n      if (cnf.chart.zoom.enabled && cnf.chart.zoom.autoScaleYaxis || (brush == null ? void 0 : brush.enabled) && (brush == null ? void 0 : brush.autoScaleYaxis)) {\n        autoScaleYaxis = true;\n      }\n    }\n    for (let i = startingSeriesIndex; i < endingSeriesIndex; i++) {\n      gl.dataPoints = Math.max(gl.dataPoints, series[i].length);\n      const seriesType = (\n        /** @type {Record<string,any>} */\n        cnf.series[i].type\n      );\n      if (this.w.labelData.categoryLabels.length) {\n        gl.dataPoints = this.w.labelData.categoryLabels.filter(\n          (label) => typeof label !== \"undefined\"\n        ).length;\n      }\n      if (this.w.labelData.labels.length && cnf.xaxis.type !== \"datetime\" && /**\n       * @param {number} a\n       * @param {number[]} c\n       */\n      this.w.seriesData.series.reduce((a, c) => a + c.length, 0) !== 0) {\n        gl.dataPoints = Math.max(gl.dataPoints, this.w.labelData.labels.length);\n      }\n      let firstXIndex = 0;\n      let lastXIndex = series[i].length - 1;\n      if (autoScaleYaxis) {\n        if (cnf.xaxis.min) {\n          for (; firstXIndex < lastXIndex && this.w.seriesData.seriesX[i][firstXIndex] < cnf.xaxis.min; firstXIndex++) {\n          }\n        }\n        if (cnf.xaxis.max) {\n          for (; lastXIndex > firstXIndex && this.w.seriesData.seriesX[i][lastXIndex] > cnf.xaxis.max; lastXIndex--) {\n          }\n        }\n      }\n      for (let j = firstXIndex; j <= lastXIndex && j < this.w.seriesData.series[i].length; j++) {\n        let val = series[i][j];\n        if (val !== null && Utils$1.isNumber(val)) {\n          if (typeof ((_b = seriesMax[i]) == null ? void 0 : _b[j]) !== \"undefined\") {\n            maxY = Math.max(maxY, seriesMax[i][j]);\n            lowestY = Math.min(lowestY, seriesMax[i][j]);\n          }\n          if (typeof ((_c = seriesMin[i]) == null ? void 0 : _c[j]) !== \"undefined\") {\n            lowestY = Math.min(lowestY, seriesMin[i][j]);\n            highestY = Math.max(highestY, seriesMin[i][j]);\n          }\n          switch (seriesType) {\n            case \"candlestick\":\n              {\n                if (typeof this.w.candleData.seriesCandleC[i][j] !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.candleData.seriesCandleH[i][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.candleData.seriesCandleL[i][j]\n                  );\n                }\n              }\n              break;\n            case \"boxPlot\":\n              {\n                if (typeof this.w.candleData.seriesCandleC[i][j] !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.candleData.seriesCandleC[i][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.candleData.seriesCandleO[i][j]\n                  );\n                }\n              }\n              break;\n            case \"violin\":\n              {\n                if (typeof ((_d = this.w.violinData.seriesViolinMax[i]) == null ? void 0 : _d[j]) !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.violinData.seriesViolinMax[i][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.violinData.seriesViolinMin[i][j]\n                  );\n                }\n              }\n              break;\n          }\n          if (seriesType && seriesType !== \"candlestick\" && seriesType !== \"boxPlot\" && seriesType !== \"violin\" && seriesType !== \"rangeArea\" && seriesType !== \"rangeBar\") {\n            maxY = Math.max(maxY, this.w.seriesData.series[i][j]);\n            lowestY = Math.min(lowestY, this.w.seriesData.series[i][j]);\n          }\n          if (this.w.seriesData.seriesGoals[i] && this.w.seriesData.seriesGoals[i][j] && Array.isArray(this.w.seriesData.seriesGoals[i][j])) {\n            this.w.seriesData.seriesGoals[i][j].forEach(\n              (g) => {\n                maxY = Math.max(maxY, g.value);\n                lowestY = Math.min(lowestY, g.value);\n              }\n            );\n          }\n          if (this.w.config.chart.type === \"boxPlot\" || seriesType === \"boxPlot\") {\n            const boxPts = (_f = (_e = this.w.candleData.seriesBoxPoints) == null ? void 0 : _e[i]) == null ? void 0 : _f[j];\n            if (boxPts) {\n              for (let p = 0; p < boxPts.length; p++) {\n                const pv = boxPts[p];\n                if (typeof pv === \"number\") {\n                  maxY = Math.max(maxY, pv);\n                  lowestY = Math.min(lowestY, pv);\n                }\n              }\n            }\n          }\n          highestY = maxY;\n          val = Utils$1.noExponents(val);\n          if (Utils$1.isFloat(val)) {\n            gl.yValueDecimal = Math.max(\n              gl.yValueDecimal,\n              val.toString().split(\".\")[1].length\n            );\n          }\n          if (minY > ((_g = seriesMin[i]) == null ? void 0 : _g[j]) && ((_h = seriesMin[i]) == null ? void 0 : _h[j]) < 0) {\n            minY = seriesMin[i][j];\n          }\n        } else {\n          gl.hasNullValues = true;\n        }\n      }\n      if (seriesType === \"bar\" || seriesType === \"column\") {\n        if (minY < 0 && maxY < 0) {\n          maxY = 0;\n          highestY = Math.max(highestY, 0);\n        }\n        if (minY === Number.MIN_VALUE) {\n          minY = 0;\n          lowestY = Math.min(lowestY, 0);\n        }\n      }\n    }\n    if (cnf.chart.type === \"rangeBar\" && this.w.rangeData.seriesRangeStart.length && gl.isBarHorizontal) {\n      minY = lowestY;\n    }\n    if (cnf.chart.type === \"bar\") {\n      if (minY < 0 && maxY < 0) {\n        maxY = 0;\n      }\n      if (minY === Number.MIN_VALUE) {\n        minY = 0;\n      }\n    }\n    return {\n      minY,\n      maxY,\n      lowestY,\n      highestY\n    };\n  }\n  setYRange() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    gl.maxY = -Number.MAX_VALUE;\n    gl.minY = Number.MIN_VALUE;\n    let lowestYInAllSeries = Number.MAX_VALUE;\n    let minYMaxY;\n    if (gl.isMultipleYAxis) {\n      lowestYInAllSeries = Number.MAX_VALUE;\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        minYMaxY = this.getMinYMaxY(i);\n        gl.minYArr[i] = minYMaxY.lowestY;\n        gl.maxYArr[i] = minYMaxY.highestY;\n        lowestYInAllSeries = Math.min(lowestYInAllSeries, minYMaxY.lowestY);\n      }\n    }\n    minYMaxY = this.getMinYMaxY(\n      0,\n      lowestYInAllSeries,\n      void 0,\n      this.w.seriesData.series.length\n    );\n    if (cnf.chart.type === \"bar\") {\n      gl.minY = minYMaxY.minY;\n      gl.maxY = minYMaxY.maxY;\n    } else {\n      gl.minY = minYMaxY.lowestY;\n      gl.maxY = minYMaxY.highestY;\n    }\n    lowestYInAllSeries = minYMaxY.lowestY;\n    if (cnf.chart.stacked) {\n      this._setStackedMinMax();\n    }\n    if (cnf.chart.type === \"line\" || cnf.chart.type === \"area\" || cnf.chart.type === \"scatter\" || cnf.chart.type === \"candlestick\" || cnf.chart.type === \"boxPlot\" || cnf.chart.type === \"violin\" || cnf.chart.type === \"rangeBar\" && !gl.isBarHorizontal) {\n      if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY) {\n        gl.minY = lowestYInAllSeries;\n      }\n    } else {\n      gl.minY = gl.minY !== Number.MIN_VALUE ? Math.min(minYMaxY.minY, gl.minY) : minYMaxY.minY;\n    }\n    cnf.yaxis.forEach((yaxe, index) => {\n      if (yaxe.max !== void 0) {\n        if (typeof yaxe.max === \"number\") {\n          gl.maxYArr[index] = yaxe.max;\n        } else if (typeof yaxe.max === \"function\") {\n          gl.maxYArr[index] = yaxe.max(\n            gl.isMultipleYAxis ? gl.maxYArr[index] : gl.maxY\n          );\n        }\n        gl.maxY = gl.maxYArr[index];\n      }\n      if (yaxe.min !== void 0) {\n        if (typeof yaxe.min === \"number\") {\n          gl.minYArr[index] = yaxe.min;\n        } else if (typeof yaxe.min === \"function\") {\n          gl.minYArr[index] = yaxe.min(\n            gl.isMultipleYAxis ? gl.minYArr[index] === Number.MIN_VALUE ? 0 : gl.minYArr[index] : gl.minY\n          );\n        }\n        gl.minY = gl.minYArr[index];\n      }\n    });\n    if (gl.isBarHorizontal) {\n      const minmax = [\"min\", \"max\"];\n      minmax.forEach((m) => {\n        if (cnf.xaxis[m] !== void 0 && typeof cnf.xaxis[m] === \"number\") {\n          m === \"min\" ? gl.minY = cnf.xaxis[m] : gl.maxY = cnf.xaxis[m];\n        }\n      });\n    }\n    if (gl.isMultipleYAxis) {\n      this.scales.scaleMultipleYAxes();\n      gl.minY = lowestYInAllSeries;\n    } else {\n      this.scales.setYScaleForIndex(0, gl.minY, gl.maxY);\n      gl.minY = gl.yAxisScale[0].niceMin;\n      gl.maxY = gl.yAxisScale[0].niceMax;\n      gl.minYArr[0] = gl.minY;\n      gl.maxYArr[0] = gl.maxY;\n    }\n    gl.barGroups = [];\n    gl.lineGroups = [];\n    gl.areaGroups = [];\n    cnf.series.forEach((s) => {\n      const _s = (\n        /** @type {any} */\n        s\n      );\n      const type = _s.type || cnf.chart.type;\n      switch (type) {\n        case \"bar\":\n        case \"column\":\n          gl.barGroups.push(_s.group);\n          break;\n        case \"line\":\n          gl.lineGroups.push(_s.group);\n          break;\n        case \"area\":\n          gl.areaGroups.push(_s.group);\n          break;\n      }\n    });\n    gl.barGroups = gl.barGroups.filter((v, i, a) => a.indexOf(v) === i);\n    gl.lineGroups = gl.lineGroups.filter((v, i, a) => a.indexOf(v) === i);\n    gl.areaGroups = gl.areaGroups.filter((v, i, a) => a.indexOf(v) === i);\n    return {\n      minY: gl.minY,\n      maxY: gl.maxY,\n      minYArr: gl.minYArr,\n      maxYArr: gl.maxYArr,\n      yAxisScale: gl.yAxisScale\n    };\n  }\n  setXRange() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    const isXNumeric = cnf.xaxis.type === \"numeric\" || cnf.xaxis.type === \"datetime\" || cnf.xaxis.type === \"category\" && !this.w.axisFlags.noLabelsProvided || this.w.axisFlags.noLabelsProvided || this.w.axisFlags.isXNumeric;\n    const getInitialMinXMaxX = () => {\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        if (this.w.labelData.labels[i]) {\n          for (let j = 0; j < this.w.labelData.labels[i].length; j++) {\n            if (this.w.labelData.labels[i][j] !== null && Utils$1.isNumber(this.w.labelData.labels[i][j])) {\n              gl.maxX = Math.max(\n                gl.maxX,\n                /** @type {number} */\n                /** @type {any} */\n                this.w.labelData.labels[i][j]\n              );\n              gl.initialMaxX = Math.max(\n                gl.maxX,\n                /** @type {number} */\n                /** @type {any} */\n                this.w.labelData.labels[i][j]\n              );\n              gl.minX = Math.min(\n                gl.minX,\n                /** @type {number} */\n                /** @type {any} */\n                this.w.labelData.labels[i][j]\n              );\n              gl.initialMinX = Math.min(\n                gl.minX,\n                /** @type {number} */\n                /** @type {any} */\n                this.w.labelData.labels[i][j]\n              );\n            }\n          }\n        }\n      }\n    };\n    if (this.w.axisFlags.isXNumeric) {\n      getInitialMinXMaxX();\n    }\n    if (this.w.axisFlags.noLabelsProvided) {\n      if (cnf.xaxis.categories.length === 0) {\n        gl.maxX = /** @type {any} */\n        this.w.labelData.labels[this.w.labelData.labels.length - 1];\n        gl.initialMaxX = /** @type {any} */\n        this.w.labelData.labels[this.w.labelData.labels.length - 1];\n        gl.minX = 1;\n        gl.initialMinX = 1;\n      }\n    }\n    if (this.w.axisFlags.isXNumeric || this.w.axisFlags.noLabelsProvided || this.w.axisFlags.dataFormatXNumeric) {\n      let ticks = 10;\n      if (cnf.xaxis.tickAmount === void 0) {\n        ticks = Math.round(gl.svgWidth / 150);\n        if (cnf.xaxis.type === \"numeric\" && gl.dataPoints < 30) {\n          ticks = gl.dataPoints - 1;\n        }\n        if (ticks > gl.dataPoints && gl.dataPoints !== 0) {\n          ticks = gl.dataPoints - 1;\n        }\n      } else if (cnf.xaxis.tickAmount === \"dataPoints\") {\n        if (this.w.seriesData.series.length > 1) {\n          ticks = this.w.seriesData.series[gl.maxValsInArrayIndex].length - 1;\n        }\n        if (this.w.axisFlags.isXNumeric) {\n          const diff = Math.round(gl.maxX - gl.minX);\n          if (diff < 30) {\n            ticks = diff;\n          }\n        }\n      } else {\n        ticks = cnf.xaxis.tickAmount;\n      }\n      gl.xTickAmount = ticks;\n      if (cnf.xaxis.max !== void 0 && typeof cnf.xaxis.max === \"number\") {\n        gl.maxX = cnf.xaxis.max;\n      }\n      if (cnf.xaxis.min !== void 0 && typeof cnf.xaxis.min === \"number\") {\n        gl.minX = cnf.xaxis.min;\n      }\n      if (cnf.xaxis.range !== void 0) {\n        gl.minX = gl.maxX - cnf.xaxis.range;\n      }\n      if (gl.minX !== Number.MAX_VALUE && gl.maxX !== -Number.MAX_VALUE) {\n        if (cnf.xaxis.convertedCatToNumeric && !this.w.axisFlags.dataFormatXNumeric) {\n          const catScale = [];\n          for (let i = gl.minX - 1; i < gl.maxX; i++) {\n            catScale.push(i + 1);\n          }\n          gl.xAxisScale = {\n            result: catScale,\n            niceMin: catScale[0],\n            niceMax: catScale[catScale.length - 1]\n          };\n        } else {\n          gl.xAxisScale = this.scales.setXScale(gl.minX, gl.maxX);\n        }\n      } else {\n        gl.xAxisScale = this.scales.linearScale(\n          0,\n          ticks,\n          ticks,\n          0,\n          cnf.xaxis.stepSize\n        );\n        if (this.w.axisFlags.noLabelsProvided && this.w.labelData.labels.length > 0) {\n          gl.xAxisScale = this.scales.linearScale(\n            1,\n            this.w.labelData.labels.length,\n            ticks - 1,\n            0,\n            cnf.xaxis.stepSize\n          );\n          this.w.seriesData.seriesX = /** @type {any} */\n          this.w.labelData.labels.slice();\n        }\n      }\n      if (isXNumeric) {\n        this.w.labelData.labels = /** @type {any} */\n        gl.xAxisScale.result.slice();\n      }\n    }\n    if (gl.isBarHorizontal && this.w.labelData.labels.length) {\n      gl.xTickAmount = this.w.labelData.labels.length;\n    }\n    this._handleSingleDataPoint();\n    this._getMinXDiff();\n    return {\n      minX: gl.minX,\n      maxX: gl.maxX\n    };\n  }\n  setZRange() {\n    const gl = this.w.globals;\n    if (!this.w.axisFlags.isDataXYZ) return;\n    for (let i = 0; i < this.w.seriesData.series.length; i++) {\n      if (typeof this.w.seriesData.seriesZ[i] !== \"undefined\") {\n        for (let j = 0; j < this.w.seriesData.seriesZ[i].length; j++) {\n          if (this.w.seriesData.seriesZ[i][j] !== null && Utils$1.isNumber(this.w.seriesData.seriesZ[i][j])) {\n            gl.maxZ = Math.max(gl.maxZ, this.w.seriesData.seriesZ[i][j]);\n            gl.minZ = Math.min(gl.minZ, this.w.seriesData.seriesZ[i][j]);\n          }\n        }\n      }\n    }\n  }\n  _handleSingleDataPoint() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    if (gl.minX === gl.maxX) {\n      const datetimeObj = new DateTime(this.w);\n      if (cnf.xaxis.type === \"datetime\") {\n        const newMinX = datetimeObj.getDate(gl.minX);\n        if (cnf.xaxis.labels.datetimeUTC) {\n          newMinX.setUTCDate(newMinX.getUTCDate() - 2);\n        } else {\n          newMinX.setDate(newMinX.getDate() - 2);\n        }\n        gl.minX = new Date(newMinX).getTime();\n        const newMaxX = datetimeObj.getDate(gl.maxX);\n        if (cnf.xaxis.labels.datetimeUTC) {\n          newMaxX.setUTCDate(newMaxX.getUTCDate() + 2);\n        } else {\n          newMaxX.setDate(newMaxX.getDate() + 2);\n        }\n        gl.maxX = new Date(newMaxX).getTime();\n      } else if (cnf.xaxis.type === \"numeric\" || cnf.xaxis.type === \"category\" && !this.w.axisFlags.noLabelsProvided) {\n        gl.minX = gl.minX - 2;\n        gl.initialMinX = gl.minX;\n        gl.maxX = gl.maxX + 2;\n        gl.initialMaxX = gl.maxX;\n      }\n    }\n  }\n  _getMinXDiff() {\n    const gl = this.w.globals;\n    if (this.w.axisFlags.isXNumeric) {\n      this.w.seriesData.seriesX.forEach((sX) => {\n        if (sX.length) {\n          if (sX.length === 1) {\n            sX.push(\n              this.w.seriesData.seriesX[gl.maxValsInArrayIndex][this.w.seriesData.seriesX[gl.maxValsInArrayIndex].length - 1]\n            );\n          }\n          const seriesX = sX.slice();\n          seriesX.sort((a, b) => a - b);\n          seriesX.forEach((s, j) => {\n            if (j > 0) {\n              const xDiff = s - seriesX[j - 1];\n              if (xDiff > 0) {\n                gl.minXDiff = Math.min(xDiff, gl.minXDiff);\n              }\n            }\n          });\n          if (gl.dataPoints === 1 || gl.minXDiff === Number.MAX_VALUE) {\n            gl.minXDiff = 0.5;\n          }\n        }\n      });\n    }\n  }\n  _setStackedMinMax() {\n    const gl = this.w.globals;\n    if (!this.w.seriesData.series.length) return;\n    let seriesGroups = this.w.labelData.seriesGroups;\n    if (!seriesGroups.length) {\n      seriesGroups = [this.w.seriesData.seriesNames.map((name2) => name2)];\n    }\n    const stackedPoss = {};\n    const stackedNegs = {};\n    seriesGroups.forEach((group) => {\n      stackedPoss[group] = [];\n      stackedNegs[group] = [];\n      const indicesOfSeriesInGroup = this.w.config.series.map(\n        (serie, si) => group.indexOf(this.w.seriesData.seriesNames[si]) > -1 ? si : null\n      ).filter((f) => f !== null);\n      indicesOfSeriesInGroup.forEach((i) => {\n        var _a, _b, _c, _d;\n        for (let j = 0; j < this.w.seriesData.series[gl.maxValsInArrayIndex].length; j++) {\n          if (typeof stackedPoss[group][j] === \"undefined\") {\n            stackedPoss[group][j] = 0;\n            stackedNegs[group][j] = 0;\n          }\n          const stackSeries = this.w.config.chart.stacked && !gl.comboCharts || this.w.config.chart.stacked && gl.comboCharts && (!this.w.config.chart.stackOnlyBar || /** @type {Record<string,any>} */\n          ((_b = (_a = this.w.config.series) == null ? void 0 : _a[i]) == null ? void 0 : _b.type) === \"bar\" || /** @type {Record<string,any>} */\n          ((_d = (_c = this.w.config.series) == null ? void 0 : _c[i]) == null ? void 0 : _d.type) === \"column\");\n          if (stackSeries) {\n            if (this.w.seriesData.series[i][j] !== null && Utils$1.isNumber(this.w.seriesData.series[i][j])) {\n              this.w.seriesData.series[i][j] > 0 ? stackedPoss[group][j] += parseFloat(String(this.w.seriesData.series[i][j])) + 1e-4 : stackedNegs[group][j] += parseFloat(\n                String(this.w.seriesData.series[i][j])\n              );\n            }\n          }\n        }\n      });\n    });\n    Object.entries(stackedPoss).forEach(([key]) => {\n      stackedPoss[key].forEach(\n        (_, stgi) => {\n          gl.maxY = Math.max(gl.maxY, stackedPoss[key][stgi]);\n          gl.minY = Math.min(gl.minY, stackedNegs[key][stgi]);\n        }\n      );\n    });\n  }\n}\nfunction getThemePalettes() {\n  return {\n    // All colours pass WCAG 1.4.11 non-text contrast (≥ 3:1) against the\n    // default light (#fff) and dark (#293450) theme backgrounds.\n    palette1: [\"#008FFB\", \"#00A86F\", \"#CA8501\", \"#FF4560\", \"#846DD5\"],\n    palette2: [\"#6978CB\", \"#039DE2\", \"#49A84D\", \"#B39105\", \"#D68000\"],\n    palette3: [\"#209FCC\", \"#648291\", \"#D4526E\", \"#0FA783\", \"#A19285\"],\n    palette4: [\"#2FA59D\", \"#73A20B\", \"#099DE1\", \"#FD5D5D\", \"#648291\"],\n    palette5: [\"#2B908F\", \"#F56566\", \"#2EAB16\", \"#FA4443\", \"#1EA2BD\"],\n    palette6: [\"#449DD1\", \"#F86624\", \"#EA3A4A\", \"#9C63D1\", \"#899E2A\"],\n    palette7: [\"#DF475B\", \"#1B998B\", \"#7E75B7\", \"#F46036\", \"#B1911B\"],\n    palette8: [\"#9C63D1\", \"#F86624\", \"#B38F04\", \"#EA3A4A\", \"#2FA2B3\"],\n    palette9: [\"#98776F\", \"#A19285\", \"#A8705E\", \"#BA6560\", \"#A0927F\"],\n    palette10: [\"#C91EFF\", \"#A94BFD\", \"#6C6AFE\", \"#2983FF\", \"#009ED8\"],\n    // CVD-safe palettes (Wong 2011 / IBM design)\n    cvdDeuteranopia: [\n      \"#0072B2\",\n      \"#E69F00\",\n      \"#56B4E9\",\n      \"#009E73\",\n      \"#F0E442\",\n      \"#D55E00\",\n      \"#CC79A7\"\n    ],\n    cvdProtanopia: [\n      \"#0077BB\",\n      \"#EE7733\",\n      \"#009988\",\n      \"#EE3377\",\n      \"#BBBBBB\",\n      \"#33BBEE\",\n      \"#CC3311\"\n    ],\n    cvdTritanopia: [\n      \"#CC3311\",\n      \"#009988\",\n      \"#EE7733\",\n      \"#0077BB\",\n      \"#EE3377\",\n      \"#BBBBBB\",\n      \"#33BBEE\"\n    ],\n    highContrast: [\n      \"#005A9C\",\n      \"#C00000\",\n      \"#007A33\",\n      \"#6C3483\",\n      \"#7B3F00\",\n      \"#0097A7\",\n      \"#4A235A\"\n    ]\n  };\n}\nclass YAxis {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {any} [elgrid]\n   */\n  constructor(w, { theme = null, timeScale = null } = {}, elgrid) {\n    this.w = w;\n    this.elgrid = elgrid;\n    this.xaxisFontSize = w.config.xaxis.labels.style.fontSize;\n    this.axisFontFamily = w.config.xaxis.labels.style.fontFamily;\n    this.xaxisForeColors = w.config.xaxis.labels.style.colors;\n    this.isCategoryBarHorizontal = w.config.chart.type === \"bar\" && w.config.plotOptions.bar.horizontal;\n    this.xAxisoffX = w.config.xaxis.position === \"bottom\" ? w.layout.gridHeight : 0;\n    this.drawnLabels = [];\n    this.axesUtils = new AxesUtils(w, { theme, timeScale });\n  }\n  /**\n   * @param {number} realIndex\n   */\n  drawYaxis(realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const yaxisStyle = w.config.yaxis[realIndex].labels.style;\n    const {\n      fontSize: yaxisFontSize,\n      fontFamily: yaxisFontFamily,\n      fontWeight: yaxisFontWeight\n    } = yaxisStyle;\n    const elYaxis = graphics.group({\n      class: \"apexcharts-yaxis\",\n      rel: realIndex,\n      transform: `translate(${w.globals.translateYAxisX[realIndex]}, 0)`\n    });\n    if (this.axesUtils.isYAxisHidden(realIndex)) return elYaxis;\n    const elYaxisTexts = graphics.group({ class: \"apexcharts-yaxis-texts-g\" });\n    elYaxis.add(elYaxisTexts);\n    const tickAmount = w.globals.yAxisScale[realIndex].result.length - 1;\n    const labelsDivider = w.layout.gridHeight / tickAmount;\n    const lbFormatter = w.formatters.yLabelFormatters[realIndex];\n    const labels = this.axesUtils.checkForReversedLabels(\n      realIndex,\n      w.globals.yAxisScale[realIndex].result.slice()\n    );\n    if (w.config.yaxis[realIndex].labels.show) {\n      let lY = w.layout.translateY + w.config.yaxis[realIndex].labels.offsetY;\n      if (w.globals.isBarHorizontal) lY = 0;\n      else if (w.config.chart.type === \"heatmap\") lY -= labelsDivider / 2;\n      lY += parseInt(yaxisFontSize, 10) / 3;\n      let firstLabel = null;\n      for (let i = tickAmount; i >= 0; i--) {\n        const val = lbFormatter(labels[i], i, w);\n        let xPad = w.config.yaxis[realIndex].labels.padding;\n        if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0)\n          xPad *= -1;\n        const textAnchor = this.getTextAnchor(\n          w.config.yaxis[realIndex].labels.align,\n          w.config.yaxis[realIndex].opposite\n        );\n        const yColors = this.axesUtils.getYAxisForeColor(\n          yaxisStyle.colors,\n          realIndex\n        );\n        const foreColor = Array.isArray(yColors) ? yColors[i] : yColors;\n        const existingYLabels = Array.from(\n          w.dom.baseEl.querySelectorAll(\n            `.apexcharts-yaxis[rel='${realIndex}'] .apexcharts-yaxis-label tspan`\n          )\n        ).map((label2) => label2.textContent);\n        const label = graphics.drawText({\n          x: xPad,\n          y: lY,\n          text: existingYLabels.includes(val) && !w.config.yaxis[realIndex].labels.showDuplicates ? \"\" : val,\n          textAnchor,\n          fontSize: yaxisFontSize,\n          fontFamily: yaxisFontFamily,\n          fontWeight: yaxisFontWeight,\n          maxWidth: w.config.yaxis[realIndex].labels.maxWidth,\n          foreColor,\n          isPlainText: false,\n          cssClass: `apexcharts-yaxis-label ${yaxisStyle.cssClass}`\n        });\n        elYaxisTexts.add(label);\n        this.addTooltip(label, val);\n        if (firstLabel === null) {\n          firstLabel = label;\n        }\n        if (w.config.yaxis[realIndex].labels.rotate !== 0) {\n          this.rotateLabel(\n            graphics,\n            label,\n            firstLabel,\n            w.config.yaxis[realIndex].labels.rotate\n          );\n        }\n        lY += labelsDivider;\n      }\n    }\n    this.addYAxisTitle(graphics, elYaxis, realIndex);\n    this.addAxisBorder(graphics, elYaxis, realIndex, tickAmount, labelsDivider);\n    return elYaxis;\n  }\n  /**\n   * @param {string} align\n   * @param {boolean} opposite\n   */\n  getTextAnchor(align, opposite) {\n    if (align === \"left\") return \"start\";\n    if (align === \"center\") return \"middle\";\n    if (align === \"right\") return \"end\";\n    return opposite ? \"start\" : \"end\";\n  }\n  /**\n   * @param {any} label\n   * @param {any} val\n   */\n  addTooltip(label, val) {\n    const elTooltipTitle = BrowserAPIs.createElementNS(SVGNS, \"title\");\n    elTooltipTitle.textContent = Array.isArray(val) ? val.join(\" \") : val;\n    label.node.appendChild(elTooltipTitle);\n  }\n  /**\n   * @param {import('../Graphics').default} graphics\n   * @param {any} label\n   * @param {any} firstLabel\n   * @param {number} rotate\n   */\n  rotateLabel(graphics, label, firstLabel, rotate) {\n    const firstLabelCenter = graphics.rotateAroundCenter(firstLabel.node);\n    const labelCenter = graphics.rotateAroundCenter(label.node);\n    label.node.setAttribute(\n      \"transform\",\n      `rotate(${rotate} ${firstLabelCenter.x} ${labelCenter.y})`\n    );\n  }\n  /**\n   * @param {import('../Graphics').default} graphics\n   * @param {any} elYaxis\n   * @param {number} realIndex\n   */\n  addYAxisTitle(graphics, elYaxis, realIndex) {\n    const w = this.w;\n    if (w.config.yaxis[realIndex].title.text !== void 0) {\n      const elYaxisTitle = graphics.group({ class: \"apexcharts-yaxis-title\" });\n      const x = w.config.yaxis[realIndex].opposite ? w.globals.translateYAxisX[realIndex] : 0;\n      const elYAxisTitleText = graphics.drawText({\n        x,\n        y: w.layout.gridHeight / 2 + w.layout.translateY + w.config.yaxis[realIndex].title.offsetY,\n        text: w.config.yaxis[realIndex].title.text,\n        textAnchor: \"end\",\n        foreColor: w.config.yaxis[realIndex].title.style.color,\n        fontSize: w.config.yaxis[realIndex].title.style.fontSize,\n        fontWeight: w.config.yaxis[realIndex].title.style.fontWeight,\n        fontFamily: w.config.yaxis[realIndex].title.style.fontFamily,\n        cssClass: `apexcharts-yaxis-title-text ${w.config.yaxis[realIndex].title.style.cssClass}`\n      });\n      elYaxisTitle.add(elYAxisTitleText);\n      elYaxis.add(elYaxisTitle);\n    }\n  }\n  /**\n   * @param {import('../Graphics').default} graphics\n   * @param {any} elYaxis\n   * @param {number} realIndex\n   * @param {number} tickAmount\n   * @param {number} labelsDivider\n   */\n  addAxisBorder(graphics, elYaxis, realIndex, tickAmount, labelsDivider) {\n    const w = this.w;\n    const axisBorder = w.config.yaxis[realIndex].axisBorder;\n    let x = 31 + axisBorder.offsetX;\n    if (w.config.yaxis[realIndex].opposite) x = -31 - axisBorder.offsetX;\n    if (axisBorder.show) {\n      const elVerticalLine = graphics.drawLine(\n        x,\n        w.layout.translateY + axisBorder.offsetY - 2,\n        x,\n        w.layout.gridHeight + w.layout.translateY + axisBorder.offsetY + 2,\n        axisBorder.color,\n        0,\n        axisBorder.width\n      );\n      elYaxis.add(elVerticalLine);\n    }\n    if (w.config.yaxis[realIndex].axisTicks.show) {\n      this.axesUtils.drawYAxisTicks(\n        x,\n        tickAmount,\n        axisBorder,\n        w.config.yaxis[realIndex].axisTicks,\n        realIndex,\n        labelsDivider,\n        elYaxis\n      );\n    }\n  }\n  /**\n   * @param {number} realIndex\n   */\n  drawYaxisInversed(realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elXaxis = graphics.group({\n      class: \"apexcharts-xaxis apexcharts-yaxis-inversed\"\n    });\n    const elXaxisTexts = graphics.group({\n      class: \"apexcharts-xaxis-texts-g\",\n      transform: `translate(${w.layout.translateXAxisX}, ${w.layout.translateXAxisY})`\n    });\n    elXaxis.add(elXaxisTexts);\n    let tickAmount = w.globals.yAxisScale[realIndex].result.length - 1;\n    const labelsDivider = w.layout.gridWidth / tickAmount + 0.1;\n    let l = labelsDivider + w.config.xaxis.labels.offsetX;\n    const lbFormatter = w.formatters.xLabelFormatter;\n    let labels = this.axesUtils.checkForReversedLabels(\n      realIndex,\n      w.globals.yAxisScale[realIndex].result.slice()\n    );\n    const timescaleLabels = w.labelData.timescaleLabels;\n    if (timescaleLabels.length > 0) {\n      this.xaxisLabels = timescaleLabels.slice();\n      labels = timescaleLabels.slice();\n      tickAmount = labels.length;\n    }\n    if (w.config.xaxis.labels.show) {\n      for (let i = timescaleLabels.length ? 0 : tickAmount; timescaleLabels.length ? i < timescaleLabels.length : i >= 0; timescaleLabels.length ? i++ : i--) {\n        let val = lbFormatter == null ? void 0 : lbFormatter(labels[i], i, w);\n        let x = w.layout.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX);\n        if (timescaleLabels.length) {\n          const label = this.axesUtils.getLabel(\n            labels,\n            timescaleLabels,\n            x,\n            i,\n            this.drawnLabels,\n            this.xaxisFontSize\n          );\n          x = label.x;\n          val = label.text;\n          this.drawnLabels.push(label.text);\n          if (i === 0 && w.globals.skipFirstTimelinelabel) val = \"\";\n          if (i === labels.length - 1 && w.globals.skipLastTimelinelabel)\n            val = \"\";\n        }\n        const elTick = graphics.drawText({\n          x,\n          y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30 - (w.config.xaxis.position === \"top\" ? w.layout.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0),\n          text: val,\n          textAnchor: \"middle\",\n          foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors,\n          fontSize: this.xaxisFontSize,\n          fontFamily: this.axisFontFamily,\n          fontWeight: w.config.xaxis.labels.style.fontWeight,\n          isPlainText: false,\n          cssClass: `apexcharts-xaxis-label ${w.config.xaxis.labels.style.cssClass}`\n        });\n        elXaxisTexts.add(elTick);\n        this.addTooltip(elTick, val);\n        l += labelsDivider;\n      }\n    }\n    this.inversedYAxisTitleText(elXaxis);\n    this.inversedYAxisBorder(elXaxis);\n    return elXaxis;\n  }\n  /**\n   * @param {any} parent\n   */\n  inversedYAxisBorder(parent) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const axisBorder = w.config.xaxis.axisBorder;\n    if (axisBorder.show) {\n      let lineCorrection = 0;\n      if (w.config.chart.type === \"bar\" && w.axisFlags.isXNumeric)\n        lineCorrection -= 15;\n      const elHorzLine = graphics.drawLine(\n        w.globals.padHorizontal + lineCorrection + axisBorder.offsetX,\n        this.xAxisoffX,\n        w.layout.gridWidth,\n        this.xAxisoffX,\n        axisBorder.color,\n        0,\n        axisBorder.height\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n        this.elgrid.elGridBorders.add(elHorzLine);\n      } else {\n        parent.add(elHorzLine);\n      }\n    }\n  }\n  /**\n   * @param {any} parent\n   */\n  inversedYAxisTitleText(parent) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    if (w.config.xaxis.title.text !== void 0) {\n      const elYaxisTitle = graphics.group({\n        class: \"apexcharts-xaxis-title apexcharts-yaxis-title-inversed\"\n      });\n      const elYAxisTitleText = graphics.drawText({\n        x: w.layout.gridWidth / 2 + w.config.xaxis.title.offsetX,\n        y: this.xAxisoffX + parseFloat(this.xaxisFontSize) + parseFloat(w.config.xaxis.title.style.fontSize) + w.config.xaxis.title.offsetY + 20,\n        text: w.config.xaxis.title.text,\n        textAnchor: \"middle\",\n        fontSize: w.config.xaxis.title.style.fontSize,\n        fontFamily: w.config.xaxis.title.style.fontFamily,\n        fontWeight: w.config.xaxis.title.style.fontWeight,\n        foreColor: w.config.xaxis.title.style.color,\n        cssClass: `apexcharts-xaxis-title-text ${w.config.xaxis.title.style.cssClass}`\n      });\n      elYaxisTitle.add(elYAxisTitleText);\n      parent.add(elYaxisTitle);\n    }\n  }\n  /**\n   * @param {number} realIndex\n   * @param {boolean} yAxisOpposite\n   */\n  yAxisTitleRotate(realIndex, yAxisOpposite) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elYAxisLabelsWrap = w.dom.baseEl.querySelector(\n      `.apexcharts-yaxis[rel='${realIndex}'] .apexcharts-yaxis-texts-g`\n    );\n    const yAxisLabelsCoord = elYAxisLabelsWrap ? elYAxisLabelsWrap.getBoundingClientRect() : { width: 0, height: 0 };\n    const yAxisTitle = w.dom.baseEl.querySelector(\n      `.apexcharts-yaxis[rel='${realIndex}'] .apexcharts-yaxis-title text`\n    );\n    const yAxisTitleCoord = yAxisTitle ? yAxisTitle.getBoundingClientRect() : { width: 0, height: 0 };\n    if (yAxisTitle) {\n      const x = this.xPaddingForYAxisTitle(\n        realIndex,\n        yAxisLabelsCoord,\n        yAxisTitleCoord,\n        yAxisOpposite\n      );\n      yAxisTitle.setAttribute(\"x\", String(x.xPos - (yAxisOpposite ? 10 : 0)));\n      const titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle);\n      yAxisTitle.setAttribute(\n        \"transform\",\n        `rotate(${yAxisOpposite ? w.config.yaxis[realIndex].title.rotate * -1 : w.config.yaxis[realIndex].title.rotate} ${titleRotatingCenter.x} ${titleRotatingCenter.y})`\n      );\n    }\n  }\n  /**\n   * @param {number} realIndex\n   * @param {{width: number, height: number}} yAxisLabelsCoord\n   * @param {{width: number, height: number}} yAxisTitleCoord\n   * @param {boolean} yAxisOpposite\n   */\n  xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) {\n    const w = this.w;\n    let x = 0;\n    let padd = 10;\n    if (w.config.yaxis[realIndex].title.text === void 0 || realIndex < 0) {\n      return { xPos: x, padd: 0 };\n    }\n    if (yAxisOpposite) {\n      x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2;\n    } else {\n      x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2;\n      if (w.globals.isBarHorizontal) {\n        padd = 25;\n        x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd;\n      }\n    }\n    return { xPos: x, padd };\n  }\n  /**\n   * @param {Array<{width: number, height: number}>} yaxisLabelCoords\n   * @param {Array<{width: number, height: number}>} yTitleCoords\n   */\n  setYAxisXPosition(yaxisLabelCoords, yTitleCoords) {\n    const w = this.w;\n    let xLeft = 0;\n    let xRight = 0;\n    let leftOffsetX = 18;\n    let rightOffsetX = 1;\n    if (w.config.yaxis.length > 1) this.multipleYs = true;\n    w.config.yaxis.forEach((yaxe, index) => {\n      const shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.includes(index) || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0;\n      const axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width;\n      if (!yaxe.opposite) {\n        xLeft = w.layout.translateX - leftOffsetX;\n        if (!shouldNotDrawAxis) leftOffsetX += axisWidth + 20;\n        w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX;\n      } else {\n        if (w.globals.isBarHorizontal) {\n          xRight = w.layout.gridWidth + w.layout.translateX - 1;\n          w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX;\n        } else {\n          xRight = w.layout.gridWidth + w.layout.translateX + rightOffsetX;\n          if (!shouldNotDrawAxis) rightOffsetX += axisWidth + 20;\n          w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20;\n        }\n      }\n    });\n  }\n  setYAxisTextAlignments() {\n    const w = this.w;\n    const yaxis = Array.from(\n      w.dom.baseEl.getElementsByClassName(\"apexcharts-yaxis\")\n    );\n    yaxis.forEach((y, index) => {\n      const yaxe = w.config.yaxis[index];\n      if (yaxe && !yaxe.floating && yaxe.labels.align !== void 0) {\n        const yAxisInner = w.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${index}'] .apexcharts-yaxis-texts-g`\n        );\n        const yAxisTexts = Array.from(\n          w.dom.baseEl.querySelectorAll(\n            `.apexcharts-yaxis[rel='${index}'] .apexcharts-yaxis-label`\n          )\n        );\n        const rect = (\n          /** @type {Element} */\n          yAxisInner.getBoundingClientRect()\n        );\n        yAxisTexts.forEach((label) => {\n          label.setAttribute(\"text-anchor\", yaxe.labels.align);\n        });\n        if (yaxe.labels.align === \"left\" && !yaxe.opposite) {\n          yAxisInner.setAttribute(\n            \"transform\",\n            `translate(-${rect.width}, 0)`\n          );\n        } else if (yaxe.labels.align === \"center\") {\n          yAxisInner.setAttribute(\n            \"transform\",\n            `translate(${rect.width / 2 * (!yaxe.opposite ? -1 : 1)}, 0)`\n          );\n        } else if (yaxe.labels.align === \"right\" && yaxe.opposite) {\n          yAxisInner.setAttribute(\n            \"transform\",\n            `translate(${rect.width}, 0)`\n          );\n        }\n      }\n    });\n  }\n}\nclass Events {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.documentEvent = this.documentEvent.bind(this);\n  }\n  /**\n   * @param {string} name\n   * @param {Function} handler\n   */\n  addEventListener(name2, handler) {\n    const w = this.w;\n    if (Object.prototype.hasOwnProperty.call(w.globals.events, name2)) {\n      w.globals.events[name2].push(handler);\n    } else {\n      w.globals.events[name2] = [handler];\n    }\n  }\n  /**\n   * @param {string} name\n   * @param {Function} handler\n   */\n  removeEventListener(name2, handler) {\n    const w = this.w;\n    if (!Object.prototype.hasOwnProperty.call(w.globals.events, name2)) {\n      return;\n    }\n    const index = (\n      /** @type {Record<string,any>} */\n      w.globals.events[name2].indexOf(handler)\n    );\n    if (index !== -1) {\n      w.globals.events[name2].splice(\n        index,\n        1\n      );\n    }\n  }\n  /**\n   * @param {string} name\n   * @param {any[]} args\n   */\n  fireEvent(name2, args) {\n    const w = this.w;\n    if (!Object.prototype.hasOwnProperty.call(w.globals.events, name2)) {\n      return;\n    }\n    if (!args || !args.length) {\n      args = [];\n    }\n    const evs = (\n      /** @type {Record<string,any>} */\n      w.globals.events[name2]\n    );\n    const l = evs.length;\n    for (let i = 0; i < l; i++) {\n      evs[i].apply(null, args);\n    }\n  }\n  setupEventHandlers() {\n    const w = this.w;\n    const me = this.ctx;\n    const clickableArea = w.dom.baseEl.querySelector(w.globals.chartClass);\n    this.ctx.eventList.forEach((event) => {\n      clickableArea == null ? void 0 : clickableArea.addEventListener(\n        event,\n        (e) => {\n          const capturedSeriesIndex = e.target.getAttribute(\"i\") === null && w.interact.capturedSeriesIndex !== -1 ? w.interact.capturedSeriesIndex : e.target.getAttribute(\"i\");\n          const capturedDataPointIndex = e.target.getAttribute(\"j\") === null && w.interact.capturedDataPointIndex !== -1 ? w.interact.capturedDataPointIndex : e.target.getAttribute(\"j\");\n          const opts = Object.assign({}, w, {\n            seriesIndex: w.globals.axisCharts ? capturedSeriesIndex : 0,\n            dataPointIndex: capturedDataPointIndex\n          });\n          if (e.type === \"keydown\") {\n            if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n              if (me.ctx.keyboardNavigation) {\n                me.ctx.keyboardNavigation.handleKey(e);\n              }\n              if (typeof w.config.chart.events.keyDown === \"function\") {\n                w.config.chart.events.keyDown(e, me, opts);\n              }\n              me.ctx.events.fireEvent(\"keydown\", [e, me, opts]);\n            }\n          } else if (e.type === \"keyup\") {\n            if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n              if (typeof w.config.chart.events.keyUp === \"function\") {\n                w.config.chart.events.keyUp(e, me, opts);\n              }\n              me.ctx.events.fireEvent(\"keyup\", [e, me, opts]);\n            }\n          } else if (e.type === \"mousemove\" || e.type === \"touchmove\") {\n            if (typeof w.config.chart.events.mouseMove === \"function\") {\n              w.config.chart.events.mouseMove(e, me, opts);\n            }\n          } else if (e.type === \"mouseleave\" || e.type === \"touchleave\") {\n            if (typeof w.config.chart.events.mouseLeave === \"function\") {\n              w.config.chart.events.mouseLeave(e, me, opts);\n            }\n          } else if (e.type === \"mouseup\" && e.which === 1 || e.type === \"touchend\") {\n            if (typeof w.config.chart.events.click === \"function\") {\n              w.config.chart.events.click(e, me, opts);\n            }\n            me.ctx.events.fireEvent(\"click\", [e, me, opts]);\n          }\n        },\n        { capture: false, passive: true }\n      );\n    });\n    this.ctx.eventList.forEach((event) => {\n      w.dom.baseEl.addEventListener(event, this.documentEvent, {\n        passive: true\n      });\n    });\n    this.ctx.core.setupBrushHandler();\n  }\n  /**\n   * @param {any} e\n   */\n  documentEvent(e) {\n    const w = this.w;\n    const target = e.target.className;\n    if (e.type === \"click\") {\n      const elMenu = w.dom.baseEl.querySelector(\".apexcharts-menu\");\n      if (elMenu && elMenu.classList.contains(\"apexcharts-menu-open\") && target !== \"apexcharts-menu-icon\") {\n        elMenu.classList.remove(\"apexcharts-menu-open\");\n      }\n    }\n    w.interact.clientX = e.type === \"touchmove\" ? e.touches[0].clientX : e.clientX;\n    w.interact.clientY = e.type === \"touchmove\" ? e.touches[0].clientY : e.clientY;\n  }\n}\nclass Localization {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  /**\n   * @param {string} localeName\n   */\n  setCurrentLocaleValues(localeName) {\n    let locales = this.w.config.chart.locales;\n    const globalApex = Environment.getApex();\n    if (globalApex.chart && globalApex.chart.locales && globalApex.chart.locales.length > 0) {\n      locales = this.w.config.chart.locales.concat(globalApex.chart.locales);\n    }\n    const selectedLocale = locales.filter(\n      (c) => c.name === localeName\n    )[0];\n    if (selectedLocale) {\n      const ret = Utils$1.extend(en, selectedLocale);\n      this.w.globals.locale = ret.options;\n    } else {\n      throw new Error(\n        \"Wrong locale name provided. Please make sure you set the correct locale name in options\"\n      );\n    }\n  }\n}\nclass Axes {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * @param {string} type\n   * @param {any} elgrid\n   */\n  drawAxis(type, elgrid) {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    const xAxis = new XAxis(this.w, this.ctx, elgrid);\n    const yAxis = new YAxis(this.w, { theme: this.ctx.theme, timeScale: this.ctx.timeScale }, elgrid);\n    if (gl.axisCharts && type !== \"radar\") {\n      let elXaxis, elYaxis;\n      if (gl.isBarHorizontal) {\n        elYaxis = yAxis.drawYaxisInversed(0);\n        elXaxis = xAxis.drawXaxisInversed(0);\n        this.w.dom.elGraphical.add(elXaxis);\n        this.w.dom.elGraphical.add(elYaxis);\n      } else {\n        elXaxis = xAxis.drawXaxis();\n        this.w.dom.elGraphical.add(elXaxis);\n        cnf.yaxis.map((yaxe, index) => {\n          if (gl.ignoreYAxisIndexes.indexOf(index) === -1) {\n            elYaxis = yAxis.drawYaxis(index);\n            this.w.dom.Paper.add(elYaxis);\n            if (this.w.config.grid.position === \"back\") {\n              const inner = this.w.dom.Paper.children()[1];\n              if (inner) {\n                inner.remove();\n                this.w.dom.Paper.add(inner);\n              }\n            }\n          }\n        });\n      }\n    }\n  }\n}\nclass Crosshairs {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  drawXCrosshairs() {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const filters = new Filters(this.w);\n    const crosshairGradient = w.config.xaxis.crosshairs.fill.gradient;\n    const crosshairShadow = w.config.xaxis.crosshairs.dropShadow;\n    const fillType = w.config.xaxis.crosshairs.fill.type;\n    const gradientFrom = crosshairGradient.colorFrom;\n    const gradientTo = crosshairGradient.colorTo;\n    const opacityFrom = crosshairGradient.opacityFrom;\n    const opacityTo = crosshairGradient.opacityTo;\n    const stops = crosshairGradient.stops;\n    const shadow = \"none\";\n    const dropShadow = crosshairShadow.enabled;\n    const shadowLeft = crosshairShadow.left;\n    const shadowTop = crosshairShadow.top;\n    const shadowBlur = crosshairShadow.blur;\n    const shadowColor = crosshairShadow.color;\n    const shadowOpacity = crosshairShadow.opacity;\n    let xcrosshairsFill = w.config.xaxis.crosshairs.fill.color;\n    if (w.config.xaxis.crosshairs.show) {\n      if (fillType === \"gradient\") {\n        xcrosshairsFill = graphics.drawGradient(\n          \"vertical\",\n          gradientFrom,\n          gradientTo,\n          opacityFrom,\n          opacityTo,\n          null,\n          stops,\n          []\n        );\n      }\n      let xcrosshairs = graphics.drawRect();\n      if (w.config.xaxis.crosshairs.width === 1) {\n        xcrosshairs = graphics.drawLine(0, 0, 0, 0);\n      }\n      let gridHeight = w.layout.gridHeight;\n      if (!Utils$1.isNumber(gridHeight) || gridHeight < 0) {\n        gridHeight = 0;\n      }\n      let crosshairsWidth = w.config.xaxis.crosshairs.width;\n      if (!Utils$1.isNumber(crosshairsWidth) || Number(crosshairsWidth) < 0) {\n        crosshairsWidth = 0;\n      }\n      xcrosshairs.attr({\n        class: \"apexcharts-xcrosshairs\",\n        x: 0,\n        y: 0,\n        y2: gridHeight,\n        width: crosshairsWidth,\n        height: gridHeight,\n        fill: xcrosshairsFill,\n        filter: shadow,\n        \"fill-opacity\": w.config.xaxis.crosshairs.opacity,\n        stroke: w.config.xaxis.crosshairs.stroke.color,\n        \"stroke-width\": w.config.xaxis.crosshairs.stroke.width,\n        \"stroke-dasharray\": w.config.xaxis.crosshairs.stroke.dashArray\n      });\n      if (dropShadow) {\n        xcrosshairs = filters.dropShadow(xcrosshairs, {\n          left: shadowLeft,\n          top: shadowTop,\n          blur: shadowBlur,\n          color: shadowColor,\n          opacity: shadowOpacity\n        });\n      }\n      w.dom.elGraphical.add(xcrosshairs);\n    }\n  }\n  drawYCrosshairs() {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const crosshair = (\n      /** @type {any[]} */\n      w.config.yaxis[0].crosshairs\n    );\n    const offX = w.globals.barPadForNumericAxis;\n    if (\n      /** @type {any[]} */\n      w.config.yaxis[0].crosshairs.show\n    ) {\n      const ycrosshairs = graphics.drawLine(\n        -offX,\n        0,\n        w.layout.gridWidth + offX,\n        0,\n        crosshair.stroke.color,\n        crosshair.stroke.dashArray,\n        crosshair.stroke.width\n      );\n      ycrosshairs.attr({\n        class: \"apexcharts-ycrosshairs\"\n      });\n      w.dom.elGraphical.add(ycrosshairs);\n    }\n    const ycrosshairsHidden = graphics.drawLine(\n      -offX,\n      0,\n      w.layout.gridWidth + offX,\n      0,\n      crosshair.stroke.color,\n      0,\n      0\n    );\n    ycrosshairsHidden.attr({\n      class: \"apexcharts-ycrosshairs-hidden\"\n    });\n    w.dom.elGraphical.add(ycrosshairsHidden);\n  }\n}\nfunction mergeYaxisOverride(base, override) {\n  if (!Utils$1.isObject(base) || !Utils$1.isObject(override)) {\n    return override !== void 0 ? override : base;\n  }\n  const out = __spreadValues({}, base);\n  for (const key of Object.keys(override)) {\n    const v = override[key];\n    if (v === void 0) continue;\n    if (Utils$1.isObject(v) && Utils$1.isObject(base[key])) {\n      out[key] = mergeYaxisOverride(base[key], v);\n    } else {\n      out[key] = v;\n    }\n  }\n  return out;\n}\nclass Responsive {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this._activeBreakpoint = null;\n  }\n  // the opts parameter if not null has to be set overriding everything\n  // as the opts is set by user externally\n  /**\n   * @param {object} opts\n   */\n  checkResponsiveConfig(opts) {\n    const w = this.w;\n    const cnf = w.config;\n    if (cnf.responsive.length === 0) return;\n    const res = cnf.responsive.slice();\n    res.sort(\n      (a, b) => a.breakpoint > b.breakpoint ? 1 : b.breakpoint > a.breakpoint ? -1 : 0\n    ).reverse();\n    const config = new Config({});\n    const iterateResponsiveOptions = (newOptions = {}) => {\n      var _a;\n      const largestBreakpoint = res[0].breakpoint;\n      const width = Environment.isBrowser() ? window.innerWidth > 0 ? window.innerWidth : screen.width : 0;\n      if (width > largestBreakpoint) {\n        if (this._activeBreakpoint !== null) {\n          if (!w.globals.initialConfig) return;\n          const initialConfig = Utils$1.clone(w.globals.initialConfig);\n          initialConfig.series = Utils$1.clone(w.config.series);\n          const options2 = CoreUtils.extendArrayProps(config, initialConfig, w);\n          newOptions = Utils$1.extend(options2, newOptions);\n          this.overrideResponsiveOptions(newOptions);\n          this._activeBreakpoint = null;\n        }\n      } else {\n        for (let i = 0; i < res.length; i++) {\n          if (width < res[i].breakpoint) {\n            const originalUserYaxis = ((_a = res[i].options) == null ? void 0 : _a.yaxis) ? Utils$1.clone(res[i].options.yaxis) : null;\n            newOptions = CoreUtils.extendArrayProps(config, res[i].options, w);\n            newOptions = Utils$1.extend(w.config, newOptions);\n            if (Array.isArray(w.config.yaxis) && originalUserYaxis) {\n              const userYaxis = Array.isArray(originalUserYaxis) ? originalUserYaxis : [originalUserYaxis];\n              newOptions = __spreadProps(__spreadValues({}, newOptions), {\n                yaxis: w.config.yaxis.map(\n                  (baseAxis, idx) => mergeYaxisOverride(baseAxis, userYaxis[idx])\n                )\n              });\n            }\n            this.overrideResponsiveOptions(newOptions);\n            this._activeBreakpoint = res[i].breakpoint;\n          }\n        }\n      }\n    };\n    if (opts) {\n      let options2 = CoreUtils.extendArrayProps(config, opts, w);\n      options2 = Utils$1.extend(w.config, options2);\n      options2 = Utils$1.extend(options2, opts);\n      iterateResponsiveOptions(options2);\n    } else {\n      iterateResponsiveOptions({});\n    }\n  }\n  /**\n   * @param {Record<string, any>} newOptions\n   */\n  overrideResponsiveOptions(newOptions) {\n    const newConfig = new Config(newOptions).init({ responsiveOverride: true });\n    this.w.config = /** @type {any} */\n    newConfig;\n  }\n}\nclass Series {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {{ toggleDataSeries?: Function, revertDefaultAxisMinMax?: Function, updateSeries?: Function }} [callbacks]\n   */\n  constructor(w, {\n    toggleDataSeries = void 0,\n    revertDefaultAxisMinMax = void 0,\n    updateSeries = void 0\n  } = {}) {\n    this.w = w;\n    this._toggleDataSeries = toggleDataSeries || null;\n    this._revertDefaultAxisMinMax = revertDefaultAxisMinMax || null;\n    this._updateSeries = updateSeries || null;\n    this.legendInactiveClass = \"legend-mouseover-inactive\";\n  }\n  clearSeriesCache() {\n    const w = this.w;\n    if (w.globals.cachedSelectors) {\n      delete w.globals.cachedSelectors.allSeriesEls;\n      delete w.globals.cachedSelectors.highlightSeriesEls;\n    }\n  }\n  getAllSeriesEls() {\n    const w = this.w;\n    const cacheKey = \"allSeriesEls\";\n    if (!w.globals.cachedSelectors[cacheKey]) {\n      w.globals.cachedSelectors[cacheKey] = /** @type {any} */\n      w.dom.baseEl.getElementsByClassName(`apexcharts-series`);\n    }\n    return w.globals.cachedSelectors[cacheKey];\n  }\n  /**\n   * @param {string} seriesName\n   */\n  getSeriesByName(seriesName) {\n    return this.w.dom.baseEl.querySelector(\n      `.apexcharts-inner .apexcharts-series[seriesName='${Utils$1.escapeString(\n        seriesName\n      )}']`\n    );\n  }\n  /**\n   * @param {string} seriesName\n   */\n  isSeriesHidden(seriesName) {\n    var _a;\n    const targetElement = this.getSeriesByName(seriesName);\n    const el = (\n      /** @type {Element} */\n      targetElement\n    );\n    const realIndex = parseInt((_a = el.getAttribute(\"data:realIndex\")) != null ? _a : \"0\", 10);\n    const isHidden = el.classList.contains(\"apexcharts-series-collapsed\");\n    return { isHidden, realIndex };\n  }\n  /**\n   * @param {any} elSeries\n   * @param {number} index\n   */\n  addCollapsedClassToSeries(elSeries, index) {\n    Series.addCollapsedClassToSeries(this.w, elSeries, index);\n  }\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {any} elSeries\n   * @param {number} index\n   */\n  static addCollapsedClassToSeries(w, elSeries, index) {\n    function iterateOnAllCollapsedSeries(series) {\n      for (let cs = 0; cs < series.length; cs++) {\n        if (series[cs].index === index) {\n          elSeries.node.classList.add(\"apexcharts-series-collapsed\");\n        }\n      }\n    }\n    iterateOnAllCollapsedSeries(w.globals.collapsedSeries);\n    iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries);\n  }\n  /**\n   * @param {string} seriesName\n   */\n  toggleSeries(seriesName) {\n    var _a;\n    const isSeriesHidden = this.isSeriesHidden(seriesName);\n    (_a = this._toggleDataSeries) == null ? void 0 : _a.call(this, isSeriesHidden.realIndex, isSeriesHidden.isHidden);\n    return isSeriesHidden.isHidden;\n  }\n  /**\n   * @param {string} seriesName\n   */\n  showSeries(seriesName) {\n    var _a;\n    const isSeriesHidden = this.isSeriesHidden(seriesName);\n    if (isSeriesHidden.isHidden) {\n      (_a = this._toggleDataSeries) == null ? void 0 : _a.call(this, isSeriesHidden.realIndex, true);\n    }\n  }\n  /**\n   * @param {string} seriesName\n   */\n  hideSeries(seriesName) {\n    var _a;\n    const isSeriesHidden = this.isSeriesHidden(seriesName);\n    if (!isSeriesHidden.isHidden) {\n      (_a = this._toggleDataSeries) == null ? void 0 : _a.call(this, isSeriesHidden.realIndex, false);\n    }\n  }\n  resetSeries(shouldUpdateChart = true, shouldResetZoom = true, shouldResetCollapsed = true) {\n    var _a, _b;\n    const w = this.w;\n    this.clearSeriesCache();\n    let series = Utils$1.clone(w.globals.initialSeries);\n    w.globals.previousPaths = [];\n    if (shouldResetCollapsed) {\n      w.globals.collapsedSeries = [];\n      w.globals.ancillaryCollapsedSeries = [];\n      w.globals.collapsedSeriesIndices = [];\n      w.globals.ancillaryCollapsedSeriesIndices = [];\n    } else {\n      series = this.emptyCollapsedSeries(series);\n    }\n    w.config.series = series;\n    if (shouldUpdateChart) {\n      if (shouldResetZoom) {\n        w.interact.zoomed = false;\n        (_a = this._revertDefaultAxisMinMax) == null ? void 0 : _a.call(this);\n      }\n      (_b = this._updateSeries) == null ? void 0 : _b.call(\n        this,\n        series,\n        w.config.chart.animations.dynamicAnimation.enabled\n      );\n    }\n  }\n  /**\n   * @param {any[]} series\n   */\n  emptyCollapsedSeries(series) {\n    const w = this.w;\n    for (let i = 0; i < series.length; i++) {\n      if (w.globals.collapsedSeriesIndices.indexOf(i) > -1) {\n        series[i].data = [];\n      }\n    }\n    return series;\n  }\n  /**\n   * @param {string} seriesName\n   */\n  highlightSeries(seriesName) {\n    var _a;\n    const w = this.w;\n    const targetElement = this.getSeriesByName(seriesName);\n    const realIndex = parseInt(\n      (_a = targetElement == null ? void 0 : targetElement.getAttribute(\"data:realIndex\")) != null ? _a : \"\",\n      10\n    );\n    const cacheKey = \"highlightSeriesEls\";\n    let allSeriesEls = w.globals.cachedSelectors[cacheKey];\n    if (!allSeriesEls) {\n      allSeriesEls = w.dom.baseEl.querySelectorAll(\n        `.apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis`\n      );\n      w.globals.cachedSelectors[cacheKey] = allSeriesEls;\n    }\n    let seriesEl = null;\n    let dataLabelEl = null;\n    let yaxisEl = null;\n    if (w.globals.axisCharts || w.config.chart.type === \"radialBar\") {\n      if (w.globals.axisCharts) {\n        seriesEl = w.dom.baseEl.querySelector(\n          `.apexcharts-series[data\\\\:realIndex='${realIndex}']`\n        );\n        dataLabelEl = w.dom.baseEl.querySelector(\n          `.apexcharts-datalabels[data\\\\:realIndex='${realIndex}']`\n        );\n        const yaxisIndex = w.globals.seriesYAxisReverseMap[realIndex];\n        yaxisEl = w.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${yaxisIndex}']`\n        );\n      } else {\n        seriesEl = w.dom.baseEl.querySelector(\n          `.apexcharts-series[rel='${realIndex + 1}']`\n        );\n      }\n    } else {\n      seriesEl = w.dom.baseEl.querySelector(\n        `.apexcharts-series[rel='${realIndex + 1}'] path`\n      );\n    }\n    for (let se = 0; se < allSeriesEls.length; se++) {\n      const serEl = (\n        /** @type {Element} */\n        allSeriesEls[se]\n      );\n      serEl.classList.add(this.legendInactiveClass);\n    }\n    if (seriesEl) {\n      if (!w.globals.axisCharts) {\n        const parentEl = (\n          /** @type {Element} */\n          seriesEl.parentNode\n        );\n        parentEl == null ? void 0 : parentEl.classList.remove(this.legendInactiveClass);\n      }\n      seriesEl.classList.remove(this.legendInactiveClass);\n      if (dataLabelEl !== null) {\n        dataLabelEl.classList.remove(this.legendInactiveClass);\n      }\n      if (yaxisEl !== null) {\n        yaxisEl.classList.remove(this.legendInactiveClass);\n      }\n    } else {\n      for (let se = 0; se < allSeriesEls.length; se++) {\n        const serEl = (\n          /** @type {Element} */\n          allSeriesEls[se]\n        );\n        serEl.classList.remove(this.legendInactiveClass);\n      }\n    }\n  }\n  /**\n   * @param {Event} e\n   * @param {any} targetElement\n   */\n  toggleSeriesOnHover(e, targetElement) {\n    const w = this.w;\n    if (!targetElement) targetElement = e.target;\n    const allSeriesEls = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis`\n    );\n    if (e.type === \"mousemove\") {\n      const realIndex = parseInt(targetElement.getAttribute(\"rel\"), 10) - 1;\n      this.highlightSeries(w.seriesData.seriesNames[realIndex]);\n    } else if (e.type === \"mouseout\") {\n      for (let se = 0; se < allSeriesEls.length; se++) {\n        allSeriesEls[se].classList.remove(this.legendInactiveClass);\n      }\n    }\n  }\n  /**\n   * Dim every heatmap cell except those whose value falls inside the color\n   * range at `rangeIndex`. Shared by the categorical legend (hover a legend\n   * item) and the gradient legend (hover a band) — both supply an index into\n   * `colorScale.ranges` plus an action, decoupling the highlight from any\n   * particular DOM element / event shape.\n   *\n   * @param {number} rangeIndex index into `colorScale.ranges`\n   * @param {'highlight'|'reset'} action\n   */\n  highlightRangeInSeries(rangeIndex, action) {\n    const w = this.w;\n    const allHeatMapElements = w.dom.baseEl.getElementsByClassName(\n      \"apexcharts-heatmap-rect\"\n    );\n    const toggleAllInactive = (op) => {\n      for (let i = 0; i < allHeatMapElements.length; i++) {\n        const classList = (\n          /** @type {any} */\n          allHeatMapElements[i].classList\n        );\n        if (typeof classList[op] === \"function\") {\n          classList[op](this.legendInactiveClass);\n        }\n      }\n    };\n    if (action === \"reset\") {\n      toggleAllInactive(\"remove\");\n      return;\n    }\n    const ranges = w.config.plotOptions.heatmap.colorScale.ranges;\n    const range = ranges && ranges[rangeIndex];\n    if (!range) return;\n    toggleAllInactive(\"add\");\n    for (let i = 0; i < allHeatMapElements.length; i++) {\n      const val = Number(allHeatMapElements[i].getAttribute(\"val\"));\n      if (val >= range.from && val <= range.to) {\n        allHeatMapElements[i].classList.remove(this.legendInactiveClass);\n      }\n    }\n  }\n  /**\n   * @param {string[]} chartTypes\n   */\n  getActiveConfigSeriesIndex(order = \"asc\", chartTypes = []) {\n    const w = this.w;\n    let activeIndex = 0;\n    if (w.config.series.length > 1) {\n      const activeSeriesIndex = w.config.series.map((s, index) => {\n        const checkChartType = () => {\n          if (w.globals.comboCharts) {\n            return chartTypes.length === 0 || chartTypes.length && chartTypes.indexOf(\n              /** @type {Record<string,any>} */\n              w.config.series[index].type\n            ) > -1;\n          }\n          return true;\n        };\n        const hasData = (\n          /** @type {any} */\n          s.data && /** @type {any} */\n          s.data.length > 0 && w.globals.collapsedSeriesIndices.indexOf(index) === -1\n        );\n        return hasData && checkChartType() ? index : -1;\n      });\n      for (let a = order === \"asc\" ? 0 : activeSeriesIndex.length - 1; order === \"asc\" ? a < activeSeriesIndex.length : a >= 0; order === \"asc\" ? a++ : a--) {\n        if (activeSeriesIndex[a] !== -1) {\n          activeIndex = activeSeriesIndex[a];\n          break;\n        }\n      }\n    }\n    return activeIndex;\n  }\n  getBarSeriesIndices() {\n    const w = this.w;\n    if (w.globals.comboCharts) {\n      return this.w.config.series.map((s, i) => {\n        return s.type === \"bar\" || s.type === \"column\" ? i : -1;\n      }).filter((i) => {\n        return i !== -1;\n      });\n    }\n    return this.w.config.series.map((s, i) => {\n      return i;\n    });\n  }\n  getPreviousPaths() {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    if (!w.globals.axisCharts) {\n      w.globals.previousPaths = w.seriesData.series;\n      return;\n    }\n    w.globals.previousPaths = [];\n    function pushPaths(seriesEls, i, type) {\n      const paths = seriesEls[i].childNodes;\n      const dArr = {\n        type,\n        paths: (\n          /** @type {any[]} */\n          []\n        ),\n        realIndex: seriesEls[i].getAttribute(\"data:realIndex\")\n      };\n      for (let j = 0; j < paths.length; j++) {\n        if (paths[j].hasAttribute(\"pathTo\")) {\n          const d = paths[j].getAttribute(\"pathTo\");\n          dArr.paths.push({ d });\n        }\n      }\n      w.globals.previousPaths.push(dArr);\n    }\n    const getPaths = (chartType) => {\n      return w.dom.baseEl.querySelectorAll(\n        `.apexcharts-${chartType}-series .apexcharts-series`\n      );\n    };\n    const chartTypes = [\n      \"line\",\n      \"area\",\n      \"bar\",\n      \"rangebar\",\n      \"rangeArea\",\n      \"candlestick\",\n      \"radar\"\n    ];\n    chartTypes.forEach((type) => {\n      const paths = getPaths(type);\n      for (let p = 0; p < paths.length; p++) {\n        pushPaths(paths, p, type);\n      }\n    });\n    const heatTreeSeries = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-${w.config.chart.type} .apexcharts-series`\n    );\n    if (heatTreeSeries.length > 0) {\n      for (let h = 0; h < heatTreeSeries.length; h++) {\n        const seriesEls = w.dom.baseEl.querySelectorAll(\n          `.apexcharts-${w.config.chart.type} .apexcharts-series[data\\\\:realIndex='${h}'] rect`\n        );\n        const dArr = [];\n        for (let i = 0; i < seriesEls.length; i++) {\n          const getAttr = (x) => {\n            return (\n              /** @type {Element} */\n              seriesEls[i].getAttribute(x)\n            );\n          };\n          const rect = {\n            x: parseFloat((_a = getAttr(\"x\")) != null ? _a : \"0\"),\n            y: parseFloat((_b = getAttr(\"y\")) != null ? _b : \"0\"),\n            width: parseFloat((_c = getAttr(\"width\")) != null ? _c : \"0\"),\n            height: parseFloat((_d = getAttr(\"height\")) != null ? _d : \"0\")\n          };\n          dArr.push({\n            rect,\n            color: seriesEls[i].getAttribute(\"color\")\n          });\n        }\n        w.globals.previousPaths.push(dArr);\n      }\n    }\n  }\n  clearPreviousPaths() {\n    const w = this.w;\n    w.globals.previousPaths = [];\n    w.globals.allSeriesCollapsed = false;\n  }\n  handleNoData() {\n    const w = this.w;\n    const me = this;\n    const noDataOpts = w.config.noData;\n    const graphics = new Graphics(me.w);\n    let x = w.globals.svgWidth / 2;\n    let y = w.globals.svgHeight / 2;\n    let textAnchor = \"middle\";\n    w.globals.noData = true;\n    w.globals.animationEnded = true;\n    if (noDataOpts.align === \"left\") {\n      x = 10;\n      textAnchor = \"start\";\n    } else if (noDataOpts.align === \"right\") {\n      x = w.globals.svgWidth - 10;\n      textAnchor = \"end\";\n    }\n    if (noDataOpts.verticalAlign === \"top\") {\n      y = 50;\n    } else if (noDataOpts.verticalAlign === \"bottom\") {\n      y = w.globals.svgHeight - 50;\n    }\n    x = x + noDataOpts.offsetX;\n    y = y + parseInt(noDataOpts.style.fontSize, 10) + 2 + noDataOpts.offsetY;\n    if (noDataOpts.text !== void 0 && noDataOpts.text !== \"\") {\n      const titleText = graphics.drawText({\n        x,\n        y,\n        text: noDataOpts.text,\n        textAnchor,\n        fontSize: noDataOpts.style.fontSize,\n        fontFamily: noDataOpts.style.fontFamily,\n        foreColor: noDataOpts.style.color,\n        opacity: 1,\n        cssClass: \"apexcharts-text-nodata\"\n      });\n      w.dom.Paper.add(titleText);\n    }\n  }\n  // When user clicks on legends, the collapsed series is filled with [0,0,0,...,0]\n  // This is because we don't want to alter the series' length as it is used at many places\n  /**\n   * @param {any[]} series\n   */\n  setNullSeriesToZeroValues(series) {\n    const w = this.w;\n    for (let sl = 0; sl < series.length; sl++) {\n      if (series[sl].length === 0) {\n        for (let j = 0; j < series[w.globals.maxValsInArrayIndex].length; j++) {\n          series[sl].push(0);\n        }\n      }\n    }\n    return series;\n  }\n  hasAllSeriesEqualX() {\n    let equalLen = true;\n    const w = this.w;\n    const filteredSerX = this.filteredSeriesX();\n    for (let i = 0; i < filteredSerX.length - 1; i++) {\n      if (filteredSerX[i][0] !== filteredSerX[i + 1][0]) {\n        equalLen = false;\n        break;\n      }\n    }\n    w.globals.allSeriesHasEqualX = equalLen;\n    return equalLen;\n  }\n  filteredSeriesX() {\n    const w = this.w;\n    const filteredSeriesX = w.seriesData.seriesX.map(\n      (ser) => ser.length > 0 ? ser : []\n    );\n    return filteredSeriesX;\n  }\n}\nclass Theme {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.colors = [];\n    this.isColorFn = false;\n    this.isHeatmapDistributed = this.checkHeatmapDistributed();\n    this.isBarDistributed = this.checkBarDistributed();\n  }\n  checkHeatmapDistributed() {\n    const { chart, plotOptions } = this.w.config;\n    return chart.type === \"treemap\" && plotOptions.treemap && plotOptions.treemap.distributed || chart.type === \"heatmap\" && plotOptions.heatmap && plotOptions.heatmap.distributed;\n  }\n  checkBarDistributed() {\n    const { chart, plotOptions } = this.w.config;\n    return plotOptions.bar && plotOptions.bar.distributed && (chart.type === \"bar\" || chart.type === \"rangeBar\");\n  }\n  init() {\n    this.setDefaultColors();\n  }\n  setDefaultColors() {\n    var _a;\n    const w = this.w;\n    const utils = new Utils$1();\n    w.dom.elWrap.classList.add(\n      `apexcharts-theme-${w.config.theme.mode || \"light\"}`\n    );\n    const colorBlindMode = (_a = w.config.theme.accessibility) == null ? void 0 : _a.colorBlindMode;\n    if (colorBlindMode) {\n      w.globals.colors = this.getColorBlindColors(colorBlindMode);\n      this.applySeriesColors(w.seriesData.seriesColors, w.globals.colors);\n      const defaultColors2 = w.globals.colors.slice();\n      this.pushExtraColors(w.globals.colors);\n      this.applyColorTypes([\"fill\", \"stroke\"], defaultColors2);\n      this.applyDataLabelsColors(defaultColors2);\n      this.applyRadarPolygonsColors();\n      this.applyMarkersColors(defaultColors2);\n      if (colorBlindMode === \"highContrast\") {\n        w.dom.elWrap.classList.add(\"apexcharts-high-contrast\");\n      }\n      return;\n    }\n    const configColors = [...w.config.colors || w.config.fill.colors || []];\n    w.globals.colors = this.getColors(configColors);\n    this.applySeriesColors(w.seriesData.seriesColors, w.globals.colors);\n    if (w.config.theme.monochrome.enabled) {\n      w.globals.colors = this.getMonochromeColors(\n        w.config.theme.monochrome,\n        w.seriesData.series,\n        utils\n      );\n    }\n    const defaultColors = w.globals.colors.slice();\n    this.pushExtraColors(w.globals.colors);\n    this.applyColorTypes([\"fill\", \"stroke\"], defaultColors);\n    this.applyDataLabelsColors(defaultColors);\n    this.applyRadarPolygonsColors();\n    this.applyMarkersColors(defaultColors);\n  }\n  /**\n   * @param {any[]} configColors\n   */\n  getColors(configColors) {\n    const w = this.w;\n    if (!configColors || configColors.length === 0) {\n      return this.predefined();\n    }\n    if (Array.isArray(configColors) && configColors.length > 0 && typeof configColors[0] === \"function\") {\n      this.isColorFn = true;\n      return w.config.series.map((s, i) => {\n        const c = configColors[i] || configColors[0];\n        return typeof c === \"function\" ? c({\n          value: w.globals.axisCharts ? w.seriesData.series[i][0] || 0 : w.seriesData.series[i],\n          seriesIndex: i,\n          dataPointIndex: i,\n          w: this.w\n        }) : c;\n      });\n    }\n    return configColors;\n  }\n  /**\n   * @param {any[]} seriesColors\n   * @param {any[]} globalsColors\n   */\n  applySeriesColors(seriesColors, globalsColors) {\n    seriesColors.forEach((c, i) => {\n      if (c) {\n        globalsColors[i] = c;\n      }\n    });\n  }\n  /**\n   * @param {Record<string, any>} monochrome\n   * @param {any[]} series\n   * @param {any} utils\n   */\n  getMonochromeColors(monochrome, series, utils) {\n    const { color, shadeIntensity, shadeTo } = monochrome;\n    const glsCnt = this.isBarDistributed || this.isHeatmapDistributed ? series[0].length * series.length : series.length;\n    const part = 1 / (glsCnt / shadeIntensity);\n    let percent = 0;\n    return Array.from({ length: glsCnt }, () => {\n      const newColor = shadeTo === \"dark\" ? utils.shadeColor(percent * -1, color) : utils.shadeColor(percent, color);\n      percent += part;\n      return newColor;\n    });\n  }\n  /**\n   * @param {string[]} colorTypes\n   * @param {string[]} defaultColors\n   */\n  applyColorTypes(colorTypes, defaultColors) {\n    const w = this.w;\n    colorTypes.forEach((c) => {\n      w.globals[c].colors = w.config[c].colors === void 0 ? this.isColorFn ? w.config.colors : defaultColors : w.config[c].colors.slice();\n      this.pushExtraColors(\n        /** @type {Record<string,any>} */\n        w.globals[c].colors\n      );\n    });\n  }\n  /**\n   * @param {string[]} defaultColors\n   */\n  applyDataLabelsColors(defaultColors) {\n    const w = this.w;\n    w.globals.dataLabels.style.colors = w.config.dataLabels.style.colors === void 0 ? defaultColors : w.config.dataLabels.style.colors.slice();\n    this.pushExtraColors(w.globals.dataLabels.style.colors, 50);\n  }\n  applyRadarPolygonsColors() {\n    const w = this.w;\n    w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors === void 0 ? [w.config.theme.mode === \"dark\" ? \"#343A3F\" : \"none\"] : w.config.plotOptions.radar.polygons.fill.colors.slice();\n    this.pushExtraColors(w.globals.radarPolygons.fill.colors, 20);\n  }\n  /**\n   * @param {string[]} defaultColors\n   */\n  applyMarkersColors(defaultColors) {\n    const w = this.w;\n    w.globals.markers.colors = w.config.markers.colors === void 0 ? defaultColors : w.config.markers.colors.slice();\n    this.pushExtraColors(w.globals.markers.colors);\n  }\n  /**\n   * @param {any} colorSeries\n   * @param {number} [length]\n   * @param {boolean | null} [distributed]\n   */\n  pushExtraColors(colorSeries, length, distributed = null) {\n    const w = this.w;\n    let len = length || w.seriesData.series.length;\n    if (distributed === null) {\n      distributed = this.isBarDistributed || this.isHeatmapDistributed || w.config.chart.type === \"heatmap\" && w.config.plotOptions.heatmap && w.config.plotOptions.heatmap.colorScale.inverse;\n    }\n    if (distributed && w.seriesData.series.length) {\n      len = w.seriesData.series[w.globals.maxValsInArrayIndex].length * w.seriesData.series.length;\n    }\n    if (colorSeries.length < len) {\n      const diff = len - colorSeries.length;\n      for (let i = 0; i < diff; i++) {\n        colorSeries.push(colorSeries[i]);\n      }\n    }\n  }\n  /**\n   * @param {'light' | 'dark'} mode\n   */\n  getColorBlindColors(mode) {\n    const palettes = getThemePalettes();\n    const map = {\n      deuteranopia: palettes.cvdDeuteranopia,\n      protanopia: palettes.cvdProtanopia,\n      tritanopia: palettes.cvdTritanopia,\n      highContrast: palettes.highContrast\n    };\n    return (\n      /** @type {Record<string,any>} */\n      /** @type {any} */\n      (map[mode] || palettes.palette1).slice()\n    );\n  }\n  /**\n   * @param {Record<string, any>} options\n   */\n  updateThemeOptions(options2) {\n    options2.chart = options2.chart || {};\n    options2.tooltip = options2.tooltip || {};\n    const mode = options2.theme.mode;\n    const palette = mode === \"dark\" ? \"palette4\" : mode === \"light\" ? \"palette1\" : options2.theme.palette || \"palette1\";\n    const foreColor = mode === \"dark\" ? \"#f6f7f8\" : mode === \"light\" ? \"#373d3f\" : options2.chart.foreColor || \"#373d3f\";\n    options2.tooltip.theme = mode || \"light\";\n    options2.chart.foreColor = foreColor;\n    options2.theme.palette = palette;\n    return options2;\n  }\n  predefined() {\n    const palette = this.w.config.theme.palette;\n    const palettes = getThemePalettes();\n    return (\n      /** @type {Record<string,any>} */\n      palettes[palette] || palettes.palette1\n    );\n  }\n}\nclass TitleSubtitle {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  draw() {\n    this.drawTitleSubtitle(\"title\");\n    this.drawTitleSubtitle(\"subtitle\");\n  }\n  /**\n   * @param {'title' | 'subtitle'} type\n   */\n  drawTitleSubtitle(type) {\n    const w = this.w;\n    const tsConfig = type === \"title\" ? w.config.title : w.config.subtitle;\n    let x = w.globals.svgWidth / 2;\n    let y = tsConfig.offsetY;\n    let textAnchor = \"middle\";\n    if (tsConfig.align === \"left\") {\n      x = 10;\n      textAnchor = \"start\";\n    } else if (tsConfig.align === \"right\") {\n      x = w.globals.svgWidth - 10;\n      textAnchor = \"end\";\n    }\n    x = x + tsConfig.offsetX;\n    y = y + parseInt(tsConfig.style.fontSize, 10) + tsConfig.margin / 2;\n    if (tsConfig.text !== void 0) {\n      const graphics = new Graphics(this.w);\n      const titleText = graphics.drawText({\n        x,\n        y,\n        text: tsConfig.text,\n        textAnchor,\n        fontSize: tsConfig.style.fontSize,\n        fontFamily: tsConfig.style.fontFamily,\n        fontWeight: tsConfig.style.fontWeight,\n        foreColor: tsConfig.style.color,\n        opacity: 1\n      });\n      titleText.node.setAttribute(\"class\", `apexcharts-${type}-text`);\n      w.dom.Paper.add(titleText);\n    }\n  }\n}\nlet Helpers$4 = class Helpers {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * Get Chart Title/Subtitle Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   * @param {string} type\n   **/\n  getTitleSubtitleCoords(type) {\n    const w = this.w;\n    let width = 0;\n    let height = 0;\n    const floating = type === \"title\" ? w.config.title.floating : w.config.subtitle.floating;\n    const el = w.dom.baseEl.querySelector(`.apexcharts-${type}-text`);\n    if (el !== null && !floating) {\n      const coord = el.getBoundingClientRect();\n      width = coord.width;\n      height = w.globals.axisCharts ? coord.height + 5 : coord.height;\n    }\n    return {\n      width,\n      height\n    };\n  }\n  getLegendsRect() {\n    const w = this.w;\n    const elLegendWrap = w.dom.elLegendWrap;\n    if (!w.config.legend.height && (w.config.legend.position === \"top\" || w.config.legend.position === \"bottom\")) {\n      if (elLegendWrap)\n        elLegendWrap.style.maxHeight = w.globals.svgHeight / 2 + \"px\";\n    }\n    const lgRect = (\n      /** @type {any} */\n      Object.assign({}, Utils$1.getBoundingClientRect(elLegendWrap))\n    );\n    if (elLegendWrap !== null && !w.config.legend.floating && w.config.legend.show) {\n      this.dCtx.lgRect = {\n        x: lgRect.x,\n        y: lgRect.y,\n        height: lgRect.height,\n        width: lgRect.height === 0 ? 0 : lgRect.width\n      };\n    } else {\n      this.dCtx.lgRect = {\n        x: 0,\n        y: 0,\n        height: 0,\n        width: 0\n      };\n    }\n    if (w.config.legend.position === \"left\" || w.config.legend.position === \"right\") {\n      if (this.dCtx.lgRect.width * 1.5 > w.globals.svgWidth) {\n        this.dCtx.lgRect.width = w.globals.svgWidth / 1.5;\n      }\n    }\n    return this.dCtx.lgRect;\n  }\n  /**\n   * Get Y Axis Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   **/\n  getDatalabelsRect() {\n    const w = this.w;\n    const allLabels = [];\n    w.config.series.forEach(\n      (serie, seriesIndex) => {\n        serie.data.forEach(\n          (datum, dataPointIndex) => {\n            const getText = (v) => {\n              return w.config.dataLabels.formatter(v, {\n                seriesIndex,\n                dataPointIndex,\n                w\n              });\n            };\n            const labelText = getText(\n              w.seriesData.series[seriesIndex][dataPointIndex]\n            );\n            allLabels.push(labelText);\n          }\n        );\n      }\n    );\n    const val = Utils$1.getLargestStringFromArr(allLabels);\n    const graphics = new Graphics(this.w);\n    const dataLabelsStyle = w.config.dataLabels.style;\n    const labelrect = graphics.getTextRects(\n      val,\n      parseInt(dataLabelsStyle.fontSize).toString(),\n      dataLabelsStyle.fontFamily\n    );\n    return {\n      width: labelrect.width * 1.05,\n      height: labelrect.height\n    };\n  }\n  /**\n   * @param {any} val\n   * @param {any[]} arr\n   */\n  getLargestStringFromMultiArr(val, arr) {\n    const w = this.w;\n    let valArr = val;\n    if (w.axisFlags.isMultiLineX) {\n      const maxArrs = arr.map((xl) => {\n        return Array.isArray(xl) ? xl.length : 1;\n      });\n      const maxArrLen = Math.max(...maxArrs);\n      const maxArrIndex = maxArrs.indexOf(maxArrLen);\n      valArr = arr[maxArrIndex];\n    }\n    return valArr;\n  }\n};\nclass DimXAxis {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * Get X Axis Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   **/\n  getxAxisLabelsCoords() {\n    const w = this.w;\n    let xaxisLabels = w.labelData.labels.slice();\n    if (w.config.xaxis.convertedCatToNumeric && xaxisLabels.length === 0) {\n      xaxisLabels = w.labelData.categoryLabels;\n    }\n    let rect;\n    if (w.labelData.timescaleLabels.length > 0) {\n      const coords = this.getxAxisTimeScaleLabelsCoords();\n      rect = {\n        width: coords.width,\n        height: coords.height\n      };\n      w.layout.rotateXLabels = false;\n    } else {\n      this.dCtx.lgWidthForSideLegends = (w.config.legend.position === \"left\" || w.config.legend.position === \"right\") && !w.config.legend.floating ? this.dCtx.lgRect.width : 0;\n      const xlbFormatter = w.formatters.xLabelFormatter;\n      let val = Utils$1.getLargestStringFromArr(xaxisLabels);\n      let valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(\n        val,\n        xaxisLabels\n      );\n      if (w.globals.isBarHorizontal) {\n        val = w.globals.yAxisScale[0].result.reduce(\n          (a, b) => a.length > b.length ? a : b,\n          0\n        );\n        valArr = val;\n      }\n      const xFormat = new Formatters(this.w);\n      const timestamp = val;\n      val = xFormat.xLabelFormat(\n        /** @type {Function} */\n        xlbFormatter,\n        val,\n        timestamp,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        }\n      );\n      valArr = xFormat.xLabelFormat(\n        /** @type {Function} */\n        xlbFormatter,\n        valArr,\n        timestamp,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        }\n      );\n      if (w.config.xaxis.convertedCatToNumeric && typeof val === \"undefined\" || String(val).trim() === \"\") {\n        val = \"1\";\n        valArr = val;\n      }\n      const graphics = new Graphics(this.w);\n      let xLabelrect = graphics.getTextRects(\n        val,\n        w.config.xaxis.labels.style.fontSize\n      );\n      let xArrLabelrect = xLabelrect;\n      if (val !== valArr) {\n        xArrLabelrect = graphics.getTextRects(\n          valArr,\n          w.config.xaxis.labels.style.fontSize\n        );\n      }\n      rect = {\n        width: xLabelrect.width >= xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width,\n        height: xLabelrect.height >= xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height\n      };\n      if (rect.width * xaxisLabels.length > w.globals.svgWidth - this.dCtx.lgWidthForSideLegends - this.dCtx.yAxisWidth - this.dCtx.gridPad.left - this.dCtx.gridPad.right && w.config.xaxis.labels.rotate !== 0 || w.config.xaxis.labels.rotateAlways) {\n        if (!w.globals.isBarHorizontal) {\n          w.layout.rotateXLabels = true;\n          const getRotatedTextRects = (text) => {\n            return graphics.getTextRects(\n              text,\n              w.config.xaxis.labels.style.fontSize,\n              w.config.xaxis.labels.style.fontFamily,\n              `rotate(${w.config.xaxis.labels.rotate} 0 0)`,\n              false\n            );\n          };\n          xLabelrect = getRotatedTextRects(val);\n          if (val !== valArr) {\n            xArrLabelrect = getRotatedTextRects(valArr);\n          }\n          rect.height = (xLabelrect.height > xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height) / 1.5;\n          rect.width = xLabelrect.width > xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width;\n        }\n      } else {\n        w.layout.rotateXLabels = false;\n      }\n    }\n    if (!w.config.xaxis.labels.show) {\n      rect = {\n        width: 0,\n        height: 0\n      };\n    }\n    return {\n      width: rect.width,\n      height: rect.height\n    };\n  }\n  /**\n   * Get X Axis Label Group height\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   */\n  getxAxisGroupLabelsCoords() {\n    var _a;\n    const w = this.w;\n    if (!w.labelData.hasXaxisGroups) {\n      return { width: 0, height: 0 };\n    }\n    const fontSize = ((_a = w.config.xaxis.group.style) == null ? void 0 : _a.fontSize) || w.config.xaxis.labels.style.fontSize;\n    const xaxisLabels = w.labelData.groups.map(\n      (g) => g.title\n    );\n    let rect;\n    const val = Utils$1.getLargestStringFromArr(xaxisLabels);\n    const valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(\n      val,\n      xaxisLabels\n    );\n    const graphics = new Graphics(this.w);\n    const xLabelrect = graphics.getTextRects(val, fontSize);\n    let xArrLabelrect = xLabelrect;\n    if (val !== valArr) {\n      xArrLabelrect = graphics.getTextRects(valArr, fontSize);\n    }\n    rect = {\n      width: xLabelrect.width >= xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width,\n      height: xLabelrect.height >= xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height\n    };\n    if (!w.config.xaxis.labels.show) {\n      rect = {\n        width: 0,\n        height: 0\n      };\n    }\n    return {\n      width: rect.width,\n      height: rect.height\n    };\n  }\n  /**\n   * Get X Axis Title Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   **/\n  getxAxisTitleCoords() {\n    const w = this.w;\n    let width = 0;\n    let height = 0;\n    if (w.config.xaxis.title.text !== void 0) {\n      const graphics = new Graphics(this.w);\n      const rect = graphics.getTextRects(\n        w.config.xaxis.title.text,\n        w.config.xaxis.title.style.fontSize\n      );\n      width = rect.width;\n      height = rect.height;\n    }\n    return {\n      width,\n      height\n    };\n  }\n  getxAxisTimeScaleLabelsCoords() {\n    const w = this.w;\n    this.dCtx.timescaleLabels = w.labelData.timescaleLabels.slice();\n    const labels = this.dCtx.timescaleLabels.map(\n      (label) => label.value\n    );\n    const val = labels.reduce((a, b) => {\n      if (typeof a === \"undefined\") {\n        console.error(\n          \"You have possibly supplied invalid Date format. Please supply a valid JavaScript Date\"\n        );\n        return 0;\n      } else {\n        return a.length > b.length ? a : b;\n      }\n    }, 0);\n    const graphics = new Graphics(this.w);\n    const rect = graphics.getTextRects(\n      val,\n      w.config.xaxis.labels.style.fontSize\n    );\n    const totalWidthRotated = rect.width * 1.05 * labels.length;\n    if (totalWidthRotated > w.layout.gridWidth && w.config.xaxis.labels.rotate !== 0) {\n      w.globals.overlappingXLabels = true;\n    }\n    return rect;\n  }\n  // In certain cases, the last labels gets cropped in xaxis.\n  // Hence, we add some additional padding based on the label length to avoid the last label being cropped or we don't draw it at all\n  /**\n   * @param {Record<string, any>} xaxisLabelCoords\n   */\n  additionalPaddingXLabels(xaxisLabelCoords) {\n    const w = this.w;\n    const gl = w.globals;\n    const cnf = w.config;\n    const xtype = cnf.xaxis.type;\n    const lbWidth = xaxisLabelCoords.width;\n    gl.skipLastTimelinelabel = false;\n    gl.skipFirstTimelinelabel = false;\n    const isBarOpposite = w.config.yaxis[0].opposite && w.globals.isBarHorizontal;\n    const isCollapsed = (i) => gl.collapsedSeriesIndices.indexOf(i) !== -1;\n    const rightPad = (yaxe) => {\n      if (this.dCtx.timescaleLabels && this.dCtx.timescaleLabels.length) {\n        const firstimescaleLabel = this.dCtx.timescaleLabels[0];\n        const lastTimescaleLabel = this.dCtx.timescaleLabels[this.dCtx.timescaleLabels.length - 1];\n        const lastLabelPosition = lastTimescaleLabel.position + lbWidth / 1.75 - this.dCtx.yAxisWidthRight;\n        const firstLabelPosition = firstimescaleLabel.position - lbWidth / 1.75 + this.dCtx.yAxisWidthLeft;\n        const lgRightRectWidth = w.config.legend.position === \"right\" && this.dCtx.lgRect.width > 0 ? this.dCtx.lgRect.width : 0;\n        if (lastLabelPosition > gl.svgWidth - w.layout.translateX - lgRightRectWidth) {\n          gl.skipLastTimelinelabel = true;\n        }\n        if (firstLabelPosition < -((!yaxe.show || yaxe.floating) && (cnf.chart.type === \"bar\" || cnf.chart.type === \"candlestick\" || cnf.chart.type === \"rangeBar\" || cnf.chart.type === \"boxPlot\" || cnf.chart.type === \"violin\") ? lbWidth / 1.75 : 10)) {\n          gl.skipFirstTimelinelabel = true;\n        }\n      } else if (xtype === \"datetime\") {\n        if (this.dCtx.gridPad.right < lbWidth && !w.layout.rotateXLabels) {\n          gl.skipLastTimelinelabel = true;\n        }\n      } else if (xtype !== \"datetime\") {\n        if (this.dCtx.gridPad.right < lbWidth / 2 - this.dCtx.yAxisWidthRight && !w.layout.rotateXLabels && !w.config.xaxis.labels.trim) {\n          this.dCtx.xPadRight = lbWidth / 2 + 1;\n        }\n      }\n    };\n    const padYAxe = (yaxe, i) => {\n      if (cnf.yaxis.length > 1 && isCollapsed(i)) return;\n      rightPad(yaxe);\n    };\n    cnf.yaxis.forEach((yaxe, i) => {\n      if (isBarOpposite) {\n        if (this.dCtx.gridPad.left < lbWidth) {\n          this.dCtx.xPadLeft = lbWidth / 2 + 1;\n        }\n        this.dCtx.xPadRight = lbWidth / 2 + 1;\n      } else {\n        padYAxe(yaxe, i);\n      }\n    });\n  }\n}\nclass DimYAxis {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * Get Y Axis Dimensions\n   * @memberof Dimensions\n   * @returns {Array<{width: number, height: number}>}\n   **/\n  getyAxisLabelsCoords() {\n    const w = this.w;\n    const width = 0;\n    const height = 0;\n    const ret = [];\n    let labelPad = 10;\n    const axesUtils = new AxesUtils(this.w, { theme: this.dCtx.theme, timeScale: this.dCtx.timeScale });\n    w.config.yaxis.map((yaxe, index) => {\n      const formatterArgs = {\n        seriesIndex: index,\n        dataPointIndex: -1,\n        w\n      };\n      const yS = w.globals.yAxisScale[index];\n      let yAxisMinWidth = 0;\n      if (!axesUtils.isYAxisHidden(index) && yaxe.labels.show && yaxe.labels.minWidth !== void 0)\n        yAxisMinWidth = yaxe.labels.minWidth;\n      if (!axesUtils.isYAxisHidden(index) && yaxe.labels.show && yS.result.length) {\n        const lbFormatter = w.formatters.yLabelFormatters[index];\n        const minV = yS.niceMin === Number.MIN_VALUE ? 0 : yS.niceMin;\n        let val = yS.result.reduce((acc, curr) => {\n          var _a, _b;\n          return ((_a = String(lbFormatter(acc, formatterArgs))) == null ? void 0 : _a.length) > ((_b = String(lbFormatter(curr, formatterArgs))) == null ? void 0 : _b.length) ? acc : curr;\n        }, minV);\n        val = lbFormatter(val, formatterArgs);\n        let valArr = val;\n        if (typeof val === \"undefined\" || val.length === 0) {\n          val = yS.niceMax;\n        }\n        if (String(val).length === 1) {\n          val = val + \".0\";\n          valArr = val;\n        }\n        if (w.globals.isBarHorizontal) {\n          labelPad = 0;\n          const barYaxisLabels = w.labelData.labels.slice();\n          val = Utils$1.getLargestStringFromArr(barYaxisLabels);\n          val = lbFormatter(val, { seriesIndex: index, dataPointIndex: -1, w });\n          valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(\n            val,\n            barYaxisLabels\n          );\n        }\n        const graphics = new Graphics(this.w);\n        const rotateStr = \"rotate(\".concat(yaxe.labels.rotate, \" 0 0)\");\n        const rect = graphics.getTextRects(\n          val,\n          yaxe.labels.style.fontSize,\n          yaxe.labels.style.fontFamily,\n          rotateStr,\n          false\n        );\n        let arrLabelrect = rect;\n        if (val !== valArr) {\n          arrLabelrect = graphics.getTextRects(\n            valArr,\n            yaxe.labels.style.fontSize,\n            yaxe.labels.style.fontFamily,\n            rotateStr,\n            false\n          );\n        }\n        ret.push({\n          width: (yAxisMinWidth > arrLabelrect.width || yAxisMinWidth > rect.width ? yAxisMinWidth : arrLabelrect.width > rect.width ? arrLabelrect.width : rect.width) + labelPad,\n          height: arrLabelrect.height > rect.height ? arrLabelrect.height : rect.height\n        });\n      } else {\n        ret.push({\n          width,\n          height\n        });\n      }\n    });\n    return ret;\n  }\n  /**\n   * Get Y Axis Dimensions\n   * @memberof Dimensions\n   * @returns {Array<{width: number, height: number}>}\n   **/\n  getyAxisTitleCoords() {\n    const w = this.w;\n    const ret = [];\n    w.config.yaxis.map((yaxe) => {\n      if (yaxe.show && yaxe.title.text !== void 0) {\n        const graphics = new Graphics(this.w);\n        const rotateStr = \"rotate(\".concat(yaxe.title.rotate, \" 0 0)\");\n        const rect = graphics.getTextRects(\n          yaxe.title.text,\n          yaxe.title.style.fontSize,\n          yaxe.title.style.fontFamily,\n          rotateStr,\n          false\n        );\n        ret.push({\n          width: rect.width,\n          height: rect.height\n        });\n      } else {\n        ret.push({\n          width: 0,\n          height: 0\n        });\n      }\n    });\n    return ret;\n  }\n  getTotalYAxisWidth() {\n    const w = this.w;\n    let yAxisWidth = 0;\n    let yAxisWidthLeft = 0;\n    let yAxisWidthRight = 0;\n    const padding = w.globals.yAxisScale.length > 1 ? 10 : 0;\n    const axesUtils = new AxesUtils(this.w, { theme: this.dCtx.theme, timeScale: this.dCtx.timeScale });\n    const isHiddenYAxis = function(index) {\n      return w.globals.ignoreYAxisIndexes.indexOf(index) > -1;\n    };\n    const padForLabelTitle = (coord, index) => {\n      const floating = w.config.yaxis[index].floating;\n      let width = 0;\n      if (coord.width > 0 && !floating) {\n        width = coord.width + padding;\n        if (isHiddenYAxis(index)) {\n          width = width - coord.width - padding;\n        }\n      } else {\n        width = floating || axesUtils.isYAxisHidden(index) ? 0 : 5;\n      }\n      w.config.yaxis[index].opposite ? yAxisWidthRight = yAxisWidthRight + width : yAxisWidthLeft = yAxisWidthLeft + width;\n      yAxisWidth = yAxisWidth + width;\n    };\n    w.layout.yLabelsCoords.map((yLabelCoord, index) => {\n      padForLabelTitle(yLabelCoord, index);\n    });\n    w.layout.yTitleCoords.map((yTitleCoord, index) => {\n      padForLabelTitle(yTitleCoord, index);\n    });\n    if (w.globals.isBarHorizontal && !w.config.yaxis[0].floating) {\n      yAxisWidth = w.layout.yLabelsCoords[0].width + w.layout.yTitleCoords[0].width + 15;\n    }\n    this.dCtx.yAxisWidthLeft = yAxisWidthLeft;\n    this.dCtx.yAxisWidthRight = yAxisWidthRight;\n    return yAxisWidth;\n  }\n}\nclass DimGrid {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * @param {number} gridWidth\n   */\n  gridPadForColumnsInNumericAxis(gridWidth) {\n    const { w } = this;\n    const { config: cnf, globals: gl } = w;\n    if (gl.noData || gl.collapsedSeries.length + gl.ancillaryCollapsedSeries.length === cnf.series.length) {\n      return 0;\n    }\n    const hasBar = (type2) => [\"bar\", \"rangeBar\", \"candlestick\", \"boxPlot\", \"violin\"].includes(type2);\n    const type = cnf.chart.type;\n    let barWidth = 0;\n    let seriesLen = hasBar(type) ? cnf.series.length : 1;\n    if (gl.comboBarCount > 0) {\n      seriesLen = gl.comboBarCount;\n    }\n    gl.collapsedSeries.forEach((c) => {\n      if (hasBar(c.type)) {\n        seriesLen -= 1;\n      }\n    });\n    if (cnf.chart.stacked) {\n      seriesLen = 1;\n    }\n    const barsPresent = hasBar(type) || gl.comboBarCount > 0;\n    let xRange = Math.abs(gl.initialMaxX - gl.initialMinX);\n    if (barsPresent && w.axisFlags.isXNumeric && !gl.isBarHorizontal && seriesLen > 0 && xRange !== 0) {\n      if (xRange <= 3) {\n        xRange = gl.dataPoints;\n      }\n      const xRatio = xRange / gridWidth;\n      let xDivision = gl.minXDiff && gl.minXDiff / xRatio > 0 ? gl.minXDiff / xRatio : 0;\n      if (xDivision > gridWidth / 2) {\n        xDivision /= 2;\n      }\n      barWidth = xDivision * parseInt(cnf.plotOptions.bar.columnWidth, 10) / 100;\n      if (barWidth < 1) {\n        barWidth = 1;\n      }\n      gl.barPadForNumericAxis = barWidth;\n    }\n    return barWidth;\n  }\n  gridPadFortitleSubtitle() {\n    const { w } = this;\n    const { globals: gl } = w;\n    let gridShrinkOffset = this.dCtx.isSparkline || !gl.axisCharts ? 0 : 10;\n    const titleSubtitle = [\"title\", \"subtitle\"];\n    titleSubtitle.forEach((t) => {\n      if (w.config[t].text !== void 0) {\n        gridShrinkOffset += w.config[t].margin;\n      } else {\n        gridShrinkOffset += this.dCtx.isSparkline || !gl.axisCharts ? 0 : 5;\n      }\n    });\n    if (w.config.legend.show && w.config.legend.position === \"bottom\" && !w.config.legend.floating && !gl.axisCharts) {\n      gridShrinkOffset += 10;\n    }\n    const titleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords(\"title\");\n    const subtitleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords(\"subtitle\");\n    w.layout.gridHeight -= titleCoords.height + subtitleCoords.height + gridShrinkOffset;\n    w.layout.translateY += titleCoords.height + subtitleCoords.height + gridShrinkOffset;\n  }\n  /**\n   * @param {{width: number, height: number}[]} yTitleCoords\n   * @param {{width: number, height: number}[]} yaxisLabelCoords\n   */\n  setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords) {\n    const { w } = this;\n    const axesUtils = new AxesUtils(this.w, { theme: this.dCtx.theme, timeScale: this.dCtx.timeScale });\n    w.config.yaxis.forEach((yaxe, index) => {\n      if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && !yaxe.floating && !axesUtils.isYAxisHidden(index)) {\n        if (yaxe.opposite) {\n          w.layout.translateX -= yaxisLabelCoords[index].width + yTitleCoords[index].width + parseInt(yaxe.labels.style.fontSize, 10) / 1.2 + 12;\n        }\n        if (w.layout.translateX < 2) {\n          w.layout.translateX = 2;\n        }\n      }\n    });\n  }\n}\nclass Dimensions {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.theme = ctx.theme;\n    this.timeScale = ctx.timeScale;\n    this.lgRect = /** @type {any} */\n    {};\n    this.yAxisWidth = 0;\n    this.yAxisWidthLeft = 0;\n    this.yAxisWidthRight = 0;\n    this.xAxisHeight = 0;\n    this.isSparkline = this.w.config.chart.sparkline.enabled;\n    this.dimHelpers = new Helpers$4(this);\n    this.dimYAxis = new DimYAxis(this);\n    this.dimXAxis = new DimXAxis(this);\n    this.dimGrid = new DimGrid(this);\n    this.lgWidthForSideLegends = 0;\n    this.gridPad = this.w.config.grid.padding;\n    this.xPadRight = 0;\n    this.xPadLeft = 0;\n    this.datalabelsCoords = { width: 0, height: 0 };\n    this.xAxisWidth = 0;\n    this.timescaleLabels = [];\n  }\n  /**\n   * @memberof Dimensions\n   **/\n  plotCoords() {\n    const w = this.w;\n    const gl = w.globals;\n    this.lgRect = this.dimHelpers.getLegendsRect();\n    this.datalabelsCoords = { width: 0, height: 0 };\n    const maxStrokeWidth = Array.isArray(w.config.stroke.width) ? Math.max(...w.config.stroke.width) : w.config.stroke.width;\n    if (this.isSparkline) {\n      if (w.config.markers.discrete.length > 0 || w.config.markers.size > 0) {\n        Object.entries(this.gridPad).forEach(([k, v]) => {\n          this.gridPad[k] = Math.max(\n            v,\n            this.w.globals.markers.largestSize / 1.5\n          );\n        });\n      }\n      this.gridPad.top = Math.max(maxStrokeWidth / 2, this.gridPad.top);\n      this.gridPad.bottom = Math.max(maxStrokeWidth / 2, this.gridPad.bottom);\n    }\n    if (gl.axisCharts) {\n      this.setDimensionsForAxisCharts();\n    } else {\n      this.setDimensionsForNonAxisCharts();\n    }\n    this.dimGrid.gridPadFortitleSubtitle();\n    w.layout.gridHeight = w.layout.gridHeight - this.gridPad.top - this.gridPad.bottom;\n    w.layout.gridWidth = w.layout.gridWidth - this.gridPad.left - this.gridPad.right - this.xPadRight - this.xPadLeft;\n    const barWidth = this.dimGrid.gridPadForColumnsInNumericAxis(\n      w.layout.gridWidth\n    );\n    w.layout.gridWidth = w.layout.gridWidth - barWidth * 2;\n    w.layout.translateX = w.layout.translateX + this.gridPad.left + this.xPadLeft + (barWidth > 0 ? barWidth : 0);\n    w.layout.translateY = w.layout.translateY + this.gridPad.top;\n    return {\n      // w.layout (future slice)\n      layout: {\n        gridHeight: w.layout.gridHeight,\n        gridWidth: w.layout.gridWidth,\n        translateX: w.layout.translateX,\n        translateY: w.layout.translateY,\n        translateXAxisX: w.layout.translateXAxisX,\n        translateXAxisY: w.layout.translateXAxisY,\n        rotateXLabels: w.layout.rotateXLabels,\n        xAxisHeight: w.layout.xAxisHeight,\n        xAxisLabelsHeight: w.layout.xAxisLabelsHeight,\n        xAxisGroupLabelsHeight: w.layout.xAxisGroupLabelsHeight,\n        xAxisLabelsWidth: w.layout.xAxisLabelsWidth,\n        yLabelsCoords: w.layout.yLabelsCoords,\n        yTitleCoords: w.layout.yTitleCoords\n      }\n    };\n  }\n  setDimensionsForAxisCharts() {\n    const w = this.w;\n    const gl = w.globals;\n    const yaxisLabelCoords = this.dimYAxis.getyAxisLabelsCoords();\n    const yTitleCoords = this.dimYAxis.getyAxisTitleCoords();\n    if (gl.isSlopeChart) {\n      this.datalabelsCoords = this.dimHelpers.getDatalabelsRect();\n    }\n    w.layout.yLabelsCoords = [];\n    w.layout.yTitleCoords = [];\n    w.config.yaxis.map((yaxe, index) => {\n      w.layout.yLabelsCoords.push({\n        width: yaxisLabelCoords[index].width,\n        index\n      });\n      w.layout.yTitleCoords.push(\n        /** @type {any} */\n        {\n          width: yTitleCoords[index].width,\n          index\n        }\n      );\n    });\n    this.yAxisWidth = this.dimYAxis.getTotalYAxisWidth();\n    const xaxisLabelCoords = this.dimXAxis.getxAxisLabelsCoords();\n    const xaxisGroupLabelCoords = this.dimXAxis.getxAxisGroupLabelsCoords();\n    const xtitleCoords = this.dimXAxis.getxAxisTitleCoords();\n    this.conditionalChecksForAxisCoords(\n      xaxisLabelCoords,\n      xtitleCoords,\n      xaxisGroupLabelCoords\n    );\n    w.layout.translateXAxisY = w.layout.rotateXLabels ? this.xAxisHeight / 8 : -4;\n    w.layout.translateXAxisX = w.layout.rotateXLabels && w.axisFlags.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0;\n    if (w.globals.isBarHorizontal) {\n      w.layout.rotateXLabels = false;\n      w.layout.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize, 10) / 1.5);\n    }\n    w.layout.translateXAxisY = w.layout.translateXAxisY + w.config.xaxis.labels.offsetY;\n    w.layout.translateXAxisX = w.layout.translateXAxisX + w.config.xaxis.labels.offsetX;\n    let yAxisWidth = this.yAxisWidth;\n    let xAxisHeight = this.xAxisHeight;\n    w.layout.xAxisLabelsHeight = this.xAxisHeight - xtitleCoords.height;\n    w.layout.xAxisGroupLabelsHeight = w.layout.xAxisLabelsHeight - xaxisLabelCoords.height;\n    w.layout.xAxisLabelsWidth = this.xAxisWidth;\n    w.layout.xAxisHeight = this.xAxisHeight;\n    let translateY = 10;\n    if (w.config.chart.type === \"radar\" || this.isSparkline) {\n      yAxisWidth = 0;\n      xAxisHeight = 0;\n    }\n    if (this.isSparkline) {\n      this.lgRect = {\n        height: 0,\n        width: 0\n      };\n    }\n    if (this.isSparkline || w.config.chart.type === \"treemap\") {\n      yAxisWidth = 0;\n      xAxisHeight = 0;\n      translateY = 0;\n    }\n    if (!this.isSparkline && w.config.chart.type !== \"treemap\") {\n      this.dimXAxis.additionalPaddingXLabels(xaxisLabelCoords);\n    }\n    const legendTopBottom = () => {\n      w.layout.translateX = yAxisWidth + this.datalabelsCoords.width;\n      w.layout.gridHeight = gl.svgHeight - this.lgRect.height - xAxisHeight - (!this.isSparkline && w.config.chart.type !== \"treemap\" ? w.layout.rotateXLabels ? 10 : 15 : 0);\n      w.layout.gridWidth = gl.svgWidth - yAxisWidth - this.datalabelsCoords.width * 2;\n    };\n    if (w.config.xaxis.position === \"top\")\n      translateY = w.layout.xAxisHeight - w.config.xaxis.axisTicks.height - 5;\n    switch (w.config.legend.position) {\n      case \"bottom\":\n        w.layout.translateY = translateY;\n        legendTopBottom();\n        break;\n      case \"top\":\n        w.layout.translateY = this.lgRect.height + translateY;\n        legendTopBottom();\n        break;\n      case \"left\":\n        w.layout.translateY = translateY;\n        w.layout.translateX = this.lgRect.width + yAxisWidth + this.datalabelsCoords.width;\n        w.layout.gridHeight = gl.svgHeight - xAxisHeight - 12;\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth - this.datalabelsCoords.width * 2;\n        break;\n      case \"right\":\n        w.layout.translateY = translateY;\n        w.layout.translateX = yAxisWidth + this.datalabelsCoords.width;\n        w.layout.gridHeight = gl.svgHeight - xAxisHeight - 12;\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth - this.datalabelsCoords.width * 2 - 5;\n        break;\n      default:\n        throw new Error(\"Legend position not supported\");\n    }\n    this.dimGrid.setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords);\n    const objyAxis = new YAxis(this.w, {\n      theme: this.theme,\n      timeScale: this.timeScale\n    });\n    objyAxis.setYAxisXPosition(yaxisLabelCoords, yTitleCoords);\n  }\n  setDimensionsForNonAxisCharts() {\n    const w = this.w;\n    const gl = w.globals;\n    const cnf = w.config;\n    let xPad = 0;\n    if (w.config.legend.show && !w.config.legend.floating) {\n      xPad = 20;\n    }\n    const type = cnf.chart.type === \"pie\" || cnf.chart.type === \"polarArea\" || cnf.chart.type === \"donut\" ? \"pie\" : \"radialBar\";\n    const offY = cnf.plotOptions[type].offsetY;\n    const offX = cnf.plotOptions[type].offsetX;\n    if (!cnf.legend.show || cnf.legend.floating) {\n      w.layout.gridHeight = gl.svgHeight;\n      const maxWidth = w.dom.elWrap.getBoundingClientRect().width;\n      w.layout.gridWidth = Math.min(maxWidth, w.layout.gridHeight);\n      w.layout.translateY = offY;\n      w.layout.translateX = offX + (gl.svgWidth - w.layout.gridWidth) / 2;\n      return;\n    }\n    switch (cnf.legend.position) {\n      case \"bottom\":\n        w.layout.gridHeight = gl.svgHeight - this.lgRect.height;\n        w.layout.gridWidth = gl.svgWidth;\n        w.layout.translateY = offY - 10;\n        w.layout.translateX = offX + (gl.svgWidth - w.layout.gridWidth) / 2;\n        break;\n      case \"top\":\n        w.layout.gridHeight = gl.svgHeight - this.lgRect.height;\n        w.layout.gridWidth = gl.svgWidth;\n        w.layout.translateY = this.lgRect.height + offY + 10;\n        w.layout.translateX = offX + (gl.svgWidth - w.layout.gridWidth) / 2;\n        break;\n      case \"left\":\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - xPad;\n        w.layout.gridHeight = cnf.chart.height !== \"auto\" ? gl.svgHeight : w.layout.gridWidth;\n        w.layout.translateY = offY;\n        w.layout.translateX = offX + this.lgRect.width + xPad;\n        break;\n      case \"right\":\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - xPad - 5;\n        w.layout.gridHeight = cnf.chart.height !== \"auto\" ? gl.svgHeight : w.layout.gridWidth;\n        w.layout.translateY = offY;\n        w.layout.translateX = offX + 10;\n        break;\n      default:\n        throw new Error(\"Legend position not supported\");\n    }\n  }\n  /**\n   * @param {any} xaxisLabelCoords\n   * @param {any} xtitleCoords\n   * @param {any} xaxisGroupLabelCoords\n   */\n  conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords, xaxisGroupLabelCoords) {\n    const w = this.w;\n    const xAxisNum = w.labelData.hasXaxisGroups ? 2 : 1;\n    const baseXAxisHeight = xaxisGroupLabelCoords.height + xaxisLabelCoords.height + xtitleCoords.height;\n    const xAxisHeightMultiplicate = w.axisFlags.isMultiLineX ? 1.2 : LINE_HEIGHT_RATIO;\n    const rotatedXAxisOffset = w.layout.rotateXLabels ? 22 : 10;\n    const rotatedXAxisLegendOffset = w.layout.rotateXLabels && w.config.legend.position === \"bottom\";\n    const additionalOffset = rotatedXAxisLegendOffset ? 10 : 0;\n    this.xAxisHeight = baseXAxisHeight * xAxisHeightMultiplicate + xAxisNum * rotatedXAxisOffset + additionalOffset;\n    this.xAxisWidth = xaxisLabelCoords.width;\n    if (this.xAxisHeight - xtitleCoords.height > w.config.xaxis.labels.maxHeight) {\n      this.xAxisHeight = w.config.xaxis.labels.maxHeight;\n    }\n    if (w.config.xaxis.labels.minHeight && this.xAxisHeight < w.config.xaxis.labels.minHeight) {\n      this.xAxisHeight = w.config.xaxis.labels.minHeight;\n    }\n    if (w.config.xaxis.floating) {\n      this.xAxisHeight = 0;\n    }\n    let minYAxisWidth = 0;\n    let maxYAxisWidth = 0;\n    w.config.yaxis.forEach((y) => {\n      minYAxisWidth += y.labels.minWidth;\n      maxYAxisWidth += y.labels.maxWidth;\n    });\n    if (this.yAxisWidth < minYAxisWidth) {\n      this.yAxisWidth = minYAxisWidth;\n    }\n    if (this.yAxisWidth > maxYAxisWidth) {\n      this.yAxisWidth = maxYAxisWidth;\n    }\n  }\n}\nconst SECOND = 1e3;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst WEEK = 7 * DAY;\nconst APPROX_MONTH = 30 * DAY;\nconst APPROX_YEAR = 365 * DAY;\nconst MIN_ZOOM_DAYS = 10 / (24 * 60 * 60);\nconst TICK_LADDER = [\n  { unit: \"second\", step: 1, approxMs: SECOND },\n  { unit: \"second\", step: 5, approxMs: 5 * SECOND },\n  { unit: \"second\", step: 15, approxMs: 15 * SECOND },\n  { unit: \"second\", step: 30, approxMs: 30 * SECOND },\n  { unit: \"minute\", step: 1, approxMs: MINUTE },\n  { unit: \"minute\", step: 5, approxMs: 5 * MINUTE },\n  { unit: \"minute\", step: 15, approxMs: 15 * MINUTE },\n  { unit: \"minute\", step: 30, approxMs: 30 * MINUTE },\n  { unit: \"hour\", step: 1, approxMs: HOUR },\n  { unit: \"hour\", step: 3, approxMs: 3 * HOUR },\n  { unit: \"hour\", step: 6, approxMs: 6 * HOUR },\n  { unit: \"hour\", step: 12, approxMs: 12 * HOUR },\n  { unit: \"day\", step: 1, approxMs: DAY },\n  { unit: \"day\", step: 2, approxMs: 2 * DAY },\n  { unit: \"week\", step: 1, approxMs: WEEK },\n  { unit: \"week\", step: 2, approxMs: 2 * WEEK },\n  { unit: \"month\", step: 1, approxMs: APPROX_MONTH },\n  { unit: \"month\", step: 3, approxMs: 3 * APPROX_MONTH },\n  { unit: \"month\", step: 6, approxMs: 6 * APPROX_MONTH },\n  { unit: \"year\", step: 1, approxMs: APPROX_YEAR },\n  { unit: \"year\", step: 2, approxMs: 2 * APPROX_YEAR },\n  { unit: \"year\", step: 5, approxMs: 5 * APPROX_YEAR },\n  { unit: \"year\", step: 10, approxMs: 10 * APPROX_YEAR },\n  { unit: \"year\", step: 25, approxMs: 25 * APPROX_YEAR },\n  { unit: \"year\", step: 50, approxMs: 50 * APPROX_YEAR },\n  { unit: \"year\", step: 100, approxMs: 100 * APPROX_YEAR }\n];\nconst DEFAULT_TICK_COUNT = 10;\nclass TimeScale {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.tickInterval = null;\n    this.timeScaleArray = [];\n    this.utc = w.config.xaxis.labels.datetimeUTC;\n  }\n  /**\n   * Compute raw ticks for a datetime axis spanning [minX, maxX]. Single\n   * uniform stride — one unit, no promotion, no calendar-boundary overlay.\n   * Context (year, day) is folded into each label's format string at\n   * `formatDates` time, not split across promoted ticks.\n   *\n   * @param {number} minX\n   * @param {number} maxX\n   * @returns {Array<any>} raw ticks (pre-formatting). Pass to recalcDimensionsBasedOnFormat for the final timescaleLabels.\n   */\n  calculateTimeScaleTicks(minX, maxX) {\n    const w = this.w;\n    if (w.globals.allSeriesCollapsed) {\n      w.labelData.labels = [];\n      w.labelData.timescaleLabels = [];\n      this.timeScaleArray = [];\n      return [];\n    }\n    const span = maxX - minX;\n    const daysDiff = span / DAY;\n    w.interact.disableZoomIn = false;\n    w.interact.disableZoomOut = false;\n    if (daysDiff < MIN_ZOOM_DAYS) {\n      w.interact.disableZoomIn = true;\n    } else if (daysDiff > 5e4) {\n      w.interact.disableZoomOut = true;\n    }\n    const targetCount = Number.isFinite(w.config.xaxis.tickAmount) ? (\n      /** @type {number} */\n      w.config.xaxis.tickAmount\n    ) : DEFAULT_TICK_COUNT;\n    this.tickInterval = pickInterval(span, targetCount);\n    const ticks = this.generateBaseTicks(minX, maxX, this.tickInterval);\n    this.timeScaleArray = ticks;\n    return ticks;\n  }\n  /**\n   * Walk the interval stride from `minX` to `maxX`. Every tick carries\n   * `unit: interval.unit` — no promotion, no snapping. Uniform spacing is\n   * guaranteed.\n   *\n   * @param {number} minX\n   * @param {number} maxX\n   * @param {{ unit: string, step: number }} interval\n   * @returns {Array<any>}\n   */\n  generateBaseTicks(minX, maxX, interval) {\n    const w = this.w;\n    const dt = new DateTime(w);\n    const isUTC = this.utc;\n    const gridWidth = w.layout.gridWidth;\n    const span = maxX - minX;\n    const ticks = [];\n    let t = dt.ceilToBoundary(\n      minX,\n      /** @type {any} */\n      interval.unit,\n      interval.step,\n      isUTC\n    );\n    let iter = 0;\n    const MAX_ITER = 5e3;\n    while (t <= maxX && iter < MAX_ITER) {\n      const f = dt.getDateFields(t, isUTC);\n      const position = span > 0 ? (t - minX) / span * gridWidth : 0;\n      ticks.push({\n        timestamp: t,\n        position,\n        unit: interval.unit,\n        year: f.year,\n        month: f.month + 1,\n        day: f.date,\n        hour: f.hour,\n        minute: f.minute,\n        second: f.second,\n        value: t\n      });\n      t = dt.addInterval(\n        t,\n        /** @type {any} */\n        interval.unit,\n        interval.step,\n        isUTC\n      );\n      iter++;\n    }\n    return ticks;\n  }\n  /**\n   * Public entry called from Core.js after calculateTimeScaleTicks. Formats\n   * the raw ticks into display labels, removes overlapping entries, writes\n   * the result to `w.labelData.timescaleLabels`, and re-runs Dimensions to\n   * lay out the grid based on the final label widths.\n   *\n   * @param {Array<any>} rawTicks\n   */\n  recalcDimensionsBasedOnFormat(rawTicks) {\n    const w = this.w;\n    const formatted = this.formatDates(rawTicks);\n    const filtered = this.removeOverlappingTS(formatted);\n    w.labelData.timescaleLabels = filtered.slice();\n    const dimensions = new Dimensions(this.w, this.ctx);\n    const layoutState = dimensions.plotCoords();\n    this.ctx._writeLayoutCoords(layoutState.layout);\n  }\n  /**\n   * Format each raw tick into a display label. All ticks share one\n   * effective format computed once from the interval unit and the data\n   * range — when the range spans coarser units, the base format from\n   * `datetimeFormatter[unit]` is automatically extended with the higher-\n   * unit context (e.g. month-scale spanning years → `MMM yyyy`, hour-scale\n   * spanning days → `dd MMM HH:mm`). A user-supplied `xaxis.labels.format`\n   * overrides everything.\n   *\n   * @param {Array<any>} rawTicks\n   * @returns {Array<any>}\n   */\n  formatDates(rawTicks) {\n    const w = this.w;\n    const dt = new DateTime(w);\n    const userFormat = w.config.xaxis.labels.format;\n    const dtFmt = w.config.xaxis.labels.datetimeFormatter;\n    const isUTC = this.utc;\n    const pad = (n, len = 2) => String(n).padStart(len, \"0\");\n    const effectiveFormat = userFormat ? userFormat : this._effectiveFormat(rawTicks, dtFmt);\n    return rawTicks.map((tick) => {\n      const date = dt.getDate(tick.timestamp);\n      const value = dt.formatDate(date, effectiveFormat);\n      const ds = `${tick.year}-${pad(tick.month)}-${pad(tick.day)}T${pad(tick.hour)}:${pad(tick.minute)}:${pad(tick.second)}.000${isUTC ? \"Z\" : \"\"}`;\n      return {\n        dateString: ds,\n        position: tick.position,\n        value,\n        unit: tick.unit,\n        year: tick.year,\n        month: tick.month\n      };\n    });\n  }\n  /**\n   * Pick the format string used for every tick this render. Folds coarser\n   * context into the base `datetimeFormatter[unit]` when the data range\n   * spans it. Skipped when the base format already references the higher\n   * unit's tokens (so user customizations aren't doubled).\n   *\n   * @param {Array<any>} rawTicks\n   * @param {Record<string, string>} dtFmt\n   * @returns {string}\n   */\n  _effectiveFormat(rawTicks, dtFmt) {\n    if (rawTicks.length === 0) return dtFmt.day || \"dd MMM\";\n    const unit = this.tickInterval && this.tickInterval.unit || rawTicks[0].unit;\n    const base = dtFmt[unit === \"week\" ? \"day\" : unit] || dtFmt.day || \"dd MMM\";\n    const first = rawTicks[0];\n    const last = rawTicks[rawTicks.length - 1];\n    const spansYears = first.year !== last.year;\n    const spansMonths = spansYears || first.month !== last.month;\n    const spansDays = spansMonths || first.day !== last.day;\n    const hasYearToken = /y/i.test(base);\n    const hasMonthToken = /M/.test(base);\n    const hasDayToken = /d/i.test(base);\n    if (unit === \"month\" || unit === \"week\") {\n      if (spansYears && !hasYearToken) return base + \" yyyy\";\n      return base;\n    }\n    if (unit === \"day\") {\n      if (spansYears && !hasYearToken) return base + \" yyyy\";\n      return base;\n    }\n    if (unit === \"hour\" || unit === \"minute\" || unit === \"second\") {\n      if (spansDays && !hasDayToken && !hasMonthToken) {\n        const prefix = spansYears ? \"dd MMM yyyy\" : \"dd MMM\";\n        return prefix + \" \" + base;\n      }\n      return base;\n    }\n    return base;\n  }\n  /**\n   * Drop labels that would overlap their predecessor (when\n   * `xaxis.labels.hideOverlappingLabels` is true). The first label is always\n   * kept. Width is measured per-label unless all labels have the same string\n   * length, in which case one measurement is reused.\n   *\n   * @param {Array<any>} arr\n   * @returns {Array<any>}\n   */\n  removeOverlappingTS(arr) {\n    if (arr.length === 0) return [];\n    const w = this.w;\n    const graphics = new Graphics(w);\n    let equalLabelLengthFlag = false;\n    let constantLabelWidth;\n    if (arr[0].value && arr.every((lb) => lb.value.length === arr[0].value.length)) {\n      equalLabelLengthFlag = true;\n      constantLabelWidth = graphics.getTextRects(\n        arr[0].value,\n        w.config.xaxis.labels.style.fontSize\n      ).width;\n    }\n    let lastDrawnIndex = 0;\n    const filtered = arr.map((item, index) => {\n      if (index === 0) return item;\n      if (!w.config.xaxis.labels.hideOverlappingLabels) return item;\n      const prevLabelWidth = equalLabelLengthFlag ? (\n        /** @type {number} */\n        constantLabelWidth\n      ) : graphics.getTextRects(\n        arr[lastDrawnIndex].value,\n        w.config.xaxis.labels.style.fontSize\n      ).width;\n      const prevPos = arr[lastDrawnIndex].position;\n      const pos = item.position;\n      if (pos > prevPos + prevLabelWidth + 10) {\n        lastDrawnIndex = index;\n        return item;\n      }\n      return null;\n    }).filter((f) => f !== null);\n    return filtered;\n  }\n}\nfunction pickInterval(span, targetCount) {\n  if (!Number.isFinite(targetCount) || targetCount <= 0) {\n    targetCount = DEFAULT_TICK_COUNT;\n  }\n  if (span <= 0) return TICK_LADDER[0];\n  const targetMs = span / targetCount;\n  let best = TICK_LADDER[0];\n  let bestDist = Infinity;\n  for (const interval of TICK_LADDER) {\n    const dist = Math.abs(Math.log(interval.approxMs / targetMs));\n    if (dist < bestDist) {\n      bestDist = dist;\n      best = interval;\n    }\n  }\n  return best;\n}\nconst REGISTRY_KEY = \"__apexcharts_registry__\";\nif (!/** @type {any} */\nglobalThis[REGISTRY_KEY]) {\n  globalThis[REGISTRY_KEY] = {};\n}\nfunction getRegistry() {\n  return (\n    /** @type {any} */\n    globalThis[REGISTRY_KEY]\n  );\n}\nfunction register(typeMap) {\n  Object.assign(getRegistry(), typeMap);\n}\nfunction getChartClass(type) {\n  const Cls = getRegistry()[type];\n  if (!Cls) {\n    throw new Error(\n      `ApexCharts: chart type \"${type}\" is not registered. Import it via ApexCharts.use() or use the full apexcharts bundle.`\n    );\n  }\n  return Cls;\n}\nclass Core {\n  /**\n   * @param {Element} el\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(el, w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.el = el;\n  }\n  setupElements() {\n    const { globals: gl, config: cnf } = this.w;\n    const ct = cnf.chart.type;\n    const xyChartsArrTypes = [\n      \"line\",\n      \"area\",\n      \"bar\",\n      \"rangeBar\",\n      \"rangeArea\",\n      \"candlestick\",\n      \"boxPlot\",\n      \"violin\",\n      \"scatter\",\n      \"bubble\"\n    ];\n    const axisChartsArrTypes = [\n      ...xyChartsArrTypes,\n      \"radar\",\n      \"heatmap\",\n      \"treemap\"\n    ];\n    gl.axisCharts = axisChartsArrTypes.includes(ct);\n    gl.xyCharts = xyChartsArrTypes.includes(ct);\n    gl.isBarHorizontal = [\"bar\", \"rangeBar\", \"boxPlot\", \"violin\"].includes(ct) && cnf.plotOptions.bar.horizontal;\n    gl.chartClass = `.apexcharts${gl.chartID}`;\n    this.w.dom.baseEl = this.el;\n    this.w.dom.elWrap = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/1999/xhtml\",\n      \"div\"\n    );\n    Graphics.setAttrs(this.w.dom.elWrap, {\n      id: gl.chartClass.substring(1),\n      class: `apexcharts-canvas ${gl.chartClass.substring(1)}`\n    });\n    this.el.appendChild(this.w.dom.elWrap);\n    const SVG2 = (\n      /** @type {any} */\n      globalThis.SVG\n    );\n    this.w.dom.Paper = SVG2().addTo(this.w.dom.elWrap);\n    this.w.dom.Paper.attr({\n      class: \"apexcharts-svg\",\n      \"xmlns:data\": \"ApexChartsNS\",\n      transform: `translate(${cnf.chart.offsetX}, ${cnf.chart.offsetY})`\n    });\n    this.w.dom.Paper.node.style.background = cnf.theme.mode === \"dark\" && !cnf.chart.background ? \"#343A3F\" : cnf.theme.mode === \"light\" && !cnf.chart.background ? \"#fff\" : cnf.chart.background;\n    this.setSVGDimensions();\n    this.w.dom.elLegendForeign = BrowserAPIs.createElementNS(\n      SVGNS,\n      \"foreignObject\"\n    );\n    Graphics.setAttrs(this.w.dom.elLegendForeign, {\n      x: 0,\n      y: 0,\n      width: gl.svgWidth,\n      height: gl.svgHeight\n    });\n    this.w.dom.elLegendWrap = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/1999/xhtml\",\n      \"div\"\n    );\n    this.w.dom.elLegendWrap.classList.add(\"apexcharts-legend\");\n    this.w.dom.elWrap.appendChild(this.w.dom.elLegendWrap);\n    this.w.dom.Paper.node.appendChild(this.w.dom.elLegendForeign);\n    if (cnf.chart.accessibility.enabled && cnf.chart.accessibility.announcements.enabled) {\n      const srStatus = BrowserAPIs.createElement(\"div\");\n      srStatus.className = \"apexcharts-sr-status\";\n      srStatus.setAttribute(\"role\", \"status\");\n      srStatus.setAttribute(\"aria-live\", \"polite\");\n      srStatus.setAttribute(\"aria-atomic\", \"true\");\n      this.w.dom.elWrap.appendChild(srStatus);\n    }\n    if (cnf.chart.accessibility.enabled) {\n      const ariaLabel = this.getAccessibleChartLabel();\n      const svgRole = cnf.chart.accessibility.keyboard.enabled && cnf.chart.accessibility.keyboard.navigation.enabled ? \"application\" : \"img\";\n      this.w.dom.Paper.attr({\n        role: svgRole,\n        \"aria-label\": ariaLabel\n      });\n      if (cnf.chart.accessibility.description) {\n        const descEl = BrowserAPIs.createElementNS(SVGNS, \"desc\");\n        descEl.textContent = cnf.chart.accessibility.description;\n        this.w.dom.Paper.node.insertBefore(\n          descEl,\n          this.w.dom.elLegendForeign.nextSibling\n        );\n      }\n    }\n    this.w.dom.elGraphical = this.w.dom.Paper.group().attr({\n      class: \"apexcharts-inner apexcharts-graphical\"\n    });\n    this.w.dom.elDefs = this.w.dom.Paper.defs();\n    this.w.dom.Paper.add(this.w.dom.elGraphical);\n    this.w.dom.elGraphical.add(this.w.dom.elDefs);\n  }\n  /**\n   * @param {any[]} ser\n   * @param {import('../types/internal').XYRatios} xyRatios\n   */\n  plotChartType(ser, xyRatios) {\n    const { w, ctx } = this;\n    const { config: cnf, globals: gl } = w;\n    const seriesTypes = {\n      line: { series: [], i: [] },\n      area: { series: [], i: [] },\n      scatter: { series: [], i: [] },\n      bubble: { series: [], i: [] },\n      bar: { series: [], i: [] },\n      candlestick: { series: [], i: [] },\n      boxPlot: { series: [], i: [] },\n      violin: { series: [], i: [] },\n      rangeBar: { series: [], i: [] },\n      rangeArea: { series: [], seriesRangeEnd: [], i: [] }\n    };\n    const chartType = cnf.chart.type || \"line\";\n    let nonComboType = null;\n    let comboCount = 0;\n    this.w.seriesData.series.forEach((serie, st) => {\n      var _a, _b;\n      const seriesType = ((_a = ser[st]) == null ? void 0 : _a.type) === \"column\" ? \"bar\" : ((_b = ser[st]) == null ? void 0 : _b.type) || (chartType === \"column\" ? \"bar\" : chartType);\n      const st_ = (\n        /** @type {Record<string,any>} */\n        seriesTypes\n      );\n      if (st_[seriesType]) {\n        if (seriesType === \"rangeArea\") {\n          st_[seriesType].series.push(this.w.rangeData.seriesRangeStart[st]);\n          st_[seriesType].seriesRangeEnd.push(\n            this.w.rangeData.seriesRangeEnd[st]\n          );\n        } else {\n          st_[seriesType].series.push(serie);\n        }\n        st_[seriesType].i.push(st);\n        if (seriesType === \"bar\") w.globals.columnSeries = seriesTypes.bar;\n      } else if ([\n        \"heatmap\",\n        \"treemap\",\n        \"pie\",\n        \"donut\",\n        \"polarArea\",\n        \"radialBar\",\n        \"radar\"\n      ].includes(seriesType)) {\n        nonComboType = seriesType;\n      } else {\n        console.warn(\n          `You have specified an unrecognized series type (${seriesType}).`\n        );\n      }\n      if (chartType !== seriesType && seriesType !== \"scatter\") comboCount++;\n    });\n    if (comboCount > 0) {\n      if (nonComboType) {\n        console.warn(\n          `Chart or series type ${nonComboType} cannot appear with other chart or series types.`\n        );\n      }\n      if (seriesTypes.bar.series.length > 0 && cnf.plotOptions.bar.horizontal) {\n        comboCount -= seriesTypes.bar.series.length;\n        seriesTypes.bar = { series: [], i: [] };\n        w.globals.columnSeries = { series: [], i: [] };\n        console.warn(\n          \"Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`\"\n        );\n      }\n    }\n    gl.comboCharts || (gl.comboCharts = comboCount > 0);\n    const needsLine = seriesTypes.line.series.length > 0 || seriesTypes.area.series.length > 0 || seriesTypes.scatter.series.length > 0 || seriesTypes.bubble.series.length > 0 || seriesTypes.rangeArea.series.length > 0 || !gl.comboCharts && [\"line\", \"area\", \"scatter\", \"bubble\", \"rangeArea\"].includes(\n      cnf.chart.type\n    );\n    const line = needsLine ? new (getChartClass(\"line\"))(ctx.w, ctx, xyRatios) : null;\n    const needsCandlestick = seriesTypes.candlestick.series.length > 0 || seriesTypes.boxPlot.series.length > 0 || !gl.comboCharts && [\"candlestick\", \"boxPlot\"].includes(cnf.chart.type);\n    const boxCandlestick = needsCandlestick ? new (getChartClass(\"candlestick\"))(ctx.w, ctx, xyRatios) : null;\n    const needsViolin = seriesTypes.violin.series.length > 0 || !gl.comboCharts && cnf.chart.type === \"violin\";\n    const violin = needsViolin ? new (getChartClass(\"violin\"))(ctx.w, ctx, xyRatios) : null;\n    const needsPie = !gl.comboCharts && [\"pie\", \"donut\", \"polarArea\"].includes(cnf.chart.type);\n    ctx.pie = needsPie ? new (getChartClass(\"pie\"))(ctx.w, ctx) : null;\n    const needsRangeBar = seriesTypes.rangeBar.series.length > 0 || !gl.comboCharts && cnf.chart.type === \"rangeBar\";\n    ctx.rangeBar = needsRangeBar ? new (getChartClass(\"rangeBar\"))(ctx.w, ctx, xyRatios) : null;\n    let elGraph = [];\n    if (gl.comboCharts) {\n      const coreUtils = new CoreUtils(this.w);\n      if (seriesTypes.area.series.length > 0) {\n        elGraph.push(\n          ...coreUtils.drawSeriesByGroup(\n            seriesTypes.area,\n            gl.areaGroups,\n            \"area\",\n            line\n          )\n        );\n      }\n      if (seriesTypes.bar.series.length > 0) {\n        if (cnf.chart.stacked) {\n          const barStacked = new (getChartClass(\"barStacked\"))(\n            ctx.w,\n            ctx,\n            xyRatios\n          );\n          elGraph.push(\n            barStacked.draw(seriesTypes.bar.series, seriesTypes.bar.i)\n          );\n        } else {\n          ctx.bar = new (getChartClass(\"bar\"))(ctx.w, ctx, xyRatios);\n          elGraph.push(ctx.bar.draw(seriesTypes.bar.series, seriesTypes.bar.i));\n        }\n      }\n      if (seriesTypes.rangeArea.series.length > 0) {\n        elGraph.push(\n          line.draw(\n            seriesTypes.rangeArea.series,\n            \"rangeArea\",\n            seriesTypes.rangeArea.i,\n            seriesTypes.rangeArea.seriesRangeEnd\n          )\n        );\n      }\n      if (seriesTypes.line.series.length > 0) {\n        elGraph.push(\n          ...coreUtils.drawSeriesByGroup(\n            seriesTypes.line,\n            gl.lineGroups,\n            \"line\",\n            line\n          )\n        );\n      }\n      if (seriesTypes.candlestick.series.length > 0) {\n        elGraph.push(\n          boxCandlestick.draw(\n            seriesTypes.candlestick.series,\n            \"candlestick\",\n            seriesTypes.candlestick.i\n          )\n        );\n      }\n      if (seriesTypes.boxPlot.series.length > 0) {\n        elGraph.push(\n          boxCandlestick.draw(\n            seriesTypes.boxPlot.series,\n            \"boxPlot\",\n            seriesTypes.boxPlot.i\n          )\n        );\n      }\n      if (seriesTypes.violin.series.length > 0) {\n        elGraph.push(\n          violin.draw(seriesTypes.violin.series, \"violin\", seriesTypes.violin.i)\n        );\n      }\n      if (seriesTypes.rangeBar.series.length > 0) {\n        elGraph.push(\n          ctx.rangeBar.draw(\n            seriesTypes.rangeBar.series,\n            seriesTypes.rangeBar.i\n          )\n        );\n      }\n      if (seriesTypes.scatter.series.length > 0) {\n        const scatterLine = new (getChartClass(\"line\"))(\n          ctx.w,\n          ctx,\n          xyRatios,\n          true\n        );\n        elGraph.push(\n          scatterLine.draw(\n            seriesTypes.scatter.series,\n            \"scatter\",\n            seriesTypes.scatter.i\n          )\n        );\n      }\n      if (seriesTypes.bubble.series.length > 0) {\n        const bubbleLine = new (getChartClass(\"line\"))(\n          ctx.w,\n          ctx,\n          xyRatios,\n          true\n        );\n        elGraph.push(\n          bubbleLine.draw(\n            seriesTypes.bubble.series,\n            \"bubble\",\n            seriesTypes.bubble.i\n          )\n        );\n      }\n    } else {\n      const type = cnf.chart.type;\n      switch (type) {\n        case \"line\":\n          elGraph = line.draw(this.w.seriesData.series, \"line\");\n          break;\n        case \"area\":\n          elGraph = line.draw(this.w.seriesData.series, \"area\");\n          break;\n        case \"bar\":\n          if (cnf.chart.stacked) {\n            const barStacked = new (getChartClass(\"barStacked\"))(\n              ctx.w,\n              ctx,\n              xyRatios\n            );\n            elGraph = barStacked.draw(this.w.seriesData.series);\n          } else {\n            ctx.bar = new (getChartClass(\"bar\"))(ctx.w, ctx, xyRatios);\n            elGraph = ctx.bar.draw(this.w.seriesData.series);\n          }\n          break;\n        case \"candlestick\":\n          elGraph = boxCandlestick.draw(this.w.seriesData.series, \"candlestick\");\n          break;\n        case \"boxPlot\":\n          elGraph = boxCandlestick.draw(this.w.seriesData.series, type);\n          break;\n        case \"violin\":\n          elGraph = violin.draw(this.w.seriesData.series, \"violin\");\n          break;\n        case \"rangeBar\":\n          elGraph = ctx.rangeBar.draw(this.w.seriesData.series);\n          break;\n        case \"rangeArea\":\n          elGraph = line.draw(\n            this.w.rangeData.seriesRangeStart,\n            \"rangeArea\",\n            void 0,\n            this.w.rangeData.seriesRangeEnd\n          );\n          break;\n        case \"heatmap\": {\n          const heatmap = new (getChartClass(\"heatmap\"))(ctx.w, ctx, xyRatios);\n          elGraph = heatmap.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"treemap\": {\n          const treemap = new (getChartClass(\"treemap\"))(ctx.w, ctx);\n          elGraph = treemap.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"pie\":\n        case \"donut\":\n        case \"polarArea\":\n          elGraph = ctx.pie.draw(this.w.seriesData.series);\n          break;\n        case \"radialBar\": {\n          const radialBar = new (getChartClass(\"radialBar\"))(ctx.w, ctx);\n          elGraph = radialBar.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"radar\": {\n          const radar = new (getChartClass(\"radar\"))(ctx.w, ctx);\n          elGraph = radar.draw(this.w.seriesData.series);\n          break;\n        }\n        default:\n          elGraph = line.draw(this.w.seriesData.series);\n      }\n    }\n    return elGraph;\n  }\n  setSVGDimensions() {\n    var _a;\n    const { globals: gl, config: cnf } = this.w;\n    cnf.chart.width = cnf.chart.width || \"100%\";\n    cnf.chart.height = cnf.chart.height || \"auto\";\n    const rawWidth = cnf.chart.width;\n    const rawHeight = cnf.chart.height;\n    gl.svgWidth = NaN;\n    gl.svgHeight = NaN;\n    let elDim = Utils$1.getDimensions(this.el);\n    const widthUnit = rawWidth.toString().split(/[0-9]+/g).pop();\n    if (widthUnit === \"%\") {\n      if (Utils$1.isNumber(elDim[0])) {\n        if (elDim[0].width === 0) {\n          elDim = Utils$1.getDimensions(this.el.parentNode);\n        }\n        gl.svgWidth = elDim[0] * parseInt(rawWidth, 10) / 100;\n      }\n    } else if (widthUnit === \"px\" || widthUnit === \"\") {\n      gl.svgWidth = parseInt(rawWidth, 10);\n    }\n    const heightUnit = String(rawHeight).toString().split(/[0-9]+/g).pop();\n    if (rawHeight !== \"auto\" && rawHeight !== \"\") {\n      if (heightUnit === \"%\") {\n        const elParentDim = Utils$1.getDimensions(this.el.parentNode);\n        gl.svgHeight = elParentDim[1] * parseInt(rawHeight, 10) / 100;\n      } else {\n        gl.svgHeight = parseInt(rawHeight, 10);\n      }\n    } else {\n      gl.svgHeight = gl.axisCharts ? gl.svgWidth / 1.61 : gl.svgWidth / 1.2;\n    }\n    gl.svgWidth = Math.max(gl.svgWidth, 0);\n    gl.svgHeight = Math.max(gl.svgHeight, 0);\n    Graphics.setAttrs(this.w.dom.Paper.node, {\n      width: gl.svgWidth,\n      height: gl.svgHeight\n    });\n    if (heightUnit !== \"%\" && Environment.isBrowser()) {\n      const needsAxisPadding = gl.axisCharts && (cnf.grid.show || cnf.dataLabels.enabled || cnf.xaxis.labels.show || cnf.xaxis.axisBorder.show || cnf.xaxis.axisTicks.show || cnf.yaxis.some(\n        (y) => y.show && (y.labels.show || y.axisBorder.show || y.axisTicks.show)\n      ));\n      const offsetY = cnf.chart.sparkline.enabled || !needsAxisPadding ? 0 : cnf.chart.parentHeightOffset;\n      const paperNode = this.w.dom.Paper.node;\n      if ((_a = paperNode.parentNode) == null ? void 0 : _a.parentNode) {\n        paperNode.parentNode.parentNode.style.minHeight = `${gl.svgHeight + offsetY}px`;\n      }\n    }\n    this.w.dom.elWrap.style.width = `${gl.svgWidth}px`;\n    this.w.dom.elWrap.style.height = `${gl.svgHeight}px`;\n  }\n  shiftGraphPosition() {\n    const { globals: gl } = this.w;\n    const { translateY: tY, translateX: tX } = gl;\n    Graphics.setAttrs(this.w.dom.elGraphical.node, {\n      transform: `translate(${tX}, ${tY})`\n    });\n  }\n  resizeNonAxisCharts() {\n    var _a, _b, _c, _d, _e, _f;\n    const { w } = this;\n    const heightStr = w.config.chart.height ? String(w.config.chart.height) : \"\";\n    const userSetFixedHeight = heightStr !== \"\" && heightStr !== \"auto\";\n    const isPercentHeight = heightStr.includes(\"%\");\n    let legendHeight = 0;\n    let offY = w.config.chart.sparkline.enabled ? 1 : 15;\n    offY += w.config.grid.padding.bottom;\n    if ([\"top\", \"bottom\"].includes(w.config.legend.position) && w.config.legend.show && !w.config.legend.floating) {\n      legendHeight = ((_b = (_a = this.ctx.legend) == null ? void 0 : _a.legendHelpers.getLegendDimensions().clwh) != null ? _b : 0) + 7;\n    }\n    const el = w.dom.baseEl.querySelector(\n      \".apexcharts-radialbar, .apexcharts-pie\"\n    );\n    const externalLabelMarginY = w.globals.pieExternalLabelMarginY || 0;\n    let chartInnerDimensions = externalLabelMarginY > 0 ? w.globals.radialSize * 2 + externalLabelMarginY * 2 : w.globals.radialSize * 2.05;\n    const radialAngleSpan = Math.abs(\n      w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle\n    );\n    if (el && !w.config.chart.sparkline.enabled && radialAngleSpan < 360) {\n      const svgRect = Utils$1.getBoundingClientRect(this.w.dom.Paper.node);\n      let arcTopFromSVGTop = Infinity;\n      let arcBottomFromSVGTop = -Infinity;\n      const accumulate = (node) => {\n        var _a2, _b2, _c2, _d2;\n        if ((_a2 = node.classList) == null ? void 0 : _a2.contains(\"apexcharts-radialbar-hollow\")) {\n          return;\n        }\n        const tag = (_c2 = (_b2 = node.tagName) == null ? void 0 : _b2.toLowerCase) == null ? void 0 : _c2.call(_b2);\n        if (tag === \"text\" || tag === \"tspan\") return;\n        const children = Array.from((_d2 = node.children) != null ? _d2 : []);\n        if (children.length > 0) {\n          children.forEach((c) => accumulate(\n            /** @type {Element} */\n            c\n          ));\n          return;\n        }\n        const r = Utils$1.getBoundingClientRect(node);\n        const height = r.bottom - r.top;\n        if (height > 0) {\n          const top = r.top - svgRect.top;\n          const bottom = r.bottom - svgRect.top;\n          if (top < arcTopFromSVGTop) arcTopFromSVGTop = top;\n          if (bottom > arcBottomFromSVGTop) arcBottomFromSVGTop = bottom;\n        }\n      };\n      Array.from((_c = el.children) != null ? _c : []).forEach(\n        (c) => accumulate(\n          /** @type {Element} */\n          c\n        )\n      );\n      if (!Number.isFinite(arcTopFromSVGTop)) arcTopFromSVGTop = 0;\n      if (!Number.isFinite(arcBottomFromSVGTop)) {\n        const elRect = Utils$1.getBoundingClientRect(el);\n        arcBottomFromSVGTop = elRect.bottom - svgRect.top;\n      }\n      const padding = Math.max(offY, w.globals.radialSize * 0.2);\n      const verticalShift = Math.max(padding - arcTopFromSVGTop, 0);\n      if (verticalShift !== 0) {\n        w.layout.translateY = ((_d = w.layout.translateY) != null ? _d : 0) + verticalShift;\n        Graphics.setAttrs(this.w.dom.elGraphical.node, {\n          transform: `translate(${(_e = w.layout.translateX) != null ? _e : 0}, ${w.layout.translateY})`\n        });\n        arcBottomFromSVGTop += verticalShift;\n      }\n      chartInnerDimensions = arcBottomFromSVGTop > 0 ? arcBottomFromSVGTop : w.globals.radialSize * 2.05;\n      const bottomPadding = Math.max(padding, arcTopFromSVGTop);\n      const svgHeight = Math.ceil(\n        chartInnerDimensions + legendHeight + bottomPadding\n      );\n      const chartOffsetY = (_f = w.config.chart.offsetY) != null ? _f : 0;\n      const elWrapHeight = svgHeight + Math.max(chartOffsetY, 0);\n      if (!isPercentHeight) {\n        if (this.w.dom.elLegendForeign) {\n          this.w.dom.elLegendForeign.setAttribute(\n            \"height\",\n            String(elWrapHeight)\n          );\n        }\n        this.w.dom.elWrap.style.height = `${elWrapHeight}px`;\n        Graphics.setAttrs(this.w.dom.Paper.node, { height: svgHeight });\n        if (Environment.isBrowser()) {\n          this.w.dom.Paper.node.parentNode.parentNode.style.minHeight = `${elWrapHeight}px`;\n        }\n      }\n      return;\n    }\n    const newHeight = Math.ceil(\n      chartInnerDimensions + this.w.layout.translateY + legendHeight + offY\n    );\n    if (userSetFixedHeight) return;\n    if (this.w.dom.elLegendForeign) {\n      this.w.dom.elLegendForeign.setAttribute(\"height\", String(newHeight));\n    }\n    this.w.dom.elWrap.style.height = `${newHeight}px`;\n    Graphics.setAttrs(this.w.dom.Paper.node, { height: newHeight });\n    if (Environment.isBrowser()) {\n      this.w.dom.Paper.node.parentNode.parentNode.style.minHeight = `${newHeight}px`;\n    }\n  }\n  coreCalculations() {\n    new Range(this.w).init();\n  }\n  resetGlobals() {\n    const resetxyValues = () => this.w.config.series.map(() => []);\n    const globalObj = new Globals();\n    const { globals: gl } = this.w;\n    const parsingFlags = {\n      dataWasParsed: this.w.axisFlags.dataWasParsed,\n      originalSeries: gl.originalSeries\n    };\n    globalObj.initGlobalVars(gl);\n    gl.seriesXvalues = resetxyValues();\n    gl.seriesYvalues = resetxyValues();\n    if (parsingFlags.dataWasParsed) {\n      this.w.axisFlags.dataWasParsed = parsingFlags.dataWasParsed;\n      gl.originalSeries = parsingFlags.originalSeries;\n    }\n  }\n  isMultipleY() {\n    if (Array.isArray(this.w.config.yaxis) && this.w.config.yaxis.length > 1) {\n      this.w.globals.isMultipleYAxis = true;\n      return true;\n    }\n    return false;\n  }\n  xySettings() {\n    const { w } = this;\n    let xyRatios = null;\n    if (w.globals.axisCharts) {\n      if (w.config.xaxis.crosshairs.position === \"back\") {\n        new Crosshairs(this.w).drawXCrosshairs();\n      }\n      if (w.config.yaxis[0].crosshairs.position === \"back\") {\n        new Crosshairs(this.w).drawYCrosshairs();\n      }\n      if (w.config.xaxis.type === \"datetime\" && w.config.xaxis.labels.formatter === void 0) {\n        this.ctx.timeScale = new TimeScale(this.w, this.ctx);\n        let formattedTimeScale = [];\n        if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) {\n          formattedTimeScale = this.ctx.timeScale.calculateTimeScaleTicks(\n            w.globals.minX,\n            w.globals.maxX\n          );\n        } else if (w.globals.isBarHorizontal) {\n          formattedTimeScale = this.ctx.timeScale.calculateTimeScaleTicks(\n            w.globals.minY,\n            w.globals.maxY\n          );\n        }\n        this.ctx.timeScale.recalcDimensionsBasedOnFormat(formattedTimeScale);\n      }\n      const coreUtils = new CoreUtils(this.w);\n      xyRatios = coreUtils.getCalculatedRatios();\n    }\n    return xyRatios;\n  }\n  /**\n   * @param {any} targetChart\n   */\n  updateSourceChart(targetChart) {\n    this.ctx.w.interact.selection = void 0;\n    this.ctx.updateHelpers._updateOptions(\n      {\n        chart: {\n          selection: {\n            xaxis: {\n              min: targetChart.w.globals.minX,\n              max: targetChart.w.globals.maxX\n            }\n          }\n        }\n      },\n      false,\n      false\n    );\n  }\n  setupBrushHandler() {\n    const { ctx, w } = this;\n    if (!w.config.chart.brush.enabled) return;\n    if (typeof w.config.chart.events.selection !== \"function\") {\n      const targets = Array.isArray(w.config.chart.brush.targets) ? w.config.chart.brush.targets : [w.config.chart.brush.target];\n      targets.forEach((target) => {\n        const targetChart = (\n          /** @type {any} */\n          ctx.constructor.getChartByID(\n            target\n          )\n        );\n        targetChart.w.globals.brushSource = this.ctx;\n        if (typeof targetChart.w.config.chart.events.zoomed !== \"function\") {\n          targetChart.w.config.chart.events.zoomed = () => this.updateSourceChart(targetChart);\n        }\n        if (typeof targetChart.w.config.chart.events.scrolled !== \"function\") {\n          targetChart.w.config.chart.events.scrolled = () => (\n            /**\n             * @param {any} chart\n             * @param {Event} e\n             */\n            this.updateSourceChart(targetChart)\n          );\n        }\n      });\n      w.config.chart.events.selection = (chart, e) => {\n        targets.forEach((target) => {\n          const targetChart = (\n            /** @type {any} */\n            ctx.constructor.getChartByID(\n              target\n            )\n          );\n          targetChart.ctx.updateHelpers._updateOptions(\n            {\n              xaxis: {\n                min: e.xaxis.min,\n                max: e.xaxis.max\n              }\n            },\n            false,\n            false,\n            false,\n            false\n          );\n        });\n      };\n    }\n  }\n  getAccessibleChartLabel() {\n    const w = this.w;\n    const cnf = w.config;\n    if (cnf.chart.accessibility && cnf.chart.accessibility.description) {\n      return cnf.chart.accessibility.description;\n    }\n    const chartType = cnf.chart.type;\n    const parts = [];\n    if (cnf.title.text) {\n      parts.push(`${cnf.title.text}. ${chartType} chart`);\n      if (cnf.subtitle.text) parts.push(cnf.subtitle.text);\n    } else {\n      const namedSeries = (() => {\n        if (Array.isArray(w.seriesData.seriesNames) && w.seriesData.seriesNames.length) {\n          return w.seriesData.seriesNames.filter(Boolean);\n        }\n        if (Array.isArray(cnf.series)) {\n          return cnf.series.map((s) => typeof s === \"object\" && s !== null ? s.name : null).filter(Boolean);\n        }\n        return [];\n      })();\n      const seriesCount = w.seriesData.series.length || (cnf.series ? cnf.series.length : 0);\n      if (namedSeries.length) {\n        parts.push(\n          `${chartType} chart with ${seriesCount} data series: ${namedSeries.join(\", \")}`\n        );\n      } else {\n        parts.push(`${chartType} chart with ${seriesCount} data series`);\n      }\n    }\n    return parts.join(\". \");\n  }\n}\nclass Data {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w, { resetGlobals = () => {\n  }, isMultipleY = () => {\n  } } = {}) {\n    this.w = w;\n    this.resetGlobals = resetGlobals;\n    this.isMultipleY = isMultipleY;\n    this.twoDSeries = [];\n    this.threeDSeries = [];\n    this.twoDSeriesX = [];\n    this.seriesGoals = [];\n    this.coreUtils = new CoreUtils(this.w);\n    this.activeSeriesIndex = 0;\n  }\n  // Helper to get the first valid data point from the active series\n  getFirstDataPoint() {\n    const series = this.w.config.series;\n    const sr = new Series(this.w);\n    this.activeSeriesIndex = sr.getActiveConfigSeriesIndex();\n    const activeItem = (\n      /** @type {any} */\n      series[this.activeSeriesIndex]\n    );\n    if (activeItem && activeItem.data && activeItem.data.length > 0 && activeItem.data[0] !== null && typeof activeItem.data[0] !== \"undefined\") {\n      return activeItem.data[0];\n    }\n    return null;\n  }\n  isMultiFormat() {\n    return this.isFormatXY() || this.isFormat2DArray();\n  }\n  // given format is [{x, y}, {x, y}]\n  isFormatXY() {\n    var _a;\n    const firstDataPoint = this.getFirstDataPoint();\n    if (!firstDataPoint || typeof firstDataPoint.x === \"undefined\") return false;\n    const data = (\n      /** @type {any} */\n      (_a = this.w.config.series[this.activeSeriesIndex]) == null ? void 0 : _a.data\n    );\n    if (data) {\n      const isXY = (pt) => pt && typeof pt.x !== \"undefined\";\n      for (let k = 1; k < Math.min(3, data.length); k++) {\n        if (isXY(data[k]) !== true) {\n          console.warn(\n            `ApexCharts: series data has mixed formats starting at index ${k}`\n          );\n          break;\n        }\n      }\n    }\n    return true;\n  }\n  // given format is [[x, y], [x, y]]\n  isFormat2DArray() {\n    const firstDataPoint = this.getFirstDataPoint();\n    return firstDataPoint && Array.isArray(firstDataPoint);\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleFormat2DArray(ser, i) {\n    const cnf = this.w.config;\n    const data = ser[i].data;\n    const isBoxPlot = cnf.chart.type === \"boxPlot\" || /** @type {any} */\n    cnf.series[i].type === \"boxPlot\";\n    for (let j = 0; j < data.length; j++) {\n      const point = data[j];\n      const x = point[0];\n      const y = point[1];\n      const z = point[2];\n      if (typeof y !== \"undefined\") {\n        if (Array.isArray(y) && y.length === 4 && !isBoxPlot) {\n          this.twoDSeries.push(Utils$1.parseNumber(y[3]));\n        } else if (point.length >= 5) {\n          this.twoDSeries.push(Utils$1.parseNumber(point[4]));\n        } else {\n          this.twoDSeries.push(Utils$1.parseNumber(y));\n        }\n        this.w.axisFlags.dataFormatXNumeric = true;\n      }\n      if (cnf.xaxis.type === \"datetime\") {\n        const ts = new Date(x).getTime();\n        this.twoDSeriesX.push(ts);\n      } else {\n        this.twoDSeriesX.push(x);\n      }\n      if (typeof z !== \"undefined\") {\n        this.threeDSeries.push(z);\n        this.w.axisFlags.isDataXYZ = true;\n      }\n    }\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleFormatXY(ser, i) {\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    const dt = new DateTime(this.w);\n    const data = ser[i].data;\n    let activeI = i;\n    if (gl.collapsedSeriesIndices.indexOf(i) > -1) {\n      activeI = this.activeSeriesIndex;\n    }\n    const activeData = ser[activeI].data;\n    for (let j = 0; j < data.length; j++) {\n      const point = data[j];\n      if (typeof point.y !== \"undefined\") {\n        const val = Array.isArray(point.y) ? Utils$1.parseNumber(point.y[point.y.length - 1]) : Utils$1.parseNumber(point.y);\n        this.twoDSeries.push(val);\n      }\n      if (typeof this.seriesGoals[i] === \"undefined\") {\n        this.seriesGoals[i] = [];\n      }\n      if (typeof point.goals !== \"undefined\" && Array.isArray(point.goals)) {\n        this.seriesGoals[i].push(point.goals);\n      } else {\n        this.seriesGoals[i].push(null);\n      }\n      if (typeof point.z !== \"undefined\") {\n        this.threeDSeries.push(point.z);\n        this.w.axisFlags.isDataXYZ = true;\n      }\n    }\n    for (let j = 0; j < activeData.length; j++) {\n      const point = activeData[j];\n      const x = point.x;\n      const isXString = typeof x === \"string\";\n      const isXArr = Array.isArray(x);\n      const isXDate = !isXArr && !!dt.isValidDate(x);\n      if (isXString || isXDate) {\n        if (isXString || cnf.xaxis.convertedCatToNumeric) {\n          const isRangeColumn = gl.isBarHorizontal && this.w.axisFlags.isRangeData;\n          if (cnf.xaxis.type === \"datetime\" && !isRangeColumn) {\n            this.twoDSeriesX.push(dt.parseDate(x));\n          } else {\n            this.fallbackToCategory = true;\n            this.twoDSeriesX.push(x);\n            if (!isNaN(x) && this.w.config.xaxis.type !== \"category\" && typeof x !== \"string\") {\n              this.w.axisFlags.isXNumeric = true;\n            }\n          }\n        } else {\n          if (cnf.xaxis.type === \"datetime\") {\n            this.twoDSeriesX.push(dt.parseDate(x.toString()));\n          } else {\n            this.w.axisFlags.dataFormatXNumeric = true;\n            this.w.axisFlags.isXNumeric = true;\n            this.twoDSeriesX.push(parseFloat(x));\n          }\n        }\n      } else if (isXArr) {\n        this.fallbackToCategory = true;\n        this.twoDSeriesX.push(x);\n      } else {\n        this.w.axisFlags.isXNumeric = true;\n        this.w.axisFlags.dataFormatXNumeric = true;\n        this.twoDSeriesX.push(x);\n      }\n    }\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleRangeData(ser, i) {\n    let range = { start: [], end: [], rangeUniques: [] };\n    if (this.isFormat2DArray()) {\n      range = this.handleRangeDataFormat(\"array\", ser, i);\n    } else if (this.isFormatXY()) {\n      range = this.handleRangeDataFormat(\"xy\", ser, i);\n    }\n    this.w.rangeData.seriesRangeStart[i] = range.start === void 0 ? [] : range.start;\n    this.w.rangeData.seriesRangeEnd[i] = range.end === void 0 ? [] : range.end;\n    this.w.rangeData.seriesRange[i] = range.rangeUniques;\n    this.w.rangeData.seriesRange.forEach((sr) => {\n      if (!sr) return;\n      sr.forEach((sarr) => {\n        const yItems = (\n          /** @type {any} */\n          sarr.y\n        );\n        const len = (\n          /** @type {any[]} */\n          yItems.length\n        );\n        if (len <= 1) return;\n        for (let arri = 0; arri < len; arri++) {\n          const arr = (\n            /** @type {any} */\n            yItems[arri]\n          );\n          const range1y1 = arr.y1;\n          const range1y2 = arr.y2;\n          for (let sri = arri + 1; sri < len; sri++) {\n            const range2 = (\n              /** @type {any} */\n              yItems[sri]\n            );\n            const range2y1 = range2.y1;\n            const range2y2 = range2.y2;\n            if (range1y1 <= range2y2 && range2y1 <= range1y2) {\n              const sarrAny = (\n                /** @type {any} */\n                sarr\n              );\n              sarrAny.overlaps.add(arr.rangeName);\n              sarrAny.overlaps.add(range2.rangeName);\n            }\n          }\n        }\n      });\n    });\n    return range;\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleCandleStickBoxData(ser, i) {\n    let ohlc = { o: [], h: [], m: [], l: [], c: [] };\n    if (this.isFormat2DArray()) {\n      ohlc = this.handleCandleStickBoxDataFormat(\"array\", ser, i);\n    } else if (this.isFormatXY()) {\n      ohlc = this.handleCandleStickBoxDataFormat(\"xy\", ser, i);\n    }\n    this.w.candleData.seriesCandleO[i] = ohlc.o;\n    this.w.candleData.seriesCandleH[i] = ohlc.h;\n    this.w.candleData.seriesCandleM[i] = ohlc.m;\n    this.w.candleData.seriesCandleL[i] = ohlc.l;\n    this.w.candleData.seriesCandleC[i] = ohlc.c;\n    this.w.candleData.seriesBoxPoints[i] = ohlc.points || [];\n    return ohlc;\n  }\n  /**\n   * Parse a violin series. Each data point carries a precomputed density\n   * profile (the violin shape) and an array of raw observations (the jitter):\n   *\n   *   { x, y: { density: [[value, weight], ...], points: [v1, v2, ...] } }\n   *\n   * Array fallback form: [x, densityPairs, pointsArray].\n   *\n   * Density `weight` need not be normalized — Violin.js scales each violin by\n   * its own maxWeight. The representative scalar pushed into the main series\n   * (so generic code paths see a non-null y) is the density mode — the value\n   * carrying the greatest weight.\n   *\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleViolinData(ser, i) {\n    var _a, _b, _c, _d, _e, _f;\n    const w = this.w;\n    const data = ser[i].data;\n    const densityArr = [];\n    const pointsArr = [];\n    const minArr = [];\n    const maxArr = [];\n    const placeholders = [];\n    for (let j = 0; j < data.length; j++) {\n      const d = data[j];\n      const dens = (_c = (_b = (_a = d == null ? void 0 : d.y) == null ? void 0 : _a.density) != null ? _b : d == null ? void 0 : d[1]) != null ? _c : [];\n      const pts = (_f = (_e = (_d = d == null ? void 0 : d.y) == null ? void 0 : _d.points) != null ? _e : d == null ? void 0 : d[2]) != null ? _f : [];\n      const values = [];\n      const weights = [];\n      let maxWeight = 0;\n      let modeValue = null;\n      let minVal = Infinity;\n      let maxVal = -Infinity;\n      for (let k = 0; k < dens.length; k++) {\n        const v = Utils$1.parseNumber(dens[k][0]);\n        const wt = Utils$1.parseNumber(dens[k][1]);\n        if (v === null || wt === null) continue;\n        values.push(v);\n        weights.push(wt);\n        if (wt > maxWeight) {\n          maxWeight = wt;\n          modeValue = v;\n        }\n        if (v < minVal) minVal = v;\n        if (v > maxVal) maxVal = v;\n      }\n      const cleanPts = [];\n      for (let k = 0; k < pts.length; k++) {\n        const p = Utils$1.parseNumber(pts[k]);\n        if (p === null) continue;\n        cleanPts.push(p);\n        if (p < minVal) minVal = p;\n        if (p > maxVal) maxVal = p;\n      }\n      densityArr.push({ values, weights, maxWeight });\n      pointsArr.push(cleanPts);\n      minArr.push(minVal === Infinity ? 0 : minVal);\n      maxArr.push(maxVal === -Infinity ? 0 : maxVal);\n      placeholders.push(\n        modeValue !== null ? modeValue : cleanPts.length ? cleanPts[Math.floor(cleanPts.length / 2)] : 0\n      );\n    }\n    w.violinData.seriesViolinDensity[i] = densityArr;\n    w.violinData.seriesViolinPoints[i] = pointsArr;\n    w.violinData.seriesViolinMin[i] = minArr;\n    w.violinData.seriesViolinMax[i] = maxArr;\n    this.twoDSeries = placeholders;\n  }\n  /**\n   * @param {string} format\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleRangeDataFormat(format, ser, i) {\n    const rangeStart = [];\n    const rangeEnd = [];\n    const uniqueKeysMap = /* @__PURE__ */ new Map();\n    const uniqueKeys = [];\n    ser[i].data.forEach((item) => {\n      if (!uniqueKeysMap.has(item.x)) {\n        const keyObj = {\n          x: item.x,\n          overlaps: /* @__PURE__ */ new Set(),\n          y: []\n        };\n        uniqueKeysMap.set(item.x, keyObj);\n        uniqueKeys.push(keyObj);\n      }\n    });\n    if (format === \"array\") {\n      for (let j = 0; j < ser[i].data.length; j++) {\n        if (Array.isArray(ser[i].data[j])) {\n          rangeStart.push(ser[i].data[j][1][0]);\n          rangeEnd.push(ser[i].data[j][1][1]);\n        } else {\n          rangeStart.push(ser[i].data[j]);\n          rangeEnd.push(ser[i].data[j]);\n        }\n      }\n    } else if (format === \"xy\") {\n      for (let j = 0; j < ser[i].data.length; j++) {\n        const isDataPoint2D = Array.isArray(ser[i].data[j].y);\n        const id = Utils$1.randomId();\n        const x = ser[i].data[j].x;\n        const y = {\n          y1: isDataPoint2D ? ser[i].data[j].y[0] : ser[i].data[j].y,\n          y2: isDataPoint2D ? ser[i].data[j].y[1] : ser[i].data[j].y,\n          rangeName: id\n        };\n        ser[i].data[j].rangeName = id;\n        const keyObj = uniqueKeysMap.get(x);\n        if (keyObj) {\n          keyObj.y.push(y);\n        }\n        rangeStart.push(y.y1);\n        rangeEnd.push(y.y2);\n      }\n    }\n    return {\n      start: rangeStart,\n      end: rangeEnd,\n      rangeUniques: uniqueKeys\n    };\n  }\n  /**\n   * @param {string} format\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleCandleStickBoxDataFormat(format, ser, i) {\n    const w = this.w;\n    const isBoxPlot = w.config.chart.type === \"boxPlot\" || /** @type {Record<string,any>} */\n    w.config.series[i].type === \"boxPlot\";\n    const serO = [];\n    const serH = [];\n    const serM = [];\n    const serL = [];\n    const serC = [];\n    const serPoints = [];\n    const data = ser[i].data;\n    let getVals;\n    if (format === \"array\") {\n      const isFlat = isBoxPlot && data[0].length === 6 || !isBoxPlot && data[0].length === 5;\n      if (isFlat) {\n        getVals = (d) => d.slice(1);\n      } else {\n        getVals = (d) => Array.isArray(d[1]) ? d[1] : [];\n      }\n    } else {\n      getVals = (d) => Array.isArray(d.y) ? d.y : [];\n    }\n    for (let j = 0; j < data.length; j++) {\n      const vals = getVals(data[j]);\n      if (vals && vals.length >= 2) {\n        serO.push(vals[0]);\n        serH.push(vals[1]);\n        if (isBoxPlot) {\n          serM.push(vals[2]);\n          serL.push(vals[3]);\n          serC.push(vals[4]);\n        } else {\n          serL.push(vals[2]);\n          serC.push(vals[3]);\n        }\n      }\n      const pts = data[j] && /** @type {any} */\n      data[j].points;\n      serPoints.push(Array.isArray(pts) ? pts : []);\n    }\n    return {\n      o: serO,\n      h: serH,\n      m: serM,\n      l: serL,\n      c: serC,\n      points: serPoints\n    };\n  }\n  /**\n   * @param {any[]} ser\n   */\n  parseDataAxisCharts(ser) {\n    var _a, _b, _c, _d, _e, _f;\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    const dt = new DateTime(this.w);\n    const xlabels = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice();\n    this.w.axisFlags.isRangeBar = cnf.chart.type === \"rangeBar\" && gl.isBarHorizontal;\n    this.w.labelData.hasXaxisGroups = cnf.xaxis.type === \"category\" && cnf.xaxis.group.groups.length > 0;\n    if (this.w.labelData.hasXaxisGroups) {\n      this.w.labelData.groups = cnf.xaxis.group.groups;\n    }\n    ser.forEach((s, i) => {\n      if (s.name !== void 0) {\n        this.w.seriesData.seriesNames.push(s.name);\n      } else {\n        this.w.seriesData.seriesNames.push(\n          \"series-\" + parseInt(String(i + 1), 10)\n        );\n      }\n    });\n    this.coreUtils.setSeriesYAxisMappings();\n    const buckets = [];\n    const groups = [\n      ...new Set(cnf.series.map((s) => s.group))\n    ];\n    cnf.series.forEach((s, i) => {\n      const index = groups.indexOf(s.group);\n      if (!buckets[index]) buckets[index] = [];\n      buckets[index].push(this.w.seriesData.seriesNames[i]);\n    });\n    this.w.labelData.seriesGroups = buckets;\n    const handleDates = () => {\n      for (let j = 0; j < xlabels.length; j++) {\n        if (typeof xlabels[j] === \"string\") {\n          const isDate = dt.isValidDate(xlabels[j]);\n          if (isDate) {\n            this.twoDSeriesX.push(dt.parseDate(xlabels[j]));\n          } else {\n            throw new Error(\n              \"You have provided invalid Date format. Please provide a valid JavaScript Date\"\n            );\n          }\n        } else {\n          this.twoDSeriesX.push(xlabels[j]);\n        }\n      }\n    };\n    for (let i = 0; i < ser.length; i++) {\n      this.twoDSeries = [];\n      this.twoDSeriesX = [];\n      this.threeDSeries = [];\n      if (typeof ser[i].data === \"undefined\") {\n        console.error(\n          \"It is a possibility that you may have not included 'data' property in series.\"\n        );\n        return;\n      }\n      const dr = cnf.chart.dataReducer;\n      const rawStash = (_b = (_a = gl.dataReducerRawSeries) == null ? void 0 : _a[i]) == null ? void 0 : _b.data;\n      if ((dr == null ? void 0 : dr.enabled) && this.isMultiFormat() && Array.isArray(rawStash) && rawStash.length > ((_c = dr.threshold) != null ? _c : 500)) {\n        const targetPoints = (_d = dr.targetPoints) != null ? _d : 250;\n        const xmin = cnf.xaxis.min;\n        const xmax = cnf.xaxis.max;\n        const windowed = xmin == null && xmax == null ? rawStash : Data.sliceByXRange(rawStash, xmin, xmax);\n        let reduced = windowed;\n        if (windowed.length > targetPoints) {\n          const sampleY = !Array.isArray(windowed[0]) ? (_e = windowed[0]) == null ? void 0 : _e.y : (_f = windowed[0]) == null ? void 0 : _f[1];\n          if (Array.isArray(sampleY)) {\n            if (sampleY.length === 4) {\n              reduced = Data.ohlcAggregate(windowed, targetPoints);\n            } else if (sampleY.length === 2) {\n              reduced = Data.rangeAggregate(windowed, targetPoints);\n            }\n          } else {\n            reduced = Data.lttbDownsample(windowed, targetPoints);\n          }\n        }\n        ser[i] = __spreadProps(__spreadValues({}, ser[i]), { data: reduced });\n      }\n      if (cnf.chart.type === \"rangeBar\" || cnf.chart.type === \"rangeArea\" || ser[i].type === \"rangeBar\" || ser[i].type === \"rangeArea\") {\n        this.w.axisFlags.isRangeData = true;\n        this.handleRangeData(ser, i);\n      }\n      if (this.isMultiFormat()) {\n        if (this.isFormat2DArray()) {\n          this.handleFormat2DArray(ser, i);\n        } else if (this.isFormatXY()) {\n          this.handleFormatXY(ser, i);\n        }\n        if (cnf.chart.type === \"candlestick\" || ser[i].type === \"candlestick\" || cnf.chart.type === \"boxPlot\" || ser[i].type === \"boxPlot\") {\n          this.handleCandleStickBoxData(ser, i);\n        }\n        if (cnf.chart.type === \"violin\" || ser[i].type === \"violin\") {\n          this.handleViolinData(ser, i);\n        }\n        this.w.seriesData.series.push(this.twoDSeries);\n        this.w.labelData.labels.push(this.twoDSeriesX);\n        this.w.seriesData.seriesX.push(this.twoDSeriesX);\n        this.w.seriesData.seriesGoals = this.seriesGoals;\n        if (i === this.activeSeriesIndex && !this.fallbackToCategory) {\n          this.w.axisFlags.isXNumeric = true;\n        }\n      } else {\n        if (cnf.xaxis.type === \"datetime\") {\n          this.w.axisFlags.isXNumeric = true;\n          handleDates();\n          this.w.seriesData.seriesX.push(this.twoDSeriesX);\n        } else if (cnf.xaxis.type === \"numeric\") {\n          this.w.axisFlags.isXNumeric = true;\n          if (xlabels.length > 0) {\n            this.twoDSeriesX = xlabels;\n            this.w.seriesData.seriesX.push(this.twoDSeriesX);\n          }\n        }\n        this.w.labelData.labels.push(this.twoDSeriesX);\n        const singleArray = ser[i].data.map(\n          (d) => Utils$1.parseNumber(d)\n        );\n        this.w.seriesData.series.push(singleArray);\n      }\n      this.w.seriesData.seriesZ.push(this.threeDSeries);\n      if (ser[i].color !== void 0) {\n        this.w.seriesData.seriesColors.push(ser[i].color);\n      } else {\n        this.w.seriesData.seriesColors.push(\n          /** @type {any} */\n          void 0\n        );\n      }\n    }\n    return this.w;\n  }\n  /**\n   * @param {any[]} ser\n   */\n  parseDataNonAxisCharts(ser) {\n    const cnf = this.w.config;\n    const hasOldFormat = Array.isArray(ser) && ser.every((s) => typeof s === \"number\") && cnf.labels.length > 0;\n    const hasNewFormat = Array.isArray(ser) && ser.some(\n      (s) => s && typeof s === \"object\" && s.data || s && typeof s === \"object\" && s.parsing\n    );\n    if (hasOldFormat && hasNewFormat) {\n      console.warn(\n        \"ApexCharts: Both old format (numeric series + labels) and new format (series objects with data/parsing) detected. Using old format for backward compatibility.\"\n      );\n    }\n    if (hasOldFormat) {\n      this.w.seriesData.series = /** @type {any} */\n      ser.slice();\n      this.w.seriesData.seriesNames = cnf.labels.slice();\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        if (this.w.seriesData.seriesNames[i] === void 0) {\n          this.w.seriesData.seriesNames.push(\"series-\" + (i + 1));\n        }\n      }\n      return this.w;\n    }\n    if (Array.isArray(ser) && ser.every((s) => typeof s === \"number\")) {\n      this.w.seriesData.series = /** @type {any} */\n      ser.slice();\n      this.w.seriesData.seriesNames = [];\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        this.w.seriesData.seriesNames.push(cnf.labels[i] || `series-${i + 1}`);\n      }\n      return this.w;\n    }\n    const processedData = this.extractPieDataFromSeries(ser);\n    this.w.seriesData.series = processedData.values;\n    this.w.seriesData.seriesNames = processedData.labels;\n    if (cnf.chart.type === \"radialBar\") {\n      this.w.seriesData.series = this.w.seriesData.series.map((val) => {\n        const numVal = Utils$1.parseNumber(val);\n        if (numVal > 100) {\n          console.warn(\n            `ApexCharts: RadialBar value ${numVal} > 100, consider using percentage values (0-100)`\n          );\n        }\n        return numVal;\n      });\n    }\n    for (let i = 0; i < this.w.seriesData.series.length; i++) {\n      if (this.w.seriesData.seriesNames[i] === void 0) {\n        this.w.seriesData.seriesNames.push(\"series-\" + (i + 1));\n      }\n    }\n    return this.w;\n  }\n  /**\n   * Reset parsing flags to allow re-parsing of data during updates\n   */\n  resetParsingFlags() {\n    const w = this.w;\n    w.axisFlags.dataWasParsed = false;\n    w.globals.originalSeries = null;\n    if (w.config.series) {\n      w.config.series.forEach((serie) => {\n        if (\n          /** @type {any} */\n          serie.__apexParsed\n        ) {\n          delete /** @type {any} */\n          serie.__apexParsed;\n        }\n      });\n    }\n  }\n  /**\n   * @param {any[]} ser\n   */\n  extractPieDataFromSeries(ser) {\n    const values = [];\n    const labels = [];\n    if (!Array.isArray(ser)) {\n      console.warn(\"ApexCharts: Expected array for series data\");\n      return { values: [], labels: [] };\n    }\n    if (ser.length === 0) {\n      console.warn(\"ApexCharts: Empty series array\");\n      return { values: [], labels: [] };\n    }\n    const firstItem = ser[0];\n    if (typeof firstItem === \"object\" && firstItem !== null && firstItem.data) {\n      this.extractPieDataFromSeriesObjects(ser, values, labels);\n    } else {\n      console.warn(\n        \"ApexCharts: Unsupported series format for pie/donut/radialBar. Expected series objects with data property.\"\n      );\n      return { values: [], labels: [] };\n    }\n    return { values, labels };\n  }\n  // Extract data from series objects: [{ data: [...], parsing: {...} }]\n  /**\n   * @param {any[]} seriesArray\n   * @param {any[]} values\n   * @param {any[]} labels\n   */\n  extractPieDataFromSeriesObjects(seriesArray, values, labels) {\n    seriesArray.forEach((serie, serieIndex) => {\n      if (!serie.data || !Array.isArray(serie.data)) {\n        console.warn(`ApexCharts: Series ${serieIndex} has no valid data array`);\n        return;\n      }\n      serie.data.forEach((dataPoint) => {\n        if (typeof dataPoint === \"object\" && dataPoint !== null) {\n          if (dataPoint.x !== void 0 && dataPoint.y !== void 0) {\n            labels.push(String(dataPoint.x));\n            values.push(Utils$1.parseNumber(dataPoint.y));\n          } else {\n            console.warn(\n              \"ApexCharts: Invalid data point format for pie chart. Expected {x, y} format:\",\n              dataPoint\n            );\n          }\n        } else {\n          console.warn(\n            \"ApexCharts: Expected object data point, got:\",\n            typeof dataPoint\n          );\n        }\n      });\n    });\n  }\n  /** User possibly set string categories in xaxis.categories or labels prop\n   * Or didn't set xaxis labels at all - in which case we manually do it.\n   * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }],\n   * this shouldn't be called\n   * @param {any[]} ser - the series which user passed to the config\n   */\n  handleExternalLabelsData(ser) {\n    const cnf = this.w.config;\n    if (cnf.xaxis.categories.length > 0) {\n      this.w.labelData.labels = cnf.xaxis.categories;\n    } else if (cnf.labels.length > 0) {\n      this.w.labelData.labels = cnf.labels.slice();\n    } else if (this.fallbackToCategory) {\n      this.w.labelData.labels = /** @type {string[]} */\n      /** @type {unknown} */\n      this.w.labelData.labels[0];\n      if (this.w.rangeData.seriesRange.length) {\n        this.w.rangeData.seriesRange.map((srt) => {\n          srt.forEach((sr) => {\n            if (this.w.labelData.labels.indexOf(sr.x) < 0 && sr.x) {\n              this.w.labelData.labels.push(sr.x);\n            }\n          });\n        });\n        const _labels = this.w.labelData.labels;\n        if (_labels.length > 0 && (typeof _labels[0] === \"number\" || typeof _labels[0] === \"string\")) {\n          this.w.labelData.labels = [...new Set(_labels)];\n        } else {\n          const _seen = /* @__PURE__ */ new Map();\n          for (const _label of _labels) {\n            const _key = JSON.stringify(_label);\n            if (!_seen.has(_key)) _seen.set(_key, _label);\n          }\n          this.w.labelData.labels = Array.from(_seen.values());\n        }\n      }\n      if (cnf.xaxis.convertedCatToNumeric) {\n        const defaults = new Defaults(cnf);\n        defaults.convertCatToNumericXaxis(cnf, this.w.seriesData.seriesX[0]);\n        this._generateExternalLabels(ser);\n      }\n    } else {\n      this._generateExternalLabels(ser);\n    }\n  }\n  /**\n   * @param {any[]} ser\n   */\n  _generateExternalLabels(ser) {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    let labelArr = [];\n    if (gl.axisCharts) {\n      if (this.w.seriesData.series.length > 0) {\n        if (this.isFormatXY()) {\n          const seriesDataFiltered = cnf.series.map(\n            (serie) => {\n              const seen = /* @__PURE__ */ new Map();\n              for (const point of serie.data) {\n                if (!seen.has(point.x)) seen.set(point.x, point);\n              }\n              return Array.from(seen.values());\n            }\n          );\n          const len = seriesDataFiltered.reduce(\n            (p, c, i, a) => a[p].length > c.length ? p : i,\n            0\n          );\n          for (let i = 0; i < seriesDataFiltered[len].length; i++) {\n            labelArr.push(i + 1);\n          }\n        } else {\n          for (let i = 0; i < this.w.seriesData.series[gl.maxValsInArrayIndex].length; i++) {\n            labelArr.push(i + 1);\n          }\n        }\n      }\n      this.w.seriesData.seriesX = [];\n      for (let i = 0; i < ser.length; i++) {\n        this.w.seriesData.seriesX.push(labelArr);\n      }\n      if (!this.w.globals.isBarHorizontal) {\n        this.w.axisFlags.isXNumeric = true;\n      }\n    }\n    if (labelArr.length === 0) {\n      labelArr = gl.axisCharts ? [] : (\n        /**\n         * @param {Record<string, any>} gls\n         * @param {number} glsi\n         */\n        this.w.seriesData.series.map((gls, glsi) => {\n          return glsi + 1;\n        })\n      );\n      for (let i = 0; i < ser.length; i++) {\n        this.w.seriesData.seriesX.push(labelArr);\n      }\n    }\n    this.w.labelData.labels = /** @type {string[]} */\n    /** @type {unknown} */\n    labelArr;\n    if (cnf.xaxis.convertedCatToNumeric) {\n      this.w.labelData.categoryLabels = labelArr.map((l) => {\n        return cnf.xaxis.labels.formatter(l);\n      });\n    }\n    this.w.axisFlags.noLabelsProvided = true;\n  }\n  /**\n   * @param {any[]} series\n   */\n  parseRawDataIfNeeded(series) {\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    const globalParsing = cnf.parsing;\n    if (this.w.axisFlags.dataWasParsed) {\n      return series;\n    }\n    if (!globalParsing && !series.some((s) => s.parsing)) {\n      return series;\n    }\n    const processedSeries = series.map((serie, index) => {\n      var _a, _b, _c;\n      if (!serie.data || !Array.isArray(serie.data) || serie.data.length === 0) {\n        return serie;\n      }\n      const effectiveParsing = {\n        x: ((_a = serie.parsing) == null ? void 0 : _a.x) || (globalParsing == null ? void 0 : globalParsing.x),\n        y: ((_b = serie.parsing) == null ? void 0 : _b.y) || (globalParsing == null ? void 0 : globalParsing.y),\n        z: ((_c = serie.parsing) == null ? void 0 : _c.z) || (globalParsing == null ? void 0 : globalParsing.z)\n      };\n      if (!effectiveParsing.x && !effectiveParsing.y) {\n        return serie;\n      }\n      const firstDataPoint = serie.data[0];\n      if (typeof firstDataPoint === \"object\" && firstDataPoint !== null && (Object.prototype.hasOwnProperty.call(firstDataPoint, \"x\") || Object.prototype.hasOwnProperty.call(firstDataPoint, \"y\")) || Array.isArray(firstDataPoint)) {\n        return serie;\n      }\n      if (!effectiveParsing.x || !effectiveParsing.y || Array.isArray(effectiveParsing.y) && effectiveParsing.y.length === 0) {\n        console.warn(\n          `ApexCharts: Series ${index} has parsing config but missing x or y field specification`\n        );\n        return serie;\n      }\n      const transformedData = serie.data.map(\n        (item, itemIndex) => {\n          if (typeof item !== \"object\" || item === null) {\n            console.warn(\n              `ApexCharts: Series ${index}, data point ${itemIndex} is not an object, skipping parsing`\n            );\n            return item;\n          }\n          const x = this.getNestedValue(item, effectiveParsing.x);\n          let y;\n          let z = void 0;\n          if (Array.isArray(effectiveParsing.y)) {\n            const yValues = effectiveParsing.y.map(\n              (fieldName) => this.getNestedValue(item, fieldName)\n            );\n            if (this.w.config.chart.type === \"bubble\") {\n              if (yValues.length < 2) {\n                console.warn(\n                  `ApexCharts: series[${index}] bubble chart requires parseData.y to have at least 2 fields (y and z). Got: ${JSON.stringify(effectiveParsing.y)}`\n                );\n              }\n              y = yValues[0];\n            } else {\n              y = yValues;\n            }\n          } else {\n            y = this.getNestedValue(item, effectiveParsing.y);\n          }\n          if (effectiveParsing.z) {\n            z = this.getNestedValue(item, effectiveParsing.z);\n          }\n          if (x === void 0) {\n            console.warn(\n              `ApexCharts: Series ${index}, data point ${itemIndex} missing field '${effectiveParsing.x}'`\n            );\n          }\n          if (y === void 0) {\n            console.warn(\n              `ApexCharts: Series ${index}, data point ${itemIndex} missing field '${effectiveParsing.y}'`\n            );\n          }\n          const result = { x, y, z: void 0 };\n          if (this.w.config.chart.type === \"bubble\" && Array.isArray(effectiveParsing.y) && effectiveParsing.y.length === 2) {\n            const zValue = this.getNestedValue(item, effectiveParsing.y[1]);\n            if (zValue !== void 0) {\n              result.z = zValue;\n            }\n          }\n          if (z !== void 0) {\n            result.z = z;\n          }\n          return result;\n        }\n      );\n      return __spreadProps(__spreadValues({}, serie), {\n        data: transformedData,\n        __apexParsed: true\n      });\n    });\n    this.w.axisFlags.dataWasParsed = true;\n    if (!gl.originalSeries) {\n      gl.originalSeries = Utils$1.clone(series);\n    }\n    return processedSeries;\n  }\n  /**\n   * Get nested object value using dot notation path\n   * @param {Object} obj - The object to search in\n   * @param {string} path - Dot notation path (e.g., 'user.profile.name')\n   * @returns {*} The value at the path, or undefined if not found\n   */\n  getNestedValue(obj, path) {\n    if (!obj || typeof obj !== \"object\" || !path) {\n      return void 0;\n    }\n    if (path.indexOf(\".\") === -1) {\n      return (\n        /** @type {any} */\n        obj[path]\n      );\n    }\n    const keys = path.split(\".\");\n    let current = obj;\n    for (let i = 0; i < keys.length; i++) {\n      if (current === null || current === void 0 || typeof current !== \"object\") {\n        return void 0;\n      }\n      current = /** @type {any} */\n      current[keys[i]];\n    }\n    return current;\n  }\n  /**\n   * Scatter strip-plot support. When `plotOptions.scatter.jitter.enabled` and a\n   * series carries compact `{ x: 'Category', y: [v1, v2, ...] }` data, expand\n   * each observation into its own `{ x: bandIndex, y }` point (so every dot is a\n   * first-class, hoverable marker) and frame the x-axis as evenly-spaced,\n   * labelled bands. The reference per-point form (numeric x + `xaxis.categories`)\n   * is reframed too, without expansion. Returns `ser` unchanged for non-scatter\n   * charts and for plain numeric/datetime data (continuous overplotting jitter\n   * is offset at render time instead).\n   *\n   * @param {any[]} ser\n   * @returns {any[]}\n   */\n  expandScatterJitterData(ser) {\n    var _a, _b;\n    const cnf = this.w.config;\n    const isScatter = cnf.chart.type === \"scatter\" || cnf.chart.type === \"bubble\";\n    const jt = (_b = (_a = cnf.plotOptions) == null ? void 0 : _a.scatter) == null ? void 0 : _b.jitter;\n    if (!isScatter || !jt || !jt.enabled || !Array.isArray(ser)) return ser;\n    const hasArrayY = ser.some(\n      (s) => Array.isArray(s == null ? void 0 : s.data) && s.data.some(\n        (d) => d && !Array.isArray(d) && Array.isArray(d.y)\n      )\n    );\n    if (!hasArrayY) {\n      if (cnf.xaxis.type !== \"datetime\" && Array.isArray(cnf.xaxis.categories) && cnf.xaxis.categories.length) {\n        this._applyBandAxis(cnf.xaxis.categories.slice());\n      }\n      return ser;\n    }\n    const bandLabels = [];\n    const bandIndex = /* @__PURE__ */ new Map();\n    ser.forEach((s) => {\n      if (!Array.isArray(s == null ? void 0 : s.data)) return;\n      s.data.forEach((d) => {\n        if (d && Array.isArray(d.y)) {\n          const key = String(d.x);\n          if (!bandIndex.has(key)) {\n            bandIndex.set(key, bandLabels.length);\n            bandLabels.push(d.x);\n          }\n        }\n      });\n    });\n    const maxPoints = jt.maxPoints || 5e3;\n    const expanded = ser.map((s) => {\n      if (!Array.isArray(s == null ? void 0 : s.data)) return s;\n      const out = [];\n      s.data.forEach((d) => {\n        if (d && Array.isArray(d.y)) {\n          const bi = bandIndex.get(String(d.x));\n          const ys = d.y;\n          const stride = ys.length > maxPoints ? Math.ceil(ys.length / maxPoints) : 1;\n          for (let k = 0; k < ys.length; k += stride) {\n            const yv = Utils$1.parseNumber(ys[k]);\n            if (yv === null) continue;\n            out.push({ x: bi, y: yv });\n          }\n        } else if (d && typeof d === \"object\" && !Array.isArray(d)) {\n          const key = String(d.x);\n          out.push({ x: bandIndex.has(key) ? bandIndex.get(key) : d.x, y: d.y });\n        } else {\n          out.push(d);\n        }\n      });\n      return __spreadProps(__spreadValues({}, s), { data: out });\n    });\n    this._applyBandAxis(bandLabels);\n    return expanded;\n  }\n  /**\n   * Frame the x-axis as N evenly-spaced bands (one per category) on a numeric\n   * scale. Bands sit at integer positions 0..N-1; the range is padded by a full\n   * band on each side (min -1, max N) so jittered dots never clip. Crucially the\n   * range bounds and tick count are integers, so the ticks land exactly on the\n   * band centers regardless of how the numeric scale \"nices\" the step (e.g. the\n   * small-range reduction in Scales._adjustTicksForSmallRange triggered by a\n   * y-axis formatter). Only fills in options the user hasn't set, so explicit\n   * min/max/tickAmount/formatter still win.\n   *\n   * @param {any[]} bandLabels\n   */\n  _applyBandAxis(bandLabels) {\n    const xa = this.w.config.xaxis;\n    const n = bandLabels.length;\n    if (!n) return;\n    const owned = (\n      /** @type {Record<string, boolean>} */\n      xa._scatterBand = xa._scatterBand || {}\n    );\n    xa.type = \"numeric\";\n    if (xa.min == null || owned.min) {\n      xa.min = -1;\n      owned.min = true;\n    }\n    if (xa.max == null || owned.max) {\n      xa.max = n;\n      owned.max = true;\n    }\n    if (xa.tickAmount == null || xa.tickAmount === \"dataPoints\" || owned.tick) {\n      xa.tickAmount = n + 1;\n      owned.tick = true;\n    }\n    xa.labels = xa.labels || {};\n    const existing = (\n      /** @type {any} */\n      xa.labels.formatter\n    );\n    if (typeof existing !== \"function\" || existing._scatterBand) {\n      const fmt = (\n        /** @type {any} */\n        ((val) => {\n          const r = Math.round(val);\n          return Math.abs(val - r) < 1e-6 && bandLabels[r] !== void 0 ? bandLabels[r] : \"\";\n        })\n      );\n      fmt._scatterBand = true;\n      xa.labels.formatter = fmt;\n    }\n  }\n  // Segregate user provided data into appropriate vars\n  /**\n   * @param {any[]} ser\n   */\n  parseData(ser) {\n    var _a, _b, _c, _d, _e, _f;\n    const w = this.w;\n    const cnf = w.config;\n    const gl = w.globals;\n    ser = this.parseRawDataIfNeeded(ser);\n    ser = this.expandScatterJitterData(ser);\n    if (((_a = cnf.chart.dataReducer) == null ? void 0 : _a.enabled) && gl.axisCharts && !gl.dataReducerRawSeries) {\n      gl.dataReducerRawSeries = ser.map((s) => ({\n        data: Array.isArray(s == null ? void 0 : s.data) ? s.data.slice() : s == null ? void 0 : s.data\n      }));\n      let rawMinX = Infinity;\n      let rawMaxX = -Infinity;\n      for (const s of ser) {\n        const d = s == null ? void 0 : s.data;\n        if (!Array.isArray(d) || d.length === 0) continue;\n        const isXY = !Array.isArray(d[0]);\n        const firstX = isXY ? (_b = d[0]) == null ? void 0 : _b.x : (_c = d[0]) == null ? void 0 : _c[0];\n        const lastX = isXY ? (_d = d[d.length - 1]) == null ? void 0 : _d.x : (_e = d[d.length - 1]) == null ? void 0 : _e[0];\n        if (typeof firstX === \"number\") rawMinX = Math.min(rawMinX, firstX);\n        if (typeof lastX === \"number\") rawMaxX = Math.max(rawMaxX, lastX);\n      }\n      if (rawMinX !== Infinity) {\n        gl.dataReducerRawMinX = rawMinX;\n        gl.dataReducerRawMaxX = rawMaxX;\n      }\n    }\n    cnf.series = ser;\n    if (gl.dataReducerRawSeries && ((_f = cnf.chart.dataReducer) == null ? void 0 : _f.enabled)) {\n      const stash = gl.dataReducerRawSeries;\n      gl.initialSeries = ser.map((s, i) => {\n        var _a2, _b2, _c2;\n        return __spreadProps(__spreadValues({}, s), {\n          data: (_c2 = (_b2 = (_a2 = stash[i]) == null ? void 0 : _a2.data) == null ? void 0 : _b2.slice()) != null ? _c2 : s.data\n        });\n      });\n    } else {\n      gl.initialSeries = Utils$1.clone(ser);\n    }\n    this.excludeCollapsedSeriesInYAxis();\n    this.fallbackToCategory = false;\n    this.resetGlobals();\n    this.isMultipleY();\n    if (gl.axisCharts) {\n      this.parseDataAxisCharts(ser);\n      this.coreUtils.getLargestSeries();\n    } else {\n      this.parseDataNonAxisCharts(ser);\n    }\n    if (cnf.chart.stacked) {\n      const series = new Series(this.w);\n      this.w.seriesData.series = series.setNullSeriesToZeroValues(\n        this.w.seriesData.series\n      );\n    }\n    this.coreUtils.getSeriesTotals();\n    if (gl.axisCharts) {\n      this.w.seriesData.stackedSeriesTotals = this.coreUtils.getStackedSeriesTotals();\n      this.w.seriesData.stackedSeriesTotalsByGroups = this.coreUtils.getStackedSeriesTotalsByGroups();\n    }\n    this.coreUtils.getPercentSeries();\n    if (!this.w.axisFlags.dataFormatXNumeric && (!this.w.axisFlags.isXNumeric || cnf.xaxis.type === \"numeric\" && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) {\n      this.handleExternalLabelsData(ser);\n    }\n    const catLabels = this.coreUtils.getCategoryLabels(this.w.labelData.labels);\n    for (let l = 0; l < catLabels.length; l++) {\n      if (Array.isArray(catLabels[l])) {\n        this.w.axisFlags.isMultiLineX = true;\n        break;\n      }\n    }\n    return {\n      // w.seriesData (future slice)\n      seriesData: {\n        series: this.w.seriesData.series,\n        seriesNames: this.w.seriesData.seriesNames,\n        seriesX: this.w.seriesData.seriesX,\n        seriesZ: this.w.seriesData.seriesZ,\n        seriesColors: this.w.seriesData.seriesColors,\n        seriesGoals: this.w.seriesData.seriesGoals,\n        initialSeries: gl.initialSeries,\n        originalSeries: gl.originalSeries,\n        stackedSeriesTotals: this.w.seriesData.stackedSeriesTotals,\n        stackedSeriesTotalsByGroups: this.w.seriesData.stackedSeriesTotalsByGroups,\n        noLabelsProvided: this.w.axisFlags.noLabelsProvided\n      },\n      // w.rangeData (future slice)\n      rangeData: {\n        seriesRangeStart: this.w.rangeData.seriesRangeStart,\n        seriesRangeEnd: this.w.rangeData.seriesRangeEnd,\n        seriesRange: this.w.rangeData.seriesRange\n      },\n      // w.candleData (future slice)\n      candleData: {\n        seriesCandleO: this.w.candleData.seriesCandleO,\n        seriesCandleH: this.w.candleData.seriesCandleH,\n        seriesCandleM: this.w.candleData.seriesCandleM,\n        seriesCandleL: this.w.candleData.seriesCandleL,\n        seriesCandleC: this.w.candleData.seriesCandleC,\n        seriesBoxPoints: this.w.candleData.seriesBoxPoints\n      },\n      // w.labelData (future slice)\n      labelData: {\n        labels: this.w.labelData.labels,\n        categoryLabels: this.w.labelData.categoryLabels\n      },\n      // w.axisFlags (future slice)\n      axisFlags: {\n        isXNumeric: this.w.axisFlags.isXNumeric,\n        dataFormatXNumeric: this.w.axisFlags.dataFormatXNumeric,\n        isDataXYZ: this.w.axisFlags.isDataXYZ,\n        isRangeData: this.w.axisFlags.isRangeData,\n        isRangeBar: this.w.axisFlags.isRangeBar,\n        isMultiLineX: this.w.axisFlags.isMultiLineX,\n        dataWasParsed: this.w.axisFlags.dataWasParsed,\n        hasXaxisGroups: this.w.labelData.hasXaxisGroups,\n        groups: this.w.labelData.groups,\n        seriesGroups: this.w.labelData.seriesGroups\n      }\n    };\n  }\n  /**\n   * Slice a sorted-by-x series to a [xmin, xmax] window using binary search.\n   *\n   * Pads with one extra point on each side so lines extend cleanly to the\n   * chart edges. Either bound may be null/undefined to disable that side.\n   *\n   * @param {any[]} data - Series data in [{x,y}] or [[x,y]] format, sorted by x.\n   * @param {number|null|undefined} xmin\n   * @param {number|null|undefined} xmax\n   * @returns {any[]} Sliced array (new array, never the input reference).\n   */\n  static sliceByXRange(data, xmin, xmax) {\n    const len = data.length;\n    if (len === 0) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    let lo = 0;\n    if (xmin != null) {\n      let l = 0;\n      let r = len - 1;\n      while (l <= r) {\n        const m = l + r >> 1;\n        if (getX(data[m]) < xmin) l = m + 1;\n        else r = m - 1;\n      }\n      lo = Math.max(0, l - 1);\n    }\n    let hi = len;\n    if (xmax != null) {\n      let l = 0;\n      let r = len - 1;\n      while (l <= r) {\n        const m = l + r >> 1;\n        if (getX(data[m]) > xmax) r = m - 1;\n        else l = m + 1;\n      }\n      hi = Math.min(len, l + 1);\n    }\n    return lo === 0 && hi === len ? data.slice() : data.slice(lo, hi);\n  }\n  /**\n   * Largest-Triangle-Three-Bucket (LTTB) downsampling.\n   *\n   * Reduces `data` to `targetPoints` points while preserving the visual shape\n   * of the series as perceived by the human eye.\n   *\n   * @param {any[]} data   - Raw series data in [{x,y}] or [[x,y]] format.\n   * @param {number} targetPoints - Desired output length (>= 3).\n   * @returns {any[]} Downsampled array in the same format as the input.\n   */\n  static lttbDownsample(data, targetPoints) {\n    const len = data.length;\n    if (targetPoints >= len || targetPoints < 3) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    const getY = isXY ? (p) => p.y : (p) => p[1];\n    const sampled = [];\n    sampled.push(data[0]);\n    const bucketSize = (len - 2) / (targetPoints - 2);\n    let a = 0;\n    for (let i = 0; i < targetPoints - 2; i++) {\n      const avgRangeStart = Math.floor((i + 1) * bucketSize) + 1;\n      const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketSize) + 1, len);\n      let avgX = 0;\n      let avgY = 0;\n      const avgRangeLen = avgRangeEnd - avgRangeStart;\n      for (let j = avgRangeStart; j < avgRangeEnd; j++) {\n        avgX += getX(data[j]);\n        avgY += getY(data[j]);\n      }\n      avgX /= avgRangeLen;\n      avgY /= avgRangeLen;\n      const rangeStart = Math.floor(i * bucketSize) + 1;\n      const rangeEnd = Math.min(Math.floor((i + 1) * bucketSize) + 1, len);\n      const pointAX = getX(data[a]);\n      const pointAY = getY(data[a]);\n      let maxArea = -1;\n      let maxAreaIdx = rangeStart;\n      for (let j = rangeStart; j < rangeEnd; j++) {\n        const area = Math.abs(\n          (pointAX - avgX) * (getY(data[j]) - pointAY) - (pointAX - getX(data[j])) * (avgY - pointAY)\n        ) * 0.5;\n        if (area > maxArea) {\n          maxArea = area;\n          maxAreaIdx = j;\n        }\n      }\n      sampled.push(data[maxAreaIdx]);\n      a = maxAreaIdx;\n    }\n    sampled.push(data[len - 1]);\n    return sampled;\n  }\n  /**\n   * OHLC-aware bucket aggregation for candlestick / OHLC series.\n   *\n   * Each point's y is a 4-tuple `[open, high, low, close]`. LTTB is unusable\n   * here — it treats y as a scalar, so the triangle-area math degenerates and\n   * silently discards the high/low extremes that *define* a candle. Instead we\n   * split the series into `targetPoints` contiguous buckets and roll each up\n   * into a single candle: open = first bucket open, close = last bucket close,\n   * high = max of highs, low = min of lows. The x is the first point's x in the\n   * bucket. Output keeps the input's format ([{x,y}] or [[x,y]]).\n   *\n   * @param {any[]} data         - Raw OHLC series in [{x,y:[o,h,l,c]}] or [[x,[o,h,l,c]]] format.\n   * @param {number} targetPoints - Desired output length (>= 1).\n   * @returns {any[]} Aggregated array in the same format as the input.\n   */\n  static ohlcAggregate(data, targetPoints) {\n    const len = data.length;\n    if (targetPoints >= len || targetPoints < 1) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    const getY = isXY ? (p) => p.y : (p) => p[1];\n    const make = isXY ? (x, y) => ({ x, y }) : (x, y) => [x, y];\n    const out = [];\n    const bucketSize = len / targetPoints;\n    for (let i = 0; i < targetPoints; i++) {\n      const start = Math.floor(i * bucketSize);\n      const end = i === targetPoints - 1 ? len : Math.floor((i + 1) * bucketSize);\n      if (end <= start) continue;\n      const firstY = getY(data[start]);\n      const open = firstY[0];\n      let high = firstY[1];\n      let low = firstY[2];\n      let close = firstY[3];\n      for (let j = start + 1; j < end; j++) {\n        const y = getY(data[j]);\n        if (y[1] > high) high = y[1];\n        if (y[2] < low) low = y[2];\n        close = y[3];\n      }\n      out.push(make(getX(data[start]), [open, high, low, close]));\n    }\n    return out;\n  }\n  /**\n   * Bucket-aggregate 2-tuple range data (`y: [low, high]`, rangeArea/rangeBar)\n   * into `targetPoints` points, the range analog of {@link ohlcAggregate}. Each\n   * bucket emits `[min low, max high]` so the band's vertical extent is never\n   * understated by downsampling (LTTB, built for scalar y, would drop these\n   * extremes). Order-agnostic: the min/max scan both tuple slots, so it is\n   * correct whether a point is stored `[low, high]` or `[high, low]`.\n   *\n   * Null bounds (e.g. an indicator's warm-up period) are ignored, not treated\n   * as 0 — `Math.min(null, x)` would coerce to 0 and pin the band to the\n   * baseline. A bucket with no finite bounds emits `[null, null]` so it renders\n   * as a gap, matching the un-downsampled series.\n   * @param {any[]} data\n   * @param {number} targetPoints\n   * @returns {any[]}\n   */\n  static rangeAggregate(data, targetPoints) {\n    const len = data.length;\n    if (targetPoints >= len || targetPoints < 1) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    const getY = isXY ? (p) => p.y : (p) => p[1];\n    const make = isXY ? (x, y) => ({ x, y }) : (x, y) => [x, y];\n    const out = [];\n    const bucketSize = len / targetPoints;\n    for (let i = 0; i < targetPoints; i++) {\n      const start = Math.floor(i * bucketSize);\n      const end = i === targetPoints - 1 ? len : Math.floor((i + 1) * bucketSize);\n      if (end <= start) continue;\n      let low = Infinity;\n      let high = -Infinity;\n      for (let j = start; j < end; j++) {\n        const y = getY(data[j]);\n        if (y == null) continue;\n        for (let k = 0; k < 2; k++) {\n          const v = y[k];\n          if (v == null || !isFinite(v)) continue;\n          if (v < low) low = v;\n          if (v > high) high = v;\n        }\n      }\n      out.push(\n        make(getX(data[start]), low === Infinity ? [null, null] : [low, high])\n      );\n    }\n    return out;\n  }\n  excludeCollapsedSeriesInYAxis() {\n    const w = this.w;\n    const yAxisIndexes = [];\n    w.globals.seriesYAxisMap.forEach((yAxisArr, yi) => {\n      let collapsedCount = 0;\n      yAxisArr.forEach((seriesIndex) => {\n        if (w.globals.collapsedSeriesIndices.indexOf(seriesIndex) !== -1) {\n          collapsedCount++;\n        }\n      });\n      if (collapsedCount > 0 && collapsedCount == yAxisArr.length) {\n        yAxisIndexes.push(yi);\n      }\n    });\n    w.globals.ignoreYAxisIndexes = yAxisIndexes.map((x) => x);\n  }\n}\nclass UpdateHelpers {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * private method to update Options.\n   *\n   * @param {Record<string, any>} options - A new config object can be passed which will be merged with the existing config object\n   * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there\n   * @param {boolean} animate - should animate or not on updating Options\n   * @param {boolean} overwriteInitialConfig - should update the initial config or not\n   */\n  _updateOptions(options2, redraw = false, animate = true, updateSyncedCharts = true, overwriteInitialConfig = false) {\n    return new Promise((resolve) => {\n      let charts = [this.ctx];\n      if (updateSyncedCharts) {\n        charts = this.ctx.getSyncedCharts();\n      }\n      if (this.w.globals.isExecCalled) {\n        charts = [this.ctx];\n        this.w.globals.isExecCalled = false;\n      }\n      charts.forEach((ch, chartIndex) => {\n        var _a, _b;\n        const w = ch.w;\n        w.globals.shouldAnimate = animate;\n        if (!redraw) {\n          w.globals.resized = true;\n          w.globals.dataChanged = true;\n          if (animate) {\n            ch.series.getPreviousPaths();\n          }\n        }\n        if (animate && options2 && typeof options2 === \"object\") {\n          const newType = (_a = options2 == null ? void 0 : options2.chart) == null ? void 0 : _a.type;\n          const fromType = w.config.chart.requestedType || w.config.chart.type;\n          if (newType && newType !== fromType) {\n            (_b = ch.morphTypeChange) == null ? void 0 : _b.captureBeforeDestroy({\n              fromType,\n              toType: newType,\n              newSeries: options2.series || w.config.series\n            });\n          }\n        }\n        if (options2 && typeof options2 === \"object\") {\n          ch.config = new Config(options2);\n          const incomingType = options2.chart && options2.chart.type;\n          const isAliasRequest = incomingType === \"funnel\" || incomingType === \"pyramid\" || incomingType === \"gauge\";\n          const wasAlias = !!w.config.chart.requestedType;\n          if (incomingType && !isAliasRequest && wasAlias) {\n            options2.chart = options2.chart || {};\n            options2.chart.requestedType = incomingType;\n            const prev = w.config.chart.requestedType;\n            if (prev === \"funnel\" || prev === \"pyramid\") {\n              options2.plotOptions = options2.plotOptions || {};\n              options2.plotOptions.bar = options2.plotOptions.bar || {};\n              if (options2.plotOptions.bar.isFunnel === void 0) {\n                options2.plotOptions.bar.isFunnel = false;\n              }\n              if (options2.plotOptions.bar.isPyramid === void 0) {\n                options2.plotOptions.bar.isPyramid = false;\n              }\n            }\n          }\n          ch.config.normalizeAliasedChartType(options2);\n          options2 = CoreUtils.extendArrayProps(ch.config, options2, w);\n          if (ch.w.globals.chartID !== this.w.globals.chartID) {\n            delete options2.series;\n          }\n          w.config = Utils$1.extend(w.config, options2);\n          if (overwriteInitialConfig) {\n            w.globals.lastXAxis = options2.xaxis ? Utils$1.clone(options2.xaxis) : [];\n            w.globals.lastYAxis = options2.yaxis ? Utils$1.clone(options2.yaxis) : [];\n            w.globals.initialConfig = Utils$1.extend({}, w.config);\n            w.globals.initialSeries = Utils$1.clone(w.config.series);\n            if (options2.series) {\n              for (let i = 0; i < w.globals.collapsedSeriesIndices.length; i++) {\n                const series = w.config.series[w.globals.collapsedSeriesIndices[i]];\n                w.globals.collapsedSeries[i].data = w.globals.axisCharts ? (\n                  /** @type {any} */\n                  series.data.slice()\n                ) : series;\n              }\n              for (let i = 0; i < w.globals.ancillaryCollapsedSeriesIndices.length; i++) {\n                const series = w.config.series[w.globals.ancillaryCollapsedSeriesIndices[i]];\n                w.globals.ancillaryCollapsedSeries[i].data = w.globals.axisCharts ? (\n                  /** @type {any} */\n                  series.data.slice()\n                ) : series;\n              }\n              ch.series.emptyCollapsedSeries(w.config.series);\n            }\n          }\n        }\n        return ch.update(options2).then(() => {\n          if (chartIndex === charts.length - 1) {\n            resolve(ch);\n          }\n        });\n      });\n    });\n  }\n  /**\n   * Private method to update Series.\n   *\n   * @param {any[]} newSeries - New series which will override the existing\n   * @param {boolean} animate\n   */\n  _updateSeries(newSeries, animate, overwriteInitialSeries = false) {\n    return new Promise((resolve) => {\n      const w = this.w;\n      w.globals.shouldAnimate = animate;\n      w.globals.dataChanged = true;\n      PerformanceCache.invalidateSelectors(w);\n      if (animate) {\n        this.ctx.series.getPreviousPaths();\n      }\n      const prevSeriesCount = w.config.series.length;\n      w.globals.dataReducerRawSeries = null;\n      this.ctx.data.resetParsingFlags();\n      const parsedState = this.ctx.data.parseData(newSeries);\n      this.ctx._writeParsedSeriesData(parsedState.seriesData);\n      this.ctx._writeParsedRangeData(parsedState.rangeData);\n      this.ctx._writeParsedCandleData(parsedState.candleData);\n      this.ctx._writeParsedLabelData(parsedState.labelData);\n      this.ctx._writeParsedAxisFlags(parsedState.axisFlags);\n      if (overwriteInitialSeries) {\n        if (w.globals.initialConfig) {\n          w.globals.initialConfig.series = Utils$1.clone(w.config.series);\n        }\n        w.globals.initialSeries = Utils$1.clone(w.config.series);\n      }\n      if (this._canUseFastPath(newSeries, prevSeriesCount, w)) {\n        return this.ctx.fastUpdate(animate).then(() => {\n          resolve(this.ctx);\n        });\n      }\n      return this.ctx.update().then(() => {\n        resolve(this.ctx);\n      });\n    });\n  }\n  /**\n   * Returns true if the data-only fast path can be used for this update.\n   * Fast path skips rebuilding grid, axes, legend, annotations, and tooltip DOM.\n   *\n   * Requirements:\n   * - Chart has been fully rendered (DOM exists)\n   * - Axis chart (non-axis charts like pie always need full rebuild due to radial layout)\n   * - Series count unchanged (grid column/row counts depend on it)\n   * - No series currently collapsing (collapsed series changes visible data range)\n   * - Not a combo chart (combo charts mix types and need coordinated axis recalc)\n   * - Not currently zoomed (zoomed charts have altered x-labels that need recalculation)\n   * @param {any[]} newSeries\n   * @param {number} prevSeriesCount\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  _canUseFastPath(newSeries, prevSeriesCount, w) {\n    if (!w.dom.elGraphical) return false;\n    if (!w.globals.axisCharts) return false;\n    if (newSeries.length !== prevSeriesCount) return false;\n    if (w.globals.collapsedSeries.length > 0) return false;\n    if (w.globals.ancillaryCollapsedSeries.length > 0) return false;\n    if (w.globals.risingSeries.length > 0) return false;\n    if (w.globals.comboCharts) return false;\n    if (w.interact.zoomed) return false;\n    return true;\n  }\n  /**\n   * @param {any} s\n   * @param {number} i\n   */\n  _extendSeries(s, i) {\n    const w = this.w;\n    const ser = w.config.series[i];\n    return __spreadProps(__spreadValues(\n      {},\n      /** @type {Record<string,any>} */\n      w.config.series[i]\n    ), {\n      name: s.name ? s.name : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.name\n      ),\n      color: s.color ? s.color : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.color\n      ),\n      type: s.type ? s.type : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.type\n      ),\n      group: s.group ? s.group : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.group\n      ),\n      hidden: typeof s.hidden !== \"undefined\" ? s.hidden : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.hidden\n      ),\n      data: s.data ? s.data : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.data\n      ),\n      zIndex: typeof s.zIndex !== \"undefined\" ? s.zIndex : i\n    });\n  }\n  /**\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   */\n  toggleDataPointSelection(seriesIndex, dataPointIndex) {\n    const w = this.w;\n    let elPath = null;\n    const parent = `.apexcharts-series[data\\\\:realIndex='${seriesIndex}']`;\n    if (w.globals.axisCharts) {\n      elPath = w.dom.Paper.findOne(\n        `${parent} path[j='${dataPointIndex}'], ${parent} circle[j='${dataPointIndex}'], ${parent} rect[j='${dataPointIndex}']`\n      );\n    } else {\n      if (typeof dataPointIndex === \"undefined\") {\n        elPath = w.dom.Paper.findOne(`${parent} path[j='${seriesIndex}']`);\n        if (w.config.chart.type === \"pie\" || w.config.chart.type === \"polarArea\" || w.config.chart.type === \"donut\") {\n          this.ctx.pie.pieClicked(seriesIndex);\n        }\n      }\n    }\n    if (elPath) {\n      const graphics = new Graphics(this.w);\n      graphics.pathMouseDown(\n        elPath,\n        /** @type {any} */\n        null\n      );\n    } else {\n      console.warn(\"toggleDataPointSelection: Element not found\");\n      return null;\n    }\n    return elPath.node ? elPath.node : null;\n  }\n  /**\n   * @param {Record<string, any>} options\n   */\n  forceXAxisUpdate(options2) {\n    const w = this.w;\n    const minmax = [\"min\", \"max\"];\n    minmax.forEach((a) => {\n      if (typeof options2.xaxis[a] !== \"undefined\") {\n        w.config.xaxis[a] = options2.xaxis[a];\n        w.globals.lastXAxis[a] = options2.xaxis[a];\n      }\n    });\n    if (options2.xaxis.categories && options2.xaxis.categories.length) {\n      w.config.xaxis.categories = options2.xaxis.categories;\n    }\n    if (w.config.xaxis.convertedCatToNumeric) {\n      const defaults = new Defaults(options2);\n      options2 = defaults.convertCatToNumericXaxis(options2, this.ctx);\n    }\n    return options2;\n  }\n  /**\n   * @param {Record<string, any>} options\n   */\n  forceYAxisUpdate(options2) {\n    if (options2.chart && options2.chart.stacked && options2.chart.stackType === \"100%\") {\n      if (Array.isArray(options2.yaxis)) {\n        options2.yaxis.forEach(\n          (yaxe, index) => {\n            options2.yaxis[index].min = 0;\n            options2.yaxis[index].max = 100;\n          }\n        );\n      } else {\n        options2.yaxis.min = 0;\n        options2.yaxis.max = 100;\n      }\n    }\n    return options2;\n  }\n  /**\n   * This function reverts the yaxis and xaxis min/max values to what it was when the chart was defined.\n   * This function fixes an important bug where a user might load a new series after zooming in/out of previous series which resulted in wrong min/max\n   * Also, this should never be called internally on zoom/pan - the reset should only happen when user calls the updateSeries() function externally\n   * The function also accepts an object {xaxis, yaxis} which when present is set as the new xaxis/yaxis\n   * @param {Record<string, any>} opts\n   */\n  revertDefaultAxisMinMax(opts) {\n    const w = this.w;\n    let xaxis = w.globals.lastXAxis;\n    let yaxis = w.globals.lastYAxis;\n    if (opts && opts.xaxis) {\n      xaxis = opts.xaxis;\n    }\n    if (opts && opts.yaxis) {\n      yaxis = opts.yaxis;\n    }\n    const _xaxis = (\n      /** @type {any} */\n      xaxis\n    );\n    w.config.xaxis.min = _xaxis.min;\n    w.config.xaxis.max = _xaxis.max;\n    const getLastYAxis = (index) => {\n      if (typeof yaxis[index] !== \"undefined\") {\n        const _y = (\n          /** @type {any} */\n          yaxis[index]\n        );\n        w.config.yaxis[index].min = _y.min;\n        w.config.yaxis[index].max = _y.max;\n      }\n    };\n    w.config.yaxis.map((yaxe, index) => {\n      if (w.interact.zoomed) {\n        getLastYAxis(index);\n      } else {\n        if (typeof yaxis[index] !== \"undefined\") {\n          getLastYAxis(index);\n        } else {\n          if (typeof this.ctx.opts.yaxis[index] !== \"undefined\") {\n            yaxe.min = this.ctx.opts.yaxis[index].min;\n            yaxe.max = this.ctx.opts.yaxis[index].max;\n          }\n        }\n      }\n    });\n  }\n}\nclass Utils2 {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n  }\n  /**\n   ** When hovering over series, you need to capture which series is being hovered on.\n   ** This function will return both capturedseries index as well as inner index of that series\n   * @memberof Utils\n   * @param {{ hoverArea: any, elGrid: any, clientX: any, clientY: any, context?: any }} opts\n   */\n  getNearestValues({ hoverArea, elGrid, clientX, clientY }) {\n    var _a, _b;\n    const w = this.w;\n    const seriesBound = elGrid.getBoundingClientRect();\n    const hoverWidth = seriesBound.width;\n    const hoverHeight = seriesBound.height;\n    let xDivisor = hoverWidth / (w.globals.dataPoints - 1);\n    const yDivisor = hoverHeight / w.globals.dataPoints;\n    const hasBars = this.hasBars();\n    if ((w.globals.comboCharts || hasBars) && !w.config.xaxis.convertedCatToNumeric) {\n      xDivisor = hoverWidth / w.globals.dataPoints;\n    }\n    const hoverX = clientX - seriesBound.left - w.globals.barPadForNumericAxis;\n    const hoverY = clientY - seriesBound.top;\n    const notInRect = hoverX < 0 || hoverY < 0 || hoverX > hoverWidth || hoverY > hoverHeight;\n    if (notInRect) {\n      hoverArea.classList.remove(\"hovering-zoom\");\n      hoverArea.classList.remove(\"hovering-pan\");\n    } else {\n      if (w.interact.zoomEnabled) {\n        hoverArea.classList.remove(\"hovering-pan\");\n        hoverArea.classList.add(\"hovering-zoom\");\n      } else if (w.interact.panEnabled) {\n        hoverArea.classList.remove(\"hovering-zoom\");\n        hoverArea.classList.add(\"hovering-pan\");\n      }\n    }\n    let j = Math.round(hoverX / xDivisor);\n    const jHorz = Math.floor(hoverY / yDivisor);\n    if (hasBars && !w.config.xaxis.convertedCatToNumeric) {\n      j = Math.ceil(hoverX / xDivisor);\n      j = j - 1;\n    }\n    let capturedSeries = null;\n    let closest = null;\n    let seriesXValArr = w.globals.seriesXvalues.map(\n      (seriesXVal) => {\n        return seriesXVal.filter(\n          (s) => Utils$1.isNumber(s)\n        );\n      }\n    );\n    const seriesYValArr = w.globals.seriesYvalues.map(\n      (seriesYVal) => {\n        return seriesYVal.filter(\n          (s) => Utils$1.isNumber(s)\n        );\n      }\n    );\n    if (w.axisFlags.isXNumeric) {\n      const chartGridEl = this.ttCtx.getElGrid();\n      if (!chartGridEl) return { hoverX, hoverY };\n      const chartGridElBoundingRect = chartGridEl.getBoundingClientRect();\n      const transformedHoverX = hoverX * (chartGridElBoundingRect.width / hoverWidth);\n      const transformedHoverY = hoverY * (chartGridElBoundingRect.height / hoverHeight);\n      closest = this.closestInMultiArray(\n        transformedHoverX,\n        transformedHoverY,\n        seriesXValArr,\n        seriesYValArr\n      );\n      capturedSeries = closest.index;\n      j = (_a = closest.j) != null ? _a : 0;\n      if (capturedSeries !== null && w.globals.hasNullValues) {\n        seriesXValArr = w.globals.seriesXvalues[capturedSeries];\n        closest = this.closestInArray(transformedHoverX, seriesXValArr);\n        j = (_b = closest.j) != null ? _b : 0;\n      }\n    }\n    w.interact.capturedSeriesIndex = capturedSeries === null ? -1 : capturedSeries;\n    if (!j || j < 1) j = 0;\n    if (w.globals.isBarHorizontal) {\n      w.interact.capturedDataPointIndex = jHorz;\n    } else {\n      w.interact.capturedDataPointIndex = j;\n    }\n    return {\n      capturedSeries,\n      j: w.globals.isBarHorizontal ? jHorz : j,\n      hoverX,\n      hoverY\n    };\n  }\n  /**\n   * @param {any[]} Xarrays\n   */\n  getFirstActiveXArray(Xarrays) {\n    const w = this.w;\n    let activeIndex = 0;\n    const firstActiveSeriesIndex = Xarrays.map(\n      (xarr, index) => {\n        return xarr.length > 0 ? index : -1;\n      }\n    );\n    for (let a = 0; a < firstActiveSeriesIndex.length; a++) {\n      if (firstActiveSeriesIndex[a] !== -1 && w.globals.collapsedSeriesIndices.indexOf(a) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(a) === -1) {\n        activeIndex = firstActiveSeriesIndex[a];\n        break;\n      }\n    }\n    return activeIndex;\n  }\n  /**\n   * @param {number} hoverX\n   * @param {number} hoverY\n   * @param {any[]} Xarrays\n   * @param {any[]} Yarrays\n   */\n  closestInMultiArray(hoverX, hoverY, Xarrays, Yarrays) {\n    const w = this.w;\n    const isActiveSeries = (seriesIndex) => {\n      return w.globals.collapsedSeriesIndices.indexOf(seriesIndex) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(seriesIndex) === -1;\n    };\n    const chartType = w.config.chart.type;\n    const isLineArea = !w.globals.comboCharts && (chartType === \"line\" || chartType === \"area\");\n    let closestDist = Infinity;\n    let closestSeriesIndex = null;\n    let closestPointIndex = null;\n    if (w.globals.allSeriesHasEqualX) {\n      let bucketDistX = Infinity;\n      for (let i = 0; i < Xarrays.length; i++) {\n        if (!isActiveSeries(i)) continue;\n        const xArr = Xarrays[i];\n        const yArr = Yarrays[i];\n        const len = Math.min(xArr.length, yArr.length);\n        for (let j = 0; j < len; j++) {\n          const distX = Math.abs(hoverX - xArr[j]);\n          if (distX < bucketDistX) {\n            bucketDistX = distX;\n            closestPointIndex = j;\n          }\n        }\n      }\n      if (closestPointIndex !== null) {\n        if (isLineArea) {\n          let bestSegDist = Infinity;\n          for (let i = 0; i < Xarrays.length; i++) {\n            if (!isActiveSeries(i)) continue;\n            const xArr = Xarrays[i];\n            const yArr = Yarrays[i];\n            const len = Math.min(xArr.length, yArr.length);\n            if (len < 2) {\n              const yVal = yArr[closestPointIndex];\n              if (typeof yVal !== \"number\") continue;\n              const d = Math.abs(hoverY - yVal);\n              if (d < bestSegDist) {\n                bestSegDist = d;\n                closestSeriesIndex = i;\n              }\n              continue;\n            }\n            for (let j = 0; j < len - 1; j++) {\n              const seg = this._distanceToSegment(\n                hoverX,\n                hoverY,\n                xArr[j],\n                yArr[j],\n                xArr[j + 1],\n                yArr[j + 1]\n              );\n              if (seg.dist < bestSegDist) {\n                bestSegDist = seg.dist;\n                closestSeriesIndex = i;\n              }\n            }\n          }\n        } else {\n          let bestY = Infinity;\n          for (let i = 0; i < Xarrays.length; i++) {\n            if (!isActiveSeries(i)) continue;\n            const yVal = Yarrays[i][closestPointIndex];\n            if (typeof yVal !== \"number\") continue;\n            const distY = Math.abs(hoverY - yVal);\n            if (distY < bestY) {\n              bestY = distY;\n              closestSeriesIndex = i;\n            }\n          }\n        }\n      }\n      return {\n        index: closestSeriesIndex,\n        j: closestPointIndex\n      };\n    }\n    for (let i = 0; i < Xarrays.length; i++) {\n      if (!isActiveSeries(i)) {\n        continue;\n      }\n      const xArr = Xarrays[i];\n      const yArr = Yarrays[i];\n      const len = Math.min(xArr.length, yArr.length);\n      if (isLineArea && len >= 2) {\n        for (let j = 0; j < len - 1; j++) {\n          const seg = this._distanceToSegment(\n            hoverX,\n            hoverY,\n            xArr[j],\n            yArr[j],\n            xArr[j + 1],\n            yArr[j + 1]\n          );\n          if (seg.dist < closestDist) {\n            closestDist = seg.dist;\n            closestSeriesIndex = i;\n            closestPointIndex = seg.t < 0.5 ? j : j + 1;\n          }\n        }\n        continue;\n      }\n      for (let j = 0; j < len; j++) {\n        const xVal = xArr[j];\n        const distX = hoverX - xVal;\n        const yVal = yArr[j];\n        const distY = hoverY - yVal;\n        const dist = Math.sqrt(distX * distX + distY * distY);\n        if (dist < closestDist) {\n          closestDist = dist;\n          closestSeriesIndex = i;\n          closestPointIndex = j;\n        }\n      }\n    }\n    return {\n      index: closestSeriesIndex,\n      j: closestPointIndex\n    };\n  }\n  /**\n   * Perpendicular distance from point (px, py) to the line segment\n   * (ax, ay) → (bx, by). Returns the distance plus the projection\n   * parameter t (0 = at A, 1 = at B, clamped) so callers know which\n   * endpoint the projection landed nearest.\n   * @param {number} px\n   * @param {number} py\n   * @param {number} ax\n   * @param {number} ay\n   * @param {number} bx\n   * @param {number} by\n   * @returns {{ dist: number, t: number }}\n   */\n  _distanceToSegment(px, py, ax, ay, bx, by) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const lenSq = dx * dx + dy * dy;\n    let t = lenSq === 0 ? 0 : ((px - ax) * dx + (py - ay) * dy) / lenSq;\n    if (t < 0) t = 0;\n    else if (t > 1) t = 1;\n    const cx = ax + t * dx;\n    const cy = ay + t * dy;\n    const ex = px - cx;\n    const ey = py - cy;\n    return { dist: Math.sqrt(ex * ex + ey * ey), t };\n  }\n  /**\n   * @param {number} val\n   * @param {any[]} arr\n   */\n  closestInArray(val, arr) {\n    const curr = arr[0];\n    let currIndex = null;\n    let diff = Math.abs(val - curr);\n    for (let i = 0; i < arr.length; i++) {\n      const newdiff = Math.abs(val - arr[i]);\n      if (newdiff < diff) {\n        diff = newdiff;\n        currIndex = i;\n      }\n    }\n    return {\n      j: currIndex\n    };\n  }\n  /**\n   * When there are multiple series, it is possible to have different x values for each series.\n   * But it may be possible in those multiple series, that there is same x value for 2 or more\n   * series.\n   * @memberof Utils\n   * @param {number} j - the inner index of series (series[i][j])\n   * @return {boolean}\n   */\n  isXoverlap(j) {\n    const w = this.w;\n    const xSameForAllSeriesJArr = [];\n    const seriesX = w.seriesData.seriesX.filter(\n      (s) => typeof s[0] !== \"undefined\"\n    );\n    if (seriesX.length > 0) {\n      for (let i = 0; i < seriesX.length - 1; i++) {\n        if (typeof seriesX[i][j] !== \"undefined\" && typeof seriesX[i + 1][j] !== \"undefined\") {\n          if (seriesX[i][j] !== seriesX[i + 1][j]) {\n            xSameForAllSeriesJArr.push(\"unEqual\");\n          }\n        }\n      }\n    }\n    if (xSameForAllSeriesJArr.length === 0) {\n      return true;\n    }\n    return false;\n  }\n  isInitialSeriesSameLen() {\n    var _a, _b, _c;\n    let sameLen = true;\n    const initialSeries = (\n      /** @type {any[]} */\n      ((_a = this.w.globals.initialSeries) == null ? void 0 : _a.filter(\n        /**\n         * @param {Record<string, any>} s\n         * @param {number} i\n         */\n        (s, i) => {\n          var _a2;\n          return !((_a2 = this.w.globals.collapsedSeriesIndices) == null ? void 0 : _a2.includes(i));\n        }\n      )) || []\n    );\n    for (let i = 0; i < initialSeries.length - 1; i++) {\n      if (!((_b = initialSeries[i]) == null ? void 0 : _b.data) || !((_c = initialSeries[i + 1]) == null ? void 0 : _c.data)) return true;\n      if (initialSeries[i].data.length !== initialSeries[i + 1].data.length) {\n        sameLen = false;\n        break;\n      }\n    }\n    return sameLen;\n  }\n  /**\n   * @param {any[]} allbars\n   */\n  getBarsHeight(allbars) {\n    const bars = [...allbars];\n    const totalHeight = bars.reduce((acc, bar) => acc + bar.getBBox().height, 0);\n    return totalHeight;\n  }\n  /**\n   * @param {number} capturedSeries\n   */\n  getElMarkers(capturedSeries) {\n    if (typeof capturedSeries == \"number\") {\n      return this.w.dom.baseEl.querySelectorAll(\n        `.apexcharts-series[data\\\\:realIndex='${capturedSeries}'] .apexcharts-series-markers-wrap > *`\n      );\n    }\n    return this.w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series-markers-wrap > *\"\n    );\n  }\n  getAllMarkers(filterCollapsed = false) {\n    let markersWraps = (\n      /** @type {any[]} */\n      [\n        ...this.w.dom.baseEl.querySelectorAll(\".apexcharts-series-markers-wrap\")\n      ]\n    );\n    if (filterCollapsed) {\n      markersWraps = markersWraps.filter((m) => {\n        const realIndex = Number(m.getAttribute(\"data:realIndex\"));\n        return this.w.globals.collapsedSeriesIndices.indexOf(realIndex) === -1;\n      });\n    }\n    markersWraps.sort((a, b) => {\n      var indexA = Number(a.getAttribute(\"data:realIndex\"));\n      var indexB = Number(b.getAttribute(\"data:realIndex\"));\n      return indexB < indexA ? 1 : indexB > indexA ? -1 : 0;\n    });\n    const markers = [];\n    markersWraps.forEach((m) => {\n      markers.push(m.querySelector(\".apexcharts-marker\"));\n    });\n    return markers;\n  }\n  /**\n   * @param {number} capturedSeries\n   */\n  hasMarkers(capturedSeries) {\n    const markers = this.getElMarkers(capturedSeries);\n    return markers.length > 0;\n  }\n  /**\n   * @param {any} point\n   * @param {number} size\n   */\n  getPathFromPoint(point, size) {\n    const cx = Number(point.getAttribute(\"cx\"));\n    const cy = Number(point.getAttribute(\"cy\"));\n    const shape = point.getAttribute(\"shape\");\n    return new Graphics(this.w).getMarkerPath(cx, cy, shape, size);\n  }\n  getElBars() {\n    return this.w.dom.baseEl.querySelectorAll(\n      \".apexcharts-bar-series,  .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-violin-series, .apexcharts-rangebar-series\"\n    );\n  }\n  hasBars() {\n    const bars = this.getElBars();\n    return bars.length > 0;\n  }\n  /**\n   * @param {number} index\n   */\n  getHoverMarkerSize(index) {\n    const w = this.w;\n    let hoverSize = w.config.markers.hover.size;\n    if (hoverSize === void 0) {\n      hoverSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset;\n    }\n    return hoverSize;\n  }\n  /**\n   * @param {string} state\n   */\n  toggleAllTooltipSeriesGroups(state) {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (ttCtx.allTooltipSeriesGroups.length === 0) {\n      ttCtx.allTooltipSeriesGroups = w.dom.baseEl.querySelectorAll(\n        \".apexcharts-tooltip-series-group\"\n      );\n    }\n    const allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups;\n    for (let i = 0; i < allTooltipSeriesGroups.length; i++) {\n      if (state === \"enable\") {\n        allTooltipSeriesGroups[i].classList.add(\"apexcharts-active\");\n        allTooltipSeriesGroups[i].style.display = w.config.tooltip.items.display;\n      } else {\n        allTooltipSeriesGroups[i].classList.remove(\"apexcharts-active\");\n        allTooltipSeriesGroups[i].style.display = \"none\";\n      }\n    }\n  }\n}\nclass Labels {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n    this.tooltipUtil = new Utils2(tooltipContext);\n  }\n  /** @param {{ shared?: boolean, ttItems?: any, i?: number, j?: any, y1?: any, y2?: any, e?: any }} opts */\n  drawSeriesTexts({ shared = true, ttItems, i = 0, j = null, y1, y2, e }) {\n    const w = this.w;\n    if (w.config.tooltip.custom !== void 0) {\n      this.handleCustomTooltip({ i, j, y1, y2, w });\n    } else {\n      this.toggleActiveInactiveSeries(shared, i);\n    }\n    const values = this.getValuesToPrint({\n      i,\n      j\n    });\n    this.printLabels({\n      i,\n      j,\n      values,\n      ttItems,\n      shared,\n      e\n    });\n    const tooltipEl = this.ttCtx.getElTooltip();\n    if (tooltipEl) {\n      this.ttCtx.tooltipRect.ttWidth = tooltipEl.getBoundingClientRect().width;\n      this.ttCtx.tooltipRect.ttHeight = tooltipEl.getBoundingClientRect().height;\n    }\n  }\n  /** @param {{i: any, j: any, values: any, ttItems: any, shared: any, e: any}} opts */\n  printLabels({ i, j, values, ttItems, shared, e }) {\n    const w = this.w;\n    const { xVal, zVal, xAxisTTVal } = values;\n    const seriesLen = w.seriesData.series.length;\n    const basePColor = j !== null && w.config.plotOptions.bar.distributed ? w.globals.colors[j] : w.globals.colors[i];\n    for (let t = 0; t < seriesLen; t++) {\n      const tIndex = w.config.tooltip.inverseOrder ? seriesLen - 1 - t : t;\n      const row = this.computeSeriesRow({\n        i,\n        j,\n        t,\n        tIndex,\n        shared,\n        e,\n        basePColor\n      });\n      this.DOMHandling({\n        i,\n        t: tIndex,\n        j,\n        ttItems,\n        values: {\n          val: row.val,\n          goalVals: row.goalVals,\n          xVal,\n          xAxisTTVal,\n          zVal\n        },\n        seriesName: row.seriesName,\n        shared,\n        pColor: row.pColor\n      });\n    }\n  }\n  /**\n   * Compute the per-series row values (seriesName, val, goalVals, pColor)\n   * for one iteration of the tooltip's series loop. Extracted from\n   * printLabels() to keep the outer loop scannable.\n   * @param {{i: number, j: any, t: number, tIndex: number, shared: boolean, e: any, basePColor: string}} opts\n   */\n  computeSeriesRow({ i, j, tIndex, shared, e, basePColor }) {\n    const w = this.w;\n    let f = this.getFormatters(i);\n    let pColor = basePColor;\n    let val;\n    let goalVals = (\n      /** @type {any[]} */\n      []\n    );\n    let seriesName = w.config.chart.type === \"treemap\" ? f.yLbTitleFormatter(\n      String(\n        /** @type {any} */\n        w.config.series[i].data[j].x\n      ),\n      {\n        series: w.seriesData.series,\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      }\n    ) : this.getSeriesName({\n      fn: f.yLbTitleFormatter,\n      index: i,\n      seriesIndex: i,\n      j\n    });\n    if (w.globals.axisCharts) {\n      if (shared) {\n        f = this.getFormatters(tIndex);\n        seriesName = this.getSeriesName({\n          fn: f.yLbTitleFormatter,\n          index: tIndex,\n          seriesIndex: i,\n          j\n        });\n        pColor = w.globals.colors[tIndex];\n        val = this.formatYValue(f, tIndex, j);\n        goalVals = this.formatGoalVals(f, tIndex, j);\n      } else {\n        pColor = this.resolvePatternColor(e, pColor);\n        val = this.formatYValue(f, i, j);\n        goalVals = this.formatGoalVals(f, i, j);\n      }\n    }\n    if (j === null) {\n      val = f.yLbFormatter(w.seriesData.series[i], __spreadProps(__spreadValues({}, w), {\n        seriesIndex: i,\n        dataPointIndex: i\n      }));\n    }\n    return { seriesName, val, goalVals, pColor };\n  }\n  /**\n   * Run the y-value formatter for a given (seriesIndex, dataPointIndex),\n   * handling the range-data case (start - end concatenation).\n   * @param {{yLbFormatter: Function}} f\n   * @param {number} index\n   * @param {any} j\n   */\n  formatYValue(f, index, j) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    if (w.axisFlags.isRangeData) {\n      return f.yLbFormatter((_b = (_a = w.rangeData.seriesRangeStart) == null ? void 0 : _a[index]) == null ? void 0 : _b[j], {\n        series: w.rangeData.seriesRangeStart,\n        seriesIndex: index,\n        dataPointIndex: j,\n        w\n      }) + \" - \" + f.yLbFormatter((_d = (_c = w.rangeData.seriesRangeEnd) == null ? void 0 : _c[index]) == null ? void 0 : _d[j], {\n        series: w.rangeData.seriesRangeEnd,\n        seriesIndex: index,\n        dataPointIndex: j,\n        w\n      });\n    }\n    return f.yLbFormatter(w.seriesData.series[index][j], {\n      series: w.seriesData.series,\n      seriesIndex: index,\n      dataPointIndex: j,\n      w\n    });\n  }\n  /**\n   * Format the goal-line values attached to a given (seriesIndex, dataPointIndex).\n   * Returns an empty array when no goals exist.\n   * @param {{yLbFormatter: Function}} f\n   * @param {number} index\n   * @param {any} j\n   */\n  formatGoalVals(f, index, j) {\n    var _a;\n    const w = this.w;\n    const goals = (_a = w.seriesData.seriesGoals[index]) == null ? void 0 : _a[j];\n    if (!Array.isArray(goals)) return [];\n    return goals.map((goal) => ({\n      attrs: goal,\n      val: f.yLbFormatter(goal.value, {\n        seriesIndex: index,\n        dataPointIndex: j,\n        w\n      })\n    }));\n  }\n  /**\n   * When the hovered element has a pattern fill (url(#…Pattern…)), reach\n   * into the pattern's first child to pull a stroke color. Otherwise\n   * return the raw fill attribute or the fallback.\n   * @param {any} e\n   * @param {string} fallback\n   */\n  resolvePatternColor(e, fallback) {\n    var _a, _b, _c;\n    const w = this.w;\n    const targetFill = (_a = e == null ? void 0 : e.target) == null ? void 0 : _a.getAttribute(\"fill\");\n    if (!targetFill) return fallback;\n    if (targetFill.indexOf(\"url\") === -1) return targetFill;\n    if (targetFill.indexOf(\"Pattern\") === -1) return fallback;\n    const patternEl = w.dom.baseEl.querySelector(\n      targetFill.substr(4).slice(0, -1)\n    );\n    return (_c = (_b = patternEl == null ? void 0 : patternEl.childNodes[0]) == null ? void 0 : _b.getAttribute(\"stroke\")) != null ? _c : fallback;\n  }\n  /**\n   * @param {number} i\n   */\n  getFormatters(i) {\n    const w = this.w;\n    let yLbFormatter = w.formatters.yLabelFormatters[i];\n    let yLbTitleFormatter;\n    if (w.formatters.ttVal !== void 0) {\n      if (Array.isArray(w.formatters.ttVal)) {\n        yLbFormatter = /** @type {any} */\n        w.formatters.ttVal[i] && /** @type {any} */\n        w.formatters.ttVal[i].formatter;\n        yLbTitleFormatter = /** @type {any} */\n        w.formatters.ttVal[i] && /** @type {any} */\n        w.formatters.ttVal[i].title && /** @type {any} */\n        w.formatters.ttVal[i].title.formatter;\n      } else {\n        yLbFormatter = /** @type {any} */\n        w.formatters.ttVal.formatter;\n        if (typeof /** @type {any} */\n        w.formatters.ttVal.title.formatter === \"function\") {\n          yLbTitleFormatter = /** @type {any} */\n          w.formatters.ttVal.title.formatter;\n        }\n      }\n    } else {\n      yLbTitleFormatter = w.config.tooltip.y.title.formatter;\n    }\n    if (typeof yLbFormatter !== \"function\") {\n      if (w.formatters.yLabelFormatters[0]) {\n        yLbFormatter = w.formatters.yLabelFormatters[0];\n      } else {\n        yLbFormatter = function(label) {\n          return label;\n        };\n      }\n    }\n    if (typeof yLbTitleFormatter !== \"function\") {\n      yLbTitleFormatter = function(label) {\n        return label ? label + \": \" : \"\";\n      };\n    }\n    return {\n      yLbFormatter,\n      yLbTitleFormatter\n    };\n  }\n  /** @param {{fn: any, index: any, seriesIndex: any, j: any}} opts */\n  getSeriesName({ fn, index, seriesIndex, j }) {\n    const w = this.w;\n    return fn(String(w.seriesData.seriesNames[index]), {\n      series: w.seriesData.series,\n      seriesIndex,\n      dataPointIndex: j,\n      w\n    });\n  }\n  /** @param {{ t?: any, j?: any, i?: any, ttItems?: any, values?: any, seriesName?: any, shared?: any, pColor?: any }} opts */\n  DOMHandling({ t, j, ttItems, values, seriesName, shared, pColor }) {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const { val, goalVals, xVal, xAxisTTVal, zVal } = values;\n    if (!ttItems || !ttItems[t]) return;\n    let ttItemsChildren = null;\n    ttItemsChildren = ttItems[t].children;\n    if (w.config.tooltip.fillSeriesColor) {\n      ttItems[t].style.backgroundColor = pColor;\n      ttItemsChildren[0].style.display = \"none\";\n    }\n    if (ttCtx.showTooltipTitle) {\n      if (ttCtx.tooltipTitle === null) {\n        ttCtx.tooltipTitle = w.dom.baseEl.querySelector(\n          \".apexcharts-tooltip-title\"\n        );\n      }\n      if (ttCtx.tooltipTitle) {\n        ttCtx.tooltipTitle.innerHTML = xVal;\n      }\n    }\n    if (ttCtx.isXAxisTooltipEnabled) {\n      if (ttCtx.xaxisTooltipText) {\n        ttCtx.xaxisTooltipText.innerHTML = xAxisTTVal !== \"\" ? xAxisTTVal : xVal;\n      }\n    }\n    const ttYLabel = ttItems[t].querySelector(\n      \".apexcharts-tooltip-text-y-label\"\n    );\n    if (ttYLabel) {\n      ttYLabel.innerHTML = seriesName ? seriesName : \"\";\n    }\n    const ttYVal = ttItems[t].querySelector(\".apexcharts-tooltip-text-y-value\");\n    if (ttYVal) {\n      ttYVal.innerHTML = typeof val !== \"undefined\" ? val : \"\";\n    }\n    if (ttItemsChildren[0] && ttItemsChildren[0].classList.contains(\"apexcharts-tooltip-marker\")) {\n      if (w.config.tooltip.marker.fillColors && Array.isArray(w.config.tooltip.marker.fillColors)) {\n        pColor = w.config.tooltip.marker.fillColors[t];\n      }\n      if (w.config.tooltip.fillSeriesColor) {\n        ttItemsChildren[0].style.backgroundColor = pColor;\n      } else {\n        ttItemsChildren[0].style.color = pColor;\n      }\n    }\n    if (!w.config.tooltip.marker.show) {\n      ttItemsChildren[0].style.display = \"none\";\n    }\n    const ttGLabel = ttItems[t].querySelector(\n      \".apexcharts-tooltip-text-goals-label\"\n    );\n    const ttGVal = ttItems[t].querySelector(\n      \".apexcharts-tooltip-text-goals-value\"\n    );\n    if (goalVals.length && w.seriesData.seriesGoals[t]) {\n      const createGoalsHtml = () => {\n        let gLabels = \"<div>\";\n        let gVals = \"<div>\";\n        goalVals.forEach((goal) => {\n          gLabels += ` <div style=\"display: flex\"><span class=\"apexcharts-tooltip-marker\" style=\"background-color: ${goal.attrs.strokeColor}; height: 3px; border-radius: 0; top: 5px;\"></span> ${goal.attrs.name}</div>`;\n          gVals += `<div>${goal.val}</div>`;\n        });\n        ttGLabel.innerHTML = gLabels + `</div>`;\n        ttGVal.innerHTML = gVals + `</div>`;\n      };\n      if (shared) {\n        if (w.seriesData.seriesGoals[t][j] && Array.isArray(w.seriesData.seriesGoals[t][j])) {\n          createGoalsHtml();\n        } else {\n          ttGLabel.innerHTML = \"\";\n          ttGVal.innerHTML = \"\";\n        }\n      } else {\n        createGoalsHtml();\n      }\n    } else {\n      ttGLabel.innerHTML = \"\";\n      ttGVal.innerHTML = \"\";\n    }\n    if (zVal !== null) {\n      const ttZLabel = ttItems[t].querySelector(\n        \".apexcharts-tooltip-text-z-label\"\n      );\n      ttZLabel.innerHTML = w.config.tooltip.z.title;\n      const ttZVal = ttItems[t].querySelector(\n        \".apexcharts-tooltip-text-z-value\"\n      );\n      ttZVal.innerHTML = typeof zVal !== \"undefined\" ? zVal : \"\";\n    }\n    if (shared && ttItemsChildren[0]) {\n      if (w.config.tooltip.hideEmptySeries) {\n        const ttItemMarker = ttItems[t].querySelector(\n          \".apexcharts-tooltip-marker\"\n        );\n        const ttItemText = ttItems[t].querySelector(\".apexcharts-tooltip-text\");\n        if (parseFloat(val) == 0) {\n          ttItemMarker.style.display = \"none\";\n          ttItemText.style.display = \"none\";\n        } else {\n          ttItemMarker.style.display = \"block\";\n          ttItemText.style.display = \"block\";\n        }\n      }\n      if (typeof val === \"undefined\" || val === null || w.globals.ancillaryCollapsedSeriesIndices.indexOf(t) > -1 || w.globals.collapsedSeriesIndices.indexOf(t) > -1 || Array.isArray(ttCtx.tConfig.enabledOnSeries) && ttCtx.tConfig.enabledOnSeries.indexOf(t) === -1) {\n        ttItemsChildren[0].parentNode.style.display = \"none\";\n      } else {\n        ttItemsChildren[0].parentNode.style.display = w.config.tooltip.items.display;\n      }\n    } else {\n      if (Array.isArray(ttCtx.tConfig.enabledOnSeries) && ttCtx.tConfig.enabledOnSeries.indexOf(t) === -1) {\n        ttItemsChildren[0].parentNode.style.display = \"none\";\n      }\n    }\n  }\n  /**\n   * @param {boolean} shared\n   * @param {number} i\n   */\n  toggleActiveInactiveSeries(shared, i) {\n    const w = this.w;\n    if (shared) {\n      this.tooltipUtil.toggleAllTooltipSeriesGroups(\"enable\");\n    } else {\n      this.tooltipUtil.toggleAllTooltipSeriesGroups(\"disable\");\n      const firstTooltipSeriesGroup = w.dom.baseEl.querySelector(\n        `.apexcharts-tooltip-series-group-${i}`\n      );\n      if (firstTooltipSeriesGroup) {\n        const ftsGroup = (\n          /** @type {HTMLElement} */\n          firstTooltipSeriesGroup\n        );\n        ftsGroup.classList.add(\"apexcharts-active\");\n        ftsGroup.style.display = w.config.tooltip.items.display;\n      }\n    }\n  }\n  /** @param {{i: any, j: any}} opts */\n  getValuesToPrint({ i, j }) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const w = this.w;\n    const filteredSeriesX = w.seriesData.seriesX.map(\n      (ser) => ser.length > 0 ? ser : []\n    );\n    let xVal = \"\";\n    let xAxisTTVal = \"\";\n    let zVal = null;\n    let val = null;\n    const customFormatterOpts = {\n      series: w.seriesData.series,\n      seriesIndex: i,\n      dataPointIndex: j,\n      w\n    };\n    const zFormatter = w.formatters.ttZFormatter;\n    if (j === null) {\n      val = w.seriesData.series[i];\n    } else {\n      if (w.axisFlags.isXNumeric && w.config.chart.type !== \"treemap\") {\n        xVal = filteredSeriesX[i][j];\n        if (filteredSeriesX[i].length === 0) {\n          const firstActiveSeriesIndex = this.tooltipUtil.getFirstActiveXArray(filteredSeriesX);\n          xVal = filteredSeriesX[firstActiveSeriesIndex][j];\n        }\n      } else {\n        const dataFormat = new Data(this.w);\n        if (dataFormat.isFormatXY()) {\n          xVal = typeof /** @type {any} */\n          w.config.series[i].data[j] !== \"undefined\" ? (\n            /** @type {any} */\n            w.config.series[i].data[j].x\n          ) : \"\";\n        } else {\n          xVal = typeof w.labelData.labels[j] !== \"undefined\" ? w.labelData.labels[j] : \"\";\n        }\n      }\n    }\n    const bufferXVal = xVal;\n    if (w.axisFlags.isXNumeric && w.config.xaxis.type === \"datetime\") {\n      const xFormat = new Formatters(this.w);\n      xVal = xFormat.xLabelFormat(\n        /** @type {Function} */\n        w.formatters.ttKeyFormatter,\n        bufferXVal,\n        bufferXVal,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w: this.w\n        }\n      );\n    } else {\n      if (w.globals.isBarHorizontal) {\n        xVal = w.formatters.yLabelFormatters[0](bufferXVal, customFormatterOpts);\n      } else {\n        xVal = (_c = (_b = (_a = w.formatters).xLabelFormatter) == null ? void 0 : _b.call(_a, bufferXVal, customFormatterOpts)) != null ? _c : bufferXVal;\n      }\n    }\n    if (w.config.tooltip.x.formatter !== void 0) {\n      xVal = (_f = (_e = (_d = w.formatters).ttKeyFormatter) == null ? void 0 : _e.call(_d, bufferXVal, customFormatterOpts)) != null ? _f : bufferXVal;\n    }\n    if (w.seriesData.seriesZ.length > 0 && w.seriesData.seriesZ[i].length > 0) {\n      zVal = zFormatter == null ? void 0 : zFormatter(w.seriesData.seriesZ[i][j], w);\n    }\n    if (typeof w.config.xaxis.tooltip.formatter === \"function\") {\n      xAxisTTVal = (_h = (_g = w.formatters).xaxisTooltipFormatter) == null ? void 0 : _h.call(\n        _g,\n        bufferXVal,\n        customFormatterOpts\n      );\n    } else {\n      xAxisTTVal = xVal;\n    }\n    return {\n      val: Array.isArray(val) ? val.join(\" \") : val,\n      xVal: Array.isArray(xVal) ? xVal.join(\" \") : xVal,\n      xAxisTTVal: Array.isArray(xAxisTTVal) ? xAxisTTVal.join(\" \") : xAxisTTVal,\n      zVal\n    };\n  }\n  /** @param {{i: any, j: any, y1: any, y2: any, w: any}} opts */\n  handleCustomTooltip({ i, j, y1, y2, w }) {\n    const tooltipEl = this.ttCtx.getElTooltip();\n    let fn = w.config.tooltip.custom;\n    if (Array.isArray(fn) && fn[i]) {\n      fn = fn[i];\n    }\n    const customTooltip = fn({\n      series: w.seriesData.series,\n      seriesIndex: i,\n      dataPointIndex: j,\n      y1,\n      y2,\n      w\n    });\n    if (tooltipEl) {\n      if (typeof customTooltip === \"string\" || typeof customTooltip === \"number\") {\n        tooltipEl.innerHTML = String(customTooltip);\n      } else if (customTooltip instanceof Element || typeof customTooltip.nodeName === \"string\") {\n        tooltipEl.innerHTML = \"\";\n        tooltipEl.appendChild(customTooltip.cloneNode(true));\n      }\n    }\n  }\n}\nclass Position {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.ttCtx = tooltipContext;\n    this.w = tooltipContext.w;\n  }\n  /**\n   * This will move the crosshair (the vertical/horz line that moves along with mouse)\n   * Along with this, this function also calls the xaxisMove function\n   * @memberof Position\n   * @param {number} cx - point's x position, wherever point's x is, you need to move crosshair\n   * @param {number | null} [j]\n   */\n  moveXCrosshairs(cx, j = null) {\n    const ttCtx = this.ttCtx;\n    const w = this.w;\n    const xcrosshairs = ttCtx.getElXCrosshairs();\n    let x = cx - ttCtx.xcrosshairsWidth / 2;\n    const tickAmount = w.labelData.labels.slice().length;\n    if (j !== null) {\n      x = w.layout.gridWidth / tickAmount * j;\n    }\n    if (xcrosshairs !== null && !w.globals.isBarHorizontal) {\n      xcrosshairs.setAttribute(\"x\", String(x));\n      xcrosshairs.setAttribute(\"x1\", String(x));\n      xcrosshairs.setAttribute(\"x2\", String(x));\n      xcrosshairs.setAttribute(\"y2\", String(w.layout.gridHeight));\n      xcrosshairs.classList.add(\"apexcharts-active\");\n    }\n    if (x < 0) {\n      x = 0;\n    }\n    if (x > w.layout.gridWidth) {\n      x = w.layout.gridWidth;\n    }\n    if (ttCtx.isXAxisTooltipEnabled) {\n      let tx = x;\n      if (w.config.xaxis.crosshairs.width === \"tickWidth\" || w.config.xaxis.crosshairs.width === \"barWidth\") {\n        tx = x + ttCtx.xcrosshairsWidth / 2;\n      }\n      this.moveXAxisTooltip(tx);\n    }\n  }\n  /**\n   * This will move the crosshair (the vertical/horz line that moves along with mouse)\n   * Along with this, this function also calls the xaxisMove function\n   * @memberof Position\n   * @param {number} cy - point's y position, wherever point's y is, you need to move crosshair\n   */\n  moveYCrosshairs(cy) {\n    const ttCtx = this.ttCtx;\n    if (ttCtx.ycrosshairs !== null) {\n      Graphics.setAttrs(ttCtx.ycrosshairs, {\n        y1: cy,\n        y2: cy\n      });\n    }\n    if (ttCtx.ycrosshairsHidden !== null) {\n      Graphics.setAttrs(ttCtx.ycrosshairsHidden, {\n        y1: cy,\n        y2: cy\n      });\n    }\n  }\n  /**\n   ** AxisTooltip is the small rectangle which appears on x axis with x value, when user moves\n   * @memberof Position\n   * @param {number} cx - point's x position, wherever point's x is, you need to move\n   */\n  moveXAxisTooltip(cx) {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (ttCtx.xaxisTooltip !== null && ttCtx.xcrosshairsWidth !== 0) {\n      ttCtx.xaxisTooltip.classList.add(\"apexcharts-active\");\n      const cy = ttCtx.xaxisOffY + w.config.xaxis.tooltip.offsetY + w.layout.translateY + 5 + w.config.xaxis.offsetY;\n      const xaxisTTText = ttCtx.xaxisTooltip.getBoundingClientRect();\n      const xaxisTTTextWidth = xaxisTTText.width;\n      cx = cx - xaxisTTTextWidth / 2;\n      if (!isNaN(cx)) {\n        cx = cx + w.layout.translateX;\n        const graphics = new Graphics(this.w);\n        const textRect = graphics.getTextRects(\n          (_b = (_a = ttCtx.xaxisTooltipText) == null ? void 0 : _a.innerHTML) != null ? _b : \"\",\n          w.config.xaxis.labels.style.fontSize\n        );\n        if (ttCtx.xaxisTooltipText) {\n          ttCtx.xaxisTooltipText.style.minWidth = textRect.width + \"px\";\n        }\n        ttCtx.xaxisTooltip.style.left = cx + \"px\";\n        ttCtx.xaxisTooltip.style.top = cy + \"px\";\n      }\n    }\n  }\n  /**\n   * @param {number} index\n   */\n  moveYAxisTooltip(index) {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (ttCtx.yaxisTTEls === null) {\n      ttCtx.yaxisTTEls = /** @type {any[]} */\n      [\n        ...w.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\")\n      ];\n    }\n    const ycrosshairsHiddenRectY1 = parseInt(\n      (_b = (_a = ttCtx.ycrosshairsHidden) == null ? void 0 : _a.getAttribute(\"y1\")) != null ? _b : \"0\",\n      10\n    );\n    let cy = w.layout.translateY + ycrosshairsHiddenRectY1;\n    if (ttCtx.yaxisTTEls) {\n      const yAxisTTRect = ttCtx.yaxisTTEls[index].getBoundingClientRect();\n      const yAxisTTHeight = yAxisTTRect.height;\n      let cx;\n      const labelsGroup = (\n        /** @type {SVGGElement | null} */\n        w.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${index}'] .apexcharts-yaxis-texts-g`\n        )\n      );\n      const elWrapRect = w.dom.elWrap.getBoundingClientRect();\n      if (labelsGroup) {\n        const lr = labelsGroup.getBoundingClientRect();\n        if (lr.width > 0) {\n          const labelsCenterInElWrap = lr.left + lr.width / 2 - elWrapRect.left;\n          cx = labelsCenterInElWrap - yAxisTTRect.width / 2;\n        }\n      }\n      if (cx == null) {\n        const GAP = 4;\n        cx = w.config.yaxis[index].opposite ? w.globals.translateYAxisX[index] + GAP : w.globals.translateYAxisX[index] - yAxisTTRect.width - GAP;\n      }\n      cy = cy - yAxisTTHeight / 2;\n      if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && cy > 0 && cy < w.layout.gridHeight) {\n        ttCtx.yaxisTTEls[index].classList.add(\"apexcharts-active\");\n        ttCtx.yaxisTTEls[index].style.top = cy + \"px\";\n        ttCtx.yaxisTTEls[index].style.left = cx + w.config.yaxis[index].tooltip.offsetX + \"px\";\n      } else {\n        ttCtx.yaxisTTEls[index].classList.remove(\"apexcharts-active\");\n      }\n    }\n  }\n  /**\n   ** moves the whole tooltip by changing x, y attrs\n   * @memberof Position\n   * @param {number} cx - point's x position, wherever point's x is, you need to move tooltip\n   * @param {number} cy - point's y position, wherever point's y is, you need to move tooltip\n   * @param {number | null} [markerSize] - point's size\n   */\n  moveTooltip(cx, cy, markerSize = null) {\n    const ttCtx = this.ttCtx;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (!tooltipEl) return;\n    const pos = this.computeTooltipPosition(cx, cy, markerSize);\n    if (pos === null) return;\n    this.applyTooltipPosition(tooltipEl, pos);\n  }\n  /**\n   * Pure-ish (reads from `this.ttCtx` + `this.w` but performs no DOM writes)\n   * computation of the tooltip box position, edge placement (for arrow),\n   * and arrow vertical offset. Returns null when inputs are not numeric.\n   *\n   * @param {number} cx\n   * @param {number} cy\n   * @param {number | null} [markerSize]\n   * @returns {{ x: number, y: number, placement: 'left'|'right', arrowY: number|null } | null}\n   */\n  computeTooltipPosition(cx, cy, markerSize = null) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const tooltipRect = ttCtx.tooltipRect;\n    const arrowEnabled = !!w.config.tooltip.arrow;\n    const pointSize = markerSize !== null ? parseFloat(String(markerSize)) : 1;\n    const ttH = tooltipRect.ttHeight || 0;\n    const ttW = tooltipRect.ttWidth || 0;\n    const cxNum = parseFloat(String(cx));\n    const cyNum = parseFloat(String(cy));\n    if (isNaN(cxNum)) return null;\n    let x = cxNum + pointSize + 5;\n    const pointY = cyNum + w.layout.translateY;\n    let y = arrowEnabled ? pointY - ttH / 2 + pointSize / 2 : cyNum + pointSize / 2;\n    let placement = \"right\";\n    if (x > w.layout.gridWidth / 2) {\n      x = x - ttW - pointSize - 10;\n      placement = \"left\";\n    }\n    if (x > w.layout.gridWidth - ttW - 10) {\n      x = w.layout.gridWidth - ttW;\n    }\n    if (x < -20) {\n      x = -20;\n    }\n    if (w.config.tooltip.followCursor) {\n      const elGrid = ttCtx.getElGrid();\n      if (!elGrid) return null;\n      const seriesBound = elGrid.getBoundingClientRect();\n      x = ttCtx.e.clientX - seriesBound.left;\n      if (x > w.layout.gridWidth / 2) {\n        x = x - ttW;\n        placement = \"left\";\n      } else {\n        placement = \"right\";\n      }\n      y = ttCtx.e.clientY + w.layout.translateY - seriesBound.top;\n      if (y > w.layout.gridHeight / 2) {\n        y = y - ttH;\n      }\n    } else {\n      if (!w.globals.isBarHorizontal) {\n        if (arrowEnabled) {\n          const gridTop = w.layout.translateY;\n          const gridBottom = w.layout.translateY + w.layout.gridHeight;\n          if (y + ttH > gridBottom) {\n            y = gridBottom - ttH;\n          }\n          if (y < gridTop) {\n            y = gridTop;\n          }\n        } else {\n          if (ttH / 2 + y > w.layout.gridHeight) {\n            y = w.layout.gridHeight - ttH + w.layout.translateY;\n          }\n        }\n      }\n    }\n    if (isNaN(x)) return null;\n    x = x + w.layout.translateX;\n    const a11y = (_b = (_a = w.config) == null ? void 0 : _a.chart) == null ? void 0 : _b.accessibility;\n    if ((a11y == null ? void 0 : a11y.enabled) && ((_d = (_c = a11y == null ? void 0 : a11y.keyboard) == null ? void 0 : _c.navigation) == null ? void 0 : _d.enabled) && ((_g = (_f = (_e = w.dom) == null ? void 0 : _e.baseEl) == null ? void 0 : _f.querySelector) == null ? void 0 : _g.call(_f, \".apexcharts-keyboard-focused\"))) {\n      const refPointY = arrowEnabled ? pointY : cyNum;\n      const margin = (pointSize || 1) + 12;\n      const tooltipTop = y;\n      const tooltipBottom = y + ttH;\n      if (!isNaN(refPointY) && ttH > 0 && tooltipTop < refPointY + margin && tooltipBottom > refPointY - margin) {\n        y = refPointY - ttH - margin;\n        if (y < 0) {\n          y = refPointY + margin;\n        }\n      }\n    }\n    let arrowY = null;\n    if (arrowEnabled && ttH > 0) {\n      const localY = pointY - y;\n      const minArrowY = 10;\n      const maxArrowY = ttH - 10;\n      arrowY = Math.max(minArrowY, Math.min(maxArrowY, localY));\n    }\n    return { x, y, placement, arrowY };\n  }\n  /**\n   * Single DOM-writer used by every positioning path on the main tooltip.\n   * Replaces the duplicated `style.left/top` writes that previously lived\n   * in Position.moveTooltip, Tooltip.drawFixedTooltipRect, and Intersect.\n   *\n   * @param {HTMLElement} tooltipEl\n   * @param {{\n   *   x: number,\n   *   y: number,\n   *   placement?: 'left'|'right'|'top'|'bottom',\n   *   arrowY?: number|null,\n   *   arrowX?: number|null,\n   * }} pos\n   */\n  applyTooltipPosition(tooltipEl, pos) {\n    if (!tooltipEl) return;\n    const firstPaint = tooltipEl.dataset.positioned !== \"true\";\n    if (firstPaint) {\n      tooltipEl.style.transitionProperty = \"none\";\n    }\n    tooltipEl.style.left = pos.x + \"px\";\n    tooltipEl.style.top = pos.y + \"px\";\n    if (pos.placement) {\n      tooltipEl.dataset.placement = pos.placement;\n    }\n    if (pos.arrowY != null) {\n      tooltipEl.style.setProperty(\"--apx-tt-arrow-y\", pos.arrowY + \"px\");\n    }\n    if (pos.arrowX != null) {\n      tooltipEl.style.setProperty(\"--apx-tt-arrow-x\", pos.arrowX + \"px\");\n    }\n    if (firstPaint) {\n      void tooltipEl.offsetWidth;\n      tooltipEl.dataset.positioned = \"true\";\n      requestAnimationFrame(() => {\n        tooltipEl.style.transitionProperty = \"\";\n      });\n    }\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  moveMarkers(i, j) {\n    var _a;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (w.globals.markers.size[i] > 0) {\n      const allPoints = w.dom.baseEl.querySelectorAll(\n        ` .apexcharts-series[data\\\\:realIndex='${i}'] .apexcharts-marker`\n      );\n      for (let p = 0; p < allPoints.length; p++) {\n        if (parseInt((_a = allPoints[p].getAttribute(\"rel\")) != null ? _a : \"0\", 10) === j) {\n          ttCtx.marker.resetPointsSize();\n          ttCtx.marker.enlargeCurrentPoint(j, allPoints[p]);\n        }\n      }\n    } else {\n      ttCtx.marker.resetPointsSize();\n      this.moveDynamicPointOnHover(j, i);\n    }\n  }\n  // This function is used when you need to show markers/points only on hover -\n  // DIFFERENT X VALUES in multiple series\n  /**\n   * @param {number} j\n   * @param {number} capturedSeries\n   */\n  moveDynamicPointOnHover(j, capturedSeries) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    let cx = 0;\n    let cy = 0;\n    const graphics = new Graphics(this.w);\n    const pointsArr = w.globals.pointsArray;\n    const hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(capturedSeries);\n    const serType = (\n      /** @type {any} */\n      w.config.series[capturedSeries].type\n    );\n    if (serType && (serType === \"column\" || serType === \"candlestick\" || serType === \"boxPlot\" || serType === \"violin\")) {\n      return;\n    }\n    cx = (_b = (_a = pointsArr[capturedSeries]) == null ? void 0 : _a[j]) == null ? void 0 : _b[0];\n    cy = ((_d = (_c = pointsArr[capturedSeries]) == null ? void 0 : _c[j]) == null ? void 0 : _d[1]) || 0;\n    const point = w.dom.baseEl.querySelector(\n      `.apexcharts-series[data\\\\:realIndex='${capturedSeries}'] .apexcharts-series-markers path`\n    );\n    if (point && cy < w.layout.gridHeight && cy > 0) {\n      const shape = (_e = point.getAttribute(\"shape\")) != null ? _e : \"circle\";\n      const path = graphics.getMarkerPath(cx, cy, shape, hoverSize * 1.5);\n      point.setAttribute(\"d\", path);\n    }\n    this.moveXCrosshairs(cx);\n    if (!ttCtx.fixedTooltip) {\n      this.moveTooltip(cx, cy, hoverSize);\n    }\n  }\n  // This function is used when you need to show markers/points only on hover -\n  // SAME X VALUES in multiple series\n  /**\n   * @param {number} j\n   */\n  moveDynamicPointsOnHover(j) {\n    var _a, _b;\n    const ttCtx = this.ttCtx;\n    const w = ttCtx.w;\n    let cx = 0;\n    let cy = 0;\n    let activeSeries = 0;\n    const pointsArr = w.globals.pointsArray;\n    const series = new Series(this.w);\n    const graphics = new Graphics(this.w);\n    activeSeries = series.getActiveConfigSeriesIndex(\"asc\", [\n      \"line\",\n      \"area\",\n      \"scatter\",\n      \"bubble\"\n    ]);\n    const hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(activeSeries);\n    if ((_a = pointsArr[activeSeries]) == null ? void 0 : _a[j]) {\n      cx = pointsArr[activeSeries][j][0];\n      cy = pointsArr[activeSeries][j][1];\n    }\n    if (isNaN(cx)) {\n      return;\n    }\n    const points = ttCtx.tooltipUtil.getAllMarkers();\n    if (points.length) {\n      for (let p = 0; p < w.seriesData.series.length; p++) {\n        const pointArr = pointsArr[p];\n        if (w.globals.comboCharts) {\n          if (typeof pointArr === \"undefined\") {\n            points.splice(p, 0, null);\n          }\n        }\n        if (pointArr && pointArr.length) {\n          let pcy = pointsArr[p][j][1];\n          let pcy2;\n          points[p].setAttribute(\"cx\", cx);\n          const shape = (_b = points[p].getAttribute(\"shape\")) != null ? _b : \"circle\";\n          if (w.config.chart.type === \"rangeArea\" && !w.globals.comboCharts) {\n            const rangeStartIndex = j + w.seriesData.series[p].length;\n            pcy2 = pointsArr[p][rangeStartIndex][1];\n            const pcyDiff = Math.abs(pcy - pcy2) / 2;\n            pcy = pcy - pcyDiff;\n          }\n          if (pcy !== null && !isNaN(pcy) && pcy < w.layout.gridHeight + hoverSize && pcy + hoverSize > 0) {\n            const path = graphics.getMarkerPath(cx, pcy, shape, hoverSize);\n            points[p].setAttribute(\"d\", path);\n          } else {\n            points[p].setAttribute(\"d\", \"\");\n          }\n        }\n      }\n    }\n    this.moveXCrosshairs(cx);\n    if (!ttCtx.fixedTooltip) {\n      this.moveTooltip(cx, cy || w.layout.gridHeight, hoverSize);\n    }\n  }\n  /**\n   * @param {number} j\n   * @param {number} capturedSeries\n   */\n  moveStickyTooltipOverBars(j, capturedSeries) {\n    var _a, _b, _c;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    let barLen = w.globals.columnSeries ? (\n      /** @type {any} */\n      w.globals.columnSeries.length\n    ) : w.seriesData.series.length;\n    if (w.config.chart.stacked) {\n      barLen = w.globals.barGroups.length;\n    }\n    let i = barLen >= 2 && barLen % 2 === 0 ? Math.floor(barLen / 2) : Math.floor(barLen / 2) + 1;\n    if (w.globals.isBarHorizontal) {\n      const series = new Series(this.w);\n      i = series.getActiveConfigSeriesIndex(\"desc\") + 1;\n    }\n    let jBar = w.dom.baseEl.querySelector(\n      `.apexcharts-bar-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-candlestick-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-boxPlot-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-violin-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-rangebar-series .apexcharts-series[rel='${i}'] path[j='${j}']`\n    );\n    if (!jBar && typeof capturedSeries === \"number\") {\n      jBar = w.dom.baseEl.querySelector(\n        `.apexcharts-bar-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-candlestick-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-boxPlot-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-violin-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-rangebar-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}']`\n      );\n    }\n    let bcx = jBar ? parseFloat((_a = jBar.getAttribute(\"cx\")) != null ? _a : \"0\") : 0;\n    let bcy = jBar ? parseFloat((_b = jBar.getAttribute(\"cy\")) != null ? _b : \"0\") : 0;\n    const bw = jBar ? parseFloat((_c = jBar.getAttribute(\"barWidth\")) != null ? _c : \"0\") : 0;\n    const elGrid = ttCtx.getElGrid();\n    if (!elGrid) return;\n    const seriesBound = elGrid.getBoundingClientRect();\n    const isBoxOrCandle = jBar && (jBar.classList.contains(\"apexcharts-candlestick-area\") || jBar.classList.contains(\"apexcharts-boxPlot-area\"));\n    if (w.axisFlags.isXNumeric) {\n      if (jBar && !isBoxOrCandle) {\n        const center = this._datapointCenterXFromBars(j, seriesBound);\n        if (center != null) {\n          bcx = center;\n        } else {\n          bcx = bcx - (barLen % 2 !== 0 ? bw / 2 : 0);\n        }\n      }\n      if (jBar && // fixes apexcharts.js#2354\n      isBoxOrCandle) {\n        bcx = bcx - bw / 2;\n      }\n    } else {\n      if (!w.globals.isBarHorizontal) {\n        bcx = ttCtx.xAxisTicksPositions[j - 1] + ttCtx.dataPointsDividedWidth / 2;\n        if (isNaN(bcx)) {\n          bcx = ttCtx.xAxisTicksPositions[j] - ttCtx.dataPointsDividedWidth / 2;\n        }\n      }\n    }\n    if (!w.globals.isBarHorizontal) {\n      if (w.config.tooltip.followCursor) {\n        bcy = ttCtx.e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2;\n      } else {\n        if (bcy + ttCtx.tooltipRect.ttHeight + 15 > w.layout.gridHeight) {\n          bcy = w.layout.gridHeight;\n        }\n      }\n    } else {\n      bcy = bcy - ttCtx.tooltipRect.ttHeight;\n    }\n    if (!w.globals.isBarHorizontal) {\n      this.moveXCrosshairs(bcx);\n    }\n    if (!ttCtx.fixedTooltip) {\n      if (w.globals.isBarHorizontal && !w.config.tooltip.followCursor) {\n        const placed = this.placeHorizontalSharedTooltip(j);\n        if (placed) return;\n      }\n      this.moveTooltip(bcx, bcy || w.layout.gridHeight);\n    }\n  }\n  /**\n   * Place tooltip above (or flipped: below) the union rect of all bars at\n   * dataPointIndex `j` for horizontal-bar-likes. Returns true when a\n   * Compute the true horizontal center of dataPointIndex `j` in grid-local\n   * coords from the union of every visible bar's `getBoundingClientRect()`.\n   * Used as a replacement for the (buggy on numeric/datetime xaxis) `cx`\n   * attribute math in `moveStickyTooltipOverBars`. Returns null when no\n   * usable bars are found.\n   * @param {number} j\n   * @param {DOMRect} gridRect\n   * @returns {number | null}\n   */\n  _datapointCenterXFromBars(j, gridRect) {\n    var _a, _b;\n    const w = this.w;\n    const bars = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-bar-series path[j='${j}'],.apexcharts-rangebar-series path[j='${j}']`\n    );\n    if (!bars.length) return null;\n    let unionLeft = Infinity;\n    let unionRight = -Infinity;\n    for (const bar of bars) {\n      const parent = (\n        /** @type {Element|null} */\n        bar.parentNode\n      );\n      if ((_b = (_a = parent == null ? void 0 : parent.classList) == null ? void 0 : _a.contains) == null ? void 0 : _b.call(_a, \"apexcharts-series-collapsed\")) continue;\n      const r = (\n        /** @type {Element} */\n        bar.getBoundingClientRect()\n      );\n      if (r.width === 0 && r.height === 0) continue;\n      if (r.left < unionLeft) unionLeft = r.left;\n      if (r.right > unionRight) unionRight = r.right;\n    }\n    if (!isFinite(unionLeft)) return null;\n    return (unionLeft + unionRight) / 2 - gridRect.left - (w.globals.barPadForNumericAxis || 0);\n  }\n  /**\n   * Place tooltip above (or flipped: below) the union rect of all bars at\n   * dataPointIndex `j` for horizontal-bar-likes. Returns true when a\n   * placement was applied; false when no bars found (caller falls back).\n   * @param {number} j\n   * @returns {boolean}\n   */\n  placeHorizontalSharedTooltip(j) {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (!tooltipEl) return false;\n    const elGrid = ttCtx.getElGrid();\n    if (!elGrid) return false;\n    const gridRect = elGrid.getBoundingClientRect();\n    const bars = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-bar-series path[j='${j}'],.apexcharts-rangebar-series path[j='${j}'],.apexcharts-boxPlot-series path[j='${j}']`\n    );\n    if (!bars.length) return false;\n    let unionLeft = Infinity;\n    let unionRight = -Infinity;\n    let unionTop = Infinity;\n    let unionBottom = -Infinity;\n    for (const bar of bars) {\n      const parent = (\n        /** @type {Element|null} */\n        bar.parentNode\n      );\n      if ((_b = (_a = parent == null ? void 0 : parent.classList) == null ? void 0 : _a.contains) == null ? void 0 : _b.call(_a, \"apexcharts-series-collapsed\")) continue;\n      const r = (\n        /** @type {Element} */\n        bar.getBoundingClientRect()\n      );\n      if (r.width === 0 && r.height === 0) continue;\n      if (r.left < unionLeft) unionLeft = r.left;\n      if (r.right > unionRight) unionRight = r.right;\n      if (r.top < unionTop) unionTop = r.top;\n      if (r.bottom > unionBottom) unionBottom = r.bottom;\n    }\n    if (!isFinite(unionLeft)) return false;\n    const ttW = ttCtx.tooltipRect.ttWidth || 0;\n    const ttH = ttCtx.tooltipRect.ttHeight || 0;\n    const ARROW_TIP_OVERHANG = 7;\n    const rowCenterX = (unionLeft + unionRight) / 2 - gridRect.left + w.layout.translateX;\n    const rowTopElWrap = unionTop - gridRect.top + w.layout.translateY;\n    const rowBottomElWrap = unionBottom - gridRect.top + w.layout.translateY;\n    const gridTop = w.layout.translateY;\n    const gridBottom = w.layout.translateY + w.layout.gridHeight;\n    const gridLeft = w.layout.translateX;\n    const gridRight = w.layout.translateX + w.layout.gridWidth;\n    let placement = \"top\";\n    let finalY = rowTopElWrap - ttH - ARROW_TIP_OVERHANG;\n    if (finalY < gridTop) {\n      const belowTop = rowBottomElWrap + ARROW_TIP_OVERHANG;\n      if (belowTop + ttH <= gridBottom) {\n        placement = \"bottom\";\n        finalY = belowTop;\n      }\n    }\n    let finalX = rowCenterX - ttW / 2;\n    if (finalX < gridLeft) finalX = gridLeft;\n    if (finalX + ttW > gridRight) finalX = gridRight - ttW;\n    const arrowX = Math.max(10, Math.min(ttW - 10, rowCenterX - finalX));\n    this.applyTooltipPosition(tooltipEl, {\n      x: finalX,\n      y: finalY,\n      placement,\n      arrowY: null,\n      arrowX\n    });\n    return true;\n  }\n}\nfunction renderMarkerSVG(shape) {\n  const svg = (body) => `<svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">${body}</svg>`;\n  switch (shape) {\n    case \"square\":\n    case \"rect\":\n      return svg('<rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" rx=\"1\" fill=\"currentColor\"/>');\n    case \"line\":\n      return svg('<rect x=\"0\" y=\"5\" width=\"12\" height=\"2\" rx=\"1\" fill=\"currentColor\"/>');\n    case \"diamond\":\n      return svg('<path d=\"M6 0.5 L11.5 6 L6 11.5 L0.5 6 Z\" fill=\"currentColor\"/>');\n    case \"triangle\":\n      return svg('<path d=\"M6 1 L11.2 10.5 L0.8 10.5 Z\" fill=\"currentColor\"/>');\n    case \"cross\":\n      return svg(\n        '<path d=\"M2 2 L10 10 M10 2 L2 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>'\n      );\n    case \"plus\":\n      return svg(\n        '<path d=\"M6 1 L6 11 M1 6 L11 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>'\n      );\n    case \"star\":\n      return svg(\n        '<path d=\"M6 0.5 L7.5 4.4 L11.5 4.7 L8.4 7.2 L9.5 11.1 L6 8.9 L2.5 11.1 L3.6 7.2 L0.5 4.7 L4.5 4.4 Z\" fill=\"currentColor\"/>'\n      );\n    case \"sparkle\":\n      return svg(\n        '<path d=\"M6 0.5 L7 5 L11.5 6 L7 7 L6 11.5 L5 7 L0.5 6 L5 5 Z\" fill=\"currentColor\"/>'\n      );\n    case \"circle\":\n    default:\n      return svg('<circle cx=\"6\" cy=\"6\" r=\"5\" fill=\"currentColor\"/>');\n  }\n}\nclass Marker {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n    this.ctx = tooltipContext.ctx;\n    this.tooltipPosition = new Position(tooltipContext);\n  }\n  drawDynamicPoints() {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const marker = new Markers(this.w, this.ctx);\n    const elsSeries = (\n      /** @type {any[]} */\n      [\n        ...w.dom.baseEl.querySelectorAll(\".apexcharts-series\")\n      ]\n    );\n    if (w.config.chart.stacked) {\n      elsSeries.sort((a, b) => {\n        return parseFloat(a.getAttribute(\"data:realIndex\")) - parseFloat(b.getAttribute(\"data:realIndex\"));\n      });\n    }\n    for (let i = 0; i < elsSeries.length; i++) {\n      const pointsMain = elsSeries[i].querySelector(\n        `.apexcharts-series-markers-wrap`\n      );\n      if (pointsMain !== null) {\n        let PointClasses = `apexcharts-marker w${(Math.random() + 1).toString(36).substring(4)}`;\n        if ((w.config.chart.type === \"line\" || w.config.chart.type === \"area\") && !w.globals.comboCharts && !w.config.tooltip.intersect) {\n          PointClasses += \" no-pointer-events\";\n        }\n        const elPointOptions = marker.getMarkerConfig({\n          cssClass: PointClasses,\n          seriesIndex: Number(pointsMain.getAttribute(\"data:realIndex\"))\n          // fixes apexcharts/apexcharts.js #1427\n        });\n        const point = graphics.drawMarker(0, 0, elPointOptions);\n        point.node.setAttribute(\"default-marker-size\", 0);\n        const elPointsG = BrowserAPIs.createElementNS(SVGNS, \"g\");\n        elPointsG.classList.add(\"apexcharts-series-markers\");\n        elPointsG.appendChild(point.node);\n        pointsMain.appendChild(elPointsG);\n      }\n    }\n  }\n  /**\n   * @param {any} rel\n   * @param {any} point\n   * @param {number | null} [x]\n   * @param {number | null} [y]\n   */\n  enlargeCurrentPoint(rel, point, x = null, y = null) {\n    const w = this.w;\n    if (w.config.chart.type !== \"bubble\") {\n      this.newPointSize(rel, point);\n    }\n    let cx = point.getAttribute(\"cx\");\n    let cy = point.getAttribute(\"cy\");\n    if (x !== null && y !== null) {\n      cx = x;\n      cy = y;\n    }\n    this.tooltipPosition.moveXCrosshairs(cx);\n    if (!this.fixedTooltip) {\n      if (w.config.chart.type === \"radar\") {\n        const elGrid = this.ttCtx.getElGrid();\n        if (!elGrid) return;\n        const seriesBound = elGrid.getBoundingClientRect();\n        cx = this.ttCtx.e.clientX - seriesBound.left;\n      }\n      this.tooltipPosition.moveTooltip(cx, cy, w.config.markers.hover.size);\n    }\n  }\n  /**\n   * @param {number} j\n   */\n  enlargePoints(j) {\n    var _a, _b;\n    const w = this.w;\n    const me = this;\n    const ttCtx = this.ttCtx;\n    const col = j;\n    const points = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"\n    );\n    let newSize = w.config.markers.hover.size;\n    for (let p = 0; p < points.length; p++) {\n      const rel = points[p].getAttribute(\"rel\");\n      const index = points[p].getAttribute(\"index\");\n      if (newSize === void 0) {\n        newSize = w.globals.markers.size[\n          /** @type {any} */\n          index\n        ] + w.config.markers.hover.sizeOffset;\n      }\n      if (col === parseInt(rel != null ? rel : \"0\", 10)) {\n        me.newPointSize(col, points[p]);\n        const cx = (_a = points[p].getAttribute(\"cx\")) != null ? _a : \"0\";\n        const cy = (_b = points[p].getAttribute(\"cy\")) != null ? _b : \"0\";\n        me.tooltipPosition.moveXCrosshairs(parseFloat(cx));\n        if (!ttCtx.fixedTooltip) {\n          me.tooltipPosition.moveTooltip(\n            parseFloat(cx),\n            parseFloat(cy),\n            newSize\n          );\n        }\n      } else {\n        me.oldPointSize(points[p]);\n      }\n    }\n  }\n  /**\n   * @param {any} rel\n   * @param {any} point\n   */\n  newPointSize(rel, point) {\n    const w = this.w;\n    let newSize = w.config.markers.hover.size;\n    const elPoint = rel === 0 ? point.parentNode.firstChild : point.parentNode.lastChild;\n    if (elPoint.getAttribute(\"default-marker-size\") !== \"0\") {\n      const index = parseInt(elPoint.getAttribute(\"index\"), 10);\n      if (newSize === void 0) {\n        newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset;\n      }\n      if (newSize < 0) {\n        newSize = 0;\n      }\n      const path = this.ttCtx.tooltipUtil.getPathFromPoint(point, newSize);\n      point.setAttribute(\"d\", path);\n    }\n  }\n  /**\n   * @param {any} point\n   */\n  oldPointSize(point) {\n    const size = parseFloat(point.getAttribute(\"default-marker-size\"));\n    const path = this.ttCtx.tooltipUtil.getPathFromPoint(point, size);\n    point.setAttribute(\"d\", path);\n  }\n  resetPointsSize() {\n    var _a;\n    const w = this.w;\n    const points = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"\n    );\n    for (let p = 0; p < points.length; p++) {\n      const size = parseFloat(\n        (_a = points[p].getAttribute(\"default-marker-size\")) != null ? _a : \"0\"\n      );\n      if (Utils$1.isNumber(size) && size > 0) {\n        const path = this.ttCtx.tooltipUtil.getPathFromPoint(points[p], size);\n        points[p].setAttribute(\"d\", path);\n      } else {\n        points[p].setAttribute(\"d\", \"M0,0\");\n      }\n    }\n  }\n}\nclass Intersect {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    const w = this.w;\n    this.ttCtx = tooltipContext;\n    this.isVerticalGroupedRangeBar = !w.globals.isBarHorizontal && w.config.chart.type === \"rangeBar\" && w.config.plotOptions.bar.rangeBarGroupRows;\n  }\n  // a helper function to get an element's attribute value\n  /**\n   * @param {Event} e\n   * @param {string} attr\n   */\n  getAttr(e, attr) {\n    var _a;\n    return parseFloat(\n      /** @type {Element} */\n      (_a = e.target.getAttribute(attr)) != null ? _a : \"\"\n    );\n  }\n  // handle tooltip for heatmaps and treemaps\n  /** @param {{e: any, opt: any, x: any, y: any, type: any}} opts */\n  handleHeatTreeTooltip({ e, opt, x, y, type }) {\n    var _a, _b;\n    const ttCtx = this.ttCtx;\n    const w = this.w;\n    if (e.target.classList.contains(`apexcharts-${type}-rect`)) {\n      const i = this.getAttr(e, \"i\");\n      const j = this.getAttr(e, \"j\");\n      const cx = this.getAttr(e, \"cx\");\n      const cy = this.getAttr(e, \"cy\");\n      const width = this.getAttr(e, \"width\");\n      const height = this.getAttr(e, \"height\");\n      ttCtx.tooltipLabels.drawSeriesTexts({\n        ttItems: opt.ttItems,\n        i,\n        j,\n        shared: false,\n        e\n      });\n      w.interact.capturedSeriesIndex = i;\n      w.interact.capturedDataPointIndex = j;\n      x = cx + ttCtx.tooltipRect.ttWidth / 2 + width;\n      y = cy + ttCtx.tooltipRect.ttHeight / 2 - height / 2;\n      ttCtx.tooltipPosition.moveXCrosshairs(cx + width / 2);\n      if (x > w.layout.gridWidth / 2) {\n        x = cx - ttCtx.tooltipRect.ttWidth / 2 + width;\n      }\n      if (ttCtx.w.config.tooltip.followCursor) {\n        const seriesBound = w.dom.elWrap.getBoundingClientRect();\n        x = ((_a = w.interact.clientX) != null ? _a : 0) - seriesBound.left - (x > w.layout.gridWidth / 2 ? ttCtx.tooltipRect.ttWidth : 0);\n        y = ((_b = w.interact.clientY) != null ? _b : 0) - seriesBound.top - (y > w.layout.gridHeight / 2 ? ttCtx.tooltipRect.ttHeight : 0);\n      }\n    }\n    return {\n      x,\n      y\n    };\n  }\n  /**\n   * handle tooltips for line/area/scatter charts where tooltip.intersect is true\n   * when user hovers over the marker directly, this function is executed\n   */\n  /** @param {{e: any, opt: any, x: any, y: any}} opts */\n  handleMarkerTooltip({ e, opt, x, y }) {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    let i;\n    let j;\n    if (e.target.classList.contains(\"apexcharts-marker\")) {\n      const cx = parseInt(opt.paths.getAttribute(\"cx\"), 10);\n      const cy = parseInt(opt.paths.getAttribute(\"cy\"), 10);\n      const val = parseFloat(opt.paths.getAttribute(\"val\"));\n      j = parseInt(opt.paths.getAttribute(\"rel\"), 10);\n      i = parseInt(\n        opt.paths.parentNode.parentNode.parentNode.getAttribute(\"rel\"),\n        10\n      ) - 1;\n      if (ttCtx.intersect) {\n        const el = Utils$1.findAncestor(opt.paths, \"apexcharts-series\");\n        if (el) {\n          i = parseInt(el.getAttribute(\"data:realIndex\"), 10);\n        }\n      }\n      ttCtx.tooltipLabels.drawSeriesTexts({\n        ttItems: opt.ttItems,\n        i,\n        j,\n        shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared,\n        e\n      });\n      if (e.type === \"mouseup\") {\n        ttCtx.markerClick(e, i, j);\n      }\n      w.interact.capturedSeriesIndex = i;\n      w.interact.capturedDataPointIndex = j;\n      const arrowEnabled = !!w.config.tooltip.arrow;\n      x = cx;\n      if (arrowEnabled) {\n        y = cy;\n      } else {\n        y = cy + w.layout.translateY - ttCtx.tooltipRect.ttHeight * 1.4;\n        if (val < 0) {\n          y = cy;\n        }\n      }\n      if (ttCtx.w.config.tooltip.followCursor) {\n        const elGrid = ttCtx.getElGrid();\n        if (!elGrid) return { x, y };\n        const seriesBound = elGrid.getBoundingClientRect();\n        y = ttCtx.e.clientY + w.layout.translateY - seriesBound.top;\n      }\n      ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y);\n    }\n    return {\n      x,\n      y\n    };\n  }\n  /**\n   * handle tooltips for bar/column charts\n   */\n  /** @param {{e: any, opt: any}} opts */\n  handleBarTooltip({ e, opt }) {\n    var _a, _b, _c;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const tooltipEl = ttCtx.getElTooltip();\n    let bx = 0;\n    let x = 0;\n    let y = 0;\n    let i = 0;\n    let strokeWidth;\n    const barXY = this.getBarTooltipXY({\n      e,\n      opt\n    });\n    if (barXY.j === null && barXY.barHeight === 0 && barXY.barWidth === 0) {\n      return;\n    }\n    i = barXY.i;\n    const j = barXY.j;\n    w.interact.capturedSeriesIndex = i;\n    w.interact.capturedDataPointIndex = j !== null ? j : w.interact.capturedDataPointIndex;\n    if (w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars() || !w.config.tooltip.shared) {\n      x = barXY.x;\n      y = barXY.y;\n      strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width;\n      bx = x;\n    } else {\n      if (!w.globals.comboCharts && !w.config.tooltip.shared) {\n        bx = bx / 2;\n      }\n    }\n    if (isNaN(y)) {\n      y = w.globals.svgHeight - ttCtx.tooltipRect.ttHeight;\n    }\n    if (x + ttCtx.tooltipRect.ttWidth > w.layout.gridWidth) {\n      x = x - ttCtx.tooltipRect.ttWidth;\n    } else if (x < 0) {\n      x = 0;\n    }\n    if (ttCtx.w.config.tooltip.followCursor) {\n      const elGrid = ttCtx.getElGrid();\n      if (!elGrid) return;\n    }\n    if (ttCtx.tooltip === null) {\n      ttCtx.tooltip = w.dom.baseEl.querySelector(\".apexcharts-tooltip\");\n    }\n    if (!w.config.tooltip.shared) {\n      if (w.globals.comboBarCount > 0) {\n        ttCtx.tooltipPosition.moveXCrosshairs(bx + strokeWidth / 2);\n      } else {\n        ttCtx.tooltipPosition.moveXCrosshairs(bx);\n      }\n    }\n    if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars())) {\n      y = y + w.layout.translateY - ttCtx.tooltipRect.ttHeight / 2;\n      if (tooltipEl) {\n        const ttW = ttCtx.tooltipRect.ttWidth || 0;\n        const ttH = ttCtx.tooltipRect.ttHeight || 0;\n        const arrowEnabled = !!w.config.tooltip.arrow;\n        const { barAnchorXInGrid, barAnchorYInGrid, barRectInGrid } = barXY;\n        const ARROW_TIP_OVERHANG = 7;\n        const elGridRect = (_a = ttCtx.getElGrid()) == null ? void 0 : _a.getBoundingClientRect();\n        const elWrapRect = w.dom.elWrap.getBoundingClientRect();\n        const gridOffsetXInElWrap = elGridRect ? elGridRect.left - elWrapRect.left : w.layout.translateX;\n        let placement;\n        let arrowY = null;\n        let arrowX = null;\n        let finalX = x + gridOffsetXInElWrap;\n        let finalY = y;\n        if (arrowEnabled && w.globals.isBarHorizontal && barRectInGrid != null) {\n          const gridTop = w.layout.translateY;\n          const gridBottom = w.layout.translateY + w.layout.gridHeight;\n          const gridLeft = gridOffsetXInElWrap;\n          const gridRight = gridOffsetXInElWrap + w.layout.gridWidth;\n          const barCenterXInElWrap = (barRectInGrid.left + barRectInGrid.right) / 2 + gridOffsetXInElWrap;\n          const barTopInElWrap = barRectInGrid.top + w.layout.translateY;\n          const barBottomInElWrap = barRectInGrid.bottom + w.layout.translateY;\n          let proposedTop = barTopInElWrap - ttH - ARROW_TIP_OVERHANG;\n          placement = \"top\";\n          if (proposedTop < gridTop) {\n            const belowTop = barBottomInElWrap + ARROW_TIP_OVERHANG;\n            if (belowTop + ttH <= gridBottom) {\n              placement = \"bottom\";\n              proposedTop = belowTop;\n            }\n          }\n          finalY = proposedTop;\n          finalX = barCenterXInElWrap - ttW / 2;\n          if (finalX < gridLeft) finalX = gridLeft;\n          if (finalX + ttW > gridRight) finalX = gridRight - ttW;\n          arrowX = Math.max(\n            10,\n            Math.min(ttW - 10, barCenterXInElWrap - finalX)\n          );\n        } else if (arrowEnabled && barAnchorXInGrid != null && barAnchorYInGrid != null) {\n          const barCenterXInElWrap = barAnchorXInGrid + gridOffsetXInElWrap;\n          const gridCenterXInElWrap = gridOffsetXInElWrap + w.layout.gridWidth / 2;\n          const barLeftInElWrap = ((_b = barRectInGrid == null ? void 0 : barRectInGrid.left) != null ? _b : barAnchorXInGrid) + gridOffsetXInElWrap;\n          const barRightInElWrap = ((_c = barRectInGrid == null ? void 0 : barRectInGrid.right) != null ? _c : barAnchorXInGrid) + gridOffsetXInElWrap;\n          if (barCenterXInElWrap < gridCenterXInElWrap) {\n            placement = \"right\";\n            finalX = barRightInElWrap + ARROW_TIP_OVERHANG;\n          } else {\n            placement = \"left\";\n            finalX = barLeftInElWrap - ttW - ARROW_TIP_OVERHANG;\n          }\n          if (barRectInGrid) {\n            const barCenterYInElWrap = (barRectInGrid.top + barRectInGrid.bottom) / 2 + w.layout.translateY;\n            finalY = barCenterYInElWrap - ttH / 2;\n            const gridTop = w.layout.translateY;\n            const gridBottom = w.layout.translateY + w.layout.gridHeight;\n            if (finalY < gridTop) finalY = gridTop;\n            if (finalY + ttH > gridBottom) finalY = gridBottom - ttH;\n          }\n          if (ttH > 0 && barRectInGrid) {\n            const barCenterYInElWrap = (barRectInGrid.top + barRectInGrid.bottom) / 2 + w.layout.translateY;\n            arrowY = Math.max(\n              10,\n              Math.min(ttH - 10, barCenterYInElWrap - finalY)\n            );\n          }\n        }\n        ttCtx.tooltipPosition.applyTooltipPosition(tooltipEl, {\n          x: finalX,\n          y: finalY,\n          placement,\n          arrowY,\n          arrowX\n        });\n      }\n    }\n  }\n  /** @param {{e: any, opt: any}} opts */\n  getBarTooltipXY({ e, opt }) {\n    const w = this.w;\n    let j = null;\n    const ttCtx = this.ttCtx;\n    let i = 0;\n    let x = 0;\n    let y = 0;\n    let barWidth = 0;\n    let barHeight = 0;\n    let barCx = null;\n    let barCy = null;\n    let barAnchorXInGrid = null;\n    let barAnchorYInGrid = null;\n    let barRectInGrid = null;\n    const cl = e.target.classList;\n    if (cl.contains(\"apexcharts-bar-area\") || cl.contains(\"apexcharts-candlestick-area\") || cl.contains(\"apexcharts-boxPlot-area\") || cl.contains(\"apexcharts-rangebar-area\")) {\n      const bar = e.target;\n      const barRect = bar.getBoundingClientRect();\n      const seriesBound = opt.elGrid.getBoundingClientRect();\n      const bh = barRect.height;\n      barHeight = barRect.height;\n      const bw = barRect.width;\n      const cx = parseInt(bar.getAttribute(\"cx\"), 10);\n      const cy = parseInt(bar.getAttribute(\"cy\"), 10);\n      barCx = cx;\n      barCy = cy;\n      barWidth = parseFloat(bar.getAttribute(\"barWidth\"));\n      const rectLeftInGrid = barRect.left - seriesBound.left;\n      const rectTopInGrid = barRect.top - seriesBound.top;\n      const rectCenterXInGrid = rectLeftInGrid + bw / 2;\n      const rectCenterYInGrid = rectTopInGrid + bh / 2;\n      barAnchorXInGrid = rectCenterXInGrid;\n      barAnchorYInGrid = w.globals.isBarHorizontal ? rectCenterYInGrid : rectTopInGrid;\n      barRectInGrid = {\n        left: rectLeftInGrid,\n        top: rectTopInGrid,\n        right: rectLeftInGrid + bw,\n        bottom: rectTopInGrid + bh\n      };\n      const clientX = e.type === \"touchmove\" ? e.touches[0].clientX : e.clientX;\n      j = parseInt(bar.getAttribute(\"j\"), 10);\n      i = parseInt(bar.parentNode.getAttribute(\"rel\"), 10) - 1;\n      const y1 = bar.getAttribute(\"data-range-y1\");\n      const y2 = bar.getAttribute(\"data-range-y2\");\n      if (w.globals.comboCharts) {\n        i = parseInt(bar.parentNode.getAttribute(\"data:realIndex\"), 10);\n      }\n      const handleXForColumns = (x2) => {\n        if (w.axisFlags.isXNumeric) {\n          x2 = cx - bw / 2;\n        } else {\n          if (this.isVerticalGroupedRangeBar) {\n            x2 = cx + bw / 2;\n          } else {\n            x2 = cx - ttCtx.dataPointsDividedWidth + bw / 2;\n          }\n        }\n        return x2;\n      };\n      const handleYForBars = () => {\n        return cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2;\n      };\n      ttCtx.tooltipLabels.drawSeriesTexts({\n        ttItems: opt.ttItems,\n        i,\n        j,\n        y1: y1 ? parseInt(y1, 10) : null,\n        y2: y2 ? parseInt(y2, 10) : null,\n        shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared,\n        e\n      });\n      if (w.config.tooltip.followCursor) {\n        if (w.globals.isBarHorizontal) {\n          x = clientX - seriesBound.left + 15;\n          y = handleYForBars();\n        } else {\n          x = handleXForColumns(x);\n          y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15;\n        }\n      } else {\n        if (w.globals.isBarHorizontal) {\n          x = cx;\n          if (ttCtx.xyRatios && x < ttCtx.xyRatios.baseLineInvertedY) {\n            x = cx - ttCtx.tooltipRect.ttWidth;\n          }\n          y = handleYForBars();\n        } else {\n          x = handleXForColumns(x);\n          y = cy;\n        }\n      }\n    }\n    return {\n      x,\n      y,\n      barHeight,\n      barWidth,\n      i,\n      j,\n      // SVG attribute values — left for any caller that still wants them.\n      barCx,\n      barCy,\n      // Arrow anchor in grid-local coords (rect-derived; column→top,\n      // horizontal→center). Used by handleBarTooltip to place the arrow\n      // exactly on the bar's data point.\n      barAnchorXInGrid,\n      barAnchorYInGrid,\n      // Full rendered bar rect (grid-local). Used for top/bottom\n      // placement and flip-on-overflow detection.\n      barRectInGrid\n    };\n  }\n}\nclass AxesTooltip {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n  }\n  /**\n   * This method adds the secondary tooltip which appears below x axis\n   * @memberof Tooltip\n   **/\n  drawXaxisTooltip() {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const isBottom = w.config.xaxis.position === \"bottom\";\n    ttCtx.xaxisOffY = isBottom ? w.layout.gridHeight + 1 : -w.layout.xAxisHeight - w.config.xaxis.axisTicks.height + 3;\n    const tooltipCssClass = isBottom ? \"apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom\" : \"apexcharts-xaxistooltip apexcharts-xaxistooltip-top\";\n    const renderTo = w.dom.elWrap;\n    if (ttCtx.isXAxisTooltipEnabled) {\n      const xaxisTooltip = w.dom.baseEl.querySelector(\n        \".apexcharts-xaxistooltip\"\n      );\n      if (xaxisTooltip === null) {\n        ttCtx.xaxisTooltip = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        ttCtx.xaxisTooltip.setAttribute(\n          \"class\",\n          tooltipCssClass + \" apexcharts-theme-\" + w.config.tooltip.theme\n        );\n        renderTo.appendChild(ttCtx.xaxisTooltip);\n        ttCtx.xaxisTooltipText = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        ttCtx.xaxisTooltipText.classList.add(\"apexcharts-xaxistooltip-text\");\n        ttCtx.xaxisTooltipText.style.fontFamily = w.config.xaxis.tooltip.style.fontFamily || w.config.chart.fontFamily;\n        ttCtx.xaxisTooltipText.style.fontSize = w.config.xaxis.tooltip.style.fontSize;\n        ttCtx.xaxisTooltip.appendChild(ttCtx.xaxisTooltipText);\n      }\n    }\n  }\n  /**\n   * This method adds the secondary tooltip which appears below x axis\n   * @memberof Tooltip\n   **/\n  drawYaxisTooltip() {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    for (let i = 0; i < w.config.yaxis.length; i++) {\n      const isRight = w.config.yaxis[i].opposite || w.config.yaxis[i].crosshairs.opposite;\n      ttCtx.yaxisOffX = isRight ? w.layout.gridWidth + 1 : 1;\n      const tooltipCssClass = isRight ? `apexcharts-yaxistooltip apexcharts-yaxistooltip-${i} apexcharts-yaxistooltip-right` : `apexcharts-yaxistooltip apexcharts-yaxistooltip-${i} apexcharts-yaxistooltip-left`;\n      const renderTo = w.dom.elWrap;\n      const yaxisTooltip = w.dom.baseEl.querySelector(\n        `.apexcharts-yaxistooltip apexcharts-yaxistooltip-${i}`\n      );\n      if (yaxisTooltip === null) {\n        ttCtx.yaxisTooltip = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        ttCtx.yaxisTooltip.setAttribute(\n          \"class\",\n          tooltipCssClass + \" apexcharts-theme-\" + w.config.tooltip.theme\n        );\n        renderTo.appendChild(ttCtx.yaxisTooltip);\n        if (i === 0) ttCtx.yaxisTooltipText = [];\n        ttCtx.yaxisTooltipText[i] = BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\");\n        ttCtx.yaxisTooltipText[i].classList.add(\n          \"apexcharts-yaxistooltip-text\"\n        );\n        ttCtx.yaxisTooltip.appendChild(\n          /** @type {any} */\n          ttCtx.yaxisTooltipText[i]\n        );\n      }\n    }\n  }\n  /**\n   * @memberof Tooltip\n   **/\n  setXCrosshairWidth() {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const xcrosshairs = ttCtx.getElXCrosshairs();\n    ttCtx.xcrosshairsWidth = parseInt(w.config.xaxis.crosshairs.width, 10);\n    if (!w.globals.comboCharts) {\n      if (w.config.xaxis.crosshairs.width === \"tickWidth\") {\n        const count = w.labelData.labels.length;\n        ttCtx.xcrosshairsWidth = w.layout.gridWidth / count;\n      } else if (w.config.xaxis.crosshairs.width === \"barWidth\") {\n        const bar = w.dom.baseEl.querySelector(\".apexcharts-bar-area\");\n        if (bar !== null) {\n          const barWidth = parseFloat((_a = bar.getAttribute(\"barWidth\")) != null ? _a : \"0\");\n          ttCtx.xcrosshairsWidth = barWidth;\n        } else {\n          ttCtx.xcrosshairsWidth = 1;\n        }\n      }\n    } else {\n      const bar = w.dom.baseEl.querySelector(\".apexcharts-bar-area\");\n      if (bar !== null && w.config.xaxis.crosshairs.width === \"barWidth\") {\n        const barWidth = parseFloat((_b = bar.getAttribute(\"barWidth\")) != null ? _b : \"0\");\n        ttCtx.xcrosshairsWidth = barWidth;\n      } else {\n        if (w.config.xaxis.crosshairs.width === \"tickWidth\") {\n          const count = w.labelData.labels.length;\n          ttCtx.xcrosshairsWidth = w.layout.gridWidth / count;\n        }\n      }\n    }\n    if (w.globals.isBarHorizontal) {\n      ttCtx.xcrosshairsWidth = 0;\n    }\n    if (xcrosshairs !== null && ttCtx.xcrosshairsWidth > 0) {\n      xcrosshairs.setAttribute(\"width\", String(ttCtx.xcrosshairsWidth));\n    }\n  }\n  handleYCrosshair() {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    ttCtx.ycrosshairs = w.dom.baseEl.querySelector(\".apexcharts-ycrosshairs\");\n    ttCtx.ycrosshairsHidden = w.dom.baseEl.querySelector(\n      \".apexcharts-ycrosshairs-hidden\"\n    );\n  }\n  /**\n   * @param {number} index\n   * @param {number} clientY\n   * @param {import('../../types/internal').XYRatios} xyRatios\n   */\n  drawYaxisTooltipText(index, clientY, xyRatios) {\n    const ttCtx = this.ttCtx;\n    const w = this.w;\n    const gl = w.globals;\n    const yAxisSeriesArr = gl.seriesYAxisMap[index];\n    if (ttCtx.yaxisTooltips[index] && yAxisSeriesArr.length > 0) {\n      const lbFormatter = w.formatters.yLabelFormatters[index];\n      const elGrid = ttCtx.getElGrid();\n      if (!elGrid) return;\n      const seriesBound = elGrid.getBoundingClientRect();\n      const seriesIndex = yAxisSeriesArr[0];\n      let translationsIndex = 0;\n      if (xyRatios.yRatio.length > 1) {\n        translationsIndex = seriesIndex;\n      }\n      const hoverY = (clientY - seriesBound.top) * xyRatios.yRatio[translationsIndex];\n      const height = gl.maxYArr[seriesIndex] - gl.minYArr[seriesIndex];\n      let val = gl.minYArr[seriesIndex] + (height - hoverY);\n      if (w.config.yaxis[index].reversed) {\n        val = gl.maxYArr[seriesIndex] - (height - hoverY);\n      }\n      ttCtx.tooltipPosition.moveYCrosshairs(clientY - seriesBound.top);\n      ttCtx.yaxisTooltipText[index].innerHTML = lbFormatter(val);\n      ttCtx.tooltipPosition.moveYAxisTooltip(index);\n    }\n  }\n}\nclass Tooltip {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.tConfig = w.config.tooltip;\n    this.tooltipUtil = new Utils2(this);\n    this.tooltipLabels = new Labels(this);\n    this.tooltipPosition = new Position(this);\n    this.marker = new Marker(this);\n    this.intersect = new Intersect(this);\n    this.axesTooltip = new AxesTooltip(this);\n    this.showOnIntersect = this.tConfig.intersect;\n    this.showTooltipTitle = this.tConfig.x.show;\n    this.fixedTooltip = this.tConfig.fixed.enabled;\n    this.xaxisTooltip = null;\n    this.xaxisTooltipText = null;\n    this.yaxisTooltip = null;\n    this.yaxisTooltipText = null;\n    this.yaxisTTEls = null;\n    this.xaxisOffY = 0;\n    this.yaxisOffX = 0;\n    this.xcrosshairsWidth = 0;\n    this.ycrosshairs = null;\n    this.ycrosshairsHidden = null;\n    this.tooltip = null;\n    this.e = null;\n    this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared;\n    this.lastHoverTime = Date.now();\n    this.dimensionUpdateScheduled = false;\n    this.xyRatios = null;\n    this.isXAxisTooltipEnabled = false;\n    this.yaxisTooltips = [];\n    this.allTooltipSeriesGroups = [];\n    this.xAxisTicksPositions = null;\n    this.dataPointsDividedHeight = 0;\n    this.dataPointsDividedWidth = 0;\n    this.tooltipTitle = null;\n    this.legendLabels = null;\n    this.ttItems = null;\n    this.seriesBound = null;\n    this.seriesHoverTimeout = void 0;\n    this.clientX = 0;\n    this.clientY = 0;\n    this.barSeriesHeight = 0;\n    this.tooltipRect = { x: 0, y: 0, ttWidth: 0, ttHeight: 0 };\n  }\n  setupDimensionCache() {\n    const w = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    this.updateDimensionCache();\n    if (typeof ResizeObserver !== \"undefined\" && !w.globals.resizeObserver) {\n      w.globals.resizeObserver = new ResizeObserver(() => {\n        if (!this.dimensionUpdateScheduled) {\n          this.dimensionUpdateScheduled = true;\n          requestAnimationFrame(() => {\n            this.updateDimensionCache();\n            this.dimensionUpdateScheduled = false;\n          });\n        }\n      });\n      w.globals.resizeObserver.observe(tooltipEl);\n    }\n  }\n  updateDimensionCache() {\n    const w = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const rect = tooltipEl.getBoundingClientRect();\n    w.globals.dimensionCache.tooltip = /** @type {any} */\n    {\n      width: rect.width,\n      height: rect.height,\n      lastUpdate: Date.now()\n    };\n  }\n  getCachedDimensions() {\n    const w = this.w;\n    if (w.globals.dimensionCache.tooltip) {\n      const cache2 = (\n        /** @type {Record<string,any>} */\n        w.globals.dimensionCache.tooltip\n      );\n      const age = Date.now() - cache2.lastUpdate;\n      if (age < 1e3) {\n        return {\n          ttWidth: cache2.width,\n          ttHeight: cache2.height\n        };\n      }\n    }\n    this.updateDimensionCache();\n    const cache = (\n      /** @type {Record<string,any>} */\n      w.globals.dimensionCache.tooltip\n    );\n    return cache ? {\n      ttWidth: cache.width,\n      ttHeight: cache.height\n    } : { ttWidth: 0, ttHeight: 0 };\n  }\n  /**\n   * @param {{ w: import('../../types/internal').ChartStateW }} [ctx]\n   * @returns {HTMLElement | null}\n   */\n  getElTooltip(ctx) {\n    if (!ctx) ctx = this;\n    if (!ctx.w.dom.baseEl) return null;\n    return (\n      /** @type {HTMLElement | null} */\n      ctx.w.dom.baseEl.querySelector(\".apexcharts-tooltip\")\n    );\n  }\n  getElXCrosshairs() {\n    return this.w.dom.baseEl.querySelector(\".apexcharts-xcrosshairs\");\n  }\n  getElGrid() {\n    return this.w.dom.baseEl.querySelector(\".apexcharts-grid\");\n  }\n  /**\n   * @param {import('../../types/internal').XYRatios} xyRatios\n   */\n  drawTooltip(xyRatios) {\n    const w = this.w;\n    this.xyRatios = xyRatios;\n    this.isXAxisTooltipEnabled = w.config.xaxis.tooltip.enabled && w.globals.axisCharts;\n    this.yaxisTooltips = w.config.yaxis.map((y) => {\n      return y.show && y.tooltip.enabled && w.globals.axisCharts ? true : false;\n    });\n    this.allTooltipSeriesGroups = [];\n    if (!w.globals.axisCharts) {\n      this.showTooltipTitle = false;\n    }\n    const existingTooltip = this.getElTooltip();\n    if (existingTooltip == null ? void 0 : existingTooltip.parentNode) {\n      existingTooltip.parentNode.removeChild(existingTooltip);\n    }\n    this.tooltipTitle = null;\n    const tooltipEl = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/1999/xhtml\",\n      \"div\"\n    );\n    tooltipEl.classList.add(\"apexcharts-tooltip\");\n    if (w.config.tooltip.cssClass) {\n      tooltipEl.classList.add(w.config.tooltip.cssClass);\n    }\n    tooltipEl.classList.add(`apexcharts-theme-${this.tConfig.theme || \"light\"}`);\n    if (this.tConfig.fillSeriesColor) {\n      tooltipEl.classList.add(\"apexcharts-tooltip-fill-series\");\n    }\n    if (this.tConfig.style && this.tConfig.style.background) {\n      tooltipEl.style.setProperty(\n        \"--apx-tt-bg\",\n        this.tConfig.style.background\n      );\n    }\n    const isSharedMulti = this.tConfig.shared && w.config.series.length > 1 && !w.globals.isBarHorizontal;\n    const shouldDrawArrow = this.tConfig.arrow && !this.tConfig.followCursor && !this.tConfig.fixed.enabled && !isSharedMulti && !this.tConfig.fillSeriesColor && w.globals.axisCharts;\n    if (shouldDrawArrow) {\n      const arrowEl = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      arrowEl.classList.add(\"apexcharts-tooltip-arrow\");\n      tooltipEl.appendChild(arrowEl);\n    }\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n      tooltipEl.setAttribute(\"role\", \"tooltip\");\n      tooltipEl.setAttribute(\"aria-live\", \"polite\");\n      tooltipEl.setAttribute(\"aria-atomic\", \"true\");\n      tooltipEl.setAttribute(\"aria-hidden\", \"true\");\n    }\n    w.dom.elWrap.appendChild(tooltipEl);\n    if (w.globals.axisCharts) {\n      this.axesTooltip.drawXaxisTooltip();\n      this.axesTooltip.drawYaxisTooltip();\n      this.axesTooltip.setXCrosshairWidth();\n      this.axesTooltip.handleYCrosshair();\n      const xAxis = new XAxis(this.w, this.ctx, void 0);\n      this.xAxisTicksPositions = xAxis.getXAxisTicksPositions();\n    }\n    if ((w.globals.comboCharts || this.tConfig.intersect || w.config.chart.type === \"rangeBar\") && !this.tConfig.shared) {\n      this.showOnIntersect = true;\n    }\n    if (w.config.markers.size === 0 || w.globals.markers.largestSize === 0) {\n      this.marker.drawDynamicPoints();\n    }\n    if (w.globals.collapsedSeries.length === w.seriesData.series.length) return;\n    this.dataPointsDividedHeight = w.layout.gridHeight / w.globals.dataPoints;\n    this.dataPointsDividedWidth = w.layout.gridWidth / w.globals.dataPoints;\n    if (this.showTooltipTitle) {\n      this.tooltipTitle = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      this.tooltipTitle.classList.add(\"apexcharts-tooltip-title\");\n      this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily;\n      this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize;\n      tooltipEl.appendChild(this.tooltipTitle);\n    }\n    let ttItemsCnt = w.seriesData.series.length;\n    if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) {\n      if (!this.showOnIntersect) {\n        ttItemsCnt = w.seriesData.series.length;\n      } else {\n        ttItemsCnt = 1;\n      }\n    }\n    this.legendLabels = w.dom.baseEl.querySelectorAll(\".apexcharts-legend-text\");\n    this.ttItems = this.createTTElements(ttItemsCnt);\n    this.addSVGEvents();\n    this.setupDimensionCache();\n  }\n  /**\n   * @param {number} ttItemsCnt\n   */\n  createTTElements(ttItemsCnt) {\n    const w = this.w;\n    const ttItems = [];\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return ttItems;\n    for (let i = 0; i < ttItemsCnt; i++) {\n      const gTxt = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      gTxt.classList.add(\n        \"apexcharts-tooltip-series-group\",\n        `apexcharts-tooltip-series-group-${i}`\n      );\n      gTxt.style.order = String(\n        w.config.tooltip.inverseOrder ? ttItemsCnt - i : i + 1\n      );\n      const point = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"span\"\n      );\n      point.classList.add(\"apexcharts-tooltip-marker\");\n      if (w.config.tooltip.fillSeriesColor) {\n        point.style.backgroundColor = w.globals.colors[i];\n      } else {\n        point.style.color = w.globals.colors[i];\n      }\n      const mShape = w.config.markers.shape;\n      let shape = mShape;\n      if (Array.isArray(mShape)) {\n        shape = mShape[i];\n      }\n      point.setAttribute(\"shape\", shape);\n      point.innerHTML = renderMarkerSVG(shape);\n      gTxt.appendChild(point);\n      const gYZ = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      gYZ.classList.add(\"apexcharts-tooltip-text\");\n      gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily;\n      gYZ.style.fontSize = this.tConfig.style.fontSize;\n      [\"y\", \"goals\", \"z\"].forEach((g) => {\n        const gValText = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        gValText.classList.add(`apexcharts-tooltip-${g}-group`);\n        const txtLabel = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"span\"\n        );\n        txtLabel.classList.add(`apexcharts-tooltip-text-${g}-label`);\n        gValText.appendChild(txtLabel);\n        const txtValue = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"span\"\n        );\n        txtValue.classList.add(`apexcharts-tooltip-text-${g}-value`);\n        gValText.appendChild(txtValue);\n        gYZ.appendChild(gValText);\n      });\n      gTxt.appendChild(gYZ);\n      tooltipEl.appendChild(gTxt);\n      ttItems.push(gTxt);\n    }\n    return ttItems;\n  }\n  addSVGEvents() {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const commonBar = !!(type === \"bar\" || type === \"candlestick\" || type === \"boxPlot\" || type === \"violin\" || type === \"rangeBar\");\n    const chartWithmarkers = type === \"area\" || type === \"line\" || type === \"scatter\" || type === \"bubble\" || type === \"radar\";\n    const hoverArea = w.dom.Paper.node;\n    const elGrid = this.getElGrid();\n    if (elGrid) {\n      this.seriesBound = elGrid.getBoundingClientRect();\n    }\n    const tooltipY = [];\n    const tooltipX = [];\n    const seriesHoverParams = {\n      hoverArea,\n      elGrid,\n      tooltipEl,\n      tooltipY,\n      tooltipX,\n      ttItems: this.ttItems\n    };\n    let points;\n    if (w.globals.axisCharts) {\n      if (chartWithmarkers) {\n        points = w.dom.baseEl.querySelectorAll(\n          \".apexcharts-series[data\\\\:longestSeries='true'] .apexcharts-marker\"\n        );\n      } else if (commonBar) {\n        points = w.dom.baseEl.querySelectorAll(\n          \".apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-boxPlot-area, .apexcharts-series .apexcharts-violin-area, .apexcharts-series .apexcharts-rangebar-area\"\n        );\n      } else if (type === \"heatmap\" || type === \"treemap\") {\n        points = w.dom.baseEl.querySelectorAll(\n          \".apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap\"\n        );\n      }\n      if (points && points.length) {\n        for (let p = 0; p < points.length; p++) {\n          tooltipY.push(points[p].getAttribute(\"cy\"));\n          tooltipX.push(points[p].getAttribute(\"cx\"));\n        }\n      }\n    }\n    const validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.tooltipUtil.hasBars() && this.tConfig.shared;\n    if (validSharedChartTypes) {\n      this.addPathsEventListeners([hoverArea], seriesHoverParams);\n    } else if (commonBar && !w.globals.comboCharts || chartWithmarkers && this.showOnIntersect) {\n      this.addDatapointEventsListeners(seriesHoverParams);\n    } else if (!w.globals.axisCharts || type === \"heatmap\" || type === \"treemap\") {\n      const seriesAll = w.dom.baseEl.querySelectorAll(\".apexcharts-series\");\n      this.addPathsEventListeners(seriesAll, seriesHoverParams);\n    }\n    if (this.showOnIntersect) {\n      const lineAreaPoints = w.dom.baseEl.querySelectorAll(\n        \".apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker\"\n      );\n      if (lineAreaPoints.length > 0) {\n        this.addPathsEventListeners(lineAreaPoints, seriesHoverParams);\n      }\n      if (this.tooltipUtil.hasBars() && !this.tConfig.shared) {\n        this.addDatapointEventsListeners(seriesHoverParams);\n      }\n    }\n  }\n  drawFixedTooltipRect() {\n    const w = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return { x: 0, y: 0, ttWidth: 0, ttHeight: 0 };\n    const tooltipRect = tooltipEl.getBoundingClientRect();\n    const ttWidth = tooltipRect.width + 10;\n    const ttHeight = tooltipRect.height + 10;\n    let x = this.tConfig.fixed.offsetX;\n    let y = this.tConfig.fixed.offsetY;\n    const fixed = this.tConfig.fixed.position.toLowerCase();\n    if (fixed.indexOf(\"right\") > -1) {\n      x = x + w.globals.svgWidth - ttWidth + 10;\n    }\n    if (fixed.indexOf(\"bottom\") > -1) {\n      y = y + w.globals.svgHeight - ttHeight - 10;\n    }\n    this.tooltipPosition.applyTooltipPosition(tooltipEl, { x, y });\n    return {\n      x,\n      y,\n      ttWidth,\n      ttHeight\n    };\n  }\n  /**\n   * @param {Record<string, any>} seriesHoverParams\n   */\n  addDatapointEventsListeners(seriesHoverParams) {\n    const w = this.w;\n    const points = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area\"\n    );\n    this.addPathsEventListeners(points, seriesHoverParams);\n  }\n  /**\n   * @param {any} paths\n   * @param {Record<string, any>} opts\n   */\n  addPathsEventListeners(paths, opts) {\n    const self = this;\n    for (let p = 0; p < paths.length; p++) {\n      const extendedOpts = {\n        paths: paths[p],\n        tooltipEl: opts.tooltipEl,\n        tooltipY: opts.tooltipY,\n        tooltipX: opts.tooltipX,\n        elGrid: opts.elGrid,\n        hoverArea: opts.hoverArea,\n        ttItems: opts.ttItems\n      };\n      const events = [\n        \"mousemove\",\n        \"mouseup\",\n        \"touchmove\",\n        \"mouseout\",\n        \"touchend\"\n      ];\n      events.map((ev) => {\n        return paths[p].addEventListener(\n          ev,\n          self.onSeriesHover.bind(self, extendedOpts),\n          { capture: false, passive: true }\n        );\n      });\n    }\n  }\n  /*\n   ** Check to see if the tooltips should be updated based on a mouse / touch event\n   * @param {Record<string, any>} opt\n   * @param {Event} e\n   */\n  /** @param {Record<string, any>} opt @param {any} e */\n  onSeriesHover(opt, e) {\n    const targetDelay = 20;\n    const timeSinceLastUpdate = Date.now() - this.lastHoverTime;\n    if (timeSinceLastUpdate >= targetDelay) {\n      this.seriesHover(opt, e);\n    } else {\n      clearTimeout(this.seriesHoverTimeout);\n      this.seriesHoverTimeout = setTimeout(() => {\n        this.seriesHover(opt, e);\n      }, targetDelay - timeSinceLastUpdate);\n    }\n  }\n  /*\n   ** The actual series hover function\n   * @param {Record<string, any>} opt\n   * @param {Event} e\n   */\n  /** @param {Record<string, any>} opt @param {any} e */\n  seriesHover(opt, e) {\n    this.lastHoverTime = Date.now();\n    let chartGroups = [];\n    const w = this.w;\n    if (w.config.chart.group) {\n      chartGroups = this.ctx.getGroupedCharts();\n    }\n    if (w.globals.axisCharts && (w.globals.minX === -Infinity && w.globals.maxX === Infinity || w.globals.dataPoints === 0)) {\n      return;\n    }\n    if (chartGroups.length) {\n      chartGroups.forEach((ch) => {\n        const tooltipEl = this.getElTooltip(ch);\n        const newOpts = {\n          paths: opt.paths,\n          tooltipEl,\n          tooltipY: opt.tooltipY,\n          tooltipX: opt.tooltipX,\n          elGrid: opt.elGrid,\n          hoverArea: opt.hoverArea,\n          ttItems: ch.w.globals.tooltip.ttItems\n        };\n        if (ch.w.globals.minX === this.w.globals.minX && ch.w.globals.maxX === this.w.globals.maxX) {\n          ch.w.globals.tooltip.seriesHoverByContext({\n            chartCtx: ch,\n            ttCtx: ch.w.globals.tooltip,\n            opt: newOpts,\n            e\n          });\n        }\n      });\n    } else {\n      this.seriesHoverByContext({\n        chartCtx: this.ctx,\n        ttCtx: this.w.globals.tooltip,\n        opt,\n        e\n      });\n    }\n  }\n  /** @param {{chartCtx: any, ttCtx: any, opt: any, e: any}} opts */\n  seriesHoverByContext({ chartCtx, ttCtx, opt, e }) {\n    const w = chartCtx.w;\n    const tooltipEl = this.getElTooltip(chartCtx);\n    if (!tooltipEl) return;\n    const cachedDims = ttCtx.getCachedDimensions();\n    ttCtx.tooltipRect = {\n      x: 0,\n      y: 0,\n      ttWidth: cachedDims.ttWidth,\n      ttHeight: cachedDims.ttHeight\n    };\n    ttCtx.e = e;\n    if (ttCtx.tooltipUtil.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) {\n      if (this.tConfig.onDatasetHover.highlightDataSeries) {\n        const series = new Series(chartCtx.w);\n        series.toggleSeriesOnHover(e, e.target.parentNode);\n      }\n    }\n    if (w.globals.axisCharts) {\n      ttCtx.axisChartsTooltips({\n        e,\n        opt,\n        tooltipRect: ttCtx.tooltipRect\n      });\n    } else {\n      ttCtx.nonAxisChartsTooltips({\n        e,\n        opt,\n        tooltipRect: ttCtx.tooltipRect\n      });\n    }\n    if (ttCtx.fixedTooltip) {\n      ttCtx.drawFixedTooltipRect();\n    }\n  }\n  // tooltip handling for line/area/bar/columns/scatter\n  /** @param {{e: any, opt: any}} opts */\n  axisChartsTooltips({ e, opt }) {\n    var _a;\n    const w = this.w;\n    let x, y;\n    const seriesBound = opt.elGrid.getBoundingClientRect();\n    const clientX = e.type === \"touchmove\" ? e.touches[0].clientX : e.clientX;\n    const clientY = e.type === \"touchmove\" ? e.touches[0].clientY : e.clientY;\n    this.clientY = clientY;\n    this.clientX = clientX;\n    w.interact.capturedSeriesIndex = -1;\n    w.interact.capturedDataPointIndex = -1;\n    if (clientY < seriesBound.top || clientY > seriesBound.top + seriesBound.height) {\n      this.handleMouseOut(opt);\n      return;\n    }\n    if (Array.isArray(this.tConfig.enabledOnSeries) && !w.config.tooltip.shared) {\n      const index = parseInt(opt.paths.getAttribute(\"index\"), 10);\n      if (this.tConfig.enabledOnSeries.indexOf(index) < 0) {\n        this.handleMouseOut(opt);\n        return;\n      }\n    }\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const xcrosshairs = this.getElXCrosshairs();\n    let syncedCharts = [];\n    if (w.config.chart.group) {\n      syncedCharts = this.ctx.getSyncedCharts();\n    }\n    const isStickyTooltip = w.globals.xyCharts || w.config.chart.type === \"bar\" && !w.globals.isBarHorizontal && this.tooltipUtil.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.tooltipUtil.hasBars();\n    if (e.type === \"mousemove\" || e.type === \"touchmove\" || e.type === \"mouseup\") {\n      if (w.globals.collapsedSeries.length + w.globals.ancillaryCollapsedSeries.length === w.seriesData.series.length) {\n        return;\n      }\n      if (xcrosshairs !== null) {\n        xcrosshairs.classList.add(\"apexcharts-active\");\n      }\n      const hasYAxisTooltip = (_a = this.yaxisTooltips) == null ? void 0 : _a.filter(\n        (b) => {\n          return b === true;\n        }\n      );\n      const _yc = (\n        /** @type {any} */\n        this.ycrosshairs\n      );\n      if (_yc !== null && (hasYAxisTooltip == null ? void 0 : hasYAxisTooltip.length)) {\n        _yc.classList.add(\"apexcharts-active\");\n      }\n      if (isStickyTooltip && !this.showOnIntersect || syncedCharts.length > 1) {\n        this.handleStickyTooltip(e, clientX, clientY, opt);\n      } else {\n        if (w.config.chart.type === \"heatmap\" || w.config.chart.type === \"treemap\") {\n          const markerXY = this.intersect.handleHeatTreeTooltip({\n            e,\n            opt,\n            x,\n            y,\n            type: w.config.chart.type\n          });\n          x = markerXY.x;\n          y = markerXY.y;\n          tooltipEl.style.left = x + \"px\";\n          tooltipEl.style.top = y + \"px\";\n        } else {\n          if (this.tooltipUtil.hasBars()) {\n            this.intersect.handleBarTooltip({\n              e,\n              opt\n            });\n          }\n          if (this.tooltipUtil.hasMarkers(0)) {\n            this.intersect.handleMarkerTooltip({\n              e,\n              opt,\n              x,\n              y\n            });\n          }\n        }\n      }\n      if (this.yaxisTooltips && this.yaxisTooltips.length) {\n        for (let yt = 0; yt < w.config.yaxis.length; yt++) {\n          this.axesTooltip.drawYaxisTooltipText(\n            yt,\n            clientY,\n            /** @type {import('../../types/internal').XYRatios} */\n            this.xyRatios\n          );\n        }\n      }\n      w.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n      opt.tooltipEl.classList.add(\"apexcharts-active\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n        opt.tooltipEl.removeAttribute(\"aria-hidden\");\n      }\n    } else if (e.type === \"mouseout\" || e.type === \"touchend\") {\n      this.handleMouseOut(opt);\n    }\n  }\n  // tooltip handling for pie/donuts\n  /** @param {{e: any, opt: any, tooltipRect: any}} opts */\n  nonAxisChartsTooltips({ e, opt, tooltipRect }) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const rel = opt.paths.getAttribute(\"rel\");\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const seriesBound = w.dom.elWrap.getBoundingClientRect();\n    if (e.type === \"mousemove\" || e.type === \"touchmove\") {\n      w.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n      tooltipEl.classList.add(\"apexcharts-active\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n        tooltipEl.removeAttribute(\"aria-hidden\");\n      }\n      this.tooltipLabels.drawSeriesTexts({\n        ttItems: opt.ttItems,\n        i: parseInt(rel, 10) - 1,\n        shared: false\n      });\n      let x, y;\n      const arcPath = opt.paths.querySelector(\"path[data\\\\:cx]\") || opt.paths;\n      if (w.config.tooltip.intersect && arcPath.hasAttribute(\"data:cx\") && arcPath.hasAttribute(\"data:cy\")) {\n        const svgBound = w.dom.Paper.node.getBoundingClientRect();\n        x = svgBound.left - seriesBound.left + parseFloat(arcPath.getAttribute(\"data:cx\")) - tooltipRect.ttWidth / 2;\n        y = svgBound.top - seriesBound.top + parseFloat(arcPath.getAttribute(\"data:cy\")) - tooltipRect.ttHeight - 10;\n      } else {\n        x = ((_a = w.interact.clientX) != null ? _a : 0) - seriesBound.left - tooltipRect.ttWidth / 2;\n        y = ((_b = w.interact.clientY) != null ? _b : 0) - seriesBound.top - tooltipRect.ttHeight - 10;\n      }\n      tooltipEl.style.left = x + \"px\";\n      tooltipEl.style.top = y + \"px\";\n      if (w.config.legend.tooltipHoverFormatter) {\n        const legendFormatter = w.config.legend.tooltipHoverFormatter;\n        const i = rel - 1;\n        const legendEl = (\n          /** @type {HTMLElement | undefined} */\n          (_c = this.legendLabels) == null ? void 0 : _c[i]\n        );\n        if (!legendEl) return;\n        const legendName = legendEl.getAttribute(\"data:default-text\");\n        const text = legendFormatter(legendName, {\n          seriesIndex: i,\n          dataPointIndex: i,\n          w\n        });\n        legendEl.innerHTML = text;\n      }\n    } else if (e.type === \"mouseout\" || e.type === \"touchend\") {\n      tooltipEl.classList.remove(\"apexcharts-active\");\n      w.dom.baseEl.classList.remove(\"apexcharts-tooltip-active\");\n      if (w.config.legend.tooltipHoverFormatter) {\n        (_d = this.legendLabels) == null ? void 0 : _d.forEach((l) => {\n          const defaultText = l.getAttribute(\"data:default-text\");\n          l.innerHTML = decodeURIComponent(\n            defaultText != null ? defaultText : \"\"\n          );\n        });\n      }\n    }\n  }\n  /**\n   * @param {Event} e\n   * @param {number} clientX\n   * @param {number} clientY\n   * @param {Record<string, any>} opt\n   */\n  handleStickyTooltip(e, clientX, clientY, opt) {\n    const w = this.w;\n    const capj = this.tooltipUtil.getNearestValues({\n      context: this,\n      hoverArea: opt.hoverArea,\n      elGrid: opt.elGrid,\n      clientX,\n      clientY\n    });\n    const j = capj.j;\n    let capturedSeries = capj.capturedSeries;\n    if (capturedSeries !== null && w.globals.collapsedSeriesIndices.includes(capturedSeries != null ? capturedSeries : -1))\n      capturedSeries = null;\n    const bounds = opt.elGrid.getBoundingClientRect();\n    if (capj.hoverX < 0 || capj.hoverX > bounds.width) {\n      this.handleMouseOut(opt);\n      return;\n    }\n    if (capturedSeries !== null) {\n      this.handleStickyCapturedSeries(e, capturedSeries != null ? capturedSeries : -1, opt, j != null ? j : 0);\n    } else {\n      if (this.tooltipUtil.isXoverlap(j != null ? j : 0) || w.globals.isBarHorizontal) {\n        const firstVisibleSeries = w.seriesData.series.findIndex(\n          /**\n           * @param {any} s\n           * @param {number} i\n           */\n          (s, i) => !w.globals.collapsedSeriesIndices.includes(i)\n        );\n        this.create(e, this, firstVisibleSeries, j != null ? j : 0, opt.ttItems);\n      }\n    }\n  }\n  /**\n   * @param {Event} e\n   * @param {number} capturedSeries\n   * @param {Record<string, any>} opt\n   * @param {number} j\n   */\n  handleStickyCapturedSeries(e, capturedSeries, opt, j) {\n    const w = this.w;\n    if (!this.tConfig.shared) {\n      const ignoreNull = w.seriesData.series[capturedSeries][j] === null;\n      if (ignoreNull) {\n        this.handleMouseOut(opt);\n        return;\n      }\n    }\n    if (typeof w.seriesData.series[capturedSeries][j] !== \"undefined\") {\n      if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isInitialSeriesSameLen()) {\n        this.create(e, this, capturedSeries, j, opt.ttItems);\n      } else {\n        this.create(e, this, capturedSeries, j, opt.ttItems, false);\n      }\n    } else {\n      if (this.tooltipUtil.isXoverlap(j)) {\n        const firstVisibleSeries = w.seriesData.series.findIndex(\n          /**\n           * @param {any} s\n           * @param {number} i\n           */\n          (s, i) => !w.globals.collapsedSeriesIndices.includes(i)\n        );\n        this.create(e, this, firstVisibleSeries, j, opt.ttItems);\n      }\n    }\n  }\n  deactivateHoverFilter() {\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const allPaths = w.dom.Paper.find(`.apexcharts-bar-area`);\n    for (let b = 0; b < allPaths.length; b++) {\n      graphics.pathMouseLeave(\n        /** @type {any} */\n        allPaths[b],\n        /** @type {any} */\n        void 0\n      );\n    }\n  }\n  /**\n   * @param {Record<string, any>} opt\n   */\n  handleMouseOut(opt) {\n    var _a, _b;\n    const w = this.w;\n    const xcrosshairs = this.getElXCrosshairs();\n    w.dom.baseEl.classList.remove(\"apexcharts-tooltip-active\");\n    opt.tooltipEl.classList.remove(\"apexcharts-active\");\n    delete opt.tooltipEl.dataset.positioned;\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n      opt.tooltipEl.setAttribute(\"aria-hidden\", \"true\");\n    }\n    this.deactivateHoverFilter();\n    if (w.config.chart.type !== \"bubble\") {\n      this.marker.resetPointsSize();\n    }\n    if (xcrosshairs !== null) {\n      xcrosshairs.classList.remove(\"apexcharts-active\");\n    }\n    const _yc2 = (\n      /** @type {any} */\n      this.ycrosshairs\n    );\n    if (_yc2 !== null) {\n      _yc2.classList.remove(\"apexcharts-active\");\n    }\n    if (this.isXAxisTooltipEnabled) {\n      (_a = this.xaxisTooltip) == null ? void 0 : _a.classList.remove(\"apexcharts-active\");\n    }\n    if (this.yaxisTooltips && this.yaxisTooltips.length) {\n      if (this.yaxisTTEls === null) {\n        this.yaxisTTEls = /** @type {HTMLElement[]} */\n        [\n          ...w.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\")\n        ];\n      }\n      for (let i = 0; i < this.yaxisTTEls.length; i++) {\n        this.yaxisTTEls[i].classList.remove(\"apexcharts-active\");\n      }\n    }\n    if (w.config.legend.tooltipHoverFormatter) {\n      (_b = this.legendLabels) == null ? void 0 : _b.forEach((l) => {\n        const defaultText = l.getAttribute(\"data:default-text\");\n        l.innerHTML = decodeURIComponent(\n          defaultText != null ? defaultText : \"\"\n        );\n      });\n    }\n  }\n  /**\n   * @param {Event} e\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   */\n  markerClick(e, seriesIndex, dataPointIndex) {\n    const w = this.w;\n    if (typeof w.config.chart.events.markerClick === \"function\") {\n      w.config.chart.events.markerClick(e, this.ctx, {\n        seriesIndex,\n        dataPointIndex,\n        w\n      });\n    }\n    this.ctx.events.fireEvent(\"markerClick\", [\n      e,\n      this.ctx,\n      { seriesIndex, dataPointIndex, w }\n    ]);\n  }\n  /**\n   * @param {Event} e\n   * @param {any} context\n   * @param {number} capturedSeries\n   * @param {number} j\n   * @param {any} ttItems\n   * @param {boolean | null} shared\n   */\n  create(e, context, capturedSeries, j, ttItems, shared = null) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;\n    const w = this.w;\n    const ttCtx = context;\n    if (e.type === \"mouseup\") {\n      this.markerClick(e, capturedSeries, j);\n    }\n    if (shared === null) shared = this.tConfig.shared;\n    const hasMarkers = this.tooltipUtil.hasMarkers(capturedSeries);\n    const bars = this.tooltipUtil.getElBars();\n    const handlePoints = () => {\n      if (w.globals.markers.largestSize > 0) {\n        ttCtx.marker.enlargePoints(j);\n      } else {\n        ttCtx.tooltipPosition.moveDynamicPointsOnHover(j);\n      }\n    };\n    if (w.config.legend.tooltipHoverFormatter) {\n      const legendFormatter = w.config.legend.tooltipHoverFormatter;\n      const els = (\n        /** @type {HTMLElement[]} */\n        Array.from((_a = this.legendLabels) != null ? _a : [])\n      );\n      els.forEach((l) => {\n        const legendName = l.getAttribute(\"data:default-text\");\n        l.innerHTML = decodeURIComponent(legendName != null ? legendName : \"\");\n      });\n      for (let i = 0; i < els.length; i++) {\n        const l = els[i];\n        const lsIndex = parseInt((_b = l.getAttribute(\"i\")) != null ? _b : \"\", 10);\n        const legendName = decodeURIComponent(\n          (_c = l.getAttribute(\"data:default-text\")) != null ? _c : \"\"\n        );\n        const text = legendFormatter(legendName, {\n          seriesIndex: shared ? lsIndex : capturedSeries,\n          dataPointIndex: j,\n          w\n        });\n        if (!shared) {\n          l.innerHTML = lsIndex === capturedSeries ? text : legendName;\n          if (capturedSeries === lsIndex) {\n            break;\n          }\n        } else {\n          l.innerHTML = w.globals.collapsedSeriesIndices.indexOf(lsIndex) < 0 ? text : legendName;\n        }\n      }\n    }\n    const _rangeData = (\n      /** @type {any} */\n      w.rangeData\n    );\n    const commonSeriesTextsParams = __spreadValues(__spreadValues({\n      ttItems,\n      i: capturedSeries,\n      j\n    }, ((_g = (_f = (_e = (_d = _rangeData.seriesRange) == null ? void 0 : _d[capturedSeries]) == null ? void 0 : _e[j]) == null ? void 0 : _f.y[0]) == null ? void 0 : _g.y1) !== void 0 && {\n      y1: (_k = (_j = (_i = (_h = _rangeData.seriesRange) == null ? void 0 : _h[capturedSeries]) == null ? void 0 : _i[j]) == null ? void 0 : _j.y[0]) == null ? void 0 : _k.y1\n    }), ((_o = (_n = (_m = (_l = _rangeData.seriesRange) == null ? void 0 : _l[capturedSeries]) == null ? void 0 : _m[j]) == null ? void 0 : _n.y[0]) == null ? void 0 : _o.y2) !== void 0 && {\n      y2: (_s = (_r = (_q = (_p = _rangeData.seriesRange) == null ? void 0 : _p[capturedSeries]) == null ? void 0 : _q[j]) == null ? void 0 : _r.y[0]) == null ? void 0 : _s.y2\n    });\n    if (shared) {\n      ttCtx.tooltipLabels.drawSeriesTexts(__spreadProps(__spreadValues({}, commonSeriesTextsParams), {\n        shared: this.showOnIntersect ? false : this.tConfig.shared\n      }));\n      if (hasMarkers) {\n        handlePoints();\n      } else if (this.tooltipUtil.hasBars()) {\n        this.barSeriesHeight = this.tooltipUtil.getBarsHeight(\n          /** @type {any[]} */\n          [...bars]\n        );\n        if (this.barSeriesHeight > 0) {\n          const graphics = new Graphics(this.w, this.ctx);\n          const paths = w.dom.Paper.find(`.apexcharts-bar-area[j='${j}']`);\n          this.deactivateHoverFilter();\n          const points = ttCtx.tooltipUtil.getAllMarkers(true);\n          if (points.length && !this.barSeriesHeight) {\n            handlePoints();\n          }\n          ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, capturedSeries);\n          for (let b = 0; b < paths.length; b++) {\n            graphics.pathMouseEnter(\n              /** @type {any} */\n              paths[b],\n              /** @type {any} */\n              void 0\n            );\n          }\n        }\n      }\n    } else {\n      ttCtx.tooltipLabels.drawSeriesTexts(__spreadValues({\n        shared: false\n      }, commonSeriesTextsParams));\n      if (this.tooltipUtil.hasBars()) {\n        ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, capturedSeries);\n      }\n      if (hasMarkers) {\n        ttCtx.tooltipPosition.moveMarkers(capturedSeries, j);\n      }\n    }\n  }\n}\nclass SVGElement {\n  /**\n   * @param {any} node\n   */\n  constructor(node) {\n    this.node = node;\n    if (node) {\n      node.instance = this;\n    }\n    this._listeners = [];\n    this._filter = null;\n  }\n  // ---- Attribute methods ----\n  /**\n   * @param {any} a\n   * @param {any} [v]\n   */\n  attr(a, v) {\n    if (typeof a === \"string\" && v === void 0) {\n      return this.node.getAttribute(a);\n    }\n    const attrs = typeof a === \"string\" ? { [a]: v } : a;\n    for (const key in attrs) {\n      let val = attrs[key];\n      if (val === null) {\n        this.node.removeAttribute(key);\n      } else if (val !== void 0) {\n        if (typeof val === \"number\" && isNaN(val)) val = 0;\n        this.node.setAttribute(key, val);\n      }\n    }\n    if (this.node.nodeName === \"text\" && attrs.x != null) {\n      const tspans = this.node.querySelectorAll(\"tspan[data-newline]\");\n      for (let i = 0; i < tspans.length; i++) {\n        tspans[i].setAttribute(\"x\", attrs.x);\n      }\n    }\n    return this;\n  }\n  /**\n   * @param {Record<string, string>} styles\n   */\n  css(styles) {\n    for (const k in styles) {\n      this.node.style[k] = styles[k];\n    }\n    return this;\n  }\n  /**\n   * @param {any} v\n   */\n  fill(v) {\n    if (typeof v === \"object\") {\n      return this.attr(v);\n    }\n    return this.attr(\"fill\", v);\n  }\n  /**\n   * @param {any} v\n   */\n  stroke(v) {\n    if (typeof v === \"object\") {\n      if (v.color !== void 0) this.attr(\"stroke\", v.color);\n      if (v.width !== void 0) this.attr(\"stroke-width\", v.width);\n      if (v.dasharray !== void 0) this.attr(\"stroke-dasharray\", v.dasharray);\n      if (v.linecap !== void 0) this.attr(\"stroke-linecap\", v.linecap);\n      if (v.opacity !== void 0) this.attr(\"stroke-opacity\", v.opacity);\n      return this;\n    }\n    return this.attr(\"stroke\", v);\n  }\n  /**\n   * @param {number} w\n   * @param {number} h\n   */\n  size(w, h) {\n    return this.attr({ width: w, height: h });\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  move(x, y) {\n    return this.attr({ x, y });\n  }\n  /**\n   * @param {number} cx\n   * @param {number} cy\n   */\n  center(cx, cy) {\n    if (this.node.nodeName === \"g\") {\n      const box = this.bbox();\n      const dx = cx - (box.x + box.width / 2);\n      const dy = cy - (box.y + box.height / 2);\n      return this.attr(\"transform\", `translate(${dx}, ${dy})`);\n    }\n    return this.attr({ cx, cy });\n  }\n  // ---- Tree operations ----\n  /**\n   * @param {any} child\n   */\n  add(child) {\n    this.node.appendChild(child.node || child);\n    return this;\n  }\n  /**\n   * @param {any} parent\n   */\n  addTo(parent) {\n    const p = parent.node || parent;\n    p.appendChild(this.node);\n    return this;\n  }\n  remove() {\n    if (this.node.parentNode) {\n      this.node.parentNode.removeChild(this.node);\n    }\n    return this;\n  }\n  clear() {\n    while (this.node.firstChild) {\n      this.node.removeChild(this.node.firstChild);\n    }\n    return this;\n  }\n  // ---- Query ----\n  /**\n   * @param {string} selector\n   */\n  find(selector) {\n    return Array.from(this.node.querySelectorAll(selector)).map(\n      (n) => n.instance || new SVGElement(n)\n    );\n  }\n  /**\n   * @param {string} selector\n   */\n  findOne(selector) {\n    const n = this.node.querySelector(selector);\n    return n ? n.instance || new SVGElement(n) : null;\n  }\n  // ---- Events ----\n  /**\n   * @param {Event} event\n   * @param {Function} handler\n   */\n  on(event, handler) {\n    const eventType = (\n      /** @type {string} */\n      /** @type {any} */\n      event.split(\n        \".\"\n      )[0]\n    );\n    this._listeners.push({ event, eventType, handler });\n    this.node.addEventListener(eventType, handler);\n    return this;\n  }\n  /**\n   * @param {Event} event\n   * @param {Function} handler\n   */\n  off(event, handler) {\n    if (!event && !handler) {\n      this._listeners.forEach((l) => {\n        this.node.removeEventListener(l.eventType, l.handler);\n      });\n      this._listeners = [];\n    } else if (event && !handler) {\n      const eventType = (\n        /** @type {string} */\n        /** @type {any} */\n        event.split(\".\")[0]\n      );\n      this._listeners = this._listeners.filter((l) => {\n        if (l.eventType === eventType) {\n          this.node.removeEventListener(l.eventType, l.handler);\n          return false;\n        }\n        return true;\n      });\n    } else {\n      const eventType = (\n        /** @type {string} */\n        /** @type {any} */\n        event.split(\".\")[0]\n      );\n      this._listeners = this._listeners.filter((l) => {\n        if (l.eventType === eventType && l.handler === handler) {\n          this.node.removeEventListener(l.eventType, l.handler);\n          return false;\n        }\n        return true;\n      });\n    }\n    return this;\n  }\n  // ---- Iteration ----\n  /**\n   * @param {Function} fn\n   * @param {boolean} deep\n   */\n  each(fn, deep) {\n    const children = Array.from(this.node.children);\n    children.forEach((child) => {\n      const inst = child.instance || new SVGElement(child);\n      fn.call(inst);\n      if (deep) inst.each(fn, deep);\n    });\n    return this;\n  }\n  // ---- CSS classes ----\n  /**\n   * @param {string} cls\n   */\n  removeClass(cls) {\n    if (cls === \"*\") {\n      this.node.removeAttribute(\"class\");\n    } else {\n      this.node.classList.remove(cls);\n    }\n    return this;\n  }\n  // ---- Children ----\n  children() {\n    return Array.from(this.node.childNodes).filter((n) => n.nodeType === 1).map((n) => n.instance || new SVGElement(n));\n  }\n  // ---- Visibility ----\n  hide() {\n    this.node.style.display = \"none\";\n    return this;\n  }\n  show() {\n    this.node.style.display = \"\";\n    return this;\n  }\n  // ---- Measurement ----\n  bbox() {\n    if (typeof this.node.getBBox === \"function\") {\n      try {\n        return this.node.getBBox();\n      } catch (e) {\n      }\n    }\n    return { x: 0, y: 0, width: 0, height: 0 };\n  }\n  // ---- Text-specific ----\n  /**\n   * @param {string} text\n   */\n  tspan(text) {\n    const tspan = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"tspan\"\n    );\n    tspan.textContent = text;\n    this.node.appendChild(tspan);\n    return new SVGElement(tspan);\n  }\n  // ---- Path-specific ----\n  /**\n   * @param {string} d\n   */\n  plot(d) {\n    if (typeof d === \"string\") {\n      this.attr(\"d\", d);\n    }\n    return this;\n  }\n  // ---- Animation (overridden by SVGAnimation mixin) ----\n  animate() {\n    throw new Error(\"Animation module not loaded\");\n  }\n  // ---- Filter methods (set up by SVGFilter module) ----\n  filterWith() {\n    throw new Error(\"Filter module not loaded\");\n  }\n  /**\n   * @param {boolean} all\n   */\n  unfilter(all) {\n    if (this._filter) {\n      this.node.removeAttribute(\"filter\");\n      if (all && this._filter.node && this._filter.node.parentNode) {\n        this._filter.node.parentNode.removeChild(this._filter.node);\n      }\n      this._filter = null;\n    }\n    return this;\n  }\n  filterer() {\n    return this._filter;\n  }\n}\nlet gradientCounter = 0;\nclass SVGGradient extends SVGElement {\n  /**\n   * @param {any} container\n   * @param {string} type\n   * @param {object} builder\n   */\n  constructor(container, type, builder) {\n    const tag = type === \"radial\" ? \"radialGradient\" : \"linearGradient\";\n    const node = BrowserAPIs.createElementNS(SVGNS, tag);\n    super(node);\n    this._id = \"SvgjsGradient\" + ++gradientCounter;\n    this.attr(\"id\", this._id);\n    if (typeof builder === \"function\") {\n      builder(new StopBuilder(this));\n    }\n    let defs = container.node.querySelector(\"defs\");\n    if (!defs) {\n      defs = BrowserAPIs.createElementNS(SVGNS, \"defs\");\n      container.node.appendChild(defs);\n    }\n    defs.appendChild(this.node);\n  }\n  /**\n   * @param {any} offset\n   * @param {string} color\n   * @param {number} opacity\n   */\n  stop(offset, color, opacity) {\n    const s = BrowserAPIs.createElementNS(SVGNS, \"stop\");\n    s.setAttribute(\"offset\", offset);\n    s.setAttribute(\"stop-color\", color);\n    if (opacity !== void 0) s.setAttribute(\"stop-opacity\", String(opacity));\n    this.node.appendChild(s);\n    return this;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  from(x, y) {\n    return this.attr({ x1: x, y1: y });\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  to(x, y) {\n    return this.attr({ x2: x, y2: y });\n  }\n  url() {\n    return \"url(#\" + this._id + \")\";\n  }\n  toString() {\n    return this.url();\n  }\n  valueOf() {\n    return this.url();\n  }\n  fill() {\n    return this.url();\n  }\n}\nclass StopBuilder {\n  /**\n   * @param {any} gradient\n   */\n  constructor(gradient) {\n    this.gradient = gradient;\n  }\n  /**\n   * @param {any} offset\n   * @param {string} color\n   * @param {number} opacity\n   */\n  stop(offset, color, opacity) {\n    this.gradient.stop(offset, color, opacity);\n    return this;\n  }\n}\nlet patternCounter = 0;\nclass SVGPattern extends SVGElement {\n  /**\n   * @param {any} container\n   * @param {number} w\n   * @param {number} h\n   * @param {Function} builder\n   */\n  constructor(container, w, h, builder) {\n    const node = BrowserAPIs.createElementNS(SVGNS, \"pattern\");\n    super(node);\n    this._id = \"SvgjsPattern\" + ++patternCounter;\n    this.attr({\n      id: this._id,\n      width: w,\n      height: h,\n      patternUnits: \"userSpaceOnUse\"\n    });\n    if (typeof builder === \"function\") {\n      const patternContainer = new SVGContainer(this.node);\n      builder(patternContainer);\n    }\n    let defs = container.node.querySelector(\"defs\");\n    if (!defs) {\n      defs = BrowserAPIs.createElementNS(SVGNS, \"defs\");\n      container.node.appendChild(defs);\n    }\n    defs.appendChild(this.node);\n  }\n  url() {\n    return \"url(#\" + this._id + \")\";\n  }\n  toString() {\n    return this.url();\n  }\n  valueOf() {\n    return this.url();\n  }\n  fill() {\n    return this.url();\n  }\n}\nclass SVGContainer extends SVGElement {\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   */\n  line(x1, y1, x2, y2) {\n    const el = this._make(\"line\");\n    if (x1 !== void 0) {\n      el.attr({ x1, y1, x2, y2 });\n    }\n    return el;\n  }\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {number} h\n   */\n  rect(w, h) {\n    const el = this._make(\"rect\");\n    if (w !== void 0) {\n      el.attr({ width: w, height: h });\n    }\n    return el;\n  }\n  /**\n   * @param {number} d\n   */\n  circle(d) {\n    const el = this._make(\"circle\");\n    if (d !== void 0) {\n      el.attr({ r: d / 2, cx: d / 2, cy: d / 2 });\n    }\n    return el;\n  }\n  /**\n   * @param {string} d\n   */\n  path(d) {\n    const el = this._make(\"path\");\n    if (d) el.attr(\"d\", d);\n    return el;\n  }\n  /**\n   * @param {string} pts\n   */\n  polygon(pts) {\n    const el = this._make(\"polygon\");\n    if (pts) el.attr(\"points\", pts);\n    return el;\n  }\n  group() {\n    return this._makeContainer(\"g\");\n  }\n  defs() {\n    return this._makeContainer(\"defs\");\n  }\n  /**\n   * @param {string} textContent\n   */\n  plain(textContent) {\n    const node = BrowserAPIs.createElementNS(SVGNS, \"text\");\n    node.textContent = textContent;\n    const el = new SVGElement(node);\n    this.node.appendChild(node);\n    return el;\n  }\n  /**\n   * @param {object} builder\n   */\n  text(builder) {\n    const node = BrowserAPIs.createElementNS(SVGNS, \"text\");\n    const el = new SVGElement(node);\n    this.node.appendChild(node);\n    if (typeof builder === \"function\") {\n      builder(new TspanBuilder(node));\n    }\n    return el;\n  }\n  /**\n   * @param {string} url\n   * @param {Function} callback\n   */\n  image(url, callback) {\n    const node = BrowserAPIs.createElementNS(SVGNS, \"image\");\n    node.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", url);\n    const el = new SVGElement(node);\n    this.node.appendChild(node);\n    if (typeof callback === \"function\") {\n      const img = new Image();\n      img.onload = function() {\n        el.size(img.width, img.height);\n        callback.call(el, { width: img.width, height: img.height });\n      };\n      img.src = url;\n    }\n    return el;\n  }\n  /**\n   * @param {string} type\n   * @param {object} builder\n   */\n  gradient(type, builder) {\n    return new SVGGradient(this, type, builder);\n  }\n  /**\n   * @param {number} w\n   * @param {number} h\n   * @param {Function} builder\n   */\n  pattern(w, h, builder) {\n    return new SVGPattern(this, w, h, builder);\n  }\n  /**\n   * @param {string} tag\n   */\n  _make(tag) {\n    const node = BrowserAPIs.createElementNS(SVGNS, tag);\n    this.node.appendChild(node);\n    return new SVGElement(node);\n  }\n  /**\n   * @param {string} tag\n   */\n  _makeContainer(tag) {\n    const node = BrowserAPIs.createElementNS(SVGNS, tag);\n    this.node.appendChild(node);\n    return new SVGContainer(node);\n  }\n}\nclass TspanBuilder {\n  /**\n   * @param {any} textNode\n   */\n  constructor(textNode) {\n    this.textNode = textNode;\n  }\n  /**\n   * @param {string} text\n   */\n  tspan(text) {\n    const tspan = BrowserAPIs.createElementNS(SVGNS, \"tspan\");\n    tspan.textContent = text;\n    this.textNode.appendChild(tspan);\n    return new TspanWrapper(tspan, this.textNode);\n  }\n}\nclass TspanWrapper {\n  /**\n   * @param {any} node\n   * @param {any} textNode\n   */\n  constructor(node, textNode) {\n    this.node = node;\n    this.textNode = textNode;\n  }\n  newLine() {\n    this.node.setAttribute(\"dy\", \"1.1em\");\n    this.node.dataset.newline = \"1\";\n    return this;\n  }\n}\nlet filterCounter = 0;\nclass SVGFilter extends SVGElement {\n  constructor() {\n    const node = BrowserAPIs.createElementNS(SVGNS, \"filter\");\n    super(node);\n    this._id = \"SvgjsFilter\" + ++filterCounter;\n    this.attr(\"id\", this._id);\n  }\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {number} h\n   * @param {number} x\n   * @param {number} y\n   */\n  /**\n   * @param {number} w\n   * @param {number} h\n   * @param {number} [x]\n   * @param {number} [y]\n   */\n  size(w, h, x, y) {\n    return this.attr({ width: w, height: h, x, y });\n  }\n}\nclass FilterBuilder {\n  /**\n   * @param {any} filter\n   */\n  constructor(filter) {\n    this.filter = filter;\n  }\n  /**\n   * @param {object} attrs\n   */\n  colorMatrix(attrs) {\n    return this._primitive(\"feColorMatrix\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  offset(attrs) {\n    return this._primitive(\"feOffset\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  gaussianBlur(attrs) {\n    return this._primitive(\"feGaussianBlur\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  flood(attrs) {\n    return this._primitive(\"feFlood\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  composite(attrs) {\n    return this._primitive(\"feComposite\", attrs);\n  }\n  /**\n   * @param {string[]} sources\n   */\n  merge(sources) {\n    const m = BrowserAPIs.createElementNS(SVGNS, \"feMerge\");\n    sources.forEach((src) => {\n      const mn = BrowserAPIs.createElementNS(SVGNS, \"feMergeNode\");\n      mn.setAttribute(\"in\", src);\n      m.appendChild(mn);\n    });\n    this.filter.node.appendChild(m);\n    return new SVGElement(m);\n  }\n  /**\n   * @param {string} tag\n   * @param {Record<string, any>} attrs\n   */\n  _primitive(tag, attrs) {\n    const el = BrowserAPIs.createElementNS(SVGNS, tag);\n    for (const key in attrs) {\n      el.setAttribute(key, attrs[key]);\n    }\n    this.filter.node.appendChild(el);\n    return new SVGElement(el);\n  }\n}\nfunction installFilterMethods(ElementClass) {\n  ElementClass.prototype.filterWith = function(fn) {\n    const filter = new SVGFilter();\n    this._filter = filter;\n    let svgRoot = this.node;\n    while (svgRoot && svgRoot.nodeName !== \"svg\") {\n      svgRoot = svgRoot.parentNode;\n    }\n    if (svgRoot) {\n      let defs = svgRoot.querySelector(\"defs\");\n      if (!defs) {\n        defs = BrowserAPIs.createElementNS(SVGNS, \"defs\");\n        svgRoot.insertBefore(defs, svgRoot.firstChild);\n      }\n      defs.appendChild(filter.node);\n    }\n    fn(new FilterBuilder(filter));\n    this.attr(\"filter\", \"url(#\" + filter._id + \")\");\n    return this;\n  };\n  ElementClass.prototype.unfilter = function(all) {\n    if (this._filter) {\n      this.node.removeAttribute(\"filter\");\n      if (all && this._filter.node && this._filter.node.parentNode) {\n        this._filter.node.parentNode.removeChild(this._filter.node);\n      }\n      this._filter = null;\n    }\n    return this;\n  };\n  ElementClass.prototype.filterer = function() {\n    return this._filter;\n  };\n}\n/*!\n * Path morphing for SVG path animations\n * Based on svg.pathmorphing.js by Ulrich-Matthias Schäfer (MIT License)\n * Refactored to be standalone (no SVG.js dependency)\n *\n * Two algorithms are exported:\n *   - morphPaths()    — command-level interpolation; preserves curves but can\n *                       produce \"wings/flips\" when two shapes have very\n *                       different topology (e.g. bar rect → pie arc).\n *   - morphPolygons() — resamples both shapes into N evenly-spaced perimeter\n *                       points and tweens point-by-point with rotation-search\n *                       alignment; always smooth and non-self-intersecting,\n *                       at the cost of throwing away curve smoothness.\n */\nfunction parsePath(d) {\n  if (!d || typeof d !== \"string\") return [[\"M\", 0, 0]];\n  const commands = [];\n  const re = /([MmLlHhVvCcSsQqTtAaZz])\\s*/g;\n  const numRe = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?/gi;\n  let match;\n  const letters = [];\n  const positions = [];\n  while ((match = re.exec(d)) !== null) {\n    letters.push(match[1]);\n    positions.push(match.index);\n  }\n  for (let i = 0; i < letters.length; i++) {\n    const start = positions[i] + letters[i].length;\n    const end = i + 1 < positions.length ? positions[i + 1] : d.length;\n    const paramStr = d.substring(start, end);\n    const nums = [];\n    let numMatch;\n    numRe.lastIndex = 0;\n    while ((numMatch = numRe.exec(paramStr)) !== null) {\n      nums.push(parseFloat(numMatch[0]));\n    }\n    const cmd = letters[i].toUpperCase();\n    if (cmd === \"Z\") {\n      commands.push([\"Z\"]);\n    } else if (cmd === \"M\" || cmd === \"L\" || cmd === \"T\") {\n      for (let j = 0; j < nums.length; j += 2) {\n        commands.push([cmd, nums[j], nums[j + 1]]);\n      }\n    } else if (cmd === \"H\") {\n      for (let j = 0; j < nums.length; j++) {\n        commands.push([cmd, nums[j]]);\n      }\n    } else if (cmd === \"V\") {\n      for (let j = 0; j < nums.length; j++) {\n        commands.push([cmd, nums[j]]);\n      }\n    } else if (cmd === \"C\") {\n      for (let j = 0; j < nums.length; j += 6) {\n        commands.push([\n          cmd,\n          nums[j],\n          nums[j + 1],\n          nums[j + 2],\n          nums[j + 3],\n          nums[j + 4],\n          nums[j + 5]\n        ]);\n      }\n    } else if (cmd === \"S\" || cmd === \"Q\") {\n      for (let j = 0; j < nums.length; j += 4) {\n        commands.push([cmd, nums[j], nums[j + 1], nums[j + 2], nums[j + 3]]);\n      }\n    } else if (cmd === \"A\") {\n      for (let j = 0; j < nums.length; j += 7) {\n        commands.push([\n          cmd,\n          nums[j],\n          nums[j + 1],\n          nums[j + 2],\n          nums[j + 3],\n          nums[j + 4],\n          nums[j + 5],\n          nums[j + 6]\n        ]);\n      }\n    }\n  }\n  if (commands.length === 0) {\n    commands.push([\"M\", 0, 0]);\n  }\n  return commands;\n}\nfunction pathBbox(arr) {\n  let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n  arr.forEach((cmd) => {\n    for (let i = 1; i < cmd.length; i += 2) {\n      if (i + 1 <= cmd.length) {\n        const x = cmd[i];\n        const y = cmd[i + 1];\n        if (typeof x === \"number\" && typeof y === \"number\") {\n          if (x < minX) minX = x;\n          if (x > maxX) maxX = x;\n          if (y < minY) minY = y;\n          if (y > maxY) maxY = y;\n        }\n      }\n    }\n  });\n  if (minX === Infinity) {\n    return { x: 0, y: 0, width: 0, height: 0 };\n  }\n  return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\nfunction arrayToPath(arr) {\n  return arr.map((cmd) => cmd.join(\" \")).join(\" \");\n}\nfunction simplify(val) {\n  switch (val[0]) {\n    case \"z\":\n    case \"Z\":\n      val[0] = \"L\";\n      val[1] = this.start[0];\n      val[2] = this.start[1];\n      break;\n    case \"H\":\n      val[0] = \"L\";\n      val[2] = this.pos[1];\n      break;\n    case \"V\":\n      val[0] = \"L\";\n      val[2] = val[1];\n      val[1] = this.pos[0];\n      break;\n    case \"T\":\n      val[0] = \"Q\";\n      val[3] = val[1];\n      val[4] = val[2];\n      val[1] = this.reflection[1];\n      val[2] = this.reflection[0];\n      break;\n    case \"S\":\n      val[0] = \"C\";\n      val[6] = val[4];\n      val[5] = val[3];\n      val[4] = val[2];\n      val[3] = val[1];\n      val[2] = this.reflection[1];\n      val[1] = this.reflection[0];\n      break;\n  }\n  return val;\n}\nfunction setPosAndReflection(val) {\n  var len = val.length;\n  this.pos = [val[len - 2], val[len - 1]];\n  if (\"SCQT\".indexOf(val[0]) != -1) {\n    this.reflection = [\n      2 * this.pos[0] - val[len - 4],\n      2 * this.pos[1] - val[len - 3]\n    ];\n  }\n  return val;\n}\nfunction toBezier(val) {\n  var _a;\n  var retVal = [val];\n  switch (val[0]) {\n    case \"M\":\n      this.pos = this.start = [val[1], val[2]];\n      return retVal;\n    case \"L\":\n      val[5] = val[3] = val[1];\n      val[6] = val[4] = val[2];\n      val[1] = this.pos[0];\n      val[2] = this.pos[1];\n      break;\n    case \"Q\":\n      val[6] = val[4];\n      val[5] = val[3];\n      val[4] = val[4] * 1 / 3 + val[2] * 2 / 3;\n      val[3] = val[3] * 1 / 3 + val[1] * 2 / 3;\n      val[2] = this.pos[1] * 1 / 3 + val[2] * 2 / 3;\n      val[1] = this.pos[0] * 1 / 3 + val[1] * 2 / 3;\n      break;\n    case \"A\":\n      retVal = arcToBezier((_a = this.pos) != null ? _a : [], val);\n      val = retVal[0];\n      break;\n  }\n  val[0] = \"C\";\n  this.pos = [val[5], val[6]];\n  this.reflection = [2 * val[5] - val[3], 2 * val[6] - val[4]];\n  return retVal;\n}\nfunction findNextM(arr, offset) {\n  if (offset === false) return false;\n  for (var i = offset, len = arr.length; i < len; ++i) {\n    if (arr[i][0] == \"M\") return i;\n  }\n  return false;\n}\nfunction arcToBezier(pos, val) {\n  var rx = Math.abs(val[1]), ry = Math.abs(val[2]), xAxisRotation = val[3] % 360, largeArcFlag = val[4], sweepFlag = val[5], x = val[6], y = val[7], A = new Point(pos[0], pos[1]), B = new Point(x, y), primedCoord, lambda, mat, k, c, cSquare, t, O, OA, OB, tetaStart, tetaEnd, deltaTeta, nbSectors, f, arcSegPoints, angle, sinAngle, cosAngle, pt, i, il, retVal = [], x1, y1, x2, y2;\n  if (rx === 0 || ry === 0 || A.x === B.x && A.y === B.y) {\n    return [[\"C\", A.x, A.y, B.x, B.y, B.x, B.y]];\n  }\n  primedCoord = new Point((A.x - B.x) / 2, (A.y - B.y) / 2).transform(\n    // Start with the identity matrix (no args → Matrix defaults a=d=1, others 0).\n    // Passing all-zero args here would produce a degenerate zero matrix, since\n    // `0 ?? 1` is `0`, not `1` — every subsequent transform then yields (0,0)\n    // and the arc-to-bezier conversion crashes on a NaN cascade.\n    /** @type {any} */\n    new Matrix().rotate(xAxisRotation)\n  );\n  lambda = primedCoord.x * primedCoord.x / (rx * rx) + primedCoord.y * primedCoord.y / (ry * ry);\n  if (lambda > 1) {\n    lambda = Math.sqrt(lambda);\n    rx = lambda * rx;\n    ry = lambda * ry;\n  }\n  mat = /** @type {any} */\n  new Matrix().rotate(xAxisRotation).scale(1 / rx, 1 / ry).rotate(-xAxisRotation);\n  A = A.transform(mat);\n  B = B.transform(mat);\n  k = [B.x - A.x, B.y - A.y];\n  cSquare = k[0] * k[0] + k[1] * k[1];\n  c = Math.sqrt(cSquare);\n  k[0] /= c;\n  k[1] /= c;\n  t = cSquare < 4 ? Math.sqrt(1 - cSquare / 4) : 0;\n  if (largeArcFlag === sweepFlag) {\n    t *= -1;\n  }\n  O = new Point((B.x + A.x) / 2 + t * -k[1], (B.y + A.y) / 2 + t * k[0]);\n  OA = new Point(A.x - O.x, A.y - O.y);\n  OB = new Point(B.x - O.x, B.y - O.y);\n  tetaStart = Math.acos(OA.x / Math.sqrt(OA.x * OA.x + OA.y * OA.y));\n  if (OA.y < 0) tetaStart *= -1;\n  tetaEnd = Math.acos(OB.x / Math.sqrt(OB.x * OB.x + OB.y * OB.y));\n  if (OB.y < 0) tetaEnd *= -1;\n  if (sweepFlag && tetaStart > tetaEnd) {\n    tetaEnd += 2 * Math.PI;\n  }\n  if (!sweepFlag && tetaStart < tetaEnd) {\n    tetaEnd -= 2 * Math.PI;\n  }\n  nbSectors = Math.ceil(Math.abs(tetaStart - tetaEnd) * 2 / Math.PI);\n  arcSegPoints = [];\n  angle = tetaStart;\n  deltaTeta = (tetaEnd - tetaStart) / nbSectors;\n  f = 4 * Math.tan(deltaTeta / 4) / 3;\n  for (i = 0; i <= nbSectors; i++) {\n    cosAngle = Math.cos(angle);\n    sinAngle = Math.sin(angle);\n    pt = new Point(O.x + cosAngle, O.y + sinAngle);\n    arcSegPoints[i] = [\n      new Point(pt.x + f * sinAngle, pt.y - f * cosAngle),\n      pt,\n      new Point(pt.x - f * sinAngle, pt.y + f * cosAngle)\n    ];\n    angle += deltaTeta;\n  }\n  arcSegPoints[0][0] = arcSegPoints[0][1].clone();\n  arcSegPoints[arcSegPoints.length - 1][2] = arcSegPoints[arcSegPoints.length - 1][1].clone();\n  mat = /** @type {any} */\n  new Matrix().rotate(xAxisRotation).scale(rx, ry).rotate(-xAxisRotation);\n  for (i = 0, il = arcSegPoints.length; i < il; i++) {\n    arcSegPoints[i][0] = arcSegPoints[i][0].transform(mat);\n    arcSegPoints[i][1] = arcSegPoints[i][1].transform(mat);\n    arcSegPoints[i][2] = arcSegPoints[i][2].transform(mat);\n  }\n  for (i = 1, il = arcSegPoints.length; i < il; i++) {\n    pt = arcSegPoints[i - 1][2];\n    x1 = pt.x;\n    y1 = pt.y;\n    pt = arcSegPoints[i][0];\n    x2 = pt.x;\n    y2 = pt.y;\n    pt = arcSegPoints[i][1];\n    x = pt.x;\n    y = pt.y;\n    retVal.push([\"C\", x1, y1, x2, y2, x, y]);\n  }\n  return retVal;\n}\nfunction handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM) {\n  var startArrTemp = startArr.slice(startOffsetM, startOffsetNextM || void 0);\n  var destArrTemp = destArr.slice(destOffsetM, destOffsetNextM || void 0);\n  var i = 0, posStart = { pos: [0, 0], start: [0, 0] }, posDest = { pos: [0, 0], start: [0, 0] };\n  while (true) {\n    startArrTemp[i] = simplify.call(posStart, startArrTemp[i]);\n    destArrTemp[i] = simplify.call(posDest, destArrTemp[i]);\n    if (startArrTemp[i][0] != destArrTemp[i][0] || startArrTemp[i][0] == \"M\" || startArrTemp[i][0] == \"A\" && (startArrTemp[i][4] != destArrTemp[i][4] || startArrTemp[i][5] != destArrTemp[i][5])) {\n      Array.prototype.splice.apply(\n        startArrTemp,\n        /** @type {[number, number, ...any[]]} */\n        [i, 1].concat(\n          /** @type {any} */\n          toBezier.call(posStart, startArrTemp[i])\n        )\n      );\n      Array.prototype.splice.apply(\n        destArrTemp,\n        /** @type {[number, number, ...any[]]} */\n        [i, 1].concat(\n          /** @type {any} */\n          toBezier.call(posDest, destArrTemp[i])\n        )\n      );\n    } else {\n      startArrTemp[i] = /** @type {any} */\n      setPosAndReflection.call(\n        posStart,\n        startArrTemp[i]\n      );\n      destArrTemp[i] = /** @type {any} */\n      setPosAndReflection.call(\n        posDest,\n        destArrTemp[i]\n      );\n    }\n    if (++i == startArrTemp.length && i == destArrTemp.length) break;\n    if (i == startArrTemp.length) {\n      startArrTemp.push([\n        \"C\",\n        posStart.pos[0],\n        posStart.pos[1],\n        posStart.pos[0],\n        posStart.pos[1],\n        posStart.pos[0],\n        posStart.pos[1]\n      ]);\n    }\n    if (i == destArrTemp.length) {\n      destArrTemp.push([\n        \"C\",\n        posDest.pos[0],\n        posDest.pos[1],\n        posDest.pos[0],\n        posDest.pos[1],\n        posDest.pos[0],\n        posDest.pos[1]\n      ]);\n    }\n  }\n  return { start: startArrTemp, dest: destArrTemp };\n}\nfunction synchronizePaths(fromD, toD) {\n  var startArr = parsePath(fromD);\n  var destArr = parsePath(toD);\n  var startOffsetM = 0;\n  var destOffsetM = 0;\n  var startOffsetNextM = false;\n  var destOffsetNextM = false;\n  var result;\n  while (true) {\n    if (startOffsetM === false && destOffsetM === false) break;\n    startOffsetNextM = findNextM(\n      startArr,\n      startOffsetM === false ? false : startOffsetM + 1\n    );\n    destOffsetNextM = findNextM(\n      destArr,\n      destOffsetM === false ? false : destOffsetM + 1\n    );\n    if (startOffsetM === false) {\n      const bbox = pathBbox(\n        /** @type {any} */\n        result.start\n      );\n      if (bbox.height == 0 || bbox.width == 0) {\n        startOffsetM = startArr.push(startArr[0]) - 1;\n      } else {\n        startOffsetM = startArr.push([\n          \"M\",\n          bbox.x + bbox.width / 2,\n          bbox.y + bbox.height / 2\n        ]) - 1;\n      }\n    }\n    if (destOffsetM === false) {\n      const bbox = pathBbox(\n        /** @type {any} */\n        result.dest\n      );\n      if (bbox.height == 0 || bbox.width == 0) {\n        destOffsetM = destArr.push(destArr[0]) - 1;\n      } else {\n        destOffsetM = destArr.push([\n          \"M\",\n          bbox.x + bbox.width / 2,\n          bbox.y + bbox.height / 2\n        ]) - 1;\n      }\n    }\n    result = handleBlock(\n      startArr,\n      startOffsetM,\n      startOffsetNextM,\n      destArr,\n      destOffsetM,\n      destOffsetNextM\n    );\n    startArr = startArr.slice(0, startOffsetM).concat(\n      result.start,\n      startOffsetNextM === false ? [] : startArr.slice(startOffsetNextM)\n    );\n    destArr = destArr.slice(0, destOffsetM).concat(\n      result.dest,\n      destOffsetNextM === false ? [] : destArr.slice(destOffsetNextM)\n    );\n    startOffsetM = startOffsetNextM === false ? false : startOffsetM + result.start.length;\n    destOffsetM = destOffsetNextM === false ? false : destOffsetM + result.dest.length;\n  }\n  return { start: startArr, dest: destArr };\n}\nfunction morphPaths(fromD, toD) {\n  var synced = synchronizePaths(fromD, toD);\n  var startArr = synced.start;\n  var destArr = synced.dest;\n  return function(pos) {\n    var result = startArr.map(function(from, idx) {\n      return destArr[idx].map(function(to, toIdx) {\n        if (toIdx === 0) return to;\n        return from[toIdx] + (destArr[idx][toIdx] - from[toIdx]) * pos;\n      });\n    });\n    return arrayToPath(result);\n  };\n}\nlet _measureSvg = null;\nlet _measurePath = null;\nfunction samplePathPoints(d, n) {\n  const pts = new Array(n);\n  if (!Environment.isBrowser()) {\n    const arr = parsePath(d);\n    const bbox = pathBbox(arr);\n    const cx = bbox.x + bbox.width / 2;\n    const cy = bbox.y + bbox.height / 2;\n    for (let i = 0; i < n; i++) pts[i] = { x: cx, y: cy };\n    return pts;\n  }\n  if (!_measureSvg) {\n    _measureSvg = /** @type {SVGSVGElement} */\n    document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    _measureSvg.setAttribute(\"width\", \"0\");\n    _measureSvg.setAttribute(\"height\", \"0\");\n    _measureSvg.setAttribute(\n      \"style\",\n      \"position:absolute;width:0;height:0;visibility:hidden;pointer-events:none;\"\n    );\n    _measurePath = /** @type {SVGPathElement} */\n    document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n    _measureSvg.appendChild(_measurePath);\n    document.body.appendChild(_measureSvg);\n  }\n  _measurePath.setAttribute(\"d\", d || \"M0 0\");\n  let len = 0;\n  try {\n    len = _measurePath.getTotalLength();\n  } catch (e) {\n    len = 0;\n  }\n  if (!len || !isFinite(len)) {\n    const arr = parsePath(d);\n    const bbox = pathBbox(arr);\n    const cx = bbox.x + bbox.width / 2;\n    const cy = bbox.y + bbox.height / 2;\n    for (let i = 0; i < n; i++) pts[i] = { x: cx, y: cy };\n    return pts;\n  }\n  for (let i = 0; i < n; i++) {\n    try {\n      const p = _measurePath.getPointAtLength(i / n * len);\n      pts[i] = { x: p.x, y: p.y };\n    } catch (e) {\n      pts[i] = { x: 0, y: 0 };\n    }\n  }\n  return pts;\n}\nfunction morphPolygons(fromD, toD, n = 96) {\n  const fromPts = samplePathPoints(fromD, n);\n  const toPts = samplePathPoints(toD, n);\n  let bestOffset = 0;\n  let bestDist = Infinity;\n  for (let off = 0; off < n; off++) {\n    let dist = 0;\n    for (let i = 0; i < n; i++) {\n      const a = fromPts[(i + off) % n];\n      const b = toPts[i];\n      const dx = a.x - b.x;\n      const dy = a.y - b.y;\n      dist += dx * dx + dy * dy;\n      if (dist >= bestDist) break;\n    }\n    if (dist < bestDist) {\n      bestDist = dist;\n      bestOffset = off;\n    }\n  }\n  const aligned = new Array(n);\n  for (let i = 0; i < n; i++) {\n    aligned[i] = fromPts[(i + bestOffset) % n];\n  }\n  return function(pos) {\n    let out = \"\";\n    for (let i = 0; i < n; i++) {\n      const a = aligned[i];\n      const b = toPts[i];\n      const x = a.x + (b.x - a.x) * pos;\n      const y = a.y + (b.y - a.y) * pos;\n      out += (i === 0 ? \"M\" : \"L\") + x.toFixed(3) + \" \" + y.toFixed(3) + \" \";\n    }\n    return out + \"Z\";\n  };\n}\nfunction easeInOut(t) {\n  return -Math.cos(t * Math.PI) / 2 + 0.5;\n}\nfunction parseColor(str) {\n  if (!str || typeof str !== \"string\") return null;\n  if (str[0] === \"#\") {\n    let hex = str.slice(1);\n    if (hex.length === 3)\n      hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n    const n = parseInt(hex, 16);\n    return [n >> 16 & 255, n >> 8 & 255, n & 255, 1];\n  }\n  const m = str.match(\n    /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d.]+))?\\s*\\)/\n  );\n  if (m) return [+m[1], +m[2], +m[3], m[4] !== void 0 ? +m[4] : 1];\n  return null;\n}\nfunction interpolateColor(from, to, pos) {\n  return `rgba(${Math.round(from[0] + (to[0] - from[0]) * pos)},${Math.round(from[1] + (to[1] - from[1]) * pos)},${Math.round(from[2] + (to[2] - from[2]) * pos)},${from[3] + (to[3] - from[3]) * pos})`;\n}\nclass SVGAnimationRunner {\n  /**\n   * @param {any} element\n   * @param {number} duration\n   * @param {number} delay\n   */\n  constructor(element, duration, delay) {\n    this.el = element;\n    this.duration = duration != null ? duration : 300;\n    this.delay = delay || 0;\n    this._attrTarget = null;\n    this._plotTarget = null;\n    this._plotAlgorithm = \"commands\";\n    this._afterCb = null;\n    this._duringCb = null;\n    this._next = null;\n    this._root = null;\n    this._scheduled = false;\n  }\n  /**\n   * @param {Record<string, any>} to\n   */\n  attr(to) {\n    this._attrTarget = to;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {string} d\n   * @param {'commands' | 'polygons'} [algorithm] - morph engine to use for\n   *   the d→d interpolation. 'commands' (default) is the legacy\n   *   per-command lerp; 'polygons' resamples both paths into N evenly\n   *   spaced points and tweens point-by-point (smoother for shapes with\n   *   very different anchor-point counts).\n   */\n  plot(d, algorithm) {\n    this._plotTarget = d;\n    if (algorithm) this._plotAlgorithm = algorithm;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {Function} fn\n   */\n  after(fn) {\n    this._afterCb = fn;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {Function} fn\n   */\n  during(fn) {\n    this._duringCb = fn;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {number} duration\n   * @param {number} delay\n   */\n  animate(duration, delay) {\n    const next = new SVGAnimationRunner(this.el, duration, delay);\n    this._next = next;\n    next._root = this._root || this;\n    return next;\n  }\n  _schedule() {\n    const root = this._root || this;\n    if (!root._scheduled) {\n      root._scheduled = true;\n      queueMicrotask(() => root._executeChain());\n    }\n  }\n  _executeChain() {\n    const chain = [];\n    let r = this;\n    while (r) {\n      chain.push(r);\n      r = r._next;\n    }\n    let cumulativeDelay = 0;\n    chain.forEach((runner) => {\n      cumulativeDelay += runner.delay;\n      runner._execute(cumulativeDelay);\n      cumulativeDelay += runner.duration;\n    });\n  }\n  /**\n   * @param {number} startDelay\n   */\n  _execute(startDelay) {\n    const el = this.el;\n    const duration = this.duration;\n    if (duration <= 1) {\n      const apply = () => {\n        if (this._attrTarget) el.attr(this._attrTarget);\n        if (this._plotTarget) el.plot(this._plotTarget);\n        if (this._afterCb) this._afterCb.call(el);\n      };\n      if (startDelay > 0) {\n        setTimeout(apply, startDelay);\n      } else {\n        apply();\n      }\n      return;\n    }\n    const run = () => {\n      const fromAttrs = (\n        /** @type {Record<string, any>} */\n        {}\n      );\n      const fromColors = (\n        /** @type {Record<string, any>} */\n        {}\n      );\n      const toColors = (\n        /** @type {Record<string, any>} */\n        {}\n      );\n      if (this._attrTarget) {\n        for (const key of Object.keys(this._attrTarget)) {\n          const fromVal = el.attr(key);\n          fromAttrs[key] = fromVal;\n          const fc = parseColor(fromVal);\n          const tc = parseColor(String(this._attrTarget[key]));\n          if (fc && tc) {\n            fromColors[key] = fc;\n            toColors[key] = tc;\n          }\n        }\n      }\n      let morphFn = null;\n      if (this._plotTarget) {\n        const fromPath = el.attr(\"d\") || \"\";\n        try {\n          morphFn = this._plotAlgorithm === \"polygons\" ? morphPolygons(fromPath, this._plotTarget) : morphPaths(fromPath, this._plotTarget);\n        } catch (e) {\n          morphFn = null;\n        }\n      }\n      const start = performance.now();\n      const tick = (now) => {\n        const elapsed = now - start;\n        const rawPos = Math.min(elapsed / duration, 1);\n        const pos = easeInOut(rawPos);\n        if (this._attrTarget) {\n          if (rawPos >= 1) {\n            el.attr(this._attrTarget);\n          } else {\n            const current = (\n              /** @type {Record<string, any>} */\n              {}\n            );\n            for (const key of Object.keys(this._attrTarget)) {\n              if (fromColors[key] && toColors[key]) {\n                current[key] = interpolateColor(\n                  fromColors[key],\n                  toColors[key],\n                  pos\n                );\n              } else {\n                const from = parseFloat(fromAttrs[key]);\n                const to = parseFloat(this._attrTarget[key]);\n                if (!isNaN(from) && !isNaN(to)) {\n                  current[key] = from + (to - from) * pos;\n                }\n              }\n            }\n            el.attr(current);\n          }\n        }\n        if (morphFn && rawPos < 1) {\n          el.attr(\n            \"d\",\n            /** @type {any} */\n            morphFn(pos)\n          );\n        }\n        if (this._duringCb) this._duringCb(pos);\n        if (rawPos < 1) {\n          BrowserAPIs.requestAnimationFrame(tick);\n        } else {\n          if (this._plotTarget) {\n            el.attr(\"d\", this._plotTarget);\n          }\n          if (this._afterCb) this._afterCb.call(el);\n        }\n      };\n      BrowserAPIs.requestAnimationFrame(tick);\n    };\n    if (startDelay > 0) {\n      setTimeout(run, startDelay);\n    } else {\n      run();\n    }\n  }\n}\nfunction installAnimationMethods(ElementClass) {\n  ElementClass.prototype.animate = function(duration, delay) {\n    return new SVGAnimationRunner(this, duration, delay);\n  };\n}\nfunction installDraggable(ElementClass) {\n  ElementClass.prototype.draggable = function(opts) {\n    if (opts === false) {\n      if (this._dragCleanup) {\n        this._dragCleanup();\n        this._dragCleanup = null;\n      }\n      return this;\n    }\n    const el = this;\n    const constraints = opts || {};\n    const onPointerDown = (e) => {\n      if (e.button && e.button !== 0) return;\n      e.stopPropagation();\n      const isTouch = e.type === \"touchstart\";\n      const ev = isTouch ? e.touches[0] : e;\n      const svgEl = el.node;\n      const startAttrX = parseFloat(svgEl.getAttribute(\"x\")) || 0;\n      const startAttrY = parseFloat(svgEl.getAttribute(\"y\")) || 0;\n      const startClientX = ev.clientX;\n      const startClientY = ev.clientY;\n      const svgRoot = svgEl.ownerSVGElement;\n      let ctm = null;\n      if (svgRoot) {\n        ctm = svgRoot.getScreenCTM();\n      }\n      const onMove = (me) => {\n        const mev = me.type === \"touchmove\" ? me.touches[0] : me;\n        let dx = mev.clientX - startClientX;\n        let dy = mev.clientY - startClientY;\n        if (ctm) {\n          dx = dx / ctm.a;\n          dy = dy / ctm.d;\n        }\n        let newX = startAttrX + dx;\n        let newY = startAttrY + dy;\n        const w = parseFloat(svgEl.getAttribute(\"width\")) || 0;\n        const h = parseFloat(svgEl.getAttribute(\"height\")) || 0;\n        if (constraints.minX !== void 0 && newX < constraints.minX)\n          newX = constraints.minX;\n        if (constraints.minY !== void 0 && newY < constraints.minY)\n          newY = constraints.minY;\n        if (constraints.maxX !== void 0 && newX + w > constraints.maxX)\n          newX = constraints.maxX - w;\n        if (constraints.maxY !== void 0 && newY + h > constraints.maxY)\n          newY = constraints.maxY - h;\n        const box = {\n          x: newX,\n          y: newY,\n          w,\n          h,\n          x2: newX + w,\n          y2: newY + h\n        };\n        const event = new CustomEvent(\"dragmove\", {\n          detail: {\n            handler: {\n              /**\n               * @param {number} x\n               * @param {number} y\n               */\n              move: function(x, y) {\n                svgEl.setAttribute(\"x\", x);\n                svgEl.setAttribute(\"y\", y);\n              }\n            },\n            box\n          }\n        });\n        svgEl.dispatchEvent(event);\n      };\n      const onUp = () => {\n        if (Environment.isBrowser()) {\n          document.removeEventListener(\"mousemove\", onMove);\n          document.removeEventListener(\"touchmove\", onMove);\n          document.removeEventListener(\"mouseup\", onUp);\n          document.removeEventListener(\"touchend\", onUp);\n        }\n      };\n      if (Environment.isBrowser()) {\n        document.addEventListener(\"mousemove\", onMove);\n        document.addEventListener(\"touchmove\", onMove);\n        document.addEventListener(\"mouseup\", onUp);\n        document.addEventListener(\"touchend\", onUp);\n      }\n    };\n    el.node.addEventListener(\"mousedown\", onPointerDown);\n    el.node.addEventListener(\"touchstart\", onPointerDown);\n    el._dragCleanup = () => {\n      el.node.removeEventListener(\"mousedown\", onPointerDown);\n      el.node.removeEventListener(\"touchstart\", onPointerDown);\n    };\n    return el;\n  };\n}\nfunction installSelectable(ElementClass) {\n  ElementClass.prototype.select = function(opts) {\n    if (opts === false) {\n      if (this._selectCleanup) {\n        this._selectCleanup();\n        this._selectCleanup = null;\n      }\n      return this;\n    }\n    const el = this;\n    const { createHandle, updateHandle } = opts;\n    const handleGroup = document.createElementNS(SVGNS, \"g\");\n    handleGroup.setAttribute(\"class\", \"svg_select_points\");\n    const parent = el.node.parentNode;\n    if (parent) {\n      parent.appendChild(handleGroup);\n    }\n    const handles = {};\n    const handleNames = [\"t\", \"b\", \"l\", \"r\", \"lt\", \"rt\", \"lb\", \"rb\"];\n    handleNames.forEach((name2, index) => {\n      const subGroup = new SVGContainer(document.createElementNS(SVGNS, \"g\"));\n      handleGroup.appendChild(subGroup.node);\n      const handle = createHandle(subGroup, [0, 0], index, [], name2);\n      handles[name2] = { group: subGroup, handle };\n    });\n    const updatePositions = () => {\n      const x = parseFloat(el.attr(\"x\")) || 0;\n      const y = parseFloat(el.attr(\"y\")) || 0;\n      const w = parseFloat(el.attr(\"width\")) || 0;\n      const h = parseFloat(el.attr(\"height\")) || 0;\n      const elTransform = el.node.getAttribute(\"transform\");\n      if (elTransform) {\n        handleGroup.setAttribute(\"transform\", elTransform);\n      } else {\n        handleGroup.removeAttribute(\"transform\");\n      }\n      const positions = {\n        t: [x + w / 2, y],\n        b: [x + w / 2, y + h],\n        l: [x, y + h / 2],\n        r: [x + w, y + h / 2],\n        lt: [x, y],\n        rt: [x + w, y],\n        lb: [x, y + h],\n        rb: [x + w, y + h]\n      };\n      handleNames.forEach((name2) => {\n        if (handles[name2] && positions[name2]) {\n          updateHandle(handles[name2].group, positions[name2]);\n        }\n      });\n    };\n    updatePositions();\n    el._selectHandles = handleGroup;\n    el._selectHandlesMap = handles;\n    el._updateSelectPositions = updatePositions;\n    el._selectCleanup = () => {\n      if (handleGroup.parentNode) {\n        handleGroup.parentNode.removeChild(handleGroup);\n      }\n      el._selectHandles = null;\n      el._selectHandlesMap = null;\n      el._updateSelectPositions = null;\n    };\n    return el;\n  };\n  ElementClass.prototype.resize = function(enable) {\n    if (enable === false) {\n      if (this._resizeCleanup) {\n        this._resizeCleanup();\n        this._resizeCleanup = null;\n      }\n      return this;\n    }\n    const el = this;\n    const handles = el._selectHandlesMap;\n    if (!handles) return el;\n    const cleanupFns = [];\n    const makeHandleDraggable = (name2) => {\n      const handleInfo = handles[name2];\n      if (!handleInfo || !handleInfo.group || !handleInfo.group.node) return;\n      const handleNode = handleInfo.group.node;\n      const onPointerDown = (e) => {\n        if (e.button && e.button !== 0) return;\n        e.stopPropagation();\n        const isTouch = e.type === \"touchstart\";\n        const ev = isTouch ? e.touches[0] : e;\n        const startClientX = ev.clientX;\n        const svgRoot = el.node.ownerSVGElement;\n        let ctm = null;\n        if (svgRoot) {\n          ctm = svgRoot.getScreenCTM();\n        }\n        const startX = parseFloat(el.attr(\"x\")) || 0;\n        const startW = parseFloat(el.attr(\"width\")) || 0;\n        const onMove = (me) => {\n          const mev = me.type === \"touchmove\" ? me.touches[0] : me;\n          let dx = mev.clientX - startClientX;\n          if (ctm) dx = dx / /** @type {any} */\n          ctm.a;\n          let newX = startX;\n          let newW = startW;\n          if (name2 === \"l\") {\n            newX = startX + dx;\n            newW = startW - dx;\n          } else if (name2 === \"r\") {\n            newW = startW + dx;\n          }\n          if (newW < 0) {\n            newW = 0;\n          }\n          el.attr({ x: newX, width: newW });\n          if (el._updateSelectPositions) {\n            el._updateSelectPositions();\n          }\n          const event = new CustomEvent(\"resize\", {\n            detail: { el }\n          });\n          el.node.dispatchEvent(event);\n        };\n        const onUp = () => {\n          if (Environment.isBrowser()) {\n            document.removeEventListener(\"mousemove\", onMove);\n            document.removeEventListener(\"touchmove\", onMove);\n            document.removeEventListener(\"mouseup\", onUp);\n            document.removeEventListener(\"touchend\", onUp);\n          }\n          const event = new CustomEvent(\"resize\", {\n            detail: { el }\n          });\n          el.node.dispatchEvent(event);\n        };\n        if (Environment.isBrowser()) {\n          document.addEventListener(\"mousemove\", onMove);\n          document.addEventListener(\"touchmove\", onMove);\n          document.addEventListener(\"mouseup\", onUp);\n          document.addEventListener(\"touchend\", onUp);\n        }\n      };\n      handleNode.addEventListener(\"mousedown\", onPointerDown);\n      handleNode.addEventListener(\"touchstart\", onPointerDown);\n      cleanupFns.push(() => {\n        handleNode.removeEventListener(\"mousedown\", onPointerDown);\n        handleNode.removeEventListener(\"touchstart\", onPointerDown);\n      });\n    };\n    makeHandleDraggable(\"l\");\n    makeHandleDraggable(\"r\");\n    el._resizeCleanup = () => {\n      cleanupFns.forEach((fn) => fn());\n    };\n    return el;\n  };\n}\ninstallFilterMethods(SVGElement);\ninstallAnimationMethods(SVGElement);\ninstallDraggable(SVGElement);\ninstallSelectable(SVGElement);\nfunction SVG() {\n  const svgEl = BrowserAPIs.createElementNS(SVGNS, \"svg\");\n  const svg = new SVGContainer(svgEl);\n  svg.attr({ xmlns: SVGNS });\n  return svg;\n}\nSVG.xlink = \"http://www.w3.org/1999/xlink\";\nif (Environment.isBrowser() && typeof window.SVG === \"undefined\") {\n  window.SVG = SVG;\n}\nif (Environment.isBrowser()) {\n  if (typeof window.SVG === \"undefined\") {\n    window.SVG = SVG;\n  }\n  if (typeof window.Apex === \"undefined\") {\n    window.Apex = {};\n  }\n} else {\n  if (typeof global !== \"undefined\") {\n    if (typeof /** @type {any} */\n    global.Apex === \"undefined\") {\n      global.Apex = {};\n    }\n    if (typeof /** @type {any} */\n    global.SVG === \"undefined\") {\n      global.SVG = SVG;\n    }\n  }\n}\nconst _InitCtxVariables = class _InitCtxVariables {\n  /**\n   * Register one or more optional feature modules.\n   *\n   * @param {Record<string, new (w: object, ctx: object) => unknown>} featureMap\n   *   Plain object mapping ctx property name → constructor.\n   *\n   * Example (called from src/features/legend.js):\n   *   InitCtxVariables.registerFeatures({ legend: Legend })\n   */\n  static registerFeatures(featureMap) {\n    for (const [key, Ctor] of Object.entries(featureMap)) {\n      _InitCtxVariables._featureRegistry.set(key, Ctor);\n    }\n  }\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(ctx) {\n    this.ctx = ctx;\n    this.w = ctx.w;\n  }\n  initModules() {\n    this.ctx.publicMethods = [\n      \"updateOptions\",\n      \"updateSeries\",\n      \"appendData\",\n      \"appendSeries\",\n      \"isSeriesHidden\",\n      \"highlightSeries\",\n      \"toggleSeries\",\n      \"showSeries\",\n      \"hideSeries\",\n      \"setLocale\",\n      \"resetSeries\",\n      \"zoomX\",\n      \"toggleDataPointSelection\",\n      \"dataURI\",\n      \"exportToCSV\",\n      \"addXaxisAnnotation\",\n      \"addYaxisAnnotation\",\n      \"addPointAnnotation\",\n      \"clearAnnotations\",\n      \"removeAnnotation\",\n      \"drillDown\",\n      \"drillUp\",\n      \"drillToRoot\",\n      \"paper\",\n      \"destroy\"\n    ];\n    this.ctx.eventList = [\n      \"click\",\n      \"mousedown\",\n      \"mousemove\",\n      \"mouseleave\",\n      \"touchstart\",\n      \"touchmove\",\n      \"touchleave\",\n      \"mouseup\",\n      \"touchend\",\n      \"keydown\",\n      \"keyup\"\n    ];\n    this.ctx.animations = new Animations(this.w, this.ctx);\n    this.ctx.axes = new Axes(this.w, this.ctx);\n    this.ctx.core = new Core(this.ctx.el, this.w, this.ctx);\n    this.ctx.config = new Config({});\n    this.ctx.data = new Data(this.w, {\n      resetGlobals: () => this.ctx.core.resetGlobals(),\n      isMultipleY: () => this.ctx.core.isMultipleY()\n    });\n    this.ctx.grid = new Grid(this.w, this.ctx);\n    this.ctx.graphics = new Graphics(this.w, this.ctx);\n    this.ctx.coreUtils = new CoreUtils(this.w);\n    this.ctx.crosshairs = new Crosshairs(this.w);\n    this.ctx.events = new Events(this.w, this.ctx);\n    this.ctx.fill = new Fill(this.w);\n    this.ctx.localization = new Localization(this.w);\n    this.ctx.options = new Options();\n    this.ctx.responsive = new Responsive(this.w);\n    this.ctx.series = new Series(this.w, {\n      // legend may not be registered — guard with ?.\n      toggleDataSeries: (...a) => {\n        var _a;\n        return (_a = this.ctx.legend) == null ? void 0 : _a.legendHelpers.toggleDataSeries(...a);\n      },\n      revertDefaultAxisMinMax: () => this.ctx.updateHelpers.revertDefaultAxisMinMax(),\n      updateSeries: (...a) => this.ctx.updateHelpers._updateSeries(...a)\n    });\n    this.ctx.theme = new Theme(this.w);\n    this.ctx.formatters = new Formatters(this.w);\n    this.ctx.titleSubtitle = new TitleSubtitle(this.w);\n    this.ctx.dimensions = new Dimensions(this.w, this.ctx);\n    this.ctx.updateHelpers = new UpdateHelpers(this.w, this.ctx);\n    const tooltipInstance = new Tooltip(this.w, this.ctx);\n    this.w.globals.tooltip = tooltipInstance;\n    Object.defineProperty(this.ctx, \"tooltip\", {\n      get() {\n        return this.w.globals.tooltip;\n      },\n      configurable: true\n    });\n    this._initOptionalModules();\n  }\n  /**\n   * Instantiate optional feature modules from the registry.\n   *\n   * Modules that are not registered are set to null on ctx so that call sites\n   * can safely use optional-chaining (ctx.tooltip?.drawTooltip(...)).\n   *\n   * Lazy-getter features (toolbar, zoomPanSelection, keyboardNavigation) are\n   * installed as on-demand getters so they are only constructed if accessed,\n   * and only if their constructor was registered.\n   */\n  _initOptionalModules() {\n    const reg = _InitCtxVariables._featureRegistry;\n    const w = this.w;\n    const ctx = this.ctx;\n    const ExportsCtor = reg.get(\"exports\");\n    ctx.exports = ExportsCtor ? new ExportsCtor(w, ctx) : null;\n    const LegendCtor = reg.get(\"legend\");\n    ctx.legend = LegendCtor ? new LegendCtor(w, ctx) : null;\n    const MorphCtor = reg.get(\"morphTypeChange\");\n    ctx.morphTypeChange = MorphCtor ? new MorphCtor(w, ctx) : null;\n    const DrilldownCtor = reg.get(\"drilldown\");\n    ctx.drilldown = DrilldownCtor ? new DrilldownCtor(w, ctx) : null;\n    const ToolbarCtor = reg.get(\"toolbar\");\n    Object.defineProperty(ctx, \"toolbar\", {\n      get() {\n        var _a;\n        if (!this._toolbar && ToolbarCtor)\n          this._toolbar = new ToolbarCtor(w, this);\n        return (_a = this._toolbar) != null ? _a : null;\n      },\n      configurable: true\n    });\n    const ZoomPanCtor = reg.get(\"zoomPanSelection\");\n    Object.defineProperty(ctx, \"zoomPanSelection\", {\n      get() {\n        var _a;\n        if (!this._zoomPanSelection && ZoomPanCtor)\n          this._zoomPanSelection = new ZoomPanCtor(w, this);\n        return (_a = this._zoomPanSelection) != null ? _a : null;\n      },\n      configurable: true\n    });\n    const KeyboardCtor = reg.get(\"keyboardNavigation\");\n    Object.defineProperty(ctx, \"keyboardNavigation\", {\n      get() {\n        var _a;\n        if (!this._keyboardNavigation && KeyboardCtor)\n          this._keyboardNavigation = new KeyboardCtor(w, this);\n        return (_a = this._keyboardNavigation) != null ? _a : null;\n      },\n      configurable: true\n    });\n  }\n};\n/**\n * Registry of optional feature modules.\n *\n * Populated by ApexCharts.registerFeatures() (called from feature entry\n * files such as src/features/legend.js). Keys match the ctx property name\n * the module is stored under (e.g. 'legend', 'exports').\n *\n * Core modules that every chart needs are NOT in this registry — they are\n * always instantiated unconditionally in initModules().\n */\n__publicField(_InitCtxVariables, \"_featureRegistry\", /* @__PURE__ */ new Map());\nlet InitCtxVariables = _InitCtxVariables;\nclass Destroy {\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(ctx) {\n    this.ctx = ctx;\n    this.w = ctx.w;\n  }\n  /**\n   * @param {{ isUpdating: boolean }} opts\n   */\n  clear({ isUpdating }) {\n    if (!isUpdating) {\n      this.w.globals.isDestroyed = true;\n    }\n    if (this.ctx._zoomPanSelection) {\n      this.ctx._zoomPanSelection.destroy();\n    }\n    if (this.ctx._toolbar) {\n      this.ctx._toolbar.destroy();\n    }\n    if (this.w.globals.resizeObserver && typeof this.w.globals.resizeObserver.disconnect === \"function\") {\n      this.w.globals.resizeObserver.disconnect();\n      this.w.globals.resizeObserver = null;\n    }\n    PerformanceCache.invalidateAll(this.w);\n    if (isUpdating) {\n      this.ctx._zoomPanSelection = null;\n      this.ctx._toolbar = null;\n      this.ctx._keyboardNavigation = null;\n    } else {\n      this.ctx.animations = null;\n      this.ctx.axes = null;\n      this.ctx.annotations = null;\n      this.ctx.core = null;\n      this.ctx.data = null;\n      this.ctx.grid = null;\n      this.ctx.series = null;\n      this.ctx.responsive = null;\n      this.ctx.theme = null;\n      this.ctx.formatters = null;\n      this.ctx.titleSubtitle = null;\n      this.ctx.legend = null;\n      this.ctx.dimensions = null;\n      this.ctx.options = null;\n      this.ctx.crosshairs = null;\n      this.ctx._zoomPanSelection = null;\n      this.ctx.updateHelpers = null;\n      this.ctx._toolbar = null;\n      this.ctx.localization = null;\n      this.ctx._keyboardNavigation = null;\n      this.ctx.w.globals.tooltip = null;\n    }\n    this.clearDomElements({ isUpdating });\n  }\n  /**\n   * @param {any} draw\n   */\n  killSVG(draw) {\n    draw.each(\n      /** @this {any} */\n      function() {\n        this.removeClass(\"*\");\n        this.off();\n      },\n      true\n    );\n    draw.clear();\n  }\n  /**\n   * @param {{ isUpdating: boolean }} opts\n   */\n  clearDomElements({ isUpdating }) {\n    const domEls = (\n      /** @type {any} */\n      this.w.dom\n    );\n    if (Environment.isBrowser() && domEls.Paper) {\n      const elSVG = domEls.Paper.node;\n      if (elSVG.parentNode && elSVG.parentNode.parentNode && !isUpdating) {\n        elSVG.parentNode.parentNode.style.minHeight = \"unset\";\n      }\n      const baseEl = domEls.baseEl;\n      if (baseEl) {\n        this.ctx.eventList.forEach((event) => {\n          baseEl.removeEventListener(event, this.ctx.events.documentEvent);\n        });\n      }\n      if (this.ctx.el !== null) {\n        while (this.ctx.el.firstChild) {\n          this.ctx.el.removeChild(this.ctx.el.firstChild);\n        }\n      }\n      this.killSVG(domEls.Paper);\n      domEls.Paper.remove();\n    }\n    domEls.elWrap = null;\n    domEls.elGraphical = null;\n    domEls.elLegendWrap = null;\n    domEls.elLegendForeign = null;\n    domEls.baseEl = null;\n    domEls.elGridRect = null;\n    domEls.elGridRectMask = null;\n    domEls.elGridRectBarMask = null;\n    domEls.elGridRectMarkerMask = null;\n    domEls.elForecastMask = null;\n    domEls.elNonForecastMask = null;\n    domEls.elDefs = null;\n  }\n}\nconst ros = /* @__PURE__ */ new WeakMap();\nfunction addResizeListener(el, fn) {\n  if (Environment.isSSR()) return;\n  let called = false;\n  if (el.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n    const elRect = el.getBoundingClientRect();\n    if (el.style.display === \"none\" || elRect.width === 0) {\n      called = true;\n    }\n  }\n  const ro = new ResizeObserver((r) => {\n    if (called) {\n      fn.call(el, r);\n    }\n    called = true;\n  });\n  if (el.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n    Array.from(el.children).forEach((c) => ro.observe(c));\n  } else {\n    ro.observe(el);\n  }\n  ros.set(fn, ro);\n}\nfunction removeResizeListener(el, fn) {\n  if (Environment.isSSR()) return;\n  const ro = ros.get(fn);\n  if (ro) {\n    ro.disconnect();\n    ros.delete(fn);\n  }\n}\nconst apexCSS = '@keyframes opaque {\\n  0% {\\n    opacity: 0\\n  }\\n\\n  to {\\n    opacity: 1\\n  }\\n}\\n\\n@keyframes resizeanim {\\n\\n  0%,\\n  to {\\n    opacity: 0\\n  }\\n}\\n\\n.apexcharts-canvas {\\n  position: relative;\\n  direction: ltr !important;\\n  user-select: none;\\n  /* Focus indicator colour. Themes override below. */\\n  --apexcharts-focus-color: #008FFB;\\n}\\n\\n/* Dark theme & high-contrast: brighter focus colour for sufficient contrast. */\\n.apexcharts-canvas .apexcharts-theme-dark,\\n.apexcharts-theme-dark.apexcharts-canvas {\\n  --apexcharts-focus-color: #FFD500;\\n}\\n.apexcharts-canvas.apexcharts-high-contrast,\\n.apexcharts-high-contrast.apexcharts-canvas {\\n  --apexcharts-focus-color: #FFFF00;\\n}\\n\\n/* Visually-hidden aria-live status region (WCAG 4.1.3 Status Messages). */\\n.apexcharts-sr-status {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  padding: 0;\\n  margin: -1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0);\\n  white-space: nowrap;\\n  border: 0;\\n}\\n\\n/* Respect OS-level reduced-motion preference (WCAG 2.3.3). */\\n@media (prefers-reduced-motion: reduce) {\\n  .apexcharts-canvas *,\\n  .apexcharts-canvas *::before,\\n  .apexcharts-canvas *::after {\\n    animation-duration: 0.01ms !important;\\n    animation-iteration-count: 1 !important;\\n    transition-duration: 0.01ms !important;\\n  }\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar {\\n  -webkit-appearance: none;\\n  width: 6px\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\\n  border-radius: 4px;\\n  background-color: rgba(0, 0, 0, .5);\\n  box-shadow: 0 0 1px rgba(255, 255, 255, .5);\\n  -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5)\\n}\\n\\n.apexcharts-inner {\\n  position: relative\\n}\\n\\n.apexcharts-text tspan {\\n  font-family: inherit\\n}\\n\\nrect.legend-mouseover-inactive,\\n.legend-mouseover-inactive rect,\\n.legend-mouseover-inactive path,\\n.legend-mouseover-inactive circle,\\n.legend-mouseover-inactive line,\\n.legend-mouseover-inactive text.apexcharts-yaxis-title-text,\\n.legend-mouseover-inactive text.apexcharts-yaxis-label {\\n  transition: .15s ease all;\\n  opacity: .2\\n}\\n\\n.apexcharts-legend-text {\\n  padding-left: 15px;\\n  margin-left: -15px;\\n}\\n\\n.apexcharts-legend-series[role=\"button\"]:focus {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: 2px;\\n}\\n\\n.apexcharts-legend-series[role=\"button\"]:focus:not(:focus-visible) {\\n  outline: none;\\n}\\n\\n.apexcharts-legend-series[role=\"button\"]:focus-visible {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: 2px;\\n}\\n\\n.apexcharts-series-collapsed {\\n  opacity: 0\\n}\\n\\n.apexcharts-canvas svg:focus:not(:focus-visible) {\\n  outline: none;\\n}\\n\\n/* Keyboard navigation focus indicator on SVG data elements.\\n   SVG elements don\\'t support CSS outline, so we use stroke. */\\n.apexcharts-bar-area.apexcharts-keyboard-focused,\\n.apexcharts-candlestick-area.apexcharts-keyboard-focused,\\n.apexcharts-boxPlot-area.apexcharts-keyboard-focused,\\n.apexcharts-rangebar-area.apexcharts-keyboard-focused,\\n.apexcharts-pie-area.apexcharts-keyboard-focused,\\n.apexcharts-heatmap-rect.apexcharts-keyboard-focused,\\n.apexcharts-treemap-rect.apexcharts-keyboard-focused {\\n  stroke: var(--apexcharts-focus-color, #008FFB);\\n  stroke-width: 2;\\n  stroke-opacity: 1;\\n}\\n\\n.apexcharts-tooltip {\\n  --apx-tt-bg: #ffffff;\\n  --apx-tt-border: rgba(15, 23, 42, 0.06);\\n  /* Layered shadow: tight inner contact + soft outer drop. The two Y\\n   * offsets are exposed as variables so they flip in sync with the\\n   * arrow when the tooltip is below the data point — see the\\n   * `[data-placement=\"bottom\"]` rule further down. */\\n  --apx-tt-shadow-y-mid: 8px;\\n  --apx-tt-shadow-y-far: 16px;\\n  --apx-tt-shadow: 0 0 0 1px rgba(15, 23, 42, 0.04), 0 var(--apx-tt-shadow-y-mid) 16px -6px rgba(15, 23, 42, 0.12), 0 var(--apx-tt-shadow-y-far) 36px -12px rgba(15, 23, 42, 0.18);\\n  --apx-tt-arrow-bg: var(--apx-tt-bg);\\n  /* Two stacked drop-shadows: the first is a tight contact halo for\\n   * edge definition against light chart backgrounds; the second is a\\n   * softer directional drop that lifts the arrow off the surface.\\n   * `--apx-tt-arrow-drop-y` is the Y offset of the directional drop;\\n   * a per-placement rule below flips it to negative when the tooltip\\n   * is below the data point (arrow on top) so the shadow always\\n   * casts outward instead of into the tooltip body. */\\n  --apx-tt-arrow-drop-y: 2px;\\n  --apx-tt-arrow-shadow: drop-shadow(0 0 0.5px rgba(15, 23, 42, 0.2)) drop-shadow(0 var(--apx-tt-arrow-drop-y) 4px rgba(15, 23, 42, 0.2));\\n  --apx-tt-color: #0f172a;\\n  --apx-tt-color-muted: rgba(15, 23, 42, 0.55);\\n  border-radius: 8px;\\n  background: var(--apx-tt-bg);\\n  border: 1px solid var(--apx-tt-border);\\n  box-shadow: var(--apx-tt-shadow);\\n  color: var(--apx-tt-color);\\n  cursor: default;\\n  font-size: 13px;\\n  left: 0;\\n  top: 0;\\n  opacity: 0;\\n  pointer-events: none;\\n  position: absolute;\\n  display: flex;\\n  flex-direction: column;\\n  padding: 2px 0;\\n  white-space: nowrap;\\n  z-index: 12;\\n  transition: opacity .12s ease\\n}\\n\\n/* While the tooltip is visible, smoothly animate position changes\\n * between data points. Kept short (160 ms) and ease-out so it stays\\n * responsive — too long would feel laggy when sweeping across many\\n * points fast. The position transition is only attached after the\\n * first paint (Position.applyTooltipPosition flips `data-positioned`\\n * once the tooltip has been placed) so the *first* show doesn\\'t slide\\n * the tooltip in from the previously-stale (0,0) coordinates. */\\n.apexcharts-tooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: opacity .12s ease\\n}\\n.apexcharts-tooltip.apexcharts-active[data-positioned=\"true\"] {\\n  transition: opacity .12s ease, left .16s ease-out, top .16s ease-out\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light {\\n  /* defaults already set above; class kept for backward-compat selectors */\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark {\\n  --apx-tt-bg: #1c1c1f;\\n  --apx-tt-border: rgba(255, 255, 255, 0.08);\\n  --apx-tt-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4), 0 var(--apx-tt-shadow-y-mid) 16px -6px rgba(0, 0, 0, 0.45), 0 var(--apx-tt-shadow-y-far) 36px -12px rgba(0, 0, 0, 0.55);\\n  --apx-tt-arrow-shadow: drop-shadow(0 0 0.5px rgba(0, 0, 0, 0.55)) drop-shadow(0 var(--apx-tt-arrow-drop-y) 4px rgba(0, 0, 0, 0.45));\\n  --apx-tt-color: #f3f4f6;\\n  --apx-tt-color-muted: rgba(243, 244, 246, 0.55);\\n}\\n\\n.apexcharts-tooltip * {\\n  font-family: inherit\\n}\\n\\n.apexcharts-tooltip-title {\\n  padding: 8px 12px 4px;\\n  font-size: 12px;\\n  font-weight: 600;\\n  letter-spacing: 0.01em;\\n  color: var(--apx-tt-color-muted);\\n  background: transparent;\\n  border-bottom: none;\\n  margin-bottom: 0\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title,\\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\\n  background: transparent;\\n  border-bottom: none\\n}\\n\\n/* `fillSeriesColor`: each series-group already paints itself with the\\n * series colour. Drop the glass body entirely (transparent bg, no\\n * border, no backdrop-filter, no padding) and clip the coloured\\n * series-group(s) to the tooltip\\'s rounded corners so they fill the\\n * shell edge-to-edge. Text inside the coloured group is forced to\\n * white for contrast. */\\n.apexcharts-tooltip.apexcharts-tooltip-fill-series {\\n  background: transparent;\\n  -webkit-backdrop-filter: none;\\n  backdrop-filter: none;\\n  border: none;\\n  padding: 0;\\n  overflow: hidden;\\n  color: #fff\\n}\\n\\n.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-title {\\n  background: rgba(0, 0, 0, 0.22);\\n  color: #fff;\\n  opacity: 1;\\n  padding: 6px 12px\\n}\\n\\n.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-series-group {\\n  color: #fff\\n}\\n\\n/* Arrow connector — sits *entirely outside* the tooltip body. Shares\\n * the body\\'s solid fill so it reads as a single shape. `filter:\\n * drop-shadow` traces the clipped triangle outline (a regular\\n * `box-shadow` would be erased by the `clip-path`). */\\n.apexcharts-tooltip-arrow {\\n  position: absolute;\\n  width: 7px;\\n  height: 14px;\\n  background: var(--apx-tt-arrow-bg);\\n  /* The variable already contains the full `drop-shadow(...) ...` filter\\n   * chain (stacked shadows) so it\\'s applied raw. */\\n  -webkit-filter: var(--apx-tt-arrow-shadow);\\n  filter: var(--apx-tt-arrow-shadow);\\n  pointer-events: none;\\n  top: calc(var(--apx-tt-arrow-y, 50%) - 7px)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"right\"] .apexcharts-tooltip-arrow {\\n  left: -7px;\\n  clip-path: polygon(0 50%, 100% 0, 100% 100%)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"left\"] .apexcharts-tooltip-arrow {\\n  right: -7px;\\n  clip-path: polygon(100% 50%, 0 0, 0 100%)\\n}\\n\\n/* Vertical arrow variants: tooltip is above/below the data point and the\\n * arrow points down/up. The base rule above uses `--apx-tt-arrow-y` for\\n * left/right placement; for top/bottom we re-orient the rectangle and\\n * use `--apx-tt-arrow-x` (set by applyTooltipPosition). */\\n.apexcharts-tooltip[data-placement=\"top\"] .apexcharts-tooltip-arrow,\\n.apexcharts-tooltip[data-placement=\"bottom\"] .apexcharts-tooltip-arrow {\\n  width: 14px;\\n  height: 7px;\\n  top: auto;\\n  left: calc(var(--apx-tt-arrow-x, 50%) - 7px)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"top\"] .apexcharts-tooltip-arrow {\\n  bottom: -7px;\\n  clip-path: polygon(50% 100%, 0 0, 100% 0)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"bottom\"] .apexcharts-tooltip-arrow {\\n  top: -7px;\\n  clip-path: polygon(50% 0, 0 100%, 100% 100%)\\n}\\n\\n/* When the tooltip is flipped below the data point (arrow on top\\n * pointing up), the default downward-biased shadows leave the top\\n * edge of both the body *and* the arrow undefined. Flipping every\\n * Y offset to negative casts the entire elevation upward so the\\n * shadow falls between the tooltip and the bar above. */\\n.apexcharts-tooltip[data-placement=\"bottom\"] {\\n  --apx-tt-shadow-y-mid: -8px;\\n  --apx-tt-shadow-y-far: -16px;\\n  --apx-tt-arrow-drop-y: -2px\\n}\\n\\n.apexcharts-tooltip-text-goals-value,\\n.apexcharts-tooltip-text-y-value,\\n.apexcharts-tooltip-text-z-value {\\n  display: inline-block;\\n  margin-left: 5px;\\n  font-weight: 600\\n}\\n\\n.apexcharts-tooltip-text-goals-label:empty,\\n.apexcharts-tooltip-text-goals-value:empty,\\n.apexcharts-tooltip-text-y-label:empty,\\n.apexcharts-tooltip-text-y-value:empty,\\n.apexcharts-tooltip-text-z-value:empty,\\n.apexcharts-tooltip-title:empty {\\n  display: none\\n}\\n\\n.apexcharts-tooltip-text-goals-label,\\n.apexcharts-tooltip-text-goals-value {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-tooltip-goals-group,\\n.apexcharts-tooltip-text-goals-label,\\n.apexcharts-tooltip-text-goals-value {\\n  display: flex\\n}\\n\\n.apexcharts-tooltip-text-goals-label:not(:empty),\\n.apexcharts-tooltip-text-goals-value:not(:empty) {\\n  margin-top: -6px\\n}\\n\\n.apexcharts-tooltip-marker {\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n  position: relative;\\n  width: 12px;\\n  height: 12px;\\n  margin-right: 6px;\\n  vertical-align: middle;\\n  color: inherit;\\n}\\n\\n.apexcharts-tooltip-marker svg {\\n  width: 100%;\\n  height: 100%;\\n  display: block;\\n}\\n\\n.apexcharts-tooltip-series-group {\\n  padding: 4px 12px;\\n  display: none;\\n  gap: 8px;\\n  text-align: left;\\n  justify-content: left;\\n  align-items: center\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\\n  opacity: 1\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active:last-child,\\n.apexcharts-tooltip-series-group:last-child {\\n  padding-bottom: 8px\\n}\\n\\n.apexcharts-tooltip-y-group {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-custom-tooltip,\\n.apexcharts-tooltip-box {\\n  padding: 4px 8px\\n}\\n\\n.apexcharts-tooltip-boxPlot {\\n  display: flex;\\n  flex-direction: column-reverse\\n}\\n\\n.apexcharts-tooltip-box>div {\\n  margin: 4px 0\\n}\\n\\n.apexcharts-tooltip-box span.value {\\n  font-weight: 700\\n}\\n\\n.apexcharts-tooltip-rangebar {\\n  padding: 5px 8px\\n}\\n\\n.apexcharts-tooltip-rangebar .category {\\n  font-weight: 600;\\n  color: #777\\n}\\n\\n.apexcharts-tooltip-rangebar .series-name {\\n  font-weight: 700;\\n  display: block;\\n  margin-bottom: 5px\\n}\\n\\n/* X/Y axis tooltips — small popovers that label the crosshair on the\\n * axes. Restyled to match the modern data-tooltip palette: solid white\\n * body with a subtle border + soft drop-shadow, smaller font, rounded\\n * corners. The arrows still use the CSS border-triangle technique\\n * (cheap, crisp at small sizes); their colours flow from CSS variables\\n * so light/dark themes only need one override per axis. */\\n.apexcharts-xaxistooltip,\\n.apexcharts-yaxistooltip {\\n  --apx-axt-bg: #ffffff;\\n  --apx-axt-border: rgba(15, 23, 42, 0.08);\\n  --apx-axt-color: #0f172a;\\n  --apx-axt-shadow: 0 4px 12px -4px rgba(15, 23, 42, 0.18), 0 1px 3px -1px rgba(15, 23, 42, 0.12);\\n  opacity: 0;\\n  pointer-events: none;\\n  color: var(--apx-axt-color);\\n  font-size: 12px;\\n  font-weight: 500;\\n  text-align: center;\\n  border-radius: 6px;\\n  position: absolute;\\n  z-index: 10;\\n  background: var(--apx-axt-bg);\\n  border: 1px solid var(--apx-axt-border);\\n  box-shadow: var(--apx-axt-shadow)\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-theme-dark,\\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\\n  --apx-axt-bg: #1c1c1f;\\n  --apx-axt-border: rgba(255, 255, 255, 0.1);\\n  --apx-axt-color: #f3f4f6;\\n  --apx-axt-shadow: 0 4px 12px -4px rgba(0, 0, 0, 0.55), 0 1px 3px -1px rgba(0, 0, 0, 0.45)\\n}\\n\\n.apexcharts-xaxistooltip {\\n  padding: 4px 8px;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xaxistooltip:after,\\n.apexcharts-xaxistooltip:before {\\n  left: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n/* :before paints the 1px border outline of the triangle (slightly larger\\n * than :after); :after sits inside and paints the fill — leaves a 1px\\n * ring of :before visible at the edges. */\\n.apexcharts-xaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 5px;\\n  margin-left: -5px\\n}\\n\\n.apexcharts-xaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-left: -6px\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after,\\n.apexcharts-xaxistooltip-bottom:before {\\n  bottom: 100%\\n}\\n\\n.apexcharts-xaxistooltip-top:after,\\n.apexcharts-xaxistooltip-top:before {\\n  top: 100%\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after {\\n  border-bottom-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-xaxistooltip-bottom:before {\\n  border-bottom-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-xaxistooltip-top:after {\\n  border-top-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-xaxistooltip-top:before {\\n  border-top-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-yaxistooltip {\\n  padding: 3px 8px\\n}\\n\\n.apexcharts-yaxistooltip:after,\\n.apexcharts-yaxistooltip:before {\\n  top: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n.apexcharts-yaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 5px;\\n  margin-top: -5px\\n}\\n\\n.apexcharts-yaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-top: -6px\\n}\\n\\n.apexcharts-yaxistooltip-left:after,\\n.apexcharts-yaxistooltip-left:before {\\n  left: 100%\\n}\\n\\n.apexcharts-yaxistooltip-right:after,\\n.apexcharts-yaxistooltip-right:before {\\n  right: 100%\\n}\\n\\n.apexcharts-yaxistooltip-left:after {\\n  border-left-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-yaxistooltip-left:before {\\n  border-left-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-yaxistooltip-right:after {\\n  border-right-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-yaxistooltip-right:before {\\n  border-right-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-active {\\n  opacity: 1\\n}\\n\\n.apexcharts-yaxistooltip-hidden {\\n  display: none\\n}\\n\\n.apexcharts-xcrosshairs,\\n.apexcharts-ycrosshairs {\\n  pointer-events: none;\\n  opacity: 0;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xcrosshairs.apexcharts-active,\\n.apexcharts-ycrosshairs.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-ycrosshairs-hidden {\\n  opacity: 0\\n}\\n\\n.apexcharts-selection-rect {\\n  cursor: move\\n}\\n\\n.svg_select_shape {\\n  stroke-width: 1;\\n  stroke-dasharray: 10 10;\\n  stroke: black;\\n  stroke-opacity: 0.1;\\n  pointer-events: none;\\n  fill: none;\\n}\\n\\n.svg_select_handle {\\n  stroke-width: 3;\\n  stroke: black;\\n  fill: none;\\n}\\n\\n.svg_select_handle_r {\\n  cursor: e-resize;\\n}\\n\\n.svg_select_handle_l {\\n  cursor: w-resize;\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\\n  cursor: crosshair\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\\n  cursor: move\\n}\\n\\n.apexcharts-menu-icon,\\n.apexcharts-pan-icon,\\n.apexcharts-reset-icon,\\n.apexcharts-selection-icon,\\n.apexcharts-toolbar-custom-icon,\\n.apexcharts-zoom-icon,\\n.apexcharts-zoomin-icon,\\n.apexcharts-zoomout-icon {\\n  cursor: pointer;\\n  /* WCAG 2.5.8 Target Size (Minimum): 24×24 CSS px hit target. */\\n  width: 26px;\\n  height: 24px;\\n  line-height: 24px;\\n  color: #6e8192;\\n  text-align: center;\\n  /* Reset native <button> chrome — these are styled via SVG icons. */\\n  padding: 0;\\n  margin: 0;\\n  background: transparent;\\n  border: 0;\\n  border-radius: 5px;\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n  transition: background-color .12s ease, color .12s ease;\\n}\\n\\n.apexcharts-menu-icon svg,\\n.apexcharts-pan-icon svg,\\n.apexcharts-reset-icon svg,\\n.apexcharts-selection-icon svg,\\n.apexcharts-zoom-icon svg,\\n.apexcharts-zoomin-icon svg,\\n.apexcharts-zoomout-icon svg {\\n  width: 18px;\\n  height: 18px;\\n  fill: none;\\n  stroke: currentColor;\\n  stroke-width: 2;\\n  stroke-linecap: round;\\n  stroke-linejoin: round\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-icon,\\n.apexcharts-theme-dark .apexcharts-pan-icon,\\n.apexcharts-theme-dark .apexcharts-reset-icon,\\n.apexcharts-theme-dark .apexcharts-selection-icon,\\n.apexcharts-theme-dark .apexcharts-toolbar-custom-icon,\\n.apexcharts-theme-dark .apexcharts-zoom-icon,\\n.apexcharts-theme-dark .apexcharts-zoomin-icon,\\n.apexcharts-theme-dark .apexcharts-zoomout-icon {\\n  color: #d4d6dc\\n}\\n\\n.apexcharts-canvas .apexcharts-pan-icon.apexcharts-selected,\\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected,\\n.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected,\\n.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected {\\n  background: rgba(0, 143, 251, 0.12);\\n  color: #008ffb\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-icon:hover,\\n.apexcharts-theme-light .apexcharts-pan-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-light .apexcharts-reset-icon:hover,\\n.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-light .apexcharts-zoomin-icon:hover,\\n.apexcharts-theme-light .apexcharts-zoomout-icon:hover {\\n  background: rgba(15, 23, 42, 0.06);\\n  color: #1f2937\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-icon:hover,\\n.apexcharts-theme-dark .apexcharts-pan-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-dark .apexcharts-reset-icon:hover,\\n.apexcharts-theme-dark .apexcharts-selection-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-dark .apexcharts-zoom-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-dark .apexcharts-zoomin-icon:hover,\\n.apexcharts-theme-dark .apexcharts-zoomout-icon:hover {\\n  background: rgba(255, 255, 255, 0.08);\\n  color: #fff\\n}\\n\\n.apexcharts-menu-icon,\\n.apexcharts-selection-icon {\\n  position: relative\\n}\\n\\n.apexcharts-toolbar {\\n  position: absolute;\\n  z-index: 11;\\n  display: inline-flex;\\n  align-items: center;\\n  gap: 1px;\\n  padding: 3px;\\n  border-radius: 8px;\\n  background: rgba(255, 255, 255, 0.85);\\n  backdrop-filter: blur(8px);\\n  -webkit-backdrop-filter: blur(8px);\\n}\\n\\n.apexcharts-theme-dark .apexcharts-toolbar {\\n  background: rgba(28, 28, 31, 0.82);\\n}\\n\\n.apexcharts-menu {\\n  background: rgba(255, 255, 255, 0.95);\\n  backdrop-filter: blur(8px);\\n  -webkit-backdrop-filter: blur(8px);\\n  position: absolute;\\n  top: calc(100% + 4px);\\n  border: 1px solid rgba(15, 23, 42, 0.08);\\n  border-radius: 8px;\\n  padding: 4px;\\n  right: 0;\\n  opacity: 0;\\n  min-width: 120px;\\n  transition: opacity .15s ease, transform .15s ease;\\n  transform: translateY(-2px);\\n  pointer-events: none;\\n  box-shadow: 0 4px 16px -4px rgba(15, 23, 42, 0.12), 0 2px 4px -1px rgba(15, 23, 42, 0.06)\\n}\\n\\n.apexcharts-menu.apexcharts-menu-open {\\n  opacity: 1;\\n  transform: translateY(0);\\n  pointer-events: all\\n}\\n\\n.apexcharts-menu-item {\\n  padding: 6px 9px;\\n  font-size: 12px;\\n  border-radius: 5px;\\n  cursor: pointer\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-item:hover {\\n  background: rgba(15, 23, 42, 0.06)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu {\\n  background: rgba(28, 28, 31, 0.92);\\n  border-color: rgba(255, 255, 255, 0.08);\\n  color: #f3f4f6;\\n  box-shadow: 0 4px 16px -4px rgba(0, 0, 0, 0.5), 0 2px 4px -1px rgba(0, 0, 0, 0.4)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-item:hover {\\n  background: rgba(255, 255, 255, 0.08)\\n}\\n\\n@media screen and (min-width:768px) {\\n  .apexcharts-canvas:hover .apexcharts-toolbar {\\n    opacity: 1\\n  }\\n}\\n\\n/* Toolbar keyboard accessibility: show toolbar when any button inside it is focused */\\n.apexcharts-toolbar:focus-within {\\n  opacity: 1\\n}\\n\\n/* Focus indicator for toolbar icon buttons */\\n.apexcharts-menu-icon:focus-visible,\\n.apexcharts-pan-icon:focus-visible,\\n.apexcharts-reset-icon:focus-visible,\\n.apexcharts-selection-icon:focus-visible,\\n.apexcharts-toolbar-custom-icon:focus-visible,\\n.apexcharts-zoom-icon:focus-visible,\\n.apexcharts-zoomin-icon:focus-visible,\\n.apexcharts-zoomout-icon:focus-visible {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: 1px;\\n  border-radius: 5px\\n}\\n\\n/* Focus indicator for hamburger menu items */\\n.apexcharts-menu-item:focus-visible {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: -2px;\\n  background: #eee\\n}\\n\\n.apexcharts-canvas .apexcharts-element-hidden,\\n.apexcharts-datalabel.apexcharts-element-hidden,\\n.apexcharts-hide .apexcharts-series-points {\\n  opacity: 0;\\n}\\n\\n.apexcharts-hidden-element-shown {\\n  opacity: 1;\\n  transition: 0.25s ease all;\\n}\\n\\n.apexcharts-datalabel,\\n.apexcharts-datalabel-label,\\n.apexcharts-datalabel-value,\\n.apexcharts-datalabels,\\n.apexcharts-pie-label,\\n.apexcharts-pie-name-label,\\n.apexcharts-pie-name-label-group,\\n.apexcharts-pie-label-connector {\\n  cursor: default;\\n  pointer-events: none\\n}\\n\\n.apexcharts-pie-label-connector {\\n  fill: none\\n}\\n\\n.apexcharts-pie-label-delay {\\n  opacity: 0;\\n  animation-name: opaque;\\n  animation-duration: .3s;\\n  animation-fill-mode: forwards;\\n  animation-timing-function: ease\\n}\\n\\n.apexcharts-radialbar-label {\\n  cursor: pointer;\\n}\\n\\n.apexcharts-annotation-rect,\\n.apexcharts-area-series .apexcharts-area,\\n.apexcharts-gridline,\\n.apexcharts-line,\\n.apexcharts-point-annotation-label,\\n.apexcharts-radar-series path:not(.apexcharts-marker),\\n.apexcharts-radar-series polygon,\\n.apexcharts-toolbar svg,\\n.apexcharts-tooltip .apexcharts-marker,\\n.apexcharts-xaxis-annotation-label,\\n.apexcharts-yaxis-annotation-label,\\n.apexcharts-zoom-rect,\\n.no-pointer-events {\\n  pointer-events: none\\n}\\n\\n.apexcharts-tooltip-active .apexcharts-marker {\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-radar-series .apexcharts-yaxis {\\n  pointer-events: none;\\n}\\n\\n.resize-triggers {\\n  animation: 1ms resizeanim;\\n  visibility: hidden;\\n  opacity: 0;\\n  height: 100%;\\n  width: 100%;\\n  overflow: hidden\\n}\\n\\n.contract-trigger:before,\\n.resize-triggers,\\n.resize-triggers>div {\\n  content: \" \";\\n  display: block;\\n  position: absolute;\\n  top: 0;\\n  left: 0\\n}\\n\\n.resize-triggers>div {\\n  height: 100%;\\n  width: 100%;\\n  background: #eee;\\n  overflow: auto\\n}\\n\\n.contract-trigger:before {\\n  overflow: hidden;\\n  width: 200%;\\n  height: 200%\\n}\\n\\n.apexcharts-bar-goals-markers {\\n  pointer-events: none\\n}\\n\\n.apexcharts-bar-shadows {\\n  pointer-events: none\\n}\\n\\n.apexcharts-rangebar-goals-markers {\\n  pointer-events: none\\n}\\n\\n.apexcharts-drilldown-target {\\n  cursor: pointer\\n}\\n\\n.apexcharts-breadcrumb {\\n  position: absolute;\\n  z-index: 11;\\n  display: inline-flex;\\n  align-items: center;\\n  gap: 2px;\\n  font-size: 12px;\\n  font-family: inherit;\\n  padding: 2px 4px\\n}\\n\\n.apexcharts-breadcrumb-item {\\n  background: transparent;\\n  border: none;\\n  padding: 2px 6px;\\n  border-radius: 3px;\\n  font: inherit;\\n  color: inherit;\\n  cursor: pointer;\\n  line-height: 1.2\\n}\\n\\n.apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current) {\\n  background: rgba(0, 0, 0, 0.08)\\n}\\n\\n.apexcharts-breadcrumb-arrow {\\n  margin-right: 4px;\\n  font-weight: 600;\\n  user-select: none\\n}\\n\\n.apexcharts-breadcrumb-current {\\n  cursor: default;\\n  font-weight: 600;\\n  opacity: 0.85\\n}\\n\\n.apexcharts-breadcrumb-separator {\\n  opacity: 0.5;\\n  user-select: none\\n}\\n\\n.apexcharts-theme-dark .apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current) {\\n  background: rgba(255, 255, 255, 0.12)\\n}\\n\\n.apexcharts-disable-transitions * {\\n  transition: none !important;\\n}';\nclass ApexCharts {\n  /**\n   * Creates a new ApexCharts instance.\n   *\n   * @param {HTMLElement} el - The DOM element to render the chart into.\n   * @param {ApexOptions} opts - Chart configuration options.\n   */\n  constructor(el, opts) {\n    // Module properties set dynamically by InitCtxVariables.initModules().\n    // Declared as typed class fields so @ts-check resolves them throughout the\n    // class body without errors. Each field typed as `any` since the modules are\n    // plain objects whose specific shapes are not yet typed.\n    /** @type {any} */\n    __publicField(this, \"core\");\n    /** @type {any} */\n    __publicField(this, \"responsive\");\n    /** @type {any} */\n    __publicField(this, \"axes\");\n    /** @type {any} */\n    __publicField(this, \"grid\");\n    /** @type {any} */\n    __publicField(this, \"graphics\");\n    /** @type {any} */\n    __publicField(this, \"coreUtils\");\n    /** @type {any} */\n    __publicField(this, \"crosshairs\");\n    /** @type {any} */\n    __publicField(this, \"events\");\n    /** @type {any} */\n    __publicField(this, \"fill\");\n    /** @type {any} */\n    __publicField(this, \"localization\");\n    /** @type {any} */\n    __publicField(this, \"options\");\n    /** @type {any} */\n    __publicField(this, \"series\");\n    /** @type {any} */\n    __publicField(this, \"theme\");\n    /** @type {any} */\n    __publicField(this, \"formatters\");\n    /** @type {any} */\n    __publicField(this, \"titleSubtitle\");\n    /** @type {any} */\n    __publicField(this, \"dimensions\");\n    /** @type {any} */\n    __publicField(this, \"updateHelpers\");\n    /** @type {any} */\n    __publicField(this, \"tooltip\");\n    /** @type {any} */\n    __publicField(this, \"data\");\n    /** @type {any} */\n    __publicField(this, \"animations\");\n    /** @type {any} */\n    __publicField(this, \"exports\");\n    /** @type {any} */\n    __publicField(this, \"legend\");\n    /** @type {any} */\n    __publicField(this, \"toolbar\");\n    /** @type {any} */\n    __publicField(this, \"zoomPanSelection\");\n    /** @type {any} */\n    __publicField(this, \"keyboardNavigation\");\n    /** @type {any} */\n    __publicField(this, \"annotations\");\n    /** @type {any} */\n    __publicField(this, \"morphTypeChange\");\n    /** @type {any} */\n    __publicField(this, \"timeScale\");\n    /** @type {any} */\n    __publicField(this, \"_keyboardNavigation\");\n    /** @type {any} */\n    __publicField(this, \"windowResizeHandler\");\n    /** @type {any} */\n    __publicField(this, \"parentResizeHandler\");\n    /** @type {string[]} */\n    __publicField(this, \"publicMethods\", []);\n    /** @type {string[]} */\n    __publicField(this, \"eventList\", []);\n    /** @type {any} */\n    __publicField(this, \"config\");\n    this.opts = opts;\n    this.ctx = this;\n    this.w = new Base(opts).init();\n    this.el = el;\n    this.w.globals.cuid = Utils$1.randomId();\n    this.w.globals.chartID = this.w.config.chart.id ? Utils$1.escapeString(this.w.config.chart.id) : this.w.globals.cuid;\n    applyAnimationPolicy(this.w);\n    const initCtx = new InitCtxVariables(this);\n    initCtx.initModules();\n    this.lastUpdateOptions = null;\n    this.create = this.create.bind(this);\n    if (Environment.isBrowser()) {\n      this.windowResizeHandler = this._windowResizeHandler.bind(this);\n      this.parentResizeHandler = this._parentResizeCallback.bind(this);\n    }\n  }\n  /**\n   * Renders the chart. Must be called once after construction.\n   *\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after mount.\n   */\n  render() {\n    var _a, _b;\n    if (!((_b = (_a = this.w) == null ? void 0 : _a.config) == null ? void 0 : _b.chart)) {\n      return Promise.reject(\n        new Error(\n          \"ApexCharts: chart configuration is missing or invalid. Ensure the options object includes a `chart` property.\"\n        )\n      );\n    }\n    return new Promise((resolve, reject) => {\n      var _a2;\n      if (Utils$1.elementExists(this.el)) {\n        if (typeof Apex._chartInstances === \"undefined\") {\n          Apex._chartInstances = [];\n        }\n        if (this.w.config.chart.id) {\n          Apex._chartInstances.push({\n            id: this.w.globals.chartID,\n            group: this.w.config.chart.group,\n            chart: this\n          });\n        }\n        this.setLocale(this.w.config.chart.defaultLocale);\n        const beforeMount = this.w.config.chart.events.beforeMount;\n        if (typeof beforeMount === \"function\") {\n          beforeMount(this, this.w);\n        }\n        this.events.fireEvent(\"beforeMount\", [this, this.w]);\n        if (Environment.isBrowser()) {\n          window.addEventListener(\"resize\", this.windowResizeHandler);\n          addResizeListener(\n            /** @type {HTMLElement} */\n            this.el.parentNode,\n            this.parentResizeHandler\n          );\n          const rootNode = (\n            /** @type {any} */\n            this.el.getRootNode && this.el.getRootNode()\n          );\n          const inShadowRoot = Utils$1.is(\"ShadowRoot\", rootNode);\n          const doc = this.el.ownerDocument;\n          let css = inShadowRoot ? rootNode.getElementById(\"apexcharts-css\") : doc.getElementById(\"apexcharts-css\");\n          if (!css) {\n            css = BrowserAPIs.createElementNS(\n              \"http://www.w3.org/1999/xhtml\",\n              \"style\"\n            );\n            css.id = \"apexcharts-css\";\n            css.textContent = apexCSS;\n            const nonce = ((_a2 = this.opts.chart) == null ? void 0 : _a2.nonce) || this.w.config.chart.nonce;\n            if (nonce) {\n              css.setAttribute(\"nonce\", nonce);\n            }\n            if (inShadowRoot) {\n              rootNode.prepend(css);\n            } else if (this.w.config.chart.injectStyleSheet !== false) {\n              doc.head.appendChild(css);\n            }\n          }\n        }\n        const graphData = this.create(this.w.config.series, {});\n        if (!graphData) return resolve(this);\n        this.mount(graphData).then(() => {\n          if (typeof this.w.config.chart.events.mounted === \"function\") {\n            this.w.config.chart.events.mounted(this, this.w);\n          }\n          this.events.fireEvent(\"mounted\", [this, this.w]);\n          resolve(graphData);\n        }).catch((e) => {\n          var _a3, _b2;\n          const enriched = e instanceof Error ? e : new Error(String(e));\n          const err = (\n            /** @type {any} */\n            enriched\n          );\n          err.chartId = (_b2 = (_a3 = this.w) == null ? void 0 : _a3.globals) == null ? void 0 : _b2.chartID;\n          err.el = this.el;\n          reject(enriched);\n        });\n      } else {\n        reject(new Error(\"Element not found\"));\n      }\n    });\n  }\n  /**\n   * @param {any[]} ser\n   * @param {object} opts\n   */\n  create(ser, opts) {\n    var _a, _b, _c;\n    const w = this.w;\n    if (!this.core) {\n      const initCtx = new InitCtxVariables(this);\n      initCtx.initModules();\n    }\n    const gl = this.w.globals;\n    gl.noData = false;\n    gl.animationEnded = false;\n    if (!Utils$1.elementExists(this.el)) {\n      gl.animationEnded = true;\n      return null;\n    }\n    this.responsive.checkResponsiveConfig(opts);\n    if (w.config.xaxis.convertedCatToNumeric) {\n      const defaults = new Defaults(w.config);\n      defaults.convertCatToNumericXaxis(w.config, this.ctx);\n    }\n    this.core.setupElements();\n    if (w.config.chart.type === \"treemap\") {\n      w.config.grid.show = false;\n      w.config.yaxis[0].show = false;\n    }\n    if (gl.svgWidth === 0) {\n      gl.animationEnded = true;\n      return null;\n    }\n    let series = ser;\n    ser.forEach((s, realIndex) => {\n      if (s.hidden) {\n        series = this.legend.legendHelpers.getSeriesAfterCollapsing({\n          realIndex\n        });\n      }\n    });\n    const combo = CoreUtils.checkComboSeries(series, w.config.chart.type);\n    gl.comboCharts = combo.comboCharts;\n    gl.comboBarCount = combo.comboBarCount;\n    const allSeriesAreEmpty = series.every((s) => s.data && s.data.length === 0);\n    if (series.length === 0 || allSeriesAreEmpty && gl.collapsedSeries.length < 1) {\n      this.series.handleNoData();\n    }\n    if (Environment.isBrowser()) {\n      this.events.setupEventHandlers();\n    }\n    const parsedState = this.data.parseData(series);\n    this._writeParsedSeriesData(parsedState.seriesData);\n    this._writeParsedRangeData(parsedState.rangeData);\n    this._writeParsedCandleData(parsedState.candleData);\n    this._writeParsedLabelData(parsedState.labelData);\n    this._writeParsedAxisFlags(parsedState.axisFlags);\n    this.theme.init();\n    const markers = new Markers(this.w, this);\n    markers.setGlobalMarkerSize();\n    this.formatters.setLabelFormatters();\n    this.titleSubtitle.draw();\n    if (!gl.noData || gl.collapsedSeries.length === w.seriesData.series.length || w.config.legend.showForSingleSeries) {\n      (_a = this.legend) == null ? void 0 : _a.init();\n    }\n    this.series.hasAllSeriesEqualX();\n    if (gl.axisCharts) {\n      this.core.coreCalculations();\n      if (w.config.xaxis.type !== \"category\") {\n        this.formatters.setLabelFormatters();\n      }\n      if (this.ctx.toolbar) {\n        this.ctx.toolbar.minX = w.globals.minX;\n        this.ctx.toolbar.maxX = w.globals.maxX;\n      }\n    }\n    this.formatters.heatmapLabelFormatters();\n    const coreUtils = new CoreUtils(this.w);\n    coreUtils.getLargestMarkerSize();\n    const layoutState = this.dimensions.plotCoords();\n    this._writeLayoutCoords(layoutState.layout);\n    const xyRatios = this.core.xySettings();\n    this.grid.createGridMask();\n    const elGraph = this.core.plotChartType(series, xyRatios);\n    const dataLabels = new DataLabels(this.w, this);\n    dataLabels.bringForward();\n    if (w.config.dataLabels.background.enabled) {\n      dataLabels.dataLabelsBackground();\n    }\n    this.core.shiftGraphPosition();\n    (_c = (_b = this.legend) == null ? void 0 : _b.heatmapGradientLegend) == null ? void 0 : _c.repositionToPlot();\n    if (w.globals.dataPoints > 50) {\n      w.dom.elWrap.classList.add(\"apexcharts-disable-transitions\");\n    }\n    const dim = {\n      plot: {\n        left: w.layout.translateX,\n        top: w.layout.translateY,\n        width: w.layout.gridWidth,\n        height: w.layout.gridHeight\n      }\n    };\n    return {\n      elGraph,\n      xyRatios,\n      dimensions: dim\n    };\n  }\n  /**\n   * @param {any} graphData\n   */\n  mount(graphData = null) {\n    const me = this;\n    const w = me.w;\n    return new Promise((resolve, reject) => {\n      var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n      if (me.el === null) {\n        return reject(\n          new Error(\"Not enough data to display or target element not found\")\n        );\n      } else if (graphData === null || w.globals.allSeriesCollapsed) {\n        me.series.handleNoData();\n      }\n      me.grid = new Grid(me.w, me);\n      const elgrid = me.grid.drawGrid();\n      const AnnotationsCtor = InitCtxVariables._featureRegistry.get(\"annotations\");\n      me.annotations = AnnotationsCtor ? new AnnotationsCtor(me.w, {\n        theme: me.theme,\n        timeScale: me.timeScale\n      }) : null;\n      (_a = me.annotations) == null ? void 0 : _a.drawImageAnnos();\n      (_b = me.annotations) == null ? void 0 : _b.drawTextAnnos();\n      if (w.config.grid.position === \"back\") {\n        if (elgrid) {\n          w.dom.elGraphical.add(elgrid.el);\n        }\n        if ((_c = elgrid == null ? void 0 : elgrid.elGridBorders) == null ? void 0 : _c.node) {\n          w.dom.elGraphical.add(elgrid.elGridBorders);\n        }\n      }\n      if (Array.isArray(graphData.elGraph)) {\n        for (let g = 0; g < graphData.elGraph.length; g++) {\n          w.dom.elGraphical.add(graphData.elGraph[g]);\n        }\n      } else {\n        w.dom.elGraphical.add(graphData.elGraph);\n      }\n      if (w.config.grid.position === \"front\") {\n        if (elgrid) {\n          w.dom.elGraphical.add(elgrid.el);\n        }\n        if ((_d = elgrid == null ? void 0 : elgrid.elGridBorders) == null ? void 0 : _d.node) {\n          w.dom.elGraphical.add(elgrid.elGridBorders);\n        }\n      }\n      if (w.config.xaxis.crosshairs.position === \"front\") {\n        me.crosshairs.drawXCrosshairs();\n      }\n      if (w.config.yaxis[0].crosshairs.position === \"front\") {\n        me.crosshairs.drawYCrosshairs();\n      }\n      if (w.config.chart.type !== \"treemap\") {\n        me.axes.drawAxis(w.config.chart.type, elgrid);\n      }\n      const xAxis = new XAxis(this.w, this.ctx, elgrid);\n      const yaxis = new YAxis(\n        this.w,\n        { theme: this.theme, timeScale: this.timeScale },\n        elgrid\n      );\n      if (elgrid !== null) {\n        xAxis.xAxisLabelCorrections();\n        yaxis.setYAxisTextAlignments();\n        w.config.yaxis.map((yaxe, index) => {\n          if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1) {\n            yaxis.yAxisTitleRotate(index, yaxe.opposite);\n          }\n        });\n      }\n      (_e = me.annotations) == null ? void 0 : _e.drawAxesAnnotations();\n      if (!w.globals.noData) {\n        if (Environment.isBrowser() && w.config.tooltip.enabled && !w.globals.noData) {\n          (_f = me.w.globals.tooltip) == null ? void 0 : _f.drawTooltip(graphData.xyRatios);\n        }\n        if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled && w.config.chart.accessibility.keyboard.navigation.enabled) {\n          (_g = me.keyboardNavigation) == null ? void 0 : _g.init();\n        }\n        if (Environment.isBrowser() && w.globals.axisCharts && (w.axisFlags.isXNumeric || /** @type {Record<string,any>} */\n        w.config.xaxis.convertedCatToNumeric || w.axisFlags.isRangeBar)) {\n          if (w.config.chart.zoom.enabled || w.config.chart.selection && w.config.chart.selection.enabled || // @ts-ignore — chart.pan is an internal toolbar config property\n          w.config.chart.pan && w.config.chart.pan.enabled) {\n            (_h = me.zoomPanSelection) == null ? void 0 : _h.init({\n              xyRatios: graphData.xyRatios\n            });\n          }\n        } else {\n          const tools = w.config.chart.toolbar.tools;\n          const toolsArr = [\n            \"zoom\",\n            \"zoomin\",\n            \"zoomout\",\n            \"selection\",\n            \"pan\",\n            \"reset\"\n          ];\n          toolsArr.forEach((t) => {\n            tools[t] = false;\n          });\n        }\n        if (w.config.chart.toolbar.show && !w.globals.allSeriesCollapsed) {\n          (_i = me.toolbar) == null ? void 0 : _i.createToolbar();\n        }\n      }\n      if (w.globals.memory.methodsToExec.length > 0) {\n        w.globals.memory.methodsToExec.forEach((fn) => {\n          fn.method(fn.params, false, fn.context);\n        });\n      }\n      if (!w.globals.axisCharts && !w.globals.noData) {\n        me.core.resizeNonAxisCharts();\n      }\n      resolve(me);\n    });\n  }\n  /**\n   * Destroys the chart instance, removes all DOM elements and event listeners.\n   * After calling this, the instance should not be used again.\n   */\n  destroy() {\n    var _a;\n    if (Environment.isBrowser()) {\n      window.removeEventListener(\"resize\", this.windowResizeHandler);\n      removeResizeListener(\n        /** @type {Element} */\n        this.el.parentNode,\n        this.parentResizeHandler\n      );\n      clearTimeout((_a = this.w.globals.resizeTimer) != null ? _a : void 0);\n    }\n    const chartID = this.w.config.chart.id;\n    if (chartID && Array.isArray(Apex._chartInstances)) {\n      Apex._chartInstances.forEach(\n        (c, i) => {\n          if (c.id === Utils$1.escapeString(chartID)) {\n            Apex._chartInstances.splice(i, 1);\n          }\n        }\n      );\n    }\n    if (this._keyboardNavigation) {\n      this._keyboardNavigation.destroy();\n    }\n    new Destroy(this.ctx).clear({ isUpdating: false });\n  }\n  /**\n   * Merges new options into the existing config and re-renders the chart.\n   *\n   * @param {ApexOptions} options - Partial config object merged with the existing config.\n   * @param {boolean} [redraw=false] - When true, redraws the chart from scratch instead of animating from previous paths.\n   * @param {boolean} [animate=true] - Whether to animate the update.\n   * @param {boolean} [updateSyncedCharts=true] - Whether to propagate the update to charts in the same group.\n   * @param {boolean} [overwriteInitialConfig=true] - When true, replaces the stored initial config used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  updateOptions(options2, redraw = false, animate = true, updateSyncedCharts = true, overwriteInitialConfig = true) {\n    const w = this.w;\n    w.interact.selection = void 0;\n    if (this.lastUpdateOptions) {\n      if (Utils$1.shallowEqual(this.lastUpdateOptions, options2)) {\n        return Promise.resolve(this);\n      }\n      if (options2.series && this.lastUpdateOptions.series) {\n        if (JSON.stringify(this.lastUpdateOptions.series) === JSON.stringify(options2.series)) {\n          const optionsWithoutSeries = __spreadValues({}, options2);\n          const lastWithoutSeries = __spreadValues({}, this.lastUpdateOptions);\n          delete optionsWithoutSeries.series;\n          delete lastWithoutSeries.series;\n          if (Utils$1.shallowEqual(optionsWithoutSeries, lastWithoutSeries)) {\n            return Promise.resolve(this);\n          }\n        }\n      }\n    }\n    if (options2.series) {\n      this.data.resetParsingFlags();\n      this.series.resetSeries(false, true, false);\n      if (options2.series.length && options2.series[0].data) {\n        options2.series = options2.series.map(\n          (s, i) => {\n            return this.updateHelpers._extendSeries(s, i);\n          }\n        );\n      }\n      this.updateHelpers.revertDefaultAxisMinMax();\n    }\n    if (options2.xaxis) {\n      options2 = this.updateHelpers.forceXAxisUpdate(options2);\n    }\n    if (options2.yaxis) {\n      options2 = this.updateHelpers.forceYAxisUpdate(options2);\n    }\n    if (w.globals.collapsedSeriesIndices.length > 0) {\n      this.series.clearPreviousPaths();\n    }\n    if (options2.theme) {\n      options2 = this.theme.updateThemeOptions(options2);\n    }\n    return this.updateHelpers._updateOptions(\n      options2,\n      redraw,\n      animate,\n      updateSyncedCharts,\n      overwriteInitialConfig\n    );\n  }\n  /**\n   * Replaces the chart's series data and re-renders.\n   *\n   * @param {ApexAxisChartSeries | ApexNonAxisChartSeries} [newSeries=[]] - The replacement series array.\n   * @param {boolean} [animate=true] - Whether to animate the update.\n   * @param {boolean} [overwriteInitialSeries=true] - When true, replaces the stored initial series used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  updateSeries(newSeries = [], animate = true, overwriteInitialSeries = true) {\n    this.data.resetParsingFlags();\n    this.series.resetSeries(false);\n    this.updateHelpers.revertDefaultAxisMinMax();\n    return this.updateHelpers._updateSeries(\n      newSeries,\n      animate,\n      overwriteInitialSeries\n    );\n  }\n  /**\n   * Appends a new series to the existing series array and re-renders.\n   *\n   * @param {ApexAxisChartSeries[0] | ApexNonAxisChartSeries} newSerie - The series object to append.\n   * @param {boolean} [animate=true] - Whether to animate the update.\n   * @param {boolean} [overwriteInitialSeries=true] - When true, replaces the stored initial series used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  appendSeries(newSerie, animate = true, overwriteInitialSeries = true) {\n    this.data.resetParsingFlags();\n    const newSeries = this.w.config.series.slice();\n    newSeries.push(\n      /** @type {any} */\n      newSerie\n    );\n    this.series.resetSeries(false);\n    this.updateHelpers.revertDefaultAxisMinMax();\n    return this.updateHelpers._updateSeries(\n      newSeries,\n      animate,\n      overwriteInitialSeries\n    );\n  }\n  /**\n   * Appends data points to existing series without replacing them.\n   * Each element of `newData` corresponds to the series at the same index.\n   *\n   * @param {Array<{ data: any[] }>} newData - Data to append, in the same shape as series[].data.\n   * @param {boolean} [overwriteInitialSeries=true] - When true, updates the stored initial series used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  appendData(newData, overwriteInitialSeries = true) {\n    const me = this;\n    me.data.resetParsingFlags();\n    me.w.globals.dataChanged = true;\n    me.series.getPreviousPaths();\n    const newSeries = me.w.config.series.slice();\n    for (let i = 0; i < newSeries.length; i++) {\n      if (newData[i] !== null && typeof newData[i] !== \"undefined\") {\n        const srcSerie = (\n          /** @type {any} */\n          newData[i]\n        );\n        const dstSerie = (\n          /** @type {any} */\n          newSeries[i]\n        );\n        for (let j = 0; j < srcSerie.data.length; j++) {\n          dstSerie.data.push(srcSerie.data[j]);\n        }\n      }\n    }\n    me.w.config.series = newSeries;\n    if (overwriteInitialSeries) {\n      me.w.globals.initialSeries = Utils$1.clone(me.w.config.series);\n    }\n    return this.update();\n  }\n  /**\n   * @param {object} [options]\n   */\n  update(options2) {\n    return new Promise((resolve, reject) => {\n      if (this.lastUpdateOptions && JSON.stringify(this.lastUpdateOptions) === JSON.stringify(options2)) {\n        return resolve(this);\n      }\n      this.lastUpdateOptions = Utils$1.clone(options2);\n      new Destroy(this.ctx).clear({ isUpdating: true });\n      const graphData = this.create(this.w.config.series, options2 != null ? options2 : {});\n      if (!graphData) return resolve(this);\n      this.mount(graphData).then(() => {\n        var _a;\n        (_a = this.morphTypeChange) == null ? void 0 : _a.applyChromeFade();\n        if (typeof this.w.config.chart.events.updated === \"function\") {\n          this.w.config.chart.events.updated(this, this.w);\n        }\n        this.events.fireEvent(\"updated\", [this, this.w]);\n        this.w.globals.isDirty = true;\n        resolve(this);\n      }).catch((e) => {\n        reject(e);\n      });\n    });\n  }\n  /**\n   * Fast update path for data-only series changes.\n   *\n   * Skips rebuilding grid, axes, dimensions, legend, annotations, tooltip DOM,\n   * and toolbar. Only recalculates scales and replots the series paths.\n   * Called automatically by _updateSeries() when the fast path is eligible.\n   *\n   * @param {boolean} animate - Whether to animate the update.\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance.\n   */\n  fastUpdate(animate) {\n    return new Promise((resolve, reject) => {\n      var _a;\n      try {\n        const w = this.w;\n        const gl = w.globals;\n        gl.shouldAnimate = animate;\n        gl.dataChanged = true;\n        gl.animationEnded = false;\n        PerformanceCache.invalidateSelectors(w);\n        const gl2 = w.globals;\n        gl2.maxY = -Number.MAX_VALUE;\n        gl2.minY = Number.MIN_VALUE;\n        gl2.minYArr = [];\n        gl2.maxYArr = [];\n        gl2.maxX = -Number.MAX_VALUE;\n        gl2.minX = Number.MAX_VALUE;\n        gl2.initialMaxX = -Number.MAX_VALUE;\n        gl2.initialMinX = Number.MAX_VALUE;\n        gl2.yAxisScale = [];\n        gl2.xAxisScale = null;\n        gl2.xAxisTicksPositions = [];\n        gl2.xRange = 0;\n        gl2.yRange = [];\n        gl2.zRange = 0;\n        gl2.xTickAmount = 0;\n        gl2.multiAxisTickAmount = 0;\n        gl2.pointsArray = [];\n        gl2.dataLabelsRects = [];\n        gl2.lastDrawnDataLabelsIndexes = [];\n        gl2.textRectsCache = /* @__PURE__ */ new Map();\n        gl2.domCache = /* @__PURE__ */ new Map();\n        gl2.cachedSelectors = {};\n        gl2.disableZoomIn = false;\n        gl2.disableZoomOut = false;\n        if (gl.axisCharts) {\n          this.core.coreCalculations();\n          if (w.config.xaxis.type !== \"category\") {\n            this.formatters.setLabelFormatters();\n          }\n        }\n        const xyRatios = this.core.xySettings();\n        const innerEl = w.dom.elGraphical.node;\n        const toRemove = innerEl.querySelectorAll(\n          \".apexcharts-series, .apexcharts-datalabels, .apexcharts-datalabels-background\"\n        );\n        toRemove.forEach(\n          (el) => {\n            var _a2;\n            return (_a2 = el.parentNode) == null ? void 0 : _a2.removeChild(el);\n          }\n        );\n        const elGraph = this.core.plotChartType(w.config.series, xyRatios);\n        const gridEl = innerEl.querySelector(\".apexcharts-grid\");\n        const graphs = Array.isArray(elGraph) ? elGraph : [elGraph];\n        if (gridEl && w.config.grid.position === \"front\") {\n          graphs.forEach((g) => {\n            const node = g && g.node ? g.node : g;\n            if (node) innerEl.insertBefore(node, gridEl);\n          });\n        } else {\n          graphs.forEach((g) => {\n            w.dom.elGraphical.add(g);\n          });\n        }\n        const dataLabels = new DataLabels(w, this);\n        dataLabels.bringForward();\n        if (w.config.dataLabels.background.enabled) {\n          dataLabels.dataLabelsBackground();\n        }\n        if (Environment.isBrowser() && w.config.tooltip.enabled && !gl.noData) {\n          (_a = w.globals.tooltip) == null ? void 0 : _a.drawTooltip(xyRatios);\n        }\n        if (typeof w.config.chart.events.updated === \"function\") {\n          w.config.chart.events.updated(this, w);\n        }\n        this.events.fireEvent(\"updated\", [this, w]);\n        gl.isDirty = true;\n        resolve(this);\n      } catch (e) {\n        reject(e);\n      }\n    });\n  }\n  /**\n   * Returns all charts in the same `chart.group` (including this instance),\n   * used to synchronise zoom/pan across grouped charts.\n   *\n   * @returns {ApexCharts[]}\n   */\n  getSyncedCharts() {\n    const chartGroups = this.getGroupedCharts();\n    let allCharts = (\n      /** @type {ApexCharts[]} */\n      [this]\n    );\n    if (chartGroups.length) {\n      allCharts = [];\n      chartGroups.forEach((ch) => {\n        allCharts.push(ch);\n      });\n    }\n    return allCharts;\n  }\n  /**\n   * Returns all charts in the same `chart.group`, excluding this instance.\n   * Used internally to apply hover/zoom effects to sibling charts.\n   *\n   * @returns {ApexCharts[]}\n   */\n  getGroupedCharts() {\n    return Apex._chartInstances.filter((ch) => {\n      if (ch.group) {\n        return true;\n      }\n    }).map(\n      (ch) => this.w.config.chart.group === ch.group ? ch.chart : this\n    );\n  }\n  /**\n   * Retrieves a rendered chart instance by its `chart.id` config value.\n   *\n   * @param {string} id - The chart ID set via `chart.id` in options.\n   * @returns {ApexCharts | undefined}\n   */\n  static getChartByID(id) {\n    const chartId = Utils$1.escapeString(id);\n    if (!Apex._chartInstances) return void 0;\n    const c = Apex._chartInstances.filter(\n      (ch) => ch.id === chartId\n    )[0];\n    return c && c.chart;\n  }\n  /**\n   * Scans the document for elements with a `data-apexcharts` attribute and\n   * `data-options` JSON, then renders a chart in each one automatically.\n   * Useful for non-framework HTML pages.\n   */\n  static initOnLoad() {\n    var _a;\n    const els = document.querySelectorAll(\"[data-apexcharts]\");\n    for (let i = 0; i < els.length; i++) {\n      const el = (\n        /** @type {HTMLElement} */\n        els[i]\n      );\n      const options2 = JSON.parse((_a = els[i].getAttribute(\"data-options\")) != null ? _a : \"\");\n      const apexChart = new ApexCharts(el, options2);\n      apexChart.render();\n    }\n  }\n  /**\n   * This static method allows users to call chart methods without necessarily from the\n   * instance of the chart in case user has assigned chartID to the targeted chart.\n   * The chartID is used for mapping the instance stored in Apex._chartInstances global variable\n   *\n   * This is helpful in cases when you don't have reference of the chart instance\n   * easily and need to call the method from anywhere.\n   * For eg, in React/Vue applications when you have many parent/child components,\n   * and need easy reference to other charts for performing dynamic operations\n   *\n   * @param {string} chartID - The unique identifier which will be used to call methods\n   * on that chart instance\n   * @param {string} fn - The method name to call\n   * @param {...any} opts - The parameters which are accepted in the original method will be passed here in the same order.\n   */\n  static exec(chartID, fn, ...opts) {\n    const chart = this.getChartByID(chartID);\n    if (!chart) return;\n    chart.w.globals.isExecCalled = true;\n    let ret = null;\n    if (chart.publicMethods.indexOf(fn) !== -1) {\n      ret = /** @type {any} */\n      chart[fn](...opts);\n    }\n    return ret;\n  }\n  /**\n   * Deep-merges `source` into `target` and returns the result.\n   * Thin wrapper around the internal `Utils.extend` utility.\n   *\n   * @param {object} target\n   * @param {object} source\n   * @returns {object}\n   */\n  static merge(target, source) {\n    return Utils$1.extend(target, source);\n  }\n  static getThemePalettes() {\n    return getThemePalettes();\n  }\n  /**\n   * Register additional chart types. Used by sub-entry points so that only\n   * the types they include are bundled.\n   *\n   * @param {Record<string, new (...args: any[]) => any>} typeMap  e.g. { line: Line, area: Line }\n   */\n  static use(typeMap) {\n    register(typeMap);\n  }\n  /**\n   * Register optional feature modules (Exports, Legend, Toolbar,\n   * ZoomPanSelection, KeyboardNavigation, Annotations).\n   *\n   * Call this before rendering any chart. Feature entry files (e.g.\n   * `apexcharts/features/legend`) call this automatically when imported.\n   * Note: Tooltip is part of core and does not need to be registered.\n   *\n   * @param {Record<string, new (...args: any[]) => any>} featureMap  e.g. { legend: Legend, exports: Exports }\n   */\n  static registerFeatures(featureMap) {\n    InitCtxVariables.registerFeatures(featureMap);\n  }\n  /**\n   * Toggles (show/hide) the series identified by name.\n   * Mirrors a click on the corresponding legend item.\n   *\n   * @param {string} seriesName\n   * @returns {object | undefined} The collapsed series object, if now hidden.\n   */\n  toggleSeries(seriesName) {\n    return this.series.toggleSeries(seriesName);\n  }\n  /**\n   * Highlights or un-highlights a series when the user hovers a legend item.\n   * Called internally by the legend; not typically called by consumers.\n   *\n   * @param {MouseEvent} e\n   * @param {HTMLElement} targetElement - The legend marker element being hovered.\n   */\n  highlightSeriesOnLegendHover(e, targetElement) {\n    return this.series.toggleSeriesOnHover(e, targetElement);\n  }\n  /**\n   * Makes a previously hidden series visible and re-renders.\n   *\n   * @param {string} seriesName\n   */\n  showSeries(seriesName) {\n    this.series.showSeries(seriesName);\n  }\n  /**\n   * Hides a visible series and re-renders.\n   *\n   * @param {string} seriesName\n   */\n  hideSeries(seriesName) {\n    this.series.hideSeries(seriesName);\n  }\n  /**\n   * Highlights (dims all other series) the series identified by name.\n   *\n   * @param {string} seriesName\n   */\n  highlightSeries(seriesName) {\n    this.series.highlightSeries(seriesName);\n  }\n  /**\n   * Returns whether the series identified by name is currently hidden.\n   *\n   * @param {string} seriesName\n   * @returns {boolean}\n   */\n  isSeriesHidden(seriesName) {\n    return this.series.isSeriesHidden(seriesName);\n  }\n  /**\n   * Resets the chart to the initial series and optionally the initial zoom level.\n   *\n   * @param {boolean} [shouldUpdateChart=true] - When true, triggers a re-render.\n   * @param {boolean} [shouldResetZoom=true] - When true, restores the initial zoom level.\n   */\n  resetSeries(shouldUpdateChart = true, shouldResetZoom = true) {\n    this.series.resetSeries(shouldUpdateChart, shouldResetZoom);\n  }\n  /**\n   * Subscribes to a chart event by name.\n   * Supported event names mirror the `chart.events` option keys\n   * (e.g. `'mounted'`, `'updated'`, `'dataPointMouseEnter'`).\n   *\n   * @param {string} name - Event name.\n   * @param {Function} handler - Callback invoked when the event fires.\n   */\n  addEventListener(name2, handler) {\n    this.events.addEventListener(name2, handler);\n  }\n  /**\n   * Removes a previously registered event listener.\n   *\n   * @param {string} name - Event name.\n   * @param {Function} handler - The exact function reference passed to addEventListener.\n   */\n  removeEventListener(name2, handler) {\n    this.events.removeEventListener(name2, handler);\n  }\n  /**\n   * Adds an x-axis annotation dynamically after render.\n   *\n   * @param {XAxisAnnotations} opts - Annotation configuration.\n   * @param {boolean} [pushToMemory=true] - When true, the annotation persists across re-renders.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  addXaxisAnnotation(opts, pushToMemory = true, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.addXaxisAnnotationExternal(opts, pushToMemory, me);\n  }\n  /**\n   * Adds a y-axis annotation dynamically after render.\n   *\n   * @param {YAxisAnnotations} opts - Annotation configuration.\n   * @param {boolean} [pushToMemory=true] - When true, the annotation persists across re-renders.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  addYaxisAnnotation(opts, pushToMemory = true, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.addYaxisAnnotationExternal(opts, pushToMemory, me);\n  }\n  /**\n   * Adds a point annotation dynamically after render.\n   *\n   * @param {PointAnnotations} opts - Annotation configuration.\n   * @param {boolean} [pushToMemory=true] - When true, the annotation persists across re-renders.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  addPointAnnotation(opts, pushToMemory = true, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.addPointAnnotationExternal(opts, pushToMemory, me);\n  }\n  /**\n   * Removes all annotations from the chart.\n   *\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  clearAnnotations(context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.clearAnnotations(me);\n  }\n  /**\n   * Removes a specific annotation by its `id`.\n   *\n   * @param {string} id - The annotation id as set in the annotation config.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  removeAnnotation(id, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.removeAnnotation(me, id);\n  }\n  /**\n   * Returns the inner SVG group element that contains all chart graphics.\n   *\n   * @returns {Element | null}\n   */\n  getChartArea() {\n    const el = this.w.dom.baseEl.querySelector(\".apexcharts-inner\");\n    return el;\n  }\n  /**\n   * Returns the sum of all data points whose x value falls within [minX, maxX].\n   *\n   * @param {number} minX\n   * @param {number} maxX\n   * @returns {number[]} One total per series.\n   */\n  getSeriesTotalXRange(minX, maxX) {\n    return this.coreUtils.getSeriesTotalsXRange(minX, maxX);\n  }\n  /**\n   * Returns the highest y value in the specified series.\n   *\n   * @param {number} [seriesIndex=0]\n   * @returns {number}\n   */\n  getHighestValueInSeries(seriesIndex = 0) {\n    const range = new Range(this.w);\n    return range.getMinYMaxY(seriesIndex).highestY;\n  }\n  /**\n   * Returns the lowest y value in the specified series.\n   *\n   * @param {number} [seriesIndex=0]\n   * @returns {number}\n   */\n  getLowestValueInSeries(seriesIndex = 0) {\n    const range = new Range(this.w);\n    return range.getMinYMaxY(seriesIndex).lowestY;\n  }\n  /**\n   * Returns the sum of each series (the totals used for percentage calculations).\n   *\n   * @returns {number[]}\n   */\n  getSeriesTotal() {\n    return this.w.globals.seriesTotals;\n  }\n  /**\n   * Returns a curated snapshot of chart state for use in formatters, events,\n   * and external integrations. Prefer this over accessing `chart.w` directly.\n   *\n   * The shape of this object is stable and versioned. `chart.w` is internal\n   * and will be restricted in a future major version.\n   */\n  getState() {\n    const w = this.w;\n    const gl = w.globals;\n    return {\n      // Series data — computed/parsed form used for rendering\n      series: w.seriesData.series,\n      seriesNames: w.seriesData.seriesNames,\n      colors: gl.colors,\n      labels: w.labelData.labels,\n      seriesTotals: gl.seriesTotals,\n      seriesPercent: gl.seriesPercent,\n      seriesXvalues: gl.seriesXvalues,\n      seriesYvalues: gl.seriesYvalues,\n      // Axis bounds — updated after each render\n      minX: gl.minX,\n      maxX: gl.maxX,\n      minY: gl.minY,\n      maxY: gl.maxY,\n      minYArr: gl.minYArr,\n      maxYArr: gl.maxYArr,\n      minXDiff: gl.minXDiff,\n      dataPoints: gl.dataPoints,\n      // Axis scale objects — computed tick/scale results\n      xAxisScale: gl.xAxisScale,\n      yAxisScale: gl.yAxisScale,\n      xTickAmount: gl.xTickAmount,\n      // Axis type flags\n      isXNumeric: w.axisFlags.isXNumeric,\n      // Multi-axis series mapping\n      seriesYAxisMap: gl.seriesYAxisMap,\n      seriesYAxisReverseMap: gl.seriesYAxisReverseMap,\n      // Chart dimensions — updated after each render/resize\n      svgWidth: gl.svgWidth,\n      svgHeight: gl.svgHeight,\n      gridWidth: w.layout.gridWidth,\n      gridHeight: w.layout.gridHeight,\n      // Interactive state\n      selectedDataPoints: w.interact.selectedDataPoints,\n      collapsedSeriesIndices: gl.collapsedSeriesIndices,\n      zoomed: w.interact.zoomed,\n      // Chart-type-specific series data (null when not applicable)\n      seriesX: w.seriesData.seriesX,\n      seriesZ: w.seriesData.seriesZ,\n      seriesCandleO: w.candleData.seriesCandleO,\n      seriesCandleH: w.candleData.seriesCandleH,\n      seriesCandleM: w.candleData.seriesCandleM,\n      seriesCandleL: w.candleData.seriesCandleL,\n      seriesCandleC: w.candleData.seriesCandleC,\n      seriesRangeStart: w.rangeData.seriesRangeStart,\n      seriesRangeEnd: w.rangeData.seriesRangeEnd,\n      seriesGoals: w.seriesData.seriesGoals\n    };\n  }\n  /**\n   * Programmatically selects or deselects a data point.\n   * Equivalent to a user click on the data point.\n   *\n   * @param {number} seriesIndex - Zero-based series index.\n   * @param {number} [dataPointIndex] - Zero-based data point index within the series.\n   * @returns {number[][] | null} Updated selectedDataPoints array, or null.\n   */\n  toggleDataPointSelection(seriesIndex, dataPointIndex) {\n    return this.updateHelpers.toggleDataPointSelection(\n      seriesIndex,\n      dataPointIndex\n    );\n  }\n  /**\n   * Programmatically zooms the x-axis to the given range.\n   * Requires zoom to be enabled (`chart.zoom.enabled: true`).\n   *\n   * @param {number} min - The minimum x value (timestamp or numeric).\n   * @param {number} max - The maximum x value (timestamp or numeric).\n   */\n  zoomX(min, max) {\n    var _a;\n    (_a = this.ctx.toolbar) == null ? void 0 : _a.zoomUpdateOptions(min, max);\n  }\n  /**\n   * Switches the active locale, updating all locale-dependent labels (toolbar tooltips, month names, etc.).\n   *\n   * @param {string} localeName - Must match a locale name defined in `chart.locales`.\n   */\n  setLocale(localeName) {\n    this.localization.setCurrentLocaleValues(localeName);\n  }\n  /**\n   * Exports the chart to a PNG or SVG data URI.\n   * Requires the Exports feature: `import 'apexcharts/features/exports'`.\n   *\n   * @param {{ scale?: number, width?: number }} [options]\n   * @returns {Promise<{ imgURI: string } | { blob: Blob }>}\n   */\n  dataURI(options2) {\n    if (!this.ctx.exports)\n      throw new Error(\n        \"apexcharts: Exports feature is not registered. Import apexcharts/features/exports.\"\n      );\n    return this.ctx.exports.dataURI(options2);\n  }\n  /**\n   * Returns the chart's SVG markup as a string, optionally scaled.\n   * Requires the Exports feature: `import 'apexcharts/features/exports'`.\n   *\n   * @param {number} [scale=1]\n   * @returns {Promise<string>}\n   */\n  getSvgString(scale) {\n    if (!this.ctx.exports)\n      throw new Error(\n        \"apexcharts: Exports feature is not registered. Import apexcharts/features/exports.\"\n      );\n    return this.ctx.exports.getSvgString(scale);\n  }\n  /**\n   * Triggers a CSV download of the chart's data.\n   * Requires the Exports feature: `import 'apexcharts/features/exports'`.\n   *\n   * @param {{ series?: any, fileName?: string, columnDelimiter?: string, lineDelimiter?: string }} [options]\n   */\n  exportToCSV(options2 = {}) {\n    if (!this.ctx.exports)\n      throw new Error(\n        \"apexcharts: Exports feature is not registered. Import apexcharts/features/exports.\"\n      );\n    return this.ctx.exports.exportToCSV(options2);\n  }\n  paper() {\n    return this.w.dom.Paper;\n  }\n  /**\n   * Drills into the child level referenced by `id` (a `chart.drilldown.series` entry).\n   * Requires the Drilldown feature: `import 'apexcharts/features/drilldown'`.\n   *\n   * @param {string|number} id - The drilldown series id to navigate into.\n   * @returns {Promise<ApexCharts>}\n   */\n  drillDown(id) {\n    if (!this.ctx.drilldown)\n      throw new Error(\n        \"apexcharts: Drilldown feature is not registered. Import apexcharts/features/drilldown.\"\n      );\n    return this.ctx.drilldown.drillDown(id);\n  }\n  /**\n   * Navigates back one drilldown level.\n   * Requires the Drilldown feature: `import 'apexcharts/features/drilldown'`.\n   *\n   * @returns {Promise<ApexCharts>}\n   */\n  drillUp() {\n    if (!this.ctx.drilldown)\n      throw new Error(\n        \"apexcharts: Drilldown feature is not registered. Import apexcharts/features/drilldown.\"\n      );\n    return this.ctx.drilldown.drillUp();\n  }\n  /**\n   * Navigates back to the root drilldown level.\n   * Requires the Drilldown feature: `import 'apexcharts/features/drilldown'`.\n   *\n   * @returns {Promise<ApexCharts>}\n   */\n  drillToRoot() {\n    if (!this.ctx.drilldown)\n      throw new Error(\n        \"apexcharts: Drilldown feature is not registered. Import apexcharts/features/drilldown.\"\n      );\n    return this.ctx.drilldown.drillToRoot();\n  }\n  // ─── Slice write-back stubs ─────────────────────────────────────────────────\n  /**\n   * @param {Partial<import('./types/internal').SeriesData>} slice\n   */\n  _writeParsedSeriesData(slice) {\n    Object.assign(this.w.seriesData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').RangeData>} slice\n   */\n  _writeParsedRangeData(slice) {\n    Object.assign(this.w.rangeData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').CandleData>} slice\n   */\n  _writeParsedCandleData(slice) {\n    Object.assign(this.w.candleData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').LabelData>} slice\n   */\n  _writeParsedLabelData(slice) {\n    Object.assign(this.w.labelData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').AxisFlags>} slice\n   */\n  _writeParsedAxisFlags(slice) {\n    Object.assign(this.w.axisFlags, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').LayoutCoords>} slice\n   */\n  _writeLayoutCoords(slice) {\n    Object.assign(this.w.layout, slice);\n  }\n  _parentResizeCallback() {\n    if (this.w.globals.animationEnded && this.w.config.chart.redrawOnParentResize) {\n      this._windowResize();\n    }\n  }\n  /**\n   * Handle window resize and re-draw the whole chart.\n   */\n  _windowResize() {\n    this.w.globals.resizeTimer = window.setTimeout(() => {\n      this.w.globals.resized = true;\n      this.w.globals.dataChanged = false;\n      this.ctx.update();\n    }, 150);\n  }\n  _windowResizeHandler() {\n    var _a;\n    clearTimeout((_a = this.w.globals.resizeTimer) != null ? _a : void 0);\n    let { redrawOnWindowResize: redraw } = this.w.config.chart;\n    if (typeof redraw === \"function\") {\n      redraw = /** @type {any} */\n      redraw();\n    }\n    redraw && this._windowResize();\n  }\n}\nconst apexchartsLegendCSS = \".apexcharts-flip-y {\\n  transform: scaleY(-1) translateY(-100%);\\n  transform-origin: top;\\n  transform-box: fill-box;\\n}\\n.apexcharts-flip-x {\\n  transform: scaleX(-1);\\n  transform-origin: center;\\n  transform-box: fill-box;\\n}\\n.apexcharts-legend {\\n  display: flex;\\n  overflow: auto;\\n  padding: 0 10px;\\n}\\n.apexcharts-legend.apexcharts-legend-group-horizontal {\\n  flex-direction: column;\\n}\\n.apexcharts-legend-group {\\n  display: flex;\\n}\\n.apexcharts-legend-group-vertical {\\n  flex-direction: column-reverse;\\n}\\n.apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top {\\n  flex-wrap: wrap\\n}\\n.apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\n  flex-direction: column;\\n  bottom: 0;\\n}\\n.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\n  justify-content: flex-start;\\n  align-items: flex-start;\\n}\\n.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center {\\n  justify-content: center;\\n  align-items: center;\\n}\\n.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right {\\n  justify-content: flex-end;\\n  align-items: flex-end;\\n}\\n.apexcharts-legend-series {\\n  cursor: pointer;\\n  line-height: normal;\\n  display: flex;\\n  align-items: center;\\n}\\n.apexcharts-legend-text {\\n  position: relative;\\n  font-size: 14px;\\n}\\n.apexcharts-legend-text *, .apexcharts-legend-marker * {\\n  pointer-events: none;\\n}\\n.apexcharts-legend-marker {\\n  position: relative;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  cursor: pointer;\\n  margin-right: 1px;\\n}\\n\\n.apexcharts-legend-series.apexcharts-no-click {\\n  cursor: auto;\\n}\\n.apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\\n  display: none !important;\\n}\\n.apexcharts-inactive-legend {\\n  opacity: 0.45;\\n} \";\nclass Exports {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * @param {string} svgString\n   */\n  svgStringToNode(svgString) {\n    const parser = new DOMParser();\n    const svgDoc = parser.parseFromString(svgString, \"image/svg+xml\");\n    return svgDoc.documentElement;\n  }\n  /**\n   * @param {any} svg\n   * @param {number} scale\n   */\n  scaleSvgNode(svg, scale) {\n    const svgWidth = parseFloat(svg.getAttributeNS(null, \"width\"));\n    const svgHeight = parseFloat(svg.getAttributeNS(null, \"height\"));\n    svg.setAttributeNS(null, \"width\", svgWidth * scale);\n    svg.setAttributeNS(null, \"height\", svgHeight * scale);\n    svg.setAttributeNS(null, \"viewBox\", \"0 0 \" + svgWidth + \" \" + svgHeight);\n  }\n  /**\n   * @param {number} [_scale]\n   */\n  getSvgString(_scale) {\n    return new Promise((resolve) => {\n      const w = this.w;\n      let scale = _scale || w.config.chart.toolbar.export.scale || w.config.chart.toolbar.export.width / w.globals.svgWidth;\n      if (!scale) {\n        scale = 1;\n      }\n      const width = w.globals.svgWidth * scale;\n      const height = w.globals.svgHeight * scale;\n      const clonedNode = (\n        /** @type {HTMLElement} */\n        w.dom.elWrap.cloneNode(true)\n      );\n      clonedNode.style.width = width + \"px\";\n      clonedNode.style.height = height + \"px\";\n      const serializedNode = new XMLSerializer().serializeToString(clonedNode);\n      const shouldIncludeLegendStyles = w.config.legend.show && w.dom.elLegendWrap && w.dom.elLegendWrap.children.length > 0;\n      let exportStyles = `\n        .apexcharts-tooltip, .apexcharts-toolbar, .apexcharts-xaxistooltip, .apexcharts-yaxistooltip, .apexcharts-xcrosshairs, .apexcharts-ycrosshairs, .apexcharts-zoom-rect, .apexcharts-selection-rect {\n          display: none;\n        }\n      `;\n      if (shouldIncludeLegendStyles) {\n        exportStyles += apexchartsLegendCSS;\n      }\n      let svgString = `\n        <svg xmlns=\"http://www.w3.org/2000/svg\"\n          version=\"1.1\"\n          xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n          class=\"apexcharts-svg\"\n          xmlns:data=\"ApexChartsNS\"\n          transform=\"translate(0, 0)\"\n          width=\"${w.globals.svgWidth}px\" height=\"${w.globals.svgHeight}px\">\n          <foreignObject width=\"100%\" height=\"100%\">\n            <div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"width:${width}px; height:${height}px;\">\n            <style type=\"text/css\">\n              ${exportStyles}\n            </style>\n              ${serializedNode}\n            </div>\n          </foreignObject>\n        </svg>\n      `;\n      const svgNode = this.svgStringToNode(svgString);\n      if (scale !== 1) {\n        this.scaleSvgNode(svgNode, scale);\n      }\n      this.convertImagesToBase64(svgNode).then(() => {\n        svgString = new XMLSerializer().serializeToString(svgNode);\n        resolve(svgString.replace(/&nbsp;/g, \"&#160;\"));\n      });\n    });\n  }\n  /**\n   * @param {any} svgNode\n   */\n  convertImagesToBase64(svgNode) {\n    const images = svgNode.getElementsByTagName(\"image\");\n    const promises = Array.from(images).map((img) => {\n      const href = img.getAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\");\n      if (href && !href.startsWith(\"data:\")) {\n        return this.getBase64FromUrl(href).then((base64) => {\n          img.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", base64);\n        }).catch((error) => {\n          console.error(\"Error converting image to base64:\", error);\n        });\n      }\n      return Promise.resolve();\n    });\n    return Promise.all(promises);\n  }\n  /**\n   * @param {string} url\n   */\n  getBase64FromUrl(url) {\n    if (Environment.isSSR()) return Promise.resolve(url);\n    return new Promise((resolve, reject) => {\n      const img = new Image();\n      img.crossOrigin = \"Anonymous\";\n      img.onload = () => {\n        const canvas = document.createElement(\"canvas\");\n        canvas.width = img.width;\n        canvas.height = img.height;\n        const ctx = canvas.getContext(\"2d\");\n        if (ctx) ctx.drawImage(img, 0, 0);\n        resolve(canvas.toDataURL());\n      };\n      img.onerror = reject;\n      img.src = url;\n    });\n  }\n  svgUrl() {\n    return new Promise((resolve) => {\n      this.getSvgString().then((svgData) => {\n        const svgBlob = new Blob([svgData], {\n          type: \"image/svg+xml;charset=utf-8\"\n        });\n        resolve(URL.createObjectURL(svgBlob));\n      });\n    });\n  }\n  /**\n   * @param {Record<string, any> | undefined} options\n   */\n  dataURI(options2) {\n    if (Environment.isSSR()) return Promise.resolve({ imgURI: \"\" });\n    return new Promise((resolve) => {\n      const w = this.w;\n      const scale = options2 ? options2.scale || options2.width / w.globals.svgWidth : 1;\n      const canvas = document.createElement(\"canvas\");\n      canvas.width = w.globals.svgWidth * scale;\n      canvas.height = parseInt(w.dom.elWrap.style.height, 10) * scale;\n      const canvasBg = w.config.chart.background === \"transparent\" || !w.config.chart.background ? \"#fff\" : w.config.chart.background;\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n      ctx.fillStyle = canvasBg;\n      ctx.fillRect(0, 0, canvas.width * scale, canvas.height * scale);\n      this.getSvgString(scale).then((svgData) => {\n        const svgUrl = \"data:image/svg+xml,\" + encodeURIComponent(svgData);\n        const img = new Image();\n        img.crossOrigin = \"anonymous\";\n        img.onload = () => {\n          ctx.drawImage(img, 0, 0);\n          const edgeCanvas = canvas;\n          if (edgeCanvas.msToBlob) {\n            const blob = edgeCanvas.msToBlob();\n            resolve({ blob });\n          } else {\n            const imgURI = canvas.toDataURL(\"image/png\");\n            resolve({ imgURI });\n          }\n        };\n        img.src = svgUrl;\n      });\n    });\n  }\n  exportToSVG() {\n    this.svgUrl().then((url) => {\n      this.triggerDownload(\n        url,\n        this.w.config.chart.toolbar.export.svg.filename,\n        \".svg\"\n      );\n    });\n  }\n  exportToPng() {\n    const scale = this.w.config.chart.toolbar.export.scale;\n    const width = this.w.config.chart.toolbar.export.width;\n    const option = scale ? { scale } : width ? { width } : void 0;\n    this.dataURI(option).then(({ imgURI, blob }) => {\n      if (blob) {\n        navigator.msSaveOrOpenBlob(blob, this.w.globals.chartID + \".png\");\n      } else {\n        this.triggerDownload(\n          imgURI,\n          this.w.config.chart.toolbar.export.png.filename,\n          \".png\"\n        );\n      }\n    });\n  }\n  /** @param {{ series?: any, fileName?: any, columnDelimiter?: string, lineDelimiter?: string }} opts */\n  exportToCSV({\n    series,\n    fileName,\n    columnDelimiter = \",\",\n    lineDelimiter = \"\\n\"\n  }) {\n    const w = this.w;\n    if (!series) series = w.config.series;\n    let columns = [];\n    const rows = [];\n    let result = \"\";\n    const universalBOM = \"\\uFEFF\";\n    const gSeries = w.seriesData.series.map((s, i) => {\n      return w.globals.collapsedSeriesIndices.indexOf(i) === -1 ? s : [];\n    });\n    const getFormattedCategory = (cat) => {\n      if (typeof w.config.chart.toolbar.export.csv.categoryFormatter === \"function\") {\n        return w.config.chart.toolbar.export.csv.categoryFormatter(cat);\n      }\n      if (w.config.xaxis.type === \"datetime\" && String(cat).length >= 10) {\n        return new Date(cat).toDateString();\n      }\n      return Utils$1.isNumber(cat) ? cat : cat.split(columnDelimiter).join(\"\");\n    };\n    const getFormattedValue = (value) => {\n      return typeof w.config.chart.toolbar.export.csv.valueFormatter === \"function\" ? w.config.chart.toolbar.export.csv.valueFormatter(value) : value;\n    };\n    const seriesMaxDataLength = Math.max(\n      ...series.map((s) => {\n        return s.data ? s.data.length : 0;\n      })\n    );\n    const dataFormat = new Data(this.w);\n    const axesUtils = new AxesUtils(this.w, {\n      theme: this.ctx.theme,\n      timeScale: this.ctx.timeScale\n    });\n    const getCat = (i) => {\n      let cat = \"\";\n      if (!w.globals.axisCharts) {\n        cat = w.config.labels[i];\n      } else {\n        if (w.config.xaxis.type === \"category\" || w.config.xaxis.convertedCatToNumeric) {\n          if (w.globals.isBarHorizontal) {\n            const lbFormatter = w.formatters.yLabelFormatters[0];\n            const sr = new Series(this.ctx.w);\n            const activeSeries = sr.getActiveConfigSeriesIndex();\n            cat = lbFormatter(w.labelData.labels[i], {\n              seriesIndex: activeSeries,\n              dataPointIndex: i,\n              w\n            });\n          } else {\n            cat = axesUtils.getLabel(\n              w.labelData.labels,\n              w.labelData.timescaleLabels,\n              0,\n              i\n            ).text;\n          }\n        }\n        if (w.config.xaxis.type === \"datetime\") {\n          if (w.config.xaxis.categories.length) {\n            cat = w.config.xaxis.categories[i];\n          } else if (w.config.labels.length) {\n            cat = w.config.labels[i];\n          }\n        }\n      }\n      if (cat === null) return \"nullvalue\";\n      if (Array.isArray(cat)) {\n        cat = cat.join(\" \");\n      }\n      return Utils$1.isNumber(cat) ? cat : cat.split(columnDelimiter).join(\"\");\n    };\n    const getEmptyDataForCsvColumn = () => {\n      return [...Array(seriesMaxDataLength)].map(() => \"\");\n    };\n    const handleAxisRowsColumns = (s, sI) => {\n      var _a, _b, _c, _d, _e, _f;\n      if (columns.length && sI === 0) {\n        rows.push(columns.join(columnDelimiter));\n      }\n      if (s.data) {\n        s.data = s.data.length && s.data || getEmptyDataForCsvColumn();\n        for (let i = 0; i < s.data.length; i++) {\n          columns = [];\n          let cat = getCat(i);\n          if (cat === \"nullvalue\") continue;\n          if (!cat) {\n            if (dataFormat.isFormatXY()) {\n              cat = series[sI].data[i].x;\n            } else if (dataFormat.isFormat2DArray()) {\n              cat = series[sI].data[i] ? series[sI].data[i][0] : \"\";\n            }\n          }\n          if (sI === 0) {\n            columns.push(getFormattedCategory(cat));\n            for (let ci = 0; ci < w.seriesData.series.length; ci++) {\n              const value = dataFormat.isFormatXY() ? (_a = series[ci].data[i]) == null ? void 0 : _a.y : gSeries[ci][i];\n              columns.push(getFormattedValue(value));\n            }\n          }\n          if (w.config.chart.type === \"candlestick\" || s.type && s.type === \"candlestick\") {\n            columns.pop();\n            columns.push(w.candleData.seriesCandleO[sI][i]);\n            columns.push(w.candleData.seriesCandleH[sI][i]);\n            columns.push(w.candleData.seriesCandleL[sI][i]);\n            columns.push(w.candleData.seriesCandleC[sI][i]);\n          }\n          if (w.config.chart.type === \"boxPlot\" || s.type && s.type === \"boxPlot\") {\n            columns.pop();\n            columns.push(w.candleData.seriesCandleO[sI][i]);\n            columns.push(w.candleData.seriesCandleH[sI][i]);\n            columns.push(w.candleData.seriesCandleM[sI][i]);\n            columns.push(w.candleData.seriesCandleL[sI][i]);\n            columns.push(w.candleData.seriesCandleC[sI][i]);\n          }\n          if (w.config.chart.type === \"rangeBar\") {\n            columns.pop();\n            columns.push(w.rangeData.seriesRangeStart[sI][i]);\n            columns.push(w.rangeData.seriesRangeEnd[sI][i]);\n          }\n          if (w.config.chart.type === \"violin\" || s.type && s.type === \"violin\") {\n            columns.pop();\n            columns.push((_b = w.violinData.seriesViolinMin[sI]) == null ? void 0 : _b[i]);\n            columns.push((_c = w.violinData.seriesViolinMax[sI]) == null ? void 0 : _c[i]);\n            columns.push((_f = (_e = (_d = w.violinData.seriesViolinPoints[sI]) == null ? void 0 : _d[i]) == null ? void 0 : _e.length) != null ? _f : 0);\n          }\n          if (columns.length) {\n            rows.push(columns.join(columnDelimiter));\n          }\n        }\n      }\n    };\n    const handleUnequalXValues = () => {\n      const categories = /* @__PURE__ */ new Set();\n      const data = {};\n      series.forEach((s, sI) => {\n        s == null ? void 0 : s.data.forEach((dataItem) => {\n          let cat, value;\n          if (dataFormat.isFormatXY()) {\n            cat = dataItem.x;\n            value = dataItem.y;\n          } else if (dataFormat.isFormat2DArray()) {\n            cat = dataItem[0];\n            value = dataItem[1];\n          } else {\n            return;\n          }\n          if (!/** @type {Record<string,any>} */\n          data[cat]) {\n            data[cat] = Array(\n              series.length\n            ).fill(\"\");\n          }\n          data[cat][sI] = getFormattedValue(value);\n          categories.add(cat);\n        });\n      });\n      if (columns.length) {\n        rows.push(columns.join(columnDelimiter));\n      }\n      Array.from(categories).sort().forEach((cat) => {\n        rows.push([\n          getFormattedCategory(cat),\n          /** @type {Record<string,any>} */\n          data[cat].join(columnDelimiter)\n        ]);\n      });\n    };\n    columns.push(w.config.chart.toolbar.export.csv.headerCategory);\n    if (w.config.chart.type === \"boxPlot\") {\n      columns.push(\"minimum\");\n      columns.push(\"q1\");\n      columns.push(\"median\");\n      columns.push(\"q3\");\n      columns.push(\"maximum\");\n    } else if (w.config.chart.type === \"candlestick\") {\n      columns.push(\"open\");\n      columns.push(\"high\");\n      columns.push(\"low\");\n      columns.push(\"close\");\n    } else if (w.config.chart.type === \"rangeBar\") {\n      columns.push(\"minimum\");\n      columns.push(\"maximum\");\n    } else if (w.config.chart.type === \"violin\") {\n      columns.push(\"minimum\");\n      columns.push(\"maximum\");\n      columns.push(\"observations\");\n    } else {\n      series.map((s, sI) => {\n        const sname = (s.name ? s.name : `series-${sI}`) + \"\";\n        if (w.globals.axisCharts) {\n          columns.push(\n            sname.split(columnDelimiter).join(\"\") ? sname.split(columnDelimiter).join(\"\") : `series-${sI}`\n          );\n        }\n      });\n    }\n    if (!w.globals.axisCharts) {\n      columns.push(w.config.chart.toolbar.export.csv.headerValue);\n      rows.push(columns.join(columnDelimiter));\n    }\n    if (!w.globals.allSeriesHasEqualX && w.globals.axisCharts && !w.config.xaxis.categories.length && !w.config.labels.length) {\n      handleUnequalXValues();\n    } else {\n      series.map((s, sI) => {\n        if (w.globals.axisCharts) {\n          handleAxisRowsColumns(s, sI);\n        } else {\n          columns = [];\n          columns.push(getFormattedCategory(w.labelData.labels[sI]));\n          columns.push(getFormattedValue(gSeries[sI]));\n          rows.push(columns.join(columnDelimiter));\n        }\n      });\n    }\n    result += rows.join(lineDelimiter);\n    this.triggerDownload(\n      \"data:text/csv; charset=utf-8,\" + encodeURIComponent(universalBOM + result),\n      fileName ? fileName : w.config.chart.toolbar.export.csv.filename,\n      \".csv\"\n    );\n  }\n  /**\n   * @param {string} href\n   * @param {string} filename\n   * @param {string} ext\n   */\n  triggerDownload(href, filename, ext) {\n    if (Environment.isSSR()) return;\n    const downloadLink = document.createElement(\"a\");\n    downloadLink.href = href;\n    downloadLink.download = (filename ? filename : this.w.globals.chartID) + ext;\n    document.body.appendChild(downloadLink);\n    downloadLink.click();\n    document.body.removeChild(downloadLink);\n  }\n}\nApexCharts.registerFeatures({ exports: Exports });\nlet Helpers$3 = class Helpers2 {\n  /**\n   * @param {import('./Legend').default} lgCtx\n   */\n  constructor(lgCtx) {\n    this.w = lgCtx.w;\n    this.lgCtx = lgCtx;\n  }\n  getLegendStyles() {\n    if (Environment.isSSR()) return null;\n    const stylesheet = document.createElement(\"style\");\n    stylesheet.setAttribute(\"type\", \"text/css\");\n    const nonce = this.w.config.chart.nonce;\n    if (nonce) {\n      stylesheet.setAttribute(\"nonce\", nonce);\n    }\n    const rule = document.createTextNode(apexchartsLegendCSS);\n    stylesheet.appendChild(rule);\n    return stylesheet;\n  }\n  getLegendDimensions() {\n    const w = this.w;\n    const currLegendsWrap = w.dom.baseEl.querySelector(\".apexcharts-legend\");\n    if (!currLegendsWrap) {\n      return { clwh: 0, clww: 0 };\n    }\n    const { width: currLegendsWrapWidth, height: currLegendsWrapHeight } = currLegendsWrap.getBoundingClientRect();\n    return {\n      clwh: currLegendsWrapHeight,\n      clww: currLegendsWrapWidth\n    };\n  }\n  appendToForeignObject() {\n    var _a;\n    const legendStyles = this.getLegendStyles();\n    if (this.w.config.chart.injectStyleSheet !== false && legendStyles) {\n      (_a = this.w.dom.elLegendForeign) == null ? void 0 : _a.appendChild(legendStyles);\n    }\n  }\n  /**\n   * @param {number} seriesCnt\n   * @param {boolean} isHidden\n   */\n  toggleDataSeries(seriesCnt, isHidden) {\n    var _a, _b;\n    const w = this.w;\n    if (w.globals.axisCharts || w.config.chart.type === \"radialBar\") {\n      w.globals.resized = true;\n      let seriesEl = null;\n      let realIndex = null;\n      w.globals.risingSeries = [];\n      if (w.globals.axisCharts) {\n        seriesEl = w.dom.baseEl.querySelector(\n          `.apexcharts-series[data\\\\:realIndex='${seriesCnt}']`\n        );\n        if (!seriesEl) return;\n        realIndex = parseInt((_a = seriesEl.getAttribute(\"data:realIndex\")) != null ? _a : \"\", 10);\n      } else {\n        seriesEl = w.dom.baseEl.querySelector(\n          `.apexcharts-series[rel='${seriesCnt + 1}']`\n        );\n        if (!seriesEl) return;\n        realIndex = parseInt((_b = seriesEl.getAttribute(\"rel\")) != null ? _b : \"\", 10) - 1;\n      }\n      if (isHidden) {\n        const seriesToMakeVisible = [\n          {\n            cs: w.globals.collapsedSeries,\n            csi: w.globals.collapsedSeriesIndices\n          },\n          {\n            cs: w.globals.ancillaryCollapsedSeries,\n            csi: w.globals.ancillaryCollapsedSeriesIndices\n          }\n        ];\n        seriesToMakeVisible.forEach((r) => {\n          const cs = (\n            /** @type {any} */\n            r.cs\n          );\n          const csi = (\n            /** @type {any} */\n            r.csi\n          );\n          this.riseCollapsedSeries(\n            cs,\n            csi,\n            /** @type {number} */\n            realIndex\n          );\n        });\n      } else {\n        this.hideSeries({ seriesEl, realIndex });\n      }\n      if (w.config.chart.accessibility.enabled) {\n        const legendItem = w.dom.baseEl.querySelector(\n          `.apexcharts-legend-series[rel=\"${seriesCnt + 1}\"]`\n        );\n        if (legendItem) {\n          const isCollapsed = w.globals.collapsedSeriesIndices.includes(realIndex) || w.globals.ancillaryCollapsedSeriesIndices.includes(realIndex);\n          legendItem.setAttribute(\n            \"aria-pressed\",\n            isCollapsed ? \"true\" : \"false\"\n          );\n          const legendTextEl = legendItem.querySelector(\n            \".apexcharts-legend-text\"\n          );\n          const seriesName = legendTextEl ? legendTextEl.textContent : w.seriesData.seriesNames[seriesCnt];\n          const statusText = isCollapsed ? \"hidden\" : \"visible\";\n          legendItem.setAttribute(\n            \"aria-label\",\n            `${seriesName}, ${statusText}. Press Enter or Space to toggle.`\n          );\n        }\n      }\n    } else {\n      const seriesEl = w.dom.Paper.findOne(\n        ` .apexcharts-series[rel='${seriesCnt + 1}'] path`\n      );\n      const type = w.config.chart.type;\n      if (type === \"pie\" || type === \"polarArea\" || type === \"donut\") {\n        const dataLabels = w.config.plotOptions.pie.donut.labels;\n        const graphics = new Graphics(this.w);\n        graphics.pathMouseDown(seriesEl, null);\n        this.lgCtx.printDataLabelsInner(seriesEl.node, dataLabels);\n      }\n      if (w.config.chart.accessibility.enabled) {\n        const legendItem = w.dom.baseEl.querySelector(\n          `.apexcharts-legend-series[rel=\"${seriesCnt + 1}\"]`\n        );\n        if (legendItem) {\n          const isCollapsed = w.globals.collapsedSeriesIndices.includes(seriesCnt);\n          legendItem.setAttribute(\n            \"aria-pressed\",\n            isCollapsed ? \"true\" : \"false\"\n          );\n          const legendTextEl = legendItem.querySelector(\n            \".apexcharts-legend-text\"\n          );\n          const seriesName = legendTextEl ? legendTextEl.textContent : w.seriesData.seriesNames[seriesCnt];\n          const statusText = isCollapsed ? \"hidden\" : \"visible\";\n          legendItem.setAttribute(\n            \"aria-label\",\n            `${seriesName}, ${statusText}. Press Enter or Space to toggle.`\n          );\n        }\n      }\n    }\n  }\n  /** @param {{realIndex: any}} opts */\n  getSeriesAfterCollapsing({ realIndex }) {\n    var _a;\n    const w = this.w;\n    const gl = w.globals;\n    const series = Utils$1.clone(w.config.series);\n    if (gl.axisCharts) {\n      const yaxis = w.config.yaxis[gl.seriesYAxisReverseMap[realIndex]];\n      const collapseData = {\n        index: realIndex,\n        data: series[realIndex].data.slice(),\n        type: series[realIndex].type || w.config.chart.type\n      };\n      if (yaxis && yaxis.show && yaxis.showAlways) {\n        if (gl.ancillaryCollapsedSeriesIndices.indexOf(realIndex) < 0) {\n          gl.ancillaryCollapsedSeries.push(collapseData);\n          gl.ancillaryCollapsedSeriesIndices.push(realIndex);\n        }\n      } else {\n        if (gl.collapsedSeriesIndices.indexOf(realIndex) < 0) {\n          gl.collapsedSeries.push(collapseData);\n          gl.collapsedSeriesIndices.push(realIndex);\n          const removeIndexOfRising = gl.risingSeries.indexOf(realIndex);\n          gl.risingSeries.splice(removeIndexOfRising, 1);\n        }\n      }\n    } else {\n      gl.collapsedSeries.push({\n        index: realIndex,\n        data: series[realIndex],\n        type: (\n          /** @type {any} */\n          (_a = w.config.series[realIndex].type) != null ? _a : \"line\"\n        )\n      });\n      gl.collapsedSeriesIndices.push(realIndex);\n    }\n    gl.allSeriesCollapsed = gl.collapsedSeries.length + gl.ancillaryCollapsedSeries.length === w.config.series.length;\n    return this._getSeriesBasedOnCollapsedState(series);\n  }\n  /** @param {{seriesEl: any, realIndex: any}} opts */\n  hideSeries({ seriesEl, realIndex }) {\n    const w = this.w;\n    const series = this.getSeriesAfterCollapsing({\n      realIndex\n    });\n    const seriesChildren = seriesEl.childNodes;\n    for (let sc = 0; sc < seriesChildren.length; sc++) {\n      if (seriesChildren[sc].classList.contains(\"apexcharts-series-markers-wrap\")) {\n        if (seriesChildren[sc].classList.contains(\"apexcharts-hide\")) {\n          seriesChildren[sc].classList.remove(\"apexcharts-hide\");\n        } else {\n          seriesChildren[sc].classList.add(\"apexcharts-hide\");\n        }\n      }\n    }\n    this.lgCtx.updateSeries(\n      series,\n      w.config.chart.animations.dynamicAnimation.enabled\n    );\n  }\n  /**\n   * @param {any[]} collapsedSeries\n   * @param {number[]} seriesIndices\n   * @param {number} realIndex\n   */\n  riseCollapsedSeries(collapsedSeries, seriesIndices, realIndex) {\n    const w = this.w;\n    let series = Utils$1.clone(w.config.series);\n    if (collapsedSeries.length > 0) {\n      for (let c = 0; c < collapsedSeries.length; c++) {\n        if (collapsedSeries[c].index === realIndex) {\n          if (w.globals.axisCharts) {\n            series[realIndex].data = collapsedSeries[c].data.slice();\n          } else {\n            series[realIndex] = collapsedSeries[c].data;\n          }\n          if (typeof series[realIndex] !== \"number\") {\n            series[realIndex].hidden = false;\n          }\n          collapsedSeries.splice(c, 1);\n          seriesIndices.splice(c, 1);\n          w.globals.risingSeries.push(realIndex);\n          c--;\n        }\n      }\n      series = this._getSeriesBasedOnCollapsedState(series);\n      this.lgCtx.updateSeries(\n        series,\n        w.config.chart.animations.dynamicAnimation.enabled\n      );\n    }\n  }\n  /**\n   * @param {any[]} series\n   */\n  _getSeriesBasedOnCollapsedState(series) {\n    const w = this.w;\n    let collapsed = 0;\n    if (w.globals.axisCharts) {\n      series.forEach((s, sI) => {\n        if (!(w.globals.collapsedSeriesIndices.indexOf(sI) < 0 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(sI) < 0)) {\n          series[sI].data = [];\n          collapsed++;\n        }\n      });\n    } else {\n      series.forEach((s, sI) => {\n        if (!(w.globals.collapsedSeriesIndices.indexOf(sI) < 0)) {\n          series[sI] = 0;\n          collapsed++;\n        }\n      });\n    }\n    w.globals.allSeriesCollapsed = collapsed === series.length;\n    return series;\n  }\n};\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nclass HeatmapGradientLegend {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.svgEl = null;\n    this.arrowEl = null;\n    this.hoverValueEl = null;\n    this._min = 0;\n    this._max = 0;\n    this._geom = null;\n    this._bandHitEls = [];\n    this._activeBandIndex = -1;\n    this._onCellEnter = this._onCellEnter.bind(this);\n    this._onCellLeave = this._onCellLeave.bind(this);\n    this._onBandEnter = this._onBandEnter.bind(this);\n    this._onBandLeave = this._onBandLeave.bind(this);\n  }\n  /** Default value formatter for min/max labels and the hover tooltip. */\n  _getFormatter() {\n    const cfg = this.w.config.plotOptions.heatmap.colorScale.gradientLegend;\n    if (typeof cfg.formatter === \"function\") return cfg.formatter;\n    return (v) => {\n      if (!Number.isFinite(v)) return String(v);\n      const abs = Math.abs(v);\n      if (abs >= 1e3) return v.toFixed(0);\n      if (abs >= 10) return v.toFixed(1);\n      return v.toFixed(2);\n    };\n  }\n  /**\n   * True when the user has opted into the gradient legend variant.\n   * @param {any} w\n   */\n  static isEnabled(w) {\n    var _a, _b, _c, _d;\n    const cfg = (_d = (_c = (_b = (_a = w == null ? void 0 : w.config) == null ? void 0 : _a.plotOptions) == null ? void 0 : _b.heatmap) == null ? void 0 : _c.colorScale) == null ? void 0 : _d.gradientLegend;\n    return !!(cfg && cfg.enabled);\n  }\n  /**\n   * Build the gradient legend DOM into `elLegendWrap`.\n   * Caller is responsible for clearing the wrap first.\n   */\n  draw() {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    if (!elLegendWrap) return;\n    const cfg = w.config.plotOptions.heatmap.colorScale.gradientLegend;\n    const position = w.config.legend.position;\n    const isVertical = position === \"left\" || position === \"right\";\n    const arrowSize = (_b = (_a = cfg.arrow) == null ? void 0 : _a.size) != null ? _b : 8;\n    const arrowGutter = arrowSize + 4;\n    const labelPadAlongStrip = cfg.showLabels ? 28 : 4;\n    const labelPadAcrossStrip = cfg.showLabels ? 20 : 4;\n    const minLabelWidth = cfg.showLabels ? 44 : 0;\n    const stripLength = this._resolveStripLength(isVertical ? cfg.height : cfg.width, isVertical);\n    const stripThickness = cfg.thickness;\n    const svgWidth = isVertical ? Math.max(stripThickness + arrowGutter + 4, minLabelWidth) : stripLength + labelPadAlongStrip * 2;\n    const svgHeight = isVertical ? stripLength + labelPadAcrossStrip * 2 : stripThickness + arrowGutter + 4;\n    const verticalGroupWidth = stripThickness + arrowGutter;\n    const verticalGroupLeftPad = (svgWidth - verticalGroupWidth) / 2;\n    const stripX = isVertical ? position === \"left\" ? verticalGroupLeftPad : verticalGroupLeftPad + arrowGutter : labelPadAlongStrip;\n    const stripY = isVertical ? labelPadAcrossStrip : position === \"top\" ? arrowGutter : 4;\n    const svg = BrowserAPIs.createElementNS(SVG_NS, \"svg\");\n    svg.setAttribute(\"class\", \"apexcharts-heatmap-gradient-legend\");\n    svg.setAttribute(\"width\", String(svgWidth));\n    svg.setAttribute(\"height\", String(svgHeight));\n    svg.setAttribute(\"overflow\", \"visible\");\n    const defs = BrowserAPIs.createElementNS(SVG_NS, \"defs\");\n    const gradId = `apexcharts-heatmap-gradient-${w.globals.cuid}`;\n    const linearGrad = BrowserAPIs.createElementNS(SVG_NS, \"linearGradient\");\n    linearGrad.setAttribute(\"id\", gradId);\n    if (isVertical) {\n      linearGrad.setAttribute(\"x1\", \"0\");\n      linearGrad.setAttribute(\"y1\", \"1\");\n      linearGrad.setAttribute(\"x2\", \"0\");\n      linearGrad.setAttribute(\"y2\", \"0\");\n    } else {\n      linearGrad.setAttribute(\"x1\", \"0\");\n      linearGrad.setAttribute(\"y1\", \"0\");\n      linearGrad.setAttribute(\"x2\", \"1\");\n      linearGrad.setAttribute(\"y2\", \"0\");\n    }\n    const { min, max, stops, bands } = this._computeStops();\n    this._min = min;\n    this._max = max;\n    stops.forEach((s) => {\n      const stopEl = BrowserAPIs.createElementNS(SVG_NS, \"stop\");\n      stopEl.setAttribute(\"offset\", `${(s.percent * 100).toFixed(2)}%`);\n      stopEl.setAttribute(\"stop-color\", s.color);\n      linearGrad.appendChild(stopEl);\n    });\n    defs.appendChild(linearGrad);\n    svg.appendChild(defs);\n    const rect = BrowserAPIs.createElementNS(SVG_NS, \"rect\");\n    rect.setAttribute(\"x\", String(stripX));\n    rect.setAttribute(\"y\", String(stripY));\n    rect.setAttribute(\"width\", String(isVertical ? stripThickness : stripLength));\n    rect.setAttribute(\"height\", String(isVertical ? stripLength : stripThickness));\n    rect.setAttribute(\"rx\", \"2\");\n    rect.setAttribute(\"fill\", `url(#${gradId})`);\n    svg.appendChild(rect);\n    if (cfg.showLabels) {\n      const labelColor = ((_c = cfg.labelStyle) == null ? void 0 : _c.colors) || (Array.isArray(w.config.legend.labels.colors) ? w.config.legend.labels.colors[0] : w.config.legend.labels.colors) || w.config.chart.foreColor;\n      const labelFontSize = ((_d = cfg.labelStyle) == null ? void 0 : _d.fontSize) || \"11px\";\n      const labelFontFamily = ((_e = cfg.labelStyle) == null ? void 0 : _e.fontFamily) || w.config.chart.fontFamily;\n      const fmt = this._getFormatter();\n      const makeLabel = (text, x, y, anchor) => {\n        const t = BrowserAPIs.createElementNS(SVG_NS, \"text\");\n        t.setAttribute(\"x\", String(x));\n        t.setAttribute(\"y\", String(y));\n        t.setAttribute(\"text-anchor\", anchor);\n        t.setAttribute(\"dominant-baseline\", \"middle\");\n        t.setAttribute(\"fill\", labelColor);\n        t.setAttribute(\"font-size\", labelFontSize);\n        if (labelFontFamily) t.setAttribute(\"font-family\", labelFontFamily);\n        t.textContent = String(text);\n        return t;\n      };\n      if (isVertical) {\n        const midX = stripX + stripThickness / 2;\n        svg.appendChild(makeLabel(fmt(min), midX, stripY + stripLength + 10, \"middle\"));\n        svg.appendChild(makeLabel(fmt(max), midX, stripY - 10, \"middle\"));\n      } else {\n        const midY = stripY + stripThickness / 2;\n        svg.appendChild(makeLabel(fmt(min), stripX - 6, midY, \"end\"));\n        svg.appendChild(makeLabel(fmt(max), stripX + stripLength + 6, midY, \"start\"));\n      }\n    }\n    const arrowColor = ((_f = cfg.arrow) == null ? void 0 : _f.color) || w.config.chart.foreColor;\n    const arrow = this._buildArrow(arrowSize, arrowColor, position);\n    svg.appendChild(arrow);\n    this.arrowEl = arrow;\n    this._bandHitEls = [];\n    if (w.config.legend.onItemHover.highlightDataSeries && bands.length > 0) {\n      bands.forEach((b) => {\n        const hit = BrowserAPIs.createElementNS(SVG_NS, \"rect\");\n        if (isVertical) {\n          const yTop = stripY + stripLength - b.p2 * stripLength;\n          const yBot = stripY + stripLength - b.p1 * stripLength;\n          hit.setAttribute(\"x\", String(stripX));\n          hit.setAttribute(\"y\", String(yTop));\n          hit.setAttribute(\"width\", String(stripThickness));\n          hit.setAttribute(\"height\", String(Math.max(0, yBot - yTop)));\n        } else {\n          hit.setAttribute(\"x\", String(stripX + b.p1 * stripLength));\n          hit.setAttribute(\"y\", String(stripY));\n          hit.setAttribute(\n            \"width\",\n            String(Math.max(0, (b.p2 - b.p1) * stripLength))\n          );\n          hit.setAttribute(\"height\", String(stripThickness));\n        }\n        hit.setAttribute(\"fill\", \"transparent\");\n        hit.setAttribute(\"class\", \"apexcharts-heatmap-gradient-band\");\n        hit.setAttribute(\"data:range-index\", String(b.index));\n        hit.style.cursor = \"pointer\";\n        svg.appendChild(hit);\n        this._bandHitEls.push(hit);\n      });\n    }\n    this._geom = {\n      isVertical,\n      position,\n      stripX,\n      stripY,\n      stripLength,\n      stripThickness,\n      arrowSize,\n      svgWidth,\n      svgHeight\n    };\n    if (cfg.showHoverValue) {\n      const tt = BrowserAPIs.createElement(\"div\");\n      tt.classList.add(\"apexcharts-heatmap-gradient-legend-value\");\n      tt.style.position = \"absolute\";\n      tt.style.fontSize = ((_g = cfg.labelStyle) == null ? void 0 : _g.fontSize) || \"11px\";\n      tt.style.fontFamily = ((_h = cfg.labelStyle) == null ? void 0 : _h.fontFamily) || w.config.chart.fontFamily || \"\";\n      tt.style.color = w.config.chart.foreColor;\n      tt.style.background = \"rgba(0,0,0,0.65)\";\n      tt.style.color = \"#fff\";\n      tt.style.padding = \"2px 6px\";\n      tt.style.borderRadius = \"3px\";\n      tt.style.pointerEvents = \"none\";\n      tt.style.whiteSpace = \"nowrap\";\n      tt.style.opacity = \"0\";\n      tt.style.transition = \"opacity 120ms ease\";\n      this.hoverValueEl = tt;\n    }\n    elLegendWrap.classList.add(\"apexcharts-heatmap-gradient-legend-wrap\");\n    elLegendWrap.classList.add(\n      \"apx-legend-position-\" + position\n    );\n    elLegendWrap.appendChild(svg);\n    if (this.hoverValueEl) elLegendWrap.appendChild(this.hoverValueEl);\n    this.svgEl = svg;\n    this._applyWrapAlignment(elLegendWrap, position, isVertical, svgWidth, svgHeight);\n    this._attachHoverListeners();\n    this._attachBandHoverListeners();\n  }\n  /**\n   * Resolve a configured length (number = px, string ending in '%' =\n   * percentage of the chart's SVG width/height) to a pixel length.\n   * @param {number|string} value\n   * @param {boolean} isVertical\n   * @returns {number}\n   */\n  _resolveStripLength(value, isVertical) {\n    const w = this.w;\n    const basis = isVertical ? w.globals.svgHeight || w.config.chart.height || 300 : w.globals.svgWidth || w.config.chart.width || 600;\n    if (typeof value === \"string\") {\n      const trimmed = value.trim();\n      if (trimmed.endsWith(\"%\")) {\n        const pct = parseFloat(trimmed) || 0;\n        return Math.max(20, basis * pct / 100);\n      }\n      const n = parseFloat(trimmed);\n      return Number.isFinite(n) ? n : 200;\n    }\n    if (typeof value === \"number\" && Number.isFinite(value)) return value;\n    return 200;\n  }\n  /**\n   * Position the legend wrap and align the gradient strip within it. The\n   * wrap spans the chart's long axis (full width for top/bottom; full\n   * height for left/right) and uses flexbox to honor the `align` config.\n   * Bypasses the standard `setLegendWrapXY` which sizes the wrap to its\n   * content.\n   * @param {HTMLElement} elLegendWrap\n   * @param {'top'|'right'|'bottom'|'left'} position\n   * @param {boolean} isVertical\n   * @param {number} svgWidth\n   * @param {number} svgHeight\n   */\n  _applyWrapAlignment(elLegendWrap, position, isVertical, svgWidth, svgHeight) {\n    const w = this.w;\n    const cfg = w.config.plotOptions.heatmap.colorScale.gradientLegend;\n    const align = cfg.align || \"center\";\n    const edgePad = 12;\n    const chartWidth = w.globals.svgWidth || w.config.chart.width || 600;\n    const chartHeight = w.globals.svgHeight || w.config.chart.height || 300;\n    const userOffsetX = w.config.legend.offsetX || 0;\n    const userOffsetY = w.config.legend.offsetY || 0;\n    elLegendWrap.style.position = \"absolute\";\n    elLegendWrap.style.display = \"block\";\n    elLegendWrap.style.overflow = \"visible\";\n    elLegendWrap.style.padding = \"0\";\n    elLegendWrap.style.width = svgWidth + \"px\";\n    elLegendWrap.style.height = svgHeight + \"px\";\n    elLegendWrap.style.right = \"auto\";\n    elLegendWrap.style.bottom = \"auto\";\n    if (isVertical) {\n      const availableHeight = chartHeight - svgHeight - edgePad * 2;\n      let y;\n      if (align === \"start\") y = edgePad;\n      else if (align === \"end\") y = edgePad + Math.max(0, availableHeight);\n      else y = edgePad + Math.max(0, availableHeight) / 2;\n      elLegendWrap.style.top = y + userOffsetY + \"px\";\n      if (position === \"left\") {\n        elLegendWrap.style.left = edgePad + userOffsetX + \"px\";\n      } else {\n        elLegendWrap.style.left = chartWidth - svgWidth - edgePad + userOffsetX + \"px\";\n      }\n    } else {\n      const availableWidth = chartWidth - svgWidth - edgePad * 2;\n      let x;\n      if (align === \"start\") x = edgePad;\n      else if (align === \"end\") x = edgePad + Math.max(0, availableWidth);\n      else x = edgePad + Math.max(0, availableWidth) / 2;\n      elLegendWrap.style.left = x + userOffsetX + \"px\";\n      if (position === \"top\") {\n        elLegendWrap.style.top = edgePad + userOffsetY + \"px\";\n      } else {\n        elLegendWrap.style.top = chartHeight - svgHeight - edgePad + userOffsetY + \"px\";\n      }\n    }\n  }\n  /**\n   * Re-position the strip once the final layout is known.\n   *\n   * `_applyWrapAlignment` (called during `draw()`, before `plotCoords()`) can\n   * only pin to the chart's outer edge. This runs after layout — when\n   * `translateX/Y`, `gridWidth/Height` and `xAxisHeight` are populated — and:\n   *   - centers the strip within its reserved band on the perpendicular axis\n   *     (between the title and the plot for `top`; the x-axis and the chart\n   *     bottom for `bottom`; the chart edge and the plot for `left`/`right`),\n   *     so the slack is split evenly instead of dumped on one side, and\n   *   - aligns it along the plot's own extent (so `align: 'center'` centers\n   *     over the heatmap, not the whole canvas).\n   * Honors `legend.offsetX/offsetY` for user nudging. Safe to call repeatedly.\n   */\n  repositionToPlot() {\n    var _a, _b;\n    if (!Environment.isBrowser()) return;\n    const w = this.w;\n    const g = w.globals;\n    const wrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    if (!wrap || !this._geom) return;\n    if (!Number.isFinite(g.gridWidth) || !Number.isFinite(g.gridHeight)) return;\n    const { isVertical, position, svgWidth, svgHeight, stripX, stripY, stripThickness } = this._geom;\n    const align = w.config.plotOptions.heatmap.colorScale.gradientLegend.align || \"center\";\n    const ox = w.config.legend.offsetX || 0;\n    const oy = w.config.legend.offsetY || 0;\n    const dimHelpers = (_b = (_a = this.ctx) == null ? void 0 : _a.dimensions) == null ? void 0 : _b.dimHelpers;\n    const titleArea = dimHelpers ? dimHelpers.getTitleSubtitleCoords(\"title\").height + dimHelpers.getTitleSubtitleCoords(\"subtitle\").height : 0;\n    const xAxisArea = w.layout.xAxisHeight || 0;\n    const alongOffset = (extent, size) => {\n      const avail = Math.max(0, extent - size);\n      if (align === \"start\") return 0;\n      if (align === \"end\") return avail;\n      return avail / 2;\n    };\n    if (isVertical) {\n      wrap.style.top = g.translateY + alongOffset(g.gridHeight, svgHeight) + oy + \"px\";\n      const bandStart = position === \"left\" ? 0 : g.translateX + g.gridWidth;\n      const bandEnd = position === \"left\" ? g.translateX : g.svgWidth;\n      const stripCenter = (bandStart + bandEnd) / 2;\n      wrap.style.left = stripCenter - stripX - stripThickness / 2 + ox + \"px\";\n    } else {\n      wrap.style.left = g.translateX + alongOffset(g.gridWidth, svgWidth) + ox + \"px\";\n      const bandStart = position === \"top\" ? titleArea : g.translateY + g.gridHeight + xAxisArea;\n      const bandEnd = position === \"top\" ? g.translateY : g.svgHeight;\n      const stripCenter = (bandStart + bandEnd) / 2;\n      wrap.style.top = stripCenter - stripY - stripThickness / 2 + oy + \"px\";\n    }\n    BrowserAPIs.requestAnimationFrame(() => this._enforceMinPlotGap());\n  }\n  /**\n   * Guarantee a minimum gap between the strip's chart-facing edge and the plot.\n   * Measured in viewport space (immune to the wrap↔SVG coordinate offset) and\n   * applied as a *relative* shift to the wrap's current position, so it only\n   * nudges a strip that ended up too close — placements with ample room are\n   * left exactly where centering put them. Runs post-paint (see caller).\n   */\n  _enforceMinPlotGap() {\n    const w = this.w;\n    const wrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    const strip = this.svgEl && this.svgEl.querySelector(\"rect\");\n    const grid = w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    if (!wrap || !strip || !grid || !this._geom) return;\n    const s = strip.getBoundingClientRect();\n    const gr = grid.getBoundingClientRect();\n    if (!s.width || !s.height || !gr.width || !gr.height) return;\n    const MIN_GAP = 16;\n    const { isVertical, position } = this._geom;\n    if (isVertical) {\n      const gap = position === \"left\" ? gr.left - s.right : s.left - gr.right;\n      if (gap < MIN_GAP) {\n        const curLeft = parseFloat(wrap.style.left) || 0;\n        const shift = MIN_GAP - gap;\n        wrap.style.left = curLeft + (position === \"left\" ? -shift : shift) + \"px\";\n      }\n    } else {\n      const gap = position === \"top\" ? gr.top - s.bottom : s.top - gr.bottom;\n      if (gap < MIN_GAP) {\n        const curTop = parseFloat(wrap.style.top) || 0;\n        const shift = MIN_GAP - gap;\n        wrap.style.top = curTop + (position === \"top\" ? -shift : shift) + \"px\";\n      }\n    }\n  }\n  /**\n   * Tear down listeners (called before re-render).\n   */\n  destroy() {\n    var _a, _b, _c, _d, _e, _f, _g;\n    for (let i = 0; i < this._bandHitEls.length; i++) {\n      const el = this._bandHitEls[i];\n      (_a = el.removeEventListener) == null ? void 0 : _a.call(el, \"mousemove\", this._onBandEnter);\n      (_b = el.removeEventListener) == null ? void 0 : _b.call(el, \"mouseout\", this._onBandLeave);\n    }\n    this._bandHitEls = [];\n    this._activeBandIndex = -1;\n    if (!((_c = this.ctx) == null ? void 0 : _c.events)) return;\n    try {\n      (_e = (_d = this.ctx.events).removeEventListener) == null ? void 0 : _e.call(\n        _d,\n        \"dataPointMouseEnter\",\n        this._onCellEnter\n      );\n      (_g = (_f = this.ctx.events).removeEventListener) == null ? void 0 : _g.call(\n        _f,\n        \"dataPointMouseLeave\",\n        this._onCellLeave\n      );\n    } catch (_) {\n    }\n  }\n  /** Wire mousemove/mouseout on each per-band hit-region (ranges mode). */\n  _attachBandHoverListeners() {\n    if (!Environment.isBrowser()) return;\n    for (let i = 0; i < this._bandHitEls.length; i++) {\n      const el = this._bandHitEls[i];\n      el.addEventListener(\"mousemove\", this._onBandEnter);\n      el.addEventListener(\"mouseout\", this._onBandLeave);\n    }\n  }\n  /**\n   * Hovering a gradient band highlights its cells and dims the rest. Guarded\n   * so the repeated mousemove stream only re-applies on an actual band change.\n   * @param {Event} e\n   */\n  _onBandEnter(e) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.currentTarget\n    );\n    const idx = parseInt((_a = target.getAttribute(\"data:range-index\")) != null ? _a : \"-1\", 10);\n    if (idx < 0 || idx === this._activeBandIndex) return;\n    this._activeBandIndex = idx;\n    (_d = (_c = (_b = this.ctx) == null ? void 0 : _b.events) == null ? void 0 : _c.fireEvent) == null ? void 0 : _d.call(_c, \"legendHover\", [this.ctx, idx, w]);\n    new Series(w).highlightRangeInSeries(idx, \"highlight\");\n  }\n  /** Leaving a band clears the highlight. */\n  _onBandLeave() {\n    if (this._activeBandIndex < 0) return;\n    const idx = this._activeBandIndex;\n    this._activeBandIndex = -1;\n    new Series(this.w).highlightRangeInSeries(idx, \"reset\");\n  }\n  _attachHoverListeners() {\n    var _a, _b;\n    if (!Environment.isBrowser()) return;\n    if (!((_b = (_a = this.ctx) == null ? void 0 : _a.events) == null ? void 0 : _b.addEventListener)) return;\n    this.ctx.events.addEventListener(\n      \"dataPointMouseEnter\",\n      this._onCellEnter\n    );\n    this.ctx.events.addEventListener(\n      \"dataPointMouseLeave\",\n      this._onCellLeave\n    );\n  }\n  /**\n   * dataPointMouseEnter fires as `(e, ctx, { seriesIndex, dataPointIndex, w })`.\n   * Graphics._fireEvent forwards listener args in the same shape.\n   * @param {...any} args\n   */\n  _onCellEnter(...args) {\n    var _a, _b;\n    const w = this.w;\n    if (!this.arrowEl) return;\n    const opts = args[args.length - 1];\n    if (!opts || typeof opts !== \"object\") return;\n    const i = opts.seriesIndex;\n    const j = opts.dataPointIndex;\n    if (typeof i !== \"number\" || typeof j !== \"number\") return;\n    if (w.config.chart.type !== \"heatmap\") return;\n    const row = (_b = (_a = w.seriesData) == null ? void 0 : _a.series) == null ? void 0 : _b[i];\n    const val = row == null ? void 0 : row[j];\n    if (val == null || Number.isNaN(val)) return;\n    this._positionArrow(val);\n  }\n  _onCellLeave() {\n    if (!this.arrowEl) return;\n    this.arrowEl.setAttribute(\"opacity\", \"0\");\n    if (this.hoverValueEl) {\n      this.hoverValueEl.style.opacity = \"0\";\n    }\n  }\n  /**\n   * Move the arrow to the position corresponding to `val` along the strip.\n   * @param {number} val\n   */\n  _positionArrow(val) {\n    if (!this.arrowEl || !this._geom) return;\n    const { isVertical, position, stripX, stripY, stripLength, stripThickness, arrowSize } = this._geom;\n    const min = this._min;\n    const max = this._max;\n    const span = max - min;\n    let pct;\n    if (span === 0) {\n      pct = 0.5;\n    } else {\n      pct = (val - min) / span;\n    }\n    if (pct < 0) pct = 0;\n    if (pct > 1) pct = 1;\n    if (isVertical) {\n      const yCenter = stripY + stripLength - pct * stripLength;\n      let tipX, baseX;\n      if (position === \"left\") {\n        tipX = stripX + stripThickness;\n        baseX = tipX + arrowSize;\n      } else {\n        tipX = stripX;\n        baseX = tipX - arrowSize;\n      }\n      const points = [\n        `${tipX},${yCenter}`,\n        `${baseX},${yCenter - arrowSize / 2}`,\n        `${baseX},${yCenter + arrowSize / 2}`\n      ].join(\" \");\n      this.arrowEl.setAttribute(\"points\", points);\n    } else {\n      const xCenter = stripX + pct * stripLength;\n      let tipY, baseY;\n      if (position === \"top\") {\n        tipY = stripY + stripThickness;\n        baseY = tipY + arrowSize;\n      } else {\n        tipY = stripY;\n        baseY = tipY - arrowSize;\n      }\n      const points = [\n        `${xCenter},${tipY}`,\n        `${xCenter - arrowSize / 2},${baseY}`,\n        `${xCenter + arrowSize / 2},${baseY}`\n      ].join(\" \");\n      this.arrowEl.setAttribute(\"points\", points);\n    }\n    this.arrowEl.setAttribute(\"opacity\", \"1\");\n    if (this.hoverValueEl) {\n      const fmt = this._getFormatter();\n      this.hoverValueEl.textContent = fmt(val);\n      if (isVertical) {\n        const yCenter = stripY + stripLength - pct * stripLength;\n        if (position === \"left\") {\n          this.hoverValueEl.style.left = `${stripX + stripThickness + arrowSize + 8}px`;\n        } else {\n          this.hoverValueEl.style.left = `${stripX - arrowSize - 8}px`;\n          this.hoverValueEl.style.transform = \"translateX(-100%)\";\n        }\n        this.hoverValueEl.style.top = `${yCenter - 9}px`;\n      } else {\n        const xCenter = stripX + pct * stripLength;\n        this.hoverValueEl.style.left = `${xCenter}px`;\n        this.hoverValueEl.style.transform = \"translateX(-50%)\";\n        if (position === \"top\") {\n          this.hoverValueEl.style.top = `${stripY + stripThickness + arrowSize + 8}px`;\n        } else {\n          this.hoverValueEl.style.top = `${stripY - arrowSize - 18}px`;\n        }\n      }\n      this.hoverValueEl.style.opacity = \"1\";\n    }\n  }\n  /**\n   * @param {number} size\n   * @param {string} color\n   * @param {'top'|'right'|'bottom'|'left'} _position\n   */\n  _buildArrow(size, color, _position) {\n    const polygon = BrowserAPIs.createElementNS(SVG_NS, \"polygon\");\n    polygon.setAttribute(\"fill\", color);\n    polygon.setAttribute(\"opacity\", \"0\");\n    polygon.setAttribute(\"class\", \"apexcharts-heatmap-gradient-arrow\");\n    polygon.setAttribute(\"points\", \"0,0 0,0 0,0\");\n    polygon.setAttribute(\"pointer-events\", \"none\");\n    return polygon;\n  }\n  /**\n   * Build gradient stops + return effective min/max.\n   * - If `colorScale.ranges` is set, stops are placed at each range boundary\n   *   so the gradient reflects the user's discrete palette.\n   * - Otherwise, samples N stops from the same shadeColor function the cells\n   *   use, so the strip visually matches the heatmap.\n   * @returns {{ min: number, max: number, stops: Array<{percent:number,color:string}>, bands: Array<{index:number,p1:number,p2:number}> }}\n   */\n  _computeStops() {\n    var _a, _b;\n    const w = this.w;\n    const cs = w.config.plotOptions.heatmap.colorScale;\n    const cfg = cs.gradientLegend;\n    let dataMin = Infinity;\n    let dataMax = -Infinity;\n    const rows = ((_a = w.seriesData) == null ? void 0 : _a.series) || [];\n    for (let i = 0; i < rows.length; i++) {\n      const row = rows[i];\n      if (!row) continue;\n      for (let j = 0; j < row.length; j++) {\n        const v = row[j];\n        if (v == null || Number.isNaN(v)) continue;\n        if (v < dataMin) dataMin = v;\n        if (v > dataMax) dataMax = v;\n      }\n    }\n    if (!Number.isFinite(dataMin)) dataMin = 0;\n    if (!Number.isFinite(dataMax)) dataMax = 0;\n    let min = dataMin;\n    let max = dataMax;\n    if (typeof cs.min !== \"undefined\") {\n      min = cs.min < dataMin ? cs.min : dataMin;\n    }\n    if (typeof cs.max !== \"undefined\") {\n      max = cs.max > dataMax ? cs.max : dataMax;\n    }\n    const stops = [];\n    const bands = [];\n    if (cs.ranges && cs.ranges.length > 0) {\n      const ranges = cs.ranges.map((r, originalIndex) => __spreadProps(__spreadValues({}, r), {\n        _originalIndex: originalIndex\n      })).sort((a, b) => a.from - b.from);\n      const lo = ranges[0].from;\n      const hi = ranges[ranges.length - 1].to;\n      min = lo;\n      max = hi;\n      const span = hi - lo || 1;\n      ranges.forEach((r) => {\n        const p1 = (r.from - lo) / span;\n        const p2 = (r.to - lo) / span;\n        stops.push({ percent: (p1 + p2) / 2, color: r.color });\n        bands.push({ index: r._originalIndex, p1, p2 });\n      });\n    } else {\n      const baseColor = w.globals.colors[0] || \"#008FFB\";\n      const utils = new Utils$1();\n      const shadeIntensity = (_b = w.config.plotOptions.heatmap.shadeIntensity) != null ? _b : 0.5;\n      const hasNegs = (\n        /** @type {any} */\n        w.globals.hasNegs\n      );\n      const n = Math.max(2, cfg.stops || 16);\n      for (let s = 0; s < n; s++) {\n        const t = s / (n - 1);\n        const v = min + t * (max - min);\n        const total = Math.abs(max) + Math.abs(min);\n        const percent_v = total === 0 ? 0 : 100 * v / total;\n        let colorShadePercent;\n        if (hasNegs) {\n          if (w.config.plotOptions.heatmap.reverseNegativeShade) {\n            colorShadePercent = percent_v < 0 ? percent_v / 100 * (shadeIntensity * 1.25) : (1 - percent_v / 100) * (shadeIntensity * 1.25);\n          } else {\n            colorShadePercent = percent_v <= 0 ? 1 - (1 + percent_v / 100) * shadeIntensity : (1 - percent_v / 100) * shadeIntensity;\n          }\n        } else {\n          colorShadePercent = 1 - percent_v / 100;\n        }\n        if (colorShadePercent > 1) colorShadePercent = 1;\n        if (colorShadePercent < -1) colorShadePercent = -1;\n        const shaded = w.config.plotOptions.heatmap.enableShades ? utils.shadeColor(\n          w.config.theme.mode === \"dark\" ? colorShadePercent * -1 : colorShadePercent,\n          baseColor\n        ) : baseColor;\n        stops.push({ percent: t, color: shaded });\n      }\n    }\n    return { min, max, stops, bands };\n  }\n}\nclass Legend {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.printDataLabelsInner = (...a) => {\n      var _a;\n      return (_a = ctx.pie) == null ? void 0 : _a.printDataLabelsInner(...a);\n    };\n    this.updateSeries = (...a) => ctx.updateHelpers._updateSeries(...a);\n    this.onLegendClick = this.onLegendClick.bind(this);\n    this.onLegendHovered = this.onLegendHovered.bind(this);\n    this.isBarsDistributed = this.w.config.chart.type === \"bar\" && this.w.config.plotOptions.bar.distributed && this.w.config.series.length === 1;\n    this.legendHelpers = new Helpers$3(this);\n  }\n  init() {\n    const w = this.w;\n    const gl = w.globals;\n    const cnf = w.config;\n    this.isBarsDistributed = cnf.chart.type === \"bar\" && cnf.plotOptions.bar.distributed && cnf.series.length === 1;\n    const showLegendAlways = cnf.legend.showForSingleSeries && this.w.seriesData.series.length === 1 || this.isBarsDistributed || // Heatmap legends are colorScale-driven (discrete ranges or the\n    // gradient strip), not series-driven, so they must render even for a\n    // single-row heatmap.\n    cnf.chart.type === \"heatmap\" || this.w.seriesData.series.length > 1;\n    this.legendHelpers.appendToForeignObject();\n    if ((showLegendAlways || !gl.axisCharts) && cnf.legend.show) {\n      const elLegendWrap = (\n        /** @type {HTMLElement} */\n        w.dom.elLegendWrap\n      );\n      while (elLegendWrap.firstChild) {\n        elLegendWrap.removeChild(elLegendWrap.firstChild);\n      }\n      if (this.heatmapGradientLegend) {\n        this.heatmapGradientLegend.destroy();\n        this.heatmapGradientLegend = null;\n      }\n      if (cnf.chart.type === \"heatmap\" && HeatmapGradientLegend.isEnabled(w)) {\n        this.heatmapGradientLegend = new HeatmapGradientLegend(w, this.ctx);\n        this.heatmapGradientLegend.draw();\n      } else {\n        this.drawLegends();\n        if (cnf.legend.position === \"bottom\" || cnf.legend.position === \"top\") {\n          this.legendAlignHorizontal();\n        } else if (cnf.legend.position === \"right\" || cnf.legend.position === \"left\") {\n          this.legendAlignVertical();\n        }\n      }\n    }\n  }\n  createLegendMarker({ i, fillcolor }) {\n    const w = this.w;\n    const elMarker = BrowserAPIs.createElement(\"span\");\n    elMarker.classList.add(\"apexcharts-legend-marker\");\n    const mShape = w.config.legend.markers.shape || w.config.markers.shape;\n    let shape = mShape;\n    if (Array.isArray(mShape)) {\n      shape = mShape[i];\n    }\n    const mSize = Array.isArray(w.config.legend.markers.size) ? parseFloat(w.config.legend.markers.size[i]) : parseFloat(w.config.legend.markers.size);\n    const mOffsetX = Array.isArray(w.config.legend.markers.offsetX) ? parseFloat(w.config.legend.markers.offsetX[i]) : parseFloat(w.config.legend.markers.offsetX);\n    const mOffsetY = Array.isArray(w.config.legend.markers.offsetY) ? parseFloat(w.config.legend.markers.offsetY[i]) : parseFloat(w.config.legend.markers.offsetY);\n    const mBorderWidth = Array.isArray(w.config.legend.markers.strokeWidth) ? parseFloat(w.config.legend.markers.strokeWidth[i]) : parseFloat(w.config.legend.markers.strokeWidth);\n    const mStyle = elMarker.style;\n    mStyle.height = (mSize + mBorderWidth) * 2 + \"px\";\n    mStyle.width = (mSize + mBorderWidth) * 2 + \"px\";\n    mStyle.left = mOffsetX + \"px\";\n    mStyle.top = mOffsetY + \"px\";\n    if (w.config.legend.markers.customHTML) {\n      mStyle.background = \"transparent\";\n      mStyle.color = fillcolor[i];\n      if (Array.isArray(w.config.legend.markers.customHTML)) {\n        if (w.config.legend.markers.customHTML[i]) {\n          elMarker.innerHTML = w.config.legend.markers.customHTML[i]();\n        }\n      } else {\n        elMarker.innerHTML = w.config.legend.markers.customHTML();\n      }\n    } else {\n      const markers = new Markers(this.ctx.w, this.ctx);\n      const markerConfig = markers.getMarkerConfig({\n        cssClass: `apexcharts-legend-marker apexcharts-marker apexcharts-marker-${shape}`,\n        seriesIndex: i,\n        strokeWidth: mBorderWidth,\n        size: mSize\n      });\n      const SVGLib = Environment.isBrowser() ? (\n        /** @type {any} */\n        window.SVG\n      ) : (\n        /** @type {any} */\n        global.SVG\n      );\n      const SVGMarker = SVGLib().addTo(elMarker).size(\"100%\", \"100%\");\n      const marker = new Graphics(this.w).drawMarker(0, 0, __spreadProps(__spreadValues({}, markerConfig), {\n        pointFillColor: Array.isArray(fillcolor) ? fillcolor[i] : markerConfig.pointFillColor,\n        shape\n      }));\n      const shapesEls = w.dom.Paper.find(\n        \".apexcharts-legend-marker.apexcharts-marker\"\n      );\n      shapesEls.forEach((shapeEl) => {\n        if (shapeEl.node.classList.contains(\"apexcharts-marker-triangle\")) {\n          shapeEl.node.style.transform = \"translate(50%, 45%)\";\n        } else {\n          shapeEl.node.style.transform = \"translate(50%, 50%)\";\n        }\n      });\n      SVGMarker.add(marker);\n    }\n    return elMarker;\n  }\n  drawLegends() {\n    var _a;\n    const me = this;\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    const fontFamily = w.config.legend.fontFamily;\n    let legendNames = w.seriesData.seriesNames;\n    let fillcolor = w.config.legend.markers.fillColors ? w.config.legend.markers.fillColors.slice() : w.globals.colors.slice();\n    if (w.config.chart.type === \"heatmap\") {\n      const ranges = w.config.plotOptions.heatmap.colorScale.ranges;\n      legendNames = ranges.map((colorScale) => {\n        return colorScale.name ? colorScale.name : colorScale.from + \" - \" + colorScale.to;\n      });\n      fillcolor = ranges.map((color) => color.color);\n    } else if (this.isBarsDistributed) {\n      legendNames = w.labelData.labels.slice();\n    }\n    if (w.config.legend.customLegendItems.length) {\n      legendNames = w.config.legend.customLegendItems;\n    }\n    const legendFormatter = w.formatters.legendFormatter;\n    const isLegendInversed = w.config.legend.inverseOrder;\n    const legendGroups = [];\n    if (w.labelData.seriesGroups.length > 1 && w.config.legend.clusterGroupedSeries) {\n      w.labelData.seriesGroups.forEach((_, gi) => {\n        legendGroups[gi] = BrowserAPIs.createElement(\"div\");\n        legendGroups[gi].classList.add(\n          \"apexcharts-legend-group\",\n          `apexcharts-legend-group-${gi}`\n        );\n        if (w.config.legend.clusterGroupedSeriesOrientation === \"horizontal\") {\n          elLegendWrap.classList.add(\"apexcharts-legend-group-horizontal\");\n        } else {\n          legendGroups[gi].classList.add(\"apexcharts-legend-group-vertical\");\n        }\n      });\n    }\n    for (let i = isLegendInversed ? legendNames.length - 1 : 0; isLegendInversed ? i >= 0 : i <= legendNames.length - 1; isLegendInversed ? i-- : i++) {\n      const text = legendFormatter(legendNames[i], { seriesIndex: i, w });\n      let collapsedSeries = false;\n      let ancillaryCollapsedSeries = false;\n      if (w.globals.collapsedSeries.length > 0) {\n        for (let c = 0; c < w.globals.collapsedSeries.length; c++) {\n          if (w.globals.collapsedSeries[c].index === i) {\n            collapsedSeries = true;\n          }\n        }\n      }\n      if (w.globals.ancillaryCollapsedSeriesIndices.length > 0) {\n        for (let c = 0; c < w.globals.ancillaryCollapsedSeriesIndices.length; c++) {\n          if (w.globals.ancillaryCollapsedSeriesIndices[c] === i) {\n            ancillaryCollapsedSeries = true;\n          }\n        }\n      }\n      const elMarker = this.createLegendMarker({ i, fillcolor });\n      Graphics.setAttrs(elMarker, {\n        rel: i + 1,\n        \"data:collapsed\": collapsedSeries || ancillaryCollapsedSeries\n      });\n      if (collapsedSeries || ancillaryCollapsedSeries) {\n        elMarker.classList.add(\"apexcharts-inactive-legend\");\n      }\n      const elLegend = BrowserAPIs.createElement(\"div\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n        elLegend.setAttribute(\"role\", \"button\");\n        elLegend.setAttribute(\"tabindex\", \"0\");\n        const seriesName = Array.isArray(text) ? text.join(\" \") : text;\n        const isCollapsed = collapsedSeries || ancillaryCollapsedSeries;\n        const statusText = isCollapsed ? \"hidden\" : \"visible\";\n        elLegend.setAttribute(\n          \"aria-label\",\n          `${seriesName}, ${statusText}. Press Enter or Space to toggle.`\n        );\n        elLegend.setAttribute(\"aria-pressed\", isCollapsed ? \"true\" : \"false\");\n      }\n      const elLegendText = BrowserAPIs.createElement(\"span\");\n      elLegendText.classList.add(\"apexcharts-legend-text\");\n      elLegendText.innerHTML = Array.isArray(text) ? text.join(\" \") : text;\n      let textColor = w.config.legend.labels.useSeriesColors ? w.globals.colors[i] : Array.isArray(w.config.legend.labels.colors) ? (_a = w.config.legend.labels.colors) == null ? void 0 : _a[i] : w.config.legend.labels.colors;\n      if (!textColor) {\n        textColor = w.config.chart.foreColor;\n      }\n      elLegendText.style.color = textColor;\n      elLegendText.style.fontSize = w.config.legend.fontSize;\n      elLegendText.style.fontWeight = w.config.legend.fontWeight;\n      elLegendText.style.fontFamily = fontFamily || w.config.chart.fontFamily;\n      Graphics.setAttrs(elLegendText, {\n        rel: i + 1,\n        i,\n        \"data:default-text\": encodeURIComponent(text),\n        \"data:collapsed\": collapsedSeries || ancillaryCollapsedSeries\n      });\n      elLegend.appendChild(elMarker);\n      elLegend.appendChild(elLegendText);\n      const coreUtils = new CoreUtils(this.w);\n      if (!w.config.legend.showForZeroSeries) {\n        const total = coreUtils.getSeriesTotalByIndex(i);\n        if (total === 0 && coreUtils.seriesHaveSameValues(i) && !coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) {\n          elLegend.classList.add(\"apexcharts-hidden-zero-series\");\n        }\n      }\n      if (!w.config.legend.showForNullSeries) {\n        if (coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) {\n          elLegend.classList.add(\"apexcharts-hidden-null-series\");\n        }\n      }\n      if (legendGroups.length) {\n        w.labelData.seriesGroups.forEach((group, gi) => {\n          var _a2, _b;\n          if (group.includes(\n            /** @type {Record<string,any>} */\n            (_b = (_a2 = w.config.series[i]) == null ? void 0 : _a2.name) != null ? _b : \"\"\n          )) {\n            elLegendWrap.appendChild(legendGroups[gi]);\n            legendGroups[gi].appendChild(elLegend);\n          }\n        });\n      } else {\n        elLegendWrap.appendChild(elLegend);\n      }\n      elLegendWrap.classList.add(\n        `apexcharts-align-${w.config.legend.horizontalAlign}`\n      );\n      elLegendWrap.classList.add(\n        \"apx-legend-position-\" + w.config.legend.position\n      );\n      elLegend.classList.add(\"apexcharts-legend-series\");\n      elLegend.style.margin = `${w.config.legend.itemMargin.vertical}px ${w.config.legend.itemMargin.horizontal}px`;\n      elLegendWrap.style.width = w.config.legend.width ? w.config.legend.width + \"px\" : \"\";\n      elLegendWrap.style.height = w.config.legend.height ? w.config.legend.height + \"px\" : \"\";\n      Graphics.setAttrs(elLegend, {\n        rel: i + 1,\n        seriesName: Utils$1.escapeString(legendNames[i]),\n        \"data:collapsed\": collapsedSeries || ancillaryCollapsedSeries\n      });\n      if (collapsedSeries || ancillaryCollapsedSeries) {\n        elLegend.classList.add(\"apexcharts-inactive-legend\");\n      }\n      if (!w.config.legend.onItemClick.toggleDataSeries) {\n        elLegend.classList.add(\"apexcharts-no-click\");\n      }\n    }\n    w.dom.elWrap.addEventListener(\"click\", me.onLegendClick, true);\n    if (w.config.legend.onItemHover.highlightDataSeries && w.config.legend.customLegendItems.length === 0) {\n      w.dom.elWrap.addEventListener(\"mousemove\", me.onLegendHovered, true);\n      w.dom.elWrap.addEventListener(\"mouseout\", me.onLegendHovered, true);\n    }\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n      w.dom.elWrap.addEventListener(\n        \"keydown\",\n        me.onLegendKeyDown.bind(me),\n        true\n      );\n    }\n  }\n  /**\n   * @param {number} offsetX\n   * @param {number} offsetY\n   */\n  setLegendWrapXY(offsetX, offsetY) {\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    const legendHeight = elLegendWrap.clientHeight;\n    let x = 0;\n    let y = 0;\n    if (w.config.legend.position === \"bottom\") {\n      y = w.globals.svgHeight - Math.min(legendHeight, w.globals.svgHeight / 2) - 5;\n    } else if (w.config.legend.position === \"top\") {\n      const dim = new Dimensions(this.w, this.ctx);\n      const titleH = dim.dimHelpers.getTitleSubtitleCoords(\"title\").height;\n      const subtitleH = dim.dimHelpers.getTitleSubtitleCoords(\"subtitle\").height;\n      y = (titleH > 0 ? titleH - 10 : 0) + (subtitleH > 0 ? subtitleH - 10 : 0);\n    }\n    elLegendWrap.style.position = \"absolute\";\n    x = x + offsetX + w.config.legend.offsetX;\n    y = y + offsetY + w.config.legend.offsetY;\n    elLegendWrap.style.left = x + \"px\";\n    elLegendWrap.style.top = y + \"px\";\n    if (w.config.legend.position === \"right\") {\n      elLegendWrap.style.left = \"auto\";\n      elLegendWrap.style.right = 25 + w.config.legend.offsetX + \"px\";\n    }\n    const fixedHeigthWidth = (\n      /** @type {const} */\n      [\"width\", \"height\"]\n    );\n    fixedHeigthWidth.forEach((hw) => {\n      if (elLegendWrap && elLegendWrap.style[hw]) {\n        elLegendWrap.style[hw] = parseInt(String(w.config.legend[hw]), 10) + \"px\";\n      }\n    });\n  }\n  legendAlignHorizontal() {\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    elLegendWrap.style.right = \"0\";\n    const dimensions = new Dimensions(this.w, this.ctx);\n    const titleRect = dimensions.dimHelpers.getTitleSubtitleCoords(\"title\");\n    const subtitleRect = dimensions.dimHelpers.getTitleSubtitleCoords(\"subtitle\");\n    const offsetX = 20;\n    let offsetY = 0;\n    if (w.config.legend.position === \"top\") {\n      offsetY = titleRect.height + subtitleRect.height + w.config.title.margin + w.config.subtitle.margin - 10;\n    }\n    this.setLegendWrapXY(offsetX, offsetY);\n  }\n  legendAlignVertical() {\n    const w = this.w;\n    const lRect = this.legendHelpers.getLegendDimensions();\n    const offsetY = 20;\n    let offsetX = 0;\n    if (w.config.legend.position === \"left\") {\n      offsetX = 20;\n    }\n    if (w.config.legend.position === \"right\") {\n      offsetX = w.globals.svgWidth - lRect.clww - 10;\n    }\n    this.setLegendWrapXY(offsetX, offsetY);\n  }\n  /**\n   * @param {MouseEvent} e\n   */\n  onLegendHovered(e) {\n    var _a;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    const hoverOverLegend = target.classList.contains(\"apexcharts-legend-series\") || target.classList.contains(\"apexcharts-legend-text\") || target.classList.contains(\"apexcharts-legend-marker\");\n    if (w.config.chart.type !== \"heatmap\" && !this.isBarsDistributed) {\n      if (!target.classList.contains(\"apexcharts-inactive-legend\") && hoverOverLegend) {\n        const series = new Series(this.ctx.w);\n        series.toggleSeriesOnHover(e, target);\n      }\n    } else {\n      if (hoverOverLegend) {\n        const seriesCnt = parseInt((_a = target.getAttribute(\"rel\")) != null ? _a : \"0\", 10) - 1;\n        this.ctx.events.fireEvent(\"legendHover\", [this.ctx, seriesCnt, this.w]);\n        const series = new Series(this.ctx.w);\n        if (e.type === \"mousemove\") {\n          series.highlightRangeInSeries(seriesCnt, \"highlight\");\n        } else if (e.type === \"mouseout\") {\n          series.highlightRangeInSeries(seriesCnt, \"reset\");\n        }\n      }\n    }\n  }\n  /**\n   * @param {KeyboardEvent} e\n   */\n  onLegendKeyDown(e) {\n    const me = this;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    const isLegendItem = target.classList.contains(\"apexcharts-legend-series\") || target.classList.contains(\"apexcharts-legend-text\") || target.classList.contains(\"apexcharts-legend-marker\");\n    if (!isLegendItem) return;\n    if (e.key === \"Enter\" || e.key === \" \") {\n      e.preventDefault();\n      const rel = target.getAttribute(\"rel\");\n      me.onLegendClick(e);\n      if (rel !== null && w.config.legend.onItemClick.toggleDataSeries) {\n        requestAnimationFrame(() => {\n          const restored = w.dom.baseEl.querySelector(\n            `.apexcharts-legend-series[rel=\"${rel}\"]`\n          );\n          if (restored) restored.focus();\n        });\n      }\n    }\n  }\n  /**\n   * @param {Event} e\n   */\n  onLegendClick(e) {\n    var _a;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    if (w.config.legend.customLegendItems.length) return;\n    if (target.classList.contains(\"apexcharts-legend-series\") || target.classList.contains(\"apexcharts-legend-text\") || target.classList.contains(\"apexcharts-legend-marker\")) {\n      const seriesCnt = parseInt((_a = target.getAttribute(\"rel\")) != null ? _a : \"0\", 10) - 1;\n      const isHidden = target.getAttribute(\"data:collapsed\") === \"true\";\n      const legendClick = this.w.config.chart.events.legendClick;\n      if (typeof legendClick === \"function\") {\n        legendClick(this.ctx, seriesCnt, this.w);\n      }\n      this.ctx.events.fireEvent(\"legendClick\", [this.ctx, seriesCnt, this.w]);\n      const markerClick = this.w.config.legend.markers.onClick;\n      if (typeof markerClick === \"function\" && target.classList.contains(\"apexcharts-legend-marker\")) {\n        markerClick(this.ctx, seriesCnt, this.w);\n        this.ctx.events.fireEvent(\"legendMarkerClick\", [\n          this.ctx,\n          seriesCnt,\n          this.w\n        ]);\n      }\n      const clickAllowed = w.config.chart.type !== \"treemap\" && w.config.chart.type !== \"heatmap\" && !this.isBarsDistributed;\n      if (clickAllowed && w.config.legend.onItemClick.toggleDataSeries) {\n        this.legendHelpers.toggleDataSeries(seriesCnt, isHidden);\n      }\n    }\n  }\n}\nApexCharts.registerFeatures({ legend: Legend });\nconst icoPan = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M5 9 2 12l3 3\"/>\\n    <path d=\"M9 5l3-3 3 3\"/>\\n    <path d=\"M15 19l-3 3-3-3\"/>\\n    <path d=\"M19 9l3 3-3 3\"/>\\n    <path d=\"M2 12h20\"/>\\n    <path d=\"M12 2v20\"/>\\n</svg>\\n';\nconst icoZoom = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <circle cx=\"11\" cy=\"11\" r=\"7\"/>\\n    <path d=\"m21 21-4.3-4.3M8 11h6M11 8v6\"/>\\n</svg>\\n';\nconst icoReset = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"/>\\n    <path d=\"M3 3v5h5\"/>\\n</svg>\\n';\nconst icoZoomIn = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M12 5v14M5 12h14\"/>\\n</svg>\\n';\nconst icoZoomOut = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M5 12h14\"/>\\n</svg>\\n';\nconst icoSelect = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M5 3a2 2 0 0 0-2 2\"/>\\n    <path d=\"M19 3a2 2 0 0 1 2 2\"/>\\n    <path d=\"M21 19a2 2 0 0 1-2 2\"/>\\n    <path d=\"M5 21a2 2 0 0 1-2-2\"/>\\n    <path d=\"M9 3h1M14 3h1M9 21h1M14 21h1M3 9v1M3 14v1M21 9v1M21 14v1\"/>\\n</svg>\\n';\nconst icoMenu = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M4 6h16M4 12h16M4 18h16\"/>\\n</svg>\\n';\nclass Toolbar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.ev = this.w.config.chart.events;\n    this.selectedClass = \"apexcharts-selected\";\n    this.localeValues = this.w.globals.locale.toolbar;\n    this.minX = w.globals.minX;\n    this.maxX = w.globals.maxX;\n    this.elZoom = null;\n    this.elZoomIn = null;\n    this.elZoomOut = null;\n    this.elPan = null;\n    this.elSelection = null;\n    this.elZoomReset = null;\n    this.elMenuIcon = null;\n    this.elMenu = null;\n    this.elMenuItems = [];\n    this.t = null;\n  }\n  createToolbar() {\n    const w = this.w;\n    const createDiv = () => {\n      return BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\");\n    };\n    const createBtn = () => {\n      const btn = (\n        /** @type {HTMLButtonElement} */\n        BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"button\")\n      );\n      btn.setAttribute(\"type\", \"button\");\n      return btn;\n    };\n    const elToolbarWrap = createDiv();\n    elToolbarWrap.setAttribute(\"class\", \"apexcharts-toolbar\");\n    elToolbarWrap.style.top = w.config.chart.toolbar.offsetY + \"px\";\n    elToolbarWrap.style.right = -w.config.chart.toolbar.offsetX + 3 + \"px\";\n    w.dom.elWrap.appendChild(elToolbarWrap);\n    this.elZoom = createBtn();\n    this.elZoomIn = createBtn();\n    this.elZoomOut = createBtn();\n    this.elPan = createBtn();\n    this.elSelection = createBtn();\n    this.elZoomReset = createBtn();\n    this.elMenuIcon = createBtn();\n    this.elMenu = createDiv();\n    this.elCustomIcons = [];\n    this.t = w.config.chart.toolbar.tools;\n    if (Array.isArray(this.t.customIcons)) {\n      for (let i = 0; i < this.t.customIcons.length; i++) {\n        this.elCustomIcons.push(createBtn());\n      }\n    }\n    const toolbarControls = [];\n    const appendZoomControl = (type, el, ico) => {\n      const tool = type.toLowerCase();\n      if (this.t[tool] && w.config.chart.zoom.enabled) {\n        toolbarControls.push({\n          el,\n          icon: typeof this.t[tool] === \"string\" ? this.t[tool] : ico,\n          title: (\n            /** @type {any} */\n            this.localeValues[type]\n          ),\n          class: `apexcharts-${tool}-icon`\n        });\n      }\n    };\n    appendZoomControl(\"zoomIn\", this.elZoomIn, icoZoomIn);\n    appendZoomControl(\"zoomOut\", this.elZoomOut, icoZoomOut);\n    const zoomSelectionCtrls = (z) => {\n      if (this.t[z] && w.config.chart[z].enabled) {\n        toolbarControls.push({\n          el: z === \"zoom\" ? this.elZoom : this.elSelection,\n          icon: typeof this.t[z] === \"string\" ? this.t[z] : z === \"zoom\" ? icoZoom : icoSelect,\n          title: (\n            /** @type {any} */\n            this.localeValues[z === \"zoom\" ? \"selectionZoom\" : \"selection\"]\n          ),\n          class: `apexcharts-${z}-icon`\n        });\n      }\n    };\n    zoomSelectionCtrls(\"zoom\");\n    zoomSelectionCtrls(\"selection\");\n    if (this.t.pan && w.config.chart.zoom.enabled) {\n      toolbarControls.push({\n        el: this.elPan,\n        icon: typeof this.t.pan === \"string\" ? this.t.pan : icoPan,\n        title: this.localeValues.pan,\n        class: \"apexcharts-pan-icon\"\n      });\n    }\n    appendZoomControl(\"reset\", this.elZoomReset, icoReset);\n    if (this.t.download) {\n      toolbarControls.push({\n        el: this.elMenuIcon,\n        icon: typeof this.t.download === \"string\" ? this.t.download : icoMenu,\n        title: this.localeValues.menu,\n        class: \"apexcharts-menu-icon\"\n      });\n    }\n    for (let i = 0; i < this.elCustomIcons.length; i++) {\n      toolbarControls.push({\n        el: this.elCustomIcons[i],\n        icon: this.t.customIcons[i].icon,\n        title: this.t.customIcons[i].title,\n        index: this.t.customIcons[i].index,\n        class: \"apexcharts-toolbar-custom-icon \" + this.t.customIcons[i].class\n      });\n    }\n    toolbarControls.forEach((t, index) => {\n      if (t.index) {\n        Utils$1.moveIndexInArray(toolbarControls, index, t.index);\n      }\n    });\n    for (let i = 0; i < toolbarControls.length; i++) {\n      Graphics.setAttrs(toolbarControls[i].el, {\n        class: toolbarControls[i].class,\n        title: toolbarControls[i].title,\n        \"aria-label\": toolbarControls[i].title\n      });\n      toolbarControls[i].el.innerHTML = toolbarControls[i].icon;\n      elToolbarWrap.appendChild(toolbarControls[i].el);\n    }\n    if (this.elZoom.parentNode) {\n      this.elZoom.setAttribute(\"aria-pressed\", String(!!w.interact.zoomEnabled));\n    }\n    if (this.elSelection.parentNode) {\n      this.elSelection.setAttribute(\n        \"aria-pressed\",\n        String(!!w.interact.selectionEnabled)\n      );\n    }\n    if (this.elPan.parentNode) {\n      this.elPan.setAttribute(\"aria-pressed\", String(!!w.interact.panEnabled));\n    }\n    if (this.elMenuIcon.parentNode) {\n      this.elMenuIcon.setAttribute(\"aria-haspopup\", \"true\");\n      this.elMenuIcon.setAttribute(\"aria-expanded\", \"false\");\n    }\n    this._createHamburgerMenu(elToolbarWrap);\n    if (w.interact.zoomEnabled) {\n      this.elZoom.classList.add(this.selectedClass);\n    } else if (w.interact.panEnabled) {\n      this.elPan.classList.add(this.selectedClass);\n    } else if (w.interact.selectionEnabled) {\n      this.elSelection.classList.add(this.selectedClass);\n    }\n    this.addToolbarEventListeners();\n  }\n  /**\n   * @param {Element} parent\n   */\n  _createHamburgerMenu(parent) {\n    this.elMenuItems = [];\n    parent.appendChild(\n      /** @type {Node} */\n      this.elMenu\n    );\n    Graphics.setAttrs(this.elMenu, {\n      class: \"apexcharts-menu\",\n      role: \"menu\"\n    });\n    const menuItems = [\n      {\n        name: \"exportSVG\",\n        title: this.localeValues.exportToSVG\n      },\n      {\n        name: \"exportPNG\",\n        title: this.localeValues.exportToPNG\n      },\n      {\n        name: \"exportCSV\",\n        title: this.localeValues.exportToCSV\n      }\n    ];\n    for (let i = 0; i < menuItems.length; i++) {\n      this.elMenuItems.push(\n        BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\")\n      );\n      this.elMenuItems[i].innerHTML = menuItems[i].title;\n      Graphics.setAttrs(this.elMenuItems[i], {\n        class: `apexcharts-menu-item ${menuItems[i].name}`,\n        title: menuItems[i].title,\n        role: \"menuitem\",\n        tabindex: \"-1\"\n      });\n      this.elMenu.appendChild(this.elMenuItems[i]);\n    }\n  }\n  addToolbarEventListeners() {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    (_a = this.elZoomReset) == null ? void 0 : _a.addEventListener(\"click\", this.handleZoomReset.bind(this));\n    (_b = this.elSelection) == null ? void 0 : _b.addEventListener(\n      \"click\",\n      this.toggleZoomSelection.bind(this, \"selection\")\n    );\n    (_c = this.elZoom) == null ? void 0 : _c.addEventListener(\n      \"click\",\n      this.toggleZoomSelection.bind(this, \"zoom\")\n    );\n    (_d = this.elZoomIn) == null ? void 0 : _d.addEventListener(\"click\", this.handleZoomIn.bind(this));\n    (_e = this.elZoomOut) == null ? void 0 : _e.addEventListener(\"click\", this.handleZoomOut.bind(this));\n    (_f = this.elPan) == null ? void 0 : _f.addEventListener(\"click\", this.togglePanning.bind(this));\n    (_g = this.elMenuIcon) == null ? void 0 : _g.addEventListener(\"click\", this.toggleMenu.bind(this));\n    this.elMenuItems.forEach((m) => {\n      if (m.classList.contains(\"exportSVG\")) {\n        m.addEventListener(\"click\", this.handleDownload.bind(this, \"svg\"));\n      } else if (m.classList.contains(\"exportPNG\")) {\n        m.addEventListener(\"click\", this.handleDownload.bind(this, \"png\"));\n      } else if (m.classList.contains(\"exportCSV\")) {\n        m.addEventListener(\"click\", this.handleDownload.bind(this, \"csv\"));\n      }\n    });\n    for (let i = 0; i < this.t.customIcons.length; i++) {\n      this.elCustomIcons[i].addEventListener(\n        \"click\",\n        this.t.customIcons[i].click.bind(this, this.ctx, this.ctx.w)\n      );\n    }\n    const toolbarButtons = [\n      this.elZoomReset,\n      this.elSelection,\n      this.elZoom,\n      this.elZoomIn,\n      this.elZoomOut,\n      this.elPan,\n      this.elMenuIcon,\n      ...this.elCustomIcons\n    ];\n    toolbarButtons.forEach((btn) => {\n      btn.addEventListener(\"keydown\", (e) => {\n        if (e.key === \"Enter\" || e.key === \" \") {\n          e.preventDefault();\n          const btnClass = btn.className;\n          btn.click();\n          requestAnimationFrame(() => {\n            const baseEl = this.w.dom.baseEl;\n            if (!baseEl) return;\n            const apexClass = btnClass.split(\" \").find((c) => c.startsWith(\"apexcharts-\"));\n            if (!apexClass) return;\n            const restored = baseEl.querySelector(`.${apexClass}`);\n            if (restored) restored.focus();\n          });\n        }\n      });\n    });\n    (_h = this.elMenuIcon) == null ? void 0 : _h.addEventListener(\n      \"keydown\",\n      (e) => {\n        var _a2;\n        if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n          e.preventDefault();\n          if (!((_a2 = this.elMenu) == null ? void 0 : _a2.classList.contains(\"apexcharts-menu-open\"))) {\n            this.toggleMenu();\n          }\n          window.setTimeout(() => {\n            const idx = e.key === \"ArrowDown\" ? 0 : this.elMenuItems.length - 1;\n            if (this.elMenuItems[idx])\n              this.elMenuItems[idx].focus();\n          }, 20);\n        }\n      }\n    );\n    this.elMenuItems.forEach((m, idx) => {\n      m.addEventListener(\"keydown\", (e) => {\n        var _a2;\n        if (e.key === \"ArrowDown\") {\n          e.preventDefault();\n          const next = this.elMenuItems[idx + 1] || this.elMenuItems[0];\n          next.focus();\n        } else if (e.key === \"ArrowUp\") {\n          e.preventDefault();\n          const prev = this.elMenuItems[idx - 1] || this.elMenuItems[this.elMenuItems.length - 1];\n          prev.focus();\n        } else if (e.key === \"Escape\" || e.key === \"Tab\") {\n          this._closeMenu();\n          (_a2 = this.elMenuIcon) == null ? void 0 : _a2.focus();\n          if (e.key === \"Tab\") ;\n          else {\n            e.preventDefault();\n          }\n        } else if (e.key === \"Enter\" || e.key === \" \") {\n          e.preventDefault();\n          m.click();\n        }\n      });\n    });\n  }\n  /**\n   * @param {string} type\n   */\n  toggleZoomSelection(type) {\n    const charts = this.ctx.getSyncedCharts();\n    charts.forEach((ch) => {\n      ch.ctx.toolbar.toggleOtherControls();\n      const el = type === \"selection\" ? ch.ctx.toolbar.elSelection : ch.ctx.toolbar.elZoom;\n      const enabledType = type === \"selection\" ? \"selectionEnabled\" : \"zoomEnabled\";\n      ch.w.globals[enabledType] = !ch.w.globals[enabledType];\n      if (!el.classList.contains(ch.ctx.toolbar.selectedClass)) {\n        el.classList.add(ch.ctx.toolbar.selectedClass);\n      } else {\n        el.classList.remove(ch.ctx.toolbar.selectedClass);\n      }\n      el.setAttribute(\"aria-pressed\", String(ch.w.globals[enabledType]));\n    });\n  }\n  getToolbarIconsReference() {\n    const w = this.w;\n    if (!this.elZoom) {\n      this.elZoom = w.dom.baseEl.querySelector(\".apexcharts-zoom-icon\");\n    }\n    if (!this.elPan) {\n      this.elPan = w.dom.baseEl.querySelector(\".apexcharts-pan-icon\");\n    }\n    if (!this.elSelection) {\n      this.elSelection = w.dom.baseEl.querySelector(\n        \".apexcharts-selection-icon\"\n      );\n    }\n  }\n  /**\n   * @param {string} type\n   */\n  enableZoomPanFromToolbar(type) {\n    this.toggleOtherControls();\n    type === \"pan\" ? this.w.interact.panEnabled = true : this.w.interact.zoomEnabled = true;\n    const el = type === \"pan\" ? this.elPan : this.elZoom;\n    const el2 = type === \"pan\" ? this.elZoom : this.elPan;\n    if (el) {\n      el.classList.add(this.selectedClass);\n    }\n    if (el2) {\n      el2.classList.remove(this.selectedClass);\n    }\n  }\n  togglePanning() {\n    const charts = this.ctx.getSyncedCharts();\n    charts.forEach((ch) => {\n      ch.ctx.toolbar.toggleOtherControls();\n      ch.w.interact.panEnabled = !ch.w.interact.panEnabled;\n      if (!ch.ctx.toolbar.elPan.classList.contains(ch.ctx.toolbar.selectedClass)) {\n        ch.ctx.toolbar.elPan.classList.add(ch.ctx.toolbar.selectedClass);\n      } else {\n        ch.ctx.toolbar.elPan.classList.remove(ch.ctx.toolbar.selectedClass);\n      }\n      ch.ctx.toolbar.elPan.setAttribute(\n        \"aria-pressed\",\n        String(ch.w.interact.panEnabled)\n      );\n    });\n  }\n  toggleOtherControls() {\n    const w = this.w;\n    w.interact.panEnabled = false;\n    w.interact.zoomEnabled = false;\n    w.interact.selectionEnabled = false;\n    this.getToolbarIconsReference();\n    const toggleEls = [this.elPan, this.elSelection, this.elZoom];\n    toggleEls.forEach((el) => {\n      if (el) {\n        el.classList.remove(this.selectedClass);\n      }\n    });\n  }\n  /**\n   * Read the current x-range from globals at click time.\n   * Toolbar instance is kept alive across updates (Phase 8 lazy\n   * instantiation), so cached this.minX/maxX go stale after a zoom.\n   * @returns {{minX: number, maxX: number}}\n   */\n  _currentXRange() {\n    const w = this.w;\n    if (w.axisFlags.isRangeBar) {\n      return { minX: w.globals.minY, maxX: w.globals.maxY };\n    }\n    return { minX: w.globals.minX, maxX: w.globals.maxX };\n  }\n  handleZoomIn() {\n    const w = this.w;\n    const { minX, maxX } = this._currentXRange();\n    this.minX = minX;\n    this.maxX = maxX;\n    const centerX = (minX + maxX) / 2;\n    const newMinX = (minX + centerX) / 2;\n    const newMaxX = (maxX + centerX) / 2;\n    const newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX);\n    if (!w.interact.disableZoomIn) {\n      this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX);\n    }\n  }\n  handleZoomOut() {\n    const w = this.w;\n    const { minX, maxX } = this._currentXRange();\n    this.minX = minX;\n    this.maxX = maxX;\n    if (w.config.xaxis.type === \"datetime\" && new Date(minX).getUTCFullYear() < 1e3) {\n      return;\n    }\n    const centerX = (minX + maxX) / 2;\n    const newMinX = minX - (centerX - minX);\n    const newMaxX = maxX - (centerX - maxX);\n    const newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX);\n    if (!w.interact.disableZoomOut) {\n      this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX);\n    }\n  }\n  /**\n   * @param {number} newMinX\n   * @param {number} newMaxX\n   */\n  _getNewMinXMaxX(newMinX, newMaxX) {\n    const shouldFloor = this.w.config.xaxis.convertedCatToNumeric;\n    return {\n      minX: shouldFloor ? Math.floor(newMinX) : newMinX,\n      maxX: shouldFloor ? Math.floor(newMaxX) : newMaxX\n    };\n  }\n  /**\n   * @param {number} newMinX\n   * @param {number} newMaxX\n   */\n  zoomUpdateOptions(newMinX, newMaxX) {\n    const w = this.w;\n    if (newMinX === void 0 && newMaxX === void 0) {\n      this.handleZoomReset();\n      return;\n    }\n    if (w.config.xaxis.convertedCatToNumeric) {\n      if (newMinX < 1) {\n        newMinX = 1;\n        newMaxX = w.globals.dataPoints;\n      }\n      if (newMaxX - newMinX < 2) {\n        return;\n      }\n    }\n    let xaxis = {\n      min: newMinX,\n      max: newMaxX\n    };\n    const beforeZoomRange = this.getBeforeZoomRange(\n      xaxis,\n      /** @type {any} */\n      void 0\n    );\n    if (beforeZoomRange) {\n      xaxis = beforeZoomRange.xaxis;\n    }\n    const options2 = {\n      xaxis\n    };\n    if (!w.globals.initialConfig) return;\n    const yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n    if (!w.config.chart.group) {\n      options2.yaxis = yaxis;\n    }\n    this.w.interact.zoomed = true;\n    this.ctx.updateHelpers._updateOptions(\n      options2,\n      false,\n      this.w.config.chart.animations.dynamicAnimation.enabled\n    );\n    this.zoomCallback(xaxis, yaxis);\n  }\n  /**\n   * @param {Record<string, any>} xaxis\n   * @param {Record<string, any>} yaxis\n   */\n  zoomCallback(xaxis, yaxis) {\n    if (typeof this.ev.zoomed === \"function\") {\n      this.ev.zoomed(this.ctx, { xaxis, yaxis });\n      this.ctx.events.fireEvent(\"zoomed\", { xaxis, yaxis });\n    }\n  }\n  /**\n   * @param {Record<string, any>} xaxis\n   * @param {Record<string, any>} yaxis\n   */\n  getBeforeZoomRange(xaxis, yaxis) {\n    let newRange = null;\n    if (typeof this.ev.beforeZoom === \"function\") {\n      newRange = this.ev.beforeZoom(this, { xaxis, yaxis });\n    }\n    return newRange;\n  }\n  toggleMenu() {\n    window.setTimeout(() => {\n      var _a, _b, _c;\n      if ((_a = this.elMenu) == null ? void 0 : _a.classList.contains(\"apexcharts-menu-open\")) {\n        this._closeMenu();\n      } else {\n        (_b = this.elMenu) == null ? void 0 : _b.classList.add(\"apexcharts-menu-open\");\n        (_c = this.elMenuIcon) == null ? void 0 : _c.setAttribute(\"aria-expanded\", \"true\");\n      }\n    }, 0);\n  }\n  _closeMenu() {\n    var _a, _b;\n    (_a = this.elMenu) == null ? void 0 : _a.classList.remove(\"apexcharts-menu-open\");\n    (_b = this.elMenuIcon) == null ? void 0 : _b.setAttribute(\"aria-expanded\", \"false\");\n  }\n  /**\n   * @param {string} type\n   */\n  handleDownload(type) {\n    const w = this.w;\n    const exprt = new Exports(this.w, this.ctx);\n    switch (type) {\n      case \"svg\":\n        exprt.exportToSVG();\n        break;\n      case \"png\":\n        exprt.exportToPng();\n        break;\n      case \"csv\":\n        exprt.exportToCSV({\n          series: w.config.series,\n          columnDelimiter: w.config.chart.toolbar.export.csv.columnDelimiter\n        });\n        break;\n    }\n  }\n  handleZoomReset() {\n    const charts = this.ctx.getSyncedCharts();\n    charts.forEach((ch) => {\n      const w = ch.w;\n      if (!w.interact.zoomed) return;\n      w.globals.lastXAxis.min = w.globals.initialConfig.xaxis.min;\n      w.globals.lastXAxis.max = w.globals.initialConfig.xaxis.max;\n      ch.updateHelpers.revertDefaultAxisMinMax();\n      if (typeof w.config.chart.events.beforeResetZoom === \"function\") {\n        const resetZoomRange = w.config.chart.events.beforeResetZoom(ch, w);\n        if (resetZoomRange) {\n          ch.updateHelpers.revertDefaultAxisMinMax(resetZoomRange);\n        }\n      }\n      if (typeof w.config.chart.events.zoomed === \"function\") {\n        ch.ctx.toolbar.zoomCallback({\n          min: w.config.xaxis.min,\n          max: w.config.xaxis.max\n        });\n      }\n      const series = ch.ctx.series.emptyCollapsedSeries(\n        Utils$1.clone(w.globals.initialSeries)\n      );\n      ch.updateHelpers._updateSeries(\n        series,\n        w.config.chart.animations.dynamicAnimation.enabled\n      );\n      w.interact.zoomed = false;\n    });\n  }\n  destroy() {\n    this.elZoom = null;\n    this.elZoomIn = null;\n    this.elZoomOut = null;\n    this.elPan = null;\n    this.elSelection = null;\n    this.elZoomReset = null;\n    this.elMenuIcon = null;\n  }\n}\nclass ZoomPanSelection extends Toolbar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    super(w, ctx);\n    this.w = w;\n    this.ctx = ctx;\n    this.dragged = false;\n    this.graphics = new Graphics(this.w);\n    this.eventList = [\n      \"mousedown\",\n      \"mouseleave\",\n      \"mousemove\",\n      \"touchstart\",\n      \"touchmove\",\n      \"mouseup\",\n      \"touchend\",\n      \"wheel\"\n    ];\n    this.clientX = 0;\n    this.clientY = 0;\n    this.startX = 0;\n    this.endX = 0;\n    this.dragX = 0;\n    this.startY = 0;\n    this.endY = 0;\n    this.dragY = 0;\n    this.moveDirection = \"none\";\n    this.debounceTimer = null;\n    this.debounceDelay = 100;\n    this.wheelDelay = 400;\n  }\n  /** @param {{xyRatios: any}} opts */\n  init({ xyRatios }) {\n    const w = this.w;\n    const me = this;\n    this.xyRatios = xyRatios;\n    this.zoomRect = this.graphics.drawRect(0, 0, 0, 0);\n    this.selectionRect = this.graphics.drawRect(0, 0, 0, 0);\n    this.gridRect = w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    this.constraints = new Box(0, 0, w.layout.gridWidth, w.layout.gridHeight);\n    this.zoomRect.node.classList.add(\"apexcharts-zoom-rect\");\n    this.selectionRect.node.classList.add(\"apexcharts-selection-rect\");\n    w.dom.Paper.add(this.zoomRect);\n    w.dom.Paper.add(this.selectionRect);\n    if (w.config.chart.selection.type === \"x\") {\n      this.slDraggableRect = this.selectionRect.draggable({\n        minX: 0,\n        minY: 0,\n        maxX: w.layout.gridWidth,\n        maxY: w.layout.gridHeight\n      }).on(\"dragmove.namespace\", this.selectionDragging.bind(this, \"dragging\"));\n    } else if (w.config.chart.selection.type === \"y\") {\n      this.slDraggableRect = this.selectionRect.draggable({\n        minX: 0,\n        maxX: w.layout.gridWidth\n      }).on(\"dragmove.namespace\", this.selectionDragging.bind(this, \"dragging\"));\n    } else {\n      this.slDraggableRect = this.selectionRect.draggable().on(\"dragmove.namespace\", this.selectionDragging.bind(this, \"dragging\"));\n    }\n    this.preselectedSelection();\n    this.hoverArea = /** @type {Element} */\n    w.dom.baseEl.querySelector(`${w.globals.chartClass} .apexcharts-svg`);\n    if (!this.hoverArea) return;\n    this.hoverArea.classList.add(\"apexcharts-zoomable\");\n    this.eventList.forEach((event) => {\n      var _a;\n      (_a = this.hoverArea) == null ? void 0 : _a.addEventListener(\n        event,\n        me.svgMouseEvents.bind(me, xyRatios),\n        {\n          capture: false,\n          passive: true\n        }\n      );\n    });\n    if (w.config.chart.zoom.enabled && w.config.chart.zoom.allowMouseWheelZoom) {\n      this.hoverArea.addEventListener(\"wheel\", me.mouseWheelEvent.bind(me), {\n        capture: false,\n        passive: false\n      });\n    }\n  }\n  // remove the event listeners which were previously added on hover area\n  destroy() {\n    if (this.slDraggableRect) {\n      this.slDraggableRect.draggable(false);\n      this.slDraggableRect.off();\n      this.selectionRect.off();\n    }\n    this.selectionRect = null;\n    this.zoomRect = null;\n    this.gridRect = null;\n  }\n  /**\n   * @param {import('../types/internal').XYRatios} xyRatios\n   * @param {any} e\n   */\n  svgMouseEvents(xyRatios, e) {\n    var _a;\n    const w = this.w;\n    const toolbar = this.ctx.toolbar;\n    const zoomtype = w.interact.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type;\n    const autoSelected = w.config.chart.toolbar.autoSelected;\n    if (e.shiftKey) {\n      this.shiftWasPressed = true;\n      toolbar.enableZoomPanFromToolbar(autoSelected === \"pan\" ? \"zoom\" : \"pan\");\n    } else {\n      if (this.shiftWasPressed) {\n        toolbar.enableZoomPanFromToolbar(autoSelected);\n        this.shiftWasPressed = false;\n      }\n    }\n    if (!e.target) return;\n    const tc = e.target.classList;\n    let pc;\n    if (e.target.parentNode && e.target.parentNode !== null) {\n      pc = e.target.parentNode.classList;\n    }\n    const falsePositives = tc.contains(\"apexcharts-legend-marker\") || tc.contains(\"apexcharts-legend-text\") || pc && pc.contains(\"apexcharts-toolbar\");\n    if (falsePositives) return;\n    this.clientX = e.type === \"touchmove\" || e.type === \"touchstart\" ? e.touches[0].clientX : e.type === \"touchend\" ? e.changedTouches[0].clientX : e.clientX;\n    this.clientY = e.type === \"touchmove\" || e.type === \"touchstart\" ? e.touches[0].clientY : e.type === \"touchend\" ? e.changedTouches[0].clientY : e.clientY;\n    if (e.type === \"mousedown\" && e.which === 1 || e.type === \"touchstart\") {\n      const gridRectDim = (_a = this.gridRect) == null ? void 0 : _a.getBoundingClientRect();\n      if (!gridRectDim) return;\n      this.startX = this.clientX - gridRectDim.left - w.globals.barPadForNumericAxis;\n      this.startY = this.clientY - gridRectDim.top;\n      this.dragged = false;\n      this.w.interact.mousedown = true;\n    }\n    if (e.type === \"mousemove\" && e.which === 1 || e.type === \"touchmove\") {\n      this.dragged = true;\n      if (w.interact.panEnabled) {\n        w.interact.selection = null;\n        if (this.w.interact.mousedown) {\n          this.panDragging({\n            context: this,\n            zoomtype,\n            xyRatios\n          });\n        }\n      } else {\n        if (this.w.interact.mousedown && w.interact.zoomEnabled || this.w.interact.mousedown && w.interact.selectionEnabled) {\n          this.selection = this.selectionDrawing({\n            context: this,\n            zoomtype\n          });\n        }\n      }\n    }\n    if (e.type === \"mouseup\" || e.type === \"touchend\" || e.type === \"mouseleave\") {\n      this.handleMouseUp({ zoomtype });\n    }\n    this.makeSelectionRectDraggable();\n  }\n  /** @param {{ zoomtype?: any, isResized?: any }} opts */\n  handleMouseUp({ zoomtype, isResized }) {\n    var _a;\n    const w = this.w;\n    const gridRectDim = (_a = this.gridRect) == null ? void 0 : _a.getBoundingClientRect();\n    if (gridRectDim && (this.w.interact.mousedown || isResized)) {\n      this.endX = this.clientX - gridRectDim.left - w.globals.barPadForNumericAxis;\n      this.endY = this.clientY - gridRectDim.top;\n      this.dragX = Math.abs(this.endX - this.startX);\n      this.dragY = Math.abs(this.endY - this.startY);\n      if (w.interact.zoomEnabled || w.interact.selectionEnabled) {\n        this.selectionDrawn({\n          context: this,\n          zoomtype\n        });\n      }\n    }\n    if (w.interact.zoomEnabled) {\n      this.hideSelectionRect(this.selectionRect);\n    }\n    this.dragged = false;\n    this.w.interact.mousedown = false;\n  }\n  /**\n   * @param {Event} e\n   */\n  mouseWheelEvent(e) {\n    const w = this.w;\n    e.preventDefault();\n    const now = Date.now();\n    if (now - w.interact.lastWheelExecution > this.wheelDelay) {\n      this.executeMouseWheelZoom(e);\n      w.interact.lastWheelExecution = now;\n    }\n    if (this.debounceTimer) clearTimeout(this.debounceTimer);\n    this.debounceTimer = setTimeout(() => {\n      if (now - w.interact.lastWheelExecution > this.wheelDelay) {\n        this.executeMouseWheelZoom(e);\n        w.interact.lastWheelExecution = now;\n      }\n    }, this.debounceDelay);\n  }\n  /**\n   * @param {any} e\n   */\n  executeMouseWheelZoom(e) {\n    var _a, _b, _c;\n    const w = this.w;\n    this.minX = w.axisFlags.isRangeBar ? w.globals.minY : w.globals.minX;\n    this.maxX = w.axisFlags.isRangeBar ? w.globals.maxY : w.globals.maxX;\n    const gridRectDim = (_a = this.gridRect) == null ? void 0 : _a.getBoundingClientRect();\n    if (!gridRectDim) return;\n    const mouseX = (e.clientX - gridRectDim.left) / gridRectDim.width;\n    const currentMinX = this.minX;\n    const currentMaxX = this.maxX;\n    const totalX = currentMaxX - currentMinX;\n    const zoomFactorIn = 0.5;\n    const zoomFactorOut = 1.5;\n    let zoomRange;\n    let newMinX, newMaxX;\n    if (e.deltaY < 0) {\n      zoomRange = zoomFactorIn * totalX;\n      const midPoint = currentMinX + mouseX * totalX;\n      newMinX = midPoint - zoomRange / 2;\n      newMaxX = midPoint + zoomRange / 2;\n    } else {\n      zoomRange = zoomFactorOut * totalX;\n      newMinX = currentMinX - zoomRange / 2;\n      newMaxX = currentMaxX + zoomRange / 2;\n    }\n    if (!w.axisFlags.isRangeBar) {\n      const clampMin = (_b = w.globals.dataReducerRawMinX) != null ? _b : w.globals.initialMinX;\n      const clampMax = (_c = w.globals.dataReducerRawMaxX) != null ? _c : w.globals.initialMaxX;\n      newMinX = Math.max(newMinX, clampMin);\n      newMaxX = Math.min(newMaxX, clampMax);\n      const minXDiff = w.globals.minXDiff > 0 && isFinite(w.globals.minXDiff) ? w.globals.minXDiff : 0;\n      const minRange = Math.max(minXDiff * 2, (clampMax - clampMin) * 1e-6);\n      if (newMaxX - newMinX < minRange) {\n        const midPoint = (newMinX + newMaxX) / 2;\n        newMinX = midPoint - minRange / 2;\n        newMaxX = midPoint + minRange / 2;\n      }\n    }\n    const newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX);\n    if (!isNaN(newMinXMaxX.minX) && !isNaN(newMinXMaxX.maxX)) {\n      this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX);\n    }\n  }\n  makeSelectionRectDraggable() {\n    const w = this.w;\n    if (!this.selectionRect) return;\n    const rectDim = this.selectionRect.node.getBoundingClientRect();\n    if (rectDim.width > 0 && rectDim.height > 0) {\n      this.selectionRect.select(false).resize(false);\n      this.selectionRect.select({\n        createRot: () => {\n        },\n        updateRot: () => {\n        },\n        createHandle: (group, p, index, pointArr, handleName) => {\n          if (handleName === \"l\" || handleName === \"r\")\n            return group.circle(8).css({ \"stroke-width\": 1, stroke: \"#333\", fill: \"#fff\" });\n          return group.circle(0);\n        },\n        updateHandle: (group, p) => {\n          return group.center(p[0], p[1]);\n        }\n      }).resize().on(\"resize\", () => {\n        const zoomtype = w.interact.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type;\n        this.handleMouseUp({ zoomtype, isResized: true });\n      });\n    }\n  }\n  preselectedSelection() {\n    const w = this.w;\n    const xyRatios = this.xyRatios;\n    if (!w.interact.zoomEnabled) {\n      if (typeof w.interact.selection !== \"undefined\" && w.interact.selection !== null) {\n        this.drawSelectionRect(__spreadProps(__spreadValues({}, w.interact.selection), {\n          translateX: w.layout.translateX,\n          translateY: w.layout.translateY\n        }));\n      } else {\n        if (w.config.chart.selection.xaxis.min !== void 0 && w.config.chart.selection.xaxis.max !== void 0) {\n          let x = (w.config.chart.selection.xaxis.min - w.globals.minX) / xyRatios.xRatio;\n          let width = w.layout.gridWidth - (w.globals.maxX - w.config.chart.selection.xaxis.max) / xyRatios.xRatio - x;\n          if (w.axisFlags.isRangeBar) {\n            x = (w.config.chart.selection.xaxis.min - w.globals.yAxisScale[0].niceMin) / xyRatios.invertedYRatio;\n            width = (w.config.chart.selection.xaxis.max - w.config.chart.selection.xaxis.min) / xyRatios.invertedYRatio;\n          }\n          const selectionRect = {\n            x,\n            y: 0,\n            width,\n            height: w.layout.gridHeight,\n            translateX: w.layout.translateX,\n            translateY: w.layout.translateY,\n            selectionEnabled: true\n          };\n          this.drawSelectionRect(selectionRect);\n          this.makeSelectionRectDraggable();\n          if (typeof w.config.chart.events.selection === \"function\") {\n            w.config.chart.events.selection(this.ctx, {\n              xaxis: {\n                min: w.config.chart.selection.xaxis.min,\n                max: w.config.chart.selection.xaxis.max\n              },\n              yaxis: {}\n            });\n          }\n        }\n      }\n    }\n  }\n  /** @param {{x: any, y: any, width: any, height: any, translateX: any, translateY: any}} opts */\n  drawSelectionRect({ x, y, width, height, translateX = 0, translateY = 0 }) {\n    const w = this.w;\n    const zoomRect = this.zoomRect;\n    const selectionRect = this.selectionRect;\n    if (this.dragged || w.interact.selection !== null) {\n      const scalingAttrs = {\n        transform: \"translate(\" + translateX + \", \" + translateY + \")\"\n      };\n      if (w.interact.zoomEnabled && this.dragged) {\n        if (width < 0) width = 1;\n        zoomRect.attr({\n          x,\n          y,\n          width,\n          height,\n          fill: w.config.chart.zoom.zoomedArea.fill.color,\n          \"fill-opacity\": w.config.chart.zoom.zoomedArea.fill.opacity,\n          stroke: w.config.chart.zoom.zoomedArea.stroke.color,\n          \"stroke-width\": w.config.chart.zoom.zoomedArea.stroke.width,\n          \"stroke-opacity\": w.config.chart.zoom.zoomedArea.stroke.opacity\n        });\n        Graphics.setAttrs(zoomRect.node, scalingAttrs);\n      }\n      if (w.interact.selectionEnabled) {\n        selectionRect.attr({\n          x,\n          y,\n          width: width > 0 ? width : 0,\n          height: height > 0 ? height : 0,\n          fill: w.config.chart.selection.fill.color,\n          \"fill-opacity\": w.config.chart.selection.fill.opacity,\n          stroke: w.config.chart.selection.stroke.color,\n          \"stroke-width\": w.config.chart.selection.stroke.width,\n          \"stroke-dasharray\": w.config.chart.selection.stroke.dashArray,\n          \"stroke-opacity\": w.config.chart.selection.stroke.opacity\n        });\n        Graphics.setAttrs(selectionRect.node, scalingAttrs);\n      }\n    }\n  }\n  /**\n   * @param {any} rect\n   */\n  hideSelectionRect(rect) {\n    if (rect) {\n      rect.attr({\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n      });\n    }\n  }\n  selectionDrawing({ context, zoomtype }) {\n    var _a;\n    const w = this.w;\n    const me = context;\n    const gridRectDim = (_a = this.gridRect) == null ? void 0 : _a.getBoundingClientRect();\n    if (!gridRectDim) return;\n    const startX = me.startX - 1;\n    const startY = me.startY;\n    let inversedX = false;\n    let inversedY = false;\n    const left = me.clientX - gridRectDim.left - w.globals.barPadForNumericAxis;\n    const top = me.clientY - gridRectDim.top;\n    let selectionWidth = left - startX;\n    let selectionHeight = top - startY;\n    let selectionRect = {\n      translateX: w.layout.translateX,\n      translateY: w.layout.translateY\n    };\n    if (Math.abs(selectionWidth + startX) > w.layout.gridWidth) {\n      selectionWidth = w.layout.gridWidth - startX;\n    } else if (left < 0) {\n      selectionWidth = startX;\n    }\n    if (startX > left) {\n      inversedX = true;\n      selectionWidth = Math.abs(selectionWidth);\n    }\n    if (startY > top) {\n      inversedY = true;\n      selectionHeight = Math.abs(selectionHeight);\n    }\n    if (zoomtype === \"x\") {\n      selectionRect = {\n        x: inversedX ? startX - selectionWidth : startX,\n        y: 0,\n        width: selectionWidth,\n        height: w.layout.gridHeight\n      };\n    } else if (zoomtype === \"y\") {\n      selectionRect = {\n        x: 0,\n        y: inversedY ? startY - selectionHeight : startY,\n        width: w.layout.gridWidth,\n        height: selectionHeight\n      };\n    } else {\n      selectionRect = {\n        x: inversedX ? startX - selectionWidth : startX,\n        y: inversedY ? startY - selectionHeight : startY,\n        width: selectionWidth,\n        height: selectionHeight\n      };\n    }\n    selectionRect = __spreadProps(__spreadValues({}, selectionRect), {\n      translateX: w.layout.translateX,\n      translateY: w.layout.translateY\n    });\n    me.drawSelectionRect(selectionRect);\n    me.selectionDragging(\"resizing\");\n    return selectionRect;\n  }\n  /**\n   * @param {string} type\n   * @param {CustomEvent} e\n   */\n  selectionDragging(type, e) {\n    var _a;\n    const w = this.w;\n    if (!e) return;\n    e.preventDefault();\n    const { handler, box } = e.detail;\n    const constraints = (\n      /** @type {any} */\n      this.constraints\n    );\n    let { x, y } = box;\n    if (x < constraints.x) {\n      x = constraints.x;\n    }\n    if (y < constraints.y) {\n      y = constraints.y;\n    }\n    if (box.x2 > constraints.x2) {\n      x = constraints.x2 - box.w;\n    }\n    if (box.y2 > constraints.y2) {\n      y = constraints.y2 - box.h;\n    }\n    handler.move(x, y);\n    const xyRatios = this.xyRatios;\n    const selRect = this.selectionRect;\n    let timerInterval = 0;\n    if (type === \"resizing\") {\n      timerInterval = 30;\n    }\n    const getSelAttr = (attr) => {\n      return parseFloat(selRect.node.getAttribute(attr));\n    };\n    const draggedProps = {\n      x: getSelAttr(\"x\"),\n      y: getSelAttr(\"y\"),\n      width: getSelAttr(\"width\"),\n      height: getSelAttr(\"height\")\n    };\n    w.interact.selection = draggedProps;\n    if (typeof w.config.chart.events.selection === \"function\" && w.interact.selectionEnabled) {\n      clearTimeout((_a = this.w.globals.selectionResizeTimer) != null ? _a : void 0);\n      this.w.globals.selectionResizeTimer = window.setTimeout(() => {\n        var _a2;\n        const gridRectDim = (_a2 = this.gridRect) == null ? void 0 : _a2.getBoundingClientRect();\n        if (!gridRectDim) return;\n        const selectionRect = selRect.node.getBoundingClientRect();\n        let minX, maxX, minY, maxY;\n        if (!w.axisFlags.isRangeBar) {\n          if (!w.globals.xAxisScale) return;\n          minX = w.globals.xAxisScale.niceMin + (selectionRect.left - gridRectDim.left) * xyRatios.xRatio;\n          maxX = w.globals.xAxisScale.niceMin + (selectionRect.right - gridRectDim.left) * xyRatios.xRatio;\n          minY = w.globals.yAxisScale[0].niceMin + (gridRectDim.bottom - selectionRect.bottom) * xyRatios.yRatio[0];\n          maxY = w.globals.yAxisScale[0].niceMax - (selectionRect.top - gridRectDim.top) * xyRatios.yRatio[0];\n        } else {\n          minX = w.globals.yAxisScale[0].niceMin + (selectionRect.left - gridRectDim.left) * xyRatios.invertedYRatio;\n          maxX = w.globals.yAxisScale[0].niceMin + (selectionRect.right - gridRectDim.left) * xyRatios.invertedYRatio;\n          minY = 0;\n          maxY = 1;\n        }\n        const xyAxis = {\n          xaxis: {\n            min: minX,\n            max: maxX\n          },\n          yaxis: {\n            min: minY,\n            max: maxY\n          }\n        };\n        w.config.chart.events.selection(this.ctx, xyAxis);\n        if (w.config.chart.brush.enabled && w.config.chart.events.brushScrolled !== void 0) {\n          w.config.chart.events.brushScrolled(this.ctx, xyAxis);\n        }\n      }, timerInterval);\n    }\n  }\n  /** @param {{context: any, zoomtype: any}} opts */\n  selectionDrawn({ context, zoomtype }) {\n    var _a, _b;\n    const w = this.w;\n    const me = context;\n    const xyRatios = this.xyRatios;\n    const toolbar = this.ctx.toolbar;\n    const selRect = w.interact.zoomEnabled ? me.zoomRect.node.getBoundingClientRect() : me.selectionRect.node.getBoundingClientRect();\n    const gridRectDim = me.gridRect.getBoundingClientRect();\n    const localStartX = selRect.left - gridRectDim.left - w.globals.barPadForNumericAxis;\n    const localEndX = selRect.right - gridRectDim.left - w.globals.barPadForNumericAxis;\n    const localStartY = selRect.top - gridRectDim.top;\n    const localEndY = selRect.bottom - gridRectDim.top;\n    let xLowestValue, xHighestValue;\n    if (!w.axisFlags.isRangeBar) {\n      const niceMin = (_b = (_a = w.globals.xAxisScale) == null ? void 0 : _a.niceMin) != null ? _b : 0;\n      xLowestValue = niceMin + localStartX * xyRatios.xRatio;\n      xHighestValue = niceMin + localEndX * xyRatios.xRatio;\n    } else {\n      xLowestValue = w.globals.yAxisScale[0].niceMin + localStartX * xyRatios.invertedYRatio;\n      xHighestValue = w.globals.yAxisScale[0].niceMin + localEndX * xyRatios.invertedYRatio;\n    }\n    const yHighestValue = [];\n    const yLowestValue = [];\n    w.config.yaxis.forEach((yaxe, index) => {\n      const seriesIndex = w.globals.seriesYAxisMap[index][0];\n      const highestVal = w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[seriesIndex] * localStartY;\n      const lowestVal = w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[seriesIndex] * localEndY;\n      yHighestValue.push(highestVal);\n      yLowestValue.push(lowestVal);\n    });\n    if (me.dragged && (me.dragX > 10 || me.dragY > 10) && xLowestValue !== xHighestValue) {\n      if (w.interact.zoomEnabled) {\n        if (!w.globals.initialConfig) return;\n        let yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n        let xaxis = Utils$1.clone(w.globals.initialConfig.xaxis);\n        w.interact.zoomed = true;\n        if (w.config.xaxis.convertedCatToNumeric) {\n          xLowestValue = Math.floor(xLowestValue);\n          xHighestValue = Math.floor(xHighestValue);\n          if (xLowestValue < 1) {\n            xLowestValue = 1;\n            xHighestValue = w.globals.dataPoints;\n          }\n          if (xHighestValue - xLowestValue < 2) {\n            xHighestValue = xLowestValue + 1;\n          }\n        }\n        if (zoomtype === \"xy\" || zoomtype === \"x\") {\n          xaxis = {\n            min: xLowestValue,\n            max: xHighestValue\n          };\n        }\n        if (zoomtype === \"xy\" || zoomtype === \"y\") {\n          yaxis.forEach((yaxe, index) => {\n            yaxis[index].min = yLowestValue[index];\n            yaxis[index].max = yHighestValue[index];\n          });\n        }\n        if (toolbar) {\n          const beforeZoomRange = toolbar.getBeforeZoomRange(xaxis, yaxis);\n          if (beforeZoomRange) {\n            xaxis = beforeZoomRange.xaxis ? beforeZoomRange.xaxis : xaxis;\n            yaxis = beforeZoomRange.yaxis ? beforeZoomRange.yaxis : yaxis;\n          }\n        }\n        const options2 = {\n          xaxis\n        };\n        if (!w.config.chart.group) {\n          options2.yaxis = yaxis;\n        }\n        me.ctx.updateHelpers._updateOptions(\n          options2,\n          false,\n          me.w.config.chart.animations.dynamicAnimation.enabled\n        );\n        if (typeof w.config.chart.events.zoomed === \"function\") {\n          toolbar.zoomCallback(xaxis, yaxis);\n        }\n      } else if (w.interact.selectionEnabled) {\n        let yaxis = null;\n        let xaxis = null;\n        xaxis = {\n          min: xLowestValue,\n          max: xHighestValue\n        };\n        if (zoomtype === \"xy\" || zoomtype === \"y\") {\n          const yaxisCopy = (\n            /** @type {ApexYAxis[]} */\n            Utils$1.clone(w.config.yaxis)\n          );\n          yaxis = yaxisCopy;\n          yaxisCopy.forEach((yaxe, index) => {\n            yaxisCopy[index].min = yLowestValue[index];\n            yaxisCopy[index].max = yHighestValue[index];\n          });\n        }\n        w.interact.selection = me.selection;\n        if (typeof w.config.chart.events.selection === \"function\") {\n          w.config.chart.events.selection(me.ctx, {\n            xaxis,\n            yaxis\n          });\n        }\n      }\n    }\n  }\n  /** @param {{ context?: any, zoomtype?: any, xyRatios?: any }} opts */\n  panDragging({ context }) {\n    var _a;\n    const w = this.w;\n    const me = context;\n    if (typeof w.interact.lastClientPosition.x !== \"undefined\") {\n      const deltaX = w.interact.lastClientPosition.x - me.clientX;\n      const deltaY = ((_a = w.interact.lastClientPosition.y) != null ? _a : 0) - me.clientY;\n      if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) {\n        this.moveDirection = \"left\";\n      } else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) {\n        this.moveDirection = \"right\";\n      } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY > 0) {\n        this.moveDirection = \"up\";\n      } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY < 0) {\n        this.moveDirection = \"down\";\n      }\n    }\n    w.interact.lastClientPosition = {\n      x: me.clientX,\n      y: me.clientY\n    };\n    const xLowestValue = w.axisFlags.isRangeBar ? w.globals.minY : w.globals.minX;\n    const xHighestValue = w.axisFlags.isRangeBar ? w.globals.maxY : w.globals.maxX;\n    me.panScrolled(xLowestValue, xHighestValue);\n  }\n  // delayedPanScrolled() {\n  //   const w = this.w\n  //   let newMinX = w.globals.minX\n  //   let newMaxX = w.globals.maxX\n  //   const centerX = (w.globals.maxX - w.globals.minX) / 2\n  //   if (this.moveDirection === 'left') {\n  //     newMinX = w.globals.minX + centerX\n  //     newMaxX = w.globals.maxX + centerX\n  //   } else if (this.moveDirection === 'right') {\n  //     newMinX = w.globals.minX - centerX\n  //     newMaxX = w.globals.maxX - centerX\n  //   }\n  //   newMinX = Math.floor(newMinX)\n  //   newMaxX = Math.floor(newMaxX)\n  //   this.updateScrolledChart(\n  //     { xaxis: { min: newMinX, max: newMaxX } },\n  //     newMinX,\n  //     newMaxX\n  //   )\n  // }\n  /**\n   * @param {number} xLowestValue\n   * @param {number} xHighestValue\n   */\n  panScrolled(xLowestValue, xHighestValue) {\n    var _a, _b;\n    const w = this.w;\n    const xyRatios = this.xyRatios;\n    if (!w.globals.initialConfig) return;\n    const yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n    let xRatio = xyRatios.xRatio;\n    let minX = w.globals.minX;\n    let maxX = w.globals.maxX;\n    if (w.axisFlags.isRangeBar) {\n      xRatio = xyRatios.invertedYRatio;\n      minX = w.globals.minY;\n      maxX = w.globals.maxY;\n    }\n    if (this.moveDirection === \"left\") {\n      xLowestValue = minX + w.layout.gridWidth / 15 * xRatio;\n      xHighestValue = maxX + w.layout.gridWidth / 15 * xRatio;\n    } else if (this.moveDirection === \"right\") {\n      xLowestValue = minX - w.layout.gridWidth / 15 * xRatio;\n      xHighestValue = maxX - w.layout.gridWidth / 15 * xRatio;\n    }\n    if (!w.axisFlags.isRangeBar) {\n      const clampMin = (_a = w.globals.dataReducerRawMinX) != null ? _a : w.globals.initialMinX;\n      const clampMax = (_b = w.globals.dataReducerRawMaxX) != null ? _b : w.globals.initialMaxX;\n      if (xLowestValue < clampMin || xHighestValue > clampMax) {\n        xLowestValue = minX;\n        xHighestValue = maxX;\n      }\n    }\n    const xaxis = {\n      min: xLowestValue,\n      max: xHighestValue\n    };\n    const options2 = {\n      xaxis\n    };\n    if (!w.config.chart.group) {\n      options2.yaxis = yaxis;\n    }\n    this.updateScrolledChart(options2, xLowestValue, xHighestValue);\n  }\n  /**\n   * @param {object} options\n   * @param {number} xLowestValue\n   * @param {number} xHighestValue\n   */\n  updateScrolledChart(options2, xLowestValue, xHighestValue) {\n    const w = this.w;\n    this.ctx.updateHelpers._updateOptions(options2, false, false);\n    if (typeof w.config.chart.events.scrolled === \"function\") {\n      const args = {\n        xaxis: {\n          min: xLowestValue,\n          max: xHighestValue\n        }\n      };\n      w.config.chart.events.scrolled(this.ctx, args);\n      this.ctx.events.fireEvent(\"scrolled\", args);\n    }\n  }\n}\nApexCharts.registerFeatures({\n  toolbar: Toolbar,\n  zoomPanSelection: ZoomPanSelection\n});\nlet Helpers$2 = class Helpers3 {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {number | null} [annoIndex]\n   */\n  setOrientations(anno, annoIndex = null) {\n    var _a, _b;\n    const w = this.w;\n    if (anno.label.orientation === \"vertical\") {\n      const i = annoIndex !== null ? annoIndex : 0;\n      const xAnno = w.dom.baseEl.querySelector(\n        `.apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='${i}']`\n      );\n      if (xAnno !== null) {\n        const xAnnoCoord = (\n          /** @type {SVGGraphicsElement} */\n          xAnno.getBBox()\n        );\n        xAnno.setAttribute(\n          \"x\",\n          String(\n            parseFloat((_a = xAnno.getAttribute(\"x\")) != null ? _a : \"0\") - xAnnoCoord.height + 4\n          )\n        );\n        const yOffset = anno.label.position === \"top\" ? xAnnoCoord.width : -xAnnoCoord.width;\n        xAnno.setAttribute(\n          \"y\",\n          String(parseFloat((_b = xAnno.getAttribute(\"y\")) != null ? _b : \"0\") + yOffset)\n        );\n        const { x, y } = this.annoCtx.graphics.rotateAroundCenter(xAnno);\n        xAnno.setAttribute(\"transform\", `rotate(-90 ${x} ${y})`);\n      }\n    }\n  }\n  /**\n   * @param {any} annoEl\n   * @param {Record<string, any>} anno\n   */\n  addBackgroundToAnno(annoEl, anno) {\n    const w = this.w;\n    if (!annoEl || !anno.label.text || !String(anno.label.text).trim()) {\n      return null;\n    }\n    const gridEl = w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    if (!gridEl) return null;\n    const elGridRect = gridEl.getBoundingClientRect();\n    const gridBBox = (\n      /** @type {SVGGraphicsElement} */\n      gridEl.getBBox()\n    );\n    const zoom = elGridRect.width / gridBBox.width || 1;\n    const coords = annoEl.getBoundingClientRect();\n    let {\n      left: pleft,\n      right: pright,\n      top: ptop,\n      bottom: pbottom\n    } = anno.label.style.padding;\n    if (anno.label.orientation === \"vertical\") {\n      [ptop, pbottom, pleft, pright] = [pleft, pright, ptop, pbottom];\n    }\n    const x1 = (coords.left - elGridRect.left) / zoom - pleft;\n    const y1 = (coords.top - elGridRect.top) / zoom - ptop;\n    const elRect = this.annoCtx.graphics.drawRect(\n      x1 - w.globals.barPadForNumericAxis,\n      y1,\n      coords.width / zoom + pleft + pright,\n      coords.height / zoom + ptop + pbottom,\n      anno.label.borderRadius,\n      anno.label.style.background,\n      1,\n      anno.label.borderWidth,\n      anno.label.borderColor,\n      0\n    );\n    if (anno.id) {\n      elRect.node.classList.add(anno.id);\n    }\n    return elRect;\n  }\n  annotationsBackground() {\n    const w = this.w;\n    const add = (anno, i, type) => {\n      const annoLabel = w.dom.baseEl.querySelector(\n        `.apexcharts-${type}-annotations .apexcharts-${type}-annotation-label[rel='${i}']`\n      );\n      if (annoLabel) {\n        const parent = annoLabel.parentNode;\n        const elRect = this.addBackgroundToAnno(annoLabel, anno);\n        if (elRect) {\n          parent == null ? void 0 : parent.insertBefore(elRect.node, annoLabel);\n          const labelX = annoLabel.getAttribute(\"x\");\n          if (labelX !== null) {\n            applyProgressiveReveal(elRect, parseFloat(labelX), w);\n          }\n          if (anno.label.mouseEnter) {\n            elRect.node.addEventListener(\n              \"mouseenter\",\n              anno.label.mouseEnter.bind(this, anno)\n            );\n          }\n          if (anno.label.mouseLeave) {\n            elRect.node.addEventListener(\n              \"mouseleave\",\n              anno.label.mouseLeave.bind(this, anno)\n            );\n          }\n          if (anno.label.click) {\n            elRect.node.addEventListener(\n              \"click\",\n              anno.label.click.bind(this, anno)\n            );\n          }\n        }\n      }\n    };\n    w.config.annotations.xaxis.forEach(\n      (anno, i) => add(anno, i, \"xaxis\")\n    );\n    w.config.annotations.yaxis.forEach(\n      (anno, i) => add(anno, i, \"yaxis\")\n    );\n    w.config.annotations.points.forEach(\n      (anno, i) => add(anno, i, \"point\")\n    );\n  }\n  /**\n   * @param {string} type\n   * @param {Record<string, any>} anno\n   */\n  getY1Y2(type, anno) {\n    var _a, _b;\n    const w = this.w;\n    const y = type === \"y1\" ? anno.y : anno.y2;\n    let yP;\n    let clipped = false;\n    if (this.annoCtx.invertAxis) {\n      const labels = w.config.xaxis.convertedCatToNumeric ? w.labelData.categoryLabels : w.labelData.labels;\n      const catIndex = labels.indexOf(y);\n      const xLabel = w.dom.baseEl.querySelector(\n        `.apexcharts-yaxis-texts-g text:nth-child(${catIndex + 1})`\n      );\n      yP = xLabel ? parseFloat((_a = xLabel.getAttribute(\"y\")) != null ? _a : \"0\") : (w.layout.gridHeight / labels.length - 1) * (catIndex + 1) - w.globals.barHeight;\n      if (anno.seriesIndex !== void 0 && w.globals.barHeight) {\n        yP -= w.globals.barHeight / 2 * (w.seriesData.series.length - 1) - w.globals.barHeight * anno.seriesIndex;\n      }\n    } else {\n      const seriesIndex = w.globals.seriesYAxisMap[anno.yAxisIndex][0];\n      const yPos = w.config.yaxis[anno.yAxisIndex].logarithmic ? new CoreUtils(this.w).getLogVal(\n        w.config.yaxis[anno.yAxisIndex].logBase,\n        y,\n        seriesIndex\n      ) / /** @type {any} */\n      w.globals.yLogRatio[seriesIndex] : (y - w.globals.minYArr[seriesIndex]) / (w.globals.yRange[seriesIndex] / w.layout.gridHeight);\n      yP = w.layout.gridHeight - Math.min(Math.max(yPos, 0), w.layout.gridHeight);\n      clipped = yPos > w.layout.gridHeight || yPos < 0;\n      if (anno.marker && (anno.y === void 0 || anno.y === null)) {\n        yP = 0;\n      }\n      if ((_b = w.config.yaxis[anno.yAxisIndex]) == null ? void 0 : _b.reversed) {\n        yP = yPos;\n      }\n    }\n    if (typeof y === \"string\" && y.includes(\"px\")) {\n      yP = parseFloat(y);\n    }\n    return { yP, clipped };\n  }\n  /**\n   * @param {string} type\n   * @param {Record<string, any>} anno\n   */\n  getX1X2(type, anno) {\n    const w = this.w;\n    const x = type === \"x1\" ? anno.x : anno.x2;\n    const min = this.annoCtx.invertAxis ? w.globals.minY : w.globals.minX;\n    const max = this.annoCtx.invertAxis ? w.globals.maxY : w.globals.maxX;\n    const range = this.annoCtx.invertAxis ? w.globals.yRange[0] : w.globals.xRange;\n    let clipped = false;\n    let xP = this.annoCtx.inversedReversedAxis ? (max - x) / (range / w.layout.gridWidth) : (x - min) / (range / w.layout.gridWidth);\n    if ((w.config.xaxis.type === \"category\" || w.config.xaxis.convertedCatToNumeric) && !this.annoCtx.invertAxis && !w.axisFlags.dataFormatXNumeric) {\n      if (!w.config.chart.sparkline.enabled) {\n        xP = this.getStringX(x);\n      }\n    }\n    if (typeof x === \"string\" && x.includes(\"px\")) {\n      xP = parseFloat(x);\n    }\n    if ((x === void 0 || x === null) && anno.marker) {\n      xP = w.layout.gridWidth;\n    }\n    if (anno.seriesIndex !== void 0 && w.globals.barWidth && !this.annoCtx.invertAxis) {\n      xP -= w.globals.barWidth / 2 * (w.seriesData.series.length - 1) - w.globals.barWidth * anno.seriesIndex;\n    }\n    if (typeof xP !== \"number\") {\n      xP = 0;\n      clipped = true;\n    }\n    if (parseFloat(xP.toFixed(10)) > parseFloat(w.layout.gridWidth.toFixed(10))) {\n      xP = w.layout.gridWidth;\n      clipped = true;\n    } else if (xP < 0) {\n      xP = 0;\n      clipped = true;\n    }\n    return { x: xP, clipped };\n  }\n  /**\n   * @param {number} x\n   */\n  getStringX(x) {\n    var _a;\n    const w = this.w;\n    let rX = x;\n    if (w.config.xaxis.convertedCatToNumeric && w.labelData.categoryLabels.length) {\n      const strX = String(x);\n      x = w.labelData.categoryLabels.findIndex(\n        (l) => String(l) === strX\n      ) + 1;\n    }\n    const catIndex = w.labelData.labels.map(\n      (item) => Array.isArray(item) ? item.join(\" \") : item\n    ).indexOf(x);\n    const xLabel = w.dom.baseEl.querySelector(\n      `.apexcharts-xaxis-texts-g text:nth-child(${catIndex + 1})`\n    );\n    if (xLabel) {\n      rX = parseFloat((_a = xLabel.getAttribute(\"x\")) != null ? _a : \"0\");\n    }\n    return rX;\n  }\n};\nclass XAnnotations {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n    this.invertAxis = this.annoCtx.invertAxis;\n    this.helpers = new Helpers$2(this.annoCtx);\n  }\n  /**\n   * @param {XAxisAnnotations} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addXaxisAnnotation(anno, parent, index) {\n    const w = this.w;\n    const result = this.helpers.getX1X2(\"x1\", anno);\n    let x1 = result.x;\n    const clipX1 = result.clipped;\n    let clipX2 = true;\n    let x2;\n    const text = anno.label.text;\n    const strokeDashArray = anno.strokeDashArray;\n    if (!Utils$1.isNumber(x1)) return;\n    if (anno.x2 === null || typeof anno.x2 === \"undefined\") {\n      if (!clipX1) {\n        const line = this.annoCtx.graphics.drawLine(\n          x1 + anno.offsetX,\n          // x1\n          0 + anno.offsetY,\n          // y1\n          x1 + anno.offsetX,\n          // x2\n          w.layout.gridHeight + anno.offsetY,\n          // y2\n          anno.borderColor,\n          // lineColor\n          strokeDashArray,\n          //dashArray\n          anno.borderWidth\n        );\n        parent.appendChild(line.node);\n        if (anno.id) {\n          line.node.classList.add(anno.id);\n        }\n        applyProgressiveReveal(line, x1 + anno.offsetX, w);\n      }\n    } else {\n      const result2 = this.helpers.getX1X2(\"x2\", anno);\n      x2 = result2.x;\n      clipX2 = result2.clipped;\n      if (x2 < x1) {\n        const temp = x1;\n        x1 = x2;\n        x2 = temp;\n      }\n      const rect = this.annoCtx.graphics.drawRect(\n        x1 + anno.offsetX,\n        // x1\n        0 + anno.offsetY,\n        // y1\n        x2 - x1,\n        // x2\n        w.layout.gridHeight + anno.offsetY,\n        // y2\n        0,\n        // radius\n        anno.fillColor,\n        // color\n        anno.opacity,\n        // opacity,\n        1,\n        // strokeWidth\n        anno.borderColor,\n        // strokeColor\n        strokeDashArray\n        // stokeDashArray\n      );\n      rect.node.classList.add(\"apexcharts-annotation-rect\");\n      rect.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n      parent.appendChild(rect.node);\n      if (anno.id) {\n        rect.node.classList.add(anno.id);\n      }\n      applyProgressiveReveal(rect, x1 + anno.offsetX, w);\n    }\n    if (!(clipX1 && clipX2)) {\n      const textRects = this.annoCtx.graphics.getTextRects(\n        text,\n        anno.label.style.fontSize\n      );\n      const textY = anno.label.position === \"top\" ? 4 : anno.label.position === \"center\" ? w.layout.gridHeight / 2 + (anno.label.orientation === \"vertical\" ? textRects.width / 2 : 0) : w.layout.gridHeight;\n      const elText = this.annoCtx.graphics.drawText({\n        x: x1 + anno.label.offsetX,\n        y: textY + anno.label.offsetY - (anno.label.orientation === \"vertical\" ? anno.label.position === \"top\" ? textRects.width / 2 - 12 : -textRects.width / 2 : 0),\n        text,\n        textAnchor: anno.label.textAnchor,\n        fontSize: anno.label.style.fontSize,\n        fontFamily: anno.label.style.fontFamily,\n        fontWeight: anno.label.style.fontWeight,\n        foreColor: anno.label.style.color,\n        cssClass: `apexcharts-xaxis-annotation-label ${anno.label.style.cssClass} ${anno.id ? anno.id : \"\"}`\n      });\n      elText.attr({\n        rel: index\n      });\n      parent.appendChild(elText.node);\n      applyProgressiveReveal(elText, x1 + anno.label.offsetX, w);\n      this.annoCtx.helpers.setOrientations(anno, index);\n    }\n  }\n  drawXAxisAnnotations() {\n    const w = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-xaxis-annotations\"\n    });\n    w.config.annotations.xaxis.map(\n      (anno, index) => {\n        this.addXaxisAnnotation(anno, elg.node, index);\n      }\n    );\n    return elg;\n  }\n}\nclass YAnnotations {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n    this.helpers = new Helpers$2(this.annoCtx);\n    this.axesUtils = new AxesUtils(this.annoCtx.w, {\n      theme: this.annoCtx.theme,\n      timeScale: this.annoCtx.timeScale\n    });\n  }\n  /**\n   * @param {YAxisAnnotations} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addYaxisAnnotation(anno, parent, index) {\n    const w = this.w;\n    const strokeDashArray = anno.strokeDashArray;\n    let result = this.helpers.getY1Y2(\"y1\", anno);\n    let y1 = result.yP;\n    const clipY1 = result.clipped;\n    let y2;\n    let clipY2 = true;\n    let drawn = false;\n    const text = anno.label.text;\n    if (anno.y2 === null || typeof anno.y2 === \"undefined\") {\n      if (!clipY1) {\n        drawn = true;\n        const line = this.annoCtx.graphics.drawLine(\n          0 + anno.offsetX,\n          // x1\n          y1 + anno.offsetY,\n          // y1\n          this._getYAxisAnnotationWidth(anno),\n          // x2\n          y1 + anno.offsetY,\n          // y2\n          anno.borderColor,\n          // lineColor\n          strokeDashArray,\n          // dashArray\n          anno.borderWidth\n        );\n        parent.appendChild(line.node);\n        if (anno.id) {\n          line.node.classList.add(anno.id);\n        }\n      }\n    } else {\n      result = this.helpers.getY1Y2(\"y2\", anno);\n      y2 = result.yP;\n      clipY2 = result.clipped;\n      if (y2 > y1) {\n        const temp = y1;\n        y1 = y2;\n        y2 = temp;\n      }\n      if (!(clipY1 && clipY2)) {\n        drawn = true;\n        const rect = this.annoCtx.graphics.drawRect(\n          0 + anno.offsetX,\n          // x1\n          y2 + anno.offsetY,\n          // y1\n          this._getYAxisAnnotationWidth(anno),\n          // x2\n          y1 - y2,\n          // y2\n          0,\n          // radius\n          anno.fillColor,\n          // color\n          anno.opacity,\n          // opacity,\n          1,\n          // strokeWidth\n          anno.borderColor,\n          // strokeColor\n          strokeDashArray\n          // stokeDashArray\n        );\n        rect.node.classList.add(\"apexcharts-annotation-rect\");\n        rect.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n        parent.appendChild(rect.node);\n        if (anno.id) {\n          rect.node.classList.add(anno.id);\n        }\n      }\n    }\n    if (drawn) {\n      const textX = anno.label.position === \"right\" ? w.layout.gridWidth : anno.label.position === \"center\" ? w.layout.gridWidth / 2 : 0;\n      const elText = this.annoCtx.graphics.drawText({\n        x: textX + anno.label.offsetX,\n        y: (y2 != null ? y2 : y1) + anno.label.offsetY - 3,\n        text,\n        textAnchor: anno.label.textAnchor,\n        fontSize: anno.label.style.fontSize,\n        fontFamily: anno.label.style.fontFamily,\n        fontWeight: anno.label.style.fontWeight,\n        foreColor: anno.label.style.color,\n        cssClass: `apexcharts-yaxis-annotation-label ${anno.label.style.cssClass} ${anno.id ? anno.id : \"\"}`\n      });\n      elText.attr({\n        rel: index\n      });\n      parent.appendChild(elText.node);\n    }\n  }\n  /**\n   * @param {YAxisAnnotations} anno\n   */\n  _getYAxisAnnotationWidth(anno) {\n    const w = this.w;\n    let width = w.layout.gridWidth;\n    if (anno.width.indexOf(\"%\") > -1) {\n      width = w.layout.gridWidth * parseInt(anno.width, 10) / 100;\n    } else {\n      width = parseInt(anno.width, 10);\n    }\n    return width + anno.offsetX;\n  }\n  drawYAxisAnnotations() {\n    const w = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-yaxis-annotations\"\n    });\n    w.config.annotations.yaxis.forEach(\n      (anno, index) => {\n        anno.yAxisIndex = this.axesUtils.translateYAxisIndex(anno.yAxisIndex);\n        if (!(this.axesUtils.isYAxisHidden(anno.yAxisIndex) && this.axesUtils.yAxisAllSeriesCollapsed(anno.yAxisIndex))) {\n          this.addYaxisAnnotation(anno, elg.node, index);\n        }\n      }\n    );\n    return elg;\n  }\n}\nclass PointAnnotations {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n    this.helpers = new Helpers$2(this.annoCtx);\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addPointAnnotation(anno, parent, index) {\n    const w = this.w;\n    if (w.globals.collapsedSeriesIndices.indexOf(anno.seriesIndex) > -1) {\n      return;\n    }\n    const resultX = this.helpers.getX1X2(\"x1\", anno);\n    const x = resultX.x;\n    const clipX = resultX.clipped;\n    const resultY = this.helpers.getY1Y2(\"y1\", anno);\n    const y = resultY.yP;\n    const clipY = resultY.clipped;\n    if (!Utils$1.isNumber(x)) return;\n    if (!(clipY || clipX)) {\n      const optsPoints = {\n        pSize: anno.marker.size,\n        pointStrokeWidth: anno.marker.strokeWidth,\n        pointFillColor: anno.marker.fillColor,\n        pointStrokeColor: anno.marker.strokeColor,\n        shape: anno.marker.shape,\n        pRadius: anno.marker.radius,\n        class: `apexcharts-point-annotation-marker ${anno.marker.cssClass} ${anno.id ? anno.id : \"\"}`\n      };\n      let point = this.annoCtx.graphics.drawMarker(\n        x + anno.marker.offsetX,\n        y + anno.marker.offsetY,\n        optsPoints\n      );\n      parent.appendChild(point.node);\n      applyProgressiveReveal(point, x, w);\n      const text = anno.label.text ? anno.label.text : \"\";\n      const elText = this.annoCtx.graphics.drawText({\n        x: x + anno.label.offsetX,\n        y: y + anno.label.offsetY - anno.marker.size - parseFloat(anno.label.style.fontSize) / 1.6,\n        text,\n        textAnchor: anno.label.textAnchor,\n        fontSize: anno.label.style.fontSize,\n        fontFamily: anno.label.style.fontFamily,\n        fontWeight: anno.label.style.fontWeight,\n        foreColor: anno.label.style.color,\n        cssClass: `apexcharts-point-annotation-label ${anno.label.style.cssClass} ${anno.id ? anno.id : \"\"}`\n      });\n      elText.attr({\n        rel: index\n      });\n      parent.appendChild(elText.node);\n      applyProgressiveReveal(elText, x, w);\n      if (anno.customSVG.SVG) {\n        const g = this.annoCtx.graphics.group({\n          class: \"apexcharts-point-annotations-custom-svg \" + anno.customSVG.cssClass\n        });\n        g.attr({\n          transform: `translate(${x + anno.customSVG.offsetX}, ${y + anno.customSVG.offsetY})`\n        });\n        g.node.innerHTML = anno.customSVG.SVG;\n        parent.appendChild(g.node);\n      }\n      if (anno.image.path) {\n        const imgWidth = anno.image.width ? anno.image.width : 20;\n        const imgHeight = anno.image.height ? anno.image.height : 20;\n        point = this.annoCtx.addImage({\n          x: x + anno.image.offsetX - imgWidth / 2,\n          y: y + anno.image.offsetY - imgHeight / 2,\n          width: imgWidth,\n          height: imgHeight,\n          path: anno.image.path,\n          appendTo: \".apexcharts-point-annotations\"\n        });\n      }\n      if (anno.mouseEnter) {\n        point.node.addEventListener(\n          \"mouseenter\",\n          anno.mouseEnter.bind(this, anno)\n        );\n      }\n      if (anno.mouseLeave) {\n        point.node.addEventListener(\n          \"mouseleave\",\n          anno.mouseLeave.bind(this, anno)\n        );\n      }\n      if (anno.click) {\n        point.node.addEventListener(\"click\", anno.click.bind(this, anno));\n      }\n    }\n  }\n  drawPointAnnotations() {\n    const w = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-point-annotations\"\n    });\n    w.config.annotations.points.map(\n      (anno, index) => {\n        this.addPointAnnotation(anno, elg.node, index);\n      }\n    );\n    return elg;\n  }\n}\nclass Annotations {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w, { theme = null, timeScale = null } = {}) {\n    this.w = w;\n    this.theme = theme;\n    this.timeScale = timeScale;\n    this.invertAxis = void 0;\n    this.inversedReversedAxis = void 0;\n    this.graphics = new Graphics(this.w);\n    if (this.w.globals.isBarHorizontal) {\n      this.invertAxis = true;\n    }\n    this.helpers = new Helpers$2(this);\n    this.xAxisAnnotations = new XAnnotations(this);\n    this.yAxisAnnotations = new YAnnotations(this);\n    this.pointsAnnotations = new PointAnnotations(this);\n    if (this.w.globals.isBarHorizontal && this.w.config.yaxis[0].reversed) {\n      this.inversedReversedAxis = true;\n    }\n    this.xDivision = this.w.layout.gridWidth / this.w.globals.dataPoints;\n  }\n  drawAxesAnnotations() {\n    const w = this.w;\n    if (w.globals.axisCharts && w.globals.dataPoints) {\n      const yAnnotations = this.yAxisAnnotations.drawYAxisAnnotations();\n      const xAnnotations = this.xAxisAnnotations.drawXAxisAnnotations();\n      const pointAnnotations = this.pointsAnnotations.drawPointAnnotations();\n      const initialAnim = w.config.chart.animations.enabled;\n      const annoArray = [yAnnotations, xAnnotations, pointAnnotations];\n      const annoElArray = [\n        xAnnotations.node,\n        yAnnotations.node,\n        pointAnnotations.node\n      ];\n      const progressiveAnnos = w.config.chart.type === \"line\" || w.config.chart.type === \"area\" || w.config.chart.type === \"rangeArea\";\n      const skipGroupHide = [progressiveAnnos, false, progressiveAnnos];\n      for (let i = 0; i < 3; i++) {\n        w.dom.elGraphical.add(annoArray[i]);\n        if (initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n          if (w.config.chart.type !== \"scatter\" && w.config.chart.type !== \"bubble\" && w.globals.dataPoints > 1 && !skipGroupHide[i]) {\n            annoElArray[i].classList.add(\"apexcharts-element-hidden\");\n          }\n        }\n        w.globals.delayedElements.push({ el: annoElArray[i], index: 0 });\n      }\n      this.helpers.annotationsBackground();\n    }\n  }\n  drawImageAnnos() {\n    const w = this.w;\n    w.config.annotations.images.map((s) => {\n      this.addImage(s);\n    });\n  }\n  drawTextAnnos() {\n    const w = this.w;\n    w.config.annotations.texts.map((t) => {\n      this.addText(t);\n    });\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addXaxisAnnotation(anno, parent, index) {\n    this.xAxisAnnotations.addXaxisAnnotation(anno, parent, index);\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addYaxisAnnotation(anno, parent, index) {\n    this.yAxisAnnotations.addYaxisAnnotation(anno, parent, index);\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addPointAnnotation(anno, parent, index) {\n    this.pointsAnnotations.addPointAnnotation(anno, parent, index);\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  addText(params) {\n    const {\n      x,\n      y,\n      text,\n      textAnchor,\n      foreColor,\n      fontSize,\n      fontFamily,\n      fontWeight,\n      cssClass,\n      backgroundColor,\n      borderWidth,\n      strokeDashArray,\n      borderRadius,\n      borderColor,\n      appendTo = \".apexcharts-svg\",\n      paddingLeft = 4,\n      paddingRight = 4,\n      paddingBottom = 2,\n      paddingTop = 2\n    } = params;\n    const w = this.w;\n    const elText = this.graphics.drawText({\n      x,\n      y,\n      text,\n      textAnchor: textAnchor || \"start\",\n      fontSize: fontSize || \"12px\",\n      fontWeight: fontWeight || \"regular\",\n      fontFamily: fontFamily || w.config.chart.fontFamily,\n      foreColor: foreColor || w.config.chart.foreColor,\n      cssClass: \"apexcharts-text \" + cssClass ? cssClass : \"\"\n    });\n    const parent = w.dom.baseEl.querySelector(appendTo);\n    if (parent) {\n      parent.appendChild(elText.node);\n    }\n    const textRect = elText.bbox();\n    if (text) {\n      const elRect = this.graphics.drawRect(\n        textRect.x - paddingLeft,\n        textRect.y - paddingTop,\n        textRect.width + paddingLeft + paddingRight,\n        textRect.height + paddingBottom + paddingTop,\n        borderRadius,\n        backgroundColor ? backgroundColor : \"transparent\",\n        1,\n        borderWidth,\n        borderColor,\n        strokeDashArray\n      );\n      parent.insertBefore(elRect.node, elText.node);\n    }\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  addImage(params) {\n    const w = this.w;\n    const {\n      path,\n      x = 0,\n      y = 0,\n      width = 20,\n      height = 20,\n      appendTo = \".apexcharts-svg\"\n    } = params;\n    const img = w.dom.Paper.image(path);\n    img.size(width, height).move(x, y);\n    const parent = w.dom.baseEl.querySelector(appendTo);\n    if (parent) {\n      parent.appendChild(img.node);\n    }\n    return img;\n  }\n  // The addXaxisAnnotation method requires a parent class, and user calling this method externally on the chart instance may not specify parent, hence a different method\n  /**\n   * @param {Record<string, any>} params\n   * @param {boolean} pushToMemory\n   * @param {any} context\n   */\n  addXaxisAnnotationExternal(params, pushToMemory, context) {\n    this.addAnnotationExternal({\n      params,\n      pushToMemory,\n      context,\n      type: \"xaxis\",\n      contextMethod: context.addXaxisAnnotation\n    });\n    return context;\n  }\n  /**\n   * @param {Record<string, any>} params\n   * @param {boolean} pushToMemory\n   * @param {any} context\n   */\n  addYaxisAnnotationExternal(params, pushToMemory, context) {\n    this.addAnnotationExternal({\n      params,\n      pushToMemory,\n      context,\n      type: \"yaxis\",\n      contextMethod: context.addYaxisAnnotation\n    });\n    return context;\n  }\n  /**\n   * @param {Record<string, any>} params\n   * @param {boolean} pushToMemory\n   * @param {any} context\n   */\n  addPointAnnotationExternal(params, pushToMemory, context) {\n    if (typeof this.invertAxis === \"undefined\") {\n      this.invertAxis = context.w.globals.isBarHorizontal;\n    }\n    this.addAnnotationExternal({\n      params,\n      pushToMemory,\n      context,\n      type: \"point\",\n      contextMethod: context.addPointAnnotation\n    });\n    return context;\n  }\n  /** @param {{params: any, pushToMemory: any, context: any, type: any, contextMethod: any}} opts */\n  addAnnotationExternal({\n    params,\n    pushToMemory,\n    context,\n    type,\n    contextMethod\n  }) {\n    const me = context;\n    const w = me.w;\n    const parent = w.dom.baseEl.querySelector(`.apexcharts-${type}-annotations`);\n    const index = parent.childNodes.length + 1;\n    const options2 = new Options();\n    const axesAnno = Object.assign(\n      {},\n      type === \"xaxis\" ? options2.xAxisAnnotation : type === \"yaxis\" ? options2.yAxisAnnotation : options2.pointAnnotation\n    );\n    const anno = Utils$1.extend(axesAnno, params);\n    switch (type) {\n      case \"xaxis\":\n        this.addXaxisAnnotation(anno, parent, index);\n        break;\n      case \"yaxis\":\n        this.addYaxisAnnotation(anno, parent, index);\n        break;\n      case \"point\":\n        this.addPointAnnotation(anno, parent, index);\n        break;\n    }\n    const axesAnnoLabel = w.dom.baseEl.querySelector(\n      `.apexcharts-${type}-annotations .apexcharts-${type}-annotation-label[rel='${index}']`\n    );\n    const elRect = this.helpers.addBackgroundToAnno(axesAnnoLabel, anno);\n    if (elRect) {\n      parent.insertBefore(elRect.node, axesAnnoLabel);\n    }\n    if (pushToMemory) {\n      w.globals.memory.methodsToExec.push({\n        context: me,\n        id: anno.id ? anno.id : Utils$1.randomId(),\n        method: contextMethod,\n        label: \"addAnnotation\",\n        params\n      });\n    }\n    return context;\n  }\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  clearAnnotations(ctx) {\n    const w = ctx.w;\n    const annos = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations\"\n    );\n    for (let i = w.globals.memory.methodsToExec.length - 1; i >= 0; i--) {\n      if (w.globals.memory.methodsToExec[i].label === \"addText\" || w.globals.memory.methodsToExec[i].label === \"addAnnotation\") {\n        w.globals.memory.methodsToExec.splice(i, 1);\n      }\n    }\n    Array.prototype.forEach.call(annos, (a) => {\n      while (a.firstChild) {\n        a.removeChild(a.firstChild);\n      }\n    });\n  }\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   * @param {string} id\n   */\n  removeAnnotation(ctx, id) {\n    const w = ctx.w;\n    const annos = w.dom.baseEl.querySelectorAll(`.${id}`);\n    if (annos) {\n      w.globals.memory.methodsToExec.map((m, i) => {\n        if (m.id === id) {\n          w.globals.memory.methodsToExec.splice(i, 1);\n        }\n      });\n      Object.keys(w.config.annotations).forEach((key) => {\n        const annotationArray = w.config.annotations[key];\n        if (Array.isArray(annotationArray)) {\n          w.config.annotations[key] = annotationArray.filter((m) => m.id !== id);\n        }\n      });\n      Array.prototype.forEach.call(annos, (a) => {\n        a.parentElement.removeChild(a);\n      });\n    }\n  }\n}\nApexCharts.registerFeatures({ annotations: Annotations });\nclass KeyboardNavigation {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.seriesIndex = 0;\n    this.dataPointIndex = 0;\n    this.active = false;\n    this._tooltipDismissed = false;\n    this._focusedEl = null;\n    this._hoveredBarEl = null;\n    this._enlargedScatterMarker = null;\n    this._onKeyDown = this._onKeyDown.bind(this);\n    this._onFocus = this._onFocus.bind(this);\n    this._onBlur = this._onBlur.bind(this);\n    this._onLegendClick = this._onLegendClick.bind(this);\n    this._onPointerDown = this._onPointerDown.bind(this);\n    this._lastPointerDownAt = 0;\n  }\n  // ─── Public API ───────────────────────────────────────────────────────────\n  /**\n   * Called after the chart and tooltip have been fully rendered.\n   * Attaches event listeners and makes the SVG keyboard-focusable.\n   */\n  init() {\n    const w = this.w;\n    const svgEl = w.dom.Paper.node;\n    if (!svgEl) return;\n    svgEl.setAttribute(\"tabindex\", \"0\");\n    svgEl.addEventListener(\"focus\", this._onFocus);\n    svgEl.addEventListener(\"blur\", this._onBlur);\n    svgEl.addEventListener(\"mousedown\", this._onPointerDown, { capture: true });\n    svgEl.addEventListener(\"pointerdown\", this._onPointerDown, {\n      capture: true\n    });\n    svgEl.addEventListener(\"touchstart\", this._onPointerDown, {\n      capture: true,\n      passive: true\n    });\n    svgEl.addEventListener(\"keydown\", this._onKeyDown, { passive: false });\n    this.ctx.events.addEventListener(\"legendClick\", this._onLegendClick);\n  }\n  /**\n   * Removes all event listeners. Called from chart.destroy().\n   */\n  destroy() {\n    const w = this.w;\n    const svgEl = w.dom.Paper && w.dom.Paper.node;\n    if (!svgEl) return;\n    svgEl.removeEventListener(\"focus\", this._onFocus);\n    svgEl.removeEventListener(\"blur\", this._onBlur);\n    svgEl.removeEventListener(\"keydown\", this._onKeyDown);\n    svgEl.removeEventListener(\n      \"mousedown\",\n      this._onPointerDown,\n      /** @type {any} */\n      { capture: true }\n    );\n    svgEl.removeEventListener(\n      \"pointerdown\",\n      this._onPointerDown,\n      /** @type {any} */\n      { capture: true }\n    );\n    svgEl.removeEventListener(\n      \"touchstart\",\n      this._onPointerDown,\n      /** @type {any} */\n      { capture: true }\n    );\n    this.ctx.events.removeEventListener(\"legendClick\", this._onLegendClick);\n  }\n  // Records the timestamp of the most recent pointer-down inside the SVG.\n  // `_onFocus` reads this to distinguish keyboard-driven focus (no recent\n  // pointer activity) from mouse-driven focus (pointer event within the\n  // last 100 ms). Stays a no-op for keyboard users.\n  _onPointerDown() {\n    this._lastPointerDownAt = Date.now();\n  }\n  /**\n   * Called from Events.js keydown handler. Navigation keys are already handled\n   * by the direct SVG listener (which can call preventDefault). This entry\n   * point is intentionally a no-op — Events.js still fires the public keyDown\n   * callback and fireEvent('keydown') independently.\n   * @param {Event} _e\n   */\n  handleKey(_e) {\n  }\n  // ─── Focus / blur ─────────────────────────────────────────────────────────\n  _onFocus() {\n    if (!this._isNavEnabled()) return;\n    if (Date.now() - this._lastPointerDownAt < 100) {\n      return;\n    }\n    this.active = true;\n    this._clampCursor();\n    this._snapToVisibleRange();\n    this._showCurrentPoint();\n  }\n  _onBlur() {\n    this.active = false;\n    this._tooltipDismissed = false;\n    this._hideFocus();\n  }\n  // Called when the user clicks a legend item (collapse/expand a series).\n  // Hide the keyboard-nav tooltip — the chart is about to re-render and the\n  // current position may no longer be valid.\n  _onLegendClick() {\n    if (!this.active) return;\n    this.active = false;\n    this._hideFocus();\n  }\n  // ─── Key handler ──────────────────────────────────────────────────────────\n  /**\n   * @param {KeyboardEvent} e\n   */\n  _onKeyDown(e) {\n    var _a, _b, _c;\n    if (!this._isNavEnabled() || !this.active) return;\n    if (e.shiftKey && (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\") && this._canPan()) {\n      e.preventDefault();\n      this._panBy(e.key === \"ArrowRight\" ? 1 : -1);\n      return;\n    }\n    switch (e.key) {\n      case \"ArrowRight\":\n        e.preventDefault();\n        this._move(0, 1);\n        break;\n      case \"ArrowLeft\":\n        e.preventDefault();\n        this._move(0, -1);\n        break;\n      case \"ArrowUp\":\n        e.preventDefault();\n        this._move(-1, 0);\n        break;\n      case \"ArrowDown\":\n        e.preventDefault();\n        this._move(1, 0);\n        break;\n      case \"Home\":\n        e.preventDefault();\n        this.dataPointIndex = 0;\n        this._skipNullForward();\n        this._showCurrentPoint();\n        break;\n      case \"End\":\n        e.preventDefault();\n        this.dataPointIndex = this._getDataPointCount(this.seriesIndex) - 1;\n        this._skipNullBackward();\n        this._showCurrentPoint();\n        break;\n      case \"Enter\":\n      case \" \":\n        e.preventDefault();\n        this._fireClick();\n        break;\n      case \"+\":\n      case \"=\":\n        if (this._canZoom()) {\n          e.preventDefault();\n          (_a = this.ctx.toolbar) == null ? void 0 : _a.handleZoomIn();\n          this._announce(\"Zoomed in\");\n        }\n        break;\n      case \"-\":\n      case \"_\":\n        if (this._canZoom()) {\n          e.preventDefault();\n          (_b = this.ctx.toolbar) == null ? void 0 : _b.handleZoomOut();\n          this._announce(\"Zoomed out\");\n        }\n        break;\n      case \"0\":\n        if (this._canZoom() && this.w.interact.zoomed) {\n          e.preventDefault();\n          (_c = this.ctx.toolbar) == null ? void 0 : _c.handleZoomReset();\n          this._announce(\"Zoom reset\");\n        }\n        break;\n      case \"Escape\":\n        e.preventDefault();\n        if (!this._tooltipDismissed) {\n          this._tooltipDismissed = true;\n          this._hideFocus();\n        } else {\n          this.active = false;\n          this._tooltipDismissed = false;\n          this._hideFocus();\n        }\n        break;\n    }\n  }\n  // ─── Zoom / pan (keyboard alternatives for drag gestures) ─────────────────\n  _canZoom() {\n    const w = this.w;\n    return Boolean(\n      w.globals.axisCharts && w.config.chart.zoom && w.config.chart.zoom.enabled\n    );\n  }\n  _canPan() {\n    return this._canZoom();\n  }\n  /**\n   * Shift the visible x-range by ~10% in the given direction.\n   * @param {number} direction +1 = right, -1 = left\n   */\n  _panBy(direction) {\n    const w = this.w;\n    const toolbar = this.ctx.toolbar;\n    if (!toolbar) return;\n    const minX = Number(w.globals.minX);\n    const maxX = Number(w.globals.maxX);\n    if (!isFinite(minX) || !isFinite(maxX) || minX === maxX) return;\n    const span = maxX - minX;\n    const step = span * 0.1 * direction;\n    toolbar.zoomUpdateOptions(minX + step, maxX + step);\n    this._announce(direction > 0 ? \"Panned right\" : \"Panned left\");\n  }\n  // ─── Navigation ───────────────────────────────────────────────────────────\n  /**\n   * @param {number} dSeries\n   * @param {number} dPoint\n   */\n  _move(dSeries, dPoint) {\n    const w = this.w;\n    const wrapAround = w.config.chart.accessibility.keyboard.navigation.wrapAround;\n    if (dSeries !== 0) {\n      const ttCtx = this.w.globals.tooltip;\n      if (ttCtx && ttCtx.tConfig && ttCtx.tConfig.shared) {\n        const j = this.dataPointIndex;\n        const isActuallyShared = ttCtx.tooltipUtil && ttCtx.tooltipUtil.isXoverlap(j) && ttCtx.tooltipUtil.isInitialSeriesSameLen();\n        if (isActuallyShared) return;\n      }\n      const total = this._getSeriesCount();\n      let si = this.seriesIndex + dSeries;\n      let attempts = 0;\n      while (attempts < total) {\n        if (si < 0) si = wrapAround ? total - 1 : 0;\n        if (si >= total) si = wrapAround ? 0 : total - 1;\n        if (!w.globals.collapsedSeriesIndices.includes(si)) break;\n        si += dSeries;\n        attempts++;\n      }\n      this.seriesIndex = si;\n      const dpCount = this._getDataPointCount(si);\n      if (this.dataPointIndex >= dpCount) {\n        this.dataPointIndex = dpCount - 1;\n      }\n    }\n    if (dPoint !== 0) {\n      const dpCount = this._getDataPointCount(this.seriesIndex);\n      let di = this.dataPointIndex + dPoint;\n      if (di < 0) di = wrapAround ? dpCount - 1 : 0;\n      if (di >= dpCount) di = wrapAround ? 0 : dpCount - 1;\n      this.dataPointIndex = di;\n      if (dPoint > 0) {\n        this._skipNullForward();\n      } else {\n        this._skipNullBackward();\n      }\n      if (!this._isDataPointVisible(this.seriesIndex, this.dataPointIndex)) {\n        this._snapToVisibleRangeInDirection(dPoint);\n      }\n    }\n    this._showCurrentPoint();\n  }\n  /** Advance dataPointIndex forward past any nulls */\n  _skipNullForward() {\n    const w = this.w;\n    const si = this.seriesIndex;\n    const dpCount = this._getDataPointCount(si);\n    let di = this.dataPointIndex;\n    let attempts = 0;\n    if (!Array.isArray(w.seriesData.series[si])) return;\n    while (attempts < dpCount && w.seriesData.series[si][di] === null) {\n      di = (di + 1) % dpCount;\n      attempts++;\n    }\n    this.dataPointIndex = di;\n  }\n  /** Retreat dataPointIndex backward past any nulls */\n  _skipNullBackward() {\n    const w = this.w;\n    const si = this.seriesIndex;\n    const dpCount = this._getDataPointCount(si);\n    let di = this.dataPointIndex;\n    let attempts = 0;\n    if (!Array.isArray(w.seriesData.series[si])) return;\n    while (attempts < dpCount && w.seriesData.series[si][di] === null) {\n      di = (di - 1 + dpCount) % dpCount;\n      attempts++;\n    }\n    this.dataPointIndex = di;\n  }\n  // ─── Display ──────────────────────────────────────────────────────────────\n  _showCurrentPoint() {\n    const { seriesIndex: i, dataPointIndex: j } = this;\n    const w = this.w;\n    const ttCtx = w.globals.tooltip;\n    if (!ttCtx || !ttCtx.ttItems) return;\n    w.interact.capturedSeriesIndex = i;\n    w.interact.capturedDataPointIndex = j;\n    this._applyFocusClass(i, j);\n    this._showTooltip(\n      i,\n      j,\n      /** @type {any} */\n      ttCtx\n    );\n  }\n  _hideFocus() {\n    const w = this.w;\n    const ttCtx = (\n      /** @type {any} */\n      w.globals.tooltip\n    );\n    this._removeFocusClass();\n    this._leaveHoveredBar();\n    if (!ttCtx) return;\n    if (ttCtx.marker) {\n      ttCtx.marker.resetPointsSize();\n    }\n    this._enlargedScatterMarker = null;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (tooltipEl) {\n      tooltipEl.classList.remove(\"apexcharts-active\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n        tooltipEl.setAttribute(\"aria-hidden\", \"true\");\n      }\n    }\n    w.dom.baseEl.classList.remove(\"apexcharts-tooltip-active\");\n    const xcrosshairs = ttCtx.getElXCrosshairs();\n    if (xcrosshairs) xcrosshairs.classList.remove(\"apexcharts-active\");\n  }\n  // ─── Tooltip display per chart type ───────────────────────────────────────\n  /**\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showTooltip(i, j, ttCtx) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (!tooltipEl) return;\n    const cachedDims = ttCtx.getCachedDimensions();\n    ttCtx.tooltipRect = {\n      x: 0,\n      y: 0,\n      ttWidth: cachedDims.ttWidth || 0,\n      ttHeight: cachedDims.ttHeight || 0\n    };\n    this._setSyntheticEvent(i, j, ttCtx);\n    w.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n    tooltipEl.classList.add(\"apexcharts-active\");\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n      tooltipEl.removeAttribute(\"aria-hidden\");\n    }\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      this._showTooltipNonAxis(i, j, ttCtx, tooltipEl);\n    } else if (type === \"radialBar\") {\n      this._showTooltipRadialBar(i, j, ttCtx, tooltipEl);\n    } else if (type === \"heatmap\" || type === \"treemap\") {\n      this._showTooltipHeatTree(i, j, ttCtx, tooltipEl, type);\n    } else if (type === \"bar\" || type === \"candlestick\" || type === \"boxPlot\" || type === \"violin\" || type === \"rangeBar\") {\n      this._showTooltipBar(i, j, ttCtx);\n    } else {\n      this._showTooltipAxisLine(i, j, ttCtx);\n    }\n  }\n  /**\n   * Set ttCtx.e to a synthetic mouse-event-like object whose clientX/Y point\n   * to the centre of the current data-point element.  This ensures that any\n   * positioning helper that reads ttCtx.e (followCursor path in moveTooltip,\n   * moveStickyTooltipOverBars, moveDynamicPointsOnHover, etc.) gets valid\n   * coordinates rather than crashing on undefined.\n   *\n   * For chart types that don't have a concrete SVG element per data point\n   * (pie, radialBar) we fall back to the SVG centre.\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _setSyntheticEvent(i, j, ttCtx) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    let clientX = 0;\n    let clientY = 0;\n    const el = this._getFocusableElement(i, j);\n    if (el) {\n      const rect = el.getBoundingClientRect();\n      clientX = rect.left + rect.width / 2;\n      clientY = rect.top + rect.height / 2;\n    } else if (w.globals.pointsArray && w.globals.pointsArray[i] && w.globals.pointsArray[i][j]) {\n      const pt = w.globals.pointsArray[i][j];\n      const elGrid = ttCtx.getElGrid && ttCtx.getElGrid();\n      if (elGrid) {\n        const gridRect = elGrid.getBoundingClientRect();\n        clientX = gridRect.left + (pt[0] || 0);\n        clientY = gridRect.top + (pt[1] || 0);\n      }\n    } else {\n      const svgEl = w.dom.Paper && w.dom.Paper.node;\n      if (svgEl) {\n        const svgRect = svgEl.getBoundingClientRect();\n        clientX = svgRect.left + svgRect.width / 2;\n        clientY = svgRect.top + svgRect.height / 2;\n      }\n    }\n    if (type === \"line\" || type === \"area\" || type === \"rangeArea\" || type === \"scatter\" || type === \"bubble\" || type === \"radar\") {\n      if (w.globals.pointsArray && w.globals.pointsArray[i] && w.globals.pointsArray[i][j]) {\n        const pt = w.globals.pointsArray[i][j];\n        const elGrid = ttCtx.getElGrid && ttCtx.getElGrid();\n        if (elGrid) {\n          const gridRect = elGrid.getBoundingClientRect();\n          clientX = gridRect.left + (pt[0] || 0);\n          clientY = gridRect.top + (pt[1] || 0);\n        }\n      }\n    }\n    ttCtx.e = { type: \"mousemove\", clientX, clientY };\n  }\n  /**\n   * bar / column / candlestick / boxPlot / rangeBar\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showTooltipBar(i, j, ttCtx) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const shared = ttCtx.tConfig.shared && (ttCtx.tooltipUtil.isXoverlap(j) || w.globals.isBarHorizontal) && ttCtx.tooltipUtil.isInitialSeriesSameLen();\n    const rangeData = (\n      /** @type {any} */\n      (_d = (_c = (_b = (_a = w.rangeData.seriesRange) == null ? void 0 : _a[i]) == null ? void 0 : _b[j]) == null ? void 0 : _c.y) == null ? void 0 : _d[0]\n    );\n    ttCtx.tooltipLabels.drawSeriesTexts(__spreadProps(__spreadValues(__spreadValues({\n      ttItems: ttCtx.ttItems,\n      i,\n      j\n    }, (rangeData == null ? void 0 : rangeData.y1) !== void 0 && { y1: rangeData.y1 }), (rangeData == null ? void 0 : rangeData.y2) !== void 0 && { y2: rangeData.y2 }), {\n      shared\n    }));\n    const parent = `.apexcharts-series[data\\\\:realIndex='${i}']`;\n    const elPath = w.dom.Paper.findOne(\n      `${parent} path[j='${j}'], ${parent} circle[j='${j}'], ${parent} rect[j='${j}']`\n    );\n    if (elPath) {\n      this._leaveHoveredBar();\n      const graphics = new Graphics(this.w, this.ctx);\n      graphics.pathMouseEnter(elPath, null);\n      this._hoveredBarEl = elPath;\n    }\n    if (w.globals.isBarHorizontal) {\n      const barDomEl = elPath && elPath.node;\n      if (barDomEl) {\n        const wrapRect = w.dom.elWrap.getBoundingClientRect();\n        const barRect = barDomEl.getBoundingClientRect();\n        const barCx = barRect.left - wrapRect.left;\n        const barCy = barRect.top - wrapRect.top;\n        const bh = barRect.height;\n        const bw = barRect.width;\n        const ttWidth = ttCtx.tooltipRect.ttWidth || 0;\n        const ttHeight = ttCtx.tooltipRect.ttHeight || 0;\n        const y = barCy + bh / 2 - ttHeight / 2;\n        let x = barCx + bw;\n        const baselineX = ttCtx.xyRatios && ttCtx.xyRatios.baseLineInvertedY != null ? ttCtx.xyRatios.baseLineInvertedY : wrapRect.width / 2;\n        if (barCx < baselineX) {\n          x = barCx - ttWidth;\n        }\n        const tooltipEl = ttCtx.getElTooltip();\n        if (tooltipEl) {\n          tooltipEl.style.left = x + \"px\";\n          tooltipEl.style.top = y + \"px\";\n        }\n      }\n    } else {\n      ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, i);\n    }\n  }\n  /**\n   * line / area / scatter / bubble / radar / rangeArea\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showTooltipAxisLine(i, j, ttCtx) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const sharedConfigured = ttCtx.tConfig.shared;\n    const shared = sharedConfigured && ttCtx.tooltipUtil.isXoverlap(j) && ttCtx.tooltipUtil.isInitialSeriesSameLen();\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i,\n      j,\n      shared\n    });\n    const isScatterLike = type === \"scatter\" || type === \"bubble\";\n    const hasVisibleMarkers = w.globals.markers.largestSize > 0;\n    if (isScatterLike) {\n      this._showScatterBubblePoint(i, j, ttCtx);\n    } else if (hasVisibleMarkers) {\n      if (shared) {\n        ttCtx.marker.enlargePoints(j);\n      } else {\n        ttCtx.tooltipPosition.moveDynamicPointOnHover(j, i);\n      }\n    } else if (shared) {\n      ttCtx.tooltipPosition.moveDynamicPointsOnHover(j);\n    } else {\n      ttCtx.tooltipPosition.moveDynamicPointOnHover(j, i);\n    }\n  }\n  /**\n   * Scatter / bubble: find the specific marker element for (seriesIndex i,\n   * dataPointIndex j), resize only that element, and position the tooltip at\n   * its coordinates — mirroring what Position.moveMarkers does for mouse hover.\n   *\n   * Unlike enlargePoints(j) which queries ALL series for rel===j (causing\n   * multiple bubbles to enlarge and tooltip to land on the wrong one), this\n   * method queries by both series index AND data-point index for precision.\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showScatterBubblePoint(i, j, ttCtx) {\n    const baseEl = this.w.dom.baseEl;\n    if (this._enlargedScatterMarker) {\n      ttCtx.marker.oldPointSize(this._enlargedScatterMarker);\n      this._enlargedScatterMarker = null;\n    }\n    const seriesEl = baseEl.querySelector(\n      `.apexcharts-series[data\\\\:realIndex='${i}']`\n    );\n    if (!seriesEl) return;\n    const markerEl = seriesEl.querySelector(`.apexcharts-marker[rel='${j}']`);\n    if (!markerEl) return;\n    ttCtx.marker.enlargeCurrentPoint(j, markerEl);\n    this._enlargedScatterMarker = markerEl;\n  }\n  /**\n   * pie / donut / polarArea\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   * @param {HTMLElement} tooltipEl\n   */\n  _showTooltipNonAxis(i, j, ttCtx, tooltipEl) {\n    var _a, _b;\n    const w = this.w;\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i: j,\n      shared: false\n    });\n    const tooltipBound = tooltipEl.getBoundingClientRect();\n    const ttWidth = tooltipBound.width || ttCtx.tooltipRect.ttWidth || 0;\n    const ttHeight = tooltipBound.height || ttCtx.tooltipRect.ttHeight || 0;\n    const sliceEl = w.dom.baseEl.querySelector(`.apexcharts-pie-area[j='${j}']`);\n    if (sliceEl) {\n      const cx = parseFloat((_a = sliceEl.getAttribute(\"data:cx\")) != null ? _a : \"\");\n      const cy = parseFloat((_b = sliceEl.getAttribute(\"data:cy\")) != null ? _b : \"\");\n      if (!isNaN(cx) && !isNaN(cy)) {\n        const svgBound = w.dom.Paper.node.getBoundingClientRect();\n        const wrapBound = w.dom.elWrap.getBoundingClientRect();\n        const offsetX = svgBound.left - wrapBound.left;\n        const offsetY = svgBound.top - wrapBound.top;\n        tooltipEl.style.left = offsetX + cx - ttWidth / 2 + \"px\";\n        tooltipEl.style.top = offsetY + cy - ttHeight - 10 + \"px\";\n      }\n    }\n  }\n  /**\n   * radialBar — one ring per series, single value each\n   * @param {number} i\n   * @param {any} _j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   * @param {HTMLElement} tooltipEl\n   */\n  _showTooltipRadialBar(i, _j, ttCtx, tooltipEl) {\n    var _a;\n    const w = this.w;\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i,\n      shared: false\n    });\n    const { ttWidth = 0, ttHeight = 0 } = ttCtx.getCachedDimensions();\n    const arcEl = w.dom.baseEl.querySelector(\n      `.apexcharts-radialbar-series[data\\\\:realIndex='${i}'] path`\n    );\n    if (arcEl) {\n      const angle = parseFloat((_a = arcEl.getAttribute(\"data:angle\")) != null ? _a : \"\") || 0;\n      const initialAngle = w.config.plotOptions.radialBar.startAngle || 0;\n      const midAngle = initialAngle + angle / 2;\n      const centerX = w.layout.gridWidth / 2;\n      const centerY = w.layout.gridHeight / 2;\n      const radialSize = w.globals.radialSize || Math.min(w.layout.gridWidth, w.layout.gridHeight) / 2;\n      const seriesCount = w.seriesData.series.length;\n      const trackSize = radialSize / Math.max(seriesCount, 1);\n      const outerRadius = radialSize - i * trackSize;\n      const innerRadius = outerRadius - trackSize;\n      const ringRadius = (outerRadius + innerRadius) / 2;\n      const centroid = Utils$1.polarToCartesian(\n        centerX,\n        centerY,\n        ringRadius,\n        midAngle\n      );\n      const x = centroid.x + (w.layout.translateX || 0);\n      const y = centroid.y + (w.layout.translateY || 0);\n      tooltipEl.style.left = x - ttWidth / 2 + \"px\";\n      tooltipEl.style.top = y - ttHeight - 10 + \"px\";\n    }\n  }\n  /**\n   * heatmap / treemap — position tooltip using element bounding rect\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   * @param {HTMLElement} tooltipEl\n   * @param {string} type\n   */\n  _showTooltipHeatTree(i, j, ttCtx, tooltipEl, type) {\n    var _a, _b;\n    const w = this.w;\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i,\n      j,\n      shared: false\n    });\n    const tooltipRect = tooltipEl.getBoundingClientRect();\n    const ttWidth = tooltipRect.width || ttCtx.tooltipRect.ttWidth || 0;\n    const ttHeight = tooltipRect.height || ttCtx.tooltipRect.ttHeight || 0;\n    const rectClass = type === \"heatmap\" ? \"apexcharts-heatmap-rect\" : \"apexcharts-treemap-rect\";\n    const cell = w.dom.baseEl.querySelector(`.${rectClass}[i='${i}'][j='${j}']`);\n    if (cell) {\n      const wrapRect = w.dom.elWrap.getBoundingClientRect();\n      const cellRect = cell.getBoundingClientRect();\n      const cellCx = cellRect.left - wrapRect.left;\n      const cellCy = cellRect.top - wrapRect.top;\n      const cellWidth = cellRect.width;\n      const cellHeight = cellRect.height;\n      const cx = parseFloat((_a = cell.getAttribute(\"cx\")) != null ? _a : \"\");\n      const cellWidthAttr = parseFloat((_b = cell.getAttribute(\"width\")) != null ? _b : \"\");\n      ttCtx.tooltipPosition.moveXCrosshairs(cx + cellWidthAttr / 2);\n      let x = cellCx + cellWidth + ttWidth / 2;\n      const y = cellCy + cellHeight / 2 - ttHeight / 2;\n      if (cellCx + cellWidth > w.layout.gridWidth / 2) {\n        x = cellCx - ttWidth / 2;\n      }\n      tooltipEl.style.left = x + \"px\";\n      tooltipEl.style.top = y + \"px\";\n    }\n  }\n  // ─── Focus class management ───────────────────────────────────────────────\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  _applyFocusClass(i, j) {\n    this._removeFocusClass();\n    const el = this._getFocusableElement(i, j);\n    if (el) {\n      el.classList.add(\"apexcharts-keyboard-focused\");\n      el.setAttribute(\"role\", \"img\");\n      const label = this._buildPointLabel(i, j);\n      if (label) el.setAttribute(\"aria-label\", label);\n      this._focusedEl = el;\n    }\n  }\n  _removeFocusClass() {\n    if (this._focusedEl) {\n      this._focusedEl.classList.remove(\"apexcharts-keyboard-focused\");\n      this._focusedEl.removeAttribute(\"role\");\n      this._focusedEl.removeAttribute(\"aria-label\");\n      this._focusedEl = null;\n    }\n  }\n  /**\n   * Build an accessible label for the data point at (i, j) using the same\n   * formatters the visible tooltip / axis labels use, so SR output matches\n   * the visual presentation.\n   * @param {number} i\n   * @param {number} j\n   * @returns {string}\n   */\n  _buildPointLabel(i, j) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const w = this.w;\n    const type = w.config.chart.type;\n    const seriesNames = w.seriesData.seriesNames || [];\n    const series = w.seriesData.series || [];\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      const sliceLabel = (_b = ((_a = w.labelData) == null ? void 0 : _a.labels) && w.labelData.labels[j]) != null ? _b : \"\";\n      const value = Array.isArray(series) ? series[j] : \"\";\n      return sliceLabel ? `${sliceLabel}: ${value}` : `${value}`;\n    }\n    if (type === \"radialBar\") {\n      const seriesName2 = seriesNames[i] || `Series ${i + 1}`;\n      const value = Array.isArray(series) ? series[i] : \"\";\n      return `${seriesName2}: ${value}`;\n    }\n    const seriesName = seriesNames[i] || `Series ${i + 1}`;\n    const row = Array.isArray(series[i]) ? series[i] : [];\n    const rawValue = row[j];\n    let formattedValue = rawValue == null ? \"\" : String(rawValue);\n    const yFormatter = (_d = (_c = w.formatters) == null ? void 0 : _c.yLabelFormatters) == null ? void 0 : _d[i];\n    if (typeof yFormatter === \"function\") {\n      try {\n        formattedValue = yFormatter(rawValue, {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        });\n      } catch (e) {\n      }\n    }\n    let category = \"\";\n    const categoryLabels = (_e = w.labelData) == null ? void 0 : _e.categoryLabels;\n    const seriesX = (_g = (_f = w.seriesData) == null ? void 0 : _f.seriesX) == null ? void 0 : _g[i];\n    if (Array.isArray(categoryLabels) && categoryLabels[j] != null) {\n      category = String(categoryLabels[j]);\n    } else if (Array.isArray(seriesX) && seriesX[j] != null) {\n      const xFormatter = (_h = w.formatters) == null ? void 0 : _h.xLabelFormatter;\n      if (typeof xFormatter === \"function\") {\n        try {\n          category = String(\n            xFormatter(seriesX[j], { seriesIndex: i, dataPointIndex: j, w })\n          );\n        } catch (e) {\n          category = String(seriesX[j]);\n        }\n      } else {\n        category = String(seriesX[j]);\n      }\n    }\n    return category ? `${seriesName}: ${formattedValue}, ${category}` : `${seriesName}: ${formattedValue}`;\n  }\n  _leaveHoveredBar() {\n    if (this._hoveredBarEl) {\n      const graphics = new Graphics(this.w, this.ctx);\n      graphics.pathMouseLeave(this._hoveredBarEl, null);\n      this._hoveredBarEl = null;\n    }\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  _getFocusableElement(i, j) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const baseEl = w.dom.baseEl;\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      return baseEl.querySelector(`.apexcharts-pie-area[j='${j}']`);\n    }\n    if (type === \"heatmap\") {\n      return baseEl.querySelector(\n        `.apexcharts-heatmap-rect[i='${i}'][j='${j}']`\n      );\n    }\n    if (type === \"treemap\") {\n      return baseEl.querySelector(\n        `.apexcharts-treemap-rect[i='${i}'][j='${j}']`\n      );\n    }\n    if (type === \"radialBar\") {\n      return baseEl.querySelector(\n        `.apexcharts-radialbar-series[data\\\\:realIndex='${i}'] path`\n      );\n    }\n    if (type === \"bar\" || type === \"candlestick\" || type === \"boxPlot\" || type === \"violin\" || type === \"rangeBar\") {\n      return baseEl.querySelector(\n        `.apexcharts-series[data\\\\:realIndex='${i}'] path[j='${j}']`\n      );\n    }\n    const marker = baseEl.querySelector(\n      `.apexcharts-series[data\\\\:realIndex='${i}'] .apexcharts-marker[rel='${j}']`\n    );\n    return marker || null;\n  }\n  // ─── Click / Enter ────────────────────────────────────────────────────────\n  _fireClick() {\n    const w = this.w;\n    const ttCtx = w.globals.tooltip;\n    if (!ttCtx) return;\n    const syntheticEvent = {\n      type: \"mouseup\",\n      clientX: 0,\n      clientY: 0\n    };\n    ttCtx.markerClick(syntheticEvent, this.seriesIndex, this.dataPointIndex);\n  }\n  // ─── Helpers ──────────────────────────────────────────────────────────────\n  _isNavEnabled() {\n    const a11y = this.w.config.chart.accessibility;\n    return a11y.enabled && a11y.keyboard.enabled && a11y.keyboard.navigation.enabled;\n  }\n  _getSeriesCount() {\n    const w = this.w;\n    const type = w.config.chart.type;\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      return 1;\n    }\n    return w.seriesData.series.length;\n  }\n  /**\n   * @param {number} si\n   */\n  _getDataPointCount(si) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      return w.seriesData.series.length;\n    }\n    const series = w.seriesData.series;\n    return series[si] && Array.isArray(series[si]) ? series[si].length : 0;\n  }\n  _clampCursor() {\n    const seriesCount = this._getSeriesCount();\n    if (this.seriesIndex >= seriesCount) this.seriesIndex = seriesCount - 1;\n    if (this.seriesIndex < 0) this.seriesIndex = 0;\n    const dpCount = this._getDataPointCount(this.seriesIndex);\n    if (this.dataPointIndex >= dpCount) this.dataPointIndex = dpCount - 1;\n    if (this.dataPointIndex < 0) this.dataPointIndex = 0;\n  }\n  /**\n   * When the chart is zoomed in, the current dataPointIndex may point to a\n   * data point that is outside the visible viewport. Snap the cursor to the\n   * first data point whose x-value falls within [minX, maxX].\n   *\n   * Only adjusts when w.seriesData.seriesX is populated (numeric/datetime axes).\n   * Category-only charts (seriesX entries are strings or auto-indices) are\n   * unaffected — all points are always visible.\n   */\n  _snapToVisibleRange() {\n    const w = this.w;\n    const gl = w.globals;\n    const si = this.seriesIndex;\n    if (!w.interact.zoomed) return;\n    const seriesX = w.seriesData.seriesX && w.seriesData.seriesX[si];\n    if (!seriesX || !seriesX.length) return;\n    const minX = gl.minX;\n    const maxX = gl.maxX;\n    if (minX === void 0 || maxX === void 0) return;\n    const currentX = seriesX[this.dataPointIndex];\n    if (currentX >= minX && currentX <= maxX) return;\n    const dpCount = seriesX.length;\n    for (let di = 0; di < dpCount; di++) {\n      if (seriesX[di] >= minX && seriesX[di] <= maxX) {\n        this.dataPointIndex = di;\n        return;\n      }\n    }\n  }\n  /**\n   * Snap to the nearest visible data point in the given navigation direction.\n   * direction > 0 → find the first visible point (left boundary of zoomed range)\n   * direction < 0 → find the last visible point (right boundary of zoomed range)\n   * @param {number} direction\n   */\n  _snapToVisibleRangeInDirection(direction) {\n    const w = this.w;\n    const gl = w.globals;\n    const si = this.seriesIndex;\n    const seriesX = w.seriesData.seriesX && w.seriesData.seriesX[si];\n    if (!seriesX || !seriesX.length) return;\n    const minX = gl.minX;\n    const maxX = gl.maxX;\n    if (minX === void 0 || maxX === void 0) return;\n    const dpCount = seriesX.length;\n    if (direction >= 0) {\n      for (let di = 0; di < dpCount; di++) {\n        if (seriesX[di] >= minX && seriesX[di] <= maxX) {\n          this.dataPointIndex = di;\n          return;\n        }\n      }\n    } else {\n      for (let di = dpCount - 1; di >= 0; di--) {\n        if (seriesX[di] >= minX && seriesX[di] <= maxX) {\n          this.dataPointIndex = di;\n          return;\n        }\n      }\n    }\n  }\n  /**\n   * Check whether the data point at (si, di) is within the current visible\n   * x-axis range. Used to skip out-of-viewport points during keyboard nav.\n   * @param {number} si\n   * @param {number} di\n   */\n  _isDataPointVisible(si, di) {\n    const w = this.w;\n    const gl = w.globals;\n    if (!w.interact.zoomed) return true;\n    const seriesX = w.seriesData.seriesX && w.seriesData.seriesX[si];\n    if (!seriesX) return true;\n    const x = seriesX[di];\n    if (x === void 0) return true;\n    return x >= gl.minX && x <= gl.maxX;\n  }\n  /**\n   * Push a short status message to the visually-hidden aria-live region so\n   * screen readers announce zoom / pan / reset events that have no inherent\n   * tooltip update. Silently no-op if the region is missing or announcements\n   * are disabled.\n   * @param {string} message\n   */\n  _announce(message) {\n    const w = this.w;\n    if (!w.config.chart.accessibility.announcements.enabled) return;\n    const baseEl = w.dom.baseEl;\n    if (!baseEl) return;\n    const region = baseEl.querySelector(\".apexcharts-sr-status\");\n    if (!region) return;\n    region.textContent = \"\";\n    setTimeout(() => {\n      region.textContent = message;\n    }, 0);\n  }\n}\nApexCharts.registerFeatures({ keyboardNavigation: KeyboardNavigation });\nconst BAR_FAMILY = /* @__PURE__ */ new Set([\"bar\", \"funnel\", \"pyramid\"]);\nconst RADIAL_FAMILY = /* @__PURE__ */ new Set([\"pie\", \"donut\", \"polarArea\", \"radialBar\", \"gauge\"]);\nfunction familyOf(type) {\n  if (BAR_FAMILY.has(type)) return \"bar\";\n  if (RADIAL_FAMILY.has(type)) return \"radial\";\n  return null;\n}\nclass MorphTypeChange {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this._snapshot = null;\n  }\n  /**\n   * @param {string} fromType\n   * @param {string} toType\n   * @returns {boolean}\n   */\n  canMorphTypes(fromType, toType) {\n    if (fromType === toType) return false;\n    const ff = familyOf(fromType);\n    const tf = familyOf(toType);\n    if (!ff || !tf) return false;\n    return true;\n  }\n  /**\n   * @param {string} fromType\n   * @param {string} toType\n   * @param {any} newSeries\n   * @returns {boolean}\n   */\n  isCompatibleSeriesShape(fromType, toType, newSeries) {\n    if (!Array.isArray(newSeries) || newSeries.length === 0) return false;\n    const ff = familyOf(fromType);\n    const tf = familyOf(toType);\n    if (tf === \"radial\") {\n      if (newSeries.every((v) => typeof v === \"number\")) return true;\n      return newSeries.length === 1 && newSeries[0] && typeof newSeries[0] === \"object\" && Array.isArray(newSeries[0].data);\n    }\n    if (tf === \"bar\") {\n      return newSeries.every(\n        (s) => s && typeof s === \"object\" && Array.isArray(s.data)\n      );\n    }\n    return ff !== null && tf !== null;\n  }\n  /**\n   * Capture the live DOM of the *current* (outgoing) chart and stash it on\n   * this module. Called from `apexcharts._updateOptions` before the config\n   * merge that flips `chart.type`.\n   *\n   * Returns true if a morph is queued — caller doesn't need the value, but\n   * tests use it.\n   *\n   * @param {{ fromType: string, toType: string, newSeries: any }} args\n   * @returns {boolean}\n   */\n  captureBeforeDestroy({ fromType, toType, newSeries }) {\n    this._snapshot = null;\n    if (!Environment.isBrowser()) return false;\n    const animCfg = this.w.config.chart.animations;\n    if (!animCfg || animCfg.enabled === false) return false;\n    if (animCfg.chartTypeMorph && animCfg.chartTypeMorph.enabled === false)\n      return false;\n    if (animCfg.respectReducedMotion && prefersReducedMotion()) return false;\n    if (!this.canMorphTypes(fromType, toType)) return false;\n    if (!this.isCompatibleSeriesShape(fromType, toType, newSeries)) return false;\n    const captured = this._captureFromDOM(fromType);\n    if (!captured.length) return false;\n    const mapping = this._buildMapping(captured, fromType, toType, newSeries);\n    if (mapping.size === 0) return false;\n    this._snapshot = {\n      fromType,\n      toType,\n      mapping,\n      oldLayout: {\n        translateX: this.w.layout.translateX || 0,\n        translateY: this.w.layout.translateY || 0\n      }\n    };\n    this.w.globals.previousPaths = [];\n    return true;\n  }\n  /**\n   * Walk the outgoing chart's DOM and collect path `d` strings keyed by\n   * (realIndex, j). The selectors are scoped to the chart family — bar\n   * elements have `pathTo` set; pie/radial elements use their final `d`.\n   *\n   * @param {string} fromType\n   * @returns {Array<{ realIndex: number, j: number, d: string, fill: string|null }>}\n   */\n  _captureFromDOM(fromType) {\n    var _a;\n    const baseEl = (_a = this.w.globals.dom) == null ? void 0 : _a.baseEl;\n    if (!baseEl) return [];\n    const captured = [];\n    const fam = familyOf(fromType);\n    if (fam === \"bar\") {\n      const seriesNodes = baseEl.querySelectorAll(\n        \".apexcharts-bar-series .apexcharts-series\"\n      );\n      seriesNodes.forEach((seriesNode) => {\n        var _a2;\n        const realIndex = parseInt(\n          (_a2 = seriesNode.getAttribute(\"data:realIndex\")) != null ? _a2 : \"0\",\n          10\n        );\n        const paths = seriesNode.querySelectorAll(\"path[pathTo]\");\n        paths.forEach((p, j) => {\n          const d = p.getAttribute(\"pathTo\") || p.getAttribute(\"d\");\n          if (!d) return;\n          captured.push({\n            realIndex,\n            j,\n            d,\n            fill: p.getAttribute(\"fill\")\n          });\n        });\n      });\n    } else if (fam === \"radial\") {\n      if (fromType === \"radialBar\" || fromType === \"gauge\") {\n        const centerX = this.w.layout.gridWidth / 2;\n        const centerY = Math.min(this.w.layout.gridWidth, this.w.layout.gridHeight) / 2;\n        const rings = baseEl.querySelectorAll(\n          \".apexcharts-radial-series .apexcharts-radialbar-area\"\n        );\n        rings.forEach((p) => {\n          var _a2;\n          const parent = (\n            /** @type {Element|null} */\n            p.parentElement\n          );\n          const realIndex = parseInt(\n            (_a2 = parent == null ? void 0 : parent.getAttribute(\"data:realIndex\")) != null ? _a2 : \"0\",\n            10\n          );\n          const rawD = p.getAttribute(\"d\");\n          if (!rawD) return;\n          const strokeWidth = parseFloat(p.getAttribute(\"stroke-width\") || \"0\");\n          const d = strokeWidth > 1 ? this._radialArcToFilledSegment(\n            rawD,\n            strokeWidth,\n            centerX,\n            centerY\n          ) || rawD : rawD;\n          captured.push({\n            realIndex,\n            j: 0,\n            d,\n            fill: p.getAttribute(\"stroke\")\n          });\n        });\n      } else {\n        const slices = baseEl.querySelectorAll(\n          \".apexcharts-pie-series .apexcharts-pie-area\"\n        );\n        slices.forEach(\n          (p, i) => {\n            const d = p.getAttribute(\"d\");\n            if (!d) return;\n            captured.push({\n              realIndex: i,\n              j: 0,\n              d,\n              fill: p.getAttribute(\"fill\")\n            });\n          }\n        );\n      }\n    }\n    return captured;\n  }\n  /**\n   * Convert a radialBar's stroked open-arc `d` (\"M x1 y1 A r r 0 large sweep\n   * x2 y2\") into a closed donut-segment polygon whose FILLED rendering\n   * visually matches the original stroked arc — needed because the morph\n   * target (pie/donut/polarArea) renders by fill, not stroke. Returns null\n   * if the input doesn't match the expected M-then-A shape.\n   *\n   * @param {string} rawD\n   * @param {number} strokeWidth\n   * @param {number} centerX\n   * @param {number} centerY\n   * @returns {string | null}\n   */\n  _radialArcToFilledSegment(rawD, strokeWidth, centerX, centerY) {\n    const m = rawD.match(\n      /M\\s*(-?[\\d.]+)\\s+(-?[\\d.]+)\\s+A\\s*(-?[\\d.]+)\\s+(?:-?[\\d.]+)\\s+(?:-?[\\d.]+)\\s+(\\d)\\s+(\\d)\\s+(-?[\\d.]+)\\s+(-?[\\d.]+)/\n    );\n    if (!m) return null;\n    const x1 = parseFloat(m[1]);\n    const y1 = parseFloat(m[2]);\n    const r = parseFloat(m[3]);\n    const large = parseInt(m[4], 10);\n    const sweep = parseInt(m[5], 10);\n    const x2 = parseFloat(m[6]);\n    const y2 = parseFloat(m[7]);\n    if (!isFinite(r) || r <= 0) return null;\n    const half = strokeWidth / 2;\n    const rOuter = r + half;\n    const rInner = Math.max(0, r - half);\n    const proj = (px, py, newR) => {\n      const dx = px - centerX;\n      const dy = py - centerY;\n      const dist = Math.sqrt(dx * dx + dy * dy);\n      if (dist === 0) return { x: centerX, y: centerY };\n      const k = newR / dist;\n      return { x: centerX + dx * k, y: centerY + dy * k };\n    };\n    const o1 = proj(x1, y1, rOuter);\n    const o2 = proj(x2, y2, rOuter);\n    const i1 = proj(x1, y1, rInner);\n    const i2 = proj(x2, y2, rInner);\n    const sweepBack = sweep ? 0 : 1;\n    return `M ${o1.x} ${o1.y} A ${rOuter} ${rOuter} 0 ${large} ${sweep} ${o2.x} ${o2.y} L ${i2.x} ${i2.y} A ${rInner} ${rInner} 0 ${large} ${sweepBack} ${i1.x} ${i1.y} Z`;\n  }\n  /**\n   * Build a closed donut-segment path for the given polar arc geometry. Used\n   * by Radial.drawArcs when morphing FROM a filled wedge (pie/donut/polarArea)\n   * TO a radialBar arc: the final radialBar is rendered as a stroked open arc,\n   * but during the morph we tween d toward this closed-segment form (which\n   * looks identical to the stroked arc when filled with the same color) so\n   * the in-between frames remain visually consistent filled shapes rather\n   * than a thick-outlined wedge.\n   *\n   * @param {number} centerX\n   * @param {number} centerY\n   * @param {number} ringRadius - centerline radius of the radialBar ring\n   * @param {number} strokeWidth - the ring's stroke thickness\n   * @param {number} startAngleDeg - in degrees, 0° = top (12 o'clock)\n   * @param {number} endAngleDeg\n   * @returns {string}\n   */\n  buildRingSegmentPath(centerX, centerY, ringRadius, strokeWidth, startAngleDeg, endAngleDeg) {\n    const halfStroke = strokeWidth / 2;\n    const rOuter = ringRadius + halfStroke;\n    const rInner = Math.max(0, ringRadius - halfStroke);\n    const sRad = (startAngleDeg - 90) * Math.PI / 180;\n    const eRad = (endAngleDeg - 90) * Math.PI / 180;\n    const oStart = {\n      x: centerX + rOuter * Math.cos(sRad),\n      y: centerY + rOuter * Math.sin(sRad)\n    };\n    const oEnd = {\n      x: centerX + rOuter * Math.cos(eRad),\n      y: centerY + rOuter * Math.sin(eRad)\n    };\n    const iStart = {\n      x: centerX + rInner * Math.cos(sRad),\n      y: centerY + rInner * Math.sin(sRad)\n    };\n    const iEnd = {\n      x: centerX + rInner * Math.cos(eRad),\n      y: centerY + rInner * Math.sin(eRad)\n    };\n    const sweep = endAngleDeg > startAngleDeg ? 1 : 0;\n    const large = Math.abs(endAngleDeg - startAngleDeg) > 180 ? 1 : 0;\n    return `M ${oStart.x} ${oStart.y} A ${rOuter} ${rOuter} 0 ${large} ${sweep} ${oEnd.x} ${oEnd.y} L ${iEnd.x} ${iEnd.y} A ${rInner} ${rInner} 0 ${large} ${1 - sweep} ${iStart.x} ${iStart.y} Z`;\n  }\n  /**\n   * @returns {string | null} the chart-type the active snapshot was captured\n   *   from, or null when no morph is in flight.\n   */\n  getFromType() {\n    return this._snapshot ? this._snapshot.fromType : null;\n  }\n  /**\n   * Build a (targetKey → captured) map. The targetKey matches the lookup\n   * pattern each chart-type renderer uses when it asks\n   * `getInitialPathFor(realIndex, j)`.\n   *\n   * Strategy: flatten the captured items into a linear sequence (matching the\n   * source chart's natural DOM iteration order: series-then-point for bar,\n   * ring-by-ring for radial), then walk the target's iteration positions in\n   * the same order and pair them up 1:1. This handles every supported shape\n   * without per-pair branching:\n   *\n   *   - bar (1 series, N pts) ↔ radial-family (N items)  → linear[k] ↔ k\n   *   - bar (M series, 1 pt)  ↔ radial-family (M items)  → linear[k] ↔ k\n   *   - radial-family (N items) ↔ bar (any matching shape) → linear[k] ↔ flat target\n   *   - radial-family ↔ radial-family                    → linear[k] ↔ k\n   *\n   * @param {Array<{ realIndex: number, j: number, d: string, fill: string|null }>} captured\n   * @param {string} _fromType\n   * @param {string} toType\n   * @param {any} newSeries - the series array being passed to the new chart;\n   *   used only to derive the bar target's (realIndex, j) iteration positions.\n   */\n  _buildMapping(captured, _fromType, toType, newSeries) {\n    const map = /* @__PURE__ */ new Map();\n    const tf = familyOf(toType);\n    const flat = captured.slice().sort((a, b) => a.realIndex - b.realIndex || a.j - b.j);\n    if (tf === \"radial\") {\n      flat.forEach((c, i) => {\n        map.set(`${i}:0`, { d: c.d, fill: c.fill });\n      });\n      return map;\n    }\n    if (tf === \"bar\") {\n      const positions = [];\n      const series = Array.isArray(newSeries) ? newSeries : [];\n      series.forEach((s, seriesIdx) => {\n        const data = s && Array.isArray(s.data) ? s.data : [];\n        for (let j = 0; j < data.length; j++) {\n          positions.push({ realIndex: seriesIdx, j });\n        }\n      });\n      flat.forEach((c, i) => {\n        const pos = positions[i];\n        if (pos) {\n          map.set(`${pos.realIndex}:${pos.j}`, { d: c.d, fill: c.fill });\n        }\n      });\n      return map;\n    }\n    return map;\n  }\n  isActive() {\n    return this._snapshot !== null;\n  }\n  /**\n   * @param {number} realIndex\n   * @param {number} j\n   * @returns {string | null}\n   */\n  getInitialPathFor(realIndex, j) {\n    if (!this._snapshot) return null;\n    const entry = this._snapshot.mapping.get(`${realIndex}:${j}`);\n    if (!entry) return null;\n    const dx = this._snapshot.oldLayout.translateX - (this.w.layout.translateX || 0);\n    const dy = this._snapshot.oldLayout.translateY - (this.w.layout.translateY || 0);\n    return dx === 0 && dy === 0 ? entry.d : this._translatePathD(entry.d, dx, dy);\n  }\n  /**\n   * Offset every absolute coordinate in an SVG path `d` by (dx, dy).\n   *\n   * Assumes the path uses only uppercase (absolute) commands — every path\n   * ApexCharts generates does. Relative-command paths would pass through\n   * unchanged at the lowercase, which is also semantically correct (deltas\n   * don't shift under a parent translate).\n   *\n   * @param {string} d\n   * @param {number} dx\n   * @param {number} dy\n   * @returns {string}\n   */\n  _translatePathD(d, dx, dy) {\n    if (dx === 0 && dy === 0) return d;\n    const commands = parsePath(d);\n    return commands.map(\n      /** @param {any[]} c */\n      (c) => {\n        const cmd = c[0];\n        if (cmd === \"Z\") return \"Z\";\n        if (cmd === \"M\" || cmd === \"L\" || cmd === \"T\") {\n          return `${cmd} ${c[1] + dx} ${c[2] + dy}`;\n        }\n        if (cmd === \"H\") return `${cmd} ${c[1] + dx}`;\n        if (cmd === \"V\") return `${cmd} ${c[1] + dy}`;\n        if (cmd === \"C\") {\n          return `${cmd} ${c[1] + dx} ${c[2] + dy} ${c[3] + dx} ${c[4] + dy} ${c[5] + dx} ${c[6] + dy}`;\n        }\n        if (cmd === \"S\" || cmd === \"Q\") {\n          return `${cmd} ${c[1] + dx} ${c[2] + dy} ${c[3] + dx} ${c[4] + dy}`;\n        }\n        if (cmd === \"A\") {\n          return `${cmd} ${c[1]} ${c[2]} ${c[3]} ${c[4]} ${c[5]} ${c[6] + dx} ${c[7] + dy}`;\n        }\n        return c.join(\" \");\n      }\n    ).join(\" \");\n  }\n  /**\n   * @param {number} realIndex\n   * @param {number} j\n   * @returns {string | null}\n   */\n  getInitialFillFor(realIndex, j) {\n    if (!this._snapshot) return null;\n    const entry = this._snapshot.mapping.get(`${realIndex}:${j}`);\n    return entry ? entry.fill : null;\n  }\n  /** @returns {number} */\n  getSpeed() {\n    const animCfg = this.w.config.chart.animations;\n    return animCfg.chartTypeMorph && animCfg.chartTypeMorph.speed || animCfg.speed || 600;\n  }\n  /**\n   * Fade newly-mounted axes / grid / legend / titles from opacity 0 → 1 in\n   * parallel with the morph. Without this the chart's chrome would pop in\n   * abruptly while the series elements are still mid-tween, which reads as a\n   * jarring layout shift.\n   */\n  applyChromeFade() {\n    var _a;\n    if (!this._snapshot || !Environment.isBrowser()) return;\n    const baseEl = (_a = this.w.globals.dom) == null ? void 0 : _a.baseEl;\n    if (!baseEl) return;\n    const speed = this.getSpeed();\n    const chromeSelectors = [\n      \".apexcharts-xaxis\",\n      \".apexcharts-yaxis\",\n      \".apexcharts-grid\",\n      \".apexcharts-gridlines-horizontal\",\n      \".apexcharts-gridlines-vertical\",\n      \".apexcharts-legend\",\n      \".apexcharts-title-text\",\n      \".apexcharts-subtitle-text\"\n    ];\n    chromeSelectors.forEach((sel) => {\n      baseEl.querySelectorAll(sel).forEach((el) => {\n        if (!el.style) return;\n        el.style.opacity = \"0\";\n        el.style.transition = `opacity ${speed}ms ease-out`;\n        BrowserAPIs.requestAnimationFrame(() => {\n          el.style.opacity = \"1\";\n        });\n        setTimeout(() => {\n          el.style.transition = \"\";\n          el.style.opacity = \"\";\n        }, speed + 80);\n      });\n    });\n    setTimeout(() => this.cleanup(), speed + 100);\n  }\n  cleanup() {\n    this._snapshot = null;\n  }\n}\nApexCharts.registerFeatures({ morphTypeChange: MorphTypeChange });\nconst XHTML = \"http://www.w3.org/1999/xhtml\";\nclass Breadcrumb {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   * @param {import('./Drilldown').default} drilldown\n   */\n  constructor(w, ctx, drilldown) {\n    this.w = w;\n    this.ctx = ctx;\n    this.drilldown = drilldown;\n  }\n  /**\n   * @param {Array<string|number>} path - ['root', id, id, ...]\n   */\n  render(path) {\n    if (!Environment.isBrowser()) return;\n    const w = this.w;\n    const elWrap = w.dom.elWrap;\n    if (!elWrap) return;\n    const existing = elWrap.querySelector(\".apexcharts-breadcrumb\");\n    if (existing && existing.parentNode) {\n      existing.parentNode.removeChild(existing);\n    }\n    const cfg = w.config.drilldown && w.config.drilldown.breadcrumb;\n    if (!cfg || cfg.show === false) return;\n    if (this.drilldown.depth === 0) return;\n    const nav = BrowserAPIs.createElementNS(XHTML, \"nav\");\n    nav.setAttribute(\"class\", \"apexcharts-breadcrumb\");\n    nav.setAttribute(\"aria-label\", \"Drilldown breadcrumb\");\n    this._position(nav, cfg);\n    const separator = cfg.separator != null ? cfg.separator : \" / \";\n    path.forEach((id, i) => {\n      if (i > 0) {\n        const sep = BrowserAPIs.createElementNS(XHTML, \"span\");\n        sep.setAttribute(\"class\", \"apexcharts-breadcrumb-separator\");\n        sep.setAttribute(\"aria-hidden\", \"true\");\n        sep.textContent = separator;\n        nav.appendChild(sep);\n      }\n      const label = this._label(id, i);\n      const isCurrent = i === path.length - 1;\n      if (isCurrent) {\n        const cur = BrowserAPIs.createElementNS(XHTML, \"span\");\n        cur.setAttribute(\n          \"class\",\n          \"apexcharts-breadcrumb-item apexcharts-breadcrumb-current\"\n        );\n        cur.setAttribute(\"aria-current\", \"page\");\n        cur.textContent = label;\n        nav.appendChild(cur);\n      } else {\n        const btn = (\n          /** @type {HTMLButtonElement} */\n          BrowserAPIs.createElementNS(XHTML, \"button\")\n        );\n        btn.setAttribute(\"type\", \"button\");\n        btn.setAttribute(\"class\", \"apexcharts-breadcrumb-item\");\n        if (i === 0) {\n          const arrow = BrowserAPIs.createElementNS(XHTML, \"span\");\n          arrow.setAttribute(\"class\", \"apexcharts-breadcrumb-arrow\");\n          arrow.setAttribute(\"aria-hidden\", \"true\");\n          arrow.textContent = \"←\";\n          btn.appendChild(arrow);\n        }\n        const text = BrowserAPIs.createElementNS(XHTML, \"span\");\n        text.setAttribute(\"class\", \"apexcharts-breadcrumb-label\");\n        text.textContent = label;\n        btn.appendChild(text);\n        btn.addEventListener(\"click\", () => this.drilldown.drillToLevel(i));\n        nav.appendChild(btn);\n      }\n    });\n    elWrap.appendChild(nav);\n  }\n  /**\n   * @param {string|number} id\n   * @param {number} index\n   * @returns {string}\n   */\n  _label(id, index) {\n    const cfg = this.w.config.drilldown.breadcrumb;\n    let label;\n    if (index === 0) {\n      label = cfg.rootLabel != null ? cfg.rootLabel : \"All\";\n    } else {\n      const list = (this.w.config.drilldown.series || []).find(\n        (s) => s && s.id === id\n      );\n      label = list && list.name || String(id);\n    }\n    if (typeof cfg.formatter === \"function\") {\n      return cfg.formatter(label, { index, depth: this.drilldown.depth });\n    }\n    return label;\n  }\n  /**\n   * @param {HTMLElement} nav\n   * @param {Record<string, any>} cfg\n   */\n  _position(nav, cfg) {\n    const ox = cfg.offsetX || 0;\n    const oy = cfg.offsetY || 0;\n    nav.style.position = \"absolute\";\n    nav.style.top = oy + \"px\";\n    if (cfg.position === \"top-right\") {\n      nav.style.right = -ox + 3 + \"px\";\n    } else {\n      nav.style.left = ox + \"px\";\n    }\n  }\n}\nconst MAX_DEPTH = 32;\nclass Drilldown {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.stack = [];\n    this.rootSnapshot = null;\n    this._wired = false;\n    this.breadcrumb = new Breadcrumb(w, ctx, this);\n    this._onPointSelect = this._onPointSelect.bind(this);\n    this._afterRender = this._afterRender.bind(this);\n    this.init();\n  }\n  init() {\n    const w = this.w;\n    if (!w.config.drilldown || !w.config.drilldown.enabled) return;\n    if (this._wired) return;\n    this._wired = true;\n    this.ctx.addEventListener(\"dataPointSelection\", this._onPointSelect);\n    this.ctx.addEventListener(\"mounted\", this._afterRender);\n    this.ctx.addEventListener(\"updated\", this._afterRender);\n  }\n  // ─── Observable state ──────────────────────────────────────────────────────\n  /** @returns {Array<string|number>} e.g. ['root', '2024-quarters'] */\n  get path() {\n    return [\"root\", ...this.stack.map((f) => f.id)];\n  }\n  /** @returns {number} 0 at root */\n  get depth() {\n    return this.stack.length;\n  }\n  // ─── Navigation API ────────────────────────────────────────────────────────\n  /**\n   * Drill into the child level with the given id.\n   * @param {string|number} id\n   * @param {any} [triggerPoint] - the clicked data point (for events / async ctx)\n   * @param {{ seriesIndex?: number, dataPointIndex?: number }} [meta]\n   * @returns {Promise<any>}\n   */\n  drillDown(id, triggerPoint, meta) {\n    const child = this._resolveChild(id);\n    if (child) return this._drillInto(child, triggerPoint, meta);\n    if (typeof this.w.config.drilldown.onDrillDown === \"function\") {\n      return this._drillDownAsync(id, triggerPoint, meta);\n    }\n    console.warn(\n      `ApexCharts: drilldown id \"${id}\" not found in chart.drilldown.series, and no onDrillDown resolver is set.`\n    );\n    return Promise.resolve(this.ctx);\n  }\n  /**\n   * Navigate back one level.\n   * @returns {Promise<any>}\n   */\n  drillUp() {\n    return this.drillToLevel(this.stack.length - 1);\n  }\n  /**\n   * Navigate back to the root view.\n   * @returns {Promise<any>}\n   */\n  drillToRoot() {\n    return this.drillToLevel(0);\n  }\n  /**\n   * Navigate to an arbitrary depth (0 = root). Used by breadcrumb clicks.\n   * @param {number} targetDepth\n   * @returns {Promise<any>}\n   */\n  drillToLevel(targetDepth) {\n    const cur = this.stack.length;\n    if (targetDepth < 0 || targetDepth >= cur) return Promise.resolve(this.ctx);\n    const from = this.path[this.path.length - 1];\n    const restore = targetDepth === 0 ? this.rootSnapshot : this.stack[targetDepth].restore;\n    this.stack = this.stack.slice(0, targetDepth);\n    const to = this.path[this.path.length - 1];\n    return this._apply(this._viewFromSnapshot(restore), \"up\", { from, to });\n  }\n  // ─── Internals ─────────────────────────────────────────────────────────────\n  /**\n   * @param {string|number} id\n   * @returns {any|null}\n   */\n  _resolveChild(id) {\n    const list = this.w.config.drilldown && this.w.config.drilldown.series;\n    if (!Array.isArray(list)) return null;\n    return list.find((s) => s && s.id === id) || null;\n  }\n  /**\n   * @param {any} child\n   * @param {any} [triggerPoint]\n   * @param {object} [meta]\n   * @returns {Promise<any>}\n   */\n  _drillInto(child, triggerPoint, meta) {\n    if (this.stack.length >= MAX_DEPTH) {\n      console.warn(`ApexCharts: drilldown max depth (${MAX_DEPTH}) reached.`);\n      return Promise.resolve(this.ctx);\n    }\n    if (!this.rootSnapshot) this.rootSnapshot = this._snapshot();\n    const from = this.path[this.path.length - 1];\n    this.stack.push({ id: child.id, name: child.name, restore: this._snapshot() });\n    return this._apply(this._viewFromChild(child), \"down\", {\n      from,\n      to: child.id,\n      point: triggerPoint,\n      seriesIndex: meta && meta.seriesIndex,\n      dataPointIndex: meta && meta.dataPointIndex\n    });\n  }\n  /**\n   * Minimal async resolver (loading overlay lands in Phase 3).\n   * @param {string|number|null} id\n   * @param {any} point\n   * @param {object} [meta]\n   * @returns {Promise<any>}\n   */\n  _drillDownAsync(id, point, meta) {\n    const fn = this.w.config.drilldown.onDrillDown;\n    let result;\n    try {\n      result = fn({\n        point,\n        seriesIndex: meta && meta.seriesIndex,\n        dataPointIndex: meta && meta.dataPointIndex\n      });\n    } catch (error) {\n      this._fire(\"drillDownError\", { id, error });\n      return Promise.resolve(this.ctx);\n    }\n    return Promise.resolve(result).then(\n      (child) => {\n        if (!child || !child.data) return this.ctx;\n        return this._drillInto(child, point, meta);\n      },\n      (error) => {\n        this._fire(\"drillDownError\", { id, error });\n        return this.ctx;\n      }\n    );\n  }\n  /**\n   * Capture the overridable surface of the current view so it can be restored.\n   * Only fields that some drilldown.series entry can change are cloned; series\n   * and chart.type/stacked are always captured.\n   * @returns {object}\n   */\n  _snapshot() {\n    const c = this.w.config;\n    const fields = this._overrideFields();\n    const snap = { series: Utils$1.clone(c.series) };\n    if (Array.isArray(c.labels) && c.labels.length) {\n      snap.labels = Utils$1.clone(c.labels);\n    }\n    snap.chart = { type: c.chart.type, stacked: c.chart.stacked };\n    if (fields.has(\"xaxis\")) snap.xaxis = Utils$1.clone(c.xaxis);\n    if (fields.has(\"yaxis\")) snap.yaxis = Utils$1.clone(c.yaxis);\n    if (fields.has(\"colors\")) snap.colors = c.colors ? Utils$1.clone(c.colors) : void 0;\n    if (fields.has(\"plotOptions\")) snap.plotOptions = Utils$1.clone(c.plotOptions);\n    if (fields.has(\"fill\")) snap.fill = Utils$1.clone(c.fill);\n    if (fields.has(\"legend\")) snap.legend = Utils$1.clone(c.legend);\n    return snap;\n  }\n  /**\n   * Union of overridable fields across all declared drilldown levels. Ensures a\n   * deep drillToRoot restores everything any intermediate level may have changed.\n   * @returns {Set<string>}\n   */\n  _overrideFields() {\n    const fields = /* @__PURE__ */ new Set();\n    const list = this.w.config.drilldown && this.w.config.drilldown.series || [];\n    for (const s of list) {\n      if (!s) continue;\n      if (s.xaxis) fields.add(\"xaxis\");\n      if (s.yaxis) fields.add(\"yaxis\");\n      if (s.colors) fields.add(\"colors\");\n      if (s.plotOptions) fields.add(\"plotOptions\");\n      if (s.fill) fields.add(\"fill\");\n      if (s.legend) fields.add(\"legend\");\n    }\n    return fields;\n  }\n  /**\n   * Build an updateOptions/updateSeries payload for drilling INTO a child level.\n   * Works for axis charts and pie/donut alike: both accept series objects with a\n   * `data` array of `{ x, y }` points (pie derives slice labels from `x`).\n   * @param {any} child\n   * @returns {Record<string, any>}\n   */\n  _viewFromChild(child) {\n    const view = {};\n    if (Array.isArray(child.series)) {\n      view.series = child.series;\n    } else {\n      view.series = [{ name: child.name || \"\", data: child.data }];\n    }\n    const chart = {};\n    if (child.chart && child.chart.type) chart.type = child.chart.type;\n    if (child.chart && child.chart.stacked != null) chart.stacked = child.chart.stacked;\n    if (Object.keys(chart).length) view.chart = chart;\n    if (child.xaxis) view.xaxis = child.xaxis;\n    if (child.yaxis) view.yaxis = child.yaxis;\n    if (child.colors) view.colors = child.colors;\n    if (child.plotOptions) view.plotOptions = child.plotOptions;\n    if (child.fill) view.fill = child.fill;\n    if (child.legend) view.legend = child.legend;\n    return view;\n  }\n  /**\n   * Build an updateOptions payload from a restore-snapshot.\n   * @param {Record<string, any>} snap\n   * @returns {Record<string, any>}\n   */\n  _viewFromSnapshot(snap) {\n    const view = { series: snap.series, chart: snap.chart };\n    if (snap.labels && snap.labels.length) view.labels = snap.labels;\n    if (snap.xaxis) view.xaxis = snap.xaxis;\n    if (snap.yaxis) view.yaxis = snap.yaxis;\n    if (snap.colors) view.colors = snap.colors;\n    if (snap.plotOptions) view.plotOptions = snap.plotOptions;\n    if (snap.fill) view.fill = snap.fill;\n    if (snap.legend) view.legend = snap.legend;\n    return view;\n  }\n  /**\n   * Apply a view by delegating to the right update path, firing drill events\n   * around it.\n   * @param {Record<string, any>} view\n   * @param {'down'|'up'} direction\n   * @param {object} meta\n   * @returns {Promise<any>}\n   */\n  _apply(view, direction, meta) {\n    const w = this.w;\n    w.interact.selectedDataPoints = [];\n    w.globals.collapsedSeries = [];\n    w.globals.collapsedSeriesIndices = [];\n    w.globals.ancillaryCollapsedSeries = [];\n    w.globals.ancillaryCollapsedSeriesIndices = [];\n    w.globals.allSeriesCollapsed = false;\n    w.globals.risingSeries = [];\n    const animate = (!w.config.drilldown.animation || w.config.drilldown.animation.enabled !== false) && w.config.chart.animations.enabled !== false;\n    if (direction === \"down\") this._fire(\"drillDownStart\", meta);\n    const runUpdate = (anim) => this.ctx.updateOptions(view, false, anim, false, false);\n    const done = () => {\n      this._fire(direction === \"down\" ? \"drillDownEnd\" : \"drillUp\", meta);\n      return this.ctx;\n    };\n    if (animate && this._zoomEnabled()) {\n      const origin = this._triggerOrigin(meta);\n      if (origin) {\n        return this._zoomDrill(origin, direction, () => runUpdate(false)).then(done);\n      }\n    }\n    return runUpdate(animate).then(done);\n  }\n  /** @returns {boolean} whether trigger-point zoom is configured on. */\n  _zoomEnabled() {\n    const a = this.w.config.drilldown && this.w.config.drilldown.animation;\n    return !!(a && a.zoomFromPoint);\n  }\n  /** @returns {SVGSVGElement|null} the chart's root <svg> node, if present. */\n  _svgNode() {\n    const paper = this.w.dom && this.w.dom.Paper;\n    return paper && paper.node ? paper.node : null;\n  }\n  /**\n   * The group wrapping ONLY the data marks (bars/cells/tiles) — not the axes,\n   * grid, or titles. Animating this keeps the chart frame still while the marks\n   * move. Covers bar/line/area (`.apexcharts-plot-series`), heatmap, and treemap.\n   * @returns {SVGElement|null}\n   */\n  _markGroup() {\n    const svg = this._svgNode();\n    if (!svg || typeof svg.querySelector !== \"function\") return null;\n    return svg.querySelector(\n      \".apexcharts-plot-series, .apexcharts-heatmap, .apexcharts-treemap\"\n    );\n  }\n  /**\n   * Centre of the clicked point in the SVG's view-box pixel space, used as the\n   * transform-origin for the mark-group scale (which uses `transform-box:\n   * view-box`, so the origin is resolved in SVG coordinates and stays stable\n   * across the parent and child renders). Falls back to the mark group's centre\n   * when there is no trigger point (e.g. drillUp / imperative drill). Returns\n   * null when the marks / SVG / WAAPI are unavailable (SSR / old browsers).\n   * @param {object} meta\n   * @returns {{ x: number, y: number }|null}\n   */\n  _triggerOrigin(meta) {\n    if (!Environment.isBrowser()) return null;\n    const svg = this._svgNode();\n    const group = this._markGroup();\n    if (!svg || !group || typeof group.animate !== \"function\" || typeof svg.getBoundingClientRect !== \"function\") {\n      return null;\n    }\n    const svgRect = svg.getBoundingClientRect();\n    let el = null;\n    if (meta && meta.seriesIndex != null && meta.dataPointIndex != null && this.w.dom.baseEl) {\n      el = this.w.dom.baseEl.querySelector(\n        `[index=\"${meta.seriesIndex}\"][j=\"${meta.dataPointIndex}\"]`\n      );\n    }\n    if (el && typeof el.getBoundingClientRect === \"function\") {\n      const r = el.getBoundingClientRect();\n      return {\n        x: r.left + r.width / 2 - svgRect.left,\n        y: r.top + r.height / 2 - svgRect.top\n      };\n    }\n    const gRect = group.getBoundingClientRect();\n    return {\n      x: gRect.left + gRect.width / 2 - svgRect.left,\n      y: gRect.top + gRect.height / 2 - svgRect.top\n    };\n  }\n  /**\n   * Run the \"expand from the clicked point\" choreography around an instant\n   * (un-animated) update. Only the data-mark group is animated — the axes, grid,\n   * and titles stay fixed, so the effect doesn't drag the whole chart frame. The\n   * current marks fade out near-in-place (a quick fade, not a balloon), the child\n   * renders invisibly underneath, then the child marks unfold outward from the\n   * clicked point: a horizontal-biased scale anchored there, so the bars read as\n   * emerging from the column you clicked. Drilling up has no trigger column, so\n   * it settles gently from the marks' centre.\n   *\n   * `transform-box: view-box` resolves the origin in SVG coordinates, so the same\n   * origin applies cleanly to the parent and the freshly-rendered child group.\n   * @param {{ x: number, y: number }} origin\n   * @param {'down'|'up'} direction\n   * @param {() => Promise<any>} runUpdate\n   * @returns {Promise<void>}\n   */\n  _zoomDrill(origin, direction, runUpdate) {\n    return __async(this, null, function* () {\n      const dur = this._zoomDuration();\n      const down = direction === \"down\";\n      const outDur = Math.round(dur * 0.55);\n      const outTo = down ? \"scale(1.03)\" : \"scale(0.97)\";\n      const inFrom = down ? \"scaleX(0.55) scaleY(0.85)\" : \"scale(1.04)\";\n      const anchor = (el) => {\n        el.style.transformBox = \"view-box\";\n        el.style.transformOrigin = `${origin.x}px ${origin.y}px`;\n      };\n      const clear = (el) => {\n        el.style.transform = \"\";\n        el.style.opacity = \"\";\n        el.style.transformOrigin = \"\";\n        el.style.transformBox = \"\";\n      };\n      const outGroup = this._markGroup();\n      let outAnim = null;\n      if (outGroup) {\n        anchor(outGroup);\n        outAnim = outGroup.animate(\n          [\n            { transform: \"scale(1)\", opacity: 1 },\n            { transform: outTo, opacity: 0 }\n          ],\n          { duration: outDur, easing: \"ease-in\", fill: \"forwards\" }\n        );\n        try {\n          yield outAnim.finished;\n        } catch (e) {\n        }\n      }\n      yield runUpdate();\n      const inGroup = this._markGroup();\n      if (inGroup) {\n        anchor(inGroup);\n        inGroup.style.opacity = \"0\";\n        inGroup.style.transform = inFrom;\n        if (outAnim && outGroup === inGroup) outAnim.cancel();\n        const inAnim = inGroup.animate(\n          [\n            { transform: inFrom, opacity: 0 },\n            { transform: \"scale(1)\", opacity: 1 }\n          ],\n          // Decelerating ease so the unfold settles softly into place.\n          { duration: dur, easing: \"cubic-bezier(0.16, 1, 0.3, 1)\", fill: \"forwards\" }\n        );\n        try {\n          yield inAnim.finished;\n        } catch (e) {\n        }\n        clear(inGroup);\n        inAnim.cancel();\n      }\n    });\n  }\n  /** @returns {number} per-phase zoom duration in ms. */\n  _zoomDuration() {\n    const a = this.w.config.drilldown && this.w.config.drilldown.animation;\n    const speed = a && typeof a.speed === \"number\" ? a.speed : 260;\n    return Math.max(80, speed);\n  }\n  /**\n   * Fire a drill event through both the config callback and the listener registry.\n   * @param {string} name\n   * @param {object} payload\n   */\n  _fire(name2, payload) {\n    const cb = this.w.config.chart.events && this.w.config.chart.events[name2];\n    if (typeof cb === \"function\") cb(payload, this.ctx, this.w);\n    this.ctx.events.fireEvent(name2, [payload, this.ctx, this.w]);\n  }\n  // ─── Click + post-render hooks ───────────────────────────────────────────────\n  /**\n   * @param {Event} _event\n   * @param {any} _ctx\n   * @param {{ seriesIndex?: number, dataPointIndex?: number }} opts\n   */\n  _onPointSelect(_event, _ctx, opts) {\n    if (!opts) return void 0;\n    const point = this._pointAt(opts.seriesIndex, opts.dataPointIndex);\n    if (point && typeof point === \"object\" && point.drilldown != null) {\n      return this.drillDown(point.drilldown, point, opts);\n    }\n    if (typeof this.w.config.drilldown.onDrillDown === \"function\") {\n      return this._drillDownAsync(null, point, opts);\n    }\n    return void 0;\n  }\n  /**\n   * @param {number|undefined} seriesIndex\n   * @param {number|undefined} dataPointIndex\n   * @returns {any|null}\n   */\n  _pointAt(seriesIndex, dataPointIndex) {\n    const series = this.w.config.series;\n    if (!Array.isArray(series) || seriesIndex == null || dataPointIndex == null) {\n      return null;\n    }\n    const s = series[seriesIndex];\n    if (!s || !Array.isArray(s.data)) return null;\n    return s.data[dataPointIndex] != null ? s.data[dataPointIndex] : null;\n  }\n  _afterRender() {\n    if (!this.w.config.drilldown || !this.w.config.drilldown.enabled) return;\n    this._markDrillableTargets();\n    this.breadcrumb.render(this.path);\n  }\n  /**\n   * Add the drilldown-target cursor class to every point that carries a\n   * `drilldown` field. Best-effort and cosmetic — a missed selector is harmless.\n   */\n  _markDrillableTargets() {\n    if (!Environment.isBrowser()) return;\n    const w = this.w;\n    const baseEl = w.dom.baseEl;\n    const series = w.config.series;\n    if (!baseEl || !Array.isArray(series)) return;\n    series.forEach((s, i) => {\n      const data = s && Array.isArray(s.data) ? s.data : null;\n      if (!data) return;\n      data.forEach((point, j) => {\n        if (!point || typeof point !== \"object\" || point.drilldown == null) return;\n        const nodes = baseEl.querySelectorAll(`[index=\"${i}\"][j=\"${j}\"]`);\n        nodes.forEach(\n          (node) => node.classList.add(\"apexcharts-drilldown-target\")\n        );\n      });\n    });\n  }\n}\nApexCharts.registerFeatures({ drilldown: Drilldown });\nclass BarDataLabels {\n  /**\n   * @param {import('../../../charts/Bar').default} barCtx\n   */\n  constructor(barCtx) {\n    this.w = barCtx.w;\n    this.barCtx = barCtx;\n    this.totalFormatter = this.w.config.plotOptions.bar.dataLabels.total.formatter;\n    if (!this.totalFormatter) {\n      this.totalFormatter = this.w.config.dataLabels.formatter;\n    }\n  }\n  /** handleBarDataLabels is used to calculate the positions for the data-labels\n   * It also sets the element's data attr for bars and calls drawCalculatedBarDataLabels()\n   * After calculating, it also calls the function to draw data labels\n   * @memberof Bar\n   * @param {Record<string, any>} opts - bar properties used throughout the bar drawing function\n   * @return {object} dataLabels node-element which you can append later\n   **/\n  handleBarDataLabels(opts) {\n    const {\n      x,\n      y,\n      y1,\n      y2,\n      i,\n      j,\n      realIndex,\n      columnGroupIndex,\n      series,\n      barHeight,\n      barWidth,\n      barXPosition,\n      barYPosition,\n      visibleSeries\n    } = opts;\n    const w = this.w;\n    const graphics = new Graphics(this.barCtx.w);\n    const strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth;\n    let bcx;\n    let bcy;\n    if (w.axisFlags.isXNumeric && !w.globals.isBarHorizontal) {\n      bcx = x + barWidth * (visibleSeries + 1);\n      bcy = y + barHeight * (visibleSeries + 1) - strokeWidth;\n    } else {\n      bcx = x + barWidth * visibleSeries;\n      bcy = y + barHeight * visibleSeries;\n    }\n    let dataLabels = null;\n    let totalDataLabels = null;\n    let dataLabelsX = x;\n    let dataLabelsY = y;\n    let dataLabelsPos = (\n      /** @type {any} */\n      {}\n    );\n    const dataLabelsConfig = w.config.dataLabels;\n    const barDataLabelsConfig = this.barCtx.barOptions.dataLabels;\n    const barTotalDataLabelsConfig = this.barCtx.barOptions.dataLabels.total;\n    if (typeof barYPosition !== \"undefined\" && (this.barCtx.isRangeBar || this.barCtx.isPyramid)) {\n      bcy = barYPosition;\n      dataLabelsY = barYPosition;\n    }\n    if (typeof barXPosition !== \"undefined\" && this.barCtx.isVerticalGroupedRangeBar) {\n      bcx = barXPosition;\n      dataLabelsX = barXPosition;\n    }\n    const offX = dataLabelsConfig.offsetX;\n    const offY = dataLabelsConfig.offsetY;\n    let textRects = {\n      width: 0,\n      height: 0\n    };\n    if (w.config.dataLabels.enabled) {\n      const yLabel = w.seriesData.series[i][j];\n      textRects = graphics.getTextRects(\n        w.config.dataLabels.formatter ? w.config.dataLabels.formatter(yLabel, __spreadProps(__spreadValues({}, w), {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        })) : w.formatters.yLabelFormatters[0](yLabel),\n        parseFloat(dataLabelsConfig.style.fontSize).toString()\n      );\n    }\n    const params = {\n      x,\n      y,\n      i,\n      j,\n      realIndex,\n      columnGroupIndex,\n      bcx,\n      bcy,\n      barHeight,\n      barWidth,\n      textRects,\n      strokeWidth,\n      dataLabelsX,\n      dataLabelsY,\n      dataLabelsConfig,\n      barDataLabelsConfig,\n      barTotalDataLabelsConfig,\n      offX,\n      offY\n    };\n    if (this.barCtx.isHorizontal) {\n      dataLabelsPos = this.calculateBarsDataLabelsPosition(params);\n    } else {\n      dataLabelsPos = this.calculateColumnsDataLabelsPosition(params);\n    }\n    dataLabels = this.drawCalculatedDataLabels({\n      x: dataLabelsPos.dataLabelsX,\n      y: dataLabelsPos.dataLabelsY,\n      val: this.barCtx.isRangeBar ? [y1, y2] : w.config.chart.stackType === \"100%\" ? series[realIndex][j] : w.seriesData.series[realIndex][j],\n      i: realIndex,\n      j,\n      barWidth,\n      barHeight,\n      textRects,\n      dataLabelsConfig\n    });\n    if (w.config.chart.stacked && barTotalDataLabelsConfig.enabled) {\n      totalDataLabels = this.drawTotalDataLabels({\n        x: dataLabelsPos.totalDataLabelsX,\n        y: dataLabelsPos.totalDataLabelsY,\n        barWidth,\n        barHeight,\n        realIndex,\n        textAnchor: dataLabelsPos.totalDataLabelsAnchor,\n        val: this.getStackedTotalDataLabel({ realIndex, j }),\n        dataLabelsConfig,\n        barTotalDataLabelsConfig\n      });\n    }\n    return {\n      dataLabelsPos,\n      dataLabels,\n      totalDataLabels\n    };\n  }\n  /** @param {{realIndex: any, j: any}} opts */\n  getStackedTotalDataLabel({ realIndex, j }) {\n    const w = this.w;\n    let val = this.barCtx.stackedSeriesTotals[j];\n    if (this.totalFormatter) {\n      val = this.totalFormatter(val, __spreadProps(__spreadValues({}, w), {\n        seriesIndex: realIndex,\n        dataPointIndex: j,\n        w\n      }));\n    }\n    return val;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  calculateColumnsDataLabelsPosition(opts) {\n    const w = this.w;\n    let {\n      i,\n      j,\n      realIndex,\n      y,\n      bcx,\n      barWidth,\n      barHeight,\n      textRects,\n      dataLabelsX,\n      dataLabelsY,\n      dataLabelsConfig,\n      barDataLabelsConfig,\n      barTotalDataLabelsConfig,\n      strokeWidth,\n      offX,\n      offY\n    } = opts;\n    let totalDataLabelsY;\n    let totalDataLabelsX;\n    const totalDataLabelsAnchor = \"middle\";\n    const totalDataLabelsBcx = bcx;\n    barHeight = Math.abs(barHeight);\n    const vertical = w.config.plotOptions.bar.dataLabels.orientation === \"vertical\";\n    const { zeroEncounters } = this.barCtx.barHelpers.getZeroValueEncounters({\n      i,\n      j\n    });\n    bcx = bcx - strokeWidth / 2;\n    const dataPointsDividedWidth = w.layout.gridWidth / w.globals.dataPoints;\n    if (this.barCtx.isVerticalGroupedRangeBar) {\n      dataLabelsX += barWidth / 2;\n    } else {\n      if (w.axisFlags.isXNumeric) {\n        dataLabelsX = bcx - barWidth / 2 + offX;\n      } else {\n        dataLabelsX = bcx - dataPointsDividedWidth + barWidth / 2 + offX;\n      }\n      if (!w.config.chart.stacked && zeroEncounters > 0 && w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        dataLabelsX -= barWidth * zeroEncounters;\n      }\n    }\n    if (vertical) {\n      const offsetDLX = 2;\n      dataLabelsX = dataLabelsX + textRects.height / 2 - strokeWidth / 2 - offsetDLX;\n    }\n    const valIsNegative = w.seriesData.series[i][j] < 0;\n    let newY = y;\n    if (this.barCtx.isReversed) {\n      newY = y + (valIsNegative ? barHeight : -barHeight);\n    }\n    switch (barDataLabelsConfig.position) {\n      case \"center\":\n        if (vertical) {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight / 2 + offY;\n          } else {\n            dataLabelsY = newY + barHeight / 2 - offY;\n          }\n        } else {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight / 2 + textRects.height / 2 + offY;\n          } else {\n            dataLabelsY = newY + barHeight / 2 + textRects.height / 2 - offY;\n          }\n        }\n        break;\n      case \"bottom\":\n        if (vertical) {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight + offY;\n          } else {\n            dataLabelsY = newY + barHeight - offY;\n          }\n        } else {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight + textRects.height + strokeWidth + offY;\n          } else {\n            dataLabelsY = newY + barHeight - textRects.height / 2 + strokeWidth - offY;\n          }\n        }\n        break;\n      case \"top\":\n        if (vertical) {\n          if (valIsNegative) {\n            dataLabelsY = newY + offY;\n          } else {\n            dataLabelsY = newY - offY;\n          }\n        } else {\n          if (valIsNegative) {\n            dataLabelsY = newY - textRects.height / 2 - offY;\n          } else {\n            dataLabelsY = newY + textRects.height + offY;\n          }\n        }\n        break;\n    }\n    let lowestPrevY = newY;\n    w.labelData.seriesGroups.forEach((sg) => {\n      var _a;\n      (_a = this.barCtx[sg.join(\",\")]) == null ? void 0 : _a.prevY.forEach(\n        (arr) => {\n          if (valIsNegative) {\n            lowestPrevY = Math.max(arr[j], lowestPrevY);\n          } else {\n            lowestPrevY = Math.min(arr[j], lowestPrevY);\n          }\n        }\n      );\n    });\n    if (this.barCtx.lastActiveBarSerieIndex === realIndex && barTotalDataLabelsConfig.enabled) {\n      const ADDITIONAL_OFFY = 18;\n      const graphics = new Graphics(this.barCtx.w);\n      const totalLabeltextRects = graphics.getTextRects(\n        this.getStackedTotalDataLabel({ realIndex, j }),\n        dataLabelsConfig.fontSize\n      );\n      if (valIsNegative) {\n        totalDataLabelsY = lowestPrevY - totalLabeltextRects.height / 2 - offY - barTotalDataLabelsConfig.offsetY + ADDITIONAL_OFFY;\n      } else {\n        totalDataLabelsY = lowestPrevY + totalLabeltextRects.height + offY + barTotalDataLabelsConfig.offsetY - ADDITIONAL_OFFY;\n      }\n      const xDivision = dataPointsDividedWidth;\n      totalDataLabelsX = totalDataLabelsBcx + (w.axisFlags.isXNumeric ? -barWidth * w.globals.barGroups.length / 2 : w.globals.barGroups.length * barWidth / 2 - (w.globals.barGroups.length - 1) * barWidth - xDivision) + barTotalDataLabelsConfig.offsetX;\n    }\n    if (!w.config.chart.stacked) {\n      if (dataLabelsY < 0) {\n        dataLabelsY = 0 + strokeWidth;\n      } else if (dataLabelsY + textRects.height / 3 > w.layout.gridHeight) {\n        dataLabelsY = w.layout.gridHeight - strokeWidth;\n      }\n    }\n    return {\n      bcx,\n      bcy: y,\n      dataLabelsX,\n      dataLabelsY,\n      totalDataLabelsX,\n      totalDataLabelsY,\n      totalDataLabelsAnchor\n    };\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  calculateBarsDataLabelsPosition(opts) {\n    var _a;\n    const w = this.w;\n    let {\n      x,\n      i,\n      j,\n      realIndex,\n      bcy,\n      barHeight,\n      barWidth,\n      textRects,\n      dataLabelsX,\n      strokeWidth,\n      dataLabelsConfig,\n      barDataLabelsConfig,\n      barTotalDataLabelsConfig,\n      offX,\n      offY\n    } = opts;\n    const dataPointsDividedHeight = w.layout.gridHeight / w.globals.dataPoints;\n    const { zeroEncounters } = this.barCtx.barHelpers.getZeroValueEncounters({\n      i,\n      j\n    });\n    barWidth = Math.abs(barWidth);\n    let dataLabelsY;\n    if (this.barCtx.isPyramid) {\n      const centerOffset = (_a = textRects.centerOffset) != null ? _a : 0;\n      dataLabelsY = bcy + barHeight / 2 + offY - centerOffset;\n    } else {\n      dataLabelsY = bcy - (this.barCtx.isRangeBar ? 0 : dataPointsDividedHeight) + barHeight / 2 + textRects.height / 2 + offY - 3;\n    }\n    if (!w.config.chart.stacked && zeroEncounters > 0 && w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n      dataLabelsY -= barHeight * zeroEncounters;\n    }\n    let totalDataLabelsX;\n    let totalDataLabelsY;\n    let totalDataLabelsAnchor = \"start\";\n    const valIsNegative = w.seriesData.series[i][j] < 0;\n    let newX = x;\n    if (this.barCtx.isReversed) {\n      newX = x + (valIsNegative ? -barWidth : barWidth);\n      totalDataLabelsAnchor = valIsNegative ? \"start\" : \"end\";\n    }\n    if (this.barCtx.isPyramid) {\n      dataLabelsX = w.layout.gridWidth / 2 + offX;\n    } else {\n      switch (barDataLabelsConfig.position) {\n        case \"center\":\n          if (valIsNegative) {\n            dataLabelsX = newX + barWidth / 2 - offX;\n          } else {\n            dataLabelsX = Math.max(textRects.width / 2, newX - barWidth / 2) + offX;\n          }\n          break;\n        case \"bottom\":\n          if (valIsNegative) {\n            dataLabelsX = newX + barWidth - strokeWidth - offX;\n          } else {\n            dataLabelsX = newX - barWidth + strokeWidth + offX;\n          }\n          break;\n        case \"top\":\n          if (valIsNegative) {\n            dataLabelsX = newX - strokeWidth - offX;\n          } else {\n            dataLabelsX = newX - strokeWidth + offX;\n          }\n          break;\n      }\n    }\n    let lowestPrevX = newX;\n    w.labelData.seriesGroups.forEach((sg) => {\n      var _a2;\n      (_a2 = this.barCtx[sg.join(\",\")]) == null ? void 0 : _a2.prevX.forEach(\n        (arr) => {\n          if (valIsNegative) {\n            lowestPrevX = Math.min(arr[j], lowestPrevX);\n          } else {\n            lowestPrevX = Math.max(arr[j], lowestPrevX);\n          }\n        }\n      );\n    });\n    if (this.barCtx.lastActiveBarSerieIndex === realIndex && barTotalDataLabelsConfig.enabled) {\n      const graphics = new Graphics(this.barCtx.w);\n      const totalLabeltextRects = graphics.getTextRects(\n        this.getStackedTotalDataLabel({ realIndex, j }),\n        dataLabelsConfig.fontSize\n      );\n      if (valIsNegative) {\n        totalDataLabelsX = lowestPrevX - strokeWidth - offX - barTotalDataLabelsConfig.offsetX;\n        totalDataLabelsAnchor = \"end\";\n      } else {\n        totalDataLabelsX = lowestPrevX + offX + barTotalDataLabelsConfig.offsetX + (this.barCtx.isReversed ? -(barWidth + strokeWidth) : strokeWidth);\n      }\n      totalDataLabelsY = dataLabelsY - textRects.height / 2 + totalLabeltextRects.height / 2 + barTotalDataLabelsConfig.offsetY + strokeWidth;\n      if (w.globals.barGroups.length > 1) {\n        totalDataLabelsY = totalDataLabelsY - w.globals.barGroups.length / 2 * (barHeight / 2);\n      }\n    }\n    if (!w.config.chart.stacked) {\n      if (dataLabelsConfig.textAnchor === \"start\") {\n        if (dataLabelsX - textRects.width < 0) {\n          dataLabelsX = valIsNegative ? textRects.width + strokeWidth : strokeWidth;\n        } else if (dataLabelsX + textRects.width > w.layout.gridWidth) {\n          dataLabelsX = valIsNegative ? w.layout.gridWidth - strokeWidth : w.layout.gridWidth - textRects.width - strokeWidth;\n        }\n      } else if (dataLabelsConfig.textAnchor === \"middle\") {\n        if (dataLabelsX - textRects.width / 2 < 0) {\n          dataLabelsX = textRects.width / 2 + strokeWidth;\n        } else if (dataLabelsX + textRects.width / 2 > w.layout.gridWidth) {\n          dataLabelsX = w.layout.gridWidth - textRects.width / 2 - strokeWidth;\n        }\n      } else if (dataLabelsConfig.textAnchor === \"end\") {\n        if (dataLabelsX < 1) {\n          dataLabelsX = textRects.width + strokeWidth;\n        } else if (dataLabelsX + 1 > w.layout.gridWidth) {\n          dataLabelsX = w.layout.gridWidth - textRects.width - strokeWidth;\n        }\n      }\n    }\n    return {\n      bcx: x,\n      bcy,\n      dataLabelsX,\n      dataLabelsY,\n      totalDataLabelsX,\n      totalDataLabelsY,\n      totalDataLabelsAnchor\n    };\n  }\n  /** @param {{x: any, y: any, val: any, i: any, j: any, textRects: any, barHeight: any, barWidth: any, dataLabelsConfig: any}} opts */\n  drawCalculatedDataLabels({\n    x,\n    y,\n    val,\n    i,\n    // = realIndex\n    j,\n    textRects,\n    barHeight,\n    barWidth,\n    dataLabelsConfig\n  }) {\n    const w = this.w;\n    let rotate = \"rotate(0)\";\n    if (w.config.plotOptions.bar.dataLabels.orientation === \"vertical\")\n      rotate = `rotate(-90, ${x}, ${y})`;\n    const dataLabels = new DataLabels(this.barCtx.w, this.barCtx.ctx);\n    const graphics = new Graphics(this.barCtx.w);\n    const formatter = dataLabelsConfig.formatter;\n    let elDataLabelsWrap = null;\n    const isSeriesNotCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) > -1;\n    if (dataLabelsConfig.enabled && !isSeriesNotCollapsed) {\n      elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-data-labels\",\n        transform: rotate\n      });\n      let text = \"\";\n      if (typeof val !== \"undefined\") {\n        text = formatter(val, __spreadProps(__spreadValues({}, w), {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        }));\n      }\n      if (!val && w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        text = \"\";\n      }\n      const valIsNegative = w.seriesData.series[i][j] < 0;\n      const position = w.config.plotOptions.bar.dataLabels.position;\n      if (w.config.plotOptions.bar.dataLabels.orientation === \"vertical\") {\n        if (position === \"top\") {\n          if (valIsNegative) dataLabelsConfig.textAnchor = \"end\";\n          else dataLabelsConfig.textAnchor = \"start\";\n        }\n        if (position === \"center\") {\n          dataLabelsConfig.textAnchor = \"middle\";\n        }\n        if (position === \"bottom\") {\n          if (valIsNegative) dataLabelsConfig.textAnchor = \"end\";\n          else dataLabelsConfig.textAnchor = \"start\";\n        }\n      }\n      if (this.barCtx.isRangeBar && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) {\n        const txRect = graphics.getTextRects(\n          text,\n          parseFloat(dataLabelsConfig.style.fontSize).toString()\n        );\n        if (barWidth < txRect.width) {\n          text = \"\";\n        }\n      }\n      if (w.config.chart.stacked && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) {\n        if (this.barCtx.isHorizontal) {\n          if (textRects.width / 1.6 > Math.abs(barWidth)) {\n            text = \"\";\n          }\n        } else {\n          if (textRects.height / 1.6 > Math.abs(barHeight)) {\n            text = \"\";\n          }\n        }\n      }\n      const modifiedDataLabelsConfig = __spreadValues({}, dataLabelsConfig);\n      if (this.barCtx.isHorizontal) {\n        if (val < 0) {\n          if (dataLabelsConfig.textAnchor === \"start\") {\n            modifiedDataLabelsConfig.textAnchor = \"end\";\n          } else if (dataLabelsConfig.textAnchor === \"end\") {\n            modifiedDataLabelsConfig.textAnchor = \"start\";\n          }\n        }\n      }\n      dataLabels.plotDataLabelsText({\n        x,\n        y,\n        text,\n        i,\n        j,\n        parent: elDataLabelsWrap,\n        dataLabelsConfig: modifiedDataLabelsConfig,\n        alwaysDrawDataLabel: true,\n        offsetCorrection: true\n      });\n    }\n    return elDataLabelsWrap;\n  }\n  /** @param {{ x?: any, y?: any, val?: any, realIndex?: any, textAnchor?: any, barWidth?: any, barHeight?: any, dataLabelsConfig?: any, barTotalDataLabelsConfig?: any }} opts */\n  drawTotalDataLabels({\n    x,\n    y,\n    val,\n    realIndex,\n    textAnchor,\n    barTotalDataLabelsConfig\n  }) {\n    const graphics = new Graphics(this.barCtx.w);\n    let totalDataLabelText;\n    if (barTotalDataLabelsConfig.enabled && typeof x !== \"undefined\" && typeof y !== \"undefined\" && this.barCtx.lastActiveBarSerieIndex === realIndex) {\n      totalDataLabelText = graphics.drawText({\n        x,\n        y,\n        foreColor: barTotalDataLabelsConfig.style.color,\n        text: val,\n        textAnchor,\n        fontFamily: barTotalDataLabelsConfig.style.fontFamily,\n        fontSize: barTotalDataLabelsConfig.style.fontSize,\n        fontWeight: barTotalDataLabelsConfig.style.fontWeight\n      });\n    }\n    return totalDataLabelText;\n  }\n}\nlet Helpers$1 = class Helpers4 {\n  /**\n   * @param {Record<string, any>} barCtx\n   */\n  constructor(barCtx) {\n    this.w = barCtx.w;\n    this.barCtx = barCtx;\n  }\n  /**\n   * @param {any[]} series\n   */\n  initVariables(series) {\n    const w = this.w;\n    this.barCtx.series = series;\n    this.barCtx.totalItems = 0;\n    this.barCtx.seriesLen = 0;\n    this.barCtx.visibleI = -1;\n    this.barCtx.visibleItems = 1;\n    for (let sl = 0; sl < series.length; sl++) {\n      if (series[sl].length > 0) {\n        this.barCtx.seriesLen = this.barCtx.seriesLen + 1;\n        this.barCtx.totalItems += series[sl].length;\n      }\n      if (w.axisFlags.isXNumeric) {\n        for (let j = 0; j < series[sl].length; j++) {\n          if (w.seriesData.seriesX[sl][j] > w.globals.minX && w.seriesData.seriesX[sl][j] < w.globals.maxX) {\n            this.barCtx.visibleItems++;\n          }\n        }\n      } else {\n        this.barCtx.visibleItems = w.globals.dataPoints;\n      }\n    }\n    this.arrBorderRadius = this.createBorderRadiusArr(w.seriesData.series);\n    if (Utils$1.isSafari()) {\n      this.arrBorderRadius = this.arrBorderRadius.map(\n        (brArr) => (\n          /**\n           * @param {any} _\n           */\n          brArr.map((_) => \"none\")\n        )\n      );\n    }\n    if (this.barCtx.seriesLen === 0) {\n      this.barCtx.seriesLen = 1;\n    }\n    this.barCtx.zeroSerieses = [];\n    if (!w.globals.comboCharts) {\n      this.checkZeroSeries({ series });\n    }\n  }\n  /**\n   * @param {number} realIndex\n   */\n  initialPositions(realIndex) {\n    const w = this.w;\n    let x, y, yDivision, xDivision, barHeight, barWidth, zeroH, zeroW;\n    let dataPoints = w.globals.dataPoints;\n    if (this.barCtx.isRangeBar) {\n      dataPoints = w.labelData.labels.length;\n    }\n    let seriesLen = this.barCtx.seriesLen;\n    if (w.config.plotOptions.bar.rangeBarGroupRows) {\n      seriesLen = 1;\n    }\n    if (this.barCtx.isHorizontal) {\n      yDivision = w.layout.gridHeight / dataPoints;\n      barHeight = yDivision / seriesLen;\n      if (w.axisFlags.isXNumeric) {\n        yDivision = w.layout.gridHeight / this.barCtx.totalItems;\n        barHeight = yDivision / this.barCtx.seriesLen;\n      }\n      barHeight = barHeight * parseInt(this.barCtx.barOptions.barHeight, 10) / 100;\n      if (String(this.barCtx.barOptions.barHeight).indexOf(\"%\") === -1) {\n        barHeight = parseInt(this.barCtx.barOptions.barHeight, 10);\n      }\n      zeroW = this.barCtx.baseLineInvertedY + w.globals.padHorizontal + (this.barCtx.isReversed ? w.layout.gridWidth : 0) - (this.barCtx.isReversed ? this.barCtx.baseLineInvertedY * 2 : 0);\n      if (this.barCtx.isFunnel) {\n        zeroW = w.layout.gridWidth / 2;\n      }\n      y = (yDivision - barHeight * this.barCtx.seriesLen) / 2;\n    } else {\n      xDivision = w.layout.gridWidth / this.barCtx.visibleItems;\n      if (w.config.xaxis.convertedCatToNumeric) {\n        xDivision = w.layout.gridWidth / w.globals.dataPoints;\n      }\n      barWidth = xDivision / seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100;\n      if (w.axisFlags.isXNumeric) {\n        const xRatio = this.barCtx.xRatio;\n        if (w.globals.minXDiff && w.globals.minXDiff !== 0.5 && w.globals.minXDiff / xRatio > 0) {\n          xDivision = w.globals.minXDiff / xRatio;\n        }\n        barWidth = xDivision / seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100;\n        if (barWidth < 1) {\n          barWidth = 1;\n        }\n      }\n      if (String(this.barCtx.barOptions.columnWidth).indexOf(\"%\") === -1) {\n        barWidth = parseInt(this.barCtx.barOptions.columnWidth, 10);\n      }\n      zeroH = w.layout.gridHeight - this.barCtx.baseLineY[this.barCtx.translationsIndex] - (this.barCtx.isReversed ? w.layout.gridHeight : 0) + (this.barCtx.isReversed ? this.barCtx.baseLineY[this.barCtx.translationsIndex] * 2 : 0);\n      if (w.axisFlags.isXNumeric) {\n        const xForNumericX = this.barCtx.getBarXForNumericXAxis({\n          x,\n          j: 0,\n          realIndex,\n          barWidth\n        });\n        x = xForNumericX.x;\n      } else {\n        x = w.globals.padHorizontal + Utils$1.noExponents(xDivision - barWidth * this.barCtx.seriesLen) / 2;\n      }\n    }\n    w.globals.barHeight = barHeight;\n    w.globals.barWidth = barWidth;\n    return {\n      x,\n      y,\n      yDivision,\n      xDivision,\n      barHeight,\n      barWidth,\n      zeroH,\n      zeroW\n    };\n  }\n  /**\n   * @param {Record<string, any>} ctx\n   */\n  initializeStackedPrevVars(ctx) {\n    const w = ctx.w;\n    w.labelData.seriesGroups.forEach((group) => {\n      if (!ctx[group]) ctx[group] = {};\n      ctx[group].prevY = [];\n      ctx[group].prevX = [];\n      ctx[group].prevYF = [];\n      ctx[group].prevXF = [];\n      ctx[group].prevYVal = [];\n      ctx[group].prevXVal = [];\n    });\n  }\n  /**\n   * @param {Record<string, any>} ctx\n   */\n  initializeStackedXYVars(ctx) {\n    const w = ctx.w;\n    w.labelData.seriesGroups.forEach((group) => {\n      if (!ctx[group]) ctx[group] = {};\n      ctx[group].xArrj = [];\n      ctx[group].xArrjF = [];\n      ctx[group].xArrjVal = [];\n      ctx[group].yArrj = [];\n      ctx[group].yArrjF = [];\n      ctx[group].yArrjVal = [];\n    });\n  }\n  /**\n   * @param {any[]} series\n   * @param {number} i\n   * @param {number} j\n   * @param {number} realIndex\n   */\n  getPathFillColor(series, i, j, realIndex) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const fill = new Fill(this.barCtx.w);\n    let fillColor = null;\n    const seriesNumber = this.barCtx.barOptions.distributed ? j : i;\n    let useRangeColor = false;\n    if (this.barCtx.barOptions.colors.ranges.length > 0) {\n      const colorRange = this.barCtx.barOptions.colors.ranges;\n      colorRange.map((range) => {\n        if (series[i][j] >= range.from && series[i][j] <= range.to) {\n          fillColor = range.color;\n          useRangeColor = true;\n        }\n      });\n    }\n    const pathFill = fill.fillPath({\n      seriesNumber: this.barCtx.barOptions.distributed ? seriesNumber : realIndex,\n      dataPointIndex: j,\n      color: fillColor,\n      value: series[i][j],\n      fillConfig: (_a = w.config.series[i].data[j]) == null ? void 0 : _a.fill,\n      fillType: ((_c = (_b = w.config.series[i].data[j]) == null ? void 0 : _b.fill) == null ? void 0 : _c.type) ? (_d = w.config.series[i].data[j]) == null ? void 0 : _d.fill.type : Array.isArray(w.config.fill.type) ? w.config.fill.type[realIndex] : w.config.fill.type\n    });\n    return {\n      color: pathFill,\n      useRangeColor\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   * @param {number} realIndex\n   */\n  getStrokeWidth(i, j, realIndex) {\n    let strokeWidth = 0;\n    const w = this.w;\n    if (typeof this.barCtx.series[i][j] === \"undefined\" || this.barCtx.series[i][j] === null || w.config.chart.type === \"bar\" && !this.barCtx.series[i][j]) {\n      this.barCtx.isNullValue = true;\n    } else {\n      this.barCtx.isNullValue = false;\n    }\n    if (w.config.stroke.show) {\n      if (!this.barCtx.isNullValue) {\n        strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth;\n      }\n    }\n    return strokeWidth;\n  }\n  /**\n   * @param {any[]} series\n   */\n  createBorderRadiusArr(series) {\n    var _a;\n    const w = this.w;\n    const alwaysApplyRadius = !this.w.config.chart.stacked || w.config.plotOptions.bar.borderRadius <= 0;\n    const numSeries = series.length;\n    const numColumns = ((_a = series[0]) == null ? void 0 : _a.length) | 0;\n    const output = Array.from(\n      { length: numSeries },\n      () => Array(numColumns).fill(alwaysApplyRadius ? \"top\" : \"none\")\n    );\n    if (alwaysApplyRadius) return output;\n    const chartType = this.w.config.chart.type;\n    for (let j = 0; j < numColumns; j++) {\n      const positiveIndices = [];\n      const negativeIndices = [];\n      let nonZeroCount = 0;\n      for (let i = 0; i < numSeries; i++) {\n        const value = series[i][j];\n        if (value > 0) {\n          positiveIndices.push(i);\n          nonZeroCount++;\n        } else if (value < 0) {\n          negativeIndices.push(i);\n          nonZeroCount++;\n        }\n      }\n      if (positiveIndices.length > 0 && negativeIndices.length === 0) {\n        if (positiveIndices.length === 1) {\n          output[positiveIndices[0]][j] = chartType === \"bar\" && numColumns === 1 ? \"top\" : \"both\";\n        } else {\n          const firstPositiveIndex = positiveIndices[0];\n          const lastPositiveIndex = positiveIndices[positiveIndices.length - 1];\n          for (const i of positiveIndices) {\n            if (i === firstPositiveIndex) {\n              output[i][j] = chartType === \"bar\" && numColumns === 1 ? \"top\" : \"bottom\";\n            } else if (i === lastPositiveIndex) {\n              output[i][j] = \"top\";\n            } else {\n              output[i][j] = \"none\";\n            }\n          }\n        }\n      } else if (negativeIndices.length > 0 && positiveIndices.length === 0) {\n        if (negativeIndices.length === 1) {\n          output[negativeIndices[0]][j] = \"both\";\n        } else {\n          const highestNegativeIndex = Math.max(...negativeIndices);\n          const lowestNegativeIndex = Math.min(...negativeIndices);\n          for (const i of negativeIndices) {\n            if (i === highestNegativeIndex) {\n              output[i][j] = \"bottom\";\n            } else if (i === lowestNegativeIndex) {\n              output[i][j] = \"top\";\n            } else {\n              output[i][j] = \"none\";\n            }\n          }\n        }\n      } else if (positiveIndices.length > 0 && negativeIndices.length > 0) {\n        const lastPositiveIndex = positiveIndices[positiveIndices.length - 1];\n        for (const i of positiveIndices) {\n          if (i === lastPositiveIndex) {\n            output[i][j] = \"top\";\n          } else {\n            output[i][j] = \"none\";\n          }\n        }\n        const highestNegativeIndex = Math.max(...negativeIndices);\n        for (const i of negativeIndices) {\n          if (i === highestNegativeIndex) {\n            output[i][j] = \"bottom\";\n          } else {\n            output[i][j] = \"none\";\n          }\n        }\n      } else if (nonZeroCount === 1) {\n        const index = positiveIndices[0] || negativeIndices[0];\n        output[index][j] = \"both\";\n      }\n    }\n    return output;\n  }\n  /** @param {{ j?: any, i?: any, x1?: any, x2?: any, y1?: any, y2?: any, bc?: any, elSeries?: any }} opts */\n  barBackground({ j, i, x1, x2, y1, y2, elSeries }) {\n    const w = this.w;\n    const graphics = new Graphics(this.barCtx.w);\n    const sr = new Series(this.barCtx.w);\n    const activeSeriesIndex = sr.getActiveConfigSeriesIndex();\n    if (this.barCtx.barOptions.colors.backgroundBarColors.length > 0 && activeSeriesIndex === i) {\n      if (j >= this.barCtx.barOptions.colors.backgroundBarColors.length) {\n        j %= this.barCtx.barOptions.colors.backgroundBarColors.length;\n      }\n      const bcolor = this.barCtx.barOptions.colors.backgroundBarColors[j];\n      const rect = graphics.drawRect(\n        typeof x1 !== \"undefined\" ? x1 : 0,\n        typeof y1 !== \"undefined\" ? y1 : 0,\n        typeof x2 !== \"undefined\" ? x2 : w.layout.gridWidth,\n        typeof y2 !== \"undefined\" ? y2 : w.layout.gridHeight,\n        this.barCtx.barOptions.colors.backgroundBarRadius,\n        bcolor,\n        this.barCtx.barOptions.colors.backgroundBarOpacity\n      );\n      elSeries.add(rect);\n      rect.node.classList.add(\"apexcharts-backgroundBar\");\n    }\n  }\n  /** @param {{ barWidth?: any, barXPosition?: any, y1?: any, y2?: any, yRatio?: any, strokeWidth?: any, isReversed?: any, series?: any, seriesGroup?: any, realIndex?: any, i?: any, j?: any, w?: any }} opts */\n  getColumnPaths({\n    barWidth,\n    barXPosition,\n    y1,\n    y2,\n    strokeWidth,\n    isReversed,\n    series,\n    seriesGroup,\n    realIndex,\n    i,\n    j,\n    w\n  }) {\n    var _a, _b, _c;\n    const graphics = new Graphics(this.barCtx.w);\n    strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth;\n    if (!strokeWidth) strokeWidth = 0;\n    let bW = barWidth;\n    let bXP = barXPosition;\n    if ((_a = w.config.series[realIndex].data[j]) == null ? void 0 : _a.columnWidthOffset) {\n      bXP = barXPosition - w.config.series[realIndex].data[j].columnWidthOffset / 2;\n      bW = barWidth + w.config.series[realIndex].data[j].columnWidthOffset;\n    }\n    const strokeCenter = strokeWidth / 2;\n    const x1 = bXP + strokeCenter;\n    const x2 = bXP + bW - strokeCenter;\n    const direction = (series[i][j] >= 0 ? 1 : -1) * (isReversed ? -1 : 1);\n    y1 += 1e-3 - strokeCenter * direction;\n    y2 += 1e-3 + strokeCenter * direction;\n    const sl = graphics.line(x2, y1);\n    const closing = w.config.plotOptions.bar.borderRadiusApplication === \"around\" || this.arrBorderRadius[realIndex][j] === \"both\" ? \" Z\" : \" z\";\n    let pathTo = graphics.move(x1, y1) + graphics.line(x1, y2) + graphics.line(x2, y2) + sl + closing;\n    if (this.arrBorderRadius[realIndex][j] !== \"none\") {\n      pathTo = graphics.roundPathCorners(\n        pathTo,\n        w.config.plotOptions.bar.borderRadius\n      );\n    }\n    let pathFrom;\n    const morphFrom = (_c = (_b = this.barCtx.ctx) == null ? void 0 : _b.morphTypeChange) == null ? void 0 : _c.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      pathFrom = graphics.move(x1, y1) + graphics.line(x1, y1) + sl + sl + sl + sl + sl + graphics.line(x1, y1) + closing;\n    }\n    if (w.config.chart.stacked) {\n      let _ctx = this.barCtx;\n      _ctx = this.barCtx[seriesGroup];\n      _ctx.yArrj.push(y2 - strokeCenter * direction);\n      _ctx.yArrjF.push(Math.abs(y1 - y2 + strokeWidth * direction));\n      _ctx.yArrjVal.push(this.barCtx.series[i][j]);\n    }\n    return {\n      pathTo,\n      pathFrom\n    };\n  }\n  /**\n   * Build a trapezoidal funnel-stage path. Used when\n   * `plotOptions.funnel.shape === 'trapezoid'` is active alongside `isFunnel`.\n   *\n   * Each stage is a 4-corner polygon whose top width matches the current\n   * stage's value and bottom width matches the next stage's value, producing\n   * continuous sloped sides between consecutive stages.\n   *\n   * For the last stage, the bottom width is configurable:\n   * - `lastShape: 'flat'`  → bottom width = top width (parallel sides)\n   * - `lastShape: 'taper'` → bottom width = 0 (taper to a point)\n   *\n   * @param {{ barYPosition: number, barHeight: number, series: any[][], i: number, j: number, realIndex: number, strokeWidth: number, w: any }} opts\n   */\n  getFunnelTrapezoidPaths({\n    barYPosition,\n    barHeight,\n    series,\n    i,\n    j,\n    realIndex,\n    strokeWidth,\n    w\n  }) {\n    var _a, _b;\n    const graphics = new Graphics(this.barCtx.w);\n    const center = w.layout.gridWidth / 2;\n    const halfWidthFor = (v) => Math.abs(v / this.barCtx.invertedYRatio) / 2;\n    const topHalf = halfWidthFor(series[i][j]);\n    const lastIdx = series[i].length - 1;\n    const isLast = j === lastIdx;\n    const lastShape = w.config.plotOptions.funnel.lastShape === \"taper\" ? \"taper\" : \"flat\";\n    let bottomHalf;\n    if (isLast) {\n      bottomHalf = lastShape === \"taper\" ? 0 : topHalf;\n    } else {\n      bottomHalf = halfWidthFor(series[i][j + 1]);\n    }\n    const strokeCenter = strokeWidth / 2;\n    const y1 = barYPosition + strokeCenter;\n    const y2 = barYPosition + barHeight - strokeCenter;\n    const topLeftX = center - topHalf;\n    const topRightX = center + topHalf;\n    const bottomLeftX = center - bottomHalf;\n    const bottomRightX = center + bottomHalf;\n    const pathTo = graphics.move(topLeftX, y1) + graphics.line(topRightX, y1) + graphics.line(bottomRightX, y2) + graphics.line(bottomLeftX, y2) + \" Z\";\n    let pathFrom;\n    const morphFrom = (_b = (_a = this.barCtx.ctx) == null ? void 0 : _a.morphTypeChange) == null ? void 0 : _b.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      pathFrom = graphics.move(center, y1) + graphics.line(center, y1) + graphics.line(center, y2) + graphics.line(center, y2) + \" Z\";\n    }\n    return {\n      pathTo,\n      pathFrom,\n      // x is the right edge of the wider (top) side — used by dataLabel\n      // positioning helpers that expect a \"right\" reference.\n      x: topRightX,\n      x1: topLeftX,\n      barXPosition: center\n    };\n  }\n  /**\n   * Pre-compute the per-segment layout for a value-proportional pyramid.\n   *\n   * Each segment is a horizontal slice of a triangle whose apex sits at the\n   * top of the plot area (width = 0) and whose base spans `gridWidth` at the\n   * bottom. The vertical extent of each slice is its share of the total\n   * series value, so areas track value contribution and segments share\n   * edges (no gaps). The first data point is the apex, the last is the base.\n   *\n   * @param {any[]} seriesData - 1D array of values for a single series row\n   * @returns {{ y: number, height: number, topHalf: number, bottomHalf: number }[]}\n   */\n  computePyramidLayout(seriesData) {\n    const w = this.w;\n    const gridHeight = w.layout.gridHeight;\n    const gridWidth = w.layout.gridWidth;\n    const values = seriesData.map(\n      /** @param {any} v */\n      (v) => Math.abs(Number(v) || 0)\n    );\n    const total = values.reduce(\n      /** @param {number} a @param {number} b */\n      (a, b) => a + b,\n      0\n    );\n    if (total === 0 || gridHeight <= 0) {\n      return values.map(() => ({ y: 0, height: 0, topHalf: 0, bottomHalf: 0 }));\n    }\n    const halfWidth = gridWidth / 2;\n    let cumulative = 0;\n    const layout = [];\n    for (let j = 0; j < values.length; j++) {\n      const topRatio = cumulative / total;\n      cumulative += values[j];\n      const bottomRatio = cumulative / total;\n      const topY = topRatio * gridHeight;\n      const bottomY = bottomRatio * gridHeight;\n      layout.push({\n        y: topY,\n        height: bottomY - topY,\n        topHalf: topRatio * halfWidth,\n        bottomHalf: bottomRatio * halfWidth\n      });\n    }\n    return layout;\n  }\n  /**\n   * Build a single pyramid stage path. Geometry is precomputed by\n   * `computePyramidLayout`; this method only renders that geometry into an\n   * SVG path string plus a `pathFrom` for entry/morph animations.\n   *\n   * @param {{ barYPosition: number, barHeight: number, topHalf: number, bottomHalf: number, realIndex: number, j: number, strokeWidth: number, w: any }} opts\n   */\n  getPyramidPaths({\n    barYPosition,\n    barHeight,\n    topHalf,\n    bottomHalf,\n    realIndex,\n    j,\n    strokeWidth,\n    w\n  }) {\n    var _a, _b;\n    const graphics = new Graphics(this.barCtx.w);\n    const center = w.layout.gridWidth / 2;\n    const strokeCenter = strokeWidth / 2;\n    const y1 = barYPosition + strokeCenter;\n    const y2 = barYPosition + barHeight - strokeCenter;\n    const topLeftX = center - topHalf;\n    const topRightX = center + topHalf;\n    const bottomLeftX = center - bottomHalf;\n    const bottomRightX = center + bottomHalf;\n    const pathTo = graphics.move(topLeftX, y1) + graphics.line(topRightX, y1) + graphics.line(bottomRightX, y2) + graphics.line(bottomLeftX, y2) + \" Z\";\n    let pathFrom;\n    const morphFrom = (_b = (_a = this.barCtx.ctx) == null ? void 0 : _a.morphTypeChange) == null ? void 0 : _b.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      pathFrom = graphics.move(center, y1) + graphics.line(center, y1) + graphics.line(center, y2) + graphics.line(center, y2) + \" Z\";\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x: topRightX,\n      x1: topLeftX,\n      barXPosition: center\n    };\n  }\n  /** @param {{ barYPosition?: any, barHeight?: any, x1?: any, x2?: any, strokeWidth?: any, isReversed?: any, series?: any, seriesGroup?: any, realIndex?: any, i?: any, j?: any, w?: any }} opts */\n  getBarpaths({\n    barYPosition,\n    barHeight,\n    x1,\n    x2,\n    strokeWidth,\n    isReversed,\n    series,\n    seriesGroup,\n    realIndex,\n    i,\n    j,\n    w\n  }) {\n    var _a, _b, _c;\n    const graphics = new Graphics(this.barCtx.w);\n    strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth;\n    if (!strokeWidth) strokeWidth = 0;\n    let bYP = barYPosition;\n    let bH = barHeight;\n    if ((_a = w.config.series[realIndex].data[j]) == null ? void 0 : _a.barHeightOffset) {\n      bYP = barYPosition - w.config.series[realIndex].data[j].barHeightOffset / 2;\n      bH = barHeight + w.config.series[realIndex].data[j].barHeightOffset;\n    }\n    const strokeCenter = strokeWidth / 2;\n    const y1 = bYP + strokeCenter;\n    const y2 = bYP + bH - strokeCenter;\n    const direction = (series[i][j] >= 0 ? 1 : -1) * (isReversed ? -1 : 1);\n    x1 += 1e-3 + strokeCenter * direction;\n    x2 += 1e-3 - strokeCenter * direction;\n    const isFunnel = this.barCtx.isFunnel;\n    const fromX = isFunnel ? (x1 + x2) / 2 : x1;\n    const sl = graphics.line(x1, y2);\n    const closing = w.config.plotOptions.bar.borderRadiusApplication === \"around\" || this.arrBorderRadius[realIndex][j] === \"both\" ? \" Z\" : \" z\";\n    let pathTo = graphics.move(x1, y1) + graphics.line(x2, y1) + graphics.line(x2, y2) + sl + closing;\n    if (this.arrBorderRadius[realIndex][j] !== \"none\") {\n      pathTo = graphics.roundPathCorners(\n        pathTo,\n        w.config.plotOptions.bar.borderRadius\n      );\n    }\n    let pathFrom;\n    const morphFrom = (_c = (_b = this.barCtx.ctx) == null ? void 0 : _b.morphTypeChange) == null ? void 0 : _c.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      const slFrom = isFunnel ? graphics.line(fromX, y2) : sl;\n      pathFrom = graphics.move(fromX, y1) + graphics.line(fromX, y1) + slFrom + slFrom + slFrom + slFrom + slFrom + graphics.line(fromX, y1) + closing;\n    }\n    if (w.config.chart.stacked) {\n      let _ctx = this.barCtx;\n      _ctx = this.barCtx[seriesGroup];\n      _ctx.xArrj.push(x2 + strokeCenter * direction);\n      _ctx.xArrjF.push(Math.abs(x1 - x2 - strokeWidth * direction));\n      _ctx.xArrjVal.push(this.barCtx.series[i][j]);\n    }\n    return {\n      pathTo,\n      pathFrom\n    };\n  }\n  /** @param {{series: any}} opts */\n  checkZeroSeries({ series }) {\n    const w = this.w;\n    for (let zs = 0; zs < series.length; zs++) {\n      let total = 0;\n      for (let zsj = 0; zsj < series[w.globals.maxValsInArrayIndex].length; zsj++) {\n        total += series[zs][zsj];\n      }\n      if (total === 0) {\n        this.barCtx.zeroSerieses.push(zs);\n      }\n    }\n  }\n  /**\n   * @param {number} value\n   * @param {number} zeroW\n   */\n  getXForValue(value, zeroW, zeroPositionForNull = true) {\n    let xForVal = zeroPositionForNull ? zeroW : null;\n    if (typeof value !== \"undefined\" && value !== null) {\n      xForVal = zeroW + value / this.barCtx.invertedYRatio - (this.barCtx.isReversed ? value / this.barCtx.invertedYRatio : 0) * 2;\n    }\n    return xForVal;\n  }\n  /**\n   * @param {number} value\n   * @param {number} zeroH\n   * @param {number} translationsIndex\n   */\n  getYForValue(value, zeroH, translationsIndex, zeroPositionForNull = true) {\n    let yForVal = zeroPositionForNull ? zeroH : null;\n    if (typeof value !== \"undefined\" && value !== null) {\n      yForVal = zeroH - value / this.barCtx.yRatio[translationsIndex] + (this.barCtx.isReversed ? value / this.barCtx.yRatio[translationsIndex] : 0) * 2;\n    }\n    return yForVal;\n  }\n  /**\n   * @param {string} type\n   * @param {number} zeroW\n   * @param {number} zeroH\n   * @param {number} i\n   * @param {number} j\n   * @param {number} translationsIndex\n   */\n  getGoalValues(type, zeroW, zeroH, i, j, translationsIndex) {\n    const w = this.w;\n    const goals = [];\n    const pushGoal = (value, attrs) => {\n      goals.push({\n        [type]: type === \"x\" ? this.getXForValue(value, zeroW, false) : this.getYForValue(value, zeroH, translationsIndex, false),\n        attrs\n      });\n    };\n    if (w.seriesData.seriesGoals[i] && w.seriesData.seriesGoals[i][j] && Array.isArray(w.seriesData.seriesGoals[i][j])) {\n      w.seriesData.seriesGoals[i][j].forEach((goal) => {\n        pushGoal(goal.value, goal);\n      });\n    }\n    if (this.barCtx.barOptions.isDumbbell && w.rangeData.seriesRange.length) {\n      const colors = this.barCtx.barOptions.dumbbellColors ? this.barCtx.barOptions.dumbbellColors : w.globals.colors;\n      const commonAttrs = {\n        strokeHeight: type === \"x\" ? 0 : w.globals.markers.size[i],\n        strokeWidth: type === \"x\" ? w.globals.markers.size[i] : 0,\n        strokeDashArray: 0,\n        strokeLineCap: \"round\",\n        strokeColor: Array.isArray(colors[i]) ? colors[i][0] : colors[i]\n      };\n      pushGoal(w.rangeData.seriesRangeStart[i][j], commonAttrs);\n      pushGoal(w.rangeData.seriesRangeEnd[i][j], __spreadProps(__spreadValues({}, commonAttrs), {\n        strokeColor: Array.isArray(colors[i]) ? colors[i][1] : colors[i]\n      }));\n    }\n    return goals;\n  }\n  /** @param {{barXPosition: any, barYPosition: any, goalX: any, goalY: any, barWidth: any, barHeight: any}} opts */\n  drawGoalLine({\n    barXPosition,\n    barYPosition,\n    goalX,\n    goalY,\n    barWidth,\n    barHeight\n  }) {\n    const graphics = new Graphics(this.barCtx.w);\n    const lineGroup = graphics.group({\n      className: \"apexcharts-bar-goals-groups\"\n    });\n    lineGroup.node.classList.add(\"apexcharts-element-hidden\");\n    this.barCtx.w.globals.delayedElements.push({\n      el: lineGroup.node\n    });\n    lineGroup.attr(\n      \"clip-path\",\n      `url(#gridRectMarkerMask${this.barCtx.w.globals.cuid})`\n    );\n    let line = null;\n    if (this.barCtx.isHorizontal) {\n      if (Array.isArray(goalX)) {\n        goalX.forEach((goal) => {\n          if (goal.x >= -1 && goal.x <= graphics.w.layout.gridWidth + 1) {\n            const sHeight = typeof goal.attrs.strokeHeight !== \"undefined\" ? goal.attrs.strokeHeight : barHeight / 2;\n            const y = barYPosition + sHeight + barHeight / 2;\n            line = graphics.drawLine(\n              goal.x,\n              y - sHeight * 2,\n              goal.x,\n              y,\n              goal.attrs.strokeColor ? goal.attrs.strokeColor : void 0,\n              goal.attrs.strokeDashArray,\n              goal.attrs.strokeWidth ? goal.attrs.strokeWidth : 2,\n              goal.attrs.strokeLineCap\n            );\n            lineGroup.add(line);\n          }\n        });\n      }\n    } else {\n      if (Array.isArray(goalY)) {\n        goalY.forEach((goal) => {\n          if (goal.y >= -1 && goal.y <= graphics.w.layout.gridHeight + 1) {\n            const sWidth = typeof goal.attrs.strokeWidth !== \"undefined\" ? goal.attrs.strokeWidth : barWidth / 2;\n            const x = barXPosition + sWidth + barWidth / 2;\n            line = graphics.drawLine(\n              x - sWidth * 2,\n              goal.y,\n              x,\n              goal.y,\n              goal.attrs.strokeColor ? goal.attrs.strokeColor : void 0,\n              goal.attrs.strokeDashArray,\n              goal.attrs.strokeHeight ? goal.attrs.strokeHeight : 2,\n              goal.attrs.strokeLineCap\n            );\n            lineGroup.add(line);\n          }\n        });\n      }\n    }\n    return lineGroup;\n  }\n  /** @param {{prevPaths: any, currPaths: any, color: any, realIndex: any, j: any}} opts */\n  drawBarShadow({ prevPaths, currPaths, color, realIndex, j }) {\n    const w = this.w;\n    const { x: prevX2, x1: prevX1, barYPosition: prevY1 } = prevPaths;\n    const { x: currX2, x1: currX1, barYPosition: currY1 } = currPaths;\n    const prevY2 = prevY1 + currPaths.barHeight;\n    const graphics = new Graphics(this.barCtx.w);\n    const utils = new Utils$1();\n    const shadowPath = graphics.move(prevX1, prevY2) + graphics.line(prevX2, prevY2) + graphics.line(currX2, currY1) + graphics.line(currX1, currY1) + graphics.line(prevX1, prevY2) + (w.config.plotOptions.bar.borderRadiusApplication === \"around\" || this.arrBorderRadius[realIndex][j] === \"both\" ? \" Z\" : \" z\");\n    return graphics.drawPath({\n      d: shadowPath,\n      fill: utils.shadeColor(0.5, Utils$1.rgb2hex(color)),\n      stroke: \"none\",\n      strokeWidth: 0,\n      fillOpacity: 1,\n      classes: \"apexcharts-bar-shadow apexcharts-decoration-element\"\n    });\n  }\n  /** @param {{i: any, j: any}} opts */\n  getZeroValueEncounters({ i, j }) {\n    var _a;\n    const w = this.w;\n    let nonZeroColumns = 0;\n    let zeroEncounters = 0;\n    const seriesIndices = w.config.plotOptions.bar.horizontal ? w.seriesData.series.map((_, _i) => _i) : ((_a = w.globals.columnSeries) == null ? void 0 : _a.i.map((_i) => _i)) || [];\n    seriesIndices.forEach((_si) => {\n      const val = w.globals.seriesPercent[_si][j];\n      if (val) {\n        nonZeroColumns++;\n      }\n      if (_si < i && val === 0) {\n        zeroEncounters++;\n      }\n    });\n    return {\n      nonZeroColumns,\n      zeroEncounters\n    };\n  }\n  /**\n   * @param {number} seriesIndex\n   */\n  getGroupIndex(seriesIndex) {\n    const w = this.w;\n    const groupIndex = w.labelData.seriesGroups.findIndex(\n      (group) => (\n        // w.config.series[i].name may be undefined, so use\n        // w.seriesData.seriesNames[i], which has default names for those\n        // series. w.labelData.seriesGroups[] uses the same default naming.\n        group.indexOf(w.seriesData.seriesNames[seriesIndex]) > -1\n      )\n    );\n    const cGI = this.barCtx.columnGroupIndices;\n    let columnGroupIndex = cGI.indexOf(groupIndex);\n    if (columnGroupIndex < 0) {\n      cGI.push(groupIndex);\n      columnGroupIndex = cGI.length - 1;\n    }\n    return { groupIndex, columnGroupIndex };\n  }\n};\nclass Bar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   * @param {import('../types/internal').XYRatios} xyRatios\n   */\n  constructor(w, ctx, xyRatios) {\n    this.ctx = ctx;\n    this.w = w;\n    this.barOptions = w.config.plotOptions.bar;\n    this.isHorizontal = this.barOptions.horizontal;\n    this.strokeWidth = w.config.stroke.width;\n    this.isNullValue = false;\n    this.isRangeBar = w.rangeData.seriesRange.length && this.isHorizontal;\n    this.isVerticalGroupedRangeBar = !w.globals.isBarHorizontal && w.rangeData.seriesRange.length && w.config.plotOptions.bar.rangeBarGroupRows;\n    this.isFunnel = this.barOptions.isFunnel;\n    this.isPyramid = this.barOptions.isPyramid;\n    this.pyramidLayout = null;\n    this.xyRatios = xyRatios;\n    this.xRatio = 0;\n    this.yRatio = [];\n    this.invertedXRatio = 0;\n    this.invertedYRatio = 0;\n    this.baseLineY = [];\n    this.baseLineInvertedY = 0;\n    if (this.xyRatios !== null) {\n      this.xRatio = xyRatios.xRatio;\n      this.yRatio = xyRatios.yRatio;\n      this.invertedXRatio = xyRatios.invertedXRatio;\n      this.invertedYRatio = xyRatios.invertedYRatio;\n      this.baseLineY = xyRatios.baseLineY;\n      this.baseLineInvertedY = xyRatios.baseLineInvertedY;\n    }\n    this.yaxisIndex = 0;\n    this.translationsIndex = 0;\n    this.seriesLen = 0;\n    this.pathArr = [];\n    this.series = [];\n    this.elSeries = null;\n    this.visibleI = 0;\n    this.isReversed = false;\n    const ser = new Series(this.w);\n    this.lastActiveBarSerieIndex = ser.getActiveConfigSeriesIndex(\"desc\", [\n      \"bar\",\n      \"column\"\n    ]);\n    this.columnGroupIndices = [];\n    const barSeriesIndices = ser.getBarSeriesIndices();\n    const coreUtils = new CoreUtils(this.w);\n    this.stackedSeriesTotals = coreUtils.getStackedSeriesTotals(\n      this.w.config.series.map((s, i) => {\n        return barSeriesIndices.indexOf(i) === -1 ? i : -1;\n      }).filter((s) => {\n        return s !== -1;\n      })\n    );\n    this.barHelpers = new Helpers$1(this);\n  }\n  /** primary draw method which is called on bar object\n   * @memberof Bar\n   * @param {any[]} series - user supplied series values\n   * @param {number} seriesIndex - the index by which series will be drawn on the svg\n   * @return {Element} element which is supplied to parent chart draw method for appending\n   **/\n  draw(series, seriesIndex) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const coreUtils = new CoreUtils(this.w);\n    series = coreUtils.getLogSeries(series);\n    this.series = series;\n    this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: \"apexcharts-bar-series apexcharts-plot-series\"\n    });\n    if (w.config.dataLabels.enabled) {\n      if (this.totalItems > this.barOptions.dataLabels.maxItems) {\n        console.warn(\n          \"WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering - ApexCharts\"\n        );\n      }\n    }\n    for (let i = 0, bc = 0; i < series.length; i++, bc++) {\n      let x, y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        rel: i + 1,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = w.globals.seriesYAxisReverseMap[realIndex];\n        this.translationsIndex = realIndex;\n      }\n      const translationsIndex = this.translationsIndex;\n      this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n      if (this.isPyramid) {\n        this.pyramidLayout = this.barHelpers.computePyramidLayout(series[i]);\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        yDivision,\n        // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n        zeroW,\n        // zeroW is the baseline where 0 meets x axis\n        x: initX,\n        xDivision,\n        // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n        zeroH\n        // zeroH is the baseline where 0 meets y axis\n      } = initPositions;\n      let barHeight = initPositions.barHeight;\n      let barWidth = initPositions.barWidth;\n      y = initY;\n      x = initX;\n      if (!this.isHorizontal) {\n        xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n      }\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      w.globals.delayedElements.push({\n        el: elDataLabelsWrap.node\n      });\n      elDataLabelsWrap.node.classList.add(\"apexcharts-element-hidden\");\n      const elGoalsMarkers = graphics.group({\n        class: \"apexcharts-bar-goals-markers\"\n      });\n      const elBarShadows = graphics.group({\n        class: \"apexcharts-bar-shadows\"\n      });\n      w.globals.delayedElements.push({\n        el: elBarShadows.node\n      });\n      elBarShadows.node.classList.add(\"apexcharts-element-hidden\");\n      for (let j = 0; j < series[i].length; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        const pathsParams = {\n          indexes: {\n            i,\n            j,\n            realIndex,\n            translationsIndex,\n            bc\n          },\n          x,\n          y,\n          strokeWidth,\n          elSeries\n        };\n        if (this.isHorizontal) {\n          paths = this.drawBarPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            barHeight,\n            zeroW,\n            yDivision\n          }));\n          barWidth = this.series[i][j] / this.invertedYRatio;\n        } else {\n          paths = this.drawColumnPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            xDivision,\n            barWidth,\n            zeroH\n          }));\n          barHeight = this.series[i][j] / this.yRatio[translationsIndex];\n        }\n        const pathFill = this.barHelpers.getPathFillColor(\n          series,\n          i,\n          j,\n          realIndex\n        );\n        if (this.isFunnel && !this.isPyramid && this.barOptions.isFunnel3d && ((_a = w.config.plotOptions.funnel) == null ? void 0 : _a.shape) !== \"trapezoid\" && this.pathArr.length && j > 0) {\n          const barShadow = this.barHelpers.drawBarShadow({\n            color: typeof pathFill.color === \"string\" && ((_b = pathFill.color) == null ? void 0 : _b.indexOf(\"url\")) === -1 ? pathFill.color : Utils$1.hexToRgba(w.globals.colors[i]),\n            prevPaths: this.pathArr[this.pathArr.length - 1],\n            currPaths: paths,\n            realIndex,\n            j\n          });\n          elBarShadows.add(barShadow);\n          if (w.config.chart.dropShadow.enabled) {\n            const filters = new Filters(this.w);\n            filters.dropShadow(barShadow, w.config.chart.dropShadow, realIndex);\n          }\n        }\n        this.pathArr.push(paths);\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition: paths.barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        y = paths.y;\n        x = paths.x;\n        if (j > 0) {\n          xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n        }\n        yArrj.push(y);\n        this.renderSeries(__spreadProps(__spreadValues({\n          realIndex,\n          pathFill: pathFill.color\n        }, pathFill.useRangeColor ? { lineFill: pathFill.color } : {}), {\n          j,\n          i,\n          columnGroupIndex,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          x,\n          y,\n          series,\n          barHeight: Math.abs(paths.barHeight ? paths.barHeight : barHeight),\n          barWidth: Math.abs(paths.barWidth ? paths.barWidth : barWidth),\n          elDataLabelsWrap,\n          elGoalsMarkers,\n          elBarShadows,\n          visibleSeries: this.visibleI,\n          type: \"bar\"\n        }));\n      }\n      w.globals.seriesXvalues[realIndex] = xArrj;\n      w.globals.seriesYvalues[realIndex] = yArrj;\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{ realIndex?: any, pathFill?: any, lineFill?: any, j?: any, i?: any, columnGroupIndex?: any, pathFrom?: any, pathTo?: any, strokeWidth?: any, elSeries?: any, x?: any, y?: any, y1?: any, y2?: any, series?: any, barHeight?: any, barWidth?: any, barXPosition?: any, barYPosition?: any, elDataLabelsWrap?: any, elGoalsMarkers?: any, elBarShadows?: any, visibleSeries?: any, type?: any, classes?: any }} opts */\n  renderSeries({\n    realIndex,\n    pathFill,\n    lineFill,\n    j,\n    i,\n    columnGroupIndex,\n    pathFrom,\n    pathTo,\n    strokeWidth,\n    elSeries,\n    x,\n    // x pos\n    y,\n    // y pos\n    y1,\n    // absolute value\n    y2,\n    // absolute value\n    series,\n    barHeight,\n    barWidth,\n    barXPosition,\n    barYPosition,\n    elDataLabelsWrap,\n    elGoalsMarkers,\n    elBarShadows,\n    visibleSeries,\n    type,\n    classes\n  }) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    let skipDrawing = false;\n    if (!elSeries._bindingsDelegated) {\n      elSeries._bindingsDelegated = true;\n      graphics.setupEventDelegation(elSeries, `.apexcharts-${type}-area`);\n    }\n    if (!lineFill) {\n      let fetchColor = function(i2) {\n        const exp = w.config.stroke.colors;\n        let c;\n        if (Array.isArray(exp) && exp.length > 0) {\n          c = exp[i2];\n          if (!c) c = \"\";\n          if (typeof c === \"function\") {\n            return c({\n              value: w.seriesData.series[i2][j],\n              dataPointIndex: j,\n              w\n            });\n          }\n        }\n        return c;\n      };\n      const checkAvailableColor = typeof w.globals.stroke.colors[realIndex] === \"function\" ? fetchColor(realIndex) : w.globals.stroke.colors[realIndex];\n      lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : checkAvailableColor;\n    }\n    const barDataLabels = new BarDataLabels(this);\n    const dataLabelsObj = (\n      /** @type {any} */\n      barDataLabels.handleBarDataLabels({\n        x,\n        y,\n        y1,\n        y2,\n        i,\n        j,\n        series,\n        realIndex,\n        columnGroupIndex,\n        barHeight,\n        barWidth,\n        barXPosition,\n        barYPosition,\n        visibleSeries\n      })\n    );\n    if (!w.globals.isBarHorizontal) {\n      if (dataLabelsObj.dataLabelsPos.dataLabelsX + Math.max(barWidth, w.globals.barPadForNumericAxis) < 0 || dataLabelsObj.dataLabelsPos.dataLabelsX - Math.max(barWidth, w.globals.barPadForNumericAxis) > w.layout.gridWidth) {\n        skipDrawing = true;\n      }\n    }\n    if (\n      /** @type {Record<string,any>} */\n      w.config.series[i].data[j] && /** @type {Record<string,any>} */\n      w.config.series[i].data[j].strokeColor\n    ) {\n      lineFill = /** @type {Record<string,any>} */\n      w.config.series[i].data[j].strokeColor;\n    }\n    if (this.isNullValue) {\n      pathFill = \"none\";\n    }\n    const animCfg = w.config.chart.animations;\n    const gradCfg = animCfg.animateGradually;\n    const staggerEnabled = gradCfg && gradCfg.enabled !== false;\n    let delay = 0;\n    if (staggerEnabled) {\n      const totalBars = w.globals.dataPoints || 1;\n      const configStep = gradCfg.delay || 0;\n      const baseDelayMs = Math.min(\n        configStep,\n        animCfg.speed * 0.5 / Math.max(1, totalBars)\n      );\n      let delayMs = computeStagger({\n        style: \"sequential\",\n        index: j,\n        baseDelay: baseDelayMs\n      });\n      if (w.config.chart.stacked) {\n        delayMs += i * baseDelayMs * 0.5;\n      }\n      const delayFactor = configStep || 1;\n      delay = delayMs / delayFactor;\n    }\n    if (!skipDrawing) {\n      const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n      const dataChangeSpeed = morphActive ? this.ctx.morphTypeChange.getSpeed() : w.config.chart.animations.dynamicAnimation.speed;\n      const renderedPath = (\n        /** @type {any} */\n        graphics.renderPaths({\n          i,\n          j,\n          realIndex,\n          pathFrom,\n          pathTo,\n          stroke: lineFill,\n          strokeWidth,\n          strokeLineCap: w.config.stroke.lineCap,\n          fill: pathFill,\n          animationDelay: delay,\n          initialSpeed: w.config.chart.animations.speed,\n          dataChangeSpeed,\n          className: `apexcharts-${type}-area ${classes}`,\n          chartType: type,\n          bindEventsOnPaths: false\n        })\n      );\n      renderedPath.attr(\"clip-path\", `url(#gridRectBarMask${w.globals.cuid})`);\n      const forecast = w.config.forecastDataPoints;\n      if (forecast.count > 0) {\n        if (j >= w.globals.dataPoints - forecast.count) {\n          renderedPath.node.setAttribute(\"stroke-dasharray\", forecast.dashArray);\n          renderedPath.node.setAttribute(\"stroke-width\", forecast.strokeWidth);\n          renderedPath.node.setAttribute(\"fill-opacity\", forecast.fillOpacity);\n        }\n      }\n      if (typeof y1 !== \"undefined\" && typeof y2 !== \"undefined\") {\n        renderedPath.attr(\"data-range-y1\", y1);\n        renderedPath.attr(\"data-range-y2\", y2);\n      }\n      const filters = new Filters(this.w);\n      filters.setSelectionFilter(renderedPath, realIndex, j);\n      elSeries.add(renderedPath);\n      renderedPath.attr({\n        cy: dataLabelsObj.dataLabelsPos.bcy,\n        cx: dataLabelsObj.dataLabelsPos.bcx,\n        j,\n        val: w.seriesData.series[i][j],\n        barHeight,\n        barWidth\n      });\n      if (dataLabelsObj.dataLabels !== null) {\n        elDataLabelsWrap.add(dataLabelsObj.dataLabels);\n      }\n      if (dataLabelsObj.totalDataLabels) {\n        elDataLabelsWrap.add(dataLabelsObj.totalDataLabels);\n      }\n      elSeries.add(elDataLabelsWrap);\n      if (elGoalsMarkers) {\n        elSeries.add(elGoalsMarkers);\n      }\n      if (elBarShadows) {\n        elSeries.add(elBarShadows);\n      }\n    }\n    return elSeries;\n  }\n  /** @param {{indexes: any, barHeight: any, strokeWidth: any, zeroW: any, x: any, y: any, yDivision: any, elSeries: any}} opts */\n  drawBarPaths({\n    indexes,\n    barHeight,\n    strokeWidth,\n    zeroW,\n    x,\n    y,\n    yDivision,\n    elSeries\n  }) {\n    const w = this.w;\n    const i = indexes.i;\n    const j = indexes.j;\n    let barYPosition;\n    if (w.axisFlags.isXNumeric) {\n      y = (w.seriesData.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight;\n      barYPosition = y + barHeight * this.visibleI;\n    } else {\n      if (w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        const { nonZeroColumns, zeroEncounters } = this.barHelpers.getZeroValueEncounters({ i, j });\n        if (nonZeroColumns > 0) {\n          barHeight = this.seriesLen * barHeight / nonZeroColumns;\n        }\n        barYPosition = y + barHeight * this.visibleI;\n        barYPosition -= barHeight * zeroEncounters;\n      } else {\n        barYPosition = y + barHeight * this.visibleI;\n      }\n    }\n    const useTrapezoid = this.isFunnel && w.config.plotOptions.funnel.shape === \"trapezoid\";\n    const pyramidSeg = this.isPyramid && this.pyramidLayout ? this.pyramidLayout[j] : null;\n    const usePyramid = !!pyramidSeg;\n    if (pyramidSeg) {\n      barYPosition = pyramidSeg.y;\n      barHeight = pyramidSeg.height;\n    } else if (this.isFunnel && !useTrapezoid) {\n      const _zeroW = zeroW != null ? zeroW : 0;\n      zeroW = _zeroW - /** @type {number} */\n      /** @type {any} */\n      (this.barHelpers.getXForValue(\n        /** @type {any} */\n        this.series[i][j],\n        _zeroW\n      ) - _zeroW) / 2;\n    }\n    x = this.barHelpers.getXForValue(\n      /** @type {any} */\n      this.series[i][j],\n      zeroW != null ? zeroW : 0\n    );\n    let paths;\n    if (pyramidSeg) {\n      paths = /** @type {any} */\n      this.barHelpers.getPyramidPaths({\n        barYPosition,\n        barHeight,\n        topHalf: pyramidSeg.topHalf,\n        bottomHalf: pyramidSeg.bottomHalf,\n        realIndex: indexes.realIndex,\n        j,\n        strokeWidth,\n        w\n      });\n    } else if (useTrapezoid) {\n      paths = /** @type {any} */\n      this.barHelpers.getFunnelTrapezoidPaths({\n        barYPosition,\n        barHeight,\n        series: (\n          /** @type {any} */\n          this.series\n        ),\n        i,\n        j,\n        realIndex: indexes.realIndex,\n        strokeWidth,\n        w\n      });\n    } else {\n      paths = /** @type {any} */\n      this.barHelpers.getBarpaths({\n        barYPosition,\n        barHeight,\n        x1: zeroW,\n        x2: x,\n        strokeWidth,\n        isReversed: this.isReversed,\n        series: this.series,\n        realIndex: indexes.realIndex,\n        i,\n        j,\n        w\n      });\n    }\n    if (useTrapezoid || usePyramid) {\n      zeroW = paths.x1;\n      x = paths.x;\n    }\n    if (!w.axisFlags.isXNumeric && !usePyramid) {\n      y = y + yDivision;\n    }\n    if (usePyramid) {\n      y = barYPosition;\n    }\n    this.barHelpers.barBackground({\n      j,\n      i,\n      y1: barYPosition - barHeight * this.visibleI,\n      y2: barHeight * this.seriesLen,\n      elSeries\n    });\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      x1: zeroW,\n      x,\n      y,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        i,\n        j,\n        0\n      ),\n      barYPosition,\n      barHeight\n    };\n  }\n  /** @param {{indexes: any, x: any, y: any, xDivision: any, barWidth: any, zeroH: any, strokeWidth: any, elSeries: any}} opts */\n  drawColumnPaths({\n    indexes,\n    x,\n    y,\n    xDivision,\n    barWidth,\n    zeroH,\n    strokeWidth,\n    elSeries\n  }) {\n    const w = this.w;\n    const realIndex = indexes.realIndex;\n    const translationsIndex = indexes.translationsIndex;\n    const i = indexes.i;\n    const j = indexes.j;\n    const bc = indexes.bc;\n    let barXPosition;\n    if (w.axisFlags.isXNumeric) {\n      const xForNumericX = this.getBarXForNumericXAxis({\n        x,\n        j,\n        realIndex,\n        barWidth\n      });\n      x = xForNumericX.x;\n      barXPosition = xForNumericX.barXPosition;\n    } else {\n      if (w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        const { nonZeroColumns, zeroEncounters } = this.barHelpers.getZeroValueEncounters({ i, j });\n        if (nonZeroColumns > 0) {\n          barWidth = this.seriesLen * barWidth / nonZeroColumns;\n        }\n        barXPosition = x + barWidth * this.visibleI;\n        barXPosition -= barWidth * zeroEncounters;\n      } else {\n        barXPosition = x + barWidth * this.visibleI;\n      }\n    }\n    y = this.barHelpers.getYForValue(\n      /** @type {any} */\n      this.series[i][j],\n      zeroH,\n      translationsIndex\n    );\n    const paths = (\n      /** @type {any} */\n      this.barHelpers.getColumnPaths({\n        barXPosition,\n        barWidth,\n        y1: zeroH,\n        y2: y,\n        strokeWidth,\n        isReversed: this.isReversed,\n        series: this.series,\n        realIndex,\n        i,\n        j,\n        w\n      })\n    );\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    }\n    this.barHelpers.barBackground({\n      bc,\n      j,\n      i,\n      x1: barXPosition - strokeWidth / 2 - barWidth * this.visibleI,\n      x2: barWidth * this.seriesLen + strokeWidth / 2,\n      elSeries\n    });\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      x,\n      y,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        i,\n        j,\n        translationsIndex\n      ),\n      barXPosition,\n      barWidth\n    };\n  }\n  /** @param {{x: any, barWidth: any, realIndex: any, j: any}} opts */\n  getBarXForNumericXAxis({ x, barWidth, realIndex, j }) {\n    const w = this.w;\n    let sxI = realIndex;\n    if (!w.seriesData.seriesX[realIndex].length) {\n      sxI = w.globals.maxValsInArrayIndex;\n    }\n    if (Utils$1.isNumber(w.seriesData.seriesX[sxI][j])) {\n      x = (w.seriesData.seriesX[sxI][j] - w.globals.minX) / this.xRatio - barWidth * this.seriesLen / 2;\n    }\n    return {\n      barXPosition: x + barWidth * this.visibleI,\n      x\n    };\n  }\n  /**\n   * Resolve `pathFrom` for a bar on data update. Returns the previous render's\n   * `d` string for the same `(realIndex, j)` only when its SVG command count\n   * matches `pathTo` — that's the survivor-with-stable-shape case where SVG.js\n   * morph produces a smooth resize. When commands mismatch (corner state\n   * flipped, e.g. bar became new top-of-stack after legend toggle) or the bar\n   * is genuinely new (no captured previous), returns `pathTo` — which makes\n   * pathFrom === pathTo so morph is a visual no-op (snap).\n   *\n   * @param {number} realIndex - stable series index from `data:realIndex`\n   * @param {number} j - data-point index within the series\n   * @param {string} pathTo - the freshly-built path for this bar (post-roundPathCorners)\n   * @returns {string}\n   **/\n  getPreviousPath(realIndex, j, pathTo) {\n    const w = this.w;\n    let oldD = null;\n    for (let pp = 0; pp < w.globals.previousPaths.length; pp++) {\n      const gpp = w.globals.previousPaths[pp];\n      if (gpp.paths && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(String(realIndex), 10)) {\n        if (typeof gpp.paths[j] !== \"undefined\") {\n          oldD = gpp.paths[j].d;\n        }\n      }\n    }\n    if (oldD && Bar.pathCommandCount(oldD) === Bar.pathCommandCount(pathTo)) {\n      return oldD;\n    }\n    return pathTo;\n  }\n  /**\n   * Count SVG path commands (M, L, C, Q, Z, etc.). Used to detect whether\n   * two paths can be morphed safely — SVG.js requires matching command counts.\n   *\n   * @param {string} d\n   * @returns {number}\n   */\n  static pathCommandCount(d) {\n    if (!d) return 0;\n    const matches = d.match(/[A-Za-z]/g);\n    return matches ? matches.length : 0;\n  }\n}\nclass BarStacked extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {number} seriesIndex\n   */\n  draw(series, seriesIndex) {\n    const w = this.w;\n    this.graphics = new Graphics(this.w);\n    this.bar = new Bar(this.w, this.ctx, this.xyRatios);\n    const coreUtils = new CoreUtils(this.w);\n    series = coreUtils.getLogSeries(series);\n    this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    if (w.config.chart.stackType === \"100%\") {\n      series = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex.map(\n          (_) => w.globals.seriesPercent[_]\n        )\n      ) : w.globals.seriesPercent.slice();\n    }\n    this.series = series;\n    this.barHelpers.initializeStackedPrevVars(this);\n    const ret = this.graphics.group({\n      class: \"apexcharts-bar-series apexcharts-plot-series\"\n    });\n    let x = 0;\n    let y = 0;\n    for (let i = 0, bc = 0; i < series.length; i++, bc++) {\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { groupIndex, columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      this.groupCtx = /** @type {any} */\n      this[\n        /** @type {any} */\n        w.labelData.seriesGroups[groupIndex]\n      ];\n      const xArrValues = [];\n      const yArrValues = [];\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n      let elSeries = this.graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      const elDataLabelsWrap = this.graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      const elGoalsMarkers = this.graphics.group({\n        class: \"apexcharts-bar-goals-markers\"\n      });\n      const initPositions = this.initialPositions(\n        x,\n        y,\n        void 0,\n        void 0,\n        void 0,\n        void 0,\n        translationsIndex\n      );\n      const {\n        xDivision,\n        // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n        yDivision,\n        // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n        zeroH,\n        // zeroH is the baseline where 0 meets y axis\n        zeroW\n        // zeroW is the baseline where 0 meets x axis\n      } = initPositions;\n      let barHeight = initPositions.barHeight;\n      let barWidth = initPositions.barWidth;\n      y = initPositions.y;\n      x = initPositions.x;\n      w.globals.barHeight = barHeight;\n      w.globals.barWidth = barWidth;\n      this.barHelpers.initializeStackedXYVars(this);\n      if (this.groupCtx.prevY.length === 1 && /**\n       * @param {number} val\n       */\n      this.groupCtx.prevY[0].every((val) => isNaN(val))) {\n        this.groupCtx.prevY[0] = this.groupCtx.prevY[0].map(() => zeroH);\n        this.groupCtx.prevYF[0] = this.groupCtx.prevYF[0].map(() => 0);\n      }\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        const commonPathOpts = {\n          indexes: { i, j, realIndex, translationsIndex, bc },\n          strokeWidth,\n          x,\n          y,\n          elSeries,\n          columnGroupIndex,\n          seriesGroup: w.labelData.seriesGroups[groupIndex]\n        };\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        if (this.isHorizontal) {\n          paths = this.drawStackedBarPaths(__spreadProps(__spreadValues({}, commonPathOpts), {\n            zeroW,\n            barHeight,\n            yDivision\n          }));\n          barWidth = this.series[i][j] / this.invertedYRatio;\n        } else {\n          paths = this.drawStackedColumnPaths(__spreadProps(__spreadValues({}, commonPathOpts), {\n            xDivision,\n            barWidth,\n            zeroH\n          }));\n          barHeight = this.series[i][j] / this.yRatio[translationsIndex];\n        }\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition: paths.barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        y = paths.y;\n        x = paths.x;\n        xArrValues.push(x);\n        yArrValues.push(y);\n        const pathFill = this.barHelpers.getPathFillColor(\n          series,\n          i,\n          j,\n          realIndex\n        );\n        let classes = \"\";\n        const flipClass = w.globals.isBarHorizontal ? \"apexcharts-flip-x\" : \"apexcharts-flip-y\";\n        if (this.barHelpers.arrBorderRadius[realIndex][j] === \"bottom\" && w.seriesData.series[realIndex][j] > 0 || this.barHelpers.arrBorderRadius[realIndex][j] === \"top\" && w.seriesData.series[realIndex][j] < 0) {\n          classes = flipClass;\n        }\n        elSeries = this.renderSeries(__spreadProps(__spreadValues({\n          realIndex,\n          pathFill: pathFill.color\n        }, pathFill.useRangeColor ? { lineFill: pathFill.color } : {}), {\n          j,\n          i,\n          columnGroupIndex,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          x,\n          y,\n          series,\n          barHeight,\n          barWidth,\n          elDataLabelsWrap,\n          elGoalsMarkers,\n          type: \"bar\",\n          visibleSeries: columnGroupIndex,\n          classes\n        }));\n      }\n      w.globals.seriesXvalues[realIndex] = xArrValues;\n      w.globals.seriesYvalues[realIndex] = yArrValues;\n      this.groupCtx.prevY.push(this.groupCtx.yArrj);\n      this.groupCtx.prevYF.push(this.groupCtx.yArrjF);\n      this.groupCtx.prevYVal.push(this.groupCtx.yArrjVal);\n      this.groupCtx.prevX.push(this.groupCtx.xArrj);\n      this.groupCtx.prevXF.push(this.groupCtx.xArrjF);\n      this.groupCtx.prevXVal.push(this.groupCtx.xArrjVal);\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number | undefined} xDivision\n   * @param {number | undefined} yDivision\n   * @param {number | undefined} zeroH\n   * @param {number | undefined} zeroW\n   * @param {number} translationsIndex\n   */\n  initialPositions(x, y, xDivision, yDivision, zeroH, zeroW, translationsIndex) {\n    const w = this.w;\n    let barHeight, barWidth;\n    if (this.isHorizontal) {\n      yDivision = w.layout.gridHeight / w.globals.dataPoints;\n      const userBarHeight = w.config.plotOptions.bar.barHeight;\n      if (String(userBarHeight).indexOf(\"%\") === -1) {\n        barHeight = parseInt(userBarHeight, 10);\n      } else {\n        barHeight = yDivision * parseInt(userBarHeight, 10) / 100;\n      }\n      zeroW = w.globals.padHorizontal + (this.isReversed ? w.layout.gridWidth - this.baseLineInvertedY : this.baseLineInvertedY);\n      y = (yDivision - barHeight) / 2;\n    } else {\n      xDivision = w.layout.gridWidth / w.globals.dataPoints;\n      barWidth = xDivision;\n      const userColumnWidth = w.config.plotOptions.bar.columnWidth;\n      if (w.axisFlags.isXNumeric && w.globals.dataPoints > 1) {\n        xDivision = w.globals.minXDiff / this.xRatio;\n        barWidth = xDivision * parseInt(this.barOptions.columnWidth, 10) / 100;\n      } else if (String(userColumnWidth).indexOf(\"%\") === -1) {\n        barWidth = parseInt(userColumnWidth, 10);\n      } else {\n        barWidth *= parseInt(userColumnWidth, 10) / 100;\n      }\n      if (this.isReversed) {\n        zeroH = this.baseLineY[translationsIndex];\n      } else {\n        zeroH = w.layout.gridHeight - this.baseLineY[translationsIndex];\n      }\n      x = w.globals.padHorizontal + (xDivision - barWidth) / 2;\n    }\n    const subDivisions = w.globals.barGroups.length || 1;\n    return {\n      x,\n      y,\n      yDivision,\n      xDivision,\n      barHeight: (barHeight != null ? barHeight : 0) / subDivisions,\n      barWidth: (barWidth != null ? barWidth : 0) / subDivisions,\n      zeroH,\n      zeroW\n    };\n  }\n  /** @param {{indexes: any, barHeight: any, strokeWidth: any, zeroW: any, x: any, y: any, columnGroupIndex: any, seriesGroup: any, yDivision: any, elSeries: any}} opts */\n  drawStackedBarPaths({\n    indexes,\n    barHeight,\n    strokeWidth,\n    zeroW,\n    x,\n    y,\n    columnGroupIndex,\n    seriesGroup,\n    yDivision,\n    elSeries\n  }) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const barYPosition = y + columnGroupIndex * barHeight;\n    let barXPosition;\n    const i = indexes.i;\n    const j = indexes.j;\n    const realIndex = indexes.realIndex;\n    const translationsIndex = indexes.translationsIndex;\n    let prevBarW = 0;\n    for (let k = 0; k < this.groupCtx.prevXF.length; k++) {\n      prevBarW = prevBarW + this.groupCtx.prevXF[k][j];\n    }\n    let gsi = i;\n    if (\n      /** @type {Record<string,any>} */\n      w.config.series[realIndex].name\n    ) {\n      gsi = seriesGroup.indexOf(\n        /** @type {Record<string,any>} */\n        w.config.series[realIndex].name\n      );\n    }\n    if (gsi > 0) {\n      let bXP = zeroW;\n      if (this.groupCtx.prevXVal[gsi - 1][j] < 0) {\n        bXP = /** @type {any} */\n        ((_a = this.series[i]) == null ? void 0 : _a[j]) >= 0 ? this.groupCtx.prevX[gsi - 1][j] + prevBarW - (this.isReversed ? prevBarW : 0) * 2 : this.groupCtx.prevX[gsi - 1][j];\n      } else if (this.groupCtx.prevXVal[gsi - 1][j] >= 0) {\n        bXP = /** @type {any} */\n        ((_b = this.series[i]) == null ? void 0 : _b[j]) >= 0 ? this.groupCtx.prevX[gsi - 1][j] : this.groupCtx.prevX[gsi - 1][j] - prevBarW + (this.isReversed ? prevBarW : 0) * 2;\n      }\n      barXPosition = bXP;\n    } else {\n      barXPosition = zeroW;\n    }\n    if (\n      /** @type {any} */\n      ((_c = this.series[i]) == null ? void 0 : _c[j]) === null\n    ) {\n      x = barXPosition;\n    } else {\n      x = barXPosition + /** @type {any} */\n      ((_d = this.series[i]) == null ? void 0 : _d[j]) / this.invertedYRatio - (this.isReversed ? (\n        /** @type {any} */\n        ((_e = this.series[i]) == null ? void 0 : _e[j]) / this.invertedYRatio\n      ) : 0) * 2;\n    }\n    const paths = this.barHelpers.getBarpaths({\n      barYPosition,\n      barHeight,\n      x1: barXPosition,\n      x2: x,\n      strokeWidth,\n      isReversed: this.isReversed,\n      series: this.series,\n      realIndex: indexes.realIndex,\n      seriesGroup,\n      i,\n      j,\n      w\n    });\n    this.barHelpers.barBackground({\n      j,\n      i,\n      y1: barYPosition,\n      y2: barHeight,\n      elSeries\n    });\n    y = y + yDivision;\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        i,\n        j,\n        translationsIndex\n      ),\n      barXPosition,\n      barYPosition,\n      x,\n      y\n    };\n  }\n  /** @param {{indexes: any, x: any, y: any, xDivision: any, barWidth: any, zeroH: any, columnGroupIndex: any, seriesGroup: any, elSeries: any}} opts */\n  drawStackedColumnPaths({\n    indexes,\n    x,\n    y,\n    xDivision,\n    barWidth,\n    zeroH,\n    columnGroupIndex,\n    seriesGroup,\n    elSeries\n  }) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n    const w = this.w;\n    const i = indexes.i;\n    const j = indexes.j;\n    const bc = indexes.bc;\n    const realIndex = indexes.realIndex;\n    const translationsIndex = indexes.translationsIndex;\n    if (w.axisFlags.isXNumeric) {\n      let seriesVal = w.seriesData.seriesX[realIndex][j];\n      if (!seriesVal) seriesVal = 0;\n      x = (seriesVal - w.globals.minX) / this.xRatio - barWidth / 2 * w.globals.barGroups.length;\n    }\n    const barXPosition = x + columnGroupIndex * barWidth;\n    let barYPosition;\n    let prevBarH = 0;\n    for (let k = 0; k < this.groupCtx.prevYF.length; k++) {\n      prevBarH = prevBarH + (!isNaN(this.groupCtx.prevYF[k][j]) ? this.groupCtx.prevYF[k][j] : 0);\n    }\n    let gsi = i;\n    if (seriesGroup) {\n      gsi = seriesGroup.indexOf(w.seriesData.seriesNames[realIndex]);\n    }\n    if (gsi > 0 && !w.axisFlags.isXNumeric || gsi > 0 && w.axisFlags.isXNumeric && w.seriesData.seriesX[realIndex - 1][j] === w.seriesData.seriesX[realIndex][j]) {\n      let bYP;\n      let prevYValue;\n      const p = Math.min(this.yRatio.length + 1, realIndex + 1);\n      if (this.groupCtx.prevY[gsi - 1] !== void 0 && this.groupCtx.prevY[gsi - 1].length) {\n        for (let ii = 1; ii < p; ii++) {\n          if (!isNaN((_a = this.groupCtx.prevY[gsi - ii]) == null ? void 0 : _a[j])) {\n            prevYValue = this.groupCtx.prevY[gsi - ii][j];\n            break;\n          }\n        }\n      }\n      for (let ii = 1; ii < p; ii++) {\n        if (((_b = this.groupCtx.prevYVal[gsi - ii]) == null ? void 0 : _b[j]) < 0) {\n          bYP = /** @type {any} */\n          ((_c = this.series[i]) == null ? void 0 : _c[j]) >= 0 ? prevYValue - prevBarH + (this.isReversed ? prevBarH : 0) * 2 : prevYValue;\n          break;\n        } else if (((_d = this.groupCtx.prevYVal[gsi - ii]) == null ? void 0 : _d[j]) >= 0) {\n          bYP = /** @type {any} */\n          ((_e = this.series[i]) == null ? void 0 : _e[j]) >= 0 ? prevYValue : prevYValue + prevBarH - (this.isReversed ? prevBarH : 0) * 2;\n          break;\n        }\n      }\n      if (typeof bYP === \"undefined\") bYP = w.layout.gridHeight;\n      if (\n        /**\n         * @param {number} val\n         */\n        ((_f = this.groupCtx.prevYF[0]) == null ? void 0 : _f.every((val) => val === 0)) && this.groupCtx.prevYF.slice(1, gsi).every(\n          (arr) => arr.every((val) => isNaN(val))\n        )\n      ) {\n        barYPosition = zeroH;\n      } else {\n        barYPosition = bYP;\n      }\n    } else {\n      barYPosition = zeroH;\n    }\n    if (\n      /** @type {any} */\n      (_g = this.series[i]) == null ? void 0 : _g[j]\n    ) {\n      y = barYPosition - /** @type {any} */\n      ((_h = this.series[i]) == null ? void 0 : _h[j]) / this.yRatio[translationsIndex] + (this.isReversed ? (\n        /** @type {any} */\n        ((_i = this.series[i]) == null ? void 0 : _i[j]) / this.yRatio[translationsIndex]\n      ) : 0) * 2;\n    } else {\n      y = barYPosition;\n    }\n    const paths = this.barHelpers.getColumnPaths({\n      barXPosition,\n      barWidth,\n      y1: barYPosition,\n      y2: y,\n      yRatio: this.yRatio[translationsIndex],\n      strokeWidth: this.strokeWidth,\n      isReversed: this.isReversed,\n      series: this.series,\n      seriesGroup,\n      realIndex: indexes.realIndex,\n      i,\n      j,\n      w\n    });\n    this.barHelpers.barBackground({\n      bc,\n      j,\n      i,\n      x1: barXPosition,\n      x2: barWidth,\n      elSeries\n    });\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        i,\n        j,\n        0\n      ),\n      barXPosition,\n      x: w.axisFlags.isXNumeric ? x : x + xDivision,\n      y\n    };\n  }\n}\nfunction buildJitterGroups({\n  w,\n  points,\n  seedA,\n  seedB,\n  center,\n  halfExtent,\n  alongFn,\n  isHorizontal,\n  options: options2,\n  clampAt\n}) {\n  const opts = options2;\n  if (!opts || opts.show === false) return [];\n  if (!points || !points.length) return [];\n  const maxPoints = opts.maxPoints || 3e3;\n  const stride = points.length > maxPoints ? Math.ceil(points.length / maxPoints) : 1;\n  const r = opts.size != null ? opts.size : 2.5;\n  const jitterFrac = opts.jitter != null ? opts.jitter : 0.5;\n  const jitterPx = halfExtent * jitterFrac;\n  const constrain = opts.constrainToViolin !== false && typeof clampAt === \"function\";\n  const isSquare = opts.shape === \"square\";\n  const scale = opts.colorScale;\n  const useScale = scale && Array.isArray(scale.colors) && scale.colors.length > 0;\n  const steps = useScale ? Math.max(2, scale.steps || 24) : 1;\n  const sMin = useScale && scale.min != null ? scale.min : w.globals.minY;\n  const sMax = useScale && scale.max != null ? scale.max : w.globals.maxY;\n  const span = sMax - sMin || 1;\n  const buckets = useScale ? new Array(steps).fill(\"\") : [\"\"];\n  for (let k = 0; k < points.length; k += stride) {\n    const v = points[k];\n    const a = alongFn(v);\n    let off = (hash01(seedA * 7919 + seedB * 100003 + k) - 0.5) * 2 * jitterPx;\n    if (constrain) {\n      const cap = (\n        /** @type {(v:number)=>number} */\n        clampAt(v)\n      );\n      if (off > cap) off = cap;\n      if (off < -cap) off = -cap;\n    }\n    const px = isHorizontal ? a : center + off;\n    const py = isHorizontal ? center + off : a;\n    const sub = isSquare ? squareSubPath(px, py, r) : circleSubPath(px, py, r);\n    if (useScale) {\n      let t = (v - sMin) / span;\n      if (t < 0) t = 0;\n      if (t > 1) t = 1;\n      buckets[Math.round(t * (steps - 1))] += sub;\n    } else {\n      buckets[0] += sub;\n    }\n  }\n  if (!useScale) {\n    return buckets[0] ? [{ fill: null, d: buckets[0] }] : [];\n  }\n  const groups = [];\n  for (let b = 0; b < steps; b++) {\n    if (!buckets[b]) continue;\n    groups.push({\n      fill: rampColorAt(scale.colors, b / (steps - 1)),\n      d: buckets[b]\n    });\n  }\n  return groups;\n}\nfunction renderJitter({\n  graphics,\n  w,\n  elSeries,\n  pointsByCat,\n  options: options2,\n  distributed,\n  realIndex,\n  wrapClass,\n  pointClass\n}) {\n  if (!options2 || options2.show === false || !pointsByCat.length) return;\n  const pOpacity = options2.opacity != null ? options2.opacity : 0.9;\n  const strokeColor = options2.strokeColor != null ? options2.strokeColor : \"#fff\";\n  const strokeW = options2.strokeWidth != null ? options2.strokeWidth : 1;\n  const willAnimateIn = w.config.chart.animations.enabled && !w.globals.resized && !w.globals.dataChanged;\n  const elPointsWrap = graphics.group({\n    class: willAnimateIn ? `${wrapClass} apexcharts-element-hidden` : wrapClass\n  });\n  if (willAnimateIn) {\n    w.globals.delayedElements.push({ el: elPointsWrap.node });\n  }\n  pointsByCat.forEach(({ groups, j }) => {\n    const catColor = distributed ? w.globals.colors[j] : w.globals.colors[realIndex];\n    const fc = options2.fillColor;\n    const defaultFill = fc === \"series\" ? catColor : fc === \"series-dark\" ? darkenColor(catColor, 0.45) : fc || darkenColor(catColor, 0.45);\n    groups.forEach((g) => {\n      const elPoints = graphics.drawPath({\n        d: g.d,\n        fill: g.fill != null ? g.fill : defaultFill,\n        stroke: strokeW > 0 ? strokeColor : \"none\",\n        strokeWidth: strokeW,\n        fillOpacity: pOpacity,\n        classes: pointClass\n      });\n      elPoints.attr(\"data:realIndex\", realIndex);\n      elPoints.attr(\"j\", j);\n      elPoints.attr(\"clip-path\", `url(#gridRectBarMask${w.globals.cuid})`);\n      elPoints.node.style.pointerEvents = \"none\";\n      elPointsWrap.add(elPoints);\n    });\n  });\n  elSeries.add(elPointsWrap);\n}\nfunction darkenColor(color, amount) {\n  const rgb = Utils$1.parseHex(color);\n  if (!rgb) return color;\n  const f = Math.max(0, 1 - amount);\n  return `rgb(${Math.round(rgb[0] * f)},${Math.round(rgb[1] * f)},${Math.round(rgb[2] * f)})`;\n}\nfunction rampColorAt(colors, t) {\n  if (!colors.length) return \"#000\";\n  if (colors.length === 1) return colors[0];\n  const x = Math.max(0, Math.min(1, t)) * (colors.length - 1);\n  const i = Math.floor(x);\n  const frac = x - i;\n  const c0 = Utils$1.parseHex(colors[i]) || [0, 0, 0];\n  const c1 = Utils$1.parseHex(colors[Math.min(i + 1, colors.length - 1)]) || c0;\n  const mix = (a, b) => Math.round(a + (b - a) * frac);\n  return `rgb(${mix(c0[0], c1[0])},${mix(c0[1], c1[1])},${mix(c0[2], c1[2])})`;\n}\nfunction hash01(n) {\n  let h = (n ^ 2654435769) >>> 0;\n  h = Math.imul(h ^ h >>> 16, 73244475);\n  h = Math.imul(h ^ h >>> 16, 73244475);\n  return ((h ^ h >>> 16) >>> 0) / 4294967296;\n}\nfunction circleSubPath(px, py, r) {\n  return `M ${px - r} ${py} a ${r} ${r} 0 1 0 ${2 * r} 0 a ${r} ${r} 0 1 0 ${-2 * r} 0 `;\n}\nfunction squareSubPath(px, py, r) {\n  return `M ${px - r} ${py - r} h ${2 * r} v ${2 * r} h ${-2 * r} z `;\n}\nclass BoxCandleStick extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {string} ctype\n   * @param {number} seriesIndex\n   */\n  // @ts-ignore -- BoxCandleStick.draw has an extra ctype param compared to Bar.draw\n  draw(series, ctype, seriesIndex) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const type = w.globals.comboCharts ? ctype : w.config.chart.type;\n    const fill = new Fill(this.w);\n    this.candlestickOptions = this.w.config.plotOptions.candlestick;\n    this.boxOptions = this.w.config.plotOptions.boxPlot;\n    this.isHorizontal = w.config.plotOptions.bar.horizontal;\n    this.isOHLC = this.candlestickOptions && this.candlestickOptions.type === \"ohlc\";\n    this.coreUtils = new CoreUtils(this.w);\n    series = this.coreUtils.getLogSeries(series);\n    this.series = series;\n    this.yRatio = this.coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: `apexcharts-${type}-series apexcharts-plot-series`\n    });\n    for (let i = 0; i < series.length; i++) {\n      this.isBoxPlot = w.config.chart.type === \"boxPlot\" || /** @type {Record<string,any>} */\n      w.config.series[i].type === \"boxPlot\";\n      let x;\n      let y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        barHeight,\n        yDivision,\n        // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n        zeroW,\n        // zeroW is the baseline where 0 meets x axis\n        x: initX,\n        barWidth,\n        xDivision,\n        // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n        zeroH\n        // zeroH is the baseline where 0 meets y axis\n      } = initPositions;\n      y = initY;\n      x = initX;\n      xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      const elGoalsMarkers = graphics.group({\n        class: \"apexcharts-bar-goals-markers\"\n      });\n      const boxPointsOpts = this.isBoxPlot ? this.boxOptions.points : null;\n      const pointsByCat = [];\n      const gridW = w.layout.gridWidth;\n      const cullBuffer = barWidth != null ? barWidth : 0;\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        const pathsParams = {\n          indexes: {\n            i,\n            j,\n            realIndex,\n            translationsIndex\n          },\n          x,\n          y,\n          strokeWidth,\n          elSeries\n        };\n        if (this.isHorizontal) {\n          paths = this.drawHorizontalBoxPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            yDivision,\n            barHeight,\n            zeroW\n          }));\n        } else {\n          paths = this.drawVerticalBoxPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            xDivision,\n            barWidth,\n            zeroH,\n            cullBounds: { lo: -cullBuffer, hi: gridW + cullBuffer }\n          }));\n        }\n        y = paths.y;\n        x = paths.x;\n        if (j > 0) {\n          xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n        }\n        yArrj.push(y);\n        if (paths.culled) {\n          continue;\n        }\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition: paths.barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        paths.pathTo.forEach(\n          (pathTo, pi) => {\n            const lineFill = !this.isBoxPlot && this.candlestickOptions.wick.useFillColor ? paths.color[pi] : w.globals.stroke.colors[i];\n            const pathFill = fill.fillPath({\n              seriesNumber: realIndex,\n              dataPointIndex: j,\n              color: paths.color[pi],\n              value: series[i][j]\n            });\n            this.renderSeries({\n              realIndex,\n              pathFill,\n              lineFill,\n              j,\n              i,\n              pathFrom: paths.pathFrom,\n              pathTo,\n              strokeWidth,\n              elSeries,\n              x,\n              y,\n              series,\n              columnGroupIndex,\n              barHeight,\n              barWidth,\n              elDataLabelsWrap,\n              elGoalsMarkers,\n              visibleSeries: this.visibleI,\n              type: w.config.chart.type\n            });\n          }\n        );\n        if (boxPointsOpts && boxPointsOpts.show !== false) {\n          const pts = (_a = w.candleData.seriesBoxPoints[realIndex]) == null ? void 0 : _a[j];\n          if (pts && pts.length) {\n            const logVal = (v) => (\n              /** @type {any} */\n              this.coreUtils.getLogValAtSeriesIndex(\n                v,\n                realIndex\n              )\n            );\n            let center, halfExtent, alongFn;\n            if (this.isHorizontal) {\n              const yRatio = this.invertedYRatio;\n              const bh = barHeight != null ? barHeight : 0;\n              const z = zeroW != null ? zeroW : 0;\n              center = paths.barYPosition + bh / 2;\n              halfExtent = bh / 2;\n              alongFn = (v) => z + logVal(v) / yRatio;\n            } else {\n              const yRatio = this.yRatio[translationsIndex];\n              const bw = barWidth != null ? barWidth : 0;\n              const z = zeroH != null ? zeroH : 0;\n              center = paths.barXPosition + bw / 2;\n              halfExtent = bw / 2;\n              alongFn = (v) => z - logVal(v) / yRatio;\n            }\n            const groups = buildJitterGroups({\n              w,\n              points: pts,\n              seedA: realIndex,\n              seedB: j,\n              center,\n              halfExtent,\n              alongFn,\n              isHorizontal: this.isHorizontal,\n              options: boxPointsOpts\n            });\n            if (groups.length) pointsByCat.push({ groups, j });\n          }\n        }\n      }\n      if (boxPointsOpts) {\n        renderJitter({\n          graphics,\n          w,\n          elSeries,\n          pointsByCat,\n          options: boxPointsOpts,\n          distributed: w.config.plotOptions.bar.distributed,\n          realIndex,\n          wrapClass: \"apexcharts-boxPlot-points-wrap\",\n          pointClass: \"apexcharts-boxPlot-points\"\n        });\n      }\n      w.globals.seriesXvalues[realIndex] = xArrj;\n      w.globals.seriesYvalues[realIndex] = yArrj;\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{indexes: any, x: any, xDivision: any, barWidth: any, zeroH: any, strokeWidth: any, cullBounds?: {lo: number, hi: number}|null}} opts */\n  drawVerticalBoxPaths({\n    indexes,\n    x,\n    xDivision,\n    barWidth,\n    zeroH,\n    strokeWidth,\n    cullBounds = null\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const i = indexes.i;\n    const j = indexes.j;\n    const { colors: candleColors } = w.config.plotOptions.candlestick;\n    const { colors: boxColors } = this.boxOptions;\n    const realIndex = indexes.realIndex;\n    const getColor = (color2) => Array.isArray(color2) ? color2[realIndex] : color2;\n    const colorPos = getColor(candleColors.upward);\n    const colorNeg = getColor(candleColors.downward);\n    const yRatio = this.yRatio[indexes.translationsIndex];\n    const ohlc = this.getOHLCValue(realIndex, j);\n    let l1 = zeroH;\n    let l2 = zeroH;\n    let color = ohlc.o < ohlc.c ? [colorPos] : [colorNeg];\n    if (this.isBoxPlot) {\n      color = [getColor(boxColors.lower), getColor(boxColors.upper)];\n    }\n    let y1 = Math.min(ohlc.o, ohlc.c);\n    let y2 = Math.max(ohlc.o, ohlc.c);\n    let m = ohlc.m;\n    if (w.axisFlags.isXNumeric) {\n      x = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n    }\n    const barXPosition = x + barWidth * this.visibleI;\n    if (typeof /** @type {any} */\n    ((_a = this.series[i]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i]) == null ? void 0 : _b[j]) === null) {\n      y1 = zeroH;\n      y2 = zeroH;\n    } else {\n      y1 = zeroH - y1 / yRatio;\n      y2 = zeroH - y2 / yRatio;\n      l1 = zeroH - ohlc.h / yRatio;\n      l2 = zeroH - ohlc.l / yRatio;\n      m = zeroH - ohlc.m / yRatio;\n    }\n    if (cullBounds && (barXPosition + barWidth < cullBounds.lo || barXPosition > cullBounds.hi)) {\n      return {\n        pathTo: null,\n        pathFrom: null,\n        x: w.axisFlags.isXNumeric ? x : x + xDivision,\n        y: y2,\n        barXPosition,\n        color,\n        culled: true\n      };\n    }\n    let pathTo;\n    if (this.isOHLC) {\n      const centerX = barXPosition + barWidth / 2;\n      const openY = zeroH - ohlc.o / yRatio;\n      const closeY = zeroH - ohlc.c / yRatio;\n      pathTo = [\n        graphics.move(centerX, l1) + graphics.line(centerX, l2) + graphics.move(centerX, openY) + graphics.line(barXPosition, openY) + graphics.move(centerX, closeY) + graphics.line(barXPosition + barWidth, closeY)\n      ];\n    } else if (this.isBoxPlot) {\n      pathTo = [\n        graphics.move(barXPosition, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 4, l1) + graphics.line(barXPosition + barWidth - barWidth / 4, l1) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth, m) + graphics.line(barXPosition, m) + graphics.line(barXPosition, y1 + strokeWidth / 2),\n        graphics.move(barXPosition, m) + graphics.line(barXPosition + barWidth, m) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth - barWidth / 4, l2) + graphics.line(barXPosition + barWidth / 4, l2) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition, y2) + graphics.line(barXPosition, m) + \"z\"\n      ];\n    } else {\n      pathTo = [\n        graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2)\n      ];\n    }\n    let pathFrom;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo[0]);\n    } else {\n      pathFrom = graphics.move(barXPosition + barWidth / 2, y1) + graphics.move(barXPosition, y1);\n    }\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x,\n      y: y2,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        i,\n        j,\n        indexes.translationsIndex\n      ),\n      barXPosition,\n      color\n    };\n  }\n  /** @param {{indexes: any, y: any, yDivision: any, barHeight: any, zeroW: any, strokeWidth: any}} opts */\n  drawHorizontalBoxPaths({\n    indexes,\n    y,\n    yDivision,\n    barHeight,\n    zeroW,\n    strokeWidth\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const i = indexes.i;\n    const j = indexes.j;\n    const realIndex = indexes.realIndex;\n    const { colors: candleColors } = w.config.plotOptions.candlestick;\n    const { colors: boxColors } = this.boxOptions;\n    const getColor = (color2) => Array.isArray(color2) ? color2[realIndex] : color2;\n    const yRatio = this.invertedYRatio;\n    const ohlc = this.getOHLCValue(realIndex, j);\n    let color = ohlc.o < ohlc.c ? [getColor(candleColors.upward)] : [getColor(candleColors.downward)];\n    if (this.isBoxPlot) {\n      color = [getColor(boxColors.lower), getColor(boxColors.upper)];\n    }\n    let l1 = zeroW;\n    let l2 = zeroW;\n    let x1 = Math.min(ohlc.o, ohlc.c);\n    let x2 = Math.max(ohlc.o, ohlc.c);\n    let m = ohlc.m;\n    if (w.axisFlags.isXNumeric) {\n      y = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.invertedXRatio - barHeight / 2;\n    }\n    const barYPosition = y + barHeight * this.visibleI;\n    if (typeof /** @type {any} */\n    ((_a = this.series[i]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i]) == null ? void 0 : _b[j]) === null) {\n      x1 = zeroW;\n      x2 = zeroW;\n    } else {\n      x1 = zeroW + x1 / yRatio;\n      x2 = zeroW + x2 / yRatio;\n      l1 = zeroW + ohlc.h / yRatio;\n      l2 = zeroW + ohlc.l / yRatio;\n      m = zeroW + ohlc.m / yRatio;\n    }\n    const pathTo = [\n      graphics.move(x1, barYPosition) + graphics.line(x1, barYPosition + barHeight / 2) + graphics.line(l1, barYPosition + barHeight / 2) + graphics.line(l1, barYPosition + barHeight / 2 - barHeight / 4) + graphics.line(l1, barYPosition + barHeight / 2 + barHeight / 4) + graphics.line(l1, barYPosition + barHeight / 2) + graphics.line(x1, barYPosition + barHeight / 2) + graphics.line(x1, barYPosition + barHeight) + graphics.line(m, barYPosition + barHeight) + graphics.line(m, barYPosition) + graphics.line(x1 + strokeWidth / 2, barYPosition),\n      graphics.move(m, barYPosition) + graphics.line(m, barYPosition + barHeight) + graphics.line(x2, barYPosition + barHeight) + graphics.line(x2, barYPosition + barHeight / 2) + graphics.line(l2, barYPosition + barHeight / 2) + graphics.line(l2, barYPosition + barHeight - barHeight / 4) + graphics.line(l2, barYPosition + barHeight / 4) + graphics.line(l2, barYPosition + barHeight / 2) + graphics.line(x2, barYPosition + barHeight / 2) + graphics.line(x2, barYPosition) + graphics.line(m, barYPosition) + \"z\"\n    ];\n    let pathFrom;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo[0]);\n    } else {\n      pathFrom = graphics.move(x1, barYPosition + barHeight / 2) + graphics.move(x1, barYPosition);\n    }\n    if (!w.axisFlags.isXNumeric) {\n      y = y + yDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x: x2,\n      y,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        i,\n        j,\n        0\n      ),\n      barYPosition,\n      color\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  getOHLCValue(i, j) {\n    const w = this.w;\n    const coreUtils = this.coreUtils;\n    const getCandleVal = (arr) => arr[i] && arr[i][j] != null ? (\n      /** @type {any} */\n      coreUtils.getLogValAtSeriesIndex(arr[i][j], i)\n    ) : 0;\n    const h = getCandleVal(w.candleData.seriesCandleH);\n    const o = getCandleVal(w.candleData.seriesCandleO);\n    const m = getCandleVal(w.candleData.seriesCandleM);\n    const c = getCandleVal(w.candleData.seriesCandleC);\n    const l = getCandleVal(w.candleData.seriesCandleL);\n    return {\n      o: this.isBoxPlot ? h : o,\n      h: this.isBoxPlot ? o : h,\n      m,\n      l: this.isBoxPlot ? c : l,\n      c: this.isBoxPlot ? l : c\n    };\n  }\n}\nconst tangents = (points) => {\n  const m = finiteDifferences(points);\n  const n = points.length - 1;\n  const ε = 1e-6;\n  const tgts = [];\n  let a, b, d, s;\n  for (let i = 0; i < n; i++) {\n    d = slope(points[i], points[i + 1]);\n    if (Math.abs(d) < ε) {\n      m[i] = m[i + 1] = 0;\n    } else {\n      a = m[i] / d;\n      b = m[i + 1] / d;\n      s = a * a + b * b;\n      if (s > 9) {\n        s = d * 3 / Math.sqrt(s);\n        m[i] = s * a;\n        m[i + 1] = s * b;\n      }\n    }\n  }\n  for (let i = 0; i <= n; i++) {\n    s = (points[Math.min(n, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n    tgts.push([s || 0, m[i] * s || 0]);\n  }\n  return tgts;\n};\nconst svgPath = (points) => {\n  let p = \"\";\n  for (let i = 0; i < points.length; i++) {\n    const point = points[i];\n    const n = point.length;\n    if (n > 4) {\n      p += `C${point[0]}, ${point[1]}`;\n      p += `, ${point[2]}, ${point[3]}`;\n      p += `, ${point[4]}, ${point[5]}`;\n    } else if (n > 2) {\n      p += `S${point[0]}, ${point[1]}`;\n      p += `, ${point[2]}, ${point[3]}`;\n    }\n  }\n  return p;\n};\nconst spline = {\n  /**\n   * Convert 'points' to bezier\n   * @param {any[]} points\n   * @returns {any[]}\n   */\n  points(points) {\n    const tgts = tangents(points);\n    const p = points[1];\n    const p0 = points[0];\n    const pts = [];\n    const t = tgts[1];\n    const t0 = tgts[0];\n    pts.push(p0, [\n      p0[0] + t0[0],\n      p0[1] + t0[1],\n      p[0] - t[0],\n      p[1] - t[1],\n      p[0],\n      p[1]\n    ]);\n    for (let i = 2, n = tgts.length; i < n; i++) {\n      const p2 = points[i];\n      const t2 = tgts[i];\n      pts.push([p2[0] - t2[0], p2[1] - t2[1], p2[0], p2[1]]);\n    }\n    return pts;\n  },\n  /**\n   * Slice out a segment of 'points'\n   * @param {any[]} points\n   * @param {Number} start\n   * @param {Number} end\n   * @returns {any[]}\n   */\n  slice(points, start, end) {\n    const pts = points.slice(start, end);\n    if (start) {\n      if (end - start > 1 && pts[1].length < 6) {\n        const n = pts[0].length;\n        pts[1] = [\n          pts[0][n - 2] * 2 - pts[0][n - 4],\n          pts[0][n - 1] * 2 - pts[0][n - 3]\n        ].concat(pts[1]);\n      }\n      pts[0] = pts[0].slice(-2);\n    }\n    return pts;\n  }\n};\nfunction slope(p0, p1) {\n  return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n}\nfunction finiteDifferences(points) {\n  const m = [];\n  let p0 = points[0];\n  let p1 = points[1];\n  let d = m[0] = slope(p0, p1);\n  let i = 1;\n  for (let n = points.length - 1; i < n; i++) {\n    p0 = p1;\n    p1 = points[i + 1];\n    m[i] = (d + (d = slope(p0, p1))) * 0.5;\n  }\n  m[i] = d;\n  return m;\n}\nclass Violin extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {string} ctype\n   * @param {number} [seriesIndex]\n   */\n  // @ts-ignore -- Violin.draw has extra ctype param compared to Bar.draw\n  draw(series, ctype, seriesIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    this.violinOptions = w.config.plotOptions.violin;\n    this.pointsOptions = this.violinOptions.points;\n    this.bandwidthScale = this.violinOptions.bandwidthScale || 1;\n    this.normalize = this.violinOptions.normalize || \"individual\";\n    this.distributed = w.config.plotOptions.bar.distributed;\n    this.isHorizontal = w.config.plotOptions.bar.horizontal;\n    this.coreUtils = new CoreUtils(this.w);\n    series = this.coreUtils.getLogSeries(series);\n    this.series = series;\n    this.yRatio = this.coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: \"apexcharts-violin-series apexcharts-plot-series\"\n    });\n    for (let i = 0; i < series.length; i++) {\n      let x;\n      let y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: \"apexcharts-series\",\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        barHeight,\n        yDivision,\n        zeroW,\n        x: initX,\n        barWidth,\n        xDivision,\n        zeroH\n      } = initPositions;\n      y = initY;\n      x = initX;\n      xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      this.seriesMaxWeight = 0;\n      if (this.normalize === \"group\") {\n        const dens = w.violinData.seriesViolinDensity[realIndex] || [];\n        dens.forEach((d) => {\n          if (d && d.maxWeight > this.seriesMaxWeight) {\n            this.seriesMaxWeight = d.maxWeight;\n          }\n        });\n      }\n      const pointsByViolin = [];\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        const paths = this.isHorizontal ? this.drawHorizontalViolin({\n          indexes: { i, j, realIndex, translationsIndex },\n          y,\n          yDivision,\n          barHeight,\n          zeroW\n        }) : this.drawVerticalViolin({\n          indexes: { i, j, realIndex, translationsIndex },\n          x,\n          xDivision,\n          barWidth,\n          zeroH\n        });\n        x = paths.x;\n        y = paths.y;\n        if (j > 0) {\n          xArrj.push(paths.center);\n        }\n        yArrj.push(paths.alongRepresentative);\n        const pointGroups = this.buildPointsSubPath({\n          realIndex,\n          j,\n          center: paths.center,\n          halfExtent: paths.halfExtent,\n          alongFn: paths.alongFn,\n          density: paths.density,\n          maxWeight: paths.maxWeight\n        });\n        if (pointGroups.length) pointsByViolin.push({ groups: pointGroups, j });\n        const pathFill = fill.fillPath({\n          // distributed → color per category (data point) instead of per series\n          seriesNumber: this.distributed ? j : realIndex,\n          dataPointIndex: j,\n          color: this.distributed ? w.globals.colors[j] : void 0,\n          value: series[i][j]\n        });\n        this.renderSeries({\n          realIndex,\n          pathFill,\n          lineFill: w.globals.stroke.colors[realIndex],\n          j,\n          i,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          x,\n          y,\n          series,\n          columnGroupIndex,\n          barHeight,\n          barWidth,\n          elDataLabelsWrap,\n          visibleSeries: this.visibleI,\n          type: \"violin\"\n        });\n        const bodyEl = elSeries.node.querySelector(\n          `path.apexcharts-violin-area[j='${j}']`\n        );\n        if (bodyEl && isFinite(paths.alongRepresentative)) {\n          bodyEl.setAttribute(\n            this.isHorizontal ? \"cx\" : \"cy\",\n            `${paths.alongRepresentative}`\n          );\n        }\n      }\n      renderJitter({\n        graphics,\n        w,\n        elSeries,\n        pointsByCat: pointsByViolin,\n        options: this.pointsOptions,\n        distributed: this.distributed,\n        realIndex,\n        wrapClass: \"apexcharts-violin-points-wrap\",\n        pointClass: \"apexcharts-violin-points\"\n      });\n      w.globals.seriesXvalues[realIndex] = xArrj;\n      w.globals.seriesYvalues[realIndex] = yArrj;\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{indexes: any, x: any, xDivision: any, barWidth: any, zeroH: any}} opts */\n  drawVerticalViolin({ indexes, x, xDivision, barWidth, zeroH }) {\n    var _a;\n    const w = this.w;\n    const { realIndex, j, translationsIndex } = indexes;\n    const yRatio = this.yRatio[translationsIndex];\n    if (w.axisFlags.isXNumeric) {\n      x = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n    }\n    const barXPosition = x + barWidth * this.visibleI;\n    const center = barXPosition + barWidth / 2;\n    const halfExtent = barWidth / 2;\n    const density = this.getDensity(realIndex, j);\n    const maxWeight = this.effectiveMaxWeight(density);\n    const alongFn = (v) => zeroH - this.logVal(v, realIndex) / yRatio;\n    const pathTo = this.buildBodyPath({\n      nodes: density.nodes,\n      center,\n      halfExtent,\n      maxWeight,\n      vertical: true,\n      alongFn,\n      collapsed: false\n    });\n    let pathFrom;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      pathFrom = this.buildBodyPath({\n        nodes: density.nodes,\n        center,\n        halfExtent,\n        maxWeight,\n        vertical: true,\n        alongFn,\n        collapsed: true\n      });\n    }\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x,\n      y: zeroH,\n      center,\n      halfExtent,\n      alongFn,\n      density,\n      maxWeight,\n      alongRepresentative: alongFn((_a = this.series[indexes.i][j]) != null ? _a : 0)\n    };\n  }\n  /** @param {{indexes: any, y: any, yDivision: any, barHeight: any, zeroW: any}} opts */\n  drawHorizontalViolin({ indexes, y, yDivision, barHeight, zeroW }) {\n    var _a;\n    const w = this.w;\n    const { realIndex, j } = indexes;\n    const yRatio = this.invertedYRatio;\n    if (w.axisFlags.isXNumeric) {\n      y = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.invertedXRatio - barHeight / 2;\n    }\n    const barYPosition = y + barHeight * this.visibleI;\n    const center = barYPosition + barHeight / 2;\n    const halfExtent = barHeight / 2;\n    const density = this.getDensity(realIndex, j);\n    const maxWeight = this.effectiveMaxWeight(density);\n    const alongFn = (v) => zeroW + this.logVal(v, realIndex) / yRatio;\n    const pathTo = this.buildBodyPath({\n      nodes: density.nodes,\n      center,\n      halfExtent,\n      maxWeight,\n      vertical: false,\n      alongFn,\n      collapsed: false\n    });\n    let pathFrom;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      pathFrom = this.buildBodyPath({\n        nodes: density.nodes,\n        center,\n        halfExtent,\n        maxWeight,\n        vertical: false,\n        alongFn,\n        collapsed: true\n      });\n    }\n    if (!w.axisFlags.isXNumeric) {\n      y = y + yDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x: zeroW,\n      y,\n      center,\n      halfExtent,\n      alongFn,\n      maxWeight,\n      density,\n      alongRepresentative: alongFn((_a = this.series[indexes.i][j]) != null ? _a : 0)\n    };\n  }\n  /**\n   * Read the parsed density for one violin and return sorted, de-duplicated\n   * nodes (strictly increasing value — a hard requirement for the spline).\n   * @param {number} realIndex\n   * @param {number} j\n   */\n  getDensity(realIndex, j) {\n    var _a;\n    const w = this.w;\n    const d = (_a = w.violinData.seriesViolinDensity[realIndex]) == null ? void 0 : _a[j];\n    if (!d || !d.values.length) {\n      return { nodes: [], maxWeight: 0 };\n    }\n    const order = d.values.map(\n      (_, k) => k\n    );\n    order.sort(\n      (a, b) => d.values[a] - d.values[b]\n    );\n    const nodes = [];\n    let prevV = null;\n    for (const k of order) {\n      const v = d.values[k];\n      if (prevV !== null && v === prevV) continue;\n      nodes.push({ v, w: d.weights[k] });\n      prevV = v;\n    }\n    return { nodes, maxWeight: d.maxWeight };\n  }\n  /**\n   * The peak weight used to scale a violin's width: its own ('individual') or\n   * the densest violin in the series ('group', preserving relative widths).\n   * @param {{maxWeight:number}} density\n   */\n  effectiveMaxWeight(density) {\n    return this.normalize === \"group\" && this.seriesMaxWeight > 0 ? this.seriesMaxWeight : density.maxWeight;\n  }\n  /**\n   * Build the closed, smooth violin outline. The value axis is the monotonic\n   * parameter for the spline (vertical → Y, horizontal → X); the spline is fed\n   * with that axis first and the control points swapped back to screen space.\n   *\n   * @param {{nodes:{v:number,w:number}[], center:number, halfExtent:number, maxWeight:number, vertical:boolean, alongFn:(v:number)=>number, collapsed:boolean}} opts\n   */\n  buildBodyPath({\n    nodes,\n    center,\n    halfExtent,\n    maxWeight,\n    vertical,\n    alongFn,\n    collapsed\n  }) {\n    const graphics = new Graphics(this.w);\n    if (nodes.length === 0) {\n      const a = alongFn(0);\n      return vertical ? graphics.move(center, a) + graphics.line(center, a) : graphics.move(a, center) + graphics.line(a, center);\n    }\n    const wpxOf = (weight) => {\n      if (collapsed || maxWeight <= 0) return 0;\n      const wp = weight / maxWeight * halfExtent * this.bandwidthScale;\n      return Math.min(halfExtent, Math.max(0, wp));\n    };\n    const rightPts = [];\n    const leftPts = [];\n    for (let k = 0; k < nodes.length; k++) {\n      const a = alongFn(nodes[k].v);\n      const wp = wpxOf(nodes[k].w);\n      if (vertical) {\n        rightPts.push([center + wp, a]);\n        leftPts.push([center - wp, a]);\n      } else {\n        rightPts.push([a, center + wp]);\n        leftPts.push([a, center - wp]);\n      }\n    }\n    leftPts.reverse();\n    return this.smoothSegment(rightPts, vertical, false) + this.smoothSegment(leftPts, vertical, true) + \"z\";\n  }\n  /**\n   * Emit one edge as a smooth (monotone-cubic) path segment, or a polyline\n   * when there are too few nodes for a spline.\n   *\n   * @param {[number,number][]} screenPts ordered screen points for this edge\n   * @param {boolean} monotonicIsY true when the value axis is vertical\n   * @param {boolean} continued false → start with M; true → start with L (joins the previous edge)\n   */\n  smoothSegment(screenPts, monotonicIsY, continued) {\n    const graphics = new Graphics(this.w);\n    const first = screenPts[0];\n    let d = continued ? graphics.line(first[0], first[1]) : graphics.move(first[0], first[1]);\n    const usePolyline = screenPts.length < 3 || !this.strictlyMonotonic(screenPts, monotonicIsY);\n    if (usePolyline) {\n      for (let k = 1; k < screenPts.length; k++) {\n        d += graphics.line(screenPts[k][0], screenPts[k][1]);\n      }\n      return d;\n    }\n    const input = screenPts.map(\n      ([px, py]) => monotonicIsY ? [py, px] : [px, py]\n    );\n    const bez = spline.points(input);\n    const out = monotonicIsY ? bez.map(swapPairs) : bez;\n    d += svgPath(out);\n    return d;\n  }\n  /**\n   * @param {[number,number][]} screenPts\n   * @param {boolean} monotonicIsY\n   */\n  strictlyMonotonic(screenPts, monotonicIsY) {\n    const axis = monotonicIsY ? 1 : 0;\n    for (let k = 1; k < screenPts.length; k++) {\n      if (screenPts[k][axis] === screenPts[k - 1][axis]) return false;\n    }\n    return true;\n  }\n  /**\n   * Build the jitter sub-paths for one violin, grouped for rendering. Returns\n   * `[]` when points are hidden or absent. Normally one group (single dot\n   * colour); with `points.colorScale` the dots are bucketed by value into shade\n   * groups, each carrying its ramp colour. Offsets are a deterministic index\n   * hash (SSR-safe); points beyond maxPoints are stride-thinned.\n   *\n   * @param {{realIndex:number, j:number, center:number, halfExtent:number, alongFn:(v:number)=>number, density:{nodes:{v:number,w:number}[], maxWeight:number}, maxWeight:number}} opts\n   * @returns {{fill:string|null, d:string}[]}\n   */\n  buildPointsSubPath({\n    realIndex,\n    j,\n    center,\n    halfExtent,\n    alongFn,\n    density,\n    maxWeight\n  }) {\n    var _a;\n    return buildJitterGroups({\n      w: this.w,\n      points: (_a = this.w.violinData.seriesViolinPoints[realIndex]) == null ? void 0 : _a[j],\n      seedA: realIndex,\n      seedB: j,\n      center,\n      halfExtent,\n      alongFn,\n      isHorizontal: this.isHorizontal,\n      options: this.pointsOptions,\n      // Violin clamps jitter to the density half-width at each value so dots\n      // stay inside the shape.\n      clampAt: (v) => this.halfWidthAtValue(v, density, halfExtent, maxWeight)\n    });\n  }\n  /**\n   * Density half-width (pixels) at a given value — used to keep jitter inside\n   * the violin. Linear interpolation between the two nearest density nodes.\n   * @param {number} value\n   * @param {{nodes:{v:number,w:number}[], maxWeight:number}} density\n   * @param {number} halfExtent\n   * @param {number} [maxWeightOverride] use the group max for 'group' normalize\n   */\n  halfWidthAtValue(value, density, halfExtent, maxWeightOverride) {\n    const { nodes } = density;\n    const maxWeight = maxWeightOverride != null ? maxWeightOverride : density.maxWeight;\n    if (!nodes.length || maxWeight <= 0) return 0;\n    const toPx = (weight) => Math.min(\n      halfExtent,\n      weight / maxWeight * halfExtent * this.bandwidthScale\n    );\n    if (value <= nodes[0].v) return toPx(nodes[0].w);\n    if (value >= nodes[nodes.length - 1].v)\n      return toPx(nodes[nodes.length - 1].w);\n    for (let k = 1; k < nodes.length; k++) {\n      if (value <= nodes[k].v) {\n        const a = nodes[k - 1];\n        const b = nodes[k];\n        const t = b.v === a.v ? 0 : (value - a.v) / (b.v - a.v);\n        return toPx(a.w + (b.w - a.w) * t);\n      }\n    }\n    return 0;\n  }\n  /**\n   * Apply the y-axis log transform to a value when that axis is logarithmic,\n   * mirroring BoxCandleStick. Linear axes return the value unchanged.\n   * @param {number} value\n   * @param {number} realIndex\n   */\n  logVal(value, realIndex) {\n    return (\n      /** @type {any} */\n      this.coreUtils.getLogValAtSeriesIndex(\n        value,\n        realIndex\n      )\n    );\n  }\n}\nfunction swapPairs(arr) {\n  const out = [];\n  for (let k = 0; k < arr.length; k += 2) {\n    out.push(arr[k + 1], arr[k]);\n  }\n  return out;\n}\nclass TreemapHelpers {\n  /**\n   * @param {import('../../../types/internal').ChartStateW} w\n   * @param {import('../../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n  }\n  checkColorRange() {\n    const w = this.w;\n    let negRange = false;\n    const chartOpts = w.config.plotOptions[w.config.chart.type];\n    if (chartOpts.colorScale.ranges.length > 0) {\n      chartOpts.colorScale.ranges.map((range) => {\n        if (range.from <= 0) {\n          negRange = true;\n        }\n      });\n    }\n    return negRange;\n  }\n  /**\n   * @param {string} chartType\n   * @param {number} i\n   * @param {number} j\n   * @param {any} negRange\n   */\n  getShadeColor(chartType, i, j, negRange) {\n    const w = this.w;\n    let colorShadePercent = 1;\n    const shadeIntensity = w.config.plotOptions[chartType].shadeIntensity;\n    const colorProps = this.determineColor(chartType, i, j);\n    if (\n      /** @type {any} */\n      w.globals.hasNegs || negRange\n    ) {\n      if (w.config.plotOptions[chartType].reverseNegativeShade) {\n        if (colorProps.percent < 0) {\n          colorShadePercent = colorProps.percent / 100 * (shadeIntensity * 1.25);\n        } else {\n          colorShadePercent = (1 - colorProps.percent / 100) * (shadeIntensity * 1.25);\n        }\n      } else {\n        if (colorProps.percent <= 0) {\n          colorShadePercent = 1 - (1 + colorProps.percent / 100) * shadeIntensity;\n        } else {\n          colorShadePercent = (1 - colorProps.percent / 100) * shadeIntensity;\n        }\n      }\n    } else {\n      colorShadePercent = 1 - colorProps.percent / 100;\n      if (chartType === \"treemap\") {\n        colorShadePercent = (1 - colorProps.percent / 100) * (shadeIntensity * 1.25);\n      }\n    }\n    let color = colorProps.color;\n    const utils = new Utils$1();\n    if (w.config.plotOptions[chartType].enableShades) {\n      if (this.w.config.theme.mode === \"dark\") {\n        const shadeColor = utils.shadeColor(\n          colorShadePercent * -1,\n          colorProps.color\n        );\n        color = Utils$1.hexToRgba(\n          Utils$1.isColorHex(shadeColor) ? shadeColor : Utils$1.rgb2hex(shadeColor),\n          w.config.fill.opacity\n        );\n      } else {\n        const shadeColor = utils.shadeColor(colorShadePercent, colorProps.color);\n        color = Utils$1.hexToRgba(\n          Utils$1.isColorHex(shadeColor) ? shadeColor : Utils$1.rgb2hex(shadeColor),\n          w.config.fill.opacity\n        );\n      }\n    }\n    return { color, colorProps };\n  }\n  /**\n   * @param {string} chartType\n   * @param {number} i\n   * @param {number} j\n   */\n  determineColor(chartType, i, j) {\n    const w = this.w;\n    const val = w.seriesData.series[i][j];\n    const chartOpts = w.config.plotOptions[chartType];\n    let seriesNumber = chartOpts.colorScale.inverse ? j : i;\n    if (chartOpts.distributed && w.config.chart.type === \"treemap\") {\n      seriesNumber = j;\n    }\n    let color = w.globals.colors[seriesNumber];\n    let foreColor = null;\n    let min = Math.min(...w.seriesData.series[i]);\n    let max = Math.max(...w.seriesData.series[i]);\n    if (!chartOpts.distributed && chartType === \"heatmap\") {\n      min = w.globals.minY;\n      max = w.globals.maxY;\n    }\n    if (typeof chartOpts.colorScale.min !== \"undefined\") {\n      min = chartOpts.colorScale.min < w.globals.minY ? chartOpts.colorScale.min : w.globals.minY;\n      max = chartOpts.colorScale.max > w.globals.maxY ? chartOpts.colorScale.max : w.globals.maxY;\n    }\n    const total = Math.abs(max) + Math.abs(min);\n    let percent = total === 0 ? 0 : 100 * val / total;\n    if (chartOpts.colorScale.ranges.length > 0) {\n      const colorRange = chartOpts.colorScale.ranges;\n      colorRange.map((range) => {\n        if (val >= range.from && val <= range.to) {\n          color = range.color;\n          foreColor = range.foreColor ? range.foreColor : null;\n          min = range.from;\n          max = range.to;\n          const rTotal = Math.abs(max) + Math.abs(min);\n          percent = rTotal === 0 ? 0 : 100 * val / rTotal;\n        }\n      });\n    }\n    return {\n      color,\n      foreColor,\n      percent\n    };\n  }\n  /** @param {{ text?: any, x?: any, y?: any, i?: any, j?: any, colorProps?: any, fontSize?: any, series?: any }} opts */\n  calculateDataLabels({ text, x, y, i, j, colorProps, fontSize }) {\n    const w = this.w;\n    const dataLabelsConfig = w.config.dataLabels;\n    const graphics = new Graphics(this.w);\n    const dataLabels = new DataLabels(this.w, this.ctx);\n    let elDataLabelsWrap = null;\n    if (dataLabelsConfig.enabled) {\n      elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-data-labels\"\n      });\n      const offX = dataLabelsConfig.offsetX;\n      const offY = dataLabelsConfig.offsetY;\n      const dataLabelsX = x + offX;\n      const dataLabelsY = y + parseFloat(dataLabelsConfig.style.fontSize) / 3 + offY;\n      dataLabels.plotDataLabelsText({\n        x: dataLabelsX,\n        y: dataLabelsY,\n        text,\n        i,\n        j,\n        color: colorProps.foreColor,\n        parent: elDataLabelsWrap,\n        fontSize,\n        dataLabelsConfig\n      });\n    }\n    return elDataLabelsWrap;\n  }\n}\nclass HeatMap {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   * @param {import('../types/internal').XYRatios} xyRatios\n   */\n  constructor(w, ctx, xyRatios) {\n    this.ctx = ctx;\n    this.w = w;\n    this.xRatio = xyRatios.xRatio;\n    this.yRatio = xyRatios.yRatio;\n    this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation;\n    this.helpers = new TreemapHelpers(w, ctx);\n    this.rectRadius = this.w.config.plotOptions.heatmap.radius;\n    this.strokeWidth = this.w.config.stroke.show ? this.w.config.stroke.width : 0;\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const ret = graphics.group({\n      class: \"apexcharts-heatmap\"\n    });\n    ret.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n    const xDivision = w.layout.gridWidth / w.globals.dataPoints;\n    const yDivision = w.layout.gridHeight / w.seriesData.series.length;\n    let y1 = 0;\n    let rev = false;\n    this.negRange = this.helpers.checkColorRange();\n    const heatSeries = series.slice();\n    if (w.config.yaxis[0].reversed) {\n      rev = true;\n      heatSeries.reverse();\n    }\n    for (let i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) {\n      const elSeries = graphics.group({\n        class: `apexcharts-series apexcharts-heatmap-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, i);\n      graphics.setupEventDelegation(elSeries, \".apexcharts-heatmap-rect\");\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        const filters = new Filters(this.w);\n        filters.dropShadow(elSeries, shadow, i);\n      }\n      let x1 = 0;\n      const shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity;\n      let j = 0;\n      for (let dIndex = 0; dIndex < w.globals.dataPoints; dIndex++) {\n        if (w.seriesData.seriesX.length && !w.globals.allSeriesHasEqualX) {\n          if (w.globals.minX + w.globals.minXDiff * dIndex < w.seriesData.seriesX[i][j]) {\n            x1 = x1 + xDivision;\n            continue;\n          }\n        }\n        if (j >= heatSeries[i].length) break;\n        const heatColor = this.helpers.getShadeColor(\n          w.config.chart.type,\n          i,\n          j,\n          this.negRange\n        );\n        let color = heatColor.color;\n        const heatColorProps = heatColor.colorProps;\n        if (w.config.fill.type === \"image\") {\n          const fill = new Fill(this.w);\n          color = fill.fillPath({\n            seriesNumber: i,\n            dataPointIndex: j,\n            opacity: (\n              /** @type {any} */\n              w.globals.hasNegs ? heatColorProps.percent < 0 ? 1 - (1 + heatColorProps.percent / 100) : shadeIntensity + heatColorProps.percent / 100 : heatColorProps.percent / 100\n            ),\n            patternID: Utils$1.randomId(),\n            width: w.config.fill.image.width ? w.config.fill.image.width : xDivision,\n            height: w.config.fill.image.height ? w.config.fill.image.height : yDivision\n          });\n        }\n        const radius = this.rectRadius;\n        const rect = graphics.drawRect(x1, y1, xDivision, yDivision, radius);\n        rect.attr({\n          cx: x1,\n          cy: y1\n        });\n        rect.node.classList.add(\"apexcharts-heatmap-rect\");\n        elSeries.add(rect);\n        rect.attr({\n          fill: color,\n          i,\n          index: i,\n          j,\n          val: series[i][j],\n          \"stroke-width\": this.strokeWidth,\n          stroke: w.config.plotOptions.heatmap.useFillColorAsStroke ? color : w.globals.stroke.colors[0],\n          color\n        });\n        if (w.config.chart.animations.enabled && !w.globals.dataChanged) {\n          let speed = 1;\n          if (!w.globals.resized) {\n            speed = w.config.chart.animations.speed;\n          }\n          this.animateHeatMap(rect, x1, y1, xDivision, yDivision, speed, i, j);\n        }\n        if (w.globals.dataChanged) {\n          let speed = 1;\n          if (this.dynamicAnim.enabled && w.globals.shouldAnimate) {\n            speed = this.dynamicAnim.speed;\n            let colorFrom = w.globals.previousPaths[i] && w.globals.previousPaths[i][j] && w.globals.previousPaths[i][j].color;\n            if (!colorFrom) colorFrom = \"rgba(255, 255, 255, 0)\";\n            this.animateHeatColor(\n              rect,\n              Utils$1.isColorHex(colorFrom) ? colorFrom : Utils$1.rgb2hex(colorFrom),\n              Utils$1.isColorHex(color) ? color : Utils$1.rgb2hex(color),\n              speed\n            );\n          }\n        }\n        const formatter = w.config.dataLabels.formatter;\n        const formattedText = formatter(w.seriesData.series[i][j], {\n          value: w.seriesData.series[i][j],\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        });\n        const dataLabels = this.helpers.calculateDataLabels({\n          text: formattedText,\n          x: x1 + xDivision / 2,\n          y: y1 + yDivision / 2,\n          i,\n          j,\n          colorProps: heatColorProps,\n          series: heatSeries\n        });\n        if (dataLabels !== null) {\n          elSeries.add(dataLabels);\n        }\n        x1 = x1 + xDivision;\n        j++;\n      }\n      y1 = y1 + yDivision;\n      ret.add(elSeries);\n    }\n    const yAxisScale = (\n      /** @type {any[]} */\n      w.globals.yAxisScale[0].result.slice()\n    );\n    if (w.config.yaxis[0].reversed) {\n      yAxisScale.unshift(\"\");\n    } else {\n      yAxisScale.push(\"\");\n    }\n    w.globals.yAxisScale[0].result = yAxisScale;\n    return ret;\n  }\n  /**\n   * @param {any} el\n   * @param {number} x\n   * @param {number} y\n   * @param {number} width\n   * @param {number} height\n   * @param {number} speed\n   * @param {number} [row] - series index (heatmap row)\n   * @param {number} [col] - data point index (heatmap column)\n   */\n  animateHeatMap(el, x, y, width, height, speed, row = 0, col = 0) {\n    const w = this.w;\n    const animations = new Animations(this.w);\n    const animCfg = w.config.chart.animations;\n    const gradCfg = animCfg.animateGradually;\n    const staggerEnabled = gradCfg && gradCfg.enabled !== false;\n    let delay = 0;\n    if (staggerEnabled) {\n      const seriesCount = (w.seriesData.series || []).length || 1;\n      const pointsCount = w.globals.dataPoints || 1;\n      const maxDiag = seriesCount + pointsCount - 2;\n      const baseDelay = Math.min(\n        gradCfg.delay || 0,\n        speed * 0.5 / Math.max(1, maxDiag)\n      );\n      delay = computeStagger({\n        style: \"diagonal\",\n        index: col,\n        row,\n        col,\n        baseDelay\n      });\n    }\n    animations.animateRect(\n      el,\n      {\n        x: x + width / 2,\n        y: y + height / 2,\n        width: 0,\n        height: 0\n      },\n      {\n        x,\n        y,\n        width,\n        height\n      },\n      speed,\n      () => {\n        animations.animationCompleted(el);\n      },\n      delay\n    );\n  }\n  /**\n   * @param {any} el\n   * @param {string} colorFrom\n   * @param {string} colorTo\n   * @param {number} speed\n   */\n  animateHeatColor(el, colorFrom, colorTo, speed) {\n    el.attr({\n      fill: colorFrom\n    }).animate(speed).attr({\n      fill: colorTo\n    });\n  }\n}\nclass Helpers5 {\n  /**\n   * @param {import('../../../charts/Line').default} lineCtx\n   */\n  constructor(lineCtx) {\n    this.w = lineCtx.w;\n    this.lineCtx = lineCtx;\n  }\n  /**\n   * @param {number} i\n   * @param {any[]} series\n   */\n  sameValueSeriesFix(i, series) {\n    const w = this.w;\n    if (w.config.fill.type === \"gradient\" || w.config.fill.type[i] === \"gradient\") {\n      const coreUtils = new CoreUtils(this.lineCtx.w);\n      if (coreUtils.seriesHaveSameValues(i)) {\n        const gSeries = series[i].slice();\n        gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 1e-6;\n        series[i] = gSeries;\n      }\n    }\n    return series;\n  }\n  /** @param {{series: any, realIndex: any, x: any, y: any, i: any, j: any, prevY: any}} opts */\n  calculatePoints({ series, realIndex, x, y, i, j, prevY }) {\n    const w = this.w;\n    const ptX = [];\n    const ptY = [];\n    let xPT1st = this.lineCtx.categoryAxisCorrection + w.config.markers.offsetX;\n    if (w.axisFlags.isXNumeric) {\n      xPT1st = (w.seriesData.seriesX[realIndex][0] - w.globals.minX) / this.lineCtx.xRatio + w.config.markers.offsetX;\n    }\n    if (j === 0) {\n      ptX.push(xPT1st);\n      ptY.push(\n        Utils$1.isNumber(series[i][0]) ? prevY + w.config.markers.offsetY : null\n      );\n    }\n    ptX.push(x + w.config.markers.offsetX);\n    ptY.push(\n      Utils$1.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null\n    );\n    return {\n      x: ptX,\n      y: ptY\n    };\n  }\n  /** @param {{pathFromLine: any, pathFromArea: any, realIndex: any}} opts */\n  checkPreviousPaths({ pathFromLine, pathFromArea, realIndex }) {\n    const w = this.w;\n    for (let pp = 0; pp < w.globals.previousPaths.length; pp++) {\n      const gpp = w.globals.previousPaths[pp];\n      if ((gpp.type === \"line\" || gpp.type === \"area\") && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) {\n        if (gpp.type === \"line\") {\n          this.lineCtx.appendPathFrom = false;\n          pathFromLine = w.globals.previousPaths[pp].paths[0].d;\n        } else if (gpp.type === \"area\") {\n          this.lineCtx.appendPathFrom = false;\n          pathFromArea = w.globals.previousPaths[pp].paths[0].d;\n          if (w.config.stroke.show && w.globals.previousPaths[pp].paths[1]) {\n            pathFromLine = w.globals.previousPaths[pp].paths[1].d;\n          }\n        }\n      }\n    }\n    return {\n      pathFromLine,\n      pathFromArea\n    };\n  }\n  /** @param {{i: any, realIndex: any, series: any, prevY: any, lineYPosition: any, translationsIndex: any}} opts */\n  determineFirstPrevY({\n    i,\n    realIndex,\n    series,\n    prevY,\n    lineYPosition,\n    translationsIndex\n  }) {\n    var _a, _b, _c;\n    const w = this.w;\n    const stackSeries = w.config.chart.stacked && !w.globals.comboCharts || w.config.chart.stacked && w.globals.comboCharts && (!this.w.config.chart.stackOnlyBar || /** @type {any} */\n    ((_a = this.w.config.series[realIndex]) == null ? void 0 : _a.type) === \"bar\" || /** @type {any} */\n    ((_b = this.w.config.series[realIndex]) == null ? void 0 : _b.type) === \"column\");\n    if (typeof ((_c = series[i]) == null ? void 0 : _c[0]) !== \"undefined\") {\n      if (stackSeries) {\n        if (i > 0) {\n          lineYPosition = this.lineCtx.prevSeriesY[i - 1][0];\n        } else {\n          lineYPosition = this.lineCtx.zeroY;\n        }\n      } else {\n        lineYPosition = this.lineCtx.zeroY;\n      }\n      prevY = lineYPosition - series[i][0] / this.lineCtx.yRatio[translationsIndex] + (this.lineCtx.isReversed ? series[i][0] / this.lineCtx.yRatio[translationsIndex] : 0) * 2;\n    } else {\n      if (stackSeries && i > 0 && typeof series[i][0] === \"undefined\") {\n        for (let s = i - 1; s >= 0; s--) {\n          if (series[s][0] !== null && typeof series[s][0] !== \"undefined\") {\n            lineYPosition = this.lineCtx.prevSeriesY[s][0];\n            prevY = lineYPosition;\n            break;\n          }\n        }\n      }\n    }\n    return {\n      prevY,\n      lineYPosition\n    };\n  }\n}\nclass Line {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   * @param {import('../types/internal').XYRatios} xyRatios\n   * @param {boolean} isPointsChart\n   */\n  constructor(w, ctx, xyRatios, isPointsChart) {\n    this.ctx = ctx;\n    this.w = w;\n    this.xyRatios = xyRatios;\n    this.xRatio = 0;\n    this.yRatio = [];\n    this.zRatio = 0;\n    this.baseLineY = [];\n    this.pointsChart = !(this.w.config.chart.type !== \"bubble\" && this.w.config.chart.type !== \"scatter\") || isPointsChart;\n    this.scatter = new Scatter(this.w, this.ctx);\n    this.noNegatives = this.w.globals.minX === Number.MAX_VALUE;\n    this.lineHelpers = new Helpers5(this);\n    this.markers = new Markers(this.w, this.ctx);\n    this.prevSeriesY = [];\n    this.categoryAxisCorrection = 0;\n    this.yaxisIndex = 0;\n    this.xDivision = 0;\n    this.zeroY = 0;\n    this.areaBottomY = 0;\n    this.strokeWidth = 0;\n    this.isReversed = false;\n    this.appendPathFrom = false;\n    this.elSeries = null;\n    this.elPointsMain = null;\n    this.elDataLabelsWrap = null;\n  }\n  /**\n   * @param {any[]} series\n   * @param {string} ctype\n   * @param {number} seriesIndex\n   * @param {any} seriesRangeEnd\n   */\n  draw(series, ctype, seriesIndex, seriesRangeEnd) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const type = w.globals.comboCharts ? ctype : w.config.chart.type;\n    const ret = graphics.group({\n      class: `apexcharts-${type}-series apexcharts-plot-series`\n    });\n    const coreUtils = new CoreUtils(this.w);\n    this.yRatio = this.xyRatios.yRatio;\n    this.zRatio = this.xyRatios.zRatio;\n    this.xRatio = this.xyRatios.xRatio;\n    this.baseLineY = this.xyRatios.baseLineY;\n    series = coreUtils.getLogSeries(series);\n    this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n    this.prevSeriesY = [];\n    const allSeries = [];\n    for (let i = 0; i < series.length; i++) {\n      series = this.lineHelpers.sameValueSeriesFix(i, series);\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const translationsIndex = this.yRatio.length > 1 ? realIndex : 0;\n      this._initSerieVariables(series, i, realIndex);\n      const yArrj = [];\n      const y2Arrj = [];\n      const xArrj = [];\n      let x = w.globals.padHorizontal + this.categoryAxisCorrection;\n      const y = 1;\n      const linePaths = [];\n      const areaPaths = [];\n      Series.addCollapsedClassToSeries(this.w, this.elSeries, realIndex);\n      if (w.axisFlags.isXNumeric && w.seriesData.seriesX.length > 0) {\n        x = (w.seriesData.seriesX[realIndex][0] - w.globals.minX) / this.xRatio;\n      }\n      xArrj.push(x);\n      const pX = x;\n      let pY2;\n      const prevX = pX;\n      let prevY = this.zeroY;\n      let prevY2 = this.zeroY;\n      const lineYPosition = 0;\n      const firstPrevY = this.lineHelpers.determineFirstPrevY({\n        i,\n        realIndex,\n        series,\n        prevY,\n        lineYPosition,\n        translationsIndex\n      });\n      prevY = firstPrevY.prevY;\n      if (w.config.stroke.curve === \"monotoneCubic\" && series[i][0] === null) {\n        yArrj.push(null);\n      } else {\n        yArrj.push(prevY);\n      }\n      const pY = prevY;\n      let firstPrevY2;\n      if (type === \"rangeArea\") {\n        firstPrevY2 = this.lineHelpers.determineFirstPrevY({\n          i,\n          realIndex,\n          series: seriesRangeEnd,\n          prevY: prevY2,\n          lineYPosition,\n          translationsIndex\n        });\n        prevY2 = firstPrevY2.prevY;\n        pY2 = prevY2;\n        y2Arrj.push(yArrj[0] !== null ? prevY2 : null);\n      }\n      const pathsFrom = this._calculatePathsFrom({\n        type,\n        series,\n        i,\n        realIndex,\n        translationsIndex,\n        prevX,\n        prevY,\n        prevY2\n      });\n      const rYArrj = [yArrj[0]];\n      const rY2Arrj = [y2Arrj[0]];\n      const iteratingOpts = {\n        type,\n        series,\n        realIndex,\n        translationsIndex,\n        i,\n        x,\n        y,\n        pX,\n        pY,\n        pathsFrom,\n        linePaths,\n        areaPaths,\n        seriesIndex,\n        lineYPosition,\n        xArrj,\n        yArrj,\n        y2Arrj,\n        seriesRangeEnd\n      };\n      const paths = this._iterateOverDataPoints(__spreadProps(__spreadValues({}, iteratingOpts), {\n        iterations: type === \"rangeArea\" ? series[i].length - 1 : void 0,\n        isRangeStart: true\n      }));\n      if (type === \"rangeArea\") {\n        const pathsFrom2 = this._calculatePathsFrom({\n          series: seriesRangeEnd,\n          i,\n          realIndex,\n          prevX,\n          prevY: prevY2\n        });\n        const rangePaths = this._iterateOverDataPoints(__spreadProps(__spreadValues({}, iteratingOpts), {\n          series: seriesRangeEnd,\n          xArrj: [x],\n          yArrj: rYArrj,\n          y2Arrj: rY2Arrj,\n          pY: pY2,\n          areaPaths: paths.areaPaths,\n          pathsFrom: pathsFrom2,\n          iterations: seriesRangeEnd[i].length - 1,\n          isRangeStart: false\n        }));\n        const segments = paths.linePaths.length / 2;\n        for (let s = 0; s < segments; s++) {\n          paths.linePaths[s] = rangePaths.linePaths[s + segments] + paths.linePaths[s];\n        }\n        paths.linePaths.splice(segments);\n        paths.pathFromLine = rangePaths.pathFromLine + paths.pathFromLine;\n      } else {\n        paths.pathFromArea += \"z\";\n      }\n      this._handlePaths({ type, realIndex, i, paths });\n      this.elSeries.add(this.elPointsMain);\n      this.elSeries.add(this.elDataLabelsWrap);\n      allSeries.push(this.elSeries);\n    }\n    if (typeof /** @type {Record<string,any>} */\n    ((_a = w.config.series[0]) == null ? void 0 : _a.zIndex) !== \"undefined\") {\n      allSeries.sort(\n        (a, b) => Number(a.node.getAttribute(\"zIndex\")) - Number(b.node.getAttribute(\"zIndex\"))\n      );\n    }\n    if (w.config.chart.stacked) {\n      for (let s = allSeries.length - 1; s >= 0; s--) {\n        ret.add(allSeries[s]);\n      }\n    } else {\n      for (let s = 0; s < allSeries.length; s++) {\n        ret.add(allSeries[s]);\n      }\n    }\n    return ret;\n  }\n  /**\n   * @param {any[]} series\n   * @param {number} i\n   * @param {number} realIndex\n   */\n  _initSerieVariables(series, i, realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    this.xDivision = w.layout.gridWidth / (w.globals.dataPoints - (w.config.xaxis.tickPlacement === \"on\" ? 1 : 0));\n    this.strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width;\n    let translationsIndex = 0;\n    if (this.yRatio.length > 1) {\n      this.yaxisIndex = w.globals.seriesYAxisReverseMap[realIndex];\n      translationsIndex = realIndex;\n    }\n    this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n    this.zeroY = w.layout.gridHeight - this.baseLineY[translationsIndex] - (this.isReversed ? w.layout.gridHeight : 0) + (this.isReversed ? this.baseLineY[translationsIndex] * 2 : 0);\n    this.areaBottomY = this.zeroY;\n    if (this.zeroY > w.layout.gridHeight || w.config.plotOptions.area.fillTo === \"end\") {\n      this.areaBottomY = w.layout.gridHeight;\n    }\n    this.categoryAxisCorrection = this.xDivision / 2;\n    const seriesItem = (\n      /** @type {Record<string,any>} */\n      w.config.series[realIndex]\n    );\n    this.elSeries = graphics.group({\n      class: `apexcharts-series`,\n      zIndex: typeof seriesItem.zIndex !== \"undefined\" ? seriesItem.zIndex : realIndex,\n      seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex])\n    });\n    this.elPointsMain = graphics.group({\n      class: \"apexcharts-series-markers-wrap\",\n      \"data:realIndex\": realIndex\n    });\n    if (w.globals.hasNullValues) {\n      const firstPoint = this.markers.plotChartMarkers({\n        pointsPos: {\n          x: [0],\n          y: [w.layout.gridHeight + w.globals.markers.largestSize]\n        },\n        seriesIndex: i,\n        j: 0,\n        pSize: 0.1,\n        alwaysDrawMarker: true,\n        isVirtualPoint: true\n      });\n      if (firstPoint !== null) {\n        this.elPointsMain.add(firstPoint);\n      }\n    }\n    this.elDataLabelsWrap = graphics.group({\n      class: \"apexcharts-datalabels\",\n      \"data:realIndex\": realIndex\n    });\n    const longestSeries = series[i].length === w.globals.dataPoints;\n    this.elSeries.attr({\n      \"data:longestSeries\": longestSeries,\n      rel: i + 1,\n      \"data:realIndex\": realIndex\n    });\n    this.appendPathFrom = true;\n  }\n  /** @param {{ type?: any, series?: any, i?: any, realIndex?: any, translationsIndex?: any, prevX?: any, prevY?: any, prevY2?: any }} opts */\n  _calculatePathsFrom({\n    type,\n    series,\n    i,\n    realIndex,\n    translationsIndex,\n    prevX,\n    prevY,\n    prevY2\n  }) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let linePath, areaPath, pathFromLine, pathFromArea;\n    if (series[i][0] === null) {\n      for (let s = 0; s < series[i].length; s++) {\n        if (series[i][s] !== null) {\n          prevX = this.xDivision * s;\n          prevY = this.zeroY - series[i][s] / this.yRatio[translationsIndex];\n          linePath = graphics.move(prevX, prevY);\n          areaPath = graphics.move(prevX, this.areaBottomY);\n          break;\n        }\n      }\n    } else {\n      linePath = graphics.move(prevX, prevY);\n      if (type === \"rangeArea\") {\n        linePath = graphics.move(prevX, prevY2) + graphics.line(prevX, prevY);\n      }\n      areaPath = graphics.move(prevX, this.areaBottomY) + graphics.line(prevX, prevY);\n    }\n    pathFromLine = graphics.move(0, this.areaBottomY) + graphics.line(0, this.areaBottomY);\n    pathFromArea = graphics.move(0, this.areaBottomY) + graphics.line(0, this.areaBottomY);\n    if (w.globals.previousPaths.length > 0) {\n      const pathFrom = this.lineHelpers.checkPreviousPaths({\n        pathFromLine,\n        pathFromArea,\n        realIndex\n      });\n      pathFromLine = pathFrom.pathFromLine;\n      pathFromArea = pathFrom.pathFromArea;\n    }\n    return {\n      prevX,\n      prevY,\n      linePath,\n      areaPath,\n      pathFromLine,\n      pathFromArea\n    };\n  }\n  /** @param {{type: any, realIndex: any, i: any, paths: any}} opts */\n  _handlePaths({ type, realIndex, i, paths }) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    this.prevSeriesY.push(paths.yArrj);\n    w.globals.seriesXvalues[realIndex] = paths.xArrj;\n    w.globals.seriesYvalues[realIndex] = paths.yArrj;\n    const forecast = w.config.forecastDataPoints;\n    if (forecast.count > 0 && type !== \"rangeArea\") {\n      const forecastCutoff = w.globals.seriesXvalues[realIndex][w.globals.seriesXvalues[realIndex].length - forecast.count - 1];\n      const elForecastMask = graphics.drawRect(\n        forecastCutoff,\n        0,\n        w.layout.gridWidth,\n        w.layout.gridHeight,\n        0\n      );\n      w.dom.elForecastMask.appendChild(elForecastMask.node);\n      const elNonForecastMask = graphics.drawRect(\n        0,\n        0,\n        forecastCutoff,\n        w.layout.gridHeight,\n        0\n      );\n      w.dom.elNonForecastMask.appendChild(elNonForecastMask.node);\n    }\n    if (!this.pointsChart) {\n      w.globals.delayedElements.push({\n        el: this.elPointsMain.node,\n        index: realIndex\n      });\n    }\n    const defaultRenderedPathOptions = {\n      i,\n      realIndex,\n      animationDelay: i,\n      initialSpeed: w.config.chart.animations.speed,\n      dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n      className: `apexcharts-${type}`\n    };\n    if (type === \"area\") {\n      const pathFill = fill.fillPath({\n        seriesNumber: realIndex\n      });\n      for (let p = 0; p < paths.areaPaths.length; p++) {\n        const renderedPath = graphics.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: paths.pathFromArea,\n          pathTo: paths.areaPaths[p],\n          stroke: \"none\",\n          strokeWidth: 0,\n          strokeLineCap: null,\n          fill: pathFill\n        }));\n        this.elSeries.add(renderedPath);\n      }\n    }\n    if (w.config.stroke.show && !this.pointsChart) {\n      let lineFill = null;\n      if (type === \"line\") {\n        lineFill = fill.fillPath({\n          seriesNumber: realIndex,\n          i\n        });\n      } else {\n        if (w.config.stroke.fill.type === \"solid\") {\n          lineFill = w.globals.stroke.colors[realIndex];\n        } else {\n          const prevFill = w.config.fill;\n          w.config.fill = w.config.stroke.fill;\n          lineFill = fill.fillPath({\n            seriesNumber: realIndex,\n            i\n          });\n          w.config.fill = prevFill;\n        }\n      }\n      for (let p = 0; p < paths.linePaths.length; p++) {\n        let pathFill = lineFill;\n        if (type === \"rangeArea\") {\n          pathFill = fill.fillPath({\n            seriesNumber: realIndex\n          });\n        }\n        const linePathCommonOpts = __spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: paths.pathFromLine,\n          pathTo: paths.linePaths[p],\n          stroke: lineFill,\n          strokeWidth: this.strokeWidth,\n          strokeLineCap: w.config.stroke.lineCap,\n          fill: type === \"rangeArea\" ? pathFill : \"none\"\n        });\n        const renderedPath = graphics.renderPaths(linePathCommonOpts);\n        this.elSeries.add(renderedPath);\n        renderedPath.attr(\"fill-rule\", `evenodd`);\n        if (forecast.count > 0 && type !== \"rangeArea\") {\n          const renderedForecastPath = graphics.renderPaths(linePathCommonOpts);\n          renderedForecastPath.node.setAttribute(\n            \"stroke-dasharray\",\n            forecast.dashArray\n          );\n          if (forecast.strokeWidth) {\n            renderedForecastPath.node.setAttribute(\n              \"stroke-width\",\n              forecast.strokeWidth\n            );\n          }\n          this.elSeries.add(renderedForecastPath);\n          renderedForecastPath.attr(\n            \"clip-path\",\n            `url(#forecastMask${w.globals.cuid})`\n          );\n          renderedPath.attr(\n            \"clip-path\",\n            `url(#nonForecastMask${w.globals.cuid})`\n          );\n        }\n      }\n    }\n  }\n  _iterateOverDataPoints({\n    type,\n    series,\n    iterations,\n    realIndex,\n    translationsIndex,\n    i,\n    x,\n    y,\n    pX,\n    pY,\n    pathsFrom,\n    linePaths,\n    areaPaths,\n    seriesIndex,\n    lineYPosition,\n    xArrj,\n    yArrj,\n    y2Arrj,\n    isRangeStart,\n    seriesRangeEnd\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const yRatio = this.yRatio;\n    let { prevY, linePath, areaPath, pathFromLine, pathFromArea } = pathsFrom;\n    const minY = Utils$1.isNumber(w.globals.minYArr[realIndex]) ? w.globals.minYArr[realIndex] : w.globals.minY;\n    if (!iterations) {\n      iterations = w.globals.dataPoints > 1 ? w.globals.dataPoints - 1 : w.globals.dataPoints;\n    }\n    const getY = (_y, lineYPos) => {\n      return lineYPos - _y / yRatio[translationsIndex] + (this.isReversed ? _y / yRatio[translationsIndex] : 0) * 2;\n    };\n    let y2 = y;\n    const stackSeries = w.config.chart.stacked && !w.globals.comboCharts || w.config.chart.stacked && w.globals.comboCharts && (!this.w.config.chart.stackOnlyBar || /** @type {Record<string,any>} */\n    ((_a = this.w.config.series[realIndex]) == null ? void 0 : _a.type) === \"bar\" || /** @type {Record<string,any>} */\n    ((_b = this.w.config.series[realIndex]) == null ? void 0 : _b.type) === \"column\");\n    let curve = w.config.stroke.curve;\n    if (Array.isArray(curve)) {\n      if (Array.isArray(seriesIndex)) {\n        curve = curve[seriesIndex[i]];\n      } else {\n        curve = curve[i];\n      }\n    }\n    let pathState = 0;\n    let segmentStartX;\n    const jitterPx = this.pointsChart ? this._scatterJitterPx(realIndex) : null;\n    for (let j = 0; j < iterations; j++) {\n      if (series[i].length === 0) break;\n      const isNull = typeof series[i][j + 1] === \"undefined\" || series[i][j + 1] === null;\n      if (w.axisFlags.isXNumeric) {\n        let sX = w.seriesData.seriesX[realIndex][j + 1];\n        if (typeof w.seriesData.seriesX[realIndex][j + 1] === \"undefined\") {\n          sX = w.seriesData.seriesX[realIndex][iterations - 1];\n        }\n        x = (sX - w.globals.minX) / this.xRatio;\n      } else {\n        x = x + this.xDivision;\n      }\n      if (stackSeries) {\n        if (i > 0 && w.globals.collapsedSeries.length < w.config.series.length - 1) {\n          const prevIndex = (pi) => {\n            for (let pii = pi; pii > 0; pii--) {\n              if (w.globals.collapsedSeriesIndices.indexOf(\n                (seriesIndex == null ? void 0 : seriesIndex[pii]) || pii\n              ) > -1) {\n                pii--;\n              } else {\n                return pii;\n              }\n            }\n            return 0;\n          };\n          lineYPosition = this.prevSeriesY[prevIndex(i - 1)][j + 1];\n        } else {\n          lineYPosition = this.zeroY;\n        }\n      } else {\n        lineYPosition = this.zeroY;\n      }\n      if (isNull) {\n        y = getY(minY, lineYPosition);\n      } else {\n        y = getY(series[i][j + 1], lineYPosition);\n        if (type === \"rangeArea\") {\n          y2 = getY(seriesRangeEnd[i][j + 1], lineYPosition);\n        }\n      }\n      let xj = x;\n      let yj = y;\n      if (jitterPx) {\n        const seed = realIndex * 100003 + (j + 1);\n        if (jitterPx.x) xj = x + (hash01(seed * 7919 + 13) - 0.5) * 2 * jitterPx.x;\n        if (jitterPx.y) yj = y + (hash01(seed * 6271 + 97) - 0.5) * 2 * jitterPx.y;\n      }\n      xArrj.push(series[i][j + 1] === null ? null : xj);\n      if (isNull && (w.config.stroke.curve === \"smooth\" || w.config.stroke.curve === \"monotoneCubic\")) {\n        yArrj.push(null);\n        y2Arrj.push(null);\n      } else {\n        yArrj.push(yj);\n        y2Arrj.push(y2);\n      }\n      const pointsPos = this.lineHelpers.calculatePoints({\n        series,\n        x: xj,\n        y: yj,\n        realIndex,\n        i,\n        j,\n        prevY\n      });\n      const calculatedPaths = this._createPaths({\n        type,\n        series,\n        i,\n        j,\n        x,\n        y,\n        y2,\n        xArrj,\n        yArrj,\n        y2Arrj,\n        pX,\n        pY,\n        pathState,\n        segmentStartX,\n        linePath,\n        areaPath,\n        linePaths,\n        areaPaths,\n        curve,\n        isRangeStart\n      });\n      areaPaths = calculatedPaths.areaPaths;\n      linePaths = calculatedPaths.linePaths;\n      pX = calculatedPaths.pX;\n      pY = calculatedPaths.pY;\n      pathState = calculatedPaths.pathState;\n      segmentStartX = calculatedPaths.segmentStartX;\n      areaPath = calculatedPaths.areaPath;\n      linePath = calculatedPaths.linePath;\n      if (this.appendPathFrom && !w.globals.hasNullValues && !(curve === \"monotoneCubic\" && type === \"rangeArea\")) {\n        pathFromLine += graphics.line(x, this.areaBottomY);\n        pathFromArea += graphics.line(x, this.areaBottomY);\n      }\n      this.handleNullDataPoints(series, pointsPos, i, j, realIndex);\n      this._handleMarkersAndLabels({\n        type,\n        pointsPos,\n        i,\n        j,\n        realIndex,\n        isRangeStart\n      });\n    }\n    return {\n      yArrj,\n      xArrj,\n      pathFromArea,\n      areaPaths,\n      pathFromLine,\n      linePaths,\n      linePath,\n      areaPath\n    };\n  }\n  /** @param {{type: any, pointsPos: any, isRangeStart: any, i: any, j: any, realIndex: any}} opts */\n  _handleMarkersAndLabels({ type, pointsPos, isRangeStart, i, j, realIndex }) {\n    const w = this.w;\n    const dataLabels = new DataLabels(this.w, this.ctx);\n    if (!this.pointsChart) {\n      const useProgressive = !w.globals.dataChanged && !w.globals.resized;\n      if (!useProgressive && w.seriesData.series[i].length > 1) {\n        this.elPointsMain.node.classList.add(\"apexcharts-element-hidden\");\n      }\n      const elPointsWrap = this.markers.plotChartMarkers({\n        pointsPos,\n        seriesIndex: realIndex,\n        j: j + 1\n      });\n      if (elPointsWrap !== null) {\n        this.elPointsMain.add(elPointsWrap);\n      }\n    } else {\n      this.scatter.draw(this.elSeries, j, {\n        realIndex,\n        pointsPos,\n        zRatio: this.zRatio,\n        elParent: this.elPointsMain\n      });\n    }\n    const drawnLabels = dataLabels.drawDataLabel({\n      type,\n      isRangeStart,\n      pos: pointsPos,\n      i: realIndex,\n      j: j + 1\n    });\n    if (drawnLabels !== null) {\n      this.elDataLabelsWrap.add(drawnLabels);\n    }\n  }\n  /**\n   * Max scatter-jitter offsets in pixels for this series, or null when jitter is\n   * off. The config offsets are in axis units (x: 1 = one category step / x-data\n   * unit, y: 1 = one y-data unit); convert each to pixels using the chart's\n   * ratios. The actual per-point offset is a deterministic fraction of these\n   * (see Scatter.drawPoint).\n   * @param {number} realIndex\n   * @returns {{ x: number, y: number } | null}\n   */\n  _scatterJitterPx(realIndex) {\n    var _a;\n    const w = this.w;\n    const jt = (_a = w.config.plotOptions.scatter) == null ? void 0 : _a.jitter;\n    if (!jt || !jt.enabled || !jt.x && !jt.y) return null;\n    const xUnitPx = w.axisFlags.isXNumeric && this.xRatio ? 1 / this.xRatio : this.xDivision;\n    const ti = this.yRatio.length > 1 ? realIndex : 0;\n    const yUnitPx = this.yRatio[ti] ? 1 / this.yRatio[ti] : 0;\n    return {\n      x: (jt.x || 0) * xUnitPx,\n      y: (jt.y || 0) * yUnitPx\n    };\n  }\n  /** @param {{type: any, series: any, i: any, j: any, x: any, y: any, xArrj: any, yArrj: any, y2: any, y2Arrj: any, pX: any, pY: any, pathState: any, segmentStartX: any, linePath: any, areaPath: any, linePaths: any, areaPaths: any, curve: any, isRangeStart: any}} opts */\n  _createPaths({\n    type,\n    series,\n    i,\n    j,\n    x,\n    y,\n    xArrj,\n    yArrj,\n    y2,\n    y2Arrj,\n    pX,\n    pY,\n    pathState,\n    segmentStartX,\n    linePath,\n    areaPath,\n    linePaths,\n    areaPaths,\n    curve,\n    isRangeStart\n  }) {\n    const graphics = new Graphics(this.w);\n    const areaBottomY = this.areaBottomY;\n    const rangeArea = type === \"rangeArea\";\n    const isLowerRangeAreaPath = type === \"rangeArea\" && isRangeStart;\n    switch (curve) {\n      case \"monotoneCubic\": {\n        const yAj = isRangeStart ? yArrj : y2Arrj;\n        const getSmoothInputs = (xArr, yArr) => {\n          return xArr.map((_, i2) => {\n            return [_, yArr[i2]];\n          }).filter((_) => _[1] !== null);\n        };\n        const getSegmentLengths = (yArr) => {\n          const segLens = [];\n          let count = 0;\n          yArr.forEach((_) => {\n            if (_ !== null) {\n              count++;\n            } else if (count > 0) {\n              segLens.push(count);\n              count = 0;\n            }\n          });\n          if (count > 0) {\n            segLens.push(count);\n          }\n          return segLens;\n        };\n        const getSegments = (yArr, points) => {\n          const segLens = getSegmentLengths(yArr);\n          const segments = [];\n          for (let i2 = 0, len = 0; i2 < segLens.length; len += segLens[i2++]) {\n            segments[i2] = spline.slice(points, len, len + segLens[i2]);\n          }\n          return segments;\n        };\n        switch (pathState) {\n          case 0:\n            if (yAj[j + 1] === null) {\n              break;\n            }\n            pathState = 1;\n          // falls through\n          case 1:\n            if (!(rangeArea ? xArrj.length === series[i].length : j === series[i].length - 2)) {\n              break;\n            }\n          // falls through\n          case 2: {\n            const _xAj = isRangeStart ? xArrj : xArrj.slice().reverse();\n            const _yAj = isRangeStart ? yAj : yAj.slice().reverse();\n            const smoothInputs = getSmoothInputs(_xAj, _yAj);\n            const points = smoothInputs.length > 1 ? spline.points(smoothInputs) : smoothInputs;\n            let smoothInputsLower = [];\n            if (rangeArea) {\n              if (isLowerRangeAreaPath) {\n                areaPaths = smoothInputs;\n              } else {\n                smoothInputsLower = areaPaths.reverse();\n              }\n            }\n            let segmentCount = 0;\n            let smoothInputsIndex = 0;\n            getSegments(_yAj, points).forEach((_) => {\n              segmentCount++;\n              const svgPoints = svgPath(_);\n              const _start = smoothInputsIndex;\n              smoothInputsIndex += _.length;\n              const _end = smoothInputsIndex - 1;\n              if (isLowerRangeAreaPath) {\n                linePath = graphics.move(\n                  smoothInputs[_start][0],\n                  smoothInputs[_start][1]\n                ) + svgPoints;\n              } else if (rangeArea) {\n                linePath = graphics.move(\n                  smoothInputsLower[_start][0],\n                  smoothInputsLower[_start][1]\n                ) + graphics.line(\n                  smoothInputs[_start][0],\n                  smoothInputs[_start][1]\n                ) + svgPoints + graphics.line(\n                  smoothInputsLower[_end][0],\n                  smoothInputsLower[_end][1]\n                );\n              } else {\n                linePath = graphics.move(\n                  smoothInputs[_start][0],\n                  smoothInputs[_start][1]\n                ) + svgPoints;\n                areaPath = linePath + graphics.line(smoothInputs[_end][0], areaBottomY) + graphics.line(smoothInputs[_start][0], areaBottomY) + \"z\";\n                areaPaths.push(areaPath);\n              }\n              linePaths.push(linePath);\n            });\n            if (rangeArea && segmentCount > 1 && !isLowerRangeAreaPath) {\n              const upperLinePaths = linePaths.slice(segmentCount).reverse();\n              linePaths.splice(segmentCount);\n              upperLinePaths.forEach(\n                (u) => linePaths.push(u)\n              );\n            }\n            pathState = 0;\n            break;\n          }\n        }\n        break;\n      }\n      case \"smooth\": {\n        const length = (x - pX) * 0.35;\n        if (series[i][j] === null) {\n          pathState = 0;\n        } else {\n          switch (pathState) {\n            case 0:\n              segmentStartX = pX;\n              if (isLowerRangeAreaPath) {\n                linePath = graphics.move(pX, y2Arrj[j]) + graphics.line(pX, pY);\n              } else {\n                linePath = graphics.move(pX, pY);\n              }\n              areaPath = graphics.move(pX, pY);\n              if (series[i][j + 1] === null || typeof series[i][j + 1] === \"undefined\") {\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                break;\n              }\n              pathState = 1;\n              if (j < series[i].length - 2) {\n                const p = graphics.curve(pX + length, pY, x - length, y, x, y);\n                linePath += p;\n                areaPath += p;\n                break;\n              }\n            // falls through\n            case 1:\n              if (series[i][j + 1] === null) {\n                if (isLowerRangeAreaPath) {\n                  linePath += graphics.line(pX, y2);\n                } else {\n                  linePath += graphics.move(pX, pY);\n                }\n                areaPath += graphics.line(pX, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                pathState = -1;\n              } else {\n                const p = graphics.curve(pX + length, pY, x - length, y, x, y);\n                linePath += p;\n                areaPath += p;\n                if (j >= series[i].length - 2) {\n                  if (isLowerRangeAreaPath) {\n                    linePath += graphics.curve(x, y, x, y, x, y2) + graphics.move(x, y2);\n                  }\n                  areaPath += graphics.curve(x, y, x, y, x, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                  linePaths.push(linePath);\n                  areaPaths.push(areaPath);\n                  pathState = -1;\n                }\n              }\n              break;\n          }\n        }\n        pX = x;\n        pY = y;\n        break;\n      }\n      default: {\n        const pathToPoint = (curve2, x2, y3) => {\n          let path = \"\";\n          switch (curve2) {\n            case \"stepline\":\n              path = graphics.line(x2, null, \"H\") + graphics.line(null, y3, \"V\");\n              break;\n            case \"linestep\":\n              path = graphics.line(null, y3, \"V\") + graphics.line(x2, null, \"H\");\n              break;\n            case \"straight\":\n              path = graphics.line(x2, y3);\n              break;\n          }\n          return path;\n        };\n        if (series[i][j] === null) {\n          pathState = 0;\n        } else {\n          switch (pathState) {\n            case 0:\n              segmentStartX = pX;\n              if (isLowerRangeAreaPath) {\n                linePath = graphics.move(pX, y2Arrj[j]) + graphics.line(pX, pY);\n              } else {\n                linePath = graphics.move(pX, pY);\n              }\n              areaPath = graphics.move(pX, pY);\n              if (series[i][j + 1] === null || typeof series[i][j + 1] === \"undefined\") {\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                break;\n              }\n              pathState = 1;\n              if (j < series[i].length - 2) {\n                const p = pathToPoint(curve, x, y);\n                linePath += p;\n                areaPath += p;\n                break;\n              }\n            // falls through\n            case 1:\n              if (series[i][j + 1] === null) {\n                if (isLowerRangeAreaPath) {\n                  linePath += graphics.line(pX, y2);\n                } else {\n                  linePath += graphics.move(pX, pY);\n                }\n                areaPath += graphics.line(pX, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                pathState = -1;\n              } else {\n                const p = pathToPoint(curve, x, y);\n                linePath += p;\n                areaPath += p;\n                if (j >= series[i].length - 2) {\n                  if (isLowerRangeAreaPath) {\n                    linePath += graphics.line(x, y2);\n                  }\n                  areaPath += graphics.line(x, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                  linePaths.push(linePath);\n                  areaPaths.push(areaPath);\n                  pathState = -1;\n                }\n              }\n              break;\n          }\n        }\n        pX = x;\n        pY = y;\n        break;\n      }\n    }\n    return {\n      linePaths,\n      areaPaths,\n      pX,\n      pY,\n      pathState,\n      segmentStartX,\n      linePath,\n      areaPath\n    };\n  }\n  /**\n   * @param {any[]} series\n   * @param {any} pointsPos\n   * @param {number} i\n   * @param {number} j\n   * @param {number} realIndex\n   */\n  handleNullDataPoints(series, pointsPos, i, j, realIndex) {\n    const w = this.w;\n    if (series[i][j] === null && w.config.markers.showNullDataPoints || series[i].length === 1) {\n      let pSize = this.strokeWidth - w.config.markers.strokeWidth / 2;\n      if (!(pSize > 0)) {\n        pSize = 0;\n      }\n      const elPointsWrap = this.markers.plotChartMarkers({\n        pointsPos,\n        seriesIndex: realIndex,\n        j: j + 1,\n        pSize,\n        alwaysDrawMarker: true\n      });\n      if (elPointsWrap !== null) {\n        this.elPointsMain.add(elPointsWrap);\n      }\n    }\n  }\n}\nclass CircularChartsHelpers {\n  /**\n   * @param {import('../../../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number} i\n   * @param {string | number} text\n   */\n  drawYAxisTexts(x, y, i, text) {\n    const w = this.w;\n    const yaxisConfig = w.config.yaxis[0];\n    const formatter = w.formatters.yLabelFormatters[0];\n    const graphics = new Graphics(this.w);\n    const yaxisLabel = graphics.drawText({\n      x: x + yaxisConfig.labels.offsetX,\n      y: y + yaxisConfig.labels.offsetY,\n      text: formatter(text, i),\n      textAnchor: \"middle\",\n      fontSize: yaxisConfig.labels.style.fontSize,\n      fontFamily: yaxisConfig.labels.style.fontFamily,\n      foreColor: Array.isArray(yaxisConfig.labels.style.colors) ? yaxisConfig.labels.style.colors[i] : yaxisConfig.labels.style.colors\n    });\n    return yaxisLabel;\n  }\n  /**\n   * Widest rendered width among the given label strings. Used to reserve\n   * horizontal room for outer (name) labels so the pie can shrink to fit them.\n   * @param {string[]} labels\n   * @param {{ fontSize?: string, fontFamily?: string }} style\n   * @returns {number}\n   */\n  getMaxLabelWidth(labels, { fontSize, fontFamily } = {}) {\n    const graphics = new Graphics(this.w);\n    let maxWidth = 0;\n    labels.forEach((text) => {\n      if (text === null || typeof text === \"undefined\" || text === \"\") return;\n      const rect = graphics.getTextRects(\n        `${text}`,\n        fontSize || \"12px\",\n        fontFamily,\n        \"\"\n      );\n      maxWidth = Math.max(maxWidth, rect.width);\n    });\n    return maxWidth;\n  }\n  /**\n   * Draw a single outer (name) label: an optional leader line from the slice\n   * edge (anchor -> radial elbow -> label) plus the name text (one or more\n   * lines, e.g. name + percent). Geometry is computed by the caller (Pie.js)\n   * so it can run a de-overlap pass first. The text block is vertically\n   * centered on `labelY`, which is where the connector terminates.\n   * @param {{\n   *   lines: string[],\n   *   lineHeight: number,\n   *   anchor: { x: number, y: number },\n   *   elbow: { x: number, y: number },\n   *   labelX: number,\n   *   labelY: number,\n   *   side: 'left' | 'right',\n   *   connector: { show: boolean, width: number, color: string },\n   *   style: { fontSize?: string, fontFamily?: string, fontWeight?: string | number },\n   *   foreColor: string,\n   * }} opts\n   */\n  drawExternalLabel({\n    lines,\n    lineHeight,\n    anchor,\n    elbow,\n    labelX,\n    labelY,\n    side,\n    connector,\n    style,\n    foreColor\n  }) {\n    const graphics = new Graphics(this.w);\n    const group = graphics.group({\n      class: \"apexcharts-pie-name-label-group\"\n    });\n    if (connector.show) {\n      const d = `M ${anchor.x} ${anchor.y} L ${elbow.x} ${elbow.y} L ${labelX} ${labelY}`;\n      const line = graphics.drawPath({\n        d,\n        stroke: connector.color,\n        strokeWidth: connector.width,\n        fill: \"none\",\n        strokeLinecap: \"round\"\n      });\n      line.node.classList.add(\"apexcharts-pie-label-connector\");\n      group.add(line);\n    }\n    const textX = side === \"right\" ? labelX + 4 : labelX - 4;\n    const n = lines.length;\n    const startY = labelY - (n - 1) * lineHeight / 2;\n    const elText = graphics.drawText({\n      x: textX,\n      y: startY,\n      text: n === 1 ? lines[0] : lines,\n      textAnchor: side === \"right\" ? \"start\" : \"end\",\n      fontSize: style.fontSize,\n      fontFamily: style.fontFamily,\n      fontWeight: style.fontWeight,\n      foreColor,\n      dominantBaseline: \"central\",\n      cssClass: \"apexcharts-pie-name-label\"\n    });\n    if (n > 1) {\n      const tspans = elText.node.getElementsByTagName(\"tspan\");\n      for (let li = 0; li < tspans.length; li++) {\n        tspans[li].setAttribute(\"x\", `${textX}`);\n        tspans[li].setAttribute(\"dy\", li === 0 ? \"0\" : `${lineHeight}`);\n      }\n    }\n    group.add(elText);\n    return group;\n  }\n}\nclass Pie {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.chartType = this.w.config.chart.type;\n    this.initialAnim = this.w.config.chart.animations.enabled;\n    this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n    this.animBeginArr = [0];\n    this.animDur = 0;\n    this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels;\n    this.lineColorArr = w.globals.stroke.colors !== void 0 ? w.globals.stroke.colors : w.globals.colors;\n    this.defaultSize = Math.min(w.layout.gridWidth, w.layout.gridHeight);\n    this.centerY = this.defaultSize / 2;\n    this.centerX = w.layout.gridWidth / 2;\n    if (w.config.chart.type === \"radialBar\") {\n      this.fullAngle = 360;\n    } else {\n      this.fullAngle = Math.abs(\n        w.config.plotOptions.pie.endAngle - w.config.plotOptions.pie.startAngle\n      );\n    }\n    this.initialAngle = w.config.plotOptions.pie.startAngle % this.fullAngle;\n    w.globals.radialSize = this.defaultSize / 2.05 - w.config.stroke.width - (!w.config.chart.sparkline.enabled ? w.config.chart.dropShadow.blur : 0);\n    this.externalCfg = w.config.plotOptions.pie.dataLabels.external;\n    const dlStyle = w.config.dataLabels.style;\n    this.externalLabelStyle = {\n      fontSize: this.externalCfg.fontSize || dlStyle.fontSize,\n      fontFamily: this.externalCfg.fontFamily || dlStyle.fontFamily,\n      fontWeight: this.externalCfg.fontWeight || dlStyle.fontWeight\n    };\n    this.externalLabels = [];\n    this.externalLabelMaxLines = 1;\n    this.externalLabelLineH = parseFloat(this.externalLabelStyle.fontSize) || 12;\n    w.globals.pieExternalLabelMarginY = 0;\n    this.showExternalLabels = this.externalCfg.show && this.chartType !== \"polarArea\";\n    if (this.showExternalLabels && !w.globals.noData) {\n      this.reserveExternalLabelSpace();\n    }\n    this.donutSize = w.globals.radialSize * parseInt(w.config.plotOptions.pie.donut.size, 10) / 100;\n    const scaleSize = w.config.plotOptions.pie.customScale;\n    const halfW = w.layout.gridWidth / 2;\n    const halfH = w.layout.gridHeight / 2;\n    this.translateX = halfW - halfW * scaleSize;\n    this.translateY = halfH - halfH * scaleSize;\n    this.dataLabelsGroup = new Graphics(this.w).group({\n      class: \"apexcharts-datalabels-group\",\n      transform: `translate(${this.translateX}, ${this.translateY}) scale(${scaleSize})`\n    });\n    this.maxY = 0;\n    this.sliceLabels = [];\n    this.sliceSizes = [];\n    this.prevSectorAngleArr = [];\n  }\n  /**\n   * The text shown in an outer (name) label for slice `i`. Applies the\n   * user `name.formatter` if provided, otherwise the raw series name. The\n   * formatter may return a string or an array of strings (one per line, e.g.\n   * `[name, percent]`); normalize via `getExternalLabelLines`.\n   * @param {number} i\n   * @returns {string | string[]}\n   */\n  getExternalLabelText(i) {\n    var _a, _b, _c;\n    const w = this.w;\n    const name2 = w.seriesData.seriesNames[i];\n    const fn = this.externalCfg.formatter;\n    if (typeof fn === \"function\") {\n      return fn(name2, {\n        seriesIndex: i,\n        percent: (_b = (_a = w.globals.seriesPercent) == null ? void 0 : _a[i]) == null ? void 0 : _b[0],\n        value: (_c = w.globals.seriesTotals) == null ? void 0 : _c[i],\n        w\n      });\n    }\n    return name2 == null ? \"\" : `${name2}`;\n  }\n  /**\n   * Outer label content for slice `i` normalized to an array of line strings.\n   * Supports a formatter returning an array, or a string with `\\n` separators.\n   * @param {number} i\n   * @returns {string[]}\n   */\n  getExternalLabelLines(i) {\n    const raw = this.getExternalLabelText(i);\n    const arr = Array.isArray(raw) ? raw : `${raw == null ? \"\" : raw}`.split(\"\\n\");\n    return arr.map((l) => l == null ? \"\" : `${l}`);\n  }\n  /**\n   * Shrink the pie radius (and reposition its center) so outer name labels and\n   * their connector lines fit inside the chart area without clipping. Stores\n   * the reserved vertical band on `w.globals.pieExternalLabelMarginY` so\n   * Core.resizeNonAxisCharts can grow the SVG height to match.\n   */\n  reserveExternalLabelSpace() {\n    const w = this.w;\n    const helpers = new CircularChartsHelpers(w);\n    const lineSets = (w.seriesData.seriesNames || []).map(\n      (_, i) => this.getExternalLabelLines(i)\n    );\n    const maxLabelWidth = helpers.getMaxLabelWidth(lineSets.flat(), {\n      fontSize: this.externalLabelStyle.fontSize,\n      fontFamily: this.externalLabelStyle.fontFamily\n    });\n    this.externalLabelMaxLines = lineSets.reduce((m, s) => Math.max(m, s.length), 1);\n    this.externalLabelLineH = Math.round(\n      (parseFloat(this.externalLabelStyle.fontSize) || 12) * 1.35\n    );\n    const cn = this.externalCfg.connector;\n    const blockHeight = this.externalLabelMaxLines * this.externalLabelLineH;\n    const mh = maxLabelWidth + (cn.length || 0) + (cn.gap || 0) + 12;\n    const mv = blockHeight / 2 + (cn.gap || 0) + 6;\n    const fitted = Math.min(\n      w.globals.radialSize,\n      w.layout.gridWidth / 2 - mh,\n      w.layout.gridHeight / 2 - mv\n    );\n    w.globals.radialSize = Math.max(fitted, this.defaultSize * 0.15);\n    w.globals.pieExternalLabelMarginY = mv;\n    const heightStr = w.config.chart.height ? String(w.config.chart.height) : \"\";\n    const userSetFixedHeight = heightStr !== \"\" && heightStr !== \"auto\";\n    this.centerY = userSetFixedHeight ? w.layout.gridHeight / 2 : w.globals.radialSize + mv;\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    var _a;\n    const self = this;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elPie = graphics.group({\n      class: \"apexcharts-pie\"\n    });\n    if (w.globals.noData) return elPie;\n    let total = 0;\n    for (let k = 0; k < series.length; k++) {\n      total += Utils$1.negToZero(series[k]);\n    }\n    const sectorAngleArr = [];\n    const elSeries = graphics.group();\n    if (total === 0) {\n      total = 1e-5;\n    }\n    series.forEach((m) => {\n      this.maxY = Math.max(this.maxY, m);\n    });\n    if (w.config.yaxis[0].max) {\n      this.maxY = w.config.yaxis[0].max;\n    }\n    if (w.config.grid.position === \"back\" && this.chartType === \"polarArea\") {\n      this.drawPolarElements(elPie);\n    }\n    for (let i = 0; i < series.length; i++) {\n      const angle = this.fullAngle * Utils$1.negToZero(series[i]) / total;\n      sectorAngleArr.push(angle);\n      if (this.chartType === \"polarArea\") {\n        sectorAngleArr[i] = this.fullAngle / series.length;\n        this.sliceSizes.push(w.globals.radialSize * series[i] / this.maxY);\n      } else {\n        this.sliceSizes.push(w.globals.radialSize);\n      }\n    }\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    if (w.globals.dataChanged && !morphActive) {\n      let prevTotal = 0;\n      for (let k = 0; k < w.globals.previousPaths.length; k++) {\n        prevTotal += Utils$1.negToZero(w.globals.previousPaths[k]);\n      }\n      let previousAngle;\n      for (let i = 0; i < w.globals.previousPaths.length; i++) {\n        previousAngle = this.fullAngle * Utils$1.negToZero(w.globals.previousPaths[i]) / prevTotal;\n        this.prevSectorAngleArr.push(previousAngle);\n      }\n    }\n    if (this.donutSize < 0) {\n      this.donutSize = 0;\n    }\n    if (this.chartType === \"donut\") {\n      const circle = graphics.drawCircle(this.donutSize);\n      circle.attr({\n        cx: this.centerX,\n        cy: this.centerY,\n        fill: w.config.plotOptions.pie.donut.background ? w.config.plotOptions.pie.donut.background : \"transparent\"\n      });\n      elSeries.add(circle);\n    }\n    const elG = self.drawArcs(sectorAngleArr, series);\n    this.sliceLabels.forEach((s) => {\n      elG.add(s);\n    });\n    elSeries.attr({\n      transform: `translate(${this.translateX}, ${this.translateY}) scale(${w.config.plotOptions.pie.customScale})`\n    });\n    elSeries.add(elG);\n    elPie.add(elSeries);\n    if (this.donutDataLabels.show) {\n      const shouldFadeInLabels = this.initialAnim && !w.globals.resized && !w.globals.dataChanged && this.animDur > 0;\n      const dataLabels = this.renderInnerDataLabels(\n        this.dataLabelsGroup,\n        this.donutDataLabels,\n        {\n          hollowSize: this.donutSize,\n          centerX: this.centerX,\n          centerY: this.centerY,\n          opacity: shouldFadeInLabels ? 0 : this.donutDataLabels.show\n        }\n      );\n      if (shouldFadeInLabels) {\n        const labelsNode = this.dataLabelsGroup.node;\n        labelsNode.style.transition = \"opacity 280ms ease-out\";\n        setTimeout(() => {\n          labelsNode.style.opacity = \"1\";\n        }, this.animDur);\n      }\n      elPie.add(dataLabels);\n    }\n    if (w.config.grid.position === \"front\" && this.chartType === \"polarArea\") {\n      this.drawPolarElements(elPie);\n    }\n    return elPie;\n  }\n  // core function for drawing pie arcs\n  /**\n   * @param {any[]} sectorAngleArr\n   * @param {any[]} series\n   */\n  drawArcs(sectorAngleArr, series) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    const g = graphics.group({\n      class: \"apexcharts-slices\"\n    });\n    let startAngle = this.initialAngle;\n    let prevStartAngle = this.initialAngle;\n    let endAngle = this.initialAngle;\n    let prevEndAngle = this.initialAngle;\n    this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0;\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    for (let i = 0; i < sectorAngleArr.length; i++) {\n      const elPieArc = graphics.group({\n        class: `apexcharts-series apexcharts-pie-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      g.add(elPieArc);\n      startAngle = endAngle;\n      prevStartAngle = prevEndAngle;\n      endAngle = startAngle + sectorAngleArr[i];\n      prevEndAngle = prevStartAngle + this.prevSectorAngleArr[i];\n      const angle = endAngle < startAngle ? this.fullAngle + endAngle - startAngle : endAngle - startAngle;\n      const pathFill = fill.fillPath({\n        seriesNumber: i,\n        size: this.sliceSizes[i],\n        value: series[i]\n      });\n      const morphFrom = morphActive ? this.ctx.morphTypeChange.getInitialPathFor(i, 0) : null;\n      const path = morphFrom || this.getChangedPath(prevStartAngle, prevEndAngle);\n      const elPath = graphics.drawPath({\n        d: path,\n        // Pie/donut/polarArea data is a single series, so a user-supplied\n        // `stroke.colors` shorter than the slice count is NOT padded by the\n        // theme engine (unlike fill colors, which cycle). Without this, only\n        // slice 0 gets the requested color and the rest fall back to a grey\n        // default. Cycle the array — matching fill-color behaviour — so a\n        // single `stroke.colors: ['#fff']` borders every slice as expected.\n        stroke: Array.isArray(this.lineColorArr) ? (_b = this.lineColorArr[i]) != null ? _b : this.lineColorArr[i % this.lineColorArr.length] : this.lineColorArr,\n        strokeWidth: 0,\n        fill: pathFill,\n        fillOpacity: w.config.fill.opacity,\n        classes: `apexcharts-pie-area apexcharts-${this.chartType.toLowerCase()}-slice-${i}`\n      });\n      elPath.attr({\n        index: 0,\n        j: i\n      });\n      filters.setSelectionFilter(elPath, 0, i);\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        filters.dropShadow(elPath, shadow, i);\n      }\n      this.addListeners(elPath, this.donutDataLabels);\n      let labelPosition = {\n        x: 0,\n        y: 0\n      };\n      const midAngle = (startAngle + angle / 2) % this.fullAngle;\n      let arcCenter = { x: this.centerX, y: this.centerY };\n      if (this.chartType === \"pie\" || this.chartType === \"polarArea\") {\n        labelPosition = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          w.globals.radialSize / 1.25 + w.config.plotOptions.pie.dataLabels.offset,\n          midAngle\n        );\n        arcCenter = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          w.globals.radialSize / 2,\n          midAngle\n        );\n      } else if (this.chartType === \"donut\") {\n        labelPosition = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          (w.globals.radialSize + this.donutSize) / 2 + w.config.plotOptions.pie.dataLabels.offset,\n          midAngle\n        );\n        arcCenter = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          (w.globals.radialSize + this.donutSize) / 2,\n          midAngle\n        );\n      }\n      Graphics.setAttrs(elPath.node, {\n        \"data:angle\": angle,\n        \"data:startAngle\": startAngle,\n        \"data:strokeWidth\": this.strokeWidth,\n        \"data:value\": series[i],\n        \"data:cx\": arcCenter.x,\n        \"data:cy\": arcCenter.y\n      });\n      elPieArc.add(elPath);\n      let dur = 0;\n      if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n        dur = angle / this.fullAngle * w.config.chart.animations.speed;\n        if (dur === 0) dur = 1;\n        this.animDur = dur + this.animDur;\n        this.animBeginArr.push(this.animDur);\n      } else {\n        this.animBeginArr.push(0);\n      }\n      if (morphActive && morphFrom) {\n        const targetD = this.getPiePath({\n          me: this,\n          startAngle,\n          angle,\n          size: this.sliceSizes[i]\n        });\n        const morphSpeed = this.ctx.morphTypeChange.getSpeed();\n        const animations = this.ctx.animations;\n        elPath.node.setAttribute(\"data:pathOrig\", targetD);\n        const morphRunner = elPath.animate(morphSpeed).plot(targetD, \"polygons\").attr({ \"stroke-width\": this.strokeWidth });\n        if (morphRunner && typeof morphRunner.after === \"function\") {\n          morphRunner.after(() => animations.animationCompleted(elPath));\n        } else {\n          animations.animationCompleted(elPath);\n        }\n      } else if (this.dynamicAnim && w.globals.dataChanged) {\n        this.animatePaths(elPath, {\n          size: this.sliceSizes[i],\n          endAngle,\n          startAngle,\n          prevStartAngle,\n          prevEndAngle,\n          animateStartingPos: true,\n          i,\n          animBeginArr: this.animBeginArr,\n          shouldSetPrevPaths: true,\n          dur: w.config.chart.animations.dynamicAnimation.speed\n        });\n      } else {\n        this.animatePaths(elPath, {\n          size: this.sliceSizes[i],\n          endAngle,\n          startAngle,\n          i,\n          totalItems: sectorAngleArr.length - 1,\n          animBeginArr: this.animBeginArr,\n          dur\n        });\n      }\n      if (w.config.plotOptions.pie.expandOnClick && this.chartType !== \"polarArea\") {\n        elPath.node.addEventListener(\"mouseup\", this.pieClicked.bind(this, i));\n      }\n      if (typeof w.interact.selectedDataPoints[0] !== \"undefined\" && w.interact.selectedDataPoints[0].indexOf(i) > -1) {\n        if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged && this.animDur > 0) {\n          const _this = this;\n          const _i = i;\n          setTimeout(() => _this.pieClicked(_i), this.animDur);\n        } else {\n          this.pieClicked(i);\n        }\n      }\n      if (w.config.dataLabels.enabled) {\n        const xPos = labelPosition.x;\n        const yPos = labelPosition.y;\n        let text = 100 * angle / this.fullAngle + \"%\";\n        if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) {\n          const formatter = w.config.dataLabels.formatter;\n          if (formatter !== void 0) {\n            text = formatter(w.globals.seriesPercent[i][0], {\n              seriesIndex: i,\n              w\n            });\n          }\n          const foreColor = w.globals.dataLabels.style.colors[i];\n          const elPieLabelWrap = graphics.group({\n            class: `apexcharts-datalabels`\n          });\n          const elPieLabel = graphics.drawText({\n            x: xPos,\n            y: yPos,\n            text,\n            textAnchor: \"middle\",\n            fontSize: w.config.dataLabels.style.fontSize,\n            fontFamily: w.config.dataLabels.style.fontFamily,\n            fontWeight: w.config.dataLabels.style.fontWeight,\n            foreColor\n          });\n          elPieLabelWrap.add(elPieLabel);\n          if (w.config.dataLabels.dropShadow.enabled) {\n            const textShadow = w.config.dataLabels.dropShadow;\n            filters.dropShadow(elPieLabel, textShadow);\n          }\n          elPieLabel.node.classList.add(\"apexcharts-pie-label\");\n          if (w.config.chart.animations.animate && w.globals.resized === false) {\n            elPieLabel.node.classList.add(\"apexcharts-pie-label-delay\");\n            elPieLabel.node.style.animationDelay = w.config.chart.animations.speed / 940 + \"s\";\n          }\n          this.sliceLabels.push(elPieLabelWrap);\n        }\n      }\n      if (this.showExternalLabels && angle !== 0) {\n        const lines = this.getExternalLabelLines(i);\n        if (lines.some((l) => l !== \"\")) {\n          const anchor = Utils$1.polarToCartesian(\n            this.centerX,\n            this.centerY,\n            w.globals.radialSize,\n            midAngle\n          );\n          const elbow = Utils$1.polarToCartesian(\n            this.centerX,\n            this.centerY,\n            w.globals.radialSize + (this.externalCfg.connector.gap || 0),\n            midAngle\n          );\n          const isRight = elbow.x >= this.centerX;\n          const baseLabelX = isRight ? elbow.x + (this.externalCfg.connector.length || 0) : elbow.x - (this.externalCfg.connector.length || 0);\n          this.externalLabels.push({\n            lines,\n            anchor,\n            elbow,\n            side: isRight ? \"right\" : \"left\",\n            labelX: baseLabelX + parseFloat(this.externalCfg.offsetX || 0),\n            idealY: elbow.y + parseFloat(this.externalCfg.offsetY || 0),\n            connectorColor: this.externalCfg.connector.color || w.globals.colors[i],\n            foreColor: this.externalCfg.color || w.config.chart.foreColor\n          });\n        }\n      }\n    }\n    if (this.showExternalLabels && this.externalLabels.length) {\n      this.placeExternalLabels();\n      const revealOnAnimEnd = Environment.isBrowser() && (morphActive || this.dynamicAnim && w.globals.dataChanged || this.initialAnim && !w.globals.resized && !w.globals.dataChanged);\n      this.externalLabels.forEach((lbl) => {\n        const group = new CircularChartsHelpers(w).drawExternalLabel({\n          lines: lbl.lines,\n          lineHeight: this.externalLabelLineH,\n          anchor: lbl.anchor,\n          elbow: lbl.elbow,\n          labelX: lbl.labelX,\n          labelY: lbl.labelY,\n          side: lbl.side,\n          connector: {\n            show: this.externalCfg.connector.show,\n            width: this.externalCfg.connector.width,\n            color: lbl.connectorColor\n          },\n          style: this.externalLabelStyle,\n          foreColor: lbl.foreColor\n        });\n        if (revealOnAnimEnd) {\n          group.node.classList.add(\"apexcharts-element-hidden\");\n          w.globals.delayedElements.push({ el: group.node });\n        }\n        g.add(group);\n      });\n    }\n    return g;\n  }\n  /**\n   * Vertical de-overlap for outer (name) labels: per side, sort by ideal y and\n   * push neighbours apart so they keep at least one line-height of spacing.\n   * Mutates each entry's `labelY`. Connector lines re-route to the moved y.\n   */\n  placeExternalLabels() {\n    const w = this.w;\n    const lineHeight = this.externalLabelMaxLines * this.externalLabelLineH + 2;\n    const maxY = this.centerY + w.globals.radialSize + w.globals.pieExternalLabelMarginY;\n    [\"left\", \"right\"].forEach((side) => {\n      const items = this.externalLabels.filter((l) => l.side === side).sort((a, b) => a.idealY - b.idealY);\n      items.forEach((l) => {\n        l.labelY = l.idealY;\n      });\n      for (let k = 1; k < items.length; k++) {\n        if (items[k].labelY - items[k - 1].labelY < lineHeight) {\n          items[k].labelY = items[k - 1].labelY + lineHeight;\n        }\n      }\n      const last = items[items.length - 1];\n      const overflow = last ? last.labelY - maxY : 0;\n      if (overflow > 0) {\n        for (let k = items.length - 1; k >= 0; k--) {\n          items[k].labelY -= overflow;\n          if (k < items.length - 1 && items[k + 1].labelY - items[k].labelY < lineHeight) {\n            items[k].labelY = items[k + 1].labelY - lineHeight;\n          }\n        }\n      }\n    });\n  }\n  /**\n   * @param {any} elPath\n   * @param {Record<string, any>} dataLabels\n   */\n  addListeners(elPath, dataLabels) {\n    const graphics = new Graphics(this.w);\n    elPath.node.addEventListener(\n      \"mouseenter\",\n      graphics.pathMouseEnter.bind(this, elPath)\n    );\n    elPath.node.addEventListener(\n      \"mouseleave\",\n      graphics.pathMouseLeave.bind(this, elPath)\n    );\n    elPath.node.addEventListener(\n      \"mouseleave\",\n      this.revertDataLabelsInner.bind(this)\n    );\n    elPath.node.addEventListener(\n      \"mousedown\",\n      graphics.pathMouseDown.bind(this, elPath)\n    );\n    if (!this.donutDataLabels.total.showAlways) {\n      elPath.node.addEventListener(\n        \"mouseenter\",\n        this.printDataLabelsInner.bind(this, elPath.node, dataLabels)\n      );\n      elPath.node.addEventListener(\n        \"mousedown\",\n        this.printDataLabelsInner.bind(this, elPath.node, dataLabels)\n      );\n    }\n  }\n  // This function can be used for other circle charts too\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} opts\n   */\n  animatePaths(el, opts) {\n    const w = this.w;\n    const me = this;\n    let angle = opts.endAngle < opts.startAngle ? this.fullAngle + opts.endAngle - opts.startAngle : opts.endAngle - opts.startAngle;\n    let prevAngle = angle;\n    let fromStartAngle = opts.startAngle;\n    const toStartAngle = opts.startAngle;\n    if (opts.prevStartAngle !== void 0 && opts.prevEndAngle !== void 0) {\n      fromStartAngle = opts.prevEndAngle;\n      prevAngle = opts.prevEndAngle < opts.prevStartAngle ? this.fullAngle + opts.prevEndAngle - opts.prevStartAngle : opts.prevEndAngle - opts.prevStartAngle;\n    }\n    if (opts.i === w.config.series.length - 1) {\n      if (angle + toStartAngle > this.fullAngle) {\n        opts.endAngle = opts.endAngle - (angle + toStartAngle);\n      } else if (angle + toStartAngle < this.fullAngle) {\n        opts.endAngle = opts.endAngle + (this.fullAngle - (angle + toStartAngle));\n      }\n    }\n    if (angle === this.fullAngle) angle = this.fullAngle - 0.01;\n    me.animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts);\n  }\n  /**\n   * @param {any} el\n   * @param {number} fromStartAngle\n   * @param {number} toStartAngle\n   * @param {number} angle\n   * @param {number} prevAngle\n   * @param {Record<string, any>} opts\n   */\n  animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts) {\n    const me = this;\n    const w = this.w;\n    const animations = new Animations(this.w);\n    const size = opts.size;\n    let path;\n    if (isNaN(fromStartAngle) || isNaN(prevAngle)) {\n      fromStartAngle = toStartAngle;\n      prevAngle = angle;\n      opts.dur = 0;\n    }\n    let currAngle = angle;\n    let startAngle = toStartAngle;\n    const fromAngle = fromStartAngle < toStartAngle ? this.fullAngle + fromStartAngle - toStartAngle : fromStartAngle - toStartAngle;\n    if (w.globals.dataChanged && opts.shouldSetPrevPaths) {\n      if (opts.prevEndAngle) {\n        path = me.getPiePath({\n          me,\n          startAngle: opts.prevStartAngle,\n          angle: opts.prevEndAngle < opts.prevStartAngle ? this.fullAngle + opts.prevEndAngle - opts.prevStartAngle : opts.prevEndAngle - opts.prevStartAngle,\n          size\n        });\n        el.attr({ d: path });\n      }\n    }\n    if (opts.dur !== 0) {\n      el.animate(opts.dur, opts.animBeginArr[opts.i]).after(\n        /** @this {any} */\n        function() {\n          if (me.chartType === \"pie\" || me.chartType === \"donut\" || me.chartType === \"polarArea\") {\n            this.animate(\n              w.config.chart.animations.dynamicAnimation.speed\n            ).attr({\n              \"stroke-width\": me.strokeWidth\n            });\n          }\n          if (opts.i === w.config.series.length - 1) {\n            animations.animationCompleted(el);\n          }\n        }\n      ).during((pos) => {\n        currAngle = fromAngle + (angle - fromAngle) * pos;\n        if (opts.animateStartingPos) {\n          currAngle = prevAngle + (angle - prevAngle) * pos;\n          startAngle = fromStartAngle - prevAngle + (toStartAngle - (fromStartAngle - prevAngle)) * pos;\n        }\n        path = me.getPiePath({\n          me,\n          startAngle,\n          angle: currAngle,\n          size\n        });\n        el.node.setAttribute(\"data:pathOrig\", path);\n        el.attr({\n          d: path\n        });\n      });\n    } else {\n      path = me.getPiePath({\n        me,\n        startAngle,\n        angle,\n        size\n      });\n      if (!opts.isTrack) {\n        w.globals.animationEnded = true;\n      }\n      el.node.setAttribute(\"data:pathOrig\", path);\n      el.attr({\n        d: path,\n        \"stroke-width\": me.strokeWidth\n      });\n    }\n  }\n  /**\n   * @param {number} i\n   */\n  pieClicked(i) {\n    const w = this.w;\n    const me = this;\n    const size = me.sliceSizes[i] + (w.config.plotOptions.pie.expandOnClick ? 4 : 0);\n    const elPath = w.dom.Paper.findOne(\n      `.apexcharts-${me.chartType.toLowerCase()}-slice-${i}`\n    );\n    if (elPath.attr(\"data:pieClicked\") === \"true\") {\n      elPath.attr({\n        \"data:pieClicked\": \"false\"\n      });\n      this.revertDataLabelsInner();\n      const origPath = elPath.attr(\"data:pathOrig\");\n      elPath.attr({\n        d: origPath\n      });\n      return;\n    } else {\n      const allEls = w.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\");\n      Array.prototype.forEach.call(allEls, (pieSlice) => {\n        pieSlice.setAttribute(\"data:pieClicked\", \"false\");\n        const origPath = pieSlice.getAttribute(\"data:pathOrig\");\n        if (origPath) {\n          pieSlice.setAttribute(\"d\", origPath);\n        }\n      });\n      w.interact.capturedDataPointIndex = i;\n      elPath.attr(\"data:pieClicked\", \"true\");\n    }\n    const startAngle = parseInt(elPath.attr(\"data:startAngle\"), 10);\n    const angle = parseInt(elPath.attr(\"data:angle\"), 10);\n    const path = me.getPiePath({\n      me,\n      startAngle,\n      angle,\n      size\n    });\n    if (angle === 360) return;\n    elPath.plot(path);\n  }\n  /**\n   * @param {number} prevStartAngle\n   * @param {number} prevEndAngle\n   */\n  getChangedPath(prevStartAngle, prevEndAngle) {\n    let path = \"\";\n    if (this.dynamicAnim && this.w.globals.dataChanged) {\n      path = this.getPiePath({\n        me: this,\n        startAngle: prevStartAngle,\n        angle: prevEndAngle - prevStartAngle,\n        // @ts-ignore — size is set dynamically during draw()\n        size: this.size\n      });\n    }\n    return path;\n  }\n  /** @param {{me: any, startAngle: any, angle: any, size: any}} opts */\n  getPiePath({ me, startAngle, angle, size }) {\n    let path;\n    const graphics = new Graphics(this.w);\n    const startDeg = startAngle;\n    const startRadians = Math.PI * (startDeg - 90) / 180;\n    let endDeg = angle + startAngle;\n    if (Math.ceil(endDeg) >= this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle) {\n      endDeg = this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle - 0.01;\n    }\n    if (Math.ceil(endDeg) > this.fullAngle) endDeg -= this.fullAngle;\n    const endRadians = Math.PI * (endDeg - 90) / 180;\n    const x1 = me.centerX + size * Math.cos(startRadians);\n    const y1 = me.centerY + size * Math.sin(startRadians);\n    const x2 = me.centerX + size * Math.cos(endRadians);\n    const y2 = me.centerY + size * Math.sin(endRadians);\n    const startInner = Utils$1.polarToCartesian(\n      me.centerX,\n      me.centerY,\n      me.donutSize,\n      endDeg\n    );\n    const endInner = Utils$1.polarToCartesian(\n      me.centerX,\n      me.centerY,\n      me.donutSize,\n      startDeg\n    );\n    const largeArc = angle > 180 ? 1 : 0;\n    const pathBeginning = [\"M\", x1, y1, \"A\", size, size, 0, largeArc, 1, x2, y2];\n    if (me.chartType === \"donut\") {\n      path = [\n        ...pathBeginning,\n        \"L\",\n        startInner.x,\n        startInner.y,\n        \"A\",\n        me.donutSize,\n        me.donutSize,\n        0,\n        largeArc,\n        0,\n        endInner.x,\n        endInner.y,\n        \"L\",\n        x1,\n        y1,\n        \"z\"\n      ].join(\" \");\n    } else if (me.chartType === \"pie\" || me.chartType === \"polarArea\") {\n      path = [...pathBeginning, \"L\", me.centerX, me.centerY, \"L\", x1, y1].join(\n        \" \"\n      );\n    } else {\n      path = [...pathBeginning].join(\" \");\n    }\n    return graphics.roundPathCorners(path, this.strokeWidth * 2);\n  }\n  /**\n   * @param {any} parent\n   */\n  drawPolarElements(parent) {\n    const w = this.w;\n    const scale = new Scales(this.w);\n    const graphics = new Graphics(this.w);\n    const helpers = new CircularChartsHelpers(this.w);\n    const gCircles = graphics.group();\n    const gYAxis = graphics.group();\n    const yScale = scale.niceScale(0, Math.ceil(this.maxY), 0);\n    const yTexts = yScale.result.reverse();\n    const len = yScale.result.length;\n    this.maxY = yScale.niceMax;\n    let circleSize = w.globals.radialSize;\n    const diff = circleSize / (len - 1);\n    for (let i = 0; i < len - 1; i++) {\n      const circle = graphics.drawCircle(circleSize);\n      circle.attr({\n        cx: this.centerX,\n        cy: this.centerY,\n        fill: \"none\",\n        \"stroke-width\": w.config.plotOptions.polarArea.rings.strokeWidth,\n        stroke: w.config.plotOptions.polarArea.rings.strokeColor\n      });\n      if (w.config.yaxis[0].show) {\n        const yLabel = helpers.drawYAxisTexts(\n          this.centerX,\n          this.centerY - circleSize + parseInt(w.config.yaxis[0].labels.style.fontSize, 10) / 2,\n          i,\n          yTexts[i]\n        );\n        gYAxis.add(yLabel);\n      }\n      gCircles.add(circle);\n      circleSize = circleSize - diff;\n    }\n    this.drawSpokes(parent);\n    parent.add(gCircles);\n    parent.add(gYAxis);\n  }\n  /**\n   * @param {any} dataLabelsGroup\n   * @param {Record<string, any>} dataLabelsConfig\n   * @param {Record<string, any>} opts\n   */\n  renderInnerDataLabels(dataLabelsGroup, dataLabelsConfig, opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const showTotal = dataLabelsConfig.total.show;\n    dataLabelsGroup.node.innerHTML = \"\";\n    dataLabelsGroup.node.style.opacity = opts.opacity;\n    const x = opts.centerX;\n    const y = !this.donutDataLabels.total.label ? opts.centerY - opts.centerY / 6 : opts.centerY;\n    let labelColor, valueColor;\n    if (dataLabelsConfig.name.color === void 0) {\n      labelColor = w.globals.colors[0];\n    } else {\n      labelColor = dataLabelsConfig.name.color;\n    }\n    let labelFontSize = dataLabelsConfig.name.fontSize;\n    let labelFontFamily = dataLabelsConfig.name.fontFamily;\n    let labelFontWeight = dataLabelsConfig.name.fontWeight;\n    if (dataLabelsConfig.value.color === void 0) {\n      valueColor = w.config.chart.foreColor;\n    } else {\n      valueColor = dataLabelsConfig.value.color;\n    }\n    const lbFormatter = dataLabelsConfig.value.formatter;\n    let val = \"\";\n    let name2 = \"\";\n    if (showTotal) {\n      labelColor = dataLabelsConfig.total.color;\n      labelFontSize = dataLabelsConfig.total.fontSize;\n      labelFontFamily = dataLabelsConfig.total.fontFamily;\n      labelFontWeight = dataLabelsConfig.total.fontWeight;\n      name2 = !this.donutDataLabels.total.label ? \"\" : dataLabelsConfig.total.label;\n      val = dataLabelsConfig.total.formatter(w);\n    } else {\n      if (w.seriesData.series.length === 1) {\n        val = lbFormatter(w.seriesData.series[0], w);\n        name2 = w.seriesData.seriesNames[0];\n      }\n    }\n    if (name2) {\n      name2 = dataLabelsConfig.name.formatter(\n        name2,\n        dataLabelsConfig.total.show,\n        w\n      );\n    }\n    if (dataLabelsConfig.name.show) {\n      const elLabel = graphics.drawText({\n        x,\n        y: y + parseFloat(dataLabelsConfig.name.offsetY),\n        text: name2,\n        textAnchor: \"middle\",\n        foreColor: labelColor,\n        fontSize: labelFontSize,\n        fontWeight: labelFontWeight,\n        fontFamily: labelFontFamily\n      });\n      elLabel.node.classList.add(\"apexcharts-datalabel-label\");\n      dataLabelsGroup.add(elLabel);\n    }\n    if (dataLabelsConfig.value.show) {\n      const valOffset = dataLabelsConfig.name.show ? parseFloat(dataLabelsConfig.value.offsetY) + 16 : dataLabelsConfig.value.offsetY;\n      const elValue = graphics.drawText({\n        x,\n        y: y + valOffset,\n        text: val,\n        textAnchor: \"middle\",\n        foreColor: valueColor,\n        fontWeight: dataLabelsConfig.value.fontWeight,\n        fontSize: dataLabelsConfig.value.fontSize,\n        fontFamily: dataLabelsConfig.value.fontFamily\n      });\n      elValue.node.classList.add(\"apexcharts-datalabel-value\");\n      dataLabelsGroup.add(elValue);\n    }\n    return dataLabelsGroup;\n  }\n  /**\n   *\n   * @param {string} name - The name of the series\n   * @param {string} val - The value of that series\n   * @param {any} el - Optional el (indicates which series was hovered/clicked). If this param is not present, means we need to show total\n   * @param {Record<string, any>} labelsConfig\n   */\n  printInnerLabels(labelsConfig, name2, val, el) {\n    const w = this.w;\n    let labelColor;\n    if (el) {\n      if (labelsConfig.name.color === void 0) {\n        labelColor = w.globals.colors[parseInt(el.parentNode.getAttribute(\"rel\"), 10) - 1];\n      } else {\n        labelColor = labelsConfig.name.color;\n      }\n    } else {\n      if (w.seriesData.series.length > 1 && labelsConfig.total.show) {\n        labelColor = labelsConfig.total.color;\n      }\n    }\n    const elLabel = w.dom.baseEl.querySelector(\".apexcharts-datalabel-label\");\n    const elValue = w.dom.baseEl.querySelector(\".apexcharts-datalabel-value\");\n    const lbFormatter = labelsConfig.value.formatter;\n    val = lbFormatter(val, w);\n    if (!el && typeof labelsConfig.total.formatter === \"function\") {\n      val = labelsConfig.total.formatter(w);\n    }\n    const isTotal = name2 === labelsConfig.total.label;\n    name2 = !this.donutDataLabels.total.label ? \"\" : labelsConfig.name.formatter(name2, isTotal, w);\n    if (elLabel !== null) {\n      elLabel.textContent = name2;\n    }\n    if (elValue !== null) {\n      elValue.textContent = val;\n    }\n    if (elLabel !== null) {\n      const elLabelEl = (\n        /** @type {HTMLElement} */\n        elLabel\n      );\n      elLabelEl.style.fill = labelColor;\n    }\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} dataLabelsConfig\n   */\n  printDataLabelsInner(el, dataLabelsConfig) {\n    const w = this.w;\n    const val = el.getAttribute(\"data:value\");\n    const name2 = w.seriesData.seriesNames[parseInt(el.parentNode.getAttribute(\"rel\"), 10) - 1];\n    if (w.seriesData.series.length > 1) {\n      this.printInnerLabels(dataLabelsConfig, name2, val, el);\n    }\n    const dataLabelsGroup = w.dom.baseEl.querySelector(\n      \".apexcharts-datalabels-group\"\n    );\n    if (dataLabelsGroup !== null) {\n      const dataLabelsGroupEl = (\n        /** @type {HTMLElement} */\n        dataLabelsGroup\n      );\n      dataLabelsGroupEl.style.opacity = \"1\";\n    }\n  }\n  /**\n   * @param {any} parent\n   */\n  drawSpokes(parent) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const spokeConfig = w.config.plotOptions.polarArea.spokes;\n    if (spokeConfig.strokeWidth === 0) return;\n    const spokes = [];\n    const angleDivision = 360 / w.seriesData.series.length;\n    for (let i = 0; i < w.seriesData.series.length; i++) {\n      spokes.push(\n        Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          w.globals.radialSize,\n          w.config.plotOptions.pie.startAngle + angleDivision * i\n        )\n      );\n    }\n    spokes.forEach((p, i) => {\n      const line = graphics.drawLine(\n        p.x,\n        p.y,\n        this.centerX,\n        this.centerY,\n        Array.isArray(spokeConfig.connectorColors) ? spokeConfig.connectorColors[i] : spokeConfig.connectorColors\n      );\n      parent.add(line);\n    });\n  }\n  revertDataLabelsInner() {\n    const w = this.w;\n    if (this.donutDataLabels.show) {\n      const dataLabelsGroup = w.dom.Paper.findOne(\n        `.apexcharts-datalabels-group`\n      );\n      const dataLabels = this.renderInnerDataLabels(\n        dataLabelsGroup,\n        this.donutDataLabels,\n        {\n          hollowSize: this.donutSize,\n          centerX: this.centerX,\n          centerY: this.centerY,\n          opacity: this.donutDataLabels.show\n        }\n      );\n      const elPie = w.dom.Paper.findOne(\n        \".apexcharts-radialbar, .apexcharts-pie\"\n      );\n      elPie.add(dataLabels);\n    }\n  }\n}\nclass Radar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.chartType = this.w.config.chart.type;\n    this.initialAnim = this.w.config.chart.animations.enabled;\n    this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n    this.animDur = 0;\n    this.graphics = new Graphics(this.w);\n    this.lineColorArr = w.globals.stroke.colors !== void 0 ? w.globals.stroke.colors : w.globals.colors;\n    this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.layout.gridHeight : w.layout.gridWidth;\n    this.isLog = w.config.yaxis[0].logarithmic;\n    this.logBase = w.config.yaxis[0].logBase;\n    this.coreUtils = new CoreUtils(this.w);\n    this.maxValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, w.globals.maxY, 0) : w.globals.maxY;\n    this.minValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, this.w.globals.minY, 0) : w.globals.minY;\n    this.polygons = w.config.plotOptions.radar.polygons;\n    this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0;\n    this.size = this.defaultSize / 2.1 - this.strokeWidth - w.config.chart.dropShadow.blur;\n    if (w.config.xaxis.labels.show) {\n      this.size = this.size - w.layout.xAxisLabelsWidth / 1.75;\n    }\n    if (w.config.plotOptions.radar.size !== void 0) {\n      this.size = w.config.plotOptions.radar.size;\n    }\n    this.dataRadiusOfPercent = /** @type {any} */\n    [];\n    this.dataRadius = /** @type {any} */\n    [];\n    this.angleArr = /** @type {any} */\n    [];\n    this.dataPointsLen = 0;\n    this.disAngle = 0;\n    this.yaxisLabelsTextsPos = [];\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    const w = this.w;\n    const fill = new Fill(this.w);\n    const allSeries = [];\n    const dataLabels = new DataLabels(this.w, this.ctx);\n    if (series.length) {\n      this.dataPointsLen = series[w.globals.maxValsInArrayIndex].length;\n    }\n    this.disAngle = Math.PI * 2 / this.dataPointsLen;\n    const halfW = w.layout.gridWidth / 2;\n    const halfH = w.layout.gridHeight / 2;\n    const translateX = halfW + w.config.plotOptions.radar.offsetX;\n    const translateY = halfH + w.config.plotOptions.radar.offsetY;\n    const ret = this.graphics.group({\n      class: \"apexcharts-radar-series apexcharts-plot-series\",\n      transform: `translate(${translateX || 0}, ${translateY || 0})`\n    });\n    let dataPointsPos = [];\n    let elPointsMain = null;\n    let elDataPointsMain = null;\n    this.yaxisLabels = this.graphics.group({\n      class: \"apexcharts-yaxis\"\n    });\n    series.forEach((s, i) => {\n      const longestSeries = s.length === w.globals.dataPoints;\n      const elSeries = this.graphics.group().attr({\n        class: `apexcharts-series`,\n        \"data:longestSeries\": longestSeries,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      this.dataRadiusOfPercent[i] = [];\n      this.dataRadius[i] = [];\n      this.angleArr[i] = [];\n      s.forEach((dv, j) => {\n        const range = Math.abs(this.maxValue - this.minValue);\n        dv = dv - this.minValue;\n        if (this.isLog) {\n          dv = this.coreUtils.getLogVal(this.logBase, dv, 0);\n        }\n        this.dataRadiusOfPercent[i][j] = dv / range;\n        this.dataRadius[i][j] = this.dataRadiusOfPercent[i][j] * this.size;\n        this.angleArr[i][j] = j * this.disAngle;\n      });\n      dataPointsPos = this.getDataPointsPos(\n        this.dataRadius[i],\n        this.angleArr[i]\n      );\n      const paths = this.createPaths(dataPointsPos, {\n        x: 0,\n        y: 0\n      });\n      elPointsMain = this.graphics.group({\n        class: \"apexcharts-series-markers-wrap apexcharts-element-hidden\"\n      });\n      elDataPointsMain = this.graphics.group({\n        class: `apexcharts-datalabels`,\n        \"data:realIndex\": i\n      });\n      w.globals.delayedElements.push({\n        el: elPointsMain.node,\n        index: i\n      });\n      const defaultRenderedPathOptions = {\n        i,\n        realIndex: i,\n        animationDelay: i,\n        initialSpeed: w.config.chart.animations.speed,\n        dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n        className: `apexcharts-radar`,\n        shouldClipToGrid: false,\n        bindEventsOnPaths: false,\n        stroke: w.globals.stroke.colors[i],\n        strokeLineCap: w.config.stroke.lineCap\n      };\n      let pathFrom = null;\n      if (w.globals.previousPaths.length > 0) {\n        pathFrom = this.getPreviousPath(i);\n      }\n      for (let p = 0; p < paths.linePathsTo.length; p++) {\n        const renderedLinePath = this.graphics.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom,\n          pathTo: paths.linePathsTo[p],\n          strokeWidth: Array.isArray(this.strokeWidth) ? this.strokeWidth[i] : this.strokeWidth,\n          fill: \"none\",\n          drawShadow: false\n        }));\n        elSeries.add(renderedLinePath);\n        const pathFill = fill.fillPath({\n          seriesNumber: i\n        });\n        const renderedAreaPath = this.graphics.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom,\n          pathTo: paths.areaPathsTo[p],\n          strokeWidth: 0,\n          fill: pathFill,\n          drawShadow: false,\n          // Radial mask: the area fill blooms outward from the radar's center\n          // (in this group's local coords) instead of the default L→R rect wipe.\n          drawMask: { type: \"radial\", cx: 0, cy: 0, r: this.size }\n        }));\n        if (w.config.chart.dropShadow.enabled) {\n          const filters = new Filters(this.w);\n          const shadow = w.config.chart.dropShadow;\n          filters.dropShadow(\n            renderedAreaPath,\n            Object.assign({}, shadow, { noUserSpaceOnUse: true }),\n            i\n          );\n        }\n        elSeries.add(renderedAreaPath);\n      }\n      s.forEach((sj, j) => {\n        const markers = new Markers(this.w, this.ctx);\n        const opts = markers.getMarkerConfig({\n          cssClass: \"apexcharts-marker\",\n          seriesIndex: i,\n          dataPointIndex: j\n        });\n        const point = this.graphics.drawMarker(\n          dataPointsPos[j].x,\n          dataPointsPos[j].y,\n          opts\n        );\n        point.attr(\"rel\", j);\n        point.attr(\"j\", j);\n        point.attr(\"index\", i);\n        point.node.setAttribute(\"default-marker-size\", opts.pSize);\n        const elPointsWrap = this.graphics.group({\n          class: \"apexcharts-series-markers\"\n        });\n        if (elPointsWrap) {\n          elPointsWrap.add(point);\n        }\n        elPointsMain.add(elPointsWrap);\n        elSeries.add(elPointsMain);\n        const dataLabelsConfig = w.config.dataLabels;\n        if (dataLabelsConfig.enabled) {\n          const text = dataLabelsConfig.formatter(w.seriesData.series[i][j], {\n            seriesIndex: i,\n            dataPointIndex: j,\n            w\n          });\n          dataLabels.plotDataLabelsText({\n            x: dataPointsPos[j].x,\n            y: dataPointsPos[j].y,\n            text,\n            textAnchor: \"middle\",\n            i,\n            j: i,\n            parent: elDataPointsMain,\n            offsetCorrection: false,\n            dataLabelsConfig: __spreadValues({}, dataLabelsConfig)\n          });\n        }\n        elSeries.add(elDataPointsMain);\n      });\n      allSeries.push(elSeries);\n    });\n    this.drawPolygons({\n      parent: ret\n    });\n    if (w.config.xaxis.labels.show) {\n      const xaxisTexts = this.drawXAxisTexts();\n      ret.add(xaxisTexts);\n    }\n    allSeries.forEach((elS) => {\n      ret.add(elS);\n    });\n    ret.add(this.yaxisLabels);\n    return ret;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawPolygons(opts) {\n    const w = this.w;\n    const { parent } = opts;\n    const helpers = new CircularChartsHelpers(this.w);\n    const yaxisTexts = w.globals.yAxisScale[0].result.reverse();\n    const layers = yaxisTexts.length;\n    const radiusSizes = [];\n    const layerDis = this.size / (layers - 1);\n    for (let i = 0; i < layers; i++) {\n      radiusSizes[i] = layerDis * i;\n    }\n    radiusSizes.reverse();\n    const polygonStrings = [];\n    const lines = [];\n    radiusSizes.forEach((radiusSize, r) => {\n      const polygon = Utils$1.getPolygonPos(radiusSize, this.dataPointsLen);\n      let string = \"\";\n      polygon.forEach((p, i) => {\n        if (r === 0) {\n          const line = this.graphics.drawLine(\n            p.x,\n            p.y,\n            0,\n            0,\n            Array.isArray(this.polygons.connectorColors) ? this.polygons.connectorColors[i] : this.polygons.connectorColors\n          );\n          lines.push(line);\n        }\n        if (i === 0) {\n          this.yaxisLabelsTextsPos.push({\n            x: p.x,\n            y: p.y\n          });\n        }\n        string += p.x + \",\" + p.y + \" \";\n      });\n      polygonStrings.push(string);\n    });\n    polygonStrings.forEach((p, i) => {\n      const strokeColors = this.polygons.strokeColors;\n      const strokeWidth = this.polygons.strokeWidth;\n      const polygon = this.graphics.drawPolygon(\n        p,\n        Array.isArray(strokeColors) ? strokeColors[i] : strokeColors,\n        Array.isArray(strokeWidth) ? strokeWidth[i] : strokeWidth,\n        w.globals.radarPolygons.fill.colors[i]\n      );\n      parent.add(polygon);\n    });\n    lines.forEach((l) => {\n      parent.add(l);\n    });\n    if (w.config.yaxis[0].show) {\n      this.yaxisLabelsTextsPos.forEach(\n        (p, i) => {\n          const yText = helpers.drawYAxisTexts(p.x, p.y, i, yaxisTexts[i]);\n          this.yaxisLabels.add(yText);\n        }\n      );\n    }\n  }\n  drawXAxisTexts() {\n    const w = this.w;\n    const xaxisLabelsConfig = w.config.xaxis.labels;\n    const elXAxisWrap = this.graphics.group({\n      class: \"apexcharts-xaxis\"\n    });\n    const polygonPos = Utils$1.getPolygonPos(this.size, this.dataPointsLen);\n    w.labelData.labels.forEach((label, i) => {\n      const formatter = w.config.xaxis.labels.formatter;\n      const dataLabels = new DataLabels(this.w, this.ctx);\n      if (polygonPos[i]) {\n        const textPos = this.getTextPos(polygonPos[i], this.size);\n        const text = formatter(label, {\n          seriesIndex: -1,\n          dataPointIndex: i,\n          w\n        });\n        const dataLabelText = dataLabels.plotDataLabelsText({\n          x: textPos.newX,\n          y: textPos.newY,\n          text,\n          textAnchor: textPos.textAnchor,\n          i,\n          j: i,\n          parent: elXAxisWrap,\n          className: \"apexcharts-xaxis-label\",\n          color: Array.isArray(xaxisLabelsConfig.style.colors) && xaxisLabelsConfig.style.colors[i] ? xaxisLabelsConfig.style.colors[i] : \"#a8a8a8\",\n          dataLabelsConfig: __spreadValues({\n            textAnchor: textPos.textAnchor,\n            dropShadow: { enabled: false }\n          }, xaxisLabelsConfig),\n          offsetCorrection: false\n        });\n        dataLabelText.on(\"click\", (e) => {\n          if (typeof w.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w, {\n              labelIndex: i\n            });\n            w.config.chart.events.xAxisLabelClick(e, this.ctx, opts);\n          }\n        });\n      }\n    });\n    return elXAxisWrap;\n  }\n  /**\n   * @param {Array<Record<string, any>>} pos\n   * @param {Record<string, any>} origin\n   */\n  createPaths(pos, origin) {\n    const linePathsTo = [];\n    let linePathsFrom = [];\n    const areaPathsTo = [];\n    let areaPathsFrom = [];\n    if (pos.length) {\n      linePathsFrom = [this.graphics.move(origin.x, origin.y)];\n      areaPathsFrom = [this.graphics.move(origin.x, origin.y)];\n      let linePathTo = this.graphics.move(pos[0].x, pos[0].y);\n      let areaPathTo = this.graphics.move(pos[0].x, pos[0].y);\n      pos.forEach((p, i) => {\n        linePathTo += this.graphics.line(p.x, p.y);\n        areaPathTo += this.graphics.line(p.x, p.y);\n        if (i === pos.length - 1) {\n          linePathTo += \"Z\";\n          areaPathTo += \"Z\";\n        }\n      });\n      linePathsTo.push(linePathTo);\n      areaPathsTo.push(areaPathTo);\n    }\n    return {\n      linePathsFrom,\n      linePathsTo,\n      areaPathsFrom,\n      areaPathsTo\n    };\n  }\n  /**\n   * @param {Record<string, any>} pos\n   * @param {number} polygonSize\n   */\n  getTextPos(pos, polygonSize) {\n    const limit = 10;\n    let textAnchor = \"middle\";\n    let newX = pos.x;\n    let newY = pos.y;\n    if (Math.abs(pos.x) >= limit) {\n      if (pos.x > 0) {\n        textAnchor = \"start\";\n        newX += 10;\n      } else if (pos.x < 0) {\n        textAnchor = \"end\";\n        newX -= 10;\n      }\n    } else {\n      textAnchor = \"middle\";\n    }\n    if (Math.abs(pos.y) >= polygonSize - limit) {\n      if (pos.y < 0) {\n        newY -= 10;\n      } else if (pos.y > 0) {\n        newY += 10;\n      }\n    }\n    return {\n      textAnchor,\n      newX,\n      newY\n    };\n  }\n  /**\n   * @param {number} realIndex\n   */\n  getPreviousPath(realIndex) {\n    const w = this.w;\n    let pathFrom = null;\n    for (let pp = 0; pp < w.globals.previousPaths.length; pp++) {\n      const gpp = w.globals.previousPaths[pp];\n      if (gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(String(realIndex), 10)) {\n        if (typeof w.globals.previousPaths[pp].paths[0] !== \"undefined\") {\n          pathFrom = w.globals.previousPaths[pp].paths[0].d;\n        }\n      }\n    }\n    return pathFrom;\n  }\n  /**\n   * @param {any[]} dataRadiusArr\n   * @param {any[]} angleArr\n   */\n  getDataPointsPos(dataRadiusArr, angleArr, dataPointsLen = this.dataPointsLen) {\n    dataRadiusArr = dataRadiusArr || [];\n    angleArr = angleArr || [];\n    const dataPointsPosArray = [];\n    for (let j = 0; j < dataPointsLen; j++) {\n      const curPointPos = {};\n      curPointPos.x = dataRadiusArr[j] * Math.sin(angleArr[j]);\n      curPointPos.y = -dataRadiusArr[j] * Math.cos(angleArr[j]);\n      dataPointsPosArray.push(curPointPos);\n    }\n    return dataPointsPosArray;\n  }\n}\nclass Radial extends Pie {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    super(w, ctx);\n    this.ctx = ctx;\n    this.w = w;\n    this.animBeginArr = [0];\n    this.animDur = 0;\n    this.startAngle = w.config.plotOptions.radialBar.startAngle;\n    this.endAngle = w.config.plotOptions.radialBar.endAngle;\n    this.totalAngle = Math.abs(\n      w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle\n    );\n    this.trackStartAngle = w.config.plotOptions.radialBar.track.startAngle;\n    this.trackEndAngle = w.config.plotOptions.radialBar.track.endAngle;\n    this.barLabels = this.w.config.plotOptions.radialBar.barLabels;\n    this.donutDataLabels = this.w.config.plotOptions.radialBar.dataLabels;\n    this.radialDataLabels = this.donutDataLabels;\n    if (!this.trackStartAngle) this.trackStartAngle = this.startAngle;\n    if (!this.trackEndAngle) this.trackEndAngle = this.endAngle;\n    if (this.endAngle === 360) this.endAngle = 359.99;\n    this.margin = parseInt(w.config.plotOptions.radialBar.track.margin, 10);\n    this.onBarLabelClick = this.onBarLabelClick.bind(this);\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const ret = graphics.group({\n      class: \"apexcharts-radialbar\"\n    });\n    if (w.globals.noData) return ret;\n    const elSeries = graphics.group();\n    const centerY = this.defaultSize / 2;\n    const centerX = w.layout.gridWidth / 2;\n    let size = this.defaultSize / 2.05;\n    if (!w.config.chart.sparkline.enabled) {\n      size = size - w.config.stroke.width - w.config.chart.dropShadow.blur;\n    }\n    const colorArr = w.globals.fill.colors;\n    const rb = w.config.plotOptions.radialBar;\n    const hasBands = Array.isArray(rb.bands) && rb.bands.length > 0;\n    const hideTrack = hasBands && rb.bandsStyle && rb.bandsStyle.hideTrackWhenPresent;\n    const isNeedleShape = rb.shape === \"needle\";\n    if (rb.track.show && !hideTrack) {\n      const elTracks = this.drawTracks({\n        size,\n        centerX,\n        centerY,\n        colorArr,\n        series\n      });\n      elSeries.add(elTracks);\n    }\n    if (hasBands) {\n      const elBands = this.drawBands({\n        size,\n        centerX,\n        centerY,\n        series\n      });\n      elSeries.add(elBands);\n    }\n    const elG = this.drawArcs({\n      size,\n      centerX,\n      centerY,\n      colorArr,\n      series,\n      // When `needle.showValueArc` is true, render both the filled value-arc\n      // and the needle on top — required for gauges that want a progress\n      // ring with a pointer indicator (default still hides the arc when in\n      // needle shape, preserving prior behavior).\n      skipValueArc: isNeedleShape && !((_a = rb.needle) == null ? void 0 : _a.showValueArc)\n    });\n    if (rb.ticks && rb.ticks.show) {\n      const elTicks = this.drawTicks({\n        size,\n        centerX,\n        centerY,\n        series\n      });\n      const isInitialMount = this.initialAnim && !w.globals.dataChanged && !w.globals.resized;\n      if (isInitialMount && Environment.isBrowser() && w.globals.shouldAnimate) {\n        const ticksNode = elTicks.node;\n        ticksNode.style.opacity = \"0\";\n        ticksNode.style.transition = \"opacity 280ms ease-out\";\n        const sweepDur = w.config.chart.animations.speed || 800;\n        setTimeout(() => {\n          ticksNode.style.opacity = \"1\";\n        }, sweepDur);\n      }\n      elSeries.add(elTicks);\n    }\n    if (isNeedleShape) {\n      const elNeedle = this.drawNeedle({\n        size,\n        centerX,\n        centerY,\n        series\n      });\n      elSeries.add(elNeedle);\n    }\n    let totalAngle = 360;\n    if (w.config.plotOptions.radialBar.startAngle < 0) {\n      totalAngle = this.totalAngle;\n    }\n    const angleRatio = (360 - totalAngle) / 360;\n    w.globals.radialSize = size - size * angleRatio;\n    if (this.radialDataLabels.value.show) {\n      const offset = Math.max(\n        this.radialDataLabels.value.offsetY,\n        this.radialDataLabels.name.offsetY\n      );\n      w.globals.radialSize += offset * angleRatio;\n    }\n    elSeries.add(elG.g);\n    if (w.config.plotOptions.radialBar.hollow.position === \"front\") {\n      elG.g.add(elG.elHollow);\n      if (elG.dataLabels) {\n        elG.g.add(elG.dataLabels);\n      }\n    }\n    ret.add(elSeries);\n    return ret;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawTracks(opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const g = graphics.group({\n      class: \"apexcharts-tracks\"\n    });\n    const filters = new Filters(this.w);\n    const fill = new Fill(this.w);\n    const strokeWidth = this.getStrokeWidth(opts);\n    opts.size = opts.size - strokeWidth / 2;\n    for (let i = 0; i < opts.series.length; i++) {\n      const elRadialBarTrack = graphics.group({\n        class: \"apexcharts-radialbar-track apexcharts-track\"\n      });\n      g.add(elRadialBarTrack);\n      elRadialBarTrack.attr({\n        rel: i + 1\n      });\n      opts.size = opts.size - strokeWidth - this.margin;\n      const trackConfig = w.config.plotOptions.radialBar.track;\n      const pathFill = fill.fillPath({\n        seriesNumber: 0,\n        size: opts.size,\n        fillColors: Array.isArray(trackConfig.background) ? trackConfig.background[i] : trackConfig.background,\n        solid: true\n      });\n      const startAngle = this.trackStartAngle;\n      let endAngle = this.trackEndAngle;\n      if (Math.abs(endAngle) + Math.abs(startAngle) >= 360)\n        endAngle = 360 - Math.abs(this.startAngle) - 0.1;\n      const elPath = graphics.drawPath({\n        d: \"\",\n        stroke: pathFill,\n        strokeWidth: strokeWidth * parseInt(trackConfig.strokeWidth, 10) / 100,\n        fill: \"none\",\n        strokeOpacity: trackConfig.opacity,\n        classes: \"apexcharts-radialbar-area\"\n      });\n      if (trackConfig.dropShadow.enabled) {\n        const shadow = trackConfig.dropShadow;\n        filters.dropShadow(elPath, shadow);\n      }\n      elRadialBarTrack.add(elPath);\n      elPath.attr(\"id\", \"apexcharts-radialbarTrack-\" + i);\n      this.animatePaths(elPath, {\n        centerX: opts.centerX,\n        centerY: opts.centerY,\n        endAngle,\n        startAngle,\n        size: opts.size,\n        i,\n        totalItems: 2,\n        animBeginArr: 0,\n        dur: 0,\n        isTrack: true\n      });\n    }\n    return g;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawArcs(opts) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    const filters = new Filters(this.w);\n    const g = graphics.group();\n    const strokeWidth = this.getStrokeWidth(opts);\n    opts.size = opts.size - strokeWidth / 2;\n    let hollowFillID = w.config.plotOptions.radialBar.hollow.background;\n    const hollowSize = opts.size - strokeWidth * opts.series.length - this.margin * opts.series.length - strokeWidth * parseInt(w.config.plotOptions.radialBar.track.strokeWidth, 10) / 100 / 2;\n    const hollowRadius = hollowSize - w.config.plotOptions.radialBar.hollow.margin;\n    if (w.config.plotOptions.radialBar.hollow.image !== void 0) {\n      hollowFillID = this.drawHollowImage(opts, g, hollowSize, hollowFillID);\n    }\n    const elHollow = this.drawHollow({\n      size: hollowRadius,\n      centerX: opts.centerX,\n      centerY: opts.centerY,\n      fill: hollowFillID ? hollowFillID : \"transparent\"\n    });\n    if (w.config.plotOptions.radialBar.hollow.dropShadow.enabled) {\n      const shadow = w.config.plotOptions.radialBar.hollow.dropShadow;\n      filters.dropShadow(elHollow, shadow);\n    }\n    let shown = 1;\n    if (!this.radialDataLabels.total.show && w.seriesData.series.length > 1) {\n      shown = 0;\n    }\n    let dataLabels = null;\n    if (this.radialDataLabels.show) {\n      const dataLabelsGroup = w.dom.Paper.findOne(\n        `.apexcharts-datalabels-group`\n      );\n      dataLabels = this.renderInnerDataLabels(\n        dataLabelsGroup,\n        this.radialDataLabels,\n        {\n          hollowSize,\n          centerX: opts.centerX,\n          centerY: opts.centerY,\n          opacity: shown\n        }\n      );\n    }\n    if (w.config.plotOptions.radialBar.hollow.position === \"back\") {\n      g.add(elHollow);\n      if (dataLabels) {\n        g.add(dataLabels);\n      }\n    }\n    let reverseLoop = false;\n    if (w.config.plotOptions.radialBar.inverseOrder) {\n      reverseLoop = true;\n    }\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    for (let i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) {\n      const elRadialBarArc = graphics.group({\n        class: `apexcharts-series apexcharts-radial-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i])\n      });\n      g.add(elRadialBarArc);\n      elRadialBarArc.attr({\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      Series.addCollapsedClassToSeries(this.w, elRadialBarArc, i);\n      opts.size = opts.size - strokeWidth - this.margin;\n      const pathFill = fill.fillPath({\n        seriesNumber: i,\n        size: opts.size,\n        value: opts.series[i]\n      });\n      const startAngle = this.startAngle;\n      let prevStartAngle;\n      const rb = w.config.plotOptions.radialBar;\n      const domainMin = typeof rb.min === \"number\" ? rb.min : 0;\n      const domainMax = typeof rb.max === \"number\" ? rb.max : 100;\n      const domainSpan = domainMax === domainMin ? 1 : domainMax - domainMin;\n      const valueToFraction = (v) => {\n        const clamped = Math.min(Math.max(v, domainMin), domainMax);\n        return Math.max(0, (clamped - domainMin) / domainSpan);\n      };\n      const dataValue = valueToFraction(Utils$1.negToZero(opts.series[i]));\n      let endAngle = Math.round(this.totalAngle * dataValue) + this.startAngle;\n      let prevEndAngle;\n      if (w.globals.dataChanged) {\n        prevStartAngle = this.startAngle;\n        prevEndAngle = Math.round(\n          this.totalAngle * valueToFraction(Utils$1.negToZero(w.globals.previousPaths[i]))\n        ) + prevStartAngle;\n      }\n      const currFullAngle = Math.abs(endAngle) + Math.abs(startAngle);\n      if (currFullAngle > 360) {\n        endAngle = endAngle - 0.01;\n      }\n      const prevFullAngle = Math.abs(prevEndAngle) + Math.abs(prevStartAngle);\n      if (prevFullAngle > 360) {\n        prevEndAngle = prevEndAngle - 0.01;\n      }\n      const angle = endAngle - startAngle;\n      const dashArray = Array.isArray(w.config.stroke.dashArray) ? w.config.stroke.dashArray[i] : w.config.stroke.dashArray;\n      const morphFrom = morphActive ? this.ctx.morphTypeChange.getInitialPathFor(i, 0) : null;\n      const morphFromType = morphActive ? this.ctx.morphTypeChange.getFromType() : null;\n      const morphFromFilled = !!morphFrom && (morphFromType === \"bar\" || morphFromType === \"funnel\" || morphFromType === \"pyramid\" || morphFromType === \"pie\" || morphFromType === \"donut\" || morphFromType === \"polarArea\");\n      const elPath = graphics.drawPath({\n        d: morphFrom || \"\",\n        stroke: morphFromFilled ? \"transparent\" : opts.skipValueArc ? \"transparent\" : pathFill,\n        strokeWidth: morphFromFilled ? 0 : opts.skipValueArc ? 0 : strokeWidth,\n        fill: morphFromFilled ? pathFill : \"none\",\n        fillOpacity: w.config.fill.opacity,\n        classes: \"apexcharts-radialbar-area apexcharts-radialbar-slice-\" + i,\n        strokeDashArray: dashArray\n      });\n      const radialMidAngle = startAngle + angle / 2;\n      const radialArcCenter = Utils$1.polarToCartesian(\n        opts.centerX,\n        opts.centerY,\n        opts.size,\n        radialMidAngle\n      );\n      Graphics.setAttrs(elPath.node, {\n        \"data:angle\": angle,\n        \"data:value\": opts.series[i],\n        \"data:cx\": radialArcCenter.x,\n        \"data:cy\": radialArcCenter.y\n      });\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        filters.dropShadow(elPath, shadow, i);\n      }\n      filters.setSelectionFilter(elPath, 0, i);\n      this.addListeners(elPath, this.radialDataLabels);\n      elRadialBarArc.add(elPath);\n      elPath.attr({\n        index: 0,\n        j: i\n      });\n      if (this.barLabels.enabled) {\n        const barStartCords = Utils$1.polarToCartesian(\n          opts.centerX,\n          opts.centerY,\n          opts.size,\n          startAngle\n        );\n        const text = this.barLabels.formatter(w.seriesData.seriesNames[i], {\n          seriesIndex: i,\n          w\n        });\n        const classes = [\"apexcharts-radialbar-label\"];\n        if (!this.barLabels.onClick) {\n          classes.push(\"apexcharts-no-click\");\n        }\n        let textColor = this.barLabels.useSeriesColors ? w.globals.colors[i] : w.config.chart.foreColor;\n        if (!textColor) {\n          textColor = w.config.chart.foreColor;\n        }\n        const x = barStartCords.x + this.barLabels.offsetX;\n        const y = barStartCords.y + this.barLabels.offsetY;\n        const elText = graphics.drawText({\n          x,\n          y,\n          text,\n          textAnchor: \"end\",\n          dominantBaseline: \"middle\",\n          fontFamily: this.barLabels.fontFamily,\n          fontWeight: this.barLabels.fontWeight,\n          fontSize: this.barLabels.fontSize,\n          foreColor: textColor,\n          cssClass: classes.join(\" \")\n        });\n        elText.on(\"click\", this.onBarLabelClick);\n        elText.attr({\n          rel: i + 1\n        });\n        if (startAngle !== 0) {\n          elText.attr({\n            \"transform-origin\": `${x} ${y}`,\n            transform: `rotate(${startAngle} 0 0)`\n          });\n        }\n        elRadialBarArc.add(elText);\n      }\n      let dur = 0;\n      if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n        dur = w.config.chart.animations.speed;\n      }\n      if (w.globals.dataChanged) {\n        dur = w.config.chart.animations.dynamicAnimation.speed;\n      }\n      this.animDur = dur / (opts.series.length * 1.2) + this.animDur;\n      this.animBeginArr.push(this.animDur);\n      if (morphActive && morphFrom) {\n        const morphSpeed = this.ctx.morphTypeChange.getSpeed();\n        const actualArcD = this.getPiePath({\n          me: this,\n          startAngle,\n          angle,\n          size: opts.size\n        });\n        if (morphFromFilled) {\n          const targetD = this.ctx.morphTypeChange.buildRingSegmentPath(\n            opts.centerX,\n            opts.centerY,\n            opts.size,\n            strokeWidth,\n            startAngle,\n            startAngle + angle\n          );\n          elPath.animate(morphSpeed).plot(targetD, \"polygons\").after(\n            /** @this {any} */\n            function() {\n              this.attr({\n                d: actualArcD,\n                fill: \"none\",\n                stroke: opts.skipValueArc ? \"transparent\" : pathFill,\n                \"stroke-width\": opts.skipValueArc ? 0 : strokeWidth\n              });\n            }\n          );\n        } else {\n          elPath.animate(morphSpeed).plot(actualArcD, \"polygons\").attr({ \"stroke-width\": strokeWidth });\n        }\n      } else {\n        this.animatePaths(elPath, {\n          centerX: opts.centerX,\n          centerY: opts.centerY,\n          endAngle,\n          startAngle,\n          prevEndAngle,\n          prevStartAngle,\n          size: opts.size,\n          i,\n          totalItems: 2,\n          animBeginArr: this.animBeginArr,\n          dur,\n          shouldSetPrevPaths: true\n        });\n      }\n    }\n    return {\n      g,\n      elHollow,\n      dataLabels\n    };\n  }\n  /**\n   * Map a domain value (between `min` and `max`) to the corresponding angle\n   * in the gauge's `startAngle`..`endAngle` range. Values outside the\n   * domain are clamped.\n   *\n   * @param {number} value\n   * @returns {number}\n   */\n  _angleAtValue(value) {\n    const rb = this.w.config.plotOptions.radialBar;\n    const min = typeof rb.min === \"number\" ? rb.min : 0;\n    const max = typeof rb.max === \"number\" ? rb.max : 100;\n    const safeMax = max === min ? min + 1 : max;\n    const clamped = Math.max(min, Math.min(safeMax, Number(value)));\n    const t = (clamped - min) / (safeMax - min);\n    return this.startAngle + t * (this.endAngle - this.startAngle);\n  }\n  /**\n   * Build an SVG arc path from `startAngle` to `endAngle` at radius `r`\n   * around `(cx, cy)`. Angles are in degrees, with 0° at the top.\n   * Used by drawBands; mirrors the `M ... A ... ` form used elsewhere.\n   *\n   * @param {number} cx\n   * @param {number} cy\n   * @param {number} r\n   * @param {number} startAngle\n   * @param {number} endAngle\n   * @returns {string}\n   */\n  _describeArc(cx, cy, r, startAngle, endAngle) {\n    const start = Utils$1.polarToCartesian(cx, cy, r, endAngle);\n    const end = Utils$1.polarToCartesian(cx, cy, r, startAngle);\n    const sweep = endAngle - startAngle;\n    const largeArc = Math.abs(sweep) > 180 ? 1 : 0;\n    return `M ${start.x} ${start.y} A ${r} ${r} 0 ${largeArc} 0 ${end.x} ${end.y}`;\n  }\n  /**\n   * Draw threshold bands as colored arc segments along the gauge arc.\n   * Bands sit behind the value-arc and tick marks. Used for gauges that\n   * indicate ranges like 0-30 critical / 30-70 warning / 70-100 healthy.\n   *\n   * @param {Record<string, any>} opts\n   */\n  drawBands(opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w.config.plotOptions.radialBar;\n    const bands = rb.bands || [];\n    const g = graphics.group({\n      class: \"apexcharts-gauge-bands\"\n    });\n    const strokeWidth = this.getStrokeWidth(opts);\n    const radius = opts.size - strokeWidth / 2 - strokeWidth - this.margin;\n    const bandStroke = strokeWidth * parseInt(rb.bandsStyle.strokeWidth, 10) / 100;\n    const min = typeof rb.min === \"number\" ? rb.min : 0;\n    const max = typeof rb.max === \"number\" ? rb.max : 100;\n    const gapDeg = max === min ? 0 : (rb.bandsStyle.gap || 0) * ((this.endAngle - this.startAngle) / (max - min));\n    for (let b = 0; b < bands.length; b++) {\n      const band = bands[b];\n      if (band.from === void 0 || band.to === void 0) continue;\n      const a1 = this._angleAtValue(band.from);\n      const a2 = this._angleAtValue(band.to);\n      const startA = Math.min(a1, a2) + gapDeg / 2;\n      const endA = Math.max(a1, a2) - gapDeg / 2;\n      if (endA - startA <= 0) continue;\n      const elBand = graphics.drawPath({\n        d: this._describeArc(opts.centerX, opts.centerY, radius, startA, endA),\n        stroke: band.color || \"#ccc\",\n        strokeWidth: bandStroke,\n        fill: \"none\",\n        strokeLinecap: rb.bandsStyle.linecap || \"butt\",\n        classes: \"apexcharts-gauge-band\"\n      });\n      elBand.node.setAttribute(\"data-band-index\", String(b));\n      g.add(elBand);\n    }\n    return g;\n  }\n  /**\n   * Draw tick marks (major + minor) along the gauge arc, with optional\n   * value labels at each major tick.\n   *\n   * @param {Record<string, any>} opts\n   */\n  drawTicks(opts) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w.config.plotOptions.radialBar;\n    const ticks = rb.ticks;\n    const g = graphics.group({ class: \"apexcharts-gauge-ticks\" });\n    const strokeWidth = this.getStrokeWidth(opts);\n    const radius = opts.size - strokeWidth / 2 - strokeWidth - this.margin;\n    const min = typeof rb.min === \"number\" ? rb.min : 0;\n    const max = typeof rb.max === \"number\" ? rb.max : 100;\n    const majorCount = Math.max(2, (_b = (_a = ticks.major) == null ? void 0 : _a.count) != null ? _b : 11);\n    const minorCount = Math.max(0, (_d = (_c = ticks.minor) == null ? void 0 : _c.count) != null ? _d : 0);\n    const drawTickAt = (value, cfg, isMajor) => {\n      var _a2, _b2, _c2;\n      const angle = this._angleAtValue(value);\n      const length = (_a2 = cfg.length) != null ? _a2 : 8;\n      const inner = cfg.placement === \"inside\" ? radius - length : radius;\n      const outer = cfg.placement === \"inside\" ? radius : radius + length;\n      const p1 = Utils$1.polarToCartesian(\n        opts.centerX,\n        opts.centerY,\n        inner,\n        angle\n      );\n      const p2 = Utils$1.polarToCartesian(\n        opts.centerX,\n        opts.centerY,\n        outer,\n        angle\n      );\n      const line = graphics.drawLine(\n        p1.x,\n        p1.y,\n        p2.x,\n        p2.y,\n        cfg.color || (isMajor ? \"#666\" : \"#999\"),\n        0,\n        cfg.width || (isMajor ? 2 : 1)\n      );\n      g.add(line);\n      if (isMajor && ((_b2 = ticks.labels) == null ? void 0 : _b2.show)) {\n        const labelRadius = (cfg.placement === \"inside\" ? inner : outer) + (cfg.placement === \"inside\" ? -1 : 1) * ((_c2 = ticks.labels.offset) != null ? _c2 : 6);\n        const labelPos = Utils$1.polarToCartesian(\n          opts.centerX,\n          opts.centerY,\n          labelRadius,\n          angle\n        );\n        const labelText = typeof ticks.labels.formatter === \"function\" ? ticks.labels.formatter(value) : String(value);\n        const elText = graphics.drawText({\n          x: labelPos.x,\n          y: labelPos.y,\n          text: labelText,\n          textAnchor: \"middle\",\n          dominantBaseline: \"middle\",\n          fontFamily: ticks.labels.fontFamily,\n          fontSize: ticks.labels.fontSize,\n          fontWeight: ticks.labels.fontWeight,\n          foreColor: ticks.labels.color,\n          cssClass: \"apexcharts-gauge-tick-label\"\n        });\n        g.add(elText);\n      }\n    };\n    for (let m = 0; m < majorCount; m++) {\n      const t = m / (majorCount - 1);\n      const value = min + t * (max - min);\n      drawTickAt(value, ticks.major || {}, true);\n      if (m < majorCount - 1 && minorCount > 0) {\n        for (let n = 1; n <= minorCount; n++) {\n          const tMinor = (m + n / (minorCount + 1)) / (majorCount - 1);\n          const minorValue = min + tMinor * (max - min);\n          drawTickAt(minorValue, ticks.minor || {}, false);\n        }\n      }\n    }\n    return g;\n  }\n  /**\n   * Draw a rotating needle pointing at the current series value. Only\n   * called when `plotOptions.radialBar.shape === 'needle'`. The needle is\n   * a tapered polygon inside a `<g>` whose rotation transform is animated\n   * from `startAngle` to the value's angle.\n   *\n   * Renders a single needle for the first series value (gauge use case).\n   * Additional series are ignored — drilled-down multi-series gauges are\n   * out of scope for this iteration.\n   *\n   * @param {Record<string, any>} opts\n   */\n  drawNeedle(opts) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w.config.plotOptions.radialBar;\n    const cfg = rb.needle || {};\n    const g = graphics.group({ class: \"apexcharts-gauge-needle\" });\n    if (!opts.series || opts.series.length === 0) return g;\n    const strokeWidth = this.getStrokeWidth(opts);\n    const arcRadius = opts.size - strokeWidth / 2 - strokeWidth - this.margin;\n    const length = typeof cfg.length === \"string\" && cfg.length.endsWith(\"%\") ? arcRadius * parseInt(cfg.length, 10) / 100 : Number(cfg.length || arcRadius * 0.85);\n    const baseW = (_a = cfg.baseWidth) != null ? _a : 4;\n    const tipW = (_b = cfg.tipWidth) != null ? _b : 1;\n    const color = cfg.color || \"#333\";\n    const cx = opts.centerX;\n    const needleOffsetY = Number((_c = cfg.offsetY) != null ? _c : 0);\n    const cy = opts.centerY + needleOffsetY;\n    const path = `M ${cx + baseW / 2} ${cy} A ${baseW / 2} ${baseW / 2} 0 0 1 ${cx - baseW / 2} ${cy} L ${cx - tipW / 2} ${cy - length} L ${cx + tipW / 2} ${cy - length} Z`;\n    const elNeedle = graphics.drawPath({\n      d: path,\n      stroke: color,\n      strokeWidth: 0,\n      fill: color,\n      classes: \"apexcharts-gauge-needle-shape\"\n    });\n    g.add(elNeedle);\n    const value = Number(opts.series[0]);\n    const targetAngle = this._angleAtValue(value);\n    const isInitialMount = this.initialAnim && !w.globals.dataChanged && !w.globals.resized;\n    const ctx = (\n      /** @type {any} */\n      this.ctx\n    );\n    const fromAngle = typeof ctx._lastNeedleAngle === \"number\" ? ctx._lastNeedleAngle : this.startAngle;\n    ctx._lastNeedleAngle = targetAngle;\n    const shouldAnimate = Environment.isBrowser() && w.globals.shouldAnimate && (isInitialMount || w.globals.dataChanged);\n    if (shouldAnimate && fromAngle !== targetAngle) {\n      const node = g.node;\n      node.setAttribute(\"transform-origin\", `${cx} ${cy}`);\n      node.setAttribute(\"transform\", `rotate(${fromAngle})`);\n      const speed = ((_d = cfg.animation) == null ? void 0 : _d.duration) && Number(cfg.animation.duration) || cfg.animationSpeed && Number(cfg.animationSpeed) || ((_e = w.config.chart.animations.dynamicAnimation) == null ? void 0 : _e.speed) || w.config.chart.animations.speed || 800;\n      const c1 = 1.70158;\n      const c3 = c1 + 1;\n      const easeOutBack2 = (t) => 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n      const easeOutCubic2 = (t) => 1 - Math.pow(1 - t, 3);\n      const ease = isInitialMount ? easeOutBack2 : easeOutCubic2;\n      const startAt = performance.now();\n      const step = (now) => {\n        const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n        const angle = fromAngle + (targetAngle - fromAngle) * ease(t);\n        node.setAttribute(\"transform\", `rotate(${angle})`);\n        if (t < 1) BrowserAPIs.requestAnimationFrame(step);\n      };\n      BrowserAPIs.requestAnimationFrame(step);\n    } else {\n      g.attr({\n        \"transform-origin\": `${cx} ${cy}`,\n        transform: `rotate(${targetAngle})`\n      });\n    }\n    return g;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawHollow(opts) {\n    var _a;\n    const graphics = new Graphics(this.w);\n    const hollow = this.w.config.plotOptions.radialBar.hollow;\n    const circle = graphics.drawCircle(opts.size * 2);\n    const attrs = {\n      class: \"apexcharts-radialbar-hollow\",\n      cx: opts.centerX,\n      cy: opts.centerY,\n      r: opts.size,\n      fill: opts.fill\n    };\n    if (hollow.stroke || hollow.strokeDasharray) {\n      attrs.stroke = hollow.stroke || \"transparent\";\n      attrs[\"stroke-width\"] = (_a = hollow.strokeWidth) != null ? _a : 1;\n      if (hollow.strokeDasharray) {\n        attrs[\"stroke-dasharray\"] = hollow.strokeDasharray;\n      }\n    }\n    circle.attr(attrs);\n    return circle;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   * @param {any} g\n   * @param {number} hollowSize\n   * @param {string} hollowFillID\n   */\n  drawHollowImage(opts, g, hollowSize, hollowFillID) {\n    const w = this.w;\n    const fill = new Fill(this.w);\n    const randID = Utils$1.randomId();\n    const hollowFillImg = w.config.plotOptions.radialBar.hollow.image;\n    if (w.config.plotOptions.radialBar.hollow.imageClipped) {\n      fill.clippedImgArea({\n        width: hollowSize,\n        height: hollowSize,\n        image: hollowFillImg,\n        patternID: `pattern${w.globals.cuid}${randID}`\n      });\n      hollowFillID = `url(#pattern${w.globals.cuid}${randID})`;\n    } else {\n      const imgWidth = w.config.plotOptions.radialBar.hollow.imageWidth;\n      const imgHeight = w.config.plotOptions.radialBar.hollow.imageHeight;\n      if (imgWidth === void 0 && imgHeight === void 0) {\n        const image = w.dom.Paper.image(\n          hollowFillImg,\n          /** @this {any} */\n          function(loader) {\n            this.move(\n              opts.centerX - loader.width / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX,\n              opts.centerY - loader.height / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY\n            );\n          }\n        );\n        g.add(image);\n      } else {\n        const image = w.dom.Paper.image(\n          hollowFillImg,\n          /** @this {any} */\n          function() {\n            this.move(\n              opts.centerX - imgWidth / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX,\n              opts.centerY - imgHeight / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY\n            );\n            this.size(imgWidth, imgHeight);\n          }\n        );\n        g.add(image);\n      }\n    }\n    return hollowFillID;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  getStrokeWidth(opts) {\n    const w = this.w;\n    return opts.size * (100 - parseInt(w.config.plotOptions.radialBar.hollow.size, 10)) / 100 / (opts.series.length + 1) - this.margin;\n  }\n  /**\n   * @param {Event} e\n   */\n  onBarLabelClick(e) {\n    var _a;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    const seriesIndex = parseInt((_a = target.getAttribute(\"rel\")) != null ? _a : \"\", 10) - 1;\n    const legendClick = this.barLabels.onClick;\n    const w = this.w;\n    if (legendClick) {\n      legendClick(w.seriesData.seriesNames[seriesIndex], { w, seriesIndex });\n    }\n  }\n}\nclass RangeBar extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {number} seriesIndex\n   */\n  draw(series, seriesIndex) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    this.rangeBarOptions = this.w.config.plotOptions.rangeBar;\n    this.series = series;\n    this.seriesRangeStart = w.rangeData.seriesRangeStart;\n    this.seriesRangeEnd = w.rangeData.seriesRangeEnd;\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: \"apexcharts-rangebar-series apexcharts-plot-series\"\n    });\n    for (let i = 0; i < series.length; i++) {\n      let x, y;\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        zeroW,\n        // zeroW is the baseline where 0 meets x axis\n        x: initX,\n        zeroH\n        // zeroH is the baseline where 0 meets y axis\n      } = initPositions;\n      let barWidth = (_a = initPositions.barWidth) != null ? _a : 0;\n      let barHeight = (_b = initPositions.barHeight) != null ? _b : 0;\n      const yDivision = (_c = initPositions.yDivision) != null ? _c : 0;\n      const xDivision = (_d = initPositions.xDivision) != null ? _d : 0;\n      y = initY;\n      x = initX;\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      const elGoalsMarkers = graphics.group({\n        class: \"apexcharts-rangebar-goals-markers\"\n      });\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        const y1 = this.seriesRangeStart[i][j];\n        const y2 = this.seriesRangeEnd[i][j];\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        let barXPosition = null;\n        let barYPosition = null;\n        const params = { x, y, strokeWidth, elSeries };\n        let seriesLen = this.seriesLen;\n        if (w.config.plotOptions.bar.rangeBarGroupRows) {\n          seriesLen = 1;\n        }\n        if (typeof /** @type {Record<string,any>} */\n        ((_e = w.config.series[i].data) == null ? void 0 : _e[j]) === \"undefined\") {\n          break;\n        }\n        if (this.isHorizontal) {\n          barYPosition = y + barHeight * /** @type {any} */\n          this.visibleI;\n          const srty = (yDivision - barHeight * seriesLen) / 2;\n          if (\n            /** @type {Record<string,any>} */\n            (_g = (_f = w.config.series[i].data) == null ? void 0 : _f[j]) == null ? void 0 : _g.x\n          ) {\n            const positions = this.detectOverlappingBars({\n              i,\n              j,\n              barYPosition,\n              srty,\n              barHeight,\n              yDivision,\n              initPositions\n            });\n            barHeight = positions.barHeight;\n            barYPosition = positions.barYPosition;\n          }\n          paths = this.drawRangeBarPaths(__spreadValues({\n            indexes: { i, j, realIndex },\n            barHeight,\n            barYPosition,\n            zeroW,\n            yDivision,\n            y1,\n            y2\n          }, params));\n          barWidth = paths.barWidth;\n        } else {\n          if (w.axisFlags.isXNumeric) {\n            x = (w.seriesData.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n          }\n          barXPosition = x + barWidth * /** @type {any} */\n          this.visibleI;\n          const srtx = (xDivision - barWidth * seriesLen) / 2;\n          if (\n            /** @type {Record<string,any>} */\n            (_i = (_h = w.config.series[i].data) == null ? void 0 : _h[j]) == null ? void 0 : _i.x\n          ) {\n            const positions = this.detectOverlappingBars({\n              i,\n              j,\n              barXPosition,\n              srtx,\n              barWidth,\n              xDivision,\n              initPositions\n            });\n            barWidth = positions.barWidth;\n            barXPosition = positions.barXPosition;\n          }\n          paths = this.drawRangeColumnPaths(__spreadValues({\n            indexes: { i, j, realIndex, translationsIndex },\n            barWidth,\n            barXPosition,\n            zeroH,\n            xDivision\n          }, params));\n          barHeight = paths.barHeight;\n        }\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        y = paths.y;\n        x = paths.x;\n        const pathFill = this.barHelpers.getPathFillColor(\n          series,\n          i,\n          j,\n          realIndex\n        );\n        this.renderSeries({\n          realIndex,\n          pathFill: pathFill.color,\n          lineFill: pathFill.useRangeColor ? pathFill.color : w.globals.stroke.colors[realIndex],\n          j,\n          i,\n          x,\n          y,\n          y1,\n          y2,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          series,\n          barHeight,\n          barWidth,\n          barXPosition,\n          barYPosition,\n          columnGroupIndex,\n          elDataLabelsWrap,\n          elGoalsMarkers,\n          visibleSeries: this.visibleI,\n          type: \"rangebar\"\n        });\n      }\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{ i?: any, j?: any, barYPosition?: any, barXPosition?: any, srty?: any, srtx?: any, barHeight?: any, barWidth?: any, yDivision?: any, xDivision?: any, initPositions?: any }} opts */\n  detectOverlappingBars({\n    i,\n    j,\n    barYPosition,\n    barXPosition,\n    srty,\n    srtx,\n    barHeight,\n    barWidth,\n    yDivision,\n    xDivision,\n    initPositions\n  }) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    let overlaps = [];\n    const rangeName = (\n      /** @type {Record<string,any>} */\n      (_b = (_a = w.config.series[i].data) == null ? void 0 : _a[j]) == null ? void 0 : _b.rangeName\n    );\n    const x = (\n      /** @type {Record<string,any>} */\n      (_d = (_c = w.config.series[i].data) == null ? void 0 : _c[j]) == null ? void 0 : _d.x\n    );\n    const labelX = Array.isArray(x) ? x.join(\" \") : x;\n    const rowIndex = w.labelData.labels.map((_) => Array.isArray(_) ? _.join(\" \") : _).indexOf(labelX);\n    const overlappedIndex = w.rangeData.seriesRange[i].findIndex(\n      (tx) => {\n        var _a2;\n        return tx.x === labelX && ((_a2 = tx.overlaps) == null ? void 0 : _a2.size) > 0;\n      }\n    );\n    if (this.isHorizontal) {\n      if (w.config.plotOptions.bar.rangeBarGroupRows) {\n        barYPosition = srty + yDivision * rowIndex;\n      } else {\n        barYPosition = srty + barHeight * this.visibleI + yDivision * rowIndex;\n      }\n      if (overlappedIndex > -1 && !w.config.plotOptions.bar.rangeBarOverlap) {\n        overlaps = Array.from(\n          /** @type {any} */\n          w.rangeData.seriesRange[i][overlappedIndex].overlaps\n        );\n        if (overlaps.indexOf(rangeName) > -1) {\n          barHeight = initPositions.barHeight / overlaps.length;\n          barYPosition = barHeight * this.visibleI + yDivision * (100 - parseInt(this.barOptions.barHeight, 10)) / 100 / 2 + barHeight * (this.visibleI + overlaps.indexOf(rangeName)) + yDivision * rowIndex;\n        }\n      }\n    } else {\n      if (rowIndex > -1 && !w.labelData.timescaleLabels.length) {\n        if (w.config.plotOptions.bar.rangeBarGroupRows) {\n          barXPosition = srtx + xDivision * rowIndex;\n        } else {\n          barXPosition = srtx + barWidth * this.visibleI + xDivision * rowIndex;\n        }\n      }\n      if (overlappedIndex > -1 && !w.config.plotOptions.bar.rangeBarOverlap) {\n        overlaps = Array.from(\n          /** @type {any} */\n          w.rangeData.seriesRange[i][overlappedIndex].overlaps\n        );\n        if (overlaps.indexOf(rangeName) > -1) {\n          barWidth = initPositions.barWidth / overlaps.length;\n          barXPosition = barWidth * this.visibleI + xDivision * (100 - parseInt(this.barOptions.barWidth, 10)) / 100 / 2 + barWidth * (this.visibleI + overlaps.indexOf(rangeName)) + xDivision * rowIndex;\n        }\n      }\n    }\n    return {\n      barYPosition,\n      barXPosition,\n      barHeight,\n      barWidth\n    };\n  }\n  /** @param {{indexes: any, x: any, xDivision: any, barWidth: any, barXPosition: any, zeroH: any}} opts */\n  drawRangeColumnPaths({\n    indexes,\n    x,\n    xDivision,\n    barWidth,\n    barXPosition,\n    zeroH\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const { i, j, realIndex, translationsIndex } = indexes;\n    const yRatio = this.yRatio[translationsIndex];\n    const range = this.getRangeValue(realIndex, j);\n    let y1 = Math.min(range.start, range.end);\n    let y2 = Math.max(range.start, range.end);\n    if (typeof /** @type {any} */\n    ((_a = this.series[i]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i]) == null ? void 0 : _b[j]) === null) {\n      y1 = zeroH;\n    } else {\n      y1 = zeroH - y1 / yRatio;\n      y2 = zeroH - y2 / yRatio;\n    }\n    const barHeight = Math.abs(y2 - y1);\n    const paths = this.barHelpers.getColumnPaths({\n      barXPosition,\n      barWidth,\n      y1,\n      y2,\n      strokeWidth: this.strokeWidth,\n      series: this.seriesRangeEnd,\n      realIndex,\n      i: realIndex,\n      j,\n      w\n    });\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    } else {\n      const xForNumericXAxis = this.getBarXForNumericXAxis({\n        x,\n        j,\n        realIndex,\n        barWidth\n      });\n      x = xForNumericXAxis.x;\n      barXPosition = xForNumericXAxis.barXPosition;\n    }\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      barHeight,\n      x,\n      y: range.start < 0 && range.end < 0 ? y1 : y2,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        i,\n        j,\n        translationsIndex\n      ),\n      barXPosition\n    };\n  }\n  /**\n   * @param {number} val\n   */\n  preventBarOverflow(val) {\n    const w = this.w;\n    if (val < 0) {\n      val = 0;\n    }\n    if (val > w.layout.gridWidth) {\n      val = w.layout.gridWidth;\n    }\n    return val;\n  }\n  /** @param {{indexes: any, y: any, y1: any, y2: any, yDivision: any, barHeight: any, barYPosition: any, zeroW: any}} opts */\n  drawRangeBarPaths({\n    indexes,\n    y,\n    y1,\n    y2,\n    yDivision,\n    barHeight,\n    barYPosition,\n    zeroW\n  }) {\n    const w = this.w;\n    const { realIndex, j } = indexes;\n    const x1 = this.preventBarOverflow(zeroW + y1 / this.invertedYRatio);\n    const x2 = this.preventBarOverflow(zeroW + y2 / this.invertedYRatio);\n    const range = this.getRangeValue(realIndex, j);\n    const barWidth = Math.abs(x2 - x1);\n    const paths = this.barHelpers.getBarpaths({\n      barYPosition,\n      barHeight,\n      x1,\n      x2,\n      strokeWidth: this.strokeWidth,\n      series: this.seriesRangeEnd,\n      i: realIndex,\n      realIndex,\n      j,\n      w\n    });\n    if (!w.axisFlags.isXNumeric) {\n      y = y + yDivision;\n    }\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      barWidth,\n      x: range.start < 0 && range.end < 0 ? x1 : x2,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        realIndex,\n        j,\n        0\n      ),\n      y\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  getRangeValue(i, j) {\n    const w = this.w;\n    return {\n      start: w.rangeData.seriesRangeStart[i][j],\n      end: w.rangeData.seriesRangeEnd[i][j]\n    };\n  }\n}\nfunction normalize(data, area) {\n  let sum = 0;\n  for (let i = 0; i < data.length; i++) {\n    sum += data[i];\n  }\n  const multiplier = area / sum;\n  const result = new Array(data.length);\n  for (let i = 0; i < data.length; i++) {\n    result[i] = data[i] * multiplier;\n  }\n  return result;\n}\nfunction calculateRatio(rowMin, rowMax, rowSum, length) {\n  const lengthSq = length * length;\n  const sumSq = rowSum * rowSum;\n  return Math.max(\n    lengthSq * rowMax / sumSq,\n    sumSq / (lengthSq * rowMin)\n  );\n}\nfunction improvesRatio(rowLen, rowMin, rowMax, rowSum, nextNode, length) {\n  if (rowLen === 0) return true;\n  const currentRatio = calculateRatio(rowMin, rowMax, rowSum, length);\n  const newRatio = calculateRatio(\n    Math.min(rowMin, nextNode),\n    Math.max(rowMax, nextNode),\n    rowSum + nextNode,\n    length\n  );\n  return currentRatio >= newRatio;\n}\nfunction emitCoordinates(coords, row, rowLen, rowSum, xoffset, yoffset, width, height) {\n  if (width >= height) {\n    const areaWidth = rowSum / height;\n    let subY = yoffset;\n    for (let i = 0; i < rowLen; i++) {\n      const h = row[i] / areaWidth;\n      coords.push([xoffset, subY, xoffset + areaWidth, subY + h]);\n      subY += h;\n    }\n  } else {\n    const areaHeight = rowSum / width;\n    let subX = xoffset;\n    for (let i = 0; i < rowLen; i++) {\n      const w = row[i] / areaHeight;\n      coords.push([subX, yoffset, subX + w, yoffset + areaHeight]);\n      subX += w;\n    }\n  }\n}\nfunction squarify(data, xoffset, yoffset, width, height) {\n  const coords = [];\n  const n = data.length;\n  if (n === 0) return coords;\n  const row = new Array(n);\n  let rowLen = 0;\n  let rowSum = 0;\n  let rowMin = Infinity;\n  let rowMax = -Infinity;\n  let i = 0;\n  while (i < n) {\n    const length = Math.min(width, height);\n    const val = data[i];\n    if (improvesRatio(rowLen, rowMin, rowMax, rowSum, val, length)) {\n      row[rowLen] = val;\n      rowLen++;\n      rowSum += val;\n      if (val < rowMin) rowMin = val;\n      if (val > rowMax) rowMax = val;\n      i++;\n    } else {\n      emitCoordinates(coords, row, rowLen, rowSum, xoffset, yoffset, width, height);\n      if (width >= height) {\n        const areaWidth = rowSum / height;\n        xoffset += areaWidth;\n        width -= areaWidth;\n      } else {\n        const areaHeight = rowSum / width;\n        yoffset += areaHeight;\n        height -= areaHeight;\n      }\n      rowLen = 0;\n      rowSum = 0;\n      rowMin = Infinity;\n      rowMax = -Infinity;\n    }\n  }\n  if (rowLen > 0) {\n    emitCoordinates(coords, row, rowLen, rowSum, xoffset, yoffset, width, height);\n  }\n  return coords;\n}\nfunction generate(data, width, height) {\n  const n = data.length;\n  const sums = new Array(n);\n  for (let i = 0; i < n; i++) {\n    let s = 0;\n    const series = data[i];\n    for (let j = 0; j < series.length; j++) {\n      s += series[j];\n    }\n    sums[i] = s;\n  }\n  const seriesRects = squarify(\n    normalize(sums, width * height),\n    0,\n    0,\n    width,\n    height\n  );\n  const results = new Array(n);\n  for (let i = 0; i < n; i++) {\n    const rect = seriesRects[i];\n    const rx = rect[0];\n    const ry = rect[1];\n    const rw = rect[2] - rx;\n    const rh = rect[3] - ry;\n    results[i] = squarify(\n      normalize(data[i], rw * rh),\n      rx,\n      ry,\n      rw,\n      rh\n    );\n  }\n  return results;\n}\nconst TreemapSquared = { generate };\nclass TreemapChart {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.strokeWidth = this.w.config.stroke.width;\n    this.helpers = new TreemapHelpers(w, ctx);\n    this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation;\n    this.labels = [];\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const fill = new Fill(this.w);\n    const ret = graphics.group({\n      class: \"apexcharts-treemap\"\n    });\n    if (w.globals.noData) return ret;\n    const ser = [];\n    series.forEach((s) => {\n      const d = s.map((v) => {\n        return Math.abs(v);\n      });\n      ser.push(d);\n    });\n    this.negRange = this.helpers.checkColorRange();\n    w.config.series.forEach((s, i) => {\n      s.data.forEach((l) => {\n        if (!Array.isArray(this.labels[i])) this.labels[i] = [];\n        this.labels[i].push(l.x);\n      });\n    });\n    const nodes = TreemapSquared.generate(\n      ser,\n      w.layout.gridWidth,\n      w.layout.gridHeight\n    );\n    nodes.forEach((node, i) => {\n      var _a;\n      const elSeries = graphics.group({\n        class: `apexcharts-series apexcharts-treemap-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      graphics.setupEventDelegation(elSeries, \".apexcharts-treemap-rect\");\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        const filters = new Filters(this.w);\n        filters.dropShadow(ret, shadow, i);\n      }\n      const elDataLabelWrap = graphics.group({\n        class: \"apexcharts-data-labels\"\n      });\n      const bounds = {\n        xMin: Infinity,\n        yMin: Infinity,\n        xMax: -Infinity,\n        yMax: -Infinity\n      };\n      const animCfg = w.config.chart.animations;\n      const gradCfg = animCfg.animateGradually;\n      const cascadeEnabled = gradCfg && gradCfg.enabled !== false;\n      const cascadeDelays = new Array(node.length).fill(0);\n      if (cascadeEnabled) {\n        const tileCount = node.length || 1;\n        const baseDelay = Math.min(\n          gradCfg.delay || 0,\n          animCfg.speed * 0.5 / tileCount\n        );\n        const ranked = node.map(\n          /** @param {number[]} r @param {number} j */\n          (r, j) => ({ j, area: (r[2] - r[0]) * (r[3] - r[1]) })\n        ).sort(\n          /** @param {{j: number, area: number}} a @param {{j: number, area: number}} b */\n          (a, b) => b.area - a.area\n        );\n        ranked.forEach(\n          /** @param {{j: number, area: number}} item @param {number} rank */\n          (item, rank) => {\n            cascadeDelays[item.j] = rank * baseDelay;\n          }\n        );\n      }\n      node.forEach((r, j) => {\n        const x1 = r[0];\n        const y1 = r[1];\n        const x2 = r[2];\n        const y2 = r[3];\n        bounds.xMin = Math.min(bounds.xMin, x1);\n        bounds.yMin = Math.min(bounds.yMin, y1);\n        bounds.xMax = Math.max(bounds.xMax, x2);\n        bounds.yMax = Math.max(bounds.yMax, y2);\n        const colorProps = this.helpers.getShadeColor(\n          w.config.chart.type,\n          i,\n          j,\n          this.negRange\n        );\n        const color = colorProps.color;\n        const pathFill = fill.fillPath({\n          color,\n          seriesNumber: i,\n          dataPointIndex: j\n        });\n        const elRect = graphics.drawRect(\n          x1,\n          y1,\n          x2 - x1,\n          y2 - y1,\n          w.config.plotOptions.treemap.borderRadius,\n          \"#fff\",\n          1,\n          this.strokeWidth,\n          w.config.plotOptions.treemap.useFillColorAsStroke ? color : w.globals.stroke.colors[i]\n        );\n        elRect.attr({\n          cx: x1,\n          cy: y1,\n          index: i,\n          i,\n          j,\n          width: x2 - x1,\n          height: y2 - y1,\n          fill: pathFill\n        });\n        elRect.node.classList.add(\"apexcharts-treemap-rect\");\n        let fromRect = {\n          x: x1 + (x2 - x1) / 2,\n          y: y1 + (y2 - y1) / 2,\n          width: 0,\n          height: 0\n        };\n        const toRect = {\n          x: x1,\n          y: y1,\n          width: x2 - x1,\n          height: y2 - y1\n        };\n        if (w.config.chart.animations.enabled && !w.globals.dataChanged) {\n          let speed = 1;\n          if (!w.globals.resized) {\n            speed = w.config.chart.animations.speed;\n          }\n          this.animateTreemap(\n            elRect,\n            fromRect,\n            toRect,\n            speed,\n            cascadeDelays[j] || 0\n          );\n        }\n        if (w.globals.dataChanged) {\n          let speed = 1;\n          if (this.dynamicAnim.enabled && w.globals.shouldAnimate) {\n            speed = this.dynamicAnim.speed;\n            if (w.globals.previousPaths[i] && /** @type {Record<string,any>} */\n            w.globals.previousPaths[i][j] && /** @type {Record<string,any>} */\n            w.globals.previousPaths[i][j].rect) {\n              fromRect = /** @type {Record<string,any>} */\n              w.globals.previousPaths[i][j].rect;\n            }\n            this.animateTreemap(elRect, fromRect, toRect, speed);\n          }\n        }\n        let fontSize = this.getFontSize(r);\n        let formattedText = w.config.dataLabels.formatter(this.labels[i][j], {\n          value: w.seriesData.series[i][j],\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        });\n        if (w.config.plotOptions.treemap.dataLabels.format === \"truncate\") {\n          fontSize = parseInt(String(w.config.dataLabels.style.fontSize), 10);\n          formattedText = this.truncateLabels(\n            String(formattedText),\n            fontSize,\n            x1,\n            y1,\n            x2,\n            y2\n          );\n        }\n        let dataLabels = null;\n        if (w.seriesData.series[i][j]) {\n          dataLabels = this.helpers.calculateDataLabels({\n            text: formattedText,\n            x: (x1 + x2) / 2,\n            y: (y1 + y2) / 2 + this.strokeWidth / 2 + fontSize / 3,\n            i,\n            j,\n            colorProps,\n            fontSize,\n            series\n          });\n        }\n        if (w.config.dataLabels.enabled && dataLabels) {\n          this.rotateToFitLabel(\n            dataLabels,\n            fontSize,\n            formattedText,\n            x1,\n            y1,\n            x2,\n            y2\n          );\n        }\n        elSeries.add(elRect);\n        if (dataLabels !== null) {\n          elSeries.add(dataLabels);\n        }\n      });\n      const seriesTitle = w.config.plotOptions.treemap.seriesTitle;\n      if (w.config.series.length > 1 && seriesTitle && seriesTitle.show) {\n        const sName = (\n          /** @type {Record<string,any>} */\n          w.config.series[i].name || \"\"\n        );\n        if (sName && bounds.xMin < Infinity && bounds.yMin < Infinity) {\n          const {\n            offsetX,\n            offsetY,\n            borderColor,\n            borderWidth,\n            borderRadius,\n            style\n          } = seriesTitle;\n          const textColor = style.color || w.config.chart.foreColor;\n          const padding = {\n            left: style.padding.left,\n            right: style.padding.right,\n            top: style.padding.top,\n            bottom: style.padding.bottom\n          };\n          const textSize = graphics.getTextRects(\n            sName,\n            style.fontSize,\n            style.fontFamily\n          );\n          const labelRectWidth = textSize.width + padding.left + padding.right;\n          const labelRectHeight = textSize.height + padding.top + padding.bottom;\n          const labelX = bounds.xMin + (offsetX || 0);\n          const labelY = bounds.yMin + (offsetY || 0);\n          const elLabelRect = graphics.drawRect(\n            labelX,\n            labelY,\n            labelRectWidth,\n            labelRectHeight,\n            borderRadius,\n            style.background,\n            1,\n            borderWidth,\n            borderColor\n          );\n          const elLabelText = graphics.drawText({\n            x: labelX + padding.left,\n            y: labelY + padding.top + ((_a = textSize == null ? void 0 : textSize.height) != null ? _a : 0) * 0.75,\n            text: sName,\n            fontSize: style.fontSize,\n            fontFamily: style.fontFamily,\n            fontWeight: style.fontWeight,\n            foreColor: textColor,\n            cssClass: style.cssClass || \"\"\n          });\n          elSeries.add(elLabelRect);\n          elSeries.add(elLabelText);\n        }\n      }\n      elSeries.add(elDataLabelWrap);\n      ret.add(elSeries);\n    });\n    return ret;\n  }\n  // This calculates a font-size based upon\n  // average label length and the size of the box\n  /**\n   * @param {number[]} coordinates\n   */\n  getFontSize(coordinates) {\n    const w = this.w;\n    function totalLabelLength(arr) {\n      let i, total = 0;\n      if (Array.isArray(arr[0])) {\n        for (i = 0; i < arr.length; i++) {\n          total += totalLabelLength(arr[i]);\n        }\n      } else {\n        for (i = 0; i < arr.length; i++) {\n          total += arr[i].length;\n        }\n      }\n      return total;\n    }\n    function countLabels(arr) {\n      let i, total = 0;\n      if (Array.isArray(arr[0])) {\n        for (i = 0; i < arr.length; i++) {\n          total += countLabels(arr[i]);\n        }\n      } else {\n        for (i = 0; i < arr.length; i++) {\n          total += 1;\n        }\n      }\n      return total;\n    }\n    const averagelabelsize = totalLabelLength(this.labels) / countLabels(this.labels);\n    function fontSize(width, height) {\n      const area = width * height;\n      const arearoot = Math.pow(area, 0.5);\n      return Math.min(\n        arearoot / averagelabelsize,\n        parseInt(w.config.dataLabels.style.fontSize, 10)\n      );\n    }\n    return fontSize(\n      coordinates[2] - coordinates[0],\n      coordinates[3] - coordinates[1]\n    );\n  }\n  /**\n   * @param {any} elText\n   * @param {string | number} fontSize\n   * @param {string} text\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   */\n  rotateToFitLabel(elText, fontSize, text, x1, y1, x2, y2) {\n    const graphics = new Graphics(this.w);\n    const textRect = graphics.getTextRects(text, String(fontSize));\n    if (textRect.width + this.w.config.stroke.width + 5 > x2 - x1 && textRect.width <= y2 - y1) {\n      const labelRotatingCenter = graphics.rotateAroundCenter(elText.node);\n      elText.node.setAttribute(\n        \"transform\",\n        `rotate(-90 ${labelRotatingCenter.x} ${labelRotatingCenter.y}) translate(${textRect.height / 3})`\n      );\n    }\n  }\n  // This is an alternative label formatting method that uses a\n  // consistent font size, and trims the edge of long labels\n  /**\n   * @param {string} text\n   * @param {number} fontSize\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   */\n  truncateLabels(text, fontSize, x1, y1, x2, y2) {\n    const graphics = new Graphics(this.w);\n    const textRect = graphics.getTextRects(text, String(fontSize));\n    const labelMaxWidth = textRect.width + this.w.config.stroke.width + 5 > x2 - x1 && y2 - y1 > x2 - x1 ? y2 - y1 : x2 - x1;\n    const truncatedText = graphics.getTextBasedOnMaxWidth({\n      text,\n      maxWidth: labelMaxWidth,\n      fontSize\n    });\n    if (text.length !== truncatedText.length && labelMaxWidth / fontSize < 5) {\n      return \"\";\n    } else {\n      return truncatedText;\n    }\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} fromRect\n   * @param {Record<string, any>} toRect\n   * @param {number} speed\n   * @param {number} [delay] - per-tile cascade delay in ms\n   */\n  animateTreemap(el, fromRect, toRect, speed, delay = 0) {\n    const animations = new Animations(this.w);\n    animations.animateRect(\n      el,\n      fromRect,\n      toRect,\n      speed,\n      () => {\n        animations.animationCompleted(el);\n      },\n      delay\n    );\n  }\n}\nApexCharts.use({\n  line: Line,\n  area: Line,\n  scatter: Line,\n  bubble: Line,\n  rangeArea: Line,\n  bar: Bar,\n  column: Bar,\n  barStacked: BarStacked,\n  rangeBar: RangeBar,\n  candlestick: BoxCandleStick,\n  boxPlot: BoxCandleStick,\n  violin: Violin,\n  pie: Pie,\n  donut: Pie,\n  polarArea: Pie,\n  radialBar: Radial,\n  radar: Radar,\n  heatmap: HeatMap,\n  treemap: TreemapChart\n});\nexport {\n  ApexCharts as default\n};\n","include accessEditorMixins\n\nif !hidePrivacyEditor\n  +privacyEditor(modelType)\n+permissionsEditor\n\nif !hideRecurseOption\n  +recurseOption(modelType)\n\nif !hideSaveButton\n  +saveAccessButton\n","include accessEditorMixins\n\n.modal-dialog\n  .modal-content\n    .modal-header\n      button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n      h4.modal-title Access control\n      .g-dialog-subtitle\n        if (modelType === 'folder')\n          i.icon-folder\n        else if (modelType === 'collection')\n          i.icon-sitemap\n        = model.name()\n    .modal-body.g-access-modal-body\n      if !hidePrivacyEditor\n        +privacyEditor(modelType)\n      +permissionsEditor\n      if !hideRecurseOption\n        +recurseOption(modelType)\n\n    .modal-footer\n      a.btn.btn-small.btn-default(data-dismiss=\"modal\") Close\n      +saveAccessButton\n","div(class=`g-${type}-access-entry`, resourceid=entry.id)\n  .g-access-col-left\n    - var icon = type === 'group' ? 'users' : 'user';\n    .g-access-icon\n      i(class=`icon-${icon}`)\n    .g-access-desc\n      .g-desc-title= entry.title\n      .g-desc-subtitle= entry.subtitle\n  .g-access-col-right\n    if !hideAccessType\n      select.form-control.input-sm\n        option(value=accessTypes.READ, selected=(entry.level === accessTypes.READ ? 'selected' : null)) Can view\n        option(value=accessTypes.WRITE, selected=(entry.level === accessTypes.WRITE ? 'selected' : null)) Can edit\n        option(value=accessTypes.ADMIN, selected=(entry.level === accessTypes.ADMIN ? 'selected' : null)) Is owner\n    .g-access-action-container\n      if !noAccessFlag && _.keys(flagList).length\n        a.g-action-manage-flags(title=\"Access flags\")\n          i.g-flag-icon.icon-flag\n            .g-flag-count-indicator(class=(entry.flags && entry.flags.length ? null : \"hide\"))= (entry.flags || []).length\n        .g-flags-popover-container.hide(resourcetype=type, resourceid=entry.id, title=\"Access flags\")\n          each flag, key in flagList\n            - var checked = _.contains(entry.flags, key) ? 'checked' : null;\n            - var disabled = (!isAdmin && flag.admin) ? 'disabled' : null;\n            .checkbox(class=disabled)\n              label.g-flag-label(title=flag.description)\n                input.g-flag-checkbox(resourcetype=type, resourceid=entry.id, flag=key, type=\"checkbox\",\n                    checked=checked, disabled=disabled)\n                span= flag.name\n          button.g-close-flags-popover.btn.btn-xs.btn-default Close\n\n      a.g-action-remove-access(title=\"Remove access\")\n        i.icon-cancel\n","#g-loading-animation\n  #g-loading-block-1.g-loading-block\n  #g-loading-block-2.g-loading-block\n  #g-loading-block-3.g-loading-block\n","import View from '@girder/core/views/View';\n\nimport LoadingAnimationTemplate from '@girder/core/templates/widgets/loadingAnimation.pug';\n\nimport '@girder/core/stylesheets/layout/loading.styl';\n\n/**\n * This widget can be used to display a small loading animation.\n */\nvar LoadingAnimation = View.extend({\n    render: function () {\n        this.$el.html(LoadingAnimationTemplate());\n        return this;\n    }\n});\n\nexport default LoadingAnimation;\n","import $ from 'jquery';\nimport _ from 'underscore';\n// Bootstrap tooltip is required by popover\nimport 'bootstrap/js/tooltip';\nimport 'bootstrap/js/popover';\n\nimport accessEditorNonModalTemplate from '@girder/core/templates/widgets/accessEditorNonModal.pug';\nimport accessEditorTemplate from '@girder/core/templates/widgets/accessEditor.pug';\nimport accessEntryTemplate from '@girder/core/templates/widgets/accessEntry.pug';\nimport GroupModel from '@girder/core/models/GroupModel';\nimport LoadingAnimation from '@girder/core/views/widgets/LoadingAnimation';\nimport SearchFieldWidget from '@girder/core/views/widgets/SearchFieldWidget';\nimport UserModel from '@girder/core/models/UserModel';\nimport View from '@girder/core/views/View';\nimport { getCurrentUser } from '@girder/core/auth';\nimport { AccessType } from '@girder/core/constants';\nimport { handleClose, handleOpen } from '@girder/core/dialog';\nimport { restRequest } from '@girder/core/rest';\n\nimport '@girder/core/stylesheets/widgets/accessWidget.styl';\n\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This view allows users to see and control access on a resource.\n */\nvar AccessWidget = View.extend({\n    events: {\n        'click button.g-save-access-list': function (e) {\n            $(e.currentTarget).girderEnable(false);\n            this.saveAccessList();\n        },\n        'click .g-close-flags-popover': function (e) {\n            $(e.currentTarget).parents('.g-access-action-container')\n                .find('.g-action-manage-flags').popover('hide');\n        },\n        'click .g-close-public-flags-popover': function (e) {\n            $(e.currentTarget).parents('.g-public-container')\n                .find('.g-action-manage-public-flags').popover('hide');\n        },\n        'click a.g-action-remove-access': 'removeAccessEntry',\n        'change .g-public-container .radio input': 'privacyChanged',\n        'change .g-flag-checkbox': '_toggleAccessFlag',\n        'change .g-public-flag-checkbox': '_togglePublicAccessFlag'\n    },\n\n    /**\n     * @param settings.modelType {string} Display name for the resource type\n     *    being edited.\n     * @param [settings.hideRecurseOption=false] {bool} Whether to hide the recursive\n     *    propagation setting widgets.\n     * @param [settings.hideSaveButton=false] {bool} Whether to hide the \"save\"\n     *    button in non-modal view. This allows for users of this widget to\n     *    provide their own save button elsewhere on the page that can call the\n     *    saveAccessList() method of this widget when pressed.\n     * @param [settings.modal=true] {bool} Whether to render the widget as a\n     *    modal dialog or not.\n     */\n    initialize: function (settings) {\n        this.modelType = settings.modelType;\n        this.hideRecurseOption = settings.hideRecurseOption || false;\n        this.hideSaveButton = settings.hideSaveButton || false;\n        this.hidePrivacyEditor = settings.hidePrivacyEditor || false;\n        this.hideAccessType = settings.hideAccessType || false;\n        this.noAccessFlag = settings.noAccessFlag || false;\n        this.modal = _.has(settings, 'modal') ? settings.modal : true;\n        this.currentUser = getCurrentUser();\n        this.isAdmin = !!(this.currentUser && this.currentUser.get('admin'));\n        this.searchWidget = new SearchFieldWidget({\n            placeholder: 'Start typing a name...',\n            noResultsPage: true,\n            modes: ['prefix', 'text'],\n            types: ['group', 'user'],\n            parentView: this\n        }).on('g:resultClicked', this.addEntry, this);\n\n        var flagListPromise = null;\n        if (!this.noAccessFlag) {\n            flagListPromise = restRequest({\n                url: 'system/access_flag'\n            }).done((resp) => {\n                this.flagList = resp;\n            });\n        } else {\n            this.flagList = [];\n        }\n\n        $.when(\n            flagListPromise,\n            this.model.fetchAccess()\n        ).done(() => {\n            this.render();\n        });\n    },\n\n    render: function () {\n        if (!this.model.get('access') || !this.flagList) {\n            new LoadingAnimation({\n                el: this.$el,\n                parentView: this\n            }).render();\n            return;\n        }\n\n        var closeFunction;\n        if (this.modal && this.modelType === 'folder') {\n            handleOpen('folderaccess');\n            closeFunction = function () {\n                handleClose('folderaccess');\n            };\n        } else if (this.modal) {\n            handleOpen('access');\n            closeFunction = function () {\n                handleClose('access');\n            };\n        }\n\n        var template = this.modal ? accessEditorTemplate : accessEditorNonModalTemplate;\n\n        this.$el.html(template({\n            _,\n            model: this.model,\n            modelType: this.modelType,\n            publicFlag: this.model.get('public'),\n            publicFlags: this.model.get('publicFlags'),\n            hideRecurseOption: this.hideRecurseOption,\n            hideSaveButton: this.hideSaveButton,\n            hidePrivacyEditor: this.hidePrivacyEditor,\n            flagList: this.flagList,\n            isAdmin: this.isAdmin\n        }));\n\n        if (this.modal) {\n            this.$el.girderModal(this).on('hidden.bs.modal', closeFunction);\n        }\n\n        _.each(this.model.get('access').groups, function (groupAccess) {\n            this.$('#g-ac-list-groups').append(accessEntryTemplate({\n                _,\n                accessTypes: AccessType,\n                type: 'group',\n                flagList: this.flagList,\n                isAdmin: this.isAdmin,\n                hideAccessType: this.hideAccessType,\n                noAccessFlag: this.noAccessFlag,\n                entry: _.extend(groupAccess, {\n                    title: groupAccess.name,\n                    subtitle: groupAccess.description\n                })\n            }));\n        }, this);\n\n        _.each(this.model.get('access').users, function (userAccess) {\n            this.$('#g-ac-list-users').append(accessEntryTemplate({\n                _,\n                accessTypes: AccessType,\n                type: 'user',\n                flagList: this.flagList,\n                isAdmin: this.isAdmin,\n                hideAccessType: this.hideAccessType,\n                noAccessFlag: this.noAccessFlag,\n                entry: _.extend(userAccess, {\n                    title: userAccess.name,\n                    subtitle: userAccess.login\n                })\n            }));\n        }, this);\n        this._makeTooltips();\n\n        this.searchWidget.setElement(this.$('.g-search-field-container')).render();\n\n        this.privacyChanged();\n\n        return this;\n    },\n\n    _makeTooltips: function () {\n        // Re-binding popovers actually breaks them, so we make sure to\n        // only bind ones that aren't already bound.\n        _.each(this.$('.g-action-manage-flags'), (el) => {\n            if (!$(el).data('bs.popover')) {\n                $(el).popover({\n                    trigger: 'manual',\n                    placement: 'left',\n                    viewport: {\n                        selector: 'body',\n                        padding: 10\n                    },\n                    content: function () {\n                        return $(this).parent().find('.g-flags-popover-container').html();\n                    },\n                    html: true,\n                    sanitize: false\n                }).on('click', function () {\n                    $(this).popover('toggle');\n                });\n            }\n        });\n\n        // Re-binding popovers actually breaks them, so we make sure to\n        // only bind ones that aren't already bound.\n        _.each(this.$('.g-action-manage-public-flags'), (el) => {\n            if (!$(el).data('bs.popover')) {\n                $(el).popover({\n                    trigger: 'manual',\n                    placement: 'right',\n                    viewport: {\n                        selector: 'body',\n                        padding: 10\n                    },\n                    content: function () {\n                        return $(this).parent().find('.g-public-flags-popover-container').html();\n                    },\n                    html: true,\n                    sanitize: false\n                }).on('click', function () {\n                    $(this).popover('toggle');\n                });\n            }\n        });\n    },\n\n    /**\n     * Add a new user or group entry to the access control list UI. If the\n     * given user or group already has an entry there, this does nothing.\n     */\n    addEntry: function (entry) {\n        this.searchWidget.resetState();\n        if (entry.type === 'user') {\n            this._addUserEntry(entry);\n        } else if (entry.type === 'group') {\n            this._addGroupEntry(entry);\n        }\n    },\n\n    _addUserEntry: function (entry) {\n        var exists = false;\n        _.every(this.$('.g-user-access-entry'), function (el) {\n            if ($(el).attr('resourceid') === entry.id) {\n                exists = true;\n            }\n            return !exists;\n        }, this);\n\n        if (!exists) {\n            var model = new UserModel();\n            model.set('_id', entry.id).on('g:fetched', function () {\n                this.$('#g-ac-list-users').append(accessEntryTemplate({\n                    _,\n                    accessTypes: AccessType,\n                    type: 'user',\n                    entry: {\n                        title: model.name(),\n                        subtitle: model.get('login'),\n                        id: entry.id,\n                        level: AccessType.READ\n                    },\n                    isAdmin: this.isAdmin,\n                    hideAccessType: this.hideAccessType,\n                    noAccessFlag: this.noAccessFlag,\n                    flagList: this.flagList\n                }));\n                this._makeTooltips();\n            }, this).fetch();\n        }\n    },\n\n    _addGroupEntry: function (entry) {\n        var exists = false;\n        _.every(this.$('.g-group-access-entry'), function (el) {\n            if ($(el).attr('resourceid') === entry.id) {\n                exists = true;\n            }\n            return !exists;\n        }, this);\n\n        if (!exists) {\n            var model = new GroupModel();\n            model.set('_id', entry.id).on('g:fetched', function () {\n                this.$('#g-ac-list-groups').append(accessEntryTemplate({\n                    _,\n                    accessTypes: AccessType,\n                    type: 'group',\n                    entry: {\n                        title: model.name(),\n                        subtitle: model.get('description'),\n                        id: entry.id,\n                        level: AccessType.READ\n                    },\n                    isAdmin: this.isAdmin,\n                    hideAccessType: this.hideAccessType,\n                    noAccessFlag: this.noAccessFlag,\n                    flagList: this.flagList\n                }));\n\n                this._makeTooltips();\n            }, this).fetch();\n        }\n    },\n\n    saveAccessList: function () {\n        var acList = this.getAccessList();\n\n        var publicFlags = _.map(this.$('.g-public-flag-checkbox:checked'), (checkbox) => {\n            return $(checkbox).attr('flag');\n        });\n\n        this.model.set({\n            access: acList,\n            public: this.$('#g-access-public').is(':checked'),\n            publicFlags: publicFlags\n        });\n\n        var recurse = this.$('#g-apply-recursive').is(':checked');\n\n        this.model.off('g:accessListSaved', null, this)\n            .on('g:accessListSaved', function () {\n                if (this.modal) {\n                    this.$el.modal('hide');\n                }\n\n                this.trigger('g:accessListSaved', {\n                    recurse: recurse\n                });\n            }, this).updateAccess({\n                recurse: recurse,\n                progress: true\n            });\n    },\n\n    getAccessList: function () {\n        // Rebuild the access list\n        var acList = {\n            users: [],\n            groups: []\n        };\n\n        _.each(this.$('.g-group-access-entry'), function (el) {\n            var $el = $(el);\n            acList.groups.push({\n                name: $el.find('.g-desc-title').html(),\n                id: $el.attr('resourceid'),\n                level: parseInt(\n                    $el.find('.g-access-col-right>select').val() || 0,\n                    10\n                ),\n                flags: _.map($el.find('.g-flag-checkbox:checked'),\n                    (checkbox) => $(checkbox).attr('flag')\n                )\n            });\n        }, this);\n\n        _.each(this.$('.g-user-access-entry'), function (el) {\n            var $el = $(el);\n            acList.users.push({\n                login: $el.find('.g-desc-subtitle').html(),\n                name: $el.find('.g-desc-title').html(),\n                id: $el.attr('resourceid'),\n                level: parseInt(\n                    $el.find('.g-access-col-right>select').val() || 0,\n                    10\n                ),\n                flags: _.map($el.find('.g-flag-checkbox:checked'),\n                    (checkbox) => $(checkbox).attr('flag')\n                )\n            });\n        }, this);\n\n        return acList;\n    },\n\n    removeAccessEntry: function (event) {\n        var sel = '.g-user-access-entry,.g-group-access-entry';\n        $(event.currentTarget).parents(sel).remove();\n    },\n\n    privacyChanged: function () {\n        this.$('.g-public-container .radio').removeClass('g-selected');\n        var selected = this.$('.g-public-container .radio input:checked');\n        selected.parents('.radio').addClass('g-selected');\n\n        if (this.$('#g-access-public').is(':checked')) {\n            this.$('.g-action-manage-public-flags').removeClass('hide');\n        } else {\n            this.$('.g-action-manage-public-flags').addClass('hide');\n        }\n    },\n\n    _toggleAccessFlag: function (e) {\n        var el = $(e.currentTarget),\n            type = el.attr('resourcetype'),\n            id = el.attr('resourceid'),\n            flag = el.attr('flag'),\n            container = this.$(`.g-flags-popover-container[resourcetype='${type}'][resourceid='${id}']`);\n\n        // Since we clicked in a cloned popover element, we must apply this\n        // change within the original element as well.\n        container.find(`.g-flag-checkbox[flag=\"${flag}\"]`)\n            .attr('checked', el.is(':checked') ? 'checked' : null);\n        this._updateFlagCount(container, '.g-flag-checkbox');\n    },\n\n    _togglePublicAccessFlag: function (e) {\n        var el = $(e.currentTarget),\n            flag = el.attr('flag'),\n            container = this.$('.g-public-flags-popover-container');\n\n        // Since we clicked in a cloned popover element, we must apply this\n        // change within the original element as well.\n        container.find(`.g-public-flag-checkbox[flag=\"${flag}\"]`)\n            .attr('checked', el.is(':checked') ? 'checked' : null);\n        this._updateFlagCount(container, '.g-public-flag-checkbox');\n    },\n\n    _updateFlagCount: function (container, sel) {\n        const nChecked = container.find(`${sel}[checked=\"checked\"]`).length;\n        const countEl = container.parent().find('.g-flag-count-indicator');\n        countEl.text(nChecked);\n        if (nChecked) {\n            countEl.removeClass('hide');\n        } else {\n            countEl.addClass('hide');\n        }\n    }\n});\n\nexport default AccessWidget;\n","li.g-checked-menu-header.dropdown-header(role=\"presentation\")\n  if folderCount\n    i.icon-folder\n    span.g-checked-folder-count #{folderCount}\n  if itemCount\n    i.icon-doc-text-inv\n    span.g-checked-item-count #{itemCount}\n  if pickedCount\n    i.icon-plus-circled\n    span.g-checked-picked-count #{pickedCount}\nif folderCount || itemCount\n  li\n    a.g-download-checked\n      i.icon-download\n      | Download checked resources\n  li\n    a.g-pick-checked\n      i.icon-plus-circled\n      | Pick checked resources for Move or Copy\n\nif HierarchyWidget.getPickedResources()\n  li.g-admin.divider\n  if pickedMoveAllowed\n    li\n      a.g-move-picked\n        i.icon-move\n        | Move picked resources here\n  if pickedCopyAllowed\n    li\n      a.g-copy-picked\n        i.icon-paste\n        | Copy picked resources here\n  li\n    a.g-clear-picked\n      i.icon-minus-circled\n      | Clear picked resources\n      if pickedDesc\n        |  (#{pickedDesc})\n\nif folderCount || itemCount\n  if (minFolderLevel >= AccessType.ADMIN && minItemLevel >= AccessType.WRITE)\n    li.g-admin.divider\n    li.g-admin\n      a.g-delete-checked\n        i.icon-trash\n        | Delete checked resources\n","import HierarchyWidget from '@girder/core/views/widgets/HierarchyWidget';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\n\nimport CheckedActionsMenuTemplate from '@girder/core/templates/widgets/checkedActionsMenu.pug';\n\nimport '@girder/core/utilities/jquery/girderEnable';\n\n/**\n * This widget presents a list of available batch actions\n * on a set of selected resources.\n */\nvar CheckedMenuWidget = View.extend({\n\n    initialize: function (params) {\n        this._fetchAndInit(params);\n        this.dropdownToggle = params.dropdownToggle;\n    },\n\n    render: function () {\n        // If nothing is checked, disable the parent element and return\n        if (this.folderCount + this.itemCount + this.pickedCount === 0) {\n            this.dropdownToggle.girderEnable(false);\n            return;\n        }\n\n        this.dropdownToggle.girderEnable(true);\n        this.$el.html(CheckedActionsMenuTemplate({\n            minFolderLevel: this.minFolderLevel,\n            minItemLevel: this.minItemLevel,\n            folderCount: this.folderCount,\n            itemCount: this.itemCount,\n            AccessType: AccessType,\n            pickedCount: this.pickedCount,\n            pickedCopyAllowed: this.pickedCopyAllowed,\n            pickedMoveAllowed: this.pickedMoveAllowed,\n            pickedDesc: this.pickedDesc,\n            HierarchyWidget: HierarchyWidget\n        }));\n\n        return this;\n    },\n\n    /**\n     * This should be called when the checkbox selection changes. It will\n     * update and re-render the checked action menu.\n     * @param minLevel The minimum access level across the checked resource set.\n     * @param folderCount The number of checked folders.\n     * @param itemCount The number of checked items.\n     */\n    update: function (params) {\n        this._fetchAndInit(params);\n        this.render();\n    },\n\n    _fetchAndInit: function (params) {\n        this.minFolderLevel = params.minFolderLevel || AccessType.READ;\n        this.minItemLevel = params.minItemLevel || AccessType.READ;\n        this.folderCount = params.folderCount || 0;\n        this.itemCount = params.itemCount || 0;\n        this.pickedCount = params.pickedCount || 0;\n        this.pickedCopyAllowed = params.pickedCopyAllowed || false;\n        this.pickedMoveAllowed = params.pickedMoveAllowed || false;\n        this.pickedDesc = params.pickedDesc || '';\n    }\n});\n\nexport default CheckedMenuWidget;\n","mixin dateInfo(intro, property)\n  .g-collection-info-line(property=property)\n    i.icon-clock\n    span= intro\n    span.g-bold-part= formatDate(collection.get(property), DATE_SECOND)\n\n.modal-dialog\n  .modal-content\n    .modal-header\n      button.close(data-dismiss=\"modal\", aria-hidden=\"true\") &times;\n      h4.modal-title Collection information\n      .g-dialog-subtitle\n        i.icon-sitemap\n        span= collection.name()\n    .modal-body\n      if collection.get('description')\n        .g-info-dialog-description!= renderMarkdown(collection.get('description'))\n\n      .g-collection-info-lines\n        +dateInfo('Created ', 'created')\n        if collection.get('created') !== collection.get('updated')\n          +dateInfo('Last updated ', 'updated')\n\n        .g-collection-info-line(property=\"size\")\n          i.icon-floppy\n          | Total size: #[span.g-bold-part= formatSize(collection.get('size'))]\n\n        .g-collection-info-line(property=\"nFolders\")\n          i.icon-folder\n          | Contains #[span.g-bold-part= collection.get('nFolders')] subfolders\n\n        .g-collection-info-line(property=\"id\")\n          i.icon-share\n          | Unique ID: #[span.g-bold-part= collection.id]\n\n    .modal-footer\n      a.btn.btn-small.btn-default(data-dismiss=\"modal\") Close\n","import View from '@girder/core/views/View';\nimport { formatDate, DATE_SECOND, renderMarkdown, formatSize } from '@girder/core/misc';\n\nimport CollectionInfoDialogTemplate from '@girder/core/templates/widgets/collectionInfoDialog.pug';\n\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This view shows a dialog containing detailed collection information.\n */\nvar CollectionInfoWidget = View.extend({\n    initialize: function () {\n        this.needToFetch = !this.model.has('nFolders');\n        if (this.needToFetch || this.timestamp !== this.model.get('updated')) {\n            this.model.once('g:fetched.details', function () {\n                this.needToFetch = false;\n                this.timestamp = this.model.get('updated');\n                this.render();\n            }, this).fetch({ extraPath: 'details' });\n        }\n    },\n\n    render: function () {\n        if (this.needToFetch) {\n            return;\n        }\n\n        this.$el.html(CollectionInfoDialogTemplate({\n            collection: this.model,\n            formatDate: formatDate,\n            formatSize: formatSize,\n            DATE_SECOND: DATE_SECOND,\n            renderMarkdown: renderMarkdown\n        })).girderModal(this);\n\n        return this;\n    }\n});\n\nexport default CollectionInfoWidget;\n",".g-markdown-widget\n  .g-tabs-container\n    .g-markdown-tabs-top\n      ul.nav.nav-tabs\n        li.first.active(role=\"presentation\")\n          a.g-write-link(data-target=`#${prefix}-write`, aria-controls=\"home\",\n              role=\"tab\", data-toggle=\"tab\") Write\n        li(role=\"presentation\")\n          a.g-preview-link(data-target=`#${prefix}-preview`, aria-controls=\"preview\",\n              role=\"tab\", data-toggle=\"tab\") Preview\n        .g-markdown-explanation\n          | Supports\n          a(href=\"https://daringfireball.net/projects/markdown/syntax\",\n              tabindex=\"-1\", target=\"_blank\")  Markdown\n    .tab-content\n      .tab-pane.active(role=\"tabpanel\", id=`${prefix}-write`)\n        .g-markdown-drop-zone\n          textarea.form-control.g-markdown-text(\n              upload-enabled=enableUploads ? \"true\" : null,\n              placeholder=placeholder)= text\n          if enableUploads\n            .g-upload-overlay.hide\n              .g-upload-progress-container\n                .g-markdown-upload-progress.progress.progress-striped\n                  .progress-bar.progress-bar-info(role=\"progressbar\")\n                .g-markdown-upload-progress-message Starting upload...\n            .g-upload-footer.\n              #[i.icon-picture] Add an image by #[a.g-browse clicking here], or drag\n              and drop one into the editor.\n            .hide\n              input.g-file-input(type=\"file\")\n\n      .tab-pane(role=\"tabpanel\", id=`${prefix}-preview`)\n        .g-markdown-preview\n","/* ========================================================================\n * Bootstrap: tab.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.4.1'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(document).find(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n          .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n","import _ from 'underscore';\n\nimport FileModel from '@girder/core/models/FileModel';\nimport View from '@girder/core/views/View';\nimport events from '@girder/core/events';\nimport { renderMarkdown, formatSize } from '@girder/core/misc';\n\nimport MarkdownWidgetTemplate from '@girder/core/templates/widgets/markdownWidget.pug';\n\nimport '@girder/core/stylesheets/widgets/markdownWidget.styl';\n\nimport '@girder/core/utilities/jquery/girderEnable';\n\nimport 'bootstrap/js/tab';\n\n/**\n * A simple widget for editing markdown text with a preview tab.\n */\nvar MarkdownWidget = View.extend({\n    events: {\n        'show.bs.tab .g-preview-link': function () {\n            renderMarkdown(this.val().trim() || 'Nothing to show',\n                this.$('.g-markdown-preview'));\n        },\n\n        'shown.bs.tab .g-write-link': function () {\n            this.$('.g-markdown-text').trigger('focus');\n        },\n\n        'click .g-browse': function () {\n            this.$('.g-file-input').trigger('click');\n        },\n\n        'change .g-file-input': function (e) {\n            var files = e.target.files;\n\n            if (files.length) {\n                this.files = files;\n                this.filesAdded();\n            }\n        },\n\n        'dragenter .g-markdown-drop-zone': function (e) {\n            e.stopPropagation();\n            e.preventDefault();\n            e.originalEvent.dataTransfer.dropEffect = 'copy';\n            this.$('.g-markdown-text,.g-upload-footer').addClass('dragover');\n        },\n\n        'dragleave .g-markdown-drop-zone': function (e) {\n            e.stopPropagation();\n            e.preventDefault();\n            this.$('.g-markdown-text,.g-upload-footer').removeClass('dragover');\n        },\n\n        'dragover .g-markdown-drop-zone': function (e) {\n            e.originalEvent.dataTransfer.dropEffect = 'copy';\n            this.$('.g-markdown-text,.g-upload-footer').addClass('dragover');\n        },\n\n        'drop .g-markdown-drop-zone': function (e) {\n            e.stopPropagation();\n            e.preventDefault();\n            this.$('.g-markdown-text,.g-upload-footer').removeClass('dragover');\n            this.files = e.originalEvent.dataTransfer.files;\n            this.filesAdded();\n        }\n    },\n\n    /**\n     * @param [settings.text=''] Initial markdown text.\n     * @param [settings.placeholder=''] Text area placeholder.\n     * @param [settings.prefix='markdown'] Prefix for element IDs in case\n     *     multiple of these widgets are rendered simultaneously.\n     * @param [settings.enableUploads=false] Whether to allow uploading files\n     *     inline into the markdown.\n     * @param [settings.maxUploadSize=10 MB] Max upload size in bytes.\n     * @param [settings.parent] If enableUploads is true, set this to the object\n     *     into which files should be uploaded.\n     * @param [settings.allowedExtensions=null] If you want to restrict to\n     *     certain file extensions, set this to a list of (lowercase) extensions,\n     *     not including periods. E.g.: [\"png\", \"jpg\", \"jpeg\"]\n     */\n    initialize: function (settings) {\n        this.text = settings.text || '';\n        this.placeholder = settings.placeholder || '';\n        this.prefix = settings.prefix || 'markdown';\n        this.enableUploads = settings.enableUploads || false;\n        this.parent = settings.parent || null;\n        this.maxUploadSize = settings.maxUploadSize || 1024 * 1024 * 10;\n        this.allowedExtensions = settings.allowedExtensions || null;\n        this.files = [];\n    },\n\n    filesAdded: function () {\n        try {\n            this.validateFiles();\n        } catch (err) {\n            events.trigger('g:alert', {\n                type: 'danger',\n                text: err.message,\n                icon: 'cancel',\n                timeout: 5000\n            });\n            return;\n        }\n\n        var file = this.files[0];\n        var fileModel = new FileModel();\n\n        fileModel.on('g:upload.complete', function () {\n            var val = this.$('.g-markdown-text').val();\n            val += '![' + file.name + '](' + fileModel.downloadUrl() + ')\\n';\n\n            this.$('.g-upload-overlay').addClass('hide');\n            this.$('.g-markdown-text').girderEnable(true).val(val);\n\n            this.trigger('g:fileUploaded', {\n                file: file,\n                model: fileModel\n            });\n        }, this).on('g:upload.progress', function (info) {\n            var currentProgress = info.startByte + info.loaded;\n            this.$('.g-markdown-upload-progress>.progress-bar').css('width',\n                Math.ceil(100 * currentProgress / info.total) + '%');\n            this.$('.g-markdown-upload-progress-message').text(\n                'Uploading ' + info.file.name + ' - ' +\n                   formatSize(currentProgress) + ' / ' +\n                   formatSize(info.total)\n            );\n        }, this).on('g:upload.error', function (info) {\n            events.trigger('g:alert', {\n                type: 'danger',\n                text: info.message,\n                icon: 'cancel',\n                timeout: 5000\n            });\n            this.$('.g-upload-overlay').addClass('hide');\n            this.$('.g-markdown-text').girderEnable(true);\n        }, this).on('g:upload.errorStarting', function (info) {\n            events.trigger('g:alert', {\n                type: 'danger',\n                text: info.message,\n                icon: 'cancel',\n                timeout: 5000\n            });\n            this.$('.g-upload-overlay').addClass('hide');\n            this.$('.g-markdown-text').girderEnable(true);\n        }, this).upload(this.parent, file);\n\n        this.$('.g-upload-overlay').removeClass('hide');\n        this.$('.g-markdown-text').girderEnable(false);\n    },\n\n    /**\n     * Validate a selection of files. If invalid, throws an object containing\n     * a \"message\" field.\n     */\n    validateFiles: function (files) {\n        files = files || this.files;\n\n        if (this.files.length !== 1) {\n            throw new Error('Please add only one file at a time.');\n        }\n\n        var file = files[0],\n            ext = file.name.split('.').pop().toLowerCase();\n\n        if (this.maxUploadSize && file.size > this.maxUploadSize) {\n            throw new Error(\n                'That file is too large. You may only attach files ' +\n                'up to ' + formatSize(this.maxUploadSize) + '.'\n            );\n        }\n\n        if (this.allowedExtensions && !_.contains(this.allowedExtensions, ext)) {\n            throw new Error(\n                'Only files with the following extensions are allowed: ' +\n                this.allowedExtensions.join(', ') + '.'\n            );\n        }\n    },\n\n    render: function () {\n        this.$el.html(MarkdownWidgetTemplate({\n            text: this.text,\n            placeholder: this.placeholder,\n            prefix: this.prefix,\n            enableUploads: this.enableUploads\n        }));\n\n        return this;\n    },\n\n    /**\n     * Get or set the current markdown text. Call with no arguments to return\n     * the current value, or call with one argument to set the value to that.\n     */\n    val: function () {\n        if (arguments.length) {\n            return this.$('.g-markdown-text').val(arguments[0]);\n        } else {\n            return this.$('.g-markdown-text').val();\n        }\n    },\n\n    /**\n     * Normally, calling render() on this widget will reset it to its initial text\n     * value. Call this to set the text value that should be shown on re-render\n     * to the current value of the text area.\n     */\n    saveText: function () {\n        this.text = this.val();\n    }\n});\n\nexport default MarkdownWidget;\n",".modal-dialog\n  .modal-content\n    form#g-collection-edit-form.modal-form(role=\"form\")\n      .modal-header\n        button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n        h4.modal-title\n          if (create)\n            | Create collection\n          else\n            | Edit collection\n      .modal-body\n        .form-group\n          label.control-label(for=\"g-name\") Name\n          input#g-name.input-sm.form-control(type=\"text\", placeholder=\"Enter collection name\")\n        .form-group\n          label.control-label Description (optional)\n          .g-description-editor-container\n        .g-validation-failed-message\n      .modal-footer\n        a.btn.btn-small.btn-default(data-dismiss=\"modal\") Cancel\n        button.g-save-collection.btn.btn-small.btn-primary(type=\"submit\")\n          if (create)\n            i.icon-plus-squared\n            | Create\n          else\n            i.icon-edit\n            | Save\n","import $ from 'jquery';\n\nimport CollectionModel from '@girder/core/models/CollectionModel';\nimport View from '@girder/core/views/View';\nimport MarkdownWidget from '@girder/core/views/widgets/MarkdownWidget';\nimport { handleClose, handleOpen } from '@girder/core/dialog';\n\nimport EditCollectionWidgetTemplate from '@girder/core/templates/widgets/editCollectionWidget.pug';\n\nimport '@girder/core/utilities/jquery/girderEnable';\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This widget is used to create a new collection or edit an existing one.\n */\nconst EditCollectionWidget = View.extend({\n    events: {\n        'submit #g-collection-edit-form': function (e) {\n            e.preventDefault();\n\n            const fields = {\n                name: this.$('#g-name').val(),\n                description: this.descriptionEditor.val()\n            };\n\n            this.descriptionEditor.saveText();\n            this.$('button.g-save-collection').girderEnable(false);\n            this.$('.g-validation-failed-message').text('');\n\n            this._saveCollection(fields)\n                .always(() => {\n                    this.$('button.g-save-collection').girderEnable(true);\n                })\n                .done(() => {\n                    this.$el.modal('hide');\n                })\n                .fail((err) => {\n                    this.$('.g-validation-failed-message').text(err.responseJSON.message);\n                    this.$('#g-' + err.responseJSON.field).trigger('focus');\n                });\n        }\n    },\n\n    initialize: function (settings) {\n        this.create = !settings.model;\n        this.model = settings.model || new CollectionModel();\n        this.descriptionEditor = new MarkdownWidget({\n            text: this.model ? this.model.get('description') : '',\n            prefix: 'collection-description',\n            placeholder: 'Enter a description',\n            enableUploads: false,\n            parentView: this\n        });\n    },\n\n    render: function () {\n        this.$el.html(EditCollectionWidgetTemplate({\n            create: this.create,\n            collection: this.model\n        }));\n        const modal = this.$el\n            .girderModal(this)\n            .on('shown.bs.modal', () => {\n                this.$('#g-name').trigger('focus');\n            })\n            .on('hidden.bs.modal', () => {\n                handleClose(this.create ? 'create' : 'edit');\n            })\n            .on('ready.girder.modal', () => {\n                if (!this.create) {\n                    this.$('#g-name').val(this.model.get('name'));\n                    this.$('#g-description').val(this.model.get('description'));\n                }\n            });\n        modal.trigger($.Event('ready.girder.modal', { relatedTarget: modal }));\n        this.descriptionEditor.setElement(this.$('.g-description-editor-container')).render();\n        this.$('#g-name').trigger('focus');\n\n        handleOpen(this.create ? 'create' : 'edit');\n\n        return this;\n    },\n\n    _saveCollection: function (fields) {\n        this.model.set(fields);\n        return this.model.save()\n            .done(() => {\n                this.trigger('g:saved', this.model);\n            });\n    }\n});\n\nexport default EditCollectionWidget;\n",".modal-dialog\n  .modal-content\n    form#g-folder-edit-form.modal-form(role=\"form\")\n      .modal-header\n        button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n        h4.modal-title\n          if (folder)\n            | Edit folder\n          else\n            | Create folder\n      .modal-body\n        .form-group\n          label.control-label(for=\"g-name\") Name\n          input#g-name.input-sm.form-control(type=\"text\", placeholder=\"Enter folder name\")\n        .form-group\n          label.control-label Description (optional)\n          .g-description-editor-container\n        .g-validation-failed-message\n      .modal-footer\n        a.btn.btn-small.btn-default(data-dismiss=\"modal\") Cancel\n        button.g-save-folder.btn.btn-small.btn-primary(type=\"submit\")\n          if (folder)\n            i.icon-edit\n            | Save\n          else\n            i.icon-plus-squared\n            | Create\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport FolderModel from '@girder/core/models/FolderModel';\nimport MarkdownWidget from '@girder/core/views/widgets/MarkdownWidget';\nimport View from '@girder/core/views/View';\nimport { handleClose, handleOpen } from '@girder/core/dialog';\n\nimport EditFolderWidgetTemplate from '@girder/core/templates/widgets/editFolderWidget.pug';\n\nimport '@girder/core/utilities/jquery/girderEnable';\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This widget is used to create a new folder or edit an existing one.\n */\nvar EditFolderWidget = View.extend({\n    events: {\n        'submit #g-folder-edit-form': function (e) {\n            e.preventDefault();\n            var fields = {\n                name: this.$('#g-name').val(),\n                description: this.descriptionEditor.val()\n            };\n\n            if (this.folder) {\n                this.updateFolder(fields);\n            } else {\n                this.createFolder(fields);\n            }\n\n            this.descriptionEditor.saveText();\n            this.$('button.g-save-folder').girderEnable(false);\n            this.$('.g-validation-failed-message').text('');\n        }\n    },\n\n    initialize: function (settings) {\n        this.folder = settings.folder || null;\n        this.parentModel = settings.parentModel;\n        this.descriptionEditor = new MarkdownWidget({\n            text: this.folder ? this.folder.get('description') : '',\n            prefix: 'folder-description',\n            placeholder: 'Enter a description',\n            parent: this.folder,\n            allowedExtensions: ['png', 'jpg', 'jpeg', 'gif'],\n            enableUploads: !!this.folder,\n            parentView: this\n        }).on('g:fileUploaded', function (args) {\n            this.trigger('g:fileUploaded', args);\n        }, this);\n    },\n\n    render: function () {\n        var modal = this.$el.html(EditFolderWidgetTemplate({\n            folder: this.folder\n        })).girderModal(this).on('shown.bs.modal', () => {\n            this.$('#g-name').trigger('focus');\n            if (this.folder) {\n                handleOpen('folderedit');\n            } else {\n                handleOpen('foldercreate');\n            }\n        }).on('hidden.bs.modal', () => {\n            if (this.create) {\n                handleClose('foldercreate');\n            } else {\n                handleClose('folderedit');\n            }\n        }).on('ready.girder.modal', () => {\n            if (this.folder) {\n                this.$('#g-name').val(this.folder.get('name'));\n                this.descriptionEditor.val(this.folder.get('description'));\n                this.create = false;\n            } else {\n                this.create = true;\n            }\n        });\n        modal.trigger($.Event('ready.girder.modal', { relatedTarget: modal }));\n        this.$('#g-name').trigger('focus');\n        this.descriptionEditor.setElement(\n            this.$('.g-description-editor-container')).render();\n\n        return this;\n    },\n\n    createFolder: function (fields) {\n        var folder = new FolderModel();\n        folder.set(_.extend(fields, {\n            parentType: this.parentModel.resourceName,\n            parentId: this.parentModel.get('_id')\n        }));\n        folder.on('g:saved', function () {\n            this.$el.modal('hide');\n            this.trigger('g:saved', folder);\n        }, this).on('g:error', function (err) {\n            this.$('.g-validation-failed-message').text(err.responseJSON.message);\n            this.$('button.g-save-folder').girderEnable(true);\n            this.$('#g-' + err.responseJSON.field).trigger('focus');\n        }, this).save();\n    },\n\n    updateFolder: function (fields) {\n        this.folder.set(fields);\n        this.folder.off().on('g:saved', function () {\n            this.$el.modal('hide');\n            this.trigger('g:saved', this.folder);\n        }, this).on('g:error', function (err) {\n            this.$('.g-validation-failed-message').text(err.responseJSON.message);\n            this.$('button.g-save-folder').girderEnable(true);\n            this.$('#g-' + err.responseJSON.field).trigger('focus');\n        }, this).save();\n    }\n});\n\nexport default EditFolderWidget;\n",".modal-dialog\n  .modal-content\n    form#g-item-edit-form.modal-form(role=\"form\")\n      .modal-header\n        button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n        h4.modal-title\n          if (item)\n            | Edit item\n          else\n            | Create item\n      .modal-body\n        .form-group\n          label.control-label(for=\"g-name\") Name\n          input#g-name.input-sm.form-control(type=\"text\", placeholder=\"Enter item name\")\n        .form-group\n          label.control-label Description (optional)\n          .g-description-editor-container\n        .g-validation-failed-message\n      .modal-footer\n        a.btn.btn-small.btn-default(data-dismiss=\"modal\") Cancel\n        button.g-save-item.btn.btn-small.btn-primary(type=\"submit\")\n          if (item)\n            i.icon-edit\n            | Save\n          else\n            i.icon-plus-squared\n            | Create\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport ItemModel from '@girder/core/models/ItemModel';\nimport MarkdownWidget from '@girder/core/views/widgets/MarkdownWidget';\nimport View from '@girder/core/views/View';\nimport { handleClose, handleOpen } from '@girder/core/dialog';\n\nimport EditItemWidgetTemplate from '@girder/core/templates/widgets/editItemWidget.pug';\n\nimport '@girder/core/utilities/jquery/girderEnable';\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This widget is used to create a new item or edit an existing one.\n */\nvar EditItemWidget = View.extend({\n    events: {\n        'submit #g-item-edit-form': function () {\n            var fields = {\n                name: this.$('#g-name').val(),\n                description: this.descriptionEditor.val()\n            };\n\n            if (this.item) {\n                this.updateItem(fields);\n            } else {\n                this.createItem(fields);\n            }\n\n            this.descriptionEditor.saveText();\n            this.$('button.g-save-item').girderEnable(false);\n            this.$('.g-validation-failed-message').empty();\n\n            return false;\n        }\n    },\n\n    initialize: function (settings) {\n        this.item = settings.item || null;\n        this.parentModel = settings.parentModel;\n        this.descriptionEditor = new MarkdownWidget({\n            text: this.item ? this.item.get('description') : '',\n            prefix: 'item-description',\n            placeholder: 'Enter a description',\n            enableUploads: false,\n            parentView: this\n        });\n    },\n\n    render: function () {\n        var modal = this.$el.html(EditItemWidgetTemplate({\n            item: this.item\n        })).girderModal(this).on('shown.bs.modal', () => {\n            this.$('#g-name').trigger('focus');\n            if (this.item) {\n                handleOpen('itemedit');\n            } else {\n                handleOpen('itemcreate');\n            }\n        }).on('hidden.bs.modal', () => {\n            if (this.create) {\n                handleClose('itemcreate');\n            } else {\n                handleClose('itemedit');\n            }\n        }).on('ready.girder.modal', () => {\n            if (this.item) {\n                this.$('#g-name').val(this.item.get('name'));\n                this.$('#g-description').val(this.item.get('description'));\n                this.create = false;\n            } else {\n                this.create = true;\n            }\n        });\n        modal.trigger($.Event('ready.girder.modal', { relatedTarget: modal }));\n        this.descriptionEditor.setElement(this.$('.g-description-editor-container')).render();\n\n        return this;\n    },\n\n    createItem: function (fields) {\n        var item = new ItemModel();\n        item.set(_.extend(fields, {\n            folderId: this.parentModel.get('_id')\n        }));\n        item.on('g:saved', function () {\n            this.$el.modal('hide');\n            this.trigger('g:saved', item);\n        }, this).on('g:error', function (err) {\n            this.$('.g-validation-failed-message').text(err.responseJSON.message);\n            this.$('button.g-save-item').girderEnable(true);\n            this.$('#g-' + err.responseJSON.field).trigger('focus');\n        }, this).save();\n    },\n\n    updateItem: function (fields) {\n        this.item.set(fields);\n        this.item.off().on('g:saved', function () {\n            this.$el.modal('hide');\n            this.trigger('g:saved', this.item);\n        }, this).on('g:error', function (err) {\n            this.$('.g-validation-failed-message').text(err.responseJSON.message);\n            this.$('button.g-save-item').girderEnable(true);\n            this.$('#g-' + err.responseJSON.field).trigger('focus');\n        }, this).save();\n    }\n});\n\nexport default EditItemWidget;\n","mixin dateInfo(intro, property)\n  .g-folder-info-line(property=property)\n    i.icon-clock\n    span= intro\n    span.g-bold-part= formatDate(folder.get(property), DATE_SECOND)\n\n.modal-dialog\n  .modal-content\n    .modal-header\n      button.close(data-dismiss=\"modal\", aria-hidden=\"true\") &times;\n      h4.modal-title Folder information\n      .g-dialog-subtitle\n        i.icon-folder\n        span= folder.name()\n    .modal-body\n      if folder.get('description')\n        .g-info-dialog-description.g-folder-description!= renderMarkdown(folder.get('description'))\n\n      .g-folder-info-lines\n        +dateInfo('Created ', 'created')\n        if folder.get('created') !== folder.get('updated')\n          +dateInfo('Last updated ', 'updated')\n\n        .g-folder-info-line(property=\"nItems\")\n          i.icon-doc-text-inv\n          span Contains\n          span.g-bold-part  #{folder.get('nItems')} items\n          span  totaling\n          span.g-bold-part  #{formatSize(folder.get('size'))}\n\n        .g-folder-info-line(property=\"nFolders\")\n          i.icon-folder\n          span Contains\n          span.g-bold-part  #{folder.get('nFolders')} subfolders\n\n        .g-folder-info-line(property=\"id\")\n          i.icon-share\n          span Unique ID:\n          span.g-bold-part  #{folder.id}\n\n    .modal-footer\n      a.btn.btn-small.btn-default(data-dismiss=\"modal\") Close\n","import View from '@girder/core/views/View';\nimport { formatDate, formatSize, DATE_SECOND, renderMarkdown } from '@girder/core/misc';\n\nimport FolderInfoDialogTemplate from '@girder/core/templates/widgets/folderInfoDialog.pug';\n\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This view shows a dialog container detailed folder information.\n */\nvar FolderInfoWidget = View.extend({\n    initialize: function () {\n        this.needToFetch = !this.model.has('nItems') || !this.model.has('nFolders');\n        if (this.needToFetch) {\n            this.model.once('g:fetched.details', function () {\n                this.needToFetch = false;\n                this.render();\n            }, this).fetch({ extraPath: 'details' });\n        }\n    },\n\n    render: function () {\n        if (this.needToFetch) {\n            return this;\n        }\n\n        this.$el.html(FolderInfoDialogTemplate({\n            folder: this.model,\n            formatDate: formatDate,\n            formatSize: formatSize,\n            renderMarkdown: renderMarkdown,\n            DATE_SECOND: DATE_SECOND\n        })).girderModal(this);\n\n        return this;\n    }\n});\n\nexport default FolderInfoWidget;\n","ul.g-folder-list\n  each folder in folders\n    li.g-folder-list-entry(public=(folder.get('public') ? 'true' : 'false'))\n      if checkboxes\n        input.g-list-checkbox(type=\"checkbox\", g-folder-cid=folder.cid)\n      a.g-folder-list-link(g-folder-cid=folder.cid, href=`#folder/${folder.id}`)\n        i.icon-folder\n        = folder.get('name')\n        i.icon-right-dir\n      .g-folder-privacy\n        if folder.get('public')\n          i.icon-globe\n          | Public\n        else\n          i.icon-lock\n          | Private\n  if hasMore\n    li.g-show-more\n      a.g-show-more-folders\n        i.icon-level-down\n        | Show more folders...\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport FolderCollection from '@girder/core/collections/FolderCollection';\nimport LoadingAnimation from '@girder/core/views/widgets/LoadingAnimation';\nimport View from '@girder/core/views/View';\n\nimport FolderListTemplate from '@girder/core/templates/widgets/folderList.pug';\n\n/**\n * This widget shows a list of folders under a given parent.\n * Initialize this with a \"parentType\" and \"parentId\" value, which will\n * be passed to the folder GET endpoint.\n */\nvar FolderListWidget = View.extend({\n    events: {\n        'click a.g-folder-list-link': function (event) {\n            event.preventDefault();\n            var cid = $(event.currentTarget).attr('g-folder-cid');\n            this.trigger('g:folderClicked', this.collection.get(cid));\n        },\n        'click a.g-show-more-folders': function () {\n            this.collection.fetchNextPage();\n        },\n        'change .g-list-checkbox': function (event) {\n            const target = $(event.currentTarget);\n            const cid = target.attr('g-folder-cid');\n            if (target.prop('checked')) {\n                if (!this.checked.includes(cid)) {\n                    this.checked.push(cid);\n                }\n            } else {\n                const idx = this.checked.indexOf(cid);\n                if (idx !== -1) {\n                    this.checked.splice(idx, 1);\n                }\n            }\n            this.trigger('g:checkboxesChanged');\n        }\n    },\n\n    initialize: function (settings) {\n        this.checked = [];\n        this._checkboxes = settings.checkboxes;\n\n        new LoadingAnimation({\n            el: this.$el,\n            parentView: this\n        }).render();\n\n        this.collection = new FolderCollection();\n        this.collection.append = true; // Append, don't replace pages\n        this.collection.filterFunc = settings.folderFilter;\n\n        this.collection.on('g:changed', function () {\n            this.render();\n            this.trigger('g:changed');\n        }, this).fetch({\n            parentType: settings.parentType || 'folder',\n            parentId: settings.parentId\n        });\n    },\n\n    render: function () {\n        this.checked = [];\n        this.$el.html(FolderListTemplate({\n            folders: this.collection.toArray(),\n            hasMore: this.collection.hasNextPage(),\n            checkboxes: this._checkboxes\n        }));\n        return this;\n    },\n\n    /**\n     * Insert a folder into the collection and re-render it.\n     */\n    insertFolder: function (folder) {\n        this.collection.add(folder);\n        this.trigger('g:changed');\n        this.render();\n    },\n\n    /**\n     * Set all folder checkboxes to a certain checked state. The event\n     * g:checkboxesChanged is triggered once after checking/unchecking everything.\n     * @param {bool} checked The checked state.\n     */\n    checkAll: function (checked) {\n        this.$('.g-list-checkbox').prop('checked', checked);\n\n        this.checked = [];\n        if (checked) {\n            this.collection.each(function (model) {\n                this.checked.push(model.cid);\n            }, this);\n        }\n\n        this.trigger('g:checkboxesChanged');\n    },\n\n    recomputeChecked: function () {\n        this.checked = _.map(this.$('.g-list-checkbox:checked'), function (checkbox) {\n            return $(checkbox).attr('g-folder-cid');\n        }, this);\n    }\n});\n\nexport default FolderListWidget;\n","ul.g-item-list\n  each item in items\n    li.g-item-list-entry(class=(highlightItem && item.id === selectedItemId ? 'g-selected' : ''), public=(isParentPublic ? 'true' : 'false'))\n      if checkboxes\n        input.g-list-checkbox(type=\"checkbox\", g-item-cid=item.cid)\n      if downloadLinks || viewLinks\n        a.g-item-list-link.g-right-border(g-item-cid=item.cid, href=`#item/${item.id}`)\n          i.icon-doc-text-inv\n          = item.name()\n      else\n        a.g-item-list-link(g-item-cid=item.cid, href='#item/' + item.id)\n          i.icon-doc-text-inv\n          = item.name()\n      if downloadLinks\n        a(title=\"Download item\", href=item.downloadUrl())\n          i.icon-download\n      if viewLinks\n        a.g-view-inline(title=\"View in browser\", target=\"_blank\", rel=\"noopener noreferrer\",\n            href=item.downloadUrl({contentDisposition: 'inline'}))\n          i.icon-eye\n      if showSizes\n        .g-item-size= formatSize(item.get('size'))\n  if (hasMore && !paginated)\n    li.g-show-more\n      a.g-show-more-items\n        i.icon-level-down\n        | Show more items...\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport ItemCollection from '@girder/core/collections/ItemCollection';\nimport LoadingAnimation from '@girder/core/views/widgets/LoadingAnimation';\nimport View from '@girder/core/views/View';\nimport { formatSize } from '@girder/core/misc';\nimport { restRequest } from '@girder/core/rest';\n\nimport ItemListTemplate from '@girder/core/templates/widgets/itemList.pug';\n\n/**\n * This widget shows a list of items under a given folder.\n */\nvar ItemListWidget = View.extend({\n    events: {\n        'click a.g-item-list-link': function (event) {\n            event.preventDefault();\n            var cid = $(event.currentTarget).attr('g-item-cid');\n            this.trigger('g:itemClicked', this.collection.get(cid), event);\n        },\n        'click a.g-show-more-items': function () {\n            this.collection.fetchNextPage();\n        },\n        'change .g-list-checkbox': function (event) {\n            const target = $(event.currentTarget);\n            const cid = target.attr('g-item-cid');\n            if (target.prop('checked')) {\n                if (!this.checked.includes(cid)) {\n                    this.checked.push(cid);\n                }\n            } else {\n                const idx = this.checked.indexOf(cid);\n                if (idx !== -1) {\n                    this.checked.splice(idx, 1);\n                }\n            }\n            this.trigger('g:checkboxesChanged');\n        }\n    },\n\n    initialize: function (settings) {\n        this.checked = [];\n        this._checkboxes = settings.checkboxes;\n        this._downloadLinks = (\n            _.has(settings, 'downloadLinks') ? settings.downloadLinks : true);\n        this._viewLinks = (\n            _.has(settings, 'viewLinks') ? settings.viewLinks : true);\n        this._showSizes = (\n            _.has(settings, 'showSizes') ? settings.showSizes : true);\n        this._highlightItem = (\n            _.has(settings, 'highlightItem') ? settings.highlightItem : false);\n        this._paginated = (\n            _.has(settings, 'paginated') ? settings.paginated : false);\n\n        this.accessLevel = settings.accessLevel;\n        this.public = settings.public;\n        this._selectedItem = settings.selectedItem;\n\n        new LoadingAnimation({\n            el: this.$el,\n            parentView: this\n        }).render();\n\n        this.collection = new ItemCollection();\n        this.collection.append = true; // Append, don't replace pages\n        this.collection.filterFunc = settings.itemFilter;\n        this.currentPage = 1; // By default we want to be on the first page\n\n        if (this._paginated) {\n            if (this.collection.filterFunc) {\n                console.warn('Pagination cannot be used with a filter function');\n                this._paginated = false;\n            } else {\n                // Override the default to prevent appending new pages\n                this.collection.append = false;\n            }\n        }\n\n        this.collection.fetch({ folderId: settings.folderId }).done(() => {\n            this._totalPages = Math.ceil(this.collection.getTotalCount() / this.collection.pageLimit);\n            if (this._paginated && this.collection.hasNextPage()) {\n                // Tells the parent container that the item is paginated so it can render the page selector\n                this.trigger('g:paginated');\n                // We need to get the position in the list for the selected item\n                if (this._selectedItem) {\n                    restRequest({\n                        url: `item/${this._selectedItem.get('_id')}/position`,\n                        method: 'GET',\n                        data: { folderId: this._selectedItem.get('folderId'), sort: 'name' }\n                    }).done((val) => {\n                        // Now we fetch the correct page for the position\n                        val = Number(val);\n                        if (val >= this.collection.pageLimit) {\n                            const pageLimit = this.collection.pageLimit;\n                            const calculatedPage = 1 + Math.ceil((val - (val % pageLimit)) / pageLimit);\n                            return this.collection.fetchPage(calculatedPage - 1);\n                        }\n                    }).done(() => this.bindOnChanged());\n                } else {\n                    this.bindOnChanged();\n                }\n            } else {\n                this.bindOnChanged();\n            }\n        });\n    },\n\n    /**\n     * Binds the change function to the collection and calls it initially to update the render\n     */\n    bindOnChanged: function () {\n        this.collection.on('g:changed', this.changedFunc, this);\n        this.changedFunc();\n    },\n    /**\n     * Function that causes a render each time the collection is changed\n     * Will also update the current page in a paginated system\n     */\n    changedFunc: function () {\n        if (this.accessLevel !== undefined) {\n            this.collection.each((model) => {\n                model.set('_accessLevel', this.accessLevel);\n            });\n        }\n        if (this._paginated) {\n            this.currentPage = this.collection.pageNum() + 1;\n        }\n        this.render();\n        this.trigger('g:changed');\n    },\n\n    render: function () {\n        this.checked = [];\n        // If we set a selected item in the beginning we will center the selection while loading\n        if (this._selectedItem && this._highlightItem) {\n            this.scrollPositionObserver();\n        }\n\n        this.$el.html(ItemListTemplate({\n            items: this.collection.toArray(),\n            isParentPublic: this.public,\n            hasMore: this.collection.hasNextPage(),\n            formatSize: formatSize,\n            checkboxes: this._checkboxes,\n            downloadLinks: this._downloadLinks,\n            viewLinks: this._viewLinks,\n            showSizes: this._showSizes,\n            highlightItem: this._highlightItem,\n            selectedItemId: (this._selectedItem || {}).id,\n            paginated: this._paginated\n\n        }));\n\n        return this;\n    },\n\n    /**\n     * @returns {number} the number of pages in the itemList for use in a paginated view\n     */\n    getNumPages() {\n        return this._totalPages || 1;\n    },\n    /**\n     * @returns {number} the current page for paginated lists, defaults to 1 if none is provided\n     */\n    getCurrentPage() {\n        return this.currentPage || 1;\n    },\n    /**\n     * Externally facing function to allow hierarchyWidget and others to set the current page if the item is paginated\n     * @param {Number} page 1 index integer specifying the page to fetch\n     */\n    setPage(page) {\n        if (this._paginated && this.collection && this.collection.fetchPage) {\n            this.currentPage = page;\n            return this.collection.fetchPage(page - 1).then(() =>\n                this.$el.parents('.g-hierarchy-widget-container').scrollTop(0));\n        }\n    },\n    /**\n     * Insert an item into the collection and re-render it.\n     */\n    insertItem: function (item) {\n        if (this.accessLevel !== undefined) {\n            item.set('_accessLevel', this.accessLevel);\n        }\n        this.collection.add(item);\n        this.trigger('g:changed');\n        this.render();\n    },\n\n    /**\n     * Set all item checkboxes to a certain checked state. The event\n     * g:checkboxesChanged is triggered once after checking/unchecking everything.\n     * @param {bool} checked The checked state.\n     */\n    checkAll: function (checked) {\n        this.$('.g-list-checkbox').prop('checked', checked);\n\n        this.checked = [];\n        if (checked) {\n            this.collection.each(function (model) {\n                this.checked.push(model.cid);\n            }, this);\n        }\n\n        this.trigger('g:checkboxesChanged');\n    },\n\n    /**\n     * Select (highlight) an item in the list.\n     * @param item An ItemModel instance representing the item to select.\n     */\n    selectItem: function (item) {\n        this.$('li.g-item-list-entry').removeClass('g-selected');\n        this.$('a.g-item-list-link[g-item-cid=' + item.cid + ']')\n            .parents('li.g-item-list-entry').addClass('g-selected');\n    },\n\n    /**\n     * Return the currently selected item, or null if there is no selected item.\n     */\n    getSelectedItem: function () {\n        var el = this.$('li.g-item-list-entry.g-selected');\n        if (!el.length) {\n            return null;\n        }\n        var cid = $('.g-item-list-link', $(el[0])).attr('g-item-cid');\n        return this.collection.get(cid);\n    },\n\n    recomputeChecked: function () {\n        this.checked = _.map(this.$('.g-list-checkbox:checked'), function (checkbox) {\n            return $(checkbox).attr('g-item-cid');\n        }, this);\n    },\n\n    centerSelected: function () {\n        const widgetcontainer = this.$el.parents('.g-hierarchy-widget-container');\n        const selected = this.$('li.g-item-list-entry.g-selected');\n        if (widgetcontainer.length > 0 && selected.length > 0) {\n            // These items will effect the scroll position if they exists\n            const folderHeight  = $('.g-folder-list').length ? $('.g-folder-list').height() : 0;\n            const breadcrumbHeight = $('.g-hierarchy-breadcrumb-bar').length ? $('.g-hierarchy-breadcrumb-bar').height() : 0;\n            const selectedTop = selected.position().top;\n            // The selectedTop position needs to account for the breadcrumbHeight and the folderHeight\n            const scrollingPos = selectedTop + folderHeight + breadcrumbHeight;\n            const centerPos = (widgetcontainer.height() / 2.0) - (folderHeight / 2.0) - (breadcrumbHeight / 2.0) - (selected.outerHeight() / 2.0);\n\n            const scrollPos = scrollingPos - centerPos;\n            if (this.tempScrollPos === undefined) {\n                this.tempScrollPos = scrollPos;\n            }\n            // Call a custom scroll event to prevent thinking the user initiated it\n            const e = new CustomEvent('scroll', { detail: 'selected_item_scroll' });\n            widgetcontainer[0].scrollTop = scrollPos;\n            widgetcontainer[0].dispatchEvent(e);\n        }\n    },\n    /**\n     * This will look at the position of the selected item and update it as images load and\n     * the DOM reflows\n     */\n    scrollPositionObserver: function () {\n        // Set the default selected height for the selected item\n        const target = this.$('.g-item-list');\n        if (window.MutationObserver && target.length > 0) {\n            // Default items to monitor for the scroll position\n            const widgetcontainer = this.$el.parents('.g-hierarchy-widget-container');\n            // If the observer already exists disconnect it so it can be recreated\n            if (this.observer && this.observer.disconnect) {\n                this.observer.disconnect();\n            }\n\n            // Event handler for loading images declared once\n            const onLoadImage = () => {\n                if (this.observer) {\n                    this.centerSelected();\n                }\n            };\n\n            this.observer = new MutationObserver((mutations) => {\n                // for every mutation\n                _.each(mutations, (mutation) => {\n                    // If no nodes are added we can return\n                    if (!mutation.addedNodes) {\n                        return;\n                    }\n\n                    // for every added node\n                    _.each(mutation.addedNodes, (node) => {\n                        if (node.className && node.className.indexOf('g-item-list') !== -1) {\n                            // We want to do a onetime scroll to position if the screen is idle\n                            if (window.requestIdleCallback) {\n                                // Processing time is 2 seconds, but should finish much faster\n                                requestIdleCallback(() => {\n                                    this.centerSelected();\n                                }, { timeout: 2000 });\n                            } else {\n                                this.centerSelected();\n                            }\n                        }\n\n                        // For any images added we wait until loaded and rescroll to the selected\n                        if (_.isFunction(node.getElementsByTagName)) {\n                            this.$('img', node).on('load', onLoadImage);\n                        }\n                    });\n                });\n            });\n\n            // bind mutation observer to a specific element (probably a div somewhere)\n            this.observer.observe(target.parent()[0], { childList: true, subtree: true });\n\n            // Remove event listeners and disconnect observer\n            const unbindDisconnect = () => {\n                if (this.observer) {\n                    widgetcontainer.unbind('scroll.observerscroll');\n                    widgetcontainer.unbind('wheel.observerscroll');\n                    widgetcontainer.unbind('click.observerscroll');\n                    this.observer.disconnect();\n                    this.observer = null;\n                    this.tempScrollPos = undefined;\n                    // Prevents scrolling when user clicks 'show more...'\n                    this._highlightItem = false;\n                }\n            };\n\n            // Add in scroll event to monitor the scrollPos to prevent unnecessary updates and also kill observer when user scrolls\n            widgetcontainer.bind('scroll.observerscroll', (evt) => {\n                if (this.tempScrollPos !== undefined && this.tempScrollPos !== widgetcontainer[0].scrollTop) {\n                    this.tempScrollPos = widgetcontainer[0].scrollTop;\n                    // If the event detail is not 'selected_item_scroll' the scroll should be a user initiated scroll\n                    if (evt.detail !== 'selected_item_scroll') {\n                        unbindDisconnect();\n                    }\n                }\n            });\n            // Backup function to kill observer if user clicks an item, moves scrollwheel, or touchpad equivalent\n            widgetcontainer.bind('wheel.selectionobserver', unbindDisconnect);\n            widgetcontainer.bind('click.selectionobserver', unbindDisconnect);\n        }\n    }\n});\n\nexport default ItemListWidget;\n","input.input-sm.form-control.g-widget-metadata-key-input(type=\"text\", value=key, placeholder=\"Key\")\n\n.g-json-editor\n\nbutton.btn.btn-sm.btn-warning.g-widget-metadata-cancel-button(title=\"Cancel\")\n  i.icon-cancel\nbutton.btn.btn-sm.btn-primary.g-widget-metadata-save-button(title=\"Accept\")\n  i.icon-ok\nif !newDatum\n  button.btn.btn-sm.btn-primary.g-widget-metadata-toggle-button(title=\"Convert to Simple\")\n    i.icon-cog\n  button.btn.btn-sm.btn-danger.g-widget-metadata-delete-button(title=\"Delete\")\n    i.icon-trash\n","if (accessLevel >= AccessType.WRITE)\n  button.btn.btn-sm.btn-default.g-widget-metadata-edit-button\n    i.icon-pencil\nspan.g-widget-metadata-key #{key}\nspan.g-widget-metadata-value\n  pre #{value}\n","if (accessLevel >= AccessType.WRITE)\n  .btn-group.pull-right\n    button.g-widget-metadata-add-button.btn.btn-sm.btn-primary.btn-default.dropdown-toggle(data-toggle=\"dropdown\", title=\"Add Metadata\")\n      i.icon-plus\n    ul.dropdown-menu.pull-right(role=\"menu\")\n      li(role=\"presentation\")\n        a.g-add-simple-metadata(role=\"menuitem\")\n          | Simple\n      li(role=\"presentation\")\n        a.g-add-json-metadata\n          | JSON\n\n.g-widget-metadata-header\n  i.icon-tags\n  |  #{title}\n.g-widget-metadata-container\n","input.input-sm.form-control.g-widget-metadata-key-input(type=\"text\", value=key, placeholder=\"Key\")\n\n- var rows = value.length <= 40 ? 1 : (value.length <= 100 ? 3 : 5)\ntextarea.input-sm.form-control.g-widget-metadata-value-input(placeholder=\"Value\", rows=rows)\n  = value\n\nbutton.btn.btn-sm.btn-warning.g-widget-metadata-cancel-button(title=\"Cancel\")\n  i.icon-cancel\nbutton.btn.btn-sm.btn-primary.g-widget-metadata-save-button(title=\"Accept\")\n  i.icon-ok\nif !newDatum\n  button.btn.btn-sm.btn-primary.g-widget-metadata-toggle-button(title=\"Convert to JSON\")\n    i.icon-cog\n  button.btn.btn-sm.btn-danger.g-widget-metadata-delete-button(title=\"Delete\")\n    i.icon-trash\n","if (accessLevel >= AccessType.WRITE)\n  button.btn.btn-sm.btn-default.g-widget-metadata-edit-button\n    i.icon-pencil\nspan.g-widget-metadata-key #{key}\nspan.g-widget-metadata-value #{value}\n","/*!\n * jsoneditor.js\n *\n * @brief\n * JSONEditor is a web-based tool to view, edit, format, and validate JSON.\n * It has various modes such as a tree editor, a code editor, and a plain text\n * editor.\n *\n * Supported browsers: Chrome, Firefox, Safari, Edge\n *\n * @license\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy\n * 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, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n *\n * Copyright (c) 2011-2026 Jos de Jong, http://jsoneditoronline.org\n *\n * @author  Jos de Jong, <wjosdejong@gmail.com>\n * @version 10.4.3\n * @date    2026-04-01\n */\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSONEditor\"] = factory();\n\telse\n\t\troot[\"JSONEditor\"] = factory();\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 6545:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   t: function() { return /* binding */ ContextMenu; }\n/* harmony export */ });\n/* harmony import */ var _createAbsoluteAnchor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1925);\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6237);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3057);\n\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n/**\n * A context menu\n * @param {Object[]} items    Array containing the menu structure\n *                            TODO: describe structure\n * @param {Object} [options]  Object with options. Available options:\n *                            {function} close        Callback called when the\n *                                                    context menu is being closed.\n *                            {boolean} limitHeight   Whether ContextMenu height should be\n *                                                    limited or not.\n * @constructor\n */\nvar ContextMenu = /*#__PURE__*/function () {\n  function ContextMenu(items, options) {\n    _classCallCheck(this, ContextMenu);\n    this.dom = {};\n    var me = this;\n    var dom = this.dom;\n    this.anchor = undefined;\n    this.items = items;\n    this.eventListeners = {};\n    this.selection = undefined; // holds the selection before the menu was opened\n    this.onClose = options ? options.close : undefined;\n    this.limitHeight = options ? options.limitHeight : false;\n\n    // create root element\n    var root = document.createElement('div');\n    root.className = 'jsoneditor-contextmenu-root';\n    dom.root = root;\n\n    // create a container element\n    var menu = document.createElement('div');\n    menu.className = 'jsoneditor-contextmenu';\n    dom.menu = menu;\n    root.appendChild(menu);\n\n    // create a list to hold the menu items\n    var list = document.createElement('ul');\n    list.className = 'jsoneditor-menu';\n    menu.appendChild(list);\n    dom.list = list;\n    dom.items = []; // list with all buttons\n\n    // create a (non-visible) button to set the focus to the menu\n    var focusButton = document.createElement('button');\n    focusButton.type = 'button';\n    dom.focusButton = focusButton;\n    var li = document.createElement('li');\n    li.style.overflow = 'hidden';\n    li.style.height = '0';\n    li.appendChild(focusButton);\n    list.appendChild(li);\n    function createMenuItems(list, domItems, items) {\n      items.forEach(function (item) {\n        if (item.type === 'separator') {\n          // create a separator\n          var separator = document.createElement('div');\n          separator.className = 'jsoneditor-separator';\n          var _li = document.createElement('li');\n          _li.appendChild(separator);\n          list.appendChild(_li);\n        } else {\n          var domItem = {};\n\n          // create a menu item\n          var _li2 = document.createElement('li');\n          list.appendChild(_li2);\n\n          // create a button in the menu item\n          var button = document.createElement('button');\n          button.type = 'button';\n          button.className = item.className;\n          domItem.button = button;\n          if (item.title) {\n            button.title = item.title;\n          }\n          if (item.click) {\n            button.onclick = function (event) {\n              event.preventDefault();\n              me.hide();\n              item.click();\n            };\n          }\n          _li2.appendChild(button);\n\n          // create the contents of the button\n          if (item.submenu) {\n            // add the icon to the button\n            var divIcon = document.createElement('div');\n            divIcon.className = 'jsoneditor-icon';\n            button.appendChild(divIcon);\n            var divText = document.createElement('div');\n            divText.className = 'jsoneditor-text' + (item.click ? '' : ' jsoneditor-right-margin');\n            divText.appendChild(document.createTextNode(item.text));\n            button.appendChild(divText);\n            var buttonSubmenu;\n            if (item.click) {\n              // submenu and a button with a click handler\n              button.className += ' jsoneditor-default';\n              var buttonExpand = document.createElement('button');\n              buttonExpand.type = 'button';\n              domItem.buttonExpand = buttonExpand;\n              buttonExpand.className = 'jsoneditor-expand';\n              var buttonExpandInner = document.createElement('div');\n              buttonExpandInner.className = 'jsoneditor-expand';\n              buttonExpand.appendChild(buttonExpandInner);\n              _li2.appendChild(buttonExpand);\n              if (item.submenuTitle) {\n                buttonExpand.title = item.submenuTitle;\n              }\n              buttonSubmenu = buttonExpand;\n            } else {\n              // submenu and a button without a click handler\n              var divExpand = document.createElement('div');\n              divExpand.className = 'jsoneditor-expand';\n              button.appendChild(divExpand);\n              buttonSubmenu = button;\n            }\n\n            // attach a handler to expand/collapse the submenu\n            buttonSubmenu.onclick = function (event) {\n              event.preventDefault();\n              me._onExpandItem(domItem);\n              buttonSubmenu.focus();\n            };\n\n            // create the submenu\n            var domSubItems = [];\n            domItem.subItems = domSubItems;\n            var ul = document.createElement('ul');\n            domItem.ul = ul;\n            ul.className = 'jsoneditor-menu';\n            ul.style.height = '0';\n            _li2.appendChild(ul);\n            createMenuItems(ul, domSubItems, item.submenu);\n          } else {\n            // no submenu, just a button with clickhandler\n            var icon = document.createElement('div');\n            icon.className = 'jsoneditor-icon';\n            button.appendChild(icon);\n            var text = document.createElement('div');\n            text.className = 'jsoneditor-text';\n            text.appendChild(document.createTextNode((0,_i18n__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .Tl)(item.text)));\n            button.appendChild(text);\n          }\n          domItems.push(domItem);\n        }\n      });\n    }\n    createMenuItems(list, this.dom.items, items);\n\n    // TODO: when the editor is small, show the submenu on the right instead of inline?\n\n    // calculate the max height of the menu with one submenu expanded\n    this.maxHeight = 0; // height in pixels\n    items.forEach(function (item) {\n      var height = (items.length + (item.submenu ? item.submenu.length : 0)) * 24;\n      me.maxHeight = Math.max(me.maxHeight, height);\n    });\n  }\n\n  /**\n   * Get the currently visible buttons\n   * @return {Array.<HTMLElement>} buttons\n   * @private\n   */\n  return _createClass(ContextMenu, [{\n    key: \"_getVisibleButtons\",\n    value: function _getVisibleButtons() {\n      var buttons = [];\n      var me = this;\n      this.dom.items.forEach(function (item) {\n        buttons.push(item.button);\n        if (item.buttonExpand) {\n          buttons.push(item.buttonExpand);\n        }\n        if (item.subItems && item === me.expandedItem) {\n          item.subItems.forEach(function (subItem) {\n            buttons.push(subItem.button);\n            if (subItem.buttonExpand) {\n              buttons.push(subItem.buttonExpand);\n            }\n            // TODO: change to fully recursive method\n          });\n        }\n      });\n      return buttons;\n    }\n\n    /**\n     * Attach the menu to an anchor\n     * @param {HTMLElement} anchor    Anchor where the menu will be attached as sibling.\n     * @param {HTMLElement} frame     The root of the JSONEditor window\n     * @param {Boolean=} ignoreParent ignore anchor parent in regard to the calculation of the position, needed when the parent position is absolute\n     */\n  }, {\n    key: \"show\",\n    value: function show(anchor, frame, ignoreParent) {\n      this.hide();\n\n      // determine whether to display the menu below or above the anchor\n      var showBelow = true;\n      var parent = anchor.parentNode;\n      var anchorRect = anchor.getBoundingClientRect();\n      var parentRect = parent.getBoundingClientRect();\n      var frameRect = frame.getBoundingClientRect();\n      var me = this;\n      this.dom.absoluteAnchor = (0,_createAbsoluteAnchor__WEBPACK_IMPORTED_MODULE_0__/* .createAbsoluteAnchor */ .p)(anchor, frame, function () {\n        me.hide();\n      });\n      if (anchorRect.bottom + this.maxHeight < frameRect.bottom) {\n        // fits below -> show below\n      } else if (anchorRect.top - this.maxHeight > frameRect.top) {\n        // fits above -> show above\n        showBelow = false;\n      } else {\n        // doesn't fit above nor below -> show below\n      }\n      var topGap = ignoreParent ? 0 : anchorRect.top - parentRect.top;\n\n      // position the menu\n      if (showBelow) {\n        // display the menu below the anchor\n        var anchorHeight = anchor.offsetHeight;\n        this.dom.menu.style.left = '0';\n        this.dom.menu.style.top = topGap + anchorHeight + 'px';\n        this.dom.menu.style.bottom = '';\n      } else {\n        // display the menu above the anchor\n        this.dom.menu.style.left = '0';\n        this.dom.menu.style.top = '';\n        this.dom.menu.style.bottom = '0px';\n      }\n      if (this.limitHeight) {\n        var margin = 10; // make sure there is a little margin left\n        var maxPossibleMenuHeight = showBelow ? frameRect.bottom - anchorRect.bottom - margin : anchorRect.top - frameRect.top - margin;\n        this.dom.list.style.maxHeight = maxPossibleMenuHeight + 'px';\n        this.dom.list.style.overflowY = 'auto';\n      }\n\n      // attach the menu to the temporary, absolute anchor\n      // parent.insertBefore(this.dom.root, anchor);\n      this.dom.absoluteAnchor.appendChild(this.dom.root);\n\n      // move focus to the first button in the context menu\n      this.selection = (0,_util__WEBPACK_IMPORTED_MODULE_1__.getSelection)();\n      this.anchor = anchor;\n      setTimeout(function () {\n        me.dom.focusButton.focus();\n      }, 0);\n      if (ContextMenu.visibleMenu) {\n        ContextMenu.visibleMenu.hide();\n      }\n      ContextMenu.visibleMenu = this;\n    }\n\n    /**\n     * Hide the context menu if visible\n     */\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      // remove temporary absolutely positioned anchor\n      if (this.dom.absoluteAnchor) {\n        this.dom.absoluteAnchor.destroy();\n        delete this.dom.absoluteAnchor;\n      }\n\n      // remove the menu from the DOM\n      if (this.dom.root.parentNode) {\n        this.dom.root.parentNode.removeChild(this.dom.root);\n        if (this.onClose) {\n          this.onClose();\n        }\n      }\n      if (ContextMenu.visibleMenu === this) {\n        ContextMenu.visibleMenu = undefined;\n      }\n    }\n\n    /**\n     * Expand a submenu\n     * Any currently expanded submenu will be hided.\n     * @param {Object} domItem\n     * @private\n     */\n  }, {\n    key: \"_onExpandItem\",\n    value: function _onExpandItem(domItem) {\n      var me = this;\n      var alreadyVisible = domItem === this.expandedItem;\n\n      // hide the currently visible submenu\n      var expandedItem = this.expandedItem;\n      if (expandedItem) {\n        // var ul = expandedItem.ul;\n        expandedItem.ul.style.height = '0';\n        expandedItem.ul.style.padding = '';\n        setTimeout(function () {\n          if (me.expandedItem !== expandedItem) {\n            expandedItem.ul.style.display = '';\n            (0,_util__WEBPACK_IMPORTED_MODULE_1__.removeClassName)(expandedItem.ul.parentNode, 'jsoneditor-selected');\n          }\n        }, 300); // timeout duration must match the css transition duration\n        this.expandedItem = undefined;\n      }\n      if (!alreadyVisible) {\n        var ul = domItem.ul;\n        ul.style.display = 'block';\n        // eslint-disable-next-line no-unused-expressions\n        ul.clientHeight; // force a reflow in Firefox\n        setTimeout(function () {\n          if (me.expandedItem === domItem) {\n            var childsHeight = 0;\n            for (var i = 0; i < ul.childNodes.length; i++) {\n              childsHeight += ul.childNodes[i].clientHeight;\n            }\n            ul.style.height = childsHeight + 'px';\n            ul.style.padding = '5px 10px';\n          }\n        }, 0);\n        (0,_util__WEBPACK_IMPORTED_MODULE_1__.addClassName)(ul.parentNode, 'jsoneditor-selected');\n        this.expandedItem = domItem;\n      }\n    }\n\n    /**\n     * Handle onkeydown event\n     * @param {Event} event\n     * @private\n     */\n  }, {\n    key: \"_onKeyDown\",\n    value: function _onKeyDown(event) {\n      var target = event.target;\n      var keynum = event.which;\n      var handled = false;\n      var buttons, targetIndex, prevButton, nextButton;\n      if (keynum === 27) {\n        // ESC\n        // hide the menu on ESC key\n\n        // restore previous selection and focus\n        if (this.selection) {\n          (0,_util__WEBPACK_IMPORTED_MODULE_1__.setSelection)(this.selection);\n        }\n        if (this.anchor) {\n          this.anchor.focus();\n        }\n        this.hide();\n        handled = true;\n      } else if (keynum === 9) {\n        // Tab\n        if (!event.shiftKey) {\n          // Tab\n          buttons = this._getVisibleButtons();\n          targetIndex = buttons.indexOf(target);\n          if (targetIndex === buttons.length - 1) {\n            // move to first button\n            buttons[0].focus();\n            handled = true;\n          }\n        } else {\n          // Shift+Tab\n          buttons = this._getVisibleButtons();\n          targetIndex = buttons.indexOf(target);\n          if (targetIndex === 0) {\n            // move to last button\n            buttons[buttons.length - 1].focus();\n            handled = true;\n          }\n        }\n      } else if (keynum === 37) {\n        // Arrow Left\n        if (target.className === 'jsoneditor-expand') {\n          buttons = this._getVisibleButtons();\n          targetIndex = buttons.indexOf(target);\n          prevButton = buttons[targetIndex - 1];\n          if (prevButton) {\n            prevButton.focus();\n          }\n        }\n        handled = true;\n      } else if (keynum === 38) {\n        // Arrow Up\n        buttons = this._getVisibleButtons();\n        targetIndex = buttons.indexOf(target);\n        prevButton = buttons[targetIndex - 1];\n        if (prevButton && prevButton.className === 'jsoneditor-expand') {\n          // skip expand button\n          prevButton = buttons[targetIndex - 2];\n        }\n        if (!prevButton) {\n          // move to last button\n          prevButton = buttons[buttons.length - 1];\n        }\n        if (prevButton) {\n          prevButton.focus();\n        }\n        handled = true;\n      } else if (keynum === 39) {\n        // Arrow Right\n        buttons = this._getVisibleButtons();\n        targetIndex = buttons.indexOf(target);\n        nextButton = buttons[targetIndex + 1];\n        if (nextButton && nextButton.className === 'jsoneditor-expand') {\n          nextButton.focus();\n        }\n        handled = true;\n      } else if (keynum === 40) {\n        // Arrow Down\n        buttons = this._getVisibleButtons();\n        targetIndex = buttons.indexOf(target);\n        nextButton = buttons[targetIndex + 1];\n        if (nextButton && nextButton.className === 'jsoneditor-expand') {\n          // skip expand button\n          nextButton = buttons[targetIndex + 2];\n        }\n        if (!nextButton) {\n          // move to first button\n          nextButton = buttons[0];\n        }\n        if (nextButton) {\n          nextButton.focus();\n          handled = true;\n        }\n        handled = true;\n      }\n      // TODO: arrow left and right\n\n      if (handled) {\n        event.stopPropagation();\n        event.preventDefault();\n      }\n    }\n  }]);\n}();\n\n// currently displayed context menu, a singleton. We may only have one visible context menu\nContextMenu.visibleMenu = undefined;\n\n/***/ }),\n\n/***/ 2115:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   N: function() { return /* binding */ ErrorTable; }\n/* harmony export */ });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * Show errors and schema warnings in a clickable table view\n * @param {Object} config\n * @property {boolean} errorTableVisible\n * @property {function (boolean) : void} onToggleVisibility\n * @property {function (number)} [onFocusLine]\n * @property {function (number)} onChangeHeight\n * @constructor\n */\nvar ErrorTable = /*#__PURE__*/function () {\n  function ErrorTable(config) {\n    _classCallCheck(this, ErrorTable);\n    this.errorTableVisible = config.errorTableVisible;\n    this.onToggleVisibility = config.onToggleVisibility;\n    this.onFocusLine = config.onFocusLine || function () {};\n    this.onChangeHeight = config.onChangeHeight;\n    this.dom = {};\n    var validationErrorsContainer = document.createElement('div');\n    validationErrorsContainer.className = 'jsoneditor-validation-errors-container';\n    this.dom.validationErrorsContainer = validationErrorsContainer;\n    var additionalErrorsIndication = document.createElement('div');\n    additionalErrorsIndication.style.display = 'none';\n    additionalErrorsIndication.className = 'jsoneditor-additional-errors fadein';\n    additionalErrorsIndication.textContent = \"Scroll for more \\u25BF\";\n    this.dom.additionalErrorsIndication = additionalErrorsIndication;\n    validationErrorsContainer.appendChild(additionalErrorsIndication);\n    var validationErrorIcon = document.createElement('span');\n    validationErrorIcon.className = 'jsoneditor-validation-error-icon';\n    validationErrorIcon.style.display = 'none';\n    this.dom.validationErrorIcon = validationErrorIcon;\n    var validationErrorCount = document.createElement('span');\n    validationErrorCount.className = 'jsoneditor-validation-error-count';\n    validationErrorCount.style.display = 'none';\n    this.dom.validationErrorCount = validationErrorCount;\n    this.dom.parseErrorIndication = document.createElement('span');\n    this.dom.parseErrorIndication.className = 'jsoneditor-parse-error-icon';\n    this.dom.parseErrorIndication.style.display = 'none';\n  }\n  return _createClass(ErrorTable, [{\n    key: \"getErrorTable\",\n    value: function getErrorTable() {\n      return this.dom.validationErrorsContainer;\n    }\n  }, {\n    key: \"getErrorCounter\",\n    value: function getErrorCounter() {\n      return this.dom.validationErrorCount;\n    }\n  }, {\n    key: \"getWarningIcon\",\n    value: function getWarningIcon() {\n      return this.dom.validationErrorIcon;\n    }\n  }, {\n    key: \"getErrorIcon\",\n    value: function getErrorIcon() {\n      return this.dom.parseErrorIndication;\n    }\n  }, {\n    key: \"toggleTableVisibility\",\n    value: function toggleTableVisibility() {\n      this.errorTableVisible = !this.errorTableVisible;\n      this.onToggleVisibility(this.errorTableVisible);\n    }\n  }, {\n    key: \"setErrors\",\n    value: function setErrors(errors, errorLocations) {\n      var _this = this;\n      // clear any previous errors\n      if (this.dom.validationErrors) {\n        this.dom.validationErrors.parentNode.removeChild(this.dom.validationErrors);\n        this.dom.validationErrors = null;\n        this.dom.additionalErrorsIndication.style.display = 'none';\n      }\n\n      // create the table with errors\n      // keep default behavior for parse errors\n      if (this.errorTableVisible && errors.length > 0) {\n        var validationErrors = document.createElement('div');\n        validationErrors.className = 'jsoneditor-validation-errors';\n        var table = document.createElement('table');\n        table.className = 'jsoneditor-text-errors';\n        validationErrors.appendChild(table);\n        var tbody = document.createElement('tbody');\n        table.appendChild(tbody);\n        errors.forEach(function (error) {\n          var line;\n          if (!isNaN(error.line)) {\n            line = error.line;\n          } else if (error.dataPath) {\n            var errLoc = errorLocations.find(function (loc) {\n              return loc.path === error.dataPath;\n            });\n            if (errLoc) {\n              line = errLoc.line + 1;\n            }\n          }\n          var trEl = document.createElement('tr');\n          trEl.className = !isNaN(line) ? 'jump-to-line' : '';\n          if (error.type === 'error') {\n            trEl.className += ' parse-error';\n          } else {\n            trEl.className += ' validation-error';\n          }\n          var td1 = document.createElement('td');\n          var button = document.createElement('button');\n          button.className = 'jsoneditor-schema-error';\n          td1.appendChild(button);\n          trEl.appendChild(td1);\n          var td2 = document.createElement('td');\n          td2.style = 'white-space: nowrap;';\n          td2.textContent = !isNaN(line) ? 'Ln ' + line : '';\n          trEl.appendChild(td2);\n          if (typeof error === 'string') {\n            var td34 = document.createElement('td');\n            td34.colSpan = 2;\n            var pre = document.createElement('pre');\n            pre.appendChild(document.createTextNode(error));\n            td34.appendChild(pre);\n            trEl.appendChild(td34);\n          } else {\n            var td3 = document.createElement('td');\n            td3.appendChild(document.createTextNode(error.dataPath || ''));\n            trEl.appendChild(td3);\n            var td4 = document.createElement('td');\n            var _pre = document.createElement('pre');\n            _pre.appendChild(document.createTextNode(error.message.replace(/<br>/gi, '\\n')));\n            td4.appendChild(_pre);\n            trEl.appendChild(td4);\n          }\n          trEl.onclick = function () {\n            _this.onFocusLine(line);\n          };\n          tbody.appendChild(trEl);\n        });\n        this.dom.validationErrors = validationErrors;\n        this.dom.validationErrorsContainer.appendChild(validationErrors);\n        this.dom.additionalErrorsIndication.title = errors.length + ' errors total';\n        if (this.dom.validationErrorsContainer.clientHeight < this.dom.validationErrorsContainer.scrollHeight) {\n          this.dom.additionalErrorsIndication.style.display = 'block';\n          this.dom.validationErrorsContainer.onscroll = function () {\n            _this.dom.additionalErrorsIndication.style.display = _this.dom.validationErrorsContainer.clientHeight > 0 && _this.dom.validationErrorsContainer.scrollTop === 0 ? 'block' : 'none';\n          };\n        } else {\n          this.dom.validationErrorsContainer.onscroll = undefined;\n        }\n        var height = this.dom.validationErrorsContainer.clientHeight + (this.dom.statusBar ? this.dom.statusBar.clientHeight : 0);\n        // this.content.style.marginBottom = (-height) + 'px';\n        // this.content.style.paddingBottom = height + 'px';\n        this.onChangeHeight(height);\n      } else {\n        this.onChangeHeight(0);\n      }\n\n      // update the status bar\n      var validationErrorsCount = errors.filter(function (error) {\n        return error.type !== 'error';\n      }).length;\n      if (validationErrorsCount > 0) {\n        this.dom.validationErrorCount.style.display = 'inline';\n        this.dom.validationErrorCount.innerText = validationErrorsCount;\n        this.dom.validationErrorCount.onclick = this.toggleTableVisibility.bind(this);\n        this.dom.validationErrorIcon.style.display = 'inline';\n        this.dom.validationErrorIcon.title = validationErrorsCount + ' schema validation error(s) found';\n        this.dom.validationErrorIcon.onclick = this.toggleTableVisibility.bind(this);\n      } else {\n        this.dom.validationErrorCount.style.display = 'none';\n        this.dom.validationErrorIcon.style.display = 'none';\n      }\n\n      // update the parse error icon\n      var hasParseErrors = errors.some(function (error) {\n        return error.type === 'error';\n      });\n      if (hasParseErrors) {\n        var line = errors[0].line;\n        this.dom.parseErrorIndication.style.display = 'block';\n        this.dom.parseErrorIndication.title = !isNaN(line) ? 'parse error on line ' + line : 'parse error - check that the json is valid';\n        this.dom.parseErrorIndication.onclick = this.toggleTableVisibility.bind(this);\n      } else {\n        this.dom.parseErrorIndication.style.display = 'none';\n      }\n    }\n  }]);\n}();\n\n/***/ }),\n\n/***/ 2877:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   $: function() { return /* binding */ FocusTracker; }\n/* harmony export */ });\n\n\n/**\n * @constructor FocusTracker\n * A custom focus tracker for a DOM element with complex internal DOM structure\n * @param  {[Object]} config    A set of configurations for the FocusTracker\n *                {DOM Object} target *    The DOM object to track (required)\n *                {Function}   onFocus     onFocus callback\n *                {Function}   onBlur      onBlur callback\n *\n * @return\n */\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar FocusTracker = /*#__PURE__*/function () {\n  function FocusTracker(config) {\n    _classCallCheck(this, FocusTracker);\n    this.target = config.target || null;\n    if (!this.target) {\n      throw new Error('FocusTracker constructor called without a \"target\" to track.');\n    }\n    this.onFocus = typeof config.onFocus === 'function' ? config.onFocus : null;\n    this.onBlur = typeof config.onBlur === 'function' ? config.onBlur : null;\n    this._onClick = this._onEvent.bind(this);\n    this._onKeyUp = function (event) {\n      if (event.which === 9 || event.keyCode === 9) {\n        this._onEvent(event);\n      }\n    }.bind(this);\n    this._onBlur = this._onEvent.bind(this);\n    this.focusFlag = false;\n    this.firstEventFlag = true;\n\n    /*\n      Adds required (click and keyup) event listeners to the 'document' object\n      to track the focus of the given 'target'\n     */\n    if (this.onFocus || this.onBlur) {\n      document.addEventListener('click', this._onClick);\n      document.addEventListener('keyup', this._onKeyUp);\n      document.addEventListener('blur', this._onBlur);\n    }\n  }\n\n  /**\n     * Removes the event listeners on the 'document' object\n     * that were added to track the focus of the given 'target'\n     */\n  return _createClass(FocusTracker, [{\n    key: \"destroy\",\n    value: function destroy() {\n      document.removeEventListener('click', this._onClick);\n      document.removeEventListener('keyup', this._onKeyUp);\n      document.removeEventListener('blur', this._onBlur);\n      this._onEvent({\n        target: document.body\n      }); // calling _onEvent with body element in the hope that the FocusTracker is added to an element inside the body tag\n    }\n\n    /**\n       * Tracks the focus of the target and calls the onFocus and onBlur\n       * event callbacks if available.\n       * @param {Event} [event]  The 'click' or 'keyup' event object,\n       *                          from the respective events set on\n       *              document object\n       * @private\n       */\n  }, {\n    key: \"_onEvent\",\n    value: function _onEvent(event) {\n      var target = event.target;\n      var focusFlag;\n      if (target === this.target) {\n        focusFlag = true;\n      } else if (this.target.contains(target) || this.target.contains(document.activeElement)) {\n        focusFlag = true;\n      } else {\n        focusFlag = false;\n      }\n      if (focusFlag) {\n        if (!this.focusFlag) {\n          // trigger the onFocus callback\n          if (this.onFocus) {\n            this.onFocus({\n              type: 'focus',\n              target: this.target\n            });\n          }\n          this.focusFlag = true;\n        }\n      } else {\n        if (this.focusFlag || this.firstEventFlag) {\n          // trigger the onBlur callback\n          if (this.onBlur) {\n            this.onBlur({\n              type: 'blur',\n              target: this.target\n            });\n          }\n          this.focusFlag = false;\n\n          /*\n            When switching from one mode to another in the editor, the FocusTracker gets recreated.\n            At that time, this.focusFlag will be init to 'false' and will fail the above if condition, when blur occurs\n            this.firstEventFlag is added to overcome that issue\n           */\n          if (this.firstEventFlag) {\n            this.firstEventFlag = false;\n          }\n        }\n      }\n    }\n  }]);\n}();\n\n/***/ }),\n\n/***/ 1346:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar ace = __webpack_require__(7413); // may be undefined in case of minimalist bundle\nvar VanillaPicker = __webpack_require__(1746); // may be undefined in case of minimalist bundle\nvar _require = __webpack_require__(5633),\n  treeModeMixins = _require.treeModeMixins;\nvar _require2 = __webpack_require__(1948),\n  textModeMixins = _require2.textModeMixins;\nvar _require3 = __webpack_require__(7483),\n  previewModeMixins = _require3.previewModeMixins;\nvar _require4 = __webpack_require__(6237),\n  clear = _require4.clear,\n  extend = _require4.extend,\n  getInnerText = _require4.getInnerText,\n  getInternetExplorerVersion = _require4.getInternetExplorerVersion,\n  parse = _require4.parse;\nvar _require5 = __webpack_require__(2870),\n  tryRequireAjv = _require5.tryRequireAjv;\nvar _require6 = __webpack_require__(5609),\n  showTransformModal = _require6.showTransformModal;\nvar _require7 = __webpack_require__(2915),\n  showSortModal = _require7.showSortModal;\nvar Ajv = tryRequireAjv();\nif (typeof Promise === 'undefined') {\n  console.error('Promise undefined. Please load a Promise polyfill in the browser in order to use JSONEditor');\n}\n\n/**\n * @constructor JSONEditor\n * @param {Element} container    Container element\n * @param {Object}  [options]    Object with options. available options:\n *                               {String} mode        Editor mode. Available values:\n *                                                    'tree' (default), 'view',\n *                                                    'form', 'text', and 'code'.\n *                               {function} onChange  Callback method, triggered\n *                                                    on change of contents.\n *                                                    Does not pass the contents itself.\n *                                                    See also `onChangeJSON` and\n *                                                    `onChangeText`.\n *                               {function} onChangeJSON  Callback method, triggered\n *                                                        in modes on change of contents,\n *                                                        passing the changed contents\n *                                                        as JSON.\n *                                                        Only applicable for modes\n *                                                        'tree', 'view', and 'form'.\n *                               {function} onChangeText  Callback method, triggered\n *                                                        in modes on change of contents,\n *                                                        passing the changed contents\n *                                                        as stringified JSON.\n *                               {function} onError   Callback method, triggered\n *                                                    when an error occurs\n *                               {Boolean} search     Enable search box.\n *                                                    True by default\n *                                                    Only applicable for modes\n *                                                    'tree', 'view', and 'form'\n *                               {Boolean} history    Enable history (undo/redo).\n *                                                    True by default\n *                                                    Only applicable for modes\n *                                                    'tree', 'view', and 'form'\n *                               {String} name        Field name for the root node.\n *                                                    Only applicable for modes\n *                                                    'tree', 'view', and 'form'\n *                               {Number} indentation     Number of indentation\n *                                                        spaces. 4 by default.\n *                                                        Only applicable for\n *                                                        modes 'text' and 'code'\n *                               {boolean} escapeUnicode  If true, unicode\n *                                                        characters are escaped.\n *                                                        false by default.\n *                               {boolean} sortObjectKeys If true, object keys are\n *                                                        sorted before display.\n *                                                        false by default.\n *                               {function} onSelectionChange Callback method,\n *                                                            triggered on node selection change\n *                                                            Only applicable for modes\n *                                                            'tree', 'view', and 'form'\n *                               {function} onTextSelectionChange Callback method,\n *                                                                triggered on text selection change\n *                                                                Only applicable for modes\n *                               {HTMLElement} modalAnchor        The anchor element to apply an\n *                                                                overlay and display the modals in a\n *                                                                centered location.\n *                                                                Defaults to document.body\n *                                                                'text' and 'code'\n *                               {function} onEvent Callback method, triggered\n *                                                  when an event occurs in\n *                                                  a JSON field or value.\n *                                                  Only applicable for\n *                                                  modes 'form', 'tree' and\n *                                                  'view'\n *                               {function} onFocus  Callback method, triggered\n *                                                   when the editor comes into focus,\n *                                                   passing an object {type, target},\n *                                                   Applicable for all modes\n *                               {function} onBlur   Callback method, triggered\n *                                                   when the editor goes out of focus,\n *                                                   passing an object {type, target},\n *                                                   Applicable for all modes\n *                               {function} onClassName Callback method, triggered\n *                                                  when a Node DOM is rendered. Function returns\n *                                                  a css class name to be set on a node.\n *                                                  Only applicable for\n *                                                  modes 'form', 'tree' and\n *                                                  'view'\n *                               {Number} maxVisibleChilds Number of children allowed for a node\n *                                                         in 'tree', 'view', or 'form' mode before\n *                                                         the \"show more/show all\" buttons appear.\n *                                                         100 by default.\n *\n * @param {Object | undefined} json JSON object\n */\nfunction JSONEditor(container, options, json) {\n  if (!(this instanceof JSONEditor)) {\n    throw new Error('JSONEditor constructor called without \"new\".');\n  }\n\n  // check for unsupported browser (IE8 and older)\n  var ieVersion = getInternetExplorerVersion();\n  if (ieVersion !== -1 && ieVersion < 9) {\n    throw new Error('Unsupported browser, IE9 or newer required. ' + 'Please install the newest version of your browser.');\n  }\n  if (options) {\n    // check for deprecated options\n    if (options.error) {\n      console.warn('Option \"error\" has been renamed to \"onError\"');\n      options.onError = options.error;\n      delete options.error;\n    }\n    if (options.change) {\n      console.warn('Option \"change\" has been renamed to \"onChange\"');\n      options.onChange = options.change;\n      delete options.change;\n    }\n    if (options.editable) {\n      console.warn('Option \"editable\" has been renamed to \"onEditable\"');\n      options.onEditable = options.editable;\n      delete options.editable;\n    }\n\n    // warn if onChangeJSON is used when mode can be `text` or `code`\n    if (options.onChangeJSON) {\n      if (options.mode === 'text' || options.mode === 'code' || options.modes && (options.modes.indexOf('text') !== -1 || options.modes.indexOf('code') !== -1)) {\n        console.warn('Option \"onChangeJSON\" is not applicable to modes \"text\" and \"code\". ' + 'Use \"onChangeText\" or \"onChange\" instead.');\n      }\n    }\n\n    // validate options\n    if (options) {\n      Object.keys(options).forEach(function (option) {\n        if (JSONEditor.VALID_OPTIONS.indexOf(option) === -1) {\n          console.warn('Unknown option \"' + option + '\". This option will be ignored');\n        }\n      });\n    }\n  }\n  if (arguments.length) {\n    this._create(container, options, json);\n  }\n}\n\n/**\n * Configuration for all registered modes. Example:\n * {\n *     tree: {\n *         mixin: TreeEditor,\n *         data: 'json'\n *     },\n *     text: {\n *         mixin: TextEditor,\n *         data: 'text'\n *     }\n * }\n *\n * @type { Object.<String, {mixin: Object, data: String} > }\n */\nJSONEditor.modes = {};\n\n// debounce interval for JSON schema validation in milliseconds\nJSONEditor.prototype.DEBOUNCE_INTERVAL = 150;\nJSONEditor.VALID_OPTIONS = ['ajv', 'schema', 'schemaRefs', 'templates', 'ace', 'theme', 'autocomplete', 'onChange', 'onChangeJSON', 'onChangeText', 'onExpand', 'onEditable', 'onError', 'onEvent', 'onModeChange', 'onNodeName', 'onValidate', 'onCreateMenu', 'onSelectionChange', 'onTextSelectionChange', 'onClassName', 'onFocus', 'onBlur', 'colorPicker', 'onColorPicker', 'timestampTag', 'timestampFormat', 'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation', 'sortObjectKeys', 'navigationBar', 'statusBar', 'mainMenuBar', 'languages', 'language', 'enableSort', 'enableTransform', 'limitDragging', 'maxVisibleChilds', 'onValidationError', 'modalAnchor', 'popupAnchor', 'createQuery', 'executeQuery', 'queryDescription', 'allowSchemaSuggestions', 'showErrorTable'];\n\n/**\n * Create the JSONEditor\n * @param {Element} container    Container element\n * @param {Object}  [options]    See description in constructor\n * @param {Object | undefined} json JSON object\n * @private\n */\nJSONEditor.prototype._create = function (container, options, json) {\n  this.container = container;\n  this.options = options || {};\n  this.json = json || {};\n  var mode = this.options.mode || this.options.modes && this.options.modes[0] || 'tree';\n  this.setMode(mode);\n};\n\n/**\n * Destroy the editor. Clean up DOM, event listeners, and web workers.\n */\nJSONEditor.prototype.destroy = function () {};\n\n/**\n * Set JSON object in editor\n * @param {Object | undefined} json      JSON data\n */\nJSONEditor.prototype.set = function (json) {\n  this.json = json;\n};\n\n/**\n * Get JSON from the editor\n * @returns {Object} json\n */\nJSONEditor.prototype.get = function () {\n  return this.json;\n};\n\n/**\n * Set string containing JSON for the editor\n * @param {String | undefined} jsonText\n */\nJSONEditor.prototype.setText = function (jsonText) {\n  this.json = parse(jsonText);\n};\n\n/**\n * Get stringified JSON contents from the editor\n * @returns {String} jsonText\n */\nJSONEditor.prototype.getText = function () {\n  return JSON.stringify(this.json);\n};\n\n/**\n * Set a field name for the root node.\n * @param {String | undefined} name\n */\nJSONEditor.prototype.setName = function (name) {\n  if (!this.options) {\n    this.options = {};\n  }\n  this.options.name = name;\n};\n\n/**\n * Get the field name for the root node.\n * @return {String | undefined} name\n */\nJSONEditor.prototype.getName = function () {\n  return this.options && this.options.name;\n};\n\n/**\n * Change the mode of the editor.\n * JSONEditor will be extended with all methods needed for the chosen mode.\n * @param {String} mode     Available modes: 'tree' (default), 'view', 'form',\n *                          'text', and 'code'.\n */\nJSONEditor.prototype.setMode = function (mode) {\n  // if the mode is the same as current mode (and it's not the first time), do nothing.\n  if (mode === this.options.mode && this.create) {\n    return;\n  }\n  var container = this.container;\n  var options = extend({}, this.options);\n  var oldMode = options.mode;\n  options.mode = mode;\n  var config = JSONEditor.modes[mode];\n  if (!config) {\n    throw new Error('Unknown mode \"' + options.mode + '\"');\n  }\n  var asText = config.data === 'text';\n  var name = this.getName();\n  var data = this[asText ? 'getText' : 'get'](); // get text or json\n\n  this.destroy();\n  clear(this);\n  extend(this, config.mixin);\n  this.create(container, options);\n  this.setName(name);\n  this[asText ? 'setText' : 'set'](data); // set text or json\n\n  if (typeof config.load === 'function') {\n    try {\n      config.load.call(this);\n    } catch (err) {\n      console.error(err);\n    }\n  }\n  if (typeof options.onModeChange === 'function' && mode !== oldMode) {\n    try {\n      options.onModeChange(mode, oldMode);\n    } catch (err) {\n      console.error(err);\n    }\n  }\n};\n\n/**\n * Get the current mode\n * @return {string}\n */\nJSONEditor.prototype.getMode = function () {\n  return this.options.mode;\n};\n\n/**\n * Throw an error. If an error callback is configured in options.error, this\n * callback will be invoked. Else, a basic alert window with the error message\n * will be shown to the user.\n * @param {Error} err\n * @private\n */\nJSONEditor.prototype._onError = function (err) {\n  if (this.options && typeof this.options.onError === 'function') {\n    this.options.onError(err);\n  } else {\n    window.alert(err.toString());\n  }\n};\n\n/**\n * Set a JSON schema for validation of the JSON object.\n * To remove the schema, call JSONEditor.setSchema(null)\n * @param {Object | null} schema\n * @param {Object.<string, Object>=} schemaRefs Schemas that are referenced using the `$ref` property from the JSON schema that are set in the `schema` option,\n +  the object structure in the form of `{reference_key: schemaObject}`\n */\nJSONEditor.prototype.setSchema = function (schema, schemaRefs) {\n  // compile a JSON schema validator if a JSON schema is provided\n  if (schema) {\n    var ajv;\n    try {\n      // grab ajv from options if provided, else create a new instance\n      if (this.options.ajv) {\n        ajv = this.options.ajv;\n      } else {\n        ajv = Ajv({\n          allErrors: true,\n          verbose: true,\n          schemaId: 'auto',\n          $data: true\n        });\n\n        // support both draft-04 and draft-06 alongside the latest draft-07\n        ajv.addMetaSchema(__webpack_require__(5207));\n        ajv.addMetaSchema(__webpack_require__(6801));\n      }\n    } catch (err) {\n      console.warn('Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`.');\n    }\n    if (ajv) {\n      if (schemaRefs) {\n        for (var ref in schemaRefs) {\n          ajv.removeSchema(ref); // When updating a schema - old refs has to be removed first\n          if (schemaRefs[ref]) {\n            ajv.addSchema(schemaRefs[ref], ref);\n          }\n        }\n        this.options.schemaRefs = schemaRefs;\n      }\n      this.validateSchema = ajv.compile(schema);\n\n      // add schema to the options, so that when switching to an other mode,\n      // the set schema is not lost\n      this.options.schema = schema;\n      this.options.schemaRefs = schemaRefs;\n\n      // validate now\n      this.validate();\n    }\n    this.refresh(); // update DOM\n  } else {\n    // remove current schema\n    this.validateSchema = null;\n    this.options.schema = null;\n    this.options.schemaRefs = null;\n    this.validate(); // to clear current error messages\n    this.refresh(); // update DOM\n  }\n  if (typeof this._onSchemaChange === 'function') {\n    this._onSchemaChange(schema, schemaRefs);\n  }\n};\n\n/**\n * Validate current JSON object against the configured JSON schema\n * Throws an exception when no JSON schema is configured\n */\nJSONEditor.prototype.validate = function () {\n  // must be implemented by treemode and textmode\n  return Promise.resolve([]);\n};\n\n/**\n * Refresh the rendered contents\n */\nJSONEditor.prototype.refresh = function () {\n  // can be implemented by treemode and textmode\n};\n\n/**\n * Register a plugin with one ore multiple modes for the JSON Editor.\n *\n * A mode is described as an object with properties:\n *\n * - `mode: String`           The name of the mode.\n * - `mixin: Object`          An object containing the mixin functions which\n *                            will be added to the JSONEditor. Must contain functions\n *                            create, get, getText, set, and setText. May have\n *                            additional functions.\n *                            When the JSONEditor switches to a mixin, all mixin\n *                            functions are added to the JSONEditor, and then\n *                            the function `create(container, options)` is executed.\n * - `data: 'text' | 'json'`  The type of data that will be used to load the mixin.\n * - `[load: function]`       An optional function called after the mixin\n *                            has been loaded.\n *\n * @param {Object | Array} mode  A mode object or an array with multiple mode objects.\n */\nJSONEditor.registerMode = function (mode) {\n  var i, prop;\n  if (Array.isArray(mode)) {\n    // multiple modes\n    for (i = 0; i < mode.length; i++) {\n      JSONEditor.registerMode(mode[i]);\n    }\n  } else {\n    // validate the new mode\n    if (!('mode' in mode)) throw new Error('Property \"mode\" missing');\n    if (!('mixin' in mode)) throw new Error('Property \"mixin\" missing');\n    if (!('data' in mode)) throw new Error('Property \"data\" missing');\n    var name = mode.mode;\n    if (name in JSONEditor.modes) {\n      throw new Error('Mode \"' + name + '\" already registered');\n    }\n\n    // validate the mixin\n    if (typeof mode.mixin.create !== 'function') {\n      throw new Error('Required function \"create\" missing on mixin');\n    }\n    var reserved = ['setMode', 'registerMode', 'modes'];\n    for (i = 0; i < reserved.length; i++) {\n      prop = reserved[i];\n      if (prop in mode.mixin) {\n        throw new Error('Reserved property \"' + prop + '\" not allowed in mixin');\n      }\n    }\n    JSONEditor.modes[name] = mode;\n  }\n};\n\n// register tree, text, and preview modes\nJSONEditor.registerMode(treeModeMixins);\nJSONEditor.registerMode(textModeMixins);\nJSONEditor.registerMode(previewModeMixins);\n\n// expose some of the libraries that can be used customized\nJSONEditor.ace = ace;\nJSONEditor.Ajv = Ajv;\nJSONEditor.VanillaPicker = VanillaPicker;\n\n// expose some utils (this is undocumented, unofficial)\nJSONEditor.showTransformModal = showTransformModal;\nJSONEditor.showSortModal = showSortModal;\nJSONEditor.getInnerText = getInnerText;\n\n// default export for TypeScript ES6 projects\nJSONEditor[\"default\"] = JSONEditor;\nmodule.exports = JSONEditor;\n\n/***/ }),\n\n/***/ 1389:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   n: function() { return /* binding */ ModeSwitcher; }\n/* harmony export */ });\n/* harmony import */ var _ContextMenu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6545);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3057);\n\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n/**\n * Create a select box to be used in the editor menu's, which allows to switch mode\n * @param {HTMLElement} container\n * @param {String[]} modes  Available modes: 'code', 'form', 'text', 'tree', 'view', 'preview'\n * @param {String} current  Available modes: 'code', 'form', 'text', 'tree', 'view', 'preview'\n * @param {function(mode: string)} onSwitch  Callback invoked on switch\n * @constructor\n */\nvar ModeSwitcher = /*#__PURE__*/function () {\n  function ModeSwitcher(container, modes, current, onSwitch) {\n    _classCallCheck(this, ModeSwitcher);\n    // available modes\n    var availableModes = {\n      code: {\n        text: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modeCodeText'),\n        title: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modeCodeTitle'),\n        click: function click() {\n          onSwitch('code');\n        }\n      },\n      form: {\n        text: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modeFormText'),\n        title: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modeFormTitle'),\n        click: function click() {\n          onSwitch('form');\n        }\n      },\n      text: {\n        text: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modeTextText'),\n        title: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modeTextTitle'),\n        click: function click() {\n          onSwitch('text');\n        }\n      },\n      tree: {\n        text: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modeTreeText'),\n        title: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modeTreeTitle'),\n        click: function click() {\n          onSwitch('tree');\n        }\n      },\n      view: {\n        text: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modeViewText'),\n        title: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modeViewTitle'),\n        click: function click() {\n          onSwitch('view');\n        }\n      },\n      preview: {\n        text: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modePreviewText'),\n        title: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modePreviewTitle'),\n        click: function click() {\n          onSwitch('preview');\n        }\n      }\n    };\n\n    // list the selected modes\n    var items = [];\n    for (var i = 0; i < modes.length; i++) {\n      var mode = modes[i];\n      var item = availableModes[mode];\n      if (!item) {\n        throw new Error('Unknown mode \"' + mode + '\"');\n      }\n      item.className = 'jsoneditor-type-modes' + (current === mode ? ' jsoneditor-selected' : '');\n      items.push(item);\n    }\n\n    // retrieve the title of current mode\n    var currentMode = availableModes[current];\n    if (!currentMode) {\n      throw new Error('Unknown mode \"' + current + '\"');\n    }\n    var currentTitle = currentMode.text;\n\n    // create the html element\n    var box = document.createElement('button');\n    box.type = 'button';\n    box.className = 'jsoneditor-modes jsoneditor-separator';\n    box.textContent = currentTitle + \" \\u25BE\";\n    box.title = (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('modeEditorTitle');\n    box.onclick = function () {\n      var menu = new _ContextMenu__WEBPACK_IMPORTED_MODULE_0__/* .ContextMenu */ .t(items);\n      menu.show(box, container);\n    };\n    var frame = document.createElement('div');\n    frame.className = 'jsoneditor-modes';\n    frame.style.position = 'relative';\n    frame.appendChild(box);\n    container.appendChild(frame);\n    this.dom = {\n      container: container,\n      box: box,\n      frame: frame\n    };\n  }\n\n  /**\n   * Set focus to switcher\n   */\n  return _createClass(ModeSwitcher, [{\n    key: \"focus\",\n    value: function focus() {\n      this.dom.box.focus();\n    }\n\n    /**\n     * Destroy the ModeSwitcher, remove from DOM\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.dom && this.dom.frame && this.dom.frame.parentNode) {\n        this.dom.frame.parentNode.removeChild(this.dom.frame);\n      }\n      this.dom = null;\n    }\n  }]);\n}();\n\n/***/ }),\n\n/***/ 7413:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar ace;\nif (window.ace) {\n  // use the already loaded instance of Ace\n  ace = window.ace;\n} else {\n  try {\n    // load Ace editor\n    ace = __webpack_require__(6990);\n\n    // load required Ace plugins\n    __webpack_require__(4221);\n    __webpack_require__(6534);\n    __webpack_require__(6489);\n    // embed Ace json worker\n    // https://github.com/ajaxorg/ace/issues/3913\n    var jsonWorkerDataUrl = __webpack_require__(5477);\n    ace.config.setModuleUrl('ace/mode/json_worker', jsonWorkerDataUrl);\n  } catch (err) {\n    // failed to load Ace (can be minimalist bundle).\n    // No worries, the editor will fall back to plain text if needed.\n  }\n}\nmodule.exports = ace;\n\n/***/ }),\n\n/***/ 9762:\n/***/ (function() {\n\n/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nwindow.ace.define('ace/theme/jsoneditor', ['require', 'exports', 'module', 'ace/lib/dom'], function (acequire, exports, module) {\n  exports.isDark = false;\n  exports.cssClass = 'ace-jsoneditor';\n  exports.cssText = \".ace-jsoneditor .ace_gutter {\\nbackground: #ebebeb;\\ncolor: #333\\n}\\n\\n.ace-jsoneditor.ace_editor {\\nline-height: 1.3;\\nbackground-color: #fff;\\n}\\n.ace-jsoneditor .ace_print-margin {\\nwidth: 1px;\\nbackground: #e8e8e8\\n}\\n.ace-jsoneditor .ace_scroller {\\nbackground-color: #FFFFFF\\n}\\n.ace-jsoneditor .ace_text-layer {\\ncolor: gray\\n}\\n.ace-jsoneditor .ace_variable {\\ncolor: #1a1a1a\\n}\\n.ace-jsoneditor .ace_cursor {\\nborder-left: 2px solid #000000\\n}\\n.ace-jsoneditor .ace_overwrite-cursors .ace_cursor {\\nborder-left: 0px;\\nborder-bottom: 1px solid #000000\\n}\\n.ace-jsoneditor .ace_marker-layer .ace_selection {\\nbackground: lightgray\\n}\\n.ace-jsoneditor.ace_multiselect .ace_selection.ace_start {\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\nborder-radius: 2px\\n}\\n.ace-jsoneditor .ace_marker-layer .ace_step {\\nbackground: rgb(255, 255, 0)\\n}\\n.ace-jsoneditor .ace_marker-layer .ace_bracket {\\nmargin: -1px 0 0 -1px;\\nborder: 1px solid #BFBFBF\\n}\\n.ace-jsoneditor .ace_marker-layer .ace_active-line {\\nbackground: #FFFBD1\\n}\\n.ace-jsoneditor .ace_gutter-active-line {\\nbackground-color : #dcdcdc\\n}\\n.ace-jsoneditor .ace_marker-layer .ace_selected-word {\\nborder: 1px solid lightgray\\n}\\n.ace-jsoneditor .ace_invisible {\\ncolor: #BFBFBF\\n}\\n.ace-jsoneditor .ace_keyword,\\n.ace-jsoneditor .ace_meta,\\n.ace-jsoneditor .ace_support.ace_constant.ace_property-value {\\ncolor: #AF956F\\n}\\n.ace-jsoneditor .ace_keyword.ace_operator {\\ncolor: #484848\\n}\\n.ace-jsoneditor .ace_keyword.ace_other.ace_unit {\\ncolor: #96DC5F\\n}\\n.ace-jsoneditor .ace_constant.ace_language {\\ncolor: darkorange\\n}\\n.ace-jsoneditor .ace_constant.ace_numeric {\\ncolor: red\\n}\\n.ace-jsoneditor .ace_constant.ace_character.ace_entity {\\ncolor: #BF78CC\\n}\\n.ace-jsoneditor .ace_invalid {\\ncolor: #FFFFFF;\\nbackground-color: #FF002A;\\n}\\n.ace-jsoneditor .ace_fold {\\nbackground-color: #AF956F;\\nborder-color: #000000\\n}\\n.ace-jsoneditor .ace_storage,\\n.ace-jsoneditor .ace_support.ace_class,\\n.ace-jsoneditor .ace_support.ace_function,\\n.ace-jsoneditor .ace_support.ace_other,\\n.ace-jsoneditor .ace_support.ace_type {\\ncolor: #C52727\\n}\\n.ace-jsoneditor .ace_string {\\ncolor: green\\n}\\n.ace-jsoneditor .ace_comment {\\ncolor: #BCC8BA\\n}\\n.ace-jsoneditor .ace_entity.ace_name.ace_tag,\\n.ace-jsoneditor .ace_entity.ace_other.ace_attribute-name {\\ncolor: #606060\\n}\\n.ace-jsoneditor .ace_markup.ace_underline {\\ntext-decoration: underline\\n}\\n.ace-jsoneditor .ace_indent-guide {\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y\\n}\";\n  var dom = acequire('../lib/dom');\n  dom.importCssString(exports.cssText, exports.cssClass);\n});\n\n/***/ }),\n\n/***/ 5736:\n/***/ (function(__unused_webpack_module, exports) {\n\n/* Jison generated parser */\nvar jsonlint = function () {\n  var parser = {\n    trace: function trace() {},\n    yy: {},\n    symbols_: {\n      \"error\": 2,\n      \"JSONString\": 3,\n      \"STRING\": 4,\n      \"JSONNumber\": 5,\n      \"NUMBER\": 6,\n      \"JSONNullLiteral\": 7,\n      \"NULL\": 8,\n      \"JSONBooleanLiteral\": 9,\n      \"TRUE\": 10,\n      \"FALSE\": 11,\n      \"JSONText\": 12,\n      \"JSONValue\": 13,\n      \"EOF\": 14,\n      \"JSONObject\": 15,\n      \"JSONArray\": 16,\n      \"{\": 17,\n      \"}\": 18,\n      \"JSONMemberList\": 19,\n      \"JSONMember\": 20,\n      \":\": 21,\n      \",\": 22,\n      \"[\": 23,\n      \"]\": 24,\n      \"JSONElementList\": 25,\n      \"$accept\": 0,\n      \"$end\": 1\n    },\n    terminals_: {\n      2: \"error\",\n      4: \"STRING\",\n      6: \"NUMBER\",\n      8: \"NULL\",\n      10: \"TRUE\",\n      11: \"FALSE\",\n      14: \"EOF\",\n      17: \"{\",\n      18: \"}\",\n      21: \":\",\n      22: \",\",\n      23: \"[\",\n      24: \"]\"\n    },\n    productions_: [0, [3, 1], [5, 1], [7, 1], [9, 1], [9, 1], [12, 2], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [15, 2], [15, 3], [20, 3], [19, 1], [19, 3], [16, 2], [16, 3], [25, 1], [25, 3]],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n      var $0 = $$.length - 1;\n      switch (yystate) {\n        case 1:\n          // replace escaped characters with actual character\n          this.$ = yytext.replace(/\\\\(\\\\|\")/g, \"$\" + \"1\").replace(/\\\\n/g, '\\n').replace(/\\\\r/g, '\\r').replace(/\\\\t/g, '\\t').replace(/\\\\v/g, '\\v').replace(/\\\\f/g, '\\f').replace(/\\\\b/g, '\\b');\n          break;\n        case 2:\n          this.$ = Number(yytext);\n          break;\n        case 3:\n          this.$ = null;\n          break;\n        case 4:\n          this.$ = true;\n          break;\n        case 5:\n          this.$ = false;\n          break;\n        case 6:\n          return this.$ = $$[$0 - 1];\n          // removed by dead control flow\n\n        case 13:\n          this.$ = {};\n          break;\n        case 14:\n          this.$ = $$[$0 - 1];\n          break;\n        case 15:\n          this.$ = [$$[$0 - 2], $$[$0]];\n          break;\n        case 16:\n          this.$ = {};\n          this.$[$$[$0][0]] = $$[$0][1];\n          break;\n        case 17:\n          this.$ = $$[$0 - 2];\n          $$[$0 - 2][$$[$0][0]] = $$[$0][1];\n          break;\n        case 18:\n          this.$ = [];\n          break;\n        case 19:\n          this.$ = $$[$0 - 1];\n          break;\n        case 20:\n          this.$ = [$$[$0]];\n          break;\n        case 21:\n          this.$ = $$[$0 - 2];\n          $$[$0 - 2].push($$[$0]);\n          break;\n      }\n    },\n    table: [{\n      3: 5,\n      4: [1, 12],\n      5: 6,\n      6: [1, 13],\n      7: 3,\n      8: [1, 9],\n      9: 4,\n      10: [1, 10],\n      11: [1, 11],\n      12: 1,\n      13: 2,\n      15: 7,\n      16: 8,\n      17: [1, 14],\n      23: [1, 15]\n    }, {\n      1: [3]\n    }, {\n      14: [1, 16]\n    }, {\n      14: [2, 7],\n      18: [2, 7],\n      22: [2, 7],\n      24: [2, 7]\n    }, {\n      14: [2, 8],\n      18: [2, 8],\n      22: [2, 8],\n      24: [2, 8]\n    }, {\n      14: [2, 9],\n      18: [2, 9],\n      22: [2, 9],\n      24: [2, 9]\n    }, {\n      14: [2, 10],\n      18: [2, 10],\n      22: [2, 10],\n      24: [2, 10]\n    }, {\n      14: [2, 11],\n      18: [2, 11],\n      22: [2, 11],\n      24: [2, 11]\n    }, {\n      14: [2, 12],\n      18: [2, 12],\n      22: [2, 12],\n      24: [2, 12]\n    }, {\n      14: [2, 3],\n      18: [2, 3],\n      22: [2, 3],\n      24: [2, 3]\n    }, {\n      14: [2, 4],\n      18: [2, 4],\n      22: [2, 4],\n      24: [2, 4]\n    }, {\n      14: [2, 5],\n      18: [2, 5],\n      22: [2, 5],\n      24: [2, 5]\n    }, {\n      14: [2, 1],\n      18: [2, 1],\n      21: [2, 1],\n      22: [2, 1],\n      24: [2, 1]\n    }, {\n      14: [2, 2],\n      18: [2, 2],\n      22: [2, 2],\n      24: [2, 2]\n    }, {\n      3: 20,\n      4: [1, 12],\n      18: [1, 17],\n      19: 18,\n      20: 19\n    }, {\n      3: 5,\n      4: [1, 12],\n      5: 6,\n      6: [1, 13],\n      7: 3,\n      8: [1, 9],\n      9: 4,\n      10: [1, 10],\n      11: [1, 11],\n      13: 23,\n      15: 7,\n      16: 8,\n      17: [1, 14],\n      23: [1, 15],\n      24: [1, 21],\n      25: 22\n    }, {\n      1: [2, 6]\n    }, {\n      14: [2, 13],\n      18: [2, 13],\n      22: [2, 13],\n      24: [2, 13]\n    }, {\n      18: [1, 24],\n      22: [1, 25]\n    }, {\n      18: [2, 16],\n      22: [2, 16]\n    }, {\n      21: [1, 26]\n    }, {\n      14: [2, 18],\n      18: [2, 18],\n      22: [2, 18],\n      24: [2, 18]\n    }, {\n      22: [1, 28],\n      24: [1, 27]\n    }, {\n      22: [2, 20],\n      24: [2, 20]\n    }, {\n      14: [2, 14],\n      18: [2, 14],\n      22: [2, 14],\n      24: [2, 14]\n    }, {\n      3: 20,\n      4: [1, 12],\n      20: 29\n    }, {\n      3: 5,\n      4: [1, 12],\n      5: 6,\n      6: [1, 13],\n      7: 3,\n      8: [1, 9],\n      9: 4,\n      10: [1, 10],\n      11: [1, 11],\n      13: 30,\n      15: 7,\n      16: 8,\n      17: [1, 14],\n      23: [1, 15]\n    }, {\n      14: [2, 19],\n      18: [2, 19],\n      22: [2, 19],\n      24: [2, 19]\n    }, {\n      3: 5,\n      4: [1, 12],\n      5: 6,\n      6: [1, 13],\n      7: 3,\n      8: [1, 9],\n      9: 4,\n      10: [1, 10],\n      11: [1, 11],\n      13: 31,\n      15: 7,\n      16: 8,\n      17: [1, 14],\n      23: [1, 15]\n    }, {\n      18: [2, 17],\n      22: [2, 17]\n    }, {\n      18: [2, 15],\n      22: [2, 15]\n    }, {\n      22: [2, 21],\n      24: [2, 21]\n    }],\n    defaultActions: {\n      16: [2, 6]\n    },\n    parseError: function parseError(str, hash) {\n      throw new Error(str);\n    },\n    parse: function parse(input) {\n      var self = this,\n        stack = [0],\n        vstack = [null],\n        // semantic value stack\n        lstack = [],\n        // location stack\n        table = this.table,\n        yytext = '',\n        yylineno = 0,\n        yyleng = 0,\n        recovering = 0,\n        TERROR = 2,\n        EOF = 1;\n\n      //this.reductionCount = this.shiftCount = 0;\n\n      this.lexer.setInput(input);\n      this.lexer.yy = this.yy;\n      this.yy.lexer = this.lexer;\n      if (typeof this.lexer.yylloc == 'undefined') this.lexer.yylloc = {};\n      var yyloc = this.lexer.yylloc;\n      lstack.push(yyloc);\n      if (typeof this.yy.parseError === 'function') this.parseError = this.yy.parseError;\n      function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n      }\n      function lex() {\n        var token;\n        token = self.lexer.lex() || 1; // $end = 1\n        // if token isn't its numeric value, convert\n        if (typeof token !== 'number') {\n          token = self.symbols_[token] || token;\n        }\n        return token;\n      }\n      var symbol,\n        preErrorSymbol,\n        state,\n        action,\n        a,\n        r,\n        yyval = {},\n        p,\n        len,\n        newState,\n        expected;\n      while (true) {\n        // retreive state number from top of stack\n        state = stack[stack.length - 1];\n\n        // use default actions if available\n        if (this.defaultActions[state]) {\n          action = this.defaultActions[state];\n        } else {\n          if (symbol == null) symbol = lex();\n          // read action for current state and first input\n          action = table[state] && table[state][symbol];\n        }\n\n        // handle parse error\n        _handle_error: if (typeof action === 'undefined' || !action.length || !action[0]) {\n          if (!recovering) {\n            // Report error\n            expected = [];\n            for (p in table[state]) if (this.terminals_[p] && p > 2) {\n              expected.push(\"'\" + this.terminals_[p] + \"'\");\n            }\n            var errStr = '';\n            if (this.lexer.showPosition) {\n              errStr = 'Parse error on line ' + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(', ') + \", got '\" + this.terminals_[symbol] + \"'\";\n            } else {\n              errStr = 'Parse error on line ' + (yylineno + 1) + \": Unexpected \" + (symbol == 1 /*EOF*/ ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n            }\n            this.parseError(errStr, {\n              text: this.lexer.match,\n              token: this.terminals_[symbol] || symbol,\n              line: this.lexer.yylineno,\n              loc: yyloc,\n              expected: expected\n            });\n          }\n\n          // just recovered from another error\n          if (recovering == 3) {\n            if (symbol == EOF) {\n              throw new Error(errStr || 'Parsing halted.');\n            }\n\n            // discard current lookahead and grab another\n            yyleng = this.lexer.yyleng;\n            yytext = this.lexer.yytext;\n            yylineno = this.lexer.yylineno;\n            yyloc = this.lexer.yylloc;\n            symbol = lex();\n          }\n\n          // try to recover from error\n          while (1) {\n            // check for error recovery rule in this state\n            if (TERROR.toString() in table[state]) {\n              break;\n            }\n            if (state == 0) {\n              throw new Error(errStr || 'Parsing halted.');\n            }\n            popStack(1);\n            state = stack[stack.length - 1];\n          }\n          preErrorSymbol = symbol; // save the lookahead token\n          symbol = TERROR; // insert generic error symbol as new lookahead\n          state = stack[stack.length - 1];\n          action = table[state] && table[state][TERROR];\n          recovering = 3; // allow 3 real symbols to be shifted before reporting a new error\n        }\n\n        // this shouldn't happen, unless resolve defaults are off\n        if (action[0] instanceof Array && action.length > 1) {\n          throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n          case 1:\n            // shift\n            //this.shiftCount++;\n\n            stack.push(symbol);\n            vstack.push(this.lexer.yytext);\n            lstack.push(this.lexer.yylloc);\n            stack.push(action[1]); // push state\n            symbol = null;\n            if (!preErrorSymbol) {\n              // normal execution/no error\n              yyleng = this.lexer.yyleng;\n              yytext = this.lexer.yytext;\n              yylineno = this.lexer.yylineno;\n              yyloc = this.lexer.yylloc;\n              if (recovering > 0) recovering--;\n            } else {\n              // error just occurred, resume old lookahead f/ before error\n              symbol = preErrorSymbol;\n              preErrorSymbol = null;\n            }\n            break;\n          case 2:\n            // reduce\n            //this.reductionCount++;\n\n            len = this.productions_[action[1]][1];\n\n            // perform semantic action\n            yyval.$ = vstack[vstack.length - len]; // default to $$ = $1\n            // default location, uses first token for firsts, last for lasts\n            yyval._$ = {\n              first_line: lstack[lstack.length - (len || 1)].first_line,\n              last_line: lstack[lstack.length - 1].last_line,\n              first_column: lstack[lstack.length - (len || 1)].first_column,\n              last_column: lstack[lstack.length - 1].last_column\n            };\n            r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n            if (typeof r !== 'undefined') {\n              return r;\n            }\n\n            // pop off stack\n            if (len) {\n              stack = stack.slice(0, -1 * len * 2);\n              vstack = vstack.slice(0, -1 * len);\n              lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            // goto new state = table[STATE][NONTERMINAL]\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n          case 3:\n            // accept\n            return true;\n        }\n      }\n      return true;\n    }\n  };\n  /* Jison generated lexer */\n  var lexer = function () {\n    var lexer = {\n      EOF: 1,\n      parseError: function parseError(str, hash) {\n        if (this.yy.parseError) {\n          this.yy.parseError(str, hash);\n        } else {\n          throw new Error(str);\n        }\n      },\n      setInput: function setInput(input) {\n        this._input = input;\n        this._more = this._less = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n          first_line: 1,\n          first_column: 0,\n          last_line: 1,\n          last_column: 0\n        };\n        return this;\n      },\n      input: function input() {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/\\n/);\n        if (lines) this.yylineno++;\n        this._input = this._input.slice(1);\n        return ch;\n      },\n      unput: function unput(ch) {\n        this._input = ch + this._input;\n        return this;\n      },\n      more: function more() {\n        this._more = true;\n        return this;\n      },\n      less: function less(n) {\n        this._input = this.match.slice(n) + this._input;\n      },\n      pastInput: function pastInput() {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n      },\n      upcomingInput: function upcomingInput() {\n        var next = this.match;\n        if (next.length < 20) {\n          next += this._input.substr(0, 20 - next.length);\n        }\n        return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n      },\n      showPosition: function showPosition() {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n      },\n      next: function next() {\n        if (this.done) {\n          return this.EOF;\n        }\n        if (!this._input) this.done = true;\n        var token, match, tempMatch, index, col, lines;\n        if (!this._more) {\n          this.yytext = '';\n          this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n          tempMatch = this._input.match(this.rules[rules[i]]);\n          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n            match = tempMatch;\n            index = i;\n            if (!this.options.flex) break;\n          }\n        }\n        if (match) {\n          lines = match[0].match(/\\n.*/g);\n          if (lines) this.yylineno += lines.length;\n          this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ? lines[lines.length - 1].length - 1 : this.yylloc.last_column + match[0].length\n          };\n          this.yytext += match[0];\n          this.match += match[0];\n          this.yyleng = this.yytext.length;\n          this._more = false;\n          this._input = this._input.slice(match[0].length);\n          this.matched += match[0];\n          token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);\n          if (this.done && this._input) this.done = false;\n          if (token) return token;else return;\n        }\n        if (this._input === \"\") {\n          return this.EOF;\n        } else {\n          this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n            text: \"\",\n            token: null,\n            line: this.yylineno\n          });\n        }\n      },\n      lex: function lex() {\n        var r = this.next();\n        if (typeof r !== 'undefined') {\n          return r;\n        } else {\n          return this.lex();\n        }\n      },\n      begin: function begin(condition) {\n        this.conditionStack.push(condition);\n      },\n      popState: function popState() {\n        return this.conditionStack.pop();\n      },\n      _currentRules: function _currentRules() {\n        return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n      },\n      topState: function topState() {\n        return this.conditionStack[this.conditionStack.length - 2];\n      },\n      pushState: function begin(condition) {\n        this.begin(condition);\n      }\n    };\n    lexer.options = {};\n    lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n      var YYSTATE = YY_START;\n      switch ($avoiding_name_collisions) {\n        case 0:\n          /* skip whitespace */\n          break;\n        case 1:\n          return 6;\n          // removed by dead control flow\n\n        case 2:\n          yy_.yytext = yy_.yytext.substr(1, yy_.yyleng - 2);\n          return 4;\n          // removed by dead control flow\n\n        case 3:\n          return 17;\n          // removed by dead control flow\n\n        case 4:\n          return 18;\n          // removed by dead control flow\n\n        case 5:\n          return 23;\n          // removed by dead control flow\n\n        case 6:\n          return 24;\n          // removed by dead control flow\n\n        case 7:\n          return 22;\n          // removed by dead control flow\n\n        case 8:\n          return 21;\n          // removed by dead control flow\n\n        case 9:\n          return 10;\n          // removed by dead control flow\n\n        case 10:\n          return 11;\n          // removed by dead control flow\n\n        case 11:\n          return 8;\n          // removed by dead control flow\n\n        case 12:\n          return 14;\n          // removed by dead control flow\n\n        case 13:\n          return 'INVALID';\n          // removed by dead control flow\n\n      }\n    };\n    lexer.rules = [/^(?:\\s+)/, /^(?:(-?([0-9]|[1-9][0-9]+))(\\.[0-9]+)?([eE][-+]?[0-9]+)?\\b)/, /^(?:\"(?:\\\\[\\\\\"bfnrt/]|\\\\u[a-fA-F0-9]{4}|[^\\\\\\0-\\x09\\x0a-\\x1f\"])*\")/, /^(?:\\{)/, /^(?:\\})/, /^(?:\\[)/, /^(?:\\])/, /^(?:,)/, /^(?::)/, /^(?:true\\b)/, /^(?:false\\b)/, /^(?:null\\b)/, /^(?:$)/, /^(?:.)/];\n    lexer.conditions = {\n      \"INITIAL\": {\n        \"rules\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],\n        \"inclusive\": true\n      }\n    };\n    ;\n    return lexer;\n  }();\n  parser.lexer = lexer;\n  return parser;\n}();\nif (true) {\n  exports.parser = jsonlint;\n  exports.parse = jsonlint.parse.bind(jsonlint);\n}\n\n/***/ }),\n\n/***/ 4772:\n/***/ (function(module) {\n\n\"use strict\";\n/*!\n * Selectr 2.4.13\n * http://mobius.ovh/docs/selectr\n *\n * Released under the MIT license\n */\n\n\n\n/**\n * Event Emitter\n */\nvar Events = function Events() {};\n\n/**\n * Event Prototype\n * @type {Object}\n */\nEvents.prototype = {\n  /**\n   * Add custom event listener\n   * @param  {String} event Event type\n   * @param  {Function} func   Callback\n   * @return {Void}\n   */\n  on: function on(event, func) {\n    this._events = this._events || {};\n    this._events[event] = this._events[event] || [];\n    this._events[event].push(func);\n  },\n  /**\n   * Remove custom event listener\n   * @param  {String} event Event type\n   * @param  {Function} func   Callback\n   * @return {Void}\n   */\n  off: function off(event, func) {\n    this._events = this._events || {};\n    if (event in this._events === false) return;\n    this._events[event].splice(this._events[event].indexOf(func), 1);\n  },\n  /**\n   * Fire a custom event\n   * @param  {String} event Event type\n   * @return {Void}\n   */\n  emit: function emit(event /* , args... */) {\n    this._events = this._events || {};\n    if (event in this._events === false) return;\n    for (var i = 0; i < this._events[event].length; i++) {\n      this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1));\n    }\n  }\n};\n\n/**\n * Event mixin\n * @param  {Object} obj\n * @return {Object}\n */\nEvents.mixin = function (obj) {\n  var props = ['on', 'off', 'emit'];\n  for (var i = 0; i < props.length; i++) {\n    if (typeof obj === 'function') {\n      obj.prototype[props[i]] = Events.prototype[props[i]];\n    } else {\n      obj[props[i]] = Events.prototype[props[i]];\n    }\n  }\n  return obj;\n};\n\n/**\n * Helpers\n * @type {Object}\n */\nvar util = {\n  escapeRegExp: function escapeRegExp(str) {\n    // source from lodash 3.0.0\n    var _reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n    var _reHasRegExpChar = new RegExp(_reRegExpChar.source);\n    return str && _reHasRegExpChar.test(str) ? str.replace(_reRegExpChar, '\\\\$&') : str;\n  },\n  extend: function extend(src, props) {\n    for (var prop in props) {\n      if (props.hasOwnProperty(prop)) {\n        var val = props[prop];\n        if (val && Object.prototype.toString.call(val) === \"[object Object]\") {\n          src[prop] = src[prop] || {};\n          util.extend(src[prop], val);\n        } else {\n          src[prop] = val;\n        }\n      }\n    }\n    return src;\n  },\n  each: function each(a, b, c) {\n    if (\"[object Object]\" === Object.prototype.toString.call(a)) {\n      for (var d in a) {\n        if (Object.prototype.hasOwnProperty.call(a, d)) {\n          b.call(c, d, a[d], a);\n        }\n      }\n    } else {\n      for (var e = 0, f = a.length; e < f; e++) {\n        b.call(c, e, a[e], a);\n      }\n    }\n  },\n  createElement: function createElement(e, a) {\n    var d = document,\n      el = d.createElement(e);\n    if (a && \"[object Object]\" === Object.prototype.toString.call(a)) {\n      var i;\n      for (i in a) if (i in el) el[i] = a[i];else if (\"html\" === i) el.innerHTML = a[i];else el.setAttribute(i, a[i]);\n    }\n    return el;\n  },\n  hasClass: function hasClass(a, b) {\n    if (a) return a.classList ? a.classList.contains(b) : !!a.className && !!a.className.match(new RegExp(\"(\\\\s|^)\" + b + \"(\\\\s|$)\"));\n  },\n  addClass: function addClass(a, b) {\n    if (!util.hasClass(a, b)) {\n      if (a.classList) {\n        a.classList.add(b);\n      } else {\n        a.className = a.className.trim() + \" \" + b;\n      }\n    }\n  },\n  removeClass: function removeClass(a, b) {\n    if (util.hasClass(a, b)) {\n      if (a.classList) {\n        a.classList.remove(b);\n      } else {\n        a.className = a.className.replace(new RegExp(\"(^|\\\\s)\" + b.split(\" \").join(\"|\") + \"(\\\\s|$)\", \"gi\"), \" \");\n      }\n    }\n  },\n  closest: function closest(el, fn) {\n    return el && el !== document.body && (fn(el) ? el : util.closest(el.parentNode, fn));\n  },\n  isInt: function isInt(val) {\n    return typeof val === 'number' && isFinite(val) && Math.floor(val) === val;\n  },\n  debounce: function debounce(a, b, c) {\n    var d;\n    return function () {\n      var e = this,\n        f = arguments,\n        g = function g() {\n          d = null;\n          if (!c) a.apply(e, f);\n        },\n        h = c && !d;\n      clearTimeout(d);\n      d = setTimeout(g, b);\n      if (h) {\n        a.apply(e, f);\n      }\n    };\n  },\n  rect: function rect(el, abs) {\n    var w = window;\n    var r = el.getBoundingClientRect();\n    var x = abs ? w.pageXOffset : 0;\n    var y = abs ? w.pageYOffset : 0;\n    return {\n      bottom: r.bottom + y,\n      height: r.height,\n      left: r.left + x,\n      right: r.right + x,\n      top: r.top + y,\n      width: r.width\n    };\n  },\n  includes: function includes(a, b) {\n    return a.indexOf(b) > -1;\n  },\n  startsWith: function startsWith(a, b) {\n    return a.substr(0, b.length) === b;\n  },\n  truncate: function truncate(el) {\n    while (el.firstChild) {\n      el.removeChild(el.firstChild);\n    }\n  }\n};\nfunction isset(obj, prop) {\n  return obj.hasOwnProperty(prop) && (obj[prop] === true || obj[prop].length);\n}\n\n/**\n * Append an item to the list\n * @param  {Object} item\n * @param  {Object} custom\n * @return {Void}\n */\nfunction appendItem(item, parent, custom) {\n  if (item.parentNode) {\n    if (!item.parentNode.parentNode) {\n      parent.appendChild(item.parentNode);\n    }\n  } else {\n    parent.appendChild(item);\n  }\n  util.removeClass(item, \"excluded\");\n  if (!custom) {\n    // remove any <span> highlighting, without xss\n    item.textContent = item.textContent;\n  }\n}\n\n/**\n * Render the item list\n * @return {Void}\n */\nvar render = function render() {\n  if (this.items.length) {\n    var f = document.createDocumentFragment();\n    if (this.config.pagination) {\n      var pages = this.pages.slice(0, this.pageIndex);\n      util.each(pages, function (i, items) {\n        util.each(items, function (j, item) {\n          appendItem(item, f, this.customOption);\n        }, this);\n      }, this);\n    } else {\n      util.each(this.items, function (i, item) {\n        appendItem(item, f, this.customOption);\n      }, this);\n    }\n\n    // highlight first selected option if any; first option otherwise\n    if (f.childElementCount) {\n      util.removeClass(this.items[this.navIndex], \"active\");\n      this.navIndex = (f.querySelector(\".selectr-option.selected\") || f.querySelector(\".selectr-option\")).idx;\n      util.addClass(this.items[this.navIndex], \"active\");\n    }\n    this.tree.appendChild(f);\n  }\n};\n\n/**\n * Dismiss / close the dropdown\n * @param  {obj} e\n * @return {void}\n */\nvar dismiss = function dismiss(e) {\n  var target = e.target;\n  if (!this.container.contains(target) && (this.opened || util.hasClass(this.container, \"notice\"))) {\n    this.close();\n  }\n};\n\n/**\n * Build a list item from the HTMLOptionElement\n * @param  {int} i      HTMLOptionElement index\n * @param  {HTMLOptionElement} option\n * @param  {bool} group  Has parent optgroup\n * @return {void}\n */\nvar createItem = function createItem(option, data) {\n  data = data || option;\n  var elementData = {\n    \"class\": \"selectr-option\",\n    role: \"treeitem\",\n    \"aria-selected\": false\n  };\n  if (this.customOption) {\n    elementData.html = this.config.renderOption(data); // asume xss prevention in custom render function\n  } else {\n    elementData.textContent = option.textContent; // treat all as plain text\n  }\n  var opt = util.createElement(\"li\", elementData);\n  opt.idx = option.idx;\n  this.items.push(opt);\n  if (option.defaultSelected) {\n    this.defaultSelected.push(option.idx);\n  }\n  if (option.disabled) {\n    opt.disabled = true;\n    util.addClass(opt, \"disabled\");\n  }\n  return opt;\n};\n\n/**\n * Build the container\n * @return {Void}\n */\nvar build = function build() {\n  this.requiresPagination = this.config.pagination && this.config.pagination > 0;\n\n  // Set width\n  if (isset(this.config, \"width\")) {\n    if (util.isInt(this.config.width)) {\n      this.width = this.config.width + \"px\";\n    } else {\n      if (this.config.width === \"auto\") {\n        this.width = \"100%\";\n      } else if (util.includes(this.config.width, \"%\")) {\n        this.width = this.config.width;\n      }\n    }\n  }\n  this.container = util.createElement(\"div\", {\n    \"class\": \"selectr-container\"\n  });\n\n  // Custom className\n  if (this.config.customClass) {\n    util.addClass(this.container, this.config.customClass);\n  }\n\n  // Mobile device\n  if (this.mobileDevice) {\n    util.addClass(this.container, \"selectr-mobile\");\n  } else {\n    util.addClass(this.container, \"selectr-desktop\");\n  }\n\n  // Hide the HTMLSelectElement and prevent focus\n  this.el.tabIndex = -1;\n\n  // Native dropdown\n  if (this.config.nativeDropdown || this.mobileDevice) {\n    util.addClass(this.el, \"selectr-visible\");\n  } else {\n    util.addClass(this.el, \"selectr-hidden\");\n  }\n  this.selected = util.createElement(\"div\", {\n    \"class\": \"selectr-selected\",\n    disabled: this.disabled,\n    tabIndex: 0,\n    \"aria-expanded\": false\n  });\n  this.label = util.createElement(this.el.multiple ? \"ul\" : \"span\", {\n    \"class\": \"selectr-label\"\n  });\n  var dropdown = util.createElement(\"div\", {\n    \"class\": \"selectr-options-container\"\n  });\n  this.tree = util.createElement(\"ul\", {\n    \"class\": \"selectr-options\",\n    role: \"tree\",\n    \"aria-hidden\": true,\n    \"aria-expanded\": false\n  });\n  this.notice = util.createElement(\"div\", {\n    \"class\": \"selectr-notice\"\n  });\n  this.el.setAttribute(\"aria-hidden\", true);\n  if (this.disabled) {\n    this.el.disabled = true;\n  }\n  if (this.el.multiple) {\n    util.addClass(this.label, \"selectr-tags\");\n    util.addClass(this.container, \"multiple\");\n\n    // Collection of tags\n    this.tags = [];\n\n    // Collection of selected values\n    // #93 defaultSelected = false did not work as expected\n    this.selectedValues = this.config.defaultSelected ? this.getSelectedProperties('value') : [];\n\n    // Collection of selected indexes\n    this.selectedIndexes = this.getSelectedProperties('idx');\n  } else {\n    // #93 defaultSelected = false did not work as expected\n    // these values were undefined\n    this.selectedValue = null;\n    this.selectedIndex = -1;\n  }\n  this.selected.appendChild(this.label);\n  if (this.config.clearable) {\n    this.selectClear = util.createElement(\"button\", {\n      \"class\": \"selectr-clear\",\n      type: \"button\"\n    });\n    this.container.appendChild(this.selectClear);\n    util.addClass(this.container, \"clearable\");\n  }\n  if (this.config.taggable) {\n    var li = util.createElement('li', {\n      \"class\": 'input-tag'\n    });\n    this.input = util.createElement(\"input\", {\n      \"class\": \"selectr-tag-input\",\n      placeholder: this.config.tagPlaceholder,\n      tagIndex: 0,\n      autocomplete: \"off\",\n      autocorrect: \"off\",\n      autocapitalize: \"off\",\n      spellcheck: \"false\",\n      role: \"textbox\",\n      type: \"search\"\n    });\n    li.appendChild(this.input);\n    this.label.appendChild(li);\n    util.addClass(this.container, \"taggable\");\n    this.tagSeperators = [\",\"];\n    if (this.config.tagSeperators) {\n      this.tagSeperators = this.tagSeperators.concat(this.config.tagSeperators);\n      var _aTempEscapedSeperators = [];\n      for (var _nTagSeperatorStepCount = 0; _nTagSeperatorStepCount < this.tagSeperators.length; _nTagSeperatorStepCount++) {\n        _aTempEscapedSeperators.push(util.escapeRegExp(this.tagSeperators[_nTagSeperatorStepCount]));\n      }\n      this.tagSeperatorsRegex = new RegExp(_aTempEscapedSeperators.join('|'), 'i');\n    } else {\n      this.tagSeperatorsRegex = new RegExp(',', 'i');\n    }\n  }\n  if (this.config.searchable) {\n    this.input = util.createElement(\"input\", {\n      \"class\": \"selectr-input\",\n      tagIndex: -1,\n      autocomplete: \"off\",\n      autocorrect: \"off\",\n      autocapitalize: \"off\",\n      spellcheck: \"false\",\n      role: \"textbox\",\n      type: \"search\",\n      placeholder: this.config.messages.searchPlaceholder\n    });\n    this.inputClear = util.createElement(\"button\", {\n      \"class\": \"selectr-input-clear\",\n      type: \"button\"\n    });\n    this.inputContainer = util.createElement(\"div\", {\n      \"class\": \"selectr-input-container\"\n    });\n    this.inputContainer.appendChild(this.input);\n    this.inputContainer.appendChild(this.inputClear);\n    dropdown.appendChild(this.inputContainer);\n  }\n  dropdown.appendChild(this.notice);\n  dropdown.appendChild(this.tree);\n\n  // List of items for the dropdown\n  this.items = [];\n\n  // Establish options\n  this.options = [];\n\n  // Check for options in the element\n  if (this.el.options.length) {\n    this.options = [].slice.call(this.el.options);\n  }\n\n  // Element may have optgroups so\n  // iterate element.children instead of element.options\n  var group = false,\n    j = 0;\n  if (this.el.children.length) {\n    util.each(this.el.children, function (i, element) {\n      if (element.nodeName === \"OPTGROUP\") {\n        group = util.createElement(\"ul\", {\n          \"class\": \"selectr-optgroup\",\n          role: \"group\",\n          html: \"<li class='selectr-optgroup--label'>\" + element.label + \"</li>\"\n        });\n        util.each(element.children, function (x, el) {\n          el.idx = j;\n          group.appendChild(createItem.call(this, el, group));\n          j++;\n        }, this);\n      } else {\n        element.idx = j;\n        createItem.call(this, element);\n        j++;\n      }\n    }, this);\n  }\n\n  // Options defined by the data option\n  if (this.config.data && Array.isArray(this.config.data)) {\n    this.data = [];\n    var optgroup = false,\n      option;\n    group = false;\n    j = 0;\n    util.each(this.config.data, function (i, opt) {\n      // Check for group options\n      if (isset(opt, \"children\")) {\n        optgroup = util.createElement(\"optgroup\", {\n          label: opt.text\n        });\n        group = util.createElement(\"ul\", {\n          \"class\": \"selectr-optgroup\",\n          role: \"group\",\n          html: \"<li class='selectr-optgroup--label'>\" + opt.text + \"</li>\"\n        });\n        util.each(opt.children, function (x, data) {\n          option = new Option(data.text, data.value, false, data.hasOwnProperty(\"selected\") && data.selected === true);\n          option.disabled = isset(data, \"disabled\");\n          this.options.push(option);\n          optgroup.appendChild(option);\n          option.idx = j;\n          group.appendChild(createItem.call(this, option, data));\n          this.data[j] = data;\n          j++;\n        }, this);\n        this.el.appendChild(optgroup);\n      } else {\n        option = new Option(opt.text, opt.value, false, opt.hasOwnProperty(\"selected\") && opt.selected === true);\n        option.disabled = isset(opt, \"disabled\");\n        this.options.push(option);\n        option.idx = j;\n        createItem.call(this, option, opt);\n        this.data[j] = opt;\n        j++;\n      }\n    }, this);\n  }\n  this.setSelected(true);\n  var first;\n  this.navIndex = 0;\n  for (var i = 0; i < this.items.length; i++) {\n    first = this.items[i];\n    if (!util.hasClass(first, \"disabled\")) {\n      util.addClass(first, \"active\");\n      this.navIndex = i;\n      break;\n    }\n  }\n\n  // Check for pagination / infinite scroll\n  if (this.requiresPagination) {\n    this.pageIndex = 1;\n\n    // Create the pages\n    this.paginate();\n  }\n  this.container.appendChild(this.selected);\n  this.container.appendChild(dropdown);\n  this.placeEl = util.createElement(\"div\", {\n    \"class\": \"selectr-placeholder\"\n  });\n\n  // Set the placeholder\n  this.setPlaceholder();\n  this.selected.appendChild(this.placeEl);\n\n  // Disable if required\n  if (this.disabled) {\n    this.disable();\n  }\n  this.el.parentNode.insertBefore(this.container, this.el);\n  this.container.appendChild(this.el);\n};\n\n/**\n * Navigate through the dropdown\n * @param  {obj} e\n * @return {void}\n */\nvar navigate = function navigate(e) {\n  e = e || window.event;\n\n  // Filter out the keys we don\"t want\n  if (!this.items.length || !this.opened || !util.includes([13, 38, 40], e.which)) {\n    this.navigating = false;\n    return;\n  }\n  e.preventDefault();\n  if (e.which === 13) {\n    if (this.noResults || this.config.taggable && this.input.value.length > 0) {\n      return false;\n    }\n    return this.change(this.navIndex);\n  }\n  var direction,\n    prevEl = this.items[this.navIndex];\n  var lastIndex = this.navIndex;\n  switch (e.which) {\n    case 38:\n      direction = 0;\n      if (this.navIndex > 0) {\n        this.navIndex--;\n      }\n      break;\n    case 40:\n      direction = 1;\n      if (this.navIndex < this.items.length - 1) {\n        this.navIndex++;\n      }\n  }\n  this.navigating = true;\n\n  // Instead of wasting memory holding a copy of this.items\n  // with disabled / excluded options omitted, skip them instead\n  while (util.hasClass(this.items[this.navIndex], \"disabled\") || util.hasClass(this.items[this.navIndex], \"excluded\")) {\n    if (this.navIndex > 0 && this.navIndex < this.items.length - 1) {\n      if (direction) {\n        this.navIndex++;\n      } else {\n        this.navIndex--;\n      }\n    } else {\n      this.navIndex = lastIndex;\n      break;\n    }\n    if (this.searching) {\n      if (this.navIndex > this.tree.lastElementChild.idx) {\n        this.navIndex = this.tree.lastElementChild.idx;\n        break;\n      } else if (this.navIndex < this.tree.firstElementChild.idx) {\n        this.navIndex = this.tree.firstElementChild.idx;\n        break;\n      }\n    }\n  }\n\n  // Autoscroll the dropdown during navigation\n  var r = util.rect(this.items[this.navIndex]);\n  if (!direction) {\n    if (this.navIndex === 0) {\n      this.tree.scrollTop = 0;\n    } else if (r.top - this.optsRect.top < 0) {\n      this.tree.scrollTop = this.tree.scrollTop + (r.top - this.optsRect.top);\n    }\n  } else {\n    if (this.navIndex === 0) {\n      this.tree.scrollTop = 0;\n    } else if (r.top + r.height > this.optsRect.top + this.optsRect.height) {\n      this.tree.scrollTop = this.tree.scrollTop + (r.top + r.height - (this.optsRect.top + this.optsRect.height));\n    }\n\n    // Load another page if needed\n    if (this.navIndex === this.tree.childElementCount - 1 && this.requiresPagination) {\n      load.call(this);\n    }\n  }\n  if (prevEl) {\n    util.removeClass(prevEl, \"active\");\n  }\n  util.addClass(this.items[this.navIndex], \"active\");\n};\n\n/**\n * Add a tag\n * @param  {HTMLElement} item\n */\nvar addTag = function addTag(item) {\n  var that = this,\n    r;\n  var docFrag = document.createDocumentFragment();\n  var option = this.options[item.idx];\n  var data = this.data ? this.data[item.idx] : option;\n  var elementData = {\n    \"class\": \"selectr-tag\"\n  };\n  if (this.customSelected) {\n    elementData.html = this.config.renderSelection(data); // asume xss prevention in custom render function\n  } else {\n    elementData.textContent = option.textContent;\n  }\n  var tag = util.createElement(\"li\", elementData);\n  var btn = util.createElement(\"button\", {\n    \"class\": \"selectr-tag-remove\",\n    type: \"button\"\n  });\n  tag.appendChild(btn);\n\n  // Set property to check against later\n  tag.idx = item.idx;\n  tag.tag = option.value;\n  this.tags.push(tag);\n  if (this.config.sortSelected) {\n    var tags = this.tags.slice();\n\n    // Deal with values that contain numbers\n    r = function r(val, arr) {\n      val.replace(/(\\d+)|(\\D+)/g, function (that, $1, $2) {\n        arr.push([$1 || Infinity, $2 || \"\"]);\n      });\n    };\n    tags.sort(function (a, b) {\n      var x = [],\n        y = [],\n        ac,\n        bc;\n      if (that.config.sortSelected === true) {\n        ac = a.tag;\n        bc = b.tag;\n      } else if (that.config.sortSelected === 'text') {\n        ac = a.textContent;\n        bc = b.textContent;\n      }\n      r(ac, x);\n      r(bc, y);\n      while (x.length && y.length) {\n        var ax = x.shift();\n        var by = y.shift();\n        var nn = ax[0] - by[0] || ax[1].localeCompare(by[1]);\n        if (nn) return nn;\n      }\n      return x.length - y.length;\n    });\n    util.each(tags, function (i, tg) {\n      docFrag.appendChild(tg);\n    });\n    this.label.innerHTML = \"\";\n  } else {\n    docFrag.appendChild(tag);\n  }\n  if (this.config.taggable) {\n    this.label.insertBefore(docFrag, this.input.parentNode);\n  } else {\n    this.label.appendChild(docFrag);\n  }\n};\n\n/**\n * Remove a tag\n * @param  {HTMLElement} item\n * @return {void}\n */\nvar removeTag = function removeTag(item) {\n  var tag = false;\n  util.each(this.tags, function (i, t) {\n    if (t.idx === item.idx) {\n      tag = t;\n    }\n  }, this);\n  if (tag) {\n    this.label.removeChild(tag);\n    this.tags.splice(this.tags.indexOf(tag), 1);\n  }\n};\n\n/**\n * Load the next page of items\n * @return {void}\n */\nvar load = function load() {\n  var tree = this.tree;\n  var scrollTop = tree.scrollTop;\n  var scrollHeight = tree.scrollHeight;\n  var offsetHeight = tree.offsetHeight;\n  var atBottom = scrollTop >= scrollHeight - offsetHeight;\n  if (atBottom && this.pageIndex < this.pages.length) {\n    var f = document.createDocumentFragment();\n    util.each(this.pages[this.pageIndex], function (i, item) {\n      appendItem(item, f, this.customOption);\n    }, this);\n    tree.appendChild(f);\n    this.pageIndex++;\n    this.emit(\"selectr.paginate\", {\n      items: this.items.length,\n      total: this.data.length,\n      page: this.pageIndex,\n      pages: this.pages.length\n    });\n  }\n};\n\n/**\n * Clear a search\n * @return {void}\n */\nvar clearSearch = function clearSearch() {\n  if (this.config.searchable || this.config.taggable) {\n    this.input.value = null;\n    this.searching = false;\n    if (this.config.searchable) {\n      util.removeClass(this.inputContainer, \"active\");\n    }\n    if (util.hasClass(this.container, \"notice\")) {\n      util.removeClass(this.container, \"notice\");\n      util.addClass(this.container, \"open\");\n      this.input.focus();\n    }\n    util.each(this.items, function (i, item) {\n      // Items that didn't match need the class\n      // removing to make them visible again\n      util.removeClass(item, \"excluded\");\n      // Remove the span element for underlining matched items\n      if (!this.customOption) {\n        // without xss\n        item.textContent = item.textContent;\n      }\n    }, this);\n  }\n};\n\n/**\n * Query matching for searches.\n * Wraps matching text in a span.selectr-match.\n *\n * @param  {string} query\n * @param  {HTMLOptionElement} option element\n * @return {bool} true if matched; false otherwise\n */\nvar match = function match(query, option) {\n  var text = option.textContent;\n  var RX = new RegExp(query, \"ig\");\n  var result = RX.exec(text);\n  if (result) {\n    // #102 stop xss\n    option.innerHTML = \"\";\n    var span = document.createElement(\"span\");\n    span.classList.add(\"selectr-match\");\n    span.textContent = result[0];\n    option.appendChild(document.createTextNode(text.substring(0, result.index)));\n    option.appendChild(span);\n    option.appendChild(document.createTextNode(text.substring(RX.lastIndex)));\n    return true;\n  }\n  return false;\n};\n\n// Main Lib\nvar Selectr = function Selectr(el, config) {\n  if (!el) {\n    throw new Error(\"You must supply either a HTMLSelectElement or a CSS3 selector string.\");\n  }\n  this.el = el;\n\n  // CSS3 selector string\n  if (typeof el === \"string\") {\n    this.el = document.querySelector(el);\n  }\n  if (this.el === null) {\n    throw new Error(\"The element you passed to Selectr can not be found.\");\n  }\n  if (this.el.nodeName.toLowerCase() !== \"select\") {\n    throw new Error(\"The element you passed to Selectr is not a HTMLSelectElement.\");\n  }\n  this.render(config);\n};\n\n/**\n * Render the instance\n * @param  {object} config\n * @return {void}\n */\nSelectr.prototype.render = function (config) {\n  if (this.rendered) return;\n\n  /**\n   * Default configuration options\n   * @type {Object}\n   */\n  var defaultConfig = {\n    /**\n     * Emulates browser behaviour by selecting the first option by default\n     * @type {Boolean}\n     */\n    defaultSelected: true,\n    /**\n     * Sets the width of the container\n     * @type {String}\n     */\n    width: \"auto\",\n    /**\n     * Enables/ disables the container\n     * @type {Boolean}\n     */\n    disabled: false,\n    /**\n     * Enables/ disables logic for mobile\n     * @type {Boolean}\n     */\n    disabledMobile: false,\n    /**\n     * Enables / disables the search function\n     * @type {Boolean}\n     */\n    searchable: true,\n    /**\n     * Enable disable the clear button\n     * @type {Boolean}\n     */\n    clearable: false,\n    /**\n     * Sort the tags / multiselect options\n     * @type {Boolean}\n     */\n    sortSelected: false,\n    /**\n     * Allow deselecting of select-one options\n     * @type {Boolean}\n     */\n    allowDeselect: false,\n    /**\n     * Close the dropdown when scrolling (@AlexanderReiswich, #11)\n     * @type {Boolean}\n     */\n    closeOnScroll: false,\n    /**\n     * Allow the use of the native dropdown (@jonnyscholes, #14)\n     * @type {Boolean}\n     */\n    nativeDropdown: false,\n    /**\n     * Allow the use of native typing behavior for toggling, searching, selecting\n     * @type {boolean}\n     */\n    nativeKeyboard: false,\n    /**\n     * Set the main placeholder\n     * @type {String}\n     */\n    placeholder: \"Select an option...\",\n    /**\n     * Allow the tagging feature\n     * @type {Boolean}\n     */\n    taggable: false,\n    /**\n     * Set the tag input placeholder (@labikmartin, #21, #22)\n     * @type {String}\n     */\n    tagPlaceholder: \"Enter a tag...\",\n    messages: {\n      noResults: \"No results.\",\n      noOptions: \"No options available.\",\n      maxSelections: \"A maximum of {max} items can be selected.\",\n      tagDuplicate: \"That tag is already in use.\",\n      searchPlaceholder: \"Search options...\"\n    }\n  };\n\n  // add instance reference (#87)\n  this.el.selectr = this;\n\n  // Merge defaults with user set config\n  this.config = util.extend(defaultConfig, config);\n\n  // Store type\n  this.originalType = this.el.type;\n\n  // Store tabIndex\n  this.originalIndex = this.el.tabIndex;\n\n  // Store defaultSelected options for form reset\n  this.defaultSelected = [];\n\n  // Store the original option count\n  this.originalOptionCount = this.el.options.length;\n  if (this.config.multiple || this.config.taggable) {\n    this.el.multiple = true;\n  }\n\n  // Disabled?\n  this.disabled = isset(this.config, \"disabled\");\n  this.opened = false;\n  if (this.config.taggable) {\n    this.config.searchable = false;\n  }\n  this.navigating = false;\n  this.mobileDevice = false;\n  if (!this.config.disabledMobile && /Android|webOS|iPhone|iPad|BlackBerry|Windows Phone|Opera Mini|IEMobile|Mobile/i.test(navigator.userAgent)) {\n    this.mobileDevice = true;\n  }\n  this.customOption = this.config.hasOwnProperty(\"renderOption\") && typeof this.config.renderOption === \"function\";\n  this.customSelected = this.config.hasOwnProperty(\"renderSelection\") && typeof this.config.renderSelection === \"function\";\n  this.supportsEventPassiveOption = this.detectEventPassiveOption();\n\n  // Enable event emitter\n  Events.mixin(this);\n  build.call(this);\n  this.bindEvents();\n  this.update();\n  this.optsRect = util.rect(this.tree);\n  this.rendered = true;\n\n  // Fixes macOS Safari bug #28\n  if (!this.el.multiple) {\n    this.el.selectedIndex = this.selectedIndex;\n  }\n  var that = this;\n  setTimeout(function () {\n    that.emit(\"selectr.init\");\n  }, 20);\n};\nSelectr.prototype.getSelected = function () {\n  var selected = this.el.querySelectorAll('option:checked');\n  return selected;\n};\nSelectr.prototype.getSelectedProperties = function (prop) {\n  var selected = this.getSelected();\n  var values = [].slice.call(selected).map(function (option) {\n    return option[prop];\n  }).filter(function (i) {\n    return i !== null && i !== undefined;\n  });\n  return values;\n};\n\n/**\n * Feature detection: addEventListener passive option\n * https://dom.spec.whatwg.org/#dom-addeventlisteneroptions-passive\n * https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nSelectr.prototype.detectEventPassiveOption = function () {\n  var supportsPassiveOption = false;\n  try {\n    var opts = Object.defineProperty({}, 'passive', {\n      get: function get() {\n        supportsPassiveOption = true;\n      }\n    });\n    window.addEventListener('test', null, opts);\n  } catch (e) {}\n  return supportsPassiveOption;\n};\n\n/**\n * Attach the required event listeners\n */\nSelectr.prototype.bindEvents = function () {\n  var that = this;\n  this.events = {};\n  this.events.dismiss = dismiss.bind(this);\n  this.events.navigate = navigate.bind(this);\n  this.events.reset = this.reset.bind(this);\n  if (this.config.nativeDropdown || this.mobileDevice) {\n    this.container.addEventListener(\"touchstart\", function (e) {\n      if (e.changedTouches[0].target === that.el) {\n        that.toggle();\n      }\n    }, this.supportsEventPassiveOption ? {\n      passive: true\n    } : false);\n    this.container.addEventListener(\"click\", function (e) {\n      if (e.target === that.el) {\n        that.toggle();\n      }\n    });\n    var getChangedOptions = function getChangedOptions(last, current) {\n      var added = [],\n        removed = last.slice(0);\n      var idx;\n      for (var i = 0; i < current.length; i++) {\n        idx = removed.indexOf(current[i]);\n        if (idx > -1) removed.splice(idx, 1);else added.push(current[i]);\n      }\n      return [added, removed];\n    };\n\n    // Listen for the change on the native select\n    // and update accordingly\n    this.el.addEventListener(\"change\", function (e) {\n      if (e.__selfTriggered) {\n        return;\n      }\n      if (that.el.multiple) {\n        var indexes = that.getSelectedProperties('idx');\n        var changes = getChangedOptions(that.selectedIndexes, indexes);\n        util.each(changes[0], function (i, idx) {\n          that.select(idx);\n        }, that);\n        util.each(changes[1], function (i, idx) {\n          that.deselect(idx);\n        }, that);\n      } else {\n        if (that.el.selectedIndex > -1) {\n          that.select(that.el.selectedIndex);\n        }\n      }\n    });\n  }\n\n  // Open the dropdown with Enter key if focused\n  if (this.config.nativeDropdown) {\n    this.container.addEventListener(\"keydown\", function (e) {\n      if (e.key === \"Enter\" && that.selected === document.activeElement) {\n        // show native dropdown\n        that.toggle();\n        // focus on it\n        setTimeout(function () {\n          that.el.focus();\n        }, 200);\n      }\n    });\n  }\n\n  // Non-native dropdown\n  this.selected.addEventListener(\"click\", function (e) {\n    if (!that.disabled) {\n      that.toggle();\n    }\n    e.preventDefault();\n  });\n  if (this.config.nativeKeyboard) {\n    var typing = '';\n    var typingTimeout = null;\n    this.selected.addEventListener(\"keydown\", function (e) {\n      // Do nothing if disabled, not focused, or modifier keys are pressed\n      if (that.disabled || that.selected !== document.activeElement || e.altKey || e.ctrlKey || e.metaKey) {\n        return;\n      }\n\n      // Open the dropdown on [enter], [ ], [↓], and [↑] keys\n      if (e.key === \" \" || !that.opened && [\"Enter\", \"ArrowUp\", \"ArrowDown\"].indexOf(e.key) > -1) {\n        that.toggle();\n        e.preventDefault();\n        e.stopPropagation();\n        return;\n      }\n\n      // Type to search if multiple; type to select otherwise\n      // make sure e.key is a single, printable character\n      // .length check is a short-circut to skip checking keys like \"ArrowDown\", etc.\n      // prefer \"codePoint\" methods; they work with the full range of unicode\n      if (e.key.length <= 2 && String[String.fromCodePoint ? \"fromCodePoint\" : \"fromCharCode\"](e.key[String.codePointAt ? \"codePointAt\" : \"charCodeAt\"](0)) === e.key) {\n        if (that.config.multiple) {\n          that.open();\n          if (that.config.searchable) {\n            that.input.value = e.key;\n            that.input.focus();\n            that.search(null, true);\n          }\n        } else {\n          if (typingTimeout) {\n            clearTimeout(typingTimeout);\n          }\n          typing += e.key;\n          var found = that.search(typing, true);\n          if (found && found.length) {\n            that.clear();\n            that.setValue(found[0].value);\n          }\n          setTimeout(function () {\n            typing = '';\n          }, 1000);\n        }\n        e.preventDefault();\n        e.stopPropagation();\n        return;\n      }\n    });\n\n    // Close the dropdown on [esc] key\n    this.container.addEventListener(\"keyup\", function (e) {\n      if (that.opened && e.key === \"Escape\") {\n        that.close();\n        e.stopPropagation();\n\n        // keep focus so we can re-open easily if desired\n        that.selected.focus();\n      }\n    });\n  }\n\n  // Remove tag\n  this.label.addEventListener(\"click\", function (e) {\n    if (util.hasClass(e.target, \"selectr-tag-remove\")) {\n      that.deselect(e.target.parentNode.idx);\n    }\n  });\n\n  // Clear input\n  if (this.selectClear) {\n    this.selectClear.addEventListener(\"click\", this.clear.bind(this));\n  }\n\n  // Prevent text selection\n  this.tree.addEventListener(\"mousedown\", function (e) {\n    e.preventDefault();\n  });\n\n  // Select / deselect items\n  this.tree.addEventListener(\"click\", function (e) {\n    var item = util.closest(e.target, function (el) {\n      return el && util.hasClass(el, \"selectr-option\");\n    });\n    if (item) {\n      if (!util.hasClass(item, \"disabled\")) {\n        if (util.hasClass(item, \"selected\")) {\n          if (that.el.multiple || !that.el.multiple && that.config.allowDeselect) {\n            that.deselect(item.idx);\n          }\n        } else {\n          that.select(item.idx);\n        }\n        if (that.opened && !that.el.multiple) {\n          that.close();\n        }\n      }\n    }\n    e.preventDefault();\n    e.stopPropagation();\n  });\n\n  // Mouseover list items\n  this.tree.addEventListener(\"mouseover\", function (e) {\n    if (util.hasClass(e.target, \"selectr-option\")) {\n      if (!util.hasClass(e.target, \"disabled\")) {\n        util.removeClass(that.items[that.navIndex], \"active\");\n        util.addClass(e.target, \"active\");\n        that.navIndex = [].slice.call(that.items).indexOf(e.target);\n      }\n    }\n  });\n\n  // Searchable\n  if (this.config.searchable) {\n    // Show / hide the search input clear button\n\n    this.input.addEventListener(\"focus\", function (e) {\n      that.searching = true;\n    });\n    this.input.addEventListener(\"blur\", function (e) {\n      that.searching = false;\n    });\n    this.input.addEventListener(\"keyup\", function (e) {\n      that.search();\n      if (!that.config.taggable) {\n        // Show / hide the search input clear button\n        if (this.value.length) {\n          util.addClass(this.parentNode, \"active\");\n        } else {\n          util.removeClass(this.parentNode, \"active\");\n        }\n      }\n    });\n\n    // Clear the search input\n    this.inputClear.addEventListener(\"click\", function (e) {\n      that.input.value = null;\n      clearSearch.call(that);\n      if (!that.tree.childElementCount) {\n        render.call(that);\n      }\n    });\n  }\n  if (this.config.taggable) {\n    this.input.addEventListener(\"keyup\", function (e) {\n      that.search();\n      if (that.config.taggable && this.value.length) {\n        var _sVal = this.value.trim();\n        if (_sVal.length && (e.which === 13 || that.tagSeperatorsRegex.test(_sVal))) {\n          var _sGrabbedTagValue = _sVal.replace(that.tagSeperatorsRegex, '');\n          _sGrabbedTagValue = util.escapeRegExp(_sGrabbedTagValue);\n          _sGrabbedTagValue = _sGrabbedTagValue.trim();\n          var _oOption;\n          if (_sGrabbedTagValue.length) {\n            _oOption = that.add({\n              value: _sGrabbedTagValue,\n              textContent: _sGrabbedTagValue,\n              selected: true\n            }, true);\n          }\n          if (_oOption) {\n            that.close();\n            clearSearch.call(that);\n          } else {\n            this.value = '';\n            that.setMessage(that.config.messages.tagDuplicate);\n          }\n        }\n      }\n    });\n  }\n  this.update = util.debounce(function () {\n    // Optionally close dropdown on scroll / resize (#11)\n    if (that.opened && that.config.closeOnScroll) {\n      that.close();\n    }\n    if (that.width) {\n      that.container.style.width = that.width;\n    }\n    that.invert();\n  }, 50);\n  if (this.requiresPagination) {\n    this.paginateItems = util.debounce(function () {\n      load.call(this);\n    }, 50);\n    this.tree.addEventListener(\"scroll\", this.paginateItems.bind(this));\n  }\n\n  // Dismiss when clicking outside the container\n  document.addEventListener(\"click\", this.events.dismiss);\n  window.addEventListener(\"keydown\", this.events.navigate);\n  window.addEventListener(\"resize\", this.update);\n  window.addEventListener(\"scroll\", this.update);\n\n  // remove event listeners on destroy()\n  this.on('selectr.destroy', function () {\n    document.removeEventListener(\"click\", this.events.dismiss);\n    window.removeEventListener(\"keydown\", this.events.navigate);\n    window.removeEventListener(\"resize\", this.update);\n    window.removeEventListener(\"scroll\", this.update);\n  });\n\n  // Listen for form.reset() (@ambrooks, #13)\n  if (this.el.form) {\n    this.el.form.addEventListener(\"reset\", this.events.reset);\n\n    // remove listener on destroy()\n    this.on('selectr.destroy', function () {\n      this.el.form.removeEventListener(\"reset\", this.events.reset);\n    });\n  }\n};\n\n/**\n * Check for selected options\n * @param {bool} reset\n */\nSelectr.prototype.setSelected = function (reset) {\n  // Select first option as with a native select-one element - #21, #24\n  if (!this.config.data && !this.el.multiple && this.el.options.length) {\n    // Browser has selected the first option by default\n    if (this.el.selectedIndex === 0) {\n      if (!this.el.options[0].defaultSelected && !this.config.defaultSelected) {\n        this.el.selectedIndex = -1;\n      }\n    }\n    this.selectedIndex = this.el.selectedIndex;\n    if (this.selectedIndex > -1) {\n      this.select(this.selectedIndex);\n    }\n  }\n\n  // If we're changing a select-one to select-multiple via the config\n  // and there are no selected options, the first option will be selected by the browser\n  // Let's prevent that here.\n  if (this.config.multiple && this.originalType === \"select-one\" && !this.config.data) {\n    if (this.el.options[0].selected && !this.el.options[0].defaultSelected) {\n      this.el.options[0].selected = false;\n    }\n  }\n  util.each(this.options, function (i, option) {\n    if (option.selected && option.defaultSelected) {\n      this.select(option.idx);\n    }\n  }, this);\n  if (this.config.selectedValue) {\n    this.setValue(this.config.selectedValue);\n  }\n  if (this.config.data) {\n    if (!this.el.multiple && this.config.defaultSelected && this.el.selectedIndex < 0 && this.config.data.length > 0) {\n      this.select(0);\n    }\n    var j = 0;\n    util.each(this.config.data, function (i, opt) {\n      // Check for group options\n      if (isset(opt, \"children\")) {\n        util.each(opt.children, function (x, item) {\n          if (item.hasOwnProperty(\"selected\") && item.selected === true) {\n            this.select(j);\n          }\n          j++;\n        }, this);\n      } else {\n        if (opt.hasOwnProperty(\"selected\") && opt.selected === true) {\n          this.select(j);\n        }\n        j++;\n      }\n    }, this);\n  }\n};\n\n/**\n * Destroy the instance\n * @return {void}\n */\nSelectr.prototype.destroy = function () {\n  if (!this.rendered) return;\n  this.emit(\"selectr.destroy\");\n\n  // Revert to select-single if programtically set to multiple\n  if (this.originalType === 'select-one') {\n    this.el.multiple = false;\n  }\n  if (this.config.data) {\n    this.el.innerHTML = \"\";\n  }\n\n  // Remove the className from select element\n  util.removeClass(this.el, 'selectr-hidden');\n\n  // Replace the container with the original select element\n  this.container.parentNode.replaceChild(this.el, this.container);\n  this.rendered = false;\n\n  // remove reference\n  delete this.el.selectr;\n};\n\n/**\n * Change an options state\n * @param  {Number} index\n * @return {void}\n */\nSelectr.prototype.change = function (index) {\n  var item = this.items[index],\n    option = this.options[index];\n  if (option.disabled) {\n    return;\n  }\n  if (option.selected && util.hasClass(item, \"selected\")) {\n    this.deselect(index);\n  } else {\n    this.select(index);\n  }\n  if (this.opened && !this.el.multiple) {\n    this.close();\n  }\n};\n\n/**\n * Select an option\n * @param  {Number} index\n * @return {void}\n */\nSelectr.prototype.select = function (index) {\n  var item = this.items[index],\n    options = [].slice.call(this.el.options),\n    option = this.options[index];\n  if (this.el.multiple) {\n    if (util.includes(this.selectedIndexes, index)) {\n      return false;\n    }\n    if (this.config.maxSelections && this.tags.length === this.config.maxSelections) {\n      this.setMessage(this.config.messages.maxSelections.replace(\"{max}\", this.config.maxSelections), true);\n      return false;\n    }\n    this.selectedValues.push(option.value);\n    this.selectedIndexes.push(index);\n    addTag.call(this, item);\n  } else {\n    var data = this.data ? this.data[index] : option;\n    if (this.customSelected) {\n      this.label.innerHTML = this.config.renderSelection(data);\n    } else {\n      // no xss\n      this.label.textContent = option.textContent;\n    }\n    this.selectedValue = option.value;\n    this.selectedIndex = index;\n    util.each(this.options, function (i, o) {\n      var opt = this.items[i];\n      if (i !== index) {\n        if (opt) {\n          util.removeClass(opt, \"selected\");\n        }\n        o.selected = false;\n        o.removeAttribute(\"selected\");\n      }\n    }, this);\n  }\n  if (!util.includes(options, option)) {\n    this.el.add(option);\n  }\n  item.setAttribute(\"aria-selected\", true);\n  util.addClass(item, \"selected\");\n  util.addClass(this.container, \"has-selected\");\n  option.selected = true;\n  option.setAttribute(\"selected\", \"\");\n  this.emit(\"selectr.change\", option);\n  this.emit(\"selectr.select\", option);\n\n  // fire native change event\n  if (\"createEvent\" in document) {\n    var evt = document.createEvent(\"HTMLEvents\");\n    evt.initEvent(\"change\", true, true);\n    evt.__selfTriggered = true;\n    this.el.dispatchEvent(evt);\n  } else {\n    this.el.fireEvent(\"onchange\");\n  }\n};\n\n/**\n * Deselect an option\n * @param  {Number} index\n * @return {void}\n */\nSelectr.prototype.deselect = function (index, force) {\n  var item = this.items[index],\n    option = this.options[index];\n  if (this.el.multiple) {\n    var selIndex = this.selectedIndexes.indexOf(index);\n    this.selectedIndexes.splice(selIndex, 1);\n    var valIndex = this.selectedValues.indexOf(option.value);\n    this.selectedValues.splice(valIndex, 1);\n    removeTag.call(this, item);\n    if (!this.tags.length) {\n      util.removeClass(this.container, \"has-selected\");\n    }\n  } else {\n    if (!force && !this.config.clearable && !this.config.allowDeselect) {\n      return false;\n    }\n    this.label.innerHTML = \"\";\n    this.selectedValue = null;\n    this.el.selectedIndex = this.selectedIndex = -1;\n    util.removeClass(this.container, \"has-selected\");\n  }\n  this.items[index].setAttribute(\"aria-selected\", false);\n  util.removeClass(this.items[index], \"selected\");\n  option.selected = false;\n  option.removeAttribute(\"selected\");\n  this.emit(\"selectr.change\", null);\n  this.emit(\"selectr.deselect\", option);\n\n  // fire native change event\n  if (\"createEvent\" in document) {\n    var evt = document.createEvent(\"HTMLEvents\");\n    evt.initEvent(\"change\", true, true);\n    evt.__selfTriggered = true;\n    this.el.dispatchEvent(evt);\n  } else {\n    this.el.fireEvent(\"onchange\");\n  }\n};\n\n/**\n * Programmatically set selected values\n * @param {String|Array} value - A string or an array of strings\n */\nSelectr.prototype.setValue = function (value) {\n  var isArray = Array.isArray(value);\n  if (!isArray) {\n    value = value.toString().trim();\n  }\n\n  // Can't pass array to select-one\n  if (!this.el.multiple && isArray) {\n    return false;\n  }\n  util.each(this.options, function (i, option) {\n    if (isArray && value.indexOf(option.value) > -1 || option.value === value) {\n      this.change(option.idx);\n    }\n  }, this);\n};\n\n/**\n * Set the selected value(s)\n * @param  {bool} toObject Return only the raw values or an object\n * @param  {bool} toJson   Return the object as a JSON string\n * @return {mixed}         Array or String\n */\nSelectr.prototype.getValue = function (toObject, toJson) {\n  var value;\n  if (this.el.multiple) {\n    if (toObject) {\n      if (this.selectedIndexes.length) {\n        value = {};\n        value.values = [];\n        util.each(this.selectedIndexes, function (i, index) {\n          var option = this.options[index];\n          value.values[i] = {\n            value: option.value,\n            text: option.textContent\n          };\n        }, this);\n      }\n    } else {\n      value = this.selectedValues.slice();\n    }\n  } else {\n    if (toObject) {\n      var option = this.options[this.selectedIndex];\n      value = {\n        value: option.value,\n        text: option.textContent\n      };\n    } else {\n      value = this.selectedValue;\n    }\n  }\n  if (toObject && toJson) {\n    value = JSON.stringify(value);\n  }\n  return value;\n};\n\n/**\n * Add a new option or options\n * @param {object} data\n */\nSelectr.prototype.add = function (data, checkDuplicate) {\n  if (data) {\n    this.data = this.data || [];\n    this.items = this.items || [];\n    this.options = this.options || [];\n    if (Array.isArray(data)) {\n      // We have an array on items\n      util.each(data, function (i, obj) {\n        this.add(obj, checkDuplicate);\n      }, this);\n    }\n    // User passed a single object to the method\n    // or Selectr passed an object from an array\n    else if (\"[object Object]\" === Object.prototype.toString.call(data)) {\n      if (checkDuplicate) {\n        var dupe = false;\n        util.each(this.options, function (i, option) {\n          if (option.value.toLowerCase() === data.value.toLowerCase()) {\n            dupe = true;\n          }\n        });\n        if (dupe) {\n          return false;\n        }\n      }\n      var option = util.createElement('option', data);\n      this.data.push(data);\n\n      // fix for native iOS dropdown otherwise the native dropdown will be empty\n      if (this.mobileDevice) {\n        this.el.add(option);\n      }\n\n      // Add the new option to the list\n      this.options.push(option);\n\n      // Add the index for later use\n      option.idx = this.options.length > 0 ? this.options.length - 1 : 0;\n\n      // Create a new item\n      createItem.call(this, option);\n\n      // Select the item if required\n      if (data.selected) {\n        this.select(option.idx);\n      }\n\n      // We may have had an empty select so update\n      // the placeholder to reflect the changes.\n      this.setPlaceholder();\n      return option;\n    }\n\n    // Recount the pages\n    if (this.config.pagination) {\n      this.paginate();\n    }\n    return true;\n  }\n};\n\n/**\n * Remove an option or options\n * @param  {Mixed} o Array, integer (index) or string (value)\n * @return {Void}\n */\nSelectr.prototype.remove = function (o) {\n  var options = [];\n  if (Array.isArray(o)) {\n    util.each(o, function (i, opt) {\n      if (util.isInt(opt)) {\n        options.push(this.getOptionByIndex(opt));\n      } else if (typeof opt === \"string\") {\n        options.push(this.getOptionByValue(opt));\n      }\n    }, this);\n  } else if (util.isInt(o)) {\n    options.push(this.getOptionByIndex(o));\n  } else if (typeof o === \"string\") {\n    options.push(this.getOptionByValue(o));\n  }\n  if (options.length) {\n    var index;\n    util.each(options, function (i, option) {\n      index = option.idx;\n\n      // Remove the HTMLOptionElement\n      this.el.remove(option);\n\n      // Remove the reference from the option array\n      this.options.splice(index, 1);\n\n      // If the item has a parentNode (group element) it needs to be removed\n      // otherwise the render function will still append it to the dropdown\n      var parentNode = this.items[index].parentNode;\n      if (parentNode) {\n        parentNode.removeChild(this.items[index]);\n      }\n\n      // Remove reference from the items array\n      this.items.splice(index, 1);\n\n      // Reset the indexes\n      util.each(this.options, function (i, opt) {\n        opt.idx = i;\n        this.items[i].idx = i;\n      }, this);\n    }, this);\n\n    // We may have had an empty select now so update\n    // the placeholder to reflect the changes.\n    this.setPlaceholder();\n\n    // Recount the pages\n    if (this.config.pagination) {\n      this.paginate();\n    }\n  }\n};\n\n/**\n * Remove all options\n */\nSelectr.prototype.removeAll = function () {\n  // Clear any selected options\n  this.clear(true);\n\n  // Remove the HTMLOptionElements\n  util.each(this.el.options, function (i, option) {\n    this.el.remove(option);\n  }, this);\n\n  // Empty the dropdown\n  util.truncate(this.tree);\n\n  // Reset variables\n  this.items = [];\n  this.options = [];\n  this.data = [];\n  this.navIndex = 0;\n  if (this.requiresPagination) {\n    this.requiresPagination = false;\n    this.pageIndex = 1;\n    this.pages = [];\n  }\n\n  // Update the placeholder\n  this.setPlaceholder();\n};\n\n/**\n * Perform a search\n * @param {string}|{null} query The query string (taken from user input if null)\n * @param {boolean} anchor Anchor search to beginning of strings (defaults to false)?\n * @return {Array} Search results, as an array of {text, value} objects\n */\nSelectr.prototype.search = function (string, anchor) {\n  if (this.navigating) {\n    return;\n  }\n\n  // we're only going to alter the DOM for \"live\" searches\n  var live = false;\n  if (!string) {\n    string = this.input.value;\n    live = true;\n\n    // Remove message and clear dropdown\n    this.removeMessage();\n    util.truncate(this.tree);\n  }\n  var results = [];\n  var f = document.createDocumentFragment();\n  string = string.trim().toLowerCase();\n  if (string.length > 0) {\n    var compare = anchor ? util.startsWith : util.includes;\n    util.each(this.options, function (i, option) {\n      var item = this.items[option.idx];\n      var matches = compare(option.textContent.trim().toLowerCase(), string);\n      if (matches && !option.disabled) {\n        results.push({\n          text: option.textContent,\n          value: option.value\n        });\n        if (live) {\n          appendItem(item, f, this.customOption);\n          util.removeClass(item, \"excluded\");\n\n          // Underline the matching results\n          if (!this.customOption) {\n            match(string, option);\n          }\n        }\n      } else if (live) {\n        util.addClass(item, \"excluded\");\n      }\n    }, this);\n    if (live) {\n      // Append results\n      if (!f.childElementCount) {\n        if (!this.config.taggable) {\n          this.noResults = true;\n          this.setMessage(this.config.messages.noResults);\n        }\n      } else {\n        // Highlight top result (@binary-koan #26)\n        var prevEl = this.items[this.navIndex];\n        var firstEl = f.querySelector(\".selectr-option:not(.excluded)\");\n        this.noResults = false;\n        util.removeClass(prevEl, \"active\");\n        this.navIndex = firstEl.idx;\n        util.addClass(firstEl, \"active\");\n      }\n      this.tree.appendChild(f);\n    }\n  } else {\n    render.call(this);\n  }\n  return results;\n};\n\n/**\n * Toggle the dropdown\n * @return {void}\n */\nSelectr.prototype.toggle = function () {\n  if (!this.disabled) {\n    if (this.opened) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n};\n\n/**\n * Open the dropdown\n * @return {void}\n */\nSelectr.prototype.open = function () {\n  var that = this;\n  if (!this.options.length) {\n    return false;\n  }\n  if (!this.opened) {\n    this.emit(\"selectr.open\");\n  }\n  this.opened = true;\n  if (this.mobileDevice || this.config.nativeDropdown) {\n    util.addClass(this.container, \"native-open\");\n    if (this.config.data) {\n      // Dump the options into the select\n      // otherwise the native dropdown will be empty\n      util.each(this.options, function (i, option) {\n        this.el.add(option);\n      }, this);\n    }\n    return;\n  }\n  util.addClass(this.container, \"open\");\n  render.call(this);\n  this.invert();\n  this.tree.scrollTop = 0;\n  util.removeClass(this.container, \"notice\");\n  this.selected.setAttribute(\"aria-expanded\", true);\n  this.tree.setAttribute(\"aria-hidden\", false);\n  this.tree.setAttribute(\"aria-expanded\", true);\n  if (this.config.searchable && !this.config.taggable) {\n    setTimeout(function () {\n      that.input.focus();\n      // Allow tab focus\n      that.input.tabIndex = 0;\n    }, 10);\n  }\n};\n\n/**\n * Close the dropdown\n * @return {void}\n */\nSelectr.prototype.close = function () {\n  if (this.opened) {\n    this.emit(\"selectr.close\");\n  }\n  this.opened = false;\n  this.navigating = false;\n  if (this.mobileDevice || this.config.nativeDropdown) {\n    util.removeClass(this.container, \"native-open\");\n    return;\n  }\n  var notice = util.hasClass(this.container, \"notice\");\n  if (this.config.searchable && !notice) {\n    this.input.blur();\n    // Disable tab focus\n    this.input.tabIndex = -1;\n    this.searching = false;\n  }\n  if (notice) {\n    util.removeClass(this.container, \"notice\");\n    this.notice.textContent = \"\";\n  }\n  util.removeClass(this.container, \"open\");\n  util.removeClass(this.container, \"native-open\");\n  this.selected.setAttribute(\"aria-expanded\", false);\n  this.tree.setAttribute(\"aria-hidden\", true);\n  this.tree.setAttribute(\"aria-expanded\", false);\n  util.truncate(this.tree);\n  clearSearch.call(this);\n};\n\n/**\n * Enable the element\n * @return {void}\n */\nSelectr.prototype.enable = function () {\n  this.disabled = false;\n  this.el.disabled = false;\n  this.selected.tabIndex = this.originalIndex;\n  if (this.el.multiple) {\n    util.each(this.tags, function (i, t) {\n      t.lastElementChild.tabIndex = 0;\n    });\n  }\n  util.removeClass(this.container, \"selectr-disabled\");\n};\n\n/**\n * Disable the element\n * @param  {boolean} container Disable the container only (allow value submit with form)\n * @return {void}\n */\nSelectr.prototype.disable = function (container) {\n  if (!container) {\n    this.el.disabled = true;\n  }\n  this.selected.tabIndex = -1;\n  if (this.el.multiple) {\n    util.each(this.tags, function (i, t) {\n      t.lastElementChild.tabIndex = -1;\n    });\n  }\n  this.disabled = true;\n  util.addClass(this.container, \"selectr-disabled\");\n};\n\n/**\n * Reset to initial state\n * @return {void}\n */\nSelectr.prototype.reset = function () {\n  if (!this.disabled) {\n    this.clear();\n    this.setSelected(true);\n    util.each(this.defaultSelected, function (i, idx) {\n      this.select(idx);\n    }, this);\n    this.emit(\"selectr.reset\");\n  }\n};\n\n/**\n * Clear all selections\n * @return {void}\n */\nSelectr.prototype.clear = function (force, isClearLast) {\n  if (this.el.multiple) {\n    // Loop over the selectedIndexes so we don't have to loop over all the options\n    // which can be costly if there are a lot of them\n\n    if (this.selectedIndexes.length) {\n      // Copy the array or we'll get an error\n      var indexes = this.selectedIndexes.slice();\n      if (isClearLast) {\n        this.deselect(indexes.slice(-1)[0]);\n      } else {\n        util.each(indexes, function (i, idx) {\n          this.deselect(idx);\n        }, this);\n      }\n    }\n  } else {\n    if (this.selectedIndex > -1) {\n      this.deselect(this.selectedIndex, force);\n    }\n  }\n  this.emit(\"selectr.clear\");\n};\n\n/**\n * Return serialised data\n * @param  {boolean} toJson\n * @return {mixed} Returns either an object or JSON string\n */\nSelectr.prototype.serialise = function (toJson) {\n  var data = [];\n  util.each(this.options, function (i, option) {\n    var obj = {\n      value: option.value,\n      text: option.textContent\n    };\n    if (option.selected) {\n      obj.selected = true;\n    }\n    if (option.disabled) {\n      obj.disabled = true;\n    }\n    data[i] = obj;\n  });\n  return toJson ? JSON.stringify(data) : data;\n};\n\n/**\n * Localised version of serialise() method\n */\nSelectr.prototype.serialize = function (toJson) {\n  return this.serialise(toJson);\n};\n\n/**\n * Sets the placeholder\n * @param {String} placeholder\n */\nSelectr.prototype.setPlaceholder = function (placeholder) {\n  // Set the placeholder\n  placeholder = placeholder || this.config.placeholder || this.el.getAttribute(\"placeholder\");\n  if (!this.options.length) {\n    placeholder = this.config.messages.noOptions;\n  }\n  this.placeEl.innerHTML = placeholder;\n};\n\n/**\n * Paginate the option list\n * @return {Array}\n */\nSelectr.prototype.paginate = function () {\n  if (this.items.length) {\n    var that = this;\n    this.pages = this.items.map(function (v, i) {\n      return i % that.config.pagination === 0 ? that.items.slice(i, i + that.config.pagination) : null;\n    }).filter(function (pages) {\n      return pages;\n    });\n    return this.pages;\n  }\n};\n\n/**\n * Display a message\n * @param  {String} message The message\n */\nSelectr.prototype.setMessage = function (message, close) {\n  if (close) {\n    this.close();\n  }\n  util.addClass(this.container, \"notice\");\n  this.notice.textContent = message;\n};\n\n/**\n * Dismiss the current message\n */\nSelectr.prototype.removeMessage = function () {\n  util.removeClass(this.container, \"notice\");\n  this.notice.innerHTML = \"\";\n};\n\n/**\n * Keep the dropdown within the window\n * @return {void}\n */\nSelectr.prototype.invert = function () {\n  var rt = util.rect(this.selected),\n    oh = this.tree.parentNode.offsetHeight,\n    wh = window.innerHeight,\n    doInvert = rt.top + rt.height + oh > wh;\n  if (doInvert) {\n    util.addClass(this.container, \"inverted\");\n    this.isInverted = true;\n  } else {\n    util.removeClass(this.container, \"inverted\");\n    this.isInverted = false;\n  }\n  this.optsRect = util.rect(this.tree);\n};\n\n/**\n * Get an option via it's index\n * @param  {Integer} index The index of the HTMLOptionElement required\n * @return {HTMLOptionElement}\n */\nSelectr.prototype.getOptionByIndex = function (index) {\n  return this.options[index];\n};\n\n/**\n * Get an option via it's value\n * @param  {String} value The value of the HTMLOptionElement required\n * @return {HTMLOptionElement}\n */\nSelectr.prototype.getOptionByValue = function (value) {\n  var option = false;\n  for (var i = 0, l = this.options.length; i < l; i++) {\n    if (this.options[i].value.trim() === value.toString().trim()) {\n      option = this.options[i];\n      break;\n    }\n  }\n  return option;\n};\nmodule.exports = Selectr;\n\n/***/ }),\n\n/***/ 660:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Oq: function() { return /* binding */ SIZE_LARGE; },\n/* harmony export */   SC: function() { return /* binding */ PREVIEW_HISTORY_LIMIT; },\n/* harmony export */   ai: function() { return /* binding */ DEFAULT_MODAL_ANCHOR; },\n/* harmony export */   hJ: function() { return /* binding */ MAX_PREVIEW_CHARACTERS; }\n/* harmony export */ });\nvar DEFAULT_MODAL_ANCHOR = document.body;\nvar SIZE_LARGE = 10 * 1024 * 1024; // 10 MB\nvar MAX_PREVIEW_CHARACTERS = 20000;\nvar PREVIEW_HISTORY_LIMIT = 2 * 1024 * 1024 * 1024; // 2 GB\n\n/***/ }),\n\n/***/ 1925:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   p: function() { return /* binding */ createAbsoluteAnchor; }\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6237);\n\n\n/**\n * Create an anchor element absolutely positioned in the `parent`\n * element.\n * @param {HTMLElement} anchor\n * @param {HTMLElement} parent\n * @param {function(HTMLElement)} [onDestroy]  Callback when the anchor is destroyed\n * @param {boolean} [destroyOnMouseOut=false] If true, anchor will be removed on mouse out\n * @returns {HTMLElement}\n */\nfunction createAbsoluteAnchor(anchor, parent, onDestroy) {\n  var destroyOnMouseOut = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  var root = getRootNode(anchor);\n  var eventListeners = {};\n  var anchorRect = anchor.getBoundingClientRect();\n  var parentRect = parent.getBoundingClientRect();\n  var absoluteAnchor = document.createElement('div');\n  absoluteAnchor.className = 'jsoneditor-anchor';\n  absoluteAnchor.style.position = 'absolute';\n  absoluteAnchor.style.left = anchorRect.left - parentRect.left + 'px';\n  absoluteAnchor.style.top = anchorRect.top - parentRect.top + 'px';\n  absoluteAnchor.style.width = anchorRect.width - 2 + 'px';\n  absoluteAnchor.style.height = anchorRect.height - 2 + 'px';\n  absoluteAnchor.style.boxSizing = 'border-box';\n  parent.appendChild(absoluteAnchor);\n  function destroy() {\n    // remove temporary absolutely positioned anchor\n    if (absoluteAnchor && absoluteAnchor.parentNode) {\n      absoluteAnchor.parentNode.removeChild(absoluteAnchor);\n\n      // remove all event listeners\n      // all event listeners are supposed to be attached to document.\n      for (var name in eventListeners) {\n        if (hasOwnProperty(eventListeners, name)) {\n          var fn = eventListeners[name];\n          if (fn) {\n            (0,_util__WEBPACK_IMPORTED_MODULE_0__.removeEventListener)(root, name, fn);\n          }\n          delete eventListeners[name];\n        }\n      }\n      if (typeof onDestroy === 'function') {\n        onDestroy(anchor);\n      }\n    }\n  }\n  function isOutside(target) {\n    return target !== absoluteAnchor && !(0,_util__WEBPACK_IMPORTED_MODULE_0__.isChildOf)(target, absoluteAnchor);\n  }\n\n  // create and attach event listeners\n  function destroyIfOutside(event) {\n    if (isOutside(event.target)) {\n      destroy();\n    }\n  }\n  eventListeners.mousedown = (0,_util__WEBPACK_IMPORTED_MODULE_0__.addEventListener)(root, 'mousedown', destroyIfOutside);\n  eventListeners.mousewheel = (0,_util__WEBPACK_IMPORTED_MODULE_0__.addEventListener)(root, 'mousewheel', destroyIfOutside);\n  if (destroyOnMouseOut) {\n    var destroyTimer = null;\n    absoluteAnchor.onmouseover = function () {\n      clearTimeout(destroyTimer);\n      destroyTimer = null;\n    };\n    absoluteAnchor.onmouseout = function () {\n      if (!destroyTimer) {\n        destroyTimer = setTimeout(destroy, 200);\n      }\n    };\n  }\n  absoluteAnchor.destroy = destroy;\n  return absoluteAnchor;\n}\n\n/**\n * Node.getRootNode shim\n * @param  {HTMLElement} node node to check\n * @return {HTMLElement}      node's rootNode or `window` if there is ShadowDOM is not supported.\n */\nfunction getRootNode(node) {\n  return typeof node.getRootNode === 'function' ? node.getRootNode() : window;\n}\nfunction hasOwnProperty(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n\n/***/ }),\n\n/***/ 5477:\n/***/ (function(module) {\n\nmodule.exports = 'data:application/javascript;base64,Im5vIHVzZSBzdHJpY3QiOwohKGZ1bmN0aW9uKHdpbmRvdykgewppZiAodHlwZW9mIHdpbmRvdy53aW5kb3cgIT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50KQogICAgcmV0dXJuOwppZiAod2luZG93LnJlcXVpcmUgJiYgd2luZG93LmRlZmluZSkKICAgIHJldHVybjsKCmlmICghd2luZG93LmNvbnNvbGUpIHsKICAgIHdpbmRvdy5jb25zb2xlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1zZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlOiAibG9nIiwgZGF0YTogbXNnc30pOwogICAgfTsKICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0KICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSAKICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9CiAgICB3aW5kb3cuY29uc29sZS50cmFjZSA9IHdpbmRvdy5jb25zb2xlOwp9CndpbmRvdy53aW5kb3cgPSB3aW5kb3c7CndpbmRvdy5hY2UgPSB3aW5kb3c7Cgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGZpbGUsIGxpbmUsIGNvbCwgZXJyKSB7CiAgICBwb3N0TWVzc2FnZSh7dHlwZTogImVycm9yIiwgZGF0YTogewogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgZGF0YTogZXJyICYmIGVyci5kYXRhLAogICAgICAgIGZpbGU6IGZpbGUsCiAgICAgICAgbGluZTogbGluZSwgCiAgICAgICAgY29sOiBjb2wsCiAgICAgICAgc3RhY2s6IGVyciAmJiBlcnIuc3RhY2sKICAgIH19KTsKfTsKCndpbmRvdy5ub3JtYWxpemVNb2R1bGUgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlTmFtZSkgewogICAgLy8gbm9ybWFsaXplIHBsdWdpbiByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuaW5kZXhPZigiISIpICE9PSAtMSkgewogICAgICAgIHZhciBjaHVua3MgPSBtb2R1bGVOYW1lLnNwbGl0KCIhIik7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5ub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGNodW5rc1swXSkgKyAiISIgKyB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMV0pOwogICAgfQogICAgLy8gbm9ybWFsaXplIHJlbGF0aXZlIHJlcXVpcmVzCiAgICBpZiAobW9kdWxlTmFtZS5jaGFyQXQoMCkgPT0gIi4iKSB7CiAgICAgICAgdmFyIGJhc2UgPSBwYXJlbnRJZC5zcGxpdCgiLyIpLnNsaWNlKDAsIC0xKS5qb2luKCIvIik7CiAgICAgICAgbW9kdWxlTmFtZSA9IChiYXNlID8gYmFzZSArICIvIiA6ICIiKSArIG1vZHVsZU5hbWU7CiAgICAgICAgCiAgICAgICAgd2hpbGUgKG1vZHVsZU5hbWUuaW5kZXhPZigiLiIpICE9PSAtMSAmJiBwcmV2aW91cyAhPSBtb2R1bGVOYW1lKSB7CiAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IG1vZHVsZU5hbWU7CiAgICAgICAgICAgIG1vZHVsZU5hbWUgPSBtb2R1bGVOYW1lLnJlcGxhY2UoL15cLlwvLywgIiIpLnJlcGxhY2UoL1wvXC5cLy8sICIvIikucmVwbGFjZSgvW15cL10rXC9cLlwuXC8vLCAiIik7CiAgICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gbW9kdWxlTmFtZTsKfTsKCndpbmRvdy5yZXF1aXJlID0gZnVuY3Rpb24gcmVxdWlyZShwYXJlbnRJZCwgaWQpIHsKICAgIGlmICghaWQpIHsKICAgICAgICBpZCA9IHBhcmVudElkOwogICAgICAgIHBhcmVudElkID0gbnVsbDsKICAgIH0KICAgIGlmICghaWQuY2hhckF0KQogICAgICAgIHRocm93IG5ldyBFcnJvcigid29ya2VyLmpzIHJlcXVpcmUoKSBhY2NlcHRzIG9ubHkgKHBhcmVudElkLCBpZCkgYXMgYXJndW1lbnRzIik7CgogICAgaWQgPSB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBpZCk7CgogICAgdmFyIG1vZHVsZSA9IHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdOwogICAgaWYgKG1vZHVsZSkgewogICAgICAgIGlmICghbW9kdWxlLmluaXRpYWxpemVkKSB7CiAgICAgICAgICAgIG1vZHVsZS5pbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbW9kdWxlLmZhY3RvcnkoKS5leHBvcnRzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHM7CiAgICB9CiAgIAogICAgaWYgKCF3aW5kb3cucmVxdWlyZS50bG5zKQogICAgICAgIHJldHVybiBjb25zb2xlLmxvZygidW5hYmxlIHRvIGxvYWQgIiArIGlkKTsKICAgIAogICAgdmFyIHBhdGggPSByZXNvbHZlTW9kdWxlSWQoaWQsIHdpbmRvdy5yZXF1aXJlLnRsbnMpOwogICAgaWYgKHBhdGguc2xpY2UoLTMpICE9ICIuanMiKSBwYXRoICs9ICIuanMiOwogICAgCiAgICB3aW5kb3cucmVxdWlyZS5pZCA9IGlkOwogICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7fTsgLy8gcHJldmVudCBpbmZpbml0ZSBsb29wIG9uIGJyb2tlbiBtb2R1bGVzCiAgICBpbXBvcnRTY3JpcHRzKHBhdGgpOwogICAgcmV0dXJuIHdpbmRvdy5yZXF1aXJlKHBhcmVudElkLCBpZCk7Cn07CmZ1bmN0aW9uIHJlc29sdmVNb2R1bGVJZChpZCwgcGF0aHMpIHsKICAgIHZhciB0ZXN0UGF0aCA9IGlkLCB0YWlsID0gIiI7CiAgICB3aGlsZSAodGVzdFBhdGgpIHsKICAgICAgICB2YXIgYWxpYXMgPSBwYXRoc1t0ZXN0UGF0aF07CiAgICAgICAgaWYgKHR5cGVvZiBhbGlhcyA9PSAic3RyaW5nIikgewogICAgICAgICAgICByZXR1cm4gYWxpYXMgKyB0YWlsOwogICAgICAgIH0gZWxzZSBpZiAoYWxpYXMpIHsKICAgICAgICAgICAgcmV0dXJuICBhbGlhcy5sb2NhdGlvbi5yZXBsYWNlKC9cLyokLywgIi8iKSArICh0YWlsIHx8IGFsaWFzLm1haW4gfHwgYWxpYXMubmFtZSk7CiAgICAgICAgfSBlbHNlIGlmIChhbGlhcyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICB2YXIgaSA9IHRlc3RQYXRoLmxhc3RJbmRleE9mKCIvIik7CiAgICAgICAgaWYgKGkgPT09IC0xKSBicmVhazsKICAgICAgICB0YWlsID0gdGVzdFBhdGguc3Vic3RyKGkpICsgdGFpbDsKICAgICAgICB0ZXN0UGF0aCA9IHRlc3RQYXRoLnNsaWNlKDAsIGkpOwogICAgfQogICAgcmV0dXJuIGlkOwp9CndpbmRvdy5yZXF1aXJlLm1vZHVsZXMgPSB7fTsKd2luZG93LnJlcXVpcmUudGxucyA9IHt9OwoKd2luZG93LmRlZmluZSA9IGZ1bmN0aW9uKGlkLCBkZXBzLCBmYWN0b3J5KSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgZmFjdG9yeSA9IGRlcHM7CiAgICAgICAgaWYgKHR5cGVvZiBpZCAhPSAic3RyaW5nIikgewogICAgICAgICAgICBkZXBzID0gaWQ7CiAgICAgICAgICAgIGlkID0gd2luZG93LnJlcXVpcmUuaWQ7CiAgICAgICAgfQogICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICBmYWN0b3J5ID0gaWQ7CiAgICAgICAgZGVwcyA9IFtdOwogICAgICAgIGlkID0gd2luZG93LnJlcXVpcmUuaWQ7CiAgICB9CiAgICAKICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPSAiZnVuY3Rpb24iKSB7CiAgICAgICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7CiAgICAgICAgICAgIGV4cG9ydHM6IGZhY3RvcnksCiAgICAgICAgICAgIGluaXRpYWxpemVkOiB0cnVlCiAgICAgICAgfTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFkZXBzLmxlbmd0aCkKICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkZXBlbmRlbmNpZXMsIHdlIGluamVjdCAicmVxdWlyZSIsICJleHBvcnRzIiBhbmQKICAgICAgICAvLyAibW9kdWxlIiBhcyBkZXBlbmRlbmNpZXMsIHRvIHByb3ZpZGUgQ29tbW9uSlMgY29tcGF0aWJpbGl0eS4KICAgICAgICBkZXBzID0gWyJyZXF1aXJlIiwgImV4cG9ydHMiLCAibW9kdWxlIl07CgogICAgdmFyIHJlcSA9IGZ1bmN0aW9uKGNoaWxkSWQpIHsKICAgICAgICByZXR1cm4gd2luZG93LnJlcXVpcmUoaWQsIGNoaWxkSWQpOwogICAgfTsKCiAgICB3aW5kb3cucmVxdWlyZS5tb2R1bGVzW2lkXSA9IHsKICAgICAgICBleHBvcnRzOiB7fSwKICAgICAgICBmYWN0b3J5OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIG1vZHVsZSA9IHRoaXM7CiAgICAgICAgICAgIHZhciByZXR1cm5FeHBvcnRzID0gZmFjdG9yeS5hcHBseSh0aGlzLCBkZXBzLnNsaWNlKDAsIGZhY3RvcnkubGVuZ3RoKS5tYXAoZnVuY3Rpb24oZGVwKSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlcCkgewogICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2UgInJlcXVpcmUiLCAiZXhwb3J0cyIgYW5kICJtb2R1bGUiIGFyZW4ndCBhY3R1YWwKICAgICAgICAgICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMsIHdlIG11c3QgaGFuZGxlIHRoZW0gc2VwZXJhdGVseS4KICAgICAgICAgICAgICAgICAgICBjYXNlICJyZXF1aXJlIjogcmV0dXJuIHJlcTsKICAgICAgICAgICAgICAgICAgICBjYXNlICJleHBvcnRzIjogcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogICAgICAgICAgICAgICAgICAgIGNhc2UgIm1vZHVsZSI6ICByZXR1cm4gbW9kdWxlOwogICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBmb3IgYWxsIG90aGVyIGRlcGVuZGVuY2llcywgd2UgY2FuIGp1c3QgZ28gYWhlYWQgYW5kCiAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSB0aGVtLgogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICByZXR1cm4gcmVxKGRlcCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgaWYgKHJldHVybkV4cG9ydHMpCiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJldHVybkV4cG9ydHM7CiAgICAgICAgICAgIHJldHVybiBtb2R1bGU7CiAgICAgICAgfQogICAgfTsKfTsKd2luZG93LmRlZmluZS5hbWQgPSB7fTsKd2luZG93LnJlcXVpcmUudGxucyA9IHt9Owp3aW5kb3cuaW5pdEJhc2VVcmxzICA9IGZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsKICAgIGZvciAodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKQogICAgICAgIHRoaXMucmVxdWlyZS50bG5zW2ldID0gdG9wTGV2ZWxOYW1lc3BhY2VzW2ldOwp9OwoKd2luZG93LmluaXRTZW5kZXIgPSBmdW5jdGlvbiBpbml0U2VuZGVyKCkgewoKICAgIHZhciBFdmVudEVtaXR0ZXIgPSB3aW5kb3cucmVxdWlyZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwogICAgdmFyIG9vcCA9IHdpbmRvdy5yZXF1aXJlKCJhY2UvbGliL29vcCIpOwogICAgCiAgICB2YXIgU2VuZGVyID0gZnVuY3Rpb24oKSB7fTsKICAgIAogICAgKGZ1bmN0aW9uKCkgewogICAgICAgIAogICAgICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKICAgICAgICAgICAgICAgIAogICAgICAgIHRoaXMuY2FsbGJhY2sgPSBmdW5jdGlvbihkYXRhLCBjYWxsYmFja0lkKSB7CiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJjYWxsIiwKICAgICAgICAgICAgICAgIGlkOiBjYWxsYmFja0lkLAogICAgICAgICAgICAgICAgZGF0YTogZGF0YQogICAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgCiAgICAgICAgdGhpcy5lbWl0ID0gZnVuY3Rpb24obmFtZSwgZGF0YSkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiZXZlbnQiLAogICAgICAgICAgICAgICAgbmFtZTogbmFtZSwKICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgICAgICAKICAgIH0pLmNhbGwoU2VuZGVyLnByb3RvdHlwZSk7CiAgICAKICAgIHJldHVybiBuZXcgU2VuZGVyKCk7Cn07Cgp2YXIgbWFpbiA9IHdpbmRvdy5tYWluID0gbnVsbDsKdmFyIHNlbmRlciA9IHdpbmRvdy5zZW5kZXIgPSBudWxsOwoKd2luZG93Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHsKICAgIHZhciBtc2cgPSBlLmRhdGE7CiAgICBpZiAobXNnLmV2ZW50ICYmIHNlbmRlcikgewogICAgICAgIHNlbmRlci5fc2lnbmFsKG1zZy5ldmVudCwgbXNnLmRhdGEpOwogICAgfQogICAgZWxzZSBpZiAobXNnLmNvbW1hbmQpIHsKICAgICAgICBpZiAobWFpblttc2cuY29tbWFuZF0pCiAgICAgICAgICAgIG1haW5bbXNnLmNvbW1hbmRdLmFwcGx5KG1haW4sIG1zZy5hcmdzKTsKICAgICAgICBlbHNlIGlmICh3aW5kb3dbbXNnLmNvbW1hbmRdKQogICAgICAgICAgICB3aW5kb3dbbXNnLmNvbW1hbmRdLmFwcGx5KHdpbmRvdywgbXNnLmFyZ3MpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbW1hbmQ6IiArIG1zZy5jb21tYW5kKTsKICAgIH0KICAgIGVsc2UgaWYgKG1zZy5pbml0KSB7CiAgICAgICAgd2luZG93LmluaXRCYXNlVXJscyhtc2cudGxucyk7CiAgICAgICAgc2VuZGVyID0gd2luZG93LnNlbmRlciA9IHdpbmRvdy5pbml0U2VuZGVyKCk7CiAgICAgICAgdmFyIGNsYXp6ID0gdGhpcy5yZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOwogICAgICAgIG1haW4gPSB3aW5kb3cubWFpbiA9IG5ldyBjbGF6eihzZW5kZXIpOwogICAgfQp9Owp9KSh0aGlzKTsKCmFjZS5kZWZpbmUoImFjZS9saWIvb29wIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKXsidXNlIHN0cmljdCI7CmV4cG9ydHMuaW5oZXJpdHMgPSBmdW5jdGlvbiAoY3Rvciwgc3VwZXJDdG9yKSB7CiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvcjsKICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7CiAgICAgICAgY29uc3RydWN0b3I6IHsKICAgICAgICAgICAgdmFsdWU6IGN0b3IsCiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgfQogICAgfSk7Cn07CmV4cG9ydHMubWl4aW4gPSBmdW5jdGlvbiAob2JqLCBtaXhpbikgewogICAgZm9yICh2YXIga2V5IGluIG1peGluKSB7CiAgICAgICAgb2JqW2tleV0gPSBtaXhpbltrZXldOwogICAgfQogICAgcmV0dXJuIG9iajsKfTsKZXhwb3J0cy5pbXBsZW1lbnQgPSBmdW5jdGlvbiAocHJvdG8sIG1peGluKSB7CiAgICBleHBvcnRzLm1peGluKHByb3RvLCBtaXhpbik7Cn07Cgp9KTsKCmFjZS5kZWZpbmUoImFjZS9hcHBseV9kZWx0YSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSl7InVzZSBzdHJpY3QiOwpmdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCkgewogICAgY29uc29sZS5sb2coIkludmFsaWQgRGVsdGE6IiwgZGVsdGEpOwogICAgdGhyb3cgIkludmFsaWQgRGVsdGE6ICIgKyBlcnJvclRleHQ7Cn0KZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikgewogICAgcmV0dXJuIHBvc2l0aW9uLnJvdyA+PSAwICYmIHBvc2l0aW9uLnJvdyA8IGRvY0xpbmVzLmxlbmd0aCAmJgogICAgICAgIHBvc2l0aW9uLmNvbHVtbiA+PSAwICYmIHBvc2l0aW9uLmNvbHVtbiA8PSBkb2NMaW5lc1twb3NpdGlvbi5yb3ddLmxlbmd0aDsKfQpmdW5jdGlvbiB2YWxpZGF0ZURlbHRhKGRvY0xpbmVzLCBkZWx0YSkgewogICAgaWYgKGRlbHRhLmFjdGlvbiAhPSAiaW5zZXJ0IiAmJiBkZWx0YS5hY3Rpb24gIT0gInJlbW92ZSIpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuYWN0aW9uIG11c3QgYmUgJ2luc2VydCcgb3IgJ3JlbW92ZSciKTsKICAgIGlmICghKGRlbHRhLmxpbmVzIGluc3RhbmNlb2YgQXJyYXkpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmxpbmVzIG11c3QgYmUgYW4gQXJyYXkiKTsKICAgIGlmICghZGVsdGEuc3RhcnQgfHwgIWRlbHRhLmVuZCkKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5zdGFydC9lbmQgbXVzdCBiZSBhbiBwcmVzZW50Iik7CiAgICB2YXIgc3RhcnQgPSBkZWx0YS5zdGFydDsKICAgIGlmICghcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBkZWx0YS5zdGFydCkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQgbXVzdCBiZSBjb250YWluZWQgaW4gZG9jdW1lbnQiKTsKICAgIHZhciBlbmQgPSBkZWx0YS5lbmQ7CiAgICBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmUiICYmICFwb3NpdGlvbkluRG9jdW1lbnQoZG9jTGluZXMsIGVuZCkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuZW5kIG11c3QgY29udGFpbmVkIGluIGRvY3VtZW50IGZvciAncmVtb3ZlJyBhY3Rpb25zIik7CiAgICB2YXIgbnVtUmFuZ2VSb3dzID0gZW5kLnJvdyAtIHN0YXJ0LnJvdzsKICAgIHZhciBudW1SYW5nZUxhc3RMaW5lQ2hhcnMgPSAoZW5kLmNvbHVtbiAtIChudW1SYW5nZVJvd3MgPT0gMCA/IHN0YXJ0LmNvbHVtbiA6IDApKTsKICAgIGlmIChudW1SYW5nZVJvd3MgIT0gZGVsdGEubGluZXMubGVuZ3RoIC0gMSB8fCBkZWx0YS5saW5lc1tudW1SYW5nZVJvd3NdLmxlbmd0aCAhPSBudW1SYW5nZUxhc3RMaW5lQ2hhcnMpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEucmFuZ2UgbXVzdCBtYXRjaCBkZWx0YSBsaW5lcyIpOwp9CmV4cG9ydHMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uIChkb2NMaW5lcywgZGVsdGEsIGRvTm90VmFsaWRhdGUpIHsKICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICB2YXIgbGluZSA9IGRvY0xpbmVzW3Jvd10gfHwgIiI7CiAgICBzd2l0Y2ggKGRlbHRhLmFjdGlvbikgewogICAgICAgIGNhc2UgImluc2VydCI6CiAgICAgICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZGVsdGEubGluZXNbMF0gKyBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UuYXBwbHkoZG9jTGluZXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW3Jvd107CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicmVtb3ZlIjoKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBkZWx0YS5lbmQucm93OwogICAgICAgICAgICBpZiAocm93ID09PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlKHJvdywgZW5kUm93IC0gcm93ICsgMSwgbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZG9jTGluZXNbZW5kUm93XS5zdWJzdHJpbmcoZW5kQ29sdW1uKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICB9Cn07Cgp9KTsKCmFjZS5kZWZpbmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSl7InVzZSBzdHJpY3QiOwp2YXIgRXZlbnRFbWl0dGVyID0ge307CnZhciBzdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbiAoKSB7IHRoaXMucHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsgfTsKdmFyIHByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwpFdmVudEVtaXR0ZXIuX2VtaXQgPQogICAgRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgZSkgewogICAgICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwgKHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB7fSk7CiAgICAgICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CiAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgICAgICB2YXIgZGVmYXVsdEhhbmRsZXIgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnNbZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWxpc3RlbmVycy5sZW5ndGggJiYgIWRlZmF1bHRIYW5kbGVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgICAgICBlID0ge307CiAgICAgICAgaWYgKCFlLnR5cGUpCiAgICAgICAgICAgIGUudHlwZSA9IGV2ZW50TmFtZTsKICAgICAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbiA9IHN0b3BQcm9wYWdhdGlvbjsKICAgICAgICBpZiAoIWUucHJldmVudERlZmF1bHQpCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKICAgICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgICAgIGlmIChlLnByb3BhZ2F0aW9uU3RvcHBlZCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoZGVmYXVsdEhhbmRsZXIgJiYgIWUuZGVmYXVsdFByZXZlbnRlZCkKICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwogICAgfTsKRXZlbnRFbWl0dGVyLl9zaWduYWwgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKQogICAgICAgIGxpc3RlbmVyc1tpXShlLCB0aGlzKTsKfTsKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBjYWxsYmFjaykgewogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHRoaXMub24oZXZlbnROYW1lLCBmdW5jdGlvbiBuZXdDYWxsYmFjaygpIHsKICAgICAgICBfc2VsZi5vZmYoZXZlbnROYW1lLCBuZXdDYWxsYmFjayk7CiAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIH0pOwogICAgaWYgKCFjYWxsYmFjaykgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgewogICAgICAgICAgICBjYWxsYmFjayA9IHJlc29sdmU7CiAgICAgICAgfSk7CiAgICB9Cn07CkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIGhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0geyBfZGlzYWJsZWRfOiB7fSB9OwogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0pIHsKICAgICAgICB2YXIgb2xkID0gaGFuZGxlcnNbZXZlbnROYW1lXTsKICAgICAgICB2YXIgZGlzYWJsZWQgPSBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV07CiAgICAgICAgaWYgKCFkaXNhYmxlZCkKICAgICAgICAgICAgaGFuZGxlcnMuX2Rpc2FibGVkX1tldmVudE5hbWVdID0gZGlzYWJsZWQgPSBbXTsKICAgICAgICBkaXNhYmxlZC5wdXNoKG9sZCk7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBjYWxsYmFjaykgewogICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzOwogICAgaWYgKCFoYW5kbGVycykKICAgICAgICByZXR1cm47CiAgICB2YXIgZGlzYWJsZWQgPSBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV07CiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSA9PSBjYWxsYmFjaykgewogICAgICAgIGlmIChkaXNhYmxlZCkKICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0SGFuZGxlcihldmVudE5hbWUsIGRpc2FibGVkLnBvcCgpKTsKICAgIH0KICAgIGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwpFdmVudEVtaXR0ZXIub24gPQogICAgRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBjYWxsYmFjaywgY2FwdHVyaW5nKSB7CiAgICAgICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307CiAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICAgICAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdID0gW107CiAgICAgICAgaWYgKGxpc3RlbmVycy5pbmRleE9mKGNhbGxiYWNrKSA9PSAtMSkKICAgICAgICAgICAgbGlzdGVuZXJzW2NhcHR1cmluZyA/ICJ1bnNoaWZ0IiA6ICJwdXNoIl0oY2FsbGJhY2spOwogICAgICAgIHJldHVybiBjYWxsYmFjazsKICAgIH07CkV2ZW50RW1pdHRlci5vZmYgPQogICAgRXZlbnRFbWl0dGVyLnJlbW92ZUxpc3RlbmVyID0KICAgICAgICBFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICAgICAgICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwogICAgICAgICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdOwogICAgICAgICAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKQogICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgfTsKRXZlbnRFbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIChldmVudE5hbWUpIHsKICAgIGlmICghZXZlbnROYW1lKQogICAgICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB1bmRlZmluZWQ7CiAgICBpZiAodGhpcy5fZXZlbnRSZWdpc3RyeSkKICAgICAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSB1bmRlZmluZWQ7CiAgICBpZiAodGhpcy5fZGVmYXVsdEhhbmRsZXJzKQogICAgICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdID0gdW5kZWZpbmVkOwp9OwpleHBvcnRzLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjsKCn0pOwoKYWNlLmRlZmluZSgiYWNlL3JhbmdlIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKXsidXNlIHN0cmljdCI7CnZhciBSYW5nZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKICAgIGZ1bmN0aW9uIFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pIHsKICAgICAgICB0aGlzLnN0YXJ0ID0gewogICAgICAgICAgICByb3c6IHN0YXJ0Um93LAogICAgICAgICAgICBjb2x1bW46IHN0YXJ0Q29sdW1uCiAgICAgICAgfTsKICAgICAgICB0aGlzLmVuZCA9IHsKICAgICAgICAgICAgcm93OiBlbmRSb3csCiAgICAgICAgICAgIGNvbHVtbjogZW5kQ29sdW1uCiAgICAgICAgfTsKICAgIH0KICAgIFJhbmdlLnByb3RvdHlwZS5pc0VxdWFsID0gZnVuY3Rpb24gKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQucm93ID09PSByYW5nZS5zdGFydC5yb3cgJiYKICAgICAgICAgICAgdGhpcy5lbmQucm93ID09PSByYW5nZS5lbmQucm93ICYmCiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID09PSByYW5nZS5zdGFydC5jb2x1bW4gJiYKICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID09PSByYW5nZS5lbmQuY29sdW1uOwogICAgfTsKICAgIFJhbmdlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gKCJSYW5nZTogWyIgKyB0aGlzLnN0YXJ0LnJvdyArICIvIiArIHRoaXMuc3RhcnQuY29sdW1uICsKICAgICAgICAgICAgIl0gLT4gWyIgKyB0aGlzLmVuZC5yb3cgKyAiLyIgKyB0aGlzLmVuZC5jb2x1bW4gKyAiXSIpOwogICAgfTsKICAgIFJhbmdlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDA7CiAgICB9OwogICAgUmFuZ2UucHJvdG90eXBlLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uIChyYW5nZSkgewogICAgICAgIHZhciBjbXAsIGVuZCA9IHJhbmdlLmVuZCwgc3RhcnQgPSByYW5nZS5zdGFydDsKICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7CiAgICAgICAgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoY21wID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY21wID09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiAtMjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDQyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgUmFuZ2UucHJvdG90eXBlLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uIChwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShwLnJvdywgcC5jb2x1bW4pOwogICAgfTsKICAgIFJhbmdlLnByb3RvdHlwZS5jb250YWluc1JhbmdlID0gZnVuY3Rpb24gKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVBvaW50KHJhbmdlLnN0YXJ0KSA9PSAwICYmIHRoaXMuY29tcGFyZVBvaW50KHJhbmdlLmVuZCkgPT0gMDsKICAgIH07CiAgICBSYW5nZS5wcm90b3R5cGUuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChyYW5nZSkgewogICAgICAgIHZhciBjbXAgPSB0aGlzLmNvbXBhcmVSYW5nZShyYW5nZSk7CiAgICAgICAgcmV0dXJuIChjbXAgPT0gLTEgfHwgY21wID09IDAgfHwgY21wID09IDEpOwogICAgfTsKICAgIFJhbmdlLnByb3RvdHlwZS5pc0VuZCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW47CiAgICB9OwogICAgUmFuZ2UucHJvdG90eXBlLmlzU3RhcnQgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbjsKICAgIH07CiAgICBSYW5nZS5wcm90b3R5cGUuc2V0U3RhcnQgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodHlwZW9mIHJvdyA9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93LnJvdzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgUmFuZ2UucHJvdG90eXBlLnNldEVuZCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aGlzLmVuZC5yb3cgPSByb3c7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgUmFuZ2UucHJvdG90eXBlLmluc2lkZSA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDApIHsKICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1bW4pIHx8IHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICBSYW5nZS5wcm90b3R5cGUuaW5zaWRlU3RhcnQgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIFJhbmdlLnByb3RvdHlwZS5pbnNpZGVFbmQgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgUmFuZ2UucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICBpZiAocm93ID09PSB0aGlzLnN0YXJ0LnJvdykgewogICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA8IHRoaXMuc3RhcnQuY29sdW1uID8gLTEgOiAoY29sdW1uID4gdGhpcy5lbmQuY29sdW1uID8gMSA6IDApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChyb3cgPCB0aGlzLnN0YXJ0LnJvdykKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpCiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9PT0gcm93KQogICAgICAgICAgICByZXR1cm4gY29sdW1uID49IHRoaXMuc3RhcnQuY29sdW1uID8gMCA6IC0xOwogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT09IHJvdykKICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA8PSB0aGlzLmVuZC5jb2x1bW4gPyAwIDogMTsKICAgICAgICByZXR1cm4gMDsKICAgIH07CiAgICBSYW5nZS5wcm90b3R5cGUuY29tcGFyZVN0YXJ0ID0gZnVuY3Rpb24gKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIFJhbmdlLnByb3RvdHlwZS5jb21wYXJlRW5kID0gZnVuY3Rpb24gKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICBSYW5nZS5wcm90b3R5cGUuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIFJhbmdlLnByb3RvdHlwZS5jbGlwUm93cyA9IGZ1bmN0aW9uIChmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPiBsYXN0Um93KQogICAgICAgICAgICB2YXIgZW5kID0geyByb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDAgfTsKICAgICAgICBlbHNlIGlmICh0aGlzLmVuZC5yb3cgPCBmaXJzdFJvdykKICAgICAgICAgICAgdmFyIGVuZCA9IHsgcm93OiBmaXJzdFJvdywgY29sdW1uOiAwIH07CiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID4gbGFzdFJvdykKICAgICAgICAgICAgdmFyIHN0YXJ0ID0geyByb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDAgfTsKICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXJ0LnJvdyA8IGZpcnN0Um93KQogICAgICAgICAgICB2YXIgc3RhcnQgPSB7IHJvdzogZmlyc3RSb3csIGNvbHVtbjogMCB9OwogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0IHx8IHRoaXMuc3RhcnQsIGVuZCB8fCB0aGlzLmVuZCk7CiAgICB9OwogICAgUmFuZ2UucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikgewogICAgICAgIHZhciBjbXAgPSB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIGlmIChjbXAgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgZWxzZSBpZiAoY21wID09IC0xKQogICAgICAgICAgICB2YXIgc3RhcnQgPSB7IHJvdzogcm93LCBjb2x1bW46IGNvbHVtbiB9OwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIGVuZCA9IHsgcm93OiByb3csIGNvbHVtbjogY29sdW1uIH07CiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTsKICAgIH07CiAgICBSYW5nZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbik7CiAgICB9OwogICAgUmFuZ2UucHJvdG90eXBlLmlzTXVsdGlMaW5lID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRoaXMuZW5kLnJvdyk7CiAgICB9OwogICAgUmFuZ2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKICAgIH07CiAgICBSYW5nZS5wcm90b3R5cGUuY29sbGFwc2VSb3dzID0gZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLmVuZC5jb2x1bW4gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdyAtIDEpLCAwKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFydC5yb3csIDAsIHRoaXMuZW5kLnJvdywgMCk7CiAgICB9OwogICAgUmFuZ2UucHJvdG90eXBlLnRvU2NyZWVuUmFuZ2UgPSBmdW5jdGlvbiAoc2Vzc2lvbikgewogICAgICAgIHZhciBzY3JlZW5Qb3NTdGFydCA9IHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuc3RhcnQpOwogICAgICAgIHZhciBzY3JlZW5Qb3NFbmQgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmVuZCk7CiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbiwgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbik7CiAgICB9OwogICAgUmFuZ2UucHJvdG90eXBlLm1vdmVCeSA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuc3RhcnQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47CiAgICAgICAgdGhpcy5lbmQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLmVuZC5jb2x1bW4gKz0gY29sdW1uOwogICAgfTsKICAgIHJldHVybiBSYW5nZTsKfSgpKTsKUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uIChzdGFydCwgZW5kKSB7CiAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uLCBlbmQucm93LCBlbmQuY29sdW1uKTsKfTsKUmFuZ2UuY29tcGFyZVBvaW50cyA9IGZ1bmN0aW9uIChwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOwp9OwpleHBvcnRzLlJhbmdlID0gUmFuZ2U7Cgp9KTsKCmFjZS5kZWZpbmUoImFjZS9hbmNob3IiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpeyJ1c2Ugc3RyaWN0IjsKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKdmFyIEFuY2hvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKICAgIGZ1bmN0aW9uIEFuY2hvcihkb2MsIHJvdywgY29sdW1uKSB7CiAgICAgICAgdGhpcy4kb25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7CiAgICAgICAgdGhpcy5hdHRhY2goZG9jKTsKICAgICAgICBpZiAodHlwZW9mIHJvdyAhPSAibnVtYmVyIikKICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocm93LCBjb2x1bW4pOwogICAgfQogICAgQW5jaG9yLnByb3RvdHlwZS5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudCh0aGlzLnJvdywgdGhpcy5jb2x1bW4pOwogICAgfTsKICAgIEFuY2hvci5wcm90b3R5cGUuZ2V0RG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CiAgICB9OwogICAgQW5jaG9yLnByb3RvdHlwZS5vbkNoYW5nZSA9IGZ1bmN0aW9uIChkZWx0YSkgewogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyAmJiBkZWx0YS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBpZiAoZGVsdGEuc3RhcnQucm93ID4gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgcG9pbnQgPSAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgeyByb3c6IHRoaXMucm93LCBjb2x1bW46IHRoaXMuY29sdW1uIH0sIHRoaXMuJGluc2VydFJpZ2h0KTsKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTsKICAgIH07CiAgICBBbmNob3IucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKHJvdywgY29sdW1uLCBub0NsaXApIHsKICAgICAgICB2YXIgcG9zOwogICAgICAgIGlmIChub0NsaXApIHsKICAgICAgICAgICAgcG9zID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnJvdyA9PSBwb3Mucm93ICYmIHRoaXMuY29sdW1uID09IHBvcy5jb2x1bW4pCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgb2xkID0gewogICAgICAgICAgICByb3c6IHRoaXMucm93LAogICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uCiAgICAgICAgfTsKICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgewogICAgICAgICAgICBvbGQ6IG9sZCwKICAgICAgICAgICAgdmFsdWU6IHBvcwogICAgICAgIH0pOwogICAgfTsKICAgIEFuY2hvci5wcm90b3R5cGUuZGV0YWNoID0gZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuZG9jdW1lbnQub2ZmKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICB9OwogICAgQW5jaG9yLnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAoZG9jKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudCA9IGRvYyB8fCB0aGlzLmRvY3VtZW50OwogICAgICAgIHRoaXMuZG9jdW1lbnQub24oImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKICAgIH07CiAgICBBbmNob3IucHJvdG90eXBlLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50ID0gZnVuY3Rpb24gKHJvdywgY29sdW1uKSB7CiAgICAgICAgdmFyIHBvcyA9IHt9OwogICAgICAgIGlmIChyb3cgPj0gdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBwb3Mucm93ID0gTWF0aC5tYXgoMCwgdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKSAtIDEpOwogICAgICAgICAgICBwb3MuY29sdW1uID0gdGhpcy5kb2N1bWVudC5nZXRMaW5lKHBvcy5yb3cpLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocm93IDwgMCkgewogICAgICAgICAgICBwb3Mucm93ID0gMDsKICAgICAgICAgICAgcG9zLmNvbHVtbiA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwb3Mucm93ID0gcm93OwogICAgICAgICAgICBwb3MuY29sdW1uID0gTWF0aC5taW4odGhpcy5kb2N1bWVudC5nZXRMaW5lKHBvcy5yb3cpLmxlbmd0aCwgTWF0aC5tYXgoMCwgY29sdW1uKSk7CiAgICAgICAgfQogICAgICAgIGlmIChjb2x1bW4gPCAwKQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKICAgICAgICByZXR1cm4gcG9zOwogICAgfTsKICAgIHJldHVybiBBbmNob3I7Cn0oKSk7CkFuY2hvci5wcm90b3R5cGUuJGluc2VydFJpZ2h0ID0gZmFsc2U7Cm9vcC5pbXBsZW1lbnQoQW5jaG9yLnByb3RvdHlwZSwgRXZlbnRFbWl0dGVyKTsKZnVuY3Rpb24gJHBvaW50c0luT3JkZXIocG9pbnQxLCBwb2ludDIsIGVxdWFsUG9pbnRzSW5PcmRlcikgewogICAgdmFyIGJDb2xJc0FmdGVyID0gZXF1YWxQb2ludHNJbk9yZGVyID8gcG9pbnQxLmNvbHVtbiA8PSBwb2ludDIuY29sdW1uIDogcG9pbnQxLmNvbHVtbiA8IHBvaW50Mi5jb2x1bW47CiAgICByZXR1cm4gKHBvaW50MS5yb3cgPCBwb2ludDIucm93KSB8fCAocG9pbnQxLnJvdyA9PSBwb2ludDIucm93ICYmIGJDb2xJc0FmdGVyKTsKfQpmdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgcG9pbnQsIG1vdmVJZkVxdWFsKSB7CiAgICB2YXIgZGVsdGFJc0luc2VydCA9IGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IjsKICAgIHZhciBkZWx0YVJvd1NoaWZ0ID0gKGRlbHRhSXNJbnNlcnQgPyAxIDogLTEpICogKGRlbHRhLmVuZC5yb3cgLSBkZWx0YS5zdGFydC5yb3cpOwogICAgdmFyIGRlbHRhQ29sU2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLmNvbHVtbiAtIGRlbHRhLnN0YXJ0LmNvbHVtbik7CiAgICB2YXIgZGVsdGFTdGFydCA9IGRlbHRhLnN0YXJ0OwogICAgdmFyIGRlbHRhRW5kID0gZGVsdGFJc0luc2VydCA/IGRlbHRhU3RhcnQgOiBkZWx0YS5lbmQ7IC8vIENvbGxhcHNlIGluc2VydCByYW5nZS4KICAgIGlmICgkcG9pbnRzSW5PcmRlcihwb2ludCwgZGVsdGFTdGFydCwgbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBwb2ludC5yb3csCiAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uCiAgICAgICAgfTsKICAgIH0KICAgIGlmICgkcG9pbnRzSW5PcmRlcihkZWx0YUVuZCwgcG9pbnQsICFtb3ZlSWZFcXVhbCkpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICByb3c6IHBvaW50LnJvdyArIGRlbHRhUm93U2hpZnQsCiAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uICsgKHBvaW50LnJvdyA9PSBkZWx0YUVuZC5yb3cgPyBkZWx0YUNvbFNoaWZ0IDogMCkKICAgICAgICB9OwogICAgfQogICAgcmV0dXJuIHsKICAgICAgICByb3c6IGRlbHRhU3RhcnQucm93LAogICAgICAgIGNvbHVtbjogZGVsdGFTdGFydC5jb2x1bW4KICAgIH07Cn0KZXhwb3J0cy5BbmNob3IgPSBBbmNob3I7Cgp9KTsKCmFjZS5kZWZpbmUoImFjZS9kb2N1bWVudCIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSl7InVzZSBzdHJpY3QiOwp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBhcHBseURlbHRhID0gcmVxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGE7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsKdmFyIERvY3VtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewogICAgZnVuY3Rpb24gRG9jdW1lbnQodGV4dE9yTGluZXMpIHsKICAgICAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICAgICAgaWYgKHRleHRPckxpbmVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGV4dE9yTGluZXMpKSB7CiAgICAgICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoeyByb3c6IDAsIGNvbHVtbjogMCB9LCB0ZXh0T3JMaW5lcyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aGlzLmluc2VydCh7IHJvdzogMCwgY29sdW1uOiAwIH0sIHRleHRPckxpbmVzKTsKICAgICAgICB9CiAgICB9CiAgICBEb2N1bWVudC5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiAodGV4dCkgewogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKTsKICAgICAgICB0aGlzLmluc2VydCh7IHJvdzogMCwgY29sdW1uOiAwIH0sIHRleHQgfHwgIiIpOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGxMaW5lcygpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVBbmNob3IgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4gbmV3IEFuY2hvcih0aGlzLCByb3csIGNvbHVtbik7CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLiRkZXRlY3ROZXdMaW5lID0gZnVuY3Rpb24gKHRleHQpIHsKICAgICAgICB2YXIgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eLio/KFxyXG58XHJ8XG4pL20pOwogICAgICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gbWF0Y2ggPyBtYXRjaFsxXSA6ICJcbiI7CiAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VOZXdMaW5lTW9kZSIpOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5nZXROZXdMaW5lQ2hhcmFjdGVyID0gZnVuY3Rpb24gKCkgewogICAgICAgIHN3aXRjaCAodGhpcy4kbmV3TGluZU1vZGUpIHsKICAgICAgICAgICAgY2FzZSAid2luZG93cyI6CiAgICAgICAgICAgICAgICByZXR1cm4gIlxyXG4iOwogICAgICAgICAgICBjYXNlICJ1bml4IjoKICAgICAgICAgICAgICAgIHJldHVybiAiXG4iOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGF1dG9OZXdMaW5lIHx8ICJcbiI7CiAgICAgICAgfQogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uIChuZXdMaW5lTW9kZSkgewogICAgICAgIGlmICh0aGlzLiRuZXdMaW5lTW9kZSA9PT0gbmV3TGluZU1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUuZ2V0TmV3TGluZU1vZGUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5pc05ld0xpbmUgPSBmdW5jdGlvbiAodGV4dCkgewogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLmdldExpbmUgPSBmdW5jdGlvbiAocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLmdldExpbmVzID0gZnVuY3Rpb24gKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLmdldEFsbExpbmVzID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUuZ2V0VGV4dFJhbmdlID0gZnVuY3Rpb24gKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLmdldExpbmVzRm9yUmFuZ2UgPSBmdW5jdGlvbiAocmFuZ2UpIHsKICAgICAgICB2YXIgbGluZXM7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IHRoaXMuZ2V0TGluZXMocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5lbmQucm93KTsKICAgICAgICAgICAgbGluZXNbMF0gPSAobGluZXNbMF0gfHwgIiIpLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgbCA9IGxpbmVzLmxlbmd0aCAtIDE7CiAgICAgICAgICAgIGlmIChyYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93ID09IGwpCiAgICAgICAgICAgICAgICBsaW5lc1tsXSA9IGxpbmVzW2xdLnN1YnN0cmluZygwLCByYW5nZS5lbmQuY29sdW1uKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpbmVzOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5pbnNlcnRMaW5lcyA9IGZ1bmN0aW9uIChyb3csIGxpbmVzKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TGluZXMgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBpbnNlcnRGdWxsTGluZXMgbWV0aG9kIGluc3RlYWQuIik7CiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0RnVsbExpbmVzKHJvdywgbGluZXMpOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5yZW1vdmVMaW5lcyA9IGZ1bmN0aW9uIChmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50LnJlbW92ZUxpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgcmVtb3ZlRnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLnJlbW92ZUZ1bGxMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLmluc2VydE5ld0xpbmUgPSBmdW5jdGlvbiAocG9zaXRpb24pIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5pbnNlcnROZXdMaW5lIGlzIGRlcHJlY2F0ZWQuIFVzZSBpbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbiwgWycnLCAnJ10pIGluc3RlYWQuIik7CiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsiIiwgIiJdKTsKICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRoaXMuZ2V0TGVuZ3RoKCkgPD0gMSkKICAgICAgICAgICAgdGhpcy4kZGV0ZWN0TmV3TGluZSh0ZXh0KTsKICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbiwgdGhpcy4kc3BsaXQodGV4dCkpOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5pbnNlcnRJbkxpbmUgPSBmdW5jdGlvbiAocG9zaXRpb24sIHRleHQpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB0aGlzLnBvcyhwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiArIHRleHQubGVuZ3RoKTsKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJpbnNlcnQiLAogICAgICAgICAgICBsaW5lczogW3RleHRdCiAgICAgICAgfSwgdHJ1ZSk7CiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUuY2xpcHBlZFBvcyA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGg7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHJvdyA8IDApIHsKICAgICAgICAgICAgcm93ID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocm93ID49IGxlbmd0aCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGggLSAxOwogICAgICAgICAgICBjb2x1bW4gPSB1bmRlZmluZWQ7CiAgICAgICAgfQogICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7CiAgICAgICAgaWYgKGNvbHVtbiA9PSB1bmRlZmluZWQpCiAgICAgICAgICAgIGNvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIGNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KGNvbHVtbiwgMCksIGxpbmUubGVuZ3RoKTsKICAgICAgICByZXR1cm4geyByb3c6IHJvdywgY29sdW1uOiBjb2x1bW4gfTsKICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUuY2xvbmVQb3MgPSBmdW5jdGlvbiAocG9zKSB7CiAgICAgICAgcmV0dXJuIHsgcm93OiBwb3Mucm93LCBjb2x1bW46IHBvcy5jb2x1bW4gfTsKICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUucG9zID0gZnVuY3Rpb24gKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHsgcm93OiByb3csIGNvbHVtbjogY29sdW1uIH07CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbiAocG9zaXRpb24pIHsKICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5nZXRMZW5ndGgoKTsKICAgICAgICBpZiAocG9zaXRpb24ucm93ID49IGxlbmd0aCkgewogICAgICAgICAgICBwb3NpdGlvbi5yb3cgPSBNYXRoLm1heCgwLCBsZW5ndGggLSAxKTsKICAgICAgICAgICAgcG9zaXRpb24uY29sdW1uID0gdGhpcy5nZXRMaW5lKGxlbmd0aCAtIDEpLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwgMCksIHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUuaW5zZXJ0RnVsbExpbmVzID0gZnVuY3Rpb24gKHJvdywgbGluZXMpIHsKICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbIiJdKTsKICAgICAgICAgICAgY29sdW1uID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGxpbmVzID0gWyIiXS5jb25jYXQobGluZXMpOwogICAgICAgICAgICByb3ctLTsKICAgICAgICAgICAgY29sdW1uID0gdGhpcy4kbGluZXNbcm93XS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoeyByb3c6IHJvdywgY29sdW1uOiBjb2x1bW4gfSwgbGluZXMpOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5pbnNlcnRNZXJnZWRMaW5lcyA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgbGluZXMpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgIHJvdzogc3RhcnQucm93ICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgY29sdW1uOiAobGluZXMubGVuZ3RoID09IDEgPyBzdGFydC5jb2x1bW4gOiAwKSArIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aAogICAgICAgIH07CiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IGxpbmVzCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2UoeyBzdGFydDogc3RhcnQsIGVuZDogZW5kIH0pCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3Moc3RhcnQpOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5yZW1vdmVJbkxpbmUgPSBmdW5jdGlvbiAocm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgc3RhcnRDb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB0aGlzLmNsaXBwZWRQb3Mocm93LCBlbmRDb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2UoeyBzdGFydDogc3RhcnQsIGVuZDogZW5kIH0pCiAgICAgICAgfSwgdHJ1ZSk7CiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3Moc3RhcnQpOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5yZW1vdmVGdWxsTGluZXMgPSBmdW5jdGlvbiAoZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBmaXJzdFJvdyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZpcnN0Um93KSwgdGhpcy5nZXRMZW5ndGgoKSAtIDEpOwogICAgICAgIGxhc3RSb3cgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBsYXN0Um93KSwgdGhpcy5nZXRMZW5ndGgoKSAtIDEpOwogICAgICAgIHZhciBkZWxldGVGaXJzdE5ld0xpbmUgPSBsYXN0Um93ID09IHRoaXMuZ2V0TGVuZ3RoKCkgLSAxICYmIGZpcnN0Um93ID4gMDsKICAgICAgICB2YXIgZGVsZXRlTGFzdE5ld0xpbmUgPSBsYXN0Um93IDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gKGRlbGV0ZUZpcnN0TmV3TGluZSA/IGZpcnN0Um93IC0gMSA6IGZpcnN0Um93KTsKICAgICAgICB2YXIgc3RhcnRDb2wgPSAoZGVsZXRlRmlyc3ROZXdMaW5lID8gdGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGggOiAwKTsKICAgICAgICB2YXIgZW5kUm93ID0gKGRlbGV0ZUxhc3ROZXdMaW5lID8gbGFzdFJvdyArIDEgOiBsYXN0Um93KTsKICAgICAgICB2YXIgZW5kQ29sID0gKGRlbGV0ZUxhc3ROZXdMaW5lID8gMCA6IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbCwgZW5kUm93LCBlbmRDb2wpOwogICAgICAgIHZhciBkZWxldGVkTGluZXMgPSB0aGlzLiRsaW5lcy5zbGljZShmaXJzdFJvdywgbGFzdFJvdyArIDEpOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiByYW5nZS5zdGFydCwKICAgICAgICAgICAgZW5kOiByYW5nZS5lbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2UocmFuZ2UpCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGRlbGV0ZWRMaW5lczsKICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uIChyb3cpIHsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSAtIDEgJiYgcm93ID49IDApIHsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnBvcyhyb3csIHRoaXMuZ2V0TGluZShyb3cpLmxlbmd0aCksCiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMucG9zKHJvdyArIDEsIDApLAogICAgICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgICAgIGxpbmVzOiBbIiIsICIiXQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiAocmFuZ2UsIHRleHQpIHsKICAgICAgICBpZiAoIShyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSkKICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwogICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCAmJiByYW5nZS5pc0VtcHR5KCkpCiAgICAgICAgICAgIHJldHVybiByYW5nZS5zdGFydDsKICAgICAgICBpZiAodGV4dCA9PSB0aGlzLmdldFRleHRSYW5nZShyYW5nZSkpCiAgICAgICAgICAgIHJldHVybiByYW5nZS5lbmQ7CiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBlbmQ7CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLmFwcGx5RGVsdGFzID0gZnVuY3Rpb24gKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGFzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRoaXMuYXBwbHlEZWx0YShkZWx0YXNbaV0pOwogICAgICAgIH0KICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUucmV2ZXJ0RGVsdGFzID0gZnVuY3Rpb24gKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGkgPSBkZWx0YXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgdGhpcy5yZXZlcnREZWx0YShkZWx0YXNbaV0pOwogICAgICAgIH0KICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uIChkZWx0YSwgZG9Ob3RWYWxpZGF0ZSkgewogICAgICAgIHZhciBpc0luc2VydCA9IGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IjsKICAgICAgICBpZiAoaXNJbnNlcnQgPyBkZWx0YS5saW5lcy5sZW5ndGggPD0gMSAmJiAhZGVsdGEubGluZXNbMF0KICAgICAgICAgICAgOiAhUmFuZ2UuY29tcGFyZVBvaW50cyhkZWx0YS5zdGFydCwgZGVsdGEuZW5kKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChpc0luc2VydCAmJiBkZWx0YS5saW5lcy5sZW5ndGggPiAyMDAwMCkgewogICAgICAgICAgICB0aGlzLiRzcGxpdEFuZGFwcGx5TGFyZ2VEZWx0YShkZWx0YSwgMjAwMDApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgYXBwbHlEZWx0YSh0aGlzLiRsaW5lcywgZGVsdGEsIGRvTm90VmFsaWRhdGUpOwogICAgICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZSIsIGRlbHRhKTsKICAgICAgICB9CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLiRzYWZlQXBwbHlEZWx0YSA9IGZ1bmN0aW9uIChkZWx0YSkgewogICAgICAgIHZhciBkb2NMZW5ndGggPSB0aGlzLiRsaW5lcy5sZW5ndGg7CiAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiBkZWx0YS5zdGFydC5yb3cgPCBkb2NMZW5ndGggJiYgZGVsdGEuZW5kLnJvdyA8IGRvY0xlbmd0aAogICAgICAgICAgICB8fCBkZWx0YS5hY3Rpb24gPT0gImluc2VydCIgJiYgZGVsdGEuc3RhcnQucm93IDw9IGRvY0xlbmd0aCkgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGEpOwogICAgICAgIH0KICAgIH07CiAgICBEb2N1bWVudC5wcm90b3R5cGUuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhID0gZnVuY3Rpb24gKGRlbHRhLCBNQVgpIHsKICAgICAgICB2YXIgbGluZXMgPSBkZWx0YS5saW5lczsKICAgICAgICB2YXIgbCA9IGxpbmVzLmxlbmd0aCAtIE1BWCArIDE7CiAgICAgICAgdmFyIHJvdyA9IGRlbHRhLnN0YXJ0LnJvdzsKICAgICAgICB2YXIgY29sdW1uID0gZGVsdGEuc3RhcnQuY29sdW1uOwogICAgICAgIGZvciAodmFyIGZyb20gPSAwLCB0byA9IDA7IGZyb20gPCBsOyBmcm9tID0gdG8pIHsKICAgICAgICAgICAgdG8gKz0gTUFYIC0gMTsKICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pOwogICAgICAgICAgICBjaHVuay5wdXNoKCIiKTsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnBvcyhyb3cgKyBmcm9tLCBjb2x1bW4pLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnBvcyhyb3cgKyB0bywgY29sdW1uID0gMCksCiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbiwKICAgICAgICAgICAgICAgIGxpbmVzOiBjaHVuawogICAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgZGVsdGEubGluZXMgPSBsaW5lcy5zbGljZShmcm9tKTsKICAgICAgICBkZWx0YS5zdGFydC5yb3cgPSByb3cgKyBmcm9tOwogICAgICAgIGRlbHRhLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGEsIHRydWUpOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS5yZXZlcnREZWx0YSA9IGZ1bmN0aW9uIChkZWx0YSkgewogICAgICAgIHRoaXMuJHNhZmVBcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHRoaXMuY2xvbmVQb3MoZGVsdGEuc3RhcnQpLAogICAgICAgICAgICBlbmQ6IHRoaXMuY2xvbmVQb3MoZGVsdGEuZW5kKSwKICAgICAgICAgICAgYWN0aW9uOiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiID8gInJlbW92ZSIgOiAiaW5zZXJ0IiksCiAgICAgICAgICAgIGxpbmVzOiBkZWx0YS5saW5lcy5zbGljZSgpCiAgICAgICAgfSk7CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLmluZGV4VG9Qb3NpdGlvbiA9IGZ1bmN0aW9uIChpbmRleCwgc3RhcnRSb3cpIHsKICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0Um93IHx8IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgaW5kZXggLT0gbGluZXNbaV0ubGVuZ3RoICsgbmV3bGluZUxlbmd0aDsKICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkKICAgICAgICAgICAgICAgIHJldHVybiB7IHJvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGggfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgcm93OiBsIC0gMSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2wgLSAxXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RoIH07CiAgICB9OwogICAgRG9jdW1lbnQucHJvdG90eXBlLnBvc2l0aW9uVG9JbmRleCA9IGZ1bmN0aW9uIChwb3MsIHN0YXJ0Um93KSB7CiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOwogICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwogICAgICAgIHZhciBpbmRleCA9IDA7CiAgICAgICAgdmFyIHJvdyA9IE1hdGgubWluKHBvcy5yb3csIGxpbmVzLmxlbmd0aCk7CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0Um93IHx8IDA7IGkgPCByb3c7ICsraSkKICAgICAgICAgICAgaW5kZXggKz0gbGluZXNbaV0ubGVuZ3RoICsgbmV3bGluZUxlbmd0aDsKICAgICAgICByZXR1cm4gaW5kZXggKyBwb3MuY29sdW1uOwogICAgfTsKICAgIERvY3VtZW50LnByb3RvdHlwZS4kc3BsaXQgPSBmdW5jdGlvbiAodGV4dCkgewogICAgICAgIHJldHVybiB0ZXh0LnNwbGl0KC9cclxufFxyfFxuLyk7CiAgICB9OwogICAgcmV0dXJuIERvY3VtZW50Owp9KCkpOwpEb2N1bWVudC5wcm90b3R5cGUuJGF1dG9OZXdMaW5lID0gIiI7CkRvY3VtZW50LnByb3RvdHlwZS4kbmV3TGluZU1vZGUgPSAiYXV0byI7Cm9vcC5pbXBsZW1lbnQoRG9jdW1lbnQucHJvdG90eXBlLCBFdmVudEVtaXR0ZXIpOwpleHBvcnRzLkRvY3VtZW50ID0gRG9jdW1lbnQ7Cgp9KTsKCmFjZS5kZWZpbmUoImFjZS9saWIvZGVlcF9jb3B5IixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKXtleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgfHwgIW9iaikKICAgICAgICByZXR1cm4gb2JqOwogICAgdmFyIGNvcHk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7CiAgICAgICAgY29weSA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKQogICAgICAgIHJldHVybiBvYmo7CiAgICBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKQogICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgIHJldHVybiBjb3B5Owp9OwoKfSk7CgphY2UuZGVmaW5lKCJhY2UvbGliL2xhbmciLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpeyJ1c2Ugc3RyaWN0IjsKZXhwb3J0cy5sYXN0ID0gZnVuY3Rpb24gKGEpIHsKICAgIHJldHVybiBhW2EubGVuZ3RoIC0gMV07Cn07CmV4cG9ydHMuc3RyaW5nUmV2ZXJzZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKTsKfTsKZXhwb3J0cy5zdHJpbmdSZXBlYXQgPSBmdW5jdGlvbiAoc3RyaW5nLCBjb3VudCkgewogICAgdmFyIHJlc3VsdCA9ICcnOwogICAgd2hpbGUgKGNvdW50ID4gMCkgewogICAgICAgIGlmIChjb3VudCAmIDEpCiAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmc7CiAgICAgICAgaWYgKGNvdW50ID4+PSAxKQogICAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfTsKdmFyIHRyaW1CZWdpblJlZ2V4cCA9IC9eXHNccyovOwp2YXIgdHJpbUVuZFJlZ2V4cCA9IC9cc1xzKiQvOwpleHBvcnRzLnN0cmluZ1RyaW1MZWZ0ID0gZnVuY3Rpb24gKHN0cmluZykgewogICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgJycpOwp9OwpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cn07CmV4cG9ydHMuY29weU9iamVjdCA9IGZ1bmN0aW9uIChvYmopIHsKICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKZXhwb3J0cy5jb3B5QXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHsKICAgIHZhciBjb3B5ID0gW107CiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgIGlmIChhcnJheVtpXSAmJiB0eXBlb2YgYXJyYXlbaV0gPT0gIm9iamVjdCIpCiAgICAgICAgICAgIGNvcHlbaV0gPSB0aGlzLmNvcHlPYmplY3QoYXJyYXlbaV0pOwogICAgICAgIGVsc2UKICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOwogICAgfQogICAgcmV0dXJuIGNvcHk7Cn07CmV4cG9ydHMuZGVlcENvcHkgPSByZXF1aXJlKCIuL2RlZXBfY29weSIpLmRlZXBDb3B5OwpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbiAoYXJyKSB7CiAgICB2YXIgbWFwID0ge307CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgewogICAgICAgIG1hcFthcnJbaV1dID0gMTsKICAgIH0KICAgIHJldHVybiBtYXA7Cn07CmV4cG9ydHMuY3JlYXRlTWFwID0gZnVuY3Rpb24gKHByb3BzKSB7CiAgICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGZvciAodmFyIGkgaW4gcHJvcHMpIHsKICAgICAgICBtYXBbaV0gPSBwcm9wc1tpXTsKICAgIH0KICAgIHJldHVybiBtYXA7Cn07CmV4cG9ydHMuYXJyYXlSZW1vdmUgPSBmdW5jdGlvbiAoYXJyYXksIHZhbHVlKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBhcnJheS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gYXJyYXlbaV0pIHsKICAgICAgICAgICAgYXJyYXkuc3BsaWNlKGksIDEpOwogICAgICAgIH0KICAgIH0KfTsKZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBmdW5jdGlvbiAoc3RyKSB7CiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXF1cL1xcXSkvZywgJ1xcJDEnKTsKfTsKZXhwb3J0cy5lc2NhcGVIVE1MID0gZnVuY3Rpb24gKHN0cikgewogICAgcmV0dXJuICgiIiArIHN0cikucmVwbGFjZSgvJi9nLCAiJiMzODsiKS5yZXBsYWNlKC8iL2csICImIzM0OyIpLnJlcGxhY2UoLycvZywgIiYjMzk7IikucmVwbGFjZSgvPC9nLCAiJiM2MDsiKTsKfTsKZXhwb3J0cy5nZXRNYXRjaE9mZnNldHMgPSBmdW5jdGlvbiAoc3RyaW5nLCByZWdFeHApIHsKICAgIHZhciBtYXRjaGVzID0gW107CiAgICBzdHJpbmcucmVwbGFjZShyZWdFeHAsIGZ1bmN0aW9uIChzdHIpIHsKICAgICAgICBtYXRjaGVzLnB1c2goewogICAgICAgICAgICBvZmZzZXQ6IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMl0sCiAgICAgICAgICAgIGxlbmd0aDogc3RyLmxlbmd0aAogICAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm4gbWF0Y2hlczsKfTsKZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbiAoZmNuKSB7CiAgICB2YXIgdGltZXIgPSBudWxsOwogICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkgewogICAgICAgIHRpbWVyID0gbnVsbDsKICAgICAgICBmY24oKTsKICAgIH07CiAgICB2YXIgZGVmZXJyZWQgPSBmdW5jdGlvbiAodGltZW91dCkgewogICAgICAgIGRlZmVycmVkLmNhbmNlbCgpOwogICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8fCAwKTsKICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CiAgICB9OwogICAgZGVmZXJyZWQuc2NoZWR1bGUgPSBkZWZlcnJlZDsKICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5jYW5jZWwoKTsKICAgICAgICBmY24oKTsKICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CiAgICB9OwogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24gKCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgIH07CiAgICBkZWZlcnJlZC5pc1BlbmRpbmcgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRpbWVyOwogICAgfTsKICAgIHJldHVybiBkZWZlcnJlZDsKfTsKZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uIChmY24sIGRlZmF1bHRUaW1lb3V0KSB7CiAgICB2YXIgdGltZXIgPSBudWxsOwogICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkgewogICAgICAgIHRpbWVyID0gbnVsbDsKICAgICAgICBmY24oKTsKICAgIH07CiAgICB2YXIgX3NlbGYgPSBmdW5jdGlvbiAodGltZW91dCkgewogICAgICAgIGlmICh0aW1lciA9PSBudWxsKQogICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKICAgIF9zZWxmLmRlbGF5ID0gZnVuY3Rpb24gKHRpbWVvdXQpIHsKICAgICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpOwogICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8fCBkZWZhdWx0VGltZW91dCk7CiAgICB9OwogICAgX3NlbGYuc2NoZWR1bGUgPSBfc2VsZjsKICAgIF9zZWxmLmNhbGwgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5jYW5jZWwoKTsKICAgICAgICBmY24oKTsKICAgIH07CiAgICBfc2VsZi5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICB9OwogICAgX3NlbGYuaXNQZW5kaW5nID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB0aW1lcjsKICAgIH07CiAgICByZXR1cm4gX3NlbGY7Cn07CmV4cG9ydHMuc3VwcG9ydHNMb29rYmVoaW5kID0gZnVuY3Rpb24gKCkgewogICAgdHJ5IHsKICAgICAgICBuZXcgUmVnRXhwKCcoPzw9LiknKTsKICAgIH0KICAgIGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CmV4cG9ydHMuc2tpcEVtcHR5TWF0Y2ggPSBmdW5jdGlvbiAobGluZSwgbGFzdCwgc3VwcG9ydHNVbmljb2RlRmxhZykgewogICAgcmV0dXJuIHN1cHBvcnRzVW5pY29kZUZsYWcgJiYgbGluZS5jb2RlUG9pbnRBdChsYXN0KSA+IDB4ZmZmZiA/IDIgOiAxOwp9OwoKfSk7CgphY2UuZGVmaW5lKCJhY2Uvd29ya2VyL21pcnJvciIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgRG9jdW1lbnQgPSByZXF1aXJlKCIuLi9kb2N1bWVudCIpLkRvY3VtZW50Owp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CiAgICAKdmFyIE1pcnJvciA9IGV4cG9ydHMuTWlycm9yID0gZnVuY3Rpb24oc2VuZGVyKSB7CiAgICB0aGlzLnNlbmRlciA9IHNlbmRlcjsKICAgIHZhciBkb2MgPSB0aGlzLmRvYyA9IG5ldyBEb2N1bWVudCgiIik7CiAgICAKICAgIHZhciBkZWZlcnJlZFVwZGF0ZSA9IHRoaXMuZGVmZXJyZWRVcGRhdGUgPSBsYW5nLmRlbGF5ZWRDYWxsKHRoaXMub25VcGRhdGUuYmluZCh0aGlzKSk7CiAgICAKICAgIHZhciBfc2VsZiA9IHRoaXM7CiAgICBzZW5kZXIub24oImNoYW5nZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICB2YXIgZGF0YSA9IGUuZGF0YTsKICAgICAgICBpZiAoZGF0YVswXS5zdGFydCkgewogICAgICAgICAgICBkb2MuYXBwbHlEZWx0YXMoZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgICAgICAgICAgICB2YXIgZCwgZXJyOyAKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpIHsKICAgICAgICAgICAgICAgICAgICBkID0ge2FjdGlvbjogImluc2VydCIsIHN0YXJ0OiBkYXRhW2ldLCBsaW5lczogZGF0YVtpKzFdfTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZCA9IHthY3Rpb246ICJyZW1vdmUiLCBzdGFydDogZGF0YVtpXSwgZW5kOiBkYXRhW2krMV19OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoKGQuYWN0aW9uID09ICJpbnNlcnQiID8gZC5zdGFydCA6IGQuZW5kKS5yb3cgPj0gZG9jLiRsaW5lcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBlcnIgPSBuZXcgRXJyb3IoIkludmFsaWQgZGVsdGEiKTsKICAgICAgICAgICAgICAgICAgICBlcnIuZGF0YSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogX3NlbGYuJHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzTGVuZ3RoOiBkb2MuJGxpbmVzLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGQuc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogZC5lbmQKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBkb2MuYXBwbHlEZWx0YShkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX3NlbGYuJHRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZShfc2VsZi4kdGltZW91dCk7CiAgICAgICAgX3NlbGYub25VcGRhdGUoKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOwogICAgCiAgICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSh0aGlzLiR0aW1lb3V0KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbihjYWxsYmFja0lkKSB7CiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7CiAgICB9OwogICAgCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICB0aGlzLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkVXBkYXRlLmlzUGVuZGluZygpOwogICAgfTsKICAgIAp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOwoKfSk7CgphY2UuZGVmaW5lKCJhY2UvbW9kZS9qc29uL2pzb25fcGFyc2UiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKICAgIHZhciBhdCwgICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIKICAgICAgICBjaCwgICAgIC8vIFRoZSBjdXJyZW50IGNoYXJhY3RlcgogICAgICAgIGVzY2FwZWUgPSB7CiAgICAgICAgICAgICciJzogICciJywKICAgICAgICAgICAgJ1xcJzogJ1xcJywKICAgICAgICAgICAgJy8nOiAgJy8nLAogICAgICAgICAgICBiOiAgICAnXGInLAogICAgICAgICAgICBmOiAgICAnXGYnLAogICAgICAgICAgICBuOiAgICAnXG4nLAogICAgICAgICAgICByOiAgICAnXHInLAogICAgICAgICAgICB0OiAgICAnXHQnCiAgICAgICAgfSwKICAgICAgICB0ZXh0LAoKICAgICAgICBlcnJvciA9IGZ1bmN0aW9uIChtKSB7CgogICAgICAgICAgICB0aHJvdyB7CiAgICAgICAgICAgICAgICBuYW1lOiAgICAnU3ludGF4RXJyb3InLAogICAgICAgICAgICAgICAgbWVzc2FnZTogbSwKICAgICAgICAgICAgICAgIGF0OiAgICAgIGF0LAogICAgICAgICAgICAgICAgdGV4dDogICAgdGV4dAogICAgICAgICAgICB9OwogICAgICAgIH0sCgogICAgICAgIG5leHQgPSBmdW5jdGlvbiAoYykgewoKICAgICAgICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHsKICAgICAgICAgICAgICAgIGVycm9yKCJFeHBlY3RlZCAnIiArIGMgKyAiJyBpbnN0ZWFkIG9mICciICsgY2ggKyAiJyIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjaCA9IHRleHQuY2hhckF0KGF0KTsKICAgICAgICAgICAgYXQgKz0gMTsKICAgICAgICAgICAgcmV0dXJuIGNoOwogICAgICAgIH0sCgogICAgICAgIG51bWJlciA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIHZhciBudW1iZXIsCiAgICAgICAgICAgICAgICBzdHJpbmcgPSAnJzsKCiAgICAgICAgICAgIGlmIChjaCA9PT0gJy0nKSB7CiAgICAgICAgICAgICAgICBzdHJpbmcgPSAnLSc7CiAgICAgICAgICAgICAgICBuZXh0KCctJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDsKICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2ggPT09ICcuJykgewogICAgICAgICAgICAgICAgc3RyaW5nICs9ICcuJzsKICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0KCkgJiYgY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgewogICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7CiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gY2g7CiAgICAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoOwogICAgICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoOwogICAgICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBudW1iZXIgPSArc3RyaW5nOwogICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkgewogICAgICAgICAgICAgICAgZXJyb3IoIkJhZCBudW1iZXIiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBzdHJpbmcgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICB2YXIgaGV4LAogICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAgIHN0cmluZyA9ICcnLAogICAgICAgICAgICAgICAgdWZmZmY7CgogICAgICAgICAgICBpZiAoY2ggPT09ICciJykgewogICAgICAgICAgICAgICAgd2hpbGUgKG5leHQoKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJyInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVmZmZmID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICs9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXggPSBwYXJzZUludChuZXh0KCksIDE2KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGhleCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXNjYXBlZVtjaF0gPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gZXNjYXBlZVtjaF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIlxuIiB8fCBjaCA9PSAiXHIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3IoIkJhZCBzdHJpbmciKTsKICAgICAgICB9LAoKICAgICAgICB3aGl0ZSA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIHdoaWxlIChjaCAmJiBjaCA8PSAnICcpIHsKICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHdvcmQgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgICAgICAgIGNhc2UgJ3QnOgogICAgICAgICAgICAgICAgbmV4dCgndCcpOwogICAgICAgICAgICAgICAgbmV4dCgncicpOwogICAgICAgICAgICAgICAgbmV4dCgndScpOwogICAgICAgICAgICAgICAgbmV4dCgnZScpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIGNhc2UgJ2YnOgogICAgICAgICAgICAgICAgbmV4dCgnZicpOwogICAgICAgICAgICAgICAgbmV4dCgnYScpOwogICAgICAgICAgICAgICAgbmV4dCgnbCcpOwogICAgICAgICAgICAgICAgbmV4dCgncycpOwogICAgICAgICAgICAgICAgbmV4dCgnZScpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgIG5leHQoJ24nKTsKICAgICAgICAgICAgICAgIG5leHQoJ3UnKTsKICAgICAgICAgICAgICAgIG5leHQoJ2wnKTsKICAgICAgICAgICAgICAgIG5leHQoJ2wnKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yKCJVbmV4cGVjdGVkICciICsgY2ggKyAiJyIpOwogICAgICAgIH0sCgogICAgICAgIHZhbHVlLCAgLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUgdmFsdWUgZnVuY3Rpb24uCgogICAgICAgIGFycmF5ID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgdmFyIGFycmF5ID0gW107CgogICAgICAgICAgICBpZiAoY2ggPT09ICdbJykgewogICAgICAgICAgICAgICAgbmV4dCgnWycpOwogICAgICAgICAgICAgICAgd2hpdGUoKTsKICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCgnXScpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsgICAvLyBlbXB0eSBhcnJheQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGNoKSB7CiAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICB3aGl0ZSgpOwogICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoJ10nKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBuZXh0KCcsJyk7CiAgICAgICAgICAgICAgICAgICAgd2hpdGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvcigiQmFkIGFycmF5Iik7CiAgICAgICAgfSwKCiAgICAgICAgb2JqZWN0ID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgdmFyIGtleSwKICAgICAgICAgICAgICAgIG9iamVjdCA9IHt9OwoKICAgICAgICAgICAgaWYgKGNoID09PSAneycpIHsKICAgICAgICAgICAgICAgIG5leHQoJ3snKTsKICAgICAgICAgICAgICAgIHdoaXRlKCk7CiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd9JykgewogICAgICAgICAgICAgICAgICAgIG5leHQoJ30nKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OyAgIC8vIGVtcHR5IG9iamVjdAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGNoKSB7CiAgICAgICAgICAgICAgICAgICAga2V5ID0gc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgd2hpdGUoKTsKICAgICAgICAgICAgICAgICAgICBuZXh0KCc6Jyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkgewogICAgICAgICAgICAgICAgICAgICAgICBlcnJvcignRHVwbGljYXRlIGtleSAiJyArIGtleSArICciJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICB3aGl0ZSgpOwogICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoJ30nKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbmV4dCgnLCcpOwogICAgICAgICAgICAgICAgICAgIHdoaXRlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3IoIkJhZCBvYmplY3QiKTsKICAgICAgICB9OwoKICAgIHZhbHVlID0gZnVuY3Rpb24gKCkgewoKICAgICAgICB3aGl0ZSgpOwogICAgICAgIHN3aXRjaCAoY2gpIHsKICAgICAgICBjYXNlICd7JzoKICAgICAgICAgICAgcmV0dXJuIG9iamVjdCgpOwogICAgICAgIGNhc2UgJ1snOgogICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgICAgICBjYXNlICciJzoKICAgICAgICAgICAgcmV0dXJuIHN0cmluZygpOwogICAgICAgIGNhc2UgJy0nOgogICAgICAgICAgICByZXR1cm4gbnVtYmVyKCk7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOScgPyBudW1iZXIoKSA6IHdvcmQoKTsKICAgICAgICB9CiAgICB9OwoKICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCByZXZpdmVyKSB7CiAgICAgICAgdmFyIHJlc3VsdDsKCiAgICAgICAgdGV4dCA9IHNvdXJjZTsKICAgICAgICBhdCA9IDA7CiAgICAgICAgY2ggPSAnICc7CiAgICAgICAgcmVzdWx0ID0gdmFsdWUoKTsKICAgICAgICB3aGl0ZSgpOwogICAgICAgIGlmIChjaCkgewogICAgICAgICAgICBlcnJvcigiU3ludGF4IGVycm9yIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPyBmdW5jdGlvbiB3YWxrKGhvbGRlciwga2V5KSB7CiAgICAgICAgICAgIHZhciBrLCB2LCB2YWx1ZSA9IGhvbGRlcltrZXldOwogICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgewogICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkgewogICAgICAgICAgICAgICAgICAgICAgICB2ID0gd2Fsayh2YWx1ZSwgayk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7CiAgICAgICAgfSh7Jyc6IHJlc3VsdH0sICcnKSA6IHJlc3VsdDsKICAgIH07Cn0pOwoKYWNlLmRlZmluZSgiYWNlL21vZGUvanNvbl93b3JrZXIiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIE1pcnJvciA9IHJlcXVpcmUoIi4uL3dvcmtlci9taXJyb3IiKS5NaXJyb3I7CnZhciBwYXJzZSA9IHJlcXVpcmUoIi4vanNvbi9qc29uX3BhcnNlIik7Cgp2YXIgSnNvbldvcmtlciA9IGV4cG9ydHMuSnNvbldvcmtlciA9IGZ1bmN0aW9uKHNlbmRlcikgewogICAgTWlycm9yLmNhbGwodGhpcywgc2VuZGVyKTsKICAgIHRoaXMuc2V0VGltZW91dCgyMDApOwp9OwoKb29wLmluaGVyaXRzKEpzb25Xb3JrZXIsIE1pcnJvcik7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5vblVwZGF0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZG9jLmdldFZhbHVlKCk7CiAgICAgICAgdmFyIGVycm9ycyA9IFtdOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgICAgIHBhcnNlKHZhbHVlKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLmRvYy5pbmRleFRvUG9zaXRpb24oZS5hdC0xKTsKICAgICAgICAgICAgZXJyb3JzLnB1c2goewogICAgICAgICAgICAgICAgcm93OiBwb3Mucm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBwb3MuY29sdW1uLAogICAgICAgICAgICAgICAgdGV4dDogZS5tZXNzYWdlLAogICAgICAgICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zZW5kZXIuZW1pdCgiYW5ub3RhdGUiLCBlcnJvcnMpOwogICAgfTsKCn0pLmNhbGwoSnNvbldvcmtlci5wcm90b3R5cGUpOwoKfSk7Cg==';\n\n/***/ }),\n\n/***/ 3057:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   AI: function() { return /* binding */ setLanguages; },\n/* harmony export */   Tl: function() { return /* binding */ translate; },\n/* harmony export */   xC: function() { return /* binding */ setLanguage; }\n/* harmony export */ });\n/* harmony import */ var _polyfills__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1081);\n/* harmony import */ var _polyfills__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_polyfills__WEBPACK_IMPORTED_MODULE_0__);\n\n\n/* eslint-disable no-template-curly-in-string */\n\nvar _defs = {\n  en: {\n    array: 'Array',\n    auto: 'Auto',\n    appendText: 'Append',\n    appendTitle: 'Append a new field with type \\'auto\\' after this field (Ctrl+Shift+Ins)',\n    appendSubmenuTitle: 'Select the type of the field to be appended',\n    appendTitleAuto: 'Append a new field with type \\'auto\\' (Ctrl+Shift+Ins)',\n    ascending: 'Ascending',\n    ascendingTitle: 'Sort the childs of this ${type} in ascending order',\n    actionsMenu: 'Click to open the actions menu (Ctrl+M)',\n    cannotParseFieldError: 'Cannot parse field into JSON',\n    cannotParseValueError: 'Cannot parse value into JSON',\n    collapseAll: 'Collapse all fields',\n    compactTitle: 'Compact JSON data, remove all whitespaces (Ctrl+Shift+I)',\n    descending: 'Descending',\n    descendingTitle: 'Sort the childs of this ${type} in descending order',\n    drag: 'Drag to move this field (Alt+Shift+Arrows)',\n    duplicateKey: 'duplicate key',\n    duplicateText: 'Duplicate',\n    duplicateTitle: 'Duplicate selected fields (Ctrl+D)',\n    duplicateField: 'Duplicate this field (Ctrl+D)',\n    duplicateFieldError: 'Duplicate field name',\n    empty: 'empty',\n    expandAll: 'Expand all fields',\n    expandTitle: 'Click to expand/collapse this field (Ctrl+E). \\n' + 'Ctrl+Click to expand/collapse including all childs.',\n    formatTitle: 'Format JSON data, with proper indentation and line feeds (Ctrl+I)',\n    insert: 'Insert',\n    insertTitle: 'Insert a new field with type \\'auto\\' before this field (Ctrl+Ins)',\n    insertSub: 'Select the type of the field to be inserted',\n    object: 'Object',\n    ok: 'Ok',\n    redo: 'Redo (Ctrl+Shift+Z)',\n    removeText: 'Remove',\n    removeTitle: 'Remove selected fields (Ctrl+Del)',\n    removeField: 'Remove this field (Ctrl+Del)',\n    repairTitle: 'Repair JSON: fix quotes and escape characters, remove comments and JSONP notation, turn JavaScript objects into JSON.',\n    searchTitle: 'Search fields and values',\n    searchNextResultTitle: 'Next result (Enter)',\n    searchPreviousResultTitle: 'Previous result (Shift + Enter)',\n    selectNode: 'Select a node...',\n    showAll: 'show all',\n    showMore: 'show more',\n    showMoreStatus: 'displaying ${visibleChilds} of ${totalChilds} items.',\n    sort: 'Sort',\n    sortTitle: 'Sort the childs of this ${type}',\n    sortTitleShort: 'Sort contents',\n    sortFieldLabel: 'Field:',\n    sortDirectionLabel: 'Direction:',\n    sortFieldTitle: 'Select the nested field by which to sort the array or object',\n    sortAscending: 'Ascending',\n    sortAscendingTitle: 'Sort the selected field in ascending order',\n    sortDescending: 'Descending',\n    sortDescendingTitle: 'Sort the selected field in descending order',\n    string: 'String',\n    transform: 'Transform',\n    transformTitle: 'Filter, sort, or transform the childs of this ${type}',\n    transformTitleShort: 'Filter, sort, or transform contents',\n    extract: 'Extract',\n    extractTitle: 'Extract this ${type}',\n    transformQueryTitle: 'Enter a JMESPath query',\n    transformWizardLabel: 'Wizard',\n    transformWizardFilter: 'Filter',\n    transformWizardSortBy: 'Sort by',\n    transformWizardSelectFields: 'Select fields',\n    transformQueryLabel: 'Query',\n    transformPreviewLabel: 'Preview',\n    type: 'Type',\n    typeTitle: 'Change the type of this field',\n    openUrl: 'Ctrl+Click or Ctrl+Enter to open url in new window',\n    undo: 'Undo last action (Ctrl+Z)',\n    validationCannotMove: 'Cannot move a field into a child of itself',\n    autoType: 'Field type \"auto\". ' + 'The field type is automatically determined from the value ' + 'and can be a string, number, boolean, or null.',\n    objectType: 'Field type \"object\". ' + 'An object contains an unordered set of key/value pairs.',\n    arrayType: 'Field type \"array\". ' + 'An array contains an ordered collection of values.',\n    stringType: 'Field type \"string\". ' + 'Field type is not determined from the value, ' + 'but always returned as string.',\n    modeEditorTitle: 'Switch Editor Mode',\n    modeCodeText: 'Code',\n    modeCodeTitle: 'Switch to code highlighter',\n    modeFormText: 'Form',\n    modeFormTitle: 'Switch to form editor',\n    modeTextText: 'Text',\n    modeTextTitle: 'Switch to plain text editor',\n    modeTreeText: 'Tree',\n    modeTreeTitle: 'Switch to tree editor',\n    modeViewText: 'View',\n    modeViewTitle: 'Switch to tree view',\n    modePreviewText: 'Preview',\n    modePreviewTitle: 'Switch to preview mode',\n    examples: 'Examples',\n    \"default\": 'Default',\n    containsInvalidProperties: 'Contains invalid properties',\n    containsInvalidItems: 'Contains invalid items'\n  },\n  es: {\n    array: 'Matriz',\n    auto: 'Auto',\n    appendText: 'Agregar',\n    appendTitle: 'Agregue un nuevo campo con el tipo \\'auto\\' después de este campo (Ctrl + Shift + Ins)',\n    appendSubmenuTitle: 'Seleccione el tipo de campo que se agregará',\n    appendTitleAuto: 'Agregue un nuevo campo con el tipo \\'auto\\' (Ctrl + Shift + Ins)',\n    ascending: 'Ascendente',\n    ascendingTitle: 'Ordene los elementos secundarios de este ${type} en orden ascendente',\n    actionsMenu: 'Haga clic para abrir el menú de acciones (Ctrl + M)',\n    cannotParseFieldError: 'No se puede parsear el campo en JSON',\n    cannotParseValueError: 'No se puede parsear el valor en JSON',\n    collapseAll: 'Contraer todos los campos',\n    compactTitle: 'Compactar datos JSON, eliminar todos los espacios en blanco (Ctrl + Shift + I)',\n    descending: 'Descendente',\n    descendingTitle: 'Ordene los hijos de este ${type} en orden descendente',\n    drag: 'Arrastre para mover este campo (Alt + Mayús + Flechas)',\n    duplicateKey: 'llave duplicada',\n    duplicateText: 'Duplicar',\n    duplicateTitle: 'Duplicar campos seleccionados (Ctrl + D)',\n    duplicateField: 'Duplicar este campo (Ctrl + D)',\n    duplicateFieldError: 'Nombre de campo duplicado',\n    empty: 'vacio',\n    expandAll: 'Expandir todos los campos',\n    expandTitle: 'Haga clic para expandir/contraer este campo (Ctrl + E). \\n ' + ' Ctrl+Clic para expandir/contraer incluyendo todos los niños.',\n    formatTitle: 'Formatee los datos JSON, con la sangría y los avances de línea adecuados (Ctrl + I)',\n    insert: 'Insertar',\n    insertTitle: 'Inserte un nuevo campo con el tipo \\'auto\\' antes de este campo (Ctrl + Ins)',\n    insertSub: 'Seleccione el tipo de campo a insertar',\n    object: 'Objeto',\n    ok: 'Ok',\n    redo: 'Rehacer (Ctrl+Mayús+Z)',\n    removeText: 'Eliminar',\n    removeTitle: 'Eliminar campos seleccionados (Ctrl+Supr)',\n    removeField: 'Eliminar este campo (Ctrl+Supr)',\n    repairTitle: 'Reparar JSON: corrija comillas y caracteres de escape, elimine comentarios y notación JSONP, convierta objetos JavaScript en JSON.',\n    searchTitle: 'Campos de búsqueda y valores',\n    searchNextResultTitle: 'Siguiente resultado (Entrar)',\n    searchPreviousResultTitle: 'Resultado anterior (Shift + Enter)',\n    selectNode: 'Seleccione un nodo...',\n    showAll: 'mostrar todo',\n    showMore: 'mostrar más',\n    showMoreStatus: 'mostrando ${visibleChilds} de ${totalChilds} elementos.',\n    sort: 'Ordenar',\n    sortTitle: 'Ordene los hijos de este ${type}',\n    sortTitleShort: 'Ordenar contenidos',\n    sortFieldLabel: 'Campo:',\n    sortDirectionLabel: 'Dirección:',\n    sortFieldTitle: 'Seleccione el campo anidado por el cual ordenar la matriz u objeto',\n    sortAscending: 'Ascendente',\n    sortAscendingTitle: 'Ordenar el campo seleccionado en orden ascendente',\n    sortDescending: 'Descendente',\n    sortDescendingTitle: 'Ordenar por el campo seleccionado, en orden descendente',\n    string: 'Texto',\n    transform: 'Transformar',\n    transformTitle: 'Filtrar, ordenar o transformar los hijos de este ${type}',\n    transformTitleShort: 'Filtrar, ordenar o transformar contenidos',\n    extract: 'Extraer',\n    extractTitle: 'Extrae este ${type}',\n    transformQueryTitle: 'Ingrese una consulta JMESPath',\n    transformWizardLabel: 'Wizard',\n    transformWizardFilter: 'Filtro',\n    transformWizardSortBy: 'Ordenar por',\n    transformWizardSelectFields: 'Seleccione un campo',\n    transformQueryLabel: 'Consulta',\n    transformPreviewLabel: 'Vista Previa',\n    type: 'Tipo',\n    typeTitle: 'Cambiar el tipo de campo',\n    openUrl: 'Ctrl+Click o Ctrl+Enter para abrir la URL en una nueva ventana',\n    undo: 'Deshacer la última acción (Ctrl+Z)',\n    validationCannotMove: 'No se puede mover un campo a un hijo de sí mismo.',\n    autoType: 'Tipo de campo \"auto\". ' + 'El tipo de campo se determina automáticamente a partir del valor ' + 'y puede ser una cadena, un número, un booleano o un valor nulo.',\n    objectType: 'Tipo de campo \"objeto\". ' + ' Un objeto contiene un conjunto desordenado de pares clave/valor.',\n    arrayType: 'Tipo de campo \"matriz\". ' + ' Una matriz contiene una colección ordenada de valores.',\n    stringType: 'Tipo de campo \"cadena\". ' + ' El tipo de campo no se determina a partir del valor, ' + ' pero siempre se devuelve como una cadena.',\n    modeEditorTitle: 'Cambiar modo de editor',\n    modeCodeText: 'Código',\n    modeCodeTitle: 'Cambiar al resaltador de código',\n    modeFormText: 'Formulario',\n    modeFormTitle: 'Cambiar al editor de formularios',\n    modeTextText: 'Texto',\n    modeTextTitle: 'Cambiar al editor de texto sin formato',\n    modeTreeText: 'Árbol',\n    modeTreeTitle: 'Cambiar al editor de árbol',\n    modeViewText: 'Vista',\n    modeViewTitle: 'Cambiar a la vista de árbol',\n    modePreviewText: 'Vista Previa',\n    modePreviewTitle: 'Cambiar al modo de vista previa',\n    examples: 'Ejemplos',\n    \"default\": 'Predeterminado',\n    containsInvalidProperties: 'Contiene propiedades no válidas',\n    containsInvalidItems: 'Contiene ítems no válidos'\n  },\n  'zh-CN': {\n    array: '数组',\n    auto: '自动',\n    appendText: '追加',\n    appendTitle: '在此字段后追加一个类型为“auto”的新字段 (Ctrl+Shift+Ins)',\n    appendSubmenuTitle: '选择要追加的字段类型',\n    appendTitleAuto: '追加类型为“auto”的新字段 (Ctrl+Shift+Ins)',\n    ascending: '升序',\n    ascendingTitle: '升序排列${type}的子节点',\n    actionsMenu: '点击打开动作菜单(Ctrl+M)',\n    cannotParseFieldError: '无法将字段解析为JSON',\n    cannotParseValueError: '无法将值解析为JSON',\n    collapseAll: '缩进所有字段',\n    compactTitle: '压缩JSON数据，删除所有空格 (Ctrl+Shift+I)',\n    descending: '降序',\n    descendingTitle: '降序排列${type}的子节点',\n    drag: '拖拽移动该节点(Alt+Shift+Arrows)',\n    duplicateKey: '重复键',\n    duplicateText: '复制',\n    duplicateTitle: '复制选中字段(Ctrl+D)',\n    duplicateField: '复制该字段(Ctrl+D)',\n    duplicateFieldError: '重复的字段名称',\n    empty: '清空',\n    expandAll: '展开所有字段',\n    expandTitle: '点击 展开/收缩 该字段(Ctrl+E). \\n' + 'Ctrl+Click 展开/收缩 包含所有子节点.',\n    formatTitle: '使用适当的缩进和换行符格式化JSON数据 (Ctrl+I)',\n    insert: '插入',\n    insertTitle: '在此字段前插入类型为“auto”的新字段 (Ctrl+Ins)',\n    insertSub: '选择要插入的字段类型',\n    object: '对象',\n    ok: 'Ok',\n    redo: '重做 (Ctrl+Shift+Z)',\n    removeText: '移除',\n    removeTitle: '移除选中字段 (Ctrl+Del)',\n    removeField: '移除该字段 (Ctrl+Del)',\n    repairTitle: '修复JSON：修复引号和转义符，删除注释和JSONP表示法，将JavaScript对象转换为JSON。',\n    selectNode: '选择一个节点...',\n    showAll: '展示全部',\n    showMore: '展示更多',\n    showMoreStatus: '显示${totalChilds}的${visibleChilds}项目.',\n    sort: '排序',\n    sortTitle: '排序${type}的子节点',\n    sortTitleShort: '内容排序',\n    sortFieldLabel: '字段：',\n    sortDirectionLabel: '方向：',\n    sortFieldTitle: '选择用于对数组或对象排序的嵌套字段',\n    sortAscending: '升序排序',\n    sortAscendingTitle: '按照该字段升序排序',\n    sortDescending: '降序排序',\n    sortDescendingTitle: '按照该字段降序排序',\n    string: '字符串',\n    transform: '变换',\n    transformTitle: '筛选，排序，或者转换${type}的子节点',\n    transformTitleShort: '筛选，排序，或者转换内容',\n    extract: '提取',\n    extractTitle: '提取这个 ${type}',\n    transformQueryTitle: '输入JMESPath查询',\n    transformWizardLabel: '向导',\n    transformWizardFilter: '筛选',\n    transformWizardSortBy: '排序',\n    transformWizardSelectFields: '选择字段',\n    transformQueryLabel: '查询',\n    transformPreviewLabel: '预览',\n    type: '类型',\n    typeTitle: '更改字段类型',\n    openUrl: 'Ctrl+Click 或者 Ctrl+Enter 在新窗口打开链接',\n    undo: '撤销上次动作 (Ctrl+Z)',\n    validationCannotMove: '无法将字段移入其子节点',\n    autoType: '字段类型 \"auto\". ' + '字段类型由值自动确定 ' + '可以为 string，number，boolean，或者 null.',\n    objectType: '字段类型 \"object\". ' + '对象包含一组无序的键/值对.',\n    arrayType: '字段类型 \"array\". ' + '数组包含值的有序集合.',\n    stringType: '字段类型 \"string\". ' + '字段类型由值自动确定，' + '但始终作为字符串返回.',\n    modeCodeText: '代码',\n    modeCodeTitle: '切换至代码高亮',\n    modeFormText: '表单',\n    modeFormTitle: '切换至表单编辑',\n    modeTextText: '文本',\n    modeTextTitle: '切换至文本编辑',\n    modeTreeText: '树',\n    modeTreeTitle: '切换至树编辑',\n    modeViewText: '视图',\n    modeViewTitle: '切换至树视图',\n    modePreviewText: '预览',\n    modePreviewTitle: '切换至预览模式',\n    examples: '例子',\n    \"default\": '缺省',\n    containsInvalidProperties: '包含无效的属性',\n    containsInvalidItems: '包含无效项目'\n  },\n  'pt-BR': {\n    array: 'Lista',\n    auto: 'Automatico',\n    appendText: 'Adicionar',\n    appendTitle: 'Adicionar novo campo com tipo \\'auto\\' depois deste campo (Ctrl+Shift+Ins)',\n    appendSubmenuTitle: 'Selecione o tipo do campo a ser adicionado',\n    appendTitleAuto: 'Adicionar novo campo com tipo \\'auto\\' (Ctrl+Shift+Ins)',\n    ascending: 'Ascendente',\n    ascendingTitle: 'Organizar filhor do tipo ${type} em crescente',\n    actionsMenu: 'Clique para abrir o menu de ações (Ctrl+M)',\n    cannotParseFieldError: 'Não é possível analisar o campo no JSON',\n    cannotParseValueError: 'Não é possível analisar o valor em JSON',\n    collapseAll: 'Fechar todos campos',\n    compactTitle: 'Dados JSON compactos, remova todos os espaços em branco (Ctrl+Shift+I)',\n    descending: 'Descendente',\n    descendingTitle: 'Organizar o filhos do tipo ${type} em decrescente',\n    duplicateKey: 'chave duplicada',\n    drag: 'Arraste para mover este campo (Alt+Shift+Arrows)',\n    duplicateText: 'Duplicar',\n    duplicateTitle: 'Duplicar campos selecionados (Ctrl+D)',\n    duplicateField: 'Duplicar este campo (Ctrl+D)',\n    duplicateFieldError: 'Nome do campo duplicado',\n    empty: 'vazio',\n    expandAll: 'Expandir todos campos',\n    expandTitle: 'Clique para expandir/encolher este campo (Ctrl+E). \\n' + 'Ctrl+Click para expandir/encolher incluindo todos os filhos.',\n    formatTitle: 'Formate dados JSON, com recuo e feeds de linha adequados (Ctrl+I)',\n    insert: 'Inserir',\n    insertTitle: 'Inserir um novo campo do tipo \\'auto\\' antes deste campo (Ctrl+Ins)',\n    insertSub: 'Selecionar o tipo de campo a ser inserido',\n    object: 'Objeto',\n    ok: 'Ok',\n    redo: 'Refazer (Ctrl+Shift+Z)',\n    removeText: 'Remover',\n    removeTitle: 'Remover campos selecionados (Ctrl+Del)',\n    removeField: 'Remover este campo (Ctrl+Del)',\n    repairTitle: 'Repare JSON: corrija aspas e caracteres de escape, remova comentários e notação JSONP, transforme objetos JavaScript em JSON.',\n    selectNode: 'Selecione um nódulo...',\n    showAll: 'mostrar todos',\n    showMore: 'mostrar mais',\n    showMoreStatus: 'exibindo ${visibleChilds} de ${totalChilds} itens.',\n    sort: 'Organizar',\n    sortTitle: 'Organizar os filhos deste ${type}',\n    sortTitleShort: 'Organizar os filhos',\n    sortFieldLabel: 'Campo:',\n    sortDirectionLabel: 'Direção:',\n    sortFieldTitle: 'Selecione um campo filho pelo qual ordenar o array ou objeto',\n    sortAscending: 'Ascendente',\n    sortAscendingTitle: 'Ordenar o campo selecionado por ordem ascendente',\n    sortDescending: 'Descendente',\n    sortDescendingTitle: 'Ordenar o campo selecionado por ordem descendente',\n    string: 'Texto',\n    transform: 'Transformar',\n    transformTitle: 'Filtrar, ordenar ou transformar os filhos deste ${type}',\n    transformTitleShort: 'Filtrar, ordenar ou transformar conteúdos',\n    transformQueryTitle: 'Insira uma expressão JMESPath',\n    transformWizardLabel: 'Assistente',\n    transformWizardFilter: 'Filtro',\n    transformWizardSortBy: 'Ordenar por',\n    transformWizardSelectFields: 'Selecionar campos',\n    transformQueryLabel: 'Expressão',\n    transformPreviewLabel: 'Visualizar',\n    type: 'Tipo',\n    typeTitle: 'Mudar o tipo deste campo',\n    openUrl: 'Ctrl+Click ou Ctrl+Enter para abrir link em nova janela',\n    undo: 'Desfazer último ação (Ctrl+Z)',\n    validationCannotMove: 'Não pode mover um campo como filho dele mesmo',\n    autoType: 'Campo do tipo \"auto\". ' + 'O tipo do campo é determinao automaticamente a partir do seu valor ' + 'e pode ser texto, número, verdade/falso ou nulo.',\n    objectType: 'Campo do tipo \"objeto\". ' + 'Um objeto contém uma lista de pares com chave e valor.',\n    arrayType: 'Campo do tipo \"lista\". ' + 'Uma lista contem uma coleção de valores ordenados.',\n    stringType: 'Campo do tipo \"string\". ' + 'Campo do tipo nao é determinado através do seu valor, ' + 'mas sempre retornara um texto.',\n    examples: 'Exemplos',\n    \"default\": 'Revelia',\n    containsInvalidProperties: 'Contém propriedades inválidas',\n    containsInvalidItems: 'Contém itens inválidos'\n  },\n  tr: {\n    array: 'Dizin',\n    auto: 'Otomatik',\n    appendText: 'Ekle',\n    appendTitle: 'Bu alanın altına \\'otomatik\\' tipinde yeni bir alan ekle (Ctrl+Shift+Ins)',\n    appendSubmenuTitle: 'Eklenecek alanın tipini seç',\n    appendTitleAuto: '\\'Otomatik\\' tipinde yeni bir alan ekle (Ctrl+Shift+Ins)',\n    ascending: 'Artan',\n    ascendingTitle: '${type}\\'ın alt tiplerini artan düzende sırala',\n    actionsMenu: 'Aksiyon menüsünü açmak için tıklayın (Ctrl+M)',\n    collapseAll: 'Tüm alanları kapat',\n    descending: 'Azalan',\n    descendingTitle: '${type}\\'ın alt tiplerini azalan düzende sırala',\n    drag: 'Bu alanı taşımak için sürükleyin (Alt+Shift+Arrows)',\n    duplicateKey: 'Var olan anahtar',\n    duplicateText: 'Aşağıya kopyala',\n    duplicateTitle: 'Seçili alanlardan bir daha oluştur (Ctrl+D)',\n    duplicateField: 'Bu alandan bir daha oluştur (Ctrl+D)',\n    duplicateFieldError: 'Duplicate field name',\n    cannotParseFieldError: 'Alan JSON\\'a ayrıştırılamıyor',\n    cannotParseValueError: 'JSON\\'a değer ayrıştırılamıyor',\n    empty: 'boş',\n    expandAll: 'Tüm alanları aç',\n    expandTitle: 'Bu alanı açmak/kapatmak için tıkla (Ctrl+E). \\n' + 'Alt alanlarda dahil tüm alanları açmak için Ctrl+Click ',\n    insert: 'Ekle',\n    insertTitle: 'Bu alanın üstüne \\'otomatik\\' tipinde yeni bir alan ekle (Ctrl+Ins)',\n    insertSub: 'Araya eklenecek alanın tipini seç',\n    object: 'Nesne',\n    ok: 'Tamam',\n    redo: 'Yeniden yap (Ctrl+Shift+Z)',\n    removeText: 'Kaldır',\n    removeTitle: 'Seçilen alanları kaldır (Ctrl+Del)',\n    removeField: 'Bu alanı kaldır (Ctrl+Del)',\n    selectNode: 'Bir nesne seç...',\n    showAll: 'tümünü göster',\n    showMore: 'daha fazla göster',\n    showMoreStatus: '${totalChilds} alanın ${visibleChilds} alt alanları gösteriliyor',\n    sort: 'Sırala',\n    sortTitle: '${type}\\'ın alt alanlarını sırala',\n    sortTitleShort: 'İçerikleri sırala',\n    sortFieldLabel: 'Alan:',\n    sortDirectionLabel: 'Yön:',\n    sortFieldTitle: 'Diziyi veya nesneyi sıralamak için iç içe geçmiş alanı seçin',\n    sortAscending: 'Artan',\n    sortAscendingTitle: 'Seçili alanı artan düzende sırala',\n    sortDescending: 'Azalan',\n    sortDescendingTitle: 'Seçili alanı azalan düzende sırala',\n    string: 'Karakter Dizisi',\n    transform: 'Dönüştür',\n    transformTitle: '${type}\\'ın alt alanlarını filtrele, sırala veya dönüştür',\n    transformTitleShort: 'İçerikleri filterele, sırala veya dönüştür',\n    transformQueryTitle: 'JMESPath sorgusu gir',\n    transformWizardLabel: 'Sihirbaz',\n    transformWizardFilter: 'Filtre',\n    transformWizardSortBy: 'Sırala',\n    transformWizardSelectFields: 'Alanları seç',\n    transformQueryLabel: 'Sorgu',\n    transformPreviewLabel: 'Önizleme',\n    type: 'Tip',\n    typeTitle: 'Bu alanın tipini değiştir',\n    openUrl: 'URL\\'i yeni bir pencerede açmak için Ctrl+Click veya Ctrl+Enter',\n    undo: 'Son değişikliği geri al (Ctrl+Z)',\n    validationCannotMove: 'Alt alan olarak taşınamıyor',\n    autoType: 'Alan tipi \"otomatik\". ' + 'Alan türü otomatik olarak değerden belirlenir' + 've bir dize, sayı, boolean veya null olabilir.',\n    objectType: 'Alan tipi \"nesne\". ' + 'Bir nesne, sıralanmamış bir anahtar / değer çifti kümesi içerir.',\n    arrayType: 'Alan tipi \"dizi\". ' + 'Bir dizi, düzenli değerler koleksiyonu içerir.',\n    stringType: 'Alan tipi \"karakter dizisi\". ' + 'Alan türü değerden belirlenmez,' + 'ancak her zaman karakter dizisi olarak döndürülür.',\n    modeCodeText: 'Kod',\n    modeCodeTitle: 'Kod vurgulayıcıya geç',\n    modeFormText: 'Form',\n    modeFormTitle: 'Form düzenleyiciye geç',\n    modeTextText: 'Metin',\n    modeTextTitle: 'Düz metin düzenleyiciye geç',\n    modeTreeText: 'Ağaç',\n    modeTreeTitle: 'Ağaç düzenleyiciye geç',\n    modeViewText: 'Görünüm',\n    modeViewTitle: 'Ağaç görünümüne geç',\n    examples: 'Örnekler',\n    \"default\": 'Varsayılan',\n    containsInvalidProperties: 'Geçersiz özellikler içeriyor',\n    containsInvalidItems: 'Geçersiz öğeler içeriyor'\n  },\n  ja: {\n    array: '配列',\n    auto: 'オート',\n    appendText: '追加',\n    appendTitle: '次のフィールドに\"オート\"のフィールドを追加 (Ctrl+Shift+Ins)',\n    appendSubmenuTitle: '追加するフィールドの型を選択してください',\n    appendTitleAuto: '\"オート\"のフィールドを追加 (Ctrl+Shift+Ins)',\n    ascending: '昇順',\n    ascendingTitle: '${type}の子要素を昇順に並べ替え',\n    actionsMenu: 'クリックしてアクションメニューを開く (Ctrl+M)',\n    collapseAll: 'すべてを折りたたむ',\n    descending: '降順',\n    descendingTitle: '${type}の子要素を降順に並べ替え',\n    drag: 'ドラッグして選択中のフィールドを移動 (Alt+Shift+Arrows)',\n    duplicateKey: '複製キー',\n    duplicateText: '複製',\n    duplicateTitle: '選択中のフィールドを複製 (Ctrl+D)',\n    duplicateField: '選択中のフィールドを複製 (Ctrl+D)',\n    duplicateFieldError: 'フィールド名が重複しています',\n    cannotParseFieldError: 'JSONのフィールドを解析できません',\n    cannotParseValueError: 'JSONの値を解析できません',\n    empty: '空',\n    expandAll: 'すべてを展開',\n    expandTitle: 'クリックしてフィールドを展開/折りたたむ (Ctrl+E). \\n' + 'Ctrl+Click ですべての子要素を展開/折りたたむ',\n    insert: '挿入',\n    insertTitle: '選択中のフィールドの前に新しいフィールドを挿入 (Ctrl+Ins)',\n    insertSub: '挿入するフィールドの型を選択',\n    object: 'オブジェクト',\n    ok: '実行',\n    redo: 'やり直す (Ctrl+Shift+Z)',\n    removeText: '削除',\n    removeTitle: '選択中のフィールドを削除 (Ctrl+Del)',\n    removeField: '選択中のフィールドを削除 (Ctrl+Del)',\n    selectNode: 'ノードを選択...',\n    showAll: 'すべてを表示',\n    showMore: 'もっと見る',\n    showMoreStatus: '${totalChilds}個のアイテムのうち ${visibleChilds}個を表示しています。',\n    sort: '並べ替え',\n    sortTitle: '${type}の子要素を並べ替え',\n    sortTitleShort: '並べ替え',\n    sortFieldLabel: 'フィールド:',\n    sortDirectionLabel: '順序:',\n    sortFieldTitle: '配列またはオブジェクトを並び替えるためのフィールドを選択',\n    sortAscending: '昇順',\n    sortAscendingTitle: '選択中のフィールドを昇順に並び替え',\n    sortDescending: '降順',\n    sortDescendingTitle: '選択中のフィールドを降順に並び替え',\n    string: '文字列',\n    transform: '変換',\n    transformTitle: '${type}の子要素をフィルター・並び替え・変換する',\n    transformTitleShort: '内容をフィルター・並び替え・変換する',\n    extract: '抽出',\n    extractTitle: '${type}を抽出',\n    transformQueryTitle: 'JMESPathクエリを入力',\n    transformWizardLabel: 'ウィザード',\n    transformWizardFilter: 'フィルター',\n    transformWizardSortBy: '並び替え',\n    transformWizardSelectFields: 'フィールドを選択',\n    transformQueryLabel: 'クエリ',\n    transformPreviewLabel: 'プレビュー',\n    type: '型',\n    typeTitle: '選択中のフィールドの型を変更',\n    openUrl: 'Ctrl+Click または Ctrl+Enter で 新規ウィンドウでURLを開く',\n    undo: '元に戻す (Ctrl+Z)',\n    validationCannotMove: '子要素に移動できません ',\n    autoType: 'オート： ' + 'フィールドの型は値から自動的に決定されます。 ' + '(文字列・数値・ブール・null)',\n    objectType: 'オブジェクト： ' + 'オブジェクトは順序が決まっていないキーと値のペア組み合わせです。',\n    arrayType: '配列： ' + '配列は順序が決まっている値の集合体です。',\n    stringType: '文字列： ' + 'フィールド型は値から決定されませんが、' + '常に文字列として返されます。',\n    modeCodeText: 'コードモード',\n    modeCodeTitle: 'ハイライトモードに切り替え',\n    modeFormText: 'フォームモード',\n    modeFormTitle: 'フォームモードに切り替え',\n    modeTextText: 'テキストモード',\n    modeTextTitle: 'テキストモードに切り替え',\n    modeTreeText: 'ツリーモード',\n    modeTreeTitle: 'ツリーモードに切り替え',\n    modeViewText: 'ビューモード',\n    modeViewTitle: 'ビューモードに切り替え',\n    modePreviewText: 'プレビュー',\n    modePreviewTitle: 'プレビューに切り替え',\n    examples: '例',\n    \"default\": 'デフォルト',\n    containsInvalidProperties: '無効なプロパティが含まれています',\n    containsInvalidItems: '無効なアイテムが含まれています'\n  },\n  'fr-FR': {\n    array: 'Liste',\n    auto: 'Auto',\n    appendText: 'Ajouter',\n    appendTitle: 'Ajouter un champ de type \\'auto\\' après ce champ (Ctrl+Shift+Ins)',\n    appendSubmenuTitle: 'Sélectionner le type du champ à ajouter',\n    appendTitleAuto: 'Ajouter un champ de type \\'auto\\' (Ctrl+Shift+Ins)',\n    ascending: 'Ascendant',\n    ascendingTitle: 'Trier les enfants de ce ${type} par ordre ascendant',\n    actionsMenu: 'Ouvrir le menu des actions (Ctrl+M)',\n    collapseAll: 'Regrouper',\n    descending: 'Descendant',\n    descendingTitle: 'Trier les enfants de ce ${type} par ordre descendant',\n    drag: 'Déplacer (Alt+Shift+Arrows)',\n    duplicateKey: 'Dupliquer la clé',\n    duplicateText: 'Dupliquer',\n    duplicateTitle: 'Dupliquer les champs sélectionnés (Ctrl+D)',\n    duplicateField: 'Dupliquer ce champ (Ctrl+D)',\n    duplicateFieldError: 'Dupliquer le nom de champ',\n    cannotParseFieldError: 'Champ impossible à parser en JSON',\n    cannotParseValueError: 'Valeur impossible à parser en JSON',\n    empty: 'vide',\n    expandAll: 'Étendre',\n    expandTitle: 'Étendre/regrouper ce champ (Ctrl+E). \\n' + 'Ctrl+Click pour étendre/regrouper avec tous les champs.',\n    insert: 'Insérer',\n    insertTitle: 'Insérer un champ de type \\'auto\\' avant ce champ (Ctrl+Ins)',\n    insertSub: 'Sélectionner le type de champ à insérer',\n    object: 'Objet',\n    ok: 'Ok',\n    redo: 'Rejouer (Ctrl+Shift+Z)',\n    removeText: 'Supprimer',\n    removeTitle: 'Supprimer les champs sélectionnés (Ctrl+Del)',\n    removeField: 'Supprimer ce champ (Ctrl+Del)',\n    searchTitle: 'Rechercher champs et valeurs',\n    searchNextResultTitle: 'Résultat suivant (Enter)',\n    searchPreviousResultTitle: 'Résultat précédent (Shift + Enter)',\n    selectNode: 'Sélectionner un nœud...',\n    showAll: 'voir tout',\n    showMore: 'voir plus',\n    showMoreStatus: '${visibleChilds} éléments affichés de ${totalChilds}.',\n    sort: 'Trier',\n    sortTitle: 'Trier les champs de ce ${type}',\n    sortTitleShort: 'Trier',\n    sortFieldLabel: 'Champ:',\n    sortDirectionLabel: 'Direction:',\n    sortFieldTitle: 'Sélectionner les champs permettant de trier les listes et objet',\n    sortAscending: 'Ascendant',\n    sortAscendingTitle: 'Trier les champs sélectionnés par ordre ascendant',\n    sortDescending: 'Descendant',\n    sortDescendingTitle: 'Trier les champs sélectionnés par ordre descendant',\n    string: 'Chaîne',\n    transform: 'Transformer',\n    transformTitle: 'Filtrer, trier, or transformer les enfants de ce ${type}',\n    transformTitleShort: 'Filtrer, trier ou transformer le contenu',\n    extract: 'Extraire',\n    extractTitle: 'Extraire ce ${type}',\n    transformQueryTitle: 'Saisir une requête JMESPath',\n    transformWizardLabel: 'Assistant',\n    transformWizardFilter: 'Filtrer',\n    transformWizardSortBy: 'Trier par',\n    transformWizardSelectFields: 'Sélectionner les champs',\n    transformQueryLabel: 'Requête',\n    transformPreviewLabel: 'Prévisualisation',\n    type: 'Type',\n    typeTitle: 'Changer le type de ce champ',\n    openUrl: 'Ctrl+Click ou Ctrl+Enter pour ouvrir l\\'url dans une autre fenêtre',\n    undo: 'Annuler la dernière action (Ctrl+Z)',\n    validationCannotMove: 'Cannot move a field into a child of itself',\n    autoType: 'Champe de type \"auto\". ' + 'Ce type de champ est automatiquement déterminé en fonction de la valeur ' + 'et peut être de type \"chaîne\", \"nombre\", \"booléen\" ou null.',\n    objectType: 'Champ de type \"objet\". ' + 'Un objet contient un ensemble non ordonné de paires clé/valeur.',\n    arrayType: 'Champ de type \"liste\". ' + 'Une liste contient une collection ordonnée de valeurs.',\n    stringType: 'Champ de type \"chaîne\". ' + 'Ce type de champ n\\'est pas déterminé en fonction de la valeur, ' + 'mais retourne systématiquement une chaîne de caractères.',\n    modeEditorTitle: 'Changer mode d\\'édition',\n    modeCodeText: 'Code',\n    modeCodeTitle: 'Activer surlignage code',\n    modeFormText: 'Formulaire',\n    modeFormTitle: 'Activer formulaire',\n    modeTextText: 'Texte',\n    modeTextTitle: 'Activer éditeur texte',\n    modeTreeText: 'Arbre',\n    modeTreeTitle: 'Activer éditeur arbre',\n    modeViewText: 'Lecture seule',\n    modeViewTitle: 'Activer vue arbre',\n    modePreviewText: 'Prévisualisation',\n    modePreviewTitle: 'Activer mode prévisualiser',\n    examples: 'Exemples',\n    \"default\": 'Défaut',\n    containsInvalidProperties: 'Contient des propriétés non valides',\n    containsInvalidItems: 'Contient des éléments invalides'\n  },\n  de: {\n    array: 'Auflistung',\n    auto: 'Auto',\n    appendText: 'anhängen',\n    appendTitle: 'Fügen Sie nach diesem Feld ein neues Feld mit dem Typ \\'auto\\' ein (Strg+Umschalt+Ein)',\n    appendSubmenuTitle: 'Wählen Sie den Typ des neuen Feldes',\n    appendTitleAuto: 'Ein neues Feld vom Typ \\'auto\\' hinzufügen (Strg+Umschalt+Ein)',\n    ascending: 'Aufsteigend',\n    ascendingTitle: 'Sortieren Sie die Elemente dieses ${type} in aufsteigender Reihenfolge',\n    actionsMenu: 'Klicken Sie zum Öffnen des Aktionsmenüs (Strg+M)',\n    cannotParseFieldError: 'Feld kann nicht in JSON geparst werden',\n    cannotParseValueError: 'Wert kann nicht in JSON geparst werden',\n    collapseAll: 'Alle Felder zuklappen',\n    compactTitle: 'JSON-Daten verdichten, alle Leerzeichen entfernen (Strg+Umschalt+\\\\)',\n    descending: 'Absteigend',\n    descendingTitle: 'Sortieren Sie die Elemente dieses ${type} in absteigender Reihenfolge',\n    drag: 'Ziehen, um dieses Feld zu verschieben (Alt+Umschalt+Pfeile)',\n    duplicateKey: 'Doppelter Schlüssel',\n    duplicateText: 'Duplikat',\n    duplicateTitle: 'Ausgewählte Felder duplizieren (Strg+D)',\n    duplicateField: 'Dieses Feld duplizieren (Strg+D)',\n    duplicateFieldError: 'Doppelter Feldname',\n    empty: 'leer',\n    expandAll: 'Alle Felder anzeigen',\n    expandTitle: 'Klicken Sie, um dieses Feld zu erweitern/zu kollabieren (Strg+E). \\nStrg+Klicken Sie, um dieses Feld einschließlich aller Elemente zu erweitern/zu kollabieren.',\n    formatTitle: 'JSON-Daten mit korrekter Einrückung und Zeilenvorschüben formatieren (Strg+\\\\)',\n    insert: 'einfügen',\n    insertTitle: 'Fügen Sie vor diesem Feld ein neues Feld mit dem Typ \\'auto\\' ein (Strg+Einfg)',\n    insertSub: 'Wählen Sie den Typ des neuen Feldes',\n    object: 'Objekt',\n    ok: 'Ok',\n    redo: 'Wiederholen (Strg+Umschalt+Z)',\n    removeText: 'entfernen',\n    removeTitle: 'Ausgewählte Felder entfernen (Strg+Entf)',\n    removeField: 'Dieses Feld entfernen (Strg+Entf)',\n    repairTitle: 'JSON reparieren: Anführungszeichen und Escape-Zeichen korrigieren, Kommentare und JSONP-Notation entfernen, JavaScript-Objekte in JSON umwandeln.',\n    searchTitle: 'Suchfelder und Werte',\n    searchNextResultTitle: 'Nächstes Ergebnis (Enter)',\n    searchPreviousResultTitle: 'Vorheriges Ergebnis (Umschalt + Eingabe)',\n    selectNode: 'Wählen Sie einen Knoten aus...',\n    showAll: 'alle anzeigen',\n    showMore: 'mehr anzeigen',\n    showMoreStatus: 'Anzeige von ${visibleChilds} von ${totalChilds}-Elementen.',\n    sort: 'Sortieren',\n    sortTitle: 'Sortieren Sie die Elemente dieses ${type}',\n    sortTitleShort: 'Inhalt sortieren',\n    sortFieldLabel: 'Feld:',\n    sortDirectionLabel: 'Richtung:',\n    sortFieldTitle: 'Wählen Sie das verschachtelte Feld, nach dem das Array oder Objekt sortiert werden soll.',\n    sortAscending: 'Aufsteigend',\n    sortAscendingTitle: 'Sortieren Sie das ausgewählte Feld in aufsteigender Reihenfolge',\n    sortDescending: 'Absteigend',\n    sortDescendingTitle: 'Sortieren Sie das ausgewählte Feld in absteigender Reihenfolge',\n    string: 'Zeichenfolge',\n    transform: 'Verwandeln',\n    transformTitle: 'Die Elemente dieses ${type} filtern, sortieren oder transformieren',\n    transformTitleShort: 'Inhalte filtern, sortieren oder transformieren',\n    extract: 'Auszug',\n    extractTitle: 'Extrahieren Sie diesen ${type}',\n    transformQueryTitle: 'Eine JMESPath-Abfrage eingeben',\n    transformWizardLabel: 'Zauberer',\n    transformWizardFilter: 'Filter',\n    transformWizardSortBy: 'Sortieren nach',\n    transformWizardSelectFields: 'Felder auswählen',\n    transformQueryLabel: 'Anfrage',\n    transformPreviewLabel: 'Vorschau',\n    type: 'Geben Sie  ein.',\n    typeTitle: 'Ändern Sie den Typ dieses Feldes',\n    openUrl: 'Strg+Klicken oder Strg+Eingabe, um die URL in einem neuen Fenster zu öffnen',\n    undo: 'Letzte Aktion rückgängig machen (Strg+Z)',\n    validationCannotMove: 'Kann ein Feld nicht in ein Kind seiner selbst verschieben',\n    autoType: 'Feldtyp \"auto\". Der Feldtyp wird automatisch aus dem Wert bestimmt und kann ein String, eine Zahl, boolesch oder null sein.',\n    objectType: 'Feldtyp \"Objekt\". Ein Objekt enthält eine ungeordnete Menge von Schlüssel/Wert-Paaren.',\n    arrayType: 'Feldtyp \"Array\". Ein Array enthält eine geordnete Sammlung von Werten.',\n    stringType: 'Feldtyp \"Zeichenfolge\". Der Feldtyp wird nicht aus dem Wert bestimmt, sondern immer als Zeichenfolge zurückgegeben.',\n    modeEditorTitle: 'Editor-Modus umschalten',\n    modeCodeText: 'Code',\n    modeCodeTitle: 'Umschalten auf Code-Highlighter',\n    modeFormText: 'Formular',\n    modeFormTitle: 'Zum Formular-Editor wechseln',\n    modeTextText: 'Text',\n    modeTextTitle: 'Zum Editor für einfachen Text wechseln',\n    modeTreeText: 'Baum',\n    modeTreeTitle: 'Zum Baum-Editor wechseln',\n    modeViewText: 'Siehe',\n    modeViewTitle: 'Zur Baumansicht wechseln',\n    modePreviewText: 'Vorschau',\n    modePreviewTitle: 'In den Vorschau-Modus wechseln',\n    examples: 'Beispiele',\n    \"default\": 'Standardmäßig',\n    containsInvalidProperties: 'Enthält ungültige Eigenschaften',\n    containsInvalidItems: 'Enthält ungültige Elemente'\n  },\n  ru: {\n    array: 'Массив',\n    auto: 'Авто',\n    appendText: 'Добавить',\n    appendTitle: 'Добавить новое поле с типом \\'авто\\' после этого поля (Ctrl+Shift+Ins)',\n    appendSubmenuTitle: 'Выбрать тип поля для добавления',\n    appendTitleAuto: 'Добавить новое поле с типом \\'авто\\' (Ctrl+Shift+Ins)',\n    ascending: 'По возрастанию',\n    ascendingTitle: 'Сортировать ${type} по возрастанию',\n    actionsMenu: 'Нажмите для открытия меню действий (Ctrl+M)',\n    cannotParseFieldError: 'Невозможно преобразовать поле в JSON',\n    cannotParseValueError: 'Невозможно преобразовать значение в JSON',\n    collapseAll: 'Свернуть все',\n    compactTitle: 'Минификация JSON (Ctrl+Shift+I)',\n    descending: 'По убыванию',\n    descendingTitle: 'Сортировать ${type} по убыванию',\n    drag: 'Потяните для перемещения этого поля (Alt+Shift+Arrows)',\n    duplicateKey: 'повторяющийся ключ',\n    duplicateText: 'Дублировать',\n    duplicateTitle: 'Дублирование полей (Ctrl+D)',\n    duplicateField: 'Дублировать поле (Ctrl+D)',\n    duplicateFieldError: 'Дублирование названия поля',\n    empty: 'пустой',\n    expandAll: 'Развернуть все',\n    expandTitle: 'Нажмите для раскрытия/скрытия поля (Ctrl+E)\\n' + 'или Ctrl+Click для раскрытия/скрытия всех потомков.',\n    formatTitle: 'Форматирование JSON (Ctrl+I)',\n    insert: 'Вставить',\n    insertTitle: 'Вставить новое поле с типом \\'авто\\' перед этим полем (Ctrl+Ins)',\n    insertSub: 'Выбрать тип поля для вставки',\n    object: 'Объект',\n    ok: 'ОК',\n    redo: 'Повторить (Ctrl+Shift+Z)',\n    removeText: 'Удалить',\n    removeTitle: 'Удалить выбранные поля (Ctrl+Del)',\n    removeField: 'Удалить поле (Ctrl+Del)',\n    repairTitle: 'Восстановите JSON: исправьте кавычки и escape-символы, удалите комментарии и нотацию JSONP, модифицируйте объекты JavaScript в JSON.',\n    searchTitle: 'Поиск',\n    searchNextResultTitle: 'Следующий результат (Enter)',\n    searchPreviousResultTitle: 'Предыдущий результат (Shift + Enter)',\n    selectNode: 'Выбор узла...',\n    showAll: 'показать все',\n    showMore: 'больше',\n    showMoreStatus: '${visibleChilds} из ${totalChilds}',\n    sort: 'Сортировка',\n    sortTitle: 'Сортировка потомков типа ${type}',\n    sortTitleShort: 'Сортировка содержимого',\n    sortFieldLabel: 'Поле:',\n    sortDirectionLabel: 'Направление:',\n    sortFieldTitle: 'Выберите поле для сортировки массива или объекта',\n    sortAscending: 'По возрастанию',\n    sortAscendingTitle: 'Сортировка выбранного поря по возрастанию',\n    sortDescending: 'По убыванию',\n    sortDescendingTitle: 'Сортировка выбранного поря по убыванию',\n    string: 'Строка',\n    transform: 'Модификация',\n    transformTitle: 'Фильтрация, сортировка или модификация данных типа ${type}',\n    transformTitleShort: 'Фильтрация, сортировка или модификация данных',\n    extract: 'Извлечение',\n    extractTitle: 'Извлечь тип ${type}',\n    transformQueryTitle: 'Введите JMESpath запрос',\n    transformWizardLabel: 'Мастер',\n    transformWizardFilter: 'Фильтр',\n    transformWizardSortBy: 'Сортировка',\n    transformWizardSelectFields: 'Поля',\n    transformQueryLabel: 'Запрос',\n    transformPreviewLabel: 'Просмотр',\n    type: 'Тип',\n    typeTitle: 'Изменить тип этого поля',\n    openUrl: 'Ctrl+Click или Ctrl+Enter для открытия url в новом окне',\n    undo: 'Отменить (Ctrl+Z)',\n    validationCannotMove: 'Поле не может быть перемещено в потомка',\n    autoType: 'Тип поля автоматически определяется по значению ' + 'и может быть строкой, числом, логическим значением или null.',\n    objectType: 'Объект содержит неупорядоченный набор пар ключ/значение.',\n    arrayType: 'Массив содержит упорядоченный набор значений.',\n    stringType: 'Тип поля не определяется из значения, ' + 'но всегда возвращается как строка.',\n    modeEditorTitle: 'Переключение режима редактора',\n    modeCodeText: 'Код',\n    modeCodeTitle: 'Переключить в режим редактора кода',\n    modeFormText: 'Форма',\n    modeFormTitle: 'Переключить в режим формы',\n    modeTextText: 'Текст',\n    modeTextTitle: 'Переключить в режим редактора текста',\n    modeTreeText: 'Дерево',\n    modeTreeTitle: 'Переключить в режим редактора дерева',\n    modeViewText: 'Просмотр дерева',\n    modeViewTitle: 'Переключить в режим просмотра дерева',\n    modePreviewText: 'Просмотр',\n    modePreviewTitle: 'Переключить в режим просмотра',\n    examples: 'Примеры',\n    \"default\": 'По умолчанию',\n    containsInvalidProperties: 'Содержит недопустимые свойства',\n    containsInvalidItems: 'Содержит недопустимые элементы'\n  },\n  ko: {\n    array: '배열',\n    auto: '자동',\n    appendText: '추가',\n    appendTitle: '선택한 요소 아래에 \"자동\" 요소를 추가합니다. (Ctrl + Shift + Ins)',\n    appendSubmenuTitle: '추가할 요소의 유형을 선택해주세요.',\n    appendTitleAuto: '\"자동\" 요소를 추가합니다. (Ctrl + Shift + Ins)',\n    ascending: '오름차순',\n    ascendingTitle: '선택한 ${type}의 하위 요소를 오름차순 정렬합니다.',\n    actionsMenu: '메뉴 열기 (Ctrl + M)',\n    cannotParseFieldError: 'JSON의 요소를 해석할 수 없습니다.',\n    cannotParseValueError: 'JSON의 값을 해석할 수 없습니다.',\n    collapseAll: '모두 접기',\n    compactTitle: '모든 공백을 제거하여 JSON 데이터를 작게 만듭니다. (Ctrl + Shift + I)',\n    descending: '내림차순',\n    descendingTitle: '선택한 ${type}의 하위 요소를 내림차순으로 정렬',\n    drag: '드래그하여 요소를 이동합니다. (Alt + Shift + Arrows)',\n    duplicateKey: '복제키',\n    duplicateText: '복제',\n    duplicateTitle: '선택한 요소를 복제합니다. (Ctrl + D)',\n    duplicateField: '선택한 요소를 복제합니다. (Ctrl + D)',\n    duplicateFieldError: '요소 이름이 중복되었습니다.',\n    empty: '비어있음',\n    expandAll: '모두 열기',\n    expandTitle: '클릭하여 요소를 열거나 닫습니다. (Ctrl + E) \\nCtrl + Click으로 모든 하위 요소를 열거나 닫습니다.',\n    formatTitle: '적절한 들여쓰기 및 줄바꿈으로 JSON 데이터를 정형화합니다. (Ctrl + I)',\n    insert: '삽입',\n    insertTitle: '선택한 요소 위에 새요소를 삽입합니다. (Ctrl + Ins)',\n    insertSub: '삽입할 요소의 유형을 선택해주세요.',\n    object: '객체',\n    ok: '확인',\n    redo: '다시 실행 (Ctrl + Shift + Z)',\n    removeText: '삭제',\n    removeTitle: '선택한 요소를 삭제합니다. (Ctrl + Del)',\n    removeField: '선택한 요소를 삭제합니다. (Ctrl + Del)',\n    repairTitle: 'JSON 교정: JSON 내의 주석과 JSONP 표기법을 지우고 따옴표와 이스케이프 문자를 수정합니다.',\n    searchTitle: '요소 또는 값 찾기',\n    searchNextResultTitle: '다음으로 찾기 (Enter)',\n    searchPreviousResultTitle: '이전으로 찾기 (Shift + Enter)',\n    selectNode: '요소를 선택해주세요...',\n    showAll: '모두보기',\n    showMore: '더보기',\n    showMoreStatus: '${totalChilds} 개의 항목 중 ${visibleChilds} 개를 표시합니다.',\n    sort: '정렬',\n    sortTitle: '선택한 ${type}의 하위 요소를 정렬합니다.',\n    sortTitleShort: '정렬',\n    sortFieldLabel: '요소:',\n    sortDirectionLabel: '순서:',\n    sortFieldTitle: '배열이나 객체를 정렬하는 요소를 선택해주세요.',\n    sortAscending: '오름차순',\n    sortAscendingTitle: '선택한 요소를 오름차순으로 정렬합니다.',\n    sortDescending: '내림차순',\n    sortDescendingTitle: '선택한 요소를 내림차순으로 정렬합니다.',\n    string: '문자',\n    transform: '변환',\n    transformTitle: '선택한 ${type}의 하위 요소를 필터하거나 정렬 또는 변환합니다.',\n    transformTitleShort: '내용을 필터하거나 정렬 또는 변환합니다.',\n    extract: '추출',\n    extractTitle: '선택한 ${type}의 값을 최상위에 위치시킵니다.',\n    transformQueryTitle: 'JMESPath 쿼리를 입력해주세요.',\n    transformWizardLabel: '마법사',\n    transformWizardFilter: '필터',\n    transformWizardSortBy: '정렬',\n    transformWizardSelectFields: '요소를 선택해주세요.',\n    transformQueryLabel: '쿼리',\n    transformPreviewLabel: '미리보기',\n    type: '유형',\n    typeTitle: '선택한 요소의 유형을 변경합니다.',\n    openUrl: 'Ctrl + Click 또는 Ctrl + Enter로 새 창에서 URL 열기',\n    undo: '실행 취소 (Ctrl + Z)',\n    validationCannotMove: '하위 요소로 이동할 수 없습니다.',\n    autoType: '자동: 요소의 형식이 값의 유형으로 결정됩니다. 문자, 숫자, 부울, 또는 null만 허용됩니다.',\n    objectType: '객체: 순서대로 나열되지 않은 이름/값 쌍으로 이루어진 집합입니다.',\n    arrayType: '배열: 순서대로 나열된 값의 집합입니다.',\n    stringType: '문자: 요소의 유형이 값에서 결정되지 않지만 항상 문자로 반환됩니다.',\n    modeEditorTitle: '편집기 유형 변경',\n    modeCodeText: '코드',\n    modeCodeTitle: '형식 교정을 도와주는 기능이 포함된 문자 편집기',\n    modeFormText: '입력 양식',\n    modeFormTitle: '정해진 요소에 값을 입력하는 편집기',\n    modeTextText: '문자',\n    modeTextTitle: '단순 문자 편집기',\n    modeTreeText: '트리',\n    modeTreeTitle: '트리 구조로 표시되는 편집기',\n    modeViewText: '보기',\n    modeViewTitle: '읽기전용 트리 구조로 JSON을 표시',\n    modePreviewText: '미리보기',\n    modePreviewTitle: '읽기전용 문자로 JSON을 표시',\n    examples: '예제',\n    \"default\": '기본값',\n    containsInvalidProperties: '잘못된 속성이 포함되어 있습니다.',\n    containsInvalidItems: '잘못된 항목이 포함되어 있습니다'\n  }\n};\nvar _locales = Object.keys(_defs);\nvar _defaultLang = 'en';\nvar userLang = typeof navigator !== 'undefined' ? navigator.language || navigator.userLanguage : undefined;\nvar _lang = _locales.find(function (l) {\n  return l === userLang;\n}) || _defaultLang;\nfunction setLanguage(lang) {\n  if (!lang) {\n    return;\n  }\n  var langFound = _locales.find(function (l) {\n    return l === lang;\n  });\n  if (langFound) {\n    _lang = langFound;\n  } else {\n    console.error('Language not found');\n  }\n}\nfunction setLanguages(languages) {\n  if (!languages) {\n    return;\n  }\n  var _loop = function _loop(language) {\n    var langFound = _locales.find(function (l) {\n      return l === language;\n    });\n    if (!langFound) {\n      _locales.push(language);\n    }\n    _defs[language] = Object.assign({}, _defs[_defaultLang], _defs[language], languages[language]);\n  };\n  for (var language in languages) {\n    _loop(language);\n  }\n}\nfunction translate(key, data, lang) {\n  if (!lang) {\n    lang = _lang;\n  }\n  var text = _defs[lang][key] || _defs[_defaultLang][key] || key;\n  if (data) {\n    for (var dataKey in data) {\n      text = text.replace('${' + dataKey + '}', data[dataKey]);\n    }\n  }\n  return text;\n}\n\n/***/ }),\n\n/***/ 359:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   V: function() { return /* binding */ createQuery; },\n/* harmony export */   e: function() { return /* binding */ executeQuery; }\n/* harmony export */ });\n/* harmony import */ var jmespath__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9151);\n/* harmony import */ var jmespath__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jmespath__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6237);\n\n\n\n/**\n * Build a JMESPath query based on query options coming from the wizard\n * @param {JSON} json   The JSON document for which to build the query.\n *                      Used for context information like determining\n *                      the type of values (string or number)\n * @param {QueryOptions} queryOptions\n * @return {string} Returns a query (as string)\n */\nfunction createQuery(json, queryOptions) {\n  var sort = queryOptions.sort,\n    filter = queryOptions.filter,\n    projection = queryOptions.projection;\n  var query = '';\n  if (filter) {\n    var examplePath = filter.field !== '@' ? ['0'].concat((0,_util__WEBPACK_IMPORTED_MODULE_1__.parsePath)('.' + filter.field)) : ['0'];\n    var exampleValue = (0,_util__WEBPACK_IMPORTED_MODULE_1__.get)(json, examplePath);\n    var value1 = typeof exampleValue === 'string' ? filter.value : (0,_util__WEBPACK_IMPORTED_MODULE_1__.parseString)(filter.value);\n    query += '[? ' + filter.field + ' ' + filter.relation + ' ' + '`' + JSON.stringify(value1) + '`' + ']';\n  } else {\n    query += Array.isArray(json) ? '[*]' : '@';\n  }\n  if (sort) {\n    if (sort.direction === 'desc') {\n      query += ' | reverse(sort_by(@, &' + sort.field + '))';\n    } else {\n      query += ' | sort_by(@, &' + sort.field + ')';\n    }\n  }\n  if (projection) {\n    if (query[query.length - 1] !== ']') {\n      query += ' | [*]';\n    }\n    if (projection.fields.length === 1) {\n      query += '.' + projection.fields[0];\n    } else if (projection.fields.length > 1) {\n      query += '.{' + projection.fields.map(function (value) {\n        var parts = value.split('.');\n        var last = parts[parts.length - 1];\n        return last + ': ' + value;\n      }).join(', ') + '}';\n    } else {// values.length === 0\n      // ignore\n    }\n  }\n  return query;\n}\n\n/**\n * Execute a JMESPath query\n * @param {JSON} json\n * @param {string} query\n * @return {JSON} Returns the transformed JSON\n */\nfunction executeQuery(json, query) {\n  return jmespath__WEBPACK_IMPORTED_MODULE_0___default().search(json, query);\n}\n\n/***/ }),\n\n/***/ 1081:\n/***/ (function() {\n\nif (typeof Element !== 'undefined') {\n  // Polyfill for array remove\n  (function () {\n    function polyfill(item) {\n      if (typeof item !== 'undefined') {\n        if ('remove' in item) {\n          return;\n        }\n        Object.defineProperty(item, 'remove', {\n          configurable: true,\n          enumerable: true,\n          writable: true,\n          value: function remove() {\n            if (this.parentNode !== undefined) {\n              this.parentNode.removeChild(this);\n            }\n          }\n        });\n      }\n    }\n    if (typeof window.Element !== 'undefined') {\n      polyfill(window.Element.prototype);\n    }\n    if (typeof window.CharacterData !== 'undefined') {\n      polyfill(window.CharacterData.prototype);\n    }\n    if (typeof window.DocumentType !== 'undefined') {\n      polyfill(window.DocumentType.prototype);\n    }\n  })();\n}\n\n// simple polyfill for Array.findIndex\nif (!Array.prototype.findIndex) {\n  // eslint-disable-next-line no-extend-native\n  Object.defineProperty(Array.prototype, 'findIndex', {\n    value: function value(predicate) {\n      for (var i = 0; i < this.length; i++) {\n        var element = this[i];\n        if (predicate.call(this, element, i, this)) {\n          return i;\n        }\n      }\n      return -1;\n    },\n    configurable: true,\n    writable: true\n  });\n}\n\n// Polyfill for Array.find\nif (!Array.prototype.find) {\n  // eslint-disable-next-line no-extend-native\n  Object.defineProperty(Array.prototype, 'find', {\n    value: function value(predicate) {\n      var i = this.findIndex(predicate);\n      return this[i];\n    },\n    configurable: true,\n    writable: true\n  });\n}\n\n// Polyfill for String.trim\nif (!String.prototype.trim) {\n  // eslint-disable-next-line no-extend-native\n  String.prototype.trim = function () {\n    return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n  };\n}\n\n/***/ }),\n\n/***/ 7483:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  previewModeMixins: function() { return /* binding */ previewModeMixins; }\n});\n\n// EXTERNAL MODULE: ./node_modules/jsonrepair/lib/esm/regular/jsonrepair.js + 2 modules\nvar jsonrepair = __webpack_require__(9857);\n// EXTERNAL MODULE: ./src/js/constants.js\nvar constants = __webpack_require__(660);\n// EXTERNAL MODULE: ./src/js/ErrorTable.js\nvar ErrorTable = __webpack_require__(2115);\n// EXTERNAL MODULE: ./src/js/FocusTracker.js\nvar FocusTracker = __webpack_require__(2877);\n;// ./src/js/History.js\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * Keep track on any history, be able\n * @param {function} onChange\n * @param {function} calculateItemSize\n * @param {number} limit    Maximum size of all items in history\n * @constructor\n */\nvar History = /*#__PURE__*/function () {\n  function History(onChange, calculateItemSize, limit) {\n    _classCallCheck(this, History);\n    this.onChange = onChange;\n    this.calculateItemSize = calculateItemSize || function () {\n      return 1;\n    };\n    this.limit = limit;\n    this.items = [];\n    this.index = -1;\n  }\n  return _createClass(History, [{\n    key: \"add\",\n    value: function add(item) {\n      // limit number of items in history so that the total size doesn't\n      // always keep at least one item in memory\n      while (this._calculateHistorySize() > this.limit && this.items.length > 1) {\n        this.items.shift();\n        this.index--;\n      }\n\n      // cleanup any redo action that are not valid anymore\n      this.items = this.items.slice(0, this.index + 1);\n      this.items.push(item);\n      this.index++;\n      this.onChange();\n    }\n  }, {\n    key: \"_calculateHistorySize\",\n    value: function _calculateHistorySize() {\n      var calculateItemSize = this.calculateItemSize;\n      var totalSize = 0;\n      this.items.forEach(function (item) {\n        totalSize += calculateItemSize(item);\n      });\n      return totalSize;\n    }\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      if (!this.canUndo()) {\n        return;\n      }\n      this.index--;\n      this.onChange();\n      return this.items[this.index];\n    }\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      if (!this.canRedo()) {\n        return;\n      }\n      this.index++;\n      this.onChange();\n      return this.items[this.index];\n    }\n  }, {\n    key: \"canUndo\",\n    value: function canUndo() {\n      return this.index > 0;\n    }\n  }, {\n    key: \"canRedo\",\n    value: function canRedo() {\n      return this.index < this.items.length - 1;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.items = [];\n      this.index = -1;\n      this.onChange();\n    }\n  }]);\n}();\n// EXTERNAL MODULE: ./src/js/i18n.js\nvar i18n = __webpack_require__(3057);\n// EXTERNAL MODULE: ./src/js/jmespathQuery.js\nvar jmespathQuery = __webpack_require__(359);\n// EXTERNAL MODULE: ./src/js/ModeSwitcher.js\nvar ModeSwitcher = __webpack_require__(1389);\n// EXTERNAL MODULE: ./src/js/showSortModal.js\nvar showSortModal = __webpack_require__(2915);\n// EXTERNAL MODULE: ./src/js/showTransformModal.js + 1 modules\nvar showTransformModal = __webpack_require__(5609);\n// EXTERNAL MODULE: ./src/js/textmode.js + 2 modules\nvar textmode = __webpack_require__(1948);\n// EXTERNAL MODULE: ./src/js/util.js\nvar util = __webpack_require__(6237);\n;// ./src/js/previewmode.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar previewmode_textmode = textmode.textModeMixins[0].mixin;\n\n// create a mixin with the functions for text mode\nvar previewmode = {};\n\n/**\n * Create a JSON document preview, suitable for processing of large documents\n * @param {Element} container\n * @param {Object} [options]   Object with options. See docs for details.\n * @private\n */\npreviewmode.create = function (container) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  if (typeof options.statusBar === 'undefined') {\n    options.statusBar = true;\n  }\n\n  // setting default for previewmode\n  options.mainMenuBar = options.mainMenuBar !== false;\n  options.enableSort = options.enableSort !== false;\n  options.enableTransform = options.enableTransform !== false;\n  options.createQuery = options.createQuery || jmespathQuery/* createQuery */.V;\n  options.executeQuery = options.executeQuery || jmespathQuery/* executeQuery */.e;\n  this.options = options;\n\n  // indentation\n  if (typeof options.indentation === 'number') {\n    this.indentation = Number(options.indentation);\n  } else {\n    this.indentation = 2; // number of spaces\n  }\n\n  // language\n  (0,i18n/* setLanguages */.AI)(this.options.languages);\n  (0,i18n/* setLanguage */.xC)(this.options.language);\n\n  // determine mode\n  this.mode = 'preview';\n  var me = this;\n  this.container = container;\n  this.dom = {};\n  this.json = undefined;\n  this.text = '';\n\n  // TODO: JSON Schema support\n\n  // create a debounced validate function\n  this._debouncedValidate = (0,util.debounce)(this.validate.bind(this), this.DEBOUNCE_INTERVAL);\n  this.width = container.clientWidth;\n  this.height = container.clientHeight;\n  this.frame = document.createElement('div');\n  this.frame.className = 'jsoneditor jsoneditor-mode-preview';\n  this.frame.onclick = function (event) {\n    // prevent default submit action when the editor is located inside a form\n    event.preventDefault();\n  };\n\n  // setting the FocusTracker on 'this.frame' to track the editor's focus event\n  var focusTrackerConfig = {\n    target: this.frame,\n    onFocus: this.options.onFocus || null,\n    onBlur: this.options.onBlur || null\n  };\n  this.frameFocusTracker = new FocusTracker/* FocusTracker */.$(focusTrackerConfig);\n  this.content = document.createElement('div');\n  this.content.className = 'jsoneditor-outer';\n  this.dom.busy = document.createElement('div');\n  this.dom.busy.className = 'jsoneditor-busy';\n  this.dom.busyContent = document.createElement('span');\n  this.dom.busyContent.textContent = 'busy...';\n  this.dom.busy.appendChild(this.dom.busyContent);\n  this.content.appendChild(this.dom.busy);\n  this.dom.previewContent = document.createElement('pre');\n  this.dom.previewContent.className = 'jsoneditor-preview';\n  this.dom.previewText = document.createTextNode('');\n  this.dom.previewContent.appendChild(this.dom.previewText);\n  this.content.appendChild(this.dom.previewContent);\n  if (this.options.mainMenuBar) {\n    (0,util.addClassName)(this.content, 'has-main-menu-bar');\n\n    // create menu\n    this.menu = document.createElement('div');\n    this.menu.className = 'jsoneditor-menu';\n    this.frame.appendChild(this.menu);\n\n    // create format button\n    var buttonFormat = document.createElement('button');\n    buttonFormat.type = 'button';\n    buttonFormat.className = 'jsoneditor-format';\n    buttonFormat.title = (0,i18n/* translate */.Tl)('formatTitle');\n    this.menu.appendChild(buttonFormat);\n    buttonFormat.onclick = function handleFormat() {\n      me.executeWithBusyMessage(function () {\n        try {\n          me.format();\n        } catch (err) {\n          me._onError(err);\n        }\n      }, 'formatting...');\n    };\n\n    // create compact button\n    var buttonCompact = document.createElement('button');\n    buttonCompact.type = 'button';\n    buttonCompact.className = 'jsoneditor-compact';\n    buttonCompact.title = (0,i18n/* translate */.Tl)('compactTitle');\n    this.menu.appendChild(buttonCompact);\n    buttonCompact.onclick = function handleCompact() {\n      me.executeWithBusyMessage(function () {\n        try {\n          me.compact();\n        } catch (err) {\n          me._onError(err);\n        }\n      }, 'compacting...');\n    };\n\n    // create sort button\n    if (this.options.enableSort) {\n      var _sort = document.createElement('button');\n      _sort.type = 'button';\n      _sort.className = 'jsoneditor-sort';\n      _sort.title = (0,i18n/* translate */.Tl)('sortTitleShort');\n      _sort.onclick = function () {\n        me._showSortModal();\n      };\n      this.menu.appendChild(_sort);\n    }\n\n    // create transform button\n    if (this.options.enableTransform) {\n      var transform = document.createElement('button');\n      transform.type = 'button';\n      transform.title = (0,i18n/* translate */.Tl)('transformTitleShort');\n      transform.className = 'jsoneditor-transform';\n      transform.onclick = function () {\n        me._showTransformModal();\n      };\n      this.dom.transform = transform;\n      this.menu.appendChild(transform);\n    }\n\n    // create repair button\n    var buttonRepair = document.createElement('button');\n    buttonRepair.type = 'button';\n    buttonRepair.className = 'jsoneditor-repair';\n    buttonRepair.title = (0,i18n/* translate */.Tl)('repairTitle');\n    this.menu.appendChild(buttonRepair);\n    buttonRepair.onclick = function () {\n      if (me.json === undefined) {\n        // only repair if we don't have valid JSON\n        me.executeWithBusyMessage(function () {\n          try {\n            me.repair();\n          } catch (err) {\n            me._onError(err);\n          }\n        }, 'repairing...');\n      }\n    };\n\n    // create history and undo/redo buttons\n    if (this.options.history !== false) {\n      // default option value is true\n      var onHistoryChange = function onHistoryChange() {\n        me.dom.undo.disabled = !me.history.canUndo();\n        me.dom.redo.disabled = !me.history.canRedo();\n      };\n      var calculateItemSize = function calculateItemSize(item) {\n        return (\n          // times two to account for the json object\n          item.text.length * 2\n        );\n      };\n      this.history = new History(onHistoryChange, calculateItemSize, constants/* PREVIEW_HISTORY_LIMIT */.SC);\n\n      // create undo button\n      var undo = document.createElement('button');\n      undo.type = 'button';\n      undo.className = 'jsoneditor-undo jsoneditor-separator';\n      undo.title = (0,i18n/* translate */.Tl)('undo');\n      undo.onclick = function () {\n        var action = me.history.undo();\n        if (action) {\n          me._applyHistory(action);\n        }\n      };\n      this.menu.appendChild(undo);\n      this.dom.undo = undo;\n\n      // create redo button\n      var redo = document.createElement('button');\n      redo.type = 'button';\n      redo.className = 'jsoneditor-redo';\n      redo.title = (0,i18n/* translate */.Tl)('redo');\n      redo.onclick = function () {\n        var action = me.history.redo();\n        if (action) {\n          me._applyHistory(action);\n        }\n      };\n      this.menu.appendChild(redo);\n      this.dom.redo = redo;\n\n      // force enabling/disabling the undo/redo button\n      this.history.onChange();\n    }\n\n    // create mode box\n    if (this.options && this.options.modes && this.options.modes.length) {\n      this.modeSwitcher = new ModeSwitcher/* ModeSwitcher */.n(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {\n        // switch mode and restore focus\n        try {\n          me.setMode(mode);\n          me.modeSwitcher.focus();\n        } catch (err) {\n          me._onError(err);\n        }\n      });\n    }\n  }\n  var errorTableVisible = Array.isArray(this.options.showErrorTable) ? this.options.showErrorTable.includes(this.mode) : this.options.showErrorTable === true;\n  this.errorTable = new ErrorTable/* ErrorTable */.N({\n    errorTableVisible: errorTableVisible,\n    onToggleVisibility: function onToggleVisibility() {\n      me.validate();\n    },\n    onFocusLine: null,\n    onChangeHeight: function onChangeHeight(height) {\n      // TODO: change CSS to using flex box, remove setting height using JavaScript\n      var statusBarHeight = me.dom.statusBar ? me.dom.statusBar.clientHeight : 0;\n      var totalHeight = height + statusBarHeight + 1;\n      me.content.style.marginBottom = -totalHeight + 'px';\n      me.content.style.paddingBottom = totalHeight + 'px';\n    }\n  });\n  this.frame.appendChild(this.content);\n  this.frame.appendChild(this.errorTable.getErrorTable());\n  this.container.appendChild(this.frame);\n  if (options.statusBar) {\n    (0,util.addClassName)(this.content, 'has-status-bar');\n    var statusBar = document.createElement('div');\n    this.dom.statusBar = statusBar;\n    statusBar.className = 'jsoneditor-statusbar';\n    this.frame.appendChild(statusBar);\n    this.dom.fileSizeInfo = document.createElement('span');\n    this.dom.fileSizeInfo.className = 'jsoneditor-size-info';\n    this.dom.fileSizeInfo.innerText = '';\n    statusBar.appendChild(this.dom.fileSizeInfo);\n    this.dom.arrayInfo = document.createElement('span');\n    this.dom.arrayInfo.className = 'jsoneditor-size-info';\n    this.dom.arrayInfo.innerText = '';\n    statusBar.appendChild(this.dom.arrayInfo);\n    statusBar.appendChild(this.errorTable.getErrorCounter());\n    statusBar.appendChild(this.errorTable.getWarningIcon());\n    statusBar.appendChild(this.errorTable.getErrorIcon());\n  }\n  this._renderPreview();\n  this.setSchema(this.options.schema, this.options.schemaRefs);\n};\npreviewmode._renderPreview = function () {\n  var text = this.getText();\n  this.dom.previewText.nodeValue = (0,util.limitCharacters)(text, constants/* MAX_PREVIEW_CHARACTERS */.hJ);\n  if (this.dom.fileSizeInfo) {\n    this.dom.fileSizeInfo.innerText = 'Size: ' + (0,util.formatSize)(text.length);\n  }\n  if (this.dom.arrayInfo) {\n    if (Array.isArray(this.json)) {\n      this.dom.arrayInfo.innerText = 'Array: ' + this.json.length + ' items';\n    } else {\n      this.dom.arrayInfo.innerText = '';\n    }\n  }\n};\n\n/**\n * Handle a change:\n * - Validate JSON schema\n * - Send a callback to the onChange listener if provided\n * @private\n */\npreviewmode._onChange = function () {\n  // validate JSON schema (if configured)\n  this._debouncedValidate();\n\n  // trigger the onChange callback\n  if (this.options.onChange) {\n    try {\n      this.options.onChange();\n    } catch (err) {\n      console.error('Error in onChange callback: ', err);\n    }\n  }\n\n  // trigger the onChangeJSON callback\n  if (this.options.onChangeJSON) {\n    try {\n      this.options.onChangeJSON(this.get());\n    } catch (err) {\n      console.error('Error in onChangeJSON callback: ', err);\n    }\n  }\n\n  // trigger the onChangeText callback\n  if (this.options.onChangeText) {\n    try {\n      this.options.onChangeText(this.getText());\n    } catch (err) {\n      console.error('Error in onChangeText callback: ', err);\n    }\n  }\n};\n\n/**\n * Open a sort modal\n * @private\n */\npreviewmode._showSortModal = function () {\n  var me = this;\n  function onSort(json, sortedBy) {\n    if (Array.isArray(json)) {\n      var sortedArray = (0,util.sort)(json, sortedBy.path, sortedBy.direction);\n      me.sortedBy = sortedBy;\n      me._setAndFireOnChange(sortedArray);\n    }\n    if ((0,util.isObject)(json)) {\n      var sortedObject = (0,util.sortObjectKeys)(json, sortedBy.direction);\n      me.sortedBy = sortedBy;\n      me._setAndFireOnChange(sortedObject);\n    }\n  }\n  this.executeWithBusyMessage(function () {\n    var container = me.options.modalAnchor || constants/* DEFAULT_MODAL_ANCHOR */.ai;\n    var json = me.get();\n    me._renderPreview(); // update array count\n\n    (0,showSortModal.showSortModal)(container, json, function (sortedBy) {\n      me.executeWithBusyMessage(function () {\n        onSort(json, sortedBy);\n      }, 'sorting...');\n    }, me.sortedBy);\n  }, 'parsing...');\n};\n\n/**\n * Open a transform modal\n * @private\n */\npreviewmode._showTransformModal = function () {\n  var _this = this;\n  this.executeWithBusyMessage(function () {\n    var _this$options = _this.options,\n      createQuery = _this$options.createQuery,\n      executeQuery = _this$options.executeQuery,\n      modalAnchor = _this$options.modalAnchor,\n      queryDescription = _this$options.queryDescription;\n    var json = _this.get();\n    _this._renderPreview(); // update array count\n\n    (0,showTransformModal.showTransformModal)({\n      container: modalAnchor || constants/* DEFAULT_MODAL_ANCHOR */.ai,\n      json: json,\n      queryDescription: queryDescription,\n      // can be undefined\n      createQuery: createQuery,\n      executeQuery: executeQuery,\n      onTransform: function onTransform(query) {\n        _this.executeWithBusyMessage(function () {\n          var updatedJson = executeQuery(json, query);\n          _this._setAndFireOnChange(updatedJson);\n        }, 'transforming...');\n      }\n    });\n  }, 'parsing...');\n};\n\n/**\n * Destroy the editor. Clean up DOM, event listeners, and web workers.\n */\npreviewmode.destroy = function () {\n  if (this.frame && this.container && this.frame.parentNode === this.container) {\n    this.container.removeChild(this.frame);\n  }\n  if (this.modeSwitcher) {\n    this.modeSwitcher.destroy();\n    this.modeSwitcher = null;\n  }\n  this._debouncedValidate = null;\n  if (this.history) {\n    this.history.clear();\n    this.history = null;\n  }\n\n  // Removing the FocusTracker set to track the editor's focus event\n  this.frameFocusTracker.destroy();\n};\n\n/**\n * Compact the code in the text editor\n */\npreviewmode.compact = function () {\n  var json = this.get();\n  var text = JSON.stringify(json);\n\n  // we know that in this case the json is still the same, so we pass json too\n  this._setTextAndFireOnChange(text, json);\n};\n\n/**\n * Format the code in the text editor\n */\npreviewmode.format = function () {\n  var json = this.get();\n  var text = JSON.stringify(json, null, this.indentation);\n\n  // we know that in this case the json is still the same, so we pass json too\n  this._setTextAndFireOnChange(text, json);\n};\n\n/**\n * Repair the code in the text editor\n */\npreviewmode.repair = function () {\n  var text = this.getText();\n  try {\n    var repairedText = (0,jsonrepair/* jsonrepair */.m)(text);\n    this._setTextAndFireOnChange(repairedText);\n  } catch (err) {\n    // repair was not successful, do nothing\n  }\n};\n\n/**\n * Set focus to the editor\n */\npreviewmode.focus = function () {\n  // we don't really have a place to focus,\n  // let's focus on the transform button\n  this.dom.transform.focus();\n};\n\n/**\n * Set json data in the editor\n * @param {*} json\n */\npreviewmode.set = function (json) {\n  if (this.history) {\n    this.history.clear();\n  }\n  this._set(json);\n};\n\n/**\n * Update data. Same as calling `set` in text/code mode.\n * @param {*} json\n */\npreviewmode.update = function (json) {\n  this._set(json);\n};\n\n/**\n * Set json data\n * @param {*} json\n */\npreviewmode._set = function (json) {\n  this.text = undefined;\n  this.json = json;\n  this._renderPreview();\n  this._pushHistory();\n\n  // validate JSON schema\n  this._debouncedValidate();\n};\npreviewmode._setAndFireOnChange = function (json) {\n  this._set(json);\n  this._onChange();\n};\n\n/**\n * Get json data\n * @return {*} json\n */\npreviewmode.get = function () {\n  if (this.json === undefined) {\n    var text = this.getText();\n    this.json = (0,util.parse)(text); // this can throw an error\n  }\n  return this.json;\n};\n\n/**\n * Get the text contents of the editor\n * @return {String} jsonText\n */\npreviewmode.getText = function () {\n  if (this.text === undefined) {\n    this.text = JSON.stringify(this.json, null, this.indentation);\n    if (this.options.escapeUnicode === true) {\n      this.text = (0,util.escapeUnicodeChars)(this.text);\n    }\n  }\n  return this.text;\n};\n\n/**\n * Set the text contents of the editor\n * @param {String} jsonText\n */\npreviewmode.setText = function (jsonText) {\n  if (this.history) {\n    this.history.clear();\n  }\n  this._setText(jsonText);\n};\n\n/**\n * Update the text contents\n * @param {string} jsonText\n */\npreviewmode.updateText = function (jsonText) {\n  // don't update if there are no changes\n  if (this.getText() === jsonText) {\n    return;\n  }\n  this._setText(jsonText);\n};\n\n/**\n * Set the text contents of the editor\n * @param {string} jsonText\n * @param {*} [json] Optional JSON instance of the text\n * @private\n */\npreviewmode._setText = function (jsonText, json) {\n  if (this.options.escapeUnicode === true) {\n    this.text = (0,util.escapeUnicodeChars)(jsonText);\n  } else {\n    this.text = jsonText;\n  }\n  this.json = json;\n  this._renderPreview();\n  if (this.json === undefined) {\n    var me = this;\n    this.executeWithBusyMessage(function () {\n      try {\n        // force parsing the json now, else it will be done in validate without feedback\n        me.json = me.get();\n        me._renderPreview();\n        me._pushHistory();\n      } catch (err) {\n        // no need to throw an error, validation will show an error\n      }\n    }, 'parsing...');\n  } else {\n    this._pushHistory();\n  }\n  this._debouncedValidate();\n};\n\n/**\n * Set text and fire onChange callback\n * @param {string} jsonText\n * @param {*} [json] Optional JSON instance of the text\n * @private\n */\npreviewmode._setTextAndFireOnChange = function (jsonText, json) {\n  this._setText(jsonText, json);\n  this._onChange();\n};\n\n/**\n * Apply history to the current state\n * @param {{json?: JSON, text?: string}} action\n * @private\n */\npreviewmode._applyHistory = function (action) {\n  this.json = action.json;\n  this.text = action.text;\n  this._renderPreview();\n  this._debouncedValidate();\n};\n\n/**\n * Push the current state to history\n * @private\n */\npreviewmode._pushHistory = function () {\n  if (!this.history) {\n    return;\n  }\n  var action = {\n    text: this.text,\n    json: this.json\n  };\n  this.history.add(action);\n};\n\n/**\n * Execute a heavy, blocking action.\n * Before starting the action, show a message on screen like \"parsing...\"\n * @param {function} fn\n * @param {string} message\n */\npreviewmode.executeWithBusyMessage = function (fn, message) {\n  var size = this.getText().length;\n  if (size > constants/* SIZE_LARGE */.Oq) {\n    var me = this;\n    (0,util.addClassName)(me.frame, 'busy');\n    me.dom.busyContent.innerText = message;\n    setTimeout(function () {\n      fn();\n      (0,util.removeClassName)(me.frame, 'busy');\n      me.dom.busyContent.innerText = '';\n    }, 100);\n  } else {\n    fn();\n  }\n};\n\n// TODO: refactor into composable functions instead of this shaky mixin-like structure\npreviewmode.validate = previewmode_textmode.validate;\npreviewmode._renderErrors = previewmode_textmode._renderErrors;\n\n// define modes\nvar previewModeMixins = [{\n  mode: 'preview',\n  mixin: previewmode,\n  data: 'json'\n}];\n\n/***/ }),\n\n/***/ 2915:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   showSortModal: function() { return /* binding */ showSortModal; }\n/* harmony export */ });\n/* harmony import */ var picomodal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8340);\n/* harmony import */ var picomodal__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(picomodal__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3057);\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6237);\n\n\n\n\n/**\n * Show advanced sorting modal\n * @param {HTMLElement} container   The container where to center\n *                                  the modal and create an overlay\n * @param {JSON} json               The JSON data to be sorted.\n * @param {function} onSort         Callback function, invoked with\n *                                  an object containing the selected\n *                                  path and direction\n * @param {Object} options\n *            Available options:\n *                - {string} path              The selected path\n *                - {'asc' | 'desc'} direction The selected direction\n */\nfunction showSortModal(container, json, onSort, options) {\n  var paths = Array.isArray(json) ? (0,_util__WEBPACK_IMPORTED_MODULE_2__.getChildPaths)(json) : [''];\n  var selectedPath = options && options.path && (0,_util__WEBPACK_IMPORTED_MODULE_2__.contains)(paths, options.path) ? options.path : paths[0];\n  var selectedDirection = options && options.direction || 'asc';\n  var content = '<div class=\"pico-modal-contents\">' + '<div class=\"pico-modal-header\">' + (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('sort') + '</div>' + '<form>' + '<table>' + '<tbody>' + '<tr>' + '  <td>' + (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('sortFieldLabel') + ' </td>' + '  <td class=\"jsoneditor-modal-input\">' + '  <div class=\"jsoneditor-select-wrapper\">' + '    <select id=\"field\" title=\"' + (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('sortFieldTitle') + '\">' + '    </select>' + '  </div>' + '  </td>' + '</tr>' + '<tr>' + '  <td>' + (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('sortDirectionLabel') + ' </td>' + '  <td class=\"jsoneditor-modal-input\">' + '  <div id=\"direction\" class=\"jsoneditor-button-group\">' + '<input type=\"button\" ' + 'value=\"' + (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('sortAscending') + '\" ' + 'title=\"' + (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('sortAscendingTitle') + '\" ' + 'data-value=\"asc\" ' + 'class=\"jsoneditor-button-first jsoneditor-button-asc\"/>' + '<input type=\"button\" ' + 'value=\"' + (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('sortDescending') + '\" ' + 'title=\"' + (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('sortDescendingTitle') + '\" ' + 'data-value=\"desc\" ' + 'class=\"jsoneditor-button-last jsoneditor-button-desc\"/>' + '  </div>' + '  </td>' + '</tr>' + '<tr>' + '<td colspan=\"2\" class=\"jsoneditor-modal-input jsoneditor-modal-actions\">' + '  <input type=\"submit\" id=\"ok\" value=\"' + (0,_i18n__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .Tl)('ok') + '\" />' + '</td>' + '</tr>' + '</tbody>' + '</table>' + '</form>' + '</div>';\n  picomodal__WEBPACK_IMPORTED_MODULE_0___default()({\n    parent: container,\n    content: content,\n    overlayClass: 'jsoneditor-modal-overlay',\n    overlayStyles: {\n      backgroundColor: 'rgb(1,1,1)',\n      opacity: 0.3\n    },\n    modalClass: 'jsoneditor-modal jsoneditor-modal-sort'\n  }).afterCreate(function (modal) {\n    var form = modal.modalElem().querySelector('form');\n    var ok = modal.modalElem().querySelector('#ok');\n    var field = modal.modalElem().querySelector('#field');\n    var direction = modal.modalElem().querySelector('#direction');\n    function preprocessPath(path) {\n      return path === '' ? '@' : path[0] === '.' ? path.slice(1) : path;\n    }\n    paths.forEach(function (path) {\n      var option = document.createElement('option');\n      option.text = preprocessPath(path);\n      option.value = path;\n      field.appendChild(option);\n    });\n    function setDirection(value) {\n      direction.value = value;\n      direction.className = 'jsoneditor-button-group jsoneditor-button-group-value-' + direction.value;\n    }\n    field.value = selectedPath || paths[0];\n    setDirection(selectedDirection || 'asc');\n    direction.onclick = function (event) {\n      setDirection(event.target.getAttribute('data-value'));\n    };\n    ok.onclick = function (event) {\n      event.preventDefault();\n      event.stopPropagation();\n      modal.close();\n      onSort({\n        path: field.value,\n        direction: direction.value\n      });\n    };\n    if (form) {\n      // form is not available when JSONEditor is created inside a form\n      form.onsubmit = ok.onclick;\n    }\n  }).afterClose(function (modal) {\n    modal.destroy();\n  }).show();\n}\n\n/***/ }),\n\n/***/ 5609:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  showTransformModal: function() { return /* binding */ showTransformModal; }\n});\n\n// EXTERNAL MODULE: ./node_modules/picomodal/src/picoModal.js\nvar picoModal = __webpack_require__(8340);\nvar picoModal_default = /*#__PURE__*/__webpack_require__.n(picoModal);\n// EXTERNAL MODULE: ./src/js/assets/selectr/selectr.js\nvar selectr = __webpack_require__(4772);\nvar selectr_default = /*#__PURE__*/__webpack_require__.n(selectr);\n// EXTERNAL MODULE: ./src/js/i18n.js\nvar i18n = __webpack_require__(3057);\n;// ./src/js/jsonUtils.js\n\n\n/**\n * Convert part of a JSON object to a JSON string.\n * Use case is to stringify a small part of a large JSON object so you can see\n * a preview.\n *\n * @param {*} value\n * The value to convert to a JSON string.\n *\n * @param {number | string | null} [space]\n * A String or Number object that's used to insert white space into the output\n * JSON string for readability purposes. If this is a Number, it indicates the\n * number of space characters to use as white space; this number is capped at 10\n * if it's larger than that. Values less than 1 indicate that no space should be\n * used. If this is a String, the string (or the first 10 characters of the string,\n * if it's longer than that) is used as white space. If this parameter is not\n * provided (or is null), no white space is used.\n *\n * @param {number} [limit] Maximum size of the string output.\n *\n * @returns {string | undefined} Returns the string representation of the JSON object.\n */\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction stringifyPartial(value, space, limit) {\n  var _space; // undefined by default\n  if (typeof space === 'number') {\n    if (space > 10) {\n      _space = repeat(' ', 10);\n    } else if (space >= 1) {\n      _space = repeat(' ', space);\n    }\n    // else ignore\n  } else if (typeof space === 'string' && space !== '') {\n    _space = space;\n  }\n  var output = stringifyValue(value, _space, '', limit);\n  return output.length > limit ? slice(output, limit) + '...' : output;\n}\n\n/**\n * Stringify a value\n * @param {*} value\n * @param {string} space\n * @param {string} indent\n * @param {number} limit\n * @return {string | undefined}\n */\nfunction stringifyValue(value, space, indent, limit) {\n  // boolean, null, number, string, or date\n  if (typeof value === 'boolean' || value instanceof Boolean || value === null || typeof value === 'number' || value instanceof Number || typeof value === 'string' || value instanceof String || value instanceof Date) {\n    return JSON.stringify(value);\n  }\n\n  // array\n  if (Array.isArray(value)) {\n    return stringifyArray(value, space, indent, limit);\n  }\n\n  // object (test lastly!)\n  if (value && _typeof(value) === 'object') {\n    return stringifyObject(value, space, indent, limit);\n  }\n  return undefined;\n}\n\n/**\n * Stringify an array\n * @param {Array} array\n * @param {string} space\n * @param {string} indent\n * @param {number} limit\n * @return {string}\n */\nfunction stringifyArray(array, space, indent, limit) {\n  var childIndent = space ? indent + space : undefined;\n  var str = space ? '[\\n' : '[';\n  for (var i = 0; i < array.length; i++) {\n    var item = array[i];\n    if (space) {\n      str += childIndent;\n    }\n    if (typeof item !== 'undefined' && typeof item !== 'function') {\n      str += stringifyValue(item, space, childIndent, limit);\n    } else {\n      str += 'null';\n    }\n    if (i < array.length - 1) {\n      str += space ? ',\\n' : ',';\n    }\n\n    // stop as soon as we're exceeding the limit\n    if (str.length > limit) {\n      return str + '...';\n    }\n  }\n  str += space ? '\\n' + indent + ']' : ']';\n  return str;\n}\n\n/**\n * Stringify an object\n * @param {Object} object\n * @param {string} space\n * @param {string} indent\n * @param {number} limit\n * @return {string}\n */\nfunction stringifyObject(object, space, indent, limit) {\n  var childIndent = space ? indent + space : undefined;\n  var first = true;\n  var str = space ? '{\\n' : '{';\n  if (typeof object.toJSON === 'function') {\n    return stringifyValue(object.toJSON(), space, indent, limit);\n  }\n  for (var key in object) {\n    if (jsonUtils_hasOwnProperty(object, key)) {\n      var value = object[key];\n      if (first) {\n        first = false;\n      } else {\n        str += space ? ',\\n' : ',';\n      }\n      str += space ? childIndent + '\"' + key + '\": ' : '\"' + key + '\":';\n      str += stringifyValue(value, space, childIndent, limit);\n\n      // stop as soon as we're exceeding the limit\n      if (str.length > limit) {\n        return str + '...';\n      }\n    }\n  }\n  str += space ? '\\n' + indent + '}' : '}';\n  return str;\n}\n\n/**\n * Repeat a string a number of times.\n * Simple linear solution, we only need up to 10 iterations in practice\n * @param {string} text\n * @param {number} times\n * @return {string}\n */\nfunction repeat(text, times) {\n  var res = '';\n  while (times-- > 0) {\n    res += text;\n  }\n  return res;\n}\n\n/**\n * Limit the length of text\n * @param {string} text\n * @param {number} [limit]\n * @return {string}\n */\nfunction slice(text, limit) {\n  return typeof limit === 'number' ? text.slice(0, limit) : text;\n}\n\n/**\n * Test whether some text contains a JSON array, i.e. the first\n * non-white space character is a [\n * @param {string} jsonText\n * @return {boolean}\n */\nfunction containsArray(jsonText) {\n  return /^\\s*\\[/.test(jsonText);\n}\nfunction jsonUtils_hasOwnProperty(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n// EXTERNAL MODULE: ./src/js/util.js\nvar util = __webpack_require__(6237);\n// EXTERNAL MODULE: ./src/js/constants.js\nvar constants = __webpack_require__(660);\n;// ./src/js/showTransformModal.js\n\n\n\n\n\n\nvar DEFAULT_DESCRIPTION = 'Enter a <a href=\"http://jmespath.org\" target=\"_blank\">JMESPath</a> query to filter, sort, or transform the JSON data.<br/>' + 'To learn JMESPath, go to <a href=\"http://jmespath.org/tutorial.html\" target=\"_blank\">the interactive tutorial</a>.';\n\n/**\n * Show advanced filter and transform modal using JMESPath\n * @param {Object} params\n * @property {HTMLElement} container   The container where to center\n *                                     the modal and create an overlay\n * @property {JSON} json               The json data to be transformed\n * @property {string} [queryDescription] Optional custom description explaining\n *                                       the transform functionality\n * @property {function} createQuery    Function called to create a query\n *                                     from the wizard form\n * @property {function} executeQuery   Execute a query for the preview pane\n * @property {function} onTransform    Callback invoked with the created\n *                                     query as callback\n */\nfunction showTransformModal(_ref) {\n  var container = _ref.container,\n    json = _ref.json,\n    _ref$queryDescription = _ref.queryDescription,\n    queryDescription = _ref$queryDescription === void 0 ? DEFAULT_DESCRIPTION : _ref$queryDescription,\n    createQuery = _ref.createQuery,\n    executeQuery = _ref.executeQuery,\n    onTransform = _ref.onTransform;\n  var value = json;\n  var content = '<div class=\"pico-modal-contents\">' + '<div class=\"pico-modal-header\">' + (0,i18n/* translate */.Tl)('transform') + '</div>' + '<p>' + queryDescription + '</p>' + '<div class=\"jsoneditor-jmespath-label\">' + (0,i18n/* translate */.Tl)('transformWizardLabel') + ' </div>' + '<div id=\"wizard\" class=\"jsoneditor-jmespath-block jsoneditor-jmespath-wizard\">' + '  <table class=\"jsoneditor-jmespath-wizard-table\">' + '    <tbody>' + '      <tr>' + '        <th>' + (0,i18n/* translate */.Tl)('transformWizardFilter') + '</th>' + '        <td class=\"jsoneditor-jmespath-filter\">' + '          <div class=\"jsoneditor-inline jsoneditor-jmespath-filter-field\" >' + '            <select id=\"filterField\">' + '            </select>' + '          </div>' + '          <div class=\"jsoneditor-inline jsoneditor-jmespath-filter-relation\" >' + '            <select id=\"filterRelation\">' + '              <option value=\"==\">==</option>' + '              <option value=\"!=\">!=</option>' + '              <option value=\"<\">&lt;</option>' + '              <option value=\"<=\">&lt;=</option>' + '              <option value=\">\">&gt;</option>' + '              <option value=\">=\">&gt;=</option>' + '            </select>' + '          </div>' + '          <div class=\"jsoneditor-inline jsoneditor-jmespath-filter-value\" >' + '            <input type=\"text\" class=\"value\" placeholder=\"value...\" id=\"filterValue\" />' + '          </div>' + '        </td>' + '      </tr>' + '      <tr>' + '        <th>' + (0,i18n/* translate */.Tl)('transformWizardSortBy') + '</th>' + '        <td class=\"jsoneditor-jmespath-filter\">' + '          <div class=\"jsoneditor-inline jsoneditor-jmespath-sort-field\">' + '            <select id=\"sortField\">' + '            </select>' + '          </div>' + '          <div class=\"jsoneditor-inline jsoneditor-jmespath-sort-order\" >' + '            <select id=\"sortOrder\">' + '              <option value=\"asc\">Ascending</option>' + '              <option value=\"desc\">Descending</option>' + '            </select>' + '          </div>' + '        </td>' + '      </tr>' + '      <tr id=\"selectFieldsPart\">' + '        <th>' + (0,i18n/* translate */.Tl)('transformWizardSelectFields') + '</th>' + '        <td class=\"jsoneditor-jmespath-filter\">' + '          <select class=\"jsoneditor-jmespath-select-fields\" id=\"selectFields\" multiple></select>' + '        </td>' + '      </tr>' + '    </tbody>' + '  </table>' + '</div>' + '<div class=\"jsoneditor-jmespath-label\">' + (0,i18n/* translate */.Tl)('transformQueryLabel') + ' </div>' + '<div class=\"jsoneditor-jmespath-block\">' + '  <textarea id=\"query\" ' + '            rows=\"4\" ' + '            autocomplete=\"off\" ' + '            autocorrect=\"off\" ' + '            autocapitalize=\"off\" ' + '            spellcheck=\"false\"' + '            title=\"' + (0,i18n/* translate */.Tl)('transformQueryTitle') + '\">[*]</textarea>' + '</div>' + '<div class=\"jsoneditor-jmespath-label\">' + (0,i18n/* translate */.Tl)('transformPreviewLabel') + ' </div>' + '<div class=\"jsoneditor-jmespath-block\">' + '  <textarea id=\"preview\" ' + '      class=\"jsoneditor-transform-preview\"' + '      readonly> </textarea>' + '</div>' + '<div class=\"jsoneditor-jmespath-block jsoneditor-modal-actions\">' + '  <input type=\"submit\" id=\"ok\" value=\"' + (0,i18n/* translate */.Tl)('ok') + '\" autofocus />' + '</div>' + '</div>';\n  picoModal_default()({\n    parent: container,\n    content: content,\n    overlayClass: 'jsoneditor-modal-overlay',\n    overlayStyles: {\n      backgroundColor: 'rgb(1,1,1)',\n      opacity: 0.3\n    },\n    modalClass: 'jsoneditor-modal jsoneditor-modal-transform',\n    focus: false\n  }).afterCreate(function (modal) {\n    var elem = modal.modalElem();\n    var wizard = elem.querySelector('#wizard');\n    var ok = elem.querySelector('#ok');\n    var filterField = elem.querySelector('#filterField');\n    var filterRelation = elem.querySelector('#filterRelation');\n    var filterValue = elem.querySelector('#filterValue');\n    var sortField = elem.querySelector('#sortField');\n    var sortOrder = elem.querySelector('#sortOrder');\n    var selectFields = elem.querySelector('#selectFields');\n    var query = elem.querySelector('#query');\n    var preview = elem.querySelector('#preview');\n    if (!Array.isArray(value)) {\n      wizard.style.fontStyle = 'italic';\n      wizard.textContent = '(wizard not available for objects, only for arrays)';\n    }\n    var sortablePaths = (0,util.getChildPaths)(json);\n    sortablePaths.forEach(function (path) {\n      var formattedPath = preprocessPath(path);\n      var filterOption = document.createElement('option');\n      filterOption.text = formattedPath;\n      filterOption.value = formattedPath;\n      filterField.appendChild(filterOption);\n      var sortOption = document.createElement('option');\n      sortOption.text = formattedPath;\n      sortOption.value = formattedPath;\n      sortField.appendChild(sortOption);\n    });\n    var selectablePaths = (0,util.getChildPaths)(json, true).filter(function (path) {\n      return path !== '';\n    });\n    if (selectablePaths.length > 0) {\n      selectablePaths.forEach(function (path) {\n        var formattedPath = preprocessPath(path);\n        var option = document.createElement('option');\n        option.text = formattedPath;\n        option.value = formattedPath;\n        selectFields.appendChild(option);\n      });\n    } else {\n      var selectFieldsPart = elem.querySelector('#selectFieldsPart');\n      if (selectFieldsPart) {\n        selectFieldsPart.style.display = 'none';\n      }\n    }\n    var selectrFilterField = new (selectr_default())(filterField, {\n      defaultSelected: false,\n      clearable: true,\n      allowDeselect: true,\n      placeholder: 'field...'\n    });\n    var selectrFilterRelation = new (selectr_default())(filterRelation, {\n      defaultSelected: false,\n      clearable: true,\n      allowDeselect: true,\n      placeholder: 'compare...'\n    });\n    var selectrSortField = new (selectr_default())(sortField, {\n      defaultSelected: false,\n      clearable: true,\n      allowDeselect: true,\n      placeholder: 'field...'\n    });\n    var selectrSortOrder = new (selectr_default())(sortOrder, {\n      defaultSelected: false,\n      clearable: true,\n      allowDeselect: true,\n      placeholder: 'order...'\n    });\n    var selectrSelectFields = new (selectr_default())(selectFields, {\n      multiple: true,\n      clearable: true,\n      defaultSelected: false,\n      placeholder: 'select fields...'\n    });\n    selectrFilterField.on('selectr.change', generateQueryFromWizard);\n    selectrFilterRelation.on('selectr.change', generateQueryFromWizard);\n    filterValue.oninput = generateQueryFromWizard;\n    selectrSortField.on('selectr.change', generateQueryFromWizard);\n    selectrSortOrder.on('selectr.change', generateQueryFromWizard);\n    selectrSelectFields.on('selectr.change', generateQueryFromWizard);\n    elem.querySelector('.pico-modal-contents').onclick = function (event) {\n      // prevent the first clear button (in any select box) from getting\n      // focus when clicking anywhere in the modal. Only allow clicking links.\n      if (event.target.nodeName !== 'A') {\n        event.preventDefault();\n      }\n    };\n    function preprocessPath(path) {\n      return path === '' ? '@' : path[0] === '.' ? path.slice(1) : path;\n    }\n    function updatePreview() {\n      try {\n        var transformed = executeQuery(value, query.value);\n        preview.className = 'jsoneditor-transform-preview';\n        preview.value = stringifyPartial(transformed, 2, constants/* MAX_PREVIEW_CHARACTERS */.hJ);\n        ok.disabled = false;\n      } catch (err) {\n        preview.className = 'jsoneditor-transform-preview jsoneditor-error';\n        preview.value = err.toString();\n        ok.disabled = true;\n      }\n    }\n    var debouncedUpdatePreview = (0,util.debounce)(updatePreview, 300);\n    function tryCreateQuery(json, queryOptions) {\n      try {\n        query.value = createQuery(json, queryOptions);\n        ok.disabled = false;\n        debouncedUpdatePreview();\n      } catch (err) {\n        var message = 'Error: an error happened when executing \"createQuery\": ' + (err.message || err.toString());\n        query.value = '';\n        ok.disabled = true;\n        preview.className = 'jsoneditor-transform-preview jsoneditor-error';\n        preview.value = message;\n      }\n    }\n    function generateQueryFromWizard() {\n      var queryOptions = {};\n      if (filterField.value && filterRelation.value && filterValue.value) {\n        queryOptions.filter = {\n          field: filterField.value,\n          relation: filterRelation.value,\n          value: filterValue.value\n        };\n      }\n      if (sortField.value && sortOrder.value) {\n        queryOptions.sort = {\n          field: sortField.value,\n          direction: sortOrder.value\n        };\n      }\n      if (selectFields.value) {\n        var fields = [];\n        for (var i = 0; i < selectFields.options.length; i++) {\n          if (selectFields.options[i].selected) {\n            var selectedField = selectFields.options[i].value;\n            fields.push(selectedField);\n          }\n        }\n        queryOptions.projection = {\n          fields: fields\n        };\n      }\n      tryCreateQuery(json, queryOptions);\n    }\n    query.oninput = debouncedUpdatePreview;\n    ok.onclick = function (event) {\n      event.preventDefault();\n      event.stopPropagation();\n      modal.close();\n      onTransform(query.value);\n    };\n\n    // initialize with empty query\n    tryCreateQuery(json, {});\n    setTimeout(function () {\n      query.select();\n      query.focus();\n      query.selectionStart = 3;\n      query.selectionEnd = 3;\n    });\n  }).afterClose(function (modal) {\n    modal.destroy();\n  }).show();\n}\n\n/***/ }),\n\n/***/ 1948:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  textModeMixins: function() { return /* binding */ textModeMixins; }\n});\n\n// EXTERNAL MODULE: ./node_modules/jsonrepair/lib/esm/regular/jsonrepair.js + 2 modules\nvar jsonrepair = __webpack_require__(9857);\n// EXTERNAL MODULE: ./src/js/ace/index.js\nvar ace = __webpack_require__(7413);\nvar ace_default = /*#__PURE__*/__webpack_require__.n(ace);\n// EXTERNAL MODULE: ./src/js/constants.js\nvar constants = __webpack_require__(660);\n// EXTERNAL MODULE: ./src/js/ErrorTable.js\nvar ErrorTable = __webpack_require__(2115);\n// EXTERNAL MODULE: ./src/js/FocusTracker.js\nvar FocusTracker = __webpack_require__(2877);\n// EXTERNAL MODULE: ./src/js/i18n.js\nvar i18n = __webpack_require__(3057);\n// EXTERNAL MODULE: ./src/js/jmespathQuery.js\nvar jmespathQuery = __webpack_require__(359);\n// EXTERNAL MODULE: ./src/js/ModeSwitcher.js\nvar ModeSwitcher = __webpack_require__(1389);\n// EXTERNAL MODULE: ./src/js/showSortModal.js\nvar showSortModal = __webpack_require__(2915);\n// EXTERNAL MODULE: ./src/js/showTransformModal.js + 1 modules\nvar showTransformModal = __webpack_require__(5609);\n// EXTERNAL MODULE: ./src/js/tryRequireThemeJsonEditor.js\nvar tryRequireThemeJsonEditor = __webpack_require__(5467);\n// EXTERNAL MODULE: ./node_modules/json-source-map/index.js\nvar json_source_map = __webpack_require__(3094);\n// EXTERNAL MODULE: ./src/js/util.js\nvar util = __webpack_require__(6237);\n;// ./src/js/SchemaTextCompleter.js\n\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n/**\n * SchemaTextCompleter class implements the ace ext-language_tools completer API,\n * and suggests completions for the text editor that are relative\n * to the cursor position and the json schema\n */\nvar SchemaTextCompleter = /*#__PURE__*/function () {\n  function SchemaTextCompleter(schema, schemaRefs) {\n    _classCallCheck(this, SchemaTextCompleter);\n    this.schema = schema;\n    this.schemaRefs = schemaRefs || {};\n    this.suggestions = {};\n    this.suggestionsRefs = {};\n    this._buildSuggestions();\n  }\n  return _createClass(SchemaTextCompleter, [{\n    key: \"_buildSuggestions\",\n    value: function _buildSuggestions() {\n      this._handleSchemaEntry('', this.schema, this.suggestions);\n      for (var refName in this.schemaRefs) {\n        this.suggestionsRefs[refName] = {};\n        this._handleSchemaEntry('', this.schemaRefs[refName], this.suggestionsRefs[refName]);\n      }\n    }\n  }, {\n    key: \"_handleRef\",\n    value: function _handleRef(currectPath, refName, suggestionsObj) {\n      suggestionsObj[currectPath] = suggestionsObj[currectPath] || {};\n      suggestionsObj[currectPath].refs = suggestionsObj[currectPath].refs || [];\n      suggestionsObj[currectPath].refs = (0,util.uniqueMergeArrays)(suggestionsObj[currectPath].refs, [refName]);\n    }\n  }, {\n    key: \"_handleSchemaEntry\",\n    value: function _handleSchemaEntry(currectPath, schemaNode, suggestionsObj) {\n      if (!schemaNode) {\n        console.error('SchemaTextCompleter: schema node is missing for path', currectPath);\n        return;\n      }\n      if (schemaNode.$ref) {\n        this._handleRef(currectPath, schemaNode.$ref, suggestionsObj);\n        return;\n      }\n      var ofConditionEntry = this._checkOfConditon(schemaNode);\n      if (ofConditionEntry) {\n        this._handleOfCondition(currectPath, schemaNode[ofConditionEntry], suggestionsObj);\n        return;\n      }\n      switch (schemaNode.type) {\n        case 'object':\n          this._handleObject(currectPath, schemaNode, suggestionsObj);\n          break;\n        case 'string':\n        case 'number':\n        case 'integer':\n          this._handlePrimitive(currectPath, schemaNode, suggestionsObj);\n          break;\n        case 'boolean':\n          this._handleBoolean(currectPath, schemaNode, suggestionsObj);\n          break;\n        case 'array':\n          this._handleArray(currectPath, schemaNode, suggestionsObj);\n      }\n    }\n  }, {\n    key: \"_handleObject\",\n    value: function _handleObject(currectPath, schemaNode, suggestionsObj) {\n      var _this = this;\n      if ((0,util.isObject)(schemaNode.properties)) {\n        var props = Object.keys(schemaNode.properties);\n        suggestionsObj[currectPath] = suggestionsObj[currectPath] || {};\n        suggestionsObj[currectPath].props = suggestionsObj[currectPath].props || [];\n        suggestionsObj[currectPath].props = (0,util.uniqueMergeArrays)(suggestionsObj[currectPath].props, props);\n        props.forEach(function (prop) {\n          (0,util.asyncExec)(function () {\n            _this._handleSchemaEntry(\"\".concat(currectPath, \"/\").concat(prop), schemaNode.properties[prop], suggestionsObj);\n          });\n        });\n      }\n    }\n  }, {\n    key: \"_handlePrimitive\",\n    value: function _handlePrimitive(currectPath, schemaNode, suggestionsObj) {\n      suggestionsObj[currectPath] = suggestionsObj[currectPath] || {};\n      if ((0,util.isArray)(schemaNode.examples)) {\n        suggestionsObj[currectPath].examples = suggestionsObj[currectPath].examples || [];\n        suggestionsObj[currectPath].examples = (0,util.uniqueMergeArrays)(suggestionsObj[currectPath].examples, schemaNode.examples);\n      }\n      if ((0,util.isArray)(schemaNode[\"enum\"])) {\n        suggestionsObj[currectPath][\"enum\"] = suggestionsObj[currectPath][\"enum\"] || [];\n        suggestionsObj[currectPath][\"enum\"] = (0,util.uniqueMergeArrays)(suggestionsObj[currectPath][\"enum\"], schemaNode[\"enum\"]);\n      }\n    }\n  }, {\n    key: \"_handleBoolean\",\n    value: function _handleBoolean(currectPath, schemaNode, suggestionsObj) {\n      if (!suggestionsObj[currectPath]) {\n        suggestionsObj[currectPath] = {\n          bool: [true, false]\n        };\n      }\n    }\n  }, {\n    key: \"_handleArray\",\n    value: function _handleArray(currectPath, schemaNode, suggestionsObj) {\n      var _this2 = this;\n      if (schemaNode.items) {\n        (0,util.asyncExec)(function () {\n          _this2._handleSchemaEntry(\"\".concat(currectPath, \"/\\\\d+\"), schemaNode.items, suggestionsObj);\n        });\n      }\n    }\n  }, {\n    key: \"_handleOfCondition\",\n    value: function _handleOfCondition(currectPath, schemaNode, suggestionsObj) {\n      var _this3 = this;\n      if (schemaNode && schemaNode.length) {\n        schemaNode.forEach(function (schemaEntry) {\n          (0,util.asyncExec)(function () {\n            _this3._handleSchemaEntry(currectPath, schemaEntry, suggestionsObj);\n          });\n        });\n      }\n    }\n  }, {\n    key: \"_checkOfConditon\",\n    value: function _checkOfConditon(entry) {\n      if (!entry) {\n        return;\n      }\n      if (entry.oneOf) {\n        return 'oneOf';\n      }\n      if (entry.anyOf) {\n        return 'anyOf';\n      }\n      if (entry.allOf) {\n        return 'allOf';\n      }\n    }\n  }, {\n    key: \"getCompletions\",\n    value: function getCompletions(editor, session, pos, prefix, callback) {\n      var _this4 = this;\n      try {\n        var map = json_source_map.parse(session.getValue());\n        var pointers = map.pointers || {};\n        var processCompletionsCallback = function processCompletionsCallback(suggestions) {\n          var completions = [];\n          var score = 0;\n          var appendSuggesions = function appendSuggesions(type) {\n            var _suggestions$type;\n            var typeTitle = {\n              props: 'property',\n              \"enum\": 'enum',\n              bool: 'boolean',\n              examples: 'examples'\n            };\n            if (suggestions && (_suggestions$type = suggestions[type]) !== null && _suggestions$type !== void 0 && _suggestions$type.length) {\n              completions = completions.concat(suggestions[type].map(function (term) {\n                return {\n                  caption: term + '',\n                  meta: \"schema [\".concat(typeTitle[type], \"]\"),\n                  score: score++,\n                  value: term + ''\n                };\n              }));\n            }\n          };\n          appendSuggesions('props');\n          appendSuggesions('enum');\n          appendSuggesions('bool');\n          appendSuggesions('examples');\n          if (completions.length) {\n            callback(null, completions);\n          }\n        };\n        Object.keys(pointers).forEach(function (ptr) {\n          (0,util.asyncExec)(function () {\n            var _pointers$ptr$key, _pointers$ptr$value, _pointers$ptr$value2, _pointers$ptr$valueEn;\n            var _matchPointersToPath = function matchPointersToPath(pointer, currentSuggestions, path) {\n              var option = Object.keys(currentSuggestions).reduce(function (last, key) {\n                if (new RegExp(\"^\".concat(path).concat(key)).test(pointer)) {\n                  if (!last || last.length < key.length) {\n                    return key;\n                  }\n                }\n                return last;\n              }, null);\n              if (typeof option === 'string') {\n                var _currentSuggestions$o;\n                if ((_currentSuggestions$o = currentSuggestions[option]) !== null && _currentSuggestions$o !== void 0 && (_currentSuggestions$o = _currentSuggestions$o.refs) !== null && _currentSuggestions$o !== void 0 && _currentSuggestions$o.length) {\n                  var mergedSuggestions = {};\n                  for (var idx in currentSuggestions[option].refs) {\n                    var refName = currentSuggestions[option].refs[idx];\n                    if (_this4.suggestionsRefs[refName]) {\n                      var refSuggestion = _matchPointersToPath(pointer, _this4.suggestionsRefs[refName], \"\".concat(path).concat(option));\n                      if (refSuggestion !== null && refSuggestion !== void 0 && refSuggestion[\"enum\"]) {\n                        mergedSuggestions[\"enum\"] = (0,util.uniqueMergeArrays)(mergedSuggestions[\"enum\"], refSuggestion[\"enum\"]);\n                      }\n                      if (refSuggestion !== null && refSuggestion !== void 0 && refSuggestion.examples) {\n                        mergedSuggestions.examples = (0,util.uniqueMergeArrays)(mergedSuggestions.examples, refSuggestion.examples);\n                      }\n                      if (refSuggestion !== null && refSuggestion !== void 0 && refSuggestion.bool) {\n                        mergedSuggestions.bool = (0,util.uniqueMergeArrays)(mergedSuggestions.bool, refSuggestion.bool);\n                      }\n                      if (refSuggestion !== null && refSuggestion !== void 0 && refSuggestion.props) {\n                        mergedSuggestions.props = (0,util.uniqueMergeArrays)(mergedSuggestions.props, refSuggestion.props);\n                      }\n                    }\n                  }\n                  return mergedSuggestions;\n                } else if (new RegExp(\"^\".concat(path).concat(option, \"$\")).test(pointer)) {\n                  // console.log('SchemaTextCompleter: Text suggestion match', { path: pointer, schemaPath: `${path}${option}`, suggestions: currentSuggestions[option] })\n                  return currentSuggestions[option];\n                }\n              }\n            };\n            var selectedPtr;\n            if (((_pointers$ptr$key = pointers[ptr].key) === null || _pointers$ptr$key === void 0 ? void 0 : _pointers$ptr$key.line) === pos.row) {\n              if (pos.column >= pointers[ptr].key.column && pos.column <= pointers[ptr].keyEnd.column) {\n                selectedPtr = ptr.slice(0, ptr.lastIndexOf('/'));\n              }\n            }\n            if (((_pointers$ptr$value = pointers[ptr].value) === null || _pointers$ptr$value === void 0 ? void 0 : _pointers$ptr$value.line) === pos.row && ((_pointers$ptr$value2 = pointers[ptr].value) === null || _pointers$ptr$value2 === void 0 ? void 0 : _pointers$ptr$value2.line) === ((_pointers$ptr$valueEn = pointers[ptr].valueEnd) === null || _pointers$ptr$valueEn === void 0 ? void 0 : _pointers$ptr$valueEn.line)) {\n              // multiline values are objects\n              if (pos.column >= pointers[ptr].value.column && pos.column <= pointers[ptr].valueEnd.column) {\n                selectedPtr = ptr;\n              }\n            }\n            if (selectedPtr) {\n              var chosenCompletions = _matchPointersToPath(selectedPtr, _this4.suggestions, '');\n              processCompletionsCallback(chosenCompletions);\n            }\n          });\n        });\n      } catch (e) {\n        // probably not valid json, ignore.\n      }\n    }\n  }]);\n}();\n;// ./src/js/validationUtils.js\n\n\n/**\n * Execute custom validation if configured.\n *\n * Returns a promise resolving with the custom errors (or an empty array).\n */\nfunction validateCustom(json, onValidate) {\n  if (!onValidate) {\n    return Promise.resolve([]);\n  }\n  try {\n    var customValidateResults = onValidate(json);\n    var resultPromise = (0,util.isPromise)(customValidateResults) ? customValidateResults : Promise.resolve(customValidateResults);\n    return resultPromise.then(function (customValidationPathErrors) {\n      if (Array.isArray(customValidationPathErrors)) {\n        return customValidationPathErrors.filter(function (error) {\n          var valid = (0,util.isValidValidationError)(error);\n          if (!valid) {\n            console.warn('Ignoring a custom validation error with invalid structure. ' + 'Expected structure: {path: [...], message: \"...\"}. ' + 'Actual error:', error);\n          }\n          return valid;\n        }).map(function (error) {\n          return (\n            // change data structure into the structure matching the JSON schema errors\n            {\n              dataPath: (0,util.stringifyPath)(error.path),\n              message: error.message,\n              type: 'customValidation'\n            }\n          );\n        });\n      } else {\n        return [];\n      }\n    });\n  } catch (err) {\n    return Promise.reject(err);\n  }\n}\n;// ./src/js/textmode.js\n\n\nfunction textmode_typeof(o) { \"@babel/helpers - typeof\"; return textmode_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, textmode_typeof(o); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// create a mixin with the functions for text mode\nvar textmode = {};\nvar DEFAULT_THEME = 'ace/theme/jsoneditor';\n\n/**\n * Create a text editor\n * @param {Element} container\n * @param {Object} [options]   Object with options. See docs for details.\n * @private\n */\ntextmode.create = function (container) {\n  var _this = this;\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  if (typeof options.statusBar === 'undefined') {\n    options.statusBar = true;\n  }\n\n  // setting default for textmode\n  options.mainMenuBar = options.mainMenuBar !== false;\n  options.enableSort = options.enableSort !== false;\n  options.enableTransform = options.enableTransform !== false;\n  options.createQuery = options.createQuery || jmespathQuery/* createQuery */.V;\n  options.executeQuery = options.executeQuery || jmespathQuery/* executeQuery */.e;\n  options.showErrorTable = options.showErrorTable !== undefined ? options.showErrorTable : ['text', 'preview'];\n  this.options = options;\n\n  // indentation\n  if (typeof options.indentation === 'number') {\n    this.indentation = Number(options.indentation);\n  } else {\n    this.indentation = 2; // number of spaces\n  }\n\n  // language\n  (0,i18n/* setLanguages */.AI)(this.options.languages);\n  (0,i18n/* setLanguage */.xC)(this.options.language);\n\n  // grab ace from options if provided\n  var _ace = options.ace ? options.ace : (ace_default());\n  // TODO: make the option options.ace deprecated, it's not needed anymore (see #309)\n\n  // determine mode\n  this.mode = options.mode === 'code' ? 'code' : 'text';\n  if (this.mode === 'code') {\n    // verify whether Ace editor is available and supported\n    if (typeof _ace === 'undefined') {\n      this.mode = 'text';\n      console.warn('Failed to load Ace editor, falling back to plain text mode. Please use a JSONEditor bundle including Ace, or pass Ace as via the configuration option `ace`.');\n    }\n  }\n\n  // determine theme\n  this.theme = options.theme || DEFAULT_THEME;\n  if (this.theme === DEFAULT_THEME && _ace) {\n    (0,tryRequireThemeJsonEditor/* tryRequireThemeJsonEditor */.J)();\n  }\n  if (options.onTextSelectionChange) {\n    this.onTextSelectionChange(options.onTextSelectionChange);\n  }\n  var me = this;\n  this.container = container;\n  this.dom = {};\n  this.aceEditor = undefined; // ace code editor\n  this.textarea = undefined; // plain text editor (fallback when Ace is not available)\n  this.validateSchema = null;\n  this.annotations = [];\n  this.lastSchemaErrors = undefined;\n\n  // create a debounced validate function\n  this._debouncedValidate = (0,util.debounce)(this._validateAndCatch.bind(this), this.DEBOUNCE_INTERVAL);\n  this.width = container.clientWidth;\n  this.height = container.clientHeight;\n  this.frame = document.createElement('div');\n  this.frame.className = 'jsoneditor jsoneditor-mode-' + this.options.mode;\n  this.frame.onclick = function (event) {\n    // prevent default submit action when the editor is located inside a form\n    event.preventDefault();\n  };\n  this.frame.onkeydown = function (event) {\n    me._onKeyDown(event);\n  };\n\n  // setting the FocusTracker on 'this.frame' to track the editor's focus event\n  var focusTrackerConfig = {\n    target: this.frame,\n    onFocus: this.options.onFocus || null,\n    onBlur: this.options.onBlur || null\n  };\n  this.frameFocusTracker = new FocusTracker/* FocusTracker */.$(focusTrackerConfig);\n  this.content = document.createElement('div');\n  this.content.className = 'jsoneditor-outer';\n  if (this.options.mainMenuBar) {\n    (0,util.addClassName)(this.content, 'has-main-menu-bar');\n\n    // create menu\n    this.menu = document.createElement('div');\n    this.menu.className = 'jsoneditor-menu';\n    this.frame.appendChild(this.menu);\n\n    // create format button\n    var buttonFormat = document.createElement('button');\n    buttonFormat.type = 'button';\n    buttonFormat.className = 'jsoneditor-format';\n    buttonFormat.title = (0,i18n/* translate */.Tl)('formatTitle');\n    this.menu.appendChild(buttonFormat);\n    buttonFormat.onclick = function () {\n      try {\n        me.format();\n        me._onChange();\n      } catch (err) {\n        me._onError(err);\n      }\n    };\n\n    // create compact button\n    var buttonCompact = document.createElement('button');\n    buttonCompact.type = 'button';\n    buttonCompact.className = 'jsoneditor-compact';\n    buttonCompact.title = (0,i18n/* translate */.Tl)('compactTitle');\n    this.menu.appendChild(buttonCompact);\n    buttonCompact.onclick = function () {\n      try {\n        me.compact();\n        me._onChange();\n      } catch (err) {\n        me._onError(err);\n      }\n    };\n\n    // create sort button\n    if (this.options.enableSort) {\n      var _sort = document.createElement('button');\n      _sort.type = 'button';\n      _sort.className = 'jsoneditor-sort';\n      _sort.title = (0,i18n/* translate */.Tl)('sortTitleShort');\n      _sort.onclick = function () {\n        me._showSortModal();\n      };\n      this.menu.appendChild(_sort);\n    }\n\n    // create transform button\n    if (this.options.enableTransform) {\n      var transform = document.createElement('button');\n      transform.type = 'button';\n      transform.title = (0,i18n/* translate */.Tl)('transformTitleShort');\n      transform.className = 'jsoneditor-transform';\n      transform.onclick = function () {\n        me._showTransformModal();\n      };\n      this.menu.appendChild(transform);\n    }\n\n    // create repair button\n    var buttonRepair = document.createElement('button');\n    buttonRepair.type = 'button';\n    buttonRepair.className = 'jsoneditor-repair';\n    buttonRepair.title = (0,i18n/* translate */.Tl)('repairTitle');\n    this.menu.appendChild(buttonRepair);\n    buttonRepair.onclick = function () {\n      try {\n        me.repair();\n        me._onChange();\n      } catch (err) {\n        me._onError(err);\n      }\n    };\n\n    // create undo/redo buttons\n    if (this.mode === 'code') {\n      // create undo button\n      var undo = document.createElement('button');\n      undo.type = 'button';\n      undo.className = 'jsoneditor-undo jsoneditor-separator';\n      undo.title = (0,i18n/* translate */.Tl)('undo');\n      undo.onclick = function () {\n        _this.aceEditor.getSession().getUndoManager().undo();\n      };\n      this.menu.appendChild(undo);\n      this.dom.undo = undo;\n\n      // create redo button\n      var redo = document.createElement('button');\n      redo.type = 'button';\n      redo.className = 'jsoneditor-redo';\n      redo.title = (0,i18n/* translate */.Tl)('redo');\n      redo.onclick = function () {\n        _this.aceEditor.getSession().getUndoManager().redo();\n      };\n      this.menu.appendChild(redo);\n      this.dom.redo = redo;\n    }\n\n    // create mode box\n    if (this.options && this.options.modes && this.options.modes.length) {\n      this.modeSwitcher = new ModeSwitcher/* ModeSwitcher */.n(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {\n        // switch mode and restore focus\n        try {\n          me.setMode(mode);\n          me.modeSwitcher.focus();\n        } catch (err) {\n          me._onError(err);\n        }\n      });\n    }\n    if (this.mode === 'code') {\n      var poweredBy = document.createElement('a');\n      poweredBy.appendChild(document.createTextNode('powered by ace'));\n      poweredBy.href = 'https://ace.c9.io/';\n      poweredBy.target = '_blank';\n      poweredBy.className = 'jsoneditor-poweredBy';\n      poweredBy.onclick = function () {\n        // TODO: this anchor falls below the margin of the content,\n        // therefore the normal a.href does not work. We use a click event\n        // for now, but this should be fixed.\n        window.open(poweredBy.href, poweredBy.target, 'noreferrer');\n      };\n      this.menu.appendChild(poweredBy);\n    }\n  }\n  var emptyNode = {};\n  var isReadOnly = this.options.onEditable && textmode_typeof(this.options.onEditable === 'function') && !this.options.onEditable(emptyNode);\n  this.frame.appendChild(this.content);\n  this.container.appendChild(this.frame);\n  if (this.mode === 'code') {\n    this.editorDom = document.createElement('div');\n    this.editorDom.style.height = '100%'; // TODO: move to css\n    this.editorDom.style.width = '100%'; // TODO: move to css\n    this.content.appendChild(this.editorDom);\n    var aceEditor = _ace.edit(this.editorDom);\n    var aceSession = aceEditor.getSession();\n    aceEditor.$blockScrolling = Infinity;\n    aceEditor.setTheme(this.theme);\n    aceEditor.setOptions({\n      readOnly: isReadOnly\n    });\n    aceEditor.setShowPrintMargin(false);\n    aceEditor.setFontSize('14px');\n    aceSession.setMode('ace/mode/json');\n    aceSession.setTabSize(this.indentation);\n    aceSession.setUseSoftTabs(true);\n    aceSession.setUseWrapMode(true);\n\n    // replace ace setAnnotations with custom function that also covers jsoneditor annotations\n    var originalSetAnnotations = aceSession.setAnnotations;\n    aceSession.setAnnotations = function (annotations) {\n      originalSetAnnotations.call(this, annotations && annotations.length ? annotations : me.annotations);\n    };\n\n    // disable Ctrl+L quickkey of Ace (is used by the browser to select the address bar)\n    aceEditor.commands.bindKey('Ctrl-L', null);\n    aceEditor.commands.bindKey('Command-L', null);\n\n    // disable the quickkeys we want to use for Format and Compact\n    aceEditor.commands.bindKey('Ctrl-\\\\', null);\n    aceEditor.commands.bindKey('Command-\\\\', null);\n    aceEditor.commands.bindKey('Ctrl-Shift-\\\\', null);\n    aceEditor.commands.bindKey('Command-Shift-\\\\', null);\n    this.aceEditor = aceEditor;\n\n    // register onchange event\n    aceEditor.on('change', this._onChange.bind(this));\n    aceEditor.on('changeSelection', this._onSelect.bind(this));\n  } else {\n    // load a plain text textarea\n    var textarea = document.createElement('textarea');\n    textarea.className = 'jsoneditor-text';\n    textarea.spellcheck = false;\n    this.content.appendChild(textarea);\n    this.textarea = textarea;\n    this.textarea.readOnly = isReadOnly;\n\n    // register onchange event\n    if (this.textarea.oninput === null) {\n      this.textarea.oninput = this._onChange.bind(this);\n    } else {\n      // oninput is undefined. For IE8-\n      this.textarea.onchange = this._onChange.bind(this);\n    }\n    textarea.onselect = this._onSelect.bind(this);\n    textarea.onmousedown = this._onMouseDown.bind(this);\n    textarea.onblur = this._onBlur.bind(this);\n  }\n  this._updateHistoryButtons();\n  var errorTableVisible = Array.isArray(this.options.showErrorTable) ? this.options.showErrorTable.includes(this.mode) : this.options.showErrorTable === true;\n  this.errorTable = new ErrorTable/* ErrorTable */.N({\n    errorTableVisible: errorTableVisible,\n    onToggleVisibility: function onToggleVisibility() {\n      me._validateAndCatch();\n    },\n    onFocusLine: function onFocusLine(line) {\n      me.isFocused = true;\n      if (!isNaN(line)) {\n        me.setTextSelection({\n          row: line,\n          column: 1\n        }, {\n          row: line,\n          column: 1000\n        });\n      }\n    },\n    onChangeHeight: function onChangeHeight(height) {\n      // TODO: change CSS to using flex box, remove setting height using JavaScript\n      var statusBarHeight = me.dom.statusBar ? me.dom.statusBar.clientHeight : 0;\n      var totalHeight = height + statusBarHeight + 1;\n      me.content.style.marginBottom = -totalHeight + 'px';\n      me.content.style.paddingBottom = totalHeight + 'px';\n    }\n  });\n  this.frame.appendChild(this.errorTable.getErrorTable());\n  if (options.statusBar) {\n    (0,util.addClassName)(this.content, 'has-status-bar');\n    this.curserInfoElements = {};\n    var statusBar = document.createElement('div');\n    this.dom.statusBar = statusBar;\n    statusBar.className = 'jsoneditor-statusbar';\n    this.frame.appendChild(statusBar);\n    var lnLabel = document.createElement('span');\n    lnLabel.className = 'jsoneditor-curserinfo-label';\n    lnLabel.innerText = 'Ln:';\n    var lnVal = document.createElement('span');\n    lnVal.className = 'jsoneditor-curserinfo-val';\n    lnVal.innerText = '1';\n    statusBar.appendChild(lnLabel);\n    statusBar.appendChild(lnVal);\n    var colLabel = document.createElement('span');\n    colLabel.className = 'jsoneditor-curserinfo-label';\n    colLabel.innerText = 'Col:';\n    var colVal = document.createElement('span');\n    colVal.className = 'jsoneditor-curserinfo-val';\n    colVal.innerText = '1';\n    statusBar.appendChild(colLabel);\n    statusBar.appendChild(colVal);\n    this.curserInfoElements.colVal = colVal;\n    this.curserInfoElements.lnVal = lnVal;\n    var countLabel = document.createElement('span');\n    countLabel.className = 'jsoneditor-curserinfo-label';\n    countLabel.innerText = 'characters selected';\n    countLabel.style.display = 'none';\n    var countVal = document.createElement('span');\n    countVal.className = 'jsoneditor-curserinfo-count';\n    countVal.innerText = '0';\n    countVal.style.display = 'none';\n    this.curserInfoElements.countLabel = countLabel;\n    this.curserInfoElements.countVal = countVal;\n    statusBar.appendChild(countVal);\n    statusBar.appendChild(countLabel);\n    statusBar.appendChild(this.errorTable.getErrorCounter());\n    statusBar.appendChild(this.errorTable.getWarningIcon());\n    statusBar.appendChild(this.errorTable.getErrorIcon());\n  }\n  this.setSchema(this.options.schema, this.options.schemaRefs);\n};\ntextmode._onSchemaChange = function (schema, schemaRefs) {\n  if (!this.aceEditor) {\n    return;\n  }\n  if (this.options.allowSchemaSuggestions && schema) {\n    this.aceEditor.setOption('enableBasicAutocompletion', [new SchemaTextCompleter(schema, schemaRefs)]);\n    this.aceEditor.setOption('enableLiveAutocompletion', true);\n  } else {\n    this.aceEditor.setOption('enableBasicAutocompletion', undefined);\n    this.aceEditor.setOption('enableLiveAutocompletion', false);\n  }\n};\n\n/**\n * Handle a change:\n * - Validate JSON schema\n * - Send a callback to the onChange listener if provided\n * @private\n */\ntextmode._onChange = function () {\n  var _this2 = this;\n  if (this.onChangeDisabled) {\n    return;\n  }\n\n  // enable/disable undo/redo buttons\n  setTimeout(function () {\n    if (_this2._updateHistoryButtons) {\n      _this2._updateHistoryButtons();\n    }\n  });\n\n  // validate JSON schema (if configured)\n  this._debouncedValidate();\n\n  // trigger the onChange callback\n  if (this.options.onChange) {\n    try {\n      this.options.onChange();\n    } catch (err) {\n      console.error('Error in onChange callback: ', err);\n    }\n  }\n\n  // trigger the onChangeText callback\n  if (this.options.onChangeText) {\n    try {\n      this.options.onChangeText(this.getText());\n    } catch (err) {\n      console.error('Error in onChangeText callback: ', err);\n    }\n  }\n};\ntextmode._updateHistoryButtons = function () {\n  if (this.aceEditor && this.dom.undo && this.dom.redo) {\n    var undoManager = this.aceEditor.getSession().getUndoManager();\n    if (undoManager && undoManager.hasUndo && undoManager.hasRedo) {\n      this.dom.undo.disabled = !undoManager.hasUndo();\n      this.dom.redo.disabled = !undoManager.hasRedo();\n    }\n  }\n};\n\n/**\n * Open a sort modal\n * @private\n */\ntextmode._showSortModal = function () {\n  try {\n    var onSort = function onSort(sortedBy) {\n      if (Array.isArray(json)) {\n        var sortedJson = (0,util.sort)(json, sortedBy.path, sortedBy.direction);\n        me.sortedBy = sortedBy;\n        me.update(sortedJson);\n      }\n      if ((0,util.isObject)(json)) {\n        var _sortedJson = (0,util.sortObjectKeys)(json, sortedBy.direction);\n        me.sortedBy = sortedBy;\n        me.update(_sortedJson);\n      }\n    };\n    var me = this;\n    var container = this.options.modalAnchor || constants/* DEFAULT_MODAL_ANCHOR */.ai;\n    var json = this.get();\n    (0,showSortModal.showSortModal)(container, json, onSort, me.sortedBy);\n  } catch (err) {\n    this._onError(err);\n  }\n};\n\n/**\n * Open a transform modal\n * @private\n */\ntextmode._showTransformModal = function () {\n  var _this3 = this;\n  try {\n    var _this$options = this.options,\n      modalAnchor = _this$options.modalAnchor,\n      _createQuery = _this$options.createQuery,\n      _executeQuery = _this$options.executeQuery,\n      queryDescription = _this$options.queryDescription;\n    var json = this.get();\n    (0,showTransformModal.showTransformModal)({\n      container: modalAnchor || constants/* DEFAULT_MODAL_ANCHOR */.ai,\n      json: json,\n      queryDescription: queryDescription,\n      // can be undefined\n      createQuery: _createQuery,\n      executeQuery: _executeQuery,\n      onTransform: function onTransform(query) {\n        var updatedJson = _executeQuery(json, query);\n        _this3.update(updatedJson);\n      }\n    });\n  } catch (err) {\n    this._onError(err);\n  }\n};\n\n/**\n * Handle text selection\n * Calculates the cursor position and selection range and updates menu\n * @private\n */\ntextmode._onSelect = function () {\n  this._updateCursorInfo();\n  this._emitSelectionChange();\n};\n\n/**\n * Event handler for keydown. Handles shortcut keys\n * @param {Event} event\n * @private\n */\ntextmode._onKeyDown = function (event) {\n  var keynum = event.which || event.keyCode;\n  var handled = false;\n  if (keynum === 73 && event.ctrlKey) {\n    if (event.shiftKey) {\n      // Ctrl+Shift+I\n      this.compact();\n      this._onChange();\n    } else {\n      // Ctrl+I\n      this.format();\n      this._onChange();\n    }\n    handled = true;\n  }\n  if (handled) {\n    event.preventDefault();\n    event.stopPropagation();\n  }\n  this._updateCursorInfo();\n  this._emitSelectionChange();\n};\n\n/**\n * Event handler for mousedown.\n * @private\n */\ntextmode._onMouseDown = function () {\n  this._updateCursorInfo();\n  this._emitSelectionChange();\n};\n\n/**\n * Event handler for blur.\n * @private\n */\ntextmode._onBlur = function () {\n  var me = this;\n  // this allows to avoid blur when clicking inner elements (like the errors panel)\n  // just make sure to set the isFocused to true on the inner element onclick callback\n  setTimeout(function () {\n    if (!me.isFocused) {\n      me._updateCursorInfo();\n      me._emitSelectionChange();\n    }\n    me.isFocused = false;\n  });\n};\n\n/**\n * Update the cursor info and the status bar, if presented\n */\ntextmode._updateCursorInfo = function () {\n  var me = this;\n  var line, col, count;\n  if (this.textarea) {\n    setTimeout(function () {\n      // this to verify we get the most updated textarea cursor selection\n      var selectionRange = (0,util.getInputSelection)(me.textarea);\n      if (selectionRange.startIndex !== selectionRange.endIndex) {\n        count = selectionRange.endIndex - selectionRange.startIndex;\n      }\n      if (count && me.cursorInfo && me.cursorInfo.line === selectionRange.end.row && me.cursorInfo.column === selectionRange.end.column) {\n        line = selectionRange.start.row;\n        col = selectionRange.start.column;\n      } else {\n        line = selectionRange.end.row;\n        col = selectionRange.end.column;\n      }\n      me.cursorInfo = {\n        line: line,\n        column: col,\n        count: count\n      };\n      if (me.options.statusBar) {\n        updateDisplay();\n      }\n    }, 0);\n  } else if (this.aceEditor && this.curserInfoElements) {\n    var curserPos = this.aceEditor.getCursorPosition();\n    var selectedText = this.aceEditor.getSelectedText();\n    line = curserPos.row + 1;\n    col = curserPos.column + 1;\n    count = selectedText.length;\n    me.cursorInfo = {\n      line: line,\n      column: col,\n      count: count\n    };\n    if (this.options.statusBar) {\n      updateDisplay();\n    }\n  }\n  function updateDisplay() {\n    if (me.curserInfoElements.countVal.innerText !== count) {\n      me.curserInfoElements.countVal.innerText = count;\n      me.curserInfoElements.countVal.style.display = count ? 'inline' : 'none';\n      me.curserInfoElements.countLabel.style.display = count ? 'inline' : 'none';\n    }\n    me.curserInfoElements.lnVal.innerText = line;\n    me.curserInfoElements.colVal.innerText = col;\n  }\n};\n\n/**\n * emits selection change callback, if given\n * @private\n */\ntextmode._emitSelectionChange = function () {\n  if (this._selectionChangedHandler) {\n    var currentSelection = this.getTextSelection();\n    this._selectionChangedHandler(currentSelection.start, currentSelection.end, currentSelection.text);\n  }\n};\n\n/**\n * refresh ERROR annotations state\n * error annotations are handled by the ace json mode (ace/mode/json)\n * validation annotations are handled by this mode\n * therefore in order to refresh we send only the annotations of error type in order to maintain its state\n * @private\n */\ntextmode._refreshAnnotations = function () {\n  var session = this.aceEditor && this.aceEditor.getSession();\n  if (session) {\n    var errEnnotations = session.getAnnotations().filter(function (annotation) {\n      return annotation.type === 'error';\n    });\n    session.setAnnotations(errEnnotations);\n  }\n};\n\n/**\n * Destroy the editor. Clean up DOM, event listeners, and web workers.\n */\ntextmode.destroy = function () {\n  // remove old ace editor\n  if (this.aceEditor) {\n    this.aceEditor.destroy();\n    this.aceEditor = null;\n  }\n  if (this.frame && this.container && this.frame.parentNode === this.container) {\n    this.container.removeChild(this.frame);\n  }\n  if (this.modeSwitcher) {\n    this.modeSwitcher.destroy();\n    this.modeSwitcher = null;\n  }\n  this.textarea = null;\n  this._debouncedValidate = null;\n\n  // Removing the FocusTracker set to track the editor's focus event\n  this.frameFocusTracker.destroy();\n};\n\n/**\n * Compact the code in the text editor\n */\ntextmode.compact = function () {\n  var json = this.get();\n  var text = JSON.stringify(json);\n  this.updateText(text);\n};\n\n/**\n * Format the code in the text editor\n */\ntextmode.format = function () {\n  var json = this.get();\n  var text = JSON.stringify(json, null, this.indentation);\n  this.updateText(text);\n};\n\n/**\n * Repair the code in the text editor\n */\ntextmode.repair = function () {\n  var text = this.getText();\n  try {\n    var repairedText = (0,jsonrepair/* jsonrepair */.m)(text);\n    this.updateText(repairedText);\n  } catch (err) {\n    // repair was not successful, do nothing\n  }\n};\n\n/**\n * Set focus to the formatter\n */\ntextmode.focus = function () {\n  if (this.textarea) {\n    this.textarea.focus();\n  }\n  if (this.aceEditor) {\n    this.aceEditor.focus();\n  }\n};\n\n/**\n * Resize the formatter\n */\ntextmode.resize = function () {\n  if (this.aceEditor) {\n    var force = false;\n    this.aceEditor.resize(force);\n  }\n};\n\n/**\n * Set json data in the formatter\n * @param {*} json\n */\ntextmode.set = function (json) {\n  this.setText(JSON.stringify(json, null, this.indentation));\n};\n\n/**\n * Update data. Same as calling `set` in text/code mode.\n * @param {*} json\n */\ntextmode.update = function (json) {\n  this.updateText(JSON.stringify(json, null, this.indentation));\n};\n\n/**\n * Get json data from the formatter\n * @return {*} json\n */\ntextmode.get = function () {\n  var text = this.getText();\n  return (0,util.parse)(text); // this can throw an error\n};\n\n/**\n * Get the text contents of the editor\n * @return {String} jsonText\n */\ntextmode.getText = function () {\n  if (this.textarea) {\n    return this.textarea.value;\n  }\n  if (this.aceEditor) {\n    return this.aceEditor.getValue();\n  }\n  return '';\n};\n\n/**\n * Set the text contents of the editor and optionally clear the history\n * @param {String} jsonText\n * @param {boolean} clearHistory   Only applicable for mode 'code'\n * @private\n */\ntextmode._setText = function (jsonText, clearHistory) {\n  var _this4 = this;\n  var text = this.options.escapeUnicode === true ? (0,util.escapeUnicodeChars)(jsonText) : jsonText;\n  if (this.textarea) {\n    this.textarea.value = text;\n  }\n  if (this.aceEditor) {\n    // prevent emitting onChange events while setting new text\n    this.onChangeDisabled = true;\n    this.aceEditor.setValue(text, -1);\n    this.onChangeDisabled = false;\n    if (clearHistory) {\n      // prevent initial undo action clearing the initial contents\n      var me = this;\n      setTimeout(function () {\n        if (me.aceEditor) {\n          me.aceEditor.session.getUndoManager().reset();\n        }\n      });\n    }\n    setTimeout(function () {\n      if (_this4._updateHistoryButtons) {\n        _this4._updateHistoryButtons();\n      }\n    });\n  }\n\n  // validate JSON schema\n  this._debouncedValidate();\n};\n\n/**\n * Set the text contents of the editor\n * @param {String} jsonText\n */\ntextmode.setText = function (jsonText) {\n  this._setText(jsonText, true);\n};\n\n/**\n * Update the text contents\n * @param {string} jsonText\n */\ntextmode.updateText = function (jsonText) {\n  // don't update if there are no changes\n  if (this.getText() === jsonText) {\n    return;\n  }\n  this._setText(jsonText, false);\n};\n\n/**\n * Validate current JSON object against the configured JSON schema\n * Throws an exception when no JSON schema is configured\n */\ntextmode.validate = function () {\n  var _this5 = this;\n  var schemaErrors = [];\n  var parseErrors = [];\n  var json;\n  try {\n    json = this.get(); // this can fail when there is no valid json\n\n    // execute JSON schema validation (ajv)\n    if (this.validateSchema) {\n      var valid = this.validateSchema(json);\n      if (!valid) {\n        schemaErrors = this.validateSchema.errors.map(function (error) {\n          error.type = 'validation';\n          return (0,util.improveSchemaError)(error);\n        });\n      }\n    }\n\n    // execute custom validation and after than merge and render all errors\n    // TODO: implement a better mechanism for only using the last validation action\n    this.validationSequence = (this.validationSequence || 0) + 1;\n    var me = this;\n    var seq = this.validationSequence;\n    return validateCustom(json, this.options.onValidate).then(function (customValidationErrors) {\n      // only apply when there was no other validation started whilst resolving async results\n      if (seq === me.validationSequence) {\n        var errors = schemaErrors.concat(parseErrors).concat(customValidationErrors);\n        me._renderErrors(errors);\n        if (typeof _this5.options.onValidationError === 'function' && (0,util.isValidationErrorChanged)(errors, _this5.lastSchemaErrors)) {\n          _this5.options.onValidationError.call(_this5, errors);\n        }\n        _this5.lastSchemaErrors = errors;\n      }\n      return _this5.lastSchemaErrors;\n    });\n  } catch (err) {\n    if (this.getText()) {\n      // try to extract the line number from the jsonlint error message\n      var match = /\\w*line\\s*(\\d+)\\w*/g.exec(err.message);\n      var line;\n      if (match) {\n        line = +match[1];\n      }\n      parseErrors = [{\n        type: 'error',\n        message: err.message.replace(/\\n/g, '<br>'),\n        line: line\n      }];\n    }\n    this._renderErrors(parseErrors);\n    if (typeof this.options.onValidationError === 'function' && (0,util.isValidationErrorChanged)(parseErrors, this.lastSchemaErrors)) {\n      this.options.onValidationError.call(this, parseErrors);\n    }\n    this.lastSchemaErrors = parseErrors;\n    return Promise.resolve(this.lastSchemaErrors);\n  }\n};\ntextmode._validateAndCatch = function () {\n  this.validate()[\"catch\"](function (err) {\n    console.error('Error running validation:', err);\n  });\n};\ntextmode._renderErrors = function (errors) {\n  var jsonText = this.getText();\n  var errorPaths = [];\n  errors.reduce(function (acc, curr) {\n    if (typeof curr.dataPath === 'string' && acc.indexOf(curr.dataPath) === -1) {\n      acc.push(curr.dataPath);\n    }\n    return acc;\n  }, errorPaths);\n  var errorLocations = (0,util.getPositionForPath)(jsonText, errorPaths);\n\n  // render annotations in Ace Editor (if any)\n  if (this.aceEditor) {\n    this.annotations = errorLocations.map(function (errLoc) {\n      var validationErrors = errors.filter(function (err) {\n        return err.dataPath === errLoc.path;\n      });\n      var message = validationErrors.map(function (err) {\n        return err.message;\n      }).join('\\n');\n      if (message) {\n        return {\n          row: errLoc.line,\n          column: errLoc.column,\n          text: 'Schema validation error' + (validationErrors.length !== 1 ? 's' : '') + ': \\n' + message,\n          type: 'warning',\n          source: 'jsoneditor'\n        };\n      }\n      return {};\n    });\n    this._refreshAnnotations();\n  }\n\n  // render errors in the errors table (if any)\n  this.errorTable.setErrors(errors, errorLocations);\n\n  // update the height of the ace editor\n  if (this.aceEditor) {\n    var force = false;\n    this.aceEditor.resize(force);\n  }\n};\n\n/**\n * Get the selection details\n * @returns {{start:{row:Number, column:Number},end:{row:Number, column:Number},text:String}}\n */\ntextmode.getTextSelection = function () {\n  var selection = {};\n  if (this.textarea) {\n    var selectionRange = (0,util.getInputSelection)(this.textarea);\n    if (this.cursorInfo && this.cursorInfo.line === selectionRange.end.row && this.cursorInfo.column === selectionRange.end.column) {\n      // selection direction is bottom => up\n      selection.start = selectionRange.end;\n      selection.end = selectionRange.start;\n    } else {\n      selection = selectionRange;\n    }\n    return {\n      start: selection.start,\n      end: selection.end,\n      text: this.textarea.value.substring(selectionRange.startIndex, selectionRange.endIndex)\n    };\n  }\n  if (this.aceEditor) {\n    var aceSelection = this.aceEditor.getSelection();\n    var selectedText = this.aceEditor.getSelectedText();\n    var range = aceSelection.getRange();\n    var lead = aceSelection.getSelectionLead();\n    if (lead.row === range.end.row && lead.column === range.end.column) {\n      selection = range;\n    } else {\n      // selection direction is bottom => up\n      selection.start = range.end;\n      selection.end = range.start;\n    }\n    return {\n      start: {\n        row: selection.start.row + 1,\n        column: selection.start.column + 1\n      },\n      end: {\n        row: selection.end.row + 1,\n        column: selection.end.column + 1\n      },\n      text: selectedText\n    };\n  }\n};\n\n/**\n * Callback registration for selection change\n * @param {selectionCallback} callback\n *\n * @callback selectionCallback\n */\ntextmode.onTextSelectionChange = function (callback) {\n  if (typeof callback === 'function') {\n    this._selectionChangedHandler = (0,util.debounce)(callback, this.DEBOUNCE_INTERVAL);\n  }\n};\n\n/**\n * Set selection on editor's text\n * @param {{row:Number, column:Number}} startPos selection start position\n * @param {{row:Number, column:Number}} endPos selected end position\n */\ntextmode.setTextSelection = function (startPos, endPos) {\n  if (!startPos || !endPos) return;\n  if (this.textarea) {\n    var startIndex = (0,util.getIndexForPosition)(this.textarea, startPos.row, startPos.column);\n    var endIndex = (0,util.getIndexForPosition)(this.textarea, endPos.row, endPos.column);\n    if (startIndex > -1 && endIndex > -1) {\n      if (this.textarea.setSelectionRange) {\n        this.textarea.focus();\n        this.textarea.setSelectionRange(startIndex, endIndex);\n      } else if (this.textarea.createTextRange) {\n        // IE < 9\n        var range = this.textarea.createTextRange();\n        range.collapse(true);\n        range.moveEnd('character', endIndex);\n        range.moveStart('character', startIndex);\n        range.select();\n      }\n      var rows = (this.textarea.value.match(/\\n/g) || []).length + 1;\n      var lineHeight = this.textarea.scrollHeight / rows;\n      var selectionScrollPos = startPos.row * lineHeight;\n      this.textarea.scrollTop = selectionScrollPos > this.textarea.clientHeight ? selectionScrollPos - this.textarea.clientHeight / 2 : 0;\n    }\n  } else if (this.aceEditor) {\n    var _range = {\n      start: {\n        row: startPos.row - 1,\n        column: startPos.column - 1\n      },\n      end: {\n        row: endPos.row - 1,\n        column: endPos.column - 1\n      }\n    };\n    this.aceEditor.selection.setRange(_range);\n    this.aceEditor.scrollToLine(startPos.row - 1, true);\n  }\n};\nfunction load() {\n  try {\n    this.format();\n  } catch (err) {\n    // in case of an error, just move on, failing formatting is not a big deal\n  }\n}\n\n// define modes\nvar textModeMixins = [{\n  mode: 'text',\n  mixin: textmode,\n  data: 'text',\n  load: load\n}, {\n  mode: 'code',\n  mixin: textmode,\n  data: 'text',\n  load: load\n}];\n\n/***/ }),\n\n/***/ 5633:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  treeModeMixins: function() { return /* binding */ treeModeMixins; }\n});\n\n;// ./src/js/autocomplete.js\n\n\n// Helper functions for handling both string and object option formats\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar getOptionText = function getOptionText(option) {\n  if (option == null) return '';\n  return typeof option === 'string' ? option : option.text || '';\n};\nvar getOptionValue = function getOptionValue(option) {\n  if (option == null) return '';\n  return typeof option === 'string' ? option : option.value || option.text || '';\n};\nvar isObject = function isObject(value) {\n  return value !== null && _typeof(value) === 'object';\n};\nvar normalizeCase = function normalizeCase() {\n  var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var config = arguments.length > 1 ? arguments[1] : undefined;\n  return config.caseSensitive ? text : text.toLowerCase();\n};\nvar ensureStringOption = function ensureStringOption(option) {\n  // Keep objects as-is, but convert primitives to strings to prevent breaking changes\n  return isObject(option) ? option : String(option);\n};\nvar getHighlightedTextParts = function getHighlightedTextParts(token, row, config) {\n  var rowText = getOptionText(row);\n  var rowValue = getOptionValue(row);\n  var tokenLower = normalizeCase(token, config);\n  var rowTextLower = normalizeCase(rowText, config);\n  var rowValueLower = normalizeCase(rowValue, config);\n\n  // Find the best match position for highlighting\n  var matchIndex = -1;\n  var matchLength = token.length;\n  var displayText = rowText;\n\n  // Prefer text matches over value matches for display\n  if (rowTextLower.indexOf(tokenLower) > -1) {\n    matchIndex = rowTextLower.indexOf(tokenLower);\n    displayText = rowText;\n  } else if (rowValueLower.indexOf(tokenLower) > -1) {\n    matchIndex = rowValueLower.indexOf(tokenLower);\n    displayText = rowText;\n  }\n  if (matchIndex > -1) {\n    return {\n      beforeText: displayText.substring(0, matchIndex),\n      matchText: displayText.substring(matchIndex, matchIndex + matchLength),\n      afterText: displayText.substring(matchIndex + matchLength),\n      displayText: displayText\n    };\n  } else {\n    // No match found, return the display text as-is\n    return {\n      beforeText: '',\n      matchText: '',\n      afterText: displayText,\n      displayText: displayText\n    };\n  }\n};\n\n// Helper function to reduce duplication in filter functions\nvar matchesFilter = function matchesFilter(token, match, config, matchFunction) {\n  var normalizedToken = normalizeCase(token, config);\n  if (isObject(match)) {\n    // Check both text and value properties for object matches\n    var matchText = getOptionText(match);\n    var matchValue = getOptionValue(match);\n    var normalizedText = normalizeCase(matchText, config);\n    var normalizedValue = normalizeCase(matchValue, config);\n    return matchFunction(normalizedText, normalizedToken) || matchFunction(normalizedValue, normalizedToken);\n  } else {\n    // Handle simple string matches\n    var normalizedMatch = normalizeCase(String(match), config);\n    return matchFunction(normalizedMatch, normalizedToken);\n  }\n};\nvar defaultFilterFunction = {\n  start: function start(token, match, config) {\n    return matchesFilter(token, match, config, function (normalizedText, normalizedToken) {\n      return normalizedText.indexOf(normalizedToken) === 0;\n    });\n  },\n  contain: function contain(token, match, config) {\n    return matchesFilter(token, match, config, function (normalizedText, normalizedToken) {\n      return normalizedText.indexOf(normalizedToken) > -1;\n    });\n  }\n};\nfunction autocomplete(config) {\n  config = config || {};\n  config.filter = config.filter || 'start';\n  config.trigger = config.trigger || 'keydown';\n  config.confirmKeys = config.confirmKeys || [39, 35, 9]; // right, end, tab\n  config.caseSensitive = config.caseSensitive || false; // autocomplete case sensitive\n\n  var fontSize = '';\n  var fontFamily = '';\n  var wrapper = document.createElement('div');\n  wrapper.style.position = 'relative';\n  wrapper.style.outline = '0';\n  wrapper.style.border = '0';\n  wrapper.style.margin = '0';\n  wrapper.style.padding = '0';\n  var dropDown = document.createElement('div');\n  dropDown.className = 'autocomplete dropdown';\n  dropDown.style.position = 'absolute';\n  dropDown.style.visibility = 'hidden';\n  var spacer;\n  var leftSide; // <-- it will contain the leftSide part of the textfield (the bit that was already autocompleted)\n  var createDropDownController = function createDropDownController(elem, rs) {\n    var rows = [];\n    var ix = 0;\n    var oldIndex = -1;\n\n    // TODO: move this styling in JS to SCSS\n    var onMouseOver = function onMouseOver() {\n      this.style.backgroundColor = '#ddd';\n    };\n    var onMouseOut = function onMouseOut() {\n      this.style.backgroundColor = '';\n    };\n    var onMouseDown = function onMouseDown() {\n      p.hide();\n      p.onmouseselection(this.__hint, p.rs);\n    };\n    var p = {\n      rs: rs,\n      hide: function hide() {\n        elem.style.visibility = 'hidden';\n        // rs.hideDropDown();\n      },\n      refresh: function refresh(token, array) {\n        elem.style.visibility = 'hidden';\n        ix = 0;\n        elem.textContent = '';\n        var vph = window.innerHeight || document.documentElement.clientHeight;\n        var rect = elem.parentNode.getBoundingClientRect();\n        var distanceToTop = rect.top - 6; // heuristic give 6px\n        var distanceToBottom = vph - rect.bottom - 6; // distance from the browser border.\n\n        rows = [];\n        var filterFn = typeof config.filter === 'function' ? config.filter : defaultFilterFunction[config.filter];\n        var filtered = !filterFn ? [] : array.filter(function (match) {\n          return filterFn(token, match, config);\n        });\n        rows = filtered.map(function (row) {\n          var divRow = document.createElement('div');\n          divRow.className = 'item';\n          // divRow.style.color = config.color;\n          divRow.onmouseover = onMouseOver;\n          divRow.onmouseout = onMouseOut;\n          divRow.onmousedown = onMouseDown;\n          divRow.__hint = row;\n          divRow.textContent = '';\n          var _getHighlightedTextPa = getHighlightedTextParts(token, row, config),\n            beforeText = _getHighlightedTextPa.beforeText,\n            matchText = _getHighlightedTextPa.matchText,\n            afterText = _getHighlightedTextPa.afterText;\n\n          // Add text before match (if any)\n          if (beforeText) {\n            divRow.appendChild(document.createTextNode(beforeText));\n          }\n\n          // Add highlighted match (if any)\n          if (matchText) {\n            var b = document.createElement('b');\n            b.appendChild(document.createTextNode(matchText));\n            divRow.appendChild(b);\n          }\n\n          // Add text after match\n          if (afterText) {\n            divRow.appendChild(document.createTextNode(afterText));\n          }\n          elem.appendChild(divRow);\n          return divRow;\n        });\n        if (rows.length === 0) {\n          return; // nothing to show.\n        }\n        var firstRowValue = getOptionValue(rows[0].__hint);\n        var hasOptionText = isObject(rows[0].__hint) && 'text' in rows[0].__hint;\n        if (rows.length === 1 && normalizeCase(token, config) === normalizeCase(firstRowValue, config) && !hasOptionText) {\n          return; // do not show the dropDown if it has only one element which matches what we have just displayed and has no option.text property.\n        }\n        p.highlight(0);\n        if (distanceToTop > distanceToBottom * 3) {\n          // Heuristic (only when the distance to the to top is 4 times more than distance to the bottom\n          elem.style.maxHeight = distanceToTop + 'px'; // we display the dropDown on the top of the input text\n          elem.style.top = '';\n          elem.style.bottom = '100%';\n        } else {\n          elem.style.top = '100%';\n          elem.style.bottom = '';\n          elem.style.maxHeight = distanceToBottom + 'px';\n        }\n        elem.style.visibility = 'visible';\n      },\n      highlight: function highlight(index) {\n        if (oldIndex !== -1 && rows[oldIndex]) {\n          rows[oldIndex].className = 'item';\n        }\n        rows[index].className = 'item hover';\n        oldIndex = index;\n      },\n      move: function move(step) {\n        // moves the selection either up or down (unless it's not possible) step is either +1 or -1.\n        if (elem.style.visibility === 'hidden') return ''; // nothing to move if there is no dropDown. (this happens if the user hits escape and then down or up)\n        if (ix + step === -1 || ix + step === rows.length) return rows[ix].__hint; // NO CIRCULAR SCROLLING.\n        ix += step;\n        p.highlight(ix);\n        return rows[ix].__hint; // txtShadow.value = uRows[uIndex].__hint ;\n      },\n      onmouseselection: function onmouseselection() {} // it will be overwritten.\n    };\n    return p;\n  };\n  function setEndOfContenteditable(contentEditableElement) {\n    var range, selection;\n    if (document.createRange) {\n      // Firefox, Chrome, Opera, Safari, IE 9+\n      range = document.createRange(); // Create a range (a range is a like the selection but invisible)\n      range.selectNodeContents(contentEditableElement); // Select the entire contents of the element with the range\n      range.collapse(false); // collapse the range to the end point. false means collapse to end rather than the start\n      selection = window.getSelection(); // get the selection object (allows you to change selection)\n      selection.removeAllRanges(); // remove any selections already made\n      selection.addRange(range); // make the range you have just created the visible selection\n    } else if (document.selection) {\n      // IE 8 and lower\n      range = document.body.createTextRange(); // Create a range (a range is a like the selection but invisible)\n      range.moveToElementText(contentEditableElement); // Select the entire contents of the element with the range\n      range.collapse(false); // collapse the range to the end point. false means collapse to end rather than the start\n      range.select(); // Select the range (make it the visible selection\n    }\n  }\n  function calculateWidthForText(text) {\n    if (spacer === undefined) {\n      // on first call only.\n      spacer = document.createElement('span');\n      spacer.style.visibility = 'hidden';\n      spacer.style.position = 'fixed';\n      spacer.style.outline = '0';\n      spacer.style.margin = '0';\n      spacer.style.padding = '0';\n      spacer.style.border = '0';\n      spacer.style.left = '0';\n      spacer.style.whiteSpace = 'pre';\n      spacer.style.fontSize = fontSize;\n      spacer.style.fontFamily = fontFamily;\n      spacer.style.fontWeight = 'normal';\n      document.body.appendChild(spacer);\n    }\n    spacer.textContent = text;\n    return spacer.getBoundingClientRect().right;\n  }\n  var rs = {\n    onArrowDown: function onArrowDown() {},\n    // defaults to no action.\n    onArrowUp: function onArrowUp() {},\n    // defaults to no action.\n    onEnter: function onEnter() {},\n    // defaults to no action.\n    onTab: function onTab() {},\n    // defaults to no action.\n    startFrom: 0,\n    options: [],\n    element: null,\n    elementHint: null,\n    elementStyle: null,\n    wrapper: wrapper,\n    // Only to allow  easy access to the HTML elements to the final user (possibly for minor customizations)\n    show: function show(element, startPos, options) {\n      var _this = this;\n      this.startFrom = startPos;\n      this.wrapper.remove();\n      if (this.elementHint) {\n        this.elementHint.remove();\n        this.elementHint = null;\n      }\n      if (fontSize === '') {\n        fontSize = window.getComputedStyle(element).getPropertyValue('font-size');\n      }\n      if (fontFamily === '') {\n        fontFamily = window.getComputedStyle(element).getPropertyValue('font-family');\n      }\n      dropDown.style.marginLeft = '0';\n      dropDown.style.marginTop = element.getBoundingClientRect().height + 'px';\n      this.options = options.map(ensureStringOption);\n      if (this.element !== element) {\n        this.element = element;\n        this.elementStyle = {\n          zIndex: this.element.style.zIndex,\n          position: this.element.style.position,\n          backgroundColor: this.element.style.backgroundColor,\n          borderColor: this.element.style.borderColor\n        };\n      }\n      this.element.style.zIndex = 3;\n      this.element.style.position = 'relative';\n      this.element.style.backgroundColor = 'transparent';\n      this.element.style.borderColor = 'transparent';\n      this.elementHint = element.cloneNode();\n      this.elementHint.className = 'autocomplete hint';\n      this.elementHint.style.zIndex = 2;\n      this.elementHint.style.position = 'absolute';\n      this.elementHint.onfocus = function () {\n        _this.element.focus();\n      };\n      if (this.element.addEventListener) {\n        this.element.removeEventListener('keydown', keyDownHandler);\n        this.element.addEventListener('keydown', keyDownHandler, false);\n        this.element.removeEventListener('blur', onBlurHandler);\n        this.element.addEventListener('blur', onBlurHandler, false);\n      }\n      wrapper.appendChild(this.elementHint);\n      wrapper.appendChild(dropDown);\n      element.parentElement.appendChild(wrapper);\n      this.repaint(element);\n    },\n    setText: function setText(text) {\n      this.element.innerText = text;\n    },\n    getText: function getText() {\n      return this.element.innerText;\n    },\n    hideDropDown: function hideDropDown() {\n      this.wrapper.remove();\n      if (this.elementHint) {\n        this.elementHint.remove();\n        this.elementHint = null;\n        dropDownController.hide();\n        this.element.style.zIndex = this.elementStyle.zIndex;\n        this.element.style.position = this.elementStyle.position;\n        this.element.style.backgroundColor = this.elementStyle.backgroundColor;\n        this.element.style.borderColor = this.elementStyle.borderColor;\n      }\n    },\n    repaint: function repaint(element) {\n      var text = element.innerText;\n      text = text.replace('\\n', '');\n      var optionsLength = this.options.length;\n\n      // breaking text in leftSide and token.\n\n      var token = text.substring(this.startFrom);\n      leftSide = text.substring(0, this.startFrom);\n\n      // Use the same filter logic as the dropdown for consistency\n      var filterFn = typeof config.filter === 'function' ? config.filter : defaultFilterFunction[config.filter];\n      for (var i = 0; i < optionsLength; i++) {\n        var opt = this.options[i];\n        if (filterFn && filterFn(token, opt, config)) {\n          var optText = getOptionText(opt);\n          var optValue = getOptionValue(opt);\n\n          // For hints, prioritize matches that start with the token for better UX\n          var hintText = '';\n          var normalizedToken = normalizeCase(token, config);\n          var normalizedOptText = normalizeCase(optText, config);\n          var normalizedOptValue = normalizeCase(optValue, config);\n          if (normalizedOptText.indexOf(normalizedToken) === 0) {\n            // Text starts with token - show completion\n            hintText = leftSide + token + optText.substring(token.length);\n          } else if (normalizedOptValue.indexOf(normalizedToken) === 0) {\n            // Value starts with token - show completion\n            hintText = leftSide + token + optValue.substring(token.length);\n          } else {\n            // Contains match but doesn't start with token - just show the token\n            hintText = leftSide + token;\n          }\n          this.elementHint.innerText = hintText;\n          this.elementHint.realInnerText = leftSide + optValue;\n          break;\n        }\n      }\n      // moving the dropDown and refreshing it.\n      dropDown.style.left = calculateWidthForText(leftSide) + 'px';\n      dropDownController.refresh(token, this.options);\n      this.elementHint.style.width = calculateWidthForText(this.elementHint.innerText) + 10 + 'px';\n      var wasDropDownHidden = dropDown.style.visibility === 'hidden';\n      if (!wasDropDownHidden) {\n        this.elementHint.style.width = calculateWidthForText(this.elementHint.innerText) + dropDown.clientWidth + 'px';\n      }\n    }\n  };\n  var dropDownController = createDropDownController(dropDown, rs);\n  var keyDownHandler = function (e) {\n    // console.log(\"Keydown:\" + e.keyCode);\n    e = e || window.event;\n    var keyCode = e.keyCode;\n    if (this.elementHint == null) return;\n    if (keyCode === 33) {\n      return;\n    } // page up (do nothing)\n    if (keyCode === 34) {\n      return;\n    } // page down (do nothing);\n\n    if (keyCode === 27) {\n      // escape\n      rs.hideDropDown();\n      rs.element.focus();\n      e.preventDefault();\n      e.stopPropagation();\n      return;\n    }\n    var text = this.element.innerText;\n    text = text.replace('\\n', '');\n    if (config.confirmKeys.indexOf(keyCode) >= 0) {\n      //  (autocomplete triggered)\n      if (keyCode === 9) {\n        if (this.elementHint.innerText.length === 0) {\n          rs.onTab();\n        }\n      }\n      if (this.elementHint.innerText.length > 0) {\n        // if there is a hint\n        if (this.element.innerText !== this.elementHint.realInnerText) {\n          this.element.innerText = this.elementHint.realInnerText;\n          rs.hideDropDown();\n          setEndOfContenteditable(this.element);\n          if (keyCode === 9) {\n            rs.element.focus();\n            e.preventDefault();\n            e.stopPropagation();\n          }\n        }\n      }\n      return;\n    }\n    if (keyCode === 13) {\n      // enter  (autocomplete triggered)\n      if (this.elementHint.innerText.length === 0) {\n        // if there is a hint\n        rs.onEnter();\n      } else {\n        var wasDropDownHidden = dropDown.style.visibility === 'hidden';\n        dropDownController.hide();\n        if (wasDropDownHidden) {\n          rs.hideDropDown();\n          rs.element.focus();\n          rs.onEnter();\n          return;\n        }\n        this.element.innerText = this.elementHint.realInnerText;\n        rs.hideDropDown();\n        setEndOfContenteditable(this.element);\n        e.preventDefault();\n        e.stopPropagation();\n      }\n      return;\n    }\n    if (keyCode === 40) {\n      // down\n      var token = text.substring(this.startFrom);\n      var m = dropDownController.move(+1);\n      if (m === '') {\n        rs.onArrowDown();\n      }\n      this.elementHint.innerText = leftSide + token + getOptionText(m).substring(token.length);\n      this.elementHint.realInnerText = leftSide + getOptionValue(m);\n      e.preventDefault();\n      e.stopPropagation();\n      return;\n    }\n    if (keyCode === 38) {\n      // up\n      var _token = text.substring(this.startFrom);\n      var _m = dropDownController.move(-1);\n      if (_m === '') {\n        rs.onArrowUp();\n      }\n      this.elementHint.innerText = leftSide + _token + getOptionText(_m).substring(_token.length);\n      this.elementHint.realInnerText = leftSide + getOptionValue(_m);\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }.bind(rs);\n  var onBlurHandler = function onBlurHandler(e) {\n    rs.hideDropDown();\n    // console.log(\"Lost focus.\");\n  };\n  dropDownController.onmouseselection = function (option, rs) {\n    var optionValue = getOptionValue(option);\n    rs.element.innerText = rs.elementHint.innerText = leftSide + optionValue;\n    rs.hideDropDown();\n    window.setTimeout(function () {\n      rs.element.focus();\n      setEndOfContenteditable(rs.element);\n    }, 1);\n  };\n  return rs;\n}\n// EXTERNAL MODULE: ./src/js/ContextMenu.js\nvar ContextMenu = __webpack_require__(6545);\n// EXTERNAL MODULE: ./src/js/FocusTracker.js\nvar FocusTracker = __webpack_require__(2877);\n;// ./src/js/Highlighter.js\n\n\n/**\n * The highlighter can highlight/unhighlight a node, and\n * animate the visibility of a context menu.\n * @constructor Highlighter\n */\nfunction Highlighter_typeof(o) { \"@babel/helpers - typeof\"; return Highlighter_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Highlighter_typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == Highlighter_typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != Highlighter_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Highlighter_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar Highlighter = /*#__PURE__*/function () {\n  function Highlighter() {\n    _classCallCheck(this, Highlighter);\n    this.locked = false;\n  }\n\n  /**\n   * Hightlight given node and its childs\n   * @param {Node} node\n   */\n  return _createClass(Highlighter, [{\n    key: \"highlight\",\n    value: function highlight(node) {\n      if (this.locked) {\n        return;\n      }\n      if (this.node !== node) {\n        // unhighlight current node\n        if (this.node) {\n          this.node.setHighlight(false);\n        }\n\n        // highlight new node\n        this.node = node;\n        this.node.setHighlight(true);\n      }\n\n      // cancel any current timeout\n      this._cancelUnhighlight();\n    }\n\n    /**\n     * Unhighlight currently highlighted node.\n     * Will be done after a delay\n     */\n  }, {\n    key: \"unhighlight\",\n    value: function unhighlight() {\n      if (this.locked) {\n        return;\n      }\n      var me = this;\n      if (this.node) {\n        this._cancelUnhighlight();\n\n        // do the unhighlighting after a small delay, to prevent re-highlighting\n        // the same node when moving from the drag-icon to the contextmenu-icon\n        // or vice versa.\n        this.unhighlightTimer = setTimeout(function () {\n          me.node.setHighlight(false);\n          me.node = undefined;\n          me.unhighlightTimer = undefined;\n        }, 0);\n      }\n    }\n\n    /**\n     * Cancel an unhighlight action (if before the timeout of the unhighlight action)\n     * @private\n     */\n  }, {\n    key: \"_cancelUnhighlight\",\n    value: function _cancelUnhighlight() {\n      if (this.unhighlightTimer) {\n        clearTimeout(this.unhighlightTimer);\n        this.unhighlightTimer = undefined;\n      }\n    }\n\n    /**\n     * Lock highlighting or unhighlighting nodes.\n     * methods highlight and unhighlight do not work while locked.\n     */\n  }, {\n    key: \"lock\",\n    value: function lock() {\n      this.locked = true;\n    }\n\n    /**\n     * Unlock highlighting or unhighlighting nodes\n     */\n  }, {\n    key: \"unlock\",\n    value: function unlock() {\n      this.locked = false;\n    }\n  }]);\n}();\n// EXTERNAL MODULE: ./src/js/i18n.js\nvar i18n = __webpack_require__(3057);\n// EXTERNAL MODULE: ./src/js/jmespathQuery.js\nvar jmespathQuery = __webpack_require__(359);\n// EXTERNAL MODULE: ./src/js/ModeSwitcher.js\nvar ModeSwitcher = __webpack_require__(1389);\n// EXTERNAL MODULE: ./node_modules/javascript-natural-sort/naturalSort.js\nvar naturalSort = __webpack_require__(1342);\nvar naturalSort_default = /*#__PURE__*/__webpack_require__.n(naturalSort);\n// EXTERNAL MODULE: ./src/js/createAbsoluteAnchor.js\nvar createAbsoluteAnchor = __webpack_require__(1925);\n// EXTERNAL MODULE: ./src/js/util.js\nvar util = __webpack_require__(6237);\n;// ./src/js/appendNodeFactory.js\n\n\n\n\n\n\n/**\n * A factory function to create an AppendNode, which depends on a Node\n * @param {Node} Node\n */\nfunction appendNodeFactory(Node) {\n  /**\n   * @constructor AppendNode\n   * @extends Node\n   * @param {TreeEditor} editor\n   * Create a new AppendNode. This is a special node which is created at the\n   * end of the list with childs for an object or array\n   */\n  function AppendNode(editor) {\n    /** @type {TreeEditor} */\n    this.editor = editor;\n    this.dom = {};\n  }\n  AppendNode.prototype = new Node();\n\n  /**\n   * Return a table row with an append button.\n   * @return {Element} dom   TR element\n   */\n  AppendNode.prototype.getDom = function () {\n    // TODO: implement a new solution for the append node\n    var dom = this.dom;\n    if (dom.tr) {\n      return dom.tr;\n    }\n    this._updateEditability();\n\n    // a row for the append button\n    var trAppend = document.createElement('tr');\n    trAppend.className = 'jsoneditor-append';\n    trAppend.node = this;\n    dom.tr = trAppend;\n\n    // TODO: consistent naming\n\n    if (this.editor.options.mode === 'tree') {\n      // a cell for the dragarea column\n      dom.tdDrag = document.createElement('td');\n\n      // create context menu\n      var tdMenu = document.createElement('td');\n      dom.tdMenu = tdMenu;\n      var menu = document.createElement('button');\n      menu.type = 'button';\n      menu.className = 'jsoneditor-button jsoneditor-contextmenu-button';\n      menu.title = 'Click to open the actions menu (Ctrl+M)';\n      dom.menu = menu;\n      tdMenu.appendChild(dom.menu);\n    }\n\n    // a cell for the contents (showing text 'empty')\n    var tdAppend = document.createElement('td');\n    var domText = document.createElement('div');\n    domText.appendChild(document.createTextNode('(' + (0,i18n/* translate */.Tl)('empty') + ')'));\n    domText.className = 'jsoneditor-readonly';\n    tdAppend.appendChild(domText);\n    dom.td = tdAppend;\n    dom.text = domText;\n    this.updateDom();\n    return trAppend;\n  };\n\n  /**\n   * Append node doesn't have a path\n   * @returns {null}\n   */\n  AppendNode.prototype.getPath = function () {\n    return null;\n  };\n\n  /**\n   * Append node doesn't have an index\n   * @returns {null}\n   */\n  AppendNode.prototype.getIndex = function () {\n    return null;\n  };\n\n  /**\n   * Update the HTML dom of the Node\n   */\n  AppendNode.prototype.updateDom = function (options) {\n    var dom = this.dom;\n    var tdAppend = dom.td;\n    if (tdAppend) {\n      tdAppend.style.paddingLeft = this.getLevel() * 24 + 26 + 'px';\n      // TODO: not so nice hard coded offset\n    }\n    var domText = dom.text;\n    if (domText) {\n      domText.firstChild.nodeValue = '(' + (0,i18n/* translate */.Tl)('empty') + ' ' + this.parent.type + ')';\n    }\n\n    // attach or detach the contents of the append node:\n    // hide when the parent has childs, show when the parent has no childs\n    var trAppend = dom.tr;\n    if (!this.isVisible()) {\n      if (dom.tr.firstChild) {\n        if (dom.tdDrag) {\n          trAppend.removeChild(dom.tdDrag);\n        }\n        if (dom.tdMenu) {\n          trAppend.removeChild(dom.tdMenu);\n        }\n        trAppend.removeChild(tdAppend);\n      }\n    } else {\n      if (!dom.tr.firstChild) {\n        if (dom.tdDrag) {\n          trAppend.appendChild(dom.tdDrag);\n        }\n        if (dom.tdMenu) {\n          trAppend.appendChild(dom.tdMenu);\n        }\n        trAppend.appendChild(tdAppend);\n      }\n    }\n  };\n\n  /**\n   * Check whether the AppendNode is currently visible.\n   * the AppendNode is visible when its parent has no childs (i.e. is empty).\n   * @return {boolean} isVisible\n   */\n  AppendNode.prototype.isVisible = function () {\n    return this.parent.childs.length === 0;\n  };\n\n  /**\n   * Show a contextmenu for this node\n   * @param {HTMLElement} anchor   The element to attach the menu to.\n   * @param {function} [onClose]   Callback method called when the context menu\n   *                               is being closed.\n   */\n  AppendNode.prototype.showContextMenu = function (anchor, onClose) {\n    var node = this;\n    var appendSubmenu = [{\n      text: (0,i18n/* translate */.Tl)('auto'),\n      className: 'jsoneditor-type-auto',\n      title: (0,i18n/* translate */.Tl)('autoType'),\n      click: function click() {\n        node._onAppend('', '', 'auto');\n      }\n    }, {\n      text: (0,i18n/* translate */.Tl)('array'),\n      className: 'jsoneditor-type-array',\n      title: (0,i18n/* translate */.Tl)('arrayType'),\n      click: function click() {\n        node._onAppend('', []);\n      }\n    }, {\n      text: (0,i18n/* translate */.Tl)('object'),\n      className: 'jsoneditor-type-object',\n      title: (0,i18n/* translate */.Tl)('objectType'),\n      click: function click() {\n        node._onAppend('', {});\n      }\n    }, {\n      text: (0,i18n/* translate */.Tl)('string'),\n      className: 'jsoneditor-type-string',\n      title: (0,i18n/* translate */.Tl)('stringType'),\n      click: function click() {\n        node._onAppend('', '', 'string');\n      }\n    }];\n    node.addTemplates(appendSubmenu, true);\n    var items = [\n    // create append button\n    {\n      text: (0,i18n/* translate */.Tl)('appendText'),\n      title: (0,i18n/* translate */.Tl)('appendTitleAuto'),\n      submenuTitle: (0,i18n/* translate */.Tl)('appendSubmenuTitle'),\n      className: 'jsoneditor-insert',\n      click: function click() {\n        node._onAppend('', '', 'auto');\n      },\n      submenu: appendSubmenu\n    }];\n    if (this.editor.options.onCreateMenu) {\n      var path = node.parent.getPath();\n      items = this.editor.options.onCreateMenu(items, {\n        type: 'append',\n        path: path,\n        paths: [path]\n      });\n    }\n    var menu = new ContextMenu/* ContextMenu */.t(items, {\n      close: onClose\n    });\n    menu.show(anchor, this.editor.getPopupAnchor());\n  };\n\n  /**\n   * Handle an event. The event is caught centrally by the editor\n   * @param {Event} event\n   */\n  AppendNode.prototype.onEvent = function (event) {\n    var type = event.type;\n    var target = event.target || event.srcElement;\n    var dom = this.dom;\n\n    // highlight the append nodes parent\n    var menu = dom.menu;\n    if (target === menu) {\n      if (type === 'mouseover') {\n        this.editor.highlighter.highlight(this.parent);\n      } else if (type === 'mouseout') {\n        this.editor.highlighter.unhighlight();\n      }\n    }\n\n    // context menu events\n    if (type === 'click' && target === dom.menu) {\n      var highlighter = this.editor.highlighter;\n      highlighter.highlight(this.parent);\n      highlighter.lock();\n      (0,util.addClassName)(dom.menu, 'jsoneditor-selected');\n      this.showContextMenu(dom.menu, function () {\n        (0,util.removeClassName)(dom.menu, 'jsoneditor-selected');\n        highlighter.unlock();\n        highlighter.unhighlight();\n      });\n    }\n    if (type === 'keydown') {\n      this.onKeyDown(event);\n    }\n  };\n  return AppendNode;\n}\n;// ./src/js/showMoreNodeFactory.js\n\n\n\n\n/**\n * A factory function to create an ShowMoreNode, which depends on a Node\n * @param {function} Node\n */\nfunction showMoreNodeFactory(Node) {\n  /**\n   * @constructor ShowMoreNode\n   * @extends Node\n   * @param {TreeEditor} editor\n   * @param {Node} parent\n   * Create a new ShowMoreNode. This is a special node which is created\n   * for arrays or objects having more than 100 items\n   */\n  function ShowMoreNode(editor, parent) {\n    /** @type {TreeEditor} */\n    this.editor = editor;\n    this.parent = parent;\n    this.dom = {};\n  }\n  ShowMoreNode.prototype = new Node();\n\n  /**\n   * Return a table row with an append button.\n   * @return {Element} dom   TR element\n   */\n  ShowMoreNode.prototype.getDom = function () {\n    if (this.dom.tr) {\n      return this.dom.tr;\n    }\n    this._updateEditability();\n\n    // display \"show more\"\n    if (!this.dom.tr) {\n      var me = this;\n      var parent = this.parent;\n      var showMoreButton = document.createElement('a');\n      showMoreButton.appendChild(document.createTextNode((0,i18n/* translate */.Tl)('showMore')));\n      showMoreButton.href = '#';\n      showMoreButton.onclick = function (event) {\n        // TODO: use callback instead of accessing a method of the parent\n        parent.visibleChilds = Math.floor(parent.visibleChilds / parent.getMaxVisibleChilds() + 1) * parent.getMaxVisibleChilds();\n        me.updateDom();\n        parent.showChilds();\n        event.preventDefault();\n        return false;\n      };\n      var showAllButton = document.createElement('a');\n      showAllButton.appendChild(document.createTextNode((0,i18n/* translate */.Tl)('showAll')));\n      showAllButton.href = '#';\n      showAllButton.onclick = function (event) {\n        // TODO: use callback instead of accessing a method of the parent\n        parent.visibleChilds = Infinity;\n        me.updateDom();\n        parent.showChilds();\n        event.preventDefault();\n        return false;\n      };\n      var moreContents = document.createElement('div');\n      var moreText = document.createTextNode(this._getShowMoreText());\n      moreContents.className = 'jsoneditor-show-more';\n      moreContents.appendChild(moreText);\n      moreContents.appendChild(showMoreButton);\n      moreContents.appendChild(document.createTextNode('. '));\n      moreContents.appendChild(showAllButton);\n      moreContents.appendChild(document.createTextNode('. '));\n      var tdContents = document.createElement('td');\n      tdContents.appendChild(moreContents);\n      var moreTr = document.createElement('tr');\n      if (this.editor.options.mode === 'tree') {\n        moreTr.appendChild(document.createElement('td'));\n        moreTr.appendChild(document.createElement('td'));\n      }\n      moreTr.appendChild(tdContents);\n      moreTr.className = 'jsoneditor-show-more';\n      this.dom.tr = moreTr;\n      this.dom.moreContents = moreContents;\n      this.dom.moreText = moreText;\n    }\n    this.updateDom();\n    return this.dom.tr;\n  };\n\n  /**\n   * Update the HTML dom of the Node\n   */\n  ShowMoreNode.prototype.updateDom = function (options) {\n    if (this.isVisible()) {\n      // attach to the right child node (the first non-visible child)\n      this.dom.tr.node = this.parent.childs[this.parent.visibleChilds];\n      if (!this.dom.tr.parentNode) {\n        var nextTr = this.parent._getNextTr();\n        if (nextTr) {\n          nextTr.parentNode.insertBefore(this.dom.tr, nextTr);\n        }\n      }\n\n      // update the counts in the text\n      this.dom.moreText.nodeValue = this._getShowMoreText();\n\n      // update left margin\n      this.dom.moreContents.style.marginLeft = (this.getLevel() + 1) * 24 + 'px';\n    } else {\n      if (this.dom.tr && this.dom.tr.parentNode) {\n        this.dom.tr.parentNode.removeChild(this.dom.tr);\n      }\n    }\n  };\n  ShowMoreNode.prototype._getShowMoreText = function () {\n    return (0,i18n/* translate */.Tl)('showMoreStatus', {\n      visibleChilds: this.parent.visibleChilds,\n      totalChilds: this.parent.childs.length\n    }) + ' ';\n  };\n\n  /**\n   * Check whether the ShowMoreNode is currently visible.\n   * the ShowMoreNode is visible when it's parent has more childs than\n   * the current visibleChilds\n   * @return {boolean} isVisible\n   */\n  ShowMoreNode.prototype.isVisible = function () {\n    return this.parent.expanded && this.parent.childs.length > this.parent.visibleChilds;\n  };\n\n  /**\n   * Handle an event. The event is caught centrally by the editor\n   * @param {Event} event\n   */\n  ShowMoreNode.prototype.onEvent = function (event) {\n    var type = event.type;\n    if (type === 'keydown') {\n      this.onKeyDown(event);\n    }\n  };\n  return ShowMoreNode;\n}\n// EXTERNAL MODULE: ./src/js/showSortModal.js\nvar js_showSortModal = __webpack_require__(2915);\n// EXTERNAL MODULE: ./src/js/showTransformModal.js + 1 modules\nvar js_showTransformModal = __webpack_require__(5609);\n// EXTERNAL MODULE: ./src/js/constants.js\nvar constants = __webpack_require__(660);\n;// ./src/js/Node.js\n\n\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _readOnlyError(r) { throw new TypeError('\"' + r + '\" is read-only'); }\nfunction Node_typeof(o) { \"@babel/helpers - typeof\"; return Node_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Node_typeof(o); }\nfunction Node_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Node_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Node_toPropertyKey(o.key), o); } }\nfunction Node_createClass(e, r, t) { return r && Node_defineProperties(e.prototype, r), t && Node_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Node_toPropertyKey(t) { var i = Node_toPrimitive(t, \"string\"); return \"symbol\" == Node_typeof(i) ? i : i + \"\"; }\nfunction Node_toPrimitive(t, r) { if (\"object\" != Node_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Node_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @constructor Node\n * Create a new Node\n * @param {./treemode} editor\n * @param {Object} [params] Can contain parameters:\n *                          {string}  field\n *                          {boolean} fieldEditable\n *                          {*}       value\n *                          {String}  type  Can have values 'auto', 'array',\n *                                          'object', or 'string'.\n */\nvar Node = /*#__PURE__*/function () {\n  function Node(editor, params) {\n    Node_classCallCheck(this, Node);\n    /** @type {./treemode} */\n    this.editor = editor;\n    this.dom = {};\n    this.expanded = false;\n    if (params && params instanceof Object) {\n      this.setField(params.field, params.fieldEditable);\n      if ('value' in params) {\n        this.setValue(params.value, params.type);\n      }\n      if ('internalValue' in params) {\n        this.setInternalValue(params.internalValue);\n      }\n    } else {\n      this.setField('');\n      this.setValue(null);\n    }\n    this._debouncedOnChangeValue = (0,util.debounce)(this._onChangeValue.bind(this), Node.prototype.DEBOUNCE_INTERVAL);\n    this._debouncedOnChangeField = (0,util.debounce)(this._onChangeField.bind(this), Node.prototype.DEBOUNCE_INTERVAL);\n\n    // starting value for visible children\n    this.visibleChilds = this.getMaxVisibleChilds();\n  }\n  return Node_createClass(Node, [{\n    key: \"getMaxVisibleChilds\",\n    value: function getMaxVisibleChilds() {\n      return this.editor && this.editor.options && this.editor.options.maxVisibleChilds ? this.editor.options.maxVisibleChilds : DEFAULT_MAX_VISIBLE_CHILDS;\n    }\n\n    /**\n     * Determine whether the field and/or value of this node are editable\n     * @private\n     */\n  }, {\n    key: \"_updateEditability\",\n    value: function _updateEditability() {\n      this.editable = {\n        field: true,\n        value: true\n      };\n      if (this.editor) {\n        this.editable.field = this.editor.options.mode === 'tree';\n        this.editable.value = this.editor.options.mode !== 'view';\n        if ((this.editor.options.mode === 'tree' || this.editor.options.mode === 'form') && typeof this.editor.options.onEditable === 'function') {\n          var getValue = this.getValue.bind(this);\n          var editable = this.editor.options.onEditable({\n            field: this.field,\n            get value() {\n              return getValue();\n            },\n            path: this.getPath()\n          });\n          if (typeof editable === 'boolean') {\n            this.editable.field = editable;\n            this.editable.value = editable;\n          } else if (Node_typeof(editable) === 'object' && editable !== null) {\n            if (typeof editable.field === 'boolean') this.editable.field = editable.field;\n            if (typeof editable.value === 'boolean') this.editable.value = editable.value;\n          } else {\n            console.error('Invalid return value for function onEditable.', 'Actual value:', editable, '.', 'Either a boolean or object { field: boolean, value: boolean } expected.');\n            this.editable.field = false;\n            this.editable.value = false;\n          }\n        }\n      }\n    }\n\n    /**\n     * Get the path of this node\n     * @return {{string|number}[]} Array containing the path to this node.\n     * Element is a number if is the index of an array, a string otherwise.\n     */\n  }, {\n    key: \"getPath\",\n    value: function getPath() {\n      var node = this;\n      var path = [];\n      while (node) {\n        var field = node.getName();\n        if (field !== undefined) {\n          path.unshift(field);\n        }\n        node = node.parent;\n      }\n      return path;\n    }\n\n    /**\n     * Get the internal path of this node, a list with the child indexes.\n     * @return {String[]} Array containing the internal path to this node\n     */\n  }, {\n    key: \"getInternalPath\",\n    value: function getInternalPath() {\n      var node = this;\n      var internalPath = [];\n      while (node) {\n        if (node.parent) {\n          internalPath.unshift(node.getIndex());\n        }\n        node = node.parent;\n      }\n      return internalPath;\n    }\n\n    /**\n     * Get node serializable name\n     * @returns {String|Number}\n     */\n  }, {\n    key: \"getName\",\n    value: function getName() {\n      return !this.parent ? undefined // do not add an (optional) field name of the root node\n      : this.parent.type !== 'array' ? this.field : this.index;\n    }\n\n    /**\n     * Find child node by serializable path\n     * @param {Array<String>} path\n     */\n  }, {\n    key: \"findNodeByPath\",\n    value: function findNodeByPath(path) {\n      if (!path) {\n        return;\n      }\n      if (path.length === 0) {\n        return this;\n      }\n      if (path.length && this.childs && this.childs.length) {\n        for (var i = 0; i < this.childs.length; ++i) {\n          if ('' + path[0] === '' + this.childs[i].getName()) {\n            return this.childs[i].findNodeByPath(path.slice(1));\n          }\n        }\n      }\n    }\n\n    /**\n     * Find child node by an internal path: the indexes of the childs nodes\n     * @param {Array<String>} internalPath\n     * @return {Node | undefined} Returns the node if the path exists.\n     *                            Returns undefined otherwise.\n     */\n  }, {\n    key: \"findNodeByInternalPath\",\n    value: function findNodeByInternalPath(internalPath) {\n      if (!internalPath) {\n        return undefined;\n      }\n      var node = this;\n      for (var i = 0; i < internalPath.length && node; i++) {\n        var childIndex = internalPath[i];\n        node = node.childs[childIndex];\n      }\n      return node;\n    }\n\n    /**\n     * @typedef {{value: String|Object|Number|Boolean, path: Array.<String|Number>}} SerializableNode\n     *\n     * Returns serializable representation for the node\n     * @return {SerializableNode}\n     */\n  }, {\n    key: \"serialize\",\n    value: function serialize() {\n      return {\n        value: this.getValue(),\n        path: this.getPath()\n      };\n    }\n\n    /**\n     * Find a Node from a JSON path like '.items[3].name'\n     * @param {string} jsonPath\n     * @return {Node | null} Returns the Node when found, returns null if not found\n     */\n  }, {\n    key: \"findNode\",\n    value: function findNode(jsonPath) {\n      var path = (0,util.parsePath)(jsonPath);\n      var node = this;\n      var _loop = function _loop() {\n        var prop = path.shift();\n        if (typeof prop === 'number') {\n          if (node.type !== 'array') {\n            throw new Error('Cannot get child node at index ' + prop + ': node is no array');\n          }\n          node = node.childs[prop];\n        } else {\n          // string\n          if (node.type !== 'object') {\n            throw new Error('Cannot get child node ' + prop + ': node is no object');\n          }\n          node = node.childs.filter(function (child) {\n            return child.field === prop;\n          })[0];\n        }\n      };\n      while (node && path.length > 0) {\n        _loop();\n      }\n      return node;\n    }\n\n    /**\n     * Find all parents of this node. The parents are ordered from root node towards\n     * the original node.\n     * @return {Array.<Node>}\n     */\n  }, {\n    key: \"findParents\",\n    value: function findParents() {\n      var parents = [];\n      var parent = this.parent;\n      while (parent) {\n        parents.unshift(parent);\n        parent = parent.parent;\n      }\n      return parents;\n    }\n\n    /**\n     *\n     * @param {{dataPath: string, keyword: string, message: string, params: Object, schemaPath: string} | null} error\n     * @param {Node} [child]  When this is the error of a parent node, pointing\n     *                        to an invalid child node, the child node itself\n     *                        can be provided. If provided, clicking the error\n     *                        icon will set focus to the invalid child node.\n     */\n  }, {\n    key: \"setError\",\n    value: function setError(error, child) {\n      this.error = error;\n      this.errorChild = child;\n      if (this.dom && this.dom.tr) {\n        this.updateError();\n      }\n    }\n\n    /**\n     * Render the error\n     */\n  }, {\n    key: \"updateError\",\n    value: function updateError() {\n      var _this = this;\n      var error = this.fieldError || this.valueError || this.error;\n      var tdError = this.dom.tdError;\n      if (error && this.dom && this.dom.tr) {\n        (0,util.addClassName)(this.dom.tr, 'jsoneditor-validation-error');\n        if (!tdError) {\n          tdError = document.createElement('td');\n          this.dom.tdError = tdError;\n          this.dom.tdValue.parentNode.appendChild(tdError);\n        }\n        var button = document.createElement('button');\n        button.type = 'button';\n        button.className = 'jsoneditor-button jsoneditor-schema-error';\n        var destroy = function destroy() {\n          if (_this.dom.popupAnchor) {\n            _this.dom.popupAnchor.destroy(); // this will trigger the onDestroy callback\n          }\n        };\n        var onDestroy = function onDestroy() {\n          delete _this.dom.popupAnchor;\n        };\n        var createPopup = function createPopup(destroyOnMouseOut) {\n          var frame = _this.editor.frame;\n          _this.dom.popupAnchor = (0,createAbsoluteAnchor/* createAbsoluteAnchor */.p)(button, _this.editor.getPopupAnchor(), onDestroy, destroyOnMouseOut);\n          var popupWidth = 200; // must correspond to what's configured in the CSS\n          var buttonRect = button.getBoundingClientRect();\n          var frameRect = frame.getBoundingClientRect();\n          var position = frameRect.width - buttonRect.x > popupWidth / 2 + 20 ? 'jsoneditor-above' : 'jsoneditor-left';\n          var popover = document.createElement('div');\n          popover.className = 'jsoneditor-popover ' + position;\n          popover.appendChild(document.createTextNode(error.message));\n          _this.dom.popupAnchor.appendChild(popover);\n        };\n        button.onmouseover = function () {\n          if (!_this.dom.popupAnchor) {\n            createPopup(true);\n          }\n        };\n        button.onfocus = function () {\n          destroy();\n          createPopup(false);\n        };\n        button.onblur = function () {\n          destroy();\n        };\n\n        // when clicking the error icon, expand all nodes towards the invalid\n        // child node, and set focus to the child node\n        var child = this.errorChild;\n        if (child) {\n          button.onclick = function showInvalidNode() {\n            child.findParents().forEach(function (parent) {\n              parent.expand(false);\n            });\n            child.scrollTo(function () {\n              child.focus();\n            });\n          };\n        }\n\n        // apply the error message to the node\n        while (tdError.firstChild) {\n          tdError.removeChild(tdError.firstChild);\n        }\n        tdError.appendChild(button);\n      } else {\n        if (this.dom.tr) {\n          (0,util.removeClassName)(this.dom.tr, 'jsoneditor-validation-error');\n        }\n        if (tdError) {\n          this.dom.tdError.parentNode.removeChild(this.dom.tdError);\n          delete this.dom.tdError;\n        }\n      }\n    }\n\n    /**\n     * Get the index of this node: the index in the list of childs where this\n     * node is part of\n     * @return {number | null} Returns the index, or null if this is the root node\n     */\n  }, {\n    key: \"getIndex\",\n    value: function getIndex() {\n      if (this.parent) {\n        var index = this.parent.childs.indexOf(this);\n        return index !== -1 ? index : null;\n      } else {\n        return -1;\n      }\n    }\n\n    /**\n     * Set parent node\n     * @param {Node} parent\n     */\n  }, {\n    key: \"setParent\",\n    value: function setParent(parent) {\n      this.parent = parent;\n    }\n\n    /**\n     * Set field\n     * @param {String}  field\n     * @param {boolean} [fieldEditable]\n     */\n  }, {\n    key: \"setField\",\n    value: function setField(field, fieldEditable) {\n      this.field = field;\n      this.previousField = field;\n      this.fieldEditable = fieldEditable === true;\n    }\n\n    /**\n     * Get field\n     * @return {String}\n     */\n  }, {\n    key: \"getField\",\n    value: function getField() {\n      if (this.field === undefined) {\n        this._getDomField();\n      }\n      return this.field;\n    }\n\n    /**\n     * Set value. Value is a JSON structure or an element String, Boolean, etc.\n     * @param {*} value\n     * @param {String} [type]  Specify the type of the value. Can be 'auto',\n     *                         'array', 'object', or 'string'\n     */\n  }, {\n    key: \"setValue\",\n    value: function setValue(value, type) {\n      var childValue, child;\n      var i, j;\n      var updateDom = false;\n      var previousChilds = this.childs;\n      this.type = this._getType(value);\n\n      // check if type corresponds with the provided type\n      if (type && type !== this.type) {\n        if (type === 'string' && this.type === 'auto') {\n          this.type = type;\n        } else {\n          throw new Error('Type mismatch: ' + 'cannot cast value of type \"' + this.type + ' to the specified type \"' + type + '\"');\n        }\n      }\n      if (this.type === 'array') {\n        // array\n        if (!this.childs) {\n          this.childs = [];\n        }\n        for (i = 0; i < value.length; i++) {\n          childValue = value[i];\n          if (childValue !== undefined && !(childValue instanceof Function)) {\n            if (i < this.childs.length) {\n              // reuse existing child, keep its state\n              child = this.childs[i];\n              child.fieldEditable = false;\n              child.index = i;\n              child.setValue(childValue);\n            } else {\n              // create a new child\n              child = new Node(this.editor, {\n                value: childValue\n              });\n              var visible = i < this.getMaxVisibleChilds();\n              this.appendChild(child, visible, updateDom);\n            }\n          }\n        }\n\n        // cleanup redundant childs\n        // we loop backward to prevent issues with shifting index numbers\n        for (j = this.childs.length; j >= value.length; j--) {\n          this.removeChild(this.childs[j], updateDom);\n        }\n      } else if (this.type === 'object') {\n        // object\n        if (!this.childs) {\n          this.childs = [];\n        }\n\n        // cleanup redundant childs\n        // we loop backward to prevent issues with shifting index numbers\n        for (j = this.childs.length - 1; j >= 0; j--) {\n          if (!Node_hasOwnProperty(value, this.childs[j].field)) {\n            this.removeChild(this.childs[j], updateDom);\n          }\n        }\n        i = 0;\n        for (var childField in value) {\n          if (Node_hasOwnProperty(value, childField)) {\n            childValue = value[childField];\n            if (childValue !== undefined && !(childValue instanceof Function)) {\n              var _child = this.findChildByProperty(childField);\n              if (_child) {\n                // reuse existing child, keep its state\n                _child.setField(childField, true);\n                _child.setValue(childValue);\n              } else {\n                // create a new child, append to the end\n                var newChild = new Node(this.editor, {\n                  field: childField,\n                  value: childValue\n                });\n                var _visible = i < this.getMaxVisibleChilds();\n                this.appendChild(newChild, _visible, updateDom);\n              }\n            }\n            i++;\n          }\n        }\n        this.value = '';\n\n        // sort object keys during initialization. Must not trigger an onChange action\n        if (this.editor.options.sortObjectKeys === true) {\n          var triggerAction = false;\n          this.sort([], 'asc', triggerAction);\n        }\n      } else {\n        // value\n        this.hideChilds();\n        delete this.append;\n        delete this.showMore;\n        delete this.expanded;\n        delete this.childs;\n        this.value = value;\n      }\n\n      // recreate the DOM if switching from an object/array to auto/string or vice versa\n      // needed to recreated the expand button for example\n      if (Array.isArray(previousChilds) !== Array.isArray(this.childs)) {\n        this.recreateDom();\n      }\n      this.updateDom({\n        updateIndexes: true\n      });\n      this.previousValue = this.value; // used only to check for changes in DOM vs JS model\n    }\n\n    /**\n     * Set internal value\n     * @param {*} internalValue  Internal value structure keeping type,\n     *                           order and duplicates in objects\n     */\n  }, {\n    key: \"setInternalValue\",\n    value: function setInternalValue(internalValue) {\n      var childValue, child, visible;\n      var i, j;\n      var notUpdateDom = false;\n      var previousChilds = this.childs;\n      this.type = internalValue.type;\n      if (internalValue.type === 'array') {\n        // array\n        if (!this.childs) {\n          this.childs = [];\n        }\n        for (i = 0; i < internalValue.childs.length; i++) {\n          childValue = internalValue.childs[i];\n          if (childValue !== undefined && !(childValue instanceof Function)) {\n            if (i < this.childs.length) {\n              // reuse existing child, keep its state\n              child = this.childs[i];\n              child.fieldEditable = false;\n              child.index = i;\n              child.setInternalValue(childValue);\n            } else {\n              // create a new child\n              child = new Node(this.editor, {\n                internalValue: childValue\n              });\n              visible = i < this.getMaxVisibleChilds();\n              this.appendChild(child, visible, notUpdateDom);\n            }\n          }\n        }\n\n        // cleanup redundant childs\n        // we loop backward to prevent issues with shifting index numbers\n        for (j = this.childs.length; j >= internalValue.childs.length; j--) {\n          this.removeChild(this.childs[j], notUpdateDom);\n        }\n      } else if (internalValue.type === 'object') {\n        // object\n        if (!this.childs) {\n          this.childs = [];\n        }\n        for (i = 0; i < internalValue.childs.length; i++) {\n          childValue = internalValue.childs[i];\n          if (childValue !== undefined && !(childValue instanceof Function)) {\n            if (i < this.childs.length) {\n              // reuse existing child, keep its state\n              child = this.childs[i];\n              delete child.index;\n              child.setField(childValue.field, true);\n              child.setInternalValue(childValue.value);\n            } else {\n              // create a new child\n              child = new Node(this.editor, {\n                field: childValue.field,\n                internalValue: childValue.value\n              });\n              visible = i < this.getMaxVisibleChilds();\n              this.appendChild(child, visible, notUpdateDom);\n            }\n          }\n        }\n\n        // cleanup redundant childs\n        // we loop backward to prevent issues with shifting index numbers\n        for (j = this.childs.length; j >= internalValue.childs.length; j--) {\n          this.removeChild(this.childs[j], notUpdateDom);\n        }\n      } else {\n        // value\n        this.hideChilds();\n        delete this.append;\n        delete this.showMore;\n        delete this.expanded;\n        delete this.childs;\n        this.value = internalValue.value;\n      }\n\n      // recreate the DOM if switching from an object/array to auto/string or vice versa\n      // needed to recreated the expand button for example\n      if (Array.isArray(previousChilds) !== Array.isArray(this.childs)) {\n        this.recreateDom();\n      }\n      this.updateDom({\n        updateIndexes: true\n      });\n      this.previousValue = this.value; // used only to check for changes in DOM vs JS model\n    }\n\n    /**\n     * Remove the DOM of this node and it's childs and recreate it again\n     */\n  }, {\n    key: \"recreateDom\",\n    value: function recreateDom() {\n      if (this.dom && this.dom.tr && this.dom.tr.parentNode) {\n        var domAnchor = this._detachFromDom();\n        this.clearDom();\n        this._attachToDom(domAnchor);\n      } else {\n        this.clearDom();\n      }\n    }\n\n    /**\n     * Get value. Value is a JSON structure\n     * @return {*} value\n     */\n  }, {\n    key: \"getValue\",\n    value: function getValue() {\n      if (this.type === 'array') {\n        var arr = [];\n        this.childs.forEach(function (child) {\n          arr.push(child.getValue());\n        });\n        return arr;\n      } else if (this.type === 'object') {\n        var obj = {};\n        this.childs.forEach(function (child) {\n          obj[child.getField()] = child.getValue();\n        });\n        return obj;\n      } else {\n        if (this.value === undefined) {\n          this._getDomValue();\n        }\n        return this.value;\n      }\n    }\n\n    /**\n     * Get internal value, a structure which maintains ordering and duplicates in objects\n     * @return {*} value\n     */\n  }, {\n    key: \"getInternalValue\",\n    value: function getInternalValue() {\n      if (this.type === 'array') {\n        return {\n          type: this.type,\n          childs: this.childs.map(function (child) {\n            return child.getInternalValue();\n          })\n        };\n      } else if (this.type === 'object') {\n        return {\n          type: this.type,\n          childs: this.childs.map(function (child) {\n            return {\n              field: child.getField(),\n              value: child.getInternalValue()\n            };\n          })\n        };\n      } else {\n        if (this.value === undefined) {\n          this._getDomValue();\n        }\n        return {\n          type: this.type,\n          value: this.value\n        };\n      }\n    }\n\n    /**\n     * Get the nesting level of this node\n     * @return {Number} level\n     */\n  }, {\n    key: \"getLevel\",\n    value: function getLevel() {\n      return this.parent ? this.parent.getLevel() + 1 : 0;\n    }\n\n    /**\n     * Get jsonpath of the current node\n     * @return {Node[]} Returns an array with nodes\n     */\n  }, {\n    key: \"getNodePath\",\n    value: function getNodePath() {\n      var path = this.parent ? this.parent.getNodePath() : [];\n      path.push(this);\n      return path;\n    }\n\n    /**\n     * Create a clone of a node\n     * The complete state of a clone is copied, including whether it is expanded or\n     * not. The DOM elements are not cloned.\n     * @return {Node} clone\n     */\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      var clone = new Node(this.editor);\n      clone.type = this.type;\n      clone.field = this.field;\n      clone.fieldInnerText = this.fieldInnerText;\n      clone.fieldEditable = this.fieldEditable;\n      clone.previousField = this.previousField;\n      clone.value = this.value;\n      clone.valueInnerText = this.valueInnerText;\n      clone.previousValue = this.previousValue;\n      clone.expanded = this.expanded;\n      clone.visibleChilds = this.visibleChilds;\n      if (this.childs) {\n        // an object or array\n        var cloneChilds = [];\n        this.childs.forEach(function (child) {\n          var childClone = child.clone();\n          childClone.setParent(clone);\n          cloneChilds.push(childClone);\n        });\n        clone.childs = cloneChilds;\n      } else {\n        // a value\n        clone.childs = undefined;\n      }\n      return clone;\n    }\n\n    /**\n     * Expand this node and optionally its childs.\n     * @param {boolean} [recurse] Optional recursion, true by default. When\n     *                            true, all childs will be expanded recursively\n     */\n  }, {\n    key: \"expand\",\n    value: function expand(recurse) {\n      if (!this.childs) {\n        return;\n      }\n\n      // set this node expanded\n      this.expanded = true;\n      if (this.dom.expand) {\n        this.dom.expand.className = 'jsoneditor-button jsoneditor-expanded';\n      }\n      this.showChilds();\n      if (recurse !== false) {\n        this.childs.forEach(function (child) {\n          child.expand(recurse);\n        });\n      }\n\n      // update the css classes of table row, and fire onClassName etc\n      this.updateDom({\n        recurse: false\n      });\n    }\n\n    /**\n     * Collapse this node and optionally its childs.\n     * @param {boolean} [recurse] Optional recursion, true by default. When\n     *                            true, all childs will be collapsed recursively\n     */\n  }, {\n    key: \"collapse\",\n    value: function collapse(recurse) {\n      if (!this.childs) {\n        return;\n      }\n      this.hideChilds();\n\n      // collapse childs in case of recurse\n      if (recurse !== false) {\n        this.childs.forEach(function (child) {\n          child.collapse(recurse);\n        });\n      }\n\n      // make this node collapsed\n      if (this.dom.expand) {\n        this.dom.expand.className = 'jsoneditor-button jsoneditor-collapsed';\n      }\n      this.expanded = false;\n\n      // update the css classes of table row, and fire onClassName etc\n      this.updateDom({\n        recurse: false\n      });\n    }\n\n    /**\n     * Recursively show all childs when they are expanded\n     */\n  }, {\n    key: \"showChilds\",\n    value: function showChilds() {\n      var childs = this.childs;\n      if (!childs) {\n        return;\n      }\n      if (!this.expanded) {\n        return;\n      }\n      var tr = this.dom.tr;\n      var nextTr;\n      var table = tr ? tr.parentNode : undefined;\n      if (table) {\n        // show row with append button\n        var append = this.getAppendDom();\n        if (!append.parentNode) {\n          nextTr = tr.nextSibling;\n          if (nextTr) {\n            table.insertBefore(append, nextTr);\n          } else {\n            table.appendChild(append);\n          }\n        }\n\n        // show childs\n        var iMax = Math.min(this.childs.length, this.visibleChilds);\n        nextTr = this._getNextTr();\n        for (var i = 0; i < iMax; i++) {\n          var child = this.childs[i];\n          if (!child.getDom().parentNode) {\n            table.insertBefore(child.getDom(), nextTr);\n          }\n          child.showChilds();\n        }\n\n        // show \"show more childs\" if limited\n        var showMore = this.getShowMoreDom();\n        nextTr = this._getNextTr();\n        if (!showMore.parentNode) {\n          table.insertBefore(showMore, nextTr);\n        }\n        this.showMore.updateDom(); // to update the counter\n      }\n    }\n  }, {\n    key: \"_getNextTr\",\n    value: function _getNextTr() {\n      if (this.showMore && this.showMore.getDom().parentNode) {\n        return this.showMore.getDom();\n      }\n      if (this.append && this.append.getDom().parentNode) {\n        return this.append.getDom();\n      }\n    }\n\n    /**\n     * Hide the node with all its childs\n     * @param {{resetVisibleChilds: boolean}} [options]\n     */\n  }, {\n    key: \"hide\",\n    value: function hide(options) {\n      var tr = this.dom.tr;\n      var table = tr ? tr.parentNode : undefined;\n      if (table) {\n        table.removeChild(tr);\n      }\n      if (this.dom.popupAnchor) {\n        this.dom.popupAnchor.destroy();\n      }\n      this.hideChilds(options);\n    }\n\n    /**\n     * Recursively hide all childs\n     * @param {{resetVisibleChilds: boolean}} [options]\n     */\n  }, {\n    key: \"hideChilds\",\n    value: function hideChilds(options) {\n      var childs = this.childs;\n      if (!childs) {\n        return;\n      }\n      if (!this.expanded) {\n        return;\n      }\n\n      // hide append row\n      var append = this.getAppendDom();\n      if (append.parentNode) {\n        append.parentNode.removeChild(append);\n      }\n\n      // hide childs\n      this.childs.forEach(function (child) {\n        child.hide();\n      });\n\n      // hide \"show more\" row\n      var showMore = this.getShowMoreDom();\n      if (showMore.parentNode) {\n        showMore.parentNode.removeChild(showMore);\n      }\n\n      // reset max visible childs\n      if (!options || options.resetVisibleChilds) {\n        this.visibleChilds = this.getMaxVisibleChilds();\n      }\n    }\n\n    /**\n     * set custom css classes on a node\n     */\n  }, {\n    key: \"_updateCssClassName\",\n    value: function _updateCssClassName() {\n      if (this.dom.field && this.editor && this.editor.options && typeof this.editor.options.onClassName === 'function' && this.dom.tree) {\n        (0,util.removeAllClassNames)(this.dom.tree);\n        var getValue = this.getValue.bind(this);\n        var addClasses = this.editor.options.onClassName({\n          path: this.getPath(),\n          field: this.field,\n          get value() {\n            return getValue();\n          }\n        }) || '';\n        (0,util.addClassName)(this.dom.tree, 'jsoneditor-values ' + addClasses);\n      }\n    }\n  }, {\n    key: \"recursivelyUpdateCssClassesOnNodes\",\n    value: function recursivelyUpdateCssClassesOnNodes() {\n      this._updateCssClassName();\n      if (Array.isArray(this.childs)) {\n        for (var i = 0; i < this.childs.length; i++) {\n          this.childs[i].recursivelyUpdateCssClassesOnNodes();\n        }\n      }\n    }\n\n    /**\n     * Goes through the path from the node to the root and ensures that it is expanded\n     */\n  }, {\n    key: \"expandTo\",\n    value: function expandTo() {\n      var currentNode = this.parent;\n      while (currentNode) {\n        if (!currentNode.expanded) {\n          currentNode.expand();\n        }\n        currentNode = currentNode.parent;\n      }\n    }\n\n    /**\n     * Add a new child to the node.\n     * Only applicable when Node value is of type array or object\n     * @param {Node} node\n     * @param {boolean} [visible] If true (default), the child will be rendered\n     * @param {boolean} [updateDom]  If true (default), the DOM of both parent\n     *                               node and appended node will be updated\n     *                               (child count, indexes)\n     */\n  }, {\n    key: \"appendChild\",\n    value: function appendChild(node, visible, updateDom) {\n      if (this._hasChilds()) {\n        // adjust the link to the parent\n        node.setParent(this);\n        node.fieldEditable = this.type === 'object';\n        if (this.type === 'array') {\n          node.index = this.childs.length;\n        }\n        if (this.type === 'object' && node.field === undefined) {\n          // initialize field value if needed\n          node.setField('');\n        }\n        this.childs.push(node);\n        if (this.expanded && visible !== false) {\n          // insert into the DOM, before the appendRow\n          var newTr = node.getDom();\n          var nextTr = this._getNextTr();\n          var table = nextTr ? nextTr.parentNode : undefined;\n          if (nextTr && table) {\n            table.insertBefore(newTr, nextTr);\n          }\n          node.showChilds();\n          this.visibleChilds++;\n        }\n        if (updateDom !== false) {\n          this.updateDom({\n            updateIndexes: true\n          });\n          node.updateDom({\n            recurse: true\n          });\n        }\n      }\n    }\n\n    /**\n     * Move a node from its current parent to this node\n     * Only applicable when Node value is of type array or object\n     * @param {Node} node\n     * @param {Node} beforeNode\n     * @param {boolean} [updateDom]  If true (default), the DOM of both parent\n     *                               node and appended node will be updated\n     *                               (child count, indexes)\n     */\n  }, {\n    key: \"moveBefore\",\n    value: function moveBefore(node, beforeNode, updateDom) {\n      if (this._hasChilds()) {\n        // create a temporary row, to prevent the scroll position from jumping\n        // when removing the node\n        var tbody = this.dom.tr ? this.dom.tr.parentNode : undefined;\n        var trTemp;\n        if (tbody) {\n          trTemp = document.createElement('tr');\n          trTemp.style.height = tbody.clientHeight + 'px';\n          tbody.appendChild(trTemp);\n        }\n        if (node.parent) {\n          node.parent.removeChild(node);\n        }\n        if (beforeNode instanceof AppendNode || !beforeNode) {\n          // the this.childs.length + 1 is to reckon with the node that we're about to add\n          if (this.childs.length + 1 > this.visibleChilds) {\n            var lastVisibleNode = this.childs[this.visibleChilds - 1];\n            this.insertBefore(node, lastVisibleNode, updateDom);\n          } else {\n            var visible = true;\n            this.appendChild(node, visible, updateDom);\n          }\n        } else {\n          this.insertBefore(node, beforeNode, updateDom);\n        }\n        if (tbody && trTemp) {\n          tbody.removeChild(trTemp);\n        }\n      }\n    }\n\n    /**\n     * Insert a new child before a given node\n     * Only applicable when Node value is of type array or object\n     * @param {Node} node\n     * @param {Node} beforeNode\n     * @param {boolean} [updateDom]  If true (default), the DOM of both parent\n     *                               node and appended node will be updated\n     *                               (child count, indexes)\n     */\n  }, {\n    key: \"insertBefore\",\n    value: function insertBefore(node, beforeNode, updateDom) {\n      if (this._hasChilds()) {\n        this.visibleChilds++;\n\n        // initialize field value if needed\n        if (this.type === 'object' && node.field === undefined) {\n          node.setField('');\n        }\n        if (beforeNode === this.append) {\n          // append to the child nodes\n\n          // adjust the link to the parent\n          node.setParent(this);\n          node.fieldEditable = this.type === 'object';\n          this.childs.push(node);\n        } else {\n          // insert before a child node\n          var index = this.childs.indexOf(beforeNode);\n          if (index === -1) {\n            throw new Error('Node not found');\n          }\n\n          // adjust the link to the parent\n          node.setParent(this);\n          node.fieldEditable = this.type === 'object';\n          this.childs.splice(index, 0, node);\n        }\n        if (this.expanded) {\n          // insert into the DOM\n          var newTr = node.getDom();\n          var nextTr = beforeNode.getDom();\n          var table = nextTr ? nextTr.parentNode : undefined;\n          if (nextTr && table) {\n            table.insertBefore(newTr, nextTr);\n          }\n          node.showChilds();\n          this.showChilds();\n        }\n        if (updateDom !== false) {\n          this.updateDom({\n            updateIndexes: true\n          });\n          node.updateDom({\n            recurse: true\n          });\n        }\n      }\n    }\n\n    /**\n     * Insert a new child before a given node\n     * Only applicable when Node value is of type array or object\n     * @param {Node} node\n     * @param {Node} afterNode\n     */\n  }, {\n    key: \"insertAfter\",\n    value: function insertAfter(node, afterNode) {\n      if (this._hasChilds()) {\n        var index = this.childs.indexOf(afterNode);\n        var beforeNode = this.childs[index + 1];\n        if (beforeNode) {\n          this.insertBefore(node, beforeNode);\n        } else {\n          this.appendChild(node);\n        }\n      }\n    }\n\n    /**\n     * Search in this node\n     * Searches are case insensitive.\n     * @param {String} text\n     * @param {Node[]} [results] Array where search results will be added\n     *                           used to count and limit the results whilst iterating\n     * @return {Node[]} results  Array with nodes containing the search text\n     */\n  }, {\n    key: \"search\",\n    value: function search(text, results) {\n      if (!Array.isArray(results)) {\n        results = [];\n      }\n      var index;\n      var search = text ? text.toLowerCase() : undefined;\n\n      // delete old search data\n      delete this.searchField;\n      delete this.searchValue;\n\n      // search in field\n      if (this.field !== undefined && results.length <= this.MAX_SEARCH_RESULTS) {\n        var field = String(this.field).toLowerCase();\n        index = field.indexOf(search);\n        if (index !== -1) {\n          this.searchField = true;\n          results.push({\n            node: this,\n            elem: 'field'\n          });\n        }\n\n        // update dom\n        this._updateDomField();\n      }\n\n      // search in value\n      if (this._hasChilds()) {\n        // array, object\n\n        // search the nodes childs\n        if (this.childs) {\n          this.childs.forEach(function (child) {\n            child.search(text, results);\n          });\n        }\n      } else {\n        // string, auto\n        if (this.value !== undefined && results.length <= this.MAX_SEARCH_RESULTS) {\n          var value = String(this.value).toLowerCase();\n          index = value.indexOf(search);\n          if (index !== -1) {\n            this.searchValue = true;\n            results.push({\n              node: this,\n              elem: 'value'\n            });\n          }\n\n          // update dom\n          this._updateDomValue();\n        }\n      }\n      return results;\n    }\n\n    /**\n     * Move the scroll position such that this node is in the visible area.\n     * The node will not get the focus\n     * @param {function(boolean)} [callback]\n     */\n  }, {\n    key: \"scrollTo\",\n    value: function scrollTo(callback) {\n      this.expandPathToNode();\n      if (this.dom.tr && this.dom.tr.parentNode) {\n        this.editor.scrollTo(this.dom.tr.offsetTop, callback);\n      }\n    }\n\n    /**\n     * if the node is not visible, expand its parents\n     */\n  }, {\n    key: \"expandPathToNode\",\n    value: function expandPathToNode() {\n      var node = this;\n      var recurse = false;\n      while (node && node.parent) {\n        // expand visible childs of the parent if needed\n        var index = node.parent.type === 'array' ? node.index : node.parent.childs.indexOf(node);\n        while (node.parent.visibleChilds < index + 1) {\n          node.parent.visibleChilds += this.getMaxVisibleChilds();\n        }\n\n        // expand the parent itself\n        node.parent.expand(recurse);\n        node = node.parent;\n      }\n    }\n\n    /**\n     * Set focus to this node\n     * @param {String} [elementName]  The field name of the element to get the\n     *                                focus available values: 'drag', 'menu',\n     *                                'expand', 'field', 'value' (default)\n     */\n  }, {\n    key: \"focus\",\n    value: function focus(elementName) {\n      Node.focusElement = elementName;\n      if (this.dom.tr && this.dom.tr.parentNode) {\n        var dom = this.dom;\n        switch (elementName) {\n          case 'drag':\n            if (dom.drag) {\n              dom.drag.focus();\n            } else {\n              dom.menu.focus();\n            }\n            break;\n          case 'menu':\n            dom.menu.focus();\n            break;\n          case 'expand':\n            if (this._hasChilds()) {\n              dom.expand.focus();\n            } else if (dom.field && this.fieldEditable) {\n              dom.field.focus();\n              (0,util.selectContentEditable)(dom.field);\n            } else if (dom.value && !this._hasChilds()) {\n              dom.value.focus();\n              (0,util.selectContentEditable)(dom.value);\n            } else {\n              dom.menu.focus();\n            }\n            break;\n          case 'field':\n            if (dom.field && this.fieldEditable) {\n              dom.field.focus();\n              (0,util.selectContentEditable)(dom.field);\n            } else if (dom.value && !this._hasChilds()) {\n              dom.value.focus();\n              (0,util.selectContentEditable)(dom.value);\n            } else if (this._hasChilds()) {\n              dom.expand.focus();\n            } else {\n              dom.menu.focus();\n            }\n            break;\n          case 'value':\n          default:\n            if (dom.select) {\n              // enum select box\n              dom.select.focus();\n            } else if (dom.value && !this._hasChilds()) {\n              dom.value.focus();\n              (0,util.selectContentEditable)(dom.value);\n            } else if (dom.field && this.fieldEditable) {\n              dom.field.focus();\n              (0,util.selectContentEditable)(dom.field);\n            } else if (this._hasChilds()) {\n              dom.expand.focus();\n            } else {\n              dom.menu.focus();\n            }\n            break;\n        }\n      }\n    }\n\n    /**\n     * Check if given node is a child. The method will check recursively to find\n     * this node.\n     * @param {Node} node\n     * @return {boolean} containsNode\n     */\n  }, {\n    key: \"containsNode\",\n    value: function containsNode(node) {\n      if (this === node) {\n        return true;\n      }\n      var childs = this.childs;\n      if (childs) {\n        // TODO: use the js5 Array.some() here?\n        for (var i = 0, iMax = childs.length; i < iMax; i++) {\n          if (childs[i].containsNode(node)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    /**\n     * Remove a child from the node.\n     * Only applicable when Node value is of type array or object\n     * @param {Node} node   The child node to be removed;\n     * @param {boolean} [updateDom]  If true (default), the DOM of the parent\n     *                               node will be updated (like child count)\n     * @return {Node | undefined} node  The removed node on success,\n     *                                             else undefined\n     */\n  }, {\n    key: \"removeChild\",\n    value: function removeChild(node, updateDom) {\n      if (this.childs) {\n        var index = this.childs.indexOf(node);\n        if (index !== -1) {\n          if (index < this.visibleChilds && this.expanded) {\n            this.visibleChilds--;\n          }\n          node.hide();\n\n          // delete old search results\n          delete node.searchField;\n          delete node.searchValue;\n          var removedNode = this.childs.splice(index, 1)[0];\n          removedNode.parent = null;\n          if (updateDom !== false) {\n            this.updateDom({\n              updateIndexes: true\n            });\n          }\n          return removedNode;\n        }\n      }\n      return undefined;\n    }\n\n    /**\n     * Remove a child node node from this node\n     * This method is equal to Node.removeChild, except that _remove fire an\n     * onChange event.\n     * @param {Node} node\n     * @private\n     */\n  }, {\n    key: \"_remove\",\n    value: function _remove(node) {\n      this.removeChild(node);\n    }\n\n    /**\n     * Change the type of the value of this Node\n     * @param {String} newType\n     */\n  }, {\n    key: \"changeType\",\n    value: function changeType(newType) {\n      var oldType = this.type;\n      if (oldType === newType) {\n        // type is not changed\n        return;\n      }\n      if ((newType === 'string' || newType === 'auto') && (oldType === 'string' || oldType === 'auto')) {\n        // this is an easy change\n        this.type = newType;\n      } else {\n        // change from array to object, or from string/auto to object/array\n        var domAnchor = this._detachFromDom();\n\n        // delete the old DOM\n        this.clearDom();\n\n        // adjust the field and the value\n        this.type = newType;\n\n        // adjust childs\n        if (newType === 'object') {\n          if (!this.childs) {\n            this.childs = [];\n          }\n          this.childs.forEach(function (child) {\n            child.clearDom();\n            delete child.index;\n            child.fieldEditable = true;\n            if (child.field === undefined) {\n              child.field = '';\n            }\n          });\n          if (oldType === 'string' || oldType === 'auto') {\n            this.expanded = true;\n          }\n        } else if (newType === 'array') {\n          if (!this.childs) {\n            this.childs = [];\n          }\n          this.childs.forEach(function (child, index) {\n            child.clearDom();\n            child.fieldEditable = false;\n            child.index = index;\n          });\n          if (oldType === 'string' || oldType === 'auto') {\n            this.expanded = true;\n          }\n        } else {\n          this.expanded = false;\n        }\n        this._attachToDom(domAnchor);\n      }\n      if (newType === 'auto' || newType === 'string') {\n        // cast value to the correct type\n        if (newType === 'string') {\n          this.value = String(this.value);\n        } else {\n          this.value = (0,util.parseString)(String(this.value));\n        }\n        this.focus();\n      }\n      this.updateDom({\n        updateIndexes: true\n      });\n    }\n\n    /**\n     * Test whether the JSON contents of this node are deep equal to provided JSON object.\n     * @param {*} json\n     */\n  }, {\n    key: \"deepEqual\",\n    value: function deepEqual(json) {\n      var i;\n      if (this.type === 'array') {\n        if (!Array.isArray(json)) {\n          return false;\n        }\n        if (this.childs.length !== json.length) {\n          return false;\n        }\n        for (i = 0; i < this.childs.length; i++) {\n          if (!this.childs[i].deepEqual(json[i])) {\n            return false;\n          }\n        }\n      } else if (this.type === 'object') {\n        if (Node_typeof(json) !== 'object' || !json) {\n          return false;\n        }\n\n        // we reckon with the order of the properties too.\n        var props = Object.keys(json);\n        if (this.childs.length !== props.length) {\n          return false;\n        }\n        for (i = 0; i < props.length; i++) {\n          var child = this.childs[i];\n          if (child.field !== props[i] || !child.deepEqual(json[child.field])) {\n            return false;\n          }\n        }\n      } else {\n        if (this.value !== json) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Retrieve value from DOM\n     * @private\n     */\n  }, {\n    key: \"_getDomValue\",\n    value: function _getDomValue() {\n      this._clearValueError();\n      if (this.dom.value && this.type !== 'array' && this.type !== 'object') {\n        this.valueInnerText = (0,util.getInnerText)(this.dom.value);\n        if (this.valueInnerText === '' && this.dom.value.innerHTML !== '') {\n          // When clearing the contents, often a <br/> remains, messing up the\n          // styling of the empty text box. Therefore we remove the <br/>\n          this.dom.value.textContent = '';\n        }\n      }\n      if (this.valueInnerText !== undefined) {\n        try {\n          // retrieve the value\n          var value;\n          if (this.type === 'string') {\n            value = this._unescapeHTML(this.valueInnerText);\n          } else {\n            var str = this._unescapeHTML(this.valueInnerText);\n            value = (0,util.parseString)(str);\n          }\n          if (value !== this.value) {\n            this.value = value;\n            this._debouncedOnChangeValue();\n          }\n        } catch (err) {\n          // keep the previous value\n          this._setValueError((0,i18n/* translate */.Tl)('cannotParseValueError'));\n        }\n      }\n    }\n\n    /**\n     * Show a local error in case of invalid value\n     * @param {string} message\n     * @private\n     */\n  }, {\n    key: \"_setValueError\",\n    value: function _setValueError(message) {\n      this.valueError = {\n        message: message\n      };\n      this.updateError();\n    }\n  }, {\n    key: \"_clearValueError\",\n    value: function _clearValueError() {\n      if (this.valueError) {\n        this.valueError = null;\n        this.updateError();\n      }\n    }\n\n    /**\n     * Show a local error in case of invalid or duplicate field\n     * @param {string} message\n     * @private\n     */\n  }, {\n    key: \"_setFieldError\",\n    value: function _setFieldError(message) {\n      this.fieldError = {\n        message: message\n      };\n      this.updateError();\n    }\n  }, {\n    key: \"_clearFieldError\",\n    value: function _clearFieldError() {\n      if (this.fieldError) {\n        this.fieldError = null;\n        this.updateError();\n      }\n    }\n\n    /**\n     * Handle a changed value\n     * @private\n     */\n  }, {\n    key: \"_onChangeValue\",\n    value: function _onChangeValue() {\n      // get current selection, then override the range such that we can select\n      // the added/removed text on undo/redo\n      var oldSelection = this.editor.getDomSelection();\n      if (oldSelection.range) {\n        var undoDiff = (0,util.textDiff)(String(this.value), String(this.previousValue));\n        oldSelection.range.startOffset = undoDiff.start;\n        oldSelection.range.endOffset = undoDiff.end;\n      }\n      var newSelection = this.editor.getDomSelection();\n      if (newSelection.range) {\n        var redoDiff = (0,util.textDiff)(String(this.previousValue), String(this.value));\n        newSelection.range.startOffset = redoDiff.start;\n        newSelection.range.endOffset = redoDiff.end;\n      }\n      this.editor._onAction('editValue', {\n        path: this.getInternalPath(),\n        oldValue: this.previousValue,\n        newValue: this.value,\n        oldSelection: oldSelection,\n        newSelection: newSelection\n      });\n      this.previousValue = this.value;\n    }\n\n    /**\n     * Handle a changed field\n     * @private\n     */\n  }, {\n    key: \"_onChangeField\",\n    value: function _onChangeField() {\n      // get current selection, then override the range such that we can select\n      // the added/removed text on undo/redo\n      var oldSelection = this.editor.getDomSelection();\n      var previous = this.previousField || '';\n      if (oldSelection.range) {\n        var undoDiff = (0,util.textDiff)(this.field, previous);\n        oldSelection.range.startOffset = undoDiff.start;\n        oldSelection.range.endOffset = undoDiff.end;\n      }\n      var newSelection = this.editor.getDomSelection();\n      if (newSelection.range) {\n        var redoDiff = (0,util.textDiff)(previous, this.field);\n        newSelection.range.startOffset = redoDiff.start;\n        newSelection.range.endOffset = redoDiff.end;\n      }\n      this.editor._onAction('editField', {\n        parentPath: this.parent.getInternalPath(),\n        index: this.getIndex(),\n        oldValue: this.previousField,\n        newValue: this.field,\n        oldSelection: oldSelection,\n        newSelection: newSelection\n      });\n      this.previousField = this.field;\n    }\n\n    /**\n     * Update dom value:\n     * - the text color of the value, depending on the type of the value\n     * - the height of the field, depending on the width\n     * - background color in case it is empty\n     * @private\n     */\n  }, {\n    key: \"_updateDomValue\",\n    value: function _updateDomValue() {\n      var domValue = this.dom.value;\n      if (domValue) {\n        var classNames = ['jsoneditor-value'];\n\n        // set text color depending on value type\n        var value = this.value;\n        var valueType = this.type === 'auto' ? (0,util.getType)(value) : this.type;\n        var valueIsUrl = valueType === 'string' && (0,util.isUrl)(value);\n        classNames.push('jsoneditor-' + valueType);\n        if (valueIsUrl) {\n          classNames.push('jsoneditor-url');\n        }\n\n        // visual styling when empty\n        var isEmpty = String(this.value) === '' && this.type !== 'array' && this.type !== 'object';\n        if (isEmpty) {\n          classNames.push('jsoneditor-empty');\n        }\n\n        // highlight when there is a search result\n        if (this.searchValueActive) {\n          classNames.push('jsoneditor-highlight-active');\n        }\n        if (this.searchValue) {\n          classNames.push('jsoneditor-highlight');\n        }\n        domValue.className = classNames.join(' ');\n\n        // update title\n        if (valueType === 'array' || valueType === 'object') {\n          var count = this.childs ? this.childs.length : 0;\n          domValue.title = this.type + ' containing ' + count + ' items';\n        } else if (valueIsUrl && this.editable.value) {\n          domValue.title = (0,i18n/* translate */.Tl)('openUrl');\n        } else {\n          domValue.title = '';\n        }\n\n        // show checkbox when the value is a boolean\n        if (valueType === 'boolean' && this.editable.value) {\n          if (!this.dom.checkbox) {\n            this.dom.checkbox = document.createElement('input');\n            this.dom.checkbox.type = 'checkbox';\n            this.dom.tdCheckbox = document.createElement('td');\n            this.dom.tdCheckbox.className = 'jsoneditor-tree';\n            this.dom.tdCheckbox.appendChild(this.dom.checkbox);\n            this.dom.tdValue.parentNode.insertBefore(this.dom.tdCheckbox, this.dom.tdValue);\n          }\n          this.dom.checkbox.checked = this.value;\n        } else {\n          // cleanup checkbox when displayed\n          if (this.dom.tdCheckbox) {\n            this.dom.tdCheckbox.parentNode.removeChild(this.dom.tdCheckbox);\n            delete this.dom.tdCheckbox;\n            delete this.dom.checkbox;\n          }\n        }\n\n        // create select box when this node has an enum object\n        if (this[\"enum\"] && this.editable.value) {\n          if (!this.dom.select) {\n            this.dom.select = document.createElement('select');\n            this.id = this.field + '_' + new Date().getUTCMilliseconds();\n            this.dom.select.id = this.id;\n            this.dom.select.name = this.dom.select.id;\n\n            // Create the default empty option\n            var defaultOption = document.createElement('option');\n            defaultOption.value = '';\n            defaultOption.textContent = '--';\n            this.dom.select.appendChild(defaultOption);\n\n            // Iterate all enum values and add them as options\n            this._updateEnumOptions();\n            this.dom.tdSelect = document.createElement('td');\n            this.dom.tdSelect.className = 'jsoneditor-tree';\n            this.dom.tdSelect.appendChild(this.dom.select);\n            this.dom.tdValue.parentNode.insertBefore(this.dom.tdSelect, this.dom.tdValue);\n          }\n\n          // Select the matching value\n          this.dom.select.value = this[\"enum\"].indexOf(this.value) !== -1 ? this.value : ''; // default\n\n          // If the enum is inside a composite type display\n          // both the simple input and the dropdown field\n          if (this.schema && !Node_hasOwnProperty(this.schema, 'oneOf') && !Node_hasOwnProperty(this.schema, 'anyOf') && !Node_hasOwnProperty(this.schema, 'allOf')) {\n            this.valueFieldHTML = this.dom.tdValue.innerHTML;\n            this.dom.tdValue.style.visibility = 'hidden';\n            this.dom.tdValue.textContent = '';\n          } else {\n            delete this.valueFieldHTML;\n          }\n        } else {\n          // cleanup select box when displayed, and attach the editable div instead\n          if (this.dom.tdSelect) {\n            this.dom.tdSelect.parentNode.removeChild(this.dom.tdSelect);\n            delete this.dom.tdSelect;\n            delete this.dom.select;\n            this.dom.tdValue.innerHTML = this.valueFieldHTML;\n            this.dom.tdValue.style.visibility = '';\n            delete this.valueFieldHTML;\n            this.dom.tdValue.appendChild(this.dom.value);\n          }\n        }\n\n        // show color picker when value is a color\n        if (this.editor.options.colorPicker && typeof value === 'string' && (0,util.isValidColor)(value)) {\n          if (!this.dom.color) {\n            this.dom.color = document.createElement('div');\n            this.dom.color.className = 'jsoneditor-color';\n            this.dom.tdColor = document.createElement('td');\n            this.dom.tdColor.className = 'jsoneditor-tree';\n            this.dom.tdColor.appendChild(this.dom.color);\n            this.dom.tdValue.parentNode.insertBefore(this.dom.tdColor, this.dom.tdValue);\n          }\n\n          // update styling of value and color background\n          (0,util.addClassName)(this.dom.value, 'jsoneditor-color-value');\n          if (!this.editable.value) {\n            (0,util.addClassName)(this.dom.color, 'jsoneditor-color-readonly');\n          } else {\n            (0,util.removeClassName)(this.dom.color, 'jsoneditor-color-readonly');\n          }\n          this.dom.color.style.backgroundColor = value;\n        } else {\n          // cleanup color picker when displayed\n          this._deleteDomColor();\n        }\n\n        // show date tag when value is a timestamp in milliseconds\n        if (this._showTimestampTag()) {\n          if (!this.dom.date) {\n            this.dom.date = document.createElement('div');\n            this.dom.date.className = 'jsoneditor-date';\n            this.dom.value.parentNode.appendChild(this.dom.date);\n          }\n          var title = null;\n          if (typeof this.editor.options.timestampFormat === 'function') {\n            title = this.editor.options.timestampFormat({\n              field: this.field,\n              value: this.value,\n              path: this.getPath()\n            });\n          }\n          if (!title) {\n            this.dom.date.textContent = new Date(value).toISOString();\n          } else {\n            while (this.dom.date.firstChild) {\n              this.dom.date.removeChild(this.dom.date.firstChild);\n            }\n            this.dom.date.appendChild(document.createTextNode(title));\n          }\n          this.dom.date.title = new Date(value).toString();\n        } else {\n          // cleanup date tag\n          if (this.dom.date) {\n            this.dom.date.parentNode.removeChild(this.dom.date);\n            delete this.dom.date;\n          }\n        }\n\n        // strip formatting from the contents of the editable div\n        (0,util.stripFormatting)(domValue);\n        this._updateDomDefault();\n      }\n    }\n  }, {\n    key: \"_updateEnumOptions\",\n    value: function _updateEnumOptions() {\n      if (!this[\"enum\"] || !this.dom.select) {\n        return;\n      }\n\n      // clear the existing options\n      this.dom.select.innerHTML = '';\n\n      // Iterate all enum values and add them as options\n      for (var i = 0; i < this[\"enum\"].length; i++) {\n        var option = document.createElement('option');\n        option.value = this[\"enum\"][i];\n        option.textContent = this[\"enum\"][i];\n        this.dom.select.appendChild(option);\n      }\n    }\n  }, {\n    key: \"_deleteDomColor\",\n    value: function _deleteDomColor() {\n      if (this.dom.color) {\n        this.dom.tdColor.parentNode.removeChild(this.dom.tdColor);\n        delete this.dom.tdColor;\n        delete this.dom.color;\n        (0,util.removeClassName)(this.dom.value, 'jsoneditor-color-value');\n      }\n    }\n\n    /**\n     * Update dom field:\n     * - the text color of the field, depending on the text\n     * - the height of the field, depending on the width\n     * - background color in case it is empty\n     * @private\n     */\n  }, {\n    key: \"_updateDomField\",\n    value: function _updateDomField() {\n      var domField = this.dom.field;\n      if (domField) {\n        var tooltip = (0,util.makeFieldTooltip)(this.schema, this.editor.options.language);\n        if (tooltip) {\n          domField.title = tooltip;\n        }\n\n        // make background color lightgray when empty\n        var isEmpty = String(this.field) === '' && this.parent && this.parent.type !== 'array';\n        if (isEmpty) {\n          (0,util.addClassName)(domField, 'jsoneditor-empty');\n        } else {\n          (0,util.removeClassName)(domField, 'jsoneditor-empty');\n        }\n\n        // highlight when there is a search result\n        if (this.searchFieldActive) {\n          (0,util.addClassName)(domField, 'jsoneditor-highlight-active');\n        } else {\n          (0,util.removeClassName)(domField, 'jsoneditor-highlight-active');\n        }\n        if (this.searchField) {\n          (0,util.addClassName)(domField, 'jsoneditor-highlight');\n        } else {\n          (0,util.removeClassName)(domField, 'jsoneditor-highlight');\n        }\n\n        // strip formatting from the contents of the editable div\n        (0,util.stripFormatting)(domField);\n      }\n    }\n\n    /**\n     * Retrieve field from DOM\n     * @param {boolean} [forceUnique]  If true, the field name will be changed\n     *                                 into a unique name in case it is a duplicate.\n     * @private\n     */\n  }, {\n    key: \"_getDomField\",\n    value: function _getDomField(forceUnique) {\n      this._clearFieldError();\n      if (this.dom.field && this.fieldEditable) {\n        this.fieldInnerText = (0,util.getInnerText)(this.dom.field);\n        if (this.fieldInnerText === '' && this.dom.field.innerHTML !== '') {\n          // When clearing the contents, often a <br/> remains, messing up the\n          // styling of the empty text box. Therefore we remove the <br/>\n          this.dom.field.textContent = '';\n        }\n      }\n      if (this.fieldInnerText !== undefined) {\n        try {\n          var field = this._unescapeHTML(this.fieldInnerText);\n          var existingFieldNames = this.parent.getFieldNames(this);\n          var isDuplicate = existingFieldNames.indexOf(field) !== -1;\n          if (!isDuplicate) {\n            if (field !== this.field) {\n              this.field = field;\n              this._debouncedOnChangeField();\n            }\n          } else {\n            if (forceUnique) {\n              // fix duplicate field: change it into a unique name\n              field = (0,util.findUniqueName)(field, existingFieldNames);\n              if (field !== this.field) {\n                this.field = field;\n\n                // TODO: don't debounce but resolve right away, and cancel current debounce\n                this._debouncedOnChangeField();\n              }\n            } else {\n              this._setFieldError((0,i18n/* translate */.Tl)('duplicateFieldError'));\n            }\n          }\n        } catch (err) {\n          // keep the previous field value\n          this._setFieldError((0,i18n/* translate */.Tl)('cannotParseFieldError'));\n        }\n      }\n    }\n\n    /**\n     * Update the value of the schema default element in the DOM.\n     * @private\n     * @returns {undefined}\n     */\n  }, {\n    key: \"_updateDomDefault\",\n    value: function _updateDomDefault() {\n      // Short-circuit if schema is missing, has no default, or if Node has children\n      if (!this.schema || this.schema[\"default\"] === undefined || this._hasChilds()) {\n        return;\n      }\n\n      // select either enum dropdown (select) or input value\n      var inputElement = this.dom.select ? this.dom.select : this.dom.value;\n      if (!inputElement) {\n        return;\n      }\n      if (this.value === this.schema[\"default\"]) {\n        inputElement.title = (0,i18n/* translate */.Tl)('default');\n        (0,util.addClassName)(inputElement, 'jsoneditor-is-default');\n        (0,util.removeClassName)(inputElement, 'jsoneditor-is-not-default');\n      } else {\n        inputElement.removeAttribute('title');\n        (0,util.removeClassName)(inputElement, 'jsoneditor-is-default');\n        (0,util.addClassName)(inputElement, 'jsoneditor-is-not-default');\n      }\n    }\n\n    /**\n     * Test whether to show a timestamp tag or not\n     * @return {boolean} Returns true when the value is a timestamp\n     */\n  }, {\n    key: \"_showTimestampTag\",\n    value: function _showTimestampTag() {\n      if (typeof this.value !== 'number') {\n        return false;\n      }\n      var timestampTag = this.editor.options.timestampTag;\n      if (typeof timestampTag === 'function') {\n        var result = timestampTag({\n          field: this.field,\n          value: this.value,\n          path: this.getPath()\n        });\n        if (typeof result === 'boolean') {\n          return result;\n        } else {\n          return (0,util.isTimestamp)(this.field, this.value);\n        }\n      } else if (timestampTag === true) {\n        return (0,util.isTimestamp)(this.field, this.value);\n      } else {\n        return false;\n      }\n    }\n\n    /**\n     * Clear the dom of the node\n     */\n  }, {\n    key: \"clearDom\",\n    value: function clearDom() {\n      // TODO: hide the node first?\n      // this.hide();\n      // TODO: recursively clear dom?\n\n      this.dom = {};\n    }\n\n    /**\n     * Get the HTML DOM TR element of the node.\n     * The dom will be generated when not yet created\n     * @return {Element} tr    HTML DOM TR Element\n     */\n  }, {\n    key: \"getDom\",\n    value: function getDom() {\n      var dom = this.dom;\n      if (dom.tr) {\n        return dom.tr;\n      }\n      this._updateEditability();\n\n      // create row\n      dom.tr = document.createElement('tr');\n      dom.tr.node = this;\n      if (this.editor.options.mode === 'tree') {\n        // note: we take here the global setting\n        var tdDrag = document.createElement('td');\n        if (this.editable.field) {\n          // create draggable area\n          if (this.parent) {\n            var domDrag = document.createElement('button');\n            domDrag.type = 'button';\n            dom.drag = domDrag;\n            domDrag.className = 'jsoneditor-button jsoneditor-dragarea';\n            domDrag.title = (0,i18n/* translate */.Tl)('drag');\n            tdDrag.appendChild(domDrag);\n          }\n        }\n        dom.tr.appendChild(tdDrag);\n\n        // create context menu\n        var tdMenu = document.createElement('td');\n        var menu = document.createElement('button');\n        menu.type = 'button';\n        dom.menu = menu;\n        menu.className = 'jsoneditor-button jsoneditor-contextmenu-button';\n        menu.title = (0,i18n/* translate */.Tl)('actionsMenu');\n        tdMenu.appendChild(dom.menu);\n        dom.tr.appendChild(tdMenu);\n      }\n\n      // create tree and field\n      var tdField = document.createElement('td');\n      dom.tr.appendChild(tdField);\n      dom.tree = this._createDomTree();\n      tdField.appendChild(dom.tree);\n      this.updateDom({\n        updateIndexes: true\n      });\n      return dom.tr;\n    }\n\n    /**\n     * Test whether a Node is rendered and visible\n     * @returns {boolean}\n     */\n  }, {\n    key: \"isVisible\",\n    value: function isVisible() {\n      return this.dom && this.dom.tr && this.dom.tr.parentNode || false;\n    }\n\n    /**\n     * Test if this node is a sescendant of an other node\n     * @param {Node} node\n     * @return {boolean} isDescendant\n     * @private\n     */\n  }, {\n    key: \"isDescendantOf\",\n    value: function isDescendantOf(node) {\n      var n = this.parent;\n      while (n) {\n        if (n === node) {\n          return true;\n        }\n        n = n.parent;\n      }\n      return false;\n    }\n\n    /**\n     * Create an editable field\n     * @return {Element} domField\n     * @private\n     */\n  }, {\n    key: \"_createDomField\",\n    value: function _createDomField() {\n      return document.createElement('div');\n    }\n\n    /**\n     * Set highlighting for this node and all its childs.\n     * Only applied to the currently visible (expanded childs)\n     * @param {boolean} highlight\n     */\n  }, {\n    key: \"setHighlight\",\n    value: function setHighlight(highlight) {\n      if (this.dom.tr) {\n        if (highlight) {\n          (0,util.addClassName)(this.dom.tr, 'jsoneditor-highlight');\n        } else {\n          (0,util.removeClassName)(this.dom.tr, 'jsoneditor-highlight');\n        }\n        if (this.append) {\n          this.append.setHighlight(highlight);\n        }\n        if (this.childs) {\n          this.childs.forEach(function (child) {\n            child.setHighlight(highlight);\n          });\n        }\n      }\n    }\n\n    /**\n     * Select or deselect a node\n     * @param {boolean} selected\n     * @param {boolean} [isFirst]\n     */\n  }, {\n    key: \"setSelected\",\n    value: function setSelected(selected, isFirst) {\n      this.selected = selected;\n      if (this.dom.tr) {\n        if (selected) {\n          (0,util.addClassName)(this.dom.tr, 'jsoneditor-selected');\n        } else {\n          (0,util.removeClassName)(this.dom.tr, 'jsoneditor-selected');\n        }\n        if (isFirst) {\n          (0,util.addClassName)(this.dom.tr, 'jsoneditor-first');\n        } else {\n          (0,util.removeClassName)(this.dom.tr, 'jsoneditor-first');\n        }\n        if (this.append) {\n          this.append.setSelected(selected);\n        }\n        if (this.showMore) {\n          this.showMore.setSelected(selected);\n        }\n        if (this.childs) {\n          this.childs.forEach(function (child) {\n            child.setSelected(selected);\n          });\n        }\n      }\n    }\n\n    /**\n     * Update the value of the node. Only primitive types are allowed, no Object\n     * or Array is allowed.\n     * @param {String | Number | Boolean | null} value\n     */\n  }, {\n    key: \"updateValue\",\n    value: function updateValue(value) {\n      this.value = value;\n      this.previousValue = value;\n      this.valueError = undefined;\n      this.updateDom();\n    }\n\n    /**\n     * Update the field of the node.\n     * @param {String} field\n     */\n  }, {\n    key: \"updateField\",\n    value: function updateField(field) {\n      this.field = field;\n      this.previousField = field;\n      this.fieldError = undefined;\n      this.updateDom();\n    }\n\n    /**\n     * Update the HTML DOM, optionally recursing through the childs\n     * @param {Object} [options] Available parameters:\n     *                          {boolean} [recurse]         If true, the\n     *                          DOM of the childs will be updated recursively.\n     *                          False by default.\n     *                          {boolean} [updateIndexes]   If true, the childs\n     *                          indexes of the node will be updated too. False by\n     *                          default.\n     */\n  }, {\n    key: \"updateDom\",\n    value: function updateDom(options) {\n      // update level indentation\n      var domTree = this.dom.tree;\n      if (domTree) {\n        domTree.style.marginLeft = this.getLevel() * 24 + 'px';\n      }\n\n      // apply field to DOM\n      var domField = this.dom.field;\n      if (domField) {\n        if (this.fieldEditable) {\n          // parent is an object\n          domField.contentEditable = this.editable.field;\n          domField.spellcheck = false;\n          domField.className = 'jsoneditor-field';\n        } else {\n          // parent is an array this is the root node\n          domField.contentEditable = false;\n          domField.className = 'jsoneditor-readonly';\n        }\n        var fieldText;\n        if (this.index !== undefined) {\n          fieldText = this.index;\n        } else if (this.field !== undefined) {\n          fieldText = this.field;\n        } else {\n          var schema = this.editor.options.schema ? Node._findSchema(this.editor.options.schema, this.editor.options.schemaRefs || {}, this.getPath()) : undefined;\n          if (schema && schema.title) {\n            fieldText = schema.title;\n          } else if (this._hasChilds()) {\n            fieldText = this.type;\n          } else {\n            fieldText = '';\n          }\n        }\n        var escapedField = this._escapeHTML(fieldText);\n        if (document.activeElement !== domField && escapedField !== this._unescapeHTML((0,util.getInnerText)(domField))) {\n          // only update if it not has the focus or when there is an actual change,\n          // else you would needlessly loose the caret position when changing tabs\n          // or whilst typing\n          domField.innerHTML = escapedField;\n        }\n        this._updateSchema();\n        this._updateEnumOptions();\n      }\n\n      // apply value to DOM\n      var domValue = this.dom.value;\n      if (domValue) {\n        if (this.type === 'array' || this.type === 'object') {\n          this.updateNodeName();\n        } else {\n          var escapedValue = this._escapeHTML(this.value);\n          if (document.activeElement !== domValue && escapedValue !== this._unescapeHTML((0,util.getInnerText)(domValue))) {\n            // only update if it not has the focus or when there is an actual change,\n            // else you would needlessly loose the caret position when changing tabs\n            // or whilst typing\n            domValue.innerHTML = escapedValue;\n          }\n        }\n      }\n\n      // apply styling to the table row\n      var tr = this.dom.tr;\n      if (tr) {\n        if (this.type === 'array' || this.type === 'object') {\n          (0,util.addClassName)(tr, 'jsoneditor-expandable');\n          if (this.expanded) {\n            (0,util.addClassName)(tr, 'jsoneditor-expanded');\n            (0,util.removeClassName)(tr, 'jsoneditor-collapsed');\n          } else {\n            (0,util.addClassName)(tr, 'jsoneditor-collapsed');\n            (0,util.removeClassName)(tr, 'jsoneditor-expanded');\n          }\n        } else {\n          (0,util.removeClassName)(tr, 'jsoneditor-expandable');\n          (0,util.removeClassName)(tr, 'jsoneditor-expanded');\n          (0,util.removeClassName)(tr, 'jsoneditor-collapsed');\n        }\n      }\n\n      // update field and value\n      this._updateDomField();\n      this._updateDomValue();\n\n      // update childs indexes\n      if (options && options.updateIndexes === true) {\n        // updateIndexes is true or undefined\n        this._updateDomIndexes();\n      }\n\n      // update childs recursively\n      if (options && options.recurse === true) {\n        if (this.childs) {\n          this.childs.forEach(function (child) {\n            child.updateDom(options);\n          });\n        }\n      }\n\n      // update rendering of error\n      if (this.error) {\n        this.updateError();\n      }\n\n      // update row with append button\n      if (this.append) {\n        this.append.updateDom();\n      }\n\n      // update \"show more\" text at the bottom of large arrays\n      if (this.showMore) {\n        this.showMore.updateDom();\n      }\n\n      // fire onClassName\n      this._updateCssClassName();\n    }\n\n    /**\n     * Locate the JSON schema of the node and check for any enum type\n     * @private\n     */\n  }, {\n    key: \"_updateSchema\",\n    value: function _updateSchema() {\n      // Locating the schema of the node and checking for any enum type\n      if (this.editor && this.editor.options) {\n        // find the part of the json schema matching this nodes path\n        this.schema = this.editor.options.schema\n        // fix childSchema with $ref, and not display the select element on the child schema because of not found enum\n        ? Node._findSchema(this.editor.options.schema, this.editor.options.schemaRefs || {}, this.getPath()) : null;\n        if (this.schema) {\n          this[\"enum\"] = Node._findEnum(this.schema);\n        } else {\n          delete this[\"enum\"];\n        }\n      }\n    }\n\n    /**\n     * Update the DOM of the childs of a node: update indexes and undefined field\n     * names.\n     * Only applicable when structure is an array or object\n     * @private\n     */\n  }, {\n    key: \"_updateDomIndexes\",\n    value: function _updateDomIndexes() {\n      var domValue = this.dom.value;\n      var childs = this.childs;\n      if (domValue && childs) {\n        if (this.type === 'array') {\n          childs.forEach(function (child, index) {\n            child.index = index;\n            var childField = child.dom.field;\n            if (childField) {\n              childField.textContent = index;\n            }\n          });\n        } else if (this.type === 'object') {\n          childs.forEach(function (child) {\n            if (child.index !== undefined) {\n              delete child.index;\n              if (child.field === undefined) {\n                child.field = '';\n              }\n            }\n          });\n        }\n      }\n    }\n\n    /**\n     * Create an editable value\n     * @private\n     */\n  }, {\n    key: \"_createDomValue\",\n    value: function _createDomValue() {\n      var domValue;\n      if (this.type === 'array') {\n        domValue = document.createElement('div');\n        domValue.textContent = '[...]';\n      } else if (this.type === 'object') {\n        domValue = document.createElement('div');\n        domValue.textContent = '{...}';\n      } else {\n        if (!this.editable.value && (0,util.isUrl)(this.value)) {\n          // create a link in case of read-only editor and value containing an url\n          domValue = document.createElement('a');\n          domValue.href = this.value;\n          domValue.innerHTML = this._escapeHTML(this.value);\n        } else {\n          // create an editable or read-only div\n          domValue = document.createElement('div');\n          domValue.contentEditable = this.editable.value;\n          domValue.spellcheck = false;\n          domValue.innerHTML = this._escapeHTML(this.value);\n        }\n      }\n      return domValue;\n    }\n\n    /**\n     * Create an expand/collapse button\n     * @return {Element} expand\n     * @private\n     */\n  }, {\n    key: \"_createDomExpandButton\",\n    value: function _createDomExpandButton() {\n      // create expand button\n      var expand = document.createElement('button');\n      expand.type = 'button';\n      if (this._hasChilds()) {\n        expand.className = this.expanded ? 'jsoneditor-button jsoneditor-expanded' : 'jsoneditor-button jsoneditor-collapsed';\n        expand.title = (0,i18n/* translate */.Tl)('expandTitle');\n      } else {\n        expand.className = 'jsoneditor-button jsoneditor-invisible';\n        expand.title = '';\n      }\n      return expand;\n    }\n\n    /**\n     * Create a DOM tree element, containing the expand/collapse button\n     * @return {Element} domTree\n     * @private\n     */\n  }, {\n    key: \"_createDomTree\",\n    value: function _createDomTree() {\n      var dom = this.dom;\n      var domTree = document.createElement('table');\n      var tbody = document.createElement('tbody');\n      domTree.style.borderCollapse = 'collapse'; // TODO: put in css\n      domTree.className = 'jsoneditor-values';\n      domTree.appendChild(tbody);\n      var tr = document.createElement('tr');\n      tbody.appendChild(tr);\n\n      // create expand button\n      var tdExpand = document.createElement('td');\n      tdExpand.className = 'jsoneditor-tree';\n      tr.appendChild(tdExpand);\n      dom.expand = this._createDomExpandButton();\n      tdExpand.appendChild(dom.expand);\n      dom.tdExpand = tdExpand;\n\n      // create the field\n      var tdField = document.createElement('td');\n      tdField.className = 'jsoneditor-tree';\n      tr.appendChild(tdField);\n      dom.field = this._createDomField();\n      tdField.appendChild(dom.field);\n      dom.tdField = tdField;\n\n      // create a separator\n      var tdSeparator = document.createElement('td');\n      tdSeparator.className = 'jsoneditor-tree';\n      tr.appendChild(tdSeparator);\n      if (this.type !== 'object' && this.type !== 'array') {\n        tdSeparator.appendChild(document.createTextNode(':'));\n        tdSeparator.className = 'jsoneditor-separator';\n      }\n      dom.tdSeparator = tdSeparator;\n\n      // create the value\n      var tdValue = document.createElement('td');\n      tdValue.className = 'jsoneditor-tree';\n      tr.appendChild(tdValue);\n      dom.value = this._createDomValue();\n      tdValue.appendChild(dom.value);\n      dom.tdValue = tdValue;\n      return domTree;\n    }\n\n    /**\n     * Handle an event. The event is caught centrally by the editor\n     * @param {Event} event\n     */\n  }, {\n    key: \"onEvent\",\n    value: function onEvent(event) {\n      var type = event.type;\n      var target = event.target || event.srcElement;\n      var dom = this.dom;\n      var node = this;\n      var expandable = this._hasChilds();\n\n      // check if mouse is on menu or on dragarea.\n      // If so, highlight current row and its childs\n      if (target === dom.drag || target === dom.menu) {\n        if (type === 'mouseover') {\n          this.editor.highlighter.highlight(this);\n        } else if (type === 'mouseout') {\n          this.editor.highlighter.unhighlight();\n        }\n      }\n\n      // context menu events\n      if (type === 'click' && target === dom.menu) {\n        var highlighter = node.editor.highlighter;\n        highlighter.highlight(node);\n        highlighter.lock();\n        (0,util.addClassName)(dom.menu, 'jsoneditor-selected');\n        this.showContextMenu(dom.menu, function () {\n          (0,util.removeClassName)(dom.menu, 'jsoneditor-selected');\n          highlighter.unlock();\n          highlighter.unhighlight();\n        });\n      }\n\n      // expand events\n      if (type === 'click') {\n        if (target === dom.expand) {\n          if (expandable) {\n            var recurse = event.ctrlKey; // with ctrl-key, expand/collapse all\n            this._onExpand(recurse);\n          }\n        }\n      }\n      if (type === 'click' && (event.target === node.dom.tdColor || event.target === node.dom.color) && this.editable.value) {\n        this._showColorPicker();\n      }\n\n      // swap the value of a boolean when the checkbox displayed left is clicked\n      if (type === 'change' && target === dom.checkbox) {\n        this.dom.value.textContent = String(!this.value);\n        this._getDomValue();\n        this._updateDomDefault();\n      }\n\n      // update the value of the node based on the selected option\n      if (type === 'change' && target === dom.select) {\n        this.dom.value.innerHTML = this._escapeHTML(dom.select.value);\n        this._getDomValue();\n        this._updateDomValue();\n      }\n\n      // value events\n      var domValue = dom.value;\n      if (target === domValue) {\n        // noinspection FallthroughInSwitchStatementJS\n        switch (type) {\n          case 'blur':\n          case 'change':\n            {\n              this._getDomValue();\n              this._clearValueError();\n              this._updateDomValue();\n              var escapedValue = this._escapeHTML(this.value);\n              if (escapedValue !== this._unescapeHTML((0,util.getInnerText)(domValue))) {\n                // only update when there is an actual change, else you loose the\n                // caret position when changing tabs or whilst typing\n                domValue.innerHTML = escapedValue;\n              }\n              break;\n            }\n          case 'input':\n            // this._debouncedGetDomValue(true); // TODO\n            this._getDomValue();\n            this._updateDomValue();\n            break;\n          case 'keydown':\n          case 'mousedown':\n            // TODO: cleanup\n            this.editor.selection = this.editor.getDomSelection();\n            break;\n          case 'click':\n            if (event.ctrlKey && this.editable.value) {\n              // if read-only, we use the regular click behavior of an anchor\n              if ((0,util.isUrl)(this.value)) {\n                event.preventDefault();\n                window.open(this.value, '_blank', 'noreferrer');\n              }\n            }\n            break;\n          case 'keyup':\n            // this._debouncedGetDomValue(true); // TODO\n            this._getDomValue();\n            this._updateDomValue();\n            break;\n          case 'cut':\n          case 'paste':\n            setTimeout(function () {\n              node._getDomValue();\n              node._updateDomValue();\n            }, 1);\n            break;\n        }\n      }\n\n      // field events\n      var domField = dom.field;\n      if (target === domField) {\n        switch (type) {\n          case 'blur':\n            {\n              this._getDomField(true);\n              this._updateDomField();\n              var escapedField = this._escapeHTML(this.field);\n              if (escapedField !== this._unescapeHTML((0,util.getInnerText)(domField))) {\n                // only update when there is an actual change, else you loose the\n                // caret position when changing tabs or whilst typing\n                domField.innerHTML = escapedField;\n              }\n              break;\n            }\n          case 'input':\n            this._getDomField();\n            this._updateSchema();\n            this._updateDomField();\n            this._updateDomValue();\n            break;\n          case 'keydown':\n          case 'mousedown':\n            this.editor.selection = this.editor.getDomSelection();\n            break;\n          case 'keyup':\n            this._getDomField();\n            this._updateDomField();\n            break;\n          case 'cut':\n          case 'paste':\n            setTimeout(function () {\n              node._getDomField();\n              node._updateDomField();\n            }, 1);\n            break;\n        }\n      }\n\n      // focus\n      // when clicked in whitespace left or right from the field or value, set focus\n      var domTree = dom.tree;\n      if (domTree && target === domTree.parentNode && type === 'click' && !event.hasMoved) {\n        var left = event.offsetX !== undefined ? event.offsetX < (this.getLevel() + 1) * 24 : event.pageX < (0,util.getAbsoluteLeft)(dom.tdSeparator); // for FF\n        if (left || expandable) {\n          // node is expandable when it is an object or array\n          if (domField) {\n            (0,util.setEndOfContentEditable)(domField);\n            domField.focus();\n          }\n        } else {\n          if (domValue && !this[\"enum\"]) {\n            (0,util.setEndOfContentEditable)(domValue);\n            domValue.focus();\n          }\n        }\n      }\n      if ((target === dom.tdExpand && !expandable || target === dom.tdField || target === dom.tdSeparator) && type === 'click' && !event.hasMoved) {\n        if (domField) {\n          (0,util.setEndOfContentEditable)(domField);\n          domField.focus();\n        }\n      }\n      if (type === 'keydown') {\n        this.onKeyDown(event);\n      }\n\n      // fire after applying for example a change by clicking a checkbox\n      if (typeof this.editor.options.onEvent === 'function') {\n        this._onEvent(event);\n      }\n    }\n\n    /**\n     * Trigger external onEvent provided in options if node is a JSON field or\n     * value.\n     * Information provided depends on the element, value is only included if\n     * event occurs in a JSON value:\n     * {field: string, path: {string|number}[] [, value: string]}\n     * @param {Event} event\n     * @private\n     */\n  }, {\n    key: \"_onEvent\",\n    value: function _onEvent(event) {\n      var element = event.target;\n      var isField = element === this.dom.field;\n      var isValue = element === this.dom.value || element === this.dom.checkbox || element === this.dom.select;\n      if (isField || isValue) {\n        var info = {\n          field: this.getField(),\n          path: this.getPath()\n        };\n\n        // For leaf values, include value\n        if (isValue && !this._hasChilds()) {\n          info.value = this.getValue();\n        }\n        this.editor.options.onEvent(info, event);\n      }\n    }\n\n    /**\n     * Key down event handler\n     * @param {Event} event\n     */\n  }, {\n    key: \"onKeyDown\",\n    value: function onKeyDown(event) {\n      var keynum = event.which || event.keyCode;\n      var target = event.target || event.srcElement;\n      var ctrlKey = event.ctrlKey;\n      var shiftKey = event.shiftKey;\n      var altKey = event.altKey;\n      var handled = false;\n      var prevNode, nextNode, nextDom, nextDom2;\n      var editable = this.editor.options.mode === 'tree';\n      var oldSelection;\n      var oldNextNode;\n      var oldParent;\n      var oldIndexRedo;\n      var newIndexRedo;\n      var oldParentPathRedo;\n      var newParentPathRedo;\n      var nodes;\n      var multiselection;\n      var selectedNodes = this.editor.multiselection.nodes.length > 0 ? this.editor.multiselection.nodes : [this];\n      var firstNode = selectedNodes[0];\n      var lastNode = selectedNodes[selectedNodes.length - 1];\n\n      // console.log(ctrlKey, keynum, event.charCode); // TODO: cleanup\n      if (keynum === 13) {\n        // Enter\n        if (target === this.dom.value) {\n          if (!this.editable.value || event.ctrlKey) {\n            if ((0,util.isUrl)(this.value)) {\n              window.open(this.value, '_blank', 'noreferrer');\n              handled = true;\n            }\n          }\n        } else if (target === this.dom.expand) {\n          var expandable = this._hasChilds();\n          if (expandable) {\n            var recurse = event.ctrlKey; // with ctrl-key, expand/collapse all\n            this._onExpand(recurse);\n            target.focus();\n            handled = true;\n          }\n        }\n      } else if (keynum === 68) {\n        // D\n        if (ctrlKey && editable) {\n          // Ctrl+D\n          Node.onDuplicate(selectedNodes);\n          handled = true;\n        }\n      } else if (keynum === 69) {\n        // E\n        if (ctrlKey) {\n          // Ctrl+E and Ctrl+Shift+E\n          this._onExpand(shiftKey); // recurse = shiftKey\n          target.focus(); // TODO: should restore focus in case of recursing expand (which takes DOM offline)\n          handled = true;\n        }\n      } else if (keynum === 77 && editable) {\n        // M\n        if (ctrlKey) {\n          // Ctrl+M\n          this.showContextMenu(target);\n          handled = true;\n        }\n      } else if (keynum === 46 && editable) {\n        // Del\n        if (ctrlKey) {\n          // Ctrl+Del\n          Node.onRemove(selectedNodes);\n          handled = true;\n        }\n      } else if (keynum === 45 && editable) {\n        // Ins\n        if (ctrlKey && !shiftKey) {\n          // Ctrl+Ins\n          this._onInsertBefore();\n          handled = true;\n        } else if (ctrlKey && shiftKey) {\n          // Ctrl+Shift+Ins\n          this._onInsertAfter();\n          handled = true;\n        }\n      } else if (keynum === 35) {\n        // End\n        if (altKey) {\n          // Alt+End\n          // find the last node\n          var endNode = this._lastNode();\n          if (endNode) {\n            endNode.focus(Node.focusElement || this._getElementName(target));\n          }\n          handled = true;\n        }\n      } else if (keynum === 36) {\n        // Home\n        if (altKey) {\n          // Alt+Home\n          // find the first node\n          var homeNode = this._firstNode();\n          if (homeNode) {\n            homeNode.focus(Node.focusElement || this._getElementName(target));\n          }\n          handled = true;\n        }\n      } else if (keynum === 37) {\n        // Arrow Left\n        if (altKey && !shiftKey) {\n          // Alt + Arrow Left\n          // move to left element\n          var prevElement = this._previousElement(target);\n          if (prevElement) {\n            this.focus(this._getElementName(prevElement));\n          }\n          handled = true;\n        } else if (altKey && shiftKey && editable) {\n          // Alt + Shift + Arrow left\n          if (lastNode.expanded) {\n            var appendDom = lastNode.getAppendDom();\n            nextDom = appendDom ? appendDom.nextSibling : undefined;\n          } else {\n            var dom = lastNode.getDom();\n            nextDom = dom.nextSibling;\n          }\n          if (nextDom) {\n            nextNode = Node.getNodeFromTarget(nextDom);\n            nextDom2 = nextDom.nextSibling;\n            var nextNode2 = Node.getNodeFromTarget(nextDom2);\n            if (nextNode && nextNode instanceof AppendNode && !(lastNode.parent.childs.length === 1) && nextNode2 && nextNode2.parent) {\n              oldSelection = this.editor.getDomSelection();\n              oldParent = firstNode.parent;\n              oldNextNode = oldParent.childs[lastNode.getIndex() + 1] || oldParent.append;\n              oldIndexRedo = firstNode.getIndex();\n              newIndexRedo = nextNode2.getIndex();\n              oldParentPathRedo = oldParent.getInternalPath();\n              newParentPathRedo = nextNode2.parent.getInternalPath();\n              selectedNodes.forEach(function (node) {\n                nextNode2.parent.moveBefore(node, nextNode2);\n              });\n              this.focus(Node.focusElement || this._getElementName(target));\n              this.editor._onAction('moveNodes', {\n                count: selectedNodes.length,\n                fieldNames: selectedNodes.map(getField),\n                oldParentPath: oldParent.getInternalPath(),\n                newParentPath: firstNode.parent.getInternalPath(),\n                oldIndex: oldNextNode.getIndex(),\n                newIndex: firstNode.getIndex(),\n                oldIndexRedo: oldIndexRedo,\n                newIndexRedo: newIndexRedo,\n                oldParentPathRedo: oldParentPathRedo,\n                newParentPathRedo: newParentPathRedo,\n                oldSelection: oldSelection,\n                newSelection: this.editor.getDomSelection()\n              });\n            }\n          }\n        }\n      } else if (keynum === 38) {\n        // Arrow Up\n        if (altKey && !shiftKey) {\n          // Alt + Arrow Up\n          // find the previous node\n          prevNode = this._previousNode();\n          if (prevNode) {\n            this.editor.deselect(true);\n            prevNode.focus(Node.focusElement || this._getElementName(target));\n          }\n          handled = true;\n        } else if (!altKey && ctrlKey && shiftKey && editable) {\n          // Ctrl + Shift + Arrow Up\n          // select multiple nodes\n          prevNode = this._previousNode();\n          if (prevNode) {\n            multiselection = this.editor.multiselection;\n            multiselection.start = multiselection.start || this;\n            multiselection.end = prevNode;\n            nodes = this.editor._findTopLevelNodes(multiselection.start, multiselection.end);\n            this.editor.select(nodes);\n            prevNode.focus('field'); // select field as we know this always exists\n          }\n          handled = true;\n        } else if (altKey && shiftKey && editable) {\n          // Alt + Shift + Arrow Up\n          // find the previous node\n          prevNode = firstNode._previousNode();\n          if (prevNode && prevNode.parent) {\n            oldSelection = this.editor.getDomSelection();\n            oldParent = firstNode.parent;\n            oldNextNode = oldParent.childs[lastNode.getIndex() + 1] || oldParent.append;\n            oldIndexRedo = firstNode.getIndex();\n            newIndexRedo = prevNode.getIndex();\n            oldParentPathRedo = oldParent.getInternalPath();\n            newParentPathRedo = prevNode.parent.getInternalPath();\n            selectedNodes.forEach(function (node) {\n              prevNode.parent.moveBefore(node, prevNode);\n            });\n            this.focus(Node.focusElement || this._getElementName(target));\n            this.editor._onAction('moveNodes', {\n              count: selectedNodes.length,\n              fieldNames: selectedNodes.map(getField),\n              oldParentPath: oldParent.getInternalPath(),\n              newParentPath: firstNode.parent.getInternalPath(),\n              oldIndex: oldNextNode.getIndex(),\n              newIndex: firstNode.getIndex(),\n              oldIndexRedo: oldIndexRedo,\n              newIndexRedo: newIndexRedo,\n              oldParentPathRedo: oldParentPathRedo,\n              newParentPathRedo: newParentPathRedo,\n              oldSelection: oldSelection,\n              newSelection: this.editor.getDomSelection()\n            });\n          }\n          handled = true;\n        }\n      } else if (keynum === 39) {\n        // Arrow Right\n        if (altKey && !shiftKey) {\n          // Alt + Arrow Right\n          // move to right element\n          var nextElement = this._nextElement(target);\n          if (nextElement) {\n            this.focus(this._getElementName(nextElement));\n          }\n          handled = true;\n        } else if (altKey && shiftKey && editable) {\n          // Alt + Shift + Arrow Right\n          var _dom = firstNode.getDom();\n          var prevDom = _dom.previousSibling;\n          if (prevDom) {\n            prevNode = Node.getNodeFromTarget(prevDom);\n            if (prevNode && prevNode.parent && !prevNode.isVisible()) {\n              oldSelection = this.editor.getDomSelection();\n              oldParent = firstNode.parent;\n              oldNextNode = oldParent.childs[lastNode.getIndex() + 1] || oldParent.append;\n              oldIndexRedo = firstNode.getIndex();\n              newIndexRedo = prevNode.getIndex();\n              oldParentPathRedo = oldParent.getInternalPath();\n              newParentPathRedo = prevNode.parent.getInternalPath();\n              selectedNodes.forEach(function (node) {\n                prevNode.parent.moveBefore(node, prevNode);\n              });\n              this.focus(Node.focusElement || this._getElementName(target));\n              this.editor._onAction('moveNodes', {\n                count: selectedNodes.length,\n                fieldNames: selectedNodes.map(getField),\n                oldParentPath: oldParent.getInternalPath(),\n                newParentPath: firstNode.parent.getInternalPath(),\n                oldIndex: oldNextNode.getIndex(),\n                newIndex: firstNode.getIndex(),\n                oldIndexRedo: oldIndexRedo,\n                newIndexRedo: newIndexRedo,\n                oldParentPathRedo: oldParentPathRedo,\n                newParentPathRedo: newParentPathRedo,\n                oldSelection: oldSelection,\n                newSelection: this.editor.getDomSelection()\n              });\n            }\n          }\n        }\n      } else if (keynum === 40) {\n        // Arrow Down\n        if (altKey && !shiftKey) {\n          // Alt + Arrow Down\n          // find the next node\n          nextNode = this._nextNode();\n          if (nextNode) {\n            this.editor.deselect(true);\n            nextNode.focus(Node.focusElement || this._getElementName(target));\n          }\n          handled = true;\n        } else if (!altKey && ctrlKey && shiftKey && editable) {\n          // Ctrl + Shift + Arrow Down\n          // select multiple nodes\n          nextNode = this._nextNode();\n          if (nextNode) {\n            multiselection = this.editor.multiselection;\n            multiselection.start = multiselection.start || this;\n            multiselection.end = nextNode;\n            nodes = this.editor._findTopLevelNodes(multiselection.start, multiselection.end);\n            this.editor.select(nodes);\n            nextNode.focus('field'); // select field as we know this always exists\n          }\n          handled = true;\n        } else if (altKey && shiftKey && editable) {\n          // Alt + Shift + Arrow Down\n          // find the 2nd next node and move before that one\n          if (lastNode.expanded) {\n            nextNode = lastNode.append ? lastNode.append._nextNode() : undefined;\n          } else {\n            nextNode = lastNode._nextNode();\n          }\n\n          // when the next node is not visible, we've reached the \"showMore\" buttons\n          if (nextNode && !nextNode.isVisible()) {\n            nextNode = nextNode.parent.showMore;\n          }\n          if (nextNode && nextNode instanceof AppendNode) {\n            nextNode = lastNode;\n          }\n          var _nextNode2 = nextNode && (nextNode._nextNode() || nextNode.parent.append);\n          if (_nextNode2 && _nextNode2.parent) {\n            oldSelection = this.editor.getDomSelection();\n            oldParent = firstNode.parent;\n            oldNextNode = oldParent.childs[lastNode.getIndex() + 1] || oldParent.append;\n            oldIndexRedo = firstNode.getIndex();\n            newIndexRedo = _nextNode2.getIndex();\n            oldParentPathRedo = oldParent.getInternalPath();\n            newParentPathRedo = _nextNode2.parent.getInternalPath();\n            selectedNodes.forEach(function (node) {\n              _nextNode2.parent.moveBefore(node, _nextNode2);\n            });\n            this.focus(Node.focusElement || this._getElementName(target));\n            this.editor._onAction('moveNodes', {\n              count: selectedNodes.length,\n              fieldNames: selectedNodes.map(getField),\n              oldParentPath: oldParent.getInternalPath(),\n              newParentPath: firstNode.parent.getInternalPath(),\n              oldParentPathRedo: oldParentPathRedo,\n              newParentPathRedo: newParentPathRedo,\n              oldIndexRedo: oldIndexRedo,\n              newIndexRedo: newIndexRedo,\n              oldIndex: oldNextNode.getIndex(),\n              newIndex: firstNode.getIndex(),\n              oldSelection: oldSelection,\n              newSelection: this.editor.getDomSelection()\n            });\n          }\n          handled = true;\n        }\n      }\n      if (handled) {\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    }\n\n    /**\n     * Handle the expand event, when clicked on the expand button\n     * @param {boolean} recurse   If true, child nodes will be expanded too\n     * @private\n     */\n  }, {\n    key: \"_onExpand\",\n    value: function _onExpand(recurse) {\n      var table;\n      var frame;\n      var scrollTop;\n      if (recurse) {\n        // Take the table offline\n        table = this.dom.tr.parentNode; // TODO: not nice to access the main table like this\n        frame = table.parentNode;\n        scrollTop = frame.scrollTop;\n        frame.removeChild(table);\n      }\n      if (this.expanded) {\n        this.collapse(recurse);\n      } else {\n        this.expand(recurse);\n      }\n      if (recurse) {\n        // Put the table online again\n        frame.appendChild(table);\n        frame.scrollTop = scrollTop;\n      }\n      if (typeof this.editor.options.onExpand === 'function') {\n        this.editor.options.onExpand({\n          path: this.getPath(),\n          isExpand: this.expanded,\n          recursive: recurse\n        });\n      }\n    }\n\n    /**\n     * Open a color picker to select a new color\n     * @private\n     */\n  }, {\n    key: \"_showColorPicker\",\n    value: function _showColorPicker() {\n      if (typeof this.editor.options.onColorPicker === 'function' && this.dom.color) {\n        var node = this;\n\n        // force deleting current color picker (if any)\n        node._deleteDomColor();\n        node.updateDom();\n        var colorAnchor = (0,createAbsoluteAnchor/* createAbsoluteAnchor */.p)(this.dom.color, this.editor.getPopupAnchor());\n        this.editor.options.onColorPicker(colorAnchor, this.value, function onChange(value) {\n          if (typeof value === 'string' && value !== node.value) {\n            // force recreating the color block, to cleanup any attached color picker\n            node._deleteDomColor();\n            node.value = value;\n            node.updateDom();\n            node._debouncedOnChangeValue();\n          }\n        });\n      }\n    }\n\n    /**\n     * Get all field names of an object\n     * @param {Node} [excludeNode] Optional node to be excluded from the returned field names\n     * @return {string[]}\n     */\n  }, {\n    key: \"getFieldNames\",\n    value: function getFieldNames(excludeNode) {\n      if (this.type === 'object') {\n        return this.childs.filter(function (child) {\n          return child !== excludeNode;\n        }).map(function (child) {\n          return child.field;\n        });\n      }\n      return [];\n    }\n\n    /**\n     * Handle insert before event\n     * @param {String} [field]\n     * @param {*} [value]\n     * @param {String} [type]   Can be 'auto', 'array', 'object', or 'string'\n     * @private\n     */\n  }, {\n    key: \"_onInsertBefore\",\n    value: function _onInsertBefore(field, value, type) {\n      var oldSelection = this.editor.getDomSelection();\n      var newNode = new Node(this.editor, {\n        field: field !== undefined ? field : '',\n        value: value !== undefined ? value : '',\n        type: type\n      });\n      newNode.expand(true);\n      var beforePath = this.getInternalPath();\n      this.parent.insertBefore(newNode, this);\n      this.editor.highlighter.unhighlight();\n      newNode.focus('field');\n      var newSelection = this.editor.getDomSelection();\n      this.editor._onAction('insertBeforeNodes', {\n        nodes: [newNode],\n        paths: [newNode.getInternalPath()],\n        beforePath: beforePath,\n        parentPath: this.parent.getInternalPath(),\n        oldSelection: oldSelection,\n        newSelection: newSelection\n      });\n    }\n\n    /**\n     * Handle insert after event\n     * @param {String} [field]\n     * @param {*} [value]\n     * @param {String} [type]   Can be 'auto', 'array', 'object', or 'string'\n     * @private\n     */\n  }, {\n    key: \"_onInsertAfter\",\n    value: function _onInsertAfter(field, value, type) {\n      var oldSelection = this.editor.getDomSelection();\n      var newNode = new Node(this.editor, {\n        field: field !== undefined ? field : '',\n        value: value !== undefined ? value : '',\n        type: type\n      });\n      newNode.expand(true);\n      this.parent.insertAfter(newNode, this);\n      this.editor.highlighter.unhighlight();\n      newNode.focus('field');\n      var newSelection = this.editor.getDomSelection();\n      this.editor._onAction('insertAfterNodes', {\n        nodes: [newNode],\n        paths: [newNode.getInternalPath()],\n        afterPath: this.getInternalPath(),\n        parentPath: this.parent.getInternalPath(),\n        oldSelection: oldSelection,\n        newSelection: newSelection\n      });\n    }\n\n    /**\n     * Handle append event\n     * @param {String} [field]\n     * @param {*} [value]\n     * @param {String} [type]   Can be 'auto', 'array', 'object', or 'string'\n     * @private\n     */\n  }, {\n    key: \"_onAppend\",\n    value: function _onAppend(field, value, type) {\n      var oldSelection = this.editor.getDomSelection();\n      var newNode = new Node(this.editor, {\n        field: field !== undefined ? field : '',\n        value: value !== undefined ? value : '',\n        type: type\n      });\n      newNode.expand(true);\n      this.parent.appendChild(newNode);\n      this.editor.highlighter.unhighlight();\n      newNode.focus('field');\n      var newSelection = this.editor.getDomSelection();\n      this.editor._onAction('appendNodes', {\n        nodes: [newNode],\n        paths: [newNode.getInternalPath()],\n        parentPath: this.parent.getInternalPath(),\n        oldSelection: oldSelection,\n        newSelection: newSelection\n      });\n    }\n\n    /**\n     * Change the type of the node's value\n     * @param {String} newType\n     * @private\n     */\n  }, {\n    key: \"_onChangeType\",\n    value: function _onChangeType(newType) {\n      var oldType = this.type;\n      if (newType !== oldType) {\n        var oldSelection = this.editor.getDomSelection();\n        this.changeType(newType);\n        var newSelection = this.editor.getDomSelection();\n        this.editor._onAction('changeType', {\n          path: this.getInternalPath(),\n          oldType: oldType,\n          newType: newType,\n          oldSelection: oldSelection,\n          newSelection: newSelection\n        });\n      }\n    }\n\n    /**\n     * Sort the child's of the node. Only applicable when the node has type 'object'\n     * or 'array'.\n     * @param {String[] | string} path  Path of the child value to be compared\n     * @param {String} direction        Sorting direction. Available values: \"asc\", \"desc\"\n     * @param {boolean} [triggerAction=true]  If true (default), a user action will be\n     *                                        triggered, creating an entry in history\n     *                                        and invoking onChange.\n     * @private\n     */\n  }, {\n    key: \"sort\",\n    value: function sort(path, direction) {\n      var triggerAction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      if (typeof path === 'string') {\n        path = (0,util.parsePath)(path);\n      }\n      if (!this._hasChilds()) {\n        return;\n      }\n      this.hideChilds(); // sorting is faster when the childs are not attached to the dom\n\n      // copy the childs array (the old one will be kept for an undo action\n      var oldChilds = this.childs;\n      this.childs = this.childs.concat();\n\n      // sort the childs array\n      var order = direction === 'desc' ? -1 : 1;\n      if (this.type === 'object') {\n        this.childs.sort(function (a, b) {\n          return order * naturalSort_default()(a.field, b.field);\n        });\n      } else {\n        // this.type === 'array'\n        this.childs.sort(function (a, b) {\n          var nodeA = a.getNestedChild(path);\n          var nodeB = b.getNestedChild(path);\n          if (!nodeA) {\n            return order;\n          }\n          if (!nodeB) {\n            return -order;\n          }\n          var valueA = nodeA.value;\n          var valueB = nodeB.value;\n          if (typeof valueA !== 'string' && typeof valueB !== 'string') {\n            // both values are a number, boolean, or null -> use simple, fast sorting\n            return valueA > valueB ? order : valueA < valueB ? -order : 0;\n          }\n          return order * naturalSort_default()(valueA, valueB);\n        });\n      }\n\n      // update the index numbering\n      this._updateDomIndexes();\n      this.showChilds();\n      if (triggerAction === true) {\n        this.editor._onAction('sort', {\n          path: this.getInternalPath(),\n          oldChilds: oldChilds,\n          newChilds: this.childs\n        });\n      }\n    }\n\n    /**\n     * Replace the value of the node, keep it's state\n     * @param {*} newValue\n     */\n  }, {\n    key: \"update\",\n    value: function update(newValue) {\n      var oldValue = this.getInternalValue();\n      this.setValue(newValue);\n      this.editor._onAction('transform', {\n        path: this.getInternalPath(),\n        oldValue: oldValue,\n        newValue: this.getInternalValue()\n      });\n    }\n\n    /**\n     * Remove this node from the DOM\n     * @returns {{table: Element, nextTr?: Element}}\n     *            Returns the DOM elements that which be used to attach the node\n     *            to the DOM again, see _attachToDom.\n     * @private\n     */\n  }, {\n    key: \"_detachFromDom\",\n    value: function _detachFromDom() {\n      var table = this.dom.tr ? this.dom.tr.parentNode : undefined;\n      var lastTr;\n      if (this.expanded) {\n        lastTr = this.getAppendDom();\n      } else {\n        lastTr = this.getDom();\n      }\n      var nextTr = lastTr && lastTr.parentNode ? lastTr.nextSibling : undefined;\n      this.hide({\n        resetVisibleChilds: false\n      });\n      return {\n        table: table,\n        nextTr: nextTr\n      };\n    }\n\n    /**\n     * Attach this node to the DOM again\n     * @param {{table: Element, nextTr?: Element}} domAnchor\n     *            The DOM elements returned by _detachFromDom.\n     * @private\n     */\n  }, {\n    key: \"_attachToDom\",\n    value: function _attachToDom(domAnchor) {\n      if (domAnchor.table) {\n        if (domAnchor.nextTr) {\n          domAnchor.table.insertBefore(this.getDom(), domAnchor.nextTr);\n        } else {\n          domAnchor.table.appendChild(this.getDom());\n        }\n      }\n      if (this.expanded) {\n        this.showChilds();\n      }\n    }\n\n    /**\n     * Transform the node given a JMESPath query.\n     * @param {String} query    JMESPath query to apply\n     * @private\n     */\n  }, {\n    key: \"transform\",\n    value: function transform(query) {\n      if (!this._hasChilds()) {\n        return;\n      }\n      this.hideChilds(); // sorting is faster when the childs are not attached to the dom\n\n      try {\n        var oldInternalValue = this.getInternalValue();\n\n        // apply the JMESPath query\n        var oldValue = this.getValue();\n        var newValue = this.editor.options.executeQuery(oldValue, query);\n        this.setValue(newValue);\n        var newInternalValue = this.getInternalValue();\n        this.editor._onAction('transform', {\n          path: this.getInternalPath(),\n          oldValue: oldInternalValue,\n          newValue: newInternalValue\n        });\n        this.showChilds();\n      } catch (err) {\n        this.showChilds();\n        this.editor._onError(err);\n      }\n    }\n\n    /**\n     * Make this object the root object of the ditor\n     */\n  }, {\n    key: \"extract\",\n    value: function extract() {\n      this.editor.node.hideChilds();\n      this.hideChilds();\n      try {\n        var oldInternalValue = this.editor.node.getInternalValue();\n        this.editor._setRoot(this);\n        var newInternalValue = this.editor.node.getInternalValue();\n        this.editor._onAction('transform', {\n          path: this.editor.node.getInternalPath(),\n          oldValue: oldInternalValue,\n          newValue: newInternalValue\n        });\n      } catch (err) {\n        this.editor._onError(err);\n      } finally {\n        this.updateDom({\n          recurse: true\n        });\n        this.showChilds();\n      }\n    }\n\n    /**\n     * Get a nested child given a path with properties\n     * @param {String[]} path\n     * @returns {Node}\n     */\n  }, {\n    key: \"getNestedChild\",\n    value: function getNestedChild(path) {\n      var i = 0;\n      var child = this;\n      while (child && i < path.length) {\n        child = child.findChildByProperty(path[i]);\n        i++;\n      }\n      return child;\n    }\n\n    /**\n     * Find a child by property name\n     * @param {string} prop\n     * @return {Node | undefined} Returns the child node when found, or undefined otherwise\n     */\n  }, {\n    key: \"findChildByProperty\",\n    value: function findChildByProperty(prop) {\n      if (this.type !== 'object') {\n        return undefined;\n      }\n      return this.childs.find(function (child) {\n        return child.field === prop;\n      });\n    }\n\n    /**\n     * Create a table row with an append button.\n     * @return {HTMLElement | undefined} tr with the AppendNode contents\n     */\n  }, {\n    key: \"getAppendDom\",\n    value: function getAppendDom() {\n      if (!this.append) {\n        this.append = new AppendNode(this.editor);\n        this.append.setParent(this);\n      }\n      return this.append.getDom();\n    }\n\n    /**\n     * Create a table row with an showMore button and text\n     * @return {HTMLElement | undefined} tr with the AppendNode contents\n     */\n  }, {\n    key: \"getShowMoreDom\",\n    value: function getShowMoreDom() {\n      if (!this.showMore) {\n        this.showMore = new ShowMoreNode(this.editor, this);\n      }\n      return this.showMore.getDom();\n    }\n\n    /**\n     * Get the next sibling of current node\n     * @return {Node} nextSibling\n     */\n  }, {\n    key: \"nextSibling\",\n    value: function nextSibling() {\n      var index = this.parent.childs.indexOf(this);\n      return this.parent.childs[index + 1] || this.parent.append;\n    }\n\n    /**\n     * Get the previously rendered node\n     * @return {Node | null} previousNode\n     */\n  }, {\n    key: \"_previousNode\",\n    value: function _previousNode() {\n      var prevNode = null;\n      var dom = this.getDom();\n      if (dom && dom.parentNode) {\n        // find the previous field\n        var prevDom = dom;\n        do {\n          prevDom = prevDom.previousSibling;\n          prevNode = Node.getNodeFromTarget(prevDom);\n        } while (prevDom && prevNode && prevNode instanceof AppendNode && !prevNode.isVisible());\n      }\n      return prevNode;\n    }\n\n    /**\n     * Get the next rendered node\n     * @return {Node | null} nextNode\n     * @private\n     */\n  }, {\n    key: \"_nextNode\",\n    value: function _nextNode() {\n      var nextNode = null;\n      var dom = this.getDom();\n      if (dom && dom.parentNode) {\n        // find the previous field\n        var nextDom = dom;\n        do {\n          nextDom = nextDom.nextSibling;\n          nextNode = Node.getNodeFromTarget(nextDom);\n        } while (nextDom && nextNode && nextNode instanceof AppendNode && !nextNode.isVisible());\n      }\n      return nextNode;\n    }\n\n    /**\n     * Get the first rendered node\n     * @return {Node | null} firstNode\n     * @private\n     */\n  }, {\n    key: \"_firstNode\",\n    value: function _firstNode() {\n      var firstNode = null;\n      var dom = this.getDom();\n      if (dom && dom.parentNode) {\n        var firstDom = dom.parentNode.firstChild;\n        firstNode = Node.getNodeFromTarget(firstDom);\n      }\n      return firstNode;\n    }\n\n    /**\n     * Get the last rendered node\n     * @return {Node | null} lastNode\n     * @private\n     */\n  }, {\n    key: \"_lastNode\",\n    value: function _lastNode() {\n      var lastNode = null;\n      var dom = this.getDom();\n      if (dom && dom.parentNode) {\n        var lastDom = dom.parentNode.lastChild;\n        lastNode = Node.getNodeFromTarget(lastDom);\n        while (lastDom && lastNode && !lastNode.isVisible()) {\n          lastDom = lastDom.previousSibling;\n          lastNode = Node.getNodeFromTarget(lastDom);\n        }\n      }\n      return lastNode;\n    }\n\n    /**\n     * Get the next element which can have focus.\n     * @param {Element} elem\n     * @return {Element | null} nextElem\n     * @private\n     */\n  }, {\n    key: \"_previousElement\",\n    value: function _previousElement(elem) {\n      var dom = this.dom;\n      // noinspection FallthroughInSwitchStatementJS\n      switch (elem) {\n        case dom.value:\n          if (this.fieldEditable) {\n            return dom.field;\n          }\n        // intentional fall through\n        case dom.field:\n          if (this._hasChilds()) {\n            return dom.expand;\n          }\n        // intentional fall through\n        case dom.expand:\n          return dom.menu;\n        case dom.menu:\n          if (dom.drag) {\n            return dom.drag;\n          }\n        // intentional fall through\n        default:\n          return null;\n      }\n    }\n\n    /**\n     * Get the next element which can have focus.\n     * @param {Element} elem\n     * @return {Element | null} nextElem\n     * @private\n     */\n  }, {\n    key: \"_nextElement\",\n    value: function _nextElement(elem) {\n      var dom = this.dom;\n      // noinspection FallthroughInSwitchStatementJS\n      switch (elem) {\n        case dom.drag:\n          return dom.menu;\n        case dom.menu:\n          if (this._hasChilds()) {\n            return dom.expand;\n          }\n        // intentional fall through\n        case dom.expand:\n          if (this.fieldEditable) {\n            return dom.field;\n          }\n        // intentional fall through\n        case dom.field:\n          if (!this._hasChilds()) {\n            return dom.value;\n          }\n        // intentional fall through\n        default:\n          return null;\n      }\n    }\n\n    /**\n     * Get the dom name of given element. returns null if not found.\n     * For example when element === dom.field, \"field\" is returned.\n     * @param {Element} element\n     * @return {String | null} elementName  Available elements with name: 'drag',\n     *                                      'menu', 'expand', 'field', 'value'\n     * @private\n     */\n  }, {\n    key: \"_getElementName\",\n    value: function _getElementName(element) {\n      var _this2 = this;\n      return Object.keys(this.dom).find(function (name) {\n        return _this2.dom[name] === element;\n      });\n    }\n\n    /**\n     * Test if this node has childs. This is the case when the node is an object\n     * or array.\n     * @return {boolean} hasChilds\n     * @private\n     */\n  }, {\n    key: \"_hasChilds\",\n    value: function _hasChilds() {\n      return this.type === 'array' || this.type === 'object';\n    }\n  }, {\n    key: \"addTemplates\",\n    value: function addTemplates(menu, append) {\n      var node = this;\n      var templates = node.editor.options.templates;\n      if (templates == null) return;\n      if (templates.length) {\n        // create a separator\n        menu.push({\n          type: 'separator'\n        });\n      }\n      var appendData = function appendData(name, data) {\n        node._onAppend(name, data);\n      };\n      var insertData = function insertData(name, data) {\n        node._onInsertBefore(name, data);\n      };\n      templates.forEach(function (template) {\n        menu.push({\n          text: template.text,\n          className: template.className || 'jsoneditor-type-object',\n          title: template.title,\n          click: append ? appendData.bind(this, template.field, template.value) : insertData.bind(this, template.field, template.value)\n        });\n      });\n    }\n\n    /**\n     * Show a contextmenu for this node\n     * @param {HTMLElement} anchor   Anchor element to attach the context menu to\n     *                               as sibling.\n     * @param {function} [onClose]   Callback method called when the context menu\n     *                               is being closed.\n     */\n  }, {\n    key: \"showContextMenu\",\n    value: function showContextMenu(anchor, onClose) {\n      var node = this;\n      var items = [];\n      if (this.editable.value) {\n        items.push({\n          text: (0,i18n/* translate */.Tl)('type'),\n          title: (0,i18n/* translate */.Tl)('typeTitle'),\n          className: 'jsoneditor-type-' + this.type,\n          submenu: [{\n            text: (0,i18n/* translate */.Tl)('auto'),\n            className: 'jsoneditor-type-auto' + (this.type === 'auto' ? ' jsoneditor-selected' : ''),\n            title: (0,i18n/* translate */.Tl)('autoType'),\n            click: function click() {\n              node._onChangeType('auto');\n            }\n          }, {\n            text: (0,i18n/* translate */.Tl)('array'),\n            className: 'jsoneditor-type-array' + (this.type === 'array' ? ' jsoneditor-selected' : ''),\n            title: (0,i18n/* translate */.Tl)('arrayType'),\n            click: function click() {\n              node._onChangeType('array');\n            }\n          }, {\n            text: (0,i18n/* translate */.Tl)('object'),\n            className: 'jsoneditor-type-object' + (this.type === 'object' ? ' jsoneditor-selected' : ''),\n            title: (0,i18n/* translate */.Tl)('objectType'),\n            click: function click() {\n              node._onChangeType('object');\n            }\n          }, {\n            text: (0,i18n/* translate */.Tl)('string'),\n            className: 'jsoneditor-type-string' + (this.type === 'string' ? ' jsoneditor-selected' : ''),\n            title: (0,i18n/* translate */.Tl)('stringType'),\n            click: function click() {\n              node._onChangeType('string');\n            }\n          }]\n        });\n      }\n      if (this._hasChilds()) {\n        if (this.editor.options.enableSort) {\n          items.push({\n            text: (0,i18n/* translate */.Tl)('sort'),\n            title: (0,i18n/* translate */.Tl)('sortTitle', {\n              type: this.type\n            }),\n            className: 'jsoneditor-sort-asc',\n            click: function click() {\n              node.showSortModal();\n            }\n          });\n        }\n        if (this.editor.options.enableTransform) {\n          items.push({\n            text: (0,i18n/* translate */.Tl)('transform'),\n            title: (0,i18n/* translate */.Tl)('transformTitle', {\n              type: this.type\n            }),\n            className: 'jsoneditor-transform',\n            click: function click() {\n              node.showTransformModal();\n            }\n          });\n        }\n        if (this.parent) {\n          items.push({\n            text: (0,i18n/* translate */.Tl)('extract'),\n            title: (0,i18n/* translate */.Tl)('extractTitle', {\n              type: this.type\n            }),\n            className: 'jsoneditor-extract',\n            click: function click() {\n              node.extract();\n            }\n          });\n        }\n      }\n      if (this.parent && this.parent._hasChilds()) {\n        if (items.length) {\n          // create a separator\n          items.push({\n            type: 'separator'\n          });\n        }\n\n        // create append button (for last child node only)\n        var childs = node.parent.childs;\n        if (node === childs[childs.length - 1]) {\n          var appendSubmenu = [{\n            text: (0,i18n/* translate */.Tl)('auto'),\n            className: 'jsoneditor-type-auto',\n            title: (0,i18n/* translate */.Tl)('autoType'),\n            click: function click() {\n              node._onAppend('', '', 'auto');\n            }\n          }, {\n            text: (0,i18n/* translate */.Tl)('array'),\n            className: 'jsoneditor-type-array',\n            title: (0,i18n/* translate */.Tl)('arrayType'),\n            click: function click() {\n              node._onAppend('', []);\n            }\n          }, {\n            text: (0,i18n/* translate */.Tl)('object'),\n            className: 'jsoneditor-type-object',\n            title: (0,i18n/* translate */.Tl)('objectType'),\n            click: function click() {\n              node._onAppend('', {});\n            }\n          }, {\n            text: (0,i18n/* translate */.Tl)('string'),\n            className: 'jsoneditor-type-string',\n            title: (0,i18n/* translate */.Tl)('stringType'),\n            click: function click() {\n              node._onAppend('', '', 'string');\n            }\n          }];\n          node.addTemplates(appendSubmenu, true);\n          items.push({\n            text: (0,i18n/* translate */.Tl)('appendText'),\n            title: (0,i18n/* translate */.Tl)('appendTitle'),\n            submenuTitle: (0,i18n/* translate */.Tl)('appendSubmenuTitle'),\n            className: 'jsoneditor-append',\n            click: function click() {\n              node._onAppend('', '', 'auto');\n            },\n            submenu: appendSubmenu\n          });\n        }\n\n        // create insert button\n        var insertSubmenu = [{\n          text: (0,i18n/* translate */.Tl)('auto'),\n          className: 'jsoneditor-type-auto',\n          title: (0,i18n/* translate */.Tl)('autoType'),\n          click: function click() {\n            node._onInsertBefore('', '', 'auto');\n          }\n        }, {\n          text: (0,i18n/* translate */.Tl)('array'),\n          className: 'jsoneditor-type-array',\n          title: (0,i18n/* translate */.Tl)('arrayType'),\n          click: function click() {\n            node._onInsertBefore('', []);\n          }\n        }, {\n          text: (0,i18n/* translate */.Tl)('object'),\n          className: 'jsoneditor-type-object',\n          title: (0,i18n/* translate */.Tl)('objectType'),\n          click: function click() {\n            node._onInsertBefore('', {});\n          }\n        }, {\n          text: (0,i18n/* translate */.Tl)('string'),\n          className: 'jsoneditor-type-string',\n          title: (0,i18n/* translate */.Tl)('stringType'),\n          click: function click() {\n            node._onInsertBefore('', '', 'string');\n          }\n        }];\n        node.addTemplates(insertSubmenu, false);\n        items.push({\n          text: (0,i18n/* translate */.Tl)('insert'),\n          title: (0,i18n/* translate */.Tl)('insertTitle'),\n          submenuTitle: (0,i18n/* translate */.Tl)('insertSub'),\n          className: 'jsoneditor-insert',\n          click: function click() {\n            node._onInsertBefore('', '', 'auto');\n          },\n          submenu: insertSubmenu\n        });\n        if (this.editable.field) {\n          // create duplicate button\n          items.push({\n            text: (0,i18n/* translate */.Tl)('duplicateText'),\n            title: (0,i18n/* translate */.Tl)('duplicateField'),\n            className: 'jsoneditor-duplicate',\n            click: function click() {\n              Node.onDuplicate(node);\n            }\n          });\n\n          // create remove button\n          items.push({\n            text: (0,i18n/* translate */.Tl)('removeText'),\n            title: (0,i18n/* translate */.Tl)('removeField'),\n            className: 'jsoneditor-remove',\n            click: function click() {\n              Node.onRemove(node);\n            }\n          });\n        }\n      }\n      if (this.editor.options.onCreateMenu) {\n        var path = node.getPath();\n        items = this.editor.options.onCreateMenu(items, {\n          type: 'single',\n          path: path,\n          paths: [path]\n        });\n      }\n      var menu = new ContextMenu/* ContextMenu */.t(items, {\n        close: onClose\n      });\n      menu.show(anchor, this.editor.getPopupAnchor());\n    }\n\n    /**\n     * Show sorting modal\n     */\n  }, {\n    key: \"showSortModal\",\n    value: function showSortModal() {\n      var node = this;\n      var container = this.editor.options.modalAnchor || constants/* DEFAULT_MODAL_ANCHOR */.ai;\n      var json = this.getValue();\n      function onSort(sortedBy) {\n        var path = sortedBy.path;\n        var pathArray = (0,util.parsePath)(path);\n        node.sortedBy = sortedBy;\n        node.sort(pathArray, sortedBy.direction);\n      }\n      (0,js_showSortModal.showSortModal)(container, json, onSort, node.sortedBy);\n    }\n\n    /**\n     * Show transform modal\n     */\n  }, {\n    key: \"showTransformModal\",\n    value: function showTransformModal() {\n      var _this3 = this;\n      var _this$editor$options = this.editor.options,\n        modalAnchor = _this$editor$options.modalAnchor,\n        createQuery = _this$editor$options.createQuery,\n        executeQuery = _this$editor$options.executeQuery,\n        queryDescription = _this$editor$options.queryDescription;\n      var json = this.getValue();\n      (0,js_showTransformModal.showTransformModal)({\n        container: modalAnchor || constants/* DEFAULT_MODAL_ANCHOR */.ai,\n        json: json,\n        queryDescription: queryDescription,\n        // can be undefined\n        createQuery: createQuery,\n        executeQuery: executeQuery,\n        onTransform: function onTransform(query) {\n          _this3.transform(query);\n        }\n      });\n    }\n\n    /**\n     * get the type of a value\n     * @param {*} value\n     * @return {String} type   Can be 'object', 'array', 'string', 'auto'\n     * @private\n     */\n  }, {\n    key: \"_getType\",\n    value: function _getType(value) {\n      if (value instanceof Array) {\n        return 'array';\n      }\n      if (value instanceof Object) {\n        return 'object';\n      }\n      if (typeof value === 'string' && typeof (0,util.parseString)(value) !== 'string') {\n        return 'string';\n      }\n      return 'auto';\n    }\n\n    /**\n     * escape a text, such that it can be displayed safely in an HTML element\n     * @param {String} text\n     * @return {String} escapedText\n     * @private\n     */\n  }, {\n    key: \"_escapeHTML\",\n    value: function _escapeHTML(text) {\n      if (typeof text !== 'string') {\n        return String(text);\n      } else {\n        var htmlEscaped = String(text).replace(/&/g, '&amp;') // must be replaced first!\n        .replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/ {2}/g, ' &nbsp;') // replace double space with an nbsp and space\n        .replace(/^ /, '&nbsp;') // space at start\n        .replace(/ $/, '&nbsp;'); // space at end\n\n        var json = JSON.stringify(htmlEscaped);\n        var html = json.substring(1, json.length - 1);\n        if (this.editor.options.escapeUnicode === true) {\n          html = (0,util.escapeUnicodeChars)(html);\n        }\n        return html;\n      }\n    }\n\n    /**\n     * unescape a string.\n     * @param {String} escapedText\n     * @return {String} text\n     * @private\n     */\n  }, {\n    key: \"_unescapeHTML\",\n    value: function _unescapeHTML(escapedText) {\n      var json = '\"' + this._escapeJSON(escapedText) + '\"';\n      var htmlEscaped = (0,util.parse)(json);\n      return htmlEscaped.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&nbsp;|\\u00A0/g, ' ').replace(/&amp;/g, '&'); // must be replaced last\n    }\n\n    /**\n     * escape a text to make it a valid JSON string. The method will:\n     *   - replace unescaped double quotes with '\\\"'\n     *   - replace unescaped backslash with '\\\\'\n     *   - replace returns with '\\n'\n     * @param {String} text\n     * @return {String} escapedText\n     * @private\n     */\n  }, {\n    key: \"_escapeJSON\",\n    value: function _escapeJSON(text) {\n      // TODO: replace with some smart regex (only when a new solution is faster!)\n      var escaped = '';\n      var i = 0;\n      while (i < text.length) {\n        var c = text.charAt(i);\n        if (c === '\\n') {\n          escaped += '\\\\n';\n        } else if (c === '\\\\') {\n          escaped += c;\n          i++;\n          c = text.charAt(i);\n          if (c === '' || '\"\\\\/bfnrtu'.indexOf(c) === -1) {\n            escaped += '\\\\'; // no valid escape character\n          }\n          escaped += c;\n        } else if (c === '\"') {\n          escaped += '\\\\\"';\n        } else {\n          escaped += c;\n        }\n        i++;\n      }\n      return escaped;\n    }\n\n    /**\n     * update the object name according to the callback onNodeName\n     * @private\n     */\n  }, {\n    key: \"updateNodeName\",\n    value: function updateNodeName() {\n      var count = this.childs ? this.childs.length : 0;\n      var nodeName;\n      if (this.type === 'object' || this.type === 'array') {\n        if (this.editor.options.onNodeName) {\n          try {\n            var getValue = this.getValue.bind(this);\n            nodeName = this.editor.options.onNodeName({\n              path: this.getPath(),\n              size: count,\n              type: this.type,\n              get value() {\n                return getValue();\n              }\n            });\n          } catch (err) {\n            console.error('Error in onNodeName callback: ', err);\n          }\n        }\n        this.dom.value.textContent = this.type === 'object' ? '{' + (nodeName || count) + '}' : '[' + (nodeName || count) + ']';\n      }\n    }\n\n    /**\n     * update recursively the object's and its children's name.\n     * @private\n     */\n  }, {\n    key: \"recursivelyUpdateNodeName\",\n    value: function recursivelyUpdateNodeName() {\n      if (this.expanded) {\n        this.updateNodeName();\n        if (this.childs !== 'undefined') {\n          var i;\n          for (i in this.childs) {\n            this.childs[i].recursivelyUpdateNodeName();\n          }\n        }\n      }\n    }\n  }]);\n}();\n\n// debounce interval for keyboard input in milliseconds\nNode.prototype.DEBOUNCE_INTERVAL = 150;\n\n// search will stop iterating as soon as the max is reached\nNode.prototype.MAX_SEARCH_RESULTS = 999;\n\n// default number of child nodes to display\nvar DEFAULT_MAX_VISIBLE_CHILDS = 100;\n\n// stores the element name currently having the focus\nNode.focusElement = undefined;\n\n/**\n * Select all text in an editable div after a delay of 0 ms\n * @param {Element} editableDiv\n */\nNode.select = function (editableDiv) {\n  setTimeout(function () {\n    (0,util.selectContentEditable)(editableDiv);\n  }, 0);\n};\n\n/**\n * DragStart event, fired on mousedown on the dragarea at the left side of a Node\n * @param {Node[] | Node} nodes\n * @param {Event} event\n */\nNode.onDragStart = function (nodes, event) {\n  if (!Array.isArray(nodes)) {\n    return Node.onDragStart([nodes], event);\n  }\n  if (nodes.length === 0) {\n    return;\n  }\n  var firstNode = nodes[0];\n  var lastNode = nodes[nodes.length - 1];\n  var parent = firstNode.parent;\n  var draggedNode = Node.getNodeFromTarget(event.target);\n  var editor = firstNode.editor;\n\n  // in case of multiple selected nodes, offsetY prevents the selection from\n  // jumping when you start dragging one of the lower down nodes in the selection\n  var offsetY = (0,util.getAbsoluteTop)(draggedNode.dom.tr) - (0,util.getAbsoluteTop)(firstNode.dom.tr);\n  if (!editor.mousemove) {\n    editor.mousemove = (0,util.addEventListener)(event.view, 'mousemove', function (event) {\n      Node.onDrag(nodes, event);\n    });\n  }\n  if (!editor.mouseup) {\n    editor.mouseup = (0,util.addEventListener)(event.view, 'mouseup', function (event) {\n      Node.onDragEnd(nodes, event);\n    });\n  }\n  editor.highlighter.lock();\n  editor.drag = {\n    oldCursor: document.body.style.cursor,\n    oldSelection: editor.getDomSelection(),\n    oldPaths: nodes.map(getInternalPath),\n    oldParent: parent,\n    oldNextNode: parent.childs[lastNode.getIndex() + 1] || parent.append,\n    oldParentPathRedo: parent.getInternalPath(),\n    oldIndexRedo: firstNode.getIndex(),\n    mouseX: event.pageX,\n    offsetY: offsetY,\n    level: firstNode.getLevel()\n  };\n  document.body.style.cursor = 'move';\n  event.preventDefault();\n};\n\n/**\n * Drag event, fired when moving the mouse while dragging a Node\n * @param {Node[] | Node} nodes\n * @param {Event} event\n */\nNode.onDrag = function (nodes, event) {\n  if (!Array.isArray(nodes)) {\n    return Node.onDrag([nodes], event);\n  }\n  if (nodes.length === 0) {\n    return;\n  }\n\n  // TODO: this method has grown too large. Split it in a number of methods\n  var editor = nodes[0].editor;\n  var mouseY = event.pageY - editor.drag.offsetY;\n  var mouseX = event.pageX;\n  var trPrev, trNext, trFirst, trLast, trRoot;\n  var nodePrev, nodeNext;\n  var topPrev, topFirst, bottomNext, heightNext;\n  var moved = false;\n\n  // TODO: add an ESC option, which resets to the original position\n\n  // move up/down\n  var firstNode = nodes[0];\n  var trThis = firstNode.dom.tr;\n  var topThis = (0,util.getAbsoluteTop)(trThis);\n  var heightThis = trThis.offsetHeight;\n  if (mouseY < topThis) {\n    // move up\n    trPrev = trThis;\n    do {\n      trPrev = trPrev.previousSibling;\n      nodePrev = Node.getNodeFromTarget(trPrev);\n      topPrev = trPrev ? (0,util.getAbsoluteTop)(trPrev) : 0;\n    } while (trPrev && mouseY < topPrev);\n    if (nodePrev && !nodePrev.parent) {\n      nodePrev = undefined;\n    }\n    if (!nodePrev) {\n      // move to the first node\n      trRoot = trThis.parentNode.firstChild;\n      trPrev = trRoot ? trRoot.nextSibling : undefined;\n      nodePrev = Node.getNodeFromTarget(trPrev);\n      if (nodePrev === firstNode) {\n        nodePrev = undefined;\n      }\n    }\n    if (nodePrev && nodePrev.isVisible()) {\n      // check if mouseY is really inside the found node\n      trPrev = nodePrev.dom.tr;\n      topPrev = trPrev ? (0,util.getAbsoluteTop)(trPrev) : 0;\n      if (mouseY > topPrev + heightThis) {\n        nodePrev = undefined;\n      }\n    }\n    if (nodePrev && (editor.options.limitDragging === false || nodePrev.parent === nodes[0].parent)) {\n      nodes.forEach(function (node) {\n        nodePrev.parent.moveBefore(node, nodePrev);\n      });\n      moved = true;\n    }\n  } else {\n    // move down\n    var lastNode = nodes[nodes.length - 1];\n    trLast = lastNode.expanded && lastNode.append ? lastNode.append.getDom() : lastNode.dom.tr;\n    trFirst = trLast ? trLast.nextSibling : undefined;\n    if (trFirst) {\n      topFirst = (0,util.getAbsoluteTop)(trFirst);\n      trNext = trFirst;\n      do {\n        nodeNext = Node.getNodeFromTarget(trNext);\n        if (trNext) {\n          bottomNext = trNext.nextSibling ? (0,util.getAbsoluteTop)(trNext.nextSibling) : 0;\n          heightNext = trNext ? bottomNext - topFirst : 0;\n          if (nodeNext && nodeNext.parent.childs.length === nodes.length && nodeNext.parent.childs[nodes.length - 1] === lastNode) {\n            // We are about to remove the last child of this parent,\n            // which will make the parents appendNode visible.\n            topThis += 27;\n            // TODO: dangerous to suppose the height of the appendNode a constant of 27 px.\n          }\n          trNext = trNext.nextSibling;\n        }\n      } while (trNext && mouseY > topThis + heightNext);\n      if (nodeNext && nodeNext.parent) {\n        // calculate the desired level\n        var diffX = mouseX - editor.drag.mouseX;\n        var diffLevel = Math.round(diffX / 24 / 2);\n        var level = editor.drag.level + diffLevel; // desired level\n        var levelNext = nodeNext.getLevel(); // level to be\n\n        // find the best fitting level (move upwards over the append nodes)\n        trPrev = nodeNext.dom.tr && nodeNext.dom.tr.previousSibling;\n        while (levelNext < level && trPrev) {\n          nodePrev = Node.getNodeFromTarget(trPrev);\n          var isDraggedNode = nodes.some(function (node) {\n            return node === nodePrev || nodePrev.isDescendantOf(node);\n          });\n          if (isDraggedNode) {\n            // neglect the dragged nodes themselves and their childs\n          } else if (nodePrev instanceof AppendNode) {\n            var childs = nodePrev.parent.childs;\n            if (childs.length !== nodes.length || childs[nodes.length - 1] !== lastNode) {\n              // non-visible append node of a list of childs\n              // consisting of not only this node (else the\n              // append node will change into a visible \"empty\"\n              // text when removing this node).\n              nodeNext = Node.getNodeFromTarget(trPrev);\n              levelNext = nodeNext.getLevel();\n            } else {\n              break;\n            }\n          } else {\n            break;\n          }\n          trPrev = trPrev.previousSibling;\n        }\n        if (nodeNext instanceof AppendNode && !nodeNext.isVisible() && nodeNext.parent.showMore.isVisible()) {\n          nodeNext = nodeNext._nextNode();\n        }\n\n        // move the node when its position is changed\n        if (nodeNext && (editor.options.limitDragging === false || nodeNext.parent === nodes[0].parent) && nodeNext.dom.tr && nodeNext.dom.tr !== trLast.nextSibling) {\n          nodes.forEach(function (node) {\n            nodeNext.parent.moveBefore(node, nodeNext);\n          });\n          moved = true;\n        }\n      }\n    }\n  }\n  if (moved) {\n    // update the dragging parameters when moved\n    editor.drag.mouseX = mouseX;\n    editor.drag.level = firstNode.getLevel();\n  }\n\n  // auto scroll when hovering around the top of the editor\n  editor.startAutoScroll(mouseY);\n  event.preventDefault();\n};\n\n/**\n * Drag event, fired on mouseup after having dragged a node\n * @param {Node[] | Node} nodes\n * @param {Event} event\n */\nNode.onDragEnd = function (nodes, event) {\n  if (!Array.isArray(nodes)) {\n    return Node.onDrag([nodes], event);\n  }\n  if (nodes.length === 0) {\n    return;\n  }\n  var firstNode = nodes[0];\n  var editor = firstNode.editor;\n\n  // set focus to the context menu button of the first node\n  if (firstNode && firstNode.dom.menu) {\n    firstNode.dom.menu.focus();\n  }\n  var oldParentPath = editor.drag.oldParent.getInternalPath();\n  var newParentPath = firstNode.parent.getInternalPath();\n  var sameParent = editor.drag.oldParent === firstNode.parent;\n  var oldIndex = editor.drag.oldNextNode.getIndex();\n  var newIndex = firstNode.getIndex();\n  var oldParentPathRedo = editor.drag.oldParentPathRedo;\n  var oldIndexRedo = editor.drag.oldIndexRedo;\n  var newIndexRedo = sameParent && oldIndexRedo < newIndex ? newIndex + nodes.length : newIndex;\n  if (!sameParent || oldIndexRedo !== newIndex) {\n    // only register this action if the node is actually moved to another place\n    editor._onAction('moveNodes', {\n      count: nodes.length,\n      fieldNames: nodes.map(getField),\n      oldParentPath: oldParentPath,\n      newParentPath: newParentPath,\n      oldIndex: oldIndex,\n      newIndex: newIndex,\n      oldIndexRedo: oldIndexRedo,\n      newIndexRedo: newIndexRedo,\n      oldParentPathRedo: oldParentPathRedo,\n      newParentPathRedo: null,\n      // This is a hack, value will be filled in during undo\n\n      oldSelection: editor.drag.oldSelection,\n      newSelection: editor.getDomSelection()\n    });\n  }\n  document.body.style.cursor = editor.drag.oldCursor;\n  editor.highlighter.unlock();\n  nodes.forEach(function (node) {\n    node.updateDom();\n    if (event.target !== node.dom.drag && event.target !== node.dom.menu) {\n      editor.highlighter.unhighlight();\n    }\n  });\n  delete editor.drag;\n  if (editor.mousemove) {\n    (0,util.removeEventListener)(event.view, 'mousemove', editor.mousemove);\n    delete editor.mousemove;\n  }\n  if (editor.mouseup) {\n    (0,util.removeEventListener)(event.view, 'mouseup', editor.mouseup);\n    delete editor.mouseup;\n  }\n\n  // Stop any running auto scroll\n  editor.stopAutoScroll();\n  event.preventDefault();\n};\n\n/**\n * find an enum definition in a JSON schema, as property `enum` or inside\n * one of the schemas composites (`oneOf`, `anyOf`, `allOf`)\n * @param  {Object} schema\n * @return {Array | null} Returns the enum when found, null otherwise.\n * @private\n */\nNode._findEnum = function (schema) {\n  if (schema[\"enum\"]) {\n    return schema[\"enum\"];\n  }\n  var composite = schema.oneOf || schema.anyOf || schema.allOf;\n  if (composite) {\n    var match = composite.filter(function (entry) {\n      return entry[\"enum\"];\n    });\n    if (match.length > 0) {\n      return match[0][\"enum\"];\n    }\n  }\n  return null;\n};\n\n/**\n * Implementation for _findSchema\n * @param {Object} topLevelSchema\n * @param {Object} schemaRefs\n * @param {Array.<string | number>} path\n * @param {Object} currentSchema\n * @return {Object | boolean | null}\n * @private\n */\nNode._findOneSchema = function (topLevelSchema, schemaRefs, path, currentSchema) {\n  var nextPath = path.slice(1, path.length);\n  var nextKey = path[0];\n  if (Node_typeof(currentSchema) === 'object' && '$ref' in currentSchema && typeof currentSchema.$ref === 'string') {\n    var _ref$match;\n    var ref = currentSchema.$ref;\n    if (ref in schemaRefs) {\n      currentSchema = schemaRefs[ref];\n    } else if (ref.startsWith('#/')) {\n      var refPath = ref.substring(2).split('/');\n      currentSchema = topLevelSchema;\n      var _iterator = _createForOfIteratorHelper(refPath),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var segment = _step.value;\n          if (segment in currentSchema) {\n            currentSchema = currentSchema[segment];\n          } else {\n            throw Error(\"Unable to resolve reference \".concat(ref));\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    } else if (((_ref$match = ref.match(/#\\//g)) === null || _ref$match === void 0 ? void 0 : _ref$match.length) === 1) {\n      var _ref$split = ref.split('#/'),\n        _ref$split2 = _slicedToArray(_ref$split, 2),\n        schemaUrl = _ref$split2[0],\n        relativePath = _ref$split2[1];\n      if (schemaUrl in schemaRefs) {\n        var referencedSchema = schemaRefs[schemaUrl];\n        var reference = {\n          $ref: '#/'.concat(relativePath)\n        };\n        var auxNextPath = [];\n        auxNextPath.push(nextKey);\n        if (nextPath.length > 0) {\n          auxNextPath.push.apply(auxNextPath, _toConsumableArray(nextPath));\n        }\n        return Node._findSchema(referencedSchema, schemaRefs, auxNextPath, reference);\n      } else {\n        throw Error(\"Unable to resolve reference \".concat(ref));\n      }\n    } else {\n      throw Error(\"Unable to resolve reference \".concat(ref));\n    }\n  }\n\n  // We have no more path segments to resolve, return the currently found schema\n  // We do this here, after resolving references, in case of the leaf schema beeing a reference\n  if (nextKey === undefined) {\n    return currentSchema;\n  }\n  if (typeof nextKey === 'string') {\n    if (Node_typeof(currentSchema.properties) === 'object' && currentSchema.properties !== null && nextKey in currentSchema.properties) {\n      currentSchema = currentSchema.properties[nextKey];\n      return Node._findSchema(topLevelSchema, schemaRefs, nextPath, currentSchema);\n    }\n    if (Node_typeof(currentSchema.patternProperties) === 'object' && currentSchema.patternProperties !== null) {\n      for (var prop in currentSchema.patternProperties) {\n        if (nextKey.match(prop)) {\n          currentSchema = currentSchema.patternProperties[prop];\n          return Node._findSchema(topLevelSchema, schemaRefs, nextPath, currentSchema);\n        }\n      }\n    }\n    if (Node_typeof(currentSchema.additionalProperties) === 'object') {\n      currentSchema = currentSchema.additionalProperties;\n      return Node._findSchema(topLevelSchema, schemaRefs, nextPath, currentSchema);\n    }\n    return null;\n  }\n  if (typeof nextKey === 'number' && Node_typeof(currentSchema.items) === 'object' && currentSchema.items !== null) {\n    currentSchema = currentSchema.items;\n    return Node._findSchema(topLevelSchema, schemaRefs, nextPath, currentSchema);\n  }\n  return null;\n};\n\n/**\n * Return the part of a JSON schema matching given path.\n *\n * Note that this attempts to find *a* schema matching the path, not necessarily\n * the best / most appropriate.  For example, oneOf vs. anyOf vs. allOf may\n * result in different schemas being applied in practice.\n *\n * @param {Object} topLevelSchema\n * @param {Object} schemaRefs\n * @param {Array.<string | number>} path\n * @param {Object} currentSchema\n * @return {Object | null}\n * @private\n */\nNode._findSchema = function (topLevelSchema, schemaRefs, path) {\n  var currentSchema = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : topLevelSchema;\n  var possibleSchemas = [currentSchema];\n  for (var _i = 0, _arr = [currentSchema.oneOf, currentSchema.anyOf, currentSchema.allOf]; _i < _arr.length; _i++) {\n    var subSchemas = _arr[_i];\n    if (Array.isArray(subSchemas)) {\n      possibleSchemas = possibleSchemas.concat(subSchemas);\n    }\n  }\n  var fallback = null;\n  var _iterator2 = _createForOfIteratorHelper(possibleSchemas),\n    _step2;\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var schema = _step2.value;\n      var result = Node._findOneSchema(topLevelSchema, schemaRefs, path, schema);\n      // Although we don't attempt to find the best / most appropriate schema, we\n      // can at least attempt to find something more specific than `true`.\n      if (result === true) {\n        fallback = true;\n        continue;\n      } else if (result !== null) {\n        return result;\n      }\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n  return fallback;\n};\n\n/**\n * Remove nodes\n * @param {Node[] | Node} nodes\n */\nNode.onRemove = function (nodes) {\n  if (!Array.isArray(nodes)) {\n    return Node.onRemove([nodes]);\n  }\n  if (nodes && nodes.length > 0) {\n    var firstNode = nodes[0];\n    var parent = firstNode.parent;\n    var editor = firstNode.editor;\n    var firstIndex = firstNode.getIndex();\n    editor.highlighter.unhighlight();\n\n    // adjust the focus\n    var oldSelection = editor.getDomSelection();\n    Node.blurNodes(nodes);\n    var newSelection = editor.getDomSelection();\n\n    // store the paths before removing them (needed for history)\n    var paths = nodes.map(getInternalPath);\n\n    // remove the nodes\n    nodes.forEach(function (node) {\n      node.parent._remove(node);\n    });\n\n    // store history action\n    editor._onAction('removeNodes', {\n      nodes: nodes,\n      paths: paths,\n      parentPath: parent.getInternalPath(),\n      index: firstIndex,\n      oldSelection: oldSelection,\n      newSelection: newSelection\n    });\n  }\n};\n\n/**\n * Duplicate nodes\n * duplicated nodes will be added right after the original nodes\n * @param {Node[] | Node} nodes\n */\nNode.onDuplicate = function (nodes) {\n  if (!Array.isArray(nodes)) {\n    return Node.onDuplicate([nodes]);\n  }\n  if (nodes && nodes.length > 0) {\n    var lastNode = nodes[nodes.length - 1];\n    var parent = lastNode.parent;\n    var editor = lastNode.editor;\n    editor.deselect(editor.multiselection.nodes);\n\n    // duplicate the nodes\n    var oldSelection = editor.getDomSelection();\n    var afterNode = lastNode;\n    var clones = nodes.map(function (node) {\n      var clone = node.clone();\n      if (node.parent.type === 'object') {\n        var existingFieldNames = node.parent.getFieldNames();\n        clone.field = (0,util.findUniqueName)(node.field, existingFieldNames);\n      }\n      parent.insertAfter(clone, afterNode);\n      afterNode = clone;\n      return clone;\n    });\n\n    // set selection to the duplicated nodes\n    if (nodes.length === 1) {\n      if (clones[0].parent.type === 'object') {\n        // when duplicating a single object property,\n        // set focus to the field and keep the original field name\n        clones[0].dom.field.innerHTML = nodes[0]._escapeHTML(nodes[0].field);\n        clones[0].focus('field');\n      } else {\n        clones[0].focus();\n      }\n    } else {\n      editor.select(clones);\n    }\n    var newSelection = editor.getDomSelection();\n    editor._onAction('duplicateNodes', {\n      paths: nodes.map(getInternalPath),\n      clonePaths: clones.map(getInternalPath),\n      afterPath: lastNode.getInternalPath(),\n      parentPath: parent.getInternalPath(),\n      oldSelection: oldSelection,\n      newSelection: newSelection\n    });\n  }\n};\n\n/**\n * Find the node from an event target\n * @param {HTMLElement} target\n * @return {Node | undefined} node  or undefined when not found\n * @static\n */\nNode.getNodeFromTarget = function (target) {\n  while (target) {\n    if (target.node) {\n      return target.node;\n    }\n    target = target.parentNode;\n  }\n  return undefined;\n};\n\n/**\n * Test whether target is a child of the color DOM of a node\n * @param {HTMLElement} target\n * @returns {boolean}\n */\nNode.targetIsColorPicker = function (target) {\n  var node = Node.getNodeFromTarget(target);\n  if (node) {\n    var parent = target && target.parentNode;\n    while (parent) {\n      if (parent === node.dom.color) {\n        return true;\n      }\n      parent = parent.parentNode;\n    }\n  }\n  return false;\n};\n\n/**\n * Remove the focus of given nodes, and move the focus to the (a) node before,\n * (b) the node after, or (c) the parent node.\n * @param {Array.<Node> | Node} nodes\n */\nNode.blurNodes = function (nodes) {\n  if (!Array.isArray(nodes)) {\n    Node.blurNodes([nodes]);\n    return;\n  }\n  var firstNode = nodes[0];\n  var parent = firstNode.parent;\n  var firstIndex = firstNode.getIndex();\n  if (parent.childs[firstIndex + nodes.length]) {\n    parent.childs[firstIndex + nodes.length].focus();\n  } else if (parent.childs[firstIndex - 1]) {\n    parent.childs[firstIndex - 1].focus();\n  } else {\n    parent.focus();\n  }\n};\n\n// helper function to get the internal path of a node\nfunction getInternalPath(node) {\n  return node.getInternalPath();\n}\n\n// helper function to get the field of a node\nfunction getField(node) {\n  return node.getField();\n}\nfunction Node_hasOwnProperty(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n\n// TODO: find a nicer solution to resolve this circular dependency between Node and AppendNode\n//       idea: introduce properties .isAppendNode and .isNode and use that instead of instanceof AppendNode checks\nvar AppendNode = appendNodeFactory(Node);\nvar ShowMoreNode = showMoreNodeFactory(Node);\n;// ./src/js/NodeHistory.js\n\n\nfunction NodeHistory_typeof(o) { \"@babel/helpers - typeof\"; return NodeHistory_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, NodeHistory_typeof(o); }\nfunction NodeHistory_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction NodeHistory_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, NodeHistory_toPropertyKey(o.key), o); } }\nfunction NodeHistory_createClass(e, r, t) { return r && NodeHistory_defineProperties(e.prototype, r), t && NodeHistory_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction NodeHistory_toPropertyKey(t) { var i = NodeHistory_toPrimitive(t, \"string\"); return \"symbol\" == NodeHistory_typeof(i) ? i : i + \"\"; }\nfunction NodeHistory_toPrimitive(t, r) { if (\"object\" != NodeHistory_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != NodeHistory_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n/**\n * @constructor History\n * Store action history, enables undo and redo\n * @param {JSONEditor} editor\n */\nvar NodeHistory = /*#__PURE__*/function () {\n  function NodeHistory(editor) {\n    NodeHistory_classCallCheck(this, NodeHistory);\n    this.editor = editor;\n    this.history = [];\n    this.index = -1;\n    this.clear();\n\n    // helper function to find a Node from a path\n    function findNode(path) {\n      return editor.node.findNodeByInternalPath(path);\n    }\n\n    // map with all supported actions\n    this.actions = {\n      editField: {\n        undo: function undo(params) {\n          var parentNode = findNode(params.parentPath);\n          var node = parentNode.childs[params.index];\n          node.updateField(params.oldValue);\n        },\n        redo: function redo(params) {\n          var parentNode = findNode(params.parentPath);\n          var node = parentNode.childs[params.index];\n          node.updateField(params.newValue);\n        }\n      },\n      editValue: {\n        undo: function undo(params) {\n          findNode(params.path).updateValue(params.oldValue);\n        },\n        redo: function redo(params) {\n          findNode(params.path).updateValue(params.newValue);\n        }\n      },\n      changeType: {\n        undo: function undo(params) {\n          findNode(params.path).changeType(params.oldType);\n        },\n        redo: function redo(params) {\n          findNode(params.path).changeType(params.newType);\n        }\n      },\n      appendNodes: {\n        undo: function undo(params) {\n          var parentNode = findNode(params.parentPath);\n          params.paths.map(findNode).forEach(function (node) {\n            parentNode.removeChild(node);\n          });\n        },\n        redo: function redo(params) {\n          var parentNode = findNode(params.parentPath);\n          params.nodes.forEach(function (node) {\n            parentNode.appendChild(node);\n          });\n        }\n      },\n      insertBeforeNodes: {\n        undo: function undo(params) {\n          var parentNode = findNode(params.parentPath);\n          params.paths.map(findNode).forEach(function (node) {\n            parentNode.removeChild(node);\n          });\n        },\n        redo: function redo(params) {\n          var parentNode = findNode(params.parentPath);\n          var beforeNode = findNode(params.beforePath);\n          params.nodes.forEach(function (node) {\n            parentNode.insertBefore(node, beforeNode);\n          });\n        }\n      },\n      insertAfterNodes: {\n        undo: function undo(params) {\n          var parentNode = findNode(params.parentPath);\n          params.paths.map(findNode).forEach(function (node) {\n            parentNode.removeChild(node);\n          });\n        },\n        redo: function redo(params) {\n          var parentNode = findNode(params.parentPath);\n          var afterNode = findNode(params.afterPath);\n          params.nodes.forEach(function (node) {\n            parentNode.insertAfter(node, afterNode);\n            afterNode = node;\n          });\n        }\n      },\n      removeNodes: {\n        undo: function undo(params) {\n          var parentNode = findNode(params.parentPath);\n          var beforeNode = parentNode.childs[params.index] || parentNode.append;\n          params.nodes.forEach(function (node) {\n            parentNode.insertBefore(node, beforeNode);\n          });\n        },\n        redo: function redo(params) {\n          var parentNode = findNode(params.parentPath);\n          params.paths.map(findNode).forEach(function (node) {\n            parentNode.removeChild(node);\n          });\n        }\n      },\n      duplicateNodes: {\n        undo: function undo(params) {\n          var parentNode = findNode(params.parentPath);\n          params.clonePaths.map(findNode).forEach(function (node) {\n            parentNode.removeChild(node);\n          });\n        },\n        redo: function redo(params) {\n          var parentNode = findNode(params.parentPath);\n          var afterNode = findNode(params.afterPath);\n          var nodes = params.paths.map(findNode);\n          nodes.forEach(function (node) {\n            var clone = node.clone();\n            if (parentNode.type === 'object') {\n              var existingFieldNames = parentNode.getFieldNames();\n              clone.field = (0,util.findUniqueName)(node.field, existingFieldNames);\n            }\n            parentNode.insertAfter(clone, afterNode);\n            afterNode = clone;\n          });\n        }\n      },\n      moveNodes: {\n        undo: function undo(params) {\n          var oldParentNode = findNode(params.oldParentPath);\n          var newParentNode = findNode(params.newParentPath);\n          var oldBeforeNode = oldParentNode.childs[params.oldIndex] || oldParentNode.append;\n\n          // first copy the nodes, then move them\n          var nodes = newParentNode.childs.slice(params.newIndex, params.newIndex + params.count);\n          nodes.forEach(function (node, index) {\n            node.field = params.fieldNames[index];\n            oldParentNode.moveBefore(node, oldBeforeNode);\n          });\n\n          // This is a hack to work around an issue that we don't know tha original\n          // path of the new parent after dragging, as the node is already moved at that time.\n          if (params.newParentPathRedo === null) {\n            params.newParentPathRedo = newParentNode.getInternalPath();\n          }\n        },\n        redo: function redo(params) {\n          var oldParentNode = findNode(params.oldParentPathRedo);\n          var newParentNode = findNode(params.newParentPathRedo);\n          var newBeforeNode = newParentNode.childs[params.newIndexRedo] || newParentNode.append;\n\n          // first copy the nodes, then move them\n          var nodes = oldParentNode.childs.slice(params.oldIndexRedo, params.oldIndexRedo + params.count);\n          nodes.forEach(function (node, index) {\n            node.field = params.fieldNames[index];\n            newParentNode.moveBefore(node, newBeforeNode);\n          });\n        }\n      },\n      sort: {\n        undo: function undo(params) {\n          var node = findNode(params.path);\n          node.hideChilds();\n          node.childs = params.oldChilds;\n          node.updateDom({\n            updateIndexes: true\n          });\n          node.showChilds();\n        },\n        redo: function redo(params) {\n          var node = findNode(params.path);\n          node.hideChilds();\n          node.childs = params.newChilds;\n          node.updateDom({\n            updateIndexes: true\n          });\n          node.showChilds();\n        }\n      },\n      transform: {\n        undo: function undo(params) {\n          findNode(params.path).setInternalValue(params.oldValue);\n\n          // TODO: would be nice to restore the state of the node and childs\n        },\n        redo: function redo(params) {\n          findNode(params.path).setInternalValue(params.newValue);\n\n          // TODO: would be nice to restore the state of the node and childs\n        }\n      }\n\n      // TODO: restore the original caret position and selection with each undo\n      // TODO: implement history for actions \"expand\", \"collapse\", \"scroll\", \"setDocument\"\n    };\n  }\n\n  /**\n   * The method onChange is executed when the History is changed, and can\n   * be overloaded.\n   */\n  return NodeHistory_createClass(NodeHistory, [{\n    key: \"onChange\",\n    value: function onChange() {}\n\n    /**\n     * Add a new action to the history\n     * @param {String} action  The executed action. Available actions: \"editField\",\n     *                         \"editValue\", \"changeType\", \"appendNode\",\n     *                         \"removeNode\", \"duplicateNode\", \"moveNode\"\n     * @param {Object} params  Object containing parameters describing the change.\n     *                         The parameters in params depend on the action (for\n     *                         example for \"editValue\" the Node, old value, and new\n     *                         value are provided). params contains all information\n     *                         needed to undo or redo the action.\n     */\n  }, {\n    key: \"add\",\n    value: function add(action, params) {\n      this.index++;\n      this.history[this.index] = {\n        action: action,\n        params: params,\n        timestamp: new Date()\n      };\n\n      // remove redo actions which are invalid now\n      if (this.index < this.history.length - 1) {\n        this.history.splice(this.index + 1, this.history.length - this.index - 1);\n      }\n\n      // fire onchange event\n      this.onChange();\n    }\n\n    /**\n     * Clear history\n     */\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.history = [];\n      this.index = -1;\n\n      // fire onchange event\n      this.onChange();\n    }\n\n    /**\n     * Check if there is an action available for undo\n     * @return {Boolean} canUndo\n     */\n  }, {\n    key: \"canUndo\",\n    value: function canUndo() {\n      return this.index >= 0;\n    }\n\n    /**\n     * Check if there is an action available for redo\n     * @return {Boolean} canRedo\n     */\n  }, {\n    key: \"canRedo\",\n    value: function canRedo() {\n      return this.index < this.history.length - 1;\n    }\n\n    /**\n     * Undo the last action\n     */\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      if (this.canUndo()) {\n        var obj = this.history[this.index];\n        if (obj) {\n          var action = this.actions[obj.action];\n          if (action && action.undo) {\n            action.undo(obj.params);\n            if (obj.params.oldSelection) {\n              try {\n                this.editor.setDomSelection(obj.params.oldSelection);\n              } catch (err) {\n                console.error(err);\n              }\n            }\n          } else {\n            console.error(new Error('unknown action \"' + obj.action + '\"'));\n          }\n        }\n        this.index--;\n\n        // fire onchange event\n        this.onChange();\n      }\n    }\n\n    /**\n     * Redo the last action\n     */\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      if (this.canRedo()) {\n        this.index++;\n        var obj = this.history[this.index];\n        if (obj) {\n          var action = this.actions[obj.action];\n          if (action && action.redo) {\n            action.redo(obj.params);\n            if (obj.params.newSelection) {\n              try {\n                this.editor.setDomSelection(obj.params.newSelection);\n              } catch (err) {\n                console.error(err);\n              }\n            }\n          } else {\n            console.error(new Error('unknown action \"' + obj.action + '\"'));\n          }\n        }\n\n        // fire onchange event\n        this.onChange();\n      }\n    }\n\n    /**\n     * Destroy history\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.editor = null;\n      this.history = [];\n      this.index = -1;\n    }\n  }]);\n}();\n;// ./src/js/SearchBox.js\n\n\nfunction SearchBox_typeof(o) { \"@babel/helpers - typeof\"; return SearchBox_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, SearchBox_typeof(o); }\nfunction SearchBox_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction SearchBox_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, SearchBox_toPropertyKey(o.key), o); } }\nfunction SearchBox_createClass(e, r, t) { return r && SearchBox_defineProperties(e.prototype, r), t && SearchBox_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction SearchBox_toPropertyKey(t) { var i = SearchBox_toPrimitive(t, \"string\"); return \"symbol\" == SearchBox_typeof(i) ? i : i + \"\"; }\nfunction SearchBox_toPrimitive(t, r) { if (\"object\" != SearchBox_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != SearchBox_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n/**\n * @constructor SearchBox\n * Create a search box in given HTML container\n * @param {JSONEditor} editor    The JSON Editor to attach to\n * @param {Element} container               HTML container element of where to\n *                                          create the search box\n */\nvar SearchBox = /*#__PURE__*/function () {\n  function SearchBox(editor, container) {\n    SearchBox_classCallCheck(this, SearchBox);\n    var searchBox = this;\n    this.editor = editor;\n    this.timeout = undefined;\n    this.delay = 200; // ms\n    this.lastText = undefined;\n    this.results = null;\n    this.dom = {};\n    this.dom.container = container;\n    var wrapper = document.createElement('div');\n    this.dom.wrapper = wrapper;\n    wrapper.className = 'jsoneditor-search';\n    container.appendChild(wrapper);\n    var results = document.createElement('div');\n    this.dom.results = results;\n    results.className = 'jsoneditor-results';\n    wrapper.appendChild(results);\n    var divInput = document.createElement('div');\n    this.dom.input = divInput;\n    divInput.className = 'jsoneditor-frame';\n    divInput.title = (0,i18n/* translate */.Tl)('searchTitle');\n    wrapper.appendChild(divInput);\n    var refreshSearch = document.createElement('button');\n    refreshSearch.type = 'button';\n    refreshSearch.className = 'jsoneditor-refresh';\n    divInput.appendChild(refreshSearch);\n    var search = document.createElement('input');\n    search.type = 'text';\n    this.dom.search = search;\n    search.oninput = function (event) {\n      searchBox._onDelayedSearch(event);\n    };\n    search.onchange = function (event) {\n      // For IE 9\n      searchBox._onSearch();\n    };\n    search.onkeydown = function (event) {\n      searchBox._onKeyDown(event);\n    };\n    search.onkeyup = function (event) {\n      searchBox._onKeyUp(event);\n    };\n    refreshSearch.onclick = function (event) {\n      search.select();\n    };\n\n    // TODO: ESC in FF restores the last input, is a FF bug, https://bugzilla.mozilla.org/show_bug.cgi?id=598819\n    divInput.appendChild(search);\n    var searchNext = document.createElement('button');\n    searchNext.type = 'button';\n    searchNext.title = (0,i18n/* translate */.Tl)('searchNextResultTitle');\n    searchNext.className = 'jsoneditor-next';\n    searchNext.onclick = function () {\n      searchBox.next();\n    };\n    divInput.appendChild(searchNext);\n    var searchPrevious = document.createElement('button');\n    searchPrevious.type = 'button';\n    searchPrevious.title = (0,i18n/* translate */.Tl)('searchPreviousResultTitle');\n    searchPrevious.className = 'jsoneditor-previous';\n    searchPrevious.onclick = function () {\n      searchBox.previous();\n    };\n    divInput.appendChild(searchPrevious);\n  }\n\n  /**\n   * Go to the next search result\n   * @param {boolean} [focus]   If true, focus will be set to the next result\n   *                            focus is false by default.\n   */\n  return SearchBox_createClass(SearchBox, [{\n    key: \"next\",\n    value: function next(focus) {\n      if (this.results) {\n        var index = this.resultIndex !== null ? this.resultIndex + 1 : 0;\n        if (index > this.results.length - 1) {\n          index = 0;\n        }\n        this._setActiveResult(index, focus);\n      }\n    }\n\n    /**\n     * Go to the prevous search result\n     * @param {boolean} [focus]   If true, focus will be set to the next result\n     *                            focus is false by default.\n     */\n  }, {\n    key: \"previous\",\n    value: function previous(focus) {\n      if (this.results) {\n        var max = this.results.length - 1;\n        var index = this.resultIndex !== null ? this.resultIndex - 1 : max;\n        if (index < 0) {\n          index = max;\n        }\n        this._setActiveResult(index, focus);\n      }\n    }\n\n    /**\n     * Set new value for the current active result\n     * @param {Number} index\n     * @param {boolean} [focus]   If true, focus will be set to the next result.\n     *                            focus is false by default.\n     * @private\n     */\n  }, {\n    key: \"_setActiveResult\",\n    value: function _setActiveResult(index, focus) {\n      // de-activate current active result\n      if (this.activeResult) {\n        var prevNode = this.activeResult.node;\n        var prevElem = this.activeResult.elem;\n        if (prevElem === 'field') {\n          delete prevNode.searchFieldActive;\n        } else {\n          delete prevNode.searchValueActive;\n        }\n        prevNode.updateDom();\n      }\n      if (!this.results || !this.results[index]) {\n        // out of range, set to undefined\n        this.resultIndex = undefined;\n        this.activeResult = undefined;\n        return;\n      }\n      this.resultIndex = index;\n\n      // set new node active\n      var node = this.results[this.resultIndex].node;\n      var elem = this.results[this.resultIndex].elem;\n      if (elem === 'field') {\n        node.searchFieldActive = true;\n      } else {\n        node.searchValueActive = true;\n      }\n      this.activeResult = this.results[this.resultIndex];\n      node.updateDom();\n\n      // TODO: not so nice that the focus is only set after the animation is finished\n      node.scrollTo(function () {\n        if (focus) {\n          node.focus(elem);\n        }\n      });\n    }\n\n    /**\n     * Cancel any running onDelayedSearch.\n     * @private\n     */\n  }, {\n    key: \"_clearDelay\",\n    value: function _clearDelay() {\n      if (this.timeout !== undefined) {\n        clearTimeout(this.timeout);\n        delete this.timeout;\n      }\n    }\n\n    /**\n     * Start a timer to execute a search after a short delay.\n     * Used for reducing the number of searches while typing.\n     * @param {Event} event\n     * @private\n     */\n  }, {\n    key: \"_onDelayedSearch\",\n    value: function _onDelayedSearch(event) {\n      // execute the search after a short delay (reduces the number of\n      // search actions while typing in the search text box)\n      this._clearDelay();\n      var searchBox = this;\n      this.timeout = setTimeout(function (event) {\n        searchBox._onSearch();\n      }, this.delay);\n    }\n\n    /**\n     * Handle onSearch event\n     * @param {boolean} [forceSearch]  If true, search will be executed again even\n     *                                 when the search text is not changed.\n     *                                 Default is false.\n     * @private\n     */\n  }, {\n    key: \"_onSearch\",\n    value: function _onSearch(forceSearch) {\n      this._clearDelay();\n      var value = this.dom.search.value;\n      var text = value.length > 0 ? value : undefined;\n      if (text !== this.lastText || forceSearch) {\n        // only search again when changed\n        this.lastText = text;\n        this.results = this.editor.search(text);\n        var MAX_SEARCH_RESULTS = this.results[0] ? this.results[0].node.MAX_SEARCH_RESULTS : Infinity;\n\n        // try to maintain the current active result if this is still part of the new search results\n        var activeResultIndex = 0;\n        if (this.activeResult) {\n          for (var i = 0; i < this.results.length; i++) {\n            if (this.results[i].node === this.activeResult.node) {\n              activeResultIndex = i;\n              break;\n            }\n          }\n        }\n        this._setActiveResult(activeResultIndex, false);\n\n        // display search results\n        if (text !== undefined) {\n          var resultCount = this.results.length;\n          if (resultCount === 0) {\n            this.dom.results.textContent = \"no\\xA0results\";\n          } else if (resultCount === 1) {\n            this.dom.results.textContent = \"1\\xA0result\";\n          } else if (resultCount > MAX_SEARCH_RESULTS) {\n            this.dom.results.textContent = MAX_SEARCH_RESULTS + \"+\\xA0results\";\n          } else {\n            this.dom.results.textContent = resultCount + \"\\xA0results\";\n          }\n        } else {\n          this.dom.results.textContent = '';\n        }\n      }\n    }\n\n    /**\n     * Handle onKeyDown event in the input box\n     * @param {Event} event\n     * @private\n     */\n  }, {\n    key: \"_onKeyDown\",\n    value: function _onKeyDown(event) {\n      var keynum = event.which;\n      if (keynum === 27) {\n        // ESC\n        this.dom.search.value = ''; // clear search\n        this._onSearch();\n        event.preventDefault();\n        event.stopPropagation();\n      } else if (keynum === 13) {\n        // Enter\n        if (event.ctrlKey) {\n          // force to search again\n          this._onSearch(true);\n        } else if (event.shiftKey) {\n          // move to the previous search result\n          this.previous();\n        } else {\n          // move to the next search result\n          this.next();\n        }\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    }\n\n    /**\n     * Handle onKeyUp event in the input box\n     * @param {Event} event\n     * @private\n     */\n  }, {\n    key: \"_onKeyUp\",\n    value: function _onKeyUp(event) {\n      var keynum = event.keyCode;\n      if (keynum !== 27 && keynum !== 13) {\n        // !show and !Enter\n        this._onDelayedSearch(event); // For IE 9\n      }\n    }\n\n    /**\n     * Clear the search results\n     */\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.dom.search.value = '';\n      this._onSearch();\n    }\n\n    /**\n     * Refresh searchResults if there is a search value\n     */\n  }, {\n    key: \"forceSearch\",\n    value: function forceSearch() {\n      this._onSearch(true);\n    }\n\n    /**\n     * Test whether the search box value is empty\n     * @returns {boolean} Returns true when empty.\n     */\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return this.dom.search.value === '';\n    }\n\n    /**\n     * Destroy the search box\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.editor = null;\n      this.dom.container.removeChild(this.dom.wrapper);\n      this.dom = null;\n      this.results = null;\n      this.activeResult = null;\n      this._clearDelay();\n    }\n  }]);\n}();\n;// ./src/js/TreePath.js\n\n\nfunction TreePath_typeof(o) { \"@babel/helpers - typeof\"; return TreePath_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, TreePath_typeof(o); }\nfunction TreePath_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction TreePath_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, TreePath_toPropertyKey(o.key), o); } }\nfunction TreePath_createClass(e, r, t) { return r && TreePath_defineProperties(e.prototype, r), t && TreePath_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction TreePath_toPropertyKey(t) { var i = TreePath_toPrimitive(t, \"string\"); return \"symbol\" == TreePath_typeof(i) ? i : i + \"\"; }\nfunction TreePath_toPrimitive(t, r) { if (\"object\" != TreePath_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != TreePath_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n/**\n * Creates a component that visualize path selection in tree based editors\n * @param {HTMLElement} container\n * @param {HTMLElement} root\n * @constructor\n */\nvar TreePath = /*#__PURE__*/function () {\n  function TreePath(container, root) {\n    TreePath_classCallCheck(this, TreePath);\n    if (container) {\n      this.root = root;\n      this.path = document.createElement('div');\n      this.path.className = 'jsoneditor-treepath';\n      this.path.setAttribute('tabindex', 0);\n      this.contentMenuClicked = false;\n      container.appendChild(this.path);\n      this.reset();\n    }\n  }\n\n  /**\n   * Reset component to initial status\n   */\n  return TreePath_createClass(TreePath, [{\n    key: \"reset\",\n    value: function reset() {\n      this.path.textContent = (0,i18n/* translate */.Tl)('selectNode');\n    }\n\n    /**\n     * Renders the component UI according to a given path objects\n     * @param {Array<{name: String, childs: Array}>} pathObjs a list of path objects\n     *\n     */\n  }, {\n    key: \"setPath\",\n    value: function setPath(pathObjs) {\n      var me = this;\n      this.path.textContent = '';\n      if (pathObjs && pathObjs.length) {\n        pathObjs.forEach(function (pathObj, idx) {\n          var pathEl = document.createElement('span');\n          var sepEl;\n          pathEl.className = 'jsoneditor-treepath-element';\n          pathEl.innerText = pathObj.name;\n          pathEl.onclick = _onSegmentClick.bind(me, pathObj);\n          me.path.appendChild(pathEl);\n          if (pathObj.children.length) {\n            sepEl = document.createElement('span');\n            sepEl.className = 'jsoneditor-treepath-seperator';\n            sepEl.textContent = \"\\u25BA\";\n            sepEl.onclick = function () {\n              me.contentMenuClicked = true;\n              var items = [];\n              pathObj.children.forEach(function (child) {\n                items.push({\n                  text: child.name,\n                  className: 'jsoneditor-type-modes' + (pathObjs[idx + 1] + 1 && pathObjs[idx + 1].name === child.name ? ' jsoneditor-selected' : ''),\n                  click: _onContextMenuItemClick.bind(me, pathObj, child.name)\n                });\n              });\n              var menu = new ContextMenu/* ContextMenu */.t(items, {\n                limitHeight: true\n              });\n              menu.show(sepEl, me.root, true);\n            };\n            me.path.appendChild(sepEl);\n          }\n          if (idx === pathObjs.length - 1) {\n            var leftRectPos = (sepEl || pathEl).getBoundingClientRect().right;\n            if (me.path.offsetWidth < leftRectPos) {\n              me.path.scrollLeft = leftRectPos;\n            }\n            if (me.path.scrollLeft) {\n              var showAllBtn = document.createElement('span');\n              showAllBtn.className = 'jsoneditor-treepath-show-all-btn';\n              showAllBtn.title = 'show all path';\n              showAllBtn.textContent = '...';\n              showAllBtn.onclick = _onShowAllClick.bind(me, pathObjs);\n              me.path.insertBefore(showAllBtn, me.path.firstChild);\n            }\n          }\n        });\n      }\n      function _onShowAllClick(pathObjs) {\n        me.contentMenuClicked = false;\n        (0,util.addClassName)(me.path, 'show-all');\n        me.path.style.width = me.path.parentNode.getBoundingClientRect().width - 10 + 'px';\n        me.path.onblur = function () {\n          if (me.contentMenuClicked) {\n            me.contentMenuClicked = false;\n            me.path.focus();\n            return;\n          }\n          (0,util.removeClassName)(me.path, 'show-all');\n          me.path.onblur = undefined;\n          me.path.style.width = '';\n          me.setPath(pathObjs);\n        };\n      }\n      function _onSegmentClick(pathObj) {\n        if (this.selectionCallback) {\n          this.selectionCallback(pathObj);\n        }\n      }\n      function _onContextMenuItemClick(pathObj, selection) {\n        if (this.contextMenuCallback) {\n          this.contextMenuCallback(pathObj, selection);\n        }\n      }\n    }\n\n    /**\n     * set a callback function for selection of path section\n     * @param {Function} callback function to invoke when section is selected\n     */\n  }, {\n    key: \"onSectionSelected\",\n    value: function onSectionSelected(callback) {\n      if (typeof callback === 'function') {\n        this.selectionCallback = callback;\n      }\n    }\n\n    /**\n     * set a callback function for selection of path section\n     * @param {Function} callback function to invoke when section is selected\n     */\n  }, {\n    key: \"onContextMenuItemSelected\",\n    value: function onContextMenuItemSelected(callback) {\n      if (typeof callback === 'function') {\n        this.contextMenuCallback = callback;\n      }\n    }\n  }]);\n}();\n// EXTERNAL MODULE: ./src/js/vanilla-picker/index.js\nvar vanilla_picker = __webpack_require__(1746);\nvar vanilla_picker_default = /*#__PURE__*/__webpack_require__.n(vanilla_picker);\n;// ./src/js/treemode.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// create a mixin with the functions for tree mode\nvar treemode = {};\n\n/**\n * Create a tree editor\n * @param {Element} container    Container element\n * @param {Object} [options]   Object with options. See docs for details.\n * @private\n */\ntreemode.create = function (container, options) {\n  if (!container) {\n    throw new Error('No container element provided.');\n  }\n  this.container = container;\n  this.dom = {};\n  this.highlighter = new Highlighter();\n  this.selection = undefined; // will hold the last input selection\n  this.multiselection = {\n    nodes: []\n  };\n  this.validateSchema = null; // will be set in .setSchema(schema)\n  this.validationSequence = 0;\n  this.errorNodes = [];\n  this.lastSchemaErrors = undefined;\n  this.node = null;\n  this.focusTarget = null;\n  this._setOptions(options);\n  if (options.autocomplete) {\n    this.autocomplete = autocomplete(options.autocomplete);\n  }\n  if (this.options.history && this.options.mode !== 'view') {\n    this.history = new NodeHistory(this);\n  }\n  this._createFrame();\n  this._createTable();\n};\n\n/**\n * Destroy the editor. Clean up DOM, event listeners, and web workers.\n */\ntreemode.destroy = function () {\n  if (this.frame && this.container && this.frame.parentNode === this.container) {\n    this.container.removeChild(this.frame);\n    this.frame = null;\n  }\n  this.container = null;\n  this.dom = null;\n  this.clear();\n  this.node = null;\n  this.focusTarget = null;\n  this.selection = null;\n  this.multiselection = null;\n  this.errorNodes = null;\n  this.validateSchema = null;\n  this._debouncedValidate = null;\n  if (this.history) {\n    this.history.destroy();\n    this.history = null;\n  }\n  if (this.searchBox) {\n    this.searchBox.destroy();\n    this.searchBox = null;\n  }\n  if (this.modeSwitcher) {\n    this.modeSwitcher.destroy();\n    this.modeSwitcher = null;\n  }\n\n  // Removing the FocusTracker set to track the editor's focus event\n  this.frameFocusTracker.destroy();\n};\n\n/**\n * Initialize and set default options\n * @param {Object}  [options]    See description in constructor\n * @private\n */\ntreemode._setOptions = function (options) {\n  var _this = this;\n  this.options = {\n    search: true,\n    history: true,\n    mode: 'tree',\n    name: undefined,\n    // field name of root node\n    schema: null,\n    schemaRefs: null,\n    autocomplete: null,\n    navigationBar: true,\n    mainMenuBar: true,\n    limitDragging: false,\n    onSelectionChange: null,\n    colorPicker: true,\n    onColorPicker: function onColorPicker(parent, color, onChange) {\n      if ((vanilla_picker_default())) {\n        // we'll render the color picker on top\n        // when there is not enough space below, and there is enough space above\n        var pickerHeight = 300; // estimated height of the color picker\n        var top = parent.getBoundingClientRect().top;\n        var windowHeight = (0,util.getWindow)(parent).innerHeight;\n        var showOnTop = windowHeight - top < pickerHeight && top > pickerHeight;\n        new (vanilla_picker_default())({\n          parent: parent,\n          color: color,\n          popup: showOnTop ? 'top' : 'bottom',\n          onDone: function onDone(color) {\n            var alpha = color.rgba[3];\n            var hex = alpha === 1 ? color.hex.substr(0, 7) // return #RRGGBB\n            : color.hex; // return #RRGGBBAA\n            onChange(hex);\n          }\n        }).show();\n      } else {\n        console.warn('Cannot open color picker: the `vanilla-picker` library is not included in the bundle. ' + 'Either use the full bundle or implement your own color picker using `onColorPicker`.');\n      }\n    },\n    timestampTag: true,\n    timestampFormat: null,\n    createQuery: jmespathQuery/* createQuery */.V,\n    executeQuery: jmespathQuery/* executeQuery */.e,\n    onEvent: null,\n    enableSort: true,\n    enableTransform: true\n  };\n\n  // copy all options\n  if (options) {\n    Object.keys(options).forEach(function (prop) {\n      _this.options[prop] = options[prop];\n    });\n\n    // default limitDragging to true when a JSON schema is defined\n    if (options.limitDragging == null && options.schema != null) {\n      this.options.limitDragging = true;\n    }\n  }\n\n  // compile a JSON schema validator if a JSON schema is provided\n  this.setSchema(this.options.schema, this.options.schemaRefs);\n\n  // create a debounced validate function\n  this._debouncedValidate = (0,util.debounce)(this._validateAndCatch.bind(this), this.DEBOUNCE_INTERVAL);\n  if (options.onSelectionChange) {\n    this.onSelectionChange(options.onSelectionChange);\n  }\n  (0,i18n/* setLanguages */.AI)(this.options.languages);\n  (0,i18n/* setLanguage */.xC)(this.options.language);\n};\n\n/**\n * Set new JSON object in editor.\n * Resets the state of the editor (expanded nodes, search, selection).\n *\n * @param {*} json\n */\ntreemode.set = function (json) {\n  // verify if json is valid JSON, ignore when a function\n  if (json instanceof Function || json === undefined) {\n    this.clear();\n  } else {\n    this.content.removeChild(this.table); // Take the table offline\n\n    // replace the root node\n    var params = {\n      field: this.options.name,\n      value: json\n    };\n    var node = new Node(this, params);\n    this._setRoot(node);\n\n    // validate JSON schema (if configured)\n    this._validateAndCatch();\n\n    // expand\n    var recurse = false;\n    this.node.expand(recurse);\n    this.content.appendChild(this.table); // Put the table online again\n  }\n\n  // TODO: maintain history, store last state and previous document\n  if (this.history) {\n    this.history.clear();\n  }\n\n  // clear search\n  if (this.searchBox) {\n    this.searchBox.clear();\n  }\n};\n\n/**\n * Update JSON object in editor.\n * Maintains the state of the editor (expanded nodes, search, selection).\n *\n * @param {*} json\n */\ntreemode.update = function (json) {\n  // don't update if there are no changes\n  if (this.node.deepEqual(json)) {\n    return;\n  }\n  var selection = this.getSelection();\n\n  // apply the changed json\n  this.onChangeDisabled = true; // don't fire an onChange event\n  this.node.update(json);\n  this.onChangeDisabled = false;\n\n  // validate JSON schema\n  this._validateAndCatch();\n\n  // update search result if any\n  if (this.searchBox && !this.searchBox.isEmpty()) {\n    this.searchBox.forceSearch();\n  }\n\n  // update selection if any\n  if (selection && selection.start && selection.end) {\n    // only keep/update the selection if both start and end node still exists,\n    // else we clear the selection\n    var startNode = this.node.findNodeByPath(selection.start.path);\n    var endNode = this.node.findNodeByPath(selection.end.path);\n    if (startNode && endNode) {\n      this.setSelection(selection.start, selection.end);\n    } else {\n      this.setSelection({}, {}); // clear selection\n    }\n  } else {\n    this.setSelection({}, {}); // clear selection\n  }\n};\n\n/**\n * Get JSON object from editor\n * @return {Object | undefined} json\n */\ntreemode.get = function () {\n  // TODO: resolve pending debounced input changes if any, but do not resolve invalid inputs\n\n  if (this.node) {\n    return this.node.getValue();\n  } else {\n    return undefined;\n  }\n};\n\n/**\n * Get the text contents of the editor\n * @return {String} jsonText\n */\ntreemode.getText = function () {\n  return JSON.stringify(this.get());\n};\n\n/**\n * Set the text contents of the editor.\n * Resets the state of the editor (expanded nodes, search, selection).\n * @param {String} jsonText\n */\ntreemode.setText = function (jsonText) {\n  try {\n    this.set((0,util.parse)(jsonText)); // this can throw an error\n  } catch (err) {\n    // try to repair json, replace JavaScript notation with JSON notation\n    var repairedJsonText = (0,util.tryJsonRepair)(jsonText);\n\n    // try to parse again\n    this.set((0,util.parse)(repairedJsonText)); // this can throw an error\n  }\n};\n\n/**\n * Update the text contents of the editor.\n * Maintains the state of the editor (expanded nodes, search, selection).\n * @param {String} jsonText\n */\ntreemode.updateText = function (jsonText) {\n  try {\n    this.update((0,util.parse)(jsonText)); // this can throw an error\n  } catch (err) {\n    // try to repair json, replace JavaScript notation with JSON notation\n    var repairJsonText = (0,util.tryJsonRepair)(jsonText);\n\n    // try to parse again\n    this.update((0,util.parse)(repairJsonText)); // this can throw an error\n  }\n};\n\n/**\n * Set a field name for the root node.\n * @param {String | undefined} name\n */\ntreemode.setName = function (name) {\n  this.options.name = name;\n  if (this.node) {\n    this.node.updateField(this.options.name);\n  }\n};\n\n/**\n * Get the field name for the root node.\n * @return {String | undefined} name\n */\ntreemode.getName = function () {\n  return this.options.name;\n};\n\n/**\n * Set focus to the editor. Focus will be set to:\n * - the first editable field or value, or else\n * - to the expand button of the root node, or else\n * - to the context menu button of the root node, or else\n * - to the first button in the top menu\n */\ntreemode.focus = function () {\n  var input = this.scrollableContent.querySelector('[contenteditable=true]');\n  if (input) {\n    input.focus();\n  } else if (this.node.dom.expand) {\n    this.node.dom.expand.focus();\n  } else if (this.node.dom.menu) {\n    this.node.dom.menu.focus();\n  } else {\n    // focus to the first button in the menu\n    input = this.frame.querySelector('button');\n    if (input) {\n      input.focus();\n    }\n  }\n};\n\n/**\n * Remove the root node from the editor\n */\ntreemode.clear = function () {\n  if (this.node) {\n    this.node.hide();\n    delete this.node;\n  }\n  if (this.treePath) {\n    this.treePath.reset();\n  }\n};\n\n/**\n * Set the root node for the json editor\n * @param {Node} node\n * @private\n */\ntreemode._setRoot = function (node) {\n  this.clear();\n  this.node = node;\n  node.setParent(null);\n  node.setField(this.getName(), false);\n  delete node.index;\n\n  // append to the dom\n  this.tbody.appendChild(node.getDom());\n};\n\n/**\n * Search text in all nodes\n * The nodes will be expanded when the text is found one of its childs,\n * else it will be collapsed. Searches are case insensitive.\n * @param {String} text\n * @return {Object[]} results  Array with nodes containing the search results\n *                             The result objects contains fields:\n *                             - {Node} node,\n *                             - {String} elem  the dom element name where\n *                                              the result is found ('field' or\n *                                              'value')\n */\ntreemode.search = function (text) {\n  var results;\n  if (this.node) {\n    this.content.removeChild(this.table); // Take the table offline\n    results = this.node.search(text);\n    this.content.appendChild(this.table); // Put the table online again\n  } else {\n    results = [];\n  }\n  return results;\n};\n\n/**\n * Expand all nodes\n */\ntreemode.expandAll = function () {\n  if (this.node) {\n    this.content.removeChild(this.table); // Take the table offline\n    this.node.expand();\n    this.content.appendChild(this.table); // Put the table online again\n  }\n};\n\n/**\n * Collapse all nodes\n */\ntreemode.collapseAll = function () {\n  if (this.node) {\n    this.content.removeChild(this.table); // Take the table offline\n    this.node.collapse();\n    this.content.appendChild(this.table); // Put the table online again\n  }\n};\n\n/**\n * Expand/collapse a given JSON node.\n * @param {Object} [options] Available parameters:\n *                         {Array<String>} [path] Path for the node to expand/collapse.\n *                         {Boolean} [isExpand]  When true, expand the node. Else collapse it.\n *                         {Boolean} [recursive] When true, expand/collapse child nodes recursively.\n *                         {Boolean} [withPath]  When true, expand/collapse all nodes of `path` itself.\n */\ntreemode.expand = function (options) {\n  if (!options || !this.node) return;\n  var node = this.node.findNodeByPath(options.path);\n  if (!node) return;\n  if (options.withPath) {\n    for (var i = 0; i < options.path.length; i++) {\n      var parentNode = this.node.findNodeByPath(options.path.slice(0, i));\n      if (parentNode) {\n        if (options.isExpand) {\n          parentNode.expand(false);\n        } else {\n          parentNode.collapse(false);\n        }\n      }\n    }\n  }\n  if (options.isExpand) {\n    node.expand(options.recursive);\n  } else {\n    node.collapse(options.recursive);\n  }\n};\n\n/**\n * The method onChange is called whenever a field or value is changed, created,\n * deleted, duplicated, etc.\n * @param {String} action  Change action. Available values: \"editField\",\n *                         \"editValue\", \"changeType\", \"appendNode\",\n *                         \"removeNode\", \"duplicateNode\", \"moveNode\", \"expand\",\n *                         \"collapse\".\n * @param {Object} params  Object containing parameters describing the change.\n *                         The parameters in params depend on the action (for\n *                         example for \"editValue\" the Node, old value, and new\n *                         value are provided). params contains all information\n *                         needed to undo or redo the action.\n * @private\n */\ntreemode._onAction = function (action, params) {\n  // add an action to the history\n  if (this.history) {\n    this.history.add(action, params);\n  }\n  this._onChange();\n};\n\n/**\n * Handle a change:\n * - Validate JSON schema\n * - Send a callback to the onChange listener if provided\n * @private\n */\ntreemode._onChange = function () {\n  if (this.onChangeDisabled) {\n    return;\n  }\n\n  // selection can be changed after undo/redo\n  this.selection = this.getDomSelection();\n\n  // validate JSON schema (if configured)\n  this._debouncedValidate();\n  if (this.treePath) {\n    var selectedNode = this.node && this.selection ? this.node.findNodeByInternalPath(this.selection.path) : this.multiselection ? this.multiselection.nodes[0] : undefined;\n    if (selectedNode) {\n      this._updateTreePath(selectedNode.getNodePath());\n    } else {\n      this.treePath.reset();\n    }\n  }\n\n  // trigger the onChange callback\n  if (this.options.onChange) {\n    try {\n      this.options.onChange();\n    } catch (err) {\n      console.error('Error in onChange callback: ', err);\n    }\n  }\n\n  // trigger the onChangeJSON callback\n  if (this.options.onChangeJSON) {\n    try {\n      this.options.onChangeJSON(this.get());\n    } catch (err) {\n      console.error('Error in onChangeJSON callback: ', err);\n    }\n  }\n\n  // trigger the onChangeText callback\n  if (this.options.onChangeText) {\n    try {\n      this.options.onChangeText(this.getText());\n    } catch (err) {\n      console.error('Error in onChangeText callback: ', err);\n    }\n  }\n\n  // trigger the onClassName callback\n  if (this.options.onClassName) {\n    this.node.recursivelyUpdateCssClassesOnNodes();\n  }\n\n  // trigger the onNodeName callback\n  if (this.options.onNodeName && this.node.childs) {\n    try {\n      this.node.recursivelyUpdateNodeName();\n    } catch (err) {\n      console.error('Error in onNodeName callback: ', err);\n    }\n  }\n};\n\n/**\n * Validate current JSON object against the configured JSON schema\n * Throws an exception when no JSON schema is configured\n */\ntreemode.validate = function () {\n  var _this2 = this;\n  var root = this.node;\n  if (!root) {\n    // TODO: this should be redundant but is needed on mode switch\n    return Promise.resolve([]);\n  }\n  var json = root.getValue();\n\n  // execute JSON schema validation\n  var schemaErrors = [];\n  if (this.validateSchema) {\n    var valid = this.validateSchema(json);\n    if (!valid) {\n      // apply all new errors\n      schemaErrors = this.validateSchema.errors.map(function (error) {\n        return (0,util.improveSchemaError)(error);\n      }).map(function findNode(error) {\n        return {\n          node: root.findNode(error.dataPath),\n          error: error,\n          type: 'validation'\n        };\n      }).filter(function hasNode(entry) {\n        return entry.node != null;\n      });\n    }\n  }\n\n  // execute custom validation and after than merge and render all errors\n  try {\n    this.validationSequence++;\n    var me = this;\n    var seq = this.validationSequence;\n    return this._validateCustom(json).then(function (customValidationErrors) {\n      // only apply when there was no other validation started whilst resolving async results\n      if (seq === me.validationSequence) {\n        var errorNodes = [].concat(schemaErrors, customValidationErrors || []);\n        me._renderValidationErrors(errorNodes);\n        if (typeof _this2.options.onValidationError === 'function' && (0,util.isValidationErrorChanged)(errorNodes, _this2.lastSchemaErrors)) {\n          _this2.options.onValidationError.call(_this2, errorNodes);\n        }\n        _this2.lastSchemaErrors = errorNodes;\n      }\n      return _this2.lastSchemaErrors;\n    });\n  } catch (err) {\n    return Promise.reject(err);\n  }\n};\ntreemode._validateAndCatch = function () {\n  this.validate()[\"catch\"](function (err) {\n    console.error('Error running validation:', err);\n  });\n};\ntreemode._renderValidationErrors = function (errorNodes) {\n  // clear all current errors\n  if (this.errorNodes) {\n    this.errorNodes.forEach(function (node) {\n      node.setError(null);\n    });\n  }\n\n  // render the new errors\n  var parentPairs = errorNodes.reduce(function (all, entry) {\n    return entry.node.findParents().filter(function (parent) {\n      return !all.some(function (pair) {\n        return pair[0] === parent;\n      });\n    }).map(function (parent) {\n      return [parent, entry.node];\n    }).concat(all);\n  }, []);\n  this.errorNodes = parentPairs.map(function (pair) {\n    return {\n      node: pair[0],\n      child: pair[1],\n      error: {\n        message: pair[0].type === 'object' ? (0,i18n/* translate */.Tl)('containsInvalidProperties') // object\n        : (0,i18n/* translate */.Tl)('containsInvalidItems') // array\n      }\n    };\n  }).concat(errorNodes).map(function setError(entry) {\n    entry.node.setError(entry.error, entry.child);\n    return entry.node;\n  });\n};\n\n/**\n * Execute custom validation if configured.\n *\n * Returns a promise resolving with the custom errors (or nothing).\n */\ntreemode._validateCustom = function (json) {\n  try {\n    if (this.options.onValidate) {\n      var root = this.node;\n      var customValidateResults = this.options.onValidate(json);\n      var resultPromise = (0,util.isPromise)(customValidateResults) ? customValidateResults : Promise.resolve(customValidateResults);\n      return resultPromise.then(function (customValidationPathErrors) {\n        if (Array.isArray(customValidationPathErrors)) {\n          return customValidationPathErrors.filter(function (error) {\n            var valid = (0,util.isValidValidationError)(error);\n            if (!valid) {\n              console.warn('Ignoring a custom validation error with invalid structure. ' + 'Expected structure: {path: [...], message: \"...\"}. ' + 'Actual error:', error);\n            }\n            return valid;\n          }).map(function (error) {\n            var node;\n            try {\n              node = error && error.path ? root.findNodeByPath(error.path) : null;\n            } catch (err) {\n              // stay silent here, we throw a generic warning if no node is found\n            }\n            if (!node) {\n              console.warn('Ignoring validation error: node not found. Path:', error.path, 'Error:', error);\n            }\n            return {\n              node: node,\n              error: error,\n              type: 'customValidation'\n            };\n          }).filter(function (entry) {\n            return entry && entry.node && entry.error && entry.error.message;\n          });\n        } else {\n          return null;\n        }\n      });\n    }\n  } catch (err) {\n    return Promise.reject(err);\n  }\n  return Promise.resolve(null);\n};\n\n/**\n * Refresh the rendered contents\n */\ntreemode.refresh = function () {\n  if (this.node) {\n    this.node.updateDom({\n      recurse: true\n    });\n  }\n};\n\n/**\n * Start autoscrolling when given mouse position is above the top of the\n * editor contents, or below the bottom.\n * @param {Number} mouseY  Absolute mouse position in pixels\n */\ntreemode.startAutoScroll = function (mouseY) {\n  var me = this;\n  var content = this.scrollableContent;\n  var top = (0,util.getAbsoluteTop)(content);\n  var height = content.clientHeight;\n  var bottom = top + height;\n  var margin = 24;\n  var interval = 50; // ms\n\n  if (mouseY < top + margin && content.scrollTop > 0) {\n    this.autoScrollStep = (top + margin - mouseY) / 3;\n  } else if (mouseY > bottom - margin && height + content.scrollTop < content.scrollHeight) {\n    this.autoScrollStep = (bottom - margin - mouseY) / 3;\n  } else {\n    this.autoScrollStep = undefined;\n  }\n  if (this.autoScrollStep) {\n    if (!this.autoScrollTimer) {\n      this.autoScrollTimer = setInterval(function () {\n        if (me.autoScrollStep) {\n          content.scrollTop -= me.autoScrollStep;\n        } else {\n          me.stopAutoScroll();\n        }\n      }, interval);\n    }\n  } else {\n    this.stopAutoScroll();\n  }\n};\n\n/**\n * Stop auto scrolling. Only applicable when scrolling\n */\ntreemode.stopAutoScroll = function () {\n  if (this.autoScrollTimer) {\n    clearTimeout(this.autoScrollTimer);\n    delete this.autoScrollTimer;\n  }\n  if (this.autoScrollStep) {\n    delete this.autoScrollStep;\n  }\n};\n\n/**\n * Set the focus to an element in the editor, set text selection, and\n * set scroll position.\n * @param {Object} selection  An object containing fields:\n *                            {Element | undefined} dom     The dom element\n *                                                          which has focus\n *                            {Range | TextRange} range     A text selection\n *                            {Node[]} nodes                Nodes in case of multi selection\n *                            {Number} scrollTop            Scroll position\n */\ntreemode.setDomSelection = function (selection) {\n  if (!selection) {\n    return;\n  }\n  if ('scrollTop' in selection && this.scrollableContent) {\n    // TODO: animated scroll\n    this.scrollableContent.scrollTop = selection.scrollTop;\n  }\n  if (selection.paths) {\n    // multi-select\n    var me = this;\n    var nodes = selection.paths.map(function (path) {\n      return me.node.findNodeByInternalPath(path);\n    });\n    this.select(nodes);\n  } else {\n    // find the actual DOM element where to apply the focus\n    var node = selection.path ? this.node.findNodeByInternalPath(selection.path) : null;\n    var container = node && selection.domName ? node.dom[selection.domName] : null;\n    if (selection.range && container) {\n      var range = Object.assign({}, selection.range, {\n        container: container\n      });\n      (0,util.setSelectionOffset)(range);\n    } else if (node) {\n      // just a fallback\n      node.focus();\n    }\n  }\n};\n\n/**\n * Get the current focus\n * @return {Object} selection An object containing fields:\n *                            {Element | undefined} dom     The dom element\n *                                                          which has focus\n *                            {Range | TextRange} range     A text selection\n *                            {Node[]} nodes                Nodes in case of multi selection\n *                            {Number} scrollTop            Scroll position\n */\ntreemode.getDomSelection = function () {\n  // find the node and field name of the current target,\n  // so we can store the current selection in a serializable\n  // way (internal node path and domName)\n  var node = Node.getNodeFromTarget(this.focusTarget);\n  var focusTarget = this.focusTarget;\n  var domName = node ? Object.keys(node.dom).find(function (domName) {\n    return node.dom[domName] === focusTarget;\n  }) : null;\n  var range = (0,util.getSelectionOffset)();\n  if (range && range.container.nodeName !== 'DIV') {\n    // filter on (editable) divs)\n    range = null;\n  }\n  if (range && range.container !== focusTarget) {\n    range = null;\n  }\n  if (range) {\n    // we cannot rely on the current instance of the container,\n    // we need to store the internal node path and field and\n    // find the actual DOM field when applying the selection\n    delete range.container;\n  }\n  return {\n    path: node ? node.getInternalPath() : null,\n    domName: domName,\n    range: range,\n    paths: this.multiselection.length > 0 ? this.multiselection.nodes.map(function (node) {\n      return node.getInternalPath();\n    }) : null,\n    scrollTop: this.scrollableContent ? this.scrollableContent.scrollTop : 0\n  };\n};\n\n/**\n * Adjust the scroll position such that given top position is shown at 1/4\n * of the window height.\n * @param {Number} top\n * @param {function(boolean)} [animateCallback] Callback, executed when animation is\n *                                              finished. The callback returns true\n *                                              when animation is finished, or false\n *                                              when not.\n */\ntreemode.scrollTo = function (top, animateCallback) {\n  var content = this.scrollableContent;\n  if (content) {\n    var editor = this;\n    // cancel any running animation\n    if (editor.animateTimeout) {\n      clearTimeout(editor.animateTimeout);\n      delete editor.animateTimeout;\n    }\n    if (editor.animateCallback) {\n      editor.animateCallback(false);\n      delete editor.animateCallback;\n    }\n\n    // calculate final scroll position\n    var height = content.clientHeight;\n    var bottom = content.scrollHeight - height;\n    var finalScrollTop = Math.min(Math.max(top - height / 4, 0), bottom);\n\n    // animate towards the new scroll position\n    var _animate = function animate() {\n      var scrollTop = content.scrollTop;\n      var diff = finalScrollTop - scrollTop;\n      if (Math.abs(diff) > 3) {\n        content.scrollTop += diff / 3;\n        editor.animateCallback = animateCallback;\n        editor.animateTimeout = setTimeout(_animate, 50);\n      } else {\n        // finished\n        if (animateCallback) {\n          animateCallback(true);\n        }\n        content.scrollTop = finalScrollTop;\n        delete editor.animateTimeout;\n        delete editor.animateCallback;\n      }\n    };\n    _animate();\n  } else {\n    if (animateCallback) {\n      animateCallback(false);\n    }\n  }\n};\n\n/**\n * Create main frame\n * @private\n */\ntreemode._createFrame = function () {\n  var _this3 = this;\n  // create the frame\n  this.frame = document.createElement('div');\n  this.frame.className = 'jsoneditor jsoneditor-mode-' + this.options.mode;\n  // this.frame.setAttribute(\"tabindex\",\"0\");\n\n  this.container.appendChild(this.frame);\n  this.contentOuter = document.createElement('div');\n  this.contentOuter.className = 'jsoneditor-outer';\n\n  // create one global event listener to handle all events from all nodes\n  var editor = this;\n  function onEvent(event) {\n    // when switching to mode \"code\" or \"text\" via the menu, some events\n    // are still fired whilst the _onEvent methods is already removed.\n    if (editor._onEvent) {\n      editor._onEvent(event);\n    }\n  }\n\n  // setting the FocusTracker on 'this.frame' to track the editor's focus event\n  var focusTrackerConfig = {\n    target: this.frame,\n    onFocus: this.options.onFocus || null,\n    onBlur: this.options.onBlur || null\n  };\n  this.frameFocusTracker = new FocusTracker/* FocusTracker */.$(focusTrackerConfig);\n  this.frame.onclick = function (event) {\n    var target = event.target; // || event.srcElement;\n\n    onEvent(event);\n\n    // prevent default submit action of buttons when editor is located\n    // inside a form\n    if (target.nodeName === 'BUTTON') {\n      event.preventDefault();\n    }\n  };\n  this.frame.oninput = onEvent;\n  this.frame.onchange = onEvent;\n  this.frame.onkeydown = onEvent;\n  this.frame.onkeyup = onEvent;\n  this.frame.oncut = onEvent;\n  this.frame.onpaste = onEvent;\n  this.frame.onmousedown = onEvent;\n  this.frame.onmouseup = onEvent;\n  this.frame.onmouseover = onEvent;\n  this.frame.onmouseout = onEvent;\n  // Note: focus and blur events do not propagate, therefore they defined\n  // using an eventListener with useCapture=true\n  // see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\n  (0,util.addEventListener)(this.frame, 'focus', onEvent, true);\n  (0,util.addEventListener)(this.frame, 'blur', onEvent, true);\n  this.frame.onfocusin = onEvent; // for IE\n  this.frame.onfocusout = onEvent; // for IE\n\n  if (this.options.mainMenuBar) {\n    (0,util.addClassName)(this.contentOuter, 'has-main-menu-bar');\n\n    // create menu\n    this.menu = document.createElement('div');\n    this.menu.className = 'jsoneditor-menu';\n    this.frame.appendChild(this.menu);\n\n    // create expand all button\n    var expandAll = document.createElement('button');\n    expandAll.type = 'button';\n    expandAll.className = 'jsoneditor-expand-all';\n    expandAll.title = (0,i18n/* translate */.Tl)('expandAll');\n    expandAll.onclick = function () {\n      editor.expandAll();\n      if (typeof _this3.options.onExpand === 'function') {\n        _this3.options.onExpand({\n          path: [],\n          isExpand: true,\n          recursive: true\n        });\n      }\n    };\n    this.menu.appendChild(expandAll);\n\n    // create collapse all button\n    var collapseAll = document.createElement('button');\n    collapseAll.type = 'button';\n    collapseAll.title = (0,i18n/* translate */.Tl)('collapseAll');\n    collapseAll.className = 'jsoneditor-collapse-all';\n    collapseAll.onclick = function () {\n      editor.collapseAll();\n      if (typeof _this3.options.onExpand === 'function') {\n        _this3.options.onExpand({\n          path: [],\n          isExpand: false,\n          recursive: true\n        });\n      }\n    };\n    this.menu.appendChild(collapseAll);\n\n    // create sort button\n    if (this.options.enableSort) {\n      var sort = document.createElement('button');\n      sort.type = 'button';\n      sort.className = 'jsoneditor-sort';\n      sort.title = (0,i18n/* translate */.Tl)('sortTitleShort');\n      sort.onclick = function () {\n        editor.node.showSortModal();\n      };\n      this.menu.appendChild(sort);\n    }\n\n    // create transform button\n    if (this.options.enableTransform) {\n      var transform = document.createElement('button');\n      transform.type = 'button';\n      transform.title = (0,i18n/* translate */.Tl)('transformTitleShort');\n      transform.className = 'jsoneditor-transform';\n      transform.onclick = function () {\n        editor.node.showTransformModal();\n      };\n      this.menu.appendChild(transform);\n    }\n\n    // create undo/redo buttons\n    if (this.history) {\n      // create undo button\n      var undo = document.createElement('button');\n      undo.type = 'button';\n      undo.className = 'jsoneditor-undo jsoneditor-separator';\n      undo.title = (0,i18n/* translate */.Tl)('undo');\n      undo.onclick = function () {\n        editor._onUndo();\n      };\n      this.menu.appendChild(undo);\n      this.dom.undo = undo;\n\n      // create redo button\n      var redo = document.createElement('button');\n      redo.type = 'button';\n      redo.className = 'jsoneditor-redo';\n      redo.title = (0,i18n/* translate */.Tl)('redo');\n      redo.onclick = function () {\n        editor._onRedo();\n      };\n      this.menu.appendChild(redo);\n      this.dom.redo = redo;\n\n      // register handler for onchange of history\n      this.history.onChange = function () {\n        undo.disabled = !editor.history.canUndo();\n        redo.disabled = !editor.history.canRedo();\n      };\n      this.history.onChange();\n    }\n\n    // create mode box\n    if (this.options && this.options.modes && this.options.modes.length) {\n      var me = this;\n      this.modeSwitcher = new ModeSwitcher/* ModeSwitcher */.n(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {\n        // switch mode and restore focus\n        try {\n          me.setMode(mode);\n          me.modeSwitcher.focus();\n        } catch (err) {\n          me._onError(err);\n        }\n      });\n    }\n\n    // create search box\n    if (this.options.search) {\n      this.searchBox = new SearchBox(this, this.menu);\n    }\n  }\n  if (this.options.navigationBar) {\n    // create second menu row for treepath\n    this.navBar = document.createElement('div');\n    this.navBar.className = 'jsoneditor-navigation-bar nav-bar-empty';\n    this.frame.appendChild(this.navBar);\n    this.treePath = new TreePath(this.navBar, this.getPopupAnchor());\n    this.treePath.onSectionSelected(this._onTreePathSectionSelected.bind(this));\n    this.treePath.onContextMenuItemSelected(this._onTreePathMenuItemSelected.bind(this));\n  }\n};\n\n/**\n * Perform an undo action\n * @private\n */\ntreemode._onUndo = function () {\n  if (this.history) {\n    // undo last action\n    this.history.undo();\n\n    // fire change event\n    this._onChange();\n  }\n};\n\n/**\n * Perform a redo action\n * @private\n */\ntreemode._onRedo = function () {\n  if (this.history) {\n    // redo last action\n    this.history.redo();\n\n    // fire change event\n    this._onChange();\n  }\n};\n\n/**\n * Event handler\n * @param event\n * @private\n */\ntreemode._onEvent = function (event) {\n  // don't process events when coming from the color picker\n  if (Node.targetIsColorPicker(event.target)) {\n    return;\n  }\n  var node = Node.getNodeFromTarget(event.target);\n  if (event.type === 'keydown') {\n    this._onKeyDown(event);\n  }\n  if (node && event.type === 'focus') {\n    this.focusTarget = event.target;\n    if (this.options.autocomplete && this.options.autocomplete.trigger === 'focus') {\n      this._showAutoComplete(event.target);\n    }\n  }\n  if (event.type === 'mousedown') {\n    this._startDragDistance(event);\n  }\n  if (event.type === 'mousemove' || event.type === 'mouseup' || event.type === 'click') {\n    this._updateDragDistance(event);\n  }\n  if (node && this.options && this.options.navigationBar && node && (event.type === 'keydown' || event.type === 'mousedown')) {\n    // apply on next tick, right after the new key press is applied\n    var me = this;\n    setTimeout(function () {\n      me._updateTreePath(node.getNodePath());\n    });\n  }\n  if (node && node.selected) {\n    if (event.type === 'click') {\n      if (event.target === node.dom.menu) {\n        this.showContextMenu(event.target);\n\n        // stop propagation (else we will open the context menu of a single node)\n        return;\n      }\n\n      // deselect a multi selection\n      if (!event.hasMoved) {\n        this.deselect();\n      }\n    }\n    if (event.type === 'mousedown') {\n      // drag multiple nodes\n      Node.onDragStart(this.multiselection.nodes, event);\n    }\n  } else {\n    // filter mouse events in the contents part of the editor (not the main menu)\n    if (event.type === 'mousedown' && (0,util.hasParentNode)(event.target, this.content)) {\n      this.deselect();\n      if (node && event.target === node.dom.drag) {\n        // drag a singe node\n        Node.onDragStart(node, event);\n      } else if (!node || event.target !== node.dom.field && event.target !== node.dom.value && event.target !== node.dom.select) {\n        // select multiple nodes\n        this._onMultiSelectStart(event);\n      }\n    }\n  }\n  if (node) {\n    node.onEvent(event);\n  }\n};\n\n/**\n * Update TreePath components\n * @param {Array<Node>} pathNodes list of nodes in path from root to selection\n * @private\n */\ntreemode._updateTreePath = function (pathNodes) {\n  if (pathNodes && pathNodes.length) {\n    (0,util.removeClassName)(this.navBar, 'nav-bar-empty');\n    var pathObjs = [];\n    pathNodes.forEach(function (node) {\n      var pathObj = {\n        name: getName(node),\n        node: node,\n        children: []\n      };\n      if (node.childs && node.childs.length) {\n        node.childs.forEach(function (childNode) {\n          pathObj.children.push({\n            name: getName(childNode),\n            node: childNode\n          });\n        });\n      }\n      pathObjs.push(pathObj);\n    });\n    this.treePath.setPath(pathObjs);\n  } else {\n    (0,util.addClassName)(this.navBar, 'nav-bar-empty');\n  }\n  function getName(node) {\n    return node.parent ? node.parent.type === 'array' ? node.index : node.field : node.field || node.type;\n  }\n};\n\n/**\n * Callback for tree path section selection - focus the selected node in the tree\n * @param {Object} pathObj path object that was represents the selected section node\n * @private\n */\ntreemode._onTreePathSectionSelected = function (pathObj) {\n  if (pathObj && pathObj.node) {\n    pathObj.node.expandTo();\n    pathObj.node.focus();\n  }\n};\n\n/**\n * Callback for tree path menu item selection - rebuild the path accrding to the new selection and focus the selected node in the tree\n * @param {Object} pathObj path object that was represents the parent section node\n * @param {String} selection selected section child\n * @private\n */\ntreemode._onTreePathMenuItemSelected = function (pathObj, selection) {\n  if (pathObj && pathObj.children.length) {\n    var selectionObj = pathObj.children.find(function (obj) {\n      return obj.name === selection;\n    });\n    if (selectionObj && selectionObj.node) {\n      this._updateTreePath(selectionObj.node.getNodePath());\n      selectionObj.node.expandTo();\n      selectionObj.node.focus();\n    }\n  }\n};\ntreemode._startDragDistance = function (event) {\n  this.dragDistanceEvent = {\n    initialTarget: event.target,\n    initialPageX: event.pageX,\n    initialPageY: event.pageY,\n    dragDistance: 0,\n    hasMoved: false\n  };\n};\ntreemode._updateDragDistance = function (event) {\n  if (!this.dragDistanceEvent) {\n    this._startDragDistance(event);\n  }\n  var diffX = event.pageX - this.dragDistanceEvent.initialPageX;\n  var diffY = event.pageY - this.dragDistanceEvent.initialPageY;\n  this.dragDistanceEvent.dragDistance = Math.sqrt(diffX * diffX + diffY * diffY);\n  this.dragDistanceEvent.hasMoved = this.dragDistanceEvent.hasMoved || this.dragDistanceEvent.dragDistance > 10;\n  event.dragDistance = this.dragDistanceEvent.dragDistance;\n  event.hasMoved = this.dragDistanceEvent.hasMoved;\n  return event.dragDistance;\n};\n\n/**\n * Start multi selection of nodes by dragging the mouse\n * @param {MouseEvent} event\n * @private\n */\ntreemode._onMultiSelectStart = function (event) {\n  var node = Node.getNodeFromTarget(event.target);\n  if (this.options.mode !== 'tree' || this.options.onEditable !== undefined) {\n    // dragging not allowed in modes 'view' and 'form'\n    // TODO: allow multiselection of items when option onEditable is specified\n    return;\n  }\n  this.multiselection = {\n    start: node || null,\n    end: null,\n    nodes: []\n  };\n  this._startDragDistance(event);\n  var editor = this;\n  if (!this.mousemove) {\n    this.mousemove = (0,util.addEventListener)(event.view, 'mousemove', function (event) {\n      editor._onMultiSelect(event);\n    });\n  }\n  if (!this.mouseup) {\n    this.mouseup = (0,util.addEventListener)(event.view, 'mouseup', function (event) {\n      editor._onMultiSelectEnd(event);\n    });\n  }\n  event.preventDefault();\n};\n\n/**\n * Multiselect nodes by dragging\n * @param {MouseEvent} event\n * @private\n */\ntreemode._onMultiSelect = function (event) {\n  event.preventDefault();\n  this._updateDragDistance(event);\n  if (!event.hasMoved) {\n    return;\n  }\n  var node = Node.getNodeFromTarget(event.target);\n  if (node) {\n    if (this.multiselection.start == null) {\n      this.multiselection.start = node;\n    }\n    this.multiselection.end = node;\n  }\n\n  // deselect previous selection\n  this.deselect();\n\n  // find the selected nodes in the range from first to last\n  var start = this.multiselection.start;\n  var end = this.multiselection.end || this.multiselection.start;\n  if (start && end) {\n    // find the top level childs, all having the same parent\n    this.multiselection.nodes = this._findTopLevelNodes(start, end);\n    if (this.multiselection.nodes && this.multiselection.nodes.length) {\n      var firstNode = this.multiselection.nodes[0];\n      if (this.multiselection.start === firstNode || this.multiselection.start.isDescendantOf(firstNode)) {\n        this.multiselection.direction = 'down';\n      } else {\n        this.multiselection.direction = 'up';\n      }\n    }\n    this.select(this.multiselection.nodes);\n  }\n};\n\n/**\n * End of multiselect nodes by dragging\n * @param {MouseEvent} event\n * @private\n */\ntreemode._onMultiSelectEnd = function (event) {\n  // set focus to the context menu button of the first node\n  var firstNode = this.multiselection.nodes[0];\n  if (firstNode && firstNode.dom.menu) {\n    firstNode.dom.menu.focus();\n  }\n  this.multiselection.start = null;\n  this.multiselection.end = null;\n\n  // cleanup global event listeners\n  if (this.mousemove) {\n    (0,util.removeEventListener)(event.view, 'mousemove', this.mousemove);\n    delete this.mousemove;\n  }\n  if (this.mouseup) {\n    (0,util.removeEventListener)(event.view, 'mouseup', this.mouseup);\n    delete this.mouseup;\n  }\n};\n\n/**\n * deselect currently selected nodes\n * @param {boolean} [clearStartAndEnd=false]  If true, the `start` and `end`\n *                                            state is cleared too.\n */\ntreemode.deselect = function (clearStartAndEnd) {\n  var selectionChanged = !!this.multiselection.nodes.length;\n  this.multiselection.nodes.forEach(function (node) {\n    node.setSelected(false);\n  });\n  this.multiselection.nodes = [];\n  if (clearStartAndEnd) {\n    this.multiselection.start = null;\n    this.multiselection.end = null;\n  }\n  if (selectionChanged) {\n    if (this._selectionChangedHandler) {\n      this._selectionChangedHandler();\n    }\n  }\n};\n\n/**\n * select nodes\n * @param {Node[] | Node} nodes\n */\ntreemode.select = function (nodes) {\n  if (!Array.isArray(nodes)) {\n    return this.select([nodes]);\n  }\n  if (nodes) {\n    this.deselect();\n    this.multiselection.nodes = nodes.slice(0);\n    var first = nodes[0];\n    nodes.forEach(function (node) {\n      node.expandPathToNode();\n      node.setSelected(true, node === first);\n    });\n    if (this._selectionChangedHandler) {\n      var selection = this.getSelection();\n      this._selectionChangedHandler(selection.start, selection.end);\n    }\n  }\n};\n\n/**\n * From two arbitrary selected nodes, find their shared parent node.\n * From that parent node, select the two child nodes in the brances going to\n * nodes `start` and `end`, and select all childs in between.\n * @param {Node} start\n * @param {Node} end\n * @return {Array.<Node>} Returns an ordered list with child nodes\n * @private\n */\ntreemode._findTopLevelNodes = function (start, end) {\n  var startPath = start.getNodePath();\n  var endPath = end.getNodePath();\n  var i = 0;\n  while (i < startPath.length && startPath[i] === endPath[i]) {\n    i++;\n  }\n  var root = startPath[i - 1];\n  var startChild = startPath[i];\n  var endChild = endPath[i];\n  if (!startChild || !endChild) {\n    if (root.parent) {\n      // startChild is a parent of endChild or vice versa\n      startChild = root;\n      endChild = root;\n      root = root.parent;\n    } else {\n      // we have selected the root node (which doesn't have a parent)\n      startChild = root.childs[0];\n      endChild = root.childs[root.childs.length - 1];\n    }\n  }\n  if (root && startChild && endChild) {\n    var startIndex = root.childs.indexOf(startChild);\n    var endIndex = root.childs.indexOf(endChild);\n    var firstIndex = Math.min(startIndex, endIndex);\n    var lastIndex = Math.max(startIndex, endIndex);\n    return root.childs.slice(firstIndex, lastIndex + 1);\n  } else {\n    return [];\n  }\n};\n\n/**\n * Show autocomplete menu\n * @param {HTMLElement} element\n * @private\n */\ntreemode._showAutoComplete = function (element) {\n  var node = Node.getNodeFromTarget(element);\n  var jsonElementType = '';\n  if (element.className.indexOf('jsoneditor-value') >= 0) jsonElementType = 'value';\n  if (element.className.indexOf('jsoneditor-field') >= 0) jsonElementType = 'field';\n  if (jsonElementType === '') {\n    // Unknown element field. Could be a button or something else\n    return;\n  }\n  var self = this;\n  setTimeout(function () {\n    if (node && (self.options.autocomplete.trigger === 'focus' || element.innerText.length > 0)) {\n      var result = self.options.autocomplete.getOptions(element.innerText, node.getPath(), jsonElementType, node.editor);\n      if (result === null) {\n        self.autocomplete.hideDropDown();\n      } else if (typeof result.then === 'function') {\n        // probably a promise\n        result.then(function (obj) {\n          if (obj === null) {\n            self.autocomplete.hideDropDown();\n          } else if (obj.options) {\n            self.autocomplete.show(element, obj.startFrom, obj.options);\n          } else {\n            self.autocomplete.show(element, 0, obj);\n          }\n        })[\"catch\"](function (err) {\n          console.error(err);\n        });\n      } else {\n        // definitely not a promise\n        if (result.options) {\n          self.autocomplete.show(element, result.startFrom, result.options);\n        } else {\n          self.autocomplete.show(element, 0, result);\n        }\n      }\n    } else {\n      self.autocomplete.hideDropDown();\n    }\n  }, 50);\n};\n\n/**\n * Event handler for keydown. Handles shortcut keys\n * @param {Event} event\n * @private\n */\ntreemode._onKeyDown = function (event) {\n  var keynum = event.which || event.keyCode;\n  var altKey = event.altKey;\n  var ctrlKey = event.ctrlKey;\n  var metaKey = event.metaKey;\n  var shiftKey = event.shiftKey;\n  var handled = false;\n  var currentTarget = this.focusTarget;\n  if (keynum === 9) {\n    // Tab or Shift+Tab\n    var me = this;\n    setTimeout(function () {\n      /*\n          - Checking for change in focusTarget\n          - Without the check,\n            pressing tab after reaching the final DOM element in the editor will\n            set the focus back to it than passing focus outside the editor\n      */\n      if (me.focusTarget !== currentTarget) {\n        // select all text when moving focus to an editable div\n        (0,util.selectContentEditable)(me.focusTarget);\n      }\n    }, 0);\n  }\n  if (this.searchBox) {\n    if (ctrlKey && keynum === 70) {\n      // Ctrl+F\n      this.searchBox.dom.search.focus();\n      this.searchBox.dom.search.select();\n      handled = true;\n    } else if (keynum === 114 || ctrlKey && keynum === 71) {\n      // F3 or Ctrl+G\n      var focus = true;\n      if (!shiftKey) {\n        // select next search result (F3 or Ctrl+G)\n        this.searchBox.next(focus);\n      } else {\n        // select previous search result (Shift+F3 or Ctrl+Shift+G)\n        this.searchBox.previous(focus);\n      }\n      handled = true;\n    }\n  }\n  if (this.history) {\n    if (ctrlKey && !shiftKey && keynum === 90) {\n      // Ctrl+Z\n      // undo\n      this._onUndo();\n      handled = true;\n    } else if (ctrlKey && shiftKey && keynum === 90) {\n      // Ctrl+Shift+Z\n      // redo\n      this._onRedo();\n      handled = true;\n    }\n  }\n  if (this.options.autocomplete && !handled) {\n    if (!ctrlKey && !altKey && !metaKey && (event.key.length === 1 || keynum === 8 || keynum === 46)) {\n      handled = false;\n      // Activate autocomplete\n      this._showAutoComplete(event.target);\n    }\n  }\n  if (handled) {\n    event.preventDefault();\n    event.stopPropagation();\n  }\n};\n\n/**\n * Create main table\n * @private\n */\ntreemode._createTable = function () {\n  if (this.options.navigationBar) {\n    (0,util.addClassName)(this.contentOuter, 'has-nav-bar');\n  }\n  this.scrollableContent = document.createElement('div');\n  this.scrollableContent.className = 'jsoneditor-tree';\n  this.contentOuter.appendChild(this.scrollableContent);\n\n  // the jsoneditor-tree-inner div with bottom padding is here to\n  // keep space for the action menu dropdown. It's created as a\n  // separate div instead of using scrollableContent to work around\n  // and issue in the Chrome browser showing scrollable contents outside of the div\n  // see https://github.com/josdejong/jsoneditor/issues/557\n  this.content = document.createElement('div');\n  this.content.className = 'jsoneditor-tree-inner';\n  this.scrollableContent.appendChild(this.content);\n  this.table = document.createElement('table');\n  this.table.className = 'jsoneditor-tree';\n  this.content.appendChild(this.table);\n\n  // create colgroup where the first two columns don't have a fixed\n  // width, and the edit columns do have a fixed width\n  var col;\n  this.colgroupContent = document.createElement('colgroup');\n  if (this.options.mode === 'tree') {\n    col = document.createElement('col');\n    col.width = '24px';\n    this.colgroupContent.appendChild(col);\n  }\n  col = document.createElement('col');\n  col.width = '24px';\n  this.colgroupContent.appendChild(col);\n  col = document.createElement('col');\n  this.colgroupContent.appendChild(col);\n  this.table.appendChild(this.colgroupContent);\n  this.tbody = document.createElement('tbody');\n  this.table.appendChild(this.tbody);\n  this.frame.appendChild(this.contentOuter);\n};\n\n/**\n * Show a contextmenu for this node.\n * Used for multiselection\n * @param {HTMLElement} anchor   Anchor element to attach the context menu to.\n * @param {function} [onClose]   Callback method called when the context menu\n *                               is being closed.\n */\ntreemode.showContextMenu = function (anchor, onClose) {\n  var items = [];\n  var selectedNodes = this.multiselection.nodes.slice();\n\n  // create duplicate button\n  items.push({\n    text: (0,i18n/* translate */.Tl)('duplicateText'),\n    title: (0,i18n/* translate */.Tl)('duplicateTitle'),\n    className: 'jsoneditor-duplicate',\n    click: function click() {\n      Node.onDuplicate(selectedNodes);\n    }\n  });\n\n  // create remove button\n  items.push({\n    text: (0,i18n/* translate */.Tl)('remove'),\n    title: (0,i18n/* translate */.Tl)('removeTitle'),\n    className: 'jsoneditor-remove',\n    click: function click() {\n      Node.onRemove(selectedNodes);\n    }\n  });\n  if (this.options.onCreateMenu) {\n    var paths = selectedNodes.map(function (node) {\n      return node.getPath();\n    });\n    items = this.options.onCreateMenu(items, {\n      type: 'multiple',\n      path: paths[0],\n      paths: paths\n    });\n  }\n  var menu = new ContextMenu/* ContextMenu */.t(items, {\n    close: onClose\n  });\n  menu.show(anchor, this.getPopupAnchor());\n};\ntreemode.getPopupAnchor = function () {\n  return this.options.popupAnchor || this.frame;\n};\n\n/**\n * Get current selected nodes\n * @return {{start:SerializableNode, end: SerializableNode}}\n */\ntreemode.getSelection = function () {\n  var selection = {\n    start: null,\n    end: null\n  };\n  if (this.multiselection.nodes && this.multiselection.nodes.length) {\n    if (this.multiselection.nodes.length) {\n      var selection1 = this.multiselection.nodes[0];\n      var selection2 = this.multiselection.nodes[this.multiselection.nodes.length - 1];\n      if (this.multiselection.direction === 'down') {\n        selection.start = selection1.serialize();\n        selection.end = selection2.serialize();\n      } else {\n        selection.start = selection2.serialize();\n        selection.end = selection1.serialize();\n      }\n    }\n  }\n  return selection;\n};\n\n/**\n * Callback registration for selection change\n * @param {selectionCallback} callback\n *\n * @callback selectionCallback\n */\ntreemode.onSelectionChange = function (callback) {\n  if (typeof callback === 'function') {\n    this._selectionChangedHandler = (0,util.debounce)(callback, this.DEBOUNCE_INTERVAL);\n  }\n};\n\n/**\n * Select range of nodes.\n * For selecting single node send only the start parameter\n * For clear the selection do not send any parameter\n * If the nodes are not from the same level the first common parent will be selected\n * @param {{path: Array.<String>}} start object contains the path for selection start\n * @param {{path: Array.<String>}} end object contains the path for selection end\n */\ntreemode.setSelection = function (start, end) {\n  // check for old usage\n  if (start && start.dom && start.range) {\n    console.warn('setSelection/getSelection usage for text selection is deprecated and should not be used, see documentation for supported selection options');\n    this.setDomSelection(start);\n  }\n  var nodes = this._getNodeInstancesByRange(start, end);\n  nodes.forEach(function (node) {\n    node.expandTo();\n  });\n  this.select(nodes);\n};\n\n/**\n * Returns a set of Nodes according to a range of selection\n * @param {{path: Array.<String>}} start object contains the path for range start\n * @param {{path: Array.<String>}=} end object contains the path for range end\n * @return {Array.<Node>} Node instances on the given range\n * @private\n */\ntreemode._getNodeInstancesByRange = function (start, end) {\n  var startNode, endNode;\n  if (start && start.path) {\n    startNode = this.node.findNodeByPath(start.path);\n    if (end && end.path) {\n      endNode = this.node.findNodeByPath(end.path);\n    }\n  }\n  var nodes = [];\n  if (startNode instanceof Node) {\n    if (endNode instanceof Node && endNode !== startNode) {\n      if (startNode.parent === endNode.parent) {\n        if (startNode.getIndex() < endNode.getIndex()) {\n          start = startNode;\n          end = endNode;\n        } else {\n          start = endNode;\n          end = startNode;\n        }\n        var current = start;\n        nodes.push(current);\n        do {\n          current = current.nextSibling();\n          nodes.push(current);\n        } while (current && current !== end);\n      } else {\n        nodes = this._findTopLevelNodes(startNode, endNode);\n      }\n    } else {\n      nodes.push(startNode);\n    }\n  }\n  return nodes;\n};\ntreemode.getNodesByRange = function (start, end) {\n  var nodes = this._getNodeInstancesByRange(start, end);\n  var serializableNodes = [];\n  nodes.forEach(function (node) {\n    serializableNodes.push(node.serialize());\n  });\n  return serializableNodes;\n};\n\n// define modes\nvar treeModeMixins = [{\n  mode: 'tree',\n  mixin: treemode,\n  data: 'json'\n}, {\n  mode: 'view',\n  mixin: treemode,\n  data: 'json'\n}, {\n  mode: 'form',\n  mixin: treemode,\n  data: 'json'\n}];\n\n/***/ }),\n\n/***/ 2870:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nexports.tryRequireAjv = function () {\n  try {\n    return __webpack_require__(2229);\n  } catch (err) {\n    // no problem... when we need Ajv we will throw a neat exception\n  }\n};\n\n/***/ }),\n\n/***/ 5467:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nexports.J = function () {\n  try {\n    __webpack_require__(9762);\n  } catch (err) {\n    console.error(err);\n  }\n};\n\n/***/ }),\n\n/***/ 6237:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addClassName: function() { return /* binding */ addClassName; },\n/* harmony export */   addEventListener: function() { return /* binding */ addEventListener; },\n/* harmony export */   asyncExec: function() { return /* binding */ asyncExec; },\n/* harmony export */   clear: function() { return /* binding */ clear; },\n/* harmony export */   compileJSONPointer: function() { return /* binding */ compileJSONPointer; },\n/* harmony export */   contains: function() { return /* binding */ contains; },\n/* harmony export */   debounce: function() { return /* binding */ debounce; },\n/* harmony export */   escapeUnicodeChars: function() { return /* binding */ escapeUnicodeChars; },\n/* harmony export */   extend: function() { return /* binding */ extend; },\n/* harmony export */   findUniqueName: function() { return /* binding */ findUniqueName; },\n/* harmony export */   formatSize: function() { return /* binding */ formatSize; },\n/* harmony export */   get: function() { return /* binding */ get; },\n/* harmony export */   getAbsoluteLeft: function() { return /* binding */ getAbsoluteLeft; },\n/* harmony export */   getAbsoluteTop: function() { return /* binding */ getAbsoluteTop; },\n/* harmony export */   getChildPaths: function() { return /* binding */ getChildPaths; },\n/* harmony export */   getColorCSS: function() { return /* binding */ getColorCSS; },\n/* harmony export */   getIndexForPosition: function() { return /* binding */ getIndexForPosition; },\n/* harmony export */   getInnerText: function() { return /* binding */ getInnerText; },\n/* harmony export */   getInputSelection: function() { return /* binding */ getInputSelection; },\n/* harmony export */   getInternetExplorerVersion: function() { return /* binding */ getInternetExplorerVersion; },\n/* harmony export */   getPositionForPath: function() { return /* binding */ getPositionForPath; },\n/* harmony export */   getSelection: function() { return /* binding */ getSelection; },\n/* harmony export */   getSelectionOffset: function() { return /* binding */ getSelectionOffset; },\n/* harmony export */   getType: function() { return /* binding */ getType; },\n/* harmony export */   getWindow: function() { return /* binding */ getWindow; },\n/* harmony export */   hasParentNode: function() { return /* binding */ hasParentNode; },\n/* harmony export */   improveSchemaError: function() { return /* binding */ improveSchemaError; },\n/* harmony export */   insideRect: function() { return /* binding */ insideRect; },\n/* harmony export */   isArray: function() { return /* binding */ isArray; },\n/* harmony export */   isChildOf: function() { return /* binding */ isChildOf; },\n/* harmony export */   isFirefox: function() { return /* binding */ isFirefox; },\n/* harmony export */   isObject: function() { return /* binding */ isObject; },\n/* harmony export */   isPromise: function() { return /* binding */ isPromise; },\n/* harmony export */   isTimestamp: function() { return /* binding */ isTimestamp; },\n/* harmony export */   isUrl: function() { return /* binding */ isUrl; },\n/* harmony export */   isValidColor: function() { return /* binding */ isValidColor; },\n/* harmony export */   isValidValidationError: function() { return /* binding */ isValidValidationError; },\n/* harmony export */   isValidationErrorChanged: function() { return /* binding */ isValidationErrorChanged; },\n/* harmony export */   limitCharacters: function() { return /* binding */ limitCharacters; },\n/* harmony export */   makeFieldTooltip: function() { return /* binding */ makeFieldTooltip; },\n/* harmony export */   parse: function() { return /* binding */ parse; },\n/* harmony export */   parsePath: function() { return /* binding */ parsePath; },\n/* harmony export */   parseString: function() { return /* binding */ parseString; },\n/* harmony export */   removeAllClassNames: function() { return /* binding */ removeAllClassNames; },\n/* harmony export */   removeClassName: function() { return /* binding */ removeClassName; },\n/* harmony export */   removeEventListener: function() { return /* binding */ removeEventListener; },\n/* harmony export */   removeReturnsAndSurroundingWhitespace: function() { return /* binding */ removeReturnsAndSurroundingWhitespace; },\n/* harmony export */   selectContentEditable: function() { return /* binding */ selectContentEditable; },\n/* harmony export */   setEndOfContentEditable: function() { return /* binding */ setEndOfContentEditable; },\n/* harmony export */   setSelection: function() { return /* binding */ setSelection; },\n/* harmony export */   setSelectionOffset: function() { return /* binding */ setSelectionOffset; },\n/* harmony export */   sort: function() { return /* binding */ sort; },\n/* harmony export */   sortObjectKeys: function() { return /* binding */ sortObjectKeys; },\n/* harmony export */   stringifyPath: function() { return /* binding */ stringifyPath; },\n/* harmony export */   stripFormatting: function() { return /* binding */ stripFormatting; },\n/* harmony export */   textDiff: function() { return /* binding */ textDiff; },\n/* harmony export */   tryJsonRepair: function() { return /* binding */ tryJsonRepair; },\n/* harmony export */   uniqueMergeArrays: function() { return /* binding */ uniqueMergeArrays; },\n/* harmony export */   validate: function() { return /* binding */ validate; }\n/* harmony export */ });\n/* harmony import */ var _polyfills__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1081);\n/* harmony import */ var _polyfills__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_polyfills__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var javascript_natural_sort__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1342);\n/* harmony import */ var javascript_natural_sort__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(javascript_natural_sort__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var jsonrepair__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9857);\n/* harmony import */ var _assets_jsonlint_jsonlint__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5736);\n/* harmony import */ var json_source_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3094);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3057);\n\n\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n\n\n\n\n\n\nvar MAX_ITEMS_FIELDS_COLLECTION = 10000;\nvar YEAR_2000 = 946684800000;\n\n/**\n * Parse JSON using the parser built-in in the browser.\n * On exception, the jsonString is validated and a detailed error is thrown.\n * @param {String} jsonString\n * @return {JSON} json\n */\nfunction parse(jsonString) {\n  try {\n    return JSON.parse(jsonString);\n  } catch (err) {\n    // try to throw a more detailed error message using validate\n    validate(jsonString);\n\n    // rethrow the original error\n    throw err;\n  }\n}\n\n/**\n * Try to fix the JSON string. If not successful, return the original string\n * @param {string} jsonString\n */\nfunction tryJsonRepair(jsonString) {\n  try {\n    return (0,jsonrepair__WEBPACK_IMPORTED_MODULE_2__/* .jsonrepair */ .m)(jsonString);\n  } catch (err) {\n    // repair was not successful, return original text\n    return jsonString;\n  }\n}\n\n/**\n * Escape unicode characters.\n * For example input '\\u2661' (length 1) will output '\\\\u2661' (length 5).\n * @param {string} text\n * @return {string}\n */\nfunction escapeUnicodeChars(\n// see https://www.wikiwand.com/en/UTF-16\ntext) {\n  return (\n    // note: we leave surrogate pairs as two individual chars,\n    // as JSON doesn't interpret them as a single unicode char.\n    text.replace(/[\\u007F-\\uFFFF]/g, function (c) {\n      return \"\\\\u\" + ('0000' + c.charCodeAt(0).toString(16)).slice(-4);\n    })\n  );\n}\n\n/**\n * Validate a string containing a JSON object\n * This method uses JSONLint to validate the String. If JSONLint is not\n * available, the built-in JSON parser of the browser is used.\n * @param {String} jsonString   String with an (invalid) JSON object\n * @throws Error\n */\nfunction validate(jsonString) {\n  if (typeof _assets_jsonlint_jsonlint__WEBPACK_IMPORTED_MODULE_3__ !== 'undefined') {\n    _assets_jsonlint_jsonlint__WEBPACK_IMPORTED_MODULE_3__.parse(jsonString);\n  } else {\n    JSON.parse(jsonString);\n  }\n}\n\n/**\n * Extend object a with the properties of object b\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n */\nfunction extend(a, b) {\n  for (var prop in b) {\n    if (hasOwnProperty(b, prop)) {\n      a[prop] = b[prop];\n    }\n  }\n  return a;\n}\n\n/**\n * Remove all properties from object a\n * @param {Object} a\n * @return {Object} a\n */\nfunction clear(a) {\n  for (var prop in a) {\n    if (hasOwnProperty(a, prop)) {\n      delete a[prop];\n    }\n  }\n  return a;\n}\n\n/**\n * Get the type of an object\n * @param {*} object\n * @return {String} type\n */\nfunction getType(object) {\n  if (object === null) {\n    return 'null';\n  }\n  if (object === undefined) {\n    return 'undefined';\n  }\n  if (object instanceof Number || typeof object === 'number') {\n    return 'number';\n  }\n  if (object instanceof String || typeof object === 'string') {\n    return 'string';\n  }\n  if (object instanceof Boolean || typeof object === 'boolean') {\n    return 'boolean';\n  }\n  if (object instanceof RegExp) {\n    return 'regexp';\n  }\n  if (isArray(object)) {\n    return 'array';\n  }\n  return 'object';\n}\n\n/**\n * Test whether a text contains a url (matches when a string starts\n * with 'http://*' or 'https://*' and has no whitespace characters)\n * @param {String} text\n */\nvar isUrlRegex = /^https?:\\/\\/\\S+$/;\nfunction isUrl(text) {\n  return (typeof text === 'string' || text instanceof String) && isUrlRegex.test(text);\n}\n\n/**\n * Tes whether given object is an Array\n * @param {*} obj\n * @returns {boolean} returns true when obj is an array\n */\nfunction isArray(obj) {\n  return Object.prototype.toString.call(obj) === '[object Array]';\n}\n\n/**\n * Gets a DOM element's Window.  This is normally just the global `window`\n * variable, but if we opened a child window, it may be different.\n * @param {HTMLElement} element\n * @return {Window}\n */\nfunction getWindow(element) {\n  return element.ownerDocument.defaultView;\n}\n\n/**\n * Retrieve the absolute left value of a DOM element\n * @param {Element} elem    A dom element, for example a div\n * @return {Number} left    The absolute left position of this element\n *                          in the browser page.\n */\nfunction getAbsoluteLeft(elem) {\n  var rect = elem.getBoundingClientRect();\n  return rect.left + window.pageXOffset || document.scrollLeft || 0;\n}\n\n/**\n * Retrieve the absolute top value of a DOM element\n * @param {Element} elem    A dom element, for example a div\n * @return {Number} top     The absolute top position of this element\n *                          in the browser page.\n */\nfunction getAbsoluteTop(elem) {\n  var rect = elem.getBoundingClientRect();\n  return rect.top + window.pageYOffset || document.scrollTop || 0;\n}\n\n/**\n * add a className to the given elements style\n * @param {Element} elem\n * @param {String} className\n */\nfunction addClassName(elem, className) {\n  var classes = elem.className.split(' ');\n  if (classes.indexOf(className) === -1) {\n    classes.push(className); // add the class to the array\n    elem.className = classes.join(' ');\n  }\n}\n\n/**\n * remove all classes from the given elements style\n * @param {Element} elem\n */\nfunction removeAllClassNames(elem) {\n  elem.className = '';\n}\n\n/**\n * add a className to the given elements style\n * @param {Element} elem\n * @param {String} className\n */\nfunction removeClassName(elem, className) {\n  var classes = elem.className.split(' ');\n  var index = classes.indexOf(className);\n  if (index !== -1) {\n    classes.splice(index, 1); // remove the class from the array\n    elem.className = classes.join(' ');\n  }\n}\n\n/**\n * Strip the formatting from the contents of a div\n * the formatting from the div itself is not stripped, only from its childs.\n * @param {Element} divElement\n */\nfunction stripFormatting(divElement) {\n  var childs = divElement.childNodes;\n  for (var i = 0, iMax = childs.length; i < iMax; i++) {\n    var child = childs[i];\n\n    // remove the style\n    if (child.style) {\n      // TODO: test if child.attributes does contain style\n      child.removeAttribute('style');\n    }\n\n    // remove all attributes\n    var attributes = child.attributes;\n    if (attributes) {\n      for (var j = attributes.length - 1; j >= 0; j--) {\n        var attribute = attributes[j];\n        if (attribute.specified === true) {\n          child.removeAttribute(attribute.name);\n        }\n      }\n    }\n\n    // recursively strip childs\n    stripFormatting(child);\n  }\n}\n\n/**\n * Set focus to the end of an editable div\n * code from Nico Burns\n * http://stackoverflow.com/users/140293/nico-burns\n * http://stackoverflow.com/questions/1125292/how-to-move-cursor-to-end-of-contenteditable-entity\n * @param {Element} contentEditableElement   A content editable div\n */\nfunction setEndOfContentEditable(contentEditableElement) {\n  var range, selection;\n  if (document.createRange) {\n    range = document.createRange(); // Create a range (a range is a like the selection but invisible)\n    range.selectNodeContents(contentEditableElement); // Select the entire contents of the element with the range\n    range.collapse(false); // collapse the range to the end point. false means collapse to end rather than the start\n    selection = window.getSelection(); // get the selection object (allows you to change selection)\n    selection.removeAllRanges(); // remove any selections already made\n    selection.addRange(range); // make the range you have just created the visible selection\n  }\n}\n\n/**\n * Select all text of a content editable div.\n * http://stackoverflow.com/a/3806004/1262753\n * @param {Element} contentEditableElement   A content editable div\n */\nfunction selectContentEditable(contentEditableElement) {\n  if (!contentEditableElement || contentEditableElement.nodeName !== 'DIV') {\n    return;\n  }\n  var sel, range;\n  if (window.getSelection && document.createRange) {\n    range = document.createRange();\n    range.selectNodeContents(contentEditableElement);\n    sel = window.getSelection();\n    sel.removeAllRanges();\n    sel.addRange(range);\n  }\n}\n\n/**\n * Get text selection\n * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\n * @return {Range | TextRange | null} range\n */\nfunction getSelection() {\n  if (window.getSelection) {\n    var sel = window.getSelection();\n    if (sel.getRangeAt && sel.rangeCount) {\n      return sel.getRangeAt(0);\n    }\n  }\n  return null;\n}\n\n/**\n * Set text selection\n * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\n * @param {Range | TextRange | null} range\n */\nfunction setSelection(range) {\n  if (range) {\n    if (window.getSelection) {\n      var sel = window.getSelection();\n      sel.removeAllRanges();\n      sel.addRange(range);\n    }\n  }\n}\n\n/**\n * Get selected text range\n * @return {Object} params  object containing parameters:\n *                              {Number}  startOffset\n *                              {Number}  endOffset\n *                              {Element} container  HTML element holding the\n *                                                   selected text element\n *                          Returns null if no text selection is found\n */\nfunction getSelectionOffset() {\n  var range = getSelection();\n  if (range && 'startOffset' in range && 'endOffset' in range && range.startContainer && range.startContainer === range.endContainer) {\n    return {\n      startOffset: range.startOffset,\n      endOffset: range.endOffset,\n      container: range.startContainer.parentNode\n    };\n  }\n  return null;\n}\n\n/**\n * Set selected text range in given element\n * @param {Object} params   An object containing:\n *                              {Element} container\n *                              {Number} startOffset\n *                              {Number} endOffset\n */\nfunction setSelectionOffset(params) {\n  if (document.createRange && window.getSelection) {\n    var selection = window.getSelection();\n    if (selection) {\n      var range = document.createRange();\n      if (!params.container.firstChild) {\n        params.container.appendChild(document.createTextNode(''));\n      }\n\n      // TODO: do not suppose that the first child of the container is a textnode,\n      //       but recursively find the textnodes\n      range.setStart(params.container.firstChild, params.startOffset);\n      range.setEnd(params.container.firstChild, params.endOffset);\n      setSelection(range);\n    }\n  }\n}\n/**\n * Get the inner text of an HTML element (for example a div element)\n * @param {Element} element\n * @param {Object} [buffer]\n * @return {String} innerText\n */\nfunction getInnerText(element, buffer) {\n  var first = buffer === undefined;\n  if (first) {\n    buffer = {\n      _text: '',\n      flush: function flush() {\n        var text = this._text;\n        this._text = '';\n        return text;\n      },\n      set: function set(text) {\n        this._text = text;\n      }\n    };\n  }\n\n  // text node\n  if (element.nodeValue) {\n    // remove return characters and the whitespaces surrounding those return characters\n    var trimmedValue = removeReturnsAndSurroundingWhitespace(element.nodeValue);\n    if (trimmedValue !== '') {\n      return buffer.flush() + trimmedValue;\n    } else {\n      // ignore empty text\n      return '';\n    }\n  }\n\n  // divs or other HTML elements\n  if (element.hasChildNodes()) {\n    var childNodes = element.childNodes;\n    var innerText = '';\n    for (var i = 0, iMax = childNodes.length; i < iMax; i++) {\n      var child = childNodes[i];\n      if (child.nodeName === 'DIV' || child.nodeName === 'P') {\n        var prevChild = childNodes[i - 1];\n        var prevName = prevChild ? prevChild.nodeName : undefined;\n        if (prevName && prevName !== 'DIV' && prevName !== 'P' && prevName !== 'BR') {\n          if (innerText !== '') {\n            innerText += '\\n';\n          }\n          buffer.flush();\n        }\n        innerText += getInnerText(child, buffer);\n        buffer.set('\\n');\n      } else if (child.nodeName === 'BR') {\n        innerText += buffer.flush();\n        buffer.set('\\n');\n      } else {\n        innerText += getInnerText(child, buffer);\n      }\n    }\n    return innerText;\n  }\n\n  // br or unknown\n  return '';\n}\n\n// regular expression matching one or multiple return characters with all their\n// enclosing white spaces\nfunction removeReturnsAndSurroundingWhitespace(text) {\n  return text.replace(/(\\b|^)\\s*(\\b|$)/g, function (match) {\n    return /\\n/.exec(match) ? '' : match;\n  });\n}\n\n/**\n * Test whether an element has the provided parent node somewhere up the node tree.\n * @param {Element} elem\n * @param {Element} parent\n * @return {boolean}\n */\nfunction hasParentNode(elem, parent) {\n  var e = elem ? elem.parentNode : undefined;\n  while (e) {\n    if (e === parent) {\n      return true;\n    }\n    e = e.parentNode;\n  }\n  return false;\n}\n\n/**\n * Returns the version of Internet Explorer or a -1\n * (indicating the use of another browser).\n * Source: http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx\n * @return {Number} Internet Explorer version, or -1 in case of an other browser\n */\nfunction getInternetExplorerVersion() {\n  if (_ieVersion === -1) {\n    var rv = -1; // Return value assumes failure.\n    if (typeof navigator !== 'undefined' && navigator.appName === 'Microsoft Internet Explorer') {\n      var ua = navigator.userAgent;\n      var re = /MSIE ([0-9]+[.0-9]+)/;\n      if (re.exec(ua) != null) {\n        rv = parseFloat(RegExp.$1);\n      }\n    }\n    _ieVersion = rv;\n  }\n  return _ieVersion;\n}\n\n/**\n * cached internet explorer version\n * @type {Number}\n * @private\n */\nvar _ieVersion = -1;\n\n/**\n * Test whether the current browser is Firefox\n * @returns {boolean} isFirefox\n */\nfunction isFirefox() {\n  return typeof navigator !== 'undefined' && navigator.userAgent.indexOf('Firefox') !== -1;\n}\n\n/**\n * Add an event listener. Works for all browsers\n * @param {Element}     element    An html element\n * @param {string}      action     The action, for example \"click\",\n *                                 without the prefix \"on\"\n * @param {function}    listener   The callback function to be executed\n * @param {boolean}     [useCapture] false by default\n * @return {function}   the created event listener\n */\nfunction addEventListener(element, action, listener, useCapture) {\n  if (element.addEventListener) {\n    if (useCapture === undefined) {\n      useCapture = false;\n    }\n    if (action === 'mousewheel' && isFirefox()) {\n      action = 'DOMMouseScroll'; // For Firefox\n    }\n    element.addEventListener(action, listener, useCapture);\n    return listener;\n  } else if (element.attachEvent) {\n    // Old IE browsers\n    var f = function f() {\n      return listener.call(element, window.event);\n    };\n    element.attachEvent('on' + action, f);\n    return f;\n  }\n}\n\n/**\n * Remove an event listener from an element\n * @param {Element}  element   An html dom element\n * @param {string}   action    The name of the event, for example \"mousedown\"\n * @param {function} listener  The listener function\n * @param {boolean}  [useCapture]   false by default\n */\nfunction removeEventListener(element, action, listener, useCapture) {\n  if (element.removeEventListener) {\n    if (useCapture === undefined) {\n      useCapture = false;\n    }\n    if (action === 'mousewheel' && isFirefox()) {\n      action = 'DOMMouseScroll'; // For Firefox\n    }\n    element.removeEventListener(action, listener, useCapture);\n  } else if (element.detachEvent) {\n    // Old IE browsers\n    element.detachEvent('on' + action, listener);\n  }\n}\n\n/**\n * Test if an element is a child of a parent element.\n * @param {Element} elem\n * @param {Element} parent\n * @return {boolean} returns true if elem is a child of the parent\n */\nfunction isChildOf(elem, parent) {\n  var e = elem.parentNode;\n  while (e) {\n    if (e === parent) {\n      return true;\n    }\n    e = e.parentNode;\n  }\n  return false;\n}\n\n/**\n * Parse a JSON path like '.items[3].name' into an array\n * @param {string} jsonPath\n * @return {Array}\n */\nfunction parsePath(jsonPath) {\n  var path = [];\n  var i = 0;\n  function parseProperty() {\n    var prop = '';\n    while (jsonPath[i] !== undefined && /[\\w$]/.test(jsonPath[i])) {\n      prop += jsonPath[i];\n      i++;\n    }\n    if (prop === '') {\n      throw new Error('Invalid JSON path: property name expected at index ' + i);\n    }\n    return prop;\n  }\n  function parseIndex(end) {\n    var name = '';\n    while (jsonPath[i] !== undefined && jsonPath[i] !== end) {\n      name += jsonPath[i];\n      i++;\n    }\n    if (jsonPath[i] !== end) {\n      throw new Error('Invalid JSON path: unexpected end, character ' + end + ' expected');\n    }\n    return name;\n  }\n  while (jsonPath[i] !== undefined) {\n    if (jsonPath[i] === '.') {\n      i++;\n      path.push(parseProperty());\n    } else if (jsonPath[i] === '[') {\n      i++;\n      if (jsonPath[i] === '\\'' || jsonPath[i] === '\"') {\n        var end = jsonPath[i];\n        i++;\n        path.push(parseIndex(end));\n        if (jsonPath[i] !== end) {\n          throw new Error('Invalid JSON path: closing quote \\' expected at index ' + i);\n        }\n        i++;\n      } else {\n        var index = parseIndex(']').trim();\n        if (index.length === 0) {\n          throw new Error('Invalid JSON path: array value expected at index ' + i);\n        }\n        // Coerce numeric indices to numbers, but ignore star\n        index = index === '*' ? index : JSON.parse(index);\n        path.push(index);\n      }\n      if (jsonPath[i] !== ']') {\n        throw new Error('Invalid JSON path: closing bracket ] expected at index ' + i);\n      }\n      i++;\n    } else {\n      throw new Error('Invalid JSON path: unexpected character \"' + jsonPath[i] + '\" at index ' + i);\n    }\n  }\n  return path;\n}\n\n/**\n * Stringify an array with a path in a JSON path like '.items[3].name'\n * @param {Array.<string | number>} path\n * @returns {string}\n */\nfunction stringifyPath(path) {\n  return path.map(function (p) {\n    if (typeof p === 'number') {\n      return '[' + p + ']';\n    } else if (typeof p === 'string' && p.match(/^[A-Za-z0-9_$]+$/)) {\n      return '.' + p;\n    } else {\n      return '[\"' + p + '\"]';\n    }\n  }).join('');\n}\n\n/**\n * Improve the error message of a JSON schema error\n * @param {Object} error\n * @return {Object} The error\n */\nfunction improveSchemaError(error) {\n  if (error.keyword === 'enum' && Array.isArray(error.schema)) {\n    var enums = error.schema;\n    if (enums) {\n      enums = enums.map(function (value) {\n        return JSON.stringify(value);\n      });\n      if (enums.length > 5) {\n        var more = ['(' + (enums.length - 5) + ' more...)'];\n        enums = enums.slice(0, 5);\n        enums.push(more);\n      }\n      error.message = 'should be equal to one of: ' + enums.join(', ');\n    }\n  }\n  if (error.keyword === 'additionalProperties') {\n    error.message = 'should NOT have additional property: ' + error.params.additionalProperty;\n  }\n  return error;\n}\n\n/**\n * Test whether something is a Promise\n * @param {*} object\n * @returns {boolean} Returns true when object is a promise, false otherwise\n */\nfunction isPromise(object) {\n  return object && typeof object.then === 'function' && typeof object[\"catch\"] === 'function';\n}\n\n/**\n * Test whether a custom validation error has the correct structure\n * @param {*} validationError The error to be checked.\n * @returns {boolean} Returns true if the structure is ok, false otherwise\n */\nfunction isValidValidationError(validationError) {\n  return _typeof(validationError) === 'object' && Array.isArray(validationError.path) && typeof validationError.message === 'string';\n}\n\n/**\n * Test whether the child rect fits completely inside the parent rect.\n * @param {ClientRect} parent\n * @param {ClientRect} child\n * @param {number} margin\n */\nfunction insideRect(parent, child, margin) {\n  var _margin = margin !== undefined ? margin : 0;\n  return child.left - _margin >= parent.left && child.right + _margin <= parent.right && child.top - _margin >= parent.top && child.bottom + _margin <= parent.bottom;\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds.\n *\n * Source: https://davidwalsh.name/javascript-debounce-function\n *\n * @param {function} func\n * @param {number} wait                 Number in milliseconds\n * @param {boolean} [immediate=false]   If `immediate` is passed, trigger the\n *                                      function on the leading edge, instead\n *                                      of the trailing.\n * @return {function} Return the debounced function\n */\nfunction debounce(func, wait, immediate) {\n  var timeout;\n  return function () {\n    var context = this;\n    var args = arguments;\n    var later = function later() {\n      timeout = null;\n      if (!immediate) func.apply(context, args);\n    };\n    var callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n    if (callNow) func.apply(context, args);\n  };\n}\n\n/**\n * Determines the difference between two texts.\n * Can only detect one removed or inserted block of characters.\n * @param {string} oldText\n * @param {string} newText\n * @return {{start: number, end: number}} Returns the start and end\n *                                        of the changed part in newText.\n */\nfunction textDiff(oldText, newText) {\n  var len = newText.length;\n  var start = 0;\n  var oldEnd = oldText.length;\n  var newEnd = newText.length;\n  while (newText.charAt(start) === oldText.charAt(start) && start < len) {\n    start++;\n  }\n  while (newText.charAt(newEnd - 1) === oldText.charAt(oldEnd - 1) && newEnd > start && oldEnd > 0) {\n    newEnd--;\n    oldEnd--;\n  }\n  return {\n    start: start,\n    end: newEnd\n  };\n}\n\n/**\n * Return an object with the selection range or cursor position (if both have the same value)\n * Support also old browsers (IE8-)\n * Source: http://ourcodeworld.com/articles/read/282/how-to-get-the-current-cursor-position-and-selection-within-a-text-input-or-textarea-in-javascript\n * @param {DOMElement} el A dom element of a textarea or input text.\n * @return {Object} reference Object with 2 properties (start and end) with the identifier of the location of the cursor and selected text.\n **/\nfunction getInputSelection(el) {\n  var startIndex = 0;\n  var endIndex = 0;\n  var normalizedValue;\n  var range;\n  var textInputRange;\n  var len;\n  var endRange;\n  if (typeof el.selectionStart === 'number' && typeof el.selectionEnd === 'number') {\n    startIndex = el.selectionStart;\n    endIndex = el.selectionEnd;\n  } else {\n    range = document.selection.createRange();\n    if (range && range.parentElement() === el) {\n      len = el.value.length;\n      normalizedValue = el.value.replace(/\\r\\n/g, '\\n');\n\n      // Create a working TextRange that lives only in the input\n      textInputRange = el.createTextRange();\n      textInputRange.moveToBookmark(range.getBookmark());\n\n      // Check if the startIndex and endIndex of the selection are at the very end\n      // of the input, since moveStart/moveEnd doesn't return what we want\n      // in those cases\n      endRange = el.createTextRange();\n      endRange.collapse(false);\n      if (textInputRange.compareEndPoints('StartToEnd', endRange) > -1) {\n        startIndex = endIndex = len;\n      } else {\n        startIndex = -textInputRange.moveStart('character', -len);\n        startIndex += normalizedValue.slice(0, startIndex).split('\\n').length - 1;\n        if (textInputRange.compareEndPoints('EndToEnd', endRange) > -1) {\n          endIndex = len;\n        } else {\n          endIndex = -textInputRange.moveEnd('character', -len);\n          endIndex += normalizedValue.slice(0, endIndex).split('\\n').length - 1;\n        }\n      }\n    }\n  }\n  return {\n    startIndex: startIndex,\n    endIndex: endIndex,\n    start: _positionForIndex(startIndex),\n    end: _positionForIndex(endIndex)\n  };\n\n  /**\n   * Returns textarea row and column position for certain index\n   * @param {Number} index text index\n   * @returns {{row: Number, column: Number}}\n   */\n  function _positionForIndex(index) {\n    var textTillIndex = el.value.substring(0, index);\n    var row = (textTillIndex.match(/\\n/g) || []).length + 1;\n    var col = textTillIndex.length - textTillIndex.lastIndexOf('\\n');\n    return {\n      row: row,\n      column: col\n    };\n  }\n}\n\n/**\n * Returns the index for certain position in text element\n * @param {DOMElement} el A dom element of a textarea or input text.\n * @param {Number} row row value, > 0, if exceeds rows number - last row will be returned\n * @param {Number} column column value, > 0, if exceeds column length - end of column will be returned\n * @returns {Number} index of position in text, -1 if not found\n */\nfunction getIndexForPosition(el, row, column) {\n  var text = el.value || '';\n  if (row > 0 && column > 0) {\n    var rows = text.split('\\n', row);\n    row = Math.min(rows.length, row);\n    column = Math.min(rows[row - 1].length, column - 1);\n    var columnCount = row === 1 ? column : column + 1; // count new line on multiple rows\n    return rows.slice(0, row - 1).join('\\n').length + columnCount;\n  }\n  return -1;\n}\n\n/**\n * Returns location of json paths in certain json string\n * @param {String} text json string\n * @param {Array<String>} paths array of json paths\n * @returns {Array<{path: String, line: Number, row: Number}>}\n */\nfunction getPositionForPath(text, paths) {\n  var result = [];\n  var jsmap;\n  if (!paths || !paths.length) {\n    return result;\n  }\n  try {\n    jsmap = json_source_map__WEBPACK_IMPORTED_MODULE_4__.parse(text);\n  } catch (err) {\n    return result;\n  }\n  paths.forEach(function (path) {\n    var pathArr = parsePath(path);\n    var pointerName = compileJSONPointer(pathArr);\n    var pointer = jsmap.pointers[pointerName];\n    if (pointer) {\n      result.push({\n        path: path,\n        line: pointer.key ? pointer.key.line : pointer.value ? pointer.value.line : 0,\n        column: pointer.key ? pointer.key.column : pointer.value ? pointer.value.column : 0\n      });\n    }\n  });\n  return result;\n}\n\n/**\n * Compile a JSON Pointer\n * WARNING: this is an incomplete implementation\n * @param {Array.<string | number>} path\n * @return {string}\n */\nfunction compileJSONPointer(path) {\n  return path.map(function (p) {\n    return '/' + String(p).replace(/~/g, '~0').replace(/\\//g, '~1');\n  }).join('');\n}\n\n/**\n * Get the applied color given a color name or code\n * Source: https://stackoverflow.com/questions/6386090/validating-css-color-names/33184805\n * @param {string} color\n * @returns {string | null} returns the color if the input is a valid\n *                   color, and returns null otherwise. Example output:\n *                   'rgba(255,0,0,0.7)' or 'rgb(255,0,0)'\n */\nfunction getColorCSS(color) {\n  var ele = document.createElement('div');\n  ele.style.color = color;\n  return ele.style.color.split(/\\s+/).join('').toLowerCase() || null;\n}\n\n/**\n * Test if a string contains a valid color name or code.\n * @param {string} color\n * @returns {boolean} returns true if a valid color, false otherwise\n */\nfunction isValidColor(color) {\n  return !!getColorCSS(color);\n}\n\n/**\n * Make a tooltip for a field based on the field's schema.\n * @param {object} schema JSON schema\n * @param {string} [locale] Locale code (for example, zh-CN)\n * @returns {string} Field tooltip, may be empty string if all relevant schema properties are missing\n */\nfunction makeFieldTooltip(schema, locale) {\n  if (!schema) {\n    return '';\n  }\n  var tooltip = '';\n  if (schema.title) {\n    tooltip += schema.title;\n  }\n  if (schema.description) {\n    if (tooltip.length > 0) {\n      tooltip += '\\n';\n    }\n    tooltip += schema.description;\n  }\n  if (schema[\"default\"]) {\n    if (tooltip.length > 0) {\n      tooltip += '\\n\\n';\n    }\n    tooltip += (0,_i18n__WEBPACK_IMPORTED_MODULE_5__/* .translate */ .Tl)('default', undefined, locale) + '\\n';\n    tooltip += JSON.stringify(schema[\"default\"], null, 2);\n  }\n  if (Array.isArray(schema.examples) && schema.examples.length > 0) {\n    if (tooltip.length > 0) {\n      tooltip += '\\n\\n';\n    }\n    tooltip += (0,_i18n__WEBPACK_IMPORTED_MODULE_5__/* .translate */ .Tl)('examples', undefined, locale) + '\\n';\n    schema.examples.forEach(function (example, index) {\n      tooltip += JSON.stringify(example, null, 2);\n      if (index !== schema.examples.length - 1) {\n        tooltip += '\\n';\n      }\n    });\n  }\n  return tooltip;\n}\n\n/**\n * Get a nested property from an object.\n * Returns undefined when the property does not exist.\n * @param {Object} object\n * @param {string[]} path\n * @return {*}\n */\nfunction get(object, path) {\n  var value = object;\n  for (var i = 0; i < path.length && value !== undefined && value !== null; i++) {\n    value = value[path[i]];\n  }\n  return value;\n}\n\n/**\n * Find a unique name. Suffix the name with ' (copy)', '(copy 2)', etc\n * until a unique name is found\n * @param {string} name\n * @param {Array} existingPropNames    Array with existing prop names\n */\nfunction findUniqueName(name, existingPropNames) {\n  if (existingPropNames.indexOf(name) === -1) {\n    return name;\n  }\n  var strippedName = name.replace(/ \\(copy( \\d+)?\\)$/, '');\n  var validName = strippedName;\n  var i = 1;\n  while (existingPropNames.indexOf(validName) !== -1) {\n    var copy = 'copy' + (i > 1 ? ' ' + i : '');\n    validName = strippedName + ' (' + copy + ')';\n    i++;\n  }\n  return validName;\n}\n\n/**\n * Get the child paths of an array\n * @param {JSON} json\n * @param {boolean} [includeObjects=false] If true, object and array paths are returned as well\n * @return {string[]}\n */\nfunction getChildPaths(json, includeObjects) {\n  var pathsMap = {};\n  function getObjectChildPaths(json, pathsMap, rootPath, includeObjects) {\n    var isValue = !Array.isArray(json) && !isObject(json);\n    if (isValue || includeObjects) {\n      pathsMap[rootPath || ''] = true;\n    }\n    if (isObject(json)) {\n      Object.keys(json).forEach(function (field) {\n        getObjectChildPaths(json[field], pathsMap, rootPath + '.' + field, includeObjects);\n      });\n    }\n  }\n  if (Array.isArray(json)) {\n    var max = Math.min(json.length, MAX_ITEMS_FIELDS_COLLECTION);\n    for (var i = 0; i < max; i++) {\n      var item = json[i];\n      getObjectChildPaths(item, pathsMap, '', includeObjects);\n    }\n  } else {\n    pathsMap[''] = true;\n  }\n  return Object.keys(pathsMap).sort();\n}\n\n/**\n * Sort object keys using natural sort\n * @param {Array} array\n * @param {String} [path] JSON pointer\n * @param {'asc' | 'desc'} [direction]\n */\nfunction sort(array, path, direction) {\n  var parsedPath = path && path !== '.' ? parsePath(path) : [];\n  var sign = direction === 'desc' ? -1 : 1;\n  var sortedArray = array.slice();\n  sortedArray.sort(function (a, b) {\n    var aValue = get(a, parsedPath);\n    var bValue = get(b, parsedPath);\n    return sign * (aValue > bValue ? 1 : aValue < bValue ? -1 : 0);\n  });\n  return sortedArray;\n}\n\n/**\n * Sort object keys using natural sort\n * @param {Object} object\n * @param {'asc' | 'desc'} [direction]\n */\nfunction sortObjectKeys(object, direction) {\n  var sign = direction === 'desc' ? -1 : 1;\n  var sortedFields = Object.keys(object).sort(function (a, b) {\n    return sign * javascript_natural_sort__WEBPACK_IMPORTED_MODULE_1___default()(a, b);\n  });\n  var sortedObject = {};\n  sortedFields.forEach(function (field) {\n    sortedObject[field] = object[field];\n  });\n  return sortedObject;\n}\n\n/**\n * Cast contents of a string to the correct type.\n * This can be a string, a number, a boolean, etc\n * @param {String} str\n * @return {*} castedStr\n * @private\n */\nfunction parseString(str) {\n  if (str === '') {\n    return '';\n  }\n  var lower = str.toLowerCase();\n  if (lower === 'null') {\n    return null;\n  }\n  if (lower === 'true') {\n    return true;\n  }\n  if (lower === 'false') {\n    return false;\n  }\n  var containsLeadingZero = /^0\\d+$/;\n  var startsWithZeroPrefix = /^0[xbo]/i; // hex, binary, octal numbers\n  if (containsLeadingZero.test(str) || startsWithZeroPrefix.test(str)) {\n    // treat '001', '0x1A', '0b1101', and '0o3700' as a string\n    return str;\n  }\n  var num = Number(str); // will nicely fail with '123ab'\n  var numFloat = parseFloat(str); // will nicely fail with '  '\n  var isFiniteNumber = !isNaN(num) && !isNaN(numFloat) && isFinite(num);\n  var isInSafeRange = num <= Number.MAX_SAFE_INTEGER && num >= Number.MIN_SAFE_INTEGER;\n  var isInteger = /^\\d+$/.test(str);\n  if (isFiniteNumber && (isInSafeRange || !isInteger)) {\n    return num;\n  }\n  return str;\n}\n\n/**\n * Test whether some field contains a timestamp in milliseconds after the year 2000.\n * @param {string} field\n * @param {number} value\n * @return {boolean}\n */\nfunction isTimestamp(field, value) {\n  return typeof value === 'number' && value > YEAR_2000 && isFinite(value) && Math.floor(value) === value && !isNaN(new Date(value).valueOf());\n}\n\n/**\n * Return a human readable document size\n * For example formatSize(7570718) outputs '7.6 MB'\n * @param {number} size\n * @return {string} Returns a human readable size\n */\nfunction formatSize(size) {\n  if (size < 900) {\n    return size.toFixed() + ' B';\n  }\n  var KB = size / 1000;\n  if (KB < 900) {\n    return KB.toFixed(1) + ' KB';\n  }\n  var MB = KB / 1000;\n  if (MB < 900) {\n    return MB.toFixed(1) + ' MB';\n  }\n  var GB = MB / 1000;\n  if (GB < 900) {\n    return GB.toFixed(1) + ' GB';\n  }\n  var TB = GB / 1000;\n  return TB.toFixed(1) + ' TB';\n}\n\n/**\n * Limit text to a maximum number of characters\n * @param {string} text\n * @param {number} maxCharacterCount\n * @return {string} Returns the limited text,\n *                  ending with '...' if the max was exceeded\n */\nfunction limitCharacters(text, maxCharacterCount) {\n  if (text.length <= maxCharacterCount) {\n    return text;\n  }\n  return text.slice(0, maxCharacterCount) + '...';\n}\n\n/**\n * Test whether a value is an Object\n * @param {*} value\n * @return {boolean}\n */\nfunction isObject(value) {\n  return _typeof(value) === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Helper function to test whether an array contains an item\n * @param {Array} array\n * @param {*} item\n * @return {boolean} Returns true if `item` is in `array`, returns false otherwise.\n */\nfunction contains(array, item) {\n  return array.indexOf(item) !== -1;\n}\n\n/**\n * Checks if validation has changed from the previous execution\n * @param {Array} currErr current validation errors\n * @param {Array} prevErr previous validation errors\n */\nfunction isValidationErrorChanged(currErr, prevErr) {\n  if (!currErr && !prevErr) {\n    return false;\n  }\n  if (!Array.isArray(currErr) || !Array.isArray(prevErr) || prevErr.length !== currErr.length) {\n    return true;\n  }\n  for (var i = 0; i < currErr.length; i++) {\n    var currItem = currErr[i];\n    var prevItem = prevErr[i];\n    if (currItem.type !== prevItem.type || JSON.stringify(currItem.error) !== JSON.stringify(prevItem.error)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Uniquely merge array of elements\n * @param {Array<string|number>} inputArray1\n * @param {Array<string|number>} inputArray2\n * @returns {Array<string|number>} an array with unique merged elements\n */\nfunction uniqueMergeArrays(inputArray1, inputArray2) {\n  var arr1 = inputArray1 !== null && inputArray1 !== void 0 && inputArray1.length ? inputArray1 : [];\n  var arr2 = inputArray2 !== null && inputArray2 !== void 0 && inputArray2.length ? inputArray2 : [];\n  return _toConsumableArray(new Set(arr1.concat(arr2)));\n}\nfunction asyncExec(callback) {\n  setTimeout(callback);\n}\nfunction hasOwnProperty(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n\n/***/ }),\n\n/***/ 1746:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar VanillaPicker;\nif (window.Picker) {\n  // use the already loaded instance of VanillaPicker\n  VanillaPicker = window.Picker;\n} else {\n  try {\n    // load color picker\n    VanillaPicker = __webpack_require__(7598);\n  } catch (err) {\n    // probably running the minimalist bundle\n  }\n}\nmodule.exports = VanillaPicker;\n\n/***/ }),\n\n/***/ 6990:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* module decorator */ module = __webpack_require__.nmd(module);\n/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n    return;\n\n\nvar define = function(module, deps, payload) {\n    if (typeof module !== \"string\") {\n        if (define.original)\n            define.original.apply(this, arguments);\n        else {\n            console.error(\"dropping module because define wasn\\'t a string.\");\n            console.trace();\n        }\n        return;\n    }\n    if (arguments.length == 2)\n        payload = deps;\n    if (!define.modules[module]) {\n        define.payloads[module] = payload;\n        define.modules[module] = null;\n    }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n    if (typeof module === \"string\") {\n        var payload = lookup(parentId, module);\n        if (payload != undefined) {\n            callback && callback();\n            return payload;\n        }\n    } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n        var params = [];\n        for (var i = 0, l = module.length; i < l; ++i) {\n            var dep = lookup(parentId, module[i]);\n            if (dep == undefined && require.original)\n                return;\n            params.push(dep);\n        }\n        return callback && callback.apply(null, params) || true;\n    }\n};\n\nvar require = function(module, callback) {\n    var packagedModule = _require(\"\", module, callback);\n    if (packagedModule == undefined && require.original)\n        return require.original.apply(this, arguments);\n    return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = base + \"/\" + moduleName;\n\n        while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n    moduleName = normalizeModule(parentId, moduleName);\n\n    var module = define.modules[moduleName];\n    if (!module) {\n        module = define.payloads[moduleName];\n        if (typeof module === 'function') {\n            var exports = {};\n            var mod = {\n                id: moduleName,\n                uri: '',\n                exports: exports,\n                packaged: true\n            };\n\n            var req = function(module, callback) {\n                return _require(moduleName, module, callback);\n            };\n\n            var returnValue = module(req, exports, mod);\n            exports = returnValue || mod.exports;\n            define.modules[moduleName] = exports;\n            delete define.payloads[moduleName];\n        }\n        module = define.modules[moduleName] = exports || module;\n    }\n    return module;\n};\n\nfunction exportAce(ns) {\n    var root = global;\n    if (ns) {\n        if (!global[ns])\n            global[ns] = {};\n        root = global[ns];\n    }\n\n    if (!root.define || !root.define.packaged) {\n        define.original = root.define;\n        root.define = define;\n        root.define.packaged = true;\n    }\n\n    if (!root.require || !root.require.packaged) {\n        require.original = root.require;\n        root.require = require;\n        root.require.packaged = true;\n    }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n    Object.defineProperty(obj, name, {\n        value: val,\n        enumerable: false,\n        writable: true,\n        configurable: true\n    });\n}\nif (!String.prototype.startsWith) {\n    defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n        position = position || 0;\n        return this.lastIndexOf(searchString, position) === position;\n    });\n}\nif (!String.prototype.endsWith) {\n    defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n        var subjectString = this;\n        if (position === undefined || position > subjectString.length) {\n            position = subjectString.length;\n        }\n        position -= searchString.length;\n        var lastIndex = subjectString.indexOf(searchString, position);\n        return lastIndex !== -1 && lastIndex === position;\n    });\n}\nif (!String.prototype.repeat) {\n    defineProp(String.prototype, \"repeat\", function (count) {\n        var result = \"\";\n        var string = this;\n        while (count > 0) {\n            if (count & 1)\n                result += string;\n            if ((count >>= 1))\n                string += string;\n        }\n        return result;\n    });\n}\nif (!String.prototype.includes) {\n    defineProp(String.prototype, \"includes\", function (str, position) {\n        return this.indexOf(str, position) != -1;\n    });\n}\nif (!Object.assign) {\n    Object.assign = function (target) {\n        if (target === undefined || target === null) {\n            throw new TypeError(\"Cannot convert undefined or null to object\");\n        }\n        var output = Object(target);\n        for (var index = 1; index < arguments.length; index++) {\n            var source = arguments[index];\n            if (source !== undefined && source !== null) {\n                Object.keys(source).forEach(function (key) {\n                    output[key] = source[key];\n                });\n            }\n        }\n        return output;\n    };\n}\nif (!Object.values) {\n    Object.values = function (o) {\n        return Object.keys(o).map(function (k) {\n            return o[k];\n        });\n    };\n}\nif (!Array.prototype.find) {\n    defineProp(Array.prototype, \"find\", function (predicate) {\n        var len = this.length;\n        var thisArg = arguments[1];\n        for (var k = 0; k < len; k++) {\n            var kValue = this[k];\n            if (predicate.call(thisArg, kValue, k, this)) {\n                return kValue;\n            }\n        }\n    });\n}\nif (!Array.prototype.findIndex) {\n    defineProp(Array.prototype, \"findIndex\", function (predicate) {\n        var len = this.length;\n        var thisArg = arguments[1];\n        for (var k = 0; k < len; k++) {\n            var kValue = this[k];\n            if (predicate.call(thisArg, kValue, k, this)) {\n                return k;\n            }\n        }\n    });\n}\nif (!Array.prototype.includes) {\n    defineProp(Array.prototype, \"includes\", function (item, position) {\n        return this.indexOf(item, position) != -1;\n    });\n}\nif (!Array.prototype.fill) {\n    defineProp(Array.prototype, \"fill\", function (value) {\n        var O = this;\n        var len = O.length >>> 0;\n        var start = arguments[1];\n        var relativeStart = start >> 0;\n        var k = relativeStart < 0\n            ? Math.max(len + relativeStart, 0)\n            : Math.min(relativeStart, len);\n        var end = arguments[2];\n        var relativeEnd = end === undefined ? len : end >> 0;\n        var final = relativeEnd < 0\n            ? Math.max(len + relativeEnd, 0)\n            : Math.min(relativeEnd, len);\n        while (k < final) {\n            O[k] = value;\n            k++;\n        }\n        return O;\n    });\n}\nif (!Array.of) {\n    defineProp(Array, \"of\", function () {\n        return Array.prototype.slice.call(arguments);\n    });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/deep_copy\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = require(\"./deep_copy\").deepCopy;\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\nexports.supportsLookbehind = function () {\n    try {\n        new RegExp('(?<=.)');\n    }\n    catch (e) {\n        return false;\n    }\n    return true;\n};\nexports.skipEmptyMatch = function (line, last, supportsUnicodeFlag) {\n    return supportsUnicodeFlag && line.codePointAt(last) > 0xffff ? 2 : 1;\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.OS = {\n    LINUX: \"LINUX\",\n    MAC: \"MAC\",\n    WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function () {\n    if (exports.isMac) {\n        return exports.OS.MAC;\n    }\n    else if (exports.isLinux) {\n        return exports.OS.LINUX;\n    }\n    else {\n        return exports.OS.WINDOWS;\n    }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE =\n    (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n        ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n        : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window[\"opera\"]) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isSafari = parseFloat(ua.split(\" Safari/\")[1]) && !exports.isChrome || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window[\"MSStream\"];\nif (exports.isIOS)\n    exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n    if (typeof arr == \"string\" && arr) {\n        var txt = document.createTextNode(arr);\n        if (parent)\n            parent.appendChild(txt);\n        return txt;\n    }\n    if (!Array.isArray(arr)) {\n        if (arr && arr.appendChild && parent)\n            parent.appendChild(arr);\n        return arr;\n    }\n    if (typeof arr[0] != \"string\" || !arr[0]) {\n        var els = [];\n        for (var i = 0; i < arr.length; i++) {\n            var ch = buildDom(arr[i], parent, refs);\n            ch && els.push(ch);\n        }\n        return els;\n    }\n    var el = document.createElement(arr[0]);\n    var options = arr[1];\n    var childIndex = 1;\n    if (options && typeof options == \"object\" && !Array.isArray(options))\n        childIndex = 2;\n    for (var i = childIndex; i < arr.length; i++)\n        buildDom(arr[i], el, refs);\n    if (childIndex == 2) {\n        Object.keys(options).forEach(function (n) {\n            var val = options[n];\n            if (n === \"class\") {\n                el.className = Array.isArray(val) ? val.join(\" \") : val;\n            }\n            else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n                el[n] = val;\n            }\n            else if (n === \"ref\") {\n                if (refs)\n                    refs[val] = el;\n            }\n            else if (n === \"style\") {\n                if (typeof val == \"string\")\n                    el.style.cssText = val;\n            }\n            else if (val != null) {\n                el.setAttribute(n, val);\n            }\n        });\n    }\n    if (parent)\n        parent.appendChild(el);\n    return el;\n};\nexports.getDocumentHead = function (doc) {\n    if (!doc)\n        doc = document;\n    return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n    return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n    element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n    var classes = (el.className + \"\").split(/\\s+/g);\n    return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n    if (!exports.hasCssClass(el, name)) {\n        el.className += \" \" + name;\n    }\n};\nexports.removeCssClass = function (el, name) {\n    var classes = el.className.split(/\\s+/g);\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        classes.splice(index, 1);\n    }\n    el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n    var classes = el.className.split(/\\s+/g), add = true;\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        add = false;\n        classes.splice(index, 1);\n    }\n    if (add)\n        classes.push(name);\n    el.className = classes.join(\" \");\n    return add;\n};\nexports.setCssClass = function (node, className, include) {\n    if (include) {\n        exports.addCssClass(node, className);\n    }\n    else {\n        exports.removeCssClass(node, className);\n    }\n};\nexports.hasCssString = function (id, doc) {\n    var index = 0, sheets;\n    doc = doc || document;\n    if ((sheets = doc.querySelectorAll(\"style\"))) {\n        while (index < sheets.length) {\n            if (sheets[index++].id === id) {\n                return true;\n            }\n        }\n    }\n};\nexports.removeElementById = function (id, doc) {\n    doc = doc || document;\n    if (doc.getElementById(id)) {\n        doc.getElementById(id).remove();\n    }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n    strictCSP = value;\n    if (value == false)\n        insertPendingStyles();\n    else if (!cssCache)\n        cssCache = [];\n};\nfunction insertPendingStyles() {\n    var cache = cssCache;\n    cssCache = null;\n    cache && cache.forEach(function (item) {\n        importCssString(item[0], item[1]);\n    });\n}\nfunction importCssString(cssText, id, target) {\n    if (typeof document == \"undefined\")\n        return;\n    if (cssCache) {\n        if (target) {\n            insertPendingStyles();\n        }\n        else if (target === false) {\n            return cssCache.push([cssText, id]);\n        }\n    }\n    if (strictCSP)\n        return;\n    var container = target;\n    if (!target || !target.getRootNode) {\n        container = document;\n    }\n    else {\n        container = target.getRootNode();\n        if (!container || container == target)\n            container = document;\n    }\n    var doc = container.ownerDocument || container;\n    if (id && exports.hasCssString(id, container))\n        return null;\n    if (id)\n        cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n    var style = exports.createElement(\"style\");\n    style.appendChild(doc.createTextNode(cssText));\n    if (id)\n        style.id = id;\n    if (container == doc)\n        container = exports.getDocumentHead(doc);\n    container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n    exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.$fixPositionBug = function (el) {\n    var rect = el.getBoundingClientRect();\n    if (el.style.left) {\n        var target = parseFloat(el.style.left);\n        var result = +rect.left;\n        if (Math.abs(target - result) > 1) {\n            el.style.left = 2 * target - result + \"px\";\n        }\n    }\n    if (el.style.right) {\n        var target = parseFloat(el.style.right);\n        var result = window.innerWidth - rect.right;\n        if (Math.abs(target - result) > 1) {\n            el.style.right = 2 * target - result + \"px\";\n        }\n    }\n    if (el.style.top) {\n        var target = parseFloat(el.style.top);\n        var result = +rect.top;\n        if (Math.abs(target - result) > 1) {\n            el.style.top = 2 * target - result + \"px\";\n        }\n    }\n    if (el.style.bottom) {\n        var target = parseFloat(el.style.bottom);\n        var result = window.innerHeight - rect.bottom;\n        if (Math.abs(target - result) > 1) {\n            el.style.bottom = 2 * target - result + \"px\";\n        }\n    }\n};\nexports.scrollbarWidth = function (doc) {\n    var inner = exports.createElement(\"ace_inner\");\n    inner.style.width = \"100%\";\n    inner.style.minWidth = \"0px\";\n    inner.style.height = \"200px\";\n    inner.style.display = \"block\";\n    var outer = exports.createElement(\"ace_outer\");\n    var style = outer.style;\n    style.position = \"absolute\";\n    style.left = \"-10000px\";\n    style.overflow = \"hidden\";\n    style.width = \"200px\";\n    style.minWidth = \"0px\";\n    style.height = \"150px\";\n    style.display = \"block\";\n    outer.appendChild(inner);\n    var body = (doc && doc.documentElement) || (document && document.documentElement);\n    if (!body)\n        return 0;\n    body.appendChild(outer);\n    var noScrollbar = inner.offsetWidth;\n    style.overflow = \"scroll\";\n    var withScrollbar = inner.offsetWidth;\n    if (noScrollbar === withScrollbar) {\n        withScrollbar = outer.clientWidth;\n    }\n    body.removeChild(outer);\n    return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n    return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n    if (styles[property] !== value) {\n        styles[property] = value;\n    }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n    ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n    : true;\nif (useragent.isChromeOS)\n    exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n    var div = document.createElement(\"div\");\n    if (exports.HI_DPI && div.style.transform !== undefined)\n        exports.HAS_CSS_TRANSFORMS = true;\n    if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n        exports.HAS_CSS_ANIMATION = true;\n    div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n    exports.translate = function (element, tx, ty) {\n        element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n    };\n}\nelse {\n    exports.translate = function (element, tx, ty) {\n        element.style.top = Math.round(ty) + \"px\";\n        element.style.left = Math.round(tx) + \"px\";\n    };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n            callback(xhr.responseText);\n        }\n    };\n    xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n    var head = dom.getDocumentHead();\n    var s = document.createElement('script');\n    s.src = path;\n    head.appendChild(s);\n    s.onload = s.onreadystatechange = function (_, isAbort) {\n        if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n            s = s.onload = s.onreadystatechange = null;\n            if (!isAbort)\n                callback();\n        }\n    };\n};\nexports.qualifyURL = function (url) {\n    var a = document.createElement('a');\n    a.href = url;\n    return a.href;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/report_error\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.reportError = function reportError(msg, data) {\n    var e = new Error(msg);\n    e[\"data\"] = data;\n    if (typeof console == \"object\" && console.error)\n        console.error(e);\n    setTimeout(function () { throw e; });\n};\n\n});\n\nace.define(\"ace/lib/default_english_messages\",[\"require\",\"exports\",\"module\"], function(require, exports, module){var defaultEnglishMessages = {\n    \"autocomplete.popup.aria-roledescription\": \"Autocomplete suggestions\",\n    \"autocomplete.popup.aria-label\": \"Autocomplete suggestions\",\n    \"autocomplete.popup.item.aria-roledescription\": \"item\",\n    \"autocomplete.loading\": \"Loading...\",\n    \"editor.scroller.aria-roledescription\": \"editor\",\n    \"editor.scroller.aria-label\": \"Editor content, press Enter to start editing, press Escape to exit\",\n    \"editor.gutter.aria-roledescription\": \"editor gutter\",\n    \"editor.gutter.aria-label\": \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\",\n    \"error-marker.good-state\": \"Looks good!\",\n    \"prompt.recently-used\": \"Recently used\",\n    \"prompt.other-commands\": \"Other commands\",\n    \"prompt.no-matching-commands\": \"No matching commands\",\n    \"search-box.find.placeholder\": \"Search for\",\n    \"search-box.find-all.text\": \"All\",\n    \"search-box.replace.placeholder\": \"Replace with\",\n    \"search-box.replace-next.text\": \"Replace\",\n    \"search-box.replace-all.text\": \"All\",\n    \"search-box.toggle-replace.title\": \"Toggle Replace mode\",\n    \"search-box.toggle-regexp.title\": \"RegExp Search\",\n    \"search-box.toggle-case.title\": \"CaseSensitive Search\",\n    \"search-box.toggle-whole-word.title\": \"Whole Word Search\",\n    \"search-box.toggle-in-selection.title\": \"Search In Selection\",\n    \"search-box.search-counter\": \"$0 of $1\",\n    \"text-input.aria-roledescription\": \"editor\",\n    \"text-input.aria-label\": \"Cursor at row $0\",\n    \"gutter.code-folding.range.aria-label\": \"Toggle code folding, rows $0 through $1\",\n    \"gutter.code-folding.closed.aria-label\": \"Toggle code folding, rows $0 through $1\",\n    \"gutter.code-folding.open.aria-label\": \"Toggle code folding, row $0\",\n    \"gutter.code-folding.closed.title\": \"Unfold code\",\n    \"gutter.code-folding.open.title\": \"Fold code\",\n    \"gutter.annotation.aria-label.error\": \"Error, read annotations row $0\",\n    \"gutter.annotation.aria-label.warning\": \"Warning, read annotations row $0\",\n    \"gutter.annotation.aria-label.info\": \"Info, read annotations row $0\",\n    \"inline-fold.closed.title\": \"Unfold code\",\n    \"gutter-tooltip.aria-label.error.singular\": \"error\",\n    \"gutter-tooltip.aria-label.error.plural\": \"errors\",\n    \"gutter-tooltip.aria-label.warning.singular\": \"warning\",\n    \"gutter-tooltip.aria-label.warning.plural\": \"warnings\",\n    \"gutter-tooltip.aria-label.info.singular\": \"information message\",\n    \"gutter-tooltip.aria-label.info.plural\": \"information messages\",\n    \"gutter.annotation.aria-label.security\": \"Security finding, read annotations row $0\",\n    \"gutter.annotation.aria-label.hint\": \"Suggestion, read annotations row $0\",\n    \"gutter-tooltip.aria-label.security.singular\": \"security finding\",\n    \"gutter-tooltip.aria-label.security.plural\": \"security findings\",\n    \"gutter-tooltip.aria-label.hint.singular\": \"suggestion\",\n    \"gutter-tooltip.aria-label.hint.plural\": \"suggestions\",\n    \"editor.tooltip.disable-editing\": \"Editing is disabled\"\n};\nexports.defaultEnglishMessages = defaultEnglishMessages;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\",\"ace/lib/default_english_messages\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\nvar defaultEnglishMessages = require(\"./default_english_messages\").defaultEnglishMessages;\nvar optionsProvider = {\n    setOptions: function (optList) {\n        Object.keys(optList).forEach(function (key) {\n            this.setOption(key, optList[key]);\n        }, this);\n    },\n    getOptions: function (optionNames) {\n        var result = {};\n        if (!optionNames) {\n            var options = this.$options;\n            optionNames = Object.keys(options).filter(function (key) {\n                return !options[key].hidden;\n            });\n        }\n        else if (!Array.isArray(optionNames)) {\n            optionNames = Object.keys(optionNames);\n        }\n        optionNames.forEach(function (key) {\n            result[key] = this.getOption(key);\n        }, this);\n        return result;\n    },\n    setOption: function (name, value) {\n        if (this[\"$\" + name] === value)\n            return;\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n        if (!opt.handlesSet)\n            this[\"$\" + name] = value;\n        if (opt && opt.set)\n            opt.set.call(this, value);\n    },\n    getOption: function (name) {\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n        return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n    }\n};\nfunction warn(message) {\n    if (typeof console != \"undefined\" && console.warn)\n        console.warn.apply(console, arguments);\n}\nvar messages;\nvar nlsPlaceholders;\nvar AppConfig = /** @class */ (function () {\n    function AppConfig() {\n        this.$defaultOptions = {};\n        messages = defaultEnglishMessages;\n        nlsPlaceholders = \"dollarSigns\";\n    }\n    AppConfig.prototype.defineOptions = function (obj, path, options) {\n        if (!obj.$options)\n            this.$defaultOptions[path] = obj.$options = {};\n        Object.keys(options).forEach(function (key) {\n            var opt = options[key];\n            if (typeof opt == \"string\")\n                opt = { forwardTo: opt };\n            opt.name || (opt.name = key);\n            obj.$options[opt.name] = opt;\n            if (\"initialValue\" in opt)\n                obj[\"$\" + opt.name] = opt.initialValue;\n        });\n        oop.implement(obj, optionsProvider);\n        return this;\n    };\n    AppConfig.prototype.resetOptions = function (obj) {\n        Object.keys(obj.$options).forEach(function (key) {\n            var opt = obj.$options[key];\n            if (\"value\" in opt)\n                obj.setOption(key, opt.value);\n        });\n    };\n    AppConfig.prototype.setDefaultValue = function (path, name, value) {\n        if (!path) {\n            for (path in this.$defaultOptions)\n                if (this.$defaultOptions[path][name])\n                    break;\n            if (!this.$defaultOptions[path][name])\n                return false;\n        }\n        var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n        if (opts[name]) {\n            if (opts.forwardTo)\n                this.setDefaultValue(opts.forwardTo, name, value);\n            else\n                opts[name].value = value;\n        }\n    };\n    AppConfig.prototype.setDefaultValues = function (path, optionHash) {\n        Object.keys(optionHash).forEach(function (key) {\n            this.setDefaultValue(path, key, optionHash[key]);\n        }, this);\n    };\n    AppConfig.prototype.setMessages = function (value, options) {\n        messages = value;\n        if (options && options.placeholders) {\n            nlsPlaceholders = options.placeholders;\n        }\n    };\n    AppConfig.prototype.nls = function (key, defaultString, params) {\n        if (!messages[key]) {\n            warn(\"No message found for the key '\" + key + \"' in messages with id \" + messages.$id + \", trying to find a translation for the default string '\" + defaultString + \"'.\");\n            if (!messages[defaultString]) {\n                warn(\"No message found for the default string '\" + defaultString + \"' in the provided messages. Falling back to the default English message.\");\n            }\n        }\n        var translated = messages[key] || messages[defaultString] || defaultString;\n        if (params) {\n            if (nlsPlaceholders === \"dollarSigns\") {\n                translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, dollarMatch) {\n                    if (dollarMatch == \"$\")\n                        return \"$\";\n                    return params[dollarMatch];\n                });\n            }\n            if (nlsPlaceholders === \"curlyBrackets\") {\n                translated = translated.replace(/\\{([^\\}]+)\\}/g, function (_, curlyBracketMatch) {\n                    return params[curlyBracketMatch];\n                });\n            }\n        }\n        return translated;\n    };\n    return AppConfig;\n}());\nAppConfig.prototype.warn = warn;\nAppConfig.prototype.reportError = reportError;\noop.implement(AppConfig.prototype, EventEmitter);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n  background: #f0f0f0;\\n  color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n    background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n  background-color: #FFFFFF;\\n  color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n  color: black;\\n}\\n        \\n.ace-tm .ace_invisible {\\n  color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n  color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n  color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n  color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n  color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n  background-color: rgba(255, 0, 0, 0.1);\\n  color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n  color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n  color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n  color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n  color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n  color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n  color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n  color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n  color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n  color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n  color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n  color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n  color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n  color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n  color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n  color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n  background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n  background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n  background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n  background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n    background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n  background: rgb(250, 250, 255);\\n  border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n    packaged: false,\n    workerPath: null,\n    modePath: null,\n    themePath: null,\n    basePath: \"\",\n    suffix: \".js\",\n    $moduleUrls: {},\n    loadWorkerFromBlob: true,\n    sharedPopups: false,\n    useStrictCSP: null\n};\nexports.get = function (key) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n    return options[key];\n};\nexports.set = function (key, value) {\n    if (options.hasOwnProperty(key))\n        options[key] = value;\n    else if (this.setDefaultValue(\"\", key, value) == false)\n        throw new Error(\"Unknown config key: \" + key);\n    if (key == \"useStrictCSP\")\n        dom.useStrictCSP(value);\n};\nexports.all = function () {\n    return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n    if (options.$moduleUrls[name])\n        return options.$moduleUrls[name];\n    var parts = name.split(\"/\");\n    component = component || parts[parts.length - 2] || \"\";\n    var sep = component == \"snippets\" ? \"/\" : \"-\";\n    var base = parts[parts.length - 1];\n    if (component == \"worker\" && sep == \"-\") {\n        var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n        base = base.replace(re, \"\");\n    }\n    if ((!base || base == component) && parts.length > 1)\n        base = parts[parts.length - 2];\n    var path = options[component + \"Path\"];\n    if (path == null) {\n        path = options.basePath;\n    }\n    else if (sep == \"/\") {\n        component = sep = \"\";\n    }\n    if (path && path.slice(-1) != \"/\")\n        path += \"/\";\n    return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n    return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n    if (moduleName === \"ace/theme/textmate\" || moduleName === \"./theme/textmate\")\n        return cb(null, require(\"./theme/textmate\"));\n    if (customLoader)\n        return customLoader(moduleName, cb);\n    console.error(\"loader is not configured\");\n};\nvar customLoader;\nexports.setLoader = function (cb) {\n    customLoader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.$loaded = {};\nexports.loadModule = function (moduleId, onLoad) {\n    var loadedModule;\n    if (Array.isArray(moduleId)) {\n        var moduleType = moduleId[0];\n        var moduleName = moduleId[1];\n    }\n    else if (typeof moduleId == \"string\") {\n        var moduleName = moduleId;\n    }\n    var load = function (module) {\n        if (module && !exports.$loading[moduleName])\n            return onLoad && onLoad(module);\n        if (!exports.$loading[moduleName])\n            exports.$loading[moduleName] = [];\n        exports.$loading[moduleName].push(onLoad);\n        if (exports.$loading[moduleName].length > 1)\n            return;\n        var afterLoad = function () {\n            loader(moduleName, function (err, module) {\n                if (module)\n                    exports.$loaded[moduleName] = module;\n                exports._emit(\"load.module\", { name: moduleName, module: module });\n                var listeners = exports.$loading[moduleName];\n                exports.$loading[moduleName] = null;\n                listeners.forEach(function (onLoad) {\n                    onLoad && onLoad(module);\n                });\n            });\n        };\n        if (!exports.get(\"packaged\"))\n            return afterLoad();\n        net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n        reportErrorIfPathIsNotConfigured();\n    };\n    if (exports.dynamicModules[moduleName]) {\n        exports.dynamicModules[moduleName]().then(function (module) {\n            if (module.default) {\n                load(module.default);\n            }\n            else {\n                load(module);\n            }\n        });\n    }\n    else {\n        try {\n            loadedModule = this.$require(moduleName);\n        }\n        catch (e) { }\n        load(loadedModule || exports.$loaded[moduleName]);\n    }\n};\nexports.$require = function (moduleName) {\n    if (typeof module[\"require\"] == \"function\") {\n        var req = \"require\";\n        return module[req](moduleName);\n    }\n};\nexports.setModuleLoader = function (moduleName, onLoad) {\n    exports.dynamicModules[moduleName] = onLoad;\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n    if (!options.basePath && !options.workerPath\n        && !options.modePath && !options.themePath\n        && !Object.keys(options.$moduleUrls).length) {\n        console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n        reportErrorIfPathIsNotConfigured = function () { };\n    }\n};\nexports.version = \"1.43.6\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n    require([moduleName], function(module) {\n        cb(null, module);\n    });\n});\n\nvar global = (function() {\n    return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n    config.init = init;\n    config.$require = require;\n    ace.require = require;\n\n    if (true)\n        ace.define = __webpack_require__.amdD;\n};\ninit(true);function init(packaged) {\n\n    if (!global || !global.document)\n        return;\n    \n    config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && __webpack_require__.amdD.packaged));\n\n    var scriptOptions = {};\n    var scriptUrl = \"\";\n    var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n    var currentDocument = currentScript && currentScript.ownerDocument || document;\n    \n    if (currentScript && currentScript.src) {\n        scriptUrl = currentScript.src.split(/[?#]/)[0].split(\"/\").slice(0, -1).join(\"/\") || \"\";\n    }\n    \n    var scripts = currentDocument.getElementsByTagName(\"script\");\n    for (var i=0; i<scripts.length; i++) {\n        var script = scripts[i];\n\n        var src = script.src || script.getAttribute(\"src\");\n        if (!src)\n            continue;\n\n        var attributes = script.attributes;\n        for (var j=0, l=attributes.length; j < l; j++) {\n            var attr = attributes[j];\n            if (attr.name.indexOf(\"data-ace-\") === 0) {\n                scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n            }\n        }\n\n        var m = src.match(/^(.*)\\/ace([\\-.]\\w+)?\\.js(\\?|$)/);\n        if (m)\n            scriptUrl = m[1];\n    }\n\n    if (scriptUrl) {\n        scriptOptions.base = scriptOptions.base || scriptUrl;\n        scriptOptions.packaged = true;\n    }\n\n    scriptOptions.basePath = scriptOptions.base;\n    scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n    scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n    scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n    delete scriptOptions.base;\n\n    for (var key in scriptOptions)\n        if (typeof scriptOptions[key] !== \"undefined\")\n            config.set(key, scriptOptions[key]);\n}\n\nfunction deHyphenate(str) {\n    return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Range = /** @class */ (function () {\n    function Range(startRow, startColumn, endRow, endColumn) {\n        this.start = {\n            row: startRow,\n            column: startColumn\n        };\n        this.end = {\n            row: endRow,\n            column: endColumn\n        };\n    }\n    Range.prototype.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    Range.prototype.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    Range.prototype.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    Range.prototype.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    Range.prototype.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    Range.prototype.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    Range.prototype.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    Range.prototype.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    Range.prototype.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    Range.prototype.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    Range.prototype.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    Range.prototype.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    Range.prototype.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    Range.prototype.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    Range.prototype.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    Range.prototype.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    Range.prototype.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    Range.prototype.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    Range.prototype.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    Range.prototype.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    Range.prototype.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    Range.prototype.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    Range.prototype.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    Range.prototype.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    Range.prototype.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    Range.prototype.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n    return Range;\n}());\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = {\n    MODIFIER_KEYS: {\n        16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n        91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n    },\n    KEY_MODS: {\n        \"ctrl\": 1, \"alt\": 2, \"option\": 2, \"shift\": 4,\n        \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8,\n        \"control\": 1\n    },\n    FUNCTION_KEYS: {\n        8: \"Backspace\",\n        9: \"Tab\",\n        13: \"Return\",\n        19: \"Pause\",\n        27: \"Esc\",\n        32: \"Space\",\n        33: \"PageUp\",\n        34: \"PageDown\",\n        35: \"End\",\n        36: \"Home\",\n        37: \"Left\",\n        38: \"Up\",\n        39: \"Right\",\n        40: \"Down\",\n        44: \"Print\",\n        45: \"Insert\",\n        46: \"Delete\",\n        '-13': \"NumpadEnter\",\n        144: \"Numlock\",\n        145: \"Scrolllock\"\n    },\n    PRINTABLE_KEYS: {\n        32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.',\n        186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n        219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n    }\n};\nvar codeToKeyCode = {\n    Command: 224,\n    Backspace: 8,\n    Tab: 9,\n    Return: 13,\n    Enter: 13,\n    Pause: 19,\n    Escape: 27,\n    PageUp: 33,\n    PageDown: 34,\n    End: 35,\n    Home: 36,\n    Insert: 45,\n    Delete: 46,\n    ArrowLeft: 37,\n    ArrowUp: 38,\n    ArrowRight: 39,\n    ArrowDown: 40,\n    Backquote: 192,\n    Minus: 189,\n    Equal: 187,\n    BracketLeft: 219,\n    Backslash: 220,\n    BracketRight: 221,\n    Semicolon: 186,\n    Quote: 222,\n    Comma: 188,\n    Period: 190,\n    Slash: 191,\n    Space: 32,\n    NumpadAdd: 107,\n    NumpadDecimal: 110,\n    NumpadSubtract: 109,\n    NumpadDivide: 111,\n    NumpadMultiply: 106\n};\nfor (var i = 0; i < 10; i++) {\n    codeToKeyCode[\"Digit\" + i] = 48 + i;\n    codeToKeyCode[\"Numpad\" + i] = 96 + i;\n    Keys.PRINTABLE_KEYS[48 + i] = \"\" + i;\n    Keys.FUNCTION_KEYS[96 + i] = \"Numpad\" + i;\n}\nfor (var i = 65; i < 91; i++) {\n    var chr = String.fromCharCode(i + 32);\n    codeToKeyCode[\"Key\" + chr.toUpperCase()] = i;\n    Keys.PRINTABLE_KEYS[i] = chr;\n}\nfor (var i = 1; i < 13; i++) {\n    codeToKeyCode[\"F\" + i] = 111 + i;\n    Keys.FUNCTION_KEYS[111 + i] = \"F\" + i;\n}\nvar modifiers = {\n    Shift: 16,\n    Control: 17,\n    Alt: 18,\n    Meta: 224\n};\nfor (var mod in modifiers) {\n    codeToKeyCode[mod] = codeToKeyCode[mod + \"Left\"]\n        = codeToKeyCode[mod + \"Right\"] = modifiers[mod];\n}\nexports.$codeToKeyCode = codeToKeyCode;\nKeys.PRINTABLE_KEYS[173] = '-';\nfor (var j in Keys.FUNCTION_KEYS) {\n    var name = Keys.FUNCTION_KEYS[j].toLowerCase();\n    Keys[name] = parseInt(j, 10);\n}\nfor (var j in Keys.PRINTABLE_KEYS) {\n    var name = Keys.PRINTABLE_KEYS[j].toLowerCase();\n    Keys[name] = parseInt(j, 10);\n}\noop.mixin(Keys, Keys.MODIFIER_KEYS);\noop.mixin(Keys, Keys.PRINTABLE_KEYS);\noop.mixin(Keys, Keys.FUNCTION_KEYS);\nKeys.enter = Keys[\"return\"];\nKeys.escape = Keys.esc;\nKeys.del = Keys[\"delete\"];\n(function () {\n    var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n    for (var i = Math.pow(2, mods.length); i--;) {\n        Keys.KEY_MODS[i] = mods.filter(function (x) {\n            return i & Keys.KEY_MODS[x];\n        }).join(\"-\") + \"-\";\n    }\n})();\nKeys.KEY_MODS[0] = \"\";\nKeys.KEY_MODS[-1] = \"input-\";\noop.mixin(exports, Keys);\nexports.default = exports;\nexports.keyCodeToString = function (keyCode) {\n    var keyString = Keys[keyCode];\n    if (typeof keyString != \"string\")\n        keyString = String.fromCharCode(keyCode);\n    return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\"; var keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\nvar pressedKeys = null;\nvar ts = 0;\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n    activeListenerOptions = false;\n    try {\n        document.createComment(\"\").addEventListener(\"test\", function () { }, {\n            get passive() {\n                activeListenerOptions = { passive: false };\n                return true;\n            }\n        });\n    }\n    catch (e) { }\n}\nfunction getListenerOptions() {\n    if (activeListenerOptions == undefined)\n        detectListenerOptionsSupport();\n    return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n    this.elem = elem;\n    this.type = type;\n    this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n    removeListener(this.elem, this.type, this.callback);\n    this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, destroyer) {\n    elem.addEventListener(type, callback, getListenerOptions());\n    if (destroyer)\n        destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n    elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n    exports.stopPropagation(e);\n    exports.preventDefault(e);\n    return false;\n};\nexports.stopPropagation = function (e) {\n    if (e.stopPropagation)\n        e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n    if (e.preventDefault)\n        e.preventDefault();\n};\nexports.getButton = function (e) {\n    if (e.type == \"dblclick\")\n        return 0;\n    if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n        return 2;\n    return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n    var ownerDocument = el && el.ownerDocument || document;\n    function onMouseUp(e) {\n        eventHandler && eventHandler(e);\n        releaseCaptureHandler && releaseCaptureHandler(e);\n        removeListener(ownerDocument, \"mousemove\", eventHandler);\n        removeListener(ownerDocument, \"mouseup\", onMouseUp);\n        removeListener(ownerDocument, \"dragstart\", onMouseUp);\n    }\n    addListener(ownerDocument, \"mousemove\", eventHandler);\n    addListener(ownerDocument, \"mouseup\", onMouseUp);\n    addListener(ownerDocument, \"dragstart\", onMouseUp);\n    return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n    addListener(el, \"wheel\", function (e) {\n        var factor = 0.15;\n        var deltaX = e.deltaX || 0;\n        var deltaY = e.deltaY || 0;\n        switch (e.deltaMode) {\n            case e.DOM_DELTA_PIXEL:\n                e.wheelX = deltaX * factor;\n                e.wheelY = deltaY * factor;\n                break;\n            case e.DOM_DELTA_LINE:\n                var linePixels = 15;\n                e.wheelX = deltaX * linePixels;\n                e.wheelY = deltaY * linePixels;\n                break;\n            case e.DOM_DELTA_PAGE:\n                var pagePixels = 150;\n                e.wheelX = deltaX * pagePixels;\n                e.wheelY = deltaY * pagePixels;\n                break;\n        }\n        callback(e);\n    }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n    var clicks = 0;\n    var startX, startY, timer;\n    var eventNames = {\n        2: \"dblclick\",\n        3: \"tripleclick\",\n        4: \"quadclick\"\n    };\n    function onMousedown(e) {\n        if (exports.getButton(e) !== 0) {\n            clicks = 0;\n        }\n        else if (e.detail > 1) {\n            clicks++;\n            if (clicks > 4)\n                clicks = 1;\n        }\n        else {\n            clicks = 1;\n        }\n        if (useragent.isIE) {\n            var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n            if (!timer || isNewClick)\n                clicks = 1;\n            if (timer)\n                clearTimeout(timer);\n            timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n            if (clicks == 1) {\n                startX = e.clientX;\n                startY = e.clientY;\n            }\n        }\n        e._clicks = clicks;\n        eventHandler[callbackName](\"mousedown\", e);\n        if (clicks > 4)\n            clicks = 0;\n        else if (clicks > 1)\n            return eventHandler[callbackName](eventNames[clicks], e);\n    }\n    if (!Array.isArray(elements))\n        elements = [elements];\n    elements.forEach(function (el) {\n        addListener(el, \"mousedown\", onMousedown, destroyer);\n    });\n};\nfunction getModifierHash(e) {\n    return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n}\nexports.getModifierString = function (e) {\n    return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n    var hashId = getModifierHash(e);\n    if (!keyCode && e.code) {\n        keyCode = keys.$codeToKeyCode[e.code] || keyCode;\n    }\n    if (!useragent.isMac && pressedKeys) {\n        if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n            hashId |= 8;\n        if (pressedKeys.altGr) {\n            if ((3 & hashId) != 3)\n                pressedKeys.altGr = 0;\n            else\n                return;\n        }\n        if (keyCode === 18 || keyCode === 17) {\n            var location = e.location;\n            if (keyCode === 17 && location === 1) {\n                if (pressedKeys[keyCode] == 1)\n                    ts = e.timeStamp;\n            }\n            else if (keyCode === 18 && hashId === 3 && location === 2) {\n                var dt = e.timeStamp - ts;\n                if (dt < 50)\n                    pressedKeys.altGr = true;\n            }\n        }\n    }\n    if (keyCode in keys.MODIFIER_KEYS) {\n        keyCode = -1;\n    }\n    if (!hashId && keyCode === 13) {\n        if (e.location === 3) {\n            callback(e, hashId, -keyCode);\n            if (e.defaultPrevented)\n                return;\n        }\n    }\n    if (useragent.isChromeOS && hashId & 8) {\n        callback(e, hashId, keyCode);\n        if (e.defaultPrevented)\n            return;\n        else\n            hashId &= ~8;\n    }\n    if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n        return false;\n    }\n    return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n    var lastDefaultPrevented = null;\n    addListener(el, \"keydown\", function (e) {\n        pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n        var result = normalizeCommandKeys(callback, e, e.keyCode);\n        lastDefaultPrevented = e.defaultPrevented;\n        return result;\n    }, destroyer);\n    addListener(el, \"keypress\", function (e) {\n        if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n            exports.stopEvent(e);\n            lastDefaultPrevented = null;\n        }\n    }, destroyer);\n    addListener(el, \"keyup\", function (e) {\n        pressedKeys[e.keyCode] = null;\n    }, destroyer);\n    if (!pressedKeys) {\n        resetPressedKeys();\n        addListener(window, \"focus\", resetPressedKeys);\n    }\n};\nfunction resetPressedKeys() {\n    pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n    var postMessageId = 1;\n    exports.nextTick = function (callback, win) {\n        win = win || window;\n        var messageName = \"zero-timeout-message-\" + (postMessageId++);\n        var listener = function (e) {\n            if (e.data == messageName) {\n                exports.stopPropagation(e);\n                removeListener(win, \"message\", listener);\n                callback();\n            }\n        };\n        addListener(win, \"message\", listener);\n        win.postMessage(messageName, \"*\");\n    };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n    return setTimeout(function handler() {\n        if (!exports.$idleBlocked) {\n            cb();\n        }\n        else {\n            setTimeout(handler, 100);\n        }\n    }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n    if (exports.$idleBlockId)\n        clearTimeout(exports.$idleBlockId);\n    exports.$idleBlocked = true;\n    exports.$idleBlockId = setTimeout(function () {\n        exports.$idleBlocked = false;\n    }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n    || window[\"mozRequestAnimationFrame\"]\n    || window[\"webkitRequestAnimationFrame\"]\n    || window[\"msRequestAnimationFrame\"]\n    || window[\"oRequestAnimationFrame\"]);\nif (exports.nextFrame)\n    exports.nextFrame = exports.nextFrame.bind(window);\nelse\n    exports.nextFrame = function (callback) {\n        setTimeout(callback, 17);\n    };\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n    lineMode: false,\n    pasteCancelled: function () {\n        if ($cancelT && $cancelT > Date.now() - 50)\n            return true;\n        return $cancelT = false;\n    },\n    cancel: function () {\n        $cancelT = Date.now();\n    }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/config\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar nls = require(\"../config\").nls;\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput = /** @class */ (function () {\n    function TextInput(parentNode, host) {\n        var _this = this;\n        this.host = host;\n        this.text = dom.createElement(\"textarea\");\n        this.text.className = \"ace_text-input\";\n        this.text.setAttribute(\"wrap\", \"off\");\n        this.text.setAttribute(\"autocomplete\", \"off\");\n        this.text.setAttribute(\"autocorrect\", \"off\");\n        this.text.setAttribute(\"autocapitalize\", \"off\");\n        this.text.setAttribute(\"spellcheck\", \"false\");\n        this.text.style.opacity = \"0\";\n        parentNode.insertBefore(this.text, parentNode.firstChild); this.copied = false;\n        this.pasted = false;\n        this.inComposition = false;\n        this.sendingText = false;\n        this.tempStyle = '';\n        if (!isMobile)\n            this.text.style.fontSize = \"1px\";\n        this.commandMode = false;\n        this.ignoreFocusEvents = false;\n        this.lastValue = \"\";\n        this.lastSelectionStart = 0;\n        this.lastSelectionEnd = 0;\n        this.lastRestoreEnd = 0;\n        this.rowStart = Number.MAX_SAFE_INTEGER;\n        this.rowEnd = Number.MIN_SAFE_INTEGER;\n        this.numberOfExtraLines = 0;\n        try {\n            this.$isFocused = document.activeElement === this.text;\n        }\n        catch (e) {\n        }\n        this.cancelComposition = this.cancelComposition.bind(this);\n        this.setAriaOptions({ role: \"textbox\" });\n        event.addListener(this.text, \"blur\", function (e) {\n            if (_this.ignoreFocusEvents)\n                return;\n            host.onBlur(e);\n            _this.$isFocused = false;\n        }, host);\n        event.addListener(this.text, \"focus\", function (e) {\n            if (_this.ignoreFocusEvents)\n                return;\n            _this.$isFocused = true;\n            if (useragent.isEdge) {\n                try {\n                    if (!document.hasFocus())\n                        return;\n                }\n                catch (e) {\n                }\n            }\n            host.onFocus(e);\n            if (useragent.isEdge)\n                setTimeout(_this.resetSelection.bind(_this));\n            else\n                _this.resetSelection();\n        }, host); this.$focusScroll = false;\n        host.on(\"beforeEndOperation\", function () {\n            var curOp = host.curOp;\n            var commandName = curOp && curOp.command && curOp.command.name;\n            if (commandName == \"insertstring\")\n                return;\n            var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n            if (_this.inComposition && isUserAction) {\n                _this.lastValue = _this.text.value = \"\";\n                _this.onCompositionEnd();\n            }\n            _this.resetSelection();\n        });\n        host.on(\"changeSelection\", this.setAriaLabel.bind(this));\n        this.resetSelection = isIOS ? this.$resetSelectionIOS : this.$resetSelection;\n        if (this.$isFocused)\n            host.onFocus();\n        this.inputHandler = null;\n        this.afterContextMenu = false;\n        event.addCommandKeyListener(this.text, function (e, hashId, keyCode) {\n            if (_this.inComposition)\n                return;\n            return host.onCommandKey(e, hashId, keyCode);\n        }, host);\n        event.addListener(this.text, \"select\", this.onSelect.bind(this), host);\n        event.addListener(this.text, \"input\", this.onInput.bind(this), host);\n        event.addListener(this.text, \"cut\", this.onCut.bind(this), host);\n        event.addListener(this.text, \"copy\", this.onCopy.bind(this), host);\n        event.addListener(this.text, \"paste\", this.onPaste.bind(this), host);\n        if (!('oncut' in this.text) || !('oncopy' in this.text) || !('onpaste' in this.text)) {\n            event.addListener(parentNode, \"keydown\", function (e) {\n                if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n                    return;\n                switch (e.keyCode) {\n                    case 67:\n                        _this.onCopy(e);\n                        break;\n                    case 86:\n                        _this.onPaste(e);\n                        break;\n                    case 88:\n                        _this.onCut(e);\n                        break;\n                }\n            }, host);\n        }\n        this.syncComposition = lang.delayedCall(this.onCompositionUpdate.bind(this), 50).schedule.bind(null, null); //TODO: check this\n        event.addListener(this.text, \"compositionstart\", this.onCompositionStart.bind(this), host);\n        event.addListener(this.text, \"compositionupdate\", this.onCompositionUpdate.bind(this), host);\n        event.addListener(this.text, \"keyup\", this.onKeyup.bind(this), host);\n        event.addListener(this.text, \"keydown\", this.syncComposition.bind(this), host);\n        event.addListener(this.text, \"compositionend\", this.onCompositionEnd.bind(this), host);\n        this.closeTimeout;\n        event.addListener(this.text, \"mouseup\", this.$onContextMenu.bind(this), host);\n        event.addListener(this.text, \"mousedown\", function (e) {\n            e.preventDefault();\n            _this.onContextMenuClose();\n        }, host);\n        event.addListener(host.renderer.scroller, \"contextmenu\", this.$onContextMenu.bind(this), host);\n        event.addListener(this.text, \"contextmenu\", this.$onContextMenu.bind(this), host);\n        if (isIOS)\n            this.addIosSelectionHandler(parentNode, host, this.text);\n    }\n    TextInput.prototype.addIosSelectionHandler = function (parentNode, host, text) {\n        var _this = this;\n        var typingResetTimeout = null;\n        var typing = false;\n        text.addEventListener(\"keydown\", function (e) {\n            if (typingResetTimeout)\n                clearTimeout(typingResetTimeout);\n            typing = true;\n        }, true);\n        text.addEventListener(\"keyup\", function (e) {\n            typingResetTimeout = setTimeout(function () {\n                typing = false;\n            }, 100);\n        }, true);\n        var detectArrowKeys = function (e) {\n            if (document.activeElement !== text)\n                return;\n            if (typing || _this.inComposition || host.$mouseHandler.isMousePressed)\n                return;\n            if (_this.copied) {\n                return;\n            }\n            var selectionStart = text.selectionStart;\n            var selectionEnd = text.selectionEnd;\n            var key = null;\n            var modifier = 0;\n            if (selectionStart == 0) {\n                key = KEYS.up;\n            }\n            else if (selectionStart == 1) {\n                key = KEYS.home;\n            }\n            else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd] == \"\\n\") {\n                key = KEYS.end;\n            }\n            else if (selectionStart < _this.lastSelectionStart && _this.lastValue[selectionStart - 1] == \" \") {\n                key = KEYS.left;\n                modifier = MODS.option;\n            }\n            else if (selectionStart < _this.lastSelectionStart || (selectionStart == _this.lastSelectionStart\n                && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n                key = KEYS.left;\n            }\n            else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n                key = KEYS.down;\n            }\n            else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd - 1] == \" \") {\n                key = KEYS.right;\n                modifier = MODS.option;\n            }\n            else if (selectionEnd > _this.lastSelectionEnd || (selectionEnd == _this.lastSelectionEnd\n                && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n                key = KEYS.right;\n            }\n            if (selectionStart !== selectionEnd)\n                modifier |= MODS.shift;\n            if (key) {\n                var result = host.onCommandKey({}, modifier, key);\n                if (!result && host.commands) {\n                    key = KEYS.keyCodeToString(key);\n                    var command = host.commands.findKeyCommand(modifier, key);\n                    if (command)\n                        host.execCommand(command);\n                }\n                _this.lastSelectionStart = selectionStart;\n                _this.lastSelectionEnd = selectionEnd;\n                _this.resetSelection(\"\");\n            }\n        };\n        document.addEventListener(\"selectionchange\", detectArrowKeys);\n        host.on(\"destroy\", function () {\n            document.removeEventListener(\"selectionchange\", detectArrowKeys);\n        });\n    };\n    TextInput.prototype.onContextMenuClose = function () {\n        var _this = this;\n        clearTimeout(this.closeTimeout);\n        this.closeTimeout = setTimeout(function () {\n            if (_this.tempStyle) {\n                _this.text.style.cssText = _this.tempStyle;\n                _this.tempStyle = '';\n            }\n            _this.host.renderer.$isMousePressed = false;\n            if (_this.host.renderer.$keepTextAreaAtCursor)\n                _this.host.renderer.$moveTextAreaToCursor();\n        }, 0);\n    };\n    TextInput.prototype.$onContextMenu = function (e) {\n        this.host.textInput.onContextMenu(e);\n        this.onContextMenuClose();\n    };\n    TextInput.prototype.onKeyup = function (e) {\n        if (e.keyCode == 27 && this.text.value.length < this.text.selectionStart) {\n            if (!this.inComposition)\n                this.lastValue = this.text.value;\n            this.lastSelectionStart = this.lastSelectionEnd = -1;\n            this.resetSelection();\n        }\n        this.syncComposition();\n    };\n    TextInput.prototype.cancelComposition = function () {\n        this.ignoreFocusEvents = true;\n        this.text.blur();\n        this.text.focus();\n        this.ignoreFocusEvents = false;\n    };\n    TextInput.prototype.onCompositionStart = function (e) {\n        if (this.inComposition || !this.host.onCompositionStart || this.host.$readOnly)\n            return;\n        this.inComposition = {};\n        if (this.commandMode)\n            return;\n        if (e.data)\n            this.inComposition.useTextareaForIME = false;\n        setTimeout(this.onCompositionUpdate.bind(this), 0);\n        this.host._signal(\"compositionStart\");\n        this.host.on(\"mousedown\", this.cancelComposition); //TODO:\n        var range = this.host.getSelectionRange();\n        range.end.row = range.start.row;\n        range.end.column = range.start.column;\n        this.inComposition.markerRange = range;\n        this.inComposition.selectionStart = this.lastSelectionStart;\n        this.host.onCompositionStart(this.inComposition);\n        if (this.inComposition.useTextareaForIME) {\n            this.lastValue = this.text.value = \"\";\n            this.lastSelectionStart = 0;\n            this.lastSelectionEnd = 0;\n        }\n        else {\n            if (this.text.msGetInputContext)\n                this.inComposition.context = this.text.msGetInputContext();\n            if (this.text.getInputContext)\n                this.inComposition.context = this.text.getInputContext();\n        }\n    };\n    TextInput.prototype.onCompositionUpdate = function () {\n        if (!this.inComposition || !this.host.onCompositionUpdate || this.host.$readOnly)\n            return;\n        if (this.commandMode)\n            return this.cancelComposition();\n        if (this.inComposition.useTextareaForIME) {\n            this.host.onCompositionUpdate(this.text.value);\n        }\n        else {\n            var data = this.text.value;\n            this.sendText(data);\n            if (this.inComposition.markerRange) {\n                if (this.inComposition.context) {\n                    this.inComposition.markerRange.start.column = this.inComposition.selectionStart = this.inComposition.context.compositionStartOffset;\n                }\n                this.inComposition.markerRange.end.column = this.inComposition.markerRange.start.column\n                    + this.lastSelectionEnd - this.inComposition.selectionStart + this.lastRestoreEnd;\n            }\n        }\n    };\n    TextInput.prototype.onCompositionEnd = function (e) {\n        if (!this.host.onCompositionEnd || this.host.$readOnly)\n            return;\n        this.inComposition = false;\n        this.host.onCompositionEnd();\n        this.host.off(\"mousedown\", this.cancelComposition);\n        if (e)\n            this.onInput();\n    };\n    TextInput.prototype.onCut = function (e) {\n        this.doCopy(e, true);\n    };\n    TextInput.prototype.onCopy = function (e) {\n        this.doCopy(e, false);\n    };\n    TextInput.prototype.onPaste = function (e) {\n        var data = this.handleClipboardData(e);\n        if (clipboard.pasteCancelled())\n            return;\n        if (typeof data == \"string\") {\n            if (data)\n                this.host.onPaste(data, e);\n            if (useragent.isIE)\n                setTimeout(this.resetSelection);\n            event.preventDefault(e);\n        }\n        else {\n            this.text.value = \"\";\n            this.pasted = true;\n        }\n    };\n    TextInput.prototype.doCopy = function (e, isCut) {\n        var _this = this;\n        var data = this.host.getCopyText();\n        if (!data)\n            return event.preventDefault(e);\n        if (this.handleClipboardData(e, data)) {\n            if (isIOS) {\n                this.resetSelection(data);\n                this.copied = data;\n                setTimeout(function () {\n                    _this.copied = false;\n                }, 10);\n            }\n            isCut ? this.host.onCut() : this.host.onCopy();\n            event.preventDefault(e);\n        }\n        else {\n            this.copied = true;\n            this.text.value = data;\n            this.text.select();\n            setTimeout(function () {\n                _this.copied = false;\n                _this.resetSelection();\n                isCut ? _this.host.onCut() : _this.host.onCopy();\n            });\n        }\n    };\n    TextInput.prototype.handleClipboardData = function (e, data, forceIEMime) {\n        var clipboardData = e.clipboardData || window[\"clipboardData\"];\n        if (!clipboardData || BROKEN_SETDATA)\n            return;\n        var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n        try {\n            if (data) {\n                return clipboardData.setData(mime, data) !== false;\n            }\n            else {\n                return clipboardData.getData(mime);\n            }\n        }\n        catch (e) {\n            if (!forceIEMime)\n                return this.handleClipboardData(e, data, true);\n        }\n    };\n    TextInput.prototype.onInput = function (e) {\n        if (this.inComposition)\n            return this.onCompositionUpdate();\n        if (e && e.inputType) {\n            if (e.inputType == \"historyUndo\")\n                return this.host.execCommand(\"undo\");\n            if (e.inputType == \"historyRedo\")\n                return this.host.execCommand(\"redo\");\n        }\n        var data = this.text.value;\n        var inserted = this.sendText(data, true);\n        if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted) || isMobile && this.lastSelectionStart\n            < 1 && this.lastSelectionStart == this.lastSelectionEnd) {\n            this.resetSelection();\n        }\n    };\n    TextInput.prototype.sendText = function (value, fromInput) {\n        if (this.afterContextMenu)\n            this.afterContextMenu = false;\n        if (this.pasted) {\n            this.resetSelection();\n            if (value)\n                this.host.onPaste(value);\n            this.pasted = false;\n            return \"\";\n        }\n        else {\n            var selectionStart = this.text.selectionStart;\n            var selectionEnd = this.text.selectionEnd;\n            var extendLeft = this.lastSelectionStart;\n            var extendRight = this.lastValue.length - this.lastSelectionEnd;\n            var inserted = value;\n            var restoreStart = value.length - selectionStart;\n            var restoreEnd = value.length - selectionEnd;\n            var i = 0;\n            while (extendLeft > 0 && this.lastValue[i] == value[i]) {\n                i++;\n                extendLeft--;\n            }\n            inserted = inserted.slice(i);\n            i = 1;\n            while (extendRight > 0 && this.lastValue.length - i > this.lastSelectionStart - 1\n                && this.lastValue[this.lastValue.length - i] == value[value.length - i]) {\n                i++;\n                extendRight--;\n            }\n            restoreStart -= i - 1;\n            restoreEnd -= i - 1;\n            var endIndex = inserted.length - i + 1;\n            if (endIndex < 0) {\n                extendLeft = -endIndex;\n                endIndex = 0;\n            }\n            inserted = inserted.slice(0, endIndex);\n            if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n                return \"\";\n            this.sendingText = true;\n            var shouldReset = false;\n            if (useragent.isAndroid && inserted == \". \") {\n                inserted = \"  \";\n                shouldReset = true;\n            }\n            if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || this.commandMode) {\n                this.host.onTextInput(inserted);\n            }\n            else {\n                this.host.onTextInput(inserted, {\n                    extendLeft: extendLeft,\n                    extendRight: extendRight,\n                    restoreStart: restoreStart,\n                    restoreEnd: restoreEnd\n                });\n            }\n            this.sendingText = false;\n            this.lastValue = value;\n            this.lastSelectionStart = selectionStart;\n            this.lastSelectionEnd = selectionEnd;\n            this.lastRestoreEnd = restoreEnd;\n            return shouldReset ? \"\\n\" : inserted;\n        }\n    };\n    TextInput.prototype.onSelect = function (e) {\n        var _this = this;\n        if (this.inComposition)\n            return;\n        var isAllSelected = function (text) {\n            return text.selectionStart === 0 && text.selectionEnd >= _this.lastValue.length && text.value\n                === _this.lastValue && _this.lastValue && text.selectionEnd !== _this.lastSelectionEnd;\n        };\n        if (this.copied) {\n            this.copied = false;\n        }\n        else if (isAllSelected(this.text)) {\n            this.host.selectAll();\n            this.resetSelection();\n        }\n        else if (isMobile && this.text.selectionStart != this.lastSelectionStart) {\n            this.resetSelection();\n        }\n    };\n    TextInput.prototype.$resetSelectionIOS = function (value) {\n        if (!this.$isFocused || (this.copied && !value) || this.sendingText)\n            return;\n        if (!value)\n            value = \"\";\n        var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n        if (newValue != this.text.value)\n            this.text.value = this.lastValue = newValue;\n        var selectionStart = 4;\n        var selectionEnd = 4 + (value.length || (this.host.selection.isEmpty() ? 0 : 1));\n        if (this.lastSelectionStart != selectionStart || this.lastSelectionEnd != selectionEnd) {\n            this.text.setSelectionRange(selectionStart, selectionEnd);\n        }\n        this.lastSelectionStart = selectionStart;\n        this.lastSelectionEnd = selectionEnd;\n    };\n    TextInput.prototype.$resetSelection = function () {\n        var _this = this;\n        if (this.inComposition || this.sendingText)\n            return;\n        if (!this.$isFocused && !this.afterContextMenu)\n            return;\n        this.inComposition = true;\n        var selectionStart = 0;\n        var selectionEnd = 0;\n        var line = \"\";\n        var positionToSelection = function (row, column) {\n            var selection = column;\n            for (var i = 1; i <= row - _this.rowStart && i < 2 * _this.numberOfExtraLines + 1; i++) {\n                selection += _this.host.session.getLine(row - i).length + 1;\n            }\n            return selection;\n        };\n        if (this.host.session) {\n            var selection = this.host.selection;\n            var range = selection.getRange();\n            var row = selection.cursor.row;\n            if (row === this.rowEnd + 1) {\n                this.rowStart = this.rowEnd + 1;\n                this.rowEnd = this.rowStart + 2 * this.numberOfExtraLines;\n            }\n            else if (row === this.rowStart - 1) {\n                this.rowEnd = this.rowStart - 1;\n                this.rowStart = this.rowEnd - 2 * this.numberOfExtraLines;\n            }\n            else if (row < this.rowStart - 1 || row > this.rowEnd + 1) {\n                this.rowStart = row > this.numberOfExtraLines ? row - this.numberOfExtraLines : 0;\n                this.rowEnd = row > this.numberOfExtraLines ? row + this.numberOfExtraLines : 2\n                    * this.numberOfExtraLines;\n            }\n            var lines = [];\n            for (var i = this.rowStart; i <= this.rowEnd; i++) {\n                lines.push(this.host.session.getLine(i));\n            }\n            line = lines.join('\\n');\n            selectionStart = positionToSelection(range.start.row, range.start.column);\n            selectionEnd = positionToSelection(range.end.row, range.end.column);\n            if (range.start.row < this.rowStart) {\n                var prevLine = this.host.session.getLine(this.rowStart - 1);\n                selectionStart = range.start.row < this.rowStart - 1 ? 0 : selectionStart;\n                selectionEnd += prevLine.length + 1;\n                line = prevLine + \"\\n\" + line;\n            }\n            else if (range.end.row > this.rowEnd) {\n                var nextLine = this.host.session.getLine(this.rowEnd + 1);\n                selectionEnd = range.end.row > this.rowEnd + 1 ? nextLine.length : range.end.column;\n                selectionEnd += line.length + 1;\n                line = line + \"\\n\" + nextLine;\n            }\n            else if (isMobile && row > 0) {\n                line = \"\\n\" + line;\n                selectionEnd += 1;\n                selectionStart += 1;\n            }\n            if (line.length > MAX_LINE_LENGTH) {\n                if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n                    line = line.slice(0, MAX_LINE_LENGTH);\n                }\n                else {\n                    line = \"\\n\";\n                    if (selectionStart == selectionEnd) {\n                        selectionStart = selectionEnd = 0;\n                    }\n                    else {\n                        selectionStart = 0;\n                        selectionEnd = 1;\n                    }\n                }\n            }\n            var newValue = line + \"\\n\\n\";\n            if (newValue != this.lastValue) {\n                this.text.value = this.lastValue = newValue;\n                this.lastSelectionStart = this.lastSelectionEnd = newValue.length;\n            }\n        }\n        if (this.afterContextMenu) {\n            this.lastSelectionStart = this.text.selectionStart;\n            this.lastSelectionEnd = this.text.selectionEnd;\n        }\n        if (this.lastSelectionEnd != selectionEnd || this.lastSelectionStart != selectionStart || this.text.selectionEnd\n            != this.lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n        ) {\n            try {\n                this.text.setSelectionRange(selectionStart, selectionEnd);\n                this.lastSelectionStart = selectionStart;\n                this.lastSelectionEnd = selectionEnd;\n            }\n            catch (e) {\n            }\n        }\n        this.inComposition = false;\n    };\n    TextInput.prototype.setHost = function (newHost) {\n        this.host = newHost;\n    };\n    TextInput.prototype.setNumberOfExtraLines = function (number) {\n        this.rowStart = Number.MAX_SAFE_INTEGER;\n        this.rowEnd = Number.MIN_SAFE_INTEGER;\n        if (number < 0) {\n            this.numberOfExtraLines = 0;\n            return;\n        }\n        this.numberOfExtraLines = number;\n    };\n    TextInput.prototype.setAriaLabel = function () {\n        var ariaLabel = \"\";\n        if (this.host.$textInputAriaLabel) {\n            ariaLabel += \"\".concat(this.host.$textInputAriaLabel, \", \");\n        }\n        if (this.host.session) {\n            var row = this.host.session.selection.cursor.row;\n            ariaLabel += nls(\"text-input.aria-label\", \"Cursor at row $0\", [row + 1]);\n        }\n        this.text.setAttribute(\"aria-label\", ariaLabel);\n    };\n    TextInput.prototype.setAriaOptions = function (options) {\n        if (options.activeDescendant) {\n            this.text.setAttribute(\"aria-haspopup\", \"true\");\n            this.text.setAttribute(\"aria-autocomplete\", options.inline ? \"both\" : \"list\");\n            this.text.setAttribute(\"aria-activedescendant\", options.activeDescendant);\n        }\n        else {\n            this.text.setAttribute(\"aria-haspopup\", \"false\");\n            this.text.setAttribute(\"aria-autocomplete\", \"both\");\n            this.text.removeAttribute(\"aria-activedescendant\");\n        }\n        if (options.role) {\n            this.text.setAttribute(\"role\", options.role);\n        }\n        if (options.setLabel) {\n            this.text.setAttribute(\"aria-roledescription\", nls(\"text-input.aria-roledescription\", \"editor\"));\n            this.setAriaLabel();\n        }\n    };\n    TextInput.prototype.focus = function () {\n        var _this = this;\n        this.setAriaOptions({\n            setLabel: this.host.renderer.enableKeyboardAccessibility\n        });\n        if (this.tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n            return this.text.focus({ preventScroll: true });\n        var top = this.text.style.top;\n        this.text.style.position = \"fixed\";\n        this.text.style.top = \"0px\";\n        try {\n            var isTransformed = this.text.getBoundingClientRect().top != 0;\n        }\n        catch (e) {\n            return;\n        }\n        var ancestors = [];\n        if (isTransformed) {\n            var t = this.text.parentElement;\n            while (t && t.nodeType == 1) {\n                ancestors.push(t);\n                t.setAttribute(\"ace_nocontext\", \"true\");\n                if (!t.parentElement && t.getRootNode)\n                    t = t.getRootNode()[\"host\"];\n                else\n                    t = t.parentElement;\n            }\n        }\n        this.text.focus({ preventScroll: true });\n        if (isTransformed) {\n            ancestors.forEach(function (p) {\n                p.removeAttribute(\"ace_nocontext\");\n            });\n        }\n        setTimeout(function () {\n            _this.text.style.position = \"\";\n            if (_this.text.style.top == \"0px\")\n                _this.text.style.top = top;\n        }, 0);\n    };\n    TextInput.prototype.blur = function () {\n        this.text.blur();\n    };\n    TextInput.prototype.isFocused = function () {\n        return this.$isFocused;\n    };\n    TextInput.prototype.setInputHandler = function (cb) {\n        this.inputHandler = cb;\n    };\n    TextInput.prototype.getInputHandler = function () {\n        return this.inputHandler;\n    };\n    TextInput.prototype.getElement = function () {\n        return this.text;\n    };\n    TextInput.prototype.setCommandMode = function (value) {\n        this.commandMode = value;\n        this.text.readOnly = false;\n    };\n    TextInput.prototype.setReadOnly = function (readOnly) {\n        if (!this.commandMode)\n            this.text.readOnly = readOnly;\n    };\n    TextInput.prototype.setCopyWithEmptySelection = function (value) {\n    };\n    TextInput.prototype.onContextMenu = function (e) {\n        this.afterContextMenu = true;\n        this.resetSelection();\n        this.host._emit(\"nativecontextmenu\", {\n            target: this.host,\n            domEvent: e\n        });\n        this.moveToMouse(e, true);\n    };\n    TextInput.prototype.moveToMouse = function (e, bringToFront) {\n        var _this = this;\n        if (!this.tempStyle)\n            this.tempStyle = this.text.style.cssText;\n        this.text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n            + \"text-indent: -\" + (this.lastSelectionStart + this.lastSelectionEnd) * this.host.renderer.characterWidth\n            * 0.5 + \"px;\";\n        var rect = this.host.container.getBoundingClientRect();\n        var style = dom.computedStyle(this.host.container);\n        var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n        var left = rect.left + (parseInt(style.borderLeftWidth) || 0);\n        var maxTop = rect.bottom - top - this.text.clientHeight - 2;\n        var move = function (e) {\n            dom.translate(_this.text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n        };\n        move(e);\n        if (e.type != \"mousedown\")\n            return;\n        this.host.renderer.$isMousePressed = true;\n        clearTimeout(this.closeTimeout);\n        if (useragent.isWin)\n            event.capture(this.host.container, move, this.onContextMenuClose.bind(this));\n    };\n    TextInput.prototype.destroy = function () {\n        if (this.text.parentElement)\n            this.text.parentElement.removeChild(this.text);\n    };\n    return TextInput;\n}());\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n    isMobile = _isMobile;\n    isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nvar DefaultHandlers = /** @class */ (function () {\n    function DefaultHandlers(mouseHandler) {\n        mouseHandler.$clickSelection = null;\n        var editor = mouseHandler.editor;\n        editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n        editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n        editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n        editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n        editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n        var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n            \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n        exports.forEach(function (x) {\n            mouseHandler[x] = this[x];\n        }, this);\n        mouseHandler[\"selectByLines\"] = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n        mouseHandler[\"selectByWords\"] = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n    }\n    DefaultHandlers.prototype.onMouseDown = function (ev) {\n        var inSelection = ev.inSelection();\n        var pos = ev.getDocumentPosition();\n        this.mousedownEvent = ev;\n        var editor = this.editor;\n        var button = ev.getButton();\n        if (button !== 0) {\n            var selectionRange = editor.getSelectionRange();\n            var selectionEmpty = selectionRange.isEmpty();\n            if (selectionEmpty || button == 1)\n                editor.selection.moveToPosition(pos);\n            if (button == 2) {\n                editor.textInput.onContextMenu(ev.domEvent);\n                if (!useragent.isMozilla)\n                    ev.preventDefault();\n            }\n            return;\n        }\n        this.mousedownEvent.time = Date.now();\n        if (inSelection && !editor.isFocused()) {\n            editor.focus();\n            if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n                this.setState(\"focusWait\");\n                this.captureMouse(ev);\n                return;\n            }\n        }\n        this.captureMouse(ev);\n        this.startSelect(pos, ev.domEvent._clicks > 1);\n        return ev.preventDefault();\n    };\n    DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) {\n        pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var editor = this.editor;\n        if (!this.mousedownEvent)\n            return;\n        if (this.mousedownEvent.getShiftKey())\n            editor.selection.selectToPosition(pos);\n        else if (!waitForClickSelection)\n            editor.selection.moveToPosition(pos);\n        if (!waitForClickSelection)\n            this.select();\n        editor.setStyle(\"ace_selecting\");\n        this.setState(\"select\");\n    };\n    DefaultHandlers.prototype.select = function () {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        if (this.$clickSelection) {\n            var cmp = this.$clickSelection.comparePoint(cursor);\n            if (cmp == -1) {\n                anchor = this.$clickSelection.end;\n            }\n            else if (cmp == 1) {\n                anchor = this.$clickSelection.start;\n            }\n            else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor, editor.session);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n    DefaultHandlers.prototype.extendSelectionBy = function (unitName) {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var range = editor.selection[unitName](cursor.row, cursor.column);\n        if (this.$clickSelection) {\n            var cmpStart = this.$clickSelection.comparePoint(range.start);\n            var cmpEnd = this.$clickSelection.comparePoint(range.end);\n            if (cmpStart == -1 && cmpEnd <= 0) {\n                anchor = this.$clickSelection.end;\n                if (range.end.row != cursor.row || range.end.column != cursor.column)\n                    cursor = range.start;\n            }\n            else if (cmpEnd == 1 && cmpStart >= 0) {\n                anchor = this.$clickSelection.start;\n                if (range.start.row != cursor.row || range.start.column != cursor.column)\n                    cursor = range.end;\n            }\n            else if (cmpStart == -1 && cmpEnd == 1) {\n                cursor = range.end;\n                anchor = range.start;\n            }\n            else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor, editor.session);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n    DefaultHandlers.prototype.selectByLinesEnd = function () {\n        this.$clickSelection = null;\n        this.editor.unsetStyle(\"ace_selecting\");\n    };\n    DefaultHandlers.prototype.focusWait = function () {\n        var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n        var time = Date.now();\n        if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n            this.startSelect(this.mousedownEvent.getDocumentPosition());\n    };\n    DefaultHandlers.prototype.onDoubleClick = function (ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        var session = editor.session;\n        var range = session.getBracketRange(pos);\n        if (range) {\n            if (range.isEmpty()) {\n                range.start.column--;\n                range.end.column++;\n            }\n            this.setState(\"select\");\n        }\n        else {\n            range = editor.selection.getWordRange(pos.row, pos.column);\n            this.setState(\"selectByWords\");\n        }\n        this.$clickSelection = range;\n        this.select();\n    };\n    DefaultHandlers.prototype.onTripleClick = function (ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        this.setState(\"selectByLines\");\n        var range = editor.getSelectionRange();\n        if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n            this.$clickSelection = editor.selection.getLineRange(range.start.row);\n            this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n        }\n        else {\n            this.$clickSelection = editor.selection.getLineRange(pos.row);\n        }\n        this.select();\n    };\n    DefaultHandlers.prototype.onQuadClick = function (ev) {\n        var editor = this.editor;\n        editor.selectAll();\n        this.$clickSelection = editor.getSelectionRange();\n        this.setState(\"selectAll\");\n    };\n    DefaultHandlers.prototype.onMouseWheel = function (ev) {\n        if (ev.getAccelKey())\n            return;\n        if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n            ev.wheelX = ev.wheelY;\n            ev.wheelY = 0;\n        }\n        var editor = this.editor;\n        if (!this.$lastScroll)\n            this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n        var prevScroll = this.$lastScroll;\n        var t = ev.domEvent.timeStamp;\n        var dt = t - prevScroll.t;\n        var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n        var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n        if (dt < SCROLL_COOLDOWN_T) {\n            vx = (vx + prevScroll.vx) / 2;\n            vy = (vy + prevScroll.vy) / 2;\n        }\n        var direction = Math.abs(vx / vy);\n        var canScroll = false;\n        if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n            canScroll = true;\n        if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n            canScroll = true;\n        if (canScroll) {\n            prevScroll.allowed = t;\n        }\n        else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n            var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n                && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n            if (isSlower) {\n                canScroll = true;\n                prevScroll.allowed = t;\n            }\n            else {\n                prevScroll.allowed = 0;\n            }\n        }\n        prevScroll.t = t;\n        prevScroll.vx = vx;\n        prevScroll.vy = vy;\n        if (canScroll) {\n            editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n            return ev.stop();\n        }\n    };\n    return DefaultHandlers;\n}());\nDefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd;\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor, session) {\n    if (range.start.row == range.end.row)\n        var cmp = 2 * cursor.column - range.start.column - range.end.column;\n    else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n        var cmp = 3 * cursor.column - 2 * session.getLine(range.start.row).length;\n    else\n        var cmp = 2 * cursor.row - range.start.row - range.end.row;\n    if (cmp < 0)\n        return { cursor: range.start, anchor: range.end };\n    else\n        return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = /** @class */ (function () {\n    function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY;\n        this.domEvent = domEvent;\n        this.editor = editor;\n        this.x = this.clientX = domEvent.clientX;\n        this.y = this.clientY = domEvent.clientY;\n        this.$pos = null;\n        this.$inSelection = null;\n        this.propagationStopped = false;\n        this.defaultPrevented = false;\n    }\n    MouseEvent.prototype.stopPropagation = function () {\n        event.stopPropagation(this.domEvent);\n        this.propagationStopped = true;\n    };\n    MouseEvent.prototype.preventDefault = function () {\n        event.preventDefault(this.domEvent);\n        this.defaultPrevented = true;\n    };\n    MouseEvent.prototype.stop = function () {\n        this.stopPropagation();\n        this.preventDefault();\n    };\n    MouseEvent.prototype.getDocumentPosition = function () {\n        if (this.$pos)\n            return this.$pos;\n        this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n        return this.$pos;\n    };\n    MouseEvent.prototype.getGutterRow = function () {\n        var documentRow = this.getDocumentPosition().row;\n        var screenRow = this.editor.session.documentToScreenRow(documentRow, 0);\n        var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n        return screenRow - screenTopRow;\n    };\n    MouseEvent.prototype.inSelection = function () {\n        if (this.$inSelection !== null)\n            return this.$inSelection;\n        var editor = this.editor;\n        var selectionRange = editor.getSelectionRange();\n        if (selectionRange.isEmpty())\n            this.$inSelection = false;\n        else {\n            var pos = this.getDocumentPosition();\n            this.$inSelection = selectionRange.contains(pos.row, pos.column);\n        }\n        return this.$inSelection;\n    };\n    MouseEvent.prototype.getButton = function () {\n        return event.getButton(this.domEvent);\n    };\n    MouseEvent.prototype.getShiftKey = function () {\n        return this.domEvent.shiftKey;\n    };\n    MouseEvent.prototype.getAccelKey = function () {\n        return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n    };\n    return MouseEvent;\n}());\nexports.MouseEvent = MouseEvent;\n\n});\n\nace.define(\"ace/lib/scroll\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) {\n    event.stopPropagation();\n    var target = event.currentTarget;\n    var contentOverflows = target.scrollHeight > target.clientHeight;\n    if (!contentOverflows) {\n        event.preventDefault();\n    }\n};\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar CLASSNAME = \"ace_tooltip\";\nvar Tooltip = /** @class */ (function () {\n    function Tooltip(parentNode) {\n        this.isOpen = false;\n        this.$element = null;\n        this.$parentNode = parentNode;\n    }\n    Tooltip.prototype.$init = function () {\n        this.$element = dom.createElement(\"div\");\n        this.$element.className = CLASSNAME;\n        this.$element.style.display = \"none\";\n        this.$parentNode.appendChild(this.$element);\n        return this.$element;\n    };\n    Tooltip.prototype.getElement = function () {\n        return this.$element || this.$init();\n    };\n    Tooltip.prototype.setText = function (text) {\n        this.getElement().textContent = text;\n    };\n    Tooltip.prototype.setHtml = function (html) {\n        this.getElement().innerHTML = html;\n    };\n    Tooltip.prototype.setPosition = function (x, y) {\n        this.getElement().style.left = x + \"px\";\n        this.getElement().style.top = y + \"px\";\n    };\n    Tooltip.prototype.setClassName = function (className) {\n        dom.addCssClass(this.getElement(), className);\n    };\n    Tooltip.prototype.setTheme = function (theme) {\n        if (this.theme) {\n            this.theme.isDark && dom.removeCssClass(this.getElement(), \"ace_dark\");\n            this.theme.cssClass && dom.removeCssClass(this.getElement(), this.theme.cssClass);\n        }\n        if (theme.isDark) {\n            dom.addCssClass(this.getElement(), \"ace_dark\");\n        }\n        if (theme.cssClass) {\n            dom.addCssClass(this.getElement(), theme.cssClass);\n        }\n        this.theme = {\n            isDark: theme.isDark,\n            cssClass: theme.cssClass\n        };\n    };\n    Tooltip.prototype.show = function (text, x, y) {\n        if (text != null)\n            this.setText(text);\n        if (x != null && y != null)\n            this.setPosition(x, y);\n        if (!this.isOpen) {\n            this.getElement().style.display = \"block\";\n            this.isOpen = true;\n        }\n    };\n    Tooltip.prototype.hide = function (e) {\n        if (this.isOpen) {\n            this.getElement().style.display = \"none\";\n            this.getElement().className = CLASSNAME;\n            this.isOpen = false;\n        }\n    };\n    Tooltip.prototype.getHeight = function () {\n        return this.getElement().offsetHeight;\n    };\n    Tooltip.prototype.getWidth = function () {\n        return this.getElement().offsetWidth;\n    };\n    Tooltip.prototype.destroy = function () {\n        this.isOpen = false;\n        if (this.$element && this.$element.parentNode) {\n            this.$element.parentNode.removeChild(this.$element);\n        }\n    };\n    return Tooltip;\n}());\nvar PopupManager = /** @class */ (function () {\n    function PopupManager() {\n        this.popups = [];\n    }\n    PopupManager.prototype.addPopup = function (popup) {\n        this.popups.push(popup);\n        this.updatePopups();\n    };\n    PopupManager.prototype.removePopup = function (popup) {\n        var index = this.popups.indexOf(popup);\n        if (index !== -1) {\n            this.popups.splice(index, 1);\n            this.updatePopups();\n        }\n    };\n    PopupManager.prototype.updatePopups = function () {\n        var e_1, _a, e_2, _b;\n        this.popups.sort(function (a, b) { return b.priority - a.priority; });\n        var visiblepopups = [];\n        try {\n            for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var popup = _d.value;\n                var shouldDisplay = true;\n                try {\n                    for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) {\n                        var visiblePopup = visiblepopups_1_1.value;\n                        if (this.doPopupsOverlap(visiblePopup, popup)) {\n                            shouldDisplay = false;\n                            break;\n                        }\n                    }\n                }\n                catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                finally {\n                    try {\n                        if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1);\n                    }\n                    finally { if (e_2) throw e_2.error; }\n                }\n                if (shouldDisplay) {\n                    visiblepopups.push(popup);\n                }\n                else {\n                    popup.hide();\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) {\n        var rectA = popupA.getElement().getBoundingClientRect();\n        var rectB = popupB.getElement().getBoundingClientRect();\n        return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom\n            > rectB.top);\n    };\n    return PopupManager;\n}());\nvar popupManager = new PopupManager();\nexports.popupManager = popupManager;\nexports.Tooltip = Tooltip;\nvar HoverTooltip = /** @class */ (function (_super) {\n    __extends(HoverTooltip, _super);\n    function HoverTooltip(parentNode) {\n        if (parentNode === void 0) { parentNode = document.body; }\n        var _this = _super.call(this, parentNode) || this;\n        _this.timeout = undefined;\n        _this.lastT = 0;\n        _this.idleTime = 350;\n        _this.lastEvent = undefined;\n        _this.onMouseOut = _this.onMouseOut.bind(_this);\n        _this.onMouseMove = _this.onMouseMove.bind(_this);\n        _this.waitForHover = _this.waitForHover.bind(_this);\n        _this.hide = _this.hide.bind(_this);\n        var el = _this.getElement();\n        el.style.whiteSpace = \"pre-wrap\";\n        el.style.pointerEvents = \"auto\";\n        el.addEventListener(\"mouseout\", _this.onMouseOut);\n        el.tabIndex = -1;\n        el.addEventListener(\"blur\", function () {\n            if (!el.contains(document.activeElement))\n                this.hide();\n        }.bind(_this));\n        el.addEventListener(\"wheel\", preventParentScroll);\n        return _this;\n    }\n    HoverTooltip.prototype.addToEditor = function (editor) {\n        editor.on(\"mousemove\", this.onMouseMove);\n        editor.on(\"mousedown\", this.hide);\n        var target = editor.renderer.getMouseEventTarget();\n        if (target && typeof target.removeEventListener === \"function\") {\n            target.addEventListener(\"mouseout\", this.onMouseOut, true);\n        }\n    };\n    HoverTooltip.prototype.removeFromEditor = function (editor) {\n        editor.off(\"mousemove\", this.onMouseMove);\n        editor.off(\"mousedown\", this.hide);\n        var target = editor.renderer.getMouseEventTarget();\n        if (target && typeof target.removeEventListener === \"function\") {\n            target.removeEventListener(\"mouseout\", this.onMouseOut, true);\n        }\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n            this.timeout = null;\n        }\n    };\n    HoverTooltip.prototype.onMouseMove = function (e, editor) {\n        this.lastEvent = e;\n        this.lastT = Date.now();\n        var isMousePressed = editor.$mouseHandler.isMousePressed;\n        if (this.isOpen) {\n            var pos = this.lastEvent && this.lastEvent.getDocumentPosition();\n            if (!this.range\n                || !this.range.contains(pos.row, pos.column)\n                || isMousePressed\n                || this.isOutsideOfText(this.lastEvent)) {\n                this.hide();\n            }\n        }\n        if (this.timeout || isMousePressed)\n            return;\n        this.lastEvent = e;\n        this.timeout = setTimeout(this.waitForHover, this.idleTime);\n    };\n    HoverTooltip.prototype.waitForHover = function () {\n        if (this.timeout)\n            clearTimeout(this.timeout);\n        var dt = Date.now() - this.lastT;\n        if (this.idleTime - dt > 10) {\n            this.timeout = setTimeout(this.waitForHover, this.idleTime - dt);\n            return;\n        }\n        this.timeout = null;\n        if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) {\n            this.$gatherData(this.lastEvent, this.lastEvent.editor);\n        }\n    };\n    HoverTooltip.prototype.isOutsideOfText = function (e) {\n        var editor = e.editor;\n        var docPos = e.getDocumentPosition();\n        var line = editor.session.getLine(docPos.row);\n        if (docPos.column == line.length) {\n            var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY);\n            var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column);\n            if (clippedPos.column != screenPos.column\n                || clippedPos.row != screenPos.row) {\n                return true;\n            }\n        }\n        return false;\n    };\n    HoverTooltip.prototype.setDataProvider = function (value) {\n        this.$gatherData = value;\n    };\n    HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) {\n        if (startingEvent && startingEvent != this.lastEvent)\n            return;\n        if (this.isOpen && document.activeElement == this.getElement())\n            return;\n        var renderer = editor.renderer;\n        if (!this.isOpen) {\n            popupManager.addPopup(this);\n            this.$registerCloseEvents();\n            this.setTheme(renderer.theme);\n        }\n        this.isOpen = true;\n        this.range = Range.fromPoints(range.start, range.end);\n        var position = renderer.textToScreenCoordinates(range.start.row, range.start.column);\n        var rect = renderer.scroller.getBoundingClientRect();\n        if (position.pageX < rect.left)\n            position.pageX = rect.left;\n        var element = this.getElement();\n        element.innerHTML = \"\";\n        element.appendChild(domNode);\n        element.style.maxHeight = \"\";\n        element.style.display = \"block\";\n        this.$setPosition(editor, position, true, range);\n        dom.$fixPositionBug(element);\n    };\n    HoverTooltip.prototype.$setPosition = function (editor, position, withMarker, range) {\n        var MARGIN = 10;\n        withMarker && this.addMarker(range, editor.session);\n        var renderer = editor.renderer;\n        var element = this.getElement();\n        var labelHeight = element.offsetHeight;\n        var labelWidth = element.offsetWidth;\n        var anchorTop = position.pageY;\n        var anchorLeft = position.pageX;\n        var spaceBelow = window.innerHeight - anchorTop - renderer.lineHeight;\n        var isAbove = this.$shouldPlaceAbove(labelHeight, anchorTop, spaceBelow - MARGIN);\n        element.style.maxHeight = (isAbove ? anchorTop : spaceBelow) - MARGIN + \"px\";\n        element.style.top = isAbove ? \"\" : anchorTop + renderer.lineHeight + \"px\";\n        element.style.bottom = isAbove ? window.innerHeight - anchorTop + \"px\" : \"\";\n        element.style.left = Math.min(anchorLeft, window.innerWidth - labelWidth - MARGIN) + \"px\";\n    };\n    HoverTooltip.prototype.$shouldPlaceAbove = function (labelHeight, anchorTop, spaceBelow) {\n        return !(anchorTop - labelHeight < 0 && anchorTop < spaceBelow);\n    };\n    HoverTooltip.prototype.addMarker = function (range, session) {\n        if (this.marker) {\n            this.$markerSession.removeMarker(this.marker);\n        }\n        this.$markerSession = session;\n        this.marker = session && session.addMarker(range, \"ace_highlight-marker\", \"text\");\n    };\n    HoverTooltip.prototype.hide = function (e) {\n        if (e && this.$fromKeyboard && e.type == \"keydown\") {\n            if (e.code == \"Escape\") {\n                return;\n            }\n        }\n        if (!e && document.activeElement == this.getElement())\n            return;\n        if (e && e.target && (e.type != \"keydown\" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target))\n            return;\n        this.lastEvent = null;\n        if (this.timeout)\n            clearTimeout(this.timeout);\n        this.timeout = null;\n        this.addMarker(null);\n        if (this.isOpen) {\n            this.$fromKeyboard = false;\n            this.$removeCloseEvents();\n            this.getElement().style.display = \"none\";\n            this.isOpen = false;\n            popupManager.removePopup(this);\n        }\n    };\n    HoverTooltip.prototype.$registerCloseEvents = function () {\n        window.addEventListener(\"keydown\", this.hide, true);\n        window.addEventListener(\"wheel\", this.hide, true);\n        window.addEventListener(\"mousedown\", this.hide, true);\n    };\n    HoverTooltip.prototype.$removeCloseEvents = function () {\n        window.removeEventListener(\"keydown\", this.hide, true);\n        window.removeEventListener(\"wheel\", this.hide, true);\n        window.removeEventListener(\"mousedown\", this.hide, true);\n    };\n    HoverTooltip.prototype.onMouseOut = function (e) {\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n            this.timeout = null;\n        }\n        this.lastEvent = null;\n        if (!this.isOpen)\n            return;\n        if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n            return;\n        if (e && e.currentTarget.contains(e.relatedTarget))\n            return;\n        if (!e.relatedTarget.classList.contains(\"ace_content\"))\n            this.hide();\n    };\n    return HoverTooltip;\n}(Tooltip));\nexports.HoverTooltip = HoverTooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/mouse/mouse_event\",\"ace/tooltip\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"../lib/dom\");\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar HoverTooltip = require(\"../tooltip\").HoverTooltip;\nvar nls = require(\"../config\").nls;\nvar Range = require(\"../range\").Range;\nfunction GutterHandler(mouseHandler) {\n    var editor = mouseHandler.editor;\n    var gutter = editor.renderer.$gutterLayer;\n    mouseHandler.$tooltip = new GutterTooltip(editor);\n    mouseHandler.$tooltip.addToEditor(editor);\n    mouseHandler.$tooltip.setDataProvider(function (e, editor) {\n        var row = e.getDocumentPosition().row;\n        mouseHandler.$tooltip.showTooltip(row);\n    });\n    mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n        if (!editor.isFocused() || e.getButton() != 0)\n            return;\n        var gutterRegion = gutter.getRegion(e);\n        if (gutterRegion == \"foldWidgets\")\n            return;\n        var row = e.getDocumentPosition().row;\n        var selection = editor.session.selection;\n        if (e.getShiftKey())\n            selection.selectTo(row, 0);\n        else {\n            if (e.domEvent.detail == 2) {\n                editor.selectAll();\n                return e.preventDefault();\n            }\n            mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n        }\n        mouseHandler.setState(\"selectByLines\");\n        mouseHandler.captureMouse(e);\n        return e.preventDefault();\n    });\n}\nexports.GutterHandler = GutterHandler;\nvar GutterTooltip = /** @class */ (function (_super) {\n    __extends(GutterTooltip, _super);\n    function GutterTooltip(editor) {\n        var _this = _super.call(this, editor.container) || this;\n        _this.id = \"gt\" + (++GutterTooltip.$uid);\n        _this.editor = editor;\n        _this.visibleTooltipRow;\n        var el = _this.getElement();\n        el.setAttribute(\"role\", \"tooltip\");\n        el.setAttribute(\"id\", _this.id);\n        el.style.pointerEvents = \"auto\";\n        _this.idleTime = 50;\n        _this.onDomMouseMove = _this.onDomMouseMove.bind(_this);\n        _this.onDomMouseOut = _this.onDomMouseOut.bind(_this);\n        _this.setClassName(\"ace_gutter-tooltip\");\n        return _this;\n    }\n    GutterTooltip.prototype.onDomMouseMove = function (domEvent) {\n        var aceEvent = new MouseEvent(domEvent, this.editor);\n        this.onMouseMove(aceEvent, this.editor);\n    };\n    GutterTooltip.prototype.onDomMouseOut = function (domEvent) {\n        var aceEvent = new MouseEvent(domEvent, this.editor);\n        this.onMouseOut(aceEvent);\n    };\n    GutterTooltip.prototype.addToEditor = function (editor) {\n        var gutter = editor.renderer.$gutter;\n        gutter.addEventListener(\"mousemove\", this.onDomMouseMove);\n        gutter.addEventListener(\"mouseout\", this.onDomMouseOut);\n        _super.prototype.addToEditor.call(this, editor);\n    };\n    GutterTooltip.prototype.removeFromEditor = function (editor) {\n        var gutter = editor.renderer.$gutter;\n        gutter.removeEventListener(\"mousemove\", this.onDomMouseMove);\n        gutter.removeEventListener(\"mouseout\", this.onDomMouseOut);\n        _super.prototype.removeFromEditor.call(this, editor);\n    };\n    GutterTooltip.prototype.destroy = function () {\n        if (this.editor) {\n            this.removeFromEditor(this.editor);\n        }\n        _super.prototype.destroy.call(this);\n    };\n    Object.defineProperty(GutterTooltip, \"annotationLabels\", {\n        get: function () {\n            return {\n                error: {\n                    singular: nls(\"gutter-tooltip.aria-label.error.singular\", \"error\"),\n                    plural: nls(\"gutter-tooltip.aria-label.error.plural\", \"errors\")\n                },\n                security: {\n                    singular: nls(\"gutter-tooltip.aria-label.security.singular\", \"security finding\"),\n                    plural: nls(\"gutter-tooltip.aria-label.security.plural\", \"security findings\")\n                },\n                warning: {\n                    singular: nls(\"gutter-tooltip.aria-label.warning.singular\", \"warning\"),\n                    plural: nls(\"gutter-tooltip.aria-label.warning.plural\", \"warnings\")\n                },\n                info: {\n                    singular: nls(\"gutter-tooltip.aria-label.info.singular\", \"information message\"),\n                    plural: nls(\"gutter-tooltip.aria-label.info.plural\", \"information messages\")\n                },\n                hint: {\n                    singular: nls(\"gutter-tooltip.aria-label.hint.singular\", \"suggestion\"),\n                    plural: nls(\"gutter-tooltip.aria-label.hint.plural\", \"suggestions\")\n                }\n            };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    GutterTooltip.prototype.showTooltip = function (row) {\n        var _a;\n        var gutter = this.editor.renderer.$gutterLayer;\n        var annotationsInRow = gutter.$annotations[row];\n        var annotation;\n        if (annotationsInRow)\n            annotation = {\n                displayText: Array.from(annotationsInRow.displayText),\n                type: Array.from(annotationsInRow.type)\n            };\n        else\n            annotation = { displayText: [], type: [] };\n        var fold = gutter.session.getFoldLine(row);\n        if (fold && gutter.$showFoldedAnnotations) {\n            var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] };\n            var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 };\n            var mostSevereAnnotationTypeInFold;\n            for (var i = row + 1; i <= fold.end.row; i++) {\n                if (!gutter.$annotations[i])\n                    continue;\n                for (var j = 0; j < gutter.$annotations[i].text.length; j++) {\n                    var annotationType = gutter.$annotations[i].type[j];\n                    annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]);\n                    if (!mostSevereAnnotationTypeInFold ||\n                        severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) {\n                        mostSevereAnnotationTypeInFold = annotationType;\n                    }\n                }\n            }\n            if ([\"error\", \"security\", \"warning\"].includes(mostSevereAnnotationTypeInFold)) {\n                var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n                annotation.displayText.push(summaryFoldedAnnotations);\n                annotation.type.push(mostSevereAnnotationTypeInFold + \"_fold\");\n            }\n        }\n        if (annotation.displayText.length === 0)\n            return this.hide();\n        var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] };\n        var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n        for (var i = 0; i < annotation.displayText.length; i++) {\n            var lineElement = dom.createElement(\"span\");\n            var iconElement = dom.createElement(\"span\");\n            (_a = iconElement.classList).add.apply(_a, [\"ace_\".concat(annotation.type[i]), iconClassName]);\n            iconElement.setAttribute(\"aria-label\", \"\".concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular));\n            iconElement.setAttribute(\"role\", \"img\");\n            iconElement.appendChild(dom.createTextNode(\" \"));\n            lineElement.appendChild(iconElement);\n            lineElement.appendChild(dom.createTextNode(annotation.displayText[i]));\n            lineElement.appendChild(dom.createElement(\"br\"));\n            annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(lineElement);\n        }\n        var tooltipElement = dom.createElement(\"span\");\n        annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); });\n        annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); });\n        annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); });\n        annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); });\n        annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); });\n        tooltipElement.setAttribute(\"aria-live\", \"polite\");\n        var annotationNode = this.$findLinkedAnnotationNode(row);\n        if (annotationNode) {\n            annotationNode.setAttribute(\"aria-describedby\", this.id);\n        }\n        var range = Range.fromPoints({ row: row, column: 0 }, { row: row, column: 0 });\n        this.showForRange(this.editor, range, tooltipElement);\n        this.visibleTooltipRow = row;\n        this.editor._signal(\"showGutterTooltip\", this);\n    };\n    GutterTooltip.prototype.$setPosition = function (editor, _ignoredPosition, _withMarker, range) {\n        var gutterCell = this.$findCellByRow(range.start.row);\n        if (!gutterCell)\n            return;\n        var el = gutterCell && gutterCell.element;\n        var anchorEl = el && (el.querySelector(\".ace_gutter_annotation\"));\n        if (!anchorEl)\n            return;\n        var r = anchorEl.getBoundingClientRect();\n        if (!r)\n            return;\n        var position = {\n            pageX: r.right,\n            pageY: r.top\n        };\n        return _super.prototype.$setPosition.call(this, editor, position, false, range);\n    };\n    GutterTooltip.prototype.$shouldPlaceAbove = function (labelHeight, anchorTop, spaceBelow) {\n        return spaceBelow < labelHeight;\n    };\n    GutterTooltip.prototype.$findLinkedAnnotationNode = function (row) {\n        var cell = this.$findCellByRow(row);\n        if (cell) {\n            var element = cell.element;\n            if (element.childNodes.length > 2) {\n                return element.childNodes[2];\n            }\n        }\n    };\n    GutterTooltip.prototype.$findCellByRow = function (row) {\n        return this.editor.renderer.$gutterLayer.$lines.cells.find(function (el) { return el.row === row; });\n    };\n    GutterTooltip.prototype.hide = function (e) {\n        if (!this.isOpen) {\n            return;\n        }\n        this.$element.removeAttribute(\"aria-live\");\n        if (this.visibleTooltipRow != undefined) {\n            var annotationNode = this.$findLinkedAnnotationNode(this.visibleTooltipRow);\n            if (annotationNode) {\n                annotationNode.removeAttribute(\"aria-describedby\");\n            }\n        }\n        this.visibleTooltipRow = undefined;\n        this.editor._signal(\"hideGutterTooltip\", this);\n        _super.prototype.hide.call(this, e);\n    };\n    GutterTooltip.annotationsToSummaryString = function (annotations) {\n        var e_1, _a;\n        var summary = [];\n        var annotationTypes = [\"error\", \"security\", \"warning\", \"info\", \"hint\"];\n        try {\n            for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) {\n                var annotationType = annotationTypes_1_1.value;\n                if (!annotations[annotationType].length)\n                    continue;\n                var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural;\n                summary.push(\"\".concat(annotations[annotationType].length, \" \").concat(label));\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return summary.join(\", \");\n    };\n    GutterTooltip.prototype.isOutsideOfText = function (e) {\n        var editor = e.editor;\n        var rect = editor.renderer.$gutter.getBoundingClientRect();\n        return !(e.clientX >= rect.left && e.clientX <= rect.right &&\n            e.clientY >= rect.top && e.clientY <= rect.bottom);\n    };\n    return GutterTooltip;\n}(HoverTooltip));\nGutterTooltip.$uid = 0;\nexports.GutterTooltip = GutterTooltip;\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n    var editor = mouseHandler.editor;\n    var dragImage = dom.createElement(\"div\");\n    dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n    dragImage.textContent = \"\\xa0\";\n    var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n    exports.forEach(function (x) {\n        mouseHandler[x] = this[x];\n    }, this);\n    editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n    var mouseTarget = editor.container;\n    var dragSelectionMarker, x, y;\n    var timerId, range;\n    var dragCursor, counter = 0;\n    var dragOperation;\n    var isInternal;\n    var autoScrollStartTime;\n    var cursorMovedTime;\n    var cursorPointOnCaretMoved;\n    this.onDragStart = function (e) {\n        if (this.cancelDrag || !mouseTarget.draggable) {\n            var self = this;\n            setTimeout(function () {\n                self.startSelect();\n                self.captureMouse(e);\n            }, 0);\n            return e.preventDefault();\n        }\n        range = editor.getSelectionRange();\n        var dataTransfer = e.dataTransfer;\n        dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n        editor.container.appendChild(dragImage);\n        dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n        setTimeout(function () {\n            editor.container.removeChild(dragImage);\n        });\n        dataTransfer.clearData();\n        dataTransfer.setData(\"Text\", editor.session.getTextRange());\n        isInternal = true;\n        this.setState(\"drag\");\n    };\n    this.onDragEnd = function (e) {\n        mouseTarget.draggable = false;\n        isInternal = false;\n        this.setState(null);\n        if (!editor.getReadOnly()) {\n            var dropEffect = e.dataTransfer.dropEffect;\n            if (!dragOperation && dropEffect == \"move\")\n                editor.session.remove(editor.getSelectionRange());\n            editor.$resetCursorStyle();\n        }\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n    };\n    this.onDragEnter = function (e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker)\n            addDragMarker();\n        counter++;\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n    this.onDragOver = function (e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker) {\n            addDragMarker();\n            counter++;\n        }\n        if (onMouseMoveTimer !== null)\n            onMouseMoveTimer = null;\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n    this.onDragLeave = function (e) {\n        counter--;\n        if (counter <= 0 && dragSelectionMarker) {\n            clearDragMarker();\n            dragOperation = null;\n            return event.preventDefault(e);\n        }\n    };\n    this.onDrop = function (e) {\n        if (!dragCursor)\n            return;\n        var dataTransfer = e.dataTransfer;\n        if (isInternal) {\n            switch (dragOperation) {\n                case \"move\":\n                    if (range.contains(dragCursor.row, dragCursor.column)) {\n                        range = {\n                            start: dragCursor,\n                            end: dragCursor\n                        };\n                    }\n                    else {\n                        range = editor.moveText(range, dragCursor);\n                    }\n                    break;\n                case \"copy\":\n                    range = editor.moveText(range, dragCursor, true);\n                    break;\n            }\n        }\n        else {\n            var dropData = dataTransfer.getData('Text');\n            range = {\n                start: dragCursor,\n                end: editor.session.insert(dragCursor, dropData)\n            };\n            editor.focus();\n            dragOperation = null;\n        }\n        clearDragMarker();\n        return event.preventDefault(e);\n    };\n    event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n    function scrollCursorIntoView(cursor, prevCursor) {\n        var now = Date.now();\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        var hMovement = !prevCursor || cursor.column != prevCursor.column;\n        if (!cursorMovedTime || vMovement || hMovement) {\n            editor.moveCursorToPosition(cursor);\n            cursorMovedTime = now;\n            cursorPointOnCaretMoved = { x: x, y: y };\n        }\n        else {\n            var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n            if (distance > SCROLL_CURSOR_HYSTERESIS) {\n                cursorMovedTime = null;\n            }\n            else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n                editor.renderer.scrollCursorIntoView();\n                cursorMovedTime = null;\n            }\n        }\n    }\n    function autoScroll(cursor, prevCursor) {\n        var now = Date.now();\n        var lineHeight = editor.renderer.layerConfig.lineHeight;\n        var characterWidth = editor.renderer.layerConfig.characterWidth;\n        var editorRect = editor.renderer.scroller.getBoundingClientRect();\n        var offsets = {\n            x: {\n                left: x - editorRect.left,\n                right: editorRect.right - x\n            },\n            y: {\n                top: y - editorRect.top,\n                bottom: editorRect.bottom - y\n            }\n        };\n        var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n        var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n        var scrollCursor = { row: cursor.row, column: cursor.column };\n        if (nearestXOffset / characterWidth <= 2) {\n            scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n        }\n        if (nearestYOffset / lineHeight <= 1) {\n            scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n        }\n        var vScroll = cursor.row != scrollCursor.row;\n        var hScroll = cursor.column != scrollCursor.column;\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        if (vScroll || (hScroll && !vMovement)) {\n            if (!autoScrollStartTime)\n                autoScrollStartTime = now;\n            else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n                editor.renderer.scrollCursorIntoView(scrollCursor);\n        }\n        else {\n            autoScrollStartTime = null;\n        }\n    }\n    function onDragInterval() {\n        var prevCursor = dragCursor;\n        dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n        scrollCursorIntoView(dragCursor, prevCursor);\n        autoScroll(dragCursor, prevCursor);\n    }\n    function addDragMarker() {\n        range = editor.selection.toOrientedRange();\n        dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n        editor.clearSelection();\n        if (editor.isFocused())\n            editor.renderer.$cursorLayer.setBlinking(false);\n        clearInterval(timerId);\n        onDragInterval();\n        timerId = setInterval(onDragInterval, 20);\n        counter = 0;\n        event.addListener(document, \"mousemove\", onMouseMove);\n    }\n    function clearDragMarker() {\n        clearInterval(timerId);\n        editor.session.removeMarker(dragSelectionMarker);\n        dragSelectionMarker = null;\n        editor.selection.fromOrientedRange(range);\n        if (editor.isFocused() && !isInternal)\n            editor.$resetCursorStyle();\n        range = null;\n        dragCursor = null;\n        counter = 0;\n        autoScrollStartTime = null;\n        cursorMovedTime = null;\n        event.removeListener(document, \"mousemove\", onMouseMove);\n    }\n    var onMouseMoveTimer = null;\n    function onMouseMove() {\n        if (onMouseMoveTimer == null) {\n            onMouseMoveTimer = setTimeout(function () {\n                if (onMouseMoveTimer != null && dragSelectionMarker)\n                    clearDragMarker();\n            }, 20);\n        }\n    }\n    function canAccept(dataTransfer) {\n        var types = dataTransfer.types;\n        return !types || Array.prototype.some.call(types, function (type) {\n            return type == 'text/plain' || type == 'Text';\n        });\n    }\n    function getDropEffect(e) {\n        var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n        var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n        var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n        var effectAllowed = \"uninitialized\";\n        try {\n            effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n        }\n        catch (e) { }\n        var dropEffect = \"none\";\n        if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n        else if (moveAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"move\";\n        else if (copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n        return dropEffect;\n    }\n}\n(function () {\n    this.dragWait = function () {\n        var interval = Date.now() - this.mousedownEvent.time;\n        if (interval > this.editor.getDragDelay())\n            this.startDrag();\n    };\n    this.dragWaitEnd = function () {\n        var target = this.editor.container;\n        target.draggable = false;\n        this.startSelect(this.mousedownEvent.getDocumentPosition());\n        this.selectEnd();\n    };\n    this.dragReadyEnd = function (e) {\n        this.editor.$resetCursorStyle();\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n        this.dragWaitEnd();\n    };\n    this.startDrag = function () {\n        this.cancelDrag = false;\n        var editor = this.editor;\n        var target = editor.container;\n        target.draggable = true;\n        editor.renderer.$cursorLayer.setBlinking(false);\n        editor.setStyle(\"ace_dragging\");\n        var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n        editor.renderer.setCursorStyle(cursorStyle);\n        this.setState(\"dragReady\");\n    };\n    this.onMouseDrag = function (e) {\n        var target = this.editor.container;\n        if (useragent.isIE && this.state == \"dragReady\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 3)\n                target.dragDrop();\n        }\n        if (this.state === \"dragWait\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 0) {\n                target.draggable = false;\n                this.startSelect(this.mousedownEvent.getDocumentPosition());\n            }\n        }\n    };\n    this.onMouseDown = function (e) {\n        if (!this.$dragEnabled)\n            return;\n        this.mousedownEvent = e;\n        var editor = this.editor;\n        var inSelection = e.inSelection();\n        var button = e.getButton();\n        var clickCount = e.domEvent.detail || 1;\n        if (clickCount === 1 && button === 0 && inSelection) {\n            if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n                return;\n            this.mousedownEvent.time = Date.now();\n            var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n            if (\"unselectable\" in eventTarget)\n                eventTarget.unselectable = \"on\";\n            if (editor.getDragDelay()) {\n                if (useragent.isWebKit) {\n                    this.cancelDrag = true;\n                    var mouseTarget = editor.container;\n                    mouseTarget.draggable = true;\n                }\n                this.setState(\"dragWait\");\n            }\n            else {\n                this.startDrag();\n            }\n            this.captureMouse(e, this.onMouseDrag.bind(this));\n            e.defaultPrevented = true;\n        }\n    };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n    var mode = \"scroll\";\n    var startX;\n    var startY;\n    var touchStartT;\n    var lastT;\n    var longTouchTimer;\n    var animationTimer;\n    var animationSteps = 0;\n    var pos;\n    var clickCount = 0;\n    var vX = 0;\n    var vY = 0;\n    var pressed;\n    var contextMenu;\n    function createContextMenu() {\n        var clipboard = window.navigator && window.navigator.clipboard;\n        var isOpen = false;\n        var updateMenu = function () {\n            var selected = editor.getCopyText();\n            var hasUndo = editor.session.getUndoManager().hasUndo();\n            contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n                !selected && canExecuteCommand(\"selectall\") && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n                selected && canExecuteCommand(\"copy\") && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n                selected && canExecuteCommand(\"cut\") && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n                clipboard && canExecuteCommand(\"paste\") && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n                hasUndo && canExecuteCommand(\"undo\") && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n                canExecuteCommand(\"find\") && [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n                canExecuteCommand(\"openCommandPalette\") && [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n            ] : [\"span\"]), contextMenu.firstChild);\n        };\n        var canExecuteCommand = function (/** @type {string} */ cmd) {\n            return editor.commands.canExecute(cmd, editor);\n        };\n        var handleClick = function (e) {\n            var action = e.target.getAttribute(\"action\");\n            if (action == \"more\" || !isOpen) {\n                isOpen = !isOpen;\n                return updateMenu();\n            }\n            if (action == \"paste\") {\n                clipboard.readText().then(function (text) {\n                    editor.execCommand(action, text);\n                });\n            }\n            else if (action) {\n                if (action == \"cut\" || action == \"copy\") {\n                    if (clipboard)\n                        clipboard.writeText(editor.getCopyText());\n                    else\n                        document.execCommand(\"copy\");\n                }\n                editor.execCommand(action);\n            }\n            contextMenu.firstChild.style.display = \"none\";\n            isOpen = false;\n            if (action != \"openCommandPalette\")\n                editor.focus();\n        };\n        contextMenu = dom.buildDom([\"div\",\n            {\n                class: \"ace_mobile-menu\",\n                ontouchstart: function (e) {\n                    mode = \"menu\";\n                    e.stopPropagation();\n                    e.preventDefault();\n                    editor.textInput.focus();\n                },\n                ontouchend: function (e) {\n                    e.stopPropagation();\n                    e.preventDefault();\n                    handleClick(e);\n                },\n                onclick: handleClick\n            },\n            [\"span\"],\n            [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n        ], editor.container);\n    }\n    function showContextMenu() {\n        if (!editor.getOption(\"enableMobileMenu\")) {\n            if (contextMenu) {\n                hideContextMenu();\n            }\n            return;\n        }\n        if (!contextMenu)\n            createContextMenu();\n        var cursor = editor.selection.cursor;\n        var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n        var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n        var scrollLeft = editor.renderer.scrollLeft;\n        var rect = editor.container.getBoundingClientRect();\n        contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n        if (pagePos.pageX - rect.left < rect.width - 70) {\n            contextMenu.style.left = \"\";\n            contextMenu.style.right = \"10px\";\n        }\n        else {\n            contextMenu.style.right = \"\";\n            contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n        }\n        contextMenu.style.display = \"\";\n        contextMenu.firstChild.style.display = \"none\";\n        editor.on(\"input\", hideContextMenu);\n    }\n    function hideContextMenu(e) {\n        if (contextMenu)\n            contextMenu.style.display = \"none\";\n        editor.off(\"input\", hideContextMenu);\n    }\n    function handleLongTap() {\n        longTouchTimer = null;\n        clearTimeout(longTouchTimer);\n        var range = editor.selection.getRange();\n        var inSelection = range.contains(pos.row, pos.column);\n        if (range.isEmpty() || !inSelection) {\n            editor.selection.moveToPosition(pos);\n            editor.selection.selectWord();\n        }\n        mode = \"wait\";\n        showContextMenu();\n    }\n    function switchToSelectionMode() {\n        longTouchTimer = null;\n        clearTimeout(longTouchTimer);\n        editor.selection.moveToPosition(pos);\n        var range = clickCount >= 2\n            ? editor.selection.getLineRange(pos.row)\n            : editor.session.getBracketRange(pos);\n        if (range && !range.isEmpty()) {\n            editor.selection.setRange(range);\n        }\n        else {\n            editor.selection.selectWord();\n        }\n        mode = \"wait\";\n    }\n    event.addListener(el, \"contextmenu\", function (e) {\n        if (!pressed)\n            return;\n        var textarea = editor.textInput.getElement();\n        textarea.focus();\n    }, editor);\n    event.addListener(el, \"touchstart\", function (e) {\n        var touches = e.touches;\n        if (longTouchTimer || touches.length > 1) {\n            clearTimeout(longTouchTimer);\n            longTouchTimer = null;\n            touchStartT = -1;\n            mode = \"zoom\";\n            return;\n        }\n        pressed = editor.$mouseHandler.isMousePressed = true;\n        var h = editor.renderer.layerConfig.lineHeight;\n        var w = editor.renderer.layerConfig.lineHeight;\n        var t = e.timeStamp;\n        lastT = t;\n        var touchObj = touches[0];\n        var x = touchObj.clientX;\n        var y = touchObj.clientY;\n        if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n            touchStartT = -1;\n        startX = e.clientX = x;\n        startY = e.clientY = y;\n        vX = vY = 0;\n        var ev = new MouseEvent(e, editor);\n        pos = ev.getDocumentPosition();\n        if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n            clickCount++;\n            e.preventDefault();\n            e.button = 0;\n            switchToSelectionMode();\n        }\n        else {\n            clickCount = 0;\n            var cursor = editor.selection.cursor;\n            var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n            var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n            var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n            var rect = editor.renderer.scroller.getBoundingClientRect();\n            var offsetTop = editor.renderer.layerConfig.offset;\n            var offsetLeft = editor.renderer.scrollLeft;\n            var weightedDistance = function (x, y) {\n                x = x / w;\n                y = y / h - 0.75;\n                return x * x + y * y;\n            };\n            if (e.clientX < rect.left) {\n                mode = \"zoom\";\n                return;\n            }\n            var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n            var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n            if (diff1 < 3.5 && diff2 < 3.5)\n                mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n            if (diff2 < 3.5)\n                mode = \"anchor\";\n            else if (diff1 < 3.5)\n                mode = \"cursor\";\n            else\n                mode = \"scroll\";\n            longTouchTimer = setTimeout(handleLongTap, 450);\n        }\n        touchStartT = t;\n    }, editor);\n    event.addListener(el, \"touchend\", function (e) {\n        pressed = editor.$mouseHandler.isMousePressed = false;\n        if (animationTimer)\n            clearInterval(animationTimer);\n        if (mode == \"zoom\") {\n            mode = \"\";\n            animationSteps = 0;\n        }\n        else if (longTouchTimer) {\n            editor.selection.moveToPosition(pos);\n            animationSteps = 0;\n            showContextMenu();\n        }\n        else if (mode == \"scroll\") {\n            animate();\n            hideContextMenu();\n        }\n        else {\n            showContextMenu();\n        }\n        clearTimeout(longTouchTimer);\n        longTouchTimer = null;\n    }, editor);\n    event.addListener(el, \"touchmove\", function (e) {\n        if (longTouchTimer) {\n            clearTimeout(longTouchTimer);\n            longTouchTimer = null;\n        }\n        var touches = e.touches;\n        if (touches.length > 1 || mode == \"zoom\")\n            return;\n        var touchObj = touches[0];\n        var wheelX = startX - touchObj.clientX;\n        var wheelY = startY - touchObj.clientY;\n        if (mode == \"wait\") {\n            if (wheelX * wheelX + wheelY * wheelY > 4)\n                mode = \"cursor\";\n            else\n                return e.preventDefault();\n        }\n        startX = touchObj.clientX;\n        startY = touchObj.clientY;\n        e.clientX = touchObj.clientX;\n        e.clientY = touchObj.clientY;\n        var t = e.timeStamp;\n        var dt = t - lastT;\n        lastT = t;\n        if (mode == \"scroll\") {\n            var mouseEvent = new MouseEvent(e, editor);\n            mouseEvent.speed = 1;\n            mouseEvent.wheelX = wheelX;\n            mouseEvent.wheelY = wheelY;\n            if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n                wheelX = 0;\n            if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n                wheelY = 0;\n            if (dt != 0) {\n                vX = wheelX / dt;\n                vY = wheelY / dt;\n            }\n            editor._emit(\"mousewheel\", mouseEvent);\n            if (!mouseEvent.propagationStopped) {\n                vX = vY = 0;\n            }\n        }\n        else {\n            var ev = new MouseEvent(e, editor);\n            var pos = ev.getDocumentPosition();\n            if (mode == \"cursor\")\n                editor.selection.moveCursorToPosition(pos);\n            else if (mode == \"anchor\")\n                editor.selection.setSelectionAnchor(pos.row, pos.column);\n            editor.renderer.scrollCursorIntoView(pos);\n            e.preventDefault();\n        }\n    }, editor);\n    function animate() {\n        animationSteps += 60;\n        animationTimer = setInterval(function () {\n            if (animationSteps-- <= 0) {\n                clearInterval(animationTimer);\n                animationTimer = null;\n            }\n            if (Math.abs(vX) < 0.01)\n                vX = 0;\n            if (Math.abs(vY) < 0.01)\n                vY = 0;\n            if (animationSteps < 20)\n                vX = 0.9 * vX;\n            if (animationSteps < 20)\n                vY = 0.9 * vY;\n            var oldScrollTop = editor.session.getScrollTop();\n            editor.renderer.scrollBy(10 * vX, 10 * vY);\n            if (oldScrollTop == editor.session.getScrollTop())\n                animationSteps = 0;\n        }, 10);\n    }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = /** @class */ (function () {\n    function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout;\n        var _self = this;\n        this.editor = editor;\n        new DefaultHandlers(this);\n        new DefaultGutterHandler(this);\n        new DragdropHandler(this);\n        var focusEditor = function (e) {\n            var windowBlurred = !document.hasFocus || !document.hasFocus()\n                || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n            if (windowBlurred)\n                window.focus();\n            editor.focus();\n            setTimeout(function () {\n                if (!editor.isFocused())\n                    editor.focus();\n            });\n        };\n        var mouseTarget = editor.renderer.getMouseEventTarget();\n        event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n        event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n        event.addMultiMouseDownListener([\n            mouseTarget,\n            editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n            editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n            editor.textInput && editor.textInput.getElement()\n        ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n        event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n        addTouchListeners(editor.container, editor);\n        var gutterEl = editor.renderer.$gutter;\n        event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n        event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n        event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n        event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n        event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n        event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n        if (useragent.isIE && editor.renderer.scrollBarV) {\n            event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n            event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n        }\n        editor.on(\"mousemove\", function (e) {\n            if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n                return;\n            var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n            var range = editor.session.selection.getRange();\n            var renderer = editor.renderer;\n            if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n                renderer.setCursorStyle(\"default\");\n            }\n            else {\n                renderer.setCursorStyle(\"\");\n            }\n        }, //@ts-expect-error TODO: seems mistyping - should be boolean\n        editor);\n    }\n    MouseHandler.prototype.onMouseEvent = function (name, e) {\n        if (!this.editor.session)\n            return;\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n    MouseHandler.prototype.onMouseMove = function (name, e) {\n        var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n        if (!listeners || !listeners.length)\n            return;\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n    MouseHandler.prototype.onMouseWheel = function (name, e) {\n        var mouseEvent = new MouseEvent(e, this.editor);\n        mouseEvent.speed = this.$scrollSpeed * 2;\n        mouseEvent.wheelX = e.wheelX;\n        mouseEvent.wheelY = e.wheelY;\n        this.editor._emit(name, mouseEvent);\n    };\n    MouseHandler.prototype.setState = function (state) {\n        this.state = state;\n    };\n    MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) {\n        this.x = ev.x;\n        this.y = ev.y;\n        this.isMousePressed = true;\n        var editor = this.editor;\n        var renderer = this.editor.renderer;\n        renderer.$isMousePressed = true;\n        var self = this;\n        var continueCapture = true;\n        var onMouseMove = function (e) {\n            if (!e)\n                return;\n            if (useragent.isWebKit && !e.which && self.releaseMouse)\n                return self.releaseMouse();\n            self.x = e.clientX;\n            self.y = e.clientY;\n            mouseMoveHandler && mouseMoveHandler(e);\n            self.mouseEvent = new MouseEvent(e, self.editor);\n            self.$mouseMoved = true;\n        };\n        var onCaptureEnd = function (e) {\n            editor.off(\"beforeEndOperation\", onOperationEnd);\n            continueCapture = false;\n            if (editor.session)\n                onCaptureUpdate();\n            self[self.state + \"End\"] && self[self.state + \"End\"](e);\n            self.state = \"\";\n            self.isMousePressed = renderer.$isMousePressed = false;\n            if (renderer.$keepTextAreaAtCursor)\n                renderer.$moveTextAreaToCursor();\n            self.$onCaptureMouseMove = self.releaseMouse = null;\n            e && self.onMouseEvent(\"mouseup\", e);\n            editor.endOperation();\n        };\n        var onCaptureUpdate = function () {\n            self[self.state] && self[self.state]();\n            self.$mouseMoved = false;\n        };\n        var onCaptureInterval = function () {\n            if (continueCapture) {\n                onCaptureUpdate();\n                event.nextFrame(onCaptureInterval);\n            }\n        };\n        if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n            return setTimeout(function () { onCaptureEnd(ev); });\n        }\n        var onOperationEnd = function (e) {\n            if (!self.releaseMouse)\n                return;\n            if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n                self[self.state + \"End\"] && self[self.state + \"End\"]();\n                self.state = \"\";\n                self.releaseMouse();\n            }\n        };\n        editor.on(\"beforeEndOperation\", onOperationEnd);\n        editor.startOperation({ command: { name: \"mouse\" } });\n        self.$onCaptureMouseMove = onMouseMove;\n        self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n        onCaptureInterval();\n    };\n    MouseHandler.prototype.cancelContextMenu = function () {\n        var stop = function (e) {\n            if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n                return;\n            this.editor.off(\"nativecontextmenu\", stop);\n            if (e && e.domEvent)\n                event.stopEvent(e.domEvent);\n        }.bind(this);\n        setTimeout(stop, 10);\n        this.editor.on(\"nativecontextmenu\", stop);\n    };\n    MouseHandler.prototype.destroy = function () {\n        if (this.releaseMouse)\n            this.releaseMouse();\n        if (this.$tooltip)\n            this.$tooltip.destroy();\n    };\n    return MouseHandler;\n}());\nMouseHandler.prototype.releaseMouse = null;\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n    scrollSpeed: { initialValue: 2 },\n    dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n    dragEnabled: { initialValue: true },\n    focusTimeout: { initialValue: 0 },\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar FoldHandler = /** @class */ (function () {\n    function FoldHandler(editor) {\n        editor.on(\"click\", function (e) {\n            var position = e.getDocumentPosition();\n            var session = editor.session;\n            var fold = session.getFoldAt(position.row, position.column, 1);\n            if (fold) {\n                if (e.getAccelKey())\n                    session.removeFold(fold);\n                else\n                    session.expandFold(fold);\n                e.stop();\n            }\n            var target = e.domEvent && e.domEvent.target;\n            if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n                if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n                    session.setOption(\"wrap\", !session.getUseWrapMode());\n                    editor.renderer.scrollCursorIntoView();\n                }\n            }\n        });\n        editor.on(\"gutterclick\", function (e) {\n            var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n            if (gutterRegion == \"foldWidgets\") {\n                var row = e.getDocumentPosition().row;\n                var session = editor.session;\n                if (session.foldWidgets && session.foldWidgets[row])\n                    editor.session.onFoldWidgetClick(row, e);\n                if (!editor.isFocused())\n                    editor.focus();\n                e.stop();\n            }\n        });\n        editor.on(\"gutterdblclick\", function (e) {\n            var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n            if (gutterRegion == \"foldWidgets\") {\n                var row = e.getDocumentPosition().row;\n                var session = editor.session;\n                var data = session.getParentFoldRangeData(row, true);\n                var range = data.range || data.firstRange;\n                if (range) {\n                    row = range.start.row;\n                    var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n                    if (fold) {\n                        session.removeFold(fold);\n                    }\n                    else {\n                        session.addFold(\"...\", range);\n                        editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n                    }\n                }\n                e.stop();\n            }\n        });\n    }\n    return FoldHandler;\n}());\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = /** @class */ (function () {\n    function KeyBinding(editor) {\n        this.$editor = editor;\n        this.$data = { editor: editor };\n        this.$handlers = [];\n        this.setDefaultHandler(editor.commands);\n    }\n    KeyBinding.prototype.setDefaultHandler = function (kb) {\n        this.removeKeyboardHandler(this.$defaultHandler);\n        this.$defaultHandler = kb;\n        this.addKeyboardHandler(kb, 0);\n    };\n    KeyBinding.prototype.setKeyboardHandler = function (kb) {\n        var h = this.$handlers;\n        if (h[h.length - 1] == kb)\n            return;\n        while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n            this.removeKeyboardHandler(h[h.length - 1]);\n        this.addKeyboardHandler(kb, 1);\n    };\n    KeyBinding.prototype.addKeyboardHandler = function (kb, pos) {\n        if (!kb)\n            return;\n        if (typeof kb == \"function\" && !kb.handleKeyboard)\n            kb.handleKeyboard = kb;\n        var i = this.$handlers.indexOf(kb);\n        if (i != -1)\n            this.$handlers.splice(i, 1);\n        if (pos == undefined)\n            this.$handlers.push(kb);\n        else\n            this.$handlers.splice(pos, 0, kb);\n        if (i == -1 && kb.attach)\n            kb.attach(this.$editor);\n    };\n    KeyBinding.prototype.removeKeyboardHandler = function (kb) {\n        var i = this.$handlers.indexOf(kb);\n        if (i == -1)\n            return false;\n        this.$handlers.splice(i, 1);\n        kb.detach && kb.detach(this.$editor);\n        return true;\n    };\n    KeyBinding.prototype.getKeyboardHandler = function () {\n        return this.$handlers[this.$handlers.length - 1];\n    };\n    KeyBinding.prototype.getStatusText = function () {\n        var data = this.$data;\n        var editor = data.editor;\n        return this.$handlers.map(function (h) {\n            return h.getStatusText && h.getStatusText(editor, data) || \"\";\n        }).filter(Boolean).join(\" \");\n    };\n    KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n        var toExecute;\n        var success = false;\n        var commands = this.$editor.commands;\n        for (var i = this.$handlers.length; i--;) {\n            toExecute = this.$handlers[i].handleKeyboard(\n            this.$data, hashId, keyString, keyCode, e);\n            if (!toExecute || !toExecute.command)\n                continue;\n            if (toExecute.command == \"null\") {\n                success = true;\n            }\n            else {\n                success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n            }\n            if (success && e && hashId != -1 &&\n                toExecute[\"passEvent\"] != true && toExecute.command[\"passEvent\"] != true) {\n                event.stopEvent(e);\n            }\n            if (success)\n                break;\n        }\n        if (!success && hashId == -1) {\n            toExecute = { command: \"insertstring\" };\n            success = commands.exec(\"insertstring\", this.$editor, keyString);\n        }\n        if (success && this.$editor._signal)\n            this.$editor._signal(\"keyboardActivity\", toExecute);\n        return success;\n    };\n    KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) {\n        var keyString = keyUtil.keyCodeToString(keyCode);\n        return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n    };\n    KeyBinding.prototype.onTextInput = function (text) {\n        return this.$callKeyboardHandlers(-1, text);\n    };\n    return KeyBinding;\n}());\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n    BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n    BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n    WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n    EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n    ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n    L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n    ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n    L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n    BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n    BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n    CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n    ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n    WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n    ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n    ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n    ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n    ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n    ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n    var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n    if (!charTypes) {\n        for (i = 0, charTypes = []; i < len; i++) {\n            charTypes[i] = _getCharacterType(chars[i]);\n        }\n    }\n    hiLevel = dir;\n    lastArabic = false;\n    hasUBAT_AL = false;\n    hasUBAT_B = false;\n    hasUBAT_S = false;\n    for (ix = 0; ix < len; ix++) {\n        prevState = newState;\n        classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n        newState = impTab[prevState][newClass];\n        action = newState & 0xF0;\n        newState &= 0x0F;\n        levels[ix] = newLevel = impTab[newState][5];\n        if (action > 0) {\n            if (action == 0x10) {\n                for (i = condPos; i < ix; i++) {\n                    levels[i] = 1;\n                }\n                condPos = -1;\n            }\n            else {\n                condPos = -1;\n            }\n        }\n        cond = impTab[newState][6];\n        if (cond) {\n            if (condPos == -1) {\n                condPos = ix;\n            }\n        }\n        else {\n            if (condPos > -1) {\n                for (i = condPos; i < ix; i++) {\n                    levels[i] = newLevel;\n                }\n                condPos = -1;\n            }\n        }\n        if (charTypes[ix] == B) {\n            levels[ix] = 0;\n        }\n        hiLevel |= newLevel;\n    }\n    if (hasUBAT_S) {\n        for (i = 0; i < len; i++) {\n            if (charTypes[i] == S) {\n                levels[i] = dir;\n                for (var j = i - 1; j >= 0; j--) {\n                    if (charTypes[j] == WS) {\n                        levels[j] = dir;\n                    }\n                    else {\n                        break;\n                    }\n                }\n            }\n        }\n    }\n}\nfunction _invertLevel(lev, levels, _array) {\n    if (hiLevel < lev) {\n        return;\n    }\n    if (lev == 1 && dir == RTL && !hasUBAT_B) {\n        _array.reverse();\n        return;\n    }\n    var len = _array.length, start = 0, end, lo, hi, tmp;\n    while (start < len) {\n        if (levels[start] >= lev) {\n            end = start + 1;\n            while (end < len && levels[end] >= lev) {\n                end++;\n            }\n            for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n                tmp = _array[lo];\n                _array[lo] = _array[hi];\n                _array[hi] = tmp;\n            }\n            start = end;\n        }\n        start++;\n    }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n    var cType = types[ix], wType, nType, len, i;\n    switch (cType) {\n        case L:\n        case R:\n            lastArabic = false;\n        case ON:\n        case AN:\n            return cType;\n        case EN:\n            return lastArabic ? AN : EN;\n        case AL:\n            lastArabic = true;\n            hasUBAT_AL = true;\n            return R;\n        case WS:\n            return ON;\n        case CS:\n            if (ix < 1 || (ix + 1) >= types.length ||\n                ((wType = classes[ix - 1]) != EN && wType != AN) ||\n                ((nType = types[ix + 1]) != EN && nType != AN)) {\n                return ON;\n            }\n            if (lastArabic) {\n                nType = AN;\n            }\n            return nType == wType ? nType : ON;\n        case ES:\n            wType = ix > 0 ? classes[ix - 1] : B;\n            if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n                return EN;\n            }\n            return ON;\n        case ET:\n            if (ix > 0 && classes[ix - 1] == EN) {\n                return EN;\n            }\n            if (lastArabic) {\n                return ON;\n            }\n            i = ix + 1;\n            len = types.length;\n            while (i < len && types[i] == ET) {\n                i++;\n            }\n            if (i < len && types[i] == EN) {\n                return EN;\n            }\n            return ON;\n        case NSM:\n            len = types.length;\n            i = ix + 1;\n            while (i < len && types[i] == NSM) {\n                i++;\n            }\n            if (i < len) {\n                var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n                wType = types[i];\n                if (rtlCandidate && (wType == R || wType == AL)) {\n                    return R;\n                }\n            }\n            if (ix < 1 || (wType = types[ix - 1]) == B) {\n                return ON;\n            }\n            return classes[ix - 1];\n        case B:\n            lastArabic = false;\n            hasUBAT_B = true;\n            return dir;\n        case S:\n            hasUBAT_S = true;\n            return ON;\n        case LRE:\n        case RLE:\n        case LRO:\n        case RLO:\n        case PDF:\n            lastArabic = false;\n        case BN:\n            return ON;\n    }\n}\nfunction _getCharacterType(ch) {\n    var uc = ch.charCodeAt(0), hi = uc >> 8;\n    if (hi == 0) {\n        return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n    }\n    else if (hi == 5) {\n        return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n    }\n    else if (hi == 6) {\n        if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n            return NSM;\n        else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n            return AN;\n        else if (uc == 0x066A)\n            return ET;\n        else if (/[\\u06f0-\\u06f9]/.test(ch))\n            return EN;\n        else\n            return AL;\n    }\n    else if (hi == 0x20 && uc <= 0x205F) {\n        return UnicodeTBL20[uc & 0xFF];\n    }\n    else if (hi == 0xFE) {\n        return (uc >= 0xFE70 ? AL : ON);\n    }\n    return ON;\n}\nfunction _isArabicDiacritics(ch) {\n    return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n    if (text.length < 2)\n        return {};\n    var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n    dir = isRtl ? RTL : LTR;\n    _computeLevels(chars, levels, chars.length, textCharTypes);\n    for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n        ;\n    _invertLevel(2, levels, logicalFromVisual);\n    _invertLevel(1, levels, logicalFromVisual);\n    for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n        if (textCharTypes[i] === AN) {\n            levels[i] = exports.AN;\n        }\n        else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n            || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n            levels[i] = exports.ON_R;\n        }\n        else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n            levels[i - 1] = levels[i] = exports.R_H;\n            i++;\n        }\n    }\n    if (chars[chars.length - 1] === exports.DOT)\n        levels[chars.length - 1] = exports.B;\n    if (chars[0] === '\\u202B')\n        levels[0] = exports.RLE;\n    for (var i = 0; i < logicalFromVisual.length; i++) {\n        bidiLevels[i] = levels[logicalFromVisual[i]];\n    }\n    return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n    var ret = false;\n    for (var i = 0; i < text.length; i++) {\n        textCharTypes[i] = _getCharacterType(text.charAt(i));\n        if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n            ret = true;\n    }\n    return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n    for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n        if (rowMap.logicalFromVisual[i] == logIdx)\n            return i;\n    }\n    return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = /** @class */ (function () {\n    function BidiHandler(session) {\n        this.session = session;\n        this.bidiMap = {};\n        this.currentRow = null;\n        this.bidiUtil = bidiUtil;\n        this.charWidths = [];\n        this.EOL = \"\\xAC\";\n        this.showInvisibles = true;\n        this.isRtlDir = false;\n        this.$isRtl = false;\n        this.line = \"\";\n        this.wrapIndent = 0;\n        this.EOF = \"\\xB6\";\n        this.RLE = \"\\u202B\";\n        this.contentWidth = 0;\n        this.fontMetrics = null;\n        this.rtlLineOffset = 0;\n        this.wrapOffset = 0;\n        this.isMoveLeftOperation = false;\n        this.seenBidi = bidiRE.test(session.getValue());\n    }\n    BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) {\n        if (!this.seenBidi)\n            return false;\n        if (screenRow !== this.currentRow) {\n            this.currentRow = screenRow;\n            this.updateRowLine(docRow, splitIndex);\n            this.updateBidiMap();\n        }\n        return this.bidiMap.bidiLevels;\n    };\n    BidiHandler.prototype.onChange = function (delta) {\n        if (!this.seenBidi) {\n            if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n                this.seenBidi = true;\n                this.currentRow = null;\n            }\n        }\n        else {\n            this.currentRow = null;\n        }\n    };\n    BidiHandler.prototype.getDocumentRow = function () {\n        var docRow = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            if (index >= 0)\n                docRow = this.session.$docRowCache[index];\n        }\n        return docRow;\n    };\n    BidiHandler.prototype.getSplitIndex = function () {\n        var splitIndex = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            while (this.currentRow - splitIndex > 0) {\n                currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n                if (currentIndex !== prevIndex)\n                    break;\n                prevIndex = currentIndex;\n                splitIndex++;\n            }\n        }\n        else {\n            splitIndex = this.currentRow;\n        }\n        return splitIndex;\n    };\n    BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) {\n        if (docRow === undefined)\n            docRow = this.getDocumentRow();\n        var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n        this.wrapIndent = 0;\n        this.line = this.session.getLine(docRow);\n        this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n        if (this.session.$useWrapMode) {\n            var splits = this.session.$wrapData[docRow];\n            if (splits) {\n                if (splitIndex === undefined)\n                    splitIndex = this.getSplitIndex();\n                if (splitIndex > 0 && splits.length) {\n                    this.wrapIndent = splits.indent;\n                    this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n                    this.line = (splitIndex < splits.length) ?\n                        this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n                        this.line.substring(splits[splits.length - 1]);\n                }\n                else {\n                    this.line = this.line.substring(0, splits[splitIndex]);\n                }\n                if (splitIndex == splits.length) {\n                    this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n                }\n            }\n        }\n        else {\n            this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n        }\n        var session = this.session, shift = 0, size;\n        this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n            if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n                size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n                shift += size - 1;\n                return lang.stringRepeat(bidiUtil.DOT, size);\n            }\n            return ch;\n        });\n        if (this.isRtlDir) {\n            this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n            this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n        }\n    };\n    BidiHandler.prototype.updateBidiMap = function () {\n        var textCharTypes = [];\n        if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n            this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n        }\n        else {\n            this.bidiMap = {};\n        }\n    };\n    BidiHandler.prototype.markAsDirty = function () {\n        this.currentRow = null;\n    };\n    BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) {\n        if (this.characterWidth === fontMetrics.$characterSize.width)\n            return;\n        this.fontMetrics = fontMetrics;\n        var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n        var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n        this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n        this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n        this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n        this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n        this.currentRow = null;\n    };\n    BidiHandler.prototype.setShowInvisibles = function (showInvisibles) {\n        this.showInvisibles = showInvisibles;\n        this.currentRow = null;\n    };\n    BidiHandler.prototype.setEolChar = function (eolChar) {\n        this.EOL = eolChar;\n    };\n    BidiHandler.prototype.setContentWidth = function (width) {\n        this.contentWidth = width;\n    };\n    BidiHandler.prototype.isRtlLine = function (row) {\n        if (this.$isRtl)\n            return true;\n        if (row != undefined)\n            return (this.session.getLine(row).charAt(0) == this.RLE);\n        else\n            return this.isRtlDir;\n    };\n    BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) {\n        var cursor = editor.getCursorPosition();\n        for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n            if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n                editor.session.doc.removeInLine(row, 0, 1);\n            else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n                editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n        }\n    };\n    BidiHandler.prototype.getPosLeft = function (col) {\n        col -= this.wrapIndent;\n        var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n        var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n        var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n        if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n            visualIdx++;\n        for (var i = 0; i < visualIdx; i++) {\n            left += this.charWidths[levels[i]];\n        }\n        if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n            left += this.charWidths[levels[visualIdx]];\n        if (this.wrapIndent)\n            left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n        if (this.isRtlDir)\n            left += this.rtlLineOffset;\n        return left;\n    };\n    BidiHandler.prototype.getSelections = function (startCol, endCol) {\n        var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n        if (this.wrapIndent)\n            offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n        for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n            logIdx = map.logicalFromVisual[visIdx];\n            level = levels[visIdx];\n            isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n            if (isSelected && !isSelectedPrev) {\n                selectionStart = offset;\n            }\n            else if (!isSelected && isSelectedPrev) {\n                selections.push({ left: selectionStart, width: offset - selectionStart });\n            }\n            offset += this.charWidths[level];\n            isSelectedPrev = isSelected;\n        }\n        if (isSelected && (visIdx === levels.length)) {\n            selections.push({ left: selectionStart, width: offset - selectionStart });\n        }\n        if (this.isRtlDir) {\n            for (var i = 0; i < selections.length; i++) {\n                selections[i].left += this.rtlLineOffset;\n            }\n        }\n        return selections;\n    };\n    BidiHandler.prototype.offsetToCol = function (posX) {\n        if (this.isRtlDir)\n            posX -= this.rtlLineOffset;\n        var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n        if (this.wrapIndent)\n            posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n        while (posX > offset + charWidth / 2) {\n            offset += charWidth;\n            if (visualIdx === levels.length - 1) {\n                charWidth = 0;\n                break;\n            }\n            charWidth = this.charWidths[levels[++visualIdx]];\n        }\n        if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n            if (posX < offset)\n                visualIdx--;\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n        }\n        else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n            logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n                : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n        }\n        else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n            || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n            logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n        }\n        else {\n            if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n                visualIdx--;\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n        }\n        if (logicalIdx === 0 && this.isRtlDir)\n            logicalIdx++;\n        return (logicalIdx + this.wrapIndent);\n    };\n    return BidiHandler;\n}());\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = /** @class */ (function () {\n    function Selection(session) {\n        this.session = session;\n        this.doc = session.getDocument();\n        this.clearSelection();\n        this.cursor = this.lead = this.doc.createAnchor(0, 0);\n        this.anchor = this.doc.createAnchor(0, 0);\n        this.$silent = false;\n        var self = this;\n        this.cursor.on(\"change\", function (e) {\n            self.$cursorChanged = true;\n            if (!self.$silent)\n                self._emit(\"changeCursor\");\n            if (!self.$isEmpty && !self.$silent)\n                self._emit(\"changeSelection\");\n            if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n                self.$desiredColumn = null;\n        });\n        this.anchor.on(\"change\", function () {\n            self.$anchorChanged = true;\n            if (!self.$isEmpty && !self.$silent)\n                self._emit(\"changeSelection\");\n        });\n    }\n    Selection.prototype.isEmpty = function () {\n        return this.$isEmpty || (this.anchor.row == this.lead.row &&\n            this.anchor.column == this.lead.column);\n    };\n    Selection.prototype.isMultiLine = function () {\n        return !this.$isEmpty && this.anchor.row != this.cursor.row;\n    };\n    Selection.prototype.getCursor = function () {\n        return this.lead.getPosition();\n    };\n    Selection.prototype.setAnchor = function (row, column) {\n        this.$isEmpty = false;\n        this.anchor.setPosition(row, column);\n    };\n    Selection.prototype.getAnchor = function () {\n        if (this.$isEmpty)\n            return this.getSelectionLead();\n        return this.anchor.getPosition();\n    };\n    Selection.prototype.getSelectionLead = function () {\n        return this.lead.getPosition();\n    };\n    Selection.prototype.isBackwards = function () {\n        var anchor = this.anchor;\n        var lead = this.lead;\n        return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n    };\n    Selection.prototype.getRange = function () {\n        var anchor = this.anchor;\n        var lead = this.lead;\n        if (this.$isEmpty)\n            return Range.fromPoints(lead, lead);\n        return this.isBackwards()\n            ? Range.fromPoints(lead, anchor)\n            : Range.fromPoints(anchor, lead);\n    };\n    Selection.prototype.clearSelection = function () {\n        if (!this.$isEmpty) {\n            this.$isEmpty = true;\n            this._emit(\"changeSelection\");\n        }\n    };\n    Selection.prototype.selectAll = function () {\n        this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n    };\n    Selection.prototype.setRange = function (range, reverse) {\n        var start = reverse ? range.end : range.start;\n        var end = reverse ? range.start : range.end;\n        this.$setSelection(start.row, start.column, end.row, end.column);\n    };\n    Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n        if (this.$silent)\n            return;\n        var wasEmpty = this.$isEmpty;\n        var wasMultiselect = this.inMultiSelectMode;\n        this.$silent = true;\n        this.$cursorChanged = this.$anchorChanged = false;\n        this.anchor.setPosition(anchorRow, anchorColumn);\n        this.cursor.setPosition(cursorRow, cursorColumn);\n        this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n        this.$silent = false;\n        if (this.$cursorChanged)\n            this._emit(\"changeCursor\");\n        if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n            this._emit(\"changeSelection\");\n    };\n    Selection.prototype.$moveSelection = function (mover) {\n        var lead = this.lead;\n        if (this.$isEmpty)\n            this.setSelectionAnchor(lead.row, lead.column);\n        mover.call(this);\n    };\n    Selection.prototype.selectTo = function (row, column) {\n        this.$moveSelection(function () {\n            this.moveCursorTo(row, column);\n        });\n    };\n    Selection.prototype.selectToPosition = function (pos) {\n        this.$moveSelection(function () {\n            this.moveCursorToPosition(pos);\n        });\n    };\n    Selection.prototype.moveTo = function (row, column) {\n        this.clearSelection();\n        this.moveCursorTo(row, column);\n    };\n    Selection.prototype.moveToPosition = function (pos) {\n        this.clearSelection();\n        this.moveCursorToPosition(pos);\n    };\n    Selection.prototype.selectUp = function () {\n        this.$moveSelection(this.moveCursorUp);\n    };\n    Selection.prototype.selectDown = function () {\n        this.$moveSelection(this.moveCursorDown);\n    };\n    Selection.prototype.selectRight = function () {\n        this.$moveSelection(this.moveCursorRight);\n    };\n    Selection.prototype.selectLeft = function () {\n        this.$moveSelection(this.moveCursorLeft);\n    };\n    Selection.prototype.selectLineStart = function () {\n        this.$moveSelection(this.moveCursorLineStart);\n    };\n    Selection.prototype.selectLineEnd = function () {\n        this.$moveSelection(this.moveCursorLineEnd);\n    };\n    Selection.prototype.selectFileEnd = function () {\n        this.$moveSelection(this.moveCursorFileEnd);\n    };\n    Selection.prototype.selectFileStart = function () {\n        this.$moveSelection(this.moveCursorFileStart);\n    };\n    Selection.prototype.selectWordRight = function () {\n        this.$moveSelection(this.moveCursorWordRight);\n    };\n    Selection.prototype.selectWordLeft = function () {\n        this.$moveSelection(this.moveCursorWordLeft);\n    };\n    Selection.prototype.getWordRange = function (row, column) {\n        if (typeof column == \"undefined\") {\n            var cursor = row || this.lead;\n            row = cursor.row;\n            column = cursor.column;\n        }\n        return this.session.getWordRange(row, column);\n    };\n    Selection.prototype.selectWord = function () {\n        this.setSelectionRange(this.getWordRange());\n    };\n    Selection.prototype.selectAWord = function () {\n        var cursor = this.getCursor();\n        var range = this.session.getAWordRange(cursor.row, cursor.column);\n        this.setSelectionRange(range);\n    };\n    Selection.prototype.getLineRange = function (row, excludeLastChar) {\n        var rowStart = typeof row == \"number\" ? row : this.lead.row;\n        var rowEnd;\n        var foldLine = this.session.getFoldLine(rowStart);\n        if (foldLine) {\n            rowStart = foldLine.start.row;\n            rowEnd = foldLine.end.row;\n        }\n        else {\n            rowEnd = rowStart;\n        }\n        if (excludeLastChar === true)\n            return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n        else\n            return new Range(rowStart, 0, rowEnd + 1, 0);\n    };\n    Selection.prototype.selectLine = function () {\n        this.setSelectionRange(this.getLineRange());\n    };\n    Selection.prototype.moveCursorUp = function () {\n        this.moveCursorBy(-1, 0);\n    };\n    Selection.prototype.moveCursorDown = function () {\n        this.moveCursorBy(1, 0);\n    };\n    Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n        var start = cursor.column;\n        var end = cursor.column + tabSize;\n        if (direction < 0) {\n            start = cursor.column - tabSize;\n            end = cursor.column;\n        }\n        return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n    };\n    Selection.prototype.moveCursorLeft = function () {\n        var cursor = this.lead.getPosition(), fold;\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n        }\n        else if (cursor.column === 0) {\n            if (cursor.row > 0) {\n                this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, -tabSize);\n            }\n            else {\n                this.moveCursorBy(0, -1);\n            }\n        }\n    };\n    Selection.prototype.moveCursorRight = function () {\n        var cursor = this.lead.getPosition(), fold;\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n        }\n        else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n            if (this.lead.row < this.doc.getLength() - 1) {\n                this.moveCursorTo(this.lead.row + 1, 0);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            var cursor = this.lead;\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, tabSize);\n            }\n            else {\n                this.moveCursorBy(0, 1);\n            }\n        }\n    };\n    Selection.prototype.moveCursorLineStart = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var screenRow = this.session.documentToScreenRow(row, column);\n        var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n        var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n        var leadingSpace = beforeCursor.match(/^\\s*/);\n        if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n            firstColumnPosition.column += leadingSpace[0].length;\n        this.moveCursorToPosition(firstColumnPosition);\n    };\n    Selection.prototype.moveCursorLineEnd = function () {\n        var lead = this.lead;\n        var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n        if (this.lead.column == lineEnd.column) {\n            var line = this.session.getLine(lineEnd.row);\n            if (lineEnd.column == line.length) {\n                var textEnd = line.search(/\\s+$/);\n                if (textEnd > 0)\n                    lineEnd.column = textEnd;\n            }\n        }\n        this.moveCursorTo(lineEnd.row, lineEnd.column);\n    };\n    Selection.prototype.moveCursorFileEnd = function () {\n        var row = this.doc.getLength() - 1;\n        var column = this.doc.getLine(row).length;\n        this.moveCursorTo(row, column);\n    };\n    Selection.prototype.moveCursorFileStart = function () {\n        this.moveCursorTo(0, 0);\n    };\n    Selection.prototype.moveCursorLongWordRight = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n            return;\n        }\n        if (this.session.nonTokenRe.exec(rightOfCursor)) {\n            column += this.session.nonTokenRe.lastIndex;\n            this.session.nonTokenRe.lastIndex = 0;\n            rightOfCursor = line.substring(column);\n        }\n        if (column >= line.length) {\n            this.moveCursorTo(row, line.length);\n            this.moveCursorRight();\n            if (row < this.doc.getLength() - 1)\n                this.moveCursorWordRight();\n            return;\n        }\n        if (this.session.tokenRe.exec(rightOfCursor)) {\n            column += this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n        this.moveCursorTo(row, column);\n    };\n    Selection.prototype.moveCursorLongWordLeft = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n            return;\n        }\n        var str = this.session.getFoldStringAt(row, column, -1);\n        if (str == null) {\n            str = this.doc.getLine(row).substring(0, column);\n        }\n        var leftOfCursor = lang.stringReverse(str);\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        if (this.session.nonTokenRe.exec(leftOfCursor)) {\n            column -= this.session.nonTokenRe.lastIndex;\n            leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n            this.session.nonTokenRe.lastIndex = 0;\n        }\n        if (column <= 0) {\n            this.moveCursorTo(row, 0);\n            this.moveCursorLeft();\n            if (row > 0)\n                this.moveCursorWordLeft();\n            return;\n        }\n        if (this.session.tokenRe.exec(leftOfCursor)) {\n            column -= this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n        this.moveCursorTo(row, column);\n    };\n    Selection.prototype.$shortWordEndIndex = function (rightOfCursor) {\n        var index = 0, ch;\n        var whitespaceRe = /\\s/;\n        var tokenRe = this.session.tokenRe;\n        tokenRe.lastIndex = 0;\n        if (this.session.tokenRe.exec(rightOfCursor)) {\n            index = this.session.tokenRe.lastIndex;\n        }\n        else {\n            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                index++;\n            if (index < 1) {\n                tokenRe.lastIndex = 0;\n                while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n                    tokenRe.lastIndex = 0;\n                    index++;\n                    if (whitespaceRe.test(ch)) {\n                        if (index > 2) {\n                            index--;\n                            break;\n                        }\n                        else {\n                            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                                index++;\n                            if (index > 2)\n                                break;\n                        }\n                    }\n                }\n            }\n        }\n        tokenRe.lastIndex = 0;\n        return index;\n    };\n    Selection.prototype.moveCursorShortWordRight = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold)\n            return this.moveCursorTo(fold.end.row, fold.end.column);\n        if (column == line.length) {\n            var l = this.doc.getLength();\n            do {\n                row++;\n                rightOfCursor = this.doc.getLine(row);\n            } while (row < l && /^\\s*$/.test(rightOfCursor));\n            if (!/^\\s+/.test(rightOfCursor))\n                rightOfCursor = \"\";\n            column = 0;\n        }\n        var index = this.$shortWordEndIndex(rightOfCursor);\n        this.moveCursorTo(row, column + index);\n    };\n    Selection.prototype.moveCursorShortWordLeft = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1))\n            return this.moveCursorTo(fold.start.row, fold.start.column);\n        var line = this.session.getLine(row).substring(0, column);\n        if (column === 0) {\n            do {\n                row--;\n                line = this.doc.getLine(row);\n            } while (row > 0 && /^\\s*$/.test(line));\n            column = line.length;\n            if (!/\\s+$/.test(line))\n                line = \"\";\n        }\n        var leftOfCursor = lang.stringReverse(line);\n        var index = this.$shortWordEndIndex(leftOfCursor);\n        return this.moveCursorTo(row, column - index);\n    };\n    Selection.prototype.moveCursorWordRight = function () {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordRight();\n        else\n            this.moveCursorShortWordRight();\n    };\n    Selection.prototype.moveCursorWordLeft = function () {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordLeft();\n        else\n            this.moveCursorShortWordLeft();\n    };\n    Selection.prototype.moveCursorBy = function (rows, chars) {\n        var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n        var offsetX;\n        if (chars === 0) {\n            if (rows !== 0) {\n                if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n                    offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n                    screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n                }\n                else {\n                    offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n                }\n            }\n            if (this.$desiredColumn)\n                screenPos.column = this.$desiredColumn;\n            else\n                this.$desiredColumn = screenPos.column;\n        }\n        if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n            var widget = this.session.lineWidgets[this.lead.row];\n            if (rows < 0)\n                rows -= widget.rowsAbove || 0;\n            else if (rows > 0)\n                rows += widget.rowCount - (widget.rowsAbove || 0);\n        }\n        var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n        if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n        }\n        this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n    };\n    Selection.prototype.moveCursorToPosition = function (position) {\n        this.moveCursorTo(position.row, position.column);\n    };\n    Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) {\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            row = fold.start.row;\n            column = fold.start.column;\n        }\n        this.$keepDesiredColumnOnChange = true;\n        var line = this.session.getLine(row);\n        if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n            if (this.lead.row == row && this.lead.column == column + 1)\n                column = column - 1;\n            else\n                column = column + 1;\n        }\n        this.lead.setPosition(row, column);\n        this.$keepDesiredColumnOnChange = false;\n        if (!keepDesiredColumn)\n            this.$desiredColumn = null;\n    };\n    Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n        var pos = this.session.screenToDocumentPosition(row, column);\n        this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n    };\n    Selection.prototype.detach = function () {\n        this.lead.detach();\n        this.anchor.detach();\n    };\n    Selection.prototype.fromOrientedRange = function (range) {\n        this.setSelectionRange(range, range.cursor == range.start);\n        this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n    };\n    Selection.prototype.toOrientedRange = function (range) {\n        var r = this.getRange();\n        if (range) {\n            range.start.column = r.start.column;\n            range.start.row = r.start.row;\n            range.end.column = r.end.column;\n            range.end.row = r.end.row;\n        }\n        else {\n            range = r;\n        }\n        range.cursor = this.isBackwards() ? range.start : range.end;\n        range.desiredColumn = this.$desiredColumn;\n        return range;\n    };\n    Selection.prototype.getRangeOfMovements = function (func) {\n        var start = this.getCursor();\n        try {\n            func(this);\n            var end = this.getCursor();\n            return Range.fromPoints(start, end);\n        }\n        catch (e) {\n            return Range.fromPoints(start, start);\n        }\n        finally {\n            this.moveCursorToPosition(start);\n        }\n    };\n    Selection.prototype.toJSON = function () {\n        if (this.rangeCount) { var data = this.ranges.map(function (r) {\n                var r1 = r.clone();\n                r1.isBackwards = r.cursor == r.start;\n                return r1;\n            });\n        }\n        else { var data = this.getRange();\n            data.isBackwards = this.isBackwards();\n        }\n        return data;\n    };\n    Selection.prototype.fromJSON = function (data) {\n        if (data.start == undefined) {\n            if (this.rangeList && data.length > 1) {\n                this.toSingleRange(data[0]);\n                for (var i = data.length; i--;) {\n                    var r = Range.fromPoints(data[i].start, data[i].end);\n                    if (data[i].isBackwards)\n                        r.cursor = r.start;\n                    this.addRange(r, true);\n                }\n                return;\n            }\n            else {\n                data = data[0];\n            }\n        }\n        if (this.rangeList)\n            this.toSingleRange(data);\n        this.setSelectionRange(data, data.isBackwards);\n    };\n    Selection.prototype.isEqual = function (data) {\n        if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n            return false;\n        if (!data.length || !this.ranges)\n            return this.getRange().isEqual(data);\n        for (var i = this.ranges.length; i--;) {\n            if (!this.ranges[i].isEqual(data[i]))\n                return false;\n        }\n        return true;\n    };\n    return Selection;\n}());\nSelection.prototype.setSelectionAnchor = Selection.prototype.setAnchor;\nSelection.prototype.getSelectionAnchor = Selection.prototype.getAnchor;\nSelection.prototype.setSelectionRange = Selection.prototype.setRange;\noop.implement(Selection.prototype, EventEmitter);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/report_error\"], function(require, exports, module){\"use strict\";\nvar reportError = require(\"./lib/report_error\").reportError;\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n    function Tokenizer(rules) {\n        this.splitRegex;\n        this.states = rules;\n        this.regExps = {};\n        this.matchMappings = {};\n        for (var key in this.states) {\n            var state = this.states[key];\n            var ruleRegExps = [];\n            var matchTotal = 0;\n            var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n            var flag = \"g\";\n            var splitterRurles = [];\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                if (rule.defaultToken)\n                    mapping.defaultToken = rule.defaultToken;\n                if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n                    flag += \"i\";\n                if (rule.unicode && flag.indexOf(\"u\") === -1)\n                    flag += \"u\";\n                if (rule.regex == null)\n                    continue;\n                if (rule.regex instanceof RegExp)\n                    rule.regex = rule.regex.toString().slice(1, -1);\n                var adjustedregex = rule.regex;\n                var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n                if (Array.isArray(rule.token)) {\n                    if (rule.token.length == 1 || matchcount == 1) {\n                        rule.token = rule.token[0];\n                    }\n                    else if (matchcount - 1 != rule.token.length) {\n                        this.reportError(\"number of classes and regexp groups doesn't match\", {\n                            rule: rule,\n                            groupCount: matchcount - 1\n                        });\n                        rule.token = rule.token[0];\n                    }\n                    else {\n                        rule.tokenArray = rule.token;\n                        rule.token = null;\n                        rule.onMatch = this.$arrayTokens;\n                    }\n                }\n                else if (typeof rule.token == \"function\" && !rule.onMatch) {\n                    if (matchcount > 1)\n                        rule.onMatch = this.$applyToken;\n                    else\n                        rule.onMatch = rule.token;\n                }\n                if (matchcount > 1) {\n                    if (/\\\\\\d/.test(rule.regex)) {\n                        adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n                            return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n                        });\n                    }\n                    else {\n                        matchcount = 1;\n                        adjustedregex = this.removeCapturingGroups(rule.regex);\n                    }\n                    if (!rule.splitRegex && typeof rule.token != \"string\")\n                        splitterRurles.push(rule); // flag will be known only at the very end\n                }\n                mapping[matchTotal] = i;\n                matchTotal += matchcount;\n                ruleRegExps.push(adjustedregex);\n                if (!rule.onMatch)\n                    rule.onMatch = null;\n            }\n            if (!ruleRegExps.length) {\n                mapping[0] = 0;\n                ruleRegExps.push(\"$\");\n            }\n            splitterRurles.forEach(function (rule) {\n                rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n            }, this);\n            this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n        }\n    }\n    Tokenizer.prototype.$setMaxTokenCount = function (m) {\n        MAX_TOKEN_COUNT = m | 0;\n    };\n    Tokenizer.prototype.$applyToken = function (str) {\n        var values = this.splitRegex.exec(str).slice(1);\n        var types = this.token.apply(this, values);\n        if (typeof types === \"string\")\n            return [{ type: types, value: str }];\n        var tokens = [];\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i]\n                };\n        }\n        return tokens;\n    };\n    Tokenizer.prototype.$arrayTokens = function (str) {\n        if (!str)\n            return [];\n        var values = this.splitRegex.exec(str);\n        if (!values)\n            return \"text\";\n        var tokens = [];\n        var types = this.tokenArray;\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i + 1])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i + 1]\n                };\n        }\n        return tokens;\n    };\n    Tokenizer.prototype.removeCapturingGroups = function (src) {\n        var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n        return r;\n    };\n    Tokenizer.prototype.createSplitterRegexp = function (src, flag) {\n        if (src.indexOf(\"(?=\") != -1) {\n            var stack = 0;\n            var inChClass = false;\n            var lastCapture = {};\n            src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n                if (inChClass) {\n                    inChClass = square != \"]\";\n                }\n                else if (square) {\n                    inChClass = true;\n                }\n                else if (parenClose) {\n                    if (stack == lastCapture.stack) {\n                        lastCapture.end = index + 1;\n                        lastCapture.stack = -1;\n                    }\n                    stack--;\n                }\n                else if (parenOpen) {\n                    stack++;\n                    if (parenOpen.length != 1) {\n                        lastCapture.stack = stack;\n                        lastCapture.start = index;\n                    }\n                }\n                return m;\n            });\n            if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n                src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n        }\n        if (src.charAt(0) != \"^\")\n            src = \"^\" + src;\n        if (src.charAt(src.length - 1) != \"$\")\n            src += \"$\";\n        return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n    };\n    Tokenizer.prototype.getLineTokens = function (line, startState) {\n        if (startState && typeof startState != \"string\") {\n            var stack = startState.slice(0);\n            startState = stack[0];\n            if (startState === \"#tmp\") {\n                stack.shift();\n                startState = stack.shift();\n            }\n        }\n        else\n            var stack = [];\n        var currentState = /**@type{string}*/ (startState) || \"start\";\n        var state = this.states[currentState];\n        if (!state) {\n            currentState = \"start\";\n            state = this.states[currentState];\n        }\n        var mapping = this.matchMappings[currentState];\n        var re = this.regExps[currentState];\n        re.lastIndex = 0;\n        var match, tokens = [];\n        var lastIndex = 0;\n        var matchAttempts = 0;\n        var token = { type: null, value: \"\" };\n        while (match = re.exec(line)) {\n            var type = mapping.defaultToken;\n            var rule = null;\n            var value = match[0];\n            var index = re.lastIndex;\n            if (index - value.length > lastIndex) {\n                var skipped = line.substring(lastIndex, index - value.length);\n                if (token.type == type) {\n                    token.value += skipped;\n                }\n                else {\n                    if (token.type)\n                        tokens.push(token);\n                    token = { type: type, value: skipped };\n                }\n            }\n            for (var i = 0; i < match.length - 2; i++) {\n                if (match[i + 1] === undefined)\n                    continue;\n                rule = state[mapping[i]];\n                if (rule.onMatch)\n                    type = rule.onMatch(value, currentState, stack, line);\n                else\n                    type = rule.token;\n                if (rule.next) {\n                    if (typeof rule.next == \"string\") {\n                        currentState = rule.next;\n                    }\n                    else {\n                        currentState = rule.next(currentState, stack);\n                    }\n                    state = this.states[currentState];\n                    if (!state) {\n                        this.reportError(\"state doesn't exist\", currentState);\n                        currentState = \"start\";\n                        state = this.states[currentState];\n                    }\n                    mapping = this.matchMappings[currentState];\n                    lastIndex = index;\n                    re = this.regExps[currentState];\n                    re.lastIndex = index;\n                }\n                if (rule.consumeLineEnd)\n                    lastIndex = index;\n                break;\n            }\n            if (value) {\n                if (typeof type === \"string\") {\n                    if ((!rule || rule.merge !== false) && token.type === type) {\n                        token.value += value;\n                    }\n                    else {\n                        if (token.type)\n                            tokens.push(token);\n                        token = { type: type, value: value };\n                    }\n                }\n                else if (type) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = { type: null, value: \"\" };\n                    for (var i = 0; i < type.length; i++)\n                        tokens.push(type[i]);\n                }\n            }\n            if (lastIndex == line.length)\n                break;\n            lastIndex = index;\n            if (matchAttempts++ > MAX_TOKEN_COUNT) {\n                if (matchAttempts > 2 * line.length) {\n                    this.reportError(\"infinite loop with in ace tokenizer\", {\n                        startState: startState,\n                        line: line\n                    });\n                }\n                while (lastIndex < line.length) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {\n                        value: line.substring(lastIndex, lastIndex += 500),\n                        type: \"overflow\"\n                    };\n                }\n                currentState = \"start\";\n                stack = [];\n                break;\n            }\n        }\n        if (token.type)\n            tokens.push(token);\n        if (stack.length > 1) {\n            if (stack[0] !== currentState)\n                stack.unshift(\"#tmp\", currentState);\n        }\n        return {\n            tokens: tokens,\n            state: stack.length ? stack : currentState\n        };\n    };\n    return Tokenizer;\n}());\nTokenizer.prototype.reportError = reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nvar deepCopy = require(\"../lib/deep_copy\").deepCopy;\nvar TextHighlightRules;\nTextHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"empty_line\",\n                regex: '^$'\n            }, {\n                defaultToken: \"text\"\n            }]\n    };\n};\n(function () {\n    this.addRules = function (rules, prefix) {\n        if (!prefix) {\n            for (var key in rules)\n                this.$rules[key] = rules[key];\n            return;\n        }\n        for (var key in rules) {\n            var state = rules[key];\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                if (rule.next || rule.onMatch) {\n                    if (typeof rule.next == \"string\") {\n                        if (rule.next.indexOf(prefix) !== 0)\n                            rule.next = prefix + rule.next;\n                    }\n                    if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n                        rule.nextState = prefix + rule.nextState;\n                }\n            }\n            this.$rules[prefix + key] = state;\n        }\n    };\n    this.getRules = function () {\n        return this.$rules;\n    };\n    this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n        var embedRules = typeof HighlightRules == \"function\"\n            ? new HighlightRules().getRules()\n            : HighlightRules;\n        if (states) {\n            for (var i = 0; i < states.length; i++)\n                states[i] = prefix + states[i];\n        }\n        else {\n            states = [];\n            for (var key in embedRules)\n                states.push(prefix + key);\n        }\n        this.addRules(embedRules, prefix);\n        if (escapeRules) {\n            var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n            for (var i = 0; i < states.length; i++)\n                addRules.apply(this.$rules[states[i]], deepCopy(escapeRules));\n        }\n        if (!this.$embeds)\n            this.$embeds = [];\n        this.$embeds.push(prefix);\n    };\n    this.getEmbeds = function () {\n        return this.$embeds;\n    };\n    var pushState = function (currentState, stack) {\n        if (currentState != \"start\" || stack.length)\n            stack.unshift(this.nextState, currentState);\n        return this.nextState;\n    };\n    var popState = function (currentState, stack) {\n        stack.shift();\n        return stack.shift() || \"start\";\n    };\n    this.normalizeRules = function () {\n        var id = 0;\n        var rules = this.$rules;\n        function processState(key) {\n            var state = rules[key];\n            state[\"processed\"] = true;\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                var toInsert = null;\n                if (Array.isArray(rule)) {\n                    toInsert = rule;\n                    rule = {};\n                }\n                if (!rule.regex && rule.start) {\n                    rule.regex = rule.start;\n                    if (!rule.next)\n                        rule.next = [];\n                    rule.next.push({\n                        defaultToken: rule.token\n                    }, {\n                        token: rule.token + \".end\",\n                        regex: rule.end || rule.start,\n                        next: \"pop\"\n                    });\n                    rule.token = rule.token + \".start\";\n                    rule.push = true;\n                }\n                var next = rule.next || rule.push;\n                if (next && Array.isArray(next)) {\n                    var stateName = rule.stateName;\n                    if (!stateName) {\n                        stateName = rule.token;\n                        if (typeof stateName != \"string\")\n                            stateName = stateName[0] || \"\";\n                        if (rules[stateName])\n                            stateName += id++;\n                    }\n                    rules[stateName] = next;\n                    rule.next = stateName;\n                    processState(stateName);\n                }\n                else if (next == \"pop\") {\n                    rule.next = popState;\n                }\n                if (rule.push) {\n                    rule.nextState = rule.next || rule.push;\n                    rule.next = pushState;\n                    delete rule.push;\n                }\n                if (rule.rules) {\n                    for (var r in rule.rules) {\n                        if (rules[r]) {\n                            if (rules[r].push)\n                                rules[r].push.apply(rules[r], rule.rules[r]);\n                        }\n                        else {\n                            rules[r] = rule.rules[r];\n                        }\n                    }\n                }\n                var includeName = typeof rule == \"string\" ? rule : rule.include;\n                if (includeName) {\n                    if (includeName === \"$self\")\n                        includeName = \"start\";\n                    if (Array.isArray(includeName))\n                        toInsert = includeName.map(function (x) { return rules[x]; });\n                    else\n                        toInsert = rules[includeName];\n                }\n                if (toInsert) {\n                    var args = [i, 1].concat(toInsert);\n                    if (rule.noEscape)\n                        args = args.filter(function (x) { return !x.next; });\n                    state.splice.apply(state, args);\n                    i--;\n                }\n                if (rule.keywordMap) {\n                    rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n                    delete rule.defaultToken;\n                }\n            }\n        }\n        Object.keys(rules).forEach(processState, this);\n    };\n    this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n        var keywords = Object.create(null);\n        this.$keywordList = [];\n        Object.keys(map).forEach(function (className) {\n            var a = map[className];\n            var list = a.split(splitChar || \"|\");\n            for (var i = list.length; i--;) {\n                var word = list[i];\n                this.$keywordList.push(word);\n                if (ignoreCase)\n                    word = word.toLowerCase();\n                keywords[word] = className;\n            }\n        }, this);\n        map = null;\n        return ignoreCase\n            ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n            : function (value) { return keywords[value] || defaultToken; };\n    };\n    this.getKeywords = function () {\n        return this.$keywords;\n    };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour;\nBehaviour = function () {\n    this.$behaviours = {};\n};\n(function () {\n    this.add = function (name, action, callback) {\n        switch (undefined) {\n            case this.$behaviours:\n                this.$behaviours = {};\n            case this.$behaviours[name]:\n                this.$behaviours[name] = {};\n        }\n        this.$behaviours[name][action] = callback;\n    };\n    this.addBehaviours = function (behaviours) {\n        for (var key in behaviours) {\n            for (var action in behaviours[key]) {\n                this.add(key, action, behaviours[key][action]);\n            }\n        }\n    };\n    this.remove = function (name) {\n        if (this.$behaviours && this.$behaviours[name]) {\n            delete this.$behaviours[name];\n        }\n    };\n    this.inherit = function (mode, filter) {\n        if (typeof mode === \"function\") {\n            var behaviours = new mode().getBehaviours(filter);\n        }\n        else {\n            var behaviours = mode.getBehaviours(filter);\n        }\n        this.addBehaviours(behaviours);\n    };\n    this.getBehaviours = function (filter) {\n        if (!filter) {\n            return this.$behaviours;\n        }\n        else {\n            var ret = {};\n            for (var i = 0; i < filter.length; i++) {\n                if (this.$behaviours[filter[i]]) {\n                    ret[filter[i]] = this.$behaviours[filter[i]];\n                }\n            }\n            return ret;\n        }\n    };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = /** @class */ (function () {\n    function TokenIterator(session, initialRow, initialColumn) {\n        this.$session = session;\n        this.$row = initialRow;\n        this.$rowTokens = session.getTokens(initialRow);\n        var token = session.getTokenAt(initialRow, initialColumn);\n        this.$tokenIndex = token ? token.index : -1;\n    }\n    TokenIterator.prototype.stepBackward = function () {\n        this.$tokenIndex -= 1;\n        while (this.$tokenIndex < 0) {\n            this.$row -= 1;\n            if (this.$row < 0) {\n                this.$row = 0;\n                return null;\n            }\n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = this.$rowTokens.length - 1;\n        }\n        return this.$rowTokens[this.$tokenIndex];\n    };\n    TokenIterator.prototype.stepForward = function () {\n        this.$tokenIndex += 1;\n        var rowCount;\n        while (this.$tokenIndex >= this.$rowTokens.length) {\n            this.$row += 1;\n            if (!rowCount)\n                rowCount = this.$session.getLength();\n            if (this.$row >= rowCount) {\n                this.$row = rowCount - 1;\n                return null;\n            }\n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = 0;\n        }\n        return this.$rowTokens[this.$tokenIndex];\n    };\n    TokenIterator.prototype.getCurrentToken = function () {\n        return this.$rowTokens[this.$tokenIndex];\n    };\n    TokenIterator.prototype.getCurrentTokenRow = function () {\n        return this.$row;\n    };\n    TokenIterator.prototype.getCurrentTokenColumn = function () {\n        var rowTokens = this.$rowTokens;\n        var tokenIndex = this.$tokenIndex;\n        var column = rowTokens[tokenIndex].start;\n        if (column !== undefined)\n            return column;\n        column = 0;\n        while (tokenIndex > 0) {\n            tokenIndex -= 1;\n            column += rowTokens[tokenIndex].value.length;\n        }\n        return column;\n    };\n    TokenIterator.prototype.getCurrentTokenPosition = function () {\n        return { row: this.$row, column: this.getCurrentTokenColumn() };\n    };\n    TokenIterator.prototype.getCurrentTokenRange = function () {\n        var token = this.$rowTokens[this.$tokenIndex];\n        var column = this.getCurrentTokenColumn();\n        return new Range(this.$row, column, this.$row, column + token.value.length);\n    };\n    return TokenIterator;\n}());\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n    var id = -1;\n    if (editor.multiSelect) {\n        id = editor.selection.index;\n        if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n            contextCache = { rangeCount: editor.multiSelect.rangeCount };\n    }\n    if (contextCache[id])\n        return context = contextCache[id];\n    context = contextCache[id] = {\n        autoInsertedBrackets: 0,\n        autoInsertedRow: -1,\n        autoInsertedLineEnd: \"\",\n        maybeInsertedBrackets: 0,\n        maybeInsertedRow: -1,\n        maybeInsertedLineStart: \"\",\n        maybeInsertedLineEnd: \"\"\n    };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n    var rowDiff = selection.end.row - selection.start.row;\n    return {\n        text: opening + selected + closing,\n        selection: [\n            0,\n            selection.start.column + 1,\n            rowDiff,\n            selection.end.column + (rowDiff ? 0 : 1)\n        ]\n    };\n};\nvar CstyleBehaviour;\nCstyleBehaviour = function (options) {\n    options = options || {};\n    this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n        var cursor = editor.getCursorPosition();\n        var line = session.doc.getLine(cursor.row);\n        if (text == '{') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            var token = session.getTokenAt(cursor.row, cursor.column);\n            if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '{', '}');\n            }\n            else if (token && /(?:string)\\.quasi|\\.xml/.test(token.type)) {\n                var excludeTokens = [\n                    /tag\\-(?:open|name)/, /attribute\\-name/\n                ];\n                if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\\.quasi/.test(token.type)\n                    && token.value[cursor.column - token.start - 1] !== '$')\n                    return;\n                CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                return {\n                    text: '{}',\n                    selection: [1, 1]\n                };\n            }\n            else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) {\n                    CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                    return {\n                        text: '{}',\n                        selection: [1, 1]\n                    };\n                }\n                else {\n                    CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n                    return {\n                        text: '{',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n        else if (text == '}') {\n            initContext(editor);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == '}') {\n                var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n        else if (text == \"\\n\" || text == \"\\r\\n\") {\n            initContext(editor);\n            var closing = \"\";\n            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n                closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n                CstyleBehaviour.clearMaybeInsertedClosing();\n            }\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === '}') {\n                var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n                if (!openBracePos)\n                    return null;\n                var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n            }\n            else if (closing) {\n                var next_indent = this.$getIndent(line);\n            }\n            else {\n                CstyleBehaviour.clearMaybeInsertedClosing();\n                return;\n            }\n            var indent = next_indent + session.getTabString();\n            return {\n                text: '\\n' + indent + '\\n' + next_indent + closing,\n                selection: [1, indent.length, 1, indent.length]\n            };\n        }\n        else {\n            CstyleBehaviour.clearMaybeInsertedClosing();\n        }\n    });\n    this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '{') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.end.column, range.end.column + 1);\n            if (rightChar == '}') {\n                range.end.column++;\n                return range;\n            }\n            else {\n                context.maybeInsertedBrackets--;\n            }\n        }\n    });\n    this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '(') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '(', ')');\n            }\n            else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n                return {\n                    text: '()',\n                    selection: [1, 1]\n                };\n            }\n        }\n        else if (text == ')') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ')') {\n                var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '(') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ')') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '[') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '[', ']');\n            }\n            else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n                return {\n                    text: '[]',\n                    selection: [1, 1]\n                };\n            }\n        }\n        else if (text == ']') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ']') {\n                var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '[') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ']') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        var quotes = session.$mode.$quotes || defaultQuotes;\n        if (text.length == 1 && quotes[text]) {\n            if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n                return;\n            initContext(editor);\n            var quote = text;\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, quote, quote);\n            }\n            else if (!selected) {\n                var cursor = editor.getCursorPosition();\n                var line = session.doc.getLine(cursor.row);\n                var leftChar = line.substring(cursor.column - 1, cursor.column);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                var token = session.getTokenAt(cursor.row, cursor.column);\n                var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n                    return null;\n                var stringBefore = token && /string|escape/.test(token.type);\n                var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n                var pair;\n                if (rightChar == quote) {\n                    pair = stringBefore !== stringAfter;\n                    if (pair && /string\\.end/.test(rightToken.type))\n                        pair = false;\n                }\n                else {\n                    if (stringBefore && !stringAfter)\n                        return null; // wrap string with different quote\n                    if (stringBefore && stringAfter)\n                        return null; // do not pair quotes inside strings\n                    var wordRe = session.$mode.tokenRe;\n                    wordRe.lastIndex = 0;\n                    var isWordBefore = wordRe.test(leftChar);\n                    wordRe.lastIndex = 0;\n                    var isWordAfter = wordRe.test(rightChar);\n                    var pairQuotesAfter = session.$mode.$pairQuotesAfter;\n                    var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar);\n                    if ((!shouldPairQuotes && isWordBefore) || isWordAfter)\n                        return null; // before or after alphanumeric\n                    if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n                        return null; // there is rightChar and it isn't closing\n                    var charBefore = line[cursor.column - 2];\n                    if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n                        return null;\n                    pair = true;\n                }\n                return {\n                    text: pair ? quote + quote : \"\",\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var quotes = session.$mode.$quotes || defaultQuotes;\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    if (options.closeDocComment !== false) {\n        this.add(\"doc comment end\", \"insertion\", function (state, action, editor, session, text) {\n            if (state === \"doc-start\" && (text === \"\\n\" || text === \"\\r\\n\") && editor.selection.isEmpty()) {\n                var cursor = editor.getCursorPosition();\n                if (cursor.column === 0) {\n                    return;\n                }\n                var line = session.doc.getLine(cursor.row);\n                var nextLine = session.doc.getLine(cursor.row + 1);\n                var tokens = session.getTokens(cursor.row);\n                var index = 0;\n                for (var i = 0; i < tokens.length; i++) {\n                    index += tokens[i].value.length;\n                    var currentToken = tokens[i];\n                    if (index >= cursor.column) {\n                        if (index === cursor.column) {\n                            if (!/\\.doc/.test(currentToken.type)) {\n                                return;\n                            }\n                            if (/\\*\\//.test(currentToken.value)) {\n                                var nextToken = tokens[i + 1];\n                                if (!nextToken || !/\\.doc/.test(nextToken.type)) {\n                                    return;\n                                }\n                            }\n                        }\n                        var cursorPosInToken = cursor.column - (index - currentToken.value.length);\n                        var closeDocPos = currentToken.value.indexOf(\"*/\");\n                        var openDocPos = currentToken.value.indexOf(\"/**\", closeDocPos > -1 ? closeDocPos + 2 : 0);\n                        if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) {\n                            return;\n                        }\n                        if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos\n                            && cursorPosInToken <= openDocPos || !/\\.doc/.test(currentToken.type)) {\n                            return;\n                        }\n                        break;\n                    }\n                }\n                var indent = this.$getIndent(line);\n                if (/\\s*\\*/.test(nextLine)) {\n                    if (/^\\s*\\*/.test(line)) {\n                        return {\n                            text: text + indent + \"* \",\n                            selection: [1, 2 + indent.length, 1, 2 + indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: text + indent + \" * \",\n                            selection: [1, 3 + indent.length, 1, 3 + indent.length]\n                        };\n                    }\n                }\n                if (/\\/\\*\\*/.test(line.substring(0, cursor.column))) {\n                    return {\n                        text: text + indent + \" * \" + text + \" \" + indent + \"*/\",\n                        selection: [1, 4 + indent.length, 1, 4 + indent.length]\n                    };\n                }\n            }\n        });\n    }\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n    var cursor = editor.getCursorPosition();\n    var iterator = new TokenIterator(session, cursor.row, cursor.column);\n    if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n        if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n            return true;\n        var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n        if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n            return false;\n    }\n    iterator.stepForward();\n    return iterator.getCurrentTokenRow() !== cursor.row ||\n        this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour[\"$matchTokenType\"] = function (token, types) {\n    return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour[\"recordAutoInsert\"] = function (editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this[\"isAutoInsertedClosing\"](cursor, line, context.autoInsertedLineEnd[0]))\n        context.autoInsertedBrackets = 0;\n    context.autoInsertedRow = cursor.row;\n    context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n    context.autoInsertedBrackets++;\n};\nCstyleBehaviour[\"recordMaybeInsert\"] = function (editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this[\"isMaybeInsertedClosing\"](cursor, line))\n        context.maybeInsertedBrackets = 0;\n    context.maybeInsertedRow = cursor.row;\n    context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n    context.maybeInsertedLineEnd = line.substr(cursor.column);\n    context.maybeInsertedBrackets++;\n};\nCstyleBehaviour[\"isAutoInsertedClosing\"] = function (cursor, line, bracket) {\n    return context.autoInsertedBrackets > 0 &&\n        cursor.row === context.autoInsertedRow &&\n        bracket === context.autoInsertedLineEnd[0] &&\n        line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour[\"isMaybeInsertedClosing\"] = function (cursor, line) {\n    return context.maybeInsertedBrackets > 0 &&\n        cursor.row === context.maybeInsertedRow &&\n        line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n        line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour[\"popAutoInsertedClosing\"] = function () {\n    context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n    context.autoInsertedBrackets--;\n};\nCstyleBehaviour[\"clearMaybeInsertedClosing\"] = function () {\n    if (context) {\n        context.maybeInsertedBrackets = 0;\n        context.maybeInsertedRow = -1;\n    }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n    str.push(code += wordChars[i]);\n    if (wordChars[i + 1])\n        str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode;\nMode = function () {\n    this.HighlightRules = TextHighlightRules;\n};\n(function () {\n    this.$defaultBehaviour = new CstyleBehaviour();\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n    this.getTokenizer = function () {\n        if (!this.$tokenizer) {\n            this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n            this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n        }\n        return this.$tokenizer;\n    };\n    this.lineCommentStart = \"\";\n    this.blockComment = \"\";\n    this.toggleCommentLines = function (state, session, startRow, endRow) {\n        var doc = session.doc;\n        var ignoreBlankLines = true;\n        var shouldRemove = true;\n        var minIndent = Infinity;\n        var tabSize = session.getTabSize();\n        var insertAtTabStop = false;\n        if (!this.lineCommentStart) {\n            if (!this.blockComment)\n                return false;\n            var lineCommentStart = this.blockComment.start;\n            var lineCommentEnd = this.blockComment.end;\n            var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n            var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n            var comment = function (line, i) {\n                if (testRemove(line, i))\n                    return;\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n                    doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n                }\n            };\n            var uncomment = function (line, i) {\n                var m;\n                if (m = line.match(regexpEnd))\n                    doc.removeInLine(i, line.length - m[0].length, line.length);\n                if (m = line.match(regexpStart))\n                    doc.removeInLine(i, m[1].length, m[0].length);\n            };\n            var testRemove = function (line, row) {\n                if (regexpStart.test(line))\n                    return true;\n                var tokens = session.getTokens(row);\n                for (var i = 0; i < tokens.length; i++) {\n                    if (tokens[i].type === \"comment\")\n                        return true;\n                }\n            };\n        }\n        else {\n            if (Array.isArray(this.lineCommentStart)) {\n                var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n                var lineCommentStart = this.lineCommentStart[0];\n            }\n            else {\n                var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n                var lineCommentStart = this.lineCommentStart;\n            }\n            regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n            insertAtTabStop = session.getUseSoftTabs();\n            var uncomment = function (line, i) {\n                var m = line.match(regexpStart);\n                if (!m)\n                    return;\n                var start = m[1].length, end = m[0].length;\n                if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n                    end--;\n                doc.removeInLine(i, start, end);\n            };\n            var commentWithSpace = lineCommentStart + \" \";\n            var comment = function (line, i) {\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    if (shouldInsertSpace(line, minIndent, minIndent))\n                        doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n                    else\n                        doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n                }\n            };\n            var testRemove = function (line, i) {\n                return regexpStart.test(line);\n            };\n            var shouldInsertSpace = function (line, before, after) {\n                var spaces = 0;\n                while (before-- && line.charAt(before) == \" \")\n                    spaces++;\n                if (spaces % tabSize != 0)\n                    return false;\n                var spaces = 0;\n                while (line.charAt(after++) == \" \")\n                    spaces++;\n                if (tabSize > 2)\n                    return spaces % tabSize != tabSize - 1;\n                else\n                    return spaces % tabSize == 0;\n            };\n        }\n        function iter(fun) {\n            for (var i = startRow; i <= endRow; i++)\n                fun(doc.getLine(i), i);\n        }\n        var minEmptyLength = Infinity;\n        iter(function (line, i) {\n            var indent = line.search(/\\S/);\n            if (indent !== -1) {\n                if (indent < minIndent)\n                    minIndent = indent;\n                if (shouldRemove && !testRemove(line, i))\n                    shouldRemove = false;\n            }\n            else if (minEmptyLength > line.length) {\n                minEmptyLength = line.length;\n            }\n        });\n        if (minIndent == Infinity) {\n            minIndent = minEmptyLength;\n            ignoreBlankLines = false;\n            shouldRemove = false;\n        }\n        if (insertAtTabStop && minIndent % tabSize != 0)\n            minIndent = Math.floor(minIndent / tabSize) * tabSize;\n        iter(shouldRemove ? uncomment : comment);\n    };\n    this.toggleBlockComment = function (state, session, range, cursor) {\n        var comment = this.blockComment;\n        if (!comment)\n            return;\n        if (!comment.start && comment[0])\n            comment = comment[0];\n        var iterator = new TokenIterator(session, cursor.row, cursor.column);\n        var token = iterator.getCurrentToken();\n        var sel = session.selection;\n        var initialRange = session.selection.toOrientedRange();\n        var startRow, colDiff;\n        if (token && /comment/.test(token.type)) {\n            var startRange, endRange;\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.start);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    startRange = new Range(row, column, row, column + comment.start.length);\n                    break;\n                }\n                token = iterator.stepBackward();\n            }\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.end);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    endRange = new Range(row, column, row, column + comment.end.length);\n                    break;\n                }\n                token = iterator.stepForward();\n            }\n            if (endRange)\n                session.remove(endRange);\n            if (startRange) {\n                session.remove(startRange);\n                startRow = startRange.start.row;\n                colDiff = -comment.start.length;\n            }\n        }\n        else {\n            colDiff = comment.start.length;\n            startRow = range.start.row;\n            session.insert(range.end, comment.end);\n            session.insert(range.start, comment.start);\n        }\n        if (initialRange.start.row == startRow)\n            initialRange.start.column += colDiff;\n        if (initialRange.end.row == startRow)\n            initialRange.end.column += colDiff;\n        session.selection.fromOrientedRange(initialRange);\n    };\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.autoOutdent = function (state, doc, row) {\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.createModeDelegates = function (mapping) {\n        this.$embeds = [];\n        this.$modes = {};\n        for (var i in mapping) {\n            if (mapping[i]) {\n                var Mode = mapping[i];\n                var id = Mode.prototype.$id;\n                var mode = config.$modes[id];\n                if (!mode)\n                    config.$modes[id] = mode = new Mode();\n                if (!config.$modes[i])\n                    config.$modes[i] = mode;\n                this.$embeds.push(i);\n                this.$modes[i] = mode;\n            }\n        }\n        var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n            \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n        var _loop_1 = function (i) {\n            (function (scope) {\n                var functionName = delegations[i];\n                var defaultHandler = scope[functionName];\n                scope[delegations[i]] =\n                    function () {\n                        return this.$delegator(functionName, arguments, defaultHandler);\n                    };\n            }(this_1));\n        };\n        var this_1 = this;\n        for (var i = 0; i < delegations.length; i++) {\n            _loop_1(i);\n        }\n    };\n    this.$delegator = function (method, args, defaultHandler) {\n        var state = args[0] || \"start\";\n        if (typeof state != \"string\") {\n            if (Array.isArray(state[2])) {\n                var language = state[2][state[2].length - 1];\n                var mode = this.$modes[language];\n                if (mode)\n                    return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n            }\n            state = state[0] || \"start\";\n        }\n        for (var i = 0; i < this.$embeds.length; i++) {\n            if (!this.$modes[this.$embeds[i]])\n                continue;\n            var split = state.split(this.$embeds[i]);\n            if (!split[0] && split[1]) {\n                args[0] = split[1];\n                var mode = this.$modes[this.$embeds[i]];\n                return mode[method].apply(mode, args);\n            }\n        }\n        var ret = defaultHandler.apply(this, args);\n        return defaultHandler ? ret : undefined;\n    };\n    this.transformAction = function (state, action, editor, session, param) {\n        if (this.$behaviour) {\n            var behaviours = this.$behaviour.getBehaviours();\n            for (var key in behaviours) {\n                if (behaviours[key][action]) {\n                    var ret = behaviours[key][action].apply(this, arguments);\n                    if (ret) {\n                        return ret;\n                    }\n                }\n            }\n        }\n    };\n    this.getKeywords = function (append) {\n        if (!this.completionKeywords) {\n            var rules = this.$tokenizer[\"rules\"];\n            var completionKeywords = [];\n            for (var rule in rules) {\n                var ruleItr = rules[rule];\n                for (var r = 0, l = ruleItr.length; r < l; r++) {\n                    if (typeof ruleItr[r].token === \"string\") {\n                        if (/keyword|support|storage/.test(ruleItr[r].token))\n                            completionKeywords.push(ruleItr[r].regex);\n                    }\n                    else if (typeof ruleItr[r].token === \"object\") {\n                        for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n                            if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n                                var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n                                completionKeywords.push(rule.substr(1, rule.length - 2));\n                            }\n                        }\n                    }\n                }\n            }\n            this.completionKeywords = completionKeywords;\n        }\n        if (!append)\n            return this.$keywordList;\n        return completionKeywords.concat(this.$keywordList || []);\n    };\n    this.$createKeywordList = function () {\n        if (!this.$highlightRules)\n            this.getTokenizer();\n        return this.$keywordList = this.$highlightRules.$keywordList || [];\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        var keywords = this.$keywordList || this.$createKeywordList();\n        return keywords.map(function (word) {\n            return {\n                name: word,\n                value: word,\n                score: 0,\n                meta: \"keyword\"\n            };\n        });\n    };\n    this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar LineWidgets = /** @class */ (function () {\n    function LineWidgets(session) {\n        this.session = session;\n        this.session.widgetManager = this;\n        this.session.getRowLength = this.getRowLength;\n        this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n        this.updateOnChange = this.updateOnChange.bind(this);\n        this.renderWidgets = this.renderWidgets.bind(this);\n        this.measureWidgets = this.measureWidgets.bind(this);\n        this.session._changedWidgets = [];\n        this.$onChangeEditor = this.$onChangeEditor.bind(this);\n        this.session.on(\"change\", this.updateOnChange);\n        this.session.on(\"changeFold\", this.updateOnFold);\n        this.session.on(\"changeEditor\", this.$onChangeEditor);\n    }\n    LineWidgets.prototype.getRowLength = function (row) {\n        var h;\n        if (this.lineWidgets)\n            h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        else\n            h = 0;\n        if (!this[\"$useWrapMode\"] || !this[\"$wrapData\"][row]) {\n            return 1 + h;\n        }\n        else {\n            return this[\"$wrapData\"][row].length + 1 + h;\n        }\n    };\n    LineWidgets.prototype.$getWidgetScreenLength = function () {\n        var screenRows = 0;\n        this.lineWidgets.forEach(function (w) {\n            if (w && w.rowCount && !w.hidden)\n                screenRows += w.rowCount;\n        });\n        return screenRows;\n    };\n    LineWidgets.prototype.$onChangeEditor = function (e) {\n        this.attach(e.editor);\n    };\n    LineWidgets.prototype.attach = function (editor) {\n        if (editor && editor.widgetManager && editor.widgetManager != this)\n            editor.widgetManager.detach();\n        if (this.editor == editor)\n            return;\n        this.detach();\n        this.editor = editor;\n        if (editor) {\n            editor.widgetManager = this;\n            editor.renderer.on(\"beforeRender\", this.measureWidgets);\n            editor.renderer.on(\"afterRender\", this.renderWidgets);\n        }\n    };\n    LineWidgets.prototype.detach = function (e) {\n        var editor = this.editor;\n        if (!editor)\n            return;\n        this.editor = null;\n        editor.widgetManager = null;\n        editor.renderer.off(\"beforeRender\", this.measureWidgets);\n        editor.renderer.off(\"afterRender\", this.renderWidgets);\n        var lineWidgets = this.session.lineWidgets;\n        lineWidgets && lineWidgets.forEach(function (w) {\n            if (w && w.el && w.el.parentNode) {\n                w._inDocument = false;\n                w.el.parentNode.removeChild(w.el);\n            }\n        });\n    };\n    LineWidgets.prototype.updateOnFold = function (e, session) {\n        var lineWidgets = session.lineWidgets;\n        if (!lineWidgets || !e.action)\n            return;\n        var fold = e.data;\n        var start = fold.start.row;\n        var end = fold.end.row;\n        var hide = e.action == \"add\";\n        for (var i = start + 1; i < end; i++) {\n            if (lineWidgets[i])\n                lineWidgets[i].hidden = hide;\n        }\n        if (lineWidgets[end]) {\n            if (hide) {\n                if (!lineWidgets[start])\n                    lineWidgets[start] = lineWidgets[end];\n                else\n                    lineWidgets[end].hidden = hide;\n            }\n            else {\n                if (lineWidgets[start] == lineWidgets[end])\n                    lineWidgets[start] = undefined;\n                lineWidgets[end].hidden = hide;\n            }\n        }\n    };\n    LineWidgets.prototype.updateOnChange = function (delta) {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n        if (len === 0) {\n        }\n        else if (delta.action == \"remove\") {\n            var removed = lineWidgets.splice(startRow + 1, len);\n            if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n                lineWidgets[startRow] = removed.pop();\n            }\n            removed.forEach(function (w) {\n                w && this.removeLineWidget(w);\n            }, this);\n            this.$updateRows();\n        }\n        else {\n            var args = new Array(len);\n            if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n                if (delta.start.column > lineWidgets[startRow].column)\n                    startRow++;\n            }\n            args.unshift(startRow, 0);\n            lineWidgets.splice.apply(lineWidgets, args);\n            this.$updateRows();\n        }\n    };\n    LineWidgets.prototype.$updateRows = function () {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var noWidgets = true;\n        lineWidgets.forEach(function (w, i) {\n            if (w) {\n                noWidgets = false;\n                w.row = i;\n                while (w.$oldWidget) {\n                    w.$oldWidget.row = i;\n                    w = w.$oldWidget;\n                }\n            }\n        });\n        if (noWidgets)\n            this.session.lineWidgets = null;\n    };\n    LineWidgets.prototype.$registerLineWidget = function (w) {\n        if (!this.session.lineWidgets)\n            this.session.lineWidgets = new Array(this.session.getLength());\n        var old = this.session.lineWidgets[w.row];\n        if (old) {\n            w.$oldWidget = old;\n            if (old.el && old.el.parentNode) {\n                old.el.parentNode.removeChild(old.el);\n                old._inDocument = false;\n            }\n        }\n        this.session.lineWidgets[w.row] = w;\n        return w;\n    };\n    LineWidgets.prototype.addLineWidget = function (w) {\n        this.$registerLineWidget(w);\n        w.session = this.session;\n        if (!this.editor)\n            return w;\n        var renderer = this.editor.renderer;\n        if (w.html && !w.el) {\n            w.el = dom.createElement(\"div\");\n            w.el.innerHTML = w.html;\n        }\n        if (w.text && !w.el) {\n            w.el = dom.createElement(\"div\");\n            w.el.textContent = w.text;\n        }\n        if (w.el) {\n            dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n            if (w.className) {\n                dom.addCssClass(w.el, w.className);\n            }\n            w.el.style.position = \"absolute\";\n            w.el.style.zIndex = \"5\";\n            renderer.container.appendChild(w.el);\n            w._inDocument = true;\n            if (!w.coverGutter) {\n                w.el.style.zIndex = \"3\";\n            }\n            if (w.pixelHeight == null) {\n                w.pixelHeight = w.el.offsetHeight;\n            }\n        }\n        if (w.rowCount == null) {\n            w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n        }\n        var fold = this.session.getFoldAt(w.row, 0);\n        w.$fold = fold;\n        if (fold) {\n            var lineWidgets = this.session.lineWidgets;\n            if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n                lineWidgets[fold.start.row] = w;\n            else\n                w.hidden = true;\n        }\n        this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n        this.$updateRows();\n        this.renderWidgets(null, renderer);\n        this.onWidgetChanged(w);\n        return w;\n    };\n    LineWidgets.prototype.removeLineWidget = function (w) {\n        w._inDocument = false;\n        w.session = null;\n        if (w.el && w.el.parentNode)\n            w.el.parentNode.removeChild(w.el);\n        if (w.editor && w.editor.destroy)\n            try {\n                w.editor.destroy();\n            }\n            catch (e) { }\n        if (this.session.lineWidgets) {\n            var w1 = this.session.lineWidgets[w.row];\n            if (w1 == w) {\n                this.session.lineWidgets[w.row] = w.$oldWidget;\n                if (w.$oldWidget)\n                    this.onWidgetChanged(w.$oldWidget);\n            }\n            else {\n                while (w1) {\n                    if (w1.$oldWidget == w) {\n                        w1.$oldWidget = w.$oldWidget;\n                        break;\n                    }\n                    w1 = w1.$oldWidget;\n                }\n            }\n        }\n        this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n        this.$updateRows();\n    };\n    LineWidgets.prototype.getWidgetsAtRow = function (row) {\n        var lineWidgets = this.session.lineWidgets;\n        var w = lineWidgets && lineWidgets[row];\n        var list = [];\n        while (w) {\n            list.push(w);\n            w = w.$oldWidget;\n        }\n        return list;\n    };\n    LineWidgets.prototype.onWidgetChanged = function (w) {\n        this.session._changedWidgets.push(w);\n        this.editor && this.editor.renderer.updateFull();\n    };\n    LineWidgets.prototype.measureWidgets = function (e, renderer) {\n        var changedWidgets = this.session._changedWidgets;\n        var config = renderer.layerConfig;\n        if (!changedWidgets || !changedWidgets.length)\n            return;\n        var min = Infinity;\n        for (var i = 0; i < changedWidgets.length; i++) {\n            var w = changedWidgets[i];\n            if (!w || !w.el)\n                continue;\n            if (w.session != this.session)\n                continue;\n            if (!w._inDocument) {\n                if (this.session.lineWidgets[w.row] != w)\n                    continue;\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            w.h = w.el.offsetHeight;\n            if (!w.fixedWidth) {\n                w.w = w.el.offsetWidth;\n                w.screenWidth = Math.ceil(w.w / config.characterWidth);\n            }\n            var rowCount = w.h / config.lineHeight;\n            if (w.coverLine) {\n                rowCount -= this.session.getRowLineCount(w.row);\n                if (rowCount < 0)\n                    rowCount = 0;\n            }\n            if (w.rowCount != rowCount) {\n                w.rowCount = rowCount;\n                if (w.row < min)\n                    min = w.row;\n            }\n        }\n        if (min != Infinity) {\n            this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n            this.session.lineWidgetWidth = null;\n        }\n        this.session._changedWidgets = [];\n    };\n    LineWidgets.prototype.renderWidgets = function (e, renderer) {\n        var config = renderer.layerConfig;\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var first = Math.min(this.firstRow, config.firstRow);\n        var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n        while (first > 0 && !lineWidgets[first])\n            first--;\n        this.firstRow = config.firstRow;\n        this.lastRow = config.lastRow;\n        renderer.$cursorLayer.config = config;\n        for (var i = first; i <= last; i++) {\n            var w = lineWidgets[i];\n            if (!w || !w.el)\n                continue;\n            if (w.hidden) {\n                w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n                continue;\n            }\n            if (!w._inDocument) {\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n            if (!w.coverLine)\n                top += config.lineHeight * this.session.getRowLineCount(w.row);\n            w.el.style.top = top - config.offset + \"px\";\n            var left = w.coverGutter ? 0 : renderer.gutterWidth;\n            if (!w.fixedWidth)\n                left -= renderer.scrollLeft;\n            w.el.style.left = left + \"px\";\n            if (w.fullWidth && w.screenWidth) {\n                w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n            }\n            if (w.fixedWidth) {\n                w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n            }\n            else {\n                w.el.style.right = \"\";\n            }\n        }\n    };\n    return LineWidgets;\n}());\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n    function Anchor(doc, row, column) {\n        this.$onChange = this.onChange.bind(this);\n        this.attach(doc);\n        if (typeof row != \"number\")\n            this.setPosition(row.row, row.column);\n        else\n            this.setPosition(row, column);\n    }\n    Anchor.prototype.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    Anchor.prototype.getDocument = function () {\n        return this.document;\n    };\n    Anchor.prototype.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    Anchor.prototype.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    Anchor.prototype.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    Anchor.prototype.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    Anchor.prototype.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n    return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n    var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n    return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n    var deltaIsInsert = delta.action == \"insert\";\n    var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n    var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n    var deltaStart = delta.start;\n    var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n    if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n        return {\n            row: point.row,\n            column: point.column\n        };\n    }\n    if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n        return {\n            row: point.row + deltaRowShift,\n            column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n        };\n    }\n    return {\n        row: deltaStart.row,\n        column: deltaStart.column\n    };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n    function Document(textOrLines) {\n        this.$lines = [\"\"];\n        if (textOrLines.length === 0) {\n            this.$lines = [\"\"];\n        }\n        else if (Array.isArray(textOrLines)) {\n            this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n        }\n        else {\n            this.insert({ row: 0, column: 0 }, textOrLines);\n        }\n    }\n    Document.prototype.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    Document.prototype.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    Document.prototype.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    Document.prototype.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    Document.prototype.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    Document.prototype.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    Document.prototype.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    Document.prototype.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    Document.prototype.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    Document.prototype.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    Document.prototype.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    Document.prototype.getLength = function () {\n        return this.$lines.length;\n    };\n    Document.prototype.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    Document.prototype.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    Document.prototype.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    Document.prototype.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    Document.prototype.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    Document.prototype.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    Document.prototype.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    Document.prototype.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    Document.prototype.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    Document.prototype.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    Document.prototype.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    Document.prototype.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    Document.prototype.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    Document.prototype.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    Document.prototype.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    Document.prototype.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    Document.prototype.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    Document.prototype.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    Document.prototype.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    Document.prototype.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    Document.prototype.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    Document.prototype.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    Document.prototype.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    Document.prototype.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n    Document.prototype.$split = function (text) {\n        return text.split(/\\r\\n|\\r|\\n/);\n    };\n    return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = /** @class */ (function () {\n    function BackgroundTokenizer(tokenizer, session) {\n        this.running = false;\n        this.lines = [];\n        this.states = [];\n        this.currentLine = 0;\n        this.tokenizer = tokenizer;\n        var self = this;\n        this.$worker = function () {\n            if (!self.running) {\n                return;\n            }\n            var workerStart = new Date();\n            var currentLine = self.currentLine;\n            var endLine = -1;\n            var doc = self.doc;\n            var startLine = currentLine;\n            while (self.lines[currentLine])\n                currentLine++;\n            var len = doc.getLength();\n            var processedLines = 0;\n            self.running = false;\n            while (currentLine < len) {\n                self.$tokenizeRow(currentLine);\n                endLine = currentLine;\n                do {\n                    currentLine++;\n                } while (self.lines[currentLine]);\n                processedLines++;\n                if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n                    self.running = setTimeout(self.$worker, 20);\n                    break;\n                }\n            }\n            self.currentLine = currentLine;\n            if (endLine == -1)\n                endLine = currentLine;\n            if (startLine <= endLine)\n                self.fireUpdateEvent(startLine, endLine);\n        };\n    }\n    BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) {\n        this.tokenizer = tokenizer;\n        this.lines = [];\n        this.states = [];\n        this.start(0);\n    };\n    BackgroundTokenizer.prototype.setDocument = function (doc) {\n        this.doc = doc;\n        this.lines = [];\n        this.states = [];\n        this.stop();\n    };\n    BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) {\n        var data = {\n            first: firstRow,\n            last: lastRow\n        };\n        this._signal(\"update\", { data: data });\n    };\n    BackgroundTokenizer.prototype.start = function (startRow) {\n        this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n        this.lines.splice(this.currentLine, this.lines.length);\n        this.states.splice(this.currentLine, this.states.length);\n        this.stop();\n        this.running = setTimeout(this.$worker, 700);\n    };\n    BackgroundTokenizer.prototype.scheduleStart = function () {\n        if (!this.running)\n            this.running = setTimeout(this.$worker, 700);\n    };\n    BackgroundTokenizer.prototype.$updateOnChange = function (delta) {\n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n        if (len === 0) {\n            this.lines[startRow] = null;\n        }\n        else if (delta.action == \"remove\") {\n            this.lines.splice(startRow, len + 1, null);\n            this.states.splice(startRow, len + 1, null);\n        }\n        else {\n            var args = Array(len + 1);\n            args.unshift(startRow, 1);\n            this.lines.splice.apply(this.lines, args);\n            this.states.splice.apply(this.states, args);\n        }\n        this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n        this.stop();\n    };\n    BackgroundTokenizer.prototype.stop = function () {\n        if (this.running)\n            clearTimeout(this.running);\n        this.running = false;\n    };\n    BackgroundTokenizer.prototype.getTokens = function (row) {\n        return this.lines[row] || this.$tokenizeRow(row);\n    };\n    BackgroundTokenizer.prototype.getState = function (row) {\n        if (this.currentLine == row)\n            this.$tokenizeRow(row);\n        return this.states[row] || \"start\";\n    };\n    BackgroundTokenizer.prototype.$tokenizeRow = function (row) {\n        var line = this.doc.getLine(row);\n        var state = this.states[row - 1];\n        var data = this.tokenizer.getLineTokens(line, state, row);\n        if (this.states[row] + \"\" !== data.state + \"\") {\n            this.states[row] = data.state;\n            this.lines[row + 1] = null;\n            if (this.currentLine > row + 1)\n                this.currentLine = row + 1;\n        }\n        else if (this.currentLine == row) {\n            this.currentLine = row + 1;\n        }\n        return this.lines[row] = data.tokens;\n    };\n    BackgroundTokenizer.prototype.cleanup = function () {\n        this.running = false;\n        this.lines = [];\n        this.states = [];\n        this.currentLine = 0;\n        this.removeAllListeners();\n    };\n    return BackgroundTokenizer;\n}());\noop.implement(BackgroundTokenizer.prototype, EventEmitter);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = /** @class */ (function () {\n    function SearchHighlight(regExp, clazz, type) {\n        if (type === void 0) { type = \"text\"; }\n        this.setRegexp(regExp);\n        this.clazz = clazz;\n        this.type = type;\n        this.docLen = 0;\n    }\n    SearchHighlight.prototype.setRegexp = function (regExp) {\n        if (this.regExp + \"\" == regExp + \"\")\n            return;\n        this.regExp = regExp;\n        this.cache = [];\n    };\n    SearchHighlight.prototype.update = function (html, markerLayer, session, config) {\n        if (!this.regExp)\n            return;\n        var start = config.firstRow;\n        var end = config.lastRow;\n        var renderedMarkerRanges = {};\n        var _search = session.$editor && session.$editor.$search;\n        var mtSearch = _search && _search.$isMultilineSearch(session.$editor.getLastSearchOptions());\n        for (var i = start; i <= end; i++) {\n            var ranges = this.cache[i];\n            if (ranges == null || session.getValue().length != this.docLen) {\n                if (mtSearch) {\n                    ranges = [];\n                    var match = _search.$multiLineForward(session, this.regExp, i, end);\n                    if (match) {\n                        var end_row = match.endRow <= end ? match.endRow - 1 : end;\n                        if (end_row > i)\n                            i = end_row;\n                        ranges.push(new Range(match.startRow, match.startCol, match.endRow, match.endCol));\n                    }\n                    if (ranges.length > this.MAX_RANGES)\n                        ranges = ranges.slice(0, this.MAX_RANGES);\n                }\n                else {\n                    ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n                    if (ranges.length > this.MAX_RANGES)\n                        ranges = ranges.slice(0, this.MAX_RANGES);\n                    ranges = ranges.map(function (match) {\n                        return new Range(i, match.offset, i, match.offset + match.length);\n                    });\n                }\n                this.cache[i] = ranges.length ? ranges : \"\";\n            }\n            if (ranges.length === 0)\n                continue;\n            for (var j = ranges.length; j--;) {\n                var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n                var rangeAsString = rangeToAddMarkerTo.toString();\n                if (renderedMarkerRanges[rangeAsString])\n                    continue;\n                renderedMarkerRanges[rangeAsString] = true;\n                markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n            }\n        }\n        this.docLen = session.getValue().length;\n    };\n    return SearchHighlight;\n}());\nSearchHighlight.prototype.MAX_RANGES = 500;\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n    function UndoManager() {\n        this.$keepRedoStack;\n        this.$maxRev = 0;\n        this.$fromUndo = false;\n        this.$undoDepth = Infinity;\n        this.reset();\n    }\n    UndoManager.prototype.addSession = function (session) {\n        this.$session = session;\n    };\n    UndoManager.prototype.add = function (delta, allowMerge, session) {\n        if (this.$fromUndo)\n            return;\n        if (delta == this.$lastDelta)\n            return;\n        if (!this.$keepRedoStack)\n            this.$redoStack.length = 0;\n        if (allowMerge === false || !this.lastDeltas) {\n            this.lastDeltas = [];\n            var undoStackLength = this.$undoStack.length;\n            if (undoStackLength > this.$undoDepth - 1) {\n                this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n            }\n            this.$undoStack.push(this.lastDeltas);\n            delta.id = this.$rev = ++this.$maxRev;\n        }\n        if (delta.action == \"remove\" || delta.action == \"insert\")\n            this.$lastDelta = delta;\n        this.lastDeltas.push(delta);\n    };\n    UndoManager.prototype.addSelection = function (selection, rev) {\n        this.selections.push({\n            value: selection,\n            rev: rev || this.$rev\n        });\n    };\n    UndoManager.prototype.startNewGroup = function () {\n        this.lastDeltas = null;\n        return this.$rev;\n    };\n    UndoManager.prototype.markIgnored = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n        var stack = this.$undoStack;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id <= from)\n                break;\n            if (delta.id < to)\n                delta.ignore = true;\n        }\n        this.lastDeltas = null;\n    };\n    UndoManager.prototype.getSelection = function (rev, after) {\n        var stack = this.selections;\n        for (var i = stack.length; i--;) {\n            var selection = stack[i];\n            if (selection.rev < rev) {\n                if (after)\n                    selection = stack[i + 1];\n                return selection;\n            }\n        }\n    };\n    UndoManager.prototype.getRevision = function () {\n        return this.$rev;\n    };\n    UndoManager.prototype.getDeltas = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n        var stack = this.$undoStack;\n        var end = null, start = 0;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id < to && !end)\n                end = i + 1;\n            if (delta.id <= from) {\n                start = i + 1;\n                break;\n            }\n        }\n        return stack.slice(start, end);\n    };\n    UndoManager.prototype.getChangedRanges = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n    };\n    UndoManager.prototype.getChangedLines = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n    };\n    UndoManager.prototype.undo = function (session, dontSelect) {\n        this.lastDeltas = null;\n        var stack = this.$undoStack;\n        if (!rearrangeUndoStack(stack, stack.length))\n            return;\n        if (!session)\n            session = this.$session;\n        if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n            this.$redoStack = [];\n        this.$fromUndo = true;\n        var deltaSet = stack.pop();\n        var undoSelectionRange = null;\n        if (deltaSet) {\n            undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n            this.$redoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        this.$fromUndo = false;\n        return undoSelectionRange;\n    };\n    UndoManager.prototype.redo = function (session, dontSelect) {\n        this.lastDeltas = null;\n        if (!session)\n            session = this.$session;\n        this.$fromUndo = true;\n        if (this.$redoStackBaseRev != this.$rev) {\n            var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n            rebaseRedoStack(this.$redoStack, diff);\n            this.$redoStackBaseRev = this.$rev;\n            this.$redoStack.forEach(function (x) {\n                x[0].id = ++this.$maxRev;\n            }, this);\n        }\n        var deltaSet = this.$redoStack.pop();\n        var redoSelectionRange = null;\n        if (deltaSet) {\n            redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n            this.$undoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        this.$fromUndo = false;\n        return redoSelectionRange;\n    };\n    UndoManager.prototype.$syncRev = function () {\n        var stack = this.$undoStack;\n        var nextDelta = stack[stack.length - 1];\n        var id = nextDelta && nextDelta[0].id || 0;\n        this.$redoStackBaseRev = id;\n        this.$rev = id;\n    };\n    UndoManager.prototype.reset = function () {\n        this.lastDeltas = null;\n        this.$lastDelta = null;\n        this.$undoStack = [];\n        this.$redoStack = [];\n        this.$rev = 0;\n        this.mark = 0;\n        this.$redoStackBaseRev = this.$rev;\n        this.selections = [];\n    };\n    UndoManager.prototype.canUndo = function () {\n        return this.$undoStack.length > 0;\n    };\n    UndoManager.prototype.canRedo = function () {\n        return this.$redoStack.length > 0;\n    };\n    UndoManager.prototype.bookmark = function (rev) {\n        if (rev == undefined)\n            rev = this.$rev;\n        this.mark = rev;\n    };\n    UndoManager.prototype.isAtBookmark = function () {\n        return this.$rev === this.mark;\n    };\n    UndoManager.prototype.toJSON = function () {\n        return {\n            $redoStack: this.$redoStack,\n            $undoStack: this.$undoStack\n        };\n    };\n    UndoManager.prototype.fromJSON = function (json) {\n        this.reset();\n        this.$undoStack = json.$undoStack;\n        this.$redoStack = json.$redoStack;\n    };\n    UndoManager.prototype.$prettyPrint = function (delta) {\n        if (delta)\n            return stringifyDelta(delta);\n        return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n    };\n    return UndoManager;\n}());\nUndoManager.prototype.hasUndo = UndoManager.prototype.canUndo;\nUndoManager.prototype.hasRedo = UndoManager.prototype.canRedo;\nUndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark;\nUndoManager.prototype.markClean = UndoManager.prototype.bookmark;\nfunction rearrangeUndoStack(stack, pos) {\n    for (var i = pos; i--;) {\n        var deltaSet = stack[i];\n        if (deltaSet && !deltaSet[0].ignore) {\n            while (i < pos - 1) {\n                var swapped = swapGroups(stack[i], stack[i + 1]);\n                stack[i] = swapped[0];\n                stack[i + 1] = swapped[1];\n                i++;\n            }\n            return true;\n        }\n    }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n    var isInsert = delta.action == \"insert\";\n    var start = delta.start;\n    var end = delta.end;\n    var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n    var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n    if (isInsert)\n        end = start;\n    for (var i in this.marks) {\n        var point = this.marks[i];\n        var cmp = comparePoints(point, start);\n        if (cmp < 0) {\n            continue; // delta starts after the range\n        }\n        if (cmp === 0) {\n            if (isInsert) {\n                if (point.bias == 1) {\n                    cmp = 1;\n                }\n                else {\n                    point.bias == -1;\n                    continue;\n                }\n            }\n        }\n        var cmp2 = isInsert ? cmp : comparePoints(point, end);\n        if (cmp2 > 0) {\n            point.row += rowShift;\n            point.column += point.row == end.row ? colShift : 0;\n            continue;\n        }\n        if (!isInsert && cmp2 <= 0) {\n            point.row = start.row;\n            point.column = start.column;\n            if (cmp2 === 0)\n                point.bias = 1;\n        }\n    }\n}\nfunction clonePos(pos) {\n    return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n    return {\n        start: clonePos(d.start),\n        end: clonePos(d.end),\n        action: d.action,\n        lines: d.lines.slice()\n    };\n}\nfunction stringifyDelta(d) {\n    d = d || this;\n    if (Array.isArray(d)) {\n        return d.map(stringifyDelta).join(\"\\n\");\n    }\n    var type = \"\";\n    if (d.action) {\n        type = d.action == \"insert\" ? \"+\" : \"-\";\n        type += \"[\" + d.lines + \"]\";\n    }\n    else if (d.value) {\n        if (Array.isArray(d.value)) {\n            type = d.value.map(stringifyRange).join(\"\\n\");\n        }\n        else {\n            type = stringifyRange(d.value);\n        }\n    }\n    if (d.start) {\n        type += stringifyRange(d);\n    }\n    if (d.id || d.rev) {\n        type += \"\\t(\" + (d.id || d.rev) + \")\";\n    }\n    return type;\n}\nfunction stringifyRange(r) {\n    return r.start.row + \":\" + r.start.column\n        + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n    var i1 = d1.action == \"insert\";\n    var i2 = d2.action == \"insert\";\n    if (i1 && i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        }\n        else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        }\n        else {\n            return null;\n        }\n    }\n    else if (i1 && !i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        }\n        else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        }\n        else {\n            return null;\n        }\n    }\n    else if (!i1 && i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        }\n        else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        }\n        else {\n            return null;\n        }\n    }\n    else if (!i1 && !i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        }\n        else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        }\n        else {\n            return null;\n        }\n    }\n    return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n    for (var i = ds1.length; i--;) {\n        for (var j = 0; j < ds2.length; j++) {\n            if (!swap(ds1[i], ds2[j])) {\n                while (i < ds1.length) {\n                    while (j--) {\n                        swap(ds2[j], ds1[i]);\n                    }\n                    j = ds2.length;\n                    i++;\n                }\n                return [ds1, ds2];\n            }\n        }\n    }\n    ds1.selectionBefore = ds2.selectionBefore =\n        ds1.selectionAfter = ds2.selectionAfter = null;\n    return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n    var i1 = d1.action == \"insert\";\n    var i2 = c1.action == \"insert\";\n    if (i1 && i2) {\n        if (cmp(d1.start, c1.start) < 0) {\n            shift(c1, d1, 1);\n        }\n        else {\n            shift(d1, c1, 1);\n        }\n    }\n    else if (i1 && !i2) {\n        if (cmp(d1.start, c1.end) >= 0) {\n            shift(d1, c1, -1);\n        }\n        else if (cmp(d1.start, c1.start) <= 0) {\n            shift(c1, d1, +1);\n        }\n        else {\n            shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n            shift(c1, d1, +1);\n        }\n    }\n    else if (!i1 && i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        }\n        else if (cmp(c1.start, d1.start) <= 0) {\n            shift(d1, c1, +1);\n        }\n        else {\n            shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n            shift(d1, c1, +1);\n        }\n    }\n    else if (!i1 && !i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        }\n        else if (cmp(c1.end, d1.start) <= 0) {\n            shift(d1, c1, -1);\n        }\n        else {\n            var before, after;\n            if (cmp(d1.start, c1.start) < 0) {\n                before = d1;\n                d1 = splitDelta(d1, c1.start);\n            }\n            if (cmp(d1.end, c1.end) > 0) {\n                after = splitDelta(d1, c1.end);\n            }\n            shiftPos(c1.end, d1.start, d1.end, -1);\n            if (after && !before) {\n                d1.lines = after.lines;\n                d1.start = after.start;\n                d1.end = after.end;\n                after = d1;\n            }\n            return [c1, before, after].filter(Boolean);\n        }\n    }\n    return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n    shiftPos(d1.start, d2.start, d2.end, dir);\n    shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n    if (pos.row == (dir == 1 ? start : end).row) {\n        pos.column += dir * (end.column - start.column);\n    }\n    pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n    var lines = c.lines;\n    var end = c.end;\n    c.end = clonePos(pos);\n    var rowsBefore = c.end.row - c.start.row;\n    var otherLines = lines.splice(rowsBefore, lines.length);\n    var col = rowsBefore ? pos.column : pos.column - c.start.column;\n    lines.push(otherLines[0].substring(0, col));\n    otherLines[0] = otherLines[0].substr(col);\n    var rest = {\n        start: clonePos(pos),\n        end: end,\n        lines: otherLines,\n        action: c.action\n    };\n    return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n    d = cloneDelta(d);\n    for (var j = redoStack.length; j--;) {\n        var deltaSet = redoStack[j];\n        for (var i = 0; i < deltaSet.length; i++) {\n            var x = deltaSet[i];\n            var xformed = xform(x, d);\n            d = xformed[0];\n            if (xformed.length != 2) {\n                if (xformed[2]) {\n                    deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n                    i++;\n                }\n                else if (!xformed[1]) {\n                    deltaSet.splice(i, 1);\n                    i--;\n                }\n            }\n        }\n        if (!deltaSet.length) {\n            redoStack.splice(j, 1);\n        }\n    }\n    return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n    for (var i = 0; i < deltaSets.length; i++) {\n        var deltas = deltaSets[i];\n        for (var j = 0; j < deltas.length; j++) {\n            moveDeltasByOne(redoStack, deltas[j]);\n        }\n    }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = /** @class */ (function () {\n    function FoldLine(foldData, folds) {\n        this.foldData = foldData;\n        if (Array.isArray(folds)) {\n            this.folds = folds;\n        }\n        else {\n            folds = this.folds = [folds];\n        }\n        var last = folds[folds.length - 1];\n        this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n        this.start = this.range.start;\n        this.end = this.range.end;\n        this.folds.forEach(function (fold) {\n            fold.setFoldLine(this);\n        }, this);\n    }\n    FoldLine.prototype.shiftRow = function (shift) {\n        this.start.row += shift;\n        this.end.row += shift;\n        this.folds.forEach(function (fold) {\n            fold.start.row += shift;\n            fold.end.row += shift;\n        });\n    };\n    FoldLine.prototype.addFold = function (fold) {\n        if (fold.sameRow) {\n            if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n                throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n            }\n            this.folds.push(fold);\n            this.folds.sort(function (a, b) {\n                return -a.range.compareEnd(b.start.row, b.start.column);\n            });\n            if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n                this.end.row = fold.end.row;\n                this.end.column = fold.end.column;\n            }\n            else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n                this.start.row = fold.start.row;\n                this.start.column = fold.start.column;\n            }\n        }\n        else if (fold.start.row == this.end.row) {\n            this.folds.push(fold);\n            this.end.row = fold.end.row;\n            this.end.column = fold.end.column;\n        }\n        else if (fold.end.row == this.start.row) {\n            this.folds.unshift(fold);\n            this.start.row = fold.start.row;\n            this.start.column = fold.start.column;\n        }\n        else {\n            throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n        }\n        fold.foldLine = this;\n    };\n    FoldLine.prototype.containsRow = function (row) {\n        return row >= this.start.row && row <= this.end.row;\n    };\n    FoldLine.prototype.walk = function (callback, endRow, endColumn) {\n        var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n        if (endRow == null) {\n            endRow = this.end.row;\n            endColumn = this.end.column;\n        }\n        for (var i = 0; i < folds.length; i++) {\n            fold = folds[i];\n            cmp = fold.range.compareStart(endRow, endColumn);\n            if (cmp == -1) {\n                callback(null, endRow, endColumn, lastEnd, isNewRow);\n                return;\n            }\n            stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n            stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n            if (stop || cmp === 0) {\n                return;\n            }\n            isNewRow = !fold.sameRow;\n            lastEnd = fold.end.column;\n        }\n        callback(null, endRow, endColumn, lastEnd, isNewRow);\n    };\n    FoldLine.prototype.getNextFoldTo = function (row, column) {\n        var fold, cmp;\n        for (var i = 0; i < this.folds.length; i++) {\n            fold = this.folds[i];\n            cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                return {\n                    fold: fold,\n                    kind: \"after\"\n                };\n            }\n            else if (cmp === 0) {\n                return {\n                    fold: fold,\n                    kind: \"inside\"\n                };\n            }\n        }\n        return null;\n    };\n    FoldLine.prototype.addRemoveChars = function (row, column, len) {\n        var ret = this.getNextFoldTo(row, column), fold, folds;\n        if (ret) {\n            fold = ret.fold;\n            if (ret.kind == \"inside\"\n                && fold.start.column != column\n                && fold.start.row != row) {\n                window.console && window.console.log(row, column, fold);\n            }\n            else if (fold.start.row == row) {\n                folds = this.folds;\n                var i = folds.indexOf(fold);\n                if (i === 0) {\n                    this.start.column += len;\n                }\n                for (i; i < folds.length; i++) {\n                    fold = folds[i];\n                    fold.start.column += len;\n                    if (!fold.sameRow) {\n                        return;\n                    }\n                    fold.end.column += len;\n                }\n                this.end.column += len;\n            }\n        }\n    };\n    FoldLine.prototype.split = function (row, column) {\n        var pos = this.getNextFoldTo(row, column);\n        if (!pos || pos.kind == \"inside\")\n            return null;\n        var fold = pos.fold;\n        var folds = this.folds;\n        var foldData = this.foldData;\n        var i = folds.indexOf(fold);\n        var foldBefore = folds[i - 1];\n        this.end.row = foldBefore.end.row;\n        this.end.column = foldBefore.end.column;\n        folds = folds.splice(i, folds.length - i);\n        var newFoldLine = new FoldLine(foldData, folds);\n        foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n        return newFoldLine;\n    };\n    FoldLine.prototype.merge = function (foldLineNext) {\n        var folds = foldLineNext.folds;\n        for (var i = 0; i < folds.length; i++) {\n            this.addFold(folds[i]);\n        }\n        var foldData = this.foldData;\n        foldData.splice(foldData.indexOf(foldLineNext), 1);\n    };\n    FoldLine.prototype.toString = function () {\n        var ret = [this.range.toString() + \": [\"];\n        this.folds.forEach(function (fold) {\n            ret.push(\"  \" + fold.toString());\n        });\n        ret.push(\"]\");\n        return ret.join(\"\\n\");\n    };\n    FoldLine.prototype.idxToPosition = function (idx) {\n        var lastFoldEndColumn = 0;\n        for (var i = 0; i < this.folds.length; i++) {\n            var fold = this.folds[i];\n            idx -= fold.start.column - lastFoldEndColumn;\n            if (idx < 0) {\n                return {\n                    row: fold.start.row,\n                    column: fold.start.column + idx\n                };\n            }\n            idx -= fold.placeholder.length;\n            if (idx < 0) {\n                return fold.start;\n            }\n            lastFoldEndColumn = fold.end.column;\n        }\n        return {\n            row: this.end.row,\n            column: this.end.column + idx\n        };\n    };\n    return FoldLine;\n}());\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = /** @class */ (function () {\n    function RangeList() {\n        this.ranges = [];\n        this.$bias = 1;\n    }\n    RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) {\n        var list = this.ranges;\n        for (var i = startIndex || 0; i < list.length; i++) {\n            var range = list[i];\n            var cmpEnd = comparePoints(pos, range.end);\n            if (cmpEnd > 0)\n                continue;\n            var cmpStart = comparePoints(pos, range.start);\n            if (cmpEnd === 0)\n                return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n            if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n                return i;\n            return -i - 1;\n        }\n        return -i - 1;\n    };\n    RangeList.prototype.add = function (range) {\n        var excludeEdges = !range.isEmpty();\n        var startIndex = this.pointIndex(range.start, excludeEdges);\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n        var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n        else\n            endIndex++;\n        return this.ranges.splice(startIndex, endIndex - startIndex, range);\n    };\n    RangeList.prototype.addList = function (list) {\n        var removed = [];\n        for (var i = list.length; i--;) {\n            removed.push.apply(removed, this.add(list[i]));\n        }\n        return removed;\n    };\n    RangeList.prototype.substractPoint = function (pos) {\n        var i = this.pointIndex(pos);\n        if (i >= 0)\n            return this.ranges.splice(i, 1);\n    };\n    RangeList.prototype.merge = function () {\n        var removed = [];\n        var list = this.ranges;\n        list = list.sort(function (a, b) {\n            return comparePoints(a.start, b.start);\n        });\n        var next = list[0], range;\n        for (var i = 1; i < list.length; i++) {\n            range = next;\n            next = list[i];\n            var cmp = comparePoints(range.end, next.start);\n            if (cmp < 0)\n                continue;\n            if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n                continue;\n            if (comparePoints(range.end, next.end) < 0) {\n                range.end.row = next.end.row;\n                range.end.column = next.end.column;\n            }\n            list.splice(i, 1);\n            removed.push(next);\n            next = range;\n            i--;\n        }\n        this.ranges = list;\n        return removed;\n    };\n    RangeList.prototype.contains = function (row, column) {\n        return this.pointIndex({ row: row, column: column }) >= 0;\n    };\n    RangeList.prototype.containsPoint = function (pos) {\n        return this.pointIndex(pos) >= 0;\n    };\n    RangeList.prototype.rangeAtPoint = function (pos) {\n        var i = this.pointIndex(pos);\n        if (i >= 0)\n            return this.ranges[i];\n    };\n    RangeList.prototype.clipRows = function (startRow, endRow) {\n        var list = this.ranges;\n        if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n            return [];\n        var startIndex = this.pointIndex({ row: startRow, column: 0 });\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n        var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n        var clipped = [];\n        for (var i = startIndex; i < endIndex; i++) {\n            clipped.push(list[i]);\n        }\n        return clipped;\n    };\n    RangeList.prototype.removeAll = function () {\n        return this.ranges.splice(0, this.ranges.length);\n    };\n    RangeList.prototype.attach = function (session) {\n        if (this.session)\n            this.detach();\n        this.session = session;\n        this.onChange = this.$onChange.bind(this);\n        this.session.on('change', this.onChange);\n    };\n    RangeList.prototype.detach = function () {\n        if (!this.session)\n            return;\n        this.session.removeListener('change', this.onChange);\n        this.session = null;\n    };\n    RangeList.prototype.$onChange = function (delta) {\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var ranges = this.ranges;\n        for (var i = 0, n = ranges.length; i < n; i++) {\n            var r = ranges[i];\n            if (r.end.row >= startRow)\n                break;\n        }\n        if (delta.action == \"insert\") {\n            var lineDif = endRow - startRow;\n            var colDiff = -start.column + end.column;\n            for (; i < n; i++) {\n                var r = ranges[i];\n                if (r.start.row > startRow)\n                    break;\n                if (r.start.row == startRow && r.start.column >= start.column) {\n                    if (r.start.column == start.column && this.$bias <= 0) {\n                    }\n                    else {\n                        r.start.column += colDiff;\n                        r.start.row += lineDif;\n                    }\n                }\n                if (r.end.row == startRow && r.end.column >= start.column) {\n                    if (r.end.column == start.column && this.$bias < 0) {\n                        continue;\n                    }\n                    if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n                        if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n                            r.end.column -= colDiff;\n                    }\n                    r.end.column += colDiff;\n                    r.end.row += lineDif;\n                }\n            }\n        }\n        else {\n            var lineDif = startRow - endRow;\n            var colDiff = start.column - end.column;\n            for (; i < n; i++) {\n                var r = ranges[i];\n                if (r.start.row > endRow)\n                    break;\n                if (r.end.row < endRow\n                    && (startRow < r.end.row\n                        || startRow == r.end.row && start.column < r.end.column)) {\n                    r.end.row = startRow;\n                    r.end.column = start.column;\n                }\n                else if (r.end.row == endRow) {\n                    if (r.end.column <= end.column) {\n                        if (lineDif || r.end.column > start.column) {\n                            r.end.column = start.column;\n                            r.end.row = start.row;\n                        }\n                    }\n                    else {\n                        r.end.column += colDiff;\n                        r.end.row += lineDif;\n                    }\n                }\n                else if (r.end.row > endRow) {\n                    r.end.row += lineDif;\n                }\n                if (r.start.row < endRow\n                    && (startRow < r.start.row\n                        || startRow == r.start.row && start.column < r.start.column)) {\n                    r.start.row = startRow;\n                    r.start.column = start.column;\n                }\n                else if (r.start.row == endRow) {\n                    if (r.start.column <= end.column) {\n                        if (lineDif || r.start.column > start.column) {\n                            r.start.column = start.column;\n                            r.start.row = start.row;\n                        }\n                    }\n                    else {\n                        r.start.column += colDiff;\n                        r.start.row += lineDif;\n                    }\n                }\n                else if (r.start.row > endRow) {\n                    r.start.row += lineDif;\n                }\n            }\n        }\n        if (lineDif != 0 && i < n) {\n            for (; i < n; i++) {\n                var r = ranges[i];\n                r.start.row += lineDif;\n                r.end.row += lineDif;\n            }\n        }\n    };\n    return RangeList;\n}());\nRangeList.prototype.comparePoints = comparePoints;\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar RangeList = require(\"../range_list\").RangeList;\nvar Fold = /** @class */ (function (_super) {\n    __extends(Fold, _super);\n    function Fold(range, placeholder) {\n        var _this = _super.call(this) || this;\n        _this.foldLine = null;\n        _this.placeholder = placeholder;\n        _this.range = range;\n        _this.start = range.start;\n        _this.end = range.end;\n        _this.sameRow = range.start.row == range.end.row;\n        _this.subFolds = _this.ranges = [];\n        return _this;\n    }\n    Fold.prototype.toString = function () {\n        return '\"' + this.placeholder + '\" ' + this.range.toString();\n    };\n    Fold.prototype.setFoldLine = function (foldLine) {\n        this.foldLine = foldLine;\n        this.subFolds.forEach(function (fold) {\n            fold.setFoldLine(foldLine);\n        });\n    };\n    Fold.prototype.clone = function () {\n        var range = this.range.clone();\n        var fold = new Fold(range, this.placeholder);\n        this.subFolds.forEach(function (subFold) {\n            fold.subFolds.push(subFold.clone());\n        });\n        fold.collapseChildren = this.collapseChildren;\n        return fold;\n    };\n    Fold.prototype.addSubFold = function (fold) {\n        if (this.range.isEqual(fold))\n            return;\n        consumeRange(fold, this.start);\n        var row = fold.start.row, column = fold.start.column;\n        for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n            cmp = this.subFolds[i].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        var afterStart = this.subFolds[i];\n        var firstConsumed = 0;\n        if (cmp == 0) {\n            if (afterStart.range.containsRange(fold))\n                return afterStart.addSubFold(fold);\n            else\n                firstConsumed = 1;\n        }\n        var row = fold.range.end.row, column = fold.range.end.column;\n        for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n            cmp = this.subFolds[j].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        if (cmp == 0)\n            j++;\n        var consumedFolds = this.subFolds.splice(i, j - i, fold);\n        var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n        for (var k = firstConsumed; k < last; k++) {\n            fold.addSubFold(consumedFolds[k]);\n        }\n        fold.setFoldLine(this.foldLine);\n        return fold;\n    };\n    Fold.prototype.restoreRange = function (range) {\n        return restoreRange(range, this.start);\n    };\n    return Fold;\n}(RangeList));\nfunction consumePoint(point, anchor) {\n    point.row -= anchor.row;\n    if (point.row == 0)\n        point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n    consumePoint(range.start, anchor);\n    consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n    if (point.row == 0)\n        point.column += anchor.column;\n    point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n    restorePoint(range.start, anchor);\n    restorePoint(range.end, anchor);\n}\nexports.Fold = Fold;\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\",\"ace/mouse/mouse_event\"], function(require, exports, module){// @ts-nocheck\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar MouseEvent = require(\"../mouse/mouse_event\").MouseEvent;\nfunction Folding() {\n    this.getFoldAt = function (row, column, side) {\n        var foldLine = this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n        var folds = foldLine.folds;\n        for (var i = 0; i < folds.length; i++) {\n            var range = folds[i].range;\n            if (range.contains(row, column)) {\n                if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n                    continue;\n                }\n                else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n                    continue;\n                }\n                return folds[i];\n            }\n        }\n    };\n    this.getFoldsInRange = function (range) {\n        var start = range.start;\n        var end = range.end;\n        var foldLines = this.$foldData;\n        var foundFolds = [];\n        start.column += 1;\n        end.column -= 1;\n        for (var i = 0; i < foldLines.length; i++) {\n            var cmp = foldLines[i].range.compareRange(range);\n            if (cmp == 2) {\n                continue;\n            }\n            else if (cmp == -2) {\n                break;\n            }\n            var folds = foldLines[i].folds;\n            for (var j = 0; j < folds.length; j++) {\n                var fold = folds[j];\n                cmp = fold.range.compareRange(range);\n                if (cmp == -2) {\n                    break;\n                }\n                else if (cmp == 2) {\n                    continue;\n                }\n                else \n                if (cmp == 42) {\n                    break;\n                }\n                foundFolds.push(fold);\n            }\n        }\n        start.column -= 1;\n        end.column += 1;\n        return foundFolds;\n    };\n    this.getFoldsInRangeList = function (ranges) {\n        if (Array.isArray(ranges)) {\n            var folds = [];\n            ranges.forEach(function (range) {\n                folds = folds.concat(this.getFoldsInRange(range));\n            }, this);\n        }\n        else {\n            var folds = this.getFoldsInRange(ranges);\n        }\n        return folds;\n    };\n    this.getAllFolds = function () {\n        var folds = [];\n        var foldLines = this.$foldData;\n        for (var i = 0; i < foldLines.length; i++)\n            for (var j = 0; j < foldLines[i].folds.length; j++)\n                folds.push(foldLines[i].folds[j]);\n        return folds;\n    };\n    this.getFoldStringAt = function (row, column, trim, foldLine) {\n        foldLine = foldLine || this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n        var lastFold = {\n            end: { column: 0 }\n        };\n        var str, fold;\n        for (var i = 0; i < foldLine.folds.length; i++) {\n            fold = foldLine.folds[i];\n            var cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                str = this\n                    .getLine(fold.start.row)\n                    .substring(lastFold.end.column, fold.start.column);\n                break;\n            }\n            else if (cmp === 0) {\n                return null;\n            }\n            lastFold = fold;\n        }\n        if (!str)\n            str = this.getLine(fold.start.row).substring(lastFold.end.column);\n        if (trim == -1)\n            return str.substring(0, column - lastFold.end.column);\n        else if (trim == 1)\n            return str.substring(column - lastFold.end.column);\n        else\n            return str;\n    };\n    this.getFoldLine = function (docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n                return foldLine;\n            }\n            else if (foldLine.end.row > docRow) {\n                return null;\n            }\n        }\n        return null;\n    };\n    this.getNextFoldLine = function (docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.end.row >= docRow) {\n                return foldLine;\n            }\n        }\n        return null;\n    };\n    this.getFoldedRowCount = function (first, last) {\n        var foldData = this.$foldData, rowCount = last - first + 1;\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n            if (end >= last) {\n                if (start < last) {\n                    if (start >= first)\n                        rowCount -= last - start;\n                    else\n                        rowCount = 0; // in one fold\n                }\n                break;\n            }\n            else if (end >= first) {\n                if (start >= first) // fold inside range\n                    rowCount -= end - start;\n                else\n                    rowCount -= end - first + 1;\n            }\n        }\n        return rowCount;\n    };\n    this.$addFoldLine = function (foldLine) {\n        this.$foldData.push(foldLine);\n        this.$foldData.sort(function (a, b) {\n            return a.start.row - b.start.row;\n        });\n        return foldLine;\n    };\n    this.addFold = function (placeholder, range) {\n        var foldData = this.$foldData;\n        var added = false;\n        var fold;\n        if (placeholder instanceof Fold)\n            fold = placeholder;\n        else {\n            fold = new Fold(range, placeholder);\n            fold.collapseChildren = range.collapseChildren;\n        }\n        this.$clipRangeToDocument(fold.range);\n        var startRow = fold.start.row;\n        var startColumn = fold.start.column;\n        var endRow = fold.end.row;\n        var endColumn = fold.end.column;\n        var startFold = this.getFoldAt(startRow, startColumn, 1);\n        var endFold = this.getFoldAt(endRow, endColumn, -1);\n        if (startFold && endFold == startFold)\n            return startFold.addSubFold(fold);\n        if (startFold && !startFold.range.isStart(startRow, startColumn))\n            this.removeFold(startFold);\n        if (endFold && !endFold.range.isEnd(endRow, endColumn))\n            this.removeFold(endFold);\n        var folds = this.getFoldsInRange(fold.range);\n        if (folds.length > 0) {\n            this.removeFolds(folds);\n            if (!fold.collapseChildren) {\n                folds.forEach(function (subFold) {\n                    fold.addSubFold(subFold);\n                });\n            }\n        }\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (endRow == foldLine.start.row) {\n                foldLine.addFold(fold);\n                added = true;\n                break;\n            }\n            else if (startRow == foldLine.end.row) {\n                foldLine.addFold(fold);\n                added = true;\n                if (!fold.sameRow) {\n                    var foldLineNext = foldData[i + 1];\n                    if (foldLineNext && foldLineNext.start.row == endRow) {\n                        foldLine.merge(foldLineNext);\n                        break;\n                    }\n                }\n                break;\n            }\n            else if (endRow <= foldLine.start.row) {\n                break;\n            }\n        }\n        if (!added)\n            foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n        if (this.$useWrapMode)\n            this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n        else\n            this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"add\" });\n        return fold;\n    };\n    this.addFolds = function (folds) {\n        folds.forEach(function (fold) {\n            this.addFold(fold);\n        }, this);\n    };\n    this.removeFold = function (fold) {\n        var foldLine = fold.foldLine;\n        var startRow = foldLine.start.row;\n        var endRow = foldLine.end.row;\n        var foldLines = this.$foldData;\n        var folds = foldLine.folds;\n        if (folds.length == 1) {\n            foldLines.splice(foldLines.indexOf(foldLine), 1);\n        }\n        else \n        if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n            folds.pop();\n            foldLine.end.row = folds[folds.length - 1].end.row;\n            foldLine.end.column = folds[folds.length - 1].end.column;\n        }\n        else \n        if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n            folds.shift();\n            foldLine.start.row = folds[0].start.row;\n            foldLine.start.column = folds[0].start.column;\n        }\n        else \n        if (fold.sameRow) {\n            folds.splice(folds.indexOf(fold), 1);\n        }\n        else \n        {\n            var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n            folds = newFoldLine.folds;\n            folds.shift();\n            newFoldLine.start.row = folds[0].start.row;\n            newFoldLine.start.column = folds[0].start.column;\n        }\n        if (!this.$updating) {\n            if (this.$useWrapMode)\n                this.$updateWrapData(startRow, endRow);\n            else\n                this.$updateRowLengthCache(startRow, endRow);\n        }\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n    };\n    this.removeFolds = function (folds) {\n        var cloneFolds = [];\n        for (var i = 0; i < folds.length; i++) {\n            cloneFolds.push(folds[i]);\n        }\n        cloneFolds.forEach(function (fold) {\n            this.removeFold(fold);\n        }, this);\n        this.$modified = true;\n    };\n    this.expandFold = function (fold) {\n        this.removeFold(fold);\n        fold.subFolds.forEach(function (subFold) {\n            fold.restoreRange(subFold);\n            this.addFold(subFold);\n        }, this);\n        if (fold.collapseChildren > 0) {\n            this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n        }\n        fold.subFolds = [];\n    };\n    this.expandFolds = function (folds) {\n        folds.forEach(function (fold) {\n            this.expandFold(fold);\n        }, this);\n    };\n    this.unfold = function (location, expandInner) {\n        var range, folds;\n        if (location == null) {\n            range = new Range(0, 0, this.getLength(), 0);\n            if (expandInner == null)\n                expandInner = true;\n        }\n        else if (typeof location == \"number\") {\n            range = new Range(location, 0, location, this.getLine(location).length);\n        }\n        else if (\"row\" in location) {\n            range = Range.fromPoints(location, location);\n        }\n        else if (Array.isArray(location)) {\n            folds = [];\n            location.forEach(function (range) {\n                folds = folds.concat(this.unfold(range));\n            }, this);\n            return folds;\n        }\n        else {\n            range = location;\n        }\n        folds = this.getFoldsInRangeList(range);\n        var outermostFolds = folds;\n        while (folds.length == 1\n            && Range.comparePoints(folds[0].start, range.start) < 0\n            && Range.comparePoints(folds[0].end, range.end) > 0) {\n            this.expandFolds(folds);\n            folds = this.getFoldsInRangeList(range);\n        }\n        if (expandInner != false) {\n            this.removeFolds(folds);\n        }\n        else {\n            this.expandFolds(folds);\n        }\n        if (outermostFolds.length)\n            return outermostFolds;\n    };\n    this.isRowFolded = function (docRow, startFoldRow) {\n        return !!this.getFoldLine(docRow, startFoldRow);\n    };\n    this.getRowFoldEnd = function (docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.end.row : docRow;\n    };\n    this.getRowFoldStart = function (docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.start.row : docRow;\n    };\n    this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n        if (startRow == null)\n            startRow = foldLine.start.row;\n        if (startColumn == null)\n            startColumn = 0;\n        if (endRow == null)\n            endRow = foldLine.end.row;\n        if (endColumn == null)\n            endColumn = this.getLine(endRow).length;\n        var doc = this.doc;\n        var textLine = \"\";\n        foldLine.walk(function (placeholder, row, column, lastColumn) {\n            if (row < startRow)\n                return;\n            if (row == startRow) {\n                if (column < startColumn)\n                    return;\n                lastColumn = Math.max(startColumn, lastColumn);\n            }\n            if (placeholder != null) {\n                textLine += placeholder;\n            }\n            else {\n                textLine += doc.getLine(row).substring(lastColumn, column);\n            }\n        }, endRow, endColumn);\n        return textLine;\n    };\n    this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n        var foldLine = this.getFoldLine(row);\n        if (!foldLine) {\n            var line;\n            line = this.doc.getLine(row);\n            return line.substring(startColumn || 0, endColumn || line.length);\n        }\n        else {\n            return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n        }\n    };\n    this.$cloneFoldData = function () {\n        var fd = [];\n        fd = this.$foldData.map(function (foldLine) {\n            var folds = foldLine.folds.map(function (fold) {\n                return fold.clone();\n            });\n            return new FoldLine(fd, folds);\n        });\n        return fd;\n    };\n    this.toggleFold = function (tryToUnfold) {\n        var selection = this.selection;\n        var range = selection.getRange();\n        var fold;\n        var bracketPos;\n        if (range.isEmpty()) {\n            var cursor = range.start;\n            fold = this.getFoldAt(cursor.row, cursor.column);\n            if (fold) {\n                this.expandFold(fold);\n                return;\n            }\n            else if (tryToUnfold) {\n                var foldLine = this.getFoldLine(cursor.row);\n                if (foldLine)\n                    this.expandFolds(foldLine.folds);\n                return;\n            }\n            else if (bracketPos = this.findMatchingBracket(cursor)) {\n                if (range.comparePoint(bracketPos) == 1) {\n                    range.end = bracketPos;\n                }\n                else {\n                    range.start = bracketPos;\n                    range.start.column++;\n                    range.end.column--;\n                }\n            }\n            else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n                if (range.comparePoint(bracketPos) == 1)\n                    range.end = bracketPos;\n                else\n                    range.start = bracketPos;\n                range.start.column++;\n            }\n            else {\n                range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n            }\n        }\n        else {\n            var folds = this.getFoldsInRange(range);\n            if (tryToUnfold && folds.length) {\n                this.expandFolds(folds);\n                return;\n            }\n            else if (folds.length == 1) {\n                fold = folds[0];\n            }\n        }\n        if (!fold)\n            fold = this.getFoldAt(range.start.row, range.start.column);\n        if (fold && fold.range.toString() == range.toString()) {\n            this.expandFold(fold);\n            return;\n        }\n        var placeholder = \"...\";\n        if (!range.isMultiLine()) {\n            placeholder = this.getTextRange(range);\n            if (placeholder.length < 4)\n                return;\n            placeholder = placeholder.trim().substring(0, 2) + \"..\";\n        }\n        this.addFold(placeholder, range);\n    };\n    this.getCommentFoldRange = function (row, column, dir) {\n        var iterator = new TokenIterator(this, row, column);\n        var token = iterator.getCurrentToken();\n        var type = token && token.type;\n        if (token && /^comment|string/.test(type)) {\n            type = type.match(/comment|string/)[0];\n            if (type == \"comment\")\n                type += \"|doc-start|\\\\.doc\";\n            var re = new RegExp(type);\n            var range = new Range();\n            if (dir != 1) {\n                do {\n                    token = iterator.stepBackward();\n                } while (token && re.test(token.type));\n                token = iterator.stepForward();\n            }\n            range.start.row = iterator.getCurrentTokenRow();\n            range.start.column = iterator.getCurrentTokenColumn() + token.value.length;\n            iterator = new TokenIterator(this, row, column);\n            var initState = this.getState(iterator.$row);\n            if (dir != -1) {\n                var lastRow = -1;\n                do {\n                    token = iterator.stepForward();\n                    if (lastRow == -1) {\n                        var state = this.getState(iterator.$row);\n                        if (initState.toString() !== state.toString())\n                            lastRow = iterator.$row;\n                    }\n                    else if (iterator.$row > lastRow) {\n                        break;\n                    }\n                } while (token && re.test(token.type));\n                token = iterator.stepBackward();\n            }\n            else\n                token = iterator.getCurrentToken();\n            range.end.row = iterator.getCurrentTokenRow();\n            range.end.column = iterator.getCurrentTokenColumn();\n            if (range.start.row == range.end.row && range.start.column > range.end.column)\n                return;\n            return range;\n        }\n    };\n    this.foldAll = function (startRow, endRow, depth, test) {\n        if (depth == undefined)\n            depth = 100000; // JSON.stringify doesn't hanle Infinity\n        var foldWidgets = this.foldWidgets;\n        if (!foldWidgets)\n            return; // mode doesn't support folding\n        endRow = endRow || this.getLength();\n        startRow = startRow || 0;\n        for (var row = startRow; row < endRow; row++) {\n            if (foldWidgets[row] == null)\n                foldWidgets[row] = this.getFoldWidget(row);\n            if (foldWidgets[row] != \"start\")\n                continue;\n            if (test && !test(row))\n                continue;\n            var range = this.getFoldWidgetRange(row);\n            if (range && range.isMultiLine()\n                && range.end.row <= endRow\n                && range.start.row >= startRow) {\n                row = range.end.row;\n                range.collapseChildren = depth;\n                this.addFold(\"...\", range);\n            }\n        }\n    };\n    this.foldToLevel = function (level) {\n        this.foldAll();\n        while (level-- > 0)\n            this.unfold(null, false);\n    };\n    this.foldAllComments = function () {\n        var session = this;\n        this.foldAll(null, null, null, function (row) {\n            var tokens = session.getTokens(row);\n            for (var i = 0; i < tokens.length; i++) {\n                var token = tokens[i];\n                if (token.type == \"text\" && /^\\s+$/.test(token.value))\n                    continue;\n                if (/comment/.test(token.type))\n                    return true;\n                return false;\n            }\n        });\n    };\n    this.$foldStyles = {\n        \"manual\": 1,\n        \"markbegin\": 1,\n        \"markbeginend\": 1\n    };\n    this.$foldStyle = \"markbegin\";\n    this.setFoldStyle = function (style) {\n        if (!this.$foldStyles[style])\n            throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n        if (this.$foldStyle == style)\n            return;\n        this.$foldStyle = style;\n        if (style == \"manual\")\n            this.unfold();\n        var mode = this.$foldMode;\n        this.$setFolding(null);\n        this.$setFolding(mode);\n    };\n    this.$setFolding = function (foldMode) {\n        if (this.$foldMode == foldMode)\n            return;\n        this.$foldMode = foldMode;\n        this.off('change', this.$updateFoldWidgets);\n        this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n        this._signal(\"changeAnnotation\");\n        if (!foldMode || this.$foldStyle == \"manual\") {\n            this.foldWidgets = null;\n            return;\n        }\n        this.foldWidgets = [];\n        this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n        this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n        this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n        this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n        this.on('change', this.$updateFoldWidgets);\n        this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n    };\n    this.getParentFoldRangeData = function (row, ignoreCurrent) {\n        var fw = this.foldWidgets;\n        if (!fw || (ignoreCurrent && fw[row]))\n            return {};\n        var i = row - 1, firstRange;\n        while (i >= 0) {\n            var c = fw[i];\n            if (c == null)\n                c = fw[i] = this.getFoldWidget(i);\n            if (c == \"start\") {\n                var range = this.getFoldWidgetRange(i);\n                if (!firstRange)\n                    firstRange = range;\n                if (range && range.end.row >= row)\n                    break;\n            }\n            i--;\n        }\n        return {\n            range: i !== -1 && range,\n            firstRange: firstRange\n        };\n    };\n    this.onFoldWidgetClick = function (row, e) {\n        if (e instanceof MouseEvent)\n            e = e.domEvent;\n        var options = {\n            children: e.shiftKey,\n            all: e.ctrlKey || e.metaKey,\n            siblings: e.altKey\n        };\n        var range = this.$toggleFoldWidget(row, options);\n        if (!range) {\n            var el = (e.target || e.srcElement);\n            if (el && /ace_fold-widget/.test(el.className))\n                el.className += \" ace_invalid\";\n        }\n    };\n    this.$toggleFoldWidget = function (row, options) {\n        if (!this.getFoldWidget)\n            return;\n        var type = this.getFoldWidget(row);\n        var line = this.getLine(row);\n        var dir = type === \"end\" ? -1 : 1;\n        var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n        if (fold) {\n            if (options.children || options.all)\n                this.removeFold(fold);\n            else\n                this.expandFold(fold);\n            return fold;\n        }\n        var range = this.getFoldWidgetRange(row, true);\n        if (range && !range.isMultiLine()) {\n            fold = this.getFoldAt(range.start.row, range.start.column, 1);\n            if (fold && range.isEqual(fold.range)) {\n                this.removeFold(fold);\n                return fold;\n            }\n        }\n        if (options.siblings) {\n            var data = this.getParentFoldRangeData(row);\n            if (data.range) {\n                var startRow = data.range.start.row + 1;\n                var endRow = data.range.end.row;\n            }\n            this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n        }\n        else if (options.children) {\n            endRow = range ? range.end.row : this.getLength();\n            this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n        }\n        else if (range) {\n            if (options.all)\n                range.collapseChildren = 10000;\n            this.addFold(\"...\", range);\n        }\n        return range;\n    };\n    this.toggleFoldWidget = function (toggleParent) {\n        var row = this.selection.getCursor().row;\n        row = this.getRowFoldStart(row);\n        var range = this.$toggleFoldWidget(row, {});\n        if (range)\n            return;\n        var data = this.getParentFoldRangeData(row, true);\n        range = data.range || data.firstRange;\n        if (range) {\n            row = range.start.row;\n            var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n            if (fold) {\n                this.removeFold(fold);\n            }\n            else {\n                this.addFold(\"...\", range);\n            }\n        }\n    };\n    this.updateFoldWidgets = function (delta) {\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n        if (len === 0) {\n            this.foldWidgets[firstRow] = null;\n        }\n        else if (delta.action == 'remove') {\n            this.foldWidgets.splice(firstRow, len + 1, null);\n        }\n        else {\n            var args = Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.foldWidgets.splice.apply(this.foldWidgets, args);\n        }\n    };\n    this.tokenizerUpdateFoldWidgets = function (e) {\n        var rows = e.data;\n        if (rows.first != rows.last) {\n            if (this.foldWidgets.length > rows.first)\n                this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n        }\n    };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n    this.findMatchingBracket = function (position, chr) {\n        if (position.column == 0)\n            return null;\n        var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n        if (charBeforeCursor == \"\")\n            return null;\n        var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match)\n            return null;\n        if (match[1])\n            return this.$findClosingBracket(match[1], position);\n        else\n            return this.$findOpeningBracket(match[2], position);\n    };\n    this.getBracketRange = function (pos) {\n        var line = this.getLine(pos.row);\n        var before = true, range;\n        var chr = line.charAt(pos.column - 1);\n        var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match) {\n            chr = line.charAt(pos.column);\n            pos = { row: pos.row, column: pos.column + 1 };\n            match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n            before = false;\n        }\n        if (!match)\n            return null;\n        if (match[1]) {\n            var bracketPos = this.$findClosingBracket(match[1], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(pos, bracketPos);\n            if (!before) {\n                range.end.column++;\n                range.start.column--;\n            }\n            range.cursor = range.end;\n        }\n        else {\n            var bracketPos = this.$findOpeningBracket(match[2], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(bracketPos, pos);\n            if (!before) {\n                range.start.column++;\n                range.end.column--;\n            }\n            range.cursor = range.start;\n        }\n        return range;\n    };\n    this.getMatchingBracketRanges = function (pos, isBackwards) {\n        var line = this.getLine(pos.row);\n        var bracketsRegExp = /([\\(\\[\\{])|([\\)\\]\\}])/;\n        var chr = !isBackwards && line.charAt(pos.column - 1);\n        var match = chr && chr.match(bracketsRegExp);\n        if (!match) {\n            chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column);\n            pos = {\n                row: pos.row,\n                column: pos.column + 1\n            };\n            match = chr && chr.match(bracketsRegExp);\n        }\n        if (!match)\n            return null;\n        var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n        var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n            : this.$findOpeningBracket(match[2], pos);\n        if (!bracketPos)\n            return [startRange];\n        var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n        return [startRange, endRange];\n    };\n    this.$brackets = {\n        \")\": \"(\",\n        \"(\": \")\",\n        \"]\": \"[\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"}\": \"{\",\n        \"<\": \">\",\n        \">\": \"<\"\n    };\n    this.$findOpeningBracket = function (bracket, position, typeRe) {\n        var openBracket = this.$brackets[bracket];\n        var depth = 1;\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n        if (!typeRe) {\n            typeRe = new RegExp(\"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n                    .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n                    .replace(/-close\\b/, \"-(close|open)\")\n                + \")+\");\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n        var value = token.value;\n        while (true) {\n            while (valueIndex >= 0) {\n                var chr = value.charAt(valueIndex);\n                if (chr == openBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return { row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn() };\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex -= 1;\n            }\n            do {\n                token = iterator.stepBackward();\n            } while (token && !typeRe.test(token.type));\n            if (token == null)\n                break;\n            value = token.value;\n            valueIndex = value.length - 1;\n        }\n        return null;\n    };\n    this.$findClosingBracket = function (bracket, position, typeRe) {\n        var closingBracket = this.$brackets[bracket];\n        var depth = 1;\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n        if (!typeRe) {\n            typeRe = new RegExp(\"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n                    .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n                    .replace(/-open\\b/, \"-(close|open)\")\n                + \")+\");\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn();\n        while (true) {\n            var value = token.value;\n            var valueLength = value.length;\n            while (valueIndex < valueLength) {\n                var chr = value.charAt(valueIndex);\n                if (chr == closingBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return { row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn() };\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex += 1;\n            }\n            do {\n                token = iterator.stepForward();\n            } while (token && !typeRe.test(token.type));\n            if (token == null)\n                break;\n            valueIndex = 0;\n        }\n        return null;\n    };\n    this.getMatchingTags = function (pos) {\n        var iterator = new TokenIterator(this, pos.row, pos.column);\n        var token = this.$findTagName(iterator);\n        if (!token)\n            return;\n        var prevToken = iterator.stepBackward();\n        if (prevToken.value === '<') {\n            return this.$findClosingTag(iterator, token);\n        }\n        else {\n            return this.$findOpeningTag(iterator, token);\n        }\n    };\n    this.$findTagName = function (iterator) {\n        var token = iterator.getCurrentToken();\n        var found = false;\n        var backward = false;\n        if (token && token.type.indexOf('tag-name') === -1) {\n            do {\n                if (backward)\n                    token = iterator.stepBackward();\n                else\n                    token = iterator.stepForward();\n                if (token) {\n                    if (token.value === \"/>\") {\n                        backward = true;\n                    }\n                    else if (token.type.indexOf('tag-name') !== -1) {\n                        found = true;\n                    }\n                }\n            } while (token && !found);\n        }\n        return token;\n    };\n    this.$findClosingTag = function (iterator, token) {\n        var prevToken;\n        var currentTag = token.value;\n        var tag = token.value;\n        var depth = 0;\n        var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n        token = iterator.stepForward();\n        var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n        var foundOpenTagEnd = false;\n        do {\n            prevToken = token;\n            if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) {\n                var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n                foundOpenTagEnd = true;\n            }\n            token = iterator.stepForward();\n            if (token) {\n                if (token.value === '>' && !foundOpenTagEnd) {\n                    var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n                    foundOpenTagEnd = true;\n                }\n                if (token.type.indexOf('tag-name') !== -1) {\n                    currentTag = token.value;\n                    if (tag === currentTag) {\n                        if (prevToken.value === '<') {\n                            depth++;\n                        }\n                        else if (prevToken.value === '</') {\n                            depth--;\n                            if (depth < 0) { //found closing tag\n                                iterator.stepBackward();\n                                var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); //Range for </\n                                token = iterator.stepForward();\n                                var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n                                if (token.type.indexOf('tag-close') === -1) {\n                                    token = iterator.stepForward();\n                                }\n                                if (token && token.value === '>') {\n                                    var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n                                }\n                                else {\n                                    return;\n                                }\n                            }\n                        }\n                    }\n                }\n                else if (tag === currentTag && token.value === '/>') { // self-closing tag\n                    depth--;\n                    if (depth < 0) { //found self-closing tag end\n                        var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n                        var closeTagName = closeTagStart;\n                        var closeTagEnd = closeTagName;\n                        var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n                    }\n                }\n            }\n        } while (token && depth >= 0);\n        if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n            return {\n                openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n                closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n                openTagName: openTagName,\n                closeTagName: closeTagName\n            };\n        }\n    };\n    this.$findOpeningTag = function (iterator, token) {\n        var prevToken = iterator.getCurrentToken();\n        var tag = token.value;\n        var depth = 0;\n        var startRow = iterator.getCurrentTokenRow();\n        var startColumn = iterator.getCurrentTokenColumn();\n        var endColumn = startColumn + 2;\n        var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for </\n        iterator.stepForward();\n        var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n        if (token.type.indexOf('tag-close') === -1) {\n            token = iterator.stepForward();\n        }\n        if (!token || token.value !== \">\")\n            return;\n        var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n        iterator.stepBackward();\n        iterator.stepBackward();\n        do {\n            token = prevToken;\n            startRow = iterator.getCurrentTokenRow();\n            startColumn = iterator.getCurrentTokenColumn();\n            endColumn = startColumn + token.value.length;\n            prevToken = iterator.stepBackward();\n            if (token) {\n                if (token.type.indexOf('tag-name') !== -1) {\n                    if (tag === token.value) {\n                        if (prevToken.value === '<') {\n                            depth++;\n                            if (depth > 0) { //found opening tag\n                                var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n                                var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n                                do {\n                                    token = iterator.stepForward();\n                                } while (token && token.value !== '>');\n                                var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n                            }\n                        }\n                        else if (prevToken.value === '</') {\n                            depth--;\n                        }\n                    }\n                }\n                else if (token.value === '/>') { // self-closing tag\n                    var stepCount = 0;\n                    var tmpToken = prevToken;\n                    while (tmpToken) {\n                        if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n                            depth--;\n                            break;\n                        }\n                        else if (tmpToken.value === '<') {\n                            break;\n                        }\n                        tmpToken = iterator.stepBackward();\n                        stepCount++;\n                    }\n                    for (var i = 0; i < stepCount; i++) {\n                        iterator.stepForward();\n                    }\n                }\n            }\n        } while (prevToken && depth <= 0);\n        if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n            return {\n                openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n                closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n                openTagName: openTagName,\n                closeTagName: closeTagName\n            };\n        }\n    };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/line_widgets\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/undomanager\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar LineWidgets = require(\"./line_widgets\").LineWidgets;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar EditSession = /** @class */ (function () {\n    function EditSession(text, mode) { this.doc;\n        this.$breakpoints = [];\n        this.$decorations = [];\n        this.$frontMarkers = {};\n        this.$backMarkers = {};\n        this.$markerId = 1;\n        this.$undoSelect = true;\n        this.$editor = null;\n        this.prevOp = {};\n        this.$foldData = [];\n        this.id = \"session\" + (++EditSession.$uid);\n        this.$foldData.toString = function () {\n            return this.join(\"\\n\");\n        };\n        this.$gutterCustomWidgets = {};\n        this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n        var _self = this;\n        this.bgTokenizer.on(\"update\", function (e) {\n            _self._signal(\"tokenizerUpdate\", e);\n        });\n        this.on(\"changeFold\", this.onChangeFold.bind(this));\n        this.$onChange = this.onChange.bind(this);\n        if (typeof text != \"object\" || !text.getLine)\n            text = new Document(/**@type{string}*/ (text));\n        this.setDocument(text);\n        this.selection = new Selection(this);\n        this.$onSelectionChange = this.onSelectionChange.bind(this);\n        this.selection.on(\"changeSelection\", this.$onSelectionChange);\n        this.selection.on(\"changeCursor\", this.$onSelectionChange);\n        this.$bidiHandler = new BidiHandler(this);\n        config.resetOptions(this);\n        this.setMode(mode);\n        config._signal(\"session\", this);\n        this.destroyed = false;\n        this.$initOperationListeners();\n    }\n    EditSession.prototype.$initOperationListeners = function () {\n        var _this = this;\n        this.curOp = null;\n        this.on(\"change\", function () {\n            if (!_this.curOp) {\n                _this.startOperation();\n                _this.curOp.selectionBefore = _this.$lastSel;\n            }\n            _this.curOp.docChanged = true;\n        }, true);\n        this.on(\"changeSelection\", function () {\n            if (!_this.curOp) {\n                _this.startOperation();\n                _this.curOp.selectionBefore = _this.$lastSel;\n            }\n            _this.curOp.selectionChanged = true;\n        }, true);\n        this.$operationResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n    };\n    EditSession.prototype.startOperation = function (commandEvent) {\n        if (this.curOp) {\n            if (!commandEvent || this.curOp.command) {\n                return;\n            }\n            this.prevOp = this.curOp;\n        }\n        if (!commandEvent) {\n            commandEvent = {};\n        }\n        this.$operationResetTimer.schedule();\n        this.curOp = {\n            command: commandEvent.command || {},\n            args: commandEvent.args\n        };\n        this.curOp.selectionBefore = this.selection.toJSON();\n        this._signal(\"startOperation\", commandEvent);\n    };\n    EditSession.prototype.endOperation = function (e) {\n        if (this.curOp) {\n            if (e && e.returnValue === false) {\n                this.curOp = null;\n                this._signal(\"endOperation\", e);\n                return;\n            }\n            if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\") {\n                return;\n            }\n            var currentSelection = this.selection.toJSON();\n            this.curOp.selectionAfter = currentSelection;\n            this.$lastSel = this.selection.toJSON();\n            this.getUndoManager().addSelection(currentSelection);\n            this._signal(\"beforeEndOperation\");\n            this.prevOp = this.curOp;\n            this.curOp = null;\n            this._signal(\"endOperation\", e);\n        }\n    };\n    EditSession.prototype.setDocument = function (doc) {\n        if (this.doc)\n            this.doc.off(\"change\", this.$onChange);\n        this.doc = doc;\n        doc.on(\"change\", this.$onChange, true);\n        this.bgTokenizer.setDocument(this.getDocument());\n        this.resetCaches();\n    };\n    EditSession.prototype.getDocument = function () {\n        return this.doc;\n    };\n    Object.defineProperty(EditSession.prototype, \"widgetManager\", {\n        get: function () {\n            var widgetManager = new LineWidgets(this);\n            this.widgetManager = widgetManager;\n            if (this.$editor)\n                widgetManager.attach(this.$editor);\n            return widgetManager;\n        },\n        set: function (value) {\n            Object.defineProperty(this, \"widgetManager\", {\n                writable: true,\n                enumerable: true,\n                configurable: true,\n                value: value,\n            });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    EditSession.prototype.$resetRowCache = function (docRow) {\n        if (!docRow) {\n            this.$docRowCache = [];\n            this.$screenRowCache = [];\n            return;\n        }\n        var l = this.$docRowCache.length;\n        var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n        if (l > i) {\n            this.$docRowCache.splice(i, l);\n            this.$screenRowCache.splice(i, l);\n        }\n    };\n    EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) {\n        var low = 0;\n        var hi = cacheArray.length - 1;\n        while (low <= hi) {\n            var mid = (low + hi) >> 1;\n            var c = cacheArray[mid];\n            if (val > c)\n                low = mid + 1;\n            else if (val < c)\n                hi = mid - 1;\n            else\n                return mid;\n        }\n        return low - 1;\n    };\n    EditSession.prototype.resetCaches = function () {\n        this.$modified = true;\n        this.$wrapData = [];\n        this.$rowLengthCache = [];\n        this.$resetRowCache(0);\n        if (!this.destroyed)\n            this.bgTokenizer.start(0);\n    };\n    EditSession.prototype.onChangeFold = function (e) {\n        var fold = e.data;\n        this.$resetRowCache(fold.start.row);\n    };\n    EditSession.prototype.onChange = function (delta) {\n        this.$modified = true;\n        this.$bidiHandler.onChange(delta);\n        this.$resetRowCache(delta.start.row);\n        var removedFolds = this.$updateInternalDataOnChange(delta);\n        if (!this.$fromUndo && this.$undoManager) {\n            if (removedFolds && removedFolds.length) {\n                this.$undoManager.add({\n                    action: \"removeFolds\",\n                    folds: removedFolds\n                }, this.mergeUndoDeltas);\n                this.mergeUndoDeltas = true;\n            }\n            this.$undoManager.add(delta, this.mergeUndoDeltas);\n            this.mergeUndoDeltas = true;\n            this.$informUndoManager.schedule();\n        }\n        this.bgTokenizer.$updateOnChange(delta);\n        this._signal(\"change\", delta);\n    };\n    EditSession.prototype.onSelectionChange = function () {\n        this._signal(\"changeSelection\");\n    };\n    EditSession.prototype.setValue = function (text) {\n        this.doc.setValue(text);\n        this.selection.moveTo(0, 0);\n        this.$resetRowCache(0);\n        this.setUndoManager(this.$undoManager);\n        this.getUndoManager().reset();\n    };\n    EditSession.fromJSON = function (session) {\n        if (typeof session == \"string\")\n            session = JSON.parse(session);\n        var undoManager = new UndoManager();\n        undoManager.$undoStack = session.history.undo;\n        undoManager.$redoStack = session.history.redo;\n        undoManager.mark = session.history.mark;\n        undoManager.$rev = session.history.rev;\n        var editSession = new EditSession(session.value);\n        session.folds.forEach(function (fold) {\n            editSession.addFold(\"...\", Range.fromPoints(fold.start, fold.end));\n        });\n        editSession.setAnnotations(session.annotations);\n        editSession.setBreakpoints(session.breakpoints);\n        editSession.setMode(session.mode);\n        editSession.setScrollLeft(session.scrollLeft);\n        editSession.setScrollTop(session.scrollTop);\n        editSession.setUndoManager(undoManager);\n        editSession.selection.fromJSON(session.selection);\n        return editSession;\n    };\n    EditSession.prototype.toJSON = function () {\n        return {\n            annotations: this.$annotations,\n            breakpoints: this.$breakpoints,\n            folds: this.getAllFolds().map(function (fold) {\n                return fold.range;\n            }),\n            history: this.getUndoManager(),\n            mode: this.$mode.$id,\n            scrollLeft: this.$scrollLeft,\n            scrollTop: this.$scrollTop,\n            selection: this.selection.toJSON(),\n            value: this.doc.getValue()\n        };\n    };\n    EditSession.prototype.toString = function () {\n        return this.doc.getValue();\n    };\n    EditSession.prototype.getSelection = function () {\n        return this.selection;\n    };\n    EditSession.prototype.getState = function (row) {\n        return this.bgTokenizer.getState(row);\n    };\n    EditSession.prototype.getTokens = function (row) {\n        return this.bgTokenizer.getTokens(row);\n    };\n    EditSession.prototype.getTokenAt = function (row, column) {\n        var tokens = this.bgTokenizer.getTokens(row);\n        var token, c = 0;\n        if (column == null) {\n            var i = tokens.length - 1;\n            c = this.getLine(row).length;\n        }\n        else {\n            for (var i = 0; i < tokens.length; i++) {\n                c += tokens[i].value.length;\n                if (c >= column)\n                    break;\n            }\n        }\n        token = tokens[i];\n        if (!token)\n            return null;\n        token.index = i;\n        token.start = c - token.value.length;\n        return token;\n    };\n    EditSession.prototype.setUndoManager = function (undoManager) {\n        this.$undoManager = undoManager;\n        if (this.$informUndoManager)\n            this.$informUndoManager.cancel();\n        if (undoManager) {\n            var self = this;\n            undoManager.addSession(this);\n            this.$syncInformUndoManager = function () {\n                self.$informUndoManager.cancel();\n                self.mergeUndoDeltas = false;\n            };\n            this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n        }\n        else {\n            this.$syncInformUndoManager = function () { };\n        }\n    };\n    EditSession.prototype.markUndoGroup = function () {\n        if (this.$syncInformUndoManager)\n            this.$syncInformUndoManager();\n    };\n    EditSession.prototype.getUndoManager = function () {\n        return this.$undoManager || this.$defaultUndoManager;\n    };\n    EditSession.prototype.getTabString = function () {\n        if (this.getUseSoftTabs()) {\n            return lang.stringRepeat(\" \", this.getTabSize());\n        }\n        else {\n            return \"\\t\";\n        }\n    };\n    EditSession.prototype.setUseSoftTabs = function (val) {\n        this.setOption(\"useSoftTabs\", val);\n    };\n    EditSession.prototype.getUseSoftTabs = function () {\n        return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n    };\n    EditSession.prototype.setTabSize = function (tabSize) {\n        this.setOption(\"tabSize\", tabSize);\n    };\n    EditSession.prototype.getTabSize = function () {\n        return this.$tabSize;\n    };\n    EditSession.prototype.isTabStop = function (position) {\n        return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n    };\n    EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n        this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n    };\n    EditSession.prototype.getNavigateWithinSoftTabs = function () {\n        return this.$navigateWithinSoftTabs;\n    };\n    EditSession.prototype.setOverwrite = function (overwrite) {\n        this.setOption(\"overwrite\", overwrite);\n    };\n    EditSession.prototype.getOverwrite = function () {\n        return this.$overwrite;\n    };\n    EditSession.prototype.toggleOverwrite = function () {\n        this.setOverwrite(!this.$overwrite);\n    };\n    EditSession.prototype.addGutterDecoration = function (row, className) {\n        if (!this.$decorations[row])\n            this.$decorations[row] = \"\";\n        this.$decorations[row] += \" \" + className;\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.removeGutterCustomWidget = function (row) {\n        if (this.$editor) {\n            this.$editor.renderer.$gutterLayer.$removeCustomWidget(row);\n        }\n    };\n    EditSession.prototype.addGutterCustomWidget = function (row, attributes) {\n        if (this.$editor) {\n            this.$editor.renderer.$gutterLayer.$addCustomWidget(row, attributes);\n        }\n    };\n    EditSession.prototype.removeGutterDecoration = function (row, className) {\n        this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.getBreakpoints = function () {\n        return this.$breakpoints;\n    };\n    EditSession.prototype.setBreakpoints = function (rows) {\n        this.$breakpoints = [];\n        for (var i = 0; i < rows.length; i++) {\n            this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n        }\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.clearBreakpoints = function () {\n        this.$breakpoints = [];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.setBreakpoint = function (row, className) {\n        if (className === undefined)\n            className = \"ace_breakpoint\";\n        if (className)\n            this.$breakpoints[row] = className;\n        else\n            delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.clearBreakpoint = function (row) {\n        delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.addMarker = function (range, clazz, type, inFront) {\n        var id = this.$markerId++;\n        var marker = {\n            range: range,\n            type: type || \"line\",\n            renderer: typeof type == \"function\" ? type : null,\n            clazz: clazz,\n            inFront: !!inFront,\n            id: id\n        };\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        }\n        else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n        return id;\n    };\n    EditSession.prototype.addDynamicMarker = function (marker, inFront) {\n        if (!marker.update)\n            return;\n        var id = this.$markerId++;\n        marker.id = id;\n        marker.inFront = !!inFront;\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        }\n        else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n        return marker;\n    };\n    EditSession.prototype.removeMarker = function (markerId) {\n        var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n        if (!marker)\n            return;\n        var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n        delete (markers[markerId]);\n        this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n    };\n    EditSession.prototype.getMarkers = function (inFront) {\n        return inFront ? this.$frontMarkers : this.$backMarkers;\n    };\n    EditSession.prototype.highlight = function (re) {\n        if (!this.$searchHighlight) {\n            var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n            this.$searchHighlight = this.addDynamicMarker(highlight);\n        }\n        this.$searchHighlight.setRegexp(re);\n    };\n    EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) {\n        if (typeof endRow != \"number\") {\n            clazz = endRow;\n            endRow = startRow;\n        }\n        if (!clazz)\n            clazz = \"ace_step\";\n        var range = new Range(startRow, 0, endRow, Infinity);\n        range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n        return range;\n    };\n    EditSession.prototype.setAnnotations = function (annotations) {\n        this.$annotations = annotations;\n        this._signal(\"changeAnnotation\", {});\n    };\n    EditSession.prototype.getAnnotations = function () {\n        return this.$annotations || [];\n    };\n    EditSession.prototype.clearAnnotations = function () {\n        this.setAnnotations([]);\n    };\n    EditSession.prototype.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r?\\n)/m);\n        if (match) {\n            this.$autoNewLine = match[1];\n        }\n        else {\n            this.$autoNewLine = \"\\n\";\n        }\n    };\n    EditSession.prototype.getWordRange = function (row, column) {\n        var line = this.getLine(row);\n        var inToken = false;\n        if (column > 0)\n            inToken = !!line.charAt(column - 1).match(this.tokenRe);\n        if (!inToken)\n            inToken = !!line.charAt(column).match(this.tokenRe);\n        if (inToken)\n            var re = this.tokenRe;\n        else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n            var re = /\\s/;\n        else\n            var re = this.nonTokenRe;\n        var start = column;\n        if (start > 0) {\n            do {\n                start--;\n            } while (start >= 0 && line.charAt(start).match(re));\n            start++;\n        }\n        var end = column;\n        while (end < line.length && line.charAt(end).match(re)) {\n            end++;\n        }\n        return new Range(row, start, row, end);\n    };\n    EditSession.prototype.getAWordRange = function (row, column) {\n        var wordRange = this.getWordRange(row, column);\n        var line = this.getLine(wordRange.end.row);\n        while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n            wordRange.end.column += 1;\n        }\n        return wordRange;\n    };\n    EditSession.prototype.setNewLineMode = function (newLineMode) {\n        this.doc.setNewLineMode(newLineMode);\n    };\n    EditSession.prototype.getNewLineMode = function () {\n        return this.doc.getNewLineMode();\n    };\n    EditSession.prototype.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n    EditSession.prototype.getUseWorker = function () { return this.$useWorker; };\n    EditSession.prototype.onReloadTokenizer = function (e) {\n        var rows = e.data;\n        this.bgTokenizer.start(rows.first);\n        this._signal(\"tokenizerUpdate\", e);\n    };\n    EditSession.prototype.setMode = function (mode, cb) {\n        if (mode && typeof mode === \"object\") {\n            if (mode.getTokenizer)\n                return this.$onChangeMode(mode);\n            var options = mode;\n            var path = options.path;\n        }\n        else {\n            path = /**@type{string}*/ (mode) || \"ace/mode/text\";\n        }\n        if (!this.$modes[\"ace/mode/text\"])\n            this.$modes[\"ace/mode/text\"] = new TextMode();\n        if (this.$modes[path] && !options) {\n            this.$onChangeMode(this.$modes[path]);\n            cb && cb();\n            return;\n        }\n        this.$modeId = path;\n        config.loadModule([\"mode\", path], function (m) {\n            if (this.destroyed) {\n                return;\n            }\n            if (this.$modeId !== path)\n                return cb && cb();\n            if (this.$modes[path] && !options) {\n                this.$onChangeMode(this.$modes[path]);\n            }\n            else if (m && m.Mode) {\n                m = new m.Mode(options);\n                if (!options) {\n                    this.$modes[path] = m;\n                    m.$id = path;\n                }\n                this.$onChangeMode(m);\n            }\n            cb && cb();\n        }.bind(this));\n        if (!this.$mode)\n            this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n    };\n    EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) {\n        if (!$isPlaceholder)\n            this.$modeId = mode.$id;\n        if (this.$mode === mode)\n            return;\n        var oldMode = this.$mode;\n        this.$mode = mode;\n        this.$stopWorker();\n        if (this.$useWorker)\n            this.$startWorker();\n        var tokenizer = mode.getTokenizer();\n        if (tokenizer.on !== undefined) {\n            var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n            tokenizer.on(\"update\", onReloadTokenizer);\n        }\n        this.bgTokenizer.setTokenizer(tokenizer);\n        this.bgTokenizer.setDocument(this.getDocument());\n        this.tokenRe = mode.tokenRe;\n        this.nonTokenRe = mode.nonTokenRe;\n        if (!$isPlaceholder) {\n            if (mode.attachToSession)\n                mode.attachToSession(this);\n            this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n            this.$setFolding(mode.foldingRules);\n            this.bgTokenizer.start(0);\n            this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n        }\n    };\n    EditSession.prototype.$stopWorker = function () {\n        if (this.$worker) {\n            this.$worker.terminate();\n            this.$worker = null;\n        }\n    };\n    EditSession.prototype.$startWorker = function () {\n        try {\n            this.$worker = this.$mode.createWorker(this);\n        }\n        catch (e) {\n            config.warn(\"Could not load worker\", e);\n            this.$worker = null;\n        }\n    };\n    EditSession.prototype.getMode = function () {\n        return this.$mode;\n    };\n    EditSession.prototype.setScrollTop = function (scrollTop) {\n        if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n            return;\n        this.$scrollTop = scrollTop;\n        this._signal(\"changeScrollTop\", scrollTop);\n    };\n    EditSession.prototype.getScrollTop = function () {\n        return this.$scrollTop;\n    };\n    EditSession.prototype.setScrollLeft = function (scrollLeft) {\n        if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n            return;\n        this.$scrollLeft = scrollLeft;\n        this._signal(\"changeScrollLeft\", scrollLeft);\n    };\n    EditSession.prototype.getScrollLeft = function () {\n        return this.$scrollLeft;\n    };\n    EditSession.prototype.getScreenWidth = function () {\n        this.$computeWidth();\n        if (this.lineWidgets)\n            return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n        return this.screenWidth;\n    };\n    EditSession.prototype.getLineWidgetMaxWidth = function () {\n        if (this.lineWidgetsWidth != null)\n            return this.lineWidgetsWidth;\n        var width = 0;\n        this.lineWidgets.forEach(function (w) {\n            if (w && w.screenWidth > width)\n                width = w.screenWidth;\n        });\n        return this.lineWidgetWidth = width;\n    };\n    EditSession.prototype.$computeWidth = function (force) {\n        if (this.$modified || force) {\n            this.$modified = false;\n            if (this.$useWrapMode)\n                return this.screenWidth = this.$wrapLimit;\n            var lines = this.doc.getAllLines();\n            var cache = this.$rowLengthCache;\n            var longestScreenLine = 0;\n            var foldIndex = 0;\n            var foldLine = this.$foldData[foldIndex];\n            var foldStart = foldLine ? foldLine.start.row : Infinity;\n            var len = lines.length;\n            for (var i = 0; i < len; i++) {\n                if (i > foldStart) {\n                    i = foldLine.end.row + 1;\n                    if (i >= len)\n                        break;\n                    foldLine = this.$foldData[foldIndex++];\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n                if (cache[i] == null)\n                    cache[i] = this.$getStringScreenWidth(lines[i])[0];\n                if (cache[i] > longestScreenLine)\n                    longestScreenLine = cache[i];\n            }\n            this.screenWidth = longestScreenLine;\n        }\n    };\n    EditSession.prototype.getLine = function (row) {\n        return this.doc.getLine(row);\n    };\n    EditSession.prototype.getLines = function (firstRow, lastRow) {\n        return this.doc.getLines(firstRow, lastRow);\n    };\n    EditSession.prototype.getLength = function () {\n        return this.doc.getLength();\n    };\n    EditSession.prototype.getTextRange = function (range) {\n        return this.doc.getTextRange(range || this.selection.getRange());\n    };\n    EditSession.prototype.insert = function (position, text) {\n        return this.doc.insert(position, text);\n    };\n    EditSession.prototype.remove = function (range) {\n        return this.doc.remove(range);\n    };\n    EditSession.prototype.removeFullLines = function (firstRow, lastRow) {\n        return this.doc.removeFullLines(firstRow, lastRow);\n    };\n    EditSession.prototype.undoChanges = function (deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n        this.$fromUndo = true;\n        for (var i = deltas.length - 1; i != -1; i--) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.revertDelta(delta);\n            }\n            else if (delta.folds) {\n                this.addFolds(delta.folds);\n            }\n        }\n        if (!dontSelect && this.$undoSelect) {\n            if (deltas.selectionBefore)\n                this.selection.fromJSON(deltas.selectionBefore);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, true));\n        }\n        this.$fromUndo = false;\n    };\n    EditSession.prototype.redoChanges = function (deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n        this.$fromUndo = true;\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.$safeApplyDelta(delta);\n            }\n        }\n        if (!dontSelect && this.$undoSelect) {\n            if (deltas.selectionAfter)\n                this.selection.fromJSON(deltas.selectionAfter);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, false));\n        }\n        this.$fromUndo = false;\n    };\n    EditSession.prototype.setUndoSelect = function (enable) {\n        this.$undoSelect = enable;\n    };\n    EditSession.prototype.$getUndoSelection = function (deltas, isUndo) {\n        function isInsert(delta) {\n            return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n        }\n        var range, point;\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (!delta.start)\n                continue; // skip folds\n            if (!range) {\n                if (isInsert(delta)) {\n                    range = Range.fromPoints(delta.start, delta.end);\n                }\n                else {\n                    range = Range.fromPoints(delta.start, delta.start);\n                }\n                continue;\n            }\n            if (isInsert(delta)) {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range.setStart(point);\n                }\n                point = delta.end;\n                if (range.compare(point.row, point.column) == 1) {\n                    range.setEnd(point);\n                }\n            }\n            else {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range = Range.fromPoints(delta.start, delta.start);\n                }\n            }\n        }\n        return range;\n    };\n    EditSession.prototype.replace = function (range, text) {\n        return this.doc.replace(range, text);\n    };\n    EditSession.prototype.moveText = function (fromRange, toPosition, copy) {\n        var text = this.getTextRange(fromRange);\n        var folds = this.getFoldsInRange(fromRange);\n        var toRange = Range.fromPoints(toPosition, toPosition);\n        if (!copy) {\n            this.remove(fromRange);\n            var rowDiff = fromRange.start.row - fromRange.end.row;\n            var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n            if (collDiff) {\n                if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n                    toRange.start.column += collDiff;\n                if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n                    toRange.end.column += collDiff;\n            }\n            if (rowDiff && toRange.start.row >= fromRange.end.row) {\n                toRange.start.row += rowDiff;\n                toRange.end.row += rowDiff;\n            }\n        }\n        toRange.end = this.insert(toRange.start, text);\n        if (folds.length) {\n            var oldStart = fromRange.start;\n            var newStart = toRange.start;\n            var rowDiff = newStart.row - oldStart.row;\n            var collDiff = newStart.column - oldStart.column;\n            this.addFolds(folds.map(function (x) {\n                x = x.clone();\n                if (x.start.row == oldStart.row)\n                    x.start.column += collDiff;\n                if (x.end.row == oldStart.row)\n                    x.end.column += collDiff;\n                x.start.row += rowDiff;\n                x.end.row += rowDiff;\n                return x;\n            }));\n        }\n        return toRange;\n    };\n    EditSession.prototype.indentRows = function (startRow, endRow, indentString) {\n        indentString = indentString.replace(/\\t/g, this.getTabString());\n        for (var row = startRow; row <= endRow; row++)\n            this.doc.insertInLine({ row: row, column: 0 }, indentString);\n    };\n    EditSession.prototype.outdentRows = function (range) {\n        var rowRange = range.collapseRows();\n        var deleteRange = new Range(0, 0, 0, 0);\n        var size = this.getTabSize();\n        for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n            var line = this.getLine(i);\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            for (var j = 0; j < size; ++j)\n                if (line.charAt(j) != ' ')\n                    break;\n            if (j < size && line.charAt(j) == '\\t') {\n                deleteRange.start.column = j;\n                deleteRange.end.column = j + 1;\n            }\n            else {\n                deleteRange.start.column = 0;\n                deleteRange.end.column = j;\n            }\n            this.remove(deleteRange);\n        }\n    };\n    EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) {\n        firstRow = this.getRowFoldStart(firstRow);\n        lastRow = this.getRowFoldEnd(lastRow);\n        if (dir < 0) {\n            var row = this.getRowFoldStart(firstRow + dir);\n            if (row < 0)\n                return 0;\n            var diff = row - firstRow;\n        }\n        else if (dir > 0) {\n            var row = this.getRowFoldEnd(lastRow + dir);\n            if (row > this.doc.getLength() - 1)\n                return 0;\n            var diff = row - lastRow;\n        }\n        else {\n            firstRow = this.$clipRowToDocument(firstRow);\n            lastRow = this.$clipRowToDocument(lastRow);\n            var diff = lastRow - firstRow + 1;\n        }\n        var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n        var folds = this.getFoldsInRange(range).map(function (x) {\n            x = x.clone();\n            x.start.row += diff;\n            x.end.row += diff;\n            return x;\n        });\n        var lines = dir == 0\n            ? this.doc.getLines(firstRow, lastRow)\n            : this.doc.removeFullLines(firstRow, lastRow);\n        this.doc.insertFullLines(firstRow + diff, lines);\n        folds.length && this.addFolds(folds);\n        return diff;\n    };\n    EditSession.prototype.moveLinesUp = function (firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, -1);\n    };\n    EditSession.prototype.moveLinesDown = function (firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 1);\n    };\n    EditSession.prototype.duplicateLines = function (firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 0);\n    };\n    EditSession.prototype.$clipRowToDocument = function (row) {\n        return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n    };\n    EditSession.prototype.$clipColumnToRow = function (row, column) {\n        if (column < 0)\n            return 0;\n        return Math.min(this.doc.getLine(row).length, column);\n    };\n    EditSession.prototype.$clipPositionToDocument = function (row, column) {\n        column = Math.max(0, column);\n        if (row < 0) {\n            row = 0;\n            column = 0;\n        }\n        else {\n            var len = this.doc.getLength();\n            if (row >= len) {\n                row = len - 1;\n                column = this.doc.getLine(len - 1).length;\n            }\n            else {\n                column = Math.min(this.doc.getLine(row).length, column);\n            }\n        }\n        return {\n            row: row,\n            column: column\n        };\n    };\n    EditSession.prototype.$clipRangeToDocument = function (range) {\n        if (range.start.row < 0) {\n            range.start.row = 0;\n            range.start.column = 0;\n        }\n        else {\n            range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n        }\n        var len = this.doc.getLength() - 1;\n        if (range.end.row > len) {\n            range.end.row = len;\n            range.end.column = this.doc.getLine(len).length;\n        }\n        else {\n            range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n        }\n        return range;\n    };\n    EditSession.prototype.setUseWrapMode = function (useWrapMode) {\n        if (useWrapMode != this.$useWrapMode) {\n            this.$useWrapMode = useWrapMode;\n            this.$modified = true;\n            this.$resetRowCache(0);\n            if (useWrapMode) {\n                var len = this.getLength();\n                this.$wrapData = Array(len);\n                this.$updateWrapData(0, len - 1);\n            }\n            this._signal(\"changeWrapMode\");\n        }\n    };\n    EditSession.prototype.getUseWrapMode = function () {\n        return this.$useWrapMode;\n    };\n    EditSession.prototype.setWrapLimitRange = function (min, max) {\n        if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n            this.$wrapLimitRange = { min: min, max: max };\n            this.$modified = true;\n            this.$bidiHandler.markAsDirty();\n            if (this.$useWrapMode)\n                this._signal(\"changeWrapMode\");\n        }\n    };\n    EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) {\n        var limits = this.$wrapLimitRange;\n        if (limits.max < 0)\n            limits = { min: $printMargin, max: $printMargin };\n        var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n        if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n            this.$wrapLimit = wrapLimit;\n            this.$modified = true;\n            if (this.$useWrapMode) {\n                this.$updateWrapData(0, this.getLength() - 1);\n                this.$resetRowCache(0);\n                this._signal(\"changeWrapLimit\");\n            }\n            return true;\n        }\n        return false;\n    };\n    EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) {\n        if (min)\n            wrapLimit = Math.max(min, wrapLimit);\n        if (max)\n            wrapLimit = Math.min(max, wrapLimit);\n        return wrapLimit;\n    };\n    EditSession.prototype.getWrapLimit = function () {\n        return this.$wrapLimit;\n    };\n    EditSession.prototype.setWrapLimit = function (limit) {\n        this.setWrapLimitRange(limit, limit);\n    };\n    EditSession.prototype.getWrapLimitRange = function () {\n        return {\n            min: this.$wrapLimitRange.min,\n            max: this.$wrapLimitRange.max\n        };\n    };\n    EditSession.prototype.$updateInternalDataOnChange = function (delta) {\n        var useWrapMode = this.$useWrapMode;\n        var action = delta.action;\n        var start = delta.start;\n        var end = delta.end;\n        var firstRow = start.row;\n        var lastRow = end.row;\n        var len = lastRow - firstRow;\n        var removedFolds = null;\n        this.$updating = true;\n        if (len != 0) {\n            if (action === \"remove\") {\n                this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n                var foldLines = this.$foldData;\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n                var foldLine = this.getFoldLine(end.row);\n                var idx = 0;\n                if (foldLine) {\n                    foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n                    foldLine.shiftRow(-len);\n                    var foldLineBefore = this.getFoldLine(firstRow);\n                    if (foldLineBefore && foldLineBefore !== foldLine) {\n                        foldLineBefore.merge(foldLine);\n                        foldLine = foldLineBefore;\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= end.row) {\n                        foldLine.shiftRow(-len);\n                    }\n                }\n                lastRow = firstRow;\n            }\n            else {\n                var args = Array(len);\n                args.unshift(firstRow, 0);\n                var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n                arr.splice.apply(arr, args);\n                var foldLines = this.$foldData;\n                var foldLine = this.getFoldLine(firstRow);\n                var idx = 0;\n                if (foldLine) {\n                    var cmp = foldLine.range.compareInside(start.row, start.column);\n                    if (cmp == 0) {\n                        foldLine = foldLine.split(start.row, start.column);\n                        if (foldLine) {\n                            foldLine.shiftRow(len);\n                            foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n                        }\n                    }\n                    else \n                    if (cmp == -1) {\n                        foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n                        foldLine.shiftRow(len);\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= firstRow) {\n                        foldLine.shiftRow(len);\n                    }\n                }\n            }\n        }\n        else {\n            len = Math.abs(delta.start.column - delta.end.column);\n            if (action === \"remove\") {\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n                len = -len;\n            }\n            var foldLine = this.getFoldLine(firstRow);\n            if (foldLine) {\n                foldLine.addRemoveChars(firstRow, start.column, len);\n            }\n        }\n        if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n            console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n        }\n        this.$updating = false;\n        if (useWrapMode)\n            this.$updateWrapData(firstRow, lastRow);\n        else\n            this.$updateRowLengthCache(firstRow, lastRow);\n        return removedFolds;\n    };\n    EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) {\n        this.$rowLengthCache[firstRow] = null;\n        this.$rowLengthCache[lastRow] = null;\n    };\n    EditSession.prototype.$updateWrapData = function (firstRow, lastRow) {\n        var lines = this.doc.getAllLines();\n        var tabSize = this.getTabSize();\n        var wrapData = this.$wrapData;\n        var wrapLimit = this.$wrapLimit;\n        var tokens;\n        var foldLine;\n        var row = firstRow;\n        lastRow = Math.min(lastRow, lines.length - 1);\n        while (row <= lastRow) {\n            foldLine = this.getFoldLine(row, foldLine);\n            if (!foldLine) {\n                tokens = this.$getDisplayTokens(lines[row]);\n                wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row++;\n            }\n            else {\n                tokens = [];\n                foldLine.walk(function (placeholder, row, column, lastColumn) {\n                    var walkTokens;\n                    if (placeholder != null) {\n                        walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n                        walkTokens[0] = PLACEHOLDER_START;\n                        for (var i = 1; i < walkTokens.length; i++) {\n                            walkTokens[i] = PLACEHOLDER_BODY;\n                        }\n                    }\n                    else {\n                        walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n                    }\n                    tokens = tokens.concat(walkTokens);\n                }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n                wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row = foldLine.end.row + 1;\n            }\n        }\n    };\n    EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n        if (tokens.length == 0) {\n            return [];\n        }\n        var splits = [];\n        var displayLength = tokens.length;\n        var lastSplit = 0, lastDocSplit = 0;\n        var isCode = this.$wrapAsCode;\n        var indentedSoftWrap = this.$indentedSoftWrap;\n        var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n            || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n        function getWrapIndent() {\n            var indentation = 0;\n            if (maxIndent === 0)\n                return indentation;\n            if (indentedSoftWrap) {\n                for (var i = 0; i < tokens.length; i++) {\n                    var token = tokens[i];\n                    if (token == SPACE)\n                        indentation += 1;\n                    else if (token == TAB)\n                        indentation += tabSize;\n                    else if (token == TAB_SPACE)\n                        continue;\n                    else\n                        break;\n                }\n            }\n            if (isCode && indentedSoftWrap !== false)\n                indentation += tabSize;\n            return Math.min(indentation, maxIndent);\n        }\n        function addSplit(screenPos) {\n            var len = screenPos - lastSplit;\n            for (var i = lastSplit; i < screenPos; i++) {\n                var ch = tokens[i];\n                if (ch === 12 || ch === 2)\n                    len -= 1;\n            }\n            if (!splits.length) {\n                indent = getWrapIndent();\n                splits.indent = indent;\n            }\n            lastDocSplit += len;\n            splits.push(lastDocSplit);\n            lastSplit = screenPos;\n        }\n        var indent = 0;\n        while (displayLength - lastSplit > wrapLimit - indent) {\n            var split = lastSplit + wrapLimit - indent;\n            if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n                addSplit(split);\n                continue;\n            }\n            if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n                for (split; split != lastSplit - 1; split--) {\n                    if (tokens[split] == PLACEHOLDER_START) {\n                        break;\n                    }\n                }\n                if (split > lastSplit) {\n                    addSplit(split);\n                    continue;\n                }\n                split = lastSplit + wrapLimit;\n                for (split; split < tokens.length; split++) {\n                    if (tokens[split] != PLACEHOLDER_BODY) {\n                        break;\n                    }\n                }\n                if (split == tokens.length) {\n                    break; // Breaks the while-loop.\n                }\n                addSplit(split);\n                continue;\n            }\n            var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n            while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                split--;\n            }\n            if (isCode) {\n                while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                    split--;\n                }\n                while (split > minSplit && tokens[split] == PUNCTUATION) {\n                    split--;\n                }\n            }\n            else {\n                while (split > minSplit && tokens[split] < SPACE) {\n                    split--;\n                }\n            }\n            if (split > minSplit) {\n                addSplit(++split);\n                continue;\n            }\n            split = lastSplit + wrapLimit;\n            if (tokens[split] == CHAR_EXT)\n                split--;\n            addSplit(split - indent);\n        }\n        return splits;\n    };\n    EditSession.prototype.$getDisplayTokens = function (str, offset) {\n        var arr = [];\n        var tabSize;\n        offset = offset || 0;\n        for (var i = 0; i < str.length; i++) {\n            var c = str.charCodeAt(i);\n            if (c == 9) {\n                tabSize = this.getScreenTabSize(arr.length + offset);\n                arr.push(TAB);\n                for (var n = 1; n < tabSize; n++) {\n                    arr.push(TAB_SPACE);\n                }\n            }\n            else if (c == 32) {\n                arr.push(SPACE);\n            }\n            else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n                arr.push(PUNCTUATION);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                arr.push(CHAR, CHAR_EXT);\n            }\n            else {\n                arr.push(CHAR);\n            }\n        }\n        return arr;\n    };\n    EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n        if (maxScreenColumn == 0)\n            return [0, 0];\n        if (maxScreenColumn == null)\n            maxScreenColumn = Infinity;\n        screenColumn = screenColumn || 0;\n        var c, column;\n        for (column = 0; column < str.length; column++) {\n            c = str.charCodeAt(column);\n            if (c == 9) {\n                screenColumn += this.getScreenTabSize(screenColumn);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                screenColumn += 2;\n            }\n            else {\n                screenColumn += 1;\n            }\n            if (screenColumn > maxScreenColumn) {\n                break;\n            }\n        }\n        return [screenColumn, column];\n    };\n    EditSession.prototype.getRowLength = function (row) {\n        var h = 1;\n        if (this.lineWidgets)\n            h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        if (!this.$useWrapMode || !this.$wrapData[row])\n            return h;\n        else\n            return this.$wrapData[row].length + h;\n    };\n    EditSession.prototype.getRowLineCount = function (row) {\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1;\n        }\n        else {\n            return this.$wrapData[row].length + 1;\n        }\n    };\n    EditSession.prototype.getRowWrapIndent = function (screenRow) {\n        if (this.$useWrapMode) {\n            var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n            var splits = this.$wrapData[pos.row];\n            return splits.length && splits[0] < pos.column ? splits.indent : 0;\n        }\n        else {\n            return 0;\n        }\n    };\n    EditSession.prototype.getScreenLastRowColumn = function (screenRow) {\n        var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n        return this.documentToScreenColumn(pos.row, pos.column);\n    };\n    EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.getScreenLastRowColumn(screenRow);\n    };\n    EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n    };\n    EditSession.prototype.getRowSplitData = function (row) {\n        if (!this.$useWrapMode) {\n            return undefined;\n        }\n        else {\n            return this.$wrapData[row];\n        }\n    };\n    EditSession.prototype.getScreenTabSize = function (screenColumn) {\n        return this.$tabSize - (screenColumn % this.$tabSize | 0);\n    };\n    EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).row;\n    };\n    EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).column;\n    };\n    EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n        if (screenRow < 0)\n            return { row: 0, column: 0 };\n        var line;\n        var docRow = 0;\n        var docColumn = 0;\n        var column;\n        var row = 0;\n        var rowLength = 0;\n        var rowCache = this.$screenRowCache;\n        var i = this.$getRowCacheIndex(rowCache, screenRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var docRow = this.$docRowCache[i];\n            var doCache = screenRow > rowCache[l - 1];\n        }\n        else {\n            var doCache = !l;\n        }\n        var maxRow = this.getLength() - 1;\n        var foldLine = this.getNextFoldLine(docRow);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (row <= screenRow) {\n            rowLength = this.getRowLength(docRow);\n            if (row + rowLength > screenRow || docRow >= maxRow) {\n                break;\n            }\n            else {\n                row += rowLength;\n                docRow++;\n                if (docRow > foldStart) {\n                    docRow = foldLine.end.row + 1;\n                    foldLine = this.getNextFoldLine(docRow, foldLine);\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n            }\n            if (doCache) {\n                this.$docRowCache.push(docRow);\n                this.$screenRowCache.push(row);\n            }\n        }\n        if (foldLine && foldLine.start.row <= docRow) {\n            line = this.getFoldDisplayLine(foldLine);\n            docRow = foldLine.start.row;\n        }\n        else if (row + rowLength <= screenRow || docRow > maxRow) {\n            return {\n                row: maxRow,\n                column: this.getLine(maxRow).length\n            };\n        }\n        else {\n            line = this.getLine(docRow);\n            foldLine = null;\n        }\n        var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n        if (this.$useWrapMode) {\n            var splits = this.$wrapData[docRow];\n            if (splits) {\n                column = splits[splitIndex];\n                if (splitIndex > 0 && splits.length) {\n                    wrapIndent = splits.indent;\n                    docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n                    line = line.substring(docColumn);\n                }\n            }\n        }\n        if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n            screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n        docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n        if (this.$useWrapMode && docColumn >= column)\n            docColumn = column - 1;\n        if (foldLine)\n            return foldLine.idxToPosition(docColumn);\n        return { row: docRow, column: docColumn };\n    };\n    EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) {\n        if (typeof docColumn === \"undefined\")\n            var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column);\n        else\n            pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn);\n        docRow = pos.row;\n        docColumn = pos.column;\n        var screenRow = 0;\n        var foldStartRow = null;\n        var fold = null;\n        fold = this.getFoldAt(docRow, docColumn, 1);\n        if (fold) {\n            docRow = fold.start.row;\n            docColumn = fold.start.column;\n        }\n        var rowEnd, row = 0;\n        var rowCache = this.$docRowCache;\n        var i = this.$getRowCacheIndex(rowCache, docRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var screenRow = this.$screenRowCache[i];\n            var doCache = docRow > rowCache[l - 1];\n        }\n        else {\n            var doCache = !l;\n        }\n        var foldLine = this.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (row < docRow) {\n            if (row >= foldStart) {\n                rowEnd = foldLine.end.row + 1;\n                if (rowEnd > docRow)\n                    break;\n                foldLine = this.getNextFoldLine(rowEnd, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            else {\n                rowEnd = row + 1;\n            }\n            screenRow += this.getRowLength(row);\n            row = rowEnd;\n            if (doCache) {\n                this.$docRowCache.push(row);\n                this.$screenRowCache.push(screenRow);\n            }\n        }\n        var textLine = \"\";\n        if (foldLine && row >= foldStart) {\n            textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n            foldStartRow = foldLine.start.row;\n        }\n        else {\n            textLine = this.getLine(docRow).substring(0, docColumn);\n            foldStartRow = docRow;\n        }\n        var wrapIndent = 0;\n        if (this.$useWrapMode) {\n            var wrapRow = this.$wrapData[foldStartRow];\n            if (wrapRow) {\n                var screenRowOffset = 0;\n                while (textLine.length >= wrapRow[screenRowOffset]) {\n                    screenRow++;\n                    screenRowOffset++;\n                }\n                textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n                wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n            }\n        }\n        if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n            screenRow += this.lineWidgets[row].rowsAbove;\n        return {\n            row: screenRow,\n            column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n        };\n    };\n    EditSession.prototype.documentToScreenColumn = function (row, docColumn) {\n        return this.documentToScreenPosition(row, docColumn).column;\n    };\n    EditSession.prototype.documentToScreenRow = function (docRow, docColumn) {\n        return this.documentToScreenPosition(docRow, docColumn).row;\n    };\n    EditSession.prototype.getScreenLength = function () {\n        var screenRows = 0;\n        var fold = null;\n        if (!this.$useWrapMode) {\n            screenRows = this.getLength();\n            var foldData = this.$foldData;\n            for (var i = 0; i < foldData.length; i++) {\n                fold = foldData[i];\n                screenRows -= fold.end.row - fold.start.row;\n            }\n        }\n        else {\n            var lastRow = this.$wrapData.length;\n            var row = 0, i = 0;\n            var fold = this.$foldData[i++];\n            var foldStart = fold ? fold.start.row : Infinity;\n            while (row < lastRow) {\n                var splits = this.$wrapData[row];\n                screenRows += splits ? splits.length + 1 : 1;\n                row++;\n                if (row > foldStart) {\n                    row = fold.end.row + 1;\n                    fold = this.$foldData[i++];\n                    foldStart = fold ? fold.start.row : Infinity;\n                }\n            }\n        }\n        if (this.lineWidgets)\n            screenRows += this.$getWidgetScreenLength();\n        return screenRows;\n    };\n    EditSession.prototype.$setFontMetrics = function (fm) {\n        if (!this.$enableVarChar)\n            return;\n        this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n            if (maxScreenColumn === 0)\n                return [0, 0];\n            if (!maxScreenColumn)\n                maxScreenColumn = Infinity;\n            screenColumn = screenColumn || 0;\n            var c, column;\n            for (column = 0; column < str.length; column++) {\n                c = str.charAt(column);\n                if (c === \"\\t\") {\n                    screenColumn += this.getScreenTabSize(screenColumn);\n                }\n                else {\n                    screenColumn += fm.getCharacterWidth(c);\n                }\n                if (screenColumn > maxScreenColumn) {\n                    break;\n                }\n            }\n            return [screenColumn, column];\n        };\n    };\n    EditSession.prototype.getPrecedingCharacter = function () {\n        var pos = this.selection.getCursor();\n        if (pos.column === 0) {\n            return pos.row === 0 ? \"\" : this.doc.getNewLineCharacter();\n        }\n        var currentLine = this.getLine(pos.row);\n        return currentLine[pos.column - 1];\n    };\n    EditSession.prototype.destroy = function () {\n        if (!this.destroyed) {\n            this.bgTokenizer.setDocument(null);\n            this.bgTokenizer.cleanup();\n            this.destroyed = true;\n        }\n        this.endOperation();\n        this.$stopWorker();\n        this.removeAllListeners();\n        if (this.doc) {\n            this.doc.off(\"change\", this.$onChange);\n        }\n        if (this.selection) {\n            this.selection.off(\"changeCursor\", this.$onSelectionChange);\n            this.selection.off(\"changeSelection\", this.$onSelectionChange);\n        }\n        this.selection.detach();\n    };\n    return EditSession;\n}());\nEditSession.$uid = 0;\nEditSession.prototype.$modes = config.$modes;\nEditSession.prototype.getValue = EditSession.prototype.toString;\nEditSession.prototype.$defaultUndoManager = {\n    undo: function () { },\n    redo: function () { },\n    hasUndo: function () { },\n    hasRedo: function () { },\n    reset: function () { },\n    add: function () { },\n    addSelection: function () { },\n    startNewGroup: function () { },\n    addSession: function () { }\n};\nEditSession.prototype.$overwrite = false;\nEditSession.prototype.$mode = null;\nEditSession.prototype.$modeId = null;\nEditSession.prototype.$scrollTop = 0;\nEditSession.prototype.$scrollLeft = 0;\nEditSession.prototype.$wrapLimit = 80;\nEditSession.prototype.$useWrapMode = false;\nEditSession.prototype.$wrapLimitRange = {\n    min: null,\n    max: null\n};\nEditSession.prototype.lineWidgets = null;\nEditSession.prototype.isFullWidth = isFullWidth;\noop.implement(EditSession.prototype, EventEmitter);\nvar CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\nfunction isFullWidth(c) {\n    if (c < 0x1100)\n        return false;\n    return c >= 0x1100 && c <= 0x115F ||\n        c >= 0x11A3 && c <= 0x11A7 ||\n        c >= 0x11FA && c <= 0x11FF ||\n        c >= 0x2329 && c <= 0x232A ||\n        c >= 0x2E80 && c <= 0x2E99 ||\n        c >= 0x2E9B && c <= 0x2EF3 ||\n        c >= 0x2F00 && c <= 0x2FD5 ||\n        c >= 0x2FF0 && c <= 0x2FFB ||\n        c >= 0x3000 && c <= 0x303E ||\n        c >= 0x3041 && c <= 0x3096 ||\n        c >= 0x3099 && c <= 0x30FF ||\n        c >= 0x3105 && c <= 0x312D ||\n        c >= 0x3131 && c <= 0x318E ||\n        c >= 0x3190 && c <= 0x31BA ||\n        c >= 0x31C0 && c <= 0x31E3 ||\n        c >= 0x31F0 && c <= 0x321E ||\n        c >= 0x3220 && c <= 0x3247 ||\n        c >= 0x3250 && c <= 0x32FE ||\n        c >= 0x3300 && c <= 0x4DBF ||\n        c >= 0x4E00 && c <= 0xA48C ||\n        c >= 0xA490 && c <= 0xA4C6 ||\n        c >= 0xA960 && c <= 0xA97C ||\n        c >= 0xAC00 && c <= 0xD7A3 ||\n        c >= 0xD7B0 && c <= 0xD7C6 ||\n        c >= 0xD7CB && c <= 0xD7FB ||\n        c >= 0xF900 && c <= 0xFAFF ||\n        c >= 0xFE10 && c <= 0xFE19 ||\n        c >= 0xFE30 && c <= 0xFE52 ||\n        c >= 0xFE54 && c <= 0xFE66 ||\n        c >= 0xFE68 && c <= 0xFE6B ||\n        c >= 0xFF01 && c <= 0xFF60 ||\n        c >= 0xFFE0 && c <= 0xFFE6;\n}\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n    wrap: {\n        set: function (value) {\n            if (!value || value == \"off\")\n                value = false;\n            else if (value == \"free\")\n                value = true;\n            else if (value == \"printMargin\")\n                value = -1;\n            else if (typeof value == \"string\")\n                value = parseInt(value, 10) || false;\n            if (this.$wrap == value)\n                return;\n            this.$wrap = value;\n            if (!value) {\n                this.setUseWrapMode(false);\n            }\n            else {\n                var col = typeof value == \"number\" ? value : null;\n                this.setWrapLimitRange(col, col);\n                this.setUseWrapMode(true);\n            }\n        },\n        get: function () {\n            if (this.getUseWrapMode()) {\n                if (this.$wrap == -1)\n                    return \"printMargin\";\n                if (!this.getWrapLimitRange().min)\n                    return \"free\";\n                return this.$wrap;\n            }\n            return \"off\";\n        },\n        handlesSet: true\n    },\n    wrapMethod: {\n        set: function (val) {\n            val = val == \"auto\"\n                ? this.$mode.type != \"text\"\n                : val != \"text\";\n            if (val != this.$wrapAsCode) {\n                this.$wrapAsCode = val;\n                if (this.$useWrapMode) {\n                    this.$useWrapMode = false;\n                    this.setUseWrapMode(true);\n                }\n            }\n        },\n        initialValue: \"auto\"\n    },\n    indentedSoftWrap: {\n        set: function () {\n            if (this.$useWrapMode) {\n                this.$useWrapMode = false;\n                this.setUseWrapMode(true);\n            }\n        },\n        initialValue: true\n    },\n    firstLineNumber: {\n        set: function () { this._signal(\"changeBreakpoint\"); },\n        initialValue: 1\n    },\n    useWorker: {\n        set: function (useWorker) {\n            this.$useWorker = useWorker;\n            this.$stopWorker();\n            if (useWorker)\n                this.$startWorker();\n        },\n        initialValue: true\n    },\n    useSoftTabs: { initialValue: true },\n    tabSize: {\n        set: function (tabSize) {\n            tabSize = parseInt(tabSize);\n            if (tabSize > 0 && this.$tabSize !== tabSize) {\n                this.$modified = true;\n                this.$rowLengthCache = [];\n                this.$tabSize = tabSize;\n                this._signal(\"changeTabSize\");\n            }\n        },\n        initialValue: 4,\n        handlesSet: true\n    },\n    navigateWithinSoftTabs: { initialValue: false },\n    foldStyle: {\n        set: function (val) { this.setFoldStyle(val); },\n        handlesSet: true\n    },\n    overwrite: {\n        set: function (val) { this._signal(\"changeOverwrite\"); },\n        initialValue: false\n    },\n    newLineMode: {\n        set: function (val) { this.doc.setNewLineMode(val); },\n        get: function () { return this.doc.getNewLineMode(); },\n        handlesSet: true\n    },\n    mode: {\n        set: function (val) { this.setMode(val); },\n        get: function () { return this.$modeId; },\n        handlesSet: true\n    }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = /** @class */ (function () {\n    function Search() {\n        this.$options = {};\n    }\n    Search.prototype.set = function (options) {\n        oop.mixin(this.$options, options);\n        return this;\n    };\n    Search.prototype.getOptions = function () {\n        return lang.copyObject(this.$options);\n    };\n    Search.prototype.setOptions = function (options) {\n        this.$options = options;\n    };\n    Search.prototype.find = function (session) {\n        var options = this.$options;\n        var iterator = this.$matchIterator(session, options);\n        if (!iterator)\n            return false;\n        var firstRange = null;\n        iterator.forEach(function (sr, sc, er, ec) {\n            firstRange = new Range(sr, sc, er, ec);\n            if (sc == ec && options.start && /**@type{Range}*/ (options.start).start\n                && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) {\n                firstRange = null;\n                return false;\n            }\n            return true;\n        });\n        return firstRange;\n    };\n    Search.prototype.findAll = function (session) {\n        var options = this.$options;\n        if (!options.needle)\n            return [];\n        this.$assembleRegExp(options);\n        var range = options.range;\n        var lines = range\n            ? session.getLines(range.start.row, range.end.row)\n            : session.doc.getAllLines();\n        var ranges = [];\n        var re = options.re;\n        if (options.$isMultiLine) {\n            var len = re.length;\n            var maxRow = lines.length - len;\n            var prevRange;\n            outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n                for (var j = 0; j < len; j++)\n                    if (lines[row + j].search(re[j]) == -1)\n                        continue outer;\n                var startLine = lines[row];\n                var line = lines[row + len - 1];\n                var startIndex = startLine.length - startLine.match(re[0])[0].length;\n                var endIndex = line.match(re[len - 1])[0].length;\n                if (prevRange && prevRange.end.row === row &&\n                    prevRange.end.column > startIndex) {\n                    continue;\n                }\n                ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n                if (len > 2)\n                    row = row + len - 2;\n            }\n        }\n        else {\n            for (var matches, i = 0; i < lines.length; i++) {\n                if (this.$isMultilineSearch(options)) {\n                    var lng = lines.length - 1;\n                    matches = this.$multiLineForward(session, re, i, lng);\n                    if (matches) {\n                        var end_row = matches.endRow <= lng ? matches.endRow - 1 : lng;\n                        if (end_row > i)\n                            i = end_row;\n                        ranges.push(new Range(matches.startRow, matches.startCol, matches.endRow, matches.endCol));\n                    }\n                }\n                else {\n                    matches = lang.getMatchOffsets(lines[i], re);\n                    for (var j = 0; j < matches.length; j++) {\n                        var match = matches[j];\n                        ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n                    }\n                }\n            }\n        }\n        if (range) {\n            var startColumn = range.start.column;\n            var endColumn = range.end.column;\n            var i = 0, j = ranges.length - 1;\n            while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n                i++;\n            var endRow = range.end.row - range.start.row;\n            while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n                j--;\n            ranges = ranges.slice(i, j + 1);\n            for (i = 0, j = ranges.length; i < j; i++) {\n                ranges[i].start.row += range.start.row;\n                ranges[i].end.row += range.start.row;\n            }\n        }\n        return ranges;\n    };\n    Search.prototype.parseReplaceString = function (replaceString) {\n        var CharCode = {\n            DollarSign: 36,\n            Ampersand: 38,\n            Digit0: 48,\n            Digit1: 49,\n            Digit9: 57,\n            Backslash: 92,\n            n: 110,\n            t: 116\n        };\n        var replacement = '';\n        for (var i = 0, len = replaceString.length; i < len; i++) {\n            var chCode = replaceString.charCodeAt(i);\n            if (chCode === CharCode.Backslash) {\n                i++;\n                if (i >= len) {\n                    replacement += \"\\\\\";\n                    break;\n                }\n                var nextChCode = replaceString.charCodeAt(i);\n                switch (nextChCode) {\n                    case CharCode.Backslash:\n                        replacement += \"\\\\\";\n                        break;\n                    case CharCode.n:\n                        replacement += \"\\n\";\n                        break;\n                    case CharCode.t:\n                        replacement += \"\\t\";\n                        break;\n                }\n                continue;\n            }\n            if (chCode === CharCode.DollarSign) {\n                i++;\n                if (i >= len) {\n                    replacement += \"$\";\n                    break;\n                }\n                var nextChCode_1 = replaceString.charCodeAt(i);\n                if (nextChCode_1 === CharCode.DollarSign) {\n                    replacement += \"$$\";\n                    continue;\n                }\n                if (nextChCode_1 === CharCode.Digit0 || nextChCode_1 === CharCode.Ampersand) {\n                    replacement += \"$&\";\n                    continue;\n                }\n                if (CharCode.Digit1 <= nextChCode_1 && nextChCode_1 <= CharCode.Digit9) {\n                    replacement += \"$\" + replaceString[i];\n                    continue;\n                }\n            }\n            replacement += replaceString[i];\n        }\n        return replacement || replaceString;\n    };\n    Search.prototype.replace = function (input, replacement) {\n        var options = this.$options;\n        var re = this.$assembleRegExp(options);\n        if (options.$isMultiLine)\n            return replacement;\n        if (!re)\n            return;\n        var mtSearch = this.$isMultilineSearch(options);\n        if (mtSearch)\n            input = input.replace(/\\r\\n|\\r|\\n/g, \"\\n\");\n        var match = re.exec(input);\n        if (!match || (!mtSearch && match[0].length != input.length))\n            return null;\n        replacement = options.regExp\n            ? this.parseReplaceString(replacement)\n            : replacement.replace(/\\$/g, \"$$$$\");\n        replacement = input.replace(re, replacement);\n        if (options.preserveCase) {\n            replacement = replacement.split(\"\");\n            for (var i = Math.min(input.length, input.length); i--;) {\n                var ch = input[i];\n                if (ch && ch.toLowerCase() != ch)\n                    replacement[i] = replacement[i].toUpperCase();\n                else\n                    replacement[i] = replacement[i].toLowerCase();\n            }\n            replacement = replacement.join(\"\");\n        }\n        return replacement;\n    };\n    Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) {\n        if (options.needle instanceof RegExp)\n            return options.re = options.needle;\n        var needle = options.needle;\n        if (!options.needle)\n            return options.re = false;\n        if (!options.regExp)\n            needle = lang.escapeRegExp(needle);\n        var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n        try {\n            new RegExp(needle, \"u\");\n            options.$supportsUnicodeFlag = true;\n            modifier += \"u\";\n        }\n        catch (e) {\n            options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\\{2}/gu\n        }\n        if (options.wholeWord)\n            needle = addWordBoundary(needle, options);\n        options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n        if (options.$isMultiLine)\n            return options.re = this.$assembleMultilineRegExp(needle, modifier);\n        try {\n            var re = new RegExp(needle, modifier);\n        }\n        catch (e) {\n            re = false;\n        }\n        return options.re = re;\n    };\n    Search.prototype.$assembleMultilineRegExp = function (needle, modifier) {\n        var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n        var re = [];\n        for (var i = 0; i < parts.length; i++)\n            try {\n                re.push(new RegExp(parts[i], modifier));\n            }\n            catch (e) {\n                return false;\n            }\n        return re;\n    };\n    Search.prototype.$isMultilineSearch = function (options) {\n        return options.re && /\\\\r\\\\n|\\\\r|\\\\n/.test(options.re.source) && options.regExp && !options.$isMultiLine;\n    };\n    Search.prototype.$multiLineForward = function (session, re, start, last) {\n        var line, chunk = chunkEnd(session, start);\n        for (var row = start; row <= last;) {\n            for (var i = 0; i < chunk; i++) {\n                if (row > last)\n                    break;\n                var next = session.getLine(row++);\n                line = line == null ? next : line + \"\\n\" + next;\n            }\n            var match = re.exec(line);\n            re.lastIndex = 0;\n            if (match) {\n                var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n                var matchedText = match[0].split(\"\\n\");\n                var startRow = start + beforeMatch.length - 1;\n                var startCol = beforeMatch[beforeMatch.length - 1].length;\n                var endRow = startRow + matchedText.length - 1;\n                var endCol = matchedText.length == 1\n                    ? startCol + matchedText[0].length\n                    : matchedText[matchedText.length - 1].length;\n                return {\n                    startRow: startRow,\n                    startCol: startCol,\n                    endRow: endRow,\n                    endCol: endCol\n                };\n            }\n        }\n        return null;\n    };\n    Search.prototype.$multiLineBackward = function (session, re, endIndex, start, first) {\n        var line, chunk = chunkEnd(session, start), endMargin = session.getLine(start).length - endIndex;\n        for (var row = start; row >= first;) {\n            for (var i = 0; i < chunk && row >= first; i++) {\n                var next = session.getLine(row--);\n                line = line == null ? next : next + \"\\n\" + line;\n            }\n            var match = multiLineBackwardMatch(line, re, endMargin);\n            if (match) {\n                var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n                var matchedText = match[0].split(\"\\n\");\n                var startRow = row + beforeMatch.length;\n                var startCol = beforeMatch[beforeMatch.length - 1].length;\n                var endRow = startRow + matchedText.length - 1;\n                var endCol = matchedText.length == 1\n                    ? startCol + matchedText[0].length\n                    : matchedText[matchedText.length - 1].length;\n                return {\n                    startRow: startRow,\n                    startCol: startCol,\n                    endRow: endRow,\n                    endCol: endCol\n                };\n            }\n        }\n        return null;\n    };\n    Search.prototype.$matchIterator = function (session, options) {\n        var re = this.$assembleRegExp(options);\n        if (!re)\n            return false;\n        var mtSearch = this.$isMultilineSearch(options);\n        var mtForward = this.$multiLineForward;\n        var mtBackward = this.$multiLineBackward;\n        var backwards = options.backwards == true;\n        var skipCurrent = options.skipCurrent != false;\n        var supportsUnicodeFlag = re.unicode;\n        var range = options.range;\n        var start = options.start;\n        if (!start)\n            start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n        if (start.start)\n            start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n        var firstRow = range ? range.start.row : 0;\n        var lastRow = range ? range.end.row : session.getLength() - 1;\n        if (backwards) {\n            var forEach = function (callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row--; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n            };\n        }\n        else {\n            var forEach = function (callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row = row + 1; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n            };\n        }\n        if (options.$isMultiLine) {\n            var len = re.length;\n            var forEachInLine = function (row, offset, callback) {\n                var startRow = backwards ? row - len + 1 : row;\n                if (startRow < 0 || startRow + len > session.getLength())\n                    return;\n                var line = session.getLine(startRow);\n                var startIndex = line.search(re[0]);\n                if (!backwards && startIndex < offset || startIndex === -1)\n                    return;\n                for (var i = 1; i < len; i++) {\n                    line = session.getLine(startRow + i);\n                    if (line.search(re[i]) == -1)\n                        return;\n                }\n                var endIndex = line.match(re[len - 1])[0].length;\n                if (backwards && endIndex > offset)\n                    return;\n                if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n                    return true;\n            };\n        }\n        else if (backwards) {\n            var forEachInLine = function (row, endIndex, callback) {\n                if (mtSearch) {\n                    var pos = mtBackward(session, re, endIndex, row, firstRow);\n                    if (!pos)\n                        return false;\n                    if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n                        return true;\n                }\n                else {\n                    var line = session.getLine(row);\n                    var matches = [];\n                    var m, last = 0;\n                    re.lastIndex = 0;\n                    while ((m = re.exec(line))) {\n                        var length = m[0].length;\n                        last = m.index;\n                        if (!length) {\n                            if (last >= line.length)\n                                break;\n                            re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n                        }\n                        if (m.index + length > endIndex)\n                            break;\n                        matches.push(m.index, length);\n                    }\n                    for (var i = matches.length - 1; i >= 0; i -= 2) {\n                        var column = matches[i - 1];\n                        var length = matches[i];\n                        if (callback(row, column, row, column + length))\n                            return true;\n                    }\n                }\n            };\n        }\n        else {\n            var forEachInLine = function (row, startIndex, callback) {\n                re.lastIndex = startIndex;\n                if (mtSearch) {\n                    var pos = mtForward(session, re, row, lastRow);\n                    if (pos) {\n                        var end_row = pos.endRow <= lastRow ? pos.endRow - 1 : lastRow;\n                        if (end_row > row)\n                            row = end_row;\n                    }\n                    if (!pos)\n                        return false;\n                    if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n                        return true;\n                }\n                else {\n                    var line = session.getLine(row);\n                    var last;\n                    var m;\n                    while ((m = re.exec(line))) {\n                        var length = m[0].length;\n                        last = m.index;\n                        if (callback(row, last, row, last + length))\n                            return true;\n                        if (!length) {\n                            re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n                            if (last >= line.length)\n                                return false;\n                        }\n                    }\n                }\n            };\n        }\n        return { forEach: forEach };\n    };\n    return Search;\n}());\nfunction addWordBoundary(needle, options) {\n    var supportsLookbehind = lang.supportsLookbehind();\n    function wordBoundary(c, firstChar) {\n        if (firstChar === void 0) { firstChar = true; }\n        var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\");\n        if (wordRegExp.test(c) || options.regExp) {\n            if (supportsLookbehind && options.$supportsUnicodeFlag) {\n                if (firstChar)\n                    return \"(?<=^|[^\\\\p{L}\\\\p{N}_])\";\n                return \"(?=[^\\\\p{L}\\\\p{N}_]|$)\";\n            }\n            return \"\\\\b\";\n        }\n        return \"\";\n    }\n    var needleArray = Array.from(needle);\n    var firstChar = needleArray[0];\n    var lastChar = needleArray[needleArray.length - 1];\n    return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false);\n}\nfunction multiLineBackwardMatch(line, re, endMargin) {\n    var match = null;\n    var from = 0;\n    while (from <= line.length) {\n        re.lastIndex = from;\n        var newMatch = re.exec(line);\n        if (!newMatch)\n            break;\n        var end = newMatch.index + newMatch[0].length;\n        if (end > line.length - endMargin)\n            break;\n        if (!match || end > match.index + match[0].length)\n            match = newMatch;\n        from = newMatch.index + 1;\n    }\n    return match;\n}\nfunction chunkEnd(session, start) {\n    var base = 5000, startPosition = { row: start, column: 0 }, startIndex = session.doc.positionToIndex(startPosition), targetIndex = startIndex + base, targetPosition = session.doc.indexToPosition(targetIndex), targetLine = targetPosition.row;\n    return targetLine + 1;\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})(); var keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nvar MultiHashHandler = /** @class */ (function () {\n    function MultiHashHandler(config, platform) {\n        this.$init(config, platform, false);\n    }\n    MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) {\n        this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n        this.commands = {};\n        this.commandKeyBinding = {};\n        this.addCommands(config);\n        this.$singleCommand = $singleCommand;\n    };\n    MultiHashHandler.prototype.addCommand = function (command) {\n        if (this.commands[command.name])\n            this.removeCommand(command);\n        this.commands[command.name] = command;\n        if (command.bindKey)\n            this._buildKeyHash(command);\n    };\n    MultiHashHandler.prototype.removeCommand = function (command, keepCommand) {\n        var name = command && (typeof command === 'string' ? command : command.name);\n        command = this.commands[name];\n        if (!keepCommand)\n            delete this.commands[name];\n        var ckb = this.commandKeyBinding;\n        for (var keyId in ckb) {\n            var cmdGroup = ckb[keyId];\n            if (cmdGroup == command) {\n                delete ckb[keyId];\n            }\n            else if (Array.isArray(cmdGroup)) {\n                var i = cmdGroup.indexOf(command);\n                if (i != -1) {\n                    cmdGroup.splice(i, 1);\n                    if (cmdGroup.length == 1)\n                        ckb[keyId] = cmdGroup[0];\n                }\n            }\n        }\n    };\n    MultiHashHandler.prototype.bindKey = function (key, command, position) {\n        if (typeof key == \"object\" && key) {\n            if (position == undefined)\n                position = key.position;\n            key = key[this.platform];\n        }\n        if (!key)\n            return;\n        if (typeof command == \"function\")\n            return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split(\"|\").forEach(function (keyPart) {\n            var chain = \"\";\n            if (keyPart.indexOf(\" \") != -1) {\n                var parts = keyPart.split(/\\s+/);\n                keyPart = parts.pop();\n                parts.forEach(function (keyPart) {\n                    var binding = this.parseKeys(keyPart);\n                    var id = KEY_MODS[binding.hashId] + binding.key;\n                    chain += (chain ? \" \" : \"\") + id;\n                    this._addCommandToBinding(chain, \"chainKeys\");\n                }, this);\n                chain += \" \";\n            }\n            var binding = this.parseKeys(keyPart);\n            var id = KEY_MODS[binding.hashId] + binding.key;\n            this._addCommandToBinding(chain + id, command, position);\n        }, this);\n    };\n    MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) {\n        var ckb = this.commandKeyBinding, i;\n        if (!command) {\n            delete ckb[keyId];\n        }\n        else if (!ckb[keyId] || this.$singleCommand) {\n            ckb[keyId] = command;\n        }\n        else {\n            if (!Array.isArray(ckb[keyId])) {\n                ckb[keyId] = [ckb[keyId]];\n            }\n            else if ((i = ckb[keyId].indexOf(command)) != -1) {\n                ckb[keyId].splice(i, 1);\n            }\n            if (typeof position != \"number\") {\n                position = getPosition(command);\n            }\n            var commands = ckb[keyId];\n            for (i = 0; i < commands.length; i++) {\n                var other = commands[i];\n                var otherPos = getPosition(other);\n                if (otherPos > position)\n                    break;\n            }\n            commands.splice(i, 0, command);\n        }\n    };\n    MultiHashHandler.prototype.addCommands = function (commands) {\n        commands && Object.keys(commands).forEach(function (name) {\n            var command = commands[name];\n            if (!command)\n                return;\n            if (typeof command === \"string\")\n                return this.bindKey(command, name);\n            if (typeof command === \"function\")\n                command = { exec: command };\n            if (typeof command !== \"object\")\n                return;\n            if (!command.name)\n                command.name = name;\n            this.addCommand(command);\n        }, this);\n    };\n    MultiHashHandler.prototype.removeCommands = function (commands) {\n        Object.keys(commands).forEach(function (name) {\n            this.removeCommand(commands[name]);\n        }, this);\n    };\n    MultiHashHandler.prototype.bindKeys = function (keyList) {\n        Object.keys(keyList).forEach(function (key) {\n            this.bindKey(key, keyList[key]);\n        }, this);\n    };\n    MultiHashHandler.prototype._buildKeyHash = function (command) {\n        this.bindKey(command.bindKey, command);\n    };\n    MultiHashHandler.prototype.parseKeys = function (keys) {\n        var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n        var key = parts.pop();\n        var keyCode = keyUtil[key];\n        if (keyUtil.FUNCTION_KEYS[keyCode])\n            key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n        else if (!parts.length)\n            return { key: key, hashId: -1 };\n        else if (parts.length == 1 && parts[0] == \"shift\")\n            return { key: key.toUpperCase(), hashId: -1 };\n        var hashId = 0;\n        for (var i = parts.length; i--;) {\n            var modifier = keyUtil.KEY_MODS[parts[i]];\n            if (modifier == null) {\n                if (typeof console != \"undefined\")\n                    console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n                return false;\n            }\n            hashId |= modifier;\n        }\n        return { key: key, hashId: hashId };\n    };\n    MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) {\n        var key = KEY_MODS[hashId] + keyString;\n        return this.commandKeyBinding[key];\n    };\n    MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) {\n        if (keyCode < 0)\n            return;\n        var key = KEY_MODS[hashId] + keyString;\n        var command = this.commandKeyBinding[key];\n        if (data.$keyChain) {\n            data.$keyChain += \" \" + key;\n            command = this.commandKeyBinding[data.$keyChain] || command;\n        }\n        if (command) {\n            if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n                data.$keyChain = data.$keyChain || key;\n                return { command: \"null\" };\n            }\n        }\n        if (data.$keyChain) {\n            if ((!hashId || hashId == 4) && keyString.length == 1)\n                data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n            else if (hashId == -1 || keyCode > 0)\n                data.$keyChain = \"\"; // reset keyChain\n        }\n        return { command: command };\n    };\n    MultiHashHandler.prototype.getStatusText = function (editor, data) {\n        return data.$keyChain || \"\";\n    };\n    return MultiHashHandler;\n}());\nfunction getPosition(command) {\n    return typeof command == \"object\" && command.bindKey\n        && command.bindKey.position\n        || (command.isDefault ? -100 : 0);\n}\nvar HashHandler = /** @class */ (function (_super) {\n    __extends(HashHandler, _super);\n    function HashHandler(config, platform) {\n        var _this = _super.call(this, config, platform) || this;\n        _this.$singleCommand = true;\n        return _this;\n    }\n    return HashHandler;\n}(MultiHashHandler));\nHashHandler.call = function (thisArg, config, platform) {\n    MultiHashHandler.prototype.$init.call(thisArg, config, platform, true);\n};\nMultiHashHandler.call = function (thisArg, config, platform) {\n    MultiHashHandler.prototype.$init.call(thisArg, config, platform, false);\n};\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = /** @class */ (function (_super) {\n    __extends(CommandManager, _super);\n    function CommandManager(platform, commands) {\n        var _this = _super.call(this, commands, platform) || this;\n        _this.byName = _this.commands;\n        _this.setDefaultHandler(\"exec\", function (e) {\n            if (!e.args) {\n                return e.command.exec(e.editor, {}, e.event, true);\n            }\n            return e.command.exec(e.editor, e.args, e.event, false);\n        });\n        return _this;\n    }\n    CommandManager.prototype.exec = function (command, editor, args) {\n        if (Array.isArray(command)) {\n            for (var i = command.length; i--;) {\n                if (this.exec(command[i], editor, args))\n                    return true;\n            }\n            return false;\n        }\n        if (typeof command === \"string\")\n            command = this.commands[command];\n        var e = { editor: editor, command: command, args: args };\n        if (!this.canExecute(command, editor)) {\n            this._signal(\"commandUnavailable\", e);\n            return false;\n        }\n        e.returnValue = this._emit(\"exec\", e);\n        this._signal(\"afterExec\", e);\n        return e.returnValue === false ? false : true;\n    };\n    CommandManager.prototype.canExecute = function (command, editor) {\n        if (typeof command === \"string\")\n            command = this.commands[command];\n        if (!command)\n            return false;\n        if (editor && editor.$readOnly && !command.readOnly)\n            return false;\n        if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n            return false;\n        return true;\n    };\n    CommandManager.prototype.toggleRecording = function (editor) {\n        if (this.$inReplay)\n            return;\n        editor && editor._emit(\"changeStatus\");\n        if (this.recording) {\n            this.macro.pop();\n            this.off(\"exec\", this.$addCommandToMacro);\n            if (!this.macro.length)\n                this.macro = this.oldMacro;\n            return this.recording = false;\n        }\n        if (!this.$addCommandToMacro) {\n            this.$addCommandToMacro = function (e) {\n                this.macro.push([e.command, e.args]);\n            }.bind(this);\n        }\n        this.oldMacro = this.macro;\n        this.macro = [];\n        this.on(\"exec\", this.$addCommandToMacro);\n        return this.recording = true;\n    };\n    CommandManager.prototype.replay = function (editor) {\n        if (this.$inReplay || !this.macro)\n            return;\n        if (this.recording)\n            return this.toggleRecording(editor);\n        try {\n            this.$inReplay = true;\n            this.macro.forEach(function (x) {\n                if (typeof x == \"string\")\n                    this.exec(x, editor);\n                else\n                    this.exec(x[0], editor, x[1]);\n            }, this);\n        }\n        finally {\n            this.$inReplay = false;\n        }\n    };\n    CommandManager.prototype.trimMacro = function (m) {\n        return m.map(function (x) {\n            if (typeof x[0] != \"string\")\n                x[0] = x[0].name;\n            if (!x[1])\n                x = x[0];\n            return x;\n        });\n    };\n    return CommandManager;\n}(MultiHashHandler));\noop.implement(CommandManager.prototype, EventEmitter);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n    return { win: win, mac: mac };\n}\nexports.commands = [{\n        name: \"showSettingsMenu\",\n        description: \"Show settings menu\",\n        bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/settings_menu\", function (module) {\n                module.init(editor);\n                editor.showSettingsMenu();\n            });\n        },\n        readOnly: true\n    }, {\n        name: \"goToNextError\",\n        description: \"Go to next error\",\n        bindKey: bindKey(\"Alt-E\", \"F4\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/error_marker\", function (module) {\n                module.showErrorMarker(editor, 1);\n            });\n        },\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"goToPreviousError\",\n        description: \"Go to previous error\",\n        bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/error_marker\", function (module) {\n                module.showErrorMarker(editor, -1);\n            });\n        },\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"selectall\",\n        description: \"Select all\",\n        bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n        exec: function (editor) { editor.selectAll(); },\n        readOnly: true\n    }, {\n        name: \"centerselection\",\n        description: \"Center selection\",\n        bindKey: bindKey(null, \"Ctrl-L\"),\n        exec: function (editor) { editor.centerSelection(); },\n        readOnly: true\n    }, {\n        name: \"gotoline\",\n        description: \"Go to line...\",\n        bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n        exec: function (editor, line) {\n            if (typeof line === \"number\" && !isNaN(line))\n                editor.gotoLine(line);\n            editor.prompt({ $type: \"gotoLine\" });\n        },\n        readOnly: true\n    }, {\n        name: \"fold\",\n        bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n        exec: function (editor) { editor.session.toggleFold(false); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"unfold\",\n        bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n        exec: function (editor) { editor.session.toggleFold(true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"toggleFoldWidget\",\n        description: \"Toggle fold widget\",\n        bindKey: bindKey(\"F2\", \"F2\"),\n        exec: function (editor) { editor.session.toggleFoldWidget(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"toggleParentFoldWidget\",\n        description: \"Toggle parent fold widget\",\n        bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n        exec: function (editor) { editor.session.toggleFoldWidget(true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"foldall\",\n        description: \"Fold all\",\n        bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n        exec: function (editor) { editor.session.foldAll(); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"foldAllComments\",\n        description: \"Fold all comments\",\n        bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n        exec: function (editor) { editor.session.foldAllComments(); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"foldOther\",\n        description: \"Fold other\",\n        bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n        exec: function (editor) {\n            editor.session.foldAll();\n            editor.session.unfold(editor.selection.getAllRanges());\n        },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"unfoldall\",\n        description: \"Unfold all\",\n        bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n        exec: function (editor) { editor.session.unfold(); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"findnext\",\n        description: \"Find next\",\n        bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n        exec: function (editor) { editor.findNext(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"findprevious\",\n        description: \"Find previous\",\n        bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n        exec: function (editor) { editor.findPrevious(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"selectOrFindNext\",\n        description: \"Select or find next\",\n        bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n        exec: function (editor) {\n            if (editor.selection.isEmpty())\n                editor.selection.selectWord();\n            else\n                editor.findNext();\n        },\n        readOnly: true\n    }, {\n        name: \"selectOrFindPrevious\",\n        description: \"Select or find previous\",\n        bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n        exec: function (editor) {\n            if (editor.selection.isEmpty())\n                editor.selection.selectWord();\n            else\n                editor.findPrevious();\n        },\n        readOnly: true\n    }, {\n        name: \"find\",\n        description: \"Find\",\n        bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n        },\n        readOnly: true\n    }, {\n        name: \"overwrite\",\n        description: \"Overwrite\",\n        bindKey: \"Insert\",\n        exec: function (editor) { editor.toggleOverwrite(); },\n        readOnly: true\n    }, {\n        name: \"selecttostart\",\n        description: \"Select to start\",\n        bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n        exec: function (editor) { editor.getSelection().selectFileStart(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"gotostart\",\n        description: \"Go to start\",\n        bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n        exec: function (editor) { editor.navigateFileStart(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"selectup\",\n        description: \"Select up\",\n        bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n        exec: function (editor) { editor.getSelection().selectUp(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"golineup\",\n        description: \"Go line up\",\n        bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n        exec: function (editor, args) { editor.navigateUp(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selecttoend\",\n        description: \"Select to end\",\n        bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n        exec: function (editor) { editor.getSelection().selectFileEnd(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"gotoend\",\n        description: \"Go to end\",\n        bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n        exec: function (editor) { editor.navigateFileEnd(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"selectdown\",\n        description: \"Select down\",\n        bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n        exec: function (editor) { editor.getSelection().selectDown(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"golinedown\",\n        description: \"Go line down\",\n        bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n        exec: function (editor, args) { editor.navigateDown(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectwordleft\",\n        description: \"Select word left\",\n        bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n        exec: function (editor) { editor.getSelection().selectWordLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotowordleft\",\n        description: \"Go to word left\",\n        bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n        exec: function (editor) { editor.navigateWordLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selecttolinestart\",\n        description: \"Select to line start\",\n        bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n        exec: function (editor) { editor.getSelection().selectLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotolinestart\",\n        description: \"Go to line start\",\n        bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n        exec: function (editor) { editor.navigateLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectleft\",\n        description: \"Select left\",\n        bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n        exec: function (editor) { editor.getSelection().selectLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotoleft\",\n        description: \"Go to left\",\n        bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n        exec: function (editor, args) { editor.navigateLeft(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectwordright\",\n        description: \"Select word right\",\n        bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n        exec: function (editor) { editor.getSelection().selectWordRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotowordright\",\n        description: \"Go to word right\",\n        bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n        exec: function (editor) { editor.navigateWordRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selecttolineend\",\n        description: \"Select to line end\",\n        bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n        exec: function (editor) { editor.getSelection().selectLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotolineend\",\n        description: \"Go to line end\",\n        bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n        exec: function (editor) { editor.navigateLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectright\",\n        description: \"Select right\",\n        bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n        exec: function (editor) { editor.getSelection().selectRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotoright\",\n        description: \"Go to right\",\n        bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n        exec: function (editor, args) { editor.navigateRight(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectpagedown\",\n        description: \"Select page down\",\n        bindKey: \"Shift-PageDown\",\n        exec: function (editor) { editor.selectPageDown(); },\n        readOnly: true\n    }, {\n        name: \"pagedown\",\n        description: \"Page down\",\n        bindKey: bindKey(null, \"Option-PageDown\"),\n        exec: function (editor) { editor.scrollPageDown(); },\n        readOnly: true\n    }, {\n        name: \"gotopagedown\",\n        description: \"Go to page down\",\n        bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n        exec: function (editor) { editor.gotoPageDown(); },\n        readOnly: true\n    }, {\n        name: \"selectpageup\",\n        description: \"Select page up\",\n        bindKey: \"Shift-PageUp\",\n        exec: function (editor) { editor.selectPageUp(); },\n        readOnly: true\n    }, {\n        name: \"pageup\",\n        description: \"Page up\",\n        bindKey: bindKey(null, \"Option-PageUp\"),\n        exec: function (editor) { editor.scrollPageUp(); },\n        readOnly: true\n    }, {\n        name: \"gotopageup\",\n        description: \"Go to page up\",\n        bindKey: \"PageUp\",\n        exec: function (editor) { editor.gotoPageUp(); },\n        readOnly: true\n    }, {\n        name: \"scrollup\",\n        description: \"Scroll up\",\n        bindKey: bindKey(\"Ctrl-Up\", null),\n        exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n        readOnly: true\n    }, {\n        name: \"scrolldown\",\n        description: \"Scroll down\",\n        bindKey: bindKey(\"Ctrl-Down\", null),\n        exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n        readOnly: true\n    }, {\n        name: \"selectlinestart\",\n        description: \"Select line start\",\n        bindKey: \"Shift-Home\",\n        exec: function (editor) { editor.getSelection().selectLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectlineend\",\n        description: \"Select line end\",\n        bindKey: \"Shift-End\",\n        exec: function (editor) { editor.getSelection().selectLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"togglerecording\",\n        description: \"Toggle recording\",\n        bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n        exec: function (editor) { editor.commands.toggleRecording(editor); },\n        readOnly: true\n    }, {\n        name: \"replaymacro\",\n        description: \"Replay macro\",\n        bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n        exec: function (editor) { editor.commands.replay(editor); },\n        readOnly: true\n    }, {\n        name: \"jumptomatching\",\n        description: \"Jump to matching\",\n        bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n        exec: function (editor) { editor.jumpToMatching(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"selecttomatching\",\n        description: \"Select to matching\",\n        bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n        exec: function (editor) { editor.jumpToMatching(true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"expandToMatching\",\n        description: \"Expand to matching\",\n        bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n        exec: function (editor) { editor.jumpToMatching(true, true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"passKeysToBrowser\",\n        description: \"Pass keys to browser\",\n        bindKey: bindKey(null, null),\n        exec: function () { },\n        passEvent: true,\n        readOnly: true\n    }, {\n        name: \"copy\",\n        description: \"Copy\",\n        exec: function (editor) {\n        },\n        readOnly: true\n    },\n    {\n        name: \"cut\",\n        description: \"Cut\",\n        exec: function (editor) {\n            var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n            var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n            editor._emit(\"cut\", range);\n            if (!range.isEmpty())\n                editor.session.remove(range);\n            editor.clearSelection();\n        },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"paste\",\n        description: \"Paste\",\n        exec: function (editor, args) {\n            editor.$handlePaste(args);\n        },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removeline\",\n        description: \"Remove line\",\n        bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n        exec: function (editor) { editor.removeLines(); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEachLine\"\n    }, {\n        name: \"duplicateSelection\",\n        description: \"Duplicate selection\",\n        bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n        exec: function (editor) { editor.duplicateSelection(); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"sortlines\",\n        description: \"Sort lines\",\n        bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n        exec: function (editor) { editor.sortLines(); },\n        scrollIntoView: \"selection\",\n        multiSelectAction: \"forEachLine\"\n    }, {\n        name: \"togglecomment\",\n        description: \"Toggle comment\",\n        bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n        exec: function (editor) { editor.toggleCommentLines(); },\n        multiSelectAction: \"forEachLine\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"toggleBlockComment\",\n        description: \"Toggle block comment\",\n        bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n        exec: function (editor) { editor.toggleBlockComment(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"modifyNumberUp\",\n        description: \"Modify number up\",\n        bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n        exec: function (editor) { editor.modifyNumber(1); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"modifyNumberDown\",\n        description: \"Modify number down\",\n        bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n        exec: function (editor) { editor.modifyNumber(-1); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"replace\",\n        description: \"Replace\",\n        bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n        }\n    }, {\n        name: \"undo\",\n        description: \"Undo\",\n        bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n        exec: function (editor) { editor.undo(); }\n    }, {\n        name: \"redo\",\n        description: \"Redo\",\n        bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n        exec: function (editor) { editor.redo(); }\n    }, {\n        name: \"copylinesup\",\n        description: \"Copy lines up\",\n        bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n        exec: function (editor) { editor.copyLinesUp(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"movelinesup\",\n        description: \"Move lines up\",\n        bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n        exec: function (editor) { editor.moveLinesUp(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"copylinesdown\",\n        description: \"Copy lines down\",\n        bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n        exec: function (editor) { editor.copyLinesDown(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"movelinesdown\",\n        description: \"Move lines down\",\n        bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n        exec: function (editor) { editor.moveLinesDown(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"del\",\n        description: \"Delete\",\n        bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n        exec: function (editor) { editor.remove(\"right\"); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"backspace\",\n        description: \"Backspace\",\n        bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n        exec: function (editor) { editor.remove(\"left\"); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"cut_or_delete\",\n        description: \"Cut or delete\",\n        bindKey: bindKey(\"Shift-Delete\", null),\n        exec: function (editor) {\n            if (editor.selection.isEmpty()) {\n                editor.remove(\"left\");\n            }\n            else {\n                return false;\n            }\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolinestart\",\n        description: \"Remove to line start\",\n        bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n        exec: function (editor) { editor.removeToLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolineend\",\n        description: \"Remove to line end\",\n        bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n        exec: function (editor) { editor.removeToLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolinestarthard\",\n        description: \"Remove to line start hard\",\n        bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n        exec: function (editor) {\n            var range = editor.selection.getRange();\n            range.start.column = 0;\n            editor.session.remove(range);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolineendhard\",\n        description: \"Remove to line end hard\",\n        bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n        exec: function (editor) {\n            var range = editor.selection.getRange();\n            range.end.column = Number.MAX_VALUE;\n            editor.session.remove(range);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removewordleft\",\n        description: \"Remove word left\",\n        bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n        exec: function (editor) { editor.removeWordLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removewordright\",\n        description: \"Remove word right\",\n        bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n        exec: function (editor) { editor.removeWordRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"outdent\",\n        description: \"Outdent\",\n        bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n        exec: function (editor) { editor.blockOutdent(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"indent\",\n        description: \"Indent\",\n        bindKey: bindKey(\"Tab\", \"Tab\"),\n        exec: function (editor) { editor.indent(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"blockoutdent\",\n        description: \"Block outdent\",\n        bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n        exec: function (editor) { editor.blockOutdent(); },\n        multiSelectAction: \"forEachLine\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"blockindent\",\n        description: \"Block indent\",\n        bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n        exec: function (editor) { editor.blockIndent(); },\n        multiSelectAction: \"forEachLine\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"insertstring\",\n        description: \"Insert string\",\n        exec: function (editor, str) { editor.insert(str); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"inserttext\",\n        description: \"Insert text\",\n        exec: function (editor, args) {\n            editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"splitline\",\n        description: \"Split line\",\n        bindKey: bindKey(null, \"Ctrl-O\"),\n        exec: function (editor) { editor.splitLine(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"transposeletters\",\n        description: \"Transpose letters\",\n        bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n        exec: function (editor) { editor.transposeLetters(); },\n        multiSelectAction: function (editor) { editor.transposeSelections(1); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"touppercase\",\n        description: \"To uppercase\",\n        bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n        exec: function (editor) { editor.toUpperCase(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"tolowercase\",\n        description: \"To lowercase\",\n        bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n        exec: function (editor) { editor.toLowerCase(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"autoindent\",\n        description: \"Auto Indent\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) { editor.autoIndent(); },\n        scrollIntoView: \"animate\"\n    }, {\n        name: \"expandtoline\",\n        description: \"Expand to line\",\n        bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n        exec: function (editor) {\n            var range = editor.selection.getRange();\n            range.start.column = range.end.column = 0;\n            range.end.row++;\n            editor.selection.setRange(range, false);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"openlink\",\n        bindKey: bindKey(\"Ctrl+F3\", \"F3\"),\n        exec: function (editor) { editor.openLink(); }\n    }, {\n        name: \"joinlines\",\n        description: \"Join lines\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) {\n            var isBackwards = editor.selection.isBackwards();\n            var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n            var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n            var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n            var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n            var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n            var insertLine = editor.session.doc.getLine(selectionStart.row);\n            for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n                var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n                if (curLine.length !== 0) {\n                    curLine = \" \" + curLine;\n                }\n                insertLine += curLine;\n            }\n            if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n                insertLine += editor.session.doc.getNewLineCharacter();\n            }\n            editor.clearSelection();\n            editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n            if (selectedCount > 0) {\n                editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n                editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n            }\n            else {\n                firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n                editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n            }\n        },\n        multiSelectAction: \"forEach\",\n        readOnly: true\n    }, {\n        name: \"invertSelection\",\n        description: \"Invert selection\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) {\n            var endRow = editor.session.doc.getLength() - 1;\n            var endCol = editor.session.doc.getLine(endRow).length;\n            var ranges = editor.selection.rangeList.ranges;\n            var newRanges = [];\n            if (ranges.length < 1) {\n                ranges = [editor.selection.getRange()];\n            }\n            for (var i = 0; i < ranges.length; i++) {\n                if (i == (ranges.length - 1)) {\n                    if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n                        newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n                    }\n                }\n                if (i === 0) {\n                    if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n                        newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n                    }\n                }\n                else {\n                    newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n                }\n            }\n            editor.exitMultiSelectMode();\n            editor.clearSelection();\n            for (var i = 0; i < newRanges.length; i++) {\n                editor.selection.addRange(newRanges[i], false);\n            }\n        },\n        readOnly: true,\n        scrollIntoView: \"none\"\n    }, {\n        name: \"addLineAfter\",\n        description: \"Add new line after the current line\",\n        exec: function (editor) {\n            editor.selection.clearSelection();\n            editor.navigateLineEnd();\n            editor.insert(\"\\n\");\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"addLineBefore\",\n        description: \"Add new line before the current line\",\n        exec: function (editor) {\n            editor.selection.clearSelection();\n            var cursor = editor.getCursorPosition();\n            editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n            editor.insert(\"\\n\");\n            if (cursor.row === 0)\n                editor.navigateUp();\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"openCommandPallete\",\n        exec: function (editor) {\n            console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\");\n            editor.prompt({ $type: \"commands\" });\n        },\n        readOnly: true\n    }, {\n        name: \"openCommandPalette\",\n        description: \"Open command palette\",\n        bindKey: bindKey(\"F1\", \"F1\"),\n        exec: function (editor) {\n            editor.prompt({ $type: \"commands\" });\n        },\n        readOnly: true\n    }, {\n        name: \"modeSelect\",\n        description: \"Change language mode...\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) {\n            editor.prompt({ $type: \"modes\" });\n        },\n        readOnly: true\n    }];\nfor (var i = 1; i < 9; i++) {\n    exports.commands.push({\n        name: \"foldToLevel\" + i,\n        description: \"Fold To Level \" + i,\n        level: i,\n        exec: function (editor) { editor.session.foldToLevel(this.level); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    });\n}\n\n});\n\nace.define(\"ace/keyboard/gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterKeyboardHandler = /** @class */ (function () {\n    function GutterKeyboardHandler(editor) {\n        this.editor = editor;\n        this.gutterLayer = editor.renderer.$gutterLayer;\n        this.element = editor.renderer.$gutter;\n        this.lines = editor.renderer.$gutterLayer.$lines;\n        this.activeRowIndex = null;\n        this.activeLane = null;\n        this.annotationTooltip = this.editor.$mouseHandler.$tooltip;\n    }\n    GutterKeyboardHandler.prototype.addListener = function () {\n        this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n        this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this));\n        this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n    };\n    GutterKeyboardHandler.prototype.removeListener = function () {\n        this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n        this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this));\n        this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n    };\n    GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) {\n        if (this.annotationTooltip.isOpen) {\n            e.preventDefault();\n            if (e.keyCode === keys[\"escape\"])\n                this.annotationTooltip.hide();\n            return;\n        }\n        if (e.target === this.element) {\n            if (e.keyCode != keys[\"enter\"]) {\n                return;\n            }\n            e.preventDefault();\n            var row = this.editor.getCursorPosition().row;\n            if (!this.editor.isRowVisible(row))\n                this.editor.scrollToLine(row, true, true);\n            setTimeout(\n            function () {\n                var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row);\n                var nearestFoldLaneWidgetIndex = this.$findNearestFoldLaneWidget(index);\n                var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n                if (nearestFoldLaneWidgetIndex === null && nearestAnnotationIndex === null)\n                    return;\n                var futureActiveRowIndex = this.$findClosestNumber(nearestFoldLaneWidgetIndex, nearestAnnotationIndex, index);\n                if (futureActiveRowIndex === nearestFoldLaneWidgetIndex) {\n                    this.activeLane = \"fold\";\n                    this.activeRowIndex = nearestFoldLaneWidgetIndex;\n                    if (this.$isCustomWidgetVisible(nearestFoldLaneWidgetIndex)) {\n                        this.$focusCustomWidget(this.activeRowIndex);\n                        return;\n                    }\n                    else {\n                        this.$focusFoldWidget(this.activeRowIndex);\n                        return;\n                    }\n                }\n                else {\n                    this.activeRowIndex = nearestAnnotationIndex;\n                    this.activeLane = \"annotation\";\n                    this.$focusAnnotation(this.activeRowIndex);\n                    return;\n                }\n            }.bind(this), 10);\n            return;\n        }\n        this.$handleGutterKeyboardInteraction(e);\n        setTimeout(function () {\n            this.editor._signal(\"gutterkeydown\", new GutterKeyboardEvent(e, this));\n        }.bind(this), 10);\n    };\n    GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) {\n        if (e.keyCode === keys[\"tab\"]) {\n            e.preventDefault();\n            return;\n        }\n        if (e.keyCode === keys[\"escape\"]) {\n            e.preventDefault();\n            this.$blurGutter();\n            this.element.focus();\n            this.lane = null;\n            return;\n        }\n        if (e.keyCode === keys[\"up\"]) {\n            e.preventDefault();\n            switch (this.activeLane) {\n                case \"fold\":\n                    this.$moveFoldWidgetUp();\n                    break;\n                case \"annotation\":\n                    this.$moveAnnotationUp();\n                    break;\n            }\n            return;\n        }\n        if (e.keyCode === keys[\"down\"]) {\n            e.preventDefault();\n            switch (this.activeLane) {\n                case \"fold\":\n                    this.$moveFoldWidgetDown();\n                    break;\n                case \"annotation\":\n                    this.$moveAnnotationDown();\n                    break;\n            }\n            return;\n        }\n        if (e.keyCode === keys[\"left\"]) {\n            e.preventDefault();\n            this.$switchLane(\"annotation\");\n            return;\n        }\n        if (e.keyCode === keys[\"right\"]) {\n            e.preventDefault();\n            this.$switchLane(\"fold\");\n            return;\n        }\n        if (e.keyCode === keys[\"enter\"] || e.keyCode === keys[\"space\"]) {\n            e.preventDefault();\n            switch (this.activeLane) {\n                case \"fold\":\n                    var row = this.$rowIndexToRow(this.activeRowIndex);\n                    var customWidget = this.editor.session.$gutterCustomWidgets[row];\n                    if (customWidget) {\n                        if (customWidget.callbacks && customWidget.callbacks.onClick) {\n                            customWidget.callbacks.onClick(e, row);\n                        }\n                    }\n                    else if (this.gutterLayer.session.foldWidgets[row] === 'start') {\n                        this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n                        setTimeout(\n                        function () {\n                            if (this.$rowIndexToRow(this.activeRowIndex) !== row) {\n                                this.$blurFoldWidget(this.activeRowIndex);\n                                this.activeRowIndex = this.$rowToRowIndex(row);\n                                this.$focusFoldWidget(this.activeRowIndex);\n                            }\n                        }.bind(this), 10);\n                        break;\n                    }\n                    else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') {\n                        break;\n                    }\n                    return;\n                case \"annotation\":\n                    this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n                    this.annotationTooltip.$fromKeyboard = true;\n                    break;\n            }\n            return;\n        }\n    };\n    GutterKeyboardHandler.prototype.$blurGutter = function () {\n        if (this.activeRowIndex !== null) {\n            switch (this.activeLane) {\n                case \"fold\":\n                    this.$blurFoldWidget(this.activeRowIndex);\n                    this.$blurCustomWidget(this.activeRowIndex);\n                    break;\n                case \"annotation\":\n                    this.$blurAnnotation(this.activeRowIndex);\n                    break;\n            }\n        }\n        if (this.annotationTooltip.isOpen)\n            this.annotationTooltip.hide();\n        return;\n    };\n    GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) {\n        var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n        var isIconVisible = this.$getFoldWidget(index).style.display !== \"none\";\n        return isRowFullyVisible && isIconVisible;\n    };\n    GutterKeyboardHandler.prototype.$isCustomWidgetVisible = function (index) {\n        var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n        var isIconVisible = !!this.$getCustomWidget(index);\n        return isRowFullyVisible && isIconVisible;\n    };\n    GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) {\n        var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n        var isIconVisible = this.$getAnnotation(index).style.display !== \"none\";\n        return isRowFullyVisible && isIconVisible;\n    };\n    GutterKeyboardHandler.prototype.$getFoldWidget = function (index) {\n        var cell = this.lines.get(index);\n        var element = cell.element;\n        return element.childNodes[1];\n    };\n    GutterKeyboardHandler.prototype.$getCustomWidget = function (index) {\n        var cell = this.lines.get(index);\n        var element = cell.element;\n        return element.childNodes[3];\n    };\n    GutterKeyboardHandler.prototype.$getAnnotation = function (index) {\n        var cell = this.lines.get(index);\n        var element = cell.element;\n        return element.childNodes[2];\n    };\n    GutterKeyboardHandler.prototype.$findNearestFoldLaneWidget = function (index) {\n        if (this.$isCustomWidgetVisible(index))\n            return index;\n        if (this.$isFoldWidgetVisible(index))\n            return index;\n        var i = 0;\n        while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n            i++;\n            if (index - i >= 0 && this.$isCustomWidgetVisible(index - i))\n                return index - i;\n            if (index + i <= this.lines.getLength() - 1 && this.$isCustomWidgetVisible(index + i))\n                return index + i;\n            if (index - i >= 0 && this.$isFoldWidgetVisible(index - i))\n                return index - i;\n            if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i))\n                return index + i;\n        }\n        return null;\n    };\n    GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) {\n        if (this.$isAnnotationVisible(index))\n            return index;\n        var i = 0;\n        while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n            i++;\n            if (index - i >= 0 && this.$isAnnotationVisible(index - i))\n                return index - i;\n            if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i))\n                return index + i;\n        }\n        return null;\n    };\n    GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) {\n        if (index == null)\n            return;\n        var foldWidget = this.$getFoldWidget(index);\n        foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n        foldWidget.focus();\n    };\n    GutterKeyboardHandler.prototype.$focusCustomWidget = function (index) {\n        if (index == null)\n            return;\n        var customWidget = this.$getCustomWidget(index);\n        if (customWidget) {\n            customWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n            customWidget.focus();\n        }\n    };\n    GutterKeyboardHandler.prototype.$focusAnnotation = function (index) {\n        if (index == null)\n            return;\n        var annotation = this.$getAnnotation(index);\n        annotation.classList.add(this.editor.renderer.keyboardFocusClassName);\n        annotation.focus();\n    };\n    GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) {\n        var foldWidget = this.$getFoldWidget(index);\n        foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n        foldWidget.blur();\n    };\n    GutterKeyboardHandler.prototype.$blurCustomWidget = function (index) {\n        var customWidget = this.$getCustomWidget(index);\n        if (customWidget) {\n            customWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n            customWidget.blur();\n        }\n    };\n    GutterKeyboardHandler.prototype.$blurAnnotation = function (index) {\n        var annotation = this.$getAnnotation(index);\n        annotation.classList.remove(this.editor.renderer.keyboardFocusClassName);\n        annotation.blur();\n    };\n    GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () {\n        var index = this.activeRowIndex;\n        while (index > 0) {\n            index--;\n            if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n                this.$blurFoldWidget(this.activeRowIndex);\n                this.$blurCustomWidget(this.activeRowIndex);\n                this.activeRowIndex = index;\n                if (this.$isFoldWidgetVisible(index)) {\n                    this.$focusFoldWidget(this.activeRowIndex);\n                }\n                else {\n                    this.$focusCustomWidget(this.activeRowIndex);\n                }\n                return;\n            }\n        }\n        return;\n    };\n    GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () {\n        var index = this.activeRowIndex;\n        while (index < this.lines.getLength() - 1) {\n            index++;\n            if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n                this.$blurFoldWidget(this.activeRowIndex);\n                this.$blurCustomWidget(this.activeRowIndex);\n                this.activeRowIndex = index;\n                if (this.$isFoldWidgetVisible(index)) {\n                    this.$focusFoldWidget(this.activeRowIndex);\n                }\n                else {\n                    this.$focusCustomWidget(this.activeRowIndex);\n                }\n                return;\n            }\n        }\n        return;\n    };\n    GutterKeyboardHandler.prototype.$moveAnnotationUp = function () {\n        var index = this.activeRowIndex;\n        while (index > 0) {\n            index--;\n            if (this.$isAnnotationVisible(index)) {\n                this.$blurAnnotation(this.activeRowIndex);\n                this.activeRowIndex = index;\n                this.$focusAnnotation(this.activeRowIndex);\n                return;\n            }\n        }\n        return;\n    };\n    GutterKeyboardHandler.prototype.$moveAnnotationDown = function () {\n        var index = this.activeRowIndex;\n        while (index < this.lines.getLength() - 1) {\n            index++;\n            if (this.$isAnnotationVisible(index)) {\n                this.$blurAnnotation(this.activeRowIndex);\n                this.activeRowIndex = index;\n                this.$focusAnnotation(this.activeRowIndex);\n                return;\n            }\n        }\n        return;\n    };\n    GutterKeyboardHandler.prototype.$findClosestNumber = function (num1, num2, target) {\n        if (num1 === null)\n            return num2;\n        if (num2 === null)\n            return num1;\n        return (Math.abs(target - num1) <= Math.abs(target - num2)) ? num1 : num2;\n    };\n    GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) {\n        switch (desinationLane) {\n            case \"annotation\":\n                if (this.activeLane === \"annotation\") {\n                    break;\n                }\n                var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex);\n                if (annotationIndex == null) {\n                    break;\n                }\n                this.activeLane = \"annotation\";\n                this.$blurFoldWidget(this.activeRowIndex);\n                this.$blurCustomWidget(this.activeRowIndex);\n                this.activeRowIndex = annotationIndex;\n                this.$focusAnnotation(this.activeRowIndex);\n                break;\n            case \"fold\":\n                if (this.activeLane === \"fold\") {\n                    break;\n                }\n                var foldLaneWidgetIndex = this.$findNearestFoldLaneWidget(this.activeRowIndex);\n                if (foldLaneWidgetIndex === null) {\n                    break;\n                }\n                this.activeLane = \"fold\";\n                this.$blurAnnotation(this.activeRowIndex);\n                this.activeRowIndex = foldLaneWidgetIndex;\n                if (this.$isCustomWidgetVisible(foldLaneWidgetIndex)) {\n                    this.$focusCustomWidget(this.activeRowIndex);\n                }\n                else {\n                    this.$focusFoldWidget(this.activeRowIndex);\n                }\n                break;\n        }\n        return;\n    };\n    GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) {\n        var cell = this.lines.get(index);\n        if (cell)\n            return cell.row;\n        return null;\n    };\n    GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) {\n        for (var i = 0; i < this.lines.getLength(); i++) {\n            var cell = this.lines.get(i);\n            if (cell.row == row)\n                return i;\n        }\n        return null;\n    };\n    return GutterKeyboardHandler;\n}());\nexports.GutterKeyboardHandler = GutterKeyboardHandler;\nvar GutterKeyboardEvent = /** @class */ (function () {\n    function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) {\n        this.gutterKeyboardHandler = gutterKeyboardHandler;\n        this.domEvent = domEvent;\n    }\n    GutterKeyboardEvent.prototype.getKey = function () {\n        return keys.keyCodeToString(this.domEvent.keyCode);\n    };\n    GutterKeyboardEvent.prototype.getRow = function () {\n        return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n    };\n    GutterKeyboardEvent.prototype.isInAnnotationLane = function () {\n        return this.gutterKeyboardHandler.activeLane === \"annotation\";\n    };\n    GutterKeyboardEvent.prototype.isInFoldLane = function () {\n        return this.gutterKeyboardHandler.activeLane === \"fold\";\n    };\n    return GutterKeyboardEvent;\n}());\nexports.GutterKeyboardEvent = GutterKeyboardEvent;\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/keyboard/gutter_handler\",\"ace/config\",\"ace/clipboard\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module){\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar GutterKeyboardHandler = require(\"./keyboard/gutter_handler\").GutterKeyboardHandler;\nvar nls = require(\"./config\").nls;\nvar clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar event = require(\"./lib/event\");\nvar HoverTooltip = require(\"./tooltip\").HoverTooltip;\nvar Editor = /** @class */ (function () {\n    function Editor(renderer, session, options) {\n        this.id = \"editor\" + (++Editor.$uid); this.session;\n        this.$toDestroy = [];\n        var container = renderer.getContainerElement();\n        this.container = container;\n        this.renderer = renderer;\n        this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n        if (typeof document == \"object\") {\n            this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n            this.renderer.textarea = this.textInput.getElement();\n            this.$mouseHandler = new MouseHandler(this);\n            new FoldHandler(this);\n        }\n        this.keyBinding = new KeyBinding(this);\n        this.$search = new Search().set({\n            wrap: true\n        });\n        this.$historyTracker = this.$historyTracker.bind(this);\n        this.commands.on(\"exec\", this.$historyTracker);\n        this.$initOperationListeners();\n        this._$emitInputEvent = lang.delayedCall(function () {\n            this._signal(\"input\", {});\n            if (this.session && !this.session.destroyed)\n                this.session.bgTokenizer.scheduleStart();\n        }.bind(this));\n        this.on(\"change\", function (_, _self) {\n            _self._$emitInputEvent.schedule(31);\n        });\n        this.setSession(session || options && options.session || new EditSession(\"\"));\n        config.resetOptions(this);\n        if (options)\n            this.setOptions(options);\n        config._signal(\"editor\", this);\n    }\n    Editor.prototype.$initOperationListeners = function () {\n        this.commands.on(\"exec\", this.startOperation.bind(this), true);\n        this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n    };\n    Editor.prototype.startOperation = function (commandEvent) {\n        this.session.startOperation(commandEvent);\n    };\n    Editor.prototype.endOperation = function (e) {\n        this.session.endOperation(e);\n    };\n    Editor.prototype.onStartOperation = function (commandEvent) {\n        this.curOp = this.session.curOp;\n        this.curOp.scrollTop = this.renderer.scrollTop;\n        this.prevOp = this.session.prevOp;\n        if (!commandEvent) {\n            this.previousCommand = null;\n        }\n    };\n    Editor.prototype.onEndOperation = function (e) {\n        if (this.curOp && this.session) {\n            if (e && e.returnValue === false) {\n                this.curOp = null;\n                return;\n            }\n            this._signal(\"beforeEndOperation\");\n            if (!this.curOp)\n                return;\n            var command = this.curOp.command;\n            var scrollIntoView = command && command.scrollIntoView;\n            if (scrollIntoView) {\n                switch (scrollIntoView) {\n                    case \"center-animate\":\n                        scrollIntoView = \"animate\";\n                    case \"center\":\n                        this.renderer.scrollCursorIntoView(null, 0.5);\n                        break;\n                    case \"animate\":\n                    case \"cursor\":\n                        this.renderer.scrollCursorIntoView();\n                        break;\n                    case \"selectionPart\":\n                        var range = this.selection.getRange();\n                        var config = this.renderer.layerConfig;\n                        if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n                            this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n                        }\n                        break;\n                    default:\n                        break;\n                }\n                if (scrollIntoView == \"animate\")\n                    this.renderer.animateScrolling(this.curOp.scrollTop);\n            }\n            this.$lastSel = this.session.selection.toJSON();\n            this.prevOp = this.curOp;\n            this.curOp = null;\n        }\n    };\n    Editor.prototype.$historyTracker = function (e) {\n        if (!this.$mergeUndoDeltas)\n            return;\n        var prev = this.prevOp;\n        var mergeableCommands = this.$mergeableCommands;\n        var shouldMerge = prev.command && (e.command.name == prev.command.name);\n        if (e.command.name == \"insertstring\") {\n            var text = e.args;\n            if (this.mergeNextCommand === undefined)\n                this.mergeNextCommand = true;\n            shouldMerge = shouldMerge\n                && this.mergeNextCommand // previous command allows to coalesce with\n                && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n            this.mergeNextCommand = true;\n        }\n        else {\n            shouldMerge = shouldMerge\n                && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n        }\n        if (this.$mergeUndoDeltas != \"always\"\n            && Date.now() - this.sequenceStartTime > 2000) {\n            shouldMerge = false; // the sequence is too long\n        }\n        if (shouldMerge)\n            this.session.mergeUndoDeltas = true;\n        else if (mergeableCommands.indexOf(e.command.name) !== -1)\n            this.sequenceStartTime = Date.now();\n    };\n    Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) {\n        if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n            this.$keybindingId = keyboardHandler;\n            var _self = this;\n            config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n                if (_self.$keybindingId == keyboardHandler)\n                    _self.keyBinding.setKeyboardHandler(module && module.handler);\n                cb && cb();\n            });\n        }\n        else {\n            this.$keybindingId = null;\n            this.keyBinding.setKeyboardHandler(keyboardHandler);\n            cb && cb();\n        }\n    };\n    Editor.prototype.getKeyboardHandler = function () {\n        return this.keyBinding.getKeyboardHandler();\n    };\n    Editor.prototype.setSession = function (session) {\n        if (this.session == session)\n            return;\n        if (this.curOp)\n            this.endOperation();\n        this.curOp = {};\n        var oldSession = this.session;\n        if (oldSession) {\n            this.session.off(\"change\", this.$onDocumentChange);\n            this.session.off(\"changeMode\", this.$onChangeMode);\n            this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n            this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n            this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n            this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n            this.session.off(\"changeFold\", this.$onChangeFold);\n            this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n            this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n            this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n            this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n            this.session.off(\"changeOverwrite\", this.$onCursorChange);\n            this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n            this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n            this.session.off(\"startOperation\", this.$onStartOperation);\n            this.session.off(\"endOperation\", this.$onEndOperation);\n            var selection = this.session.getSelection();\n            selection.off(\"changeCursor\", this.$onCursorChange);\n            selection.off(\"changeSelection\", this.$onSelectionChange);\n        }\n        this.session = session;\n        if (session) {\n            this.$onDocumentChange = this.onDocumentChange.bind(this);\n            session.on(\"change\", this.$onDocumentChange);\n            this.renderer.setSession(session);\n            this.$onChangeMode = this.onChangeMode.bind(this);\n            session.on(\"changeMode\", this.$onChangeMode);\n            this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n            session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n            this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n            session.on(\"changeTabSize\", this.$onChangeTabSize);\n            this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n            session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n            this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n            session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n            this.$onChangeFold = this.onChangeFold.bind(this);\n            session.on(\"changeFold\", this.$onChangeFold);\n            this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n            this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n            this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n            this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n            this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n            this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n            this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n            this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n            this.$onCursorChange = this.onCursorChange.bind(this);\n            this.session.on(\"changeOverwrite\", this.$onCursorChange);\n            this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n            this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n            this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n            this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n            this.selection = session.getSelection();\n            this.selection.on(\"changeCursor\", this.$onCursorChange);\n            this.$onSelectionChange = this.onSelectionChange.bind(this);\n            this.selection.on(\"changeSelection\", this.$onSelectionChange);\n            this.$onStartOperation = this.onStartOperation.bind(this);\n            this.session.on(\"startOperation\", this.$onStartOperation);\n            this.$onEndOperation = this.onEndOperation.bind(this);\n            this.session.on(\"endOperation\", this.$onEndOperation);\n            this.onChangeMode();\n            this.onCursorChange();\n            this.onScrollTopChange();\n            this.onScrollLeftChange();\n            this.onSelectionChange();\n            this.onChangeFrontMarker();\n            this.onChangeBackMarker();\n            this.onChangeBreakpoint();\n            this.onChangeAnnotation();\n            this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n            this.renderer.updateFull();\n        }\n        else {\n            this.selection = null;\n            this.renderer.setSession(session);\n        }\n        this._signal(\"changeSession\", {\n            session: session,\n            oldSession: oldSession\n        });\n        this.curOp = null;\n        oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n        if (oldSession)\n            oldSession.$editor = null;\n        session && session._signal(\"changeEditor\", { editor: this });\n        if (session)\n            session.$editor = this;\n        if (session && !session.destroyed)\n            session.bgTokenizer.scheduleStart();\n    };\n    Editor.prototype.getSession = function () {\n        return this.session;\n    };\n    Editor.prototype.setValue = function (val, cursorPos) {\n        this.session.doc.setValue(val);\n        if (!cursorPos)\n            this.selectAll();\n        else if (cursorPos == 1)\n            this.navigateFileEnd();\n        else if (cursorPos == -1)\n            this.navigateFileStart();\n        return val;\n    };\n    Editor.prototype.getValue = function () {\n        return this.session.getValue();\n    };\n    Editor.prototype.getSelection = function () {\n        return this.selection;\n    };\n    Editor.prototype.resize = function (force) {\n        this.renderer.onResize(force);\n    };\n    Editor.prototype.setTheme = function (theme, cb) {\n        this.renderer.setTheme(theme, cb);\n    };\n    Editor.prototype.getTheme = function () {\n        return this.renderer.getTheme();\n    };\n    Editor.prototype.setStyle = function (style, incluude) {\n        this.renderer.setStyle(style, incluude);\n    };\n    Editor.prototype.unsetStyle = function (style) {\n        this.renderer.unsetStyle(style);\n    };\n    Editor.prototype.getFontSize = function () {\n        return this.getOption(\"fontSize\") ||\n            dom.computedStyle(this.container).fontSize;\n    };\n    Editor.prototype.setFontSize = function (size) {\n        this.setOption(\"fontSize\", size);\n    };\n    Editor.prototype.$highlightBrackets = function () {\n        if (this.$highlightPending) {\n            return;\n        }\n        var self = this;\n        this.$highlightPending = true;\n        setTimeout(function () {\n            self.$highlightPending = false;\n            var session = self.session;\n            if (!session || session.destroyed)\n                return;\n            if (session.$bracketHighlight) {\n                session.$bracketHighlight.markerIds.forEach(function (id) {\n                    session.removeMarker(id);\n                });\n                session.$bracketHighlight = null;\n            }\n            var pos = self.getCursorPosition();\n            var handler = self.getKeyboardHandler();\n            var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self);\n            var ranges = session.getMatchingBracketRanges(pos, isBackwards);\n            if (!ranges) {\n                var iterator = new TokenIterator(session, pos.row, pos.column);\n                var token = iterator.getCurrentToken();\n                if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n                    var tagNamesRanges = session.getMatchingTags(pos);\n                    if (tagNamesRanges) {\n                        ranges = [\n                            tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName,\n                            tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName\n                        ];\n                    }\n                }\n            }\n            if (!ranges && session.$mode.getMatching)\n                ranges = session.$mode.getMatching(self.session);\n            if (!ranges) {\n                if (self.getHighlightIndentGuides())\n                    self.renderer.$textLayer.$highlightIndentGuide();\n                return;\n            }\n            var markerType = \"ace_bracket\";\n            if (!Array.isArray(ranges)) {\n                ranges = [ranges];\n            }\n            else if (ranges.length == 1) {\n                markerType = \"ace_error_bracket\";\n            }\n            if (ranges.length == 2) {\n                if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n                    ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n                else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n                    ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n            }\n            session.$bracketHighlight = {\n                ranges: ranges,\n                markerIds: ranges.map(function (range) {\n                    return session.addMarker(range, markerType, \"text\");\n                })\n            };\n            if (self.getHighlightIndentGuides())\n                self.renderer.$textLayer.$highlightIndentGuide();\n        }, 50);\n    };\n    Editor.prototype.focus = function () {\n        this.textInput.focus();\n    };\n    Editor.prototype.isFocused = function () {\n        return this.textInput.isFocused();\n    };\n    Editor.prototype.blur = function () {\n        this.textInput.blur();\n    };\n    Editor.prototype.onFocus = function (e) {\n        if (this.$isFocused)\n            return;\n        this.$isFocused = true;\n        this.renderer.showCursor();\n        this.renderer.visualizeFocus();\n        this._emit(\"focus\", e);\n    };\n    Editor.prototype.onBlur = function (e) {\n        if (!this.$isFocused)\n            return;\n        this.$isFocused = false;\n        this.renderer.hideCursor();\n        this.renderer.visualizeBlur();\n        this._emit(\"blur\", e);\n    };\n    Editor.prototype.$cursorChange = function () {\n        this.renderer.updateCursor();\n        this.$highlightBrackets();\n        this.$updateHighlightActiveLine();\n    };\n    Editor.prototype.onDocumentChange = function (delta) {\n        var wrap = this.session.$useWrapMode;\n        var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n        this.renderer.updateLines(delta.start.row, lastRow, wrap);\n        this._signal(\"change\", delta);\n        this.$cursorChange();\n    };\n    Editor.prototype.onTokenizerUpdate = function (e) {\n        var rows = e.data;\n        this.renderer.updateLines(rows.first, rows.last);\n    };\n    Editor.prototype.onScrollTopChange = function () {\n        this.renderer.scrollToY(this.session.getScrollTop());\n    };\n    Editor.prototype.onScrollLeftChange = function () {\n        this.renderer.scrollToX(this.session.getScrollLeft());\n    };\n    Editor.prototype.onCursorChange = function () {\n        this.$cursorChange();\n        this._signal(\"changeSelection\");\n    };\n    Editor.prototype.$updateHighlightActiveLine = function () {\n        var session = this.getSession();\n        var highlight;\n        if (this.$highlightActiveLine) {\n            if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n                highlight = this.getCursorPosition();\n            if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n                highlight = false;\n            if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n                highlight = false;\n        }\n        if (session.$highlightLineMarker && !highlight) {\n            session.removeMarker(session.$highlightLineMarker.id);\n            session.$highlightLineMarker = null;\n        }\n        else if (!session.$highlightLineMarker && highlight) {\n            var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n            range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n            session.$highlightLineMarker = range;\n        }\n        else if (highlight) {\n            session.$highlightLineMarker.start.row = highlight.row;\n            session.$highlightLineMarker.end.row = highlight.row;\n            session.$highlightLineMarker.start.column = highlight.column;\n            session._signal(\"changeBackMarker\");\n        }\n    };\n    Editor.prototype.onSelectionChange = function (e) {\n        var session = this.session;\n        if (session.$selectionMarker) {\n            session.removeMarker(session.$selectionMarker);\n        }\n        session.$selectionMarker = null;\n        if (!this.selection.isEmpty()) {\n            var range = this.selection.getRange();\n            var style = this.getSelectionStyle();\n            session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n        }\n        else {\n            this.$updateHighlightActiveLine();\n        }\n        var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n        this.session.highlight(re);\n        this._signal(\"changeSelection\");\n    };\n    Editor.prototype.$getSelectionHighLightRegexp = function () {\n        var session = this.session;\n        var selection = this.getSelectionRange();\n        if (selection.isEmpty() || selection.isMultiLine())\n            return;\n        var startColumn = selection.start.column;\n        var endColumn = selection.end.column;\n        var line = session.getLine(selection.start.row);\n        var needle = line.substring(startColumn, endColumn);\n        if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n            return;\n        var re = this.$search.$assembleRegExp({\n            wholeWord: true,\n            caseSensitive: true,\n            needle: needle\n        });\n        var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n        if (!re.test(wordWithBoundary))\n            return;\n        return re;\n    };\n    Editor.prototype.onChangeFrontMarker = function () {\n        this.renderer.updateFrontMarkers();\n    };\n    Editor.prototype.onChangeBackMarker = function () {\n        this.renderer.updateBackMarkers();\n    };\n    Editor.prototype.onChangeBreakpoint = function () {\n        this.renderer.updateBreakpoints();\n    };\n    Editor.prototype.onChangeAnnotation = function () {\n        this.renderer.setAnnotations(this.session.getAnnotations());\n    };\n    Editor.prototype.onChangeMode = function (e) {\n        this.renderer.updateText();\n        this._emit(\"changeMode\", e);\n    };\n    Editor.prototype.onChangeWrapLimit = function () {\n        this.renderer.updateFull();\n    };\n    Editor.prototype.onChangeWrapMode = function () {\n        this.renderer.onResize(true);\n    };\n    Editor.prototype.onChangeFold = function () {\n        this.$updateHighlightActiveLine();\n        this.renderer.updateFull();\n    };\n    Editor.prototype.getSelectedText = function () {\n        return this.session.getTextRange(this.getSelectionRange());\n    };\n    Editor.prototype.getCopyText = function () {\n        var text = this.getSelectedText();\n        var nl = this.session.doc.getNewLineCharacter();\n        var copyLine = false;\n        if (!text && this.$copyWithEmptySelection) {\n            copyLine = true;\n            var ranges = this.selection.getAllRanges();\n            for (var i = 0; i < ranges.length; i++) {\n                var range = ranges[i];\n                if (i && ranges[i - 1].start.row == range.start.row)\n                    continue;\n                text += this.session.getLine(range.start.row) + nl;\n            }\n        }\n        var e = { text: text };\n        this._signal(\"copy\", e);\n        clipboard.lineMode = copyLine ? e.text : false;\n        return e.text;\n    };\n    Editor.prototype.onCopy = function () {\n        this.commands.exec(\"copy\", this);\n    };\n    Editor.prototype.onCut = function () {\n        this.commands.exec(\"cut\", this);\n    };\n    Editor.prototype.onPaste = function (text, event) {\n        var e = { text: text, event: event };\n        this.commands.exec(\"paste\", this, e);\n    };\n    Editor.prototype.$handlePaste = function (e) {\n        if (typeof e == \"string\")\n            e = { text: e };\n        this._signal(\"paste\", e);\n        var text = e.text;\n        var lineMode = text === clipboard.lineMode;\n        var session = this.session;\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n            if (lineMode)\n                session.insert({ row: this.selection.lead.row, column: 0 }, text);\n            else\n                this.insert(text);\n        }\n        else if (lineMode) {\n            this.selection.rangeList.ranges.forEach(function (range) {\n                session.insert({ row: range.start.row, column: 0 }, text);\n            });\n        }\n        else {\n            var lines = text.split(/\\r\\n|\\r|\\n/);\n            var ranges = this.selection.rangeList.ranges;\n            var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n            if (lines.length != ranges.length || isFullLine)\n                return this.commands.exec(\"insertstring\", this, text);\n            for (var i = ranges.length; i--;) {\n                var range = ranges[i];\n                if (!range.isEmpty())\n                    session.remove(range);\n                session.insert(range.start, lines[i]);\n            }\n        }\n    };\n    Editor.prototype.execCommand = function (command, args) {\n        return this.commands.exec(command, this, args);\n    };\n    Editor.prototype.insert = function (text, pasted) {\n        var session = this.session;\n        var mode = session.getMode();\n        var cursor = this.getCursorPosition();\n        if (this.getBehavioursEnabled() && !pasted) {\n            var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n            if (transform) {\n                if (text !== transform.text) {\n                    if (!this.inVirtualSelectionMode) {\n                        this.session.mergeUndoDeltas = false;\n                        this.mergeNextCommand = false;\n                    }\n                }\n                text = transform.text;\n            }\n        }\n        if (text == \"\\t\")\n            text = this.session.getTabString();\n        if (!this.selection.isEmpty()) {\n            var range = this.getSelectionRange();\n            cursor = this.session.remove(range);\n            this.clearSelection();\n        }\n        else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n            var range = Range.fromPoints(cursor, cursor);\n            range.end.column += text.length;\n            this.session.remove(range);\n        }\n        if (text == \"\\n\" || text == \"\\r\\n\") {\n            var line = session.getLine(cursor.row);\n            if (cursor.column > line.search(/\\S|$/)) {\n                var d = line.substr(cursor.column).search(/\\S|$/);\n                session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n            }\n        }\n        this.clearSelection();\n        var start = cursor.column;\n        var lineState = session.getState(cursor.row);\n        var line = session.getLine(cursor.row);\n        var shouldOutdent = mode.checkOutdent(lineState, line, text);\n        session.insert(cursor, text);\n        if (transform && transform.selection) {\n            if (transform.selection.length == 2) { // Transform relative to the current column\n                this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n            }\n            else { // Transform relative to the current row.\n                this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n            }\n        }\n        if (this.$enableAutoIndent) {\n            if (session.getDocument().isNewLine(text)) {\n                var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n                session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n            }\n            if (shouldOutdent)\n                mode.autoOutdent(lineState, session, cursor.row);\n        }\n    };\n    Editor.prototype.autoIndent = function () {\n        var session = this.session;\n        var mode = session.getMode();\n        var ranges = this.selection.isEmpty()\n            ? [new Range(0, 0, session.doc.getLength() - 1, 0)]\n            : this.selection.getAllRanges();\n        var prevLineState = \"\";\n        var prevLine = \"\";\n        var lineIndent = \"\";\n        var tab = session.getTabString();\n        for (var i = 0; i < ranges.length; i++) {\n            var startRow = ranges[i].start.row;\n            var endRow = ranges[i].end.row;\n            for (var row = startRow; row <= endRow; row++) {\n                if (row > 0) {\n                    prevLineState = session.getState(row - 1);\n                    prevLine = session.getLine(row - 1);\n                    lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n                }\n                var line = session.getLine(row);\n                var currIndent = mode.$getIndent(line);\n                if (lineIndent !== currIndent) {\n                    if (currIndent.length > 0) {\n                        var range = new Range(row, 0, row, currIndent.length);\n                        session.remove(range);\n                    }\n                    if (lineIndent.length > 0) {\n                        session.insert({ row: row, column: 0 }, lineIndent);\n                    }\n                }\n                mode.autoOutdent(prevLineState, session, row);\n            }\n        }\n    };\n    Editor.prototype.onTextInput = function (text, composition) {\n        if (!composition)\n            return this.keyBinding.onTextInput(text);\n        this.startOperation({ command: { name: \"insertstring\" } });\n        var applyComposition = this.applyComposition.bind(this, text, composition);\n        if (this.selection.rangeCount)\n            this.forEachSelection(applyComposition);\n        else\n            applyComposition();\n        this.endOperation();\n    };\n    Editor.prototype.applyComposition = function (text, composition) {\n        if (composition.extendLeft || composition.extendRight) {\n            var r = this.selection.getRange();\n            r.start.column -= composition.extendLeft;\n            r.end.column += composition.extendRight;\n            if (r.start.column < 0) {\n                r.start.row--;\n                r.start.column += this.session.getLine(r.start.row).length + 1;\n            }\n            this.selection.setRange(r);\n            if (!text && !r.isEmpty())\n                this.remove();\n        }\n        if (text || !this.selection.isEmpty())\n            this.insert(text, true);\n        if (composition.restoreStart || composition.restoreEnd) {\n            var r = this.selection.getRange();\n            r.start.column -= composition.restoreStart;\n            r.end.column -= composition.restoreEnd;\n            this.selection.setRange(r);\n        }\n    };\n    Editor.prototype.onCommandKey = function (e, hashId, keyCode) {\n        return this.keyBinding.onCommandKey(e, hashId, keyCode);\n    };\n    Editor.prototype.setOverwrite = function (overwrite) {\n        this.session.setOverwrite(overwrite);\n    };\n    Editor.prototype.getOverwrite = function () {\n        return this.session.getOverwrite();\n    };\n    Editor.prototype.toggleOverwrite = function () {\n        this.session.toggleOverwrite();\n    };\n    Editor.prototype.setScrollSpeed = function (speed) {\n        this.setOption(\"scrollSpeed\", speed);\n    };\n    Editor.prototype.getScrollSpeed = function () {\n        return this.getOption(\"scrollSpeed\");\n    };\n    Editor.prototype.setDragDelay = function (dragDelay) {\n        this.setOption(\"dragDelay\", dragDelay);\n    };\n    Editor.prototype.getDragDelay = function () {\n        return this.getOption(\"dragDelay\");\n    };\n    Editor.prototype.setSelectionStyle = function (val) {\n        this.setOption(\"selectionStyle\", val);\n    };\n    Editor.prototype.getSelectionStyle = function () {\n        return this.getOption(\"selectionStyle\");\n    };\n    Editor.prototype.setHighlightActiveLine = function (shouldHighlight) {\n        this.setOption(\"highlightActiveLine\", shouldHighlight);\n    };\n    Editor.prototype.getHighlightActiveLine = function () {\n        return this.getOption(\"highlightActiveLine\");\n    };\n    Editor.prototype.setHighlightGutterLine = function (shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n    Editor.prototype.getHighlightGutterLine = function () {\n        return this.getOption(\"highlightGutterLine\");\n    };\n    Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) {\n        this.setOption(\"highlightSelectedWord\", shouldHighlight);\n    };\n    Editor.prototype.getHighlightSelectedWord = function () {\n        return this.$highlightSelectedWord;\n    };\n    Editor.prototype.setAnimatedScroll = function (shouldAnimate) {\n        this.renderer.setAnimatedScroll(shouldAnimate);\n    };\n    Editor.prototype.getAnimatedScroll = function () {\n        return this.renderer.getAnimatedScroll();\n    };\n    Editor.prototype.setShowInvisibles = function (showInvisibles) {\n        this.renderer.setShowInvisibles(showInvisibles);\n    };\n    Editor.prototype.getShowInvisibles = function () {\n        return this.renderer.getShowInvisibles();\n    };\n    Editor.prototype.setDisplayIndentGuides = function (display) {\n        this.renderer.setDisplayIndentGuides(display);\n    };\n    Editor.prototype.getDisplayIndentGuides = function () {\n        return this.renderer.getDisplayIndentGuides();\n    };\n    Editor.prototype.setHighlightIndentGuides = function (highlight) {\n        this.renderer.setHighlightIndentGuides(highlight);\n    };\n    Editor.prototype.getHighlightIndentGuides = function () {\n        return this.renderer.getHighlightIndentGuides();\n    };\n    Editor.prototype.setShowPrintMargin = function (showPrintMargin) {\n        this.renderer.setShowPrintMargin(showPrintMargin);\n    };\n    Editor.prototype.getShowPrintMargin = function () {\n        return this.renderer.getShowPrintMargin();\n    };\n    Editor.prototype.setPrintMarginColumn = function (showPrintMargin) {\n        this.renderer.setPrintMarginColumn(showPrintMargin);\n    };\n    Editor.prototype.getPrintMarginColumn = function () {\n        return this.renderer.getPrintMarginColumn();\n    };\n    Editor.prototype.setReadOnly = function (readOnly) {\n        this.setOption(\"readOnly\", readOnly);\n    };\n    Editor.prototype.getReadOnly = function () {\n        return this.getOption(\"readOnly\");\n    };\n    Editor.prototype.setBehavioursEnabled = function (enabled) {\n        this.setOption(\"behavioursEnabled\", enabled);\n    };\n    Editor.prototype.getBehavioursEnabled = function () {\n        return this.getOption(\"behavioursEnabled\");\n    };\n    Editor.prototype.setWrapBehavioursEnabled = function (enabled) {\n        this.setOption(\"wrapBehavioursEnabled\", enabled);\n    };\n    Editor.prototype.getWrapBehavioursEnabled = function () {\n        return this.getOption(\"wrapBehavioursEnabled\");\n    };\n    Editor.prototype.setShowFoldWidgets = function (show) {\n        this.setOption(\"showFoldWidgets\", show);\n    };\n    Editor.prototype.getShowFoldWidgets = function () {\n        return this.getOption(\"showFoldWidgets\");\n    };\n    Editor.prototype.setFadeFoldWidgets = function (fade) {\n        this.setOption(\"fadeFoldWidgets\", fade);\n    };\n    Editor.prototype.getFadeFoldWidgets = function () {\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n    Editor.prototype.remove = function (dir) {\n        if (this.selection.isEmpty()) {\n            if (dir == \"left\")\n                this.selection.selectLeft();\n            else\n                this.selection.selectRight();\n        }\n        var range = this.getSelectionRange();\n        if (this.getBehavioursEnabled()) {\n            var session = this.session;\n            var state = session.getState(range.start.row);\n            var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n            if (range.end.column === 0) {\n                var text = session.getTextRange(range);\n                if (text[text.length - 1] == \"\\n\") {\n                    var line = session.getLine(range.end.row);\n                    if (/^\\s+$/.test(line)) {\n                        range.end.column = line.length;\n                    }\n                }\n            }\n            if (new_range)\n                range = new_range;\n        }\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    Editor.prototype.removeWordRight = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectWordRight();\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    Editor.prototype.removeWordLeft = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectWordLeft();\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    Editor.prototype.removeToLineStart = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectLineStart();\n        if (this.selection.isEmpty())\n            this.selection.selectLeft();\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    Editor.prototype.removeToLineEnd = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectLineEnd();\n        var range = this.getSelectionRange();\n        if (range.start.column == range.end.column && range.start.row == range.end.row) {\n            range.end.column = 0;\n            range.end.row++;\n        }\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    Editor.prototype.splitLine = function () {\n        if (!this.selection.isEmpty()) {\n            this.session.remove(this.getSelectionRange());\n            this.clearSelection();\n        }\n        var cursor = this.getCursorPosition();\n        this.insert(\"\\n\");\n        this.moveCursorToPosition(cursor);\n    };\n    Editor.prototype.setGhostText = function (text, position) {\n        this.renderer.setGhostText(text, position);\n    };\n    Editor.prototype.removeGhostText = function () {\n        this.renderer.removeGhostText();\n    };\n    Editor.prototype.transposeLetters = function () {\n        if (!this.selection.isEmpty()) {\n            return;\n        }\n        var cursor = this.getCursorPosition();\n        var column = cursor.column;\n        if (column === 0)\n            return;\n        var line = this.session.getLine(cursor.row);\n        var swap, range;\n        if (column < line.length) {\n            swap = line.charAt(column) + line.charAt(column - 1);\n            range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n        }\n        else {\n            swap = line.charAt(column - 1) + line.charAt(column - 2);\n            range = new Range(cursor.row, column - 2, cursor.row, column);\n        }\n        this.session.replace(range, swap);\n        this.session.selection.moveToPosition(range.end);\n    };\n    Editor.prototype.toLowerCase = function () {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toLowerCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    Editor.prototype.toUpperCase = function () {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toUpperCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    Editor.prototype.indent = function () {\n        var session = this.session;\n        var range = this.getSelectionRange();\n        if (range.start.row < range.end.row) {\n            var rows = this.$getSelectedRows();\n            session.indentRows(rows.first, rows.last, \"\\t\");\n            return;\n        }\n        else if (range.start.column < range.end.column) {\n            var text = session.getTextRange(range);\n            if (!/^\\s+$/.test(text)) {\n                var rows = this.$getSelectedRows();\n                session.indentRows(rows.first, rows.last, \"\\t\");\n                return;\n            }\n        }\n        var line = session.getLine(range.start.row);\n        var position = range.start;\n        var size = session.getTabSize();\n        var column = session.documentToScreenColumn(position.row, position.column);\n        if (this.session.getUseSoftTabs()) {\n            var count = (size - column % size);\n            var indentString = lang.stringRepeat(\" \", count);\n        }\n        else {\n            var count = column % size;\n            while (line[range.start.column - 1] == \" \" && count) {\n                range.start.column--;\n                count--;\n            }\n            this.selection.setSelectionRange(range);\n            indentString = \"\\t\";\n        }\n        return this.insert(indentString);\n    };\n    Editor.prototype.blockIndent = function () {\n        var rows = this.$getSelectedRows();\n        this.session.indentRows(rows.first, rows.last, \"\\t\");\n    };\n    Editor.prototype.blockOutdent = function () {\n        var selection = this.session.getSelection();\n        this.session.outdentRows(selection.getRange());\n    };\n    Editor.prototype.sortLines = function () {\n        var rows = this.$getSelectedRows();\n        var session = this.session;\n        var lines = [];\n        for (var i = rows.first; i <= rows.last; i++)\n            lines.push(session.getLine(i));\n        lines.sort(function (a, b) {\n            if (a.toLowerCase() < b.toLowerCase())\n                return -1;\n            if (a.toLowerCase() > b.toLowerCase())\n                return 1;\n            return 0;\n        });\n        var deleteRange = new Range(0, 0, 0, 0);\n        for (var i = rows.first; i <= rows.last; i++) {\n            var line = session.getLine(i);\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            deleteRange.end.column = line.length;\n            session.replace(deleteRange, lines[i - rows.first]);\n        }\n    };\n    Editor.prototype.toggleCommentLines = function () {\n        var state = this.session.getState(this.getCursorPosition().row);\n        var rows = this.$getSelectedRows();\n        this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n    };\n    Editor.prototype.toggleBlockComment = function () {\n        var cursor = this.getCursorPosition();\n        var state = this.session.getState(cursor.row);\n        var range = this.getSelectionRange();\n        this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n    };\n    Editor.prototype.getNumberAt = function (row, column) {\n        var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n        _numberRx.lastIndex = 0;\n        var s = this.session.getLine(row);\n        while (_numberRx.lastIndex < column) {\n            var m = _numberRx.exec(s);\n            if (m.index <= column && m.index + m[0].length >= column) {\n                var number = {\n                    value: m[0],\n                    start: m.index,\n                    end: m.index + m[0].length\n                };\n                return number;\n            }\n        }\n        return null;\n    };\n    Editor.prototype.modifyNumber = function (amount) {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n        var charRange = new Range(row, column - 1, row, column);\n        var c = this.session.getTextRange(charRange);\n        if (!isNaN(parseFloat(c)) && isFinite(c)) {\n            var nr = this.getNumberAt(row, column);\n            if (nr) {\n                var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n                var decimals = nr.start + nr.value.length - fp;\n                var t = parseFloat(nr.value);\n                t *= Math.pow(10, decimals);\n                if (fp !== nr.end && column < fp) {\n                    amount *= Math.pow(10, nr.end - column - 1);\n                }\n                else {\n                    amount *= Math.pow(10, nr.end - column);\n                }\n                t += amount;\n                t /= Math.pow(10, decimals);\n                var nnr = t.toFixed(decimals);\n                var replaceRange = new Range(row, nr.start, row, nr.end);\n                this.session.replace(replaceRange, nnr);\n                this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n            }\n        }\n        else {\n            this.toggleWord();\n        }\n    };\n    Editor.prototype.toggleWord = function () {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n        this.selection.selectWord();\n        var currentState = this.getSelectedText();\n        var currWordStart = this.selection.getWordRange().start.column;\n        var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n        var delta = column - currWordStart - 1;\n        if (delta < 0)\n            delta = 0;\n        var curLength = 0, itLength = 0;\n        var that = this;\n        if (currentState.match(/[A-Za-z0-9_]+/)) {\n            wordParts.forEach(function (item, i) {\n                itLength = curLength + item.length;\n                if (delta >= curLength && delta <= itLength) {\n                    currentState = item;\n                    that.selection.clearSelection();\n                    that.moveCursorTo(row, curLength + currWordStart);\n                    that.selection.selectTo(row, itLength + currWordStart);\n                }\n                curLength = itLength;\n            });\n        }\n        var wordPairs = this.$toggleWordPairs;\n        var reg;\n        for (var i = 0; i < wordPairs.length; i++) {\n            var item = wordPairs[i];\n            for (var j = 0; j <= 1; j++) {\n                var negate = +!j;\n                var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n                if (firstCondition) {\n                    var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n                    if (secondCondition) {\n                        reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n                            var res = item[negate];\n                            if (result.toUpperCase() == result) {\n                                res = res.toUpperCase();\n                            }\n                            else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n                                res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n                            }\n                            return res;\n                        });\n                        this.insert(reg);\n                        reg = \"\";\n                    }\n                }\n            }\n        }\n    };\n    Editor.prototype.findLinkAt = function (row, column) {\n        var e_1, _a;\n        var line = this.session.getLine(row);\n        var wordParts = line.split(/((?:https?|ftp):\\/\\/[\\S]+)/);\n        var columnPosition = column;\n        if (columnPosition < 0)\n            columnPosition = 0;\n        var previousPosition = 0, currentPosition = 0, match;\n        try {\n            for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) {\n                var item = wordParts_1_1.value;\n                currentPosition = previousPosition + item.length;\n                if (columnPosition >= previousPosition && columnPosition <= currentPosition) {\n                    if (item.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n                        match = item.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n                        break;\n                    }\n                }\n                previousPosition = currentPosition;\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return match;\n    };\n    Editor.prototype.openLink = function () {\n        var cursor = this.selection.getCursor();\n        var url = this.findLinkAt(cursor.row, cursor.column);\n        if (url)\n            window.open(url, '_blank');\n        return url != null;\n    };\n    Editor.prototype.removeLines = function () {\n        var rows = this.$getSelectedRows();\n        this.session.removeFullLines(rows.first, rows.last);\n        this.clearSelection();\n    };\n    Editor.prototype.duplicateSelection = function () {\n        var sel = this.selection;\n        var doc = this.session;\n        var range = sel.getRange();\n        var reverse = sel.isBackwards();\n        if (range.isEmpty()) {\n            var row = range.start.row;\n            doc.duplicateLines(row, row);\n        }\n        else {\n            var point = reverse ? range.start : range.end;\n            var endPoint = doc.insert(point, doc.getTextRange(range));\n            range.start = point;\n            range.end = endPoint;\n            sel.setSelectionRange(range, reverse);\n        }\n    };\n    Editor.prototype.moveLinesDown = function () {\n        this.$moveLines(1, false);\n    };\n    Editor.prototype.moveLinesUp = function () {\n        this.$moveLines(-1, false);\n    };\n    Editor.prototype.moveText = function (range, toPosition, copy) {\n        return this.session.moveText(range, toPosition, copy);\n    };\n    Editor.prototype.copyLinesUp = function () {\n        this.$moveLines(-1, true);\n    };\n    Editor.prototype.copyLinesDown = function () {\n        this.$moveLines(1, true);\n    };\n    Editor.prototype.$moveLines = function (dir, copy) {\n        var rows, moved;\n        var selection = this.selection;\n        if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n            var range = selection.toOrientedRange();\n            rows = this.$getSelectedRows(range);\n            moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n            if (copy && dir == -1)\n                moved = 0;\n            range.moveBy(moved, 0);\n            selection.fromOrientedRange(range);\n        }\n        else {\n            var ranges = selection.rangeList.ranges;\n            selection.rangeList.detach(this.session);\n            this.inVirtualSelectionMode = true;\n            var diff = 0;\n            var totalDiff = 0;\n            var l = ranges.length;\n            for (var i = 0; i < l; i++) {\n                var rangeIndex = i;\n                ranges[i].moveBy(diff, 0);\n                rows = this.$getSelectedRows(ranges[i]);\n                var first = rows.first;\n                var last = rows.last;\n                while (++i < l) {\n                    if (totalDiff)\n                        ranges[i].moveBy(totalDiff, 0);\n                    var subRows = this.$getSelectedRows(ranges[i]);\n                    if (copy && subRows.first != last)\n                        break;\n                    else if (!copy && subRows.first > last + 1)\n                        break;\n                    last = subRows.last;\n                }\n                i--;\n                diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n                if (copy && dir == -1)\n                    rangeIndex = i + 1;\n                while (rangeIndex <= i) {\n                    ranges[rangeIndex].moveBy(diff, 0);\n                    rangeIndex++;\n                }\n                if (!copy)\n                    diff = 0;\n                totalDiff += diff;\n            }\n            selection.fromOrientedRange(selection.ranges[0]);\n            selection.rangeList.attach(this.session);\n            this.inVirtualSelectionMode = false;\n        }\n    };\n    Editor.prototype.$getSelectedRows = function (range) {\n        range = (range || this.getSelectionRange()).collapseRows();\n        return {\n            first: this.session.getRowFoldStart(range.start.row),\n            last: this.session.getRowFoldEnd(range.end.row)\n        };\n    };\n    Editor.prototype.onCompositionStart = function (compositionState) {\n        this.renderer.showComposition(compositionState);\n    };\n    Editor.prototype.onCompositionUpdate = function (text) {\n        this.renderer.setCompositionText(text);\n    };\n    Editor.prototype.onCompositionEnd = function () {\n        this.renderer.hideComposition();\n    };\n    Editor.prototype.getFirstVisibleRow = function () {\n        return this.renderer.getFirstVisibleRow();\n    };\n    Editor.prototype.getLastVisibleRow = function () {\n        return this.renderer.getLastVisibleRow();\n    };\n    Editor.prototype.isRowVisible = function (row) {\n        return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n    };\n    Editor.prototype.isRowFullyVisible = function (row) {\n        return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n    };\n    Editor.prototype.$getVisibleRowCount = function () {\n        return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n    };\n    Editor.prototype.$moveByPage = function (dir, select) {\n        var renderer = this.renderer;\n        var config = this.renderer.layerConfig;\n        var rows = dir * Math.floor(config.height / config.lineHeight);\n        if (select === true) {\n            this.selection.$moveSelection(function () {\n                this.moveCursorBy(rows, 0);\n            });\n        }\n        else if (select === false) {\n            this.selection.moveCursorBy(rows, 0);\n            this.selection.clearSelection();\n        }\n        var scrollTop = renderer.scrollTop;\n        renderer.scrollBy(0, rows * config.lineHeight);\n        if (select != null)\n            renderer.scrollCursorIntoView(null, 0.5);\n        renderer.animateScrolling(scrollTop);\n    };\n    Editor.prototype.selectPageDown = function () {\n        this.$moveByPage(1, true);\n    };\n    Editor.prototype.selectPageUp = function () {\n        this.$moveByPage(-1, true);\n    };\n    Editor.prototype.gotoPageDown = function () {\n        this.$moveByPage(1, false);\n    };\n    Editor.prototype.gotoPageUp = function () {\n        this.$moveByPage(-1, false);\n    };\n    Editor.prototype.scrollPageDown = function () {\n        this.$moveByPage(1);\n    };\n    Editor.prototype.scrollPageUp = function () {\n        this.$moveByPage(-1);\n    };\n    Editor.prototype.scrollToRow = function (row) {\n        this.renderer.scrollToRow(row);\n    };\n    Editor.prototype.scrollToLine = function (line, center, animate, callback) {\n        this.renderer.scrollToLine(line, center, animate, callback);\n    };\n    Editor.prototype.centerSelection = function () {\n        var range = this.getSelectionRange();\n        var pos = {\n            row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n            column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n        };\n        this.renderer.alignCursor(pos, 0.5);\n    };\n    Editor.prototype.getCursorPosition = function () {\n        return this.selection.getCursor();\n    };\n    Editor.prototype.getCursorPositionScreen = function () {\n        return this.session.documentToScreenPosition(this.getCursorPosition());\n    };\n    Editor.prototype.getSelectionRange = function () {\n        return this.selection.getRange();\n    };\n    Editor.prototype.selectAll = function () {\n        this.selection.selectAll();\n    };\n    Editor.prototype.clearSelection = function () {\n        this.selection.clearSelection();\n    };\n    Editor.prototype.moveCursorTo = function (row, column) {\n        this.selection.moveCursorTo(row, column);\n    };\n    Editor.prototype.moveCursorToPosition = function (pos) {\n        this.selection.moveCursorToPosition(pos);\n    };\n    Editor.prototype.jumpToMatching = function (select, expand) {\n        var cursor = this.getCursorPosition();\n        var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n        var prevToken = iterator.getCurrentToken();\n        var tokenCount = 0;\n        if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n            prevToken = iterator.stepBackward();\n        }\n        var token = prevToken || iterator.stepForward();\n        if (!token)\n            return;\n        var matchType;\n        var found = false;\n        var depth = {};\n        var i = cursor.column - token.start;\n        var bracketType;\n        var brackets = {\n            \")\": \"(\",\n            \"(\": \"(\",\n            \"]\": \"[\",\n            \"[\": \"[\",\n            \"{\": \"{\",\n            \"}\": \"{\"\n        };\n        do {\n            if (token.value.match(/[{}()\\[\\]]/g)) {\n                for (; i < token.value.length && !found; i++) {\n                    if (!brackets[token.value[i]]) {\n                        continue;\n                    }\n                    bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n                    if (isNaN(depth[bracketType])) {\n                        depth[bracketType] = 0;\n                    }\n                    switch (token.value[i]) {\n                        case '(':\n                        case '[':\n                        case '{':\n                            depth[bracketType]++;\n                            break;\n                        case ')':\n                        case ']':\n                        case '}':\n                            depth[bracketType]--;\n                            if (depth[bracketType] === -1) {\n                                matchType = 'bracket';\n                                found = true;\n                            }\n                            break;\n                    }\n                }\n            }\n            else if (token.type.indexOf('tag-name') !== -1) {\n                if (isNaN(depth[token.value])) {\n                    depth[token.value] = 0;\n                }\n                if (prevToken.value === '<' && tokenCount > 1) {\n                    depth[token.value]++;\n                }\n                else if (prevToken.value === '</') {\n                    depth[token.value]--;\n                }\n                if (depth[token.value] === -1) {\n                    matchType = 'tag';\n                    found = true;\n                }\n            }\n            if (!found) {\n                prevToken = token;\n                tokenCount++;\n                token = iterator.stepForward();\n                i = 0;\n            }\n        } while (token && !found);\n        if (!matchType)\n            return;\n        var range, pos;\n        if (matchType === 'bracket') {\n            range = this.session.getBracketRange(cursor);\n            if (!range) {\n                range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n                pos = range.start;\n                if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column)\n                    < 2)\n                    range = this.session.getBracketRange(pos);\n            }\n        }\n        else if (matchType === 'tag') {\n            if (!token || token.type.indexOf('tag-name') === -1)\n                return;\n            range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n            if (range.compare(cursor.row, cursor.column) === 0) {\n                var tagsRanges = this.session.getMatchingTags(cursor);\n                if (tagsRanges) {\n                    if (tagsRanges.openTag.contains(cursor.row, cursor.column)) {\n                        range = tagsRanges.closeTag;\n                        pos = range.start;\n                    }\n                    else {\n                        range = tagsRanges.openTag;\n                        if (tagsRanges.closeTag.start.row === cursor.row && tagsRanges.closeTag.start.column\n                            === cursor.column)\n                            pos = range.end;\n                        else\n                            pos = range.start;\n                    }\n                }\n            }\n            pos = pos || range.start;\n        }\n        pos = range && range.cursor || pos;\n        if (pos) {\n            if (select) {\n                if (range && expand) {\n                    this.selection.setRange(range);\n                }\n                else if (range && range.isEqual(this.getSelectionRange())) {\n                    this.clearSelection();\n                }\n                else {\n                    this.selection.selectTo(pos.row, pos.column);\n                }\n            }\n            else {\n                this.selection.moveTo(pos.row, pos.column);\n            }\n        }\n    };\n    Editor.prototype.gotoLine = function (lineNumber, column, animate) {\n        this.selection.clearSelection();\n        this.session.unfold({ row: lineNumber - 1, column: column || 0 });\n        this.exitMultiSelectMode && this.exitMultiSelectMode();\n        this.moveCursorTo(lineNumber - 1, column || 0);\n        if (!this.isRowFullyVisible(lineNumber - 1))\n            this.scrollToLine(lineNumber - 1, true, animate);\n    };\n    Editor.prototype.navigateTo = function (row, column) {\n        this.selection.moveTo(row, column);\n    };\n    Editor.prototype.navigateUp = function (times) {\n        if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n            var selectionStart = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionStart);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(-times || -1, 0);\n    };\n    Editor.prototype.navigateDown = function (times) {\n        if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n            var selectionEnd = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionEnd);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(times || 1, 0);\n    };\n    Editor.prototype.navigateLeft = function (times) {\n        if (!this.selection.isEmpty()) {\n            var selectionStart = this.getSelectionRange().start;\n            this.moveCursorToPosition(selectionStart);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorLeft();\n            }\n        }\n        this.clearSelection();\n    };\n    Editor.prototype.navigateRight = function (times) {\n        if (!this.selection.isEmpty()) {\n            var selectionEnd = this.getSelectionRange().end;\n            this.moveCursorToPosition(selectionEnd);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorRight();\n            }\n        }\n        this.clearSelection();\n    };\n    Editor.prototype.navigateLineStart = function () {\n        this.selection.moveCursorLineStart();\n        this.clearSelection();\n    };\n    Editor.prototype.navigateLineEnd = function () {\n        this.selection.moveCursorLineEnd();\n        this.clearSelection();\n    };\n    Editor.prototype.navigateFileEnd = function () {\n        this.selection.moveCursorFileEnd();\n        this.clearSelection();\n    };\n    Editor.prototype.navigateFileStart = function () {\n        this.selection.moveCursorFileStart();\n        this.clearSelection();\n    };\n    Editor.prototype.navigateWordRight = function () {\n        this.selection.moveCursorWordRight();\n        this.clearSelection();\n    };\n    Editor.prototype.navigateWordLeft = function () {\n        this.selection.moveCursorWordLeft();\n        this.clearSelection();\n    };\n    Editor.prototype.replace = function (replacement, options) {\n        if (options)\n            this.$search.set(options);\n        var range = this.$search.find(this.session);\n        var replaced = 0;\n        if (!range)\n            return replaced;\n        if (this.$tryReplace(range, replacement)) {\n            replaced = 1;\n        }\n        this.selection.setSelectionRange(range);\n        this.renderer.scrollSelectionIntoView(range.start, range.end);\n        return replaced;\n    };\n    Editor.prototype.replaceAll = function (replacement, options) {\n        if (options) {\n            this.$search.set(options);\n        }\n        var ranges = this.$search.findAll(this.session);\n        var replaced = 0;\n        if (!ranges.length)\n            return replaced;\n        var selection = this.getSelectionRange();\n        this.selection.moveTo(0, 0);\n        for (var i = ranges.length - 1; i >= 0; --i) {\n            if (this.$tryReplace(ranges[i], replacement)) {\n                replaced++;\n            }\n        }\n        this.selection.setSelectionRange(selection);\n        return replaced;\n    };\n    Editor.prototype.$tryReplace = function (range, replacement) {\n        var input = this.session.getTextRange(range);\n        replacement = this.$search.replace(input, replacement);\n        if (replacement !== null) {\n            range.end = this.session.replace(range, replacement);\n            return range;\n        }\n        else {\n            return null;\n        }\n    };\n    Editor.prototype.getLastSearchOptions = function () {\n        return this.$search.getOptions();\n    };\n    Editor.prototype.find = function (needle, options, animate) {\n        if (!options)\n            options = {};\n        if (typeof needle == \"string\" || needle instanceof RegExp)\n            options.needle = needle;\n        else if (typeof needle == \"object\")\n            oop.mixin(options, needle);\n        var range = this.selection.getRange();\n        if (options.needle == null) {\n            needle = this.session.getTextRange(range)\n                || this.$search.$options.needle;\n            if (!needle) {\n                range = this.session.getWordRange(range.start.row, range.start.column);\n                needle = this.session.getTextRange(range);\n            }\n            this.$search.set({ needle: needle });\n        }\n        this.$search.set(options);\n        if (!options.start)\n            this.$search.set({ start: range });\n        var newRange = this.$search.find(this.session);\n        if (options.preventScroll)\n            return newRange;\n        if (newRange) {\n            this.revealRange(newRange, animate);\n            return newRange;\n        }\n        if (options.backwards)\n            range.start = range.end;\n        else\n            range.end = range.start;\n        this.selection.setRange(range);\n    };\n    Editor.prototype.findNext = function (options, animate) {\n        this.find({ skipCurrent: true, backwards: false }, options, animate);\n    };\n    Editor.prototype.findPrevious = function (options, animate) {\n        this.find(options, { skipCurrent: true, backwards: true }, animate);\n    };\n    Editor.prototype.revealRange = function (range, animate) {\n        this.session.unfold(range);\n        this.selection.setSelectionRange(range);\n        var scrollTop = this.renderer.scrollTop;\n        this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n        if (animate !== false)\n            this.renderer.animateScrolling(scrollTop);\n    };\n    Editor.prototype.undo = function () {\n        this.session.getUndoManager().undo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    Editor.prototype.redo = function () {\n        this.session.getUndoManager().redo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    Editor.prototype.destroy = function () {\n        this.destroyed = true;\n        if (this.$toDestroy) {\n            this.$toDestroy.forEach(function (el) {\n                el.destroy();\n            });\n            this.$toDestroy = [];\n        }\n        if (this.$mouseHandler)\n            this.$mouseHandler.destroy();\n        this.renderer.destroy();\n        this._signal(\"destroy\", this);\n        if (this.session)\n            this.session.destroy();\n        if (this._$emitInputEvent)\n            this._$emitInputEvent.cancel();\n        this.removeAllListeners();\n    };\n    Editor.prototype.setAutoScrollEditorIntoView = function (enable) {\n        if (!enable)\n            return;\n        var rect;\n        var self = this;\n        var shouldScroll = false;\n        if (!this.$scrollAnchor)\n            this.$scrollAnchor = document.createElement(\"div\");\n        var scrollAnchor = this.$scrollAnchor;\n        scrollAnchor.style.cssText = \"position:absolute\";\n        this.container.insertBefore(scrollAnchor, this.container.firstChild);\n        var onChangeSelection = this.on(\"changeSelection\", function () {\n            shouldScroll = true;\n        });\n        var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n            if (shouldScroll)\n                rect = self.renderer.container.getBoundingClientRect();\n        });\n        var onAfterRender = this.renderer.on(\"afterRender\", function () {\n            if (shouldScroll && rect && (self.isFocused()\n                || self.searchBox && self.searchBox.isFocused())) {\n                var renderer = self.renderer;\n                var pos = renderer.$cursorLayer.$pixelPos;\n                var config = renderer.layerConfig;\n                var top = pos.top - config.offset;\n                if (pos.top >= 0 && top + rect.top < 0) {\n                    shouldScroll = true;\n                }\n                else if (pos.top < config.height &&\n                    pos.top + rect.top + config.lineHeight > window.innerHeight) {\n                    shouldScroll = false;\n                }\n                else {\n                    shouldScroll = null;\n                }\n                if (shouldScroll != null) {\n                    scrollAnchor.style.top = top + \"px\";\n                    scrollAnchor.style.left = pos.left + \"px\";\n                    scrollAnchor.style.height = config.lineHeight + \"px\";\n                    scrollAnchor.scrollIntoView(shouldScroll);\n                }\n                shouldScroll = rect = null;\n            }\n        });\n        this.setAutoScrollEditorIntoView = function (enable) {\n            if (enable)\n                return;\n            delete this.setAutoScrollEditorIntoView;\n            this.off(\"changeSelection\", onChangeSelection);\n            this.renderer.off(\"afterRender\", onAfterRender);\n            this.renderer.off(\"beforeRender\", onBeforeRender);\n        };\n    };\n    Editor.prototype.$resetCursorStyle = function () {\n        var style = this.$cursorStyle || \"ace\";\n        var cursorLayer = this.renderer.$cursorLayer;\n        if (!cursorLayer)\n            return;\n        cursorLayer.setSmoothBlinking(/smooth/.test(style));\n        cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n        dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n    };\n    Editor.prototype.prompt = function (message, options, callback) {\n        var editor = this;\n        config.loadModule(\"ace/ext/prompt\", function (module) {\n            module.prompt(editor, message, options, callback);\n        });\n    };\n    Object.defineProperty(Editor.prototype, \"hoverTooltip\", {\n        get: function () {\n            return this.$hoverTooltip || (this.$hoverTooltip = new HoverTooltip(this.container));\n        },\n        set: function (value) {\n            if (this.$hoverTooltip)\n                this.$hoverTooltip.destroy();\n            this.$hoverTooltip = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Editor;\n}());\nEditor.$uid = 0;\nEditor.prototype.curOp = null;\nEditor.prototype.prevOp = {};\nEditor.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\nEditor.prototype.$toggleWordPairs = [\n    [\"first\", \"last\"],\n    [\"true\", \"false\"],\n    [\"yes\", \"no\"],\n    [\"width\", \"height\"],\n    [\"top\", \"bottom\"],\n    [\"right\", \"left\"],\n    [\"on\", \"off\"],\n    [\"x\", \"y\"],\n    [\"get\", \"set\"],\n    [\"max\", \"min\"],\n    [\"horizontal\", \"vertical\"],\n    [\"show\", \"hide\"],\n    [\"add\", \"remove\"],\n    [\"up\", \"down\"],\n    [\"before\", \"after\"],\n    [\"even\", \"odd\"],\n    [\"in\", \"out\"],\n    [\"inside\", \"outside\"],\n    [\"next\", \"previous\"],\n    [\"increase\", \"decrease\"],\n    [\"attach\", \"detach\"],\n    [\"&&\", \"||\"],\n    [\"==\", \"!=\"]\n];\noop.implement(Editor.prototype, EventEmitter);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n    selectionStyle: {\n        set: function (style) {\n            this.onSelectionChange();\n            this._signal(\"changeSelectionStyle\", { data: style });\n        },\n        initialValue: \"line\"\n    },\n    highlightActiveLine: {\n        set: function () { this.$updateHighlightActiveLine(); },\n        initialValue: true\n    },\n    highlightSelectedWord: {\n        set: function (shouldHighlight) { this.$onSelectionChange(); },\n        initialValue: true\n    },\n    readOnly: {\n        set: function (/**@type{boolean}*/ readOnly) {\n            var _this = this;\n            this.textInput.setReadOnly(readOnly);\n            if (this.destroyed)\n                return;\n            this.$resetCursorStyle();\n            if (!this.$readOnlyCallback) {\n                this.$readOnlyCallback = function (e) {\n                    var shouldShow = false;\n                    if (e && e.type == \"keydown\") {\n                        if (e && e.key && !e.ctrlKey && !e.metaKey) {\n                            if (e.key == \" \")\n                                e.preventDefault();\n                            shouldShow = e.key.length == 1;\n                        }\n                        if (!shouldShow)\n                            return;\n                    }\n                    else if (e && e.type !== \"exec\") {\n                        shouldShow = true;\n                    }\n                    if (shouldShow) {\n                        var domNode = dom.createElement(\"div\");\n                        domNode.textContent = nls(\"editor.tooltip.disable-editing\", \"Editing is disabled\");\n                        if (!_this.hoverTooltip.isOpen) {\n                            _this.hoverTooltip.showForRange(_this, _this.getSelectionRange(), domNode);\n                        }\n                    }\n                    else if (_this.hoverTooltip && _this.hoverTooltip.isOpen) {\n                        _this.hoverTooltip.hide();\n                    }\n                };\n            }\n            var textArea = this.textInput.getElement();\n            if (readOnly) {\n                event.addListener(textArea, \"keydown\", this.$readOnlyCallback, this);\n                this.commands.on(\"exec\", this.$readOnlyCallback);\n                this.commands.on(\"commandUnavailable\", this.$readOnlyCallback);\n            }\n            else {\n                event.removeListener(textArea, \"keydown\", this.$readOnlyCallback);\n                this.commands.off(\"exec\", this.$readOnlyCallback);\n                this.commands.off(\"commandUnavailable\", this.$readOnlyCallback);\n            }\n        },\n        initialValue: false\n    },\n    copyWithEmptySelection: {\n        set: function (value) {\n            this.textInput.setCopyWithEmptySelection(value);\n        },\n        initialValue: false\n    },\n    cursorStyle: {\n        set: function (val) { this.$resetCursorStyle(); },\n        values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n        initialValue: \"ace\"\n    },\n    mergeUndoDeltas: {\n        values: [false, true, \"always\"],\n        initialValue: true\n    },\n    behavioursEnabled: { initialValue: true },\n    wrapBehavioursEnabled: { initialValue: true },\n    enableAutoIndent: { initialValue: true },\n    autoScrollEditorIntoView: {\n        set: function (val) { this.setAutoScrollEditorIntoView(val); }\n    },\n    keyboardHandler: {\n        set: function (val) { this.setKeyboardHandler(val); },\n        get: function () { return this.$keybindingId; },\n        handlesSet: true\n    },\n    value: {\n        set: function (val) { this.session.setValue(val); },\n        get: function () { return this.getValue(); },\n        handlesSet: true,\n        hidden: true\n    },\n    session: {\n        set: function (val) { this.setSession(val); },\n        get: function () { return this.session; },\n        handlesSet: true,\n        hidden: true\n    },\n    showLineNumbers: {\n        set: function (show) {\n            this.renderer.$gutterLayer.setShowLineNumbers(show);\n            this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n            if (show && this.$relativeLineNumbers)\n                relativeNumberRenderer.attach(this);\n            else\n                relativeNumberRenderer.detach(this);\n        },\n        initialValue: true\n    },\n    relativeLineNumbers: {\n        set: function (value) {\n            if (this.$showLineNumbers && value)\n                relativeNumberRenderer.attach(this);\n            else\n                relativeNumberRenderer.detach(this);\n        }\n    },\n    placeholder: {\n        set: function (message) {\n            if (!this.$updatePlaceholder) {\n                this.$updatePlaceholder = function () {\n                    var hasValue = this.session && (this.renderer.$composition ||\n                        this.session.getLength() > 1 || this.session.getLine(0).length > 0);\n                    if (hasValue && this.renderer.placeholderNode) {\n                        this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n                        dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n                        this.renderer.placeholderNode.remove();\n                        this.renderer.placeholderNode = null;\n                    }\n                    else if (!hasValue && !this.renderer.placeholderNode) {\n                        this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n                        dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n                        var el = dom.createElement(\"div\");\n                        el.className = \"ace_placeholder\";\n                        el.textContent = this.$placeholder || \"\";\n                        this.renderer.placeholderNode = el;\n                        this.renderer.content.appendChild(this.renderer.placeholderNode);\n                    }\n                    else if (!hasValue && this.renderer.placeholderNode) {\n                        this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n                    }\n                }.bind(this);\n                this.on(\"input\", this.$updatePlaceholder);\n            }\n            this.$updatePlaceholder();\n        }\n    },\n    enableKeyboardAccessibility: {\n        set: function (value) {\n            var blurCommand = {\n                name: \"blurTextInput\",\n                description: \"Set focus to the editor content div to allow tabbing through the page\",\n                bindKey: \"Esc\",\n                exec: function (editor) {\n                    editor.blur();\n                    editor.renderer.scroller.focus();\n                },\n                readOnly: true\n            };\n            var focusOnEnterKeyup = function (e) {\n                if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) {\n                    e.preventDefault();\n                    var row = this.getCursorPosition().row;\n                    if (!this.isRowVisible(row))\n                        this.scrollToLine(row, true, true);\n                    this.focus();\n                }\n            };\n            var gutterKeyboardHandler;\n            if (value) {\n                this.renderer.enableKeyboardAccessibility = true;\n                this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\";\n                this.textInput.getElement().setAttribute(\"tabindex\", -1);\n                this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0);\n                this.renderer.scroller.setAttribute(\"tabindex\", 0);\n                this.renderer.scroller.setAttribute(\"role\", \"group\");\n                this.renderer.scroller.setAttribute(\"aria-roledescription\", nls(\"editor.scroller.aria-roledescription\", \"editor\"));\n                this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n                this.renderer.scroller.setAttribute(\"aria-label\", nls(\"editor.scroller.aria-label\", \"Editor content, press Enter to start editing, press Escape to exit\"));\n                this.renderer.scroller.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n                this.commands.addCommand(blurCommand);\n                this.renderer.$gutter.setAttribute(\"tabindex\", 0);\n                this.renderer.$gutter.setAttribute(\"aria-hidden\", false);\n                this.renderer.$gutter.setAttribute(\"role\", \"group\");\n                this.renderer.$gutter.setAttribute(\"aria-roledescription\", nls(\"editor.gutter.aria-roledescription\", \"editor gutter\"));\n                this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"editor.gutter.aria-label\", \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\"));\n                this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName);\n                this.renderer.content.setAttribute(\"aria-hidden\", true);\n                if (!gutterKeyboardHandler)\n                    gutterKeyboardHandler = new GutterKeyboardHandler(this);\n                gutterKeyboardHandler.addListener();\n                this.textInput.setAriaOptions({\n                    setLabel: true\n                });\n            }\n            else {\n                this.renderer.enableKeyboardAccessibility = false;\n                this.textInput.getElement().setAttribute(\"tabindex\", 0);\n                this.textInput.setNumberOfExtraLines(0);\n                this.renderer.scroller.setAttribute(\"tabindex\", -1);\n                this.renderer.scroller.removeAttribute(\"role\");\n                this.renderer.scroller.removeAttribute(\"aria-roledescription\");\n                this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName);\n                this.renderer.scroller.removeAttribute(\"aria-label\");\n                this.renderer.scroller.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n                this.commands.removeCommand(blurCommand);\n                this.renderer.content.removeAttribute(\"aria-hidden\");\n                this.renderer.$gutter.setAttribute(\"tabindex\", -1);\n                this.renderer.$gutter.setAttribute(\"aria-hidden\", true);\n                this.renderer.$gutter.removeAttribute(\"role\");\n                this.renderer.$gutter.removeAttribute(\"aria-roledescription\");\n                this.renderer.$gutter.removeAttribute(\"aria-label\");\n                this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName);\n                if (gutterKeyboardHandler)\n                    gutterKeyboardHandler.removeListener();\n            }\n        },\n        initialValue: false\n    },\n    textInputAriaLabel: {\n        set: function (val) { this.$textInputAriaLabel = val; },\n        initialValue: \"\"\n    },\n    enableMobileMenu: {\n        set: function (val) { this.$enableMobileMenu = val; },\n        initialValue: true\n    },\n    customScrollbar: \"renderer\",\n    hScrollBarAlwaysVisible: \"renderer\",\n    vScrollBarAlwaysVisible: \"renderer\",\n    highlightGutterLine: \"renderer\",\n    animatedScroll: \"renderer\",\n    showInvisibles: \"renderer\",\n    showPrintMargin: \"renderer\",\n    printMarginColumn: \"renderer\",\n    printMargin: \"renderer\",\n    fadeFoldWidgets: \"renderer\",\n    showFoldWidgets: \"renderer\",\n    displayIndentGuides: \"renderer\",\n    highlightIndentGuides: \"renderer\",\n    showGutter: \"renderer\",\n    fontSize: \"renderer\",\n    fontFamily: \"renderer\",\n    maxLines: \"renderer\",\n    minLines: \"renderer\",\n    scrollPastEnd: \"renderer\",\n    fixedWidthGutter: \"renderer\",\n    theme: \"renderer\",\n    hasCssTransforms: \"renderer\",\n    maxPixelHeight: \"renderer\",\n    useTextareaForIME: \"renderer\",\n    useResizeObserver: \"renderer\",\n    useSvgGutterIcons: \"renderer\",\n    showFoldedAnnotations: \"renderer\",\n    scrollSpeed: \"$mouseHandler\",\n    dragDelay: \"$mouseHandler\",\n    dragEnabled: \"$mouseHandler\",\n    focusTimeout: \"$mouseHandler\",\n    firstLineNumber: \"session\",\n    overwrite: \"session\",\n    newLineMode: \"session\",\n    useWorker: \"session\",\n    useSoftTabs: \"session\",\n    navigateWithinSoftTabs: \"session\",\n    tabSize: \"session\",\n    wrap: \"session\",\n    indentedSoftWrap: \"session\",\n    foldStyle: \"session\",\n    mode: \"session\"\n});\nvar relativeNumberRenderer = {\n    getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) {\n        return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n    },\n    getWidth: function (session, /**@type{number}*/ lastLineNumber, config) {\n        return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n    },\n    update: function (e, /**@type{Editor}*/ editor) {\n        editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n    },\n    attach: function (/**@type{Editor}*/ editor) {\n        editor.renderer.$gutterLayer.$renderer = this;\n        editor.on(\"changeSelection\", this.update);\n        this.update(null, editor);\n    },\n    detach: function (/**@type{Editor}*/ editor) {\n        if (editor.renderer.$gutterLayer.$renderer == this)\n            editor.renderer.$gutterLayer.$renderer = null;\n        editor.off(\"changeSelection\", this.update);\n        this.update(null, editor);\n    }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = /** @class */ (function () {\n    function Lines(element, canvasHeight) {\n        this.element = element;\n        this.canvasHeight = canvasHeight || 500000;\n        this.element.style.height = (this.canvasHeight * 2) + \"px\";\n        this.cells = [];\n        this.cellCache = [];\n        this.$offsetCoefficient = 0;\n    }\n    Lines.prototype.moveContainer = function (config) {\n        dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n    };\n    Lines.prototype.pageChanged = function (oldConfig, newConfig) {\n        return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n            Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n    };\n    Lines.prototype.computeLineTop = function (row, config, session) {\n        var screenTop = config.firstRowScreen * config.lineHeight;\n        var screenPage = Math.floor(screenTop / this.canvasHeight);\n        var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n        return lineTop - (screenPage * this.canvasHeight);\n    };\n    Lines.prototype.computeLineHeight = function (row, config, session) {\n        return config.lineHeight * session.getRowLineCount(row);\n    };\n    Lines.prototype.getLength = function () {\n        return this.cells.length;\n    };\n    Lines.prototype.get = function (index) {\n        return this.cells[index];\n    };\n    Lines.prototype.shift = function () {\n        this.$cacheCell(this.cells.shift());\n    };\n    Lines.prototype.pop = function () {\n        this.$cacheCell(this.cells.pop());\n    };\n    Lines.prototype.push = function (cell) {\n        if (Array.isArray(cell)) {\n            this.cells.push.apply(this.cells, cell);\n            var fragment = dom.createFragment(this.element);\n            for (var i = 0; i < cell.length; i++) {\n                fragment.appendChild(cell[i].element);\n            }\n            this.element.appendChild(fragment);\n        }\n        else {\n            this.cells.push(cell);\n            this.element.appendChild(cell.element);\n        }\n    };\n    Lines.prototype.unshift = function (cell) {\n        if (Array.isArray(cell)) {\n            this.cells.unshift.apply(this.cells, cell);\n            var fragment = dom.createFragment(this.element);\n            for (var i = 0; i < cell.length; i++) {\n                fragment.appendChild(cell[i].element);\n            }\n            if (this.element.firstChild)\n                this.element.insertBefore(fragment, this.element.firstChild);\n            else\n                this.element.appendChild(fragment);\n        }\n        else {\n            this.cells.unshift(cell);\n            this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n        }\n    };\n    Lines.prototype.last = function () {\n        if (this.cells.length)\n            return this.cells[this.cells.length - 1];\n        else\n            return null;\n    };\n    Lines.prototype.$cacheCell = function (cell) {\n        if (!cell)\n            return;\n        cell.element.remove();\n        this.cellCache.push(cell);\n    };\n    Lines.prototype.createCell = function (row, config, session, initElement) {\n        var cell = this.cellCache.pop();\n        if (!cell) {\n            var element = dom.createElement(\"div\");\n            if (initElement)\n                initElement(element);\n            this.element.appendChild(element);\n            cell = {\n                element: element,\n                text: \"\",\n                row: row\n            };\n        }\n        cell.row = row;\n        return cell;\n    };\n    return Lines;\n}());\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar nls = require(\"../config\").nls;\nvar Gutter = /** @class */ (function () {\n    function Gutter(parentEl) {\n        this.$showCursorMarker = null;\n        this.element = dom.createElement(\"div\");\n        this.element.className = \"ace_layer ace_gutter-layer\";\n        parentEl.appendChild(this.element);\n        this.setShowFoldWidgets(this.$showFoldWidgets);\n        this.gutterWidth = 0;\n        this.$annotations = [];\n        this.$updateAnnotations = this.$updateAnnotations.bind(this);\n        this.$lines = new Lines(this.element);\n        this.$lines.$offsetCoefficient = 1;\n    }\n    Gutter.prototype.setSession = function (session) {\n        if (this.session)\n            this.session.off(\"change\", this.$updateAnnotations);\n        this.session = session;\n        if (session)\n            session.on(\"change\", this.$updateAnnotations);\n    };\n    Gutter.prototype.addGutterDecoration = function (row, className) {\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n        this.session.addGutterDecoration(row, className);\n    };\n    Gutter.prototype.removeGutterDecoration = function (row, className) {\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n        this.session.removeGutterDecoration(row, className);\n    };\n    Gutter.prototype.setAnnotations = function (annotations) {\n        this.$annotations = [];\n        for (var i = 0; i < annotations.length; i++) {\n            var annotation = annotations[i];\n            var row = annotation.row;\n            var rowInfo = this.$annotations[row];\n            if (!rowInfo)\n                rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] };\n            var annoText = annotation.text;\n            var displayAnnoText = annotation.text;\n            var annoType = annotation.type;\n            annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n            displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || \"\";\n            if (rowInfo.text.indexOf(annoText) === -1) {\n                rowInfo.text.push(annoText);\n                rowInfo.type.push(annoType);\n                rowInfo.displayText.push(displayAnnoText);\n            }\n            var className = annotation.className;\n            if (className) {\n                rowInfo.className = className;\n            }\n            else if (annoType === \"error\") {\n                rowInfo.className = \" ace_error\";\n            }\n            else if (annoType === \"security\" && !/\\bace_error\\b/.test(rowInfo.className)) {\n                rowInfo.className = \" ace_security\";\n            }\n            else if (annoType === \"warning\" && !/\\bace_(error|security)\\b/.test(rowInfo.className)) {\n                rowInfo.className = \" ace_warning\";\n            }\n            else if (annoType === \"info\" && !rowInfo.className) {\n                rowInfo.className = \" ace_info\";\n            }\n            else if (annoType === \"hint\" && !rowInfo.className) {\n                rowInfo.className = \" ace_hint\";\n            }\n        }\n    };\n    Gutter.prototype.$updateAnnotations = function (delta) {\n        if (!this.$annotations.length)\n            return;\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n        if (len === 0) {\n        }\n        else if (delta.action == 'remove') {\n            this.$annotations.splice(firstRow, len + 1, null);\n        }\n        else {\n            var args = new Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.$annotations.splice.apply(this.$annotations, args);\n        }\n    };\n    Gutter.prototype.update = function (config) {\n        this.config = config;\n        var session = this.session;\n        var firstRow = config.firstRow;\n        var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n        session.getLength() - 1);\n        this.oldLastRow = lastRow;\n        this.config = config;\n        this.$lines.moveContainer(config);\n        this.$updateCursorRow();\n        var fold = session.getNextFoldLine(firstRow);\n        var foldStart = fold ? fold.start.row : Infinity;\n        var cell = null;\n        var index = -1;\n        var row = firstRow;\n        while (true) {\n            if (row > foldStart) {\n                row = fold.end.row + 1;\n                fold = session.getNextFoldLine(row, fold);\n                foldStart = fold ? fold.start.row : Infinity;\n            }\n            if (row > lastRow) {\n                while (this.$lines.getLength() > index + 1)\n                    this.$lines.pop();\n                break;\n            }\n            cell = this.$lines.get(++index);\n            if (cell) {\n                cell.row = row;\n            }\n            else {\n                cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n                this.$lines.push(cell);\n            }\n            this.$renderCell(cell, config, fold, row);\n            row++;\n        }\n        this._signal(\"afterRender\");\n        this.$updateGutterWidth(config);\n        if (this.$showCursorMarker && this.$highlightGutterLine)\n            this.$updateCursorMarker();\n    };\n    Gutter.prototype.$updateGutterWidth = function (config) {\n        var session = this.session;\n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n        var firstLineNumber = session.$firstLineNumber;\n        var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n        if (this.$fixedWidth || session.$useWrapMode)\n            lastLineText = session.getLength() + firstLineNumber - 1;\n        var gutterWidth = gutterRenderer\n            ? gutterRenderer.getWidth(session, lastLineText, config)\n            : lastLineText.toString().length * config.characterWidth;\n        var padding = this.$padding || this.$computePadding();\n        gutterWidth += padding.left + padding.right;\n        if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n            this.gutterWidth = gutterWidth; (this.element.parentNode).style.width =\n                this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n            this._signal(\"changeGutterWidth\", gutterWidth);\n        }\n    };\n    Gutter.prototype.$updateCursorRow = function () {\n        if (!this.$highlightGutterLine)\n            return;\n        var position = this.session.selection.getCursor();\n        if (this.$cursorRow === position.row)\n            return;\n        this.$cursorRow = position.row;\n    };\n    Gutter.prototype.updateLineHighlight = function () {\n        if (this.$showCursorMarker)\n            this.$updateCursorMarker();\n        if (!this.$highlightGutterLine)\n            return;\n        var row = this.session.selection.cursor.row;\n        this.$cursorRow = row;\n        if (this.$cursorCell && this.$cursorCell.row == row)\n            return;\n        if (this.$cursorCell)\n            this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n        var cells = this.$lines.cells;\n        this.$cursorCell = null;\n        for (var i = 0; i < cells.length; i++) {\n            var cell = cells[i];\n            if (cell.row >= this.$cursorRow) {\n                if (cell.row > this.$cursorRow) {\n                    var fold = this.session.getFoldLine(this.$cursorRow);\n                    if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n                        cell = cells[i - 1];\n                    else\n                        break;\n                }\n                cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n                this.$cursorCell = cell;\n                break;\n            }\n        }\n    };\n    Gutter.prototype.$updateCursorMarker = function () {\n        if (!this.session)\n            return;\n        var session = this.session;\n        if (!this.$highlightElement) {\n            this.$highlightElement = dom.createElement(\"div\");\n            this.$highlightElement.className = \"ace_gutter-cursor\";\n            this.$highlightElement.style.pointerEvents = \"none\";\n            this.element.appendChild(this.$highlightElement);\n        }\n        var pos = session.selection.cursor;\n        var config = this.config;\n        var lines = this.$lines;\n        var screenTop = config.firstRowScreen * config.lineHeight;\n        var screenPage = Math.floor(screenTop / lines.canvasHeight);\n        var lineTop = session.documentToScreenRow(pos) * config.lineHeight;\n        var top = lineTop - (screenPage * lines.canvasHeight);\n        dom.setStyle(this.$highlightElement.style, \"height\", config.lineHeight + \"px\");\n        dom.setStyle(this.$highlightElement.style, \"top\", top + \"px\");\n    };\n    Gutter.prototype.scrollLines = function (config) {\n        var oldConfig = this.config;\n        this.config = config;\n        this.$updateCursorRow();\n        if (this.$lines.pageChanged(oldConfig, config))\n            return this.update(config);\n        this.$lines.moveContainer(config);\n        var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n        this.session.getLength() - 1);\n        var oldLastRow = this.oldLastRow;\n        this.oldLastRow = lastRow;\n        if (!oldConfig || oldLastRow < config.firstRow)\n            return this.update(config);\n        if (lastRow < oldConfig.firstRow)\n            return this.update(config);\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n                this.$lines.shift();\n        if (oldLastRow > lastRow)\n            for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n                this.$lines.pop();\n        if (config.firstRow < oldConfig.firstRow) {\n            this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n        }\n        if (lastRow > oldLastRow) {\n            this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n        }\n        this.updateLineHighlight();\n        this._signal(\"afterRender\");\n        this.$updateGutterWidth(config);\n    };\n    Gutter.prototype.$renderLines = function (config, firstRow, lastRow) {\n        var fragment = [];\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row + 1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n            var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n            this.$renderCell(cell, config, foldLine, row);\n            fragment.push(cell);\n            row++;\n        }\n        return fragment;\n    };\n    Gutter.prototype.$renderCell = function (cell, config, fold, row) {\n        var element = cell.element;\n        var session = this.session;\n        var textNode = element.childNodes[0];\n        var foldWidget = element.childNodes[1];\n        var annotationNode = element.childNodes[2];\n        var customWidget = element.childNodes[3];\n        var annotationIconNode = annotationNode.firstChild;\n        var firstLineNumber = session.$firstLineNumber;\n        var breakpoints = session.$breakpoints;\n        var decorations = session.$decorations;\n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n        var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n        var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n        var lineHeight = config.lineHeight + \"px\";\n        var className = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \";\n        var iconClassName = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n        var rowText = (gutterRenderer\n            ? gutterRenderer.getText(session, row)\n            : row + firstLineNumber).toString();\n        if (this.$highlightGutterLine) {\n            if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n                className += \"ace_gutter-active-line \";\n                if (this.$cursorCell != cell) {\n                    if (this.$cursorCell)\n                        this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n                    this.$cursorCell = cell;\n                }\n            }\n        }\n        if (breakpoints[row])\n            className += breakpoints[row];\n        if (decorations[row])\n            className += decorations[row];\n        if (this.$annotations[row] && row !== foldStart)\n            className += this.$annotations[row].className;\n        if (foldWidgets) {\n            var c = foldWidgets[row];\n            if (c == null)\n                c = foldWidgets[row] = session.getFoldWidget(row);\n        }\n        if (c) {\n            var foldClass = \"ace_fold-widget ace_\" + c;\n            var isClosedFold = c == \"start\" && row == foldStart && row < fold.end.row;\n            if (isClosedFold) {\n                foldClass += \" ace_closed\";\n                var foldAnnotationClass = \"\";\n                var annotationInFold = false;\n                for (var i = row + 1; i <= fold.end.row; i++) {\n                    if (!this.$annotations[i])\n                        continue;\n                    if (this.$annotations[i].className === \" ace_error\") {\n                        annotationInFold = true;\n                        foldAnnotationClass = \" ace_error_fold\";\n                        break;\n                    }\n                    if (this.$annotations[i].className === \" ace_security\") {\n                        annotationInFold = true;\n                        foldAnnotationClass = \" ace_security_fold\";\n                    }\n                    else if (this.$annotations[i].className === \" ace_warning\" &&\n                        foldAnnotationClass !== \" ace_security_fold\") {\n                        annotationInFold = true;\n                        foldAnnotationClass = \" ace_warning_fold\";\n                    }\n                }\n                className += foldAnnotationClass;\n            }\n            else\n                foldClass += \" ace_open\";\n            if (foldWidget.className != foldClass)\n                foldWidget.className = foldClass;\n            dom.setStyle(foldWidget.style, \"height\", lineHeight);\n            dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n            foldWidget.setAttribute(\"role\", \"button\");\n            foldWidget.setAttribute(\"tabindex\", \"-1\");\n            var foldRange = session.getFoldWidgetRange(row);\n            if (foldRange)\n                foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.range.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n                    foldRange.start.row + 1,\n                    foldRange.end.row + 1\n                ]));\n            else {\n                if (fold)\n                    foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.closed.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n                        fold.start.row + 1,\n                        fold.end.row + 1\n                    ]));\n                else\n                    foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.open.aria-label\", \"Toggle code folding, row $0\", [row + 1]));\n            }\n            if (isClosedFold) {\n                foldWidget.setAttribute(\"aria-expanded\", \"false\");\n                foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.closed.title\", \"Unfold code\"));\n            }\n            else {\n                foldWidget.setAttribute(\"aria-expanded\", \"true\");\n                foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.open.title\", \"Fold code\"));\n            }\n        }\n        else {\n            if (foldWidget) {\n                dom.setStyle(foldWidget.style, \"display\", \"none\");\n                foldWidget.setAttribute(\"tabindex\", \"0\");\n                foldWidget.removeAttribute(\"role\");\n                foldWidget.removeAttribute(\"aria-label\");\n            }\n        }\n        var customWidgetAttributes = this.session.$gutterCustomWidgets[row];\n        if (customWidgetAttributes) {\n            this.$addCustomWidget(row, customWidgetAttributes, cell);\n        }\n        else if (customWidget) {\n            this.$removeCustomWidget(row, cell);\n        }\n        if (annotationInFold && this.$showFoldedAnnotations) {\n            annotationNode.className = \"ace_gutter_annotation\";\n            annotationIconNode.className = iconClassName;\n            annotationIconNode.className += foldAnnotationClass;\n            dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n            dom.setStyle(annotationNode.style, \"display\", \"block\");\n            dom.setStyle(annotationNode.style, \"height\", lineHeight);\n            var ariaLabel;\n            switch (foldAnnotationClass) {\n                case \" ace_error_fold\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_security_fold\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_warning_fold\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n                    break;\n            }\n            annotationNode.setAttribute(\"aria-label\", ariaLabel);\n            annotationNode.setAttribute(\"tabindex\", \"-1\");\n            annotationNode.setAttribute(\"role\", \"button\");\n        }\n        else if (this.$annotations[row]) {\n            annotationNode.className = \"ace_gutter_annotation\";\n            annotationIconNode.className = iconClassName;\n            if (this.$useSvgGutterIcons)\n                annotationIconNode.className += this.$annotations[row].className;\n            else\n                element.classList.add(this.$annotations[row].className.replace(\" \", \"\"));\n            dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n            dom.setStyle(annotationNode.style, \"display\", \"block\");\n            dom.setStyle(annotationNode.style, \"height\", lineHeight);\n            var ariaLabel;\n            switch (this.$annotations[row].className) {\n                case \" ace_error\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_security\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_warning\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_info\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.info\", \"Info, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_hint\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.hint\", \"Suggestion, read annotations row $0\", [rowText]);\n                    break;\n            }\n            annotationNode.setAttribute(\"aria-label\", ariaLabel);\n            annotationNode.setAttribute(\"tabindex\", \"-1\");\n            annotationNode.setAttribute(\"role\", \"button\");\n        }\n        else {\n            dom.setStyle(annotationNode.style, \"display\", \"none\");\n            annotationNode.removeAttribute(\"aria-label\");\n            annotationNode.removeAttribute(\"role\");\n            annotationNode.setAttribute(\"tabindex\", \"0\");\n        }\n        if (rowText !== textNode.data) {\n            textNode.data = rowText;\n        }\n        if (element.className != className)\n            element.className = className;\n        dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n        dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n        cell.text = rowText;\n        if (annotationNode.style.display === \"none\" && foldWidget.style.display === \"none\" && !customWidgetAttributes)\n            cell.element.setAttribute(\"aria-hidden\", true);\n        else\n            cell.element.setAttribute(\"aria-hidden\", false);\n        return cell;\n    };\n    Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) {\n        this.$highlightGutterLine = highlightGutterLine;\n        if (!highlightGutterLine && this.$highlightElement) {\n            this.$highlightElement.remove();\n            this.$highlightElement = null;\n        }\n    };\n    Gutter.prototype.setShowLineNumbers = function (show) {\n        this.$renderer = !show && {\n            getWidth: function () { return 0; },\n            getText: function () { return \"\"; }\n        };\n    };\n    Gutter.prototype.getShowLineNumbers = function () {\n        return this.$showLineNumbers;\n    };\n    Gutter.prototype.setShowFoldWidgets = function (show) {\n        if (show)\n            dom.addCssClass(this.element, \"ace_folding-enabled\");\n        else\n            dom.removeCssClass(this.element, \"ace_folding-enabled\");\n        this.$showFoldWidgets = show;\n        this.$padding = null;\n    };\n    Gutter.prototype.getShowFoldWidgets = function () {\n        return this.$showFoldWidgets;\n    };\n    Gutter.prototype.$hideFoldWidget = function (row, cell) {\n        var rowCell = cell || this.$getGutterCell(row);\n        if (rowCell && rowCell.element) {\n            var foldWidget = rowCell.element.childNodes[1];\n            if (foldWidget) {\n                dom.setStyle(foldWidget.style, \"display\", \"none\");\n            }\n        }\n    };\n    Gutter.prototype.$showFoldWidget = function (row, cell) {\n        var rowCell = cell || this.$getGutterCell(row);\n        if (rowCell && rowCell.element) {\n            var foldWidget = rowCell.element.childNodes[1];\n            if (foldWidget && this.session.foldWidgets && this.session.foldWidgets[rowCell.row]) {\n                dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n            }\n        }\n    };\n    Gutter.prototype.$getGutterCell = function (row) {\n        var cells = this.$lines.cells;\n        var min = 0;\n        var max = cells.length - 1;\n        if (row < cells[0].row || row > cells[max].row)\n            return;\n        while (min <= max) {\n            var mid = Math.floor((min + max) / 2);\n            var cell = cells[mid];\n            if (cell.row > row) {\n                max = mid - 1;\n            }\n            else if (cell.row < row) {\n                min = mid + 1;\n            }\n            else {\n                return cell;\n            }\n        }\n        return cell;\n    };\n    Gutter.prototype.$addCustomWidget = function (row, _a, cell) {\n        var className = _a.className, label = _a.label, title = _a.title, callbacks = _a.callbacks;\n        this.session.$gutterCustomWidgets[row] = { className: className, label: label, title: title, callbacks: callbacks };\n        this.$hideFoldWidget(row, cell);\n        var rowCell = cell || this.$getGutterCell(row);\n        if (rowCell && rowCell.element) {\n            var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n            if (customWidget) {\n                customWidget.remove();\n            }\n            customWidget = dom.createElement(\"span\");\n            customWidget.className = \"ace_custom-widget \".concat(className);\n            customWidget.setAttribute(\"tabindex\", \"-1\");\n            customWidget.setAttribute(\"role\", 'button');\n            customWidget.setAttribute(\"aria-label\", label);\n            customWidget.setAttribute(\"title\", title);\n            dom.setStyle(customWidget.style, \"display\", \"inline-block\");\n            dom.setStyle(customWidget.style, \"height\", \"inherit\");\n            if (callbacks && callbacks.onClick) {\n                customWidget.addEventListener(\"click\", function (e) {\n                    callbacks.onClick(e, row);\n                    e.stopPropagation();\n                });\n            }\n            rowCell.element.appendChild(customWidget);\n        }\n    };\n    Gutter.prototype.$removeCustomWidget = function (row, cell) {\n        delete this.session.$gutterCustomWidgets[row];\n        this.$showFoldWidget(row, cell);\n        var rowCell = cell || this.$getGutterCell(row);\n        if (rowCell && rowCell.element) {\n            var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n            if (customWidget) {\n                rowCell.element.removeChild(customWidget);\n            }\n        }\n    };\n    Gutter.prototype.$computePadding = function () {\n        if (!this.element.firstChild)\n            return { left: 0, right: 0 };\n        var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild));\n        this.$padding = {};\n        this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n            + (parseInt(style.paddingLeft) || 0) + 1;\n        this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n            + (parseInt(style.paddingRight) || 0);\n        return this.$padding;\n    };\n    Gutter.prototype.getRegion = function (point) {\n        var padding = this.$padding || this.$computePadding();\n        var rect = this.element.getBoundingClientRect();\n        if (point.x < padding.left + rect.left)\n            return \"markers\";\n        if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n            return \"foldWidgets\";\n    };\n    return Gutter;\n}());\nGutter.prototype.$fixedWidth = false;\nGutter.prototype.$highlightGutterLine = true;\nGutter.prototype.$renderer = undefined;\nGutter.prototype.$showLineNumbers = true;\nGutter.prototype.$showFoldWidgets = true;\noop.implement(Gutter.prototype, EventEmitter);\nfunction onCreateCell(element) {\n    var textNode = document.createTextNode('');\n    element.appendChild(textNode);\n    var foldWidget = dom.createElement(\"span\");\n    element.appendChild(foldWidget);\n    var annotationNode = dom.createElement(\"span\");\n    element.appendChild(annotationNode);\n    var annotationIconNode = dom.createElement(\"span\");\n    annotationNode.appendChild(annotationIconNode);\n    return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = /** @class */ (function () {\n    function Marker(parentEl) {\n        this.element = dom.createElement(\"div\");\n        this.element.className = \"ace_layer ace_marker-layer\";\n        parentEl.appendChild(this.element);\n    }\n    Marker.prototype.setPadding = function (padding) {\n        this.$padding = padding;\n    };\n    Marker.prototype.setSession = function (session) {\n        this.session = session;\n    };\n    Marker.prototype.setMarkers = function (markers) {\n        this.markers = markers;\n    };\n    Marker.prototype.elt = function (className, css) {\n        var x = this.i != -1 && this.element.childNodes[this.i];\n        if (!x) {\n            x = document.createElement(\"div\");\n            this.element.appendChild(x);\n            this.i = -1;\n        }\n        else {\n            this.i++;\n        }\n        x.style.cssText = css;\n        x.className = className;\n    };\n    Marker.prototype.update = function (config) {\n        if (!config)\n            return;\n        this.config = config;\n        this.i = 0;\n        var html;\n        for (var key in this.markers) {\n            var marker = this.markers[key];\n            if (!marker.range) {\n                marker.update(html, this, this.session, config);\n                continue;\n            }\n            var range = marker.range.clipRows(config.firstRow, config.lastRow);\n            if (range.isEmpty())\n                continue;\n            range = range.toScreenRange(this.session);\n            if (marker.renderer) {\n                var top = this.$getTop(range.start.row, config);\n                var left = this.$padding + range.start.column * config.characterWidth;\n                marker.renderer(html, range, left, top, config);\n            }\n            else if (marker.type == \"fullLine\") {\n                this.drawFullLineMarker(html, range, marker.clazz, config);\n            }\n            else if (marker.type == \"screenLine\") {\n                this.drawScreenLineMarker(html, range, marker.clazz, config);\n            }\n            else if (range.isMultiLine()) {\n                if (marker.type == \"text\")\n                    this.drawTextMarker(html, range, marker.clazz, config);\n                else\n                    this.drawMultiLineMarker(html, range, marker.clazz, config);\n            }\n            else {\n                this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n            }\n        }\n        if (this.i != -1) {\n            while (this.i < this.element.childElementCount)\n                this.element.removeChild(this.element.lastChild);\n        }\n    };\n    Marker.prototype.$getTop = function (row, layerConfig) {\n        return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n    };\n    Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n        var session = this.session;\n        var start = range.start.row;\n        var end = range.end.row;\n        var row = start;\n        var prev = 0;\n        var curr = 0;\n        var next = session.getScreenLastRowColumn(row);\n        var lineRange = new Range(row, range.start.column, row, curr);\n        for (; row <= end; row++) {\n            lineRange.start.row = lineRange.end.row = row;\n            lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n            lineRange.end.column = next;\n            prev = curr;\n            curr = next;\n            next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n            this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n                + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n        }\n    };\n    Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n        var padding = this.$padding;\n        var height = config.lineHeight;\n        var top = this.$getTop(range.start.row, config);\n        var left = padding + range.start.column * config.characterWidth;\n        extraStyle = extraStyle || \"\";\n        if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n            var range1 = range.clone();\n            range1.end.row = range1.start.row;\n            range1.end.column = this.session.getLine(range1.start.row).length;\n            this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n        }\n        else {\n            this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:\" + padding + \"px;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n        }\n        if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n            var range1 = range.clone();\n            range1.start.row = range1.end.row;\n            range1.start.column = 0;\n            this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n        }\n        else {\n            top = this.$getTop(range.end.row, config);\n            var width = range.end.column * config.characterWidth;\n            this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n                \"width:\" + width + \"px;\" +\n                \"top:\" + top + \"px;\" +\n                \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n        }\n        height = (range.end.row - range.start.row - 1) * config.lineHeight;\n        if (height <= 0)\n            return;\n        top = this.$getTop(range.start.row + 1, config);\n        var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n        this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n            \"right:\" + padding + \"px;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n    };\n    Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        if (this.session.$bidiHandler.isBidiRow(range.start.row))\n            return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n        var height = config.lineHeight;\n        var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n        var top = this.$getTop(range.start.row, config);\n        var left = this.$padding + range.start.column * config.characterWidth;\n        this.elt(clazz, \"height:\" + height + \"px;\" +\n            \"width:\" + width + \"px;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n    };\n    Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n        var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n        selections.forEach(function (selection) {\n            this.elt(clazz, \"height:\" + height + \"px;\" +\n                \"width:\" + (selection.width + (extraLength || 0)) + \"px;\" +\n                \"top:\" + top + \"px;\" +\n                \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n        }, this);\n    };\n    Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n        if (range.start.row != range.end.row)\n            height += this.$getTop(range.end.row, config) - top;\n        this.elt(clazz, \"height:\" + height + \"px;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:0;right:0;\" + (extraStyle || \"\"));\n    };\n    Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n        this.elt(clazz, \"height:\" + height + \"px;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:0;right:0;\" + (extraStyle || \"\"));\n    };\n    return Marker;\n}());\nMarker.prototype.$padding = 0;\nfunction getBorderClass(tl, tr, br, bl) {\n    return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n}\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text_util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className.\nvar textTokens = new Set([\"text\", \"rparen\", \"lparen\"]);\nexports.isTextToken = function (tokenType) {\n    return textTokens.has(tokenType);\n};\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar nls = require(\"../config\").nls;\nvar isTextToken = require(\"./text_util\").isTextToken;\nvar Text = /** @class */ (function () {\n    function Text(parentEl) {\n        this.dom = dom;\n        this.element = this.dom.createElement(\"div\");\n        this.element.className = \"ace_layer ace_text-layer\";\n        parentEl.appendChild(this.element);\n        this.$updateEolChar = this.$updateEolChar.bind(this);\n        this.$lines = new Lines(this.element);\n    }\n    Text.prototype.$updateEolChar = function () {\n        var doc = this.session.doc;\n        var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n        var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n        if (this.EOL_CHAR != EOL_CHAR) {\n            this.EOL_CHAR = EOL_CHAR;\n            return true;\n        }\n    };\n    Text.prototype.setPadding = function (padding) {\n        this.$padding = padding;\n        this.element.style.margin = \"0 \" + padding + \"px\";\n    };\n    Text.prototype.getLineHeight = function () {\n        return this.$fontMetrics.$characterSize.height || 0;\n    };\n    Text.prototype.getCharacterWidth = function () {\n        return this.$fontMetrics.$characterSize.width || 0;\n    };\n    Text.prototype.$setFontMetrics = function (measure) {\n        this.$fontMetrics = measure;\n        this.$fontMetrics.on(\"changeCharacterSize\", \n        function (e) {\n            this._signal(\"changeCharacterSize\", e);\n        }.bind(this));\n        this.$pollSizeChanges();\n    };\n    Text.prototype.checkForSizeChanges = function () {\n        this.$fontMetrics.checkForSizeChanges();\n    };\n    Text.prototype.$pollSizeChanges = function () {\n        return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n    };\n    Text.prototype.setSession = function (session) {\n        this.session = session;\n        if (session)\n            this.$computeTabString();\n    };\n    Text.prototype.setShowInvisibles = function (showInvisibles) {\n        if (this.showInvisibles == showInvisibles)\n            return false;\n        this.showInvisibles = showInvisibles;\n        if (typeof showInvisibles == \"string\") {\n            this.showSpaces = /tab/i.test(showInvisibles);\n            this.showTabs = /space/i.test(showInvisibles);\n            this.showEOL = /eol/i.test(showInvisibles);\n        }\n        else {\n            this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n        }\n        this.$computeTabString();\n        return true;\n    };\n    Text.prototype.setDisplayIndentGuides = function (display) {\n        if (this.displayIndentGuides == display)\n            return false;\n        this.displayIndentGuides = display;\n        this.$computeTabString();\n        return true;\n    };\n    Text.prototype.setHighlightIndentGuides = function (highlight) {\n        if (this.$highlightIndentGuides === highlight)\n            return false;\n        this.$highlightIndentGuides = highlight;\n        return highlight;\n    };\n    Text.prototype.$computeTabString = function () {\n        var tabSize = this.session.getTabSize();\n        this.tabSize = tabSize; var tabStr = this.$tabStrings = [0];\n        for (var i = 1; i < tabSize + 1; i++) {\n            if (this.showTabs) {\n                var span = this.dom.createElement(\"span\");\n                span.className = \"ace_invisible ace_invisible_tab\";\n                span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n                tabStr.push(span);\n            }\n            else {\n                tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n            }\n        }\n        if (this.displayIndentGuides) {\n            this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n            var className = \"ace_indent-guide\";\n            var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n            var spaceContent = this.showSpaces\n                ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n                : lang.stringRepeat(\" \", this.tabSize);\n            var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n            var tabContent = this.showTabs\n                ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n                : spaceContent;\n            var span = this.dom.createElement(\"span\");\n            span.className = className + spaceClass;\n            span.textContent = spaceContent;\n            this.$tabStrings[\" \"] = span;\n            var span = this.dom.createElement(\"span\");\n            span.className = className + tabClass;\n            span.textContent = tabContent;\n            this.$tabStrings[\"\\t\"] = span;\n        }\n    };\n    Text.prototype.updateLines = function (config, firstRow, lastRow) {\n        if (this.config.lastRow != config.lastRow ||\n            this.config.firstRow != config.firstRow) {\n            return this.update(config);\n        }\n        this.config = config;\n        var first = Math.max(firstRow, config.firstRow);\n        var last = Math.min(lastRow, config.lastRow);\n        var lineElements = this.element.childNodes;\n        var lineElementsIdx = 0;\n        for (var row = config.firstRow; row < first; row++) {\n            var foldLine = this.session.getFoldLine(row);\n            if (foldLine) {\n                if (foldLine.containsRow(first)) {\n                    first = foldLine.start.row;\n                    break;\n                }\n                else {\n                    row = foldLine.end.row;\n                }\n            }\n            lineElementsIdx++;\n        }\n        var heightChanged = false;\n        var row = first;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row + 1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > last)\n                break; var lineElement = lineElements[lineElementsIdx++];\n            if (lineElement) {\n                this.dom.removeChildren(lineElement);\n                this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n                if (heightChanged)\n                    lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n                var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n                if (lineElement.style.height != height) {\n                    heightChanged = true;\n                    lineElement.style.height = height;\n                }\n            }\n            row++;\n        }\n        if (heightChanged) {\n            while (lineElementsIdx < this.$lines.cells.length) {\n                var cell = this.$lines.cells[lineElementsIdx++];\n                cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n            }\n        }\n    };\n    Text.prototype.scrollLines = function (config) {\n        var oldConfig = this.config;\n        this.config = config;\n        if (this.$lines.pageChanged(oldConfig, config))\n            return this.update(config);\n        this.$lines.moveContainer(config);\n        var lastRow = config.lastRow;\n        var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n        if (!oldConfig || oldLastRow < config.firstRow)\n            return this.update(config);\n        if (lastRow < oldConfig.firstRow)\n            return this.update(config);\n        if (!oldConfig || oldConfig.lastRow < config.firstRow)\n            return this.update(config);\n        if (config.lastRow < oldConfig.firstRow)\n            return this.update(config);\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n                this.$lines.shift();\n        if (oldConfig.lastRow > config.lastRow)\n            for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n                this.$lines.pop();\n        if (config.firstRow < oldConfig.firstRow) {\n            this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n        }\n        if (config.lastRow > oldConfig.lastRow) {\n            this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n        }\n        this.$highlightIndentGuide();\n    };\n    Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) {\n        var fragment = [];\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row + 1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n            var line = this.$lines.createCell(row, config, this.session);\n            var lineEl = line.element;\n            this.dom.removeChildren(lineEl);\n            dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n            dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n            this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n            if (this.$useLineGroups()) {\n                lineEl.className = \"ace_line_group\";\n            }\n            else {\n                lineEl.className = \"ace_line\";\n            }\n            fragment.push(line);\n            row++;\n        }\n        return fragment;\n    };\n    Text.prototype.update = function (config) {\n        this.$lines.moveContainer(config);\n        this.config = config;\n        var firstRow = config.firstRow;\n        var lastRow = config.lastRow;\n        var lines = this.$lines;\n        while (lines.getLength())\n            lines.pop();\n        lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n    };\n    Text.prototype.$renderToken = function (parent, screenColumn, token, value) {\n        var self = this;\n        var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069\\u2060\\u2061\\u2062\\u2063\\u2064\\u206A\\u206B\\u206B\\u206C\\u206D\\u206E\\u206F]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n        var valueFragment = this.dom.createFragment(this.element);\n        var m;\n        var i = 0;\n        while (m = re.exec(value)) {\n            var tab = m[1];\n            var simpleSpace = m[2];\n            var controlCharacter = m[3];\n            var cjkSpace = m[4];\n            var cjk = m[5];\n            if (!self.showSpaces && simpleSpace)\n                continue;\n            var before = i != m.index ? value.slice(i, m.index) : \"\";\n            i = m.index + m[0].length;\n            if (before) {\n                valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n            }\n            if (tab) {\n                var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n                var text = self.$tabStrings[tabSize].cloneNode(true);\n                text[\"charCount\"] = 1;\n                valueFragment.appendChild(text);\n                screenColumn += tabSize - 1;\n            }\n            else if (simpleSpace) {\n                if (self.showSpaces) {\n                    var span = this.dom.createElement(\"span\");\n                    span.className = \"ace_invisible ace_invisible_space\";\n                    span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n                    valueFragment.appendChild(span);\n                }\n                else {\n                    valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element));\n                }\n            }\n            else if (controlCharacter) {\n                var span = this.dom.createElement(\"span\");\n                span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n                span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n                valueFragment.appendChild(span);\n            }\n            else if (cjkSpace) {\n                screenColumn += 1;\n                var span = this.dom.createElement(\"span\");\n                span.style.width = (self.config.characterWidth * 2) + \"px\";\n                span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n                span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n                valueFragment.appendChild(span);\n            }\n            else if (cjk) {\n                screenColumn += 1;\n                var span = this.dom.createElement(\"span\");\n                span.style.width = (self.config.characterWidth * 2) + \"px\";\n                span.className = \"ace_cjk\";\n                span.textContent = cjk;\n                valueFragment.appendChild(span);\n            }\n        }\n        valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n        if (!isTextToken(token.type)) {\n            var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n            var span = this.dom.createElement(\"span\");\n            if (token.type == \"fold\") {\n                span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n                span.setAttribute(\"title\", nls(\"inline-fold.closed.title\", \"Unfold code\"));\n            }\n            span.className = classes;\n            span.appendChild(valueFragment);\n            parent.appendChild(span);\n        }\n        else {\n            parent.appendChild(valueFragment);\n        }\n        return screenColumn + value.length;\n    };\n    Text.prototype.renderIndentGuide = function (parent, value, max) {\n        var cols = value.search(this.$indentGuideRe);\n        if (cols <= 0 || cols >= max)\n            return value;\n        if (value[0] == \" \") {\n            cols -= cols % this.tabSize;\n            var count = cols / this.tabSize;\n            for (var i = 0; i < count; i++) {\n                parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n            }\n            this.$highlightIndentGuide();\n            return value.substr(cols);\n        }\n        else if (value[0] == \"\\t\") {\n            for (var i = 0; i < cols; i++) {\n                parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n            }\n            this.$highlightIndentGuide();\n            return value.substr(cols);\n        }\n        this.$highlightIndentGuide();\n        return value;\n    };\n    Text.prototype.$highlightIndentGuide = function () {\n        if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n            return;\n        this.$highlightIndentGuideMarker = {\n            indentLevel: undefined,\n            start: undefined,\n            end: undefined,\n            dir: undefined\n        };\n        var lines = this.session.doc.$lines;\n        if (!lines)\n            return;\n        var cursor = this.session.selection.getCursor();\n        var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n        var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n        this.$highlightIndentGuideMarker = {\n            indentLevel: elementIndentLevel,\n            start: cursor.row\n        };\n        var bracketHighlight = this.session.$bracketHighlight;\n        if (bracketHighlight) {\n            var ranges = this.session.$bracketHighlight.ranges;\n            for (var i = 0; i < ranges.length; i++) {\n                if (cursor.row !== ranges[i].start.row) {\n                    this.$highlightIndentGuideMarker.end = ranges[i].start.row + 1;\n                    if (cursor.row > ranges[i].start.row) {\n                        this.$highlightIndentGuideMarker.dir = -1;\n                    }\n                    else {\n                        this.$highlightIndentGuideMarker.dir = 1;\n                    }\n                    break;\n                }\n            }\n        }\n        if (!this.$highlightIndentGuideMarker.end) {\n            if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n                this.$highlightIndentGuideMarker.dir = 1;\n                for (var i = cursor.row + 1; i < lines.length; i++) {\n                    var line = lines[i];\n                    var currentIndent = /^\\s*/.exec(line)[0].length;\n                    if (line !== '') {\n                        this.$highlightIndentGuideMarker.end = i;\n                        if (currentIndent <= initialIndent)\n                            break;\n                    }\n                }\n            }\n        }\n        this.$renderHighlightIndentGuide();\n    };\n    Text.prototype.$clearActiveIndentGuide = function () {\n        var activeIndentGuides = this.element.querySelectorAll(\".ace_indent-guide-active\");\n        for (var i = 0; i < activeIndentGuides.length; i++) {\n            activeIndentGuides[i].classList.remove(\"ace_indent-guide-active\");\n        }\n    };\n    Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n        var line = this.session.doc.getLine(cell.row);\n        if (line !== \"\") {\n            var element = cell.element;\n            if (cell.element.classList && cell.element.classList.contains(\"ace_line_group\")) {\n                if (cell.element.childNodes.length > 0) {\n                    element = cell.element.childNodes[0];\n                }\n                else {\n                    return;\n                }\n            }\n            var childNodes = element.childNodes;\n            if (childNodes) {\n                var node = childNodes[indentLevel - 1];\n                if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n                    node.classList.add(\"ace_indent-guide-active\");\n            }\n        }\n    };\n    Text.prototype.$renderHighlightIndentGuide = function () {\n        if (!this.$lines)\n            return;\n        var cells = this.$lines.cells;\n        this.$clearActiveIndentGuide();\n        var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n        if (indentLevel !== 0) {\n            if (this.$highlightIndentGuideMarker.dir === 1) {\n                for (var i = 0; i < cells.length; i++) {\n                    var cell = cells[i];\n                    if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n                        + 1) {\n                        if (cell.row >= this.$highlightIndentGuideMarker.end)\n                            break;\n                        this.$setIndentGuideActive(cell, indentLevel);\n                    }\n                }\n            }\n            else {\n                for (var i = cells.length - 1; i >= 0; i--) {\n                    var cell = cells[i];\n                    if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n                        if (cell.row < this.$highlightIndentGuideMarker.end)\n                            break;\n                        this.$setIndentGuideActive(cell, indentLevel);\n                    }\n                }\n            }\n        }\n    };\n    Text.prototype.$createLineElement = function (parent) {\n        var lineEl = this.dom.createElement(\"div\");\n        lineEl.className = \"ace_line\";\n        lineEl.style.height = this.config.lineHeight + \"px\";\n        return lineEl;\n    };\n    Text.prototype.$renderWrappedLine = function (parent, tokens, splits) {\n        var chars = 0;\n        var split = 0;\n        var splitChars = splits[0];\n        var screenColumn = 0;\n        var lineEl = this.$createLineElement();\n        parent.appendChild(lineEl);\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            var value = token.value;\n            if (i == 0 && this.displayIndentGuides) {\n                chars = value.length;\n                value = this.renderIndentGuide(lineEl, value, splitChars);\n                if (!value)\n                    continue;\n                chars -= value.length;\n            }\n            if (chars + value.length < splitChars) {\n                screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n                chars += value.length;\n            }\n            else {\n                while (chars + value.length >= splitChars) {\n                    screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n                    value = value.substring(splitChars - chars);\n                    chars = splitChars;\n                    lineEl = this.$createLineElement();\n                    parent.appendChild(lineEl);\n                    var text = this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element);\n                    text[\"charCount\"] = 0; // not to take into account when we are counting columns\n                    lineEl.appendChild(text);\n                    split++;\n                    screenColumn = 0;\n                    splitChars = splits[split] || Number.MAX_VALUE;\n                }\n                if (value.length != 0) {\n                    chars += value.length;\n                    screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n                }\n            }\n        }\n        if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n            this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n    };\n    Text.prototype.$renderSimpleLine = function (parent, tokens) {\n        var screenColumn = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            var value = token.value;\n            if (i == 0 && this.displayIndentGuides) {\n                value = this.renderIndentGuide(parent, value);\n                if (!value)\n                    continue;\n            }\n            if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n                return this.$renderOverflowMessage(parent, screenColumn, token, value);\n            screenColumn = this.$renderToken(parent, screenColumn, token, value);\n        }\n    };\n    Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n        token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n        var overflowEl = this.dom.createElement(\"span\");\n        overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n        overflowEl.textContent = hide ? \"<hide>\" : \"<click to see more...>\";\n        parent.appendChild(overflowEl);\n    };\n    Text.prototype.$renderLine = function (parent, row, foldLine) {\n        if (!foldLine && foldLine != false)\n            foldLine = this.session.getFoldLine(row);\n        if (foldLine)\n            var tokens = this.$getFoldLineTokens(row, foldLine);\n        else\n            var tokens = this.session.getTokens(row);\n        var lastLineEl = parent;\n        if (tokens.length) {\n            var splits = this.session.getRowSplitData(row);\n            if (splits && splits.length) {\n                this.$renderWrappedLine(parent, tokens, splits);\n                var lastLineEl = parent.lastChild;\n            }\n            else {\n                var lastLineEl = parent;\n                if (this.$useLineGroups()) {\n                    lastLineEl = this.$createLineElement();\n                    parent.appendChild(lastLineEl);\n                }\n                this.$renderSimpleLine(lastLineEl, tokens);\n            }\n        }\n        else if (this.$useLineGroups()) {\n            lastLineEl = this.$createLineElement();\n            parent.appendChild(lastLineEl);\n        }\n        if (this.showEOL && lastLineEl) {\n            if (foldLine)\n                row = foldLine.end.row;\n            var invisibleEl = this.dom.createElement(\"span\");\n            invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n            invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n            lastLineEl.appendChild(invisibleEl);\n        }\n    };\n    Text.prototype.$getFoldLineTokens = function (row, foldLine) {\n        var session = this.session;\n        var renderTokens = [];\n        function addTokens(tokens, from, to) {\n            var idx = 0, col = 0;\n            while ((col + tokens[idx].value.length) < from) {\n                col += tokens[idx].value.length;\n                idx++;\n                if (idx == tokens.length)\n                    return;\n            }\n            if (col != from) {\n                var value = tokens[idx].value.substring(from - col);\n                if (value.length > (to - from))\n                    value = value.substring(0, to - from);\n                renderTokens.push({\n                    type: tokens[idx].type,\n                    value: value\n                });\n                col = from + value.length;\n                idx += 1;\n            }\n            while (col < to && idx < tokens.length) {\n                var value = tokens[idx].value;\n                if (value.length + col > to) {\n                    renderTokens.push({\n                        type: tokens[idx].type,\n                        value: value.substring(0, to - col)\n                    });\n                }\n                else\n                    renderTokens.push(tokens[idx]);\n                col += value.length;\n                idx += 1;\n            }\n        }\n        var tokens = session.getTokens(row);\n        foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n            if (placeholder != null) {\n                renderTokens.push({\n                    type: \"fold\",\n                    value: placeholder\n                });\n            }\n            else {\n                if (isNewRow)\n                    tokens = session.getTokens(row);\n                if (tokens.length)\n                    addTokens(tokens, lastColumn, column);\n            }\n        }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n        return renderTokens;\n    };\n    Text.prototype.$useLineGroups = function () {\n        return this.session.getUseWrapMode();\n    };\n    return Text;\n}());\nText.prototype.EOF_CHAR = \"\\xB6\";\nText.prototype.EOL_CHAR_LF = \"\\xAC\";\nText.prototype.EOL_CHAR_CRLF = \"\\xa4\";\nText.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF;\nText.prototype.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\nText.prototype.SPACE_CHAR = \"\\xB7\";\nText.prototype.$padding = 0;\nText.prototype.MAX_LINE_LENGTH = 10000;\nText.prototype.showInvisibles = false;\nText.prototype.showSpaces = false;\nText.prototype.showTabs = false;\nText.prototype.showEOL = false;\nText.prototype.displayIndentGuides = true;\nText.prototype.$highlightIndentGuides = true;\nText.prototype.$tabStrings = [];\nText.prototype.destroy = {};\nText.prototype.onChangeTabSize = Text.prototype.$computeTabString;\noop.implement(Text.prototype, EventEmitter);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = /** @class */ (function () {\n    function Cursor(parentEl) {\n        this.element = dom.createElement(\"div\");\n        this.element.className = \"ace_layer ace_cursor-layer\";\n        parentEl.appendChild(this.element);\n        this.isVisible = false;\n        this.isBlinking = true;\n        this.blinkInterval = 1000;\n        this.smoothBlinking = false;\n        this.cursors = [];\n        this.cursor = this.addCursor();\n        dom.addCssClass(this.element, \"ace_hidden-cursors\");\n        this.$updateCursors = this.$updateOpacity.bind(this);\n    }\n    Cursor.prototype.$updateOpacity = function (val) {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--;)\n            dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n    };\n    Cursor.prototype.$startCssAnimation = function () {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--;)\n            cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n        this.$isAnimating = true;\n        setTimeout(function () {\n            if (this.$isAnimating) {\n                dom.addCssClass(this.element, \"ace_animate-blinking\");\n            }\n        }.bind(this));\n    };\n    Cursor.prototype.$stopCssAnimation = function () {\n        this.$isAnimating = false;\n        dom.removeCssClass(this.element, \"ace_animate-blinking\");\n    };\n    Cursor.prototype.setPadding = function (padding) {\n        this.$padding = padding;\n    };\n    Cursor.prototype.setSession = function (session) {\n        this.session = session;\n    };\n    Cursor.prototype.setBlinking = function (blinking) {\n        if (blinking != this.isBlinking) {\n            this.isBlinking = blinking;\n            this.restartTimer();\n        }\n    };\n    Cursor.prototype.setBlinkInterval = function (blinkInterval) {\n        if (blinkInterval != this.blinkInterval) {\n            this.blinkInterval = blinkInterval;\n            this.restartTimer();\n        }\n    };\n    Cursor.prototype.setSmoothBlinking = function (smoothBlinking) {\n        if (smoothBlinking != this.smoothBlinking) {\n            this.smoothBlinking = smoothBlinking;\n            dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n            this.$updateCursors(true);\n            this.restartTimer();\n        }\n    };\n    Cursor.prototype.addCursor = function () {\n        var el = dom.createElement(\"div\");\n        el.className = \"ace_cursor\";\n        this.element.appendChild(el);\n        this.cursors.push(el);\n        return el;\n    };\n    Cursor.prototype.removeCursor = function () {\n        if (this.cursors.length > 1) {\n            var el = this.cursors.pop();\n            el.parentNode.removeChild(el);\n            return el;\n        }\n    };\n    Cursor.prototype.hideCursor = function () {\n        this.isVisible = false;\n        dom.addCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n    Cursor.prototype.showCursor = function () {\n        this.isVisible = true;\n        dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n    Cursor.prototype.restartTimer = function () {\n        var update = this.$updateCursors;\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n        this.$stopCssAnimation();\n        if (this.smoothBlinking) {\n            this.$isSmoothBlinking = false;\n            dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n        }\n        update(true);\n        if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n            this.$stopCssAnimation();\n            return;\n        }\n        if (this.smoothBlinking) {\n            this.$isSmoothBlinking = true;\n            setTimeout(function () {\n                if (this.$isSmoothBlinking) {\n                    dom.addCssClass(this.element, \"ace_smooth-blinking\");\n                }\n            }.bind(this));\n        }\n        if (dom.HAS_CSS_ANIMATION) {\n            this.$startCssAnimation();\n        }\n        else {\n            var blink = /**@this{Cursor}*/ function () {\n                this.timeoutId = setTimeout(function () {\n                    update(false);\n                }, 0.6 * this.blinkInterval);\n            }.bind(this);\n            this.intervalId = setInterval(function () {\n                update(true);\n                blink();\n            }, this.blinkInterval);\n            blink();\n        }\n    };\n    Cursor.prototype.getPixelPosition = function (position, onScreen) {\n        if (!this.config || !this.session)\n            return { left: 0, top: 0 };\n        if (!position)\n            position = this.session.selection.getCursor();\n        var pos = this.session.documentToScreenPosition(position);\n        var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n            ? this.session.$bidiHandler.getPosLeft(pos.column)\n            : pos.column * this.config.characterWidth);\n        var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n            this.config.lineHeight;\n        return { left: cursorLeft, top: cursorTop };\n    };\n    Cursor.prototype.isCursorInView = function (pixelPos, config) {\n        return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n    };\n    Cursor.prototype.update = function (config) {\n        this.config = config;\n        var selections = this.session.$selectionMarkers;\n        var i = 0, cursorIndex = 0;\n        if (selections === undefined || selections.length === 0) {\n            selections = [{ cursor: null }];\n        }\n        for (var i = 0, n = selections.length; i < n; i++) {\n            var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n            if ((pixelPos.top > config.height + config.offset ||\n                pixelPos.top < 0) && i > 1) {\n                continue;\n            }\n            var element = this.cursors[cursorIndex++] || this.addCursor();\n            var style = element.style;\n            if (!this.drawCursor) {\n                if (!this.isCursorInView(pixelPos, config)) {\n                    dom.setStyle(style, \"display\", \"none\");\n                }\n                else {\n                    dom.setStyle(style, \"display\", \"block\");\n                    dom.translate(element, pixelPos.left, pixelPos.top);\n                    dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n                    dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n                }\n            }\n            else {\n                this.drawCursor(element, pixelPos, config, selections[i], this.session);\n            }\n        }\n        while (this.cursors.length > cursorIndex)\n            this.removeCursor();\n        var overwrite = this.session.getOverwrite();\n        this.$setOverwrite(overwrite);\n        this.$pixelPos = pixelPos;\n        this.restartTimer();\n    };\n    Cursor.prototype.$setOverwrite = function (overwrite) {\n        if (overwrite != this.overwrite) {\n            this.overwrite = overwrite;\n            if (overwrite)\n                dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n            else\n                dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n        }\n    };\n    Cursor.prototype.destroy = function () {\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n    };\n    return Cursor;\n}());\nCursor.prototype.$padding = 0;\nCursor.prototype.drawCursor = null;\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar Scrollbar = /** @class */ (function () {\n    function Scrollbar(parent, classSuffix) {\n        this.element = dom.createElement(\"div\");\n        this.element.className = \"ace_scrollbar ace_scrollbar\" + classSuffix;\n        this.inner = dom.createElement(\"div\");\n        this.inner.className = \"ace_scrollbar-inner\";\n        this.inner.textContent = \"\\xa0\";\n        this.element.appendChild(this.inner);\n        parent.appendChild(this.element);\n        this.setVisible(false);\n        this.skipEvent = false;\n        event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n        event.addListener(this.element, \"mousedown\", event.preventDefault);\n    }\n    Scrollbar.prototype.setVisible = function (isVisible) {\n        this.element.style.display = isVisible ? \"\" : \"none\";\n        this.isVisible = isVisible;\n        this.coeff = 1;\n    };\n    return Scrollbar;\n}());\noop.implement(Scrollbar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n    __extends(VScrollBar, _super);\n    function VScrollBar(parent, renderer) {\n        var _this = _super.call(this, parent, '-v') || this;\n        _this.scrollTop = 0;\n        _this.scrollHeight = 0;\n        renderer.$scrollbarWidth =\n            _this.width = dom.scrollbarWidth(parent.ownerDocument);\n        _this.inner.style.width =\n            _this.element.style.width = (_this.width || 15) + 5 + \"px\";\n        _this.$minWidth = 0;\n        return _this;\n    }\n    VScrollBar.prototype.onScroll = function () {\n        if (!this.skipEvent) {\n            this.scrollTop = this.element.scrollTop;\n            if (this.coeff != 1) {\n                var h = this.element.clientHeight / this.scrollHeight;\n                this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n            }\n            this._emit(\"scroll\", { data: this.scrollTop });\n        }\n        this.skipEvent = false;\n    };\n    VScrollBar.prototype.getWidth = function () {\n        return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n    };\n    VScrollBar.prototype.setHeight = function (height) {\n        this.element.style.height = height + \"px\";\n    };\n    VScrollBar.prototype.setScrollHeight = function (height) {\n        this.scrollHeight = height;\n        if (height > MAX_SCROLL_H) {\n            this.coeff = MAX_SCROLL_H / height;\n            height = MAX_SCROLL_H;\n        }\n        else if (this.coeff != 1) {\n            this.coeff = 1;\n        }\n        this.inner.style.height = height + \"px\";\n    };\n    VScrollBar.prototype.setScrollTop = function (scrollTop) {\n        if (this.scrollTop != scrollTop) {\n            this.skipEvent = true;\n            this.scrollTop = scrollTop;\n            this.element.scrollTop = scrollTop * this.coeff;\n        }\n    };\n    return VScrollBar;\n}(Scrollbar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n    __extends(HScrollBar, _super);\n    function HScrollBar(parent, renderer) {\n        var _this = _super.call(this, parent, '-h') || this;\n        _this.scrollLeft = 0;\n        _this.height = renderer.$scrollbarWidth;\n        _this.inner.style.height =\n            _this.element.style.height = (_this.height || 15) + 5 + \"px\";\n        return _this;\n    }\n    HScrollBar.prototype.onScroll = function () {\n        if (!this.skipEvent) {\n            this.scrollLeft = this.element.scrollLeft;\n            this._emit(\"scroll\", { data: this.scrollLeft });\n        }\n        this.skipEvent = false;\n    };\n    HScrollBar.prototype.getHeight = function () {\n        return this.isVisible ? this.height : 0;\n    };\n    HScrollBar.prototype.setWidth = function (width) {\n        this.element.style.width = width + \"px\";\n    };\n    HScrollBar.prototype.setInnerWidth = function (width) {\n        this.inner.style.width = width + \"px\";\n    };\n    HScrollBar.prototype.setScrollWidth = function (width) {\n        this.inner.style.width = width + \"px\";\n    };\n    HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n        if (this.scrollLeft != scrollLeft) {\n            this.skipEvent = true;\n            this.scrollLeft = this.element.scrollLeft = scrollLeft;\n        }\n    };\n    return HScrollBar;\n}(Scrollbar));\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n  position: absolute;\\n  background: rgba(128, 128, 128, 0.6);\\n  -moz-box-sizing: border-box;\\n  box-sizing: border-box;\\n  border: 1px solid #bbb;\\n  border-radius: 2px;\\n  z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n  position: absolute;\\n  z-index: 6;\\n  background: none;\\n  overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n  z-index: 6;\\n  right: 0;\\n  top: 0;\\n  width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n  z-index: 8;\\n  right: 0;\\n  width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n  bottom: 0;\\n  left: 0;\\n  height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n  bottom: 0;\\n  height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n  z-index: 8;\\n  background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = /** @class */ (function () {\n    function ScrollBar(parent, classSuffix) {\n        this.element = dom.createElement(\"div\");\n        this.element.className = \"ace_sb\" + classSuffix;\n        this.inner = dom.createElement(\"div\");\n        this.inner.className = \"\";\n        this.element.appendChild(this.inner);\n        this.VScrollWidth = 12;\n        this.HScrollHeight = 12;\n        parent.appendChild(this.element);\n        this.setVisible(false);\n        this.skipEvent = false;\n        event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n    }\n    ScrollBar.prototype.setVisible = function (isVisible) {\n        this.element.style.display = isVisible ? \"\" : \"none\";\n        this.isVisible = isVisible;\n        this.coeff = 1;\n    };\n    return ScrollBar;\n}());\noop.implement(ScrollBar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n    __extends(VScrollBar, _super);\n    function VScrollBar(parent, renderer) {\n        var _this = _super.call(this, parent, '-v') || this;\n        _this.scrollTop = 0;\n        _this.scrollHeight = 0;\n        _this.parent = parent;\n        _this.width = _this.VScrollWidth;\n        _this.renderer = renderer;\n        _this.inner.style.width = _this.element.style.width = (_this.width || 15) + \"px\";\n        _this.$minWidth = 0;\n        return _this;\n    }\n    VScrollBar.prototype.onMouseDown = function (eType, e) {\n        if (eType !== \"mousedown\")\n            return;\n        if (event.getButton(e) !== 0 || e.detail === 2) {\n            return;\n        }\n        if (e.target === this.inner) {\n            var self = this;\n            var mousePageY = e.clientY;\n            var onMouseMove = function (e) {\n                mousePageY = e.clientY;\n            };\n            var onMouseUp = function () {\n                clearInterval(timerId);\n            };\n            var startY = e.clientY;\n            var startTop = this.thumbTop;\n            var onScrollInterval = function () {\n                if (mousePageY === undefined)\n                    return;\n                var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n                if (scrollTop === self.scrollTop)\n                    return;\n                self._emit(\"scroll\", { data: scrollTop });\n            };\n            event.capture(this.inner, onMouseMove, onMouseUp);\n            var timerId = setInterval(onScrollInterval, 20);\n            return event.preventDefault(e);\n        }\n        var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n        this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n        return event.preventDefault(e);\n    };\n    VScrollBar.prototype.getHeight = function () {\n        return this.height;\n    };\n    VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) {\n        var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n        scrollTop = scrollTop >> 0;\n        if (scrollTop < 0) {\n            scrollTop = 0;\n        }\n        else if (scrollTop > this.pageHeight - this.viewHeight) {\n            scrollTop = this.pageHeight - this.viewHeight;\n        }\n        return scrollTop;\n    };\n    VScrollBar.prototype.getWidth = function () {\n        return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n    };\n    VScrollBar.prototype.setHeight = function (height) {\n        this.height = Math.max(0, height);\n        this.slideHeight = this.height;\n        this.viewHeight = this.height;\n        this.setScrollHeight(this.pageHeight, true);\n    };\n    VScrollBar.prototype.setScrollHeight = function (height, force) {\n        if (this.pageHeight === height && !force)\n            return;\n        this.pageHeight = height;\n        this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n        if (this.thumbHeight > this.slideHeight)\n            this.thumbHeight = this.slideHeight;\n        if (this.thumbHeight < 15)\n            this.thumbHeight = 15;\n        this.inner.style.height = this.thumbHeight + \"px\";\n        if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n            this.scrollTop = (this.pageHeight - this.viewHeight);\n            if (this.scrollTop < 0)\n                this.scrollTop = 0;\n            this._emit(\"scroll\", { data: this.scrollTop });\n        }\n    };\n    VScrollBar.prototype.setScrollTop = function (scrollTop) {\n        this.scrollTop = scrollTop;\n        if (scrollTop < 0)\n            scrollTop = 0;\n        this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n        this.inner.style.top = this.thumbTop + \"px\";\n    };\n    return VScrollBar;\n}(ScrollBar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n    __extends(HScrollBar, _super);\n    function HScrollBar(parent, renderer) {\n        var _this = _super.call(this, parent, '-h') || this;\n        _this.scrollLeft = 0;\n        _this.scrollWidth = 0;\n        _this.height = _this.HScrollHeight;\n        _this.inner.style.height = _this.element.style.height = (_this.height || 12) + \"px\";\n        _this.renderer = renderer;\n        return _this;\n    }\n    HScrollBar.prototype.onMouseDown = function (eType, e) {\n        if (eType !== \"mousedown\")\n            return;\n        if (event.getButton(e) !== 0 || e.detail === 2) {\n            return;\n        }\n        if (e.target === this.inner) {\n            var self = this;\n            var mousePageX = e.clientX;\n            var onMouseMove = function (e) {\n                mousePageX = e.clientX;\n            };\n            var onMouseUp = function () {\n                clearInterval(timerId);\n            };\n            var startX = e.clientX;\n            var startLeft = this.thumbLeft;\n            var onScrollInterval = function () {\n                if (mousePageX === undefined)\n                    return;\n                var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n                if (scrollLeft === self.scrollLeft)\n                    return;\n                self._emit(\"scroll\", { data: scrollLeft });\n            };\n            event.capture(this.inner, onMouseMove, onMouseUp);\n            var timerId = setInterval(onScrollInterval, 20);\n            return event.preventDefault(e);\n        }\n        var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n        this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n        return event.preventDefault(e);\n    };\n    HScrollBar.prototype.getHeight = function () {\n        return this.isVisible ? this.height : 0;\n    };\n    HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) {\n        var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n        scrollLeft = scrollLeft >> 0;\n        if (scrollLeft < 0) {\n            scrollLeft = 0;\n        }\n        else if (scrollLeft > this.pageWidth - this.viewWidth) {\n            scrollLeft = this.pageWidth - this.viewWidth;\n        }\n        return scrollLeft;\n    };\n    HScrollBar.prototype.setWidth = function (width) {\n        this.width = Math.max(0, width);\n        this.element.style.width = this.width + \"px\";\n        this.slideWidth = this.width;\n        this.viewWidth = this.width;\n        this.setScrollWidth(this.pageWidth, true);\n    };\n    HScrollBar.prototype.setScrollWidth = function (width, force) {\n        if (this.pageWidth === width && !force)\n            return;\n        this.pageWidth = width;\n        this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n        if (this.thumbWidth > this.slideWidth)\n            this.thumbWidth = this.slideWidth;\n        if (this.thumbWidth < 15)\n            this.thumbWidth = 15;\n        this.inner.style.width = this.thumbWidth + \"px\";\n        if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n            this.scrollLeft = (this.pageWidth - this.viewWidth);\n            if (this.scrollLeft < 0)\n                this.scrollLeft = 0;\n            this._emit(\"scroll\", { data: this.scrollLeft });\n        }\n    };\n    HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n        this.scrollLeft = scrollLeft;\n        if (scrollLeft < 0)\n            scrollLeft = 0;\n        this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n        this.inner.style.left = (this.thumbLeft) + \"px\";\n    };\n    return HScrollBar;\n}(ScrollBar));\nHScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth;\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = /** @class */ (function () {\n    function RenderLoop(onRender, win) {\n        this.onRender = onRender;\n        this.pending = false;\n        this.changes = 0;\n        this.$recursionLimit = 2;\n        this.window = win || window;\n        var _self = this;\n        this._flush = function (ts) {\n            _self.pending = false;\n            var changes = _self.changes;\n            if (changes) {\n                event.blockIdle(100);\n                _self.changes = 0;\n                _self.onRender(changes);\n            }\n            if (_self.changes) {\n                if (_self.$recursionLimit-- < 0)\n                    return;\n                _self.schedule();\n            }\n            else {\n                _self.$recursionLimit = 2;\n            }\n        };\n    }\n    RenderLoop.prototype.schedule = function (change) {\n        this.changes = this.changes | change;\n        if (this.changes && !this.pending) {\n            event.nextFrame(this._flush);\n            this.pending = true;\n        }\n    };\n    RenderLoop.prototype.clear = function (change) {\n        var changes = this.changes;\n        this.changes = 0;\n        return changes;\n    };\n    return RenderLoop;\n}());\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 512;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = /** @class */ (function () {\n    function FontMetrics(parentEl) {\n        this.el = dom.createElement(\"div\");\n        this.$setMeasureNodeStyles(this.el.style, true);\n        this.$main = dom.createElement(\"div\");\n        this.$setMeasureNodeStyles(this.$main.style);\n        this.$measureNode = dom.createElement(\"div\");\n        this.$setMeasureNodeStyles(this.$measureNode.style);\n        this.el.appendChild(this.$main);\n        this.el.appendChild(this.$measureNode);\n        parentEl.appendChild(this.el);\n        this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n        this.$characterSize = { width: 0, height: 0 };\n        if (USE_OBSERVER)\n            this.$addObserver();\n        else\n            this.checkForSizeChanges();\n    }\n    FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) {\n        style.width = style.height = \"auto\";\n        style.left = style.top = \"0px\";\n        style.visibility = \"hidden\";\n        style.position = \"absolute\";\n        style.whiteSpace = \"pre\";\n        if (useragent.isIE < 8) {\n            style[\"font-family\"] = \"inherit\";\n        }\n        else {\n            style.font = \"inherit\";\n        }\n        style.overflow = isRoot ? \"hidden\" : \"visible\";\n    };\n    FontMetrics.prototype.checkForSizeChanges = function (size) {\n        if (size === undefined)\n            size = this.$measureSizes();\n        if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n            this.$measureNode.style.fontWeight = \"bold\";\n            var boldSize = this.$measureSizes();\n            this.$measureNode.style.fontWeight = \"\";\n            this.$characterSize = size;\n            this.charSizes = Object.create(null);\n            this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n            this._emit(\"changeCharacterSize\", { data: size });\n        }\n    };\n    FontMetrics.prototype.$addObserver = function () {\n        var self = this;\n        this.$observer = new window.ResizeObserver(function (e) {\n            self.checkForSizeChanges();\n        });\n        this.$observer.observe(this.$measureNode);\n    };\n    FontMetrics.prototype.$pollSizeChanges = function () {\n        if (this.$pollSizeChangesTimer || this.$observer)\n            return this.$pollSizeChangesTimer;\n        var self = this;\n        return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n            self.checkForSizeChanges();\n            event.onIdle(cb, 500);\n        }, 500);\n    };\n    FontMetrics.prototype.setPolling = function (val) {\n        if (val) {\n            this.$pollSizeChanges();\n        }\n        else if (this.$pollSizeChangesTimer) {\n            clearInterval(this.$pollSizeChangesTimer);\n            this.$pollSizeChangesTimer = 0;\n        }\n    };\n    FontMetrics.prototype.$measureSizes = function (node) {\n        var size = {\n            height: (node || this.$measureNode).clientHeight,\n            width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n        };\n        if (size.width === 0 || size.height === 0)\n            return null;\n        return size;\n    };\n    FontMetrics.prototype.$measureCharWidth = function (ch) {\n        this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n        var rect = this.$main.getBoundingClientRect();\n        return rect.width / CHAR_COUNT;\n    };\n    FontMetrics.prototype.getCharacterWidth = function (ch) {\n        var w = this.charSizes[ch];\n        if (w === undefined) {\n            w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n        }\n        return w;\n    };\n    FontMetrics.prototype.destroy = function () {\n        clearInterval(this.$pollSizeChangesTimer);\n        if (this.$observer)\n            this.$observer.disconnect();\n        if (this.el && this.el.parentNode)\n            this.el.parentNode.removeChild(this.el);\n    };\n    FontMetrics.prototype.$getZoom = function (element) {\n        if (!element || !element.parentElement)\n            return 1;\n        return (Number(window.getComputedStyle(element)[\"zoom\"]) || 1) * this.$getZoom(element.parentElement);\n    };\n    FontMetrics.prototype.$initTransformMeasureNodes = function () {\n        var t = function (t, l) {\n            return [\"div\", {\n                    style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n                }];\n        };\n        this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n    };\n    FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) {\n        if (clientPos) {\n            var zoom = this.$getZoom(this.el);\n            clientPos = mul(1 / zoom, clientPos);\n        }\n        function solve(l1, l2, r) {\n            var det = l1[1] * l2[0] - l1[0] * l2[1];\n            return [\n                (-l2[1] * r[0] + l2[0] * r[1]) / det,\n                (+l1[1] * r[0] - l1[0] * r[1]) / det\n            ];\n        }\n        function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n        function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n        function mul(a, b) { return [a * b[0], a * b[1]]; }\n        if (!this.els)\n            this.$initTransformMeasureNodes();\n        function p(el) {\n            var r = el.getBoundingClientRect();\n            return [r.left, r.top];\n        }\n        var a = p(this.els[0]);\n        var b = p(this.els[1]);\n        var c = p(this.els[2]);\n        var d = p(this.els[3]);\n        var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n        var m1 = mul(1 + h[0], sub(b, a));\n        var m2 = mul(1 + h[1], sub(c, a));\n        if (elPos) {\n            var x = elPos;\n            var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n            var ut = add(mul(x[0], m1), mul(x[1], m2));\n            return add(mul(1 / k / L, ut), a);\n        }\n        var u = sub(clientPos, a);\n        var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n        return mul(L, f);\n    };\n    return FontMetrics;\n}());\nFontMetrics.prototype.$characterSize = { width: 0, height: 0 };\noop.implement(FontMetrics.prototype, EventEmitter);\nexports.FontMetrics = FontMetrics;\n\n});\n\nace.define(\"ace/css/editor-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n    styles.push(\".ace_br\" + i + \"{\" + (\n        [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n    ).map(function(x, j) {\n        return i & (1<<j) ? \"border-\" + x + \"-radius: 3px;\" : \"\"\n    }).filter(Boolean).join(\" \") + \"}\")\n}\nstyles.join(\"\\\\n\")\n*/\nmodule.exports = \"\\n.ace_br1 {border-top-left-radius    : 3px;}\\n.ace_br2 {border-top-right-radius   : 3px;}\\n.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}\\n.ace_br4 {border-bottom-right-radius: 3px;}\\n.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}\\n.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}\\n.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}\\n.ace_br8 {border-bottom-left-radius : 3px;}\\n.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}\\n.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}\\n.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\n.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\n.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\n.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n\\n\\n.ace_editor {\\n    position: relative;\\n    overflow: hidden;\\n    padding: 0;\\n    font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'Source Code Pro', 'source-code-pro', monospace;\\n    direction: ltr;\\n    text-align: left;\\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n    forced-color-adjust: none;\\n}\\n\\n.ace_scroller {\\n    position: absolute;\\n    overflow: hidden;\\n    top: 0;\\n    bottom: 0;\\n    background-color: inherit;\\n    -ms-user-select: none;\\n    -moz-user-select: none;\\n    -webkit-user-select: none;\\n    user-select: none;\\n    cursor: text;\\n}\\n\\n.ace_content {\\n    position: absolute;\\n    box-sizing: border-box;\\n    min-width: 100%;\\n    contain: style size layout;\\n    font-variant-ligatures: no-common-ligatures;\\n}\\n.ace_invisible {\\n    font-variant-ligatures: none;\\n}\\n\\n.ace_keyboard-focus:focus {\\n    box-shadow: inset 0 0 0 2px #5E9ED6;\\n    outline: none;\\n}\\n\\n.ace_dragging .ace_scroller:before{\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n    bottom: 0;\\n    content: '';\\n    background: rgba(250, 250, 250, 0.01);\\n    z-index: 1000;\\n}\\n.ace_dragging.ace_dark .ace_scroller:before{\\n    background: rgba(0, 0, 0, 0.01);\\n}\\n\\n.ace_gutter {\\n    position: absolute;\\n    overflow : hidden;\\n    width: auto;\\n    top: 0;\\n    bottom: 0;\\n    left: 0;\\n    cursor: default;\\n    z-index: 4;\\n    -ms-user-select: none;\\n    -moz-user-select: none;\\n    -webkit-user-select: none;\\n    user-select: none;\\n    contain: style size layout;\\n}\\n\\n.ace_gutter-active-line {\\n    position: absolute;\\n    left: 0;\\n    right: 0;\\n}\\n\\n.ace_scroller.ace_scroll-left:after {\\n    content: \\\"\\\";\\n    position: absolute;\\n    top: 0;\\n    right: 0;\\n    bottom: 0;\\n    left: 0;\\n    box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\n    pointer-events: none;\\n}\\n\\n.ace_gutter-cell, .ace_gutter-cell_svg-icons {\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n    padding-left: 19px;\\n    padding-right: 6px;\\n    background-repeat: no-repeat;\\n}\\n\\n.ace_gutter-cell_svg-icons .ace_gutter_annotation {\\n    margin-left: -14px;\\n    float: left;\\n}\\n\\n.ace_gutter-cell .ace_gutter_annotation {\\n    margin-left: -19px;\\n    float: left;\\n}\\n\\n.ace_gutter-cell.ace_error, .ace_icon.ace_error, .ace_icon.ace_error_fold, .ace_gutter-cell.ace_security, .ace_icon.ace_security, .ace_icon.ace_security_fold {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\n    background-repeat: no-repeat;\\n    background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_warning, .ace_icon.ace_warning, .ace_icon.ace_warning_fold {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\n    background-repeat: no-repeat;\\n    background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_info, .ace_icon.ace_info, .ace_gutter-cell.ace_hint, .ace_icon.ace_hint {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\n    background-repeat: no-repeat;\\n    background-position: 2px center;\\n}\\n\\n.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info, .ace_dark .ace_gutter-cell.ace_hint, .ace_dark .ace_icon.ace_hint {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_icon_svg.ace_error {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+\\\");\\n    background-color: crimson;\\n}\\n.ace_icon_svg.ace_security {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iZGFya29yYW5nZSIgZmlsbD0ibm9uZSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdHJva2UtbGluZWpvaW4tcm91bmQiIGQ9Ik04IDE0LjgzMDdDOCAxNC44MzA3IDIgMTIuOTA0NyAyIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOEM3Ljk4OTk5IDEuMzQ5MTggMTAuNjkgMy4yNjU0OCAxNCAzLjI2NTQ4VjguMDg5OTJDMTQgMTIuOTA0NyA4IDE0LjgzMDcgOCAxNC44MzA3WiIvPgogICAgICAgIDxwYXRoIGQ9Ik0yIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOCIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMy45OSA4LjA4OTkyVjMuMjY1NDhDMTAuNjggMy4yNjU0OCA4IDEuMzQ5MTggOCAxLjM0OTE4Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggNFY5Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggMTBWMTIiLz4KICAgIDwvZz4KPC9zdmc+\\\");\\n    background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n    background-color: darkorange;\\n}\\n.ace_icon_svg.ace_info {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJibHVlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjgiIGN5PSI4IiByPSI3IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjxwb2x5bGluZSBwb2ludHM9IjggMTEgOCA4Ii8+Cjxwb2x5bGluZSBwb2ludHM9IjkgOCA2IDgiLz4KPGxpbmUgeDE9IjEwIiB5MT0iMTEiIHgyPSI2IiB5Mj0iMTEiLz4KPHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjAuMDEiIGhlaWdodD0iMC4wMSIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n    background-color: royalblue;\\n}\\n.ace_icon_svg.ace_hint {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0ic2lsdmVyIiBmaWxsPSJub25lIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTYgMTRIMTAiLz4KICAgICAgICA8cGF0aCBkPSJNOCAxMUg5QzkgOS40NzAwMiAxMiA4LjU0MDAyIDEyIDUuNzYwMDJDMTIuMDIgNC40MDAwMiAxMS4zOSAzLjM2MDAyIDEwLjQzIDIuNjcwMDJDOSAxLjY0MDAyIDcuMDAwMDEgMS42NDAwMiA1LjU3MDAxIDIuNjcwMDJDNC42MTAwMSAzLjM2MDAyIDMuOTggNC40MDAwMiA0IDUuNzYwMDJDNCA4LjU0MDAyIDcuMDAwMDEgOS40NzAwMiA3LjAwMDAxIDExSDhaIi8+CiAgICA8L2c+Cjwvc3ZnPg==\\\");\\n    background-color: silver;\\n}\\n\\n.ace_icon_svg.ace_error_fold {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSI+CiAgPHBhdGggZD0ibSAxOC45Mjk4NTEsNy44Mjk4MDc2IGMgMC4xNDYzNTMsNi4zMzc0NjA0IC02LjMyMzE0Nyw3Ljc3Nzg0NDQgLTcuNDc3OTEyLDcuNzc3ODQ0NCAtMi4xMDcyNzI2LC0wLjEyODc1IDUuMTE3Njc4LDAuMzU2MjQ5IDUuMDUxNjk4LC03Ljg3MDA2MTggLTAuNjA0NjcyLC04LjAwMzk3MzQ5IC03LjA3NzI3MDYsLTcuNTYzMTE4OSAtNC44NTczLC03LjQzMDM5NTU2IDEuNjA2LC0wLjExNTE0MjI1IDYuODk3NDg1LDEuMjYyNTQ1OTYgNy4yODM1MTQsNy41MjI2MTI5NiB6IiBmaWxsPSJjcmltc29uIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0ibSA4LjExNDc1NjIsMi4wNTI5ODI4IGMgMy4zNDkxNjk4LDAgNi4wNjQxMzI4LDIuNjc2ODYyNyA2LjA2NDEzMjgsNS45Nzg5NTMgMCwzLjMwMjExMjIgLTIuNzE0OTYzLDUuOTc4OTIwMiAtNi4wNjQxMzI4LDUuOTc4OTIwMiAtMy4zNDkxNDczLDAgLTYuMDY0MTc3MiwtMi42NzY4MDggLTYuMDY0MTc3MiwtNS45Nzg5MjAyIDAuMDA1MzksLTMuMjk5ODg2MSAyLjcxNzI2NTYsLTUuOTczNjQwOCA2LjA2NDE3NzIsLTUuOTc4OTUzIHogbSAwLC0xLjczNTgyNzE5IGMgLTQuMzIxNDgzNiwwIC03LjgyNDc0MDM4LDMuNDU0MDE4NDkgLTcuODI0NzQwMzgsNy43MTQ3ODAxOSAwLDQuMjYwNzI4MiAzLjUwMzI1Njc4LDcuNzE0NzQ1MiA3LjgyNDc0MDM4LDcuNzE0NzQ1MiA0LjMyMTQ0OTgsMCA3LjgyNDY5OTgsLTMuNDU0MDE3IDcuODI0Njk5OCwtNy43MTQ3NDUyIDAsLTIuMDQ2MDkxNCAtMC44MjQzOTIsLTQuMDA4MzY3MiAtMi4yOTE3NTYsLTUuNDU1MTc0NiBDIDEyLjE4MDIyNSwxLjEyOTk2NDggMTAuMTkwMDEzLDAuMzE3MTU1NjEgOC4xMTQ3NTYyLDAuMzE3MTU1NjEgWiBNIDYuOTM3NDU2Myw4LjI0MDU5ODUgNC42NzE4Njg1LDEwLjQ4NTg1MiA2LjAwODY4MTQsMTEuODc2NzI4IDguMzE3MDAzNSw5LjYwMDc5MTEgMTAuNjI1MzM3LDExLjg3NjcyOCAxMS45NjIxMzgsMTAuNDg1ODUyIDkuNjk2NTUwOCw4LjI0MDU5ODUgMTEuOTYyMTM4LDYuMDA2ODA2NiAxMC41NzMyNDYsNC42Mzc0MzM1IDguMzE3MDAzNSw2Ljg3MzQyOTcgNi4wNjA3NjA3LDQuNjM3NDMzNSA0LjY3MTg2ODUsNi4wMDY4MDY2IFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\\\");\\n    background-color: crimson;\\n}\\n.ace_icon_svg.ace_security_fold {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTcgMTQiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTEwLjAwMDEgMTMuNjk5MkMxMC4wMDAxIDEzLjY5OTIgMTEuOTI0MSAxMy40NzYzIDEzIDEyLjY5OTJDMTQuNDEzOSAxMS42NzgxIDE2IDEwLjUgMTYuMTI1MSA2LjgxMTI2VjIuNTg5ODdDMTYuMTI1MSAyLjU0NzY4IDE2LjEyMjEgMi41MDYxOSAxNi4xMTY0IDIuNDY1NTlWMS43MTQ4NUgxNS4yNDE0TDE1LjIzMDcgMS43MTQ4NEwxNC42MjUxIDEuNjk5MjJWNi44MTEyM0MxNC42MjUxIDguNTEwNjEgMTQuNjI1MSA5LjQ2NDYxIDEyLjc4MjQgMTEuNzIxQzEyLjE1ODYgMTIuNDg0OCAxMC4wMDAxIDEzLjY5OTIgMTAuMDAwMSAxMy42OTkyWiIgZmlsbD0iY3JpbXNvbiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuMzM2MDkgMC4zNjc0NzVDNy4wMzIxNCAwLjE1MjY1MiA2LjYyNTQ4IDAuMTUzNjE0IDYuMzIyNTMgMC4zNjk5OTdMNi4zMDg2OSAwLjM3OTU1NEM2LjI5NTUzIDAuMzg4NTg4IDYuMjczODggMC40MDMyNjYgNi4yNDQxNyAwLjQyMjc4OUM2LjE4NDcxIDAuNDYxODYgNi4wOTMyMSAwLjUyMDE3MSA1Ljk3MzEzIDAuNTkxMzczQzUuNzMyNTEgMC43MzQwNTkgNS4zNzk5IDAuOTI2ODY0IDQuOTQyNzkgMS4xMjAwOUM0LjA2MTQ0IDEuNTA5NyAyLjg3NTQxIDEuODgzNzcgMS41ODk4NCAxLjg4Mzc3SDAuNzE0ODQ0VjIuNzU4NzdWNi45ODAxNUMwLjcxNDg0NCA5LjQ5Mzc0IDIuMjg4NjYgMTEuMTk3MyAzLjcwMjU0IDEyLjIxODVDNC40MTg0NSAxMi43MzU1IDUuMTI4NzQgMTMuMTA1MyA1LjY1NzMzIDEzLjM0NTdDNS45MjI4NCAxMy40NjY0IDYuMTQ1NjYgMTMuNTU1OSA2LjMwNDY1IDEzLjYxNjFDNi4zODQyMyAxMy42NDYyIDYuNDQ4MDUgMTMuNjY5IDYuNDkzNDkgMTMuNjg0OEM2LjUxNjIyIDEzLjY5MjcgNi41MzQzOCAxMy42OTg5IDYuNTQ3NjQgMTMuNzAzM0w2LjU2MzgyIDEzLjcwODdMNi41NjkwOCAxMy43MTA0TDYuNTcwOTkgMTMuNzExTDYuODM5ODQgMTMuNzUzM0w2LjU3MjQyIDEzLjcxMTVDNi43NDYzMyAxMy43NjczIDYuOTMzMzUgMTMuNzY3MyA3LjEwNzI3IDEzLjcxMTVMNy4xMDg3IDEzLjcxMUw3LjExMDYxIDEzLjcxMDRMNy4xMTU4NyAxMy43MDg3TDcuMTMyMDUgMTMuNzAzM0M3LjE0NTMxIDEzLjY5ODkgNy4xNjM0NiAxMy42OTI3IDcuMTg2MTkgMTMuNjg0OEM3LjIzMTY0IDEzLjY2OSA3LjI5NTQ2IDEzLjY0NjIgNy4zNzUwMyAxMy42MTYxQzcuNTM0MDMgMTMuNTU1OSA3Ljc1Njg1IDEzLjQ2NjQgOC4wMjIzNiAxMy4zNDU3QzguNTUwOTUgMTMuMTA1MyA5LjI2MTIzIDEyLjczNTUgOS45NzcxNSAxMi4yMTg1QzExLjM5MSAxMS4xOTczIDEyLjk2NDggOS40OTM3NyAxMi45NjQ4IDYuOTgwMThWMi43NTg4QzEyLjk2NDggMi43MTY2IDEyLjk2MTkgMi42NzUxMSAxMi45NTYxIDIuNjM0NTFWMS44ODM3N0gxMi4wODExQzEyLjA3NzUgMS44ODM3NyAxMi4wNzQgMS44ODM3NyAxMi4wNzA0IDEuODgzNzdDMTAuNzk3OSAxLjg4MDA0IDkuNjE5NjIgMS41MTEwMiA4LjczODk0IDEuMTI0ODZDOC43MzUzNCAxLjEyMzI3IDguNzMxNzQgMS4xMjE2OCA4LjcyODE0IDEuMTIwMDlDOC4yOTEwMyAwLjkyNjg2NCA3LjkzODQyIDAuNzM0MDU5IDcuNjk3NzkgMC41OTEzNzNDNy41Nzc3MiAwLjUyMDE3MSA3LjQ4NjIyIDAuNDYxODYgNy40MjY3NiAwLjQyMjc4OUM3LjM5NzA1IDAuNDAzMjY2IDcuMzc1MzkgMC4zODg1ODggNy4zNjIyNCAwLjM3OTU1NEw3LjM0ODk2IDAuMzcwMzVDNy4zNDg5NiAwLjM3MDM1IDcuMzQ4NDcgMC4zNzAwMiA3LjM0NTYzIDAuMzc0MDU0TDcuMzM3NzkgMC4zNjg2NTlMNy4zMzYwOSAwLjM2NzQ3NVpNOC4wMzQ3MSAyLjcyNjkxQzguODYwNCAzLjA5MDYzIDkuOTYwNjYgMy40NjMwOSAxMS4yMDYxIDMuNTg5MDdWNi45ODAxNUgxMS4yMTQ4QzExLjIxNDggOC42Nzk1MyAxMC4xNjM3IDkuOTI1MDcgOC45NTI1NCAxMC43OTk4QzguMzU1OTUgMTEuMjMwNiA3Ljc1Mzc0IDExLjU0NTQgNy4yOTc5NiAxMS43NTI3QzcuMTE2NzEgMTEuODM1MSA2Ljk2MDYyIDExLjg5OTYgNi44Mzk4NCAxMS45NDY5QzYuNzE5MDYgMTEuODk5NiA2LjU2Mjk3IDExLjgzNTEgNi4zODE3MyAxMS43NTI3QzUuOTI1OTUgMTEuNTQ1NCA1LjMyMzczIDExLjIzMDYgNC43MjcxNSAxMC43OTk4QzMuNTE2MDMgOS45MjUwNyAyLjQ2NDg0IDguNjc5NTUgMi40NjQ4NCA2Ljk4MDE4VjMuNTg5MDlDMy43MTczOCAzLjQ2MjM5IDQuODIzMDggMy4wODYzOSA1LjY1MDMzIDIuNzIwNzFDNi4xNDIyOCAyLjUwMzI0IDYuNTQ0ODUgMi4yODUzNyA2LjgzMjU0IDIuMTE2MjRDNy4xMjE4MSAyLjI4NTM1IDcuNTI3IDIuNTAzNTIgOC4wMjE5NiAyLjcyMTMxQzguMDI2MiAyLjcyMzE3IDguMDMwNDUgMi43MjUwNCA4LjAzNDcxIDIuNzI2OTFaTTUuOTY0ODQgMy40MDE0N1Y3Ljc3NjQ3SDcuNzE0ODRWMy40MDE0N0g1Ljk2NDg0Wk01Ljk2NDg0IDEwLjQwMTVWOC42NTE0N0g3LjcxNDg0VjEwLjQwMTVINS45NjQ4NFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\\\");\\n    background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning_fold {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC43NzY5IDE0LjczMzdMOC42NTE5MiAyLjQ4MzY5QzguMzI5NDYgMS44Mzg3NyA3LjQwOTEzIDEuODM4NzcgNy4wODY2NyAyLjQ4MzY5TDAuOTYxNjY5IDE0LjczMzdDMC42NzA3NzUgMTUuMzE1NSAxLjA5MzgzIDE2IDEuNzQ0MjkgMTZIMTMuOTk0M0MxNC42NDQ4IDE2IDE1LjA2NzggMTUuMzE1NSAxNC43NzY5IDE0LjczMzdaTTMuMTYwMDcgMTQuMjVMNy44NjkyOSA0LjgzMTU2TDEyLjU3ODUgMTQuMjVIMy4xNjAwN1pNOC43NDQyOSAxMS42MjVWMTMuMzc1SDYuOTk0MjlWMTEuNjI1SDguNzQ0MjlaTTYuOTk0MjkgMTAuNzVWNy4yNUg4Ljc0NDI5VjEwLjc1SDYuOTk0MjlaIiBmaWxsPSIjRUM3MjExIi8+CjxwYXRoIGQ9Ik0xMS4xOTkxIDIuOTUyMzhDMTAuODgwOSAyLjMxNDY3IDEwLjM1MzcgMS44MDUyNiA5LjcwNTUgMS41MDlMMTEuMDQxIDEuMDY5NzhDMTEuNjg4MyAwLjk0OTgxNCAxMi4zMzcgMS4yNzI2MyAxMi42MzE3IDEuODYxNDFMMTcuNjEzNiAxMS44MTYxQzE4LjM1MjcgMTMuMjkyOSAxNy41OTM4IDE1LjA4MDQgMTYuMDE4IDE1LjU3NDVDMTYuNDA0NCAxNC40NTA3IDE2LjMyMzEgMTMuMjE4OCAxNS43OTI0IDEyLjE1NTVMMTEuMTk5MSAyLjk1MjM4WiIgZmlsbD0iI0VDNzIxMSIvPgo8L3N2Zz4=\\\");\\n    background-color: darkorange;\\n}\\n\\n.ace_scrollbar {\\n    contain: strict;\\n    position: absolute;\\n    right: 0;\\n    bottom: 0;\\n    z-index: 6;\\n}\\n\\n.ace_scrollbar-inner {\\n    position: absolute;\\n    cursor: text;\\n    left: 0;\\n    top: 0;\\n}\\n\\n.ace_scrollbar-v{\\n    overflow-x: hidden;\\n    overflow-y: scroll;\\n    top: 0;\\n}\\n\\n.ace_scrollbar-h {\\n    overflow-x: scroll;\\n    overflow-y: hidden;\\n    left: 0;\\n}\\n\\n.ace_print-margin {\\n    position: absolute;\\n    height: 100%;\\n}\\n\\n.ace_text-input {\\n    position: absolute;\\n    z-index: 0;\\n    width: 0.5em;\\n    height: 1em;\\n    opacity: 0;\\n    background: transparent;\\n    -moz-appearance: none;\\n    appearance: none;\\n    border: none;\\n    resize: none;\\n    outline: none;\\n    overflow: hidden;\\n    font: inherit;\\n    padding: 0 1px;\\n    margin: 0 -1px;\\n    contain: strict;\\n    -ms-user-select: text;\\n    -moz-user-select: text;\\n    -webkit-user-select: text;\\n    user-select: text;\\n    /*with `pre-line` chrome inserts &nbsp; instead of space*/\\n    white-space: pre!important;\\n}\\n.ace_text-input.ace_composition {\\n    background: transparent;\\n    color: inherit;\\n    z-index: 1000;\\n    opacity: 1;\\n}\\n.ace_composition_placeholder { color: transparent }\\n.ace_composition_marker { \\n    border-bottom: 1px solid;\\n    position: absolute;\\n    border-radius: 0;\\n    margin-top: 1px;\\n}\\n\\n[ace_nocontext=true] {\\n    transform: none!important;\\n    filter: none!important;\\n    clip-path: none!important;\\n    mask : none!important;\\n    contain: none!important;\\n    perspective: none!important;\\n    mix-blend-mode: initial!important;\\n    z-index: auto;\\n}\\n\\n.ace_layer {\\n    z-index: 1;\\n    position: absolute;\\n    overflow: hidden;\\n    /* workaround for chrome bug https://github.com/ajaxorg/ace/issues/2312*/\\n    word-wrap: normal;\\n    white-space: pre;\\n    height: 100%;\\n    width: 100%;\\n    box-sizing: border-box;\\n    /* setting pointer-events: auto; on node under the mouse, which changes\\n        during scroll, will break mouse wheel scrolling in Safari */\\n    pointer-events: none;\\n}\\n\\n.ace_gutter-layer {\\n    position: relative;\\n    width: auto;\\n    text-align: right;\\n    pointer-events: auto;\\n    height: 1000000px;\\n    contain: style size layout;\\n}\\n\\n.ace_text-layer {\\n    font: inherit !important;\\n    position: absolute;\\n    height: 1000000px;\\n    width: 1000000px;\\n    contain: style size layout;\\n}\\n\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\n    contain: style size layout;\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n    contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n    contain: strict;\\n}\\n\\n.ace_cjk {\\n    display: inline-block;\\n    text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n    z-index: 4;\\n}\\n\\n.ace_cursor {\\n    z-index: 4;\\n    position: absolute;\\n    box-sizing: border-box;\\n    border-left: 2px solid;\\n    /* workaround for smooth cursor repaintng whole screen in chrome */\\n    transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n    border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n    border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n    border-left-width: 0;\\n    border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n    opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n    opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n    transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n    animation-duration: 1000ms;\\n    animation-timing-function: step-end;\\n    animation-name: blink-ace-animate;\\n    animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n    animation-duration: 1000ms;\\n    animation-timing-function: ease-in-out;\\n    animation-name: blink-ace-animate-smooth;\\n}\\n    \\n@keyframes blink-ace-animate {\\n    from, to { opacity: 1; }\\n    60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n    from, to { opacity: 1; }\\n    45% { opacity: 1; }\\n    60% { opacity: 0; }\\n    85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n    position: absolute;\\n    z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n    position: absolute;\\n    z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n    position: absolute;\\n    z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n    position: absolute;\\n    border-bottom: 1px solid #DE5555;\\n    border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n    position: absolute;\\n    z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n    position: absolute;\\n    z-index: 4;\\n    box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n    box-sizing: border-box;\\n\\n    display: inline-block;\\n    height: 11px;\\n    margin-top: -2px;\\n    vertical-align: middle;\\n\\n    background-image:\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n    background-repeat: no-repeat, repeat-x;\\n    background-position: center center, top left;\\n    color: transparent;\\n\\n    border: 1px solid black;\\n    border-radius: 2px;\\n\\n    cursor: pointer;\\n    pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n    background-image:\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n    background-color: #f5f5f5;\\n    border: 1px solid gray;\\n    border-radius: 1px;\\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n    color: black;\\n    padding: 3px 4px;\\n    position: fixed;\\n    z-index: 999999;\\n    box-sizing: border-box;\\n    cursor: default;\\n    white-space: pre-wrap;\\n    word-wrap: break-word;\\n    line-height: normal;\\n    font-style: normal;\\n    font-weight: normal;\\n    letter-spacing: normal;\\n    pointer-events: none;\\n    overflow: auto;\\n    max-width: min(33em, 66vw);\\n    overscroll-behavior: contain;\\n}\\n.ace_tooltip pre {\\n    white-space: pre-wrap;\\n}\\n\\n.ace_tooltip.ace_dark {\\n    background-color: #636363;\\n    color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n    outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n    display: inline-block;\\n    width: 18px;\\n    vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n    display: inline-block;\\n    width: 12px;\\n    vertical-align: top;\\n    -webkit-mask-repeat: no-repeat;\\n    -webkit-mask-size: 12px;\\n    -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n    padding-right: 13px;\\n}\\n\\n.ace_fold-widget, .ace_custom-widget {\\n    box-sizing: border-box;\\n\\n    margin: 0 -12px 0 1px;\\n    display: none;\\n    width: 11px;\\n    vertical-align: top;\\n\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n    background-repeat: no-repeat;\\n    background-position: center;\\n\\n    border-radius: 3px;\\n    \\n    border: 1px solid transparent;\\n    cursor: pointer;\\n    pointer-events: auto;\\n}\\n\\n.ace_custom-widget {\\n    background: none;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n    display: inline-block;   \\n}\\n\\n.ace_fold-widget.ace_end {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n    border: 1px solid rgba(0, 0, 0, 0.3);\\n    background-color: rgba(255, 255, 255, 0.2);\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n    border: 1px solid rgba(0, 0, 0, 0.4);\\n    background-color: rgba(0, 0, 0, 0.05);\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n    background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n    border: 1px solid lightgray;\\n    display: inline-block;\\n    margin: -1px 8px;\\n    padding: 0 5px;\\n    pointer-events: auto;\\n    cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n    border-color: gray;\\n    background: rgba(200,200,200,0.2);\\n    display: inline-block;\\n    pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n    background-color: #FFB4B4;\\n    border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n    transition: opacity 0.4s ease 0.05s;\\n    opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n    transition: opacity 0.05s ease 0.05s;\\n    opacity:1;\\n}\\n\\n.ace_underline {\\n    text-decoration: underline;\\n}\\n\\n.ace_bold {\\n    font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n    font-weight: normal;\\n}\\n\\n.ace_italic {\\n    font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n    background-color: rgba(255, 0, 0,0.2);\\n    position: absolute;\\n    z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n    background-color: rgba(255, 255, 0,0.2);\\n    position: absolute;\\n    z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n    position: absolute;\\n    line-height: 1.5;\\n    border-radius: 4px;\\n    -ms-user-select: none;\\n    -moz-user-select: none;\\n    -webkit-user-select: none;\\n    user-select: none;\\n    background: white;\\n    box-shadow: 1px 3px 2px grey;\\n    border: 1px solid #dcdcdc;\\n    color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n    background: #333;\\n    color: #ccc;\\n    box-shadow: 1px 3px 2px grey;\\n    border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n    padding: 2px;\\n    cursor: pointer;\\n    overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n    background-color: #eee;\\n    opacity:1;\\n}\\n.ace_mobile-button:active {\\n    background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n    position: relative;\\n    font-family: arial;\\n    transform: scale(0.9);\\n    transform-origin: left;\\n    white-space: pre;\\n    opacity: 0.7;\\n    margin: 0 10px;\\n    z-index: 1;\\n}\\n\\n.ace_ghost_text {\\n    opacity: 0.5;\\n    font-style: italic;\\n}\\n\\n.ace_ghost_text_container > div {\\n    white-space: pre;\\n}\\n\\n.ghost_text_line_wrapped::after {\\n    content: \\\"\\u21A9\\\";\\n    position: absolute;\\n}\\n\\n.ace_lineWidgetContainer.ace_ghost_text {\\n    margin: 0px 4px\\n}\\n\\n.ace_screenreader-only {\\n    position:absolute;\\n    left:-10000px;\\n    top:auto;\\n    width:1px;\\n    height:1px;\\n    overflow:hidden;\\n}\\n\\n.ace_hidden_token {\\n    display: none;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = /** @class */ (function () {\n    function Decorator(scrollbarV, renderer) {\n        this.renderer = renderer;\n        this.pixelRatio = 1;\n        this.maxHeight = renderer.layerConfig.maxHeight;\n        this.lineHeight = renderer.layerConfig.lineHeight;\n        this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n        this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n        this.colors = {};\n        this.colors.dark = {\n            \"error\": \"rgba(255, 18, 18, 1)\",\n            \"warning\": \"rgba(18, 136, 18, 1)\",\n            \"info\": \"rgba(18, 18, 136, 1)\",\n        };\n        this.colors.light = {\n            \"error\": \"rgb(255,51,51)\",\n            \"warning\": \"rgb(32,133,72)\",\n            \"info\": \"rgb(35,68,138)\",\n        };\n        this.setScrollBarV(scrollbarV);\n    }\n    Decorator.prototype.$createCanvas = function () {\n        this.canvas = dom.createElement(\"canvas\");\n        this.canvas.style.top = 0 + \"px\";\n        this.canvas.style.right = 0 + \"px\";\n        this.canvas.style.zIndex = \"7\";\n        this.canvas.style.position = \"absolute\";\n    };\n    Decorator.prototype.setScrollBarV = function (scrollbarV) {\n        this.$createCanvas();\n        this.scrollbarV = scrollbarV;\n        scrollbarV.element.appendChild(this.canvas);\n        this.setDimensions();\n    };\n    Decorator.prototype.$updateDecorators = function (config) {\n        if (typeof this.canvas.getContext !== \"function\") {\n            return;\n        }\n        var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n        this.setDimensions(config);\n        var ctx = this.canvas.getContext(\"2d\");\n        function compare(a, b) {\n            if (a.priority < b.priority)\n                return -1;\n            if (a.priority > b.priority)\n                return 1;\n            return 0;\n        }\n        var annotations = this.renderer.session.$annotations;\n        ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n        if (annotations) {\n            var priorities = {\n                \"info\": 1,\n                \"warning\": 2,\n                \"error\": 3\n            };\n            annotations.forEach(function (item) {\n                item[\"priority\"] = priorities[item.type] || null;\n            });\n            annotations = annotations.sort(compare);\n            for (var i = 0; i < annotations.length; i++) {\n                var row = annotations[i].row;\n                var offset1 = this.getVerticalOffsetForRow(row);\n                var offset2 = offset1 + this.lineHeight;\n                var y1 = Math.round(this.heightRatio * offset1);\n                var y2 = Math.round(this.heightRatio * offset2);\n                var ycenter = Math.round((y1 + y2) / 2);\n                var halfHeight = (y2 - ycenter);\n                if (halfHeight < this.halfMinDecorationHeight) {\n                    halfHeight = this.halfMinDecorationHeight;\n                }\n                if (ycenter - halfHeight < 0) {\n                    ycenter = halfHeight;\n                }\n                if (ycenter + halfHeight > this.canvasHeight) {\n                    ycenter = this.canvasHeight - halfHeight;\n                }\n                var from = ycenter - halfHeight;\n                var to = ycenter + halfHeight;\n                var zoneHeight = to - from;\n                ctx.fillStyle = colors[annotations[i].type] || null;\n                ctx.fillRect(0, from, Math.round(this.oneZoneWidth - 1), zoneHeight);\n            }\n        }\n        var cursor = this.renderer.session.selection.getCursor();\n        if (cursor) {\n            var currentY = Math.round(this.getVerticalOffsetForRow(cursor.row) * this.heightRatio);\n            ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n            ctx.fillRect(0, currentY, this.canvasWidth, 2);\n        }\n    };\n    Decorator.prototype.getVerticalOffsetForRow = function (row) {\n        row = row | 0;\n        var offset = this.renderer.session.documentToScreenRow(row, 0) * this.lineHeight;\n        return offset;\n    };\n    Decorator.prototype.setDimensions = function (config) {\n        config = config || this.renderer.layerConfig;\n        this.maxHeight = config.maxHeight;\n        this.lineHeight = config.lineHeight;\n        this.canvasHeight = config.height;\n        this.canvasWidth = this.scrollbarV.width || this.canvasWidth;\n        this.setZoneWidth();\n        this.canvas.width = this.canvasWidth;\n        this.canvas.height = this.canvasHeight;\n        if (this.maxHeight < this.canvasHeight) {\n            this.heightRatio = 1;\n        }\n        else {\n            this.heightRatio = this.canvasHeight / this.maxHeight;\n        }\n    };\n    Decorator.prototype.setZoneWidth = function () {\n        this.oneZoneWidth = this.canvasWidth;\n    };\n    Decorator.prototype.destroy = function () {\n        this.canvas.parentNode.removeChild(this.canvas);\n    };\n    return Decorator;\n}());\noop.implement(Decorator.prototype, EventEmitter);\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor-css\",\"ace/layer/decorators\",\"ace/lib/useragent\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor-css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar isTextToken = require(\"./layer/text_util\").isTextToken;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = /** @class */ (function () {\n    function VirtualRenderer(container, theme) {\n        var _self = this;\n        this.container = container || dom.createElement(\"div\");\n        dom.addCssClass(this.container, \"ace_editor\");\n        if (dom.HI_DPI)\n            dom.addCssClass(this.container, \"ace_hidpi\");\n        this.setTheme(theme);\n        if (config.get(\"useStrictCSP\") == null)\n            config.set(\"useStrictCSP\", false);\n        this.$gutter = dom.createElement(\"div\");\n        this.$gutter.className = \"ace_gutter\";\n        this.container.appendChild(this.$gutter);\n        this.$gutter.setAttribute(\"aria-hidden\", \"true\");\n        this.scroller = dom.createElement(\"div\");\n        this.scroller.className = \"ace_scroller\";\n        this.container.appendChild(this.scroller);\n        this.content = dom.createElement(\"div\");\n        this.content.className = \"ace_content\";\n        this.scroller.appendChild(this.content);\n        this.$gutterLayer = new GutterLayer(this.$gutter);\n        this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n        this.$markerBack = new MarkerLayer(this.content);\n        var textLayer = this.$textLayer = new TextLayer(this.content);\n        this.canvas = textLayer.element;\n        this.$markerFront = new MarkerLayer(this.content);\n        this.$cursorLayer = new CursorLayer(this.content);\n        this.$horizScroll = false;\n        this.$vScroll = false;\n        this.scrollBar =\n            this.scrollBarV = new VScrollBar(this.container, this);\n        this.scrollBarH = new HScrollBar(this.container, this);\n        this.scrollBarV.on(\"scroll\", function (e) {\n            if (!_self.$scrollAnimation)\n                _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n        });\n        this.scrollBarH.on(\"scroll\", function (e) {\n            if (!_self.$scrollAnimation)\n                _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n        });\n        this.scrollTop = 0;\n        this.scrollLeft = 0;\n        this.cursorPos = {\n            row: 0,\n            column: 0\n        };\n        this.$fontMetrics = new FontMetrics(this.container);\n        this.$textLayer.$setFontMetrics(this.$fontMetrics);\n        this.$textLayer.on(\"changeCharacterSize\", function (e) {\n            _self.updateCharacterSize();\n            _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n            _self._signal(\"changeCharacterSize\", e);\n        });\n        this.$size = {\n            width: 0,\n            height: 0,\n            scrollerHeight: 0,\n            scrollerWidth: 0,\n            $dirty: true\n        };\n        this.layerConfig = {\n            width: 1,\n            padding: 0,\n            firstRow: 0,\n            firstRowScreen: 0,\n            lastRow: 0,\n            lineHeight: 0,\n            characterWidth: 0,\n            minHeight: 1,\n            maxHeight: 1,\n            offset: 0,\n            height: 1,\n            gutterOffset: 1\n        };\n        this.scrollMargin = {\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0,\n            v: 0,\n            h: 0\n        };\n        this.margin = {\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0,\n            v: 0,\n            h: 0\n        };\n        this.$keepTextAreaAtCursor = !useragent.isIOS;\n        this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.updateCharacterSize();\n        this.setPadding(4);\n        this.$addResizeObserver();\n        config.resetOptions(this);\n        config._signal(\"renderer\", this);\n    }\n    VirtualRenderer.prototype.updateCharacterSize = function () {\n        if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n            this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n            this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n        }\n        this.layerConfig.characterWidth =\n            this.characterWidth = this.$textLayer.getCharacterWidth();\n        this.layerConfig.lineHeight =\n            this.lineHeight = this.$textLayer.getLineHeight();\n        this.$updatePrintMargin();\n        dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n    };\n    VirtualRenderer.prototype.setSession = function (session) {\n        if (this.session)\n            this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n        this.session = session;\n        if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n            session.setScrollTop(-this.scrollMargin.top);\n        this.$cursorLayer.setSession(session);\n        this.$markerBack.setSession(session);\n        this.$markerFront.setSession(session);\n        this.$gutterLayer.setSession(session);\n        this.$textLayer.setSession(session);\n        if (!session)\n            return;\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.session.$setFontMetrics(this.$fontMetrics);\n        this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n        this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n        this.onChangeNewLineMode();\n        this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n    };\n    VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) {\n        if (lastRow === undefined)\n            lastRow = Infinity;\n        if (!this.$changedLines) {\n            this.$changedLines = {\n                firstRow: firstRow,\n                lastRow: lastRow\n            };\n        }\n        else {\n            if (this.$changedLines.firstRow > firstRow)\n                this.$changedLines.firstRow = firstRow;\n            if (this.$changedLines.lastRow < lastRow)\n                this.$changedLines.lastRow = lastRow;\n        }\n        if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n            if (force)\n                this.$changedLines.lastRow = this.layerConfig.lastRow;\n            else\n                return;\n        }\n        if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n            return;\n        this.$loop.schedule(this.CHANGE_LINES);\n    };\n    VirtualRenderer.prototype.onChangeNewLineMode = function () {\n        this.$loop.schedule(this.CHANGE_TEXT);\n        this.$textLayer.$updateEolChar();\n        this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n    };\n    VirtualRenderer.prototype.onChangeTabSize = function () {\n        this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n        this.$textLayer.onChangeTabSize();\n    };\n    VirtualRenderer.prototype.updateText = function () {\n        this.$loop.schedule(this.CHANGE_TEXT);\n    };\n    VirtualRenderer.prototype.updateFull = function (force) {\n        if (force)\n            this.$renderChanges(this.CHANGE_FULL, true);\n        else\n            this.$loop.schedule(this.CHANGE_FULL);\n    };\n    VirtualRenderer.prototype.updateFontSize = function () {\n        this.$textLayer.checkForSizeChanges();\n    };\n    VirtualRenderer.prototype.$updateSizeAsync = function () {\n        if (this.$loop.pending)\n            this.$size.$dirty = true;\n        else\n            this.onResize();\n    };\n    VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) {\n        if (this.resizing > 2)\n            return;\n        else if (this.resizing > 0)\n            this.resizing++;\n        else\n            this.resizing = force ? 1 : 0;\n        var el = this.container;\n        if (!height)\n            height = el.clientHeight || el.scrollHeight;\n        if (!height && this.$maxLines && this.lineHeight > 1) {\n            if (!el.style.height || el.style.height == \"0px\") {\n                el.style.height = \"1px\";\n                height = el.clientHeight || el.scrollHeight;\n            }\n        }\n        if (!width)\n            width = el.clientWidth || el.scrollWidth;\n        var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n        if (this.$resizeTimer)\n            this.$resizeTimer.cancel();\n        if (!this.$size.scrollerHeight || (!width && !height))\n            return this.resizing = 0;\n        if (force)\n            this.$gutterLayer.$padding = null;\n        if (force)\n            this.$renderChanges(changes | this.$changes, true);\n        else\n            this.$loop.schedule(changes | this.$changes);\n        if (this.resizing)\n            this.resizing = 0;\n        this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n        if (this.$customScrollbar) {\n            this.$updateCustomScrollbar(true);\n        }\n    };\n    VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) {\n        height -= (this.$extraHeight || 0);\n        var changes = 0;\n        var size = this.$size;\n        var oldSize = {\n            width: size.width,\n            height: size.height,\n            scrollerHeight: size.scrollerHeight,\n            scrollerWidth: size.scrollerWidth\n        };\n        if (height && (force || size.height != height)) {\n            size.height = height;\n            changes |= this.CHANGE_SIZE;\n            size.scrollerHeight = size.height;\n            if (this.$horizScroll)\n                size.scrollerHeight -= this.scrollBarH.getHeight();\n            this.scrollBarV.setHeight(size.scrollerHeight);\n            this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n            changes = changes | this.CHANGE_SCROLL;\n        }\n        if (width && (force || size.width != width)) {\n            changes |= this.CHANGE_SIZE;\n            size.width = width;\n            if (gutterWidth == null)\n                gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n            this.gutterWidth = gutterWidth;\n            dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n            dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n            size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n            dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n            var right = this.scrollBarV.getWidth() + \"px\";\n            dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n            dom.setStyle(this.scroller.style, \"right\", right);\n            dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n            this.scrollBarH.setWidth(size.scrollerWidth);\n            if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n                changes |= this.CHANGE_FULL;\n            }\n        }\n        size.$dirty = !width || !height;\n        if (changes)\n            this._signal(\"resize\", oldSize);\n        return changes;\n    };\n    VirtualRenderer.prototype.onGutterResize = function (width) {\n        var gutterWidth = this.$showGutter ? width : 0;\n        if (gutterWidth != this.gutterWidth)\n            this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n        if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        }\n        else if (this.$size.$dirty) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        }\n        else {\n            this.$computeLayerConfig();\n        }\n    };\n    VirtualRenderer.prototype.adjustWrapLimit = function () {\n        var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n        var limit = Math.floor(availableWidth / this.characterWidth);\n        return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n    };\n    VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) {\n        this.setOption(\"animatedScroll\", shouldAnimate);\n    };\n    VirtualRenderer.prototype.getAnimatedScroll = function () {\n        return this.$animatedScroll;\n    };\n    VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) {\n        this.setOption(\"showInvisibles\", showInvisibles);\n        this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n    };\n    VirtualRenderer.prototype.getShowInvisibles = function () {\n        return this.getOption(\"showInvisibles\");\n    };\n    VirtualRenderer.prototype.getDisplayIndentGuides = function () {\n        return this.getOption(\"displayIndentGuides\");\n    };\n    VirtualRenderer.prototype.setDisplayIndentGuides = function (display) {\n        this.setOption(\"displayIndentGuides\", display);\n    };\n    VirtualRenderer.prototype.getHighlightIndentGuides = function () {\n        return this.getOption(\"highlightIndentGuides\");\n    };\n    VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) {\n        this.setOption(\"highlightIndentGuides\", highlight);\n    };\n    VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) {\n        this.setOption(\"showPrintMargin\", showPrintMargin);\n    };\n    VirtualRenderer.prototype.getShowPrintMargin = function () {\n        return this.getOption(\"showPrintMargin\");\n    };\n    VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) {\n        this.setOption(\"printMarginColumn\", printMarginColumn);\n    };\n    VirtualRenderer.prototype.getPrintMarginColumn = function () {\n        return this.getOption(\"printMarginColumn\");\n    };\n    VirtualRenderer.prototype.getShowGutter = function () {\n        return this.getOption(\"showGutter\");\n    };\n    VirtualRenderer.prototype.setShowGutter = function (show) {\n        return this.setOption(\"showGutter\", show);\n    };\n    VirtualRenderer.prototype.getFadeFoldWidgets = function () {\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n    VirtualRenderer.prototype.setFadeFoldWidgets = function (show) {\n        this.setOption(\"fadeFoldWidgets\", show);\n    };\n    VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n    VirtualRenderer.prototype.getHighlightGutterLine = function () {\n        return this.getOption(\"highlightGutterLine\");\n    };\n    VirtualRenderer.prototype.$updatePrintMargin = function () {\n        if (!this.$showPrintMargin && !this.$printMarginEl)\n            return;\n        if (!this.$printMarginEl) {\n            var containerEl = dom.createElement(\"div\");\n            containerEl.className = \"ace_layer ace_print-margin-layer\";\n            this.$printMarginEl = dom.createElement(\"div\");\n            this.$printMarginEl.className = \"ace_print-margin\";\n            containerEl.appendChild(this.$printMarginEl);\n            this.content.insertBefore(containerEl, this.content.firstChild);\n        }\n        var style = this.$printMarginEl.style;\n        style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n        style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n        if (this.session && this.session.$wrap == -1)\n            this.adjustWrapLimit();\n    };\n    VirtualRenderer.prototype.getContainerElement = function () {\n        return this.container;\n    };\n    VirtualRenderer.prototype.getMouseEventTarget = function () {\n        return this.scroller;\n    };\n    VirtualRenderer.prototype.getTextAreaContainer = function () {\n        return this.container;\n    };\n    VirtualRenderer.prototype.$moveTextAreaToCursor = function () {\n        if (this.$isMousePressed)\n            return;\n        var style = this.textarea.style;\n        var composition = this.$composition;\n        if (!this.$keepTextAreaAtCursor && !composition) {\n            dom.translate(this.textarea, -100, 0);\n            return;\n        }\n        var pixelPos = this.$cursorLayer.$pixelPos;\n        if (!pixelPos)\n            return;\n        if (composition && composition.markerRange)\n            pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n        var config = this.layerConfig;\n        var posTop = pixelPos.top;\n        var posLeft = pixelPos.left;\n        posTop -= config.offset;\n        var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1;\n        if (posTop < 0 || posTop > config.height - h) {\n            dom.translate(this.textarea, 0, 0);\n            return;\n        }\n        var w = 1;\n        var maxTop = this.$size.height - h;\n        if (!composition) {\n            posTop += this.lineHeight;\n        }\n        else {\n            if (composition.useTextareaForIME) {\n                var val = this.textarea.value;\n                w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n            }\n            else {\n                posTop += this.lineHeight + 2;\n            }\n        }\n        posLeft -= this.scrollLeft;\n        if (posLeft > this.$size.scrollerWidth - w)\n            posLeft = this.$size.scrollerWidth - w;\n        posLeft += this.gutterWidth + this.margin.left;\n        dom.setStyle(style, \"height\", h + \"px\");\n        dom.setStyle(style, \"width\", w + \"px\");\n        dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n    };\n    VirtualRenderer.prototype.getFirstVisibleRow = function () {\n        return this.layerConfig.firstRow;\n    };\n    VirtualRenderer.prototype.getFirstFullyVisibleRow = function () {\n        return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n    };\n    VirtualRenderer.prototype.getLastFullyVisibleRow = function () {\n        var config = this.layerConfig;\n        var lastRow = config.lastRow;\n        var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n        if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n            return lastRow - 1;\n        return lastRow;\n    };\n    VirtualRenderer.prototype.getLastVisibleRow = function () {\n        return this.layerConfig.lastRow;\n    };\n    VirtualRenderer.prototype.setPadding = function (padding) {\n        this.$padding = padding;\n        this.$textLayer.setPadding(padding);\n        this.$cursorLayer.setPadding(padding);\n        this.$markerFront.setPadding(padding);\n        this.$markerBack.setPadding(padding);\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.$updatePrintMargin();\n    };\n    VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) {\n        var sm = this.scrollMargin;\n        sm.top = top | 0;\n        sm.bottom = bottom | 0;\n        sm.right = right | 0;\n        sm.left = left | 0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        if (sm.top && this.scrollTop <= 0 && this.session)\n            this.session.setScrollTop(-sm.top);\n        this.updateFull();\n    };\n    VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) {\n        var sm = this.margin;\n        sm.top = top | 0;\n        sm.bottom = bottom | 0;\n        sm.right = right | 0;\n        sm.left = left | 0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n        this.updateFull();\n    };\n    VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () {\n        return this.$hScrollBarAlwaysVisible;\n    };\n    VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n        this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n    };\n    VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () {\n        return this.$vScrollBarAlwaysVisible;\n    };\n    VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n        this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n    };\n    VirtualRenderer.prototype.$updateScrollBarV = function () {\n        var scrollHeight = this.layerConfig.maxHeight;\n        var scrollerHeight = this.$size.scrollerHeight;\n        if (!this.$maxLines && this.$scrollPastEnd) {\n            scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n            if (this.scrollTop > scrollHeight - scrollerHeight) {\n                scrollHeight = this.scrollTop + scrollerHeight;\n                this.scrollBarV.scrollTop = null;\n            }\n        }\n        this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n        this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n    };\n    VirtualRenderer.prototype.$updateScrollBarH = function () {\n        this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n        this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n    };\n    VirtualRenderer.prototype.freeze = function () {\n        this.$frozen = true;\n    };\n    VirtualRenderer.prototype.unfreeze = function () {\n        this.$frozen = false;\n    };\n    VirtualRenderer.prototype.$renderChanges = function (changes, force) {\n        if (this.$changes) {\n            changes |= this.$changes;\n            this.$changes = 0;\n        }\n        if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n            this.$changes |= changes;\n            return;\n        }\n        if (this.$size.$dirty) {\n            this.$changes |= changes;\n            return this.onResize(true);\n        }\n        if (!this.lineHeight) {\n            this.$textLayer.checkForSizeChanges();\n        }\n        this._signal(\"beforeRender\", changes);\n        if (this.session && this.session.$bidiHandler)\n            this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n        var config = this.layerConfig;\n        if (changes & this.CHANGE_FULL ||\n            changes & this.CHANGE_SIZE ||\n            changes & this.CHANGE_TEXT ||\n            changes & this.CHANGE_LINES ||\n            changes & this.CHANGE_SCROLL ||\n            changes & this.CHANGE_H_SCROLL) {\n            changes |= this.$computeLayerConfig() | this.$loop.clear();\n            if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n                var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight;\n                if (st > 0) {\n                    this.scrollTop = st;\n                    changes = changes | this.CHANGE_SCROLL;\n                    changes |= this.$computeLayerConfig() | this.$loop.clear();\n                }\n            }\n            config = this.layerConfig;\n            this.$updateScrollBarV();\n            if (changes & this.CHANGE_H_SCROLL)\n                this.$updateScrollBarH();\n            dom.translate(this.content, -this.scrollLeft, -config.offset);\n            var width = config.width + 2 * this.$padding + \"px\";\n            var height = config.minHeight + \"px\";\n            dom.setStyle(this.content.style, \"width\", width);\n            dom.setStyle(this.content.style, \"height\", height);\n        }\n        if (changes & this.CHANGE_H_SCROLL) {\n            dom.translate(this.content, -this.scrollLeft, -config.offset);\n            this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \";\n            if (this.enableKeyboardAccessibility)\n                this.scroller.className += this.keyboardFocusClassName;\n        }\n        if (changes & this.CHANGE_FULL) {\n            this.$changedLines = null;\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\", changes);\n            return;\n        }\n        if (changes & this.CHANGE_SCROLL) {\n            this.$changedLines = null;\n            if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n                this.$textLayer.update(config);\n            else\n                this.$textLayer.scrollLines(config);\n            if (this.$showGutter) {\n                if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n                    this.$gutterLayer.update(config);\n                else\n                    this.$gutterLayer.scrollLines(config);\n            }\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\", changes);\n            return;\n        }\n        if (changes & this.CHANGE_TEXT) {\n            this.$changedLines = null;\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        else if (changes & this.CHANGE_LINES) {\n            if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        else if (changes & this.CHANGE_CURSOR) {\n            if (this.$highlightGutterLine)\n                this.$gutterLayer.updateLineHighlight(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        if (changes & this.CHANGE_CURSOR) {\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n        }\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n            this.$markerFront.update(config);\n        }\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n            this.$markerBack.update(config);\n        }\n        this._signal(\"afterRender\", changes);\n    };\n    VirtualRenderer.prototype.$autosize = function () {\n        var height = this.session.getScreenLength() * this.lineHeight;\n        var maxHeight = this.$maxLines * this.lineHeight;\n        var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n        if (this.$horizScroll)\n            desiredHeight += this.scrollBarH.getHeight();\n        if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n            desiredHeight = this.$maxPixelHeight;\n        var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n        var vScroll = !hideScrollbars && height > maxHeight;\n        if (desiredHeight != this.desiredHeight ||\n            this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n            if (vScroll != this.$vScroll) {\n                this.$vScroll = vScroll;\n                this.scrollBarV.setVisible(vScroll);\n            }\n            var w = this.container.clientWidth;\n            this.container.style.height = desiredHeight + \"px\";\n            this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n            this.desiredHeight = desiredHeight;\n            this._signal(\"autosize\");\n        }\n    };\n    VirtualRenderer.prototype.$computeLayerConfig = function () {\n        var session = this.session;\n        var size = this.$size;\n        var hideScrollbars = size.height <= 2 * this.lineHeight;\n        var screenLines = this.session.getScreenLength();\n        var maxHeight = screenLines * this.lineHeight;\n        var longestLine = this.$getLongestLine();\n        var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n            size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n        var hScrollChanged = this.$horizScroll !== horizScroll;\n        if (hScrollChanged) {\n            this.$horizScroll = horizScroll;\n            this.scrollBarH.setVisible(horizScroll);\n        }\n        var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n        if (this.$maxLines && this.lineHeight > 1) {\n            this.$autosize();\n            hideScrollbars = size.height <= 2 * this.lineHeight;\n        }\n        var minHeight = size.scrollerHeight + this.lineHeight;\n        var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n            ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n            : 0;\n        maxHeight += scrollPastEnd;\n        var sm = this.scrollMargin;\n        this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n        this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n        var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n            size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n        var vScrollChanged = vScrollBefore !== vScroll;\n        if (vScrollChanged) {\n            this.$vScroll = vScroll;\n            this.scrollBarV.setVisible(vScroll);\n        }\n        var offset = this.scrollTop % this.lineHeight;\n        var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n        var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n        var lastRow = firstRow + lineCount;\n        var firstRowScreen, firstRowHeight;\n        var lineHeight = this.lineHeight;\n        firstRow = session.screenToDocumentRow(firstRow, 0);\n        var foldLine = session.getFoldLine(firstRow);\n        if (foldLine) {\n            firstRow = foldLine.start.row;\n        }\n        firstRowScreen = session.documentToScreenRow(firstRow, 0);\n        firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n        lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n        minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n            firstRowHeight;\n        offset = this.scrollTop - firstRowScreen * lineHeight;\n        if (offset < 0 && firstRowScreen > 0) {\n            firstRowScreen = Math.max(0, firstRowScreen + Math.floor(offset / lineHeight));\n            offset = this.scrollTop - firstRowScreen * lineHeight;\n        }\n        var changes = 0;\n        if (this.layerConfig.width != longestLine || hScrollChanged)\n            changes = this.CHANGE_H_SCROLL;\n        if (hScrollChanged || vScrollChanged) {\n            changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n            this._signal(\"scrollbarVisibilityChanged\");\n            if (vScrollChanged)\n                longestLine = this.$getLongestLine();\n        }\n        this.layerConfig = {\n            width: longestLine,\n            padding: this.$padding,\n            firstRow: firstRow,\n            firstRowScreen: firstRowScreen,\n            lastRow: lastRow,\n            lineHeight: lineHeight,\n            characterWidth: this.characterWidth,\n            minHeight: minHeight,\n            maxHeight: maxHeight,\n            offset: offset,\n            gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n            height: this.$size.scrollerHeight\n        };\n        if (this.session.$bidiHandler)\n            this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n        return changes;\n    };\n    VirtualRenderer.prototype.$updateLines = function () {\n        if (!this.$changedLines)\n            return;\n        var firstRow = this.$changedLines.firstRow;\n        var lastRow = this.$changedLines.lastRow;\n        this.$changedLines = null;\n        var layerConfig = this.layerConfig;\n        if (firstRow > layerConfig.lastRow + 1) {\n            return;\n        }\n        if (lastRow < layerConfig.firstRow) {\n            return;\n        }\n        if (lastRow === Infinity) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(layerConfig);\n            this.$textLayer.update(layerConfig);\n            return;\n        }\n        this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n        return true;\n    };\n    VirtualRenderer.prototype.$getLongestLine = function () {\n        var charCount = this.session.getScreenWidth();\n        if (this.showInvisibles && !this.session.$useWrapMode)\n            charCount += 1;\n        if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n            charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n        return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n    };\n    VirtualRenderer.prototype.updateFrontMarkers = function () {\n        this.$markerFront.setMarkers(this.session.getMarkers(true));\n        this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n    };\n    VirtualRenderer.prototype.updateBackMarkers = function () {\n        this.$markerBack.setMarkers(this.session.getMarkers());\n        this.$loop.schedule(this.CHANGE_MARKER_BACK);\n    };\n    VirtualRenderer.prototype.addGutterDecoration = function (row, className) {\n        this.$gutterLayer.addGutterDecoration(row, className);\n    };\n    VirtualRenderer.prototype.removeGutterDecoration = function (row, className) {\n        this.$gutterLayer.removeGutterDecoration(row, className);\n    };\n    VirtualRenderer.prototype.updateBreakpoints = function (rows) {\n        this._rows = rows;\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    VirtualRenderer.prototype.setAnnotations = function (annotations) {\n        this.$gutterLayer.setAnnotations(annotations);\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    VirtualRenderer.prototype.updateCursor = function () {\n        this.$loop.schedule(this.CHANGE_CURSOR);\n    };\n    VirtualRenderer.prototype.hideCursor = function () {\n        this.$cursorLayer.hideCursor();\n    };\n    VirtualRenderer.prototype.showCursor = function () {\n        this.$cursorLayer.showCursor();\n    };\n    VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) {\n        this.scrollCursorIntoView(anchor, offset);\n        this.scrollCursorIntoView(lead, offset);\n    };\n    VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n        if (this.$size.scrollerHeight === 0)\n            return;\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n        var newLeft = pos.left;\n        var newTop = pos.top;\n        var topMargin = $viewMargin && $viewMargin.top || 0;\n        var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n        if (this.$scrollAnimation) {\n            this.$stopAnimation = true;\n        }\n        var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n        if (currentTop + topMargin > newTop) {\n            if (offset && currentTop + topMargin > newTop + this.lineHeight)\n                newTop -= offset * this.$size.scrollerHeight;\n            if (newTop === 0)\n                newTop = -this.scrollMargin.top;\n            this.session.setScrollTop(newTop);\n        }\n        else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) {\n            if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight)\n                newTop += offset * this.$size.scrollerHeight;\n            this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n        }\n        var currentLeft = this.scrollLeft;\n        var twoCharsWidth = 2 * this.layerConfig.characterWidth;\n        if (newLeft - twoCharsWidth < currentLeft) {\n            newLeft -= twoCharsWidth;\n            if (newLeft < this.$padding + twoCharsWidth) {\n                newLeft = -this.scrollMargin.left;\n            }\n            this.session.setScrollLeft(newLeft);\n        }\n        else {\n            newLeft += twoCharsWidth;\n            if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) {\n                this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth));\n            }\n            else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) {\n                this.session.setScrollLeft(0);\n            }\n        }\n    };\n    VirtualRenderer.prototype.getScrollTop = function () {\n        return this.session.getScrollTop();\n    };\n    VirtualRenderer.prototype.getScrollLeft = function () {\n        return this.session.getScrollLeft();\n    };\n    VirtualRenderer.prototype.getScrollTopRow = function () {\n        return this.scrollTop / this.lineHeight;\n    };\n    VirtualRenderer.prototype.getScrollBottomRow = function () {\n        return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n    };\n    VirtualRenderer.prototype.scrollToRow = function (row) {\n        this.session.setScrollTop(row * this.lineHeight);\n    };\n    VirtualRenderer.prototype.alignCursor = function (cursor, alignment) {\n        if (typeof cursor == \"number\")\n            cursor = { row: cursor, column: 0 };\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n        var h = this.$size.scrollerHeight - this.lineHeight;\n        var offset = pos.top - h * (alignment || 0);\n        this.session.setScrollTop(offset);\n        return offset;\n    };\n    VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) {\n        var i = 0;\n        var l = this.STEPS;\n        var steps = [];\n        var func = function (t, x_min, dx) {\n            return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n        };\n        for (i = 0; i < l; ++i)\n            steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n        return steps;\n    };\n    VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) {\n        var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n        var offset = pos.top;\n        if (center)\n            offset -= this.$size.scrollerHeight / 2;\n        var initialScroll = this.scrollTop;\n        this.session.setScrollTop(offset);\n        if (animate !== false)\n            this.animateScrolling(initialScroll, callback);\n    };\n    VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) {\n        var toValue = this.scrollTop;\n        if (!this.$animatedScroll)\n            return;\n        var _self = this;\n        if (fromValue == toValue)\n            return;\n        if (this.$scrollAnimation) {\n            var oldSteps = this.$scrollAnimation.steps;\n            if (oldSteps.length) {\n                fromValue = oldSteps[0];\n                if (fromValue == toValue)\n                    return;\n            }\n        }\n        var steps = _self.$calcSteps(fromValue, toValue);\n        this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n        clearInterval(this.$timer);\n        _self.session.setScrollTop(steps.shift());\n        _self.session.$scrollTop = toValue;\n        function endAnimation() {\n            _self.$timer = clearInterval(_self.$timer);\n            _self.$scrollAnimation = null;\n            _self.$stopAnimation = false;\n            callback && callback();\n        }\n        this.$timer = setInterval(function () {\n            if (_self.$stopAnimation) {\n                endAnimation();\n                return;\n            }\n            if (!_self.session)\n                return clearInterval(_self.$timer);\n            if (steps.length) {\n                _self.session.setScrollTop(steps.shift());\n                _self.session.$scrollTop = toValue;\n            }\n            else if (toValue != null) {\n                _self.session.$scrollTop = -1;\n                _self.session.setScrollTop(toValue);\n                toValue = null;\n            }\n            else {\n                endAnimation();\n            }\n        }, 10);\n    };\n    VirtualRenderer.prototype.scrollToY = function (scrollTop) {\n        if (this.scrollTop !== scrollTop) {\n            this.$loop.schedule(this.CHANGE_SCROLL);\n            this.scrollTop = scrollTop;\n        }\n    };\n    VirtualRenderer.prototype.scrollToX = function (scrollLeft) {\n        if (this.scrollLeft !== scrollLeft)\n            this.scrollLeft = scrollLeft;\n        this.$loop.schedule(this.CHANGE_H_SCROLL);\n    };\n    VirtualRenderer.prototype.scrollTo = function (x, y) {\n        this.session.setScrollTop(y);\n        this.session.setScrollLeft(x);\n    };\n    VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) {\n        deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n        deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n    };\n    VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) {\n        if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n            return true;\n        if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n            - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n            return true;\n        if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n            return true;\n        if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n            - this.layerConfig.width < -1 + this.scrollMargin.right)\n            return true;\n    };\n    VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) {\n        var canvasPos;\n        if (this.$hasCssTransforms) {\n            canvasPos = { top: 0, left: 0 };\n            var p = this.$fontMetrics.transformCoordinates([x, y]);\n            x = p[1] - this.gutterWidth - this.margin.left;\n            y = p[0];\n        }\n        else {\n            canvasPos = this.scroller.getBoundingClientRect();\n        }\n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        var offset = offsetX / this.characterWidth;\n        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n        var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n        return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n    };\n    VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) {\n        var canvasPos;\n        if (this.$hasCssTransforms) {\n            canvasPos = { top: 0, left: 0 };\n            var p = this.$fontMetrics.transformCoordinates([x, y]);\n            x = p[1] - this.gutterWidth - this.margin.left;\n            y = p[0];\n        }\n        else {\n            canvasPos = this.scroller.getBoundingClientRect();\n        }\n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        var offset = offsetX / this.characterWidth;\n        var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n        return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n    };\n    VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) {\n        var canvasPos = this.scroller.getBoundingClientRect();\n        var pos = this.session.documentToScreenPosition(row, column);\n        var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n            ? this.session.$bidiHandler.getPosLeft(pos.column)\n            : Math.round(pos.column * this.characterWidth));\n        var y = pos.row * this.lineHeight;\n        return {\n            pageX: canvasPos.left + x - this.scrollLeft,\n            pageY: canvasPos.top + y - this.scrollTop\n        };\n    };\n    VirtualRenderer.prototype.visualizeFocus = function () {\n        dom.addCssClass(this.container, \"ace_focus\");\n    };\n    VirtualRenderer.prototype.visualizeBlur = function () {\n        dom.removeCssClass(this.container, \"ace_focus\");\n    };\n    VirtualRenderer.prototype.showComposition = function (composition) {\n        this.$composition = composition;\n        if (!composition.cssText) {\n            composition.cssText = this.textarea.style.cssText;\n        }\n        if (composition.useTextareaForIME == undefined)\n            composition.useTextareaForIME = this.$useTextareaForIME;\n        if (this.$useTextareaForIME) {\n            dom.addCssClass(this.textarea, \"ace_composition\");\n            this.textarea.style.cssText = \"\";\n            this.$moveTextAreaToCursor();\n            this.$cursorLayer.element.style.display = \"none\";\n        }\n        else {\n            composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n        }\n    };\n    VirtualRenderer.prototype.setCompositionText = function (text) {\n        var cursor = this.session.selection.cursor;\n        this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n        this.$moveTextAreaToCursor();\n    };\n    VirtualRenderer.prototype.hideComposition = function () {\n        if (!this.$composition)\n            return;\n        if (this.$composition.markerId)\n            this.session.removeMarker(this.$composition.markerId);\n        dom.removeCssClass(this.textarea, \"ace_composition\");\n        this.textarea.style.cssText = this.$composition.cssText;\n        var cursor = this.session.selection.cursor;\n        this.removeExtraToken(cursor.row, cursor.column);\n        this.$composition = null;\n        this.$cursorLayer.element.style.display = \"\";\n    };\n    VirtualRenderer.prototype.setGhostText = function (text, position) {\n        var cursor = this.session.selection.cursor;\n        var insertPosition = position || { row: cursor.row, column: cursor.column };\n        this.removeGhostText();\n        var textChunks = this.$calculateWrappedTextChunks(text, insertPosition);\n        this.addToken(textChunks[0].text, \"ghost_text\", insertPosition.row, insertPosition.column);\n        this.$ghostText = {\n            text: text,\n            position: {\n                row: insertPosition.row,\n                column: insertPosition.column\n            }\n        };\n        var widgetDiv = dom.createElement(\"div\");\n        if (textChunks.length > 1) {\n            var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column);\n            var lastLineDiv;\n            textChunks.slice(1).forEach(function (el) {\n                var chunkDiv = dom.createElement(\"div\");\n                var chunkSpan = dom.createElement(\"span\");\n                chunkSpan.className = \"ace_ghost_text\";\n                if (el.wrapped)\n                    chunkDiv.className = \"ghost_text_line_wrapped\";\n                if (el.text.length === 0)\n                    el.text = \" \";\n                chunkSpan.appendChild(dom.createTextNode(el.text));\n                chunkDiv.appendChild(chunkSpan);\n                widgetDiv.appendChild(chunkDiv);\n                lastLineDiv = chunkDiv;\n            });\n            hiddenTokens.forEach(function (token) {\n                var element = dom.createElement(\"span\");\n                if (!isTextToken(token.type))\n                    element.className = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n                element.appendChild(dom.createTextNode(token.value));\n                lastLineDiv.appendChild(element);\n            });\n            this.$ghostTextWidget = {\n                el: widgetDiv,\n                row: insertPosition.row,\n                column: insertPosition.column,\n                className: \"ace_ghost_text_container\"\n            };\n            this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n            var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true);\n            var el = this.container;\n            var height = el.getBoundingClientRect().height;\n            var ghostTextHeight = textChunks.length * this.lineHeight;\n            var fitsY = ghostTextHeight < (height - pixelPosition.top);\n            if (fitsY)\n                return;\n            if (ghostTextHeight < height) {\n                this.scrollBy(0, (textChunks.length - 1) * this.lineHeight);\n            }\n            else {\n                this.scrollToRow(insertPosition.row);\n            }\n        }\n    };\n    VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) {\n        var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n        var limit = Math.floor(availableWidth / this.characterWidth) - 2;\n        limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small\n        var textLines = text.split(/\\r?\\n/);\n        var textChunks = [];\n        for (var i = 0; i < textLines.length; i++) {\n            var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column);\n            var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize);\n            if (wrapSplits.length > 0) {\n                var start = 0;\n                wrapSplits.push(textLines[i].length);\n                for (var j = 0; j < wrapSplits.length; j++) {\n                    var textSlice = textLines[i].slice(start, wrapSplits[j]);\n                    textChunks.push({ text: textSlice, wrapped: true });\n                    start = wrapSplits[j];\n                }\n            }\n            else {\n                textChunks.push({ text: textLines[i], wrapped: false });\n            }\n        }\n        return textChunks;\n    };\n    VirtualRenderer.prototype.removeGhostText = function () {\n        if (!this.$ghostText)\n            return;\n        var position = this.$ghostText.position;\n        this.removeExtraToken(position.row, position.column);\n        if (this.$ghostTextWidget) {\n            this.session.widgetManager.removeLineWidget(this.$ghostTextWidget);\n            this.$ghostTextWidget = null;\n        }\n        this.$ghostText = null;\n    };\n    VirtualRenderer.prototype.addToken = function (text, type, row, column) {\n        var session = this.session;\n        session.bgTokenizer.lines[row] = null;\n        var newToken = { type: type, value: text };\n        var tokens = session.getTokens(row);\n        if (column == null || !tokens.length) {\n            tokens.push(newToken);\n        }\n        else {\n            var l = 0;\n            for (var i = 0; i < tokens.length; i++) {\n                var token = tokens[i];\n                l += token.value.length;\n                if (column <= l) {\n                    var diff = token.value.length - (l - column);\n                    var before = token.value.slice(0, diff);\n                    var after = token.value.slice(diff);\n                    tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n                    break;\n                }\n            }\n        }\n        this.updateLines(row, row);\n    };\n    VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) {\n        var tokens = this.session.getTokens(row);\n        var l = 0;\n        var hasPassedCursor = false;\n        var hiddenTokens = [];\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            l += token.value.length;\n            if (token.type === \"ghost_text\")\n                continue;\n            if (hasPassedCursor) {\n                hiddenTokens.push({ type: token.type, value: token.value });\n                token.type = \"hidden_token\";\n                continue;\n            }\n            if (l === column) {\n                hasPassedCursor = true;\n            }\n        }\n        this.updateLines(row, row);\n        return hiddenTokens;\n    };\n    VirtualRenderer.prototype.removeExtraToken = function (row, column) {\n        this.session.bgTokenizer.lines[row] = null;\n        this.updateLines(row, row);\n    };\n    VirtualRenderer.prototype.setTheme = function (theme, cb) {\n        var _self = this;\n        this.$themeId = theme;\n        _self._dispatchEvent('themeChange', { theme: theme });\n        if (!theme || typeof theme == \"string\") {\n            var moduleName = theme || this.$options.theme.initialValue;\n            config.loadModule([\"theme\", moduleName], afterLoad);\n        }\n        else {\n            afterLoad(theme);\n        }\n        function afterLoad(module) {\n            if (_self.$themeId != theme)\n                return cb && cb();\n            if (!module || !module.cssClass)\n                throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n            if (module.$id)\n                _self.$themeId = module.$id;\n            dom.importCssString(module.cssText, module.cssClass, _self.container);\n            if (_self.theme)\n                dom.removeCssClass(_self.container, _self.theme.cssClass);\n            var padding = \"padding\" in module ? module.padding\n                : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n            if (_self.$padding && padding != _self.$padding)\n                _self.setPadding(padding);\n            if (_self.$gutterLayer) {\n                var showGutterCursor = module[\"$showGutterCursorMarker\"];\n                if (showGutterCursor && !_self.$gutterLayer.$showCursorMarker) {\n                    _self.$gutterLayer.$showCursorMarker = \"theme\";\n                }\n                else if (!showGutterCursor && _self.$gutterLayer.$showCursorMarker == \"theme\") {\n                    _self.$gutterLayer.$showCursorMarker = null;\n                }\n            }\n            _self.$theme = module.cssClass;\n            _self.theme = module;\n            dom.addCssClass(_self.container, module.cssClass);\n            dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n            if (_self.$size) {\n                _self.$size.width = 0;\n                _self.$updateSizeAsync();\n            }\n            _self._dispatchEvent('themeLoaded', { theme: module });\n            cb && cb();\n            if (useragent.isSafari && _self.scroller) {\n                _self.scroller.style.background = \"red\";\n                _self.scroller.style.background = \"\";\n            }\n        }\n    };\n    VirtualRenderer.prototype.getTheme = function () {\n        return this.$themeId;\n    };\n    VirtualRenderer.prototype.setStyle = function (style, include) {\n        dom.setCssClass(this.container, style, include !== false);\n    };\n    VirtualRenderer.prototype.unsetStyle = function (style) {\n        dom.removeCssClass(this.container, style);\n    };\n    VirtualRenderer.prototype.setCursorStyle = function (style) {\n        dom.setStyle(this.scroller.style, \"cursor\", style);\n    };\n    VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) {\n        dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n    };\n    VirtualRenderer.prototype.attachToShadowRoot = function () {\n        dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n    };\n    VirtualRenderer.prototype.destroy = function () {\n        this.freeze();\n        this.$fontMetrics.destroy();\n        this.$cursorLayer.destroy();\n        this.removeAllListeners();\n        this.container.textContent = \"\";\n        this.setOption(\"useResizeObserver\", false);\n    };\n    VirtualRenderer.prototype.$updateCustomScrollbar = function (val) {\n        var _self = this;\n        this.$horizScroll = this.$vScroll = null;\n        this.scrollBarV.element.remove();\n        this.scrollBarH.element.remove();\n        if (val === true) {\n            this.scrollBarV = new VScrollBarCustom(this.container, this);\n            this.scrollBarH = new HScrollBarCustom(this.container, this);\n            this.scrollBarV.setHeight(this.$size.scrollerHeight);\n            this.scrollBarH.setWidth(this.$size.scrollerWidth);\n            this.scrollBarV.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n            });\n            this.scrollBarH.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n            });\n            if (!this.$scrollDecorator) {\n                this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n                this.$scrollDecorator.$updateDecorators();\n            }\n            else {\n                this.$scrollDecorator.setScrollBarV(this.scrollBarV);\n                this.$scrollDecorator.$updateDecorators();\n            }\n        }\n        else {\n            this.scrollBarV = new VScrollBar(this.container, this);\n            this.scrollBarH = new HScrollBar(this.container, this);\n            this.scrollBarV.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n            });\n            this.scrollBarH.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n            });\n        }\n    };\n    VirtualRenderer.prototype.$addResizeObserver = function () {\n        if (!window.ResizeObserver || this.$resizeObserver)\n            return;\n        var self = this;\n        this.$resizeTimer = lang.delayedCall(function () {\n            if (!self.destroyed)\n                self.onResize();\n        }, 50);\n        this.$resizeObserver = new window.ResizeObserver(function (e) {\n            var w = e[0].contentRect.width;\n            var h = e[0].contentRect.height;\n            if (Math.abs(self.$size.width - w) > 1\n                || Math.abs(self.$size.height - h) > 1) {\n                self.$resizeTimer.delay();\n            }\n            else {\n                self.$resizeTimer.cancel();\n            }\n        });\n        this.$resizeObserver.observe(this.container);\n    };\n    return VirtualRenderer;\n}());\nVirtualRenderer.prototype.CHANGE_CURSOR = 1;\nVirtualRenderer.prototype.CHANGE_MARKER = 2;\nVirtualRenderer.prototype.CHANGE_GUTTER = 4;\nVirtualRenderer.prototype.CHANGE_SCROLL = 8;\nVirtualRenderer.prototype.CHANGE_LINES = 16;\nVirtualRenderer.prototype.CHANGE_TEXT = 32;\nVirtualRenderer.prototype.CHANGE_SIZE = 64;\nVirtualRenderer.prototype.CHANGE_MARKER_BACK = 128;\nVirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256;\nVirtualRenderer.prototype.CHANGE_FULL = 512;\nVirtualRenderer.prototype.CHANGE_H_SCROLL = 1024;\nVirtualRenderer.prototype.$changes = 0;\nVirtualRenderer.prototype.$padding = null;\nVirtualRenderer.prototype.$frozen = false;\nVirtualRenderer.prototype.STEPS = 8;\noop.implement(VirtualRenderer.prototype, EventEmitter);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n    useResizeObserver: {\n        set: function (value) {\n            if (!value && this.$resizeObserver) {\n                this.$resizeObserver.disconnect();\n                this.$resizeTimer.cancel();\n                this.$resizeTimer = this.$resizeObserver = null;\n            }\n            else if (value && !this.$resizeObserver) {\n                this.$addResizeObserver();\n            }\n        }\n    },\n    animatedScroll: { initialValue: false },\n    showInvisibles: {\n        set: function (value) {\n            if (this.$textLayer.setShowInvisibles(value))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: false\n    },\n    showPrintMargin: {\n        set: function () { this.$updatePrintMargin(); },\n        initialValue: true\n    },\n    printMarginColumn: {\n        set: function () { this.$updatePrintMargin(); },\n        initialValue: 80\n    },\n    printMargin: {\n        set: function (val) {\n            if (typeof val == \"number\")\n                this.$printMarginColumn = val;\n            this.$showPrintMargin = !!val;\n            this.$updatePrintMargin();\n        },\n        get: function () {\n            return this.$showPrintMargin && this.$printMarginColumn;\n        }\n    },\n    showGutter: {\n        set: function (show) {\n            this.$gutter.style.display = show ? \"block\" : \"none\";\n            this.$loop.schedule(this.CHANGE_FULL);\n            this.onGutterResize();\n        },\n        initialValue: true\n    },\n    useSvgGutterIcons: {\n        set: function (value) {\n            this.$gutterLayer.$useSvgGutterIcons = value;\n        },\n        initialValue: false\n    },\n    showFoldedAnnotations: {\n        set: function (value) {\n            this.$gutterLayer.$showFoldedAnnotations = value;\n        },\n        initialValue: false\n    },\n    fadeFoldWidgets: {\n        set: function (show) {\n            dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n        },\n        initialValue: false\n    },\n    showFoldWidgets: {\n        set: function (show) {\n            this.$gutterLayer.setShowFoldWidgets(show);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    displayIndentGuides: {\n        set: function (show) {\n            if (this.$textLayer.setDisplayIndentGuides(show))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: true\n    },\n    highlightIndentGuides: {\n        set: function (show) {\n            if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n                this.$textLayer.$highlightIndentGuide();\n            }\n            else {\n                this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n            }\n        },\n        initialValue: true\n    },\n    highlightGutterLine: {\n        set: function (shouldHighlight) {\n            this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    hScrollBarAlwaysVisible: {\n        set: function (val) {\n            if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    vScrollBarAlwaysVisible: {\n        set: function (val) {\n            if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    fontSize: {\n        set: function (size) {\n            if (typeof size == \"number\")\n                size = size + \"px\";\n            this.container.style.fontSize = size;\n            this.updateFontSize();\n        },\n        initialValue: 12\n    },\n    fontFamily: {\n        set: function (name) {\n            this.container.style.fontFamily = name;\n            this.updateFontSize();\n        }\n    },\n    maxLines: {\n        set: function (val) {\n            this.updateFull();\n        }\n    },\n    minLines: {\n        set: function (val) {\n            if (!(this.$minLines < 0x1ffffffffffff))\n                this.$minLines = 0;\n            this.updateFull();\n        }\n    },\n    maxPixelHeight: {\n        set: function (val) {\n            this.updateFull();\n        },\n        initialValue: 0\n    },\n    scrollPastEnd: {\n        set: function (val) {\n            val = +val || 0;\n            if (this.$scrollPastEnd == val)\n                return;\n            this.$scrollPastEnd = val;\n            this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: 0,\n        handlesSet: true\n    },\n    fixedWidthGutter: {\n        set: function (val) {\n            this.$gutterLayer.$fixedWidth = !!val;\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        }\n    },\n    customScrollbar: {\n        set: function (val) {\n            this.$updateCustomScrollbar(val);\n        },\n        initialValue: false\n    },\n    theme: {\n        set: function (val) { this.setTheme(val); },\n        get: function () { return this.$themeId || this.theme; },\n        initialValue: \"./theme/textmate\",\n        handlesSet: true\n    },\n    hasCssTransforms: {},\n    useTextareaForIME: {\n        initialValue: !useragent.isMobile && !useragent.isIE\n    }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n    var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n    try {\n        return new Blob([script], {\"type\": \"application/javascript\"});\n    } catch (e) { // Backwards-compatibility\n        var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n        var blobBuilder = new BlobBuilder();\n        blobBuilder.append(script);\n        return blobBuilder.getBlob(\"application/javascript\");\n    }\n}\n\nfunction createWorker(workerUrl) {\n    if (typeof Worker == \"undefined\")\n        return { postMessage: function() {}, terminate: function() {} };\n    if (config.get(\"loadWorkerFromBlob\")) {\n        var blob = $workerBlob(workerUrl);\n        var URL = window.URL || window.webkitURL;\n        var blobURL = URL.createObjectURL(blob);\n        return new Worker(blobURL);\n    }\n    return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n    if (!worker.postMessage)\n        worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n    this.$worker = worker;\n    this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.onMessage = this.onMessage.bind(this);\n\n    this.callbackId = 1;\n    this.callbacks = {};\n\n    this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n        if (require.nameToUrl && !require.toUrl)\n            require.toUrl = require.nameToUrl;\n\n        if (config.get(\"packaged\") || !require.toUrl) {\n            workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n        } else {\n            var normalizePath = this.$normalizePath;\n            workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n            var tlns = {};\n            topLevelNamespaces.forEach(function(ns) {\n                tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n            });\n        }\n\n        this.$worker = createWorker(workerUrl);\n        if (importScripts) {\n            this.send(\"importScripts\", importScripts);\n        }\n        this.$worker.postMessage({\n            init : true,\n            tlns : tlns,\n            module : mod,\n            classname : classname\n        });\n        return this.$worker;\n    };\n\n    this.onMessage = function(e) {\n        var msg = e.data;\n        switch (msg.type) {\n            case \"event\":\n                this._signal(msg.name, {data: msg.data});\n                break;\n            case \"call\":\n                var callback = this.callbacks[msg.id];\n                if (callback) {\n                    callback(msg.data);\n                    delete this.callbacks[msg.id];\n                }\n                break;\n            case \"error\":\n                this.reportError(msg.data);\n                break;\n            case \"log\":\n                window.console && console.log && console.log.apply(console, msg.data);\n                break;\n        }\n    };\n    \n    this.reportError = function(err) {\n        window.console && console.error && console.error(err);\n    };\n\n    this.$normalizePath = function(path) {\n        return net.qualifyURL(path);\n    };\n\n    this.terminate = function() {\n        this._signal(\"terminate\", {});\n        this.deltaQueue = null;\n        this.$worker.terminate();\n        this.$worker.onerror = function(e) {\n            e.preventDefault();\n        };\n        this.$worker = null;\n        if (this.$doc)\n            this.$doc.off(\"change\", this.changeListener);\n        this.$doc = null;\n    };\n\n    this.send = function(cmd, args) {\n        this.$worker.postMessage({command: cmd, args: args});\n    };\n\n    this.call = function(cmd, args, callback) {\n        if (callback) {\n            var id = this.callbackId++;\n            this.callbacks[id] = callback;\n            args.push(id);\n        }\n        this.send(cmd, args);\n    };\n\n    this.emit = function(event, data) {\n        try {\n            if (data.data && data.data.err)\n                data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n                this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n        }\n        catch(ex) {\n            console.error(ex.stack);\n        }\n    };\n\n    this.attachToDocument = function(doc) {\n        if (this.$doc)\n            this.terminate();\n\n        this.$doc = doc;\n        this.call(\"setValue\", [doc.getValue()]);\n        doc.on(\"change\", this.changeListener, true);\n    };\n\n    this.changeListener = function(delta) {\n        if (!this.deltaQueue) {\n            this.deltaQueue = [];\n            setTimeout(this.$sendDeltaQueue, 0);\n        }\n        if (delta.action == \"insert\")\n            this.deltaQueue.push(delta.start, delta.lines);\n        else\n            this.deltaQueue.push(delta.start, delta.end);\n    };\n\n    this.$sendDeltaQueue = function() {\n        var q = this.deltaQueue;\n        if (!q) return;\n        this.deltaQueue = null;\n        if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n            this.call(\"setValue\", [this.$doc.getValue()]);\n        } else\n            this.emit(\"change\", {data: q});\n    };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n    var main = null;\n    var emitSync = false;\n    var sender = Object.create(EventEmitter);\n\n    var messageBuffer = [];\n    var workerClient = new WorkerClient({\n        messageBuffer: messageBuffer,\n        terminate: function() {},\n        postMessage: function(e) {\n            messageBuffer.push(e);\n            if (!main) return;\n            if (emitSync)\n                setTimeout(processNext);\n            else\n                processNext();\n        }\n    });\n\n    workerClient.setEmitSync = function(val) { emitSync = val; };\n\n    var processNext = function() {\n        var msg = messageBuffer.shift();\n        if (msg.command)\n            main[msg.command].apply(main, msg.args);\n        else if (msg.event)\n            sender._signal(msg.event, msg.data);\n    };\n\n    sender.postMessage = function(msg) {\n        workerClient.onMessage({data: msg});\n    };\n    sender.callback = function(data, callbackId) {\n        this.postMessage({type: \"call\", id: callbackId, data: data});\n    };\n    sender.emit = function(name, data) {\n        this.postMessage({type: \"event\", name: name, data: data});\n    };\n\n    config.loadModule([\"worker\", mod], function(Main) {\n        main = new Main[classname](sender);\n        while (messageBuffer.length)\n            processNext();\n    });\n\n    return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = /** @class */ (function () {\n    function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n        var _self = this;\n        this.length = length;\n        this.session = session;\n        this.doc = session.getDocument();\n        this.mainClass = mainClass;\n        this.othersClass = othersClass;\n        this.$onUpdate = this.onUpdate.bind(this);\n        this.doc.on(\"change\", this.$onUpdate, true);\n        this.$others = others;\n        this.$onCursorChange = function () {\n            setTimeout(function () {\n                _self.onCursorChange();\n            });\n        };\n        this.$pos = pos;\n        var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()[\"$undostack\"] || { length: -1 };\n        this.$undoStackDepth = undoStack.length;\n        this.setup();\n        session.selection.on(\"changeCursor\", this.$onCursorChange);\n    }\n    PlaceHolder.prototype.setup = function () {\n        var _self = this;\n        var doc = this.doc;\n        var session = this.session;\n        this.selectionBefore = session.selection.toJSON();\n        if (session.selection.inMultiSelectMode)\n            session.selection.toSingleRange();\n        this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n        var pos = this.pos;\n        pos.$insertRight = true;\n        pos.detach();\n        pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n        this.others = [];\n        this.$others.forEach(function (other) {\n            var anchor = doc.createAnchor(other.row, other.column);\n            anchor.$insertRight = true;\n            anchor.detach();\n            _self.others.push(anchor);\n        });\n        session.setUndoSelect(false);\n    };\n    PlaceHolder.prototype.showOtherMarkers = function () {\n        if (this.othersActive)\n            return;\n        var session = this.session;\n        var _self = this;\n        this.othersActive = true;\n        this.others.forEach(function (anchor) {\n            anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n        });\n    };\n    PlaceHolder.prototype.hideOtherMarkers = function () {\n        if (!this.othersActive)\n            return;\n        this.othersActive = false;\n        for (var i = 0; i < this.others.length; i++) {\n            this.session.removeMarker(this.others[i].markerId);\n        }\n    };\n    PlaceHolder.prototype.onUpdate = function (delta) {\n        if (this.$updating)\n            return this.updateAnchors(delta);\n        var range = delta;\n        if (range.start.row !== range.end.row)\n            return;\n        if (range.start.row !== this.pos.row)\n            return;\n        this.$updating = true;\n        var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n        var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n        var distanceFromStart = range.start.column - this.pos.column;\n        this.updateAnchors(delta);\n        if (inMainRange)\n            this.length += lengthDiff;\n        if (inMainRange && !this.session.$fromUndo) {\n            if (delta.action === 'insert') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n                    this.doc.insertMergedLines(newPos, delta.lines);\n                }\n            }\n            else if (delta.action === 'remove') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n                    this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n                }\n            }\n        }\n        this.$updating = false;\n        this.updateMarkers();\n    };\n    PlaceHolder.prototype.updateAnchors = function (delta) {\n        this.pos.onChange(delta);\n        for (var i = this.others.length; i--;)\n            this.others[i].onChange(delta);\n        this.updateMarkers();\n    };\n    PlaceHolder.prototype.updateMarkers = function () {\n        if (this.$updating)\n            return;\n        var _self = this;\n        var session = this.session;\n        var updateMarker = function (pos, className) {\n            session.removeMarker(pos.markerId);\n            pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n        };\n        updateMarker(this.pos, this.mainClass);\n        for (var i = this.others.length; i--;)\n            updateMarker(this.others[i], this.othersClass);\n    };\n    PlaceHolder.prototype.onCursorChange = function (event) {\n        if (this.$updating || !this.session)\n            return;\n        var pos = this.session.selection.getCursor();\n        if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n            this.showOtherMarkers();\n            this._emit(\"cursorEnter\", event);\n        }\n        else {\n            this.hideOtherMarkers();\n            this._emit(\"cursorLeave\", event);\n        }\n    };\n    PlaceHolder.prototype.detach = function () {\n        this.session.removeMarker(this.pos && this.pos.markerId);\n        this.hideOtherMarkers();\n        this.doc.off(\"change\", this.$onUpdate);\n        this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n        this.session.setUndoSelect(true);\n        this.session = null;\n    };\n    PlaceHolder.prototype.cancel = function () {\n        if (this.$undoStackDepth === -1)\n            return;\n        var undoManager = this.session.getUndoManager();\n        var undosRequired = (undoManager.$undoStack || undoManager[\"$undostack\"]).length - this.$undoStackDepth;\n        for (var i = 0; i < undosRequired; i++) {\n            undoManager.undo(this.session, true);\n        }\n        if (this.selectionBefore)\n            this.session.selection.fromJSON(this.selectionBefore);\n    };\n    return PlaceHolder;\n}());\noop.implement(PlaceHolder.prototype, EventEmitter);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n    var ev = e.domEvent;\n    var alt = ev.altKey;\n    var shift = ev.shiftKey;\n    var ctrl = ev.ctrlKey;\n    var accel = e.getAccelKey();\n    var button = e.getButton();\n    if (ctrl && useragent.isMac)\n        button = ev.button;\n    if (e.editor.inMultiSelectMode && button == 2) {\n        e.editor.textInput.onContextMenu(e.domEvent);\n        return;\n    }\n    if (!ctrl && !alt && !accel) {\n        if (button === 0 && e.editor.inMultiSelectMode)\n            e.editor.exitMultiSelectMode();\n        return;\n    }\n    if (button !== 0)\n        return;\n    var editor = e.editor;\n    var selection = editor.selection;\n    var isMultiSelect = editor.inMultiSelectMode;\n    var pos = e.getDocumentPosition();\n    var cursor = selection.getCursor();\n    var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n    var mouseX = e.x, mouseY = e.y;\n    var onMouseSelection = function (e) {\n        mouseX = e.clientX;\n        mouseY = e.clientY;\n    };\n    var session = editor.session;\n    var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n    var screenCursor = screenAnchor;\n    var selectionMode;\n    if (editor.$mouseHandler.$enableJumpToDef) {\n        if (ctrl && alt || accel && alt)\n            selectionMode = shift ? \"block\" : \"add\";\n        else if (alt && editor.$blockSelectEnabled)\n            selectionMode = \"block\";\n    }\n    else {\n        if (accel && !alt) {\n            selectionMode = \"add\";\n            if (!isMultiSelect && shift)\n                return;\n        }\n        else if (alt && editor.$blockSelectEnabled) {\n            selectionMode = \"block\";\n        }\n    }\n    if (selectionMode && useragent.isMac && ev.ctrlKey) {\n        editor.$mouseHandler.cancelContextMenu();\n    }\n    if (selectionMode == \"add\") {\n        if (!isMultiSelect && inSelection)\n            return; // dragging\n        if (!isMultiSelect) {\n            var range = selection.toOrientedRange();\n            editor.addSelectionMarker(range);\n        }\n        var oldRange = selection.rangeList.rangeAtPoint(pos);\n        editor.inVirtualSelectionMode = true;\n        if (shift) {\n            oldRange = null;\n            range = selection.ranges[0] || range;\n            editor.removeSelectionMarker(range);\n        }\n        editor.once(\"mouseup\", function () {\n            var tmpSel = selection.toOrientedRange();\n            if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n                selection.substractPoint(tmpSel.cursor);\n            else {\n                if (shift) {\n                    selection.substractPoint(range.cursor);\n                }\n                else if (range) {\n                    editor.removeSelectionMarker(range);\n                    selection.addRange(range);\n                }\n                selection.addRange(tmpSel);\n            }\n            editor.inVirtualSelectionMode = false;\n        });\n    }\n    else if (selectionMode == \"block\") {\n        e.stop();\n        editor.inVirtualSelectionMode = true;\n        var initialRange;\n        var rectSel = [];\n        var blockSelect = function () {\n            var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n            var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n            if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n                return;\n            screenCursor = newCursor;\n            editor.selection.moveToPosition(cursor);\n            editor.renderer.scrollCursorIntoView();\n            editor.removeSelectionMarkers(rectSel);\n            rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n            if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n                rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n            rectSel.forEach(editor.addSelectionMarker, editor);\n            editor.updateSelectionMarkers();\n        };\n        if (isMultiSelect && !accel) {\n            selection.toSingleRange();\n        }\n        else if (!isMultiSelect && accel) {\n            initialRange = selection.toOrientedRange();\n            editor.addSelectionMarker(initialRange);\n        }\n        if (shift)\n            screenAnchor = session.documentToScreenPosition(selection.lead);\n        else\n            selection.moveToPosition(pos);\n        screenCursor = { row: -1, column: -1 };\n        var onMouseSelectionEnd = function (e) {\n            blockSelect();\n            clearInterval(timerId);\n            editor.removeSelectionMarkers(rectSel);\n            if (!rectSel.length)\n                rectSel = [selection.toOrientedRange()];\n            if (initialRange) {\n                editor.removeSelectionMarker(initialRange);\n                selection.toSingleRange(initialRange);\n            }\n            for (var i = 0; i < rectSel.length; i++)\n                selection.addRange(rectSel[i]);\n            editor.inVirtualSelectionMode = false;\n            editor.$mouseHandler.$clickSelection = null;\n        };\n        var onSelectionInterval = blockSelect;\n        event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n        var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n        return e.preventDefault();\n    }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){/**\n * commands to enter multiselect mode\n * @type {import(\"../../ace-internal\").Ace.Command[]}\n */\nexports.defaultCommands = [{\n        name: \"addCursorAbove\",\n        description: \"Add cursor above\",\n        exec: function (editor) { editor.selectMoreLines(-1); },\n        bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"addCursorBelow\",\n        description: \"Add cursor below\",\n        exec: function (editor) { editor.selectMoreLines(1); },\n        bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"addCursorAboveSkipCurrent\",\n        description: \"Add cursor above (skip current)\",\n        exec: function (editor) { editor.selectMoreLines(-1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"addCursorBelowSkipCurrent\",\n        description: \"Add cursor below (skip current)\",\n        exec: function (editor) { editor.selectMoreLines(1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectMoreBefore\",\n        description: \"Select more before\",\n        exec: function (editor) { editor.selectMore(-1); },\n        bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectMoreAfter\",\n        description: \"Select more after\",\n        exec: function (editor) { editor.selectMore(1); },\n        bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectNextBefore\",\n        description: \"Select next before\",\n        exec: function (editor) { editor.selectMore(-1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectNextAfter\",\n        description: \"Select next after\",\n        exec: function (editor) { editor.selectMore(1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"toggleSplitSelectionIntoLines\",\n        description: \"Split selection into lines\",\n        exec: function (editor) {\n            if (editor.multiSelect.rangeCount > 1)\n                editor.multiSelect.joinSelections();\n            else\n                editor.multiSelect.splitIntoLines();\n        },\n        bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n        readOnly: true\n    }, {\n        name: \"splitSelectionIntoLines\",\n        description: \"Split into lines\",\n        exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n        readOnly: true\n    }, {\n        name: \"alignCursors\",\n        description: \"Align cursors\",\n        exec: function (editor) { editor.alignCursors(); },\n        bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"findAll\",\n        description: \"Find all\",\n        exec: function (editor) { editor.findAll(); },\n        bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }];\nexports.multiSelectCommands = [{\n        name: \"singleSelection\",\n        description: \"Single selection\",\n        bindKey: \"esc\",\n        exec: function (editor) { editor.exitMultiSelectMode(); },\n        scrollIntoView: \"cursor\",\n        readOnly: true,\n        isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n    }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * @typedef {import(\"./anchor\").Anchor} Anchor\n * @typedef {import(\"../ace-internal\").Ace.Point} Point\n * @typedef {import(\"../ace-internal\").Ace.ScreenCoordinates} ScreenCoordinates\n */\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n    search.$options.wrap = true;\n    search.$options.needle = needle;\n    search.$options.backwards = dir == -1;\n    return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n    this.getSelectionMarkers = function () {\n        return this.$selectionMarkers;\n    };\n}).call(EditSession.prototype);\n(function () {\n    this.ranges = null;\n    this.rangeList = null;\n    this.addRange = function (range, $blockChangeEvents) {\n        if (!range)\n            return;\n        if (!this.inMultiSelectMode && this.rangeCount === 0) {\n            var oldRange = this.toOrientedRange();\n            this.rangeList.add(oldRange);\n            this.rangeList.add(range);\n            if (this.rangeList.ranges.length != 2) {\n                this.rangeList.removeAll();\n                return $blockChangeEvents || this.fromOrientedRange(range);\n            }\n            this.rangeList.removeAll();\n            this.rangeList.add(oldRange);\n            this.$onAddRange(oldRange);\n        }\n        if (!range.cursor)\n            range.cursor = range.end;\n        var removed = this.rangeList.add(range);\n        this.$onAddRange(range);\n        if (removed.length)\n            this.$onRemoveRange(removed);\n        if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n            this._signal(\"multiSelect\");\n            this.inMultiSelectMode = true;\n            this.session.$undoSelect = false;\n            this.rangeList.attach(this.session);\n        }\n        return $blockChangeEvents || this.fromOrientedRange(range);\n    };\n    this.toSingleRange = function (range) {\n        range = range || this.ranges[0];\n        var removed = this.rangeList.removeAll();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n        range && this.fromOrientedRange(range);\n    };\n    this.substractPoint = function (pos) {\n        var removed = this.rangeList.substractPoint(pos);\n        if (removed) {\n            this.$onRemoveRange(removed);\n            return removed[0];\n        }\n    };\n    this.mergeOverlappingRanges = function () {\n        var removed = this.rangeList.merge();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n    };\n    this.$onAddRange = function (range) {\n        this.rangeCount = this.rangeList.ranges.length;\n        this.ranges.unshift(range);\n        this._signal(\"addRange\", { range: range });\n    };\n    this.$onRemoveRange = function (removed) {\n        this.rangeCount = this.rangeList.ranges.length;\n        if (this.rangeCount == 1 && this.inMultiSelectMode) {\n            var lastRange = this.rangeList.ranges.pop();\n            removed.push(lastRange);\n            this.rangeCount = 0;\n        }\n        for (var i = removed.length; i--;) {\n            var index = this.ranges.indexOf(removed[i]);\n            this.ranges.splice(index, 1);\n        }\n        this._signal(\"removeRange\", { ranges: removed });\n        if (this.rangeCount === 0 && this.inMultiSelectMode) {\n            this.inMultiSelectMode = false;\n            this._signal(\"singleSelect\");\n            this.session.$undoSelect = true;\n            this.rangeList.detach(this.session);\n        }\n        lastRange = lastRange || this.ranges[0];\n        if (lastRange && !lastRange.isEqual(this.getRange()))\n            this.fromOrientedRange(lastRange);\n    };\n    this.$initRangeList = function () {\n        if (this.rangeList)\n            return;\n        this.rangeList = new RangeList();\n        this.ranges = [];\n        this.rangeCount = 0;\n    };\n    this.getAllRanges = function () {\n        return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n    };\n    this.splitIntoLines = function () {\n        var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n        var newRanges = [];\n        for (var i = 0; i < ranges.length; i++) {\n            var range = ranges[i];\n            var row = range.start.row;\n            var endRow = range.end.row;\n            if (row === endRow) {\n                newRanges.push(range.clone());\n            }\n            else {\n                newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n                while (++row < endRow)\n                    newRanges.push(this.getLineRange(row, true));\n                newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n            }\n            if (i == 0 && !this.isBackwards())\n                newRanges = newRanges.reverse();\n        }\n        this.toSingleRange();\n        for (var i = newRanges.length; i--;)\n            this.addRange(newRanges[i]);\n    };\n    this.joinSelections = function () {\n        var ranges = this.rangeList.ranges;\n        var lastRange = ranges[ranges.length - 1];\n        var range = Range.fromPoints(ranges[0].start, lastRange.end);\n        this.toSingleRange();\n        this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n    };\n    this.toggleBlockSelection = function () {\n        if (this.rangeCount > 1) {\n            var ranges = this.rangeList.ranges;\n            var lastRange = ranges[ranges.length - 1];\n            var range = Range.fromPoints(ranges[0].start, lastRange.end);\n            this.toSingleRange();\n            this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n        }\n        else {\n            var cursor = this.session.documentToScreenPosition(this.cursor);\n            var anchor = this.session.documentToScreenPosition(this.anchor);\n            var rectSel = this.rectangularRangeBlock(cursor, anchor);\n            rectSel.forEach(this.addRange, this);\n        }\n    };\n    this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n        var rectSel = [];\n        var xBackwards = screenCursor.column < screenAnchor.column;\n        if (xBackwards) {\n            var startColumn = screenCursor.column;\n            var endColumn = screenAnchor.column;\n            var startOffsetX = screenCursor.offsetX;\n            var endOffsetX = screenAnchor.offsetX;\n        }\n        else {\n            var startColumn = screenAnchor.column;\n            var endColumn = screenCursor.column;\n            var startOffsetX = screenAnchor.offsetX;\n            var endOffsetX = screenCursor.offsetX;\n        }\n        var yBackwards = screenCursor.row < screenAnchor.row;\n        if (yBackwards) {\n            var startRow = screenCursor.row;\n            var endRow = screenAnchor.row;\n        }\n        else {\n            var startRow = screenAnchor.row;\n            var endRow = screenCursor.row;\n        }\n        if (startColumn < 0)\n            startColumn = 0;\n        if (startRow < 0)\n            startRow = 0;\n        if (startRow == endRow)\n            includeEmptyLines = true;\n        var docEnd;\n        for (var row = startRow; row <= endRow; row++) {\n            var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n            if (range.isEmpty()) {\n                if (docEnd && isSamePoint(range.end, docEnd))\n                    break;\n                docEnd = range.end;\n            }\n            range.cursor = xBackwards ? range.start : range.end;\n            rectSel.push(range);\n        }\n        if (yBackwards)\n            rectSel.reverse();\n        if (!includeEmptyLines) {\n            var end = rectSel.length - 1;\n            while (rectSel[end].isEmpty() && end > 0)\n                end--;\n            if (end > 0) {\n                var start = 0;\n                while (rectSel[start].isEmpty())\n                    start++;\n            }\n            for (var i = end; i >= start; i--) {\n                if (rectSel[i].isEmpty())\n                    rectSel.splice(i, 1);\n            }\n        }\n        return rectSel;\n    };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n    this.updateSelectionMarkers = function () {\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.addSelectionMarker = function (orientedRange) {\n        if (!orientedRange.cursor)\n            orientedRange.cursor = orientedRange.end;\n        var style = this.getSelectionStyle();\n        orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n        this.session.$selectionMarkers.push(orientedRange);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n        return orientedRange;\n    };\n    this.removeSelectionMarker = function (range) {\n        if (!range.marker)\n            return;\n        this.session.removeMarker(range.marker);\n        var index = this.session.$selectionMarkers.indexOf(range);\n        if (index != -1)\n            this.session.$selectionMarkers.splice(index, 1);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n    };\n    this.removeSelectionMarkers = function (ranges) {\n        var markerList = this.session.$selectionMarkers;\n        for (var i = ranges.length; i--;) {\n            var range = ranges[i];\n            if (!range.marker)\n                continue;\n            this.session.removeMarker(range.marker);\n            var index = markerList.indexOf(range);\n            if (index != -1)\n                markerList.splice(index, 1);\n        }\n        this.session.selectionMarkerCount = markerList.length;\n    };\n    this.$onAddRange = function (e) {\n        this.addSelectionMarker(e.range);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.$onRemoveRange = function (e) {\n        this.removeSelectionMarkers(e.ranges);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.$onMultiSelect = function (e) {\n        if (this.inMultiSelectMode)\n            return;\n        this.inMultiSelectMode = true;\n        this.setStyle(\"ace_multiselect\");\n        this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n        this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.$onSingleSelect = function (e) {\n        if (this.session.multiSelect.inVirtualMode)\n            return;\n        this.inMultiSelectMode = false;\n        this.unsetStyle(\"ace_multiselect\");\n        this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n        this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n        this._emit(\"changeSelection\");\n    };\n    this.$onMultiSelectExec = function (e) {\n        var command = e.command;\n        var editor = e.editor;\n        if (!editor.multiSelect)\n            return;\n        if (!command.multiSelectAction) {\n            var result = command.exec(editor, e.args || {});\n            editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n            editor.multiSelect.mergeOverlappingRanges();\n        }\n        else if (command.multiSelectAction == \"forEach\") {\n            result = editor.forEachSelection(command, e.args);\n        }\n        else if (command.multiSelectAction == \"forEachLine\") {\n            result = editor.forEachSelection(command, e.args, true);\n        }\n        else if (command.multiSelectAction == \"single\") {\n            editor.exitMultiSelectMode();\n            result = command.exec(editor, e.args || {});\n        }\n        else {\n            result = command.multiSelectAction(editor, e.args || {});\n        }\n        return result;\n    };\n    this.forEachSelection = function (cmd, args, options) {\n        if (this.inVirtualSelectionMode)\n            return;\n        var keepOrder = options && options.keepOrder;\n        var $byLines = options == true || options && options.$byLines;\n        var session = this.session;\n        var selection = this.selection;\n        var rangeList = selection.rangeList;\n        var ranges = (keepOrder ? selection : rangeList).ranges;\n        var result;\n        if (!ranges.length)\n            return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n        var reg = selection._eventRegistry;\n        selection._eventRegistry = {};\n        var tmpSel = new Selection(session);\n        this.inVirtualSelectionMode = true;\n        for (var i = ranges.length; i--;) {\n            if ($byLines) {\n                while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n                    i--;\n            }\n            tmpSel.fromOrientedRange(ranges[i]);\n            tmpSel.index = i;\n            this.selection = session.selection = tmpSel;\n            var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n            if (!result && cmdResult !== undefined)\n                result = cmdResult;\n            tmpSel.toOrientedRange(ranges[i]);\n        }\n        tmpSel.detach();\n        this.selection = session.selection = selection;\n        this.inVirtualSelectionMode = false;\n        selection._eventRegistry = reg;\n        selection.mergeOverlappingRanges();\n        if (selection.ranges[0])\n            selection.fromOrientedRange(selection.ranges[0]);\n        var anim = this.renderer.$scrollAnimation;\n        this.onCursorChange();\n        this.onSelectionChange();\n        if (anim && anim.from == anim.to)\n            this.renderer.animateScrolling(anim.from);\n        return result;\n    };\n    this.exitMultiSelectMode = function () {\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n            return;\n        this.multiSelect.toSingleRange();\n    };\n    this.getSelectedText = function () {\n        var text = \"\";\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var ranges = this.multiSelect.rangeList.ranges;\n            var buf = [];\n            for (var i = 0; i < ranges.length; i++) {\n                buf.push(this.session.getTextRange(ranges[i]));\n            }\n            var nl = this.session.getDocument().getNewLineCharacter();\n            text = buf.join(nl);\n            if (text.length == (buf.length - 1) * nl.length)\n                text = \"\";\n        }\n        else if (!this.selection.isEmpty()) {\n            text = this.session.getTextRange(this.getSelectionRange());\n        }\n        return text;\n    };\n    this.$checkMultiselectChange = function (e, anchor) {\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var range = this.multiSelect.ranges[0];\n            if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n                return;\n            var pos = anchor == this.multiSelect.anchor\n                ? range.cursor == range.start ? range.end : range.start\n                : range.cursor;\n            if (pos.row != anchor.row\n                || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n                this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n            else\n                this.multiSelect.mergeOverlappingRanges();\n        }\n    };\n    this.findAll = function (needle, options, additive) {\n        options = options || {};\n        options.needle = needle || options.needle;\n        if (options.needle == undefined) {\n            var range = this.selection.isEmpty()\n                ? this.selection.getWordRange()\n                : this.selection.getRange();\n            options.needle = this.session.getTextRange(range);\n        }\n        this.$search.set(options);\n        var ranges = this.$search.findAll(this.session);\n        if (!ranges.length)\n            return 0;\n        var selection = this.multiSelect;\n        if (!additive)\n            selection.toSingleRange(ranges[0]);\n        for (var i = ranges.length; i--;)\n            selection.addRange(ranges[i], true);\n        if (range && selection.rangeList.rangeAtPoint(range.start))\n            selection.addRange(range, true);\n        return ranges.length;\n    };\n    this.selectMoreLines = function (dir, skip) {\n        var range = this.selection.toOrientedRange();\n        var isBackwards = range.cursor == range.end;\n        var screenLead = this.session.documentToScreenPosition(range.cursor);\n        if (this.selection.$desiredColumn)\n            screenLead.column = this.selection.$desiredColumn;\n        var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n        if (!range.isEmpty()) {\n            var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n            var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n        }\n        else {\n            var anchor = lead;\n        }\n        if (isBackwards) {\n            var newRange = Range.fromPoints(lead, anchor);\n            newRange.cursor = newRange.start;\n        }\n        else {\n            var newRange = Range.fromPoints(anchor, lead);\n            newRange.cursor = newRange.end;\n        }\n        newRange.desiredColumn = screenLead.column;\n        if (!this.selection.inMultiSelectMode) {\n            this.selection.addRange(range);\n        }\n        else {\n            if (skip)\n                var toRemove = range.cursor;\n        }\n        this.selection.addRange(newRange);\n        if (toRemove)\n            this.selection.substractPoint(toRemove);\n    };\n    this.transposeSelections = function (dir) {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var all = sel.ranges;\n        for (var i = all.length; i--;) {\n            var range = all[i];\n            if (range.isEmpty()) {\n                var tmp_1 = session.getWordRange(range.start.row, range.start.column);\n                range.start.row = tmp_1.start.row;\n                range.start.column = tmp_1.start.column;\n                range.end.row = tmp_1.end.row;\n                range.end.column = tmp_1.end.column;\n            }\n        }\n        sel.mergeOverlappingRanges();\n        var words = [];\n        for (var i = all.length; i--;) {\n            var range = all[i];\n            words.unshift(session.getTextRange(range));\n        }\n        if (dir < 0)\n            words.unshift(words.pop());\n        else\n            words.push(words.shift());\n        for (var i = all.length; i--;) {\n            var range = all[i];\n            var tmp = range.clone();\n            session.replace(range, words[i]);\n            range.start.row = tmp.start.row;\n            range.start.column = tmp.start.column;\n        }\n        sel.fromOrientedRange(sel.ranges[0]);\n    };\n    this.selectMore = function (dir, skip, stopAtFirst) {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var range = sel.toOrientedRange();\n        if (range.isEmpty()) {\n            range = session.getWordRange(range.start.row, range.start.column);\n            range.cursor = dir == -1 ? range.start : range.end;\n            this.multiSelect.addRange(range);\n            if (stopAtFirst)\n                return;\n        }\n        var needle = session.getTextRange(range);\n        var newRange = find(session, needle, dir);\n        if (newRange) {\n            newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n            this.session.unfold(newRange);\n            this.multiSelect.addRange(newRange);\n            this.renderer.scrollCursorIntoView(null, 0.5);\n        }\n        if (skip)\n            this.multiSelect.substractPoint(range.cursor);\n    };\n    this.alignCursors = function () {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var ranges = sel.ranges;\n        var row = -1;\n        var sameRowRanges = ranges.filter(function (r) {\n            if (r.cursor.row == row)\n                return true;\n            row = r.cursor.row;\n        });\n        if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n            var range = this.selection.getRange();\n            var fr = range.start.row, lr = range.end.row;\n            var guessRange = fr == lr;\n            if (guessRange) {\n                var max = this.session.getLength();\n                var line;\n                do {\n                    line = this.session.getLine(lr);\n                } while (/[=:]/.test(line) && ++lr < max);\n                do {\n                    line = this.session.getLine(fr);\n                } while (/[=:]/.test(line) && --fr > 0);\n                if (fr < 0)\n                    fr = 0;\n                if (lr >= max)\n                    lr = max - 1;\n            }\n            var lines = this.session.removeFullLines(fr, lr);\n            lines = this.$reAlignText(lines, guessRange);\n            this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n            if (!guessRange) {\n                range.start.column = 0;\n                range.end.column = lines[lines.length - 1].length;\n            }\n            this.selection.setRange(range);\n        }\n        else {\n            sameRowRanges.forEach(function (r) {\n                sel.substractPoint(r.cursor);\n            });\n            var maxCol = 0;\n            var minSpace = Infinity;\n            var spaceOffsets = ranges.map(function (r) {\n                var p = r.cursor;\n                var line = session.getLine(p.row);\n                var spaceOffset = line.substr(p.column).search(/\\S/g);\n                if (spaceOffset == -1)\n                    spaceOffset = 0;\n                if (p.column > maxCol)\n                    maxCol = p.column;\n                if (spaceOffset < minSpace)\n                    minSpace = spaceOffset;\n                return spaceOffset;\n            });\n            ranges.forEach(function (r, i) {\n                var p = r.cursor;\n                var l = maxCol - p.column;\n                var d = spaceOffsets[i] - minSpace;\n                if (l > d)\n                    session.insert(p, lang.stringRepeat(\" \", l - d));\n                else\n                    session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n                r.start.column = r.end.column = maxCol;\n                r.start.row = r.end.row = p.row;\n                r.cursor = r.end;\n            });\n            sel.fromOrientedRange(ranges[0]);\n            this.renderer.updateCursor();\n            this.renderer.updateBackMarkers();\n        }\n    };\n    this.$reAlignText = function (lines, forceLeft) {\n        var isLeftAligned = true, isRightAligned = true;\n        var startW, textW, endW;\n        return lines.map(function (line) {\n            var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n            if (!m)\n                return [line];\n            if (startW == null) {\n                startW = m[1].length;\n                textW = m[2].length;\n                endW = m[3].length;\n                return m;\n            }\n            if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n                isRightAligned = false;\n            if (startW != m[1].length)\n                isLeftAligned = false;\n            if (startW > m[1].length)\n                startW = m[1].length;\n            if (textW < m[2].length)\n                textW = m[2].length;\n            if (endW > m[3].length)\n                endW = m[3].length;\n            return m;\n        }).map(forceLeft ? alignLeft :\n            isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n        function spaces(n) {\n            return lang.stringRepeat(\" \", n);\n        }\n        function alignLeft(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(textW - m[2].length + endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function alignRight(m) {\n            return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function unAlign(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n    };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n    var session = e.session;\n    if (session && !session.multiSelect) {\n        session.$selectionMarkers = [];\n        session.selection.$initRangeList();\n        session.multiSelect = session.selection;\n    }\n    this.multiSelect = session && session.multiSelect;\n    var oldSession = e.oldSession;\n    if (oldSession) {\n        oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n        oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n        oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n        oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n        oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n        oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n    }\n    if (session) {\n        session.multiSelect.on(\"addRange\", this.$onAddRange);\n        session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n        session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n        session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n        session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n        session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n    }\n    if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n        if (session.selection.inMultiSelectMode)\n            this.$onMultiSelect();\n        else\n            this.$onSingleSelect();\n    }\n};\nfunction MultiSelect(editor) {\n    if (editor.$multiselectOnSessionChange)\n        return;\n    editor.$onAddRange = editor.$onAddRange.bind(editor);\n    editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n    editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n    editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n    editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n    editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n    editor.$multiselectOnSessionChange(editor);\n    editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n    editor.on(\"mousedown\", onMouseDown);\n    editor.commands.addCommands(commands.defaultCommands);\n    addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n    if (!editor.textInput)\n        return;\n    var el = editor.textInput.getElement();\n    var altCursor = false;\n    event.addListener(el, \"keydown\", function (e) {\n        var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n        if (editor.$blockSelectEnabled && altDown) {\n            if (!altCursor) {\n                editor.renderer.setMouseCursor(\"crosshair\");\n                altCursor = true;\n            }\n        }\n        else if (altCursor) {\n            reset();\n        }\n    }, editor);\n    event.addListener(el, \"keyup\", reset, editor);\n    event.addListener(el, \"blur\", reset, editor);\n    function reset(e) {\n        if (altCursor) {\n            editor.renderer.setMouseCursor(\"\");\n            altCursor = false;\n        }\n    }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    enableMultiselect: {\n        set: function (val) {\n            MultiSelect(this);\n            if (val) {\n                this.on(\"mousedown\", onMouseDown);\n            }\n            else {\n                this.off(\"mousedown\", onMouseDown);\n            }\n        },\n        value: true\n    },\n    enableBlockSelect: {\n        set: function (val) {\n            this.$blockSelectEnabled = val;\n        },\n        value: true\n    }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n    this.foldingStartMarker = null;\n    this.foldingStopMarker = null;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.foldingStartMarker.test(line))\n            return \"start\";\n        if (foldStyle == \"markbeginend\"\n            && this.foldingStopMarker\n            && this.foldingStopMarker.test(line))\n            return \"end\";\n        return \"\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        return null;\n    };\n    this.indentationBlock = function (session, row, column) {\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1)\n            return;\n        var startColumn = column || line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            var level = session.getLine(row).search(re);\n            if (level == -1)\n                continue;\n            if (level <= startLevel) {\n                var token = session.getTokenAt(row, 0);\n                if (!token || token.type !== \"string\")\n                    break;\n            }\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n        var start = { row: row, column: column + 1 };\n        var end = session.$findClosingBracket(bracket, start, typeRe);\n        if (!end)\n            return;\n        var fw = session.foldWidgets[end.row];\n        if (fw == null)\n            fw = session.getFoldWidget(end.row);\n        if (fw == \"start\" && end.row > start.row) {\n            end.row--;\n            end.column = session.getLine(end.row).length;\n        }\n        return Range.fromPoints(start, end);\n    };\n    this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n        var end = { row: row, column: column };\n        var start = session.$findOpeningBracket(bracket, end);\n        if (!start)\n            return;\n        start.column++;\n        end.column--;\n        return Range.fromPoints(start, end);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){/**\n * ## Error Marker extension\n *\n * Provides inline error display functionality for Ace editor. Creates visual error markers that appear as tooltips\n * below editor lines containing annotations (errors, warnings, info). Enables navigation between error locations with\n * keyboard shortcuts and displays context-sensitive messages with proper styling based on annotation severity.\n *\n * @module\n */\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nvar nls = require(\"../config\").nls;\nfunction binarySearch(array, needle, comparator) {\n    var first = 0;\n    var last = array.length - 1;\n    while (first <= last) {\n        var mid = (first + last) >> 1;\n        var c = comparator(needle, array[mid]);\n        if (c > 0)\n            first = mid + 1;\n        else if (c < 0)\n            last = mid - 1;\n        else\n            return mid;\n    }\n    return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n    var annotations = session.getAnnotations().sort(Range.comparePoints);\n    if (!annotations.length)\n        return;\n    var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n    if (i < 0)\n        i = -i - 1;\n    if (i >= annotations.length)\n        i = dir > 0 ? 0 : annotations.length - 1;\n    else if (i === 0 && dir < 0)\n        i = annotations.length - 1;\n    var annotation = annotations[i];\n    if (!annotation || !dir)\n        return;\n    if (annotation.row === row) {\n        do {\n            annotation = annotations[i += dir];\n        } while (annotation && annotation.row === row);\n        if (!annotation)\n            return annotations.slice();\n    }\n    var matched = [];\n    row = annotation.row;\n    do {\n        matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n        annotation = annotations[i += dir];\n    } while (annotation && annotation.row == row);\n    return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n    var session = editor.session;\n    var pos = editor.getCursorPosition();\n    var row = pos.row;\n    var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n        return w.type == \"errorMarker\";\n    })[0];\n    if (oldWidget) {\n        oldWidget.destroy();\n    }\n    else {\n        row -= dir;\n    }\n    var annotations = findAnnotations(session, row, dir);\n    var gutterAnno;\n    if (annotations) {\n        var annotation = annotations[0];\n        pos.column = (annotation.pos && typeof annotation.column != \"number\"\n            ? annotation.pos.sc\n            : annotation.column) || 0;\n        pos.row = annotation.row;\n        gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n    }\n    else if (oldWidget) {\n        return;\n    }\n    else {\n        gutterAnno = {\n            displayText: [nls(\"error-marker.good-state\", \"Looks good!\")],\n            className: \"ace_ok\"\n        };\n    }\n    editor.session.unfold(pos.row);\n    editor.selection.moveToPosition(pos);\n    var w = {\n        row: pos.row,\n        fixedWidth: true,\n        coverGutter: true,\n        el: dom.createElement(\"div\"),\n        type: \"errorMarker\"\n    };\n    var el = w.el.appendChild(dom.createElement(\"div\"));\n    var arrow = w.el.appendChild(dom.createElement(\"div\"));\n    arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n    var left = editor.renderer.$cursorLayer\n        .getPixelPosition(pos).left;\n    arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n    w.el.className = \"error_widget_wrapper\";\n    el.className = \"error_widget \" + gutterAnno.className;\n    gutterAnno.displayText.forEach(function (annoTextLine, i) {\n        el.appendChild(dom.createTextNode(annoTextLine));\n        if (i < gutterAnno.displayText.length - 1) {\n            el.appendChild(dom.createElement(\"br\"));\n        }\n    });\n    el.appendChild(dom.createElement(\"div\"));\n    var kb = function (_, hashId, keyString) {\n        if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n            w.destroy();\n            return { command: \"null\" };\n        }\n    };\n    w.destroy = function () {\n        if (editor.$mouseHandler.isMousePressed)\n            return;\n        editor.keyBinding.removeKeyboardHandler(kb);\n        session.widgetManager.removeLineWidget(w);\n        editor.off(\"changeSelection\", w.destroy);\n        editor.off(\"changeSession\", w.destroy);\n        editor.off(\"mouseup\", w.destroy);\n        editor.off(\"change\", w.destroy);\n    };\n    editor.keyBinding.addKeyboardHandler(kb);\n    editor.on(\"changeSelection\", w.destroy);\n    editor.on(\"changeSession\", w.destroy);\n    editor.on(\"mouseup\", w.destroy);\n    editor.on(\"change\", w.destroy);\n    editor.session.widgetManager.addLineWidget(w);\n    w.el.onmousedown = editor.focus.bind(editor);\n    editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n    .error_widget_wrapper {\\n        background: inherit;\\n        color: inherit;\\n        border:none\\n    }\\n    .error_widget {\\n        border-top: solid 2px;\\n        border-bottom: solid 2px;\\n        margin: 5px 0;\\n        padding: 10px 40px;\\n        white-space: pre-wrap;\\n    }\\n    .error_widget.ace_error, .error_widget_arrow.ace_error{\\n        border-color: #ff5a5a\\n    }\\n    .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n        border-color: #F1D817\\n    }\\n    .error_widget.ace_info, .error_widget_arrow.ace_info{\\n        border-color: #5a5a5a\\n    }\\n    .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n        border-color: #5aaa5a\\n    }\\n    .error_widget_arrow {\\n        position: absolute;\\n        border: solid 5px;\\n        border-top-color: transparent!important;\\n        border-right-color: transparent!important;\\n        border-left-color: transparent!important;\\n        top: -5px;\\n    }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @namespace Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n    if (typeof el == \"string\") {\n        var _id = el;\n        el = document.getElementById(_id);\n        if (!el)\n            throw new Error(\"ace.edit can't find div #\" + _id);\n    }\n    if (el && el.env && el.env.editor instanceof Editor)\n        return el.env.editor;\n    var value = \"\";\n    if (el && /input|textarea/i.test(el.tagName)) {\n        var oldNode = el;\n        value = oldNode.value;\n        el = dom.createElement(\"pre\");\n        oldNode.parentNode.replaceChild(el, oldNode);\n    }\n    else if (el) {\n        value = el.textContent;\n        el.innerHTML = \"\";\n    }\n    var doc = exports.createEditSession(value);\n    var editor = new Editor(new Renderer(el), doc, options);\n    var env = {\n        document: doc,\n        editor: editor,\n        onResize: editor.resize.bind(editor, null)\n    };\n    if (oldNode)\n        env.textarea = oldNode;\n    editor.on(\"destroy\", function () {\n        env.editor.container.env = null; // prevent memory leak on old ie\n    });\n    editor.container.env = editor.env = env;\n    return editor;\n};\nexports.createEditSession = function (text, mode) {\n    var doc = new EditSession(text, mode);\n    doc.setUndoManager(new UndoManager());\n    return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nvar version = exports.config.version;\nexports.version = version;\n\n});            (function() {\n                ace.require([\"ace/ace\"], function(a) {\n                    if (a) {\n                        a.config.init(true);\n                        a.define = ace.define;\n                    }\n                    var global = (function () {\n                        return this;\n                    })();\n                    if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n                    if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n                    \n                    if (!global.ace)\n                        global.ace = a;\n                    for (var key in a) if (a.hasOwnProperty(key))\n                        global.ace[key] = a[key];\n                    global.ace[\"default\"] = global.ace;\n                    if ( true && module) {\n                        module.exports = global.ace;\n                    }\n                });\n            })();\n        \n\n/***/ }),\n\n/***/ 6489:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* module decorator */ module = __webpack_require__.nmd(module);\nace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\nvar VARIABLES = {\n    CURRENT_WORD: function (editor) {\n        return editor.session.getTextRange(editor.session.getWordRange());\n    },\n    SELECTION: function (editor, name, indentation) {\n        var text = editor.session.getTextRange();\n        if (indentation)\n            return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n        return text;\n    },\n    CURRENT_LINE: function (editor) {\n        return editor.session.getLine(editor.getCursorPosition().row);\n    },\n    PREV_LINE: function (editor) {\n        return editor.session.getLine(editor.getCursorPosition().row - 1);\n    },\n    LINE_INDEX: function (editor) {\n        return editor.getCursorPosition().row;\n    },\n    LINE_NUMBER: function (editor) {\n        return editor.getCursorPosition().row + 1;\n    },\n    SOFT_TABS: function (editor) {\n        return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n    },\n    TAB_SIZE: function (editor) {\n        return editor.session.getTabSize();\n    },\n    CLIPBOARD: function (editor) {\n        return clipboard.getText && clipboard.getText();\n    },\n    FILENAME: function (editor) {\n        return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n    },\n    FILENAME_BASE: function (editor) {\n        return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n    },\n    DIRECTORY: function (editor) {\n        return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n    },\n    FILEPATH: function (editor) { return \"/not implemented.txt\"; },\n    WORKSPACE_NAME: function () { return \"Unknown\"; },\n    FULLNAME: function () { return \"Unknown\"; },\n    BLOCK_COMMENT_START: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.blockComment && mode.blockComment.start || \"\";\n    },\n    BLOCK_COMMENT_END: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.blockComment && mode.blockComment.end || \"\";\n    },\n    LINE_COMMENT: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.lineCommentStart || \"\";\n    },\n    CURRENT_YEAR: date.bind(null, { year: \"numeric\" }),\n    CURRENT_YEAR_SHORT: date.bind(null, { year: \"2-digit\" }),\n    CURRENT_MONTH: date.bind(null, { month: \"numeric\" }),\n    CURRENT_MONTH_NAME: date.bind(null, { month: \"long\" }),\n    CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: \"short\" }),\n    CURRENT_DATE: date.bind(null, { day: \"2-digit\" }),\n    CURRENT_DAY_NAME: date.bind(null, { weekday: \"long\" }),\n    CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: \"short\" }),\n    CURRENT_HOUR: date.bind(null, { hour: \"2-digit\", hour12: false }),\n    CURRENT_MINUTE: date.bind(null, { minute: \"2-digit\" }),\n    CURRENT_SECOND: date.bind(null, { second: \"2-digit\" })\n};\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\nfunction date(dateFormat) {\n    var str = new Date().toLocaleString(\"en-us\", dateFormat);\n    return str.length == 1 ? \"0\" + str : str;\n}\nvar SnippetManager = /** @class */ (function () {\n    function SnippetManager() {\n        this.snippetMap = {};\n        this.snippetNameMap = {};\n        this.variables = VARIABLES;\n    }\n    SnippetManager.prototype.getTokenizer = function () {\n        return SnippetManager[\"$tokenizer\"] || this.createTokenizer();\n    };\n    SnippetManager.prototype.createTokenizer = function () {\n        function TabstopToken(str) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str))\n                return [{ tabstopId: parseInt(str, 10) }];\n            return [{ text: str }];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        var formatMatcher = {\n            regex: \"/(\" + escape(\"/\") + \"+)/\",\n            onMatch: function (val, state, stack) {\n                var ts = stack[0];\n                ts.fmtString = true;\n                ts.guard = val.slice(1, -1);\n                ts.flag = \"\";\n                return \"\";\n            },\n            next: \"formatString\"\n        };\n        SnippetManager[\"$tokenizer\"] = new Tokenizer({\n            start: [\n                { regex: /\\\\./, onMatch: function (val, state, stack) {\n                        var ch = val[1];\n                        if (ch == \"}\" && stack.length) {\n                            val = ch;\n                        }\n                        else if (\"`$\\\\\".indexOf(ch) != -1) {\n                            val = ch;\n                        }\n                        return [val];\n                    } },\n                { regex: /}/, onMatch: function (val, state, stack) {\n                        return [stack.length ? stack.shift() : val];\n                    } },\n                { regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken },\n                { regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function (str, state, stack) {\n                        var t = TabstopToken(str.substr(1));\n                        stack.unshift(t[0]);\n                        return t;\n                    }, next: \"snippetVar\" },\n                { regex: /\\n/, token: \"newline\", merge: false }\n            ],\n            snippetVar: [\n                { regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function (val, state, stack) {\n                        var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function (operator) {\n                            return operator.length == 2 ? operator[1] : \"\\x00\";\n                        }).split(\"\\x00\").map(function (value) {\n                            return { value: value };\n                        });\n                        stack[0].choices = choices;\n                        return [choices[0]];\n                    }, next: \"start\" },\n                formatMatcher,\n                { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\" }\n            ],\n            formatString: [\n                { regex: /:/, onMatch: function (val, state, stack) {\n                        if (stack.length && stack[0].expectElse) {\n                            stack[0].expectElse = false;\n                            stack[0].ifEnd = { elseEnd: stack[0] };\n                            return [stack[0].ifEnd];\n                        }\n                        return \":\";\n                    } },\n                { regex: /\\\\./, onMatch: function (val, state, stack) {\n                        var ch = val[1];\n                        if (ch == \"}\" && stack.length)\n                            val = ch;\n                        else if (\"`$\\\\\".indexOf(ch) != -1)\n                            val = ch;\n                        else if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\t\";\n                        else if (\"ulULE\".indexOf(ch) != -1)\n                            val = { changeCase: ch, local: ch > \"a\" };\n                        return [val];\n                    } },\n                { regex: \"/\\\\w*}\", onMatch: function (val, state, stack) {\n                        var next = stack.shift();\n                        if (next)\n                            next.flag = val.slice(1, -1);\n                        this.next = next && next.tabstopId ? \"start\" : \"\";\n                        return [next || val];\n                    }, next: \"start\" },\n                { regex: /\\$(?:\\d+|\\w+)/, onMatch: function (val, state, stack) {\n                        return [{ text: val.slice(1) }];\n                    } },\n                { regex: /\\${\\w+/, onMatch: function (val, state, stack) {\n                        var token = { text: val.slice(2) };\n                        stack.unshift(token);\n                        return [token];\n                    }, next: \"formatStringVar\" },\n                { regex: /\\n/, token: \"newline\", merge: false },\n                { regex: /}/, onMatch: function (val, state, stack) {\n                        var next = stack.shift();\n                        this.next = next && next.tabstopId ? \"start\" : \"\";\n                        return [next || val];\n                    }, next: \"start\" }\n            ],\n            formatStringVar: [\n                { regex: /:\\/\\w+}/, onMatch: function (val, state, stack) {\n                        var ts = stack[0];\n                        ts.formatFunction = val.slice(2, -1);\n                        return [stack.shift()];\n                    }, next: \"formatString\" },\n                formatMatcher,\n                { regex: /:[\\?\\-+]?/, onMatch: function (val, state, stack) {\n                        if (val[1] == \"+\")\n                            stack[0].ifEnd = stack[0];\n                        if (val[1] == \"?\")\n                            stack[0].expectElse = true;\n                    }, next: \"formatString\" },\n                { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\" }\n            ]\n        });\n        return SnippetManager[\"$tokenizer\"];\n    };\n    SnippetManager.prototype.tokenizeTmSnippet = function (str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n            return x.value || x;\n        });\n    };\n    SnippetManager.prototype.getVariableValue = function (editor, name, indentation) {\n        if (/^\\d+$/.test(name))\n            return (this.variables.__ || {})[name] || \"\";\n        if (/^[A-Z]\\d+$/.test(name))\n            return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n        name = name.replace(/^TM_/, \"\");\n        if (!this.variables.hasOwnProperty(name))\n            return \"\";\n        var value = this.variables[name];\n        if (typeof value == \"function\")\n            value = this.variables[name](editor, name, indentation);\n        return value == null ? \"\" : value;\n    };\n    SnippetManager.prototype.tmStrFormat = function (str, ch, editor) {\n        if (!ch.fmt)\n            return str;\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n        var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n        var _self = this;\n        var formatted = str.replace(re, function () {\n            var oldArgs = _self.variables.__;\n            _self.variables.__ = [].slice.call(arguments);\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    }\n                    else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                }\n                else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                }\n                else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            _self.variables.__ = oldArgs;\n            return fmtParts.join(\"\");\n        });\n        return formatted;\n    };\n    SnippetManager.prototype.tmFormatFunction = function (str, ch, editor) {\n        if (ch.formatFunction == \"upcase\")\n            return str.toUpperCase();\n        if (ch.formatFunction == \"downcase\")\n            return str.toLowerCase();\n        return str;\n    };\n    SnippetManager.prototype.resolveVariables = function (snippet, editor) {\n        var result = [];\n        var indentation = \"\";\n        var afterNewLine = true;\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n                if (ch == \"\\n\") {\n                    afterNewLine = true;\n                    indentation = \"\";\n                }\n                else if (afterNewLine) {\n                    indentation = /^\\t*/.exec(ch)[0];\n                    afterNewLine = /\\S/.test(ch);\n                }\n                continue;\n            }\n            if (!ch)\n                continue;\n            afterNewLine = false;\n            if (ch.fmtString) {\n                var j = snippet.indexOf(ch, i + 1);\n                if (j == -1)\n                    j = snippet.length;\n                ch.fmt = snippet.slice(i + 1, j);\n                i = j;\n            }\n            if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n                if (ch.fmtString)\n                    value = this.tmStrFormat(value, ch, editor);\n                if (ch.formatFunction)\n                    value = this.tmFormatFunction(value, ch, editor);\n                if (value && !ch.ifEnd) {\n                    result.push(value);\n                    gotoNext(ch);\n                }\n                else if (!value && ch.ifEnd) {\n                    gotoNext(ch.ifEnd);\n                }\n            }\n            else if (ch.elseEnd) {\n                gotoNext(ch.elseEnd);\n            }\n            else if (ch.tabstopId != null) {\n                result.push(ch);\n            }\n            else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n    SnippetManager.prototype.getDisplayTextForSnippet = function (editor, snippetText) {\n        var processedSnippet = processSnippetText.call(this, editor, snippetText);\n        return processedSnippet.text;\n    };\n    SnippetManager.prototype.insertSnippetForSelection = function (editor, snippetText, options) {\n        if (options === void 0) { options = {}; }\n        var processedSnippet = processSnippetText.call(this, editor, snippetText, options);\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, processedSnippet.text);\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId);\n    };\n    SnippetManager.prototype.insertSnippet = function (editor, snippetText, options) {\n        if (options === void 0) { options = {}; }\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText, options);\n        editor.forEachSelection(function () {\n            self.insertSnippetForSelection(editor, snippetText, options);\n        }, null, { keepOrder: true });\n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n    SnippetManager.prototype.$getScope = function (editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp)\n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        return scope;\n    };\n    SnippetManager.prototype.getActiveScopes = function (editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n    SnippetManager.prototype.expandWithTab = function (editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function () {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, { keepOrder: true });\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    SnippetManager.prototype.expandSnippetForSelection = function (editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function (scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n    SnippetManager.prototype.findMatchingSnippet = function (snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n    SnippetManager.prototype.register = function (snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        if (!snippets)\n            snippets = [];\n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            }\n            else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n            if (s.prefix)\n                s.tabTrigger = s.prefix;\n            if (!s.content && s.body)\n                s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger);\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger);\n        }\n        if (Array.isArray(snippets)) {\n            snippets.forEach(addSnippet);\n        }\n        else {\n            Object.keys(snippets).forEach(function (key) {\n                addSnippet(snippets[key]);\n            });\n        }\n        this._signal(\"registerSnippets\", { scope: scope });\n    };\n    SnippetManager.prototype.unregister = function (snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope || scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope || scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    SnippetManager.prototype.parseSnippetFile = function (str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], /**@type{Snippet}*/ snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                }\n                catch (e) { }\n            }\n            if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            }\n            else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                }\n                else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                }\n                else if (key) {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    SnippetManager.prototype.getSnippetByName = function (name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function (scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n    return SnippetManager;\n}());\noop.implement(SnippetManager.prototype, EventEmitter);\nvar processSnippetText = function (editor, snippetText, options) {\n    if (options === void 0) { options = {}; }\n    var cursor = editor.getCursorPosition();\n    var line = editor.session.getLine(cursor.row);\n    var tabString = editor.session.getTabString();\n    var indentString = line.match(/^\\s*/)[0];\n    if (cursor.column < indentString.length)\n        indentString = indentString.slice(0, cursor.column);\n    snippetText = snippetText.replace(/\\r/g, \"\");\n    var tokens = this.tokenizeTmSnippet(snippetText);\n    tokens = this.resolveVariables(tokens, editor);\n    tokens = tokens.map(function (x) {\n        if (x == \"\\n\" && !options.excludeExtraIndent)\n            return x + indentString;\n        if (typeof x == \"string\")\n            return x.replace(/\\t/g, tabString);\n        return x;\n    });\n    var tabstops = [];\n    tokens.forEach(function (p, i) {\n        if (typeof p != \"object\")\n            return;\n        var id = p.tabstopId;\n        var ts = tabstops[id];\n        if (!ts) {\n            ts = tabstops[id] = [];\n            ts.index = id;\n            ts.value = \"\";\n            ts.parents = {};\n        }\n        if (ts.indexOf(p) !== -1)\n            return;\n        if (p.choices && !ts.choices)\n            ts.choices = p.choices;\n        ts.push(p);\n        var i1 = tokens.indexOf(p, i + 1);\n        if (i1 === -1)\n            return;\n        var value = tokens.slice(i + 1, i1);\n        var isNested = value.some(function (t) { return typeof t === \"object\"; });\n        if (isNested && !ts.value) {\n            ts.value = value;\n        }\n        else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n            ts.value = value.join(\"\");\n        }\n    });\n    tabstops.forEach(function (ts) { ts.length = 0; });\n    var expanding = {};\n    function copyValue(val) {\n        var copy = [];\n        for (var i = 0; i < val.length; i++) {\n            var p = val[i];\n            if (typeof p == \"object\") {\n                if (expanding[p.tabstopId])\n                    continue;\n                var j = val.lastIndexOf(p, i - 1);\n                p = copy[j] || { tabstopId: p.tabstopId };\n            }\n            copy[i] = p;\n        }\n        return copy;\n    }\n    for (var i = 0; i < tokens.length; i++) {\n        var p = tokens[i];\n        if (typeof p != \"object\")\n            continue;\n        var id = p.tabstopId;\n        var ts = tabstops[id];\n        var i1 = tokens.indexOf(p, i + 1);\n        if (expanding[id]) {\n            if (expanding[id] === p) {\n                delete expanding[id];\n                Object.keys(expanding).forEach(function (parentId) {\n                    ts.parents[parentId] = true;\n                });\n            }\n            continue;\n        }\n        expanding[id] = p;\n        var value = ts.value;\n        if (typeof value !== \"string\")\n            value = copyValue(value);\n        else if (p.fmt)\n            value = this.tmStrFormat(value, p, editor);\n        tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n        if (ts.indexOf(p) === -1)\n            ts.push(p);\n    }\n    var row = 0, column = 0;\n    var text = \"\";\n    tokens.forEach(function (t) {\n        if (typeof t === \"string\") {\n            var lines = t.split(\"\\n\");\n            if (lines.length > 1) {\n                column = lines[lines.length - 1].length;\n                row += lines.length - 1;\n            }\n            else\n                column += t.length;\n            text += t;\n        }\n        else if (t) {\n            if (!t.start)\n                t.start = { row: row, column: column };\n            else\n                t.end = { row: row, column: column };\n        }\n    });\n    return {\n        text: text,\n        tabstops: tabstops,\n        tokens: tokens\n    };\n};\nvar TabstopManager = /** @class */ (function () {\n    function TabstopManager(editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        if (editor.tabstopManager)\n            return editor.tabstopManager;\n        editor.tabstopManager = this;\n        this.$onChange = this.onChange.bind(this);\n        this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n        this.$onChangeSession = this.onChangeSession.bind(this);\n        this.$onAfterExec = this.onAfterExec.bind(this);\n        this.attach(editor);\n    }\n    TabstopManager.prototype.attach = function (editor) {\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n        this.editor = editor;\n        this.session = editor.session;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    TabstopManager.prototype.detach = function () {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges.length = 0;\n        this.tabstops.length = 0;\n        this.selectedTabstop = null;\n        this.editor.off(\"change\", this.$onChange);\n        this.editor.off(\"changeSelection\", this.$onChangeSelection);\n        this.editor.off(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.off(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.session = null;\n        this.editor = null;\n    };\n    TabstopManager.prototype.onChange = function (delta) {\n        var isRemove = delta.action[0] == \"r\";\n        var selectedTabstop = this.selectedTabstop || {};\n        var parents = selectedTabstop.parents || {};\n        var tabstops = this.tabstops.slice();\n        for (var i = 0; i < tabstops.length; i++) {\n            var ts = tabstops[i];\n            var active = ts == selectedTabstop || parents[ts.index];\n            ts.rangeList.$bias = active ? 0 : 1;\n            if (delta.action == \"remove\" && ts !== selectedTabstop) {\n                var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n                var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n                startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n                var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n                endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n                var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n                for (var j = 0; j < toRemove.length; j++)\n                    this.removeRange(toRemove[j]);\n            }\n            ts.rangeList.$onChange(delta);\n        }\n        var session = this.session;\n        if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n            this.detach();\n    };\n    TabstopManager.prototype.updateLinkedFields = function () {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n            return;\n        this.$inChange = true;\n        var session = this.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = 0; i < ts.length; i++) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var original = range.original;\n            var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    TabstopManager.prototype.onAfterExec = function (e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    TabstopManager.prototype.onChangeSelection = function () {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = 0; i < this.ranges.length; i++) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    TabstopManager.prototype.onChangeSession = function () {\n        this.detach();\n    };\n    TabstopManager.prototype.tabNext = function (dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        this.updateTabstopMarkers();\n        if (index === 0) {\n            this.detach();\n        }\n    };\n    TabstopManager.prototype.selectTabstop = function (index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        this.selectedTabstop = ts;\n        var range = ts.firstNonLinked || ts;\n        if (ts.choices)\n            range.cursor = range.start;\n        if (!this.editor.inVirtualSelectionMode) {\n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(range);\n            for (var i = 0; i < ts.length; i++) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n        }\n        else {\n            this.editor.selection.fromOrientedRange(range);\n        }\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        if (this.selectedTabstop && this.selectedTabstop.choices)\n            this.editor.execCommand(\"startAutocomplete\", { matches: this.selectedTabstop.choices });\n    };\n    TabstopManager.prototype.addTabstops = function (tabstops, start, end) {\n        var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        var snippetId = this.snippetId = (this.snippetId || 0) + 1;\n        tabstops.forEach(function (ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n            dest.snippetId = snippetId;\n            for (var i = 0; i < ts.length; i++) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString || (dest.firstNonLinked && useLink)) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                }\n                else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n            dest.rangeList = dest.rangeList || new RangeList();\n            dest.rangeList.$bias = 0;\n            dest.rangeList.addList(dest);\n        }, this);\n        if (arg.length > 2) {\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n    TabstopManager.prototype.addTabstopMarkers = function (ts) {\n        var session = this.session;\n        ts.forEach(function (range) {\n            if (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    TabstopManager.prototype.removeTabstopMarkers = function (ts) {\n        var session = this.session;\n        ts.forEach(function (range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    TabstopManager.prototype.updateTabstopMarkers = function () {\n        if (!this.selectedTabstop)\n            return;\n        var currentSnippetId = this.selectedTabstop.snippetId;\n        if (this.selectedTabstop.index === 0) {\n            currentSnippetId--;\n        }\n        this.tabstops.forEach(function (ts) {\n            if (ts.snippetId === currentSnippetId)\n                this.addTabstopMarkers(ts);\n            else\n                this.removeTabstopMarkers(ts);\n        }, this);\n    };\n    TabstopManager.prototype.removeRange = function (range) {\n        var i = range.tabstop.indexOf(range);\n        if (i != -1)\n            range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        if (i != -1)\n            this.ranges.splice(i, 1);\n        i = range.tabstop.rangeList.ranges.indexOf(range);\n        if (i != -1)\n            range.tabstop.splice(i, 1);\n        this.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n    return TabstopManager;\n}());\nTabstopManager.prototype.keyboardHandler = new HashHandler();\nTabstopManager.prototype.keyboardHandler.bindKeys({\n    \"Tab\": function (editor) {\n        if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n            return;\n        editor.tabstopManager.tabNext(1);\n        editor.renderer.scrollCursorIntoView();\n    },\n    \"Shift-Tab\": function (editor) {\n        editor.tabstopManager.tabNext(-1);\n        editor.renderer.scrollCursorIntoView();\n    },\n    \"Esc\": function (editor) {\n        editor.tabstopManager.detach();\n    }\n});\nvar movePoint = function (point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\nvar moveRelative = function (point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\ndom.importCssString(\"\\n.ace_snippet-marker {\\n    -moz-box-sizing: border-box;\\n    box-sizing: border-box;\\n    background: rgba(194, 193, 208, 0.09);\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\n    position: absolute;\\n}\", \"snippets.css\", false);\nexports.snippetManager = new SnippetManager();\nvar Editor = require(\"./editor\").Editor;\n(function () {\n    this.insertSnippet = function (content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function (options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\nvar nls = require(\"../config\").nls;\nvar userAgent = require(\"./../lib/useragent\");\nvar getAriaId = function (index) {\n    return \"suggest-aria-id:\".concat(index);\n};\nvar popupAriaRole = userAgent.isSafari ? \"menu\" : \"listbox\";\nvar optionAriaRole = userAgent.isSafari ? \"menuitem\" : \"option\";\nvar ariaActiveState = userAgent.isSafari ? \"aria-current\" : \"aria-selected\";\nvar $singleLineEditor = function (el) {\n    var renderer = new Renderer(el);\n    renderer.$maxLines = 4;\n    var editor = new Editor(renderer);\n    editor.setHighlightActiveLine(false);\n    editor.setShowPrintMargin(false);\n    editor.renderer.setShowGutter(false);\n    editor.renderer.setHighlightGutterLine(false);\n    editor.$mouseHandler.$focusTimeout = 0;\n    editor.$highlightTagPending = true;\n    return editor;\n};\nvar AcePopup = /** @class */ (function () {\n    function AcePopup(parentNode) {\n        var el = dom.createElement(\"div\");\n        var popup = $singleLineEditor(el);\n        if (parentNode) {\n            parentNode.appendChild(el);\n        }\n        el.style.display = \"none\";\n        popup.renderer.content.style.cursor = \"default\";\n        popup.renderer.setStyle(\"ace_autocomplete\");\n        popup.renderer.$textLayer.element.setAttribute(\"role\", popupAriaRole);\n        popup.renderer.$textLayer.element.setAttribute(\"aria-roledescription\", nls(\"autocomplete.popup.aria-roledescription\", \"Autocomplete suggestions\"));\n        popup.renderer.$textLayer.element.setAttribute(\"aria-label\", nls(\"autocomplete.popup.aria-label\", \"Autocomplete suggestions\"));\n        popup.renderer.textarea.setAttribute(\"aria-hidden\", \"true\");\n        popup.setOption(\"displayIndentGuides\", false);\n        popup.setOption(\"dragDelay\", 150);\n        var noop = function () { };\n        popup.focus = noop;\n        popup.$isFocused = true;\n        popup.renderer.$cursorLayer.restartTimer = noop;\n        popup.renderer.$cursorLayer.element.style.opacity = \"0\";\n        popup.renderer.$maxLines = 8;\n        popup.renderer.$keepTextAreaAtCursor = false;\n        popup.setHighlightActiveLine(false);\n        popup.session.highlight(\"\");\n        popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n        popup.on(\"mousedown\", function (e) {\n            var pos = e.getDocumentPosition();\n            popup.selection.moveToPosition(pos);\n            selectionMarker.start.row = selectionMarker.end.row = pos.row;\n            e.stop();\n        });\n        var lastMouseEvent;\n        var hoverMarker = new Range(-1, 0, -1, Infinity);\n        var selectionMarker = new Range(-1, 0, -1, Infinity);\n        selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n        popup.setSelectOnHover = function (val) {\n            if (!val) {\n                hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n            }\n            else if (hoverMarker.id) {\n                popup.session.removeMarker(hoverMarker.id);\n                hoverMarker.id = null;\n            }\n        };\n        popup.setSelectOnHover(false);\n        popup.on(\"mousemove\", function (e) {\n            if (!lastMouseEvent) {\n                lastMouseEvent = e;\n                return;\n            }\n            if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n                return;\n            }\n            lastMouseEvent = e;\n            lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n            popup.isMouseOver = true;\n            var row = lastMouseEvent.getDocumentPosition().row;\n            if (hoverMarker.start.row != row) {\n                if (!hoverMarker.id)\n                    popup.setRow(row);\n                setHoverMarker(row);\n            }\n        });\n        popup.renderer.on(\"beforeRender\", function () {\n            if (lastMouseEvent && hoverMarker.start.row != -1) {\n                lastMouseEvent.$pos = null;\n                var row = lastMouseEvent.getDocumentPosition().row;\n                if (!hoverMarker.id)\n                    popup.setRow(row);\n                setHoverMarker(row, true);\n            }\n        });\n        popup.renderer.on(\"afterRender\", function () {\n            var t = popup.renderer.$textLayer;\n            for (var row = t.config.firstRow, l = t.config.lastRow; row <= l; row++) {\n                var popupRowElement = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n                popupRowElement.setAttribute(\"role\", optionAriaRole);\n                popupRowElement.setAttribute(\"aria-roledescription\", nls(\"autocomplete.popup.item.aria-roledescription\", \"item\"));\n                popupRowElement.setAttribute(\"aria-setsize\", popup.data.length);\n                popupRowElement.setAttribute(\"aria-describedby\", \"doc-tooltip\");\n                popupRowElement.setAttribute(\"aria-posinset\", row + 1);\n                var rowData = popup.getData(row);\n                if (rowData) {\n                    var ariaLabel = \"\".concat(rowData.caption || rowData.value).concat(rowData.meta ? \", \".concat(rowData.meta) : '');\n                    popupRowElement.setAttribute(\"aria-label\", ariaLabel);\n                }\n                var highlightedSpans = popupRowElement.querySelectorAll(\".ace_completion-highlight\");\n                highlightedSpans.forEach(function (span) {\n                    span.setAttribute(\"role\", \"mark\");\n                });\n            }\n        });\n        popup.renderer.on(\"afterRender\", function () {\n            var row = popup.getRow();\n            var t = popup.renderer.$textLayer;\n            var selected = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n            var el = document.activeElement; // Active element is textarea of main editor\n            if (selected !== popup.selectedNode && popup.selectedNode) {\n                dom.removeCssClass(popup.selectedNode, \"ace_selected\");\n                popup.selectedNode.removeAttribute(ariaActiveState);\n                popup.selectedNode.removeAttribute(\"id\");\n            }\n            el.removeAttribute(\"aria-activedescendant\");\n            popup.selectedNode = selected;\n            if (selected) {\n                var ariaId = getAriaId(row);\n                dom.addCssClass(selected, \"ace_selected\");\n                selected.id = ariaId;\n                t.element.setAttribute(\"aria-activedescendant\", ariaId);\n                el.setAttribute(\"aria-activedescendant\", ariaId);\n                selected.setAttribute(ariaActiveState, \"true\");\n            }\n        });\n        var hideHoverMarker = function () { setHoverMarker(-1); };\n        var setHoverMarker = function (row, suppressRedraw) {\n            if (row !== hoverMarker.start.row) {\n                hoverMarker.start.row = hoverMarker.end.row = row;\n                if (!suppressRedraw)\n                    popup.session._emit(\"changeBackMarker\");\n                popup._emit(\"changeHoverMarker\");\n            }\n        };\n        popup.getHoveredRow = function () {\n            return hoverMarker.start.row;\n        };\n        event.addListener(popup.container, \"mouseout\", function () {\n            popup.isMouseOver = false;\n            hideHoverMarker();\n        });\n        popup.on(\"hide\", hideHoverMarker);\n        popup.on(\"changeSelection\", hideHoverMarker);\n        popup.session.doc.getLength = function () {\n            return popup.data.length;\n        };\n        popup.session.doc.getLine = function (i) {\n            var data = popup.data[i];\n            if (typeof data == \"string\")\n                return data;\n            return (data && data.value) || \"\";\n        };\n        var bgTokenizer = popup.session.bgTokenizer;\n        bgTokenizer.$tokenizeRow = function (row) {\n            var data = popup.data[row];\n            var tokens = [];\n            if (!data)\n                return tokens;\n            if (typeof data == \"string\")\n                data = { value: data };\n            var caption = data.caption || data.value || data.name;\n            function addToken(value, className) {\n                value && tokens.push({\n                    type: (data.className || \"\") + (className || \"\"),\n                    value: value\n                });\n            }\n            var lower = caption.toLowerCase();\n            var filterText = (popup.filterText || \"\").toLowerCase();\n            var lastIndex = 0;\n            var lastI = 0;\n            for (var i = 0; i <= filterText.length; i++) {\n                if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n                    var sub = filterText.slice(lastI, i);\n                    lastI = i;\n                    var index = lower.indexOf(sub, lastIndex);\n                    if (index == -1)\n                        continue;\n                    addToken(caption.slice(lastIndex, index), \"\");\n                    lastIndex = index + sub.length;\n                    addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n                }\n            }\n            addToken(caption.slice(lastIndex, caption.length), \"\");\n            tokens.push({ type: \"completion-spacer\", value: \" \" });\n            if (data.meta)\n                tokens.push({ type: \"completion-meta\", value: data.meta });\n            if (data.message)\n                tokens.push({ type: \"completion-message\", value: data.message });\n            return tokens;\n        };\n        bgTokenizer.$updateOnChange = noop;\n        bgTokenizer.start = noop;\n        popup.session.$computeWidth = function () {\n            return this.screenWidth = 0;\n        };\n        popup.isOpen = false;\n        popup.isTopdown = false;\n        popup.autoSelect = true;\n        popup.filterText = \"\";\n        popup.isMouseOver = false;\n        popup.data = [];\n        popup.setData = function (list, filterText) {\n            popup.filterText = filterText || \"\";\n            popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n            popup.data = list || [];\n            popup.setRow(0);\n        };\n        popup.getData = function (row) {\n            return popup.data[row];\n        };\n        popup.getRow = function () {\n            return selectionMarker.start.row;\n        };\n        popup.setRow = function (line) {\n            line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, line));\n            if (selectionMarker.start.row != line) {\n                popup.selection.clearSelection();\n                selectionMarker.start.row = selectionMarker.end.row = line || 0;\n                popup.session._emit(\"changeBackMarker\");\n                popup.moveCursorTo(line || 0, 0);\n                if (popup.isOpen)\n                    popup._signal(\"select\");\n            }\n        };\n        popup.on(\"changeSelection\", function () {\n            if (popup.isOpen)\n                popup.setRow(popup.selection.lead.row);\n            popup.renderer.scrollCursorIntoView();\n        });\n        popup.hide = function () {\n            this.container.style.display = \"none\";\n            popup.anchorPos = null;\n            popup.anchor = null;\n            if (popup.isOpen) {\n                popup.isOpen = false;\n                this._signal(\"hide\");\n            }\n        };\n        popup.tryShow = function (pos, lineHeight, anchor, forceShow) {\n            if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor &&\n                popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left &&\n                popup.anchor === anchor) {\n                return true;\n            }\n            var el = this.container;\n            var scrollBarSize = this.renderer.scrollBar.width || 10;\n            var screenHeight = window.innerHeight - scrollBarSize;\n            var screenWidth = window.innerWidth - scrollBarSize;\n            var renderer = this.renderer;\n            var maxH = renderer.$maxLines * lineHeight * 1.4;\n            var dims = { top: 0, bottom: 0, left: 0 };\n            var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight;\n            var spaceAbove = pos.top - 3 * this.$borderSize;\n            if (!anchor) {\n                if (spaceAbove <= spaceBelow || spaceBelow >= maxH) {\n                    anchor = \"bottom\";\n                }\n                else {\n                    anchor = \"top\";\n                }\n            }\n            if (anchor === \"top\") {\n                dims.bottom = pos.top - this.$borderSize;\n                dims.top = dims.bottom - maxH;\n            }\n            else if (anchor === \"bottom\") {\n                dims.top = pos.top + lineHeight + this.$borderSize;\n                dims.bottom = dims.top + maxH;\n            }\n            var fitsX = dims.top >= 0 && dims.bottom <= screenHeight;\n            if (!forceShow && !fitsX) {\n                return false;\n            }\n            if (!fitsX) {\n                if (anchor === \"top\") {\n                    renderer.$maxPixelHeight = spaceAbove;\n                }\n                else {\n                    renderer.$maxPixelHeight = spaceBelow;\n                }\n            }\n            else {\n                renderer.$maxPixelHeight = null;\n            }\n            if (anchor === \"top\") {\n                el.style.top = \"\";\n                el.style.bottom = (screenHeight + scrollBarSize - dims.bottom) + \"px\";\n                popup.isTopdown = false;\n            }\n            else {\n                el.style.top = dims.top + \"px\";\n                el.style.bottom = \"\";\n                popup.isTopdown = true;\n            }\n            el.style.display = \"\";\n            var left = pos.left;\n            if (left + el.offsetWidth > screenWidth)\n                left = screenWidth - el.offsetWidth;\n            el.style.left = left + \"px\";\n            el.style.right = \"\";\n            dom.$fixPositionBug(el);\n            if (!popup.isOpen) {\n                popup.isOpen = true;\n                this._signal(\"show\");\n                lastMouseEvent = null;\n            }\n            popup.anchorPos = pos;\n            popup.anchor = anchor;\n            return true;\n        };\n        popup.show = function (pos, lineHeight, topdownOnly) {\n            this.tryShow(pos, lineHeight, topdownOnly ? \"bottom\" : undefined, true);\n        };\n        popup.goTo = function (where) {\n            var row = this.getRow();\n            var max = this.session.getLength() - 1;\n            switch (where) {\n                case \"up\":\n                    row = row <= 0 ? max : row - 1;\n                    break;\n                case \"down\":\n                    row = row >= max ? -1 : row + 1;\n                    break;\n                case \"start\":\n                    row = 0;\n                    break;\n                case \"end\":\n                    row = max;\n                    break;\n            }\n            this.setRow(row);\n        };\n        popup.getTextLeftOffset = function () {\n            return this.$borderSize + this.renderer.$padding + this.$imageSize;\n        };\n        popup.$imageSize = 0;\n        popup.$borderSize = 1;\n        return popup;\n    }\n    return AcePopup;\n}());\ndom.importCssString(\"\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n    background-color: #CAD6FA;\\n    z-index: 1;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n    background-color: #3a674e;\\n}\\n.ace_editor.ace_autocomplete .ace_line-hover {\\n    border: 1px solid #abbffe;\\n    margin-top: -1px;\\n    background: rgba(233,233,253,0.4);\\n    position: absolute;\\n    z-index: 2;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\n    border: 1px solid rgba(109, 150, 13, 0.8);\\n    background: rgba(58, 103, 78, 0.62);\\n}\\n.ace_completion-meta {\\n    opacity: 0.5;\\n    margin-left: 0.9em;\\n}\\n.ace_completion-message {\\n    margin-left: 0.9em;\\n    color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n    color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n    color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n    width: 300px;\\n    z-index: 200000;\\n    border: 1px lightgray solid;\\n    position: fixed;\\n    box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n    line-height: 1.4;\\n    background: #fefefe;\\n    color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n    border: 1px #484747 solid;\\n    box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n    line-height: 1.4;\\n    background: #25282c;\\n    color: #c1c1c1;\\n}\\n.ace_autocomplete .ace_text-layer  {\\n    width: calc(100% - 8px);\\n}\\n.ace_autocomplete .ace_line {\\n    display: flex;\\n    align-items: center;\\n}\\n.ace_autocomplete .ace_line > * {\\n    min-width: 0;\\n    flex: 0 0 auto;\\n}\\n.ace_autocomplete .ace_line .ace_ {\\n    flex: 0 1 auto;\\n    overflow: hidden;\\n    text-overflow: ellipsis;\\n}\\n.ace_autocomplete .ace_completion-spacer {\\n    flex: 1;\\n}\\n.ace_autocomplete.ace_loading:after  {\\n    content: \\\"\\\";\\n    position: absolute;\\n    top: 0px;\\n    height: 2px;\\n    width: 8%;\\n    background: blue;\\n    z-index: 100;\\n    animation: ace_progress 3s infinite linear;\\n    animation-delay: 300ms;\\n    transform: translateX(-100%) scaleX(1);\\n}\\n@keyframes ace_progress {\\n    0% { transform: translateX(-100%) scaleX(1) }\\n    50% { transform: translateX(625%) scaleX(2) } \\n    100% { transform: translateX(1500%) scaleX(3) } \\n}\\n@media (prefers-reduced-motion) {\\n    .ace_autocomplete.ace_loading:after {\\n        transform: translateX(625%) scaleX(2);\\n        animation: none;\\n     }\\n}\\n\", \"autocompletion.css\", false);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\nexports.getAriaId = getAriaId;\n\n});\n\nace.define(\"ace/autocomplete/inline_screenreader\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar AceInlineScreenReader = /** @class */ (function () {\n    function AceInlineScreenReader(editor) {\n        this.editor = editor;\n        this.screenReaderDiv = document.createElement(\"div\");\n        this.screenReaderDiv.classList.add(\"ace_screenreader-only\");\n        this.editor.container.appendChild(this.screenReaderDiv);\n    }\n    AceInlineScreenReader.prototype.setScreenReaderContent = function (content) {\n        if (!this.popup && this.editor.completer && /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup) {\n            this.popup = /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup;\n            this.popup.renderer.on(\"afterRender\", function () {\n                var row = this.popup.getRow();\n                var t = this.popup.renderer.$textLayer;\n                var selected = t.element.childNodes[row - t.config.firstRow];\n                if (selected) {\n                    var idString = \"doc-tooltip \";\n                    for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n                        idString += \"ace-inline-screenreader-line-\".concat(lineIndex, \" \");\n                    }\n                    selected.setAttribute(\"aria-describedby\", idString);\n                }\n            }.bind(this));\n        }\n        while (this.screenReaderDiv.firstChild) {\n            this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild);\n        }\n        this._lines = content.split(/\\r\\n|\\r|\\n/);\n        var codeElement = this.createCodeBlock();\n        this.screenReaderDiv.appendChild(codeElement);\n    };\n    AceInlineScreenReader.prototype.destroy = function () {\n        this.screenReaderDiv.remove();\n    };\n    AceInlineScreenReader.prototype.createCodeBlock = function () {\n        var container = document.createElement(\"pre\");\n        container.setAttribute(\"id\", \"ace-inline-screenreader\");\n        for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n            var codeElement = document.createElement(\"code\");\n            codeElement.setAttribute(\"id\", \"ace-inline-screenreader-line-\".concat(lineIndex));\n            var line = document.createTextNode(this._lines[lineIndex]);\n            codeElement.appendChild(line);\n            container.appendChild(codeElement);\n        }\n        return container;\n    };\n    return AceInlineScreenReader;\n}());\nexports.AceInlineScreenReader = AceInlineScreenReader;\n\n});\n\nace.define(\"ace/autocomplete/inline\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete/inline_screenreader\"], function(require, exports, module){\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar AceInlineScreenReader = require(\"./inline_screenreader\").AceInlineScreenReader;\nvar AceInline = /** @class */ (function () {\n    function AceInline() {\n        this.editor = null;\n    }\n    AceInline.prototype.show = function (editor, completion, prefix) {\n        prefix = prefix || \"\";\n        if (editor && this.editor && this.editor !== editor) {\n            this.hide();\n            this.editor = null;\n            this.inlineScreenReader = null;\n        }\n        if (!editor || !completion) {\n            return false;\n        }\n        if (!this.inlineScreenReader) {\n            this.inlineScreenReader = new AceInlineScreenReader(editor);\n        }\n        var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value;\n        if (completion.hideInlinePreview || !displayText || !displayText.startsWith(prefix)) {\n            return false;\n        }\n        this.editor = editor;\n        this.inlineScreenReader.setScreenReaderContent(displayText);\n        displayText = displayText.slice(prefix.length);\n        if (displayText === \"\") {\n            editor.removeGhostText();\n        }\n        else {\n            editor.setGhostText(displayText);\n        }\n        return true;\n    };\n    AceInline.prototype.isOpen = function () {\n        if (!this.editor) {\n            return false;\n        }\n        return !!this.editor.renderer.$ghostText;\n    };\n    AceInline.prototype.hide = function () {\n        if (!this.editor) {\n            return false;\n        }\n        this.editor.removeGhostText();\n        return true;\n    };\n    AceInline.prototype.destroy = function () {\n        this.hide();\n        this.editor = null;\n        if (this.inlineScreenReader) {\n            this.inlineScreenReader.destroy();\n            this.inlineScreenReader = null;\n        }\n    };\n    return AceInline;\n}());\nexports.AceInline = AceInline;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.parForEach = function (array, fn, callback) {\n    var completed = 0;\n    var arLength = array.length;\n    if (arLength === 0)\n        callback();\n    for (var i = 0; i < arLength; i++) {\n        fn(array[i], function (result, err) {\n            completed++;\n            if (completed === arLength)\n                callback(result, err);\n        });\n    }\n};\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\nexports.retrievePrecedingIdentifier = function (text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos - 1; i >= 0; i--) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf.reverse().join(\"\");\n};\nexports.retrieveFollowingIdentifier = function (text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos; i < text.length; i++) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf;\n};\nexports.getCompletionPrefix = function (editor) {\n    var pos = editor.getCursorPosition();\n    var line = editor.session.getLine(pos.row);\n    var prefix;\n    editor.completers.forEach(function (completer) {\n        if (completer.identifierRegexps) {\n            completer.identifierRegexps.forEach(function (identifierRegex) {\n                if (!prefix && identifierRegex)\n                    prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n            }.bind(this));\n        }\n    }.bind(this));\n    return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\nexports.triggerAutocomplete = function (editor, previousChar) {\n    var previousChar = previousChar == null\n        ? editor.session.getPrecedingCharacter()\n        : previousChar;\n    return editor.completers.some(function (completer) {\n        if (completer.triggerCharacters && Array.isArray(completer.triggerCharacters)) {\n            return completer.triggerCharacters.includes(previousChar);\n        }\n    });\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/inline\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\",\"ace/lib/event\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar AceInline = require(\"./autocomplete/inline\").AceInline;\nvar getAriaId = require(\"./autocomplete/popup\").getAriaId;\nvar util = require(\"./autocomplete/util\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar config = require(\"./config\");\nvar event = require(\"./lib/event\");\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar destroyCompleter = function (e, editor) {\n    editor.completer && editor.completer.destroy();\n};\nvar Autocomplete = /** @class */ (function () {\n    function Autocomplete() {\n        this.autoInsert = false;\n        this.autoSelect = true;\n        this.autoShown = false;\n        this.exactMatch = false;\n        this.inlineEnabled = false;\n        this.keyboardHandler = new HashHandler();\n        this.keyboardHandler.bindKeys(this.commands);\n        this.parentNode = null;\n        this.setSelectOnHover = false;\n        this.hasSeen = new Set();\n        this.showLoadingState = false;\n        this.stickySelectionDelay = 500;\n        this.blurListener = this.blurListener.bind(this);\n        this.changeListener = this.changeListener.bind(this);\n        this.mousedownListener = this.mousedownListener.bind(this);\n        this.mousewheelListener = this.mousewheelListener.bind(this);\n        this.onLayoutChange = this.onLayoutChange.bind(this);\n        this.changeTimer = lang.delayedCall(function () {\n            this.updateCompletions(true);\n        }.bind(this));\n        this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n        this.popupTimer = lang.delayedCall(this.$updatePopupPosition.bind(this), 50);\n        this.stickySelectionTimer = lang.delayedCall(function () {\n            this.stickySelection = true;\n        }.bind(this), this.stickySelectionDelay);\n        this.$firstOpenTimer = lang.delayedCall(/**@this{Autocomplete}*/ function () {\n            var initialPosition = this.completionProvider && this.completionProvider.initialPosition;\n            if (this.autoShown || (this.popup && this.popup.isOpen) || !initialPosition || this.editor.completers.length === 0)\n                return;\n            this.completions = new FilteredList(Autocomplete.completionsForLoading);\n            this.openPopup(this.editor, initialPosition.prefix, false);\n            this.popup.renderer.setStyle(\"ace_loading\", true);\n        }.bind(this), this.stickySelectionDelay);\n    }\n    Object.defineProperty(Autocomplete, \"completionsForLoading\", {\n        get: function () {\n            return [{\n                    caption: config.nls(\"autocomplete.loading\", \"Loading...\"),\n                    value: \"\"\n                }];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Autocomplete.prototype.$init = function () {\n        this.popup = new AcePopup(this.parentNode || document.body || document.documentElement);\n        this.popup.on(\"click\", function (e) {\n            this.insertMatch();\n            e.stop();\n        }.bind(this));\n        this.popup.focus = this.editor.focus.bind(this.editor);\n        this.popup.on(\"show\", this.$onPopupShow.bind(this));\n        this.popup.on(\"hide\", this.$onHidePopup.bind(this));\n        this.popup.on(\"select\", this.$onPopupChange.bind(this));\n        event.addListener(this.popup.container, \"mouseout\", this.mouseOutListener.bind(this));\n        this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n        this.popup.renderer.on(\"afterRender\", this.$onPopupRender.bind(this));\n        return this.popup;\n    };\n    Autocomplete.prototype.$initInline = function () {\n        if (!this.inlineEnabled || this.inlineRenderer)\n            return;\n        this.inlineRenderer = new AceInline();\n        return this.inlineRenderer;\n    };\n    Autocomplete.prototype.getPopup = function () {\n        return this.popup || this.$init();\n    };\n    Autocomplete.prototype.$onHidePopup = function () {\n        if (this.inlineRenderer) {\n            this.inlineRenderer.hide();\n        }\n        this.hideDocTooltip();\n        this.stickySelectionTimer.cancel();\n        this.popupTimer.cancel();\n        this.stickySelection = false;\n    };\n    Autocomplete.prototype.$seen = function (completion) {\n        if (!this.hasSeen.has(completion) && completion && completion.completer && completion.completer.onSeen && typeof completion.completer.onSeen === \"function\") {\n            completion.completer.onSeen(this.editor, completion);\n            this.hasSeen.add(completion);\n        }\n    };\n    Autocomplete.prototype.$onPopupChange = function (hide) {\n        if (this.inlineRenderer && this.inlineEnabled) {\n            var completion = hide ? null : this.popup.getData(this.popup.getRow());\n            this.$updateGhostText(completion);\n            if (this.popup.isMouseOver && this.setSelectOnHover) {\n                this.tooltipTimer.call(null, null);\n                return;\n            }\n            this.popupTimer.schedule();\n            this.tooltipTimer.schedule();\n        }\n        else {\n            this.popupTimer.call(null, null);\n            this.tooltipTimer.call(null, null);\n        }\n    };\n    Autocomplete.prototype.$updateGhostText = function (completion) {\n        var row = this.base.row;\n        var column = this.base.column;\n        var cursorColumn = this.editor.getCursorPosition().column;\n        var prefix = this.editor.session.getLine(row).slice(column, cursorColumn);\n        if (!this.inlineRenderer.show(this.editor, completion, prefix)) {\n            this.inlineRenderer.hide();\n        }\n        else {\n            this.$seen(completion);\n        }\n    };\n    Autocomplete.prototype.$onPopupRender = function () {\n        var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n        if (this.completions && this.completions.filtered && this.completions.filtered.length > 0) {\n            for (var i = this.popup.getFirstVisibleRow(); i <= this.popup.getLastVisibleRow(); i++) {\n                var completion = this.popup.getData(i);\n                if (completion && (!inlineEnabled || completion.hideInlinePreview)) {\n                    this.$seen(completion);\n                }\n            }\n        }\n    };\n    Autocomplete.prototype.$onPopupShow = function (hide) {\n        this.$onPopupChange(hide);\n        this.stickySelection = false;\n        if (this.stickySelectionDelay >= 0)\n            this.stickySelectionTimer.schedule(this.stickySelectionDelay);\n    };\n    Autocomplete.prototype.observeLayoutChanges = function () {\n        if (this.$elements || !this.editor)\n            return;\n        window.addEventListener(\"resize\", this.onLayoutChange, { passive: true });\n        window.addEventListener(\"wheel\", this.mousewheelListener);\n        var el = this.editor.container.parentNode;\n        var elements = [];\n        while (el) {\n            elements.push(el);\n            el.addEventListener(\"scroll\", this.onLayoutChange, { passive: true });\n            el = el.parentNode;\n        }\n        this.$elements = elements;\n    };\n    Autocomplete.prototype.unObserveLayoutChanges = function () {\n        var _this = this;\n        window.removeEventListener(\"resize\", this.onLayoutChange, { passive: true });\n        window.removeEventListener(\"wheel\", this.mousewheelListener);\n        this.$elements && this.$elements.forEach(function (el) {\n            el.removeEventListener(\"scroll\", _this.onLayoutChange, { passive: true });\n        });\n        this.$elements = null;\n    };\n    Autocomplete.prototype.onLayoutChange = function () {\n        if (!this.popup.isOpen)\n            return this.unObserveLayoutChanges();\n        this.$updatePopupPosition();\n        this.updateDocTooltip();\n    };\n    Autocomplete.prototype.$updatePopupPosition = function () {\n        var editor = this.editor;\n        var renderer = editor.renderer;\n        var lineHeight = renderer.layerConfig.lineHeight;\n        var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n        pos.left -= this.popup.getTextLeftOffset();\n        var rect = editor.container.getBoundingClientRect();\n        pos.top += rect.top - renderer.layerConfig.offset;\n        pos.left += rect.left - editor.renderer.scrollLeft;\n        pos.left += renderer.gutterWidth;\n        var posGhostText = {\n            top: pos.top,\n            left: pos.left\n        };\n        if (renderer.$ghostText && renderer.$ghostTextWidget) {\n            if (this.base.row === renderer.$ghostText.position.row) {\n                posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight;\n            }\n        }\n        var editorContainerBottom = editor.container.getBoundingClientRect().bottom - lineHeight;\n        var lowestPosition = editorContainerBottom < posGhostText.top ?\n            { top: editorContainerBottom, left: posGhostText.left } :\n            posGhostText;\n        if (this.popup.tryShow(lowestPosition, lineHeight, \"bottom\")) {\n            return;\n        }\n        if (this.popup.tryShow(pos, lineHeight, \"top\")) {\n            return;\n        }\n        this.popup.show(pos, lineHeight);\n    };\n    Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) {\n        this.$firstOpenTimer.cancel();\n        if (!this.popup)\n            this.$init();\n        if (this.inlineEnabled && !this.inlineRenderer)\n            this.$initInline();\n        this.popup.autoSelect = this.autoSelect;\n        this.popup.setSelectOnHover(this.setSelectOnHover);\n        var oldRow = this.popup.getRow();\n        var previousSelectedItem = this.popup.data[oldRow];\n        this.popup.setData(this.completions.filtered, this.completions.filterText);\n        if (this.editor.textInput.setAriaOptions) {\n            this.editor.textInput.setAriaOptions({\n                activeDescendant: getAriaId(this.popup.getRow()),\n                inline: this.inlineEnabled\n            });\n        }\n        editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        var newRow;\n        if (this.stickySelection)\n            newRow = this.popup.data.indexOf(previousSelectedItem);\n        if (!newRow || newRow === -1)\n            newRow = 0;\n        this.popup.setRow(this.autoSelect ? newRow : -1);\n        if (newRow === oldRow && previousSelectedItem !== this.completions.filtered[newRow])\n            this.$onPopupChange();\n        var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n        if (newRow === oldRow && inlineEnabled) {\n            var completion = this.popup.getData(this.popup.getRow());\n            this.$updateGhostText(completion);\n        }\n        if (!keepPopupPosition) {\n            this.popup.setTheme(editor.getTheme());\n            this.popup.setFontSize(editor.getFontSize());\n            this.$updatePopupPosition();\n            if (this.tooltipNode) {\n                this.updateDocTooltip();\n            }\n        }\n        this.changeTimer.cancel();\n        this.observeLayoutChanges();\n    };\n    Autocomplete.prototype.detach = function () {\n        if (this.editor) {\n            this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n            this.editor.off(\"changeSelection\", this.changeListener);\n            this.editor.off(\"blur\", this.blurListener);\n            this.editor.off(\"mousedown\", this.mousedownListener);\n            this.editor.off(\"mousewheel\", this.mousewheelListener);\n        }\n        this.$firstOpenTimer.cancel();\n        this.changeTimer.cancel();\n        this.hideDocTooltip();\n        if (this.completionProvider) {\n            this.completionProvider.detach();\n        }\n        if (this.popup && this.popup.isOpen)\n            this.popup.hide();\n        if (this.popup && this.popup.renderer) {\n            this.popup.renderer.off(\"afterRender\", this.$onPopupRender);\n        }\n        if (this.base)\n            this.base.detach();\n        this.activated = false;\n        this.completionProvider = this.completions = this.base = null;\n        this.unObserveLayoutChanges();\n    };\n    Autocomplete.prototype.changeListener = function (e) {\n        var cursor = this.editor.selection.lead;\n        if (cursor.row != this.base.row || cursor.column < this.base.column) {\n            this.detach();\n        }\n        if (this.activated)\n            this.changeTimer.schedule();\n        else\n            this.detach();\n    };\n    Autocomplete.prototype.blurListener = function (e) {\n        var el = document.activeElement;\n        var text = this.editor.textInput.getElement();\n        var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n        var container = this.popup && this.popup.container;\n        if (el != text && el.parentNode != container && !fromTooltip\n            && el != this.tooltipNode && e.relatedTarget != text) {\n            this.detach();\n        }\n    };\n    Autocomplete.prototype.mousedownListener = function (e) {\n        this.detach();\n    };\n    Autocomplete.prototype.mousewheelListener = function (e) {\n        if (this.popup && !this.popup.isMouseOver)\n            this.detach();\n    };\n    Autocomplete.prototype.mouseOutListener = function (e) {\n        if (this.popup.isOpen)\n            this.$updatePopupPosition();\n    };\n    Autocomplete.prototype.goTo = function (where) {\n        this.popup.goTo(where);\n    };\n    Autocomplete.prototype.insertMatch = function (data, options) {\n        if (!data)\n            data = this.popup.getData(this.popup.getRow());\n        if (!data)\n            return false;\n        if (data.value === \"\") // Explicitly given nothing to insert, e.g. \"No suggestion state\"\n            return this.detach();\n        var completions = this.completions;\n        var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options);\n        if (this.completions == completions)\n            this.detach();\n        return result;\n    };\n    Autocomplete.prototype.showPopup = function (editor, options) {\n        if (this.editor)\n            this.detach();\n        this.activated = true;\n        this.editor = editor;\n        if (editor.completer != this) {\n            if (editor.completer)\n                editor.completer.detach();\n            editor.completer = this;\n        }\n        editor.on(\"changeSelection\", this.changeListener);\n        editor.on(\"blur\", this.blurListener);\n        editor.on(\"mousedown\", this.mousedownListener);\n        editor.on(\"mousewheel\", this.mousewheelListener);\n        this.updateCompletions(false, options);\n    };\n    Autocomplete.prototype.getCompletionProvider = function (initialPosition) {\n        if (!this.completionProvider)\n            this.completionProvider = new CompletionProvider(initialPosition);\n        return this.completionProvider;\n    };\n    Autocomplete.prototype.gatherCompletions = function (editor, callback) {\n        return this.getCompletionProvider().gatherCompletions(editor, callback);\n    };\n    Autocomplete.prototype.updateCompletions = function (keepPopupPosition, options) {\n        if (keepPopupPosition && this.base && this.completions) {\n            var pos = this.editor.getCursorPosition();\n            var prefix = this.editor.session.getTextRange({ start: this.base, end: pos });\n            if (prefix == this.completions.filterText)\n                return;\n            this.completions.setFilter(prefix);\n            if (!this.completions.filtered.length)\n                return this.detach();\n            if (this.completions.filtered.length == 1\n                && this.completions.filtered[0].value == prefix\n                && !this.completions.filtered[0].snippet)\n                return this.detach();\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n            return;\n        }\n        if (options && options.matches) {\n            var pos = this.editor.getSelectionRange().start;\n            this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n            this.base.$insertRight = true;\n            this.completions = new FilteredList(options.matches);\n            this.getCompletionProvider().completions = this.completions;\n            return this.openPopup(this.editor, \"\", keepPopupPosition);\n        }\n        var session = this.editor.getSession();\n        var pos = this.editor.getCursorPosition();\n        var prefix = util.getCompletionPrefix(this.editor);\n        this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n        this.base.$insertRight = true;\n        var completionOptions = {\n            exactMatch: this.exactMatch,\n            ignoreCaption: this.ignoreCaption\n        };\n        this.getCompletionProvider({\n            prefix: prefix,\n            pos: pos\n        }).provideCompletions(this.editor, completionOptions, \n        function (err, completions, finished) {\n            var filtered = completions.filtered;\n            var prefix = util.getCompletionPrefix(this.editor);\n            this.$firstOpenTimer.cancel();\n            if (finished) {\n                if (!filtered.length) {\n                    var emptyMessage = !this.autoShown && this.emptyMessage;\n                    if (typeof emptyMessage == \"function\")\n                        emptyMessage = this.emptyMessage(prefix);\n                    if (emptyMessage) {\n                        var completionsForEmpty = [{\n                                caption: emptyMessage,\n                                value: \"\"\n                            }\n                        ];\n                        this.completions = new FilteredList(completionsForEmpty);\n                        this.openPopup(this.editor, prefix, keepPopupPosition);\n                        this.popup.renderer.setStyle(\"ace_loading\", false);\n                        this.popup.renderer.setStyle(\"ace_empty-message\", true);\n                        return;\n                    }\n                    return this.detach();\n                }\n                if (filtered.length == 1 && filtered[0].value == prefix\n                    && !filtered[0].snippet)\n                    return this.detach();\n                if (this.autoInsert && !this.autoShown && filtered.length == 1)\n                    return this.insertMatch(filtered[0]);\n            }\n            this.completions = !finished && this.showLoadingState ?\n                new FilteredList(Autocomplete.completionsForLoading.concat(filtered), completions.filterText) :\n                completions;\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n            this.popup.renderer.setStyle(\"ace_empty-message\", false);\n            this.popup.renderer.setStyle(\"ace_loading\", !finished);\n        }.bind(this));\n        if (this.showLoadingState && !this.autoShown && !(this.popup && this.popup.isOpen)) {\n            this.$firstOpenTimer.delay(this.stickySelectionDelay / 2);\n        }\n    };\n    Autocomplete.prototype.cancelContextMenu = function () {\n        this.editor.$mouseHandler.cancelContextMenu();\n    };\n    Autocomplete.prototype.updateDocTooltip = function () {\n        var popup = this.popup;\n        var all = this.completions && this.completions.filtered;\n        var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n        var doc = null;\n        if (!selected || !this.editor || !this.popup.isOpen)\n            return this.hideDocTooltip();\n        var completersLength = this.editor.completers.length;\n        for (var i = 0; i < completersLength; i++) {\n            var completer = this.editor.completers[i];\n            if (completer.getDocTooltip && selected.completerId === completer.id) {\n                doc = completer.getDocTooltip(selected);\n                break;\n            }\n        }\n        if (!doc && typeof selected != \"string\")\n            doc = selected;\n        if (typeof doc == \"string\")\n            doc = { docText: doc };\n        if (!doc || !(doc.docHTML || doc.docText))\n            return this.hideDocTooltip();\n        this.showDocTooltip(doc);\n    };\n    Autocomplete.prototype.showDocTooltip = function (item) {\n        if (!this.tooltipNode) {\n            this.tooltipNode = dom.createElement(\"div\");\n            this.tooltipNode.style.margin = \"0\";\n            this.tooltipNode.style.pointerEvents = \"auto\";\n            this.tooltipNode.style.overscrollBehavior = \"contain\";\n            this.tooltipNode.tabIndex = -1;\n            this.tooltipNode.onblur = this.blurListener.bind(this);\n            this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n            this.tooltipNode.id = \"doc-tooltip\";\n            this.tooltipNode.setAttribute(\"role\", \"tooltip\");\n            this.tooltipNode.addEventListener(\"wheel\", preventParentScroll);\n        }\n        var theme = this.editor.renderer.theme;\n        this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip \" +\n            (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n        var tooltipNode = this.tooltipNode;\n        if (item.docHTML) {\n            tooltipNode.innerHTML = item.docHTML;\n        }\n        else if (item.docText) {\n            tooltipNode.textContent = item.docText;\n        }\n        if (!tooltipNode.parentNode)\n            this.popup.container.appendChild(this.tooltipNode);\n        var popup = this.popup;\n        var rect = popup.container.getBoundingClientRect();\n        var targetWidth = 400;\n        var targetHeight = 300;\n        var scrollBarSize = popup.renderer.scrollBar.width || 10;\n        var leftSize = rect.left;\n        var rightSize = window.innerWidth - rect.right - scrollBarSize;\n        var topSize = popup.isTopdown ? window.innerHeight - scrollBarSize - rect.bottom : rect.top;\n        var scores = [\n            Math.min(rightSize / targetWidth, 1),\n            Math.min(leftSize / targetWidth, 1),\n            Math.min(topSize / targetHeight, 1) * 0.9,\n        ];\n        var max = Math.max.apply(Math, scores);\n        var tooltipStyle = tooltipNode.style;\n        tooltipStyle.display = \"block\";\n        if (max == scores[0] || scores[0] >= 1) {\n            tooltipStyle.left = (rect.right + 1) + \"px\";\n            tooltipStyle.right = \"\";\n            tooltipStyle.maxWidth = targetWidth * max + \"px\";\n            tooltipStyle.top = rect.top + \"px\";\n            tooltipStyle.bottom = \"\";\n            tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + \"px\";\n        }\n        else if (max == scores[1] || scores[1] >= 1) {\n            tooltipStyle.right = window.innerWidth - rect.left + \"px\";\n            tooltipStyle.left = \"\";\n            tooltipStyle.maxWidth = targetWidth * max + \"px\";\n            tooltipStyle.top = rect.top + \"px\";\n            tooltipStyle.bottom = \"\";\n            tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + \"px\";\n        }\n        else if (max == scores[2]) {\n            tooltipStyle.left = rect.left + \"px\";\n            tooltipStyle.right = \"\";\n            tooltipStyle.maxWidth = Math.min(targetWidth, window.innerWidth - rect.left) + \"px\";\n            if (popup.isTopdown) {\n                tooltipStyle.top = rect.bottom + \"px\";\n                tooltipStyle.bottom = \"\";\n                tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.bottom, targetHeight) + \"px\";\n            }\n            else {\n                tooltipStyle.top = \"\";\n                tooltipStyle.bottom = (window.innerHeight - rect.top) + \"px\";\n                tooltipStyle.maxHeight = Math.min(rect.top, targetHeight) + \"px\";\n            }\n        }\n        dom.$fixPositionBug(tooltipNode);\n    };\n    Autocomplete.prototype.hideDocTooltip = function () {\n        this.tooltipTimer.cancel();\n        if (!this.tooltipNode)\n            return;\n        var el = this.tooltipNode;\n        if (!this.editor.isFocused() && document.activeElement == el)\n            this.editor.focus();\n        this.tooltipNode = null;\n        if (el.parentNode)\n            el.parentNode.removeChild(el);\n    };\n    Autocomplete.prototype.onTooltipClick = function (e) {\n        var a = e.target;\n        while (a && a != this.tooltipNode) {\n            if (a.nodeName == \"A\" && a.href) {\n                a.rel = \"noreferrer\";\n                a.target = \"_blank\";\n                break;\n            }\n            a = a.parentNode;\n        }\n    };\n    Autocomplete.prototype.destroy = function () {\n        this.detach();\n        if (this.popup) {\n            this.popup.destroy();\n            var el = this.popup.container;\n            if (el && el.parentNode)\n                el.parentNode.removeChild(el);\n        }\n        if (this.editor && this.editor.completer == this) {\n            this.editor.off(\"destroy\", destroyCompleter);\n            this.editor.completer = null;\n        }\n        this.inlineRenderer = this.popup = this.editor = null;\n    };\n    Autocomplete.for = function (editor) {\n        if (editor.completer instanceof Autocomplete) {\n            return editor.completer;\n        }\n        if (editor.completer) {\n            editor.completer.destroy();\n            editor.completer = null;\n        }\n        if (config.get(\"sharedPopups\")) {\n            if (!Autocomplete[\"$sharedInstance\"])\n                Autocomplete[\"$sharedInstance\"] = new Autocomplete();\n            editor.completer = Autocomplete[\"$sharedInstance\"];\n        }\n        else {\n            editor.completer = new Autocomplete();\n            editor.once(\"destroy\", destroyCompleter);\n        }\n        return editor.completer;\n    };\n    return Autocomplete;\n}());\nAutocomplete.prototype.commands = {\n    \"Up\": function (editor) { editor.completer.goTo(\"up\"); },\n    \"Down\": function (editor) { editor.completer.goTo(\"down\"); },\n    \"Ctrl-Up|Ctrl-Home\": function (editor) { editor.completer.goTo(\"start\"); },\n    \"Ctrl-Down|Ctrl-End\": function (editor) { editor.completer.goTo(\"end\"); },\n    \"Esc\": function (editor) { editor.completer.detach(); },\n    \"Return\": function (editor) { return editor.completer.insertMatch(); },\n    \"Shift-Return\": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); },\n    \"Tab\": function (editor) {\n        var result = editor.completer.insertMatch();\n        if (!result && !editor.tabstopManager)\n            editor.completer.goTo(\"down\");\n        else\n            return result;\n    },\n    \"Backspace\": function (editor) {\n        editor.execCommand(\"backspace\");\n        var prefix = util.getCompletionPrefix(editor);\n        if (!prefix && editor.completer)\n            editor.completer.detach();\n    },\n    \"PageUp\": function (editor) { editor.completer.popup.gotoPageUp(); },\n    \"PageDown\": function (editor) { editor.completer.popup.gotoPageDown(); }\n};\nAutocomplete.startCommand = {\n    name: \"startAutocomplete\",\n    exec: function (editor, options) {\n        var completer = Autocomplete.for(editor);\n        completer.autoInsert = false;\n        completer.autoSelect = true;\n        completer.autoShown = false;\n        completer.showPopup(editor, options);\n        completer.cancelContextMenu();\n    },\n    bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\nvar CompletionProvider = /** @class */ (function () {\n    function CompletionProvider(initialPosition) {\n        this.initialPosition = initialPosition;\n        this.active = true;\n    }\n    CompletionProvider.prototype.insertByIndex = function (editor, index, options) {\n        if (!this.completions || !this.completions.filtered) {\n            return false;\n        }\n        return this.insertMatch(editor, this.completions.filtered[index], options);\n    };\n    CompletionProvider.prototype.insertMatch = function (editor, data, options) {\n        if (!data)\n            return false;\n        editor.startOperation({ command: { name: \"insertMatch\" } });\n        if (data.completer && data.completer.insertMatch) {\n            data.completer.insertMatch(editor, data);\n        }\n        else {\n            if (!this.completions)\n                return false;\n            var replaceBefore = this.completions.filterText.length;\n            var replaceAfter = 0;\n            if (data.range && data.range.start.row === data.range.end.row) {\n                replaceBefore -= this.initialPosition.prefix.length;\n                replaceBefore += this.initialPosition.pos.column - data.range.start.column;\n                replaceAfter += data.range.end.column - this.initialPosition.pos.column;\n            }\n            if (replaceBefore || replaceAfter) {\n                var ranges;\n                if (editor.selection.getAllRanges) {\n                    ranges = editor.selection.getAllRanges();\n                }\n                else {\n                    ranges = [editor.getSelectionRange()];\n                }\n                for (var i = 0, range; range = ranges[i]; i++) {\n                    range.start.column -= replaceBefore;\n                    range.end.column += replaceAfter;\n                    editor.session.remove(range);\n                }\n            }\n            if (data.snippet) {\n                snippetManager.insertSnippet(editor, data.snippet);\n            }\n            else {\n                this.$insertString(editor, data);\n            }\n            if (data.completer && data.completer.onInsert && typeof data.completer.onInsert == \"function\") {\n                data.completer.onInsert(editor, data);\n            }\n            if (data.command && data.command === \"startAutocomplete\") {\n                editor.execCommand(data.command);\n            }\n        }\n        editor.endOperation();\n        return true;\n    };\n    CompletionProvider.prototype.$insertString = function (editor, data) {\n        var text = data.value || data;\n        editor.execCommand(\"insertstring\", text);\n    };\n    CompletionProvider.prototype.gatherCompletions = function (editor, callback) {\n        var session = editor.getSession();\n        var pos = editor.getCursorPosition();\n        var prefix = util.getCompletionPrefix(editor);\n        var matches = [];\n        this.completers = editor.completers;\n        var total = editor.completers.length;\n        editor.completers.forEach(function (completer, i) {\n            completer.getCompletions(editor, session, pos, prefix, function (err, results) {\n                if (completer.hideInlinePreview)\n                    results = results.map(function (result) {\n                        return Object.assign(result, { hideInlinePreview: completer.hideInlinePreview });\n                    });\n                if (!err && results)\n                    matches = matches.concat(results);\n                callback(null, {\n                    prefix: util.getCompletionPrefix(editor),\n                    matches: matches,\n                    finished: (--total === 0)\n                });\n            });\n        });\n        return true;\n    };\n    CompletionProvider.prototype.provideCompletions = function (editor, options, callback) {\n        var processResults = function (results) {\n            var prefix = results.prefix;\n            var matches = results.matches;\n            this.completions = new FilteredList(matches);\n            if (options.exactMatch)\n                this.completions.exactMatch = true;\n            if (options.ignoreCaption)\n                this.completions.ignoreCaption = true;\n            this.completions.setFilter(prefix);\n            if (results.finished || this.completions.filtered.length)\n                callback(null, this.completions, results.finished);\n        }.bind(this);\n        var isImmediate = true;\n        var immediateResults = null;\n        this.gatherCompletions(editor, function (err, results) {\n            if (!this.active) {\n                return;\n            }\n            if (err) {\n                callback(err, [], true);\n                this.detach();\n            }\n            var prefix = results.prefix;\n            if (prefix.indexOf(results.prefix) !== 0)\n                return;\n            if (isImmediate) {\n                immediateResults = results;\n                return;\n            }\n            processResults(results);\n        }.bind(this));\n        isImmediate = false;\n        if (immediateResults) {\n            var results = immediateResults;\n            immediateResults = null;\n            processResults(results);\n        }\n    };\n    CompletionProvider.prototype.detach = function () {\n        this.active = false;\n        this.completers && this.completers.forEach(function (completer) {\n            if (typeof completer.cancel === \"function\") {\n                completer.cancel();\n            }\n        });\n    };\n    return CompletionProvider;\n}());\nvar FilteredList = /** @class */ (function () {\n    function FilteredList(array, filterText) {\n        this.all = array;\n        this.filtered = array;\n        this.filterText = filterText || \"\";\n        this.exactMatch = false;\n        this.ignoreCaption = false;\n    }\n    FilteredList.prototype.setFilter = function (str) {\n        if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n            var matches = this.filtered;\n        else\n            var matches = this.all;\n        this.filterText = str;\n        matches = this.filterCompletions(matches, this.filterText);\n        matches = matches.sort(function (a, b) {\n            return b.exactMatch - a.exactMatch || b.$score - a.$score\n                || (a.caption || a.value).localeCompare(b.caption || b.value);\n        });\n        var prev = null;\n        matches = matches.filter(function (item) {\n            var caption = item.snippet || item.caption || item.value;\n            if (caption === prev)\n                return false;\n            prev = caption;\n            return true;\n        });\n        this.filtered = matches;\n    };\n    FilteredList.prototype.filterCompletions = function (items, needle) {\n        var results = [];\n        var upper = needle.toUpperCase();\n        var lower = needle.toLowerCase();\n        loop: for (var i = 0, item; item = items[i]; i++) {\n            if (item.skipFilter) {\n                item.$score = item.score;\n                results.push(item);\n                continue;\n            }\n            var caption = (!this.ignoreCaption && item.caption) || item.value || item.snippet;\n            if (!caption)\n                continue;\n            var lastIndex = -1;\n            var matchMask = 0;\n            var penalty = 0;\n            var index, distance;\n            if (this.exactMatch) {\n                if (needle !== caption.substr(0, needle.length))\n                    continue loop;\n            }\n            else {\n                var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n                if (fullMatchIndex > -1) {\n                    penalty = fullMatchIndex;\n                }\n                else {\n                    for (var j = 0; j < needle.length; j++) {\n                        var i1 = caption.indexOf(lower[j], lastIndex + 1);\n                        var i2 = caption.indexOf(upper[j], lastIndex + 1);\n                        index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n                        if (index < 0)\n                            continue loop;\n                        distance = index - lastIndex - 1;\n                        if (distance > 0) {\n                            if (lastIndex === -1)\n                                penalty += 10;\n                            penalty += distance;\n                            matchMask = matchMask | (1 << j);\n                        }\n                        lastIndex = index;\n                    }\n                }\n            }\n            item.matchMask = matchMask;\n            item.exactMatch = penalty ? 0 : 1;\n            item.$score = (item.score || 0) - penalty;\n            results.push(item);\n        }\n        return results;\n    };\n    return FilteredList;\n}());\nexports.Autocomplete = Autocomplete;\nexports.CompletionProvider = CompletionProvider;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/marker_group\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar MarkerGroup = /** @class */ (function () {\n    function MarkerGroup(session, options) {\n        if (options)\n            this.markerType = options.markerType;\n        this.markers = [];\n        this.session = session;\n        session.addDynamicMarker(this);\n    }\n    MarkerGroup.prototype.getMarkerAtPosition = function (pos) {\n        return this.markers.find(function (marker) {\n            return marker.range.contains(pos.row, pos.column);\n        });\n    };\n    MarkerGroup.prototype.markersComparator = function (a, b) {\n        return a.range.start.row - b.range.start.row;\n    };\n    MarkerGroup.prototype.setMarkers = function (markers) {\n        this.markers = markers.sort(this.markersComparator).slice(0, this.MAX_MARKERS);\n        this.session._signal(\"changeBackMarker\");\n    };\n    MarkerGroup.prototype.update = function (html, markerLayer, session, config) {\n        if (!this.markers || !this.markers.length)\n            return;\n        var visibleRangeStartRow = config.firstRow, visibleRangeEndRow = config.lastRow;\n        var foldLine;\n        var markersOnOneLine = 0;\n        var lastRow = 0;\n        for (var i = 0; i < this.markers.length; i++) {\n            var marker = this.markers[i];\n            if (marker.range.end.row < visibleRangeStartRow)\n                continue;\n            if (marker.range.start.row > visibleRangeEndRow)\n                continue;\n            if (marker.range.start.row === lastRow) {\n                markersOnOneLine++;\n            }\n            else {\n                lastRow = marker.range.start.row;\n                markersOnOneLine = 0;\n            }\n            if (markersOnOneLine > 200) {\n                continue;\n            }\n            var markerVisibleRange = marker.range.clipRows(visibleRangeStartRow, visibleRangeEndRow);\n            if (markerVisibleRange.start.row === markerVisibleRange.end.row\n                && markerVisibleRange.start.column === markerVisibleRange.end.column) {\n                continue; // visible range is empty\n            }\n            var screenRange = markerVisibleRange.toScreenRange(session);\n            if (screenRange.isEmpty()) {\n                foldLine = session.getNextFoldLine(markerVisibleRange.end.row, foldLine);\n                if (foldLine && foldLine.end.row > markerVisibleRange.end.row) {\n                    visibleRangeStartRow = foldLine.end.row;\n                }\n                continue;\n            }\n            if (this.markerType === \"fullLine\") {\n                markerLayer.drawFullLineMarker(html, screenRange, marker.className, config);\n            }\n            else if (screenRange.isMultiLine()) {\n                if (this.markerType === \"line\")\n                    markerLayer.drawMultiLineMarker(html, screenRange, marker.className, config);\n                else\n                    markerLayer.drawTextMarker(html, screenRange, marker.className, config);\n            }\n            else {\n                markerLayer.drawSingleLineMarker(html, screenRange, marker.className + \" ace_br15\", config);\n            }\n        }\n    };\n    return MarkerGroup;\n}());\nMarkerGroup.prototype.MAX_MARKERS = 10000;\nexports.MarkerGroup = MarkerGroup;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){var Range = require(\"../range\").Range;\nvar splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\nfunction getWordIndex(doc, pos) {\n    var textBefore = doc.getTextRange(Range.fromPoints({\n        row: 0,\n        column: 0\n    }, pos));\n    return textBefore.split(splitRegex).length - 1;\n}\nfunction wordDistance(doc, pos) {\n    var prefixPos = getWordIndex(doc, pos);\n    var words = doc.getValue().split(splitRegex);\n    var wordScores = Object.create(null);\n    var currentWord = words[prefixPos];\n    words.forEach(function (word, idx) {\n        if (!word || word === currentWord)\n            return;\n        var distance = Math.abs(prefixPos - idx);\n        var score = words.length - distance;\n        if (wordScores[word]) {\n            wordScores[word] = Math.max(score, wordScores[word]);\n        }\n        else {\n            wordScores[word] = score;\n        }\n    });\n    return wordScores;\n}\nexports.id = \"textCompleter\";\nexports.getCompletions = function (editor, session, pos, prefix, callback) {\n    var wordScore = wordDistance(session, pos);\n    var wordList = Object.keys(wordScore);\n    callback(null, wordList.map(function (word) {\n        return {\n            caption: word,\n            value: word,\n            score: wordScore[word],\n            meta: \"local\"\n        };\n    }));\n};\n\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/marker_group\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * ## Language Tools extension for Ace Editor\n *\n * Provides autocompletion, snippets, and language intelligence features for the Ace code editor.\n * This extension integrates multiple completion providers including keyword completion, snippet expansion,\n * and text-based completion to enhance the coding experience with contextual suggestions and automated code generation.\n *\n * **Configuration Options:**\n * - `enableBasicAutocompletion`: Enable/disable basic completion functionality\n * - `enableLiveAutocompletion`: Enable/disable real-time completion suggestions\n * - `enableSnippets`: Enable/disable snippet expansion with Tab key\n * - `liveAutocompletionDelay`: Delay before showing live completion popup\n * - `liveAutocompletionThreshold`: Minimum prefix length to trigger completion\n *\n * **Usage:**\n * ```javascript\n * editor.setOptions({\n *   enableBasicAutocompletion: true,\n *   enableLiveAutocompletion: true,\n *   enableSnippets: true\n * });\n * ```\n *\n * @module\n */\n\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\nvar MarkerGroup = require(\"../marker_group\").MarkerGroup;\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n    getCompletions: function (editor, session, pos, prefix, callback) {\n        if (session.$mode.completer) {\n            return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n        }\n        var state = editor.session.getState(pos.row);\n        var completions = session.$mode.getCompletions(state, session, pos, prefix);\n        completions = completions.map(function (el) {\n            el.completerId = keyWordCompleter.id;\n            return el;\n        });\n        callback(null, completions);\n    },\n    id: \"keywordCompleter\"\n};\nvar transformSnippetTooltip = function (str) {\n    var record = {};\n    return str.replace(/\\${(\\d+)(:(.*?))?}/g, function (_, p1, p2, p3) {\n        return (record[p1] = p3 || '');\n    }).replace(/\\$(\\d+?)/g, function (_, p1) {\n        return record[p1];\n    });\n};\nvar snippetCompleter = {\n    getCompletions: function (editor, session, pos, prefix, callback) {\n        var scopes = [];\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n            scopes.push('html-tag');\n        else\n            scopes = snippetManager.getActiveScopes(editor);\n        var snippetMap = snippetManager.snippetMap;\n        var completions = [];\n        scopes.forEach(function (scope) {\n            var snippets = snippetMap[scope] || [];\n            for (var i = snippets.length; i--;) {\n                var s = snippets[i];\n                var caption = s.name || s.tabTrigger;\n                if (!caption)\n                    continue;\n                completions.push({\n                    caption: caption,\n                    snippet: s.content,\n                    meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n                    completerId: snippetCompleter.id\n                });\n            }\n        }, this);\n        callback(null, completions);\n    },\n    getDocTooltip: function (item) {\n        if (item.snippet && !item.docHTML) {\n            item.docHTML = [\n                \"<b>\", lang.escapeHTML(item.caption), \"</b>\", \"<hr></hr>\",\n                lang.escapeHTML(transformSnippetTooltip(item.snippet))\n            ].join(\"\");\n        }\n    },\n    id: \"snippetCompleter\"\n};\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function (val) {\n    completers.length = 0;\n    if (val)\n        completers.push.apply(completers, val);\n};\nexports.addCompleter = function (completer) {\n    completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\nvar expandSnippet = {\n    name: \"expandSnippet\",\n    exec: function (editor) {\n        return snippetManager.expandWithTab(editor);\n    },\n    bindKey: \"Tab\"\n};\nvar onChangeMode = function (e, editor) {\n    loadSnippetsForMode(editor.session.$mode);\n};\nvar loadSnippetsForMode = function (mode) {\n    if (typeof mode == \"string\")\n        mode = config.$modes[mode];\n    if (!mode)\n        return;\n    if (!snippetManager.files)\n        snippetManager.files = {};\n    loadSnippetFile(mode.$id, mode.snippetFileId);\n    if (mode.modes)\n        mode.modes.forEach(loadSnippetsForMode);\n};\nvar loadSnippetFile = function (id, snippetFilePath) {\n    if (!snippetFilePath || !id || snippetManager.files[id])\n        return;\n    snippetManager.files[id] = {};\n    config.loadModule(snippetFilePath, function (m) {\n        if (!m)\n            return;\n        snippetManager.files[id] = m;\n        if (!m.snippets && m.snippetText)\n            m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n        snippetManager.register(m.snippets || [], m.scope);\n        if (m.includeScopes) {\n            snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n            m.includeScopes.forEach(function (x) {\n                loadSnippetsForMode(\"ace/mode/\" + x);\n            });\n        }\n    });\n};\nvar doLiveAutocomplete = function (e) {\n    var editor = e.editor;\n    var hasCompleter = editor.completer && editor.completer.activated;\n    if (e.command.name === \"backspace\") {\n        if (hasCompleter && !util.getCompletionPrefix(editor))\n            editor.completer.detach();\n    }\n    else if (e.command.name === \"insertstring\" && !hasCompleter) {\n        lastExecEvent = e;\n        var delay = e.editor.$liveAutocompletionDelay;\n        if (delay) {\n            liveAutocompleteTimer.delay(delay);\n        }\n        else {\n            showLiveAutocomplete(e);\n        }\n    }\n};\nvar lastExecEvent;\nvar liveAutocompleteTimer = lang.delayedCall(function () {\n    showLiveAutocomplete(lastExecEvent);\n}, 0);\nvar showLiveAutocomplete = function (e) {\n    var editor = e.editor;\n    var prefix = util.getCompletionPrefix(editor);\n    var previousChar = e.args;\n    var triggerAutocomplete = util.triggerAutocomplete(editor, previousChar);\n    if (prefix && prefix.length >= editor.$liveAutocompletionThreshold || triggerAutocomplete) {\n        var completer = Autocomplete.for(editor);\n        completer.autoShown = true;\n        completer.showPopup(editor);\n    }\n};\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableBasicAutocompletion: {\n        set: function (val) {\n            if (val) {\n                Autocomplete.for(this);\n                if (!this.completers)\n                    this.completers = Array.isArray(val) ? val : completers;\n                this.commands.addCommand(Autocomplete.startCommand);\n            }\n            else {\n                this.commands.removeCommand(Autocomplete.startCommand);\n            }\n        },\n        value: false\n    },\n    enableLiveAutocompletion: {\n        set: function (val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val) ? val : completers;\n                this.commands.on('afterExec', doLiveAutocomplete);\n            }\n            else {\n                this.commands.off('afterExec', doLiveAutocomplete);\n            }\n        },\n        value: false\n    },\n    liveAutocompletionDelay: {\n        initialValue: 0\n    },\n    liveAutocompletionThreshold: {\n        initialValue: 0\n    },\n    enableSnippets: {\n        set: function (val) {\n            if (val) {\n                this.commands.addCommand(expandSnippet);\n                this.on(\"changeMode\", onChangeMode);\n                onChangeMode(null, this);\n            }\n            else {\n                this.commands.removeCommand(expandSnippet);\n                this.off(\"changeMode\", onChangeMode);\n            }\n        },\n        value: false\n    }\n});\nexports.MarkerGroup = MarkerGroup;\n\n});                (function() {\n                    ace.require([\"ace/ext/language_tools\"], function(m) {\n                        if ( true && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            \n\n/***/ }),\n\n/***/ 6534:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* module decorator */ module = __webpack_require__.nmd(module);\nace.define(\"ace/ext/searchbox-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"\\n\\n/* ------------------------------------------------------------------------------------------\\n * Editor Search Form\\n * --------------------------------------------------------------------------------------- */\\n.ace_search {\\n    background-color: #ddd;\\n    color: #666;\\n    border: 1px solid #cbcbcb;\\n    border-top: 0 none;\\n    overflow: hidden;\\n    margin: 0;\\n    padding: 4px 6px 0 4px;\\n    position: absolute;\\n    top: 0;\\n    z-index: 99;\\n    white-space: normal;\\n}\\n.ace_search.left {\\n    border-left: 0 none;\\n    border-radius: 0px 0px 5px 0px;\\n    left: 0;\\n}\\n.ace_search.right {\\n    border-radius: 0px 0px 0px 5px;\\n    border-right: 0 none;\\n    right: 0;\\n}\\n\\n.ace_search_form, .ace_replace_form {\\n    margin: 0 20px 4px 0;\\n    overflow: hidden;\\n    line-height: 1.9;\\n}\\n.ace_replace_form {\\n    margin-right: 0;\\n}\\n.ace_search_form.ace_nomatch {\\n    outline: 1px solid red;\\n}\\n\\n.ace_search_field {\\n    border-radius: 3px 0 0 3px;\\n    background-color: white;\\n    color: black;\\n    border: 1px solid #cbcbcb;\\n    border-right: 0 none;\\n    outline: 0;\\n    padding: 0;\\n    font-size: inherit;\\n    margin: 0;\\n    line-height: inherit;\\n    padding: 0 6px;\\n    min-width: 17em;\\n    vertical-align: top;\\n    min-height: 1.8em;\\n    box-sizing: content-box;\\n}\\n.ace_searchbtn {\\n    border: 1px solid #cbcbcb;\\n    line-height: inherit;\\n    display: inline-block;\\n    padding: 0 6px;\\n    background: #fff;\\n    border-right: 0 none;\\n    border-left: 1px solid #dcdcdc;\\n    cursor: pointer;\\n    margin: 0;\\n    position: relative;\\n    color: #666;\\n}\\n.ace_searchbtn:last-child {\\n    border-radius: 0 3px 3px 0;\\n    border-right: 1px solid #cbcbcb;\\n}\\n.ace_searchbtn:disabled {\\n    background: none;\\n    cursor: default;\\n}\\n.ace_searchbtn:hover {\\n    background-color: #eef1f6;\\n}\\n.ace_searchbtn.prev, .ace_searchbtn.next {\\n     padding: 0px 0.7em\\n}\\n.ace_searchbtn.prev:after, .ace_searchbtn.next:after {\\n     content: \\\"\\\";\\n     border: solid 2px #888;\\n     width: 0.5em;\\n     height: 0.5em;\\n     border-width:  2px 0 0 2px;\\n     display:inline-block;\\n     transform: rotate(-45deg);\\n}\\n.ace_searchbtn.next:after {\\n     border-width: 0 2px 2px 0 ;\\n}\\n.ace_searchbtn_close {\\n    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\n    border-radius: 50%;\\n    border: 0 none;\\n    color: #656565;\\n    cursor: pointer;\\n    font: 16px/16px Arial;\\n    padding: 0;\\n    height: 14px;\\n    width: 14px;\\n    top: 9px;\\n    right: 7px;\\n    position: absolute;\\n}\\n.ace_searchbtn_close:hover {\\n    background-color: #656565;\\n    background-position: 50% 100%;\\n    color: white;\\n}\\n\\n.ace_button {\\n    margin-left: 2px;\\n    cursor: pointer;\\n    -webkit-user-select: none;\\n    -moz-user-select: none;\\n    -o-user-select: none;\\n    -ms-user-select: none;\\n    user-select: none;\\n    overflow: hidden;\\n    opacity: 0.7;\\n    border: 1px solid rgba(100,100,100,0.23);\\n    padding: 1px;\\n    box-sizing:    border-box!important;\\n    color: black;\\n}\\n\\n.ace_button:hover {\\n    background-color: #eee;\\n    opacity:1;\\n}\\n.ace_button:active {\\n    background-color: #ddd;\\n}\\n\\n.ace_button.checked {\\n    border-color: #3399ff;\\n    opacity:1;\\n}\\n\\n.ace_search_options{\\n    margin-bottom: 3px;\\n    text-align: right;\\n    -webkit-user-select: none;\\n    -moz-user-select: none;\\n    -o-user-select: none;\\n    -ms-user-select: none;\\n    user-select: none;\\n    clear: both;\\n}\\n\\n.ace_search_counter {\\n    float: left;\\n    font-family: arial;\\n    padding: 0 8px;\\n}\";\n\n});\n\nace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/ext/searchbox\",\"ace/ext/searchbox\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/ext/searchbox-css\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\",\"ace/config\"], function(require, exports, module){/**\n * ## Interactive search and replace UI extension for text editing\n *\n * Provides a floating search box interface with find/replace functionality including live search results, regex\n * support, case sensitivity options, whole word matching, and scoped selection searching. Features keyboard shortcuts\n * for quick access and navigation, with visual feedback for search matches and a counter showing current position\n * in results.\n *\n * **Key Features:**\n * - Real-time search with highlighted matches\n * - Find and replace with individual or bulk operations\n * - Advanced options: regex, case sensitivity, whole words, search in selection\n * - Keyboard navigation and shortcuts\n * - Visual match counter and no-match indicators\n *\n * **Usage:**\n * ```javascript\n * // Show search box\n * require(\"ace/ext/searchbox\").Search(editor);\n *\n * // Show with replace functionality\n * require(\"ace/ext/searchbox\").Search(editor, true);\n * ```\n *\n * @module\n */\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar searchboxCss = require(\"./searchbox-css\");\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar keyUtil = require(\"../lib/keys\");\nvar nls = require(\"../config\").nls;\nvar MAX_COUNT = 999;\ndom.importCssString(searchboxCss, \"ace_searchbox\", false);\nvar SearchBox = /** @class */ (function () {\n    function SearchBox(editor, range, showReplaceForm) {\n        this.activeInput;\n        this.element = dom.buildDom([\"div\", { class: \"ace_search right\" },\n            [\"span\", { action: \"hide\", class: \"ace_searchbtn_close\" }],\n            [\"div\", { class: \"ace_search_form\" },\n                [\"input\", { class: \"ace_search_field\", placeholder: nls(\"search-box.find.placeholder\", \"Search for\"), spellcheck: \"false\" }],\n                [\"span\", { action: \"findPrev\", class: \"ace_searchbtn prev\" }, \"\\u200b\"],\n                [\"span\", { action: \"findNext\", class: \"ace_searchbtn next\" }, \"\\u200b\"],\n                [\"span\", { action: \"findAll\", class: \"ace_searchbtn\", title: \"Alt-Enter\" }, nls(\"search-box.find-all.text\", \"All\")]\n            ],\n            [\"div\", { class: \"ace_replace_form\" },\n                [\"input\", { class: \"ace_search_field\", placeholder: nls(\"search-box.replace.placeholder\", \"Replace with\"), spellcheck: \"false\" }],\n                [\"span\", { action: \"replaceAndFindNext\", class: \"ace_searchbtn\" }, nls(\"search-box.replace-next.text\", \"Replace\")],\n                [\"span\", { action: \"replaceAll\", class: \"ace_searchbtn\" }, nls(\"search-box.replace-all.text\", \"All\")]\n            ],\n            [\"div\", { class: \"ace_search_options\" },\n                [\"span\", { action: \"toggleReplace\", class: \"ace_button\", title: nls(\"search-box.toggle-replace.title\", \"Toggle Replace mode\"),\n                        style: \"float:left;margin-top:-2px;padding:0 5px;\" }, \"+\"],\n                [\"span\", { class: \"ace_search_counter\" }],\n                [\"span\", { action: \"toggleRegexpMode\", class: \"ace_button\", title: nls(\"search-box.toggle-regexp.title\", \"RegExp Search\") }, \".*\"],\n                [\"span\", { action: \"toggleCaseSensitive\", class: \"ace_button\", title: nls(\"search-box.toggle-case.title\", \"CaseSensitive Search\") }, \"Aa\"],\n                [\"span\", { action: \"toggleWholeWords\", class: \"ace_button\", title: nls(\"search-box.toggle-whole-word.title\", \"Whole Word Search\") }, \"\\\\b\"],\n                [\"span\", { action: \"searchInSelection\", class: \"ace_button\", title: nls(\"search-box.toggle-in-selection.title\", \"Search In Selection\") }, \"S\"]\n            ]\n        ]);\n        this.setSession = this.setSession.bind(this);\n        this.$onEditorInput = this.onEditorInput.bind(this);\n        this.$init();\n        this.setEditor(editor);\n        dom.importCssString(searchboxCss, \"ace_searchbox\", editor.container);\n        event.addListener(this.element, \"touchstart\", function (e) { e.stopPropagation(); }, editor);\n    }\n    SearchBox.prototype.setEditor = function (editor) {\n        editor.searchBox = this;\n        editor.renderer.scroller.appendChild(this.element);\n        this.editor = editor;\n    };\n    SearchBox.prototype.setSession = function (e) {\n        this.searchRange = null;\n        this.$syncOptions(true);\n    };\n    SearchBox.prototype.onEditorInput = function () {\n        this.find(false, false, true);\n    };\n    SearchBox.prototype.$initElements = function (sb) {\n        this.searchBox = sb.querySelector(\".ace_search_form\");\n        this.replaceBox = sb.querySelector(\".ace_replace_form\");\n        this.searchOption = sb.querySelector(\"[action=searchInSelection]\");\n        this.replaceOption = sb.querySelector(\"[action=toggleReplace]\");\n        this.regExpOption = sb.querySelector(\"[action=toggleRegexpMode]\");\n        this.caseSensitiveOption = sb.querySelector(\"[action=toggleCaseSensitive]\");\n        this.wholeWordOption = sb.querySelector(\"[action=toggleWholeWords]\");\n        this.searchInput = this.searchBox.querySelector(\".ace_search_field\");\n        this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\");\n        this.searchCounter = sb.querySelector(\".ace_search_counter\");\n    };\n    SearchBox.prototype.$init = function () {\n        var sb = this.element;\n        this.$initElements(sb);\n        var _this = this;\n        event.addListener(sb, \"mousedown\", function (e) {\n            setTimeout(function () {\n                _this.activeInput.focus();\n            }, 0);\n            event.stopPropagation(e);\n        });\n        event.addListener(sb, \"click\", function (e) {\n            var t = e.target || e.srcElement;\n            var action = t.getAttribute(\"action\");\n            if (action && _this[action])\n                _this[action]();\n            else if (_this.$searchBarKb.commands[action])\n                _this.$searchBarKb.commands[action].exec(_this);\n            event.stopPropagation(e);\n        });\n        event.addCommandKeyListener(sb, function (e, hashId, keyCode) {\n            var keyString = keyUtil.keyCodeToString(keyCode);\n            var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\n            if (command && command.exec) {\n                command.exec(_this);\n                event.stopEvent(e);\n            }\n        });\n        this.$onChange = lang.delayedCall(function () {\n            _this.find(false, false);\n        });\n        event.addListener(this.searchInput, \"input\", function () {\n            _this.$onChange.schedule(20);\n        });\n        event.addListener(this.searchInput, \"focus\", function () {\n            _this.activeInput = _this.searchInput;\n            _this.searchInput.value && _this.highlight();\n        });\n        event.addListener(this.replaceInput, \"focus\", function () {\n            _this.activeInput = _this.replaceInput;\n            _this.searchInput.value && _this.highlight();\n        });\n    };\n    SearchBox.prototype.setSearchRange = function (range) {\n        this.searchRange = range;\n        if (range) {\n            this.searchRangeMarker = this.editor.session.addMarker(range, \"ace_active-line\");\n        }\n        else if (this.searchRangeMarker) {\n            this.editor.session.removeMarker(this.searchRangeMarker);\n            this.searchRangeMarker = null;\n        }\n    };\n    SearchBox.prototype.$syncOptions = function (preventScroll) {\n        dom.setCssClass(this.replaceOption, \"checked\", this.searchRange);\n        dom.setCssClass(this.searchOption, \"checked\", this.searchOption.checked);\n        this.replaceOption.textContent = this.replaceOption.checked ? \"-\" : \"+\";\n        dom.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked);\n        dom.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked);\n        dom.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\n        var readOnly = this.editor.getReadOnly();\n        this.replaceOption.style.display = readOnly ? \"none\" : \"\";\n        this.replaceBox.style.display = this.replaceOption.checked && !readOnly ? \"\" : \"none\";\n        this.find(false, false, preventScroll);\n    };\n    SearchBox.prototype.highlight = function (re) {\n        this.editor.session.highlight(re || this.editor.$search.$options.re);\n        this.editor.renderer.updateBackMarkers();\n    };\n    SearchBox.prototype.find = function (skipCurrent, backwards, preventScroll) {\n        if (!this.editor.session)\n            return;\n        var range = this.editor.find(this.searchInput.value, {\n            skipCurrent: skipCurrent,\n            backwards: backwards,\n            wrap: true,\n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked,\n            preventScroll: preventScroll,\n            range: this.searchRange\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n        this.updateCounter();\n    };\n    SearchBox.prototype.updateCounter = function () {\n        var editor = this.editor;\n        var regex = editor.$search.$options.re;\n        var supportsUnicodeFlag = regex.unicode;\n        var all = 0;\n        var before = 0;\n        if (regex) {\n            var value = this.searchRange\n                ? editor.session.getTextRange(this.searchRange)\n                : editor.getValue();\n            if (editor.$search.$isMultilineSearch(editor.getLastSearchOptions())) {\n                value = value.replace(/\\r\\n|\\r|\\n/g, \"\\n\");\n                editor.session.doc.$autoNewLine = \"\\n\";\n            }\n            var offset = editor.session.doc.positionToIndex(editor.selection.anchor);\n            if (this.searchRange)\n                offset -= editor.session.doc.positionToIndex(this.searchRange.start);\n            var last = regex.lastIndex = 0;\n            var m;\n            while ((m = regex.exec(value))) {\n                all++;\n                last = m.index;\n                if (last <= offset)\n                    before++;\n                if (all > MAX_COUNT)\n                    break;\n                if (!m[0]) {\n                    regex.lastIndex = last += lang.skipEmptyMatch(value, last, supportsUnicodeFlag);\n                    if (last >= value.length)\n                        break;\n                }\n            }\n        }\n        this.searchCounter.textContent = nls(\"search-box.search-counter\", \"$0 of $1\", [before, (all > MAX_COUNT ? MAX_COUNT + \"+\" : all)]);\n    };\n    SearchBox.prototype.findNext = function () {\n        this.find(true, false);\n    };\n    SearchBox.prototype.findPrev = function () {\n        this.find(true, true);\n    };\n    SearchBox.prototype.findAll = function () {\n        var range = this.editor.findAll(this.searchInput.value, {\n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n        this.hide();\n    };\n    SearchBox.prototype.replace = function () {\n        if (!this.editor.getReadOnly())\n            this.editor.replace(this.replaceInput.value);\n    };\n    SearchBox.prototype.replaceAndFindNext = function () {\n        if (!this.editor.getReadOnly()) {\n            this.editor.replace(this.replaceInput.value);\n            this.findNext();\n        }\n    };\n    SearchBox.prototype.replaceAll = function () {\n        if (!this.editor.getReadOnly())\n            this.editor.replaceAll(this.replaceInput.value);\n    };\n    SearchBox.prototype.hide = function () {\n        this.active = false;\n        this.setSearchRange(null);\n        this.editor.off(\"changeSession\", this.setSession);\n        this.editor.off(\"input\", this.$onEditorInput);\n        this.element.style.display = \"none\";\n        this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\n        this.editor.focus();\n    };\n    SearchBox.prototype.show = function (value, isReplace) {\n        this.active = true;\n        this.editor.on(\"changeSession\", this.setSession);\n        this.editor.on(\"input\", this.$onEditorInput);\n        this.element.style.display = \"\";\n        this.replaceOption.checked = isReplace;\n        if (this.editor.$search.$options.regExp)\n            value = lang.escapeRegExp(value);\n        if (value != undefined)\n            this.searchInput.value = value;\n        this.searchInput.focus();\n        this.searchInput.select();\n        this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\n        this.$syncOptions(true);\n    };\n    SearchBox.prototype.isFocused = function () {\n        var el = document.activeElement;\n        return el == this.searchInput || el == this.replaceInput;\n    };\n    return SearchBox;\n}());\nvar $searchBarKb = new HashHandler();\n$searchBarKb.bindKeys({\n    \"Ctrl-f|Command-f\": function (sb) {\n        var isReplace = sb.isReplace = !sb.isReplace;\n        sb.replaceBox.style.display = isReplace ? \"\" : \"none\";\n        sb.replaceOption.checked = false;\n        sb.$syncOptions();\n        sb.searchInput.focus();\n    },\n    \"Ctrl-H|Command-Option-F\": function (sb) {\n        if (sb.editor.getReadOnly())\n            return;\n        sb.replaceOption.checked = true;\n        sb.$syncOptions();\n        sb.replaceInput.focus();\n    },\n    \"Ctrl-G|Command-G\": function (sb) {\n        sb.findNext();\n    },\n    \"Ctrl-Shift-G|Command-Shift-G\": function (sb) {\n        sb.findPrev();\n    },\n    \"esc\": function (sb) {\n        setTimeout(function () { sb.hide(); });\n    },\n    \"Return\": function (sb) {\n        if (sb.activeInput == sb.replaceInput)\n            sb.replace();\n        sb.findNext();\n    },\n    \"Shift-Return\": function (sb) {\n        if (sb.activeInput == sb.replaceInput)\n            sb.replace();\n        sb.findPrev();\n    },\n    \"Alt-Return\": function (sb) {\n        if (sb.activeInput == sb.replaceInput)\n            sb.replaceAll();\n        sb.findAll();\n    },\n    \"Tab\": function (sb) {\n        (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\n    }\n});\n$searchBarKb.addCommands([{\n        name: \"toggleRegexpMode\",\n        bindKey: { win: \"Alt-R|Alt-/\", mac: \"Ctrl-Alt-R|Ctrl-Alt-/\" },\n        exec: function (sb) {\n            sb.regExpOption.checked = !sb.regExpOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleCaseSensitive\",\n        bindKey: { win: \"Alt-C|Alt-I\", mac: \"Ctrl-Alt-R|Ctrl-Alt-I\" },\n        exec: function (sb) {\n            sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleWholeWords\",\n        bindKey: { win: \"Alt-B|Alt-W\", mac: \"Ctrl-Alt-B|Ctrl-Alt-W\" },\n        exec: function (sb) {\n            sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleReplace\",\n        exec: function (sb) {\n            sb.replaceOption.checked = !sb.replaceOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"searchInSelection\",\n        exec: function (sb) {\n            sb.searchOption.checked = !sb.searchRange;\n            sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());\n            sb.$syncOptions();\n        }\n    }]);\nvar $closeSearchBarKb = new HashHandler([{\n        bindKey: \"Esc\",\n        name: \"closeSearchBar\",\n        exec: function (editor) {\n            editor.searchBox.hide();\n        }\n    }]);\nSearchBox.prototype.$searchBarKb = $searchBarKb;\nSearchBox.prototype.$closeSearchBarKb = $closeSearchBarKb;\nexports.SearchBox = SearchBox;\nexports.Search = function (editor, isReplace) {\n    var sb = editor.searchBox || new SearchBox(editor);\n    var range = editor.session.selection.getRange();\n    var value = range.isMultiLine() ? \"\" : editor.session.getTextRange(range);\n    sb.show(value, isReplace);\n};\n\n});                (function() {\n                    ace.require([\"ace/ext/searchbox\"], function(m) {\n                        if ( true && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            \n\n/***/ }),\n\n/***/ 4221:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* module decorator */ module = __webpack_require__.nmd(module);\nace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsonHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"variable\", // single line\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token: \"string\", // single line\n                regex: '\"',\n                next: \"string\"\n            }, {\n                token: \"constant.numeric\", // hex\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\", // float\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: \"text\", // single quoted strings are not allowed\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"comment\", // comments are not allowed, but who cares?\n                regex: \"\\\\/\\\\/.*$\"\n            }, {\n                token: \"comment.start\", // comments are not allowed, but who cares?\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[,]/\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"string\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.end\", // comments are not allowed, but who cares?\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n};\noop.inherits(JsonHighlightRules, TextHighlightRules);\nexports.JsonHighlightRules = JsonHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar Mode = function () {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/json_worker\", \"JsonWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/json\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/json\"], function(m) {\n                        if ( true && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            \n\n/***/ }),\n\n/***/ 2229:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar compileSchema = __webpack_require__(2620)\n  , resolve = __webpack_require__(4292)\n  , Cache = __webpack_require__(9336)\n  , SchemaObject = __webpack_require__(4427)\n  , stableStringify = __webpack_require__(9306)\n  , formats = __webpack_require__(2084)\n  , rules = __webpack_require__(3483)\n  , $dataMetaSchema = __webpack_require__(8852)\n  , util = __webpack_require__(6862);\n\nmodule.exports = Ajv;\n\nAjv.prototype.validate = validate;\nAjv.prototype.compile = compile;\nAjv.prototype.addSchema = addSchema;\nAjv.prototype.addMetaSchema = addMetaSchema;\nAjv.prototype.validateSchema = validateSchema;\nAjv.prototype.getSchema = getSchema;\nAjv.prototype.removeSchema = removeSchema;\nAjv.prototype.addFormat = addFormat;\nAjv.prototype.errorsText = errorsText;\n\nAjv.prototype._addSchema = _addSchema;\nAjv.prototype._compile = _compile;\n\nAjv.prototype.compileAsync = __webpack_require__(600);\nvar customKeyword = __webpack_require__(413);\nAjv.prototype.addKeyword = customKeyword.add;\nAjv.prototype.getKeyword = customKeyword.get;\nAjv.prototype.removeKeyword = customKeyword.remove;\nAjv.prototype.validateKeyword = customKeyword.validate;\n\nvar errorClasses = __webpack_require__(3689);\nAjv.ValidationError = errorClasses.Validation;\nAjv.MissingRefError = errorClasses.MissingRef;\nAjv.$dataMetaSchema = $dataMetaSchema;\n\nvar META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema';\n\nvar META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ];\nvar META_SUPPORT_DATA = ['/properties'];\n\n/**\n * Creates validator instance.\n * Usage: `Ajv(opts)`\n * @param {Object} opts optional options\n * @return {Object} ajv instance\n */\nfunction Ajv(opts) {\n  if (!(this instanceof Ajv)) return new Ajv(opts);\n  opts = this._opts = util.copy(opts) || {};\n  setLogger(this);\n  this._schemas = {};\n  this._refs = {};\n  this._fragments = {};\n  this._formats = formats(opts.format);\n\n  this._cache = opts.cache || new Cache;\n  this._loadingSchemas = {};\n  this._compilations = [];\n  this.RULES = rules();\n  this._getId = chooseGetId(opts);\n\n  opts.loopRequired = opts.loopRequired || Infinity;\n  if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;\n  if (opts.serialize === undefined) opts.serialize = stableStringify;\n  this._metaOpts = getMetaSchemaOptions(this);\n\n  if (opts.formats) addInitialFormats(this);\n  if (opts.keywords) addInitialKeywords(this);\n  addDefaultMetaSchema(this);\n  if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta);\n  if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}});\n  addInitialSchemas(this);\n}\n\n\n\n/**\n * Validate data using schema\n * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize.\n * @this   Ajv\n * @param  {String|Object} schemaKeyRef key, ref or schema object\n * @param  {Any} data to be validated\n * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).\n */\nfunction validate(schemaKeyRef, data) {\n  var v;\n  if (typeof schemaKeyRef == 'string') {\n    v = this.getSchema(schemaKeyRef);\n    if (!v) throw new Error('no schema with key or ref \"' + schemaKeyRef + '\"');\n  } else {\n    var schemaObj = this._addSchema(schemaKeyRef);\n    v = schemaObj.validate || this._compile(schemaObj);\n  }\n\n  var valid = v(data);\n  if (v.$async !== true) this.errors = v.errors;\n  return valid;\n}\n\n\n/**\n * Create validating function for passed schema.\n * @this   Ajv\n * @param  {Object} schema schema object\n * @param  {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords.\n * @return {Function} validating function\n */\nfunction compile(schema, _meta) {\n  var schemaObj = this._addSchema(schema, undefined, _meta);\n  return schemaObj.validate || this._compile(schemaObj);\n}\n\n\n/**\n * Adds schema to the instance.\n * @this   Ajv\n * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.\n * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.\n * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n * @return {Ajv} this for method chaining\n */\nfunction addSchema(schema, key, _skipValidation, _meta) {\n  if (Array.isArray(schema)){\n    for (var i=0; i<schema.length; i++) this.addSchema(schema[i], undefined, _skipValidation, _meta);\n    return this;\n  }\n  var id = this._getId(schema);\n  if (id !== undefined && typeof id != 'string')\n    throw new Error('schema id must be string');\n  key = resolve.normalizeId(key || id);\n  checkUnique(this, key);\n  this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true);\n  return this;\n}\n\n\n/**\n * Add schema that will be used to validate other schemas\n * options in META_IGNORE_OPTIONS are alway set to false\n * @this   Ajv\n * @param {Object} schema schema object\n * @param {String} key optional schema key\n * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema\n * @return {Ajv} this for method chaining\n */\nfunction addMetaSchema(schema, key, skipValidation) {\n  this.addSchema(schema, key, skipValidation, true);\n  return this;\n}\n\n\n/**\n * Validate schema\n * @this   Ajv\n * @param {Object} schema schema to validate\n * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid\n * @return {Boolean} true if schema is valid\n */\nfunction validateSchema(schema, throwOrLogError) {\n  var $schema = schema.$schema;\n  if ($schema !== undefined && typeof $schema != 'string')\n    throw new Error('$schema must be a string');\n  $schema = $schema || this._opts.defaultMeta || defaultMeta(this);\n  if (!$schema) {\n    this.logger.warn('meta-schema not available');\n    this.errors = null;\n    return true;\n  }\n  var valid = this.validate($schema, schema);\n  if (!valid && throwOrLogError) {\n    var message = 'schema is invalid: ' + this.errorsText();\n    if (this._opts.validateSchema == 'log') this.logger.error(message);\n    else throw new Error(message);\n  }\n  return valid;\n}\n\n\nfunction defaultMeta(self) {\n  var meta = self._opts.meta;\n  self._opts.defaultMeta = typeof meta == 'object'\n                            ? self._getId(meta) || meta\n                            : self.getSchema(META_SCHEMA_ID)\n                              ? META_SCHEMA_ID\n                              : undefined;\n  return self._opts.defaultMeta;\n}\n\n\n/**\n * Get compiled schema from the instance by `key` or `ref`.\n * @this   Ajv\n * @param  {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).\n * @return {Function} schema validating function (with property `schema`).\n */\nfunction getSchema(keyRef) {\n  var schemaObj = _getSchemaObj(this, keyRef);\n  switch (typeof schemaObj) {\n    case 'object': return schemaObj.validate || this._compile(schemaObj);\n    case 'string': return this.getSchema(schemaObj);\n    case 'undefined': return _getSchemaFragment(this, keyRef);\n  }\n}\n\n\nfunction _getSchemaFragment(self, ref) {\n  var res = resolve.schema.call(self, { schema: {} }, ref);\n  if (res) {\n    var schema = res.schema\n      , root = res.root\n      , baseId = res.baseId;\n    var v = compileSchema.call(self, schema, root, undefined, baseId);\n    self._fragments[ref] = new SchemaObject({\n      ref: ref,\n      fragment: true,\n      schema: schema,\n      root: root,\n      baseId: baseId,\n      validate: v\n    });\n    return v;\n  }\n}\n\n\nfunction _getSchemaObj(self, keyRef) {\n  keyRef = resolve.normalizeId(keyRef);\n  return self._schemas[keyRef] || self._refs[keyRef] || self._fragments[keyRef];\n}\n\n\n/**\n * Remove cached schema(s).\n * If no parameter is passed all schemas but meta-schemas are removed.\n * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n * @this   Ajv\n * @param  {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object\n * @return {Ajv} this for method chaining\n */\nfunction removeSchema(schemaKeyRef) {\n  if (schemaKeyRef instanceof RegExp) {\n    _removeAllSchemas(this, this._schemas, schemaKeyRef);\n    _removeAllSchemas(this, this._refs, schemaKeyRef);\n    return this;\n  }\n  switch (typeof schemaKeyRef) {\n    case 'undefined':\n      _removeAllSchemas(this, this._schemas);\n      _removeAllSchemas(this, this._refs);\n      this._cache.clear();\n      return this;\n    case 'string':\n      var schemaObj = _getSchemaObj(this, schemaKeyRef);\n      if (schemaObj) this._cache.del(schemaObj.cacheKey);\n      delete this._schemas[schemaKeyRef];\n      delete this._refs[schemaKeyRef];\n      return this;\n    case 'object':\n      var serialize = this._opts.serialize;\n      var cacheKey = serialize ? serialize(schemaKeyRef) : schemaKeyRef;\n      this._cache.del(cacheKey);\n      var id = this._getId(schemaKeyRef);\n      if (id) {\n        id = resolve.normalizeId(id);\n        delete this._schemas[id];\n        delete this._refs[id];\n      }\n  }\n  return this;\n}\n\n\nfunction _removeAllSchemas(self, schemas, regex) {\n  for (var keyRef in schemas) {\n    var schemaObj = schemas[keyRef];\n    if (!schemaObj.meta && (!regex || regex.test(keyRef))) {\n      self._cache.del(schemaObj.cacheKey);\n      delete schemas[keyRef];\n    }\n  }\n}\n\n\n/* @this   Ajv */\nfunction _addSchema(schema, skipValidation, meta, shouldAddSchema) {\n  if (typeof schema != 'object' && typeof schema != 'boolean')\n    throw new Error('schema should be object or boolean');\n  var serialize = this._opts.serialize;\n  var cacheKey = serialize ? serialize(schema) : schema;\n  var cached = this._cache.get(cacheKey);\n  if (cached) return cached;\n\n  shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false;\n\n  var id = resolve.normalizeId(this._getId(schema));\n  if (id && shouldAddSchema) checkUnique(this, id);\n\n  var willValidate = this._opts.validateSchema !== false && !skipValidation;\n  var recursiveMeta;\n  if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema)))\n    this.validateSchema(schema, true);\n\n  var localRefs = resolve.ids.call(this, schema);\n\n  var schemaObj = new SchemaObject({\n    id: id,\n    schema: schema,\n    localRefs: localRefs,\n    cacheKey: cacheKey,\n    meta: meta\n  });\n\n  if (id[0] != '#' && shouldAddSchema) this._refs[id] = schemaObj;\n  this._cache.put(cacheKey, schemaObj);\n\n  if (willValidate && recursiveMeta) this.validateSchema(schema, true);\n\n  return schemaObj;\n}\n\n\n/* @this   Ajv */\nfunction _compile(schemaObj, root) {\n  if (schemaObj.compiling) {\n    schemaObj.validate = callValidate;\n    callValidate.schema = schemaObj.schema;\n    callValidate.errors = null;\n    callValidate.root = root ? root : callValidate;\n    if (schemaObj.schema.$async === true)\n      callValidate.$async = true;\n    return callValidate;\n  }\n  schemaObj.compiling = true;\n\n  var currentOpts;\n  if (schemaObj.meta) {\n    currentOpts = this._opts;\n    this._opts = this._metaOpts;\n  }\n\n  var v;\n  try { v = compileSchema.call(this, schemaObj.schema, root, schemaObj.localRefs); }\n  catch(e) {\n    delete schemaObj.validate;\n    throw e;\n  }\n  finally {\n    schemaObj.compiling = false;\n    if (schemaObj.meta) this._opts = currentOpts;\n  }\n\n  schemaObj.validate = v;\n  schemaObj.refs = v.refs;\n  schemaObj.refVal = v.refVal;\n  schemaObj.root = v.root;\n  return v;\n\n\n  /* @this   {*} - custom context, see passContext option */\n  function callValidate() {\n    /* jshint validthis: true */\n    var _validate = schemaObj.validate;\n    var result = _validate.apply(this, arguments);\n    callValidate.errors = _validate.errors;\n    return result;\n  }\n}\n\n\nfunction chooseGetId(opts) {\n  switch (opts.schemaId) {\n    case 'auto': return _get$IdOrId;\n    case 'id': return _getId;\n    default: return _get$Id;\n  }\n}\n\n/* @this   Ajv */\nfunction _getId(schema) {\n  if (schema.$id) this.logger.warn('schema $id ignored', schema.$id);\n  return schema.id;\n}\n\n/* @this   Ajv */\nfunction _get$Id(schema) {\n  if (schema.id) this.logger.warn('schema id ignored', schema.id);\n  return schema.$id;\n}\n\n\nfunction _get$IdOrId(schema) {\n  if (schema.$id && schema.id && schema.$id != schema.id)\n    throw new Error('schema $id is different from id');\n  return schema.$id || schema.id;\n}\n\n\n/**\n * Convert array of error message objects to string\n * @this   Ajv\n * @param  {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used.\n * @param  {Object} options optional options with properties `separator` and `dataVar`.\n * @return {String} human readable string with all errors descriptions\n */\nfunction errorsText(errors, options) {\n  errors = errors || this.errors;\n  if (!errors) return 'No errors';\n  options = options || {};\n  var separator = options.separator === undefined ? ', ' : options.separator;\n  var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\n\n  var text = '';\n  for (var i=0; i<errors.length; i++) {\n    var e = errors[i];\n    if (e) text += dataVar + e.dataPath + ' ' + e.message + separator;\n  }\n  return text.slice(0, -separator.length);\n}\n\n\n/**\n * Add custom format\n * @this   Ajv\n * @param {String} name format name\n * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)\n * @return {Ajv} this for method chaining\n */\nfunction addFormat(name, format) {\n  if (typeof format == 'string') format = new RegExp(format);\n  this._formats[name] = format;\n  return this;\n}\n\n\nfunction addDefaultMetaSchema(self) {\n  var $dataSchema;\n  if (self._opts.$data) {\n    $dataSchema = __webpack_require__(3420);\n    self.addMetaSchema($dataSchema, $dataSchema.$id, true);\n  }\n  if (self._opts.meta === false) return;\n  var metaSchema = __webpack_require__(8198);\n  if (self._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA);\n  self.addMetaSchema(metaSchema, META_SCHEMA_ID, true);\n  self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID;\n}\n\n\nfunction addInitialSchemas(self) {\n  var optsSchemas = self._opts.schemas;\n  if (!optsSchemas) return;\n  if (Array.isArray(optsSchemas)) self.addSchema(optsSchemas);\n  else for (var key in optsSchemas) self.addSchema(optsSchemas[key], key);\n}\n\n\nfunction addInitialFormats(self) {\n  for (var name in self._opts.formats) {\n    var format = self._opts.formats[name];\n    self.addFormat(name, format);\n  }\n}\n\n\nfunction addInitialKeywords(self) {\n  for (var name in self._opts.keywords) {\n    var keyword = self._opts.keywords[name];\n    self.addKeyword(name, keyword);\n  }\n}\n\n\nfunction checkUnique(self, id) {\n  if (self._schemas[id] || self._refs[id])\n    throw new Error('schema with key or id \"' + id + '\" already exists');\n}\n\n\nfunction getMetaSchemaOptions(self) {\n  var metaOpts = util.copy(self._opts);\n  for (var i=0; i<META_IGNORE_OPTIONS.length; i++)\n    delete metaOpts[META_IGNORE_OPTIONS[i]];\n  return metaOpts;\n}\n\n\nfunction setLogger(self) {\n  var logger = self._opts.logger;\n  if (logger === false) {\n    self.logger = {log: noop, warn: noop, error: noop};\n  } else {\n    if (logger === undefined) logger = console;\n    if (!(typeof logger == 'object' && logger.log && logger.warn && logger.error))\n      throw new Error('logger must implement log, warn and error methods');\n    self.logger = logger;\n  }\n}\n\n\nfunction noop() {}\n\n\n/***/ }),\n\n/***/ 9336:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n\nvar Cache = module.exports = function Cache() {\n  this._cache = {};\n};\n\n\nCache.prototype.put = function Cache_put(key, value) {\n  this._cache[key] = value;\n};\n\n\nCache.prototype.get = function Cache_get(key) {\n  return this._cache[key];\n};\n\n\nCache.prototype.del = function Cache_del(key) {\n  delete this._cache[key];\n};\n\n\nCache.prototype.clear = function Cache_clear() {\n  this._cache = {};\n};\n\n\n/***/ }),\n\n/***/ 600:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar MissingRefError = (__webpack_require__(3689).MissingRef);\n\nmodule.exports = compileAsync;\n\n\n/**\n * Creates validating function for passed schema with asynchronous loading of missing schemas.\n * `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n * @this  Ajv\n * @param {Object}   schema schema object\n * @param {Boolean}  meta optional true to compile meta-schema; this parameter can be skipped\n * @param {Function} callback an optional node-style callback, it is called with 2 parameters: error (or null) and validating function.\n * @return {Promise} promise that resolves with a validating function.\n */\nfunction compileAsync(schema, meta, callback) {\n  /* eslint no-shadow: 0 */\n  /* global Promise */\n  /* jshint validthis: true */\n  var self = this;\n  if (typeof this._opts.loadSchema != 'function')\n    throw new Error('options.loadSchema should be a function');\n\n  if (typeof meta == 'function') {\n    callback = meta;\n    meta = undefined;\n  }\n\n  var p = loadMetaSchemaOf(schema).then(function () {\n    var schemaObj = self._addSchema(schema, undefined, meta);\n    return schemaObj.validate || _compileAsync(schemaObj);\n  });\n\n  if (callback) {\n    p.then(\n      function(v) { callback(null, v); },\n      callback\n    );\n  }\n\n  return p;\n\n\n  function loadMetaSchemaOf(sch) {\n    var $schema = sch.$schema;\n    return $schema && !self.getSchema($schema)\n            ? compileAsync.call(self, { $ref: $schema }, true)\n            : Promise.resolve();\n  }\n\n\n  function _compileAsync(schemaObj) {\n    try { return self._compile(schemaObj); }\n    catch(e) {\n      if (e instanceof MissingRefError) return loadMissingSchema(e);\n      throw e;\n    }\n\n\n    function loadMissingSchema(e) {\n      var ref = e.missingSchema;\n      if (added(ref)) throw new Error('Schema ' + ref + ' is loaded but ' + e.missingRef + ' cannot be resolved');\n\n      var schemaPromise = self._loadingSchemas[ref];\n      if (!schemaPromise) {\n        schemaPromise = self._loadingSchemas[ref] = self._opts.loadSchema(ref);\n        schemaPromise.then(removePromise, removePromise);\n      }\n\n      return schemaPromise.then(function (sch) {\n        if (!added(ref)) {\n          return loadMetaSchemaOf(sch).then(function () {\n            if (!added(ref)) self.addSchema(sch, ref, undefined, meta);\n          });\n        }\n      }).then(function() {\n        return _compileAsync(schemaObj);\n      });\n\n      function removePromise() {\n        delete self._loadingSchemas[ref];\n      }\n\n      function added(ref) {\n        return self._refs[ref] || self._schemas[ref];\n      }\n    }\n  }\n}\n\n\n/***/ }),\n\n/***/ 3689:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar resolve = __webpack_require__(4292);\n\nmodule.exports = {\n  Validation: errorSubclass(ValidationError),\n  MissingRef: errorSubclass(MissingRefError)\n};\n\n\nfunction ValidationError(errors) {\n  this.message = 'validation failed';\n  this.errors = errors;\n  this.ajv = this.validation = true;\n}\n\n\nMissingRefError.message = function (baseId, ref) {\n  return 'can\\'t resolve reference ' + ref + ' from id ' + baseId;\n};\n\n\nfunction MissingRefError(baseId, ref, message) {\n  this.message = message || MissingRefError.message(baseId, ref);\n  this.missingRef = resolve.url(baseId, ref);\n  this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef));\n}\n\n\nfunction errorSubclass(Subclass) {\n  Subclass.prototype = Object.create(Error.prototype);\n  Subclass.prototype.constructor = Subclass;\n  return Subclass;\n}\n\n\n/***/ }),\n\n/***/ 2084:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar util = __webpack_require__(6862);\n\nvar DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/;\nvar DAYS = [0,31,28,31,30,31,30,31,31,30,31,30,31];\nvar TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d(?::?\\d\\d)?)?$/i;\nvar HOSTNAME = /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i;\nvar URI = /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\nvar URIREF = /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\n// uri-template: https://tools.ietf.org/html/rfc6570\nvar URITEMPLATE = /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i;\n// For the source: https://gist.github.com/dperini/729294\n// For test cases: https://mathiasbynens.be/demo/url-regex\n// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.\n// var URL = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!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\\u{00a1}-\\u{ffff}0-9]+-)*[a-z\\u{00a1}-\\u{ffff}0-9]+)(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-)*[a-z\\u{00a1}-\\u{ffff}0-9]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu;\nvar URL = /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i;\nvar UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\nvar JSON_POINTER = /^(?:\\/(?:[^~/]|~0|~1)*)*$/;\nvar JSON_POINTER_URI_FRAGMENT = /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;\nvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/;\n\n\nmodule.exports = formats;\n\nfunction formats(mode) {\n  mode = mode == 'full' ? 'full' : 'fast';\n  return util.copy(formats[mode]);\n}\n\n\nformats.fast = {\n  // date: http://tools.ietf.org/html/rfc3339#section-5.6\n  date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\n  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n  time: /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n  'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n  uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n  'uri-reference': /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n  'uri-template': URITEMPLATE,\n  url: URL,\n  // email (sources from jsen validator):\n  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\n  email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n  hostname: HOSTNAME,\n  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n  ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n  // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\n  ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n  regex: regex,\n  // uuid: http://tools.ietf.org/html/rfc4122\n  uuid: UUID,\n  // JSON-pointer: https://tools.ietf.org/html/rfc6901\n  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n  'json-pointer': JSON_POINTER,\n  'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n  // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n  'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nformats.full = {\n  date: date,\n  time: time,\n  'date-time': date_time,\n  uri: uri,\n  'uri-reference': URIREF,\n  'uri-template': URITEMPLATE,\n  url: URL,\n  email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n  hostname: HOSTNAME,\n  ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n  ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n  regex: regex,\n  uuid: UUID,\n  'json-pointer': JSON_POINTER,\n  'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n  'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nfunction isLeapYear(year) {\n  // https://tools.ietf.org/html/rfc3339#appendix-C\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n\nfunction date(str) {\n  // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n  var matches = str.match(DATE);\n  if (!matches) return false;\n\n  var year = +matches[1];\n  var month = +matches[2];\n  var day = +matches[3];\n\n  return month >= 1 && month <= 12 && day >= 1 &&\n          day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);\n}\n\n\nfunction time(str, full) {\n  var matches = str.match(TIME);\n  if (!matches) return false;\n\n  var hour = matches[1];\n  var minute = matches[2];\n  var second = matches[3];\n  var timeZone = matches[5];\n  return ((hour <= 23 && minute <= 59 && second <= 59) ||\n          (hour == 23 && minute == 59 && second == 60)) &&\n         (!full || timeZone);\n}\n\n\nvar DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction date_time(str) {\n  // http://tools.ietf.org/html/rfc3339#section-5.6\n  var dateTime = str.split(DATE_TIME_SEPARATOR);\n  return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);\n}\n\n\nvar NOT_URI_FRAGMENT = /\\/|:/;\nfunction uri(str) {\n  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n  return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\n\n\nvar Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n  if (Z_ANCHOR.test(str)) return false;\n  try {\n    new RegExp(str);\n    return true;\n  } catch(e) {\n    return false;\n  }\n}\n\n\n/***/ }),\n\n/***/ 2620:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar resolve = __webpack_require__(4292)\n  , util = __webpack_require__(6862)\n  , errorClasses = __webpack_require__(3689)\n  , stableStringify = __webpack_require__(9306);\n\nvar validateGenerator = __webpack_require__(1035);\n\n/**\n * Functions below are used inside compiled validations function\n */\n\nvar ucs2length = util.ucs2length;\nvar equal = __webpack_require__(5215);\n\n// this error is thrown by async schemas to return validation errors via exception\nvar ValidationError = errorClasses.Validation;\n\nmodule.exports = compile;\n\n\n/**\n * Compiles schema to validation function\n * @this   Ajv\n * @param  {Object} schema schema object\n * @param  {Object} root object with information about the root schema for this schema\n * @param  {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution\n * @param  {String} baseId base ID for IDs in the schema\n * @return {Function} validation function\n */\nfunction compile(schema, root, localRefs, baseId) {\n  /* jshint validthis: true, evil: true */\n  /* eslint no-shadow: 0 */\n  var self = this\n    , opts = this._opts\n    , refVal = [ undefined ]\n    , refs = {}\n    , patterns = []\n    , patternsHash = {}\n    , defaults = []\n    , defaultsHash = {}\n    , customRules = [];\n\n  function patternCode(i, patterns) {\n    var regExpCode = opts.regExp ? 'regExp' : 'new RegExp';\n    return 'var pattern' + i + ' = ' + regExpCode + '(' + util.toQuotedString(patterns[i]) + ');';\n  }\n\n  root = root || { schema: schema, refVal: refVal, refs: refs };\n\n  var c = checkCompiling.call(this, schema, root, baseId);\n  var compilation = this._compilations[c.index];\n  if (c.compiling) return (compilation.callValidate = callValidate);\n\n  var formats = this._formats;\n  var RULES = this.RULES;\n\n  try {\n    var v = localCompile(schema, root, localRefs, baseId);\n    compilation.validate = v;\n    var cv = compilation.callValidate;\n    if (cv) {\n      cv.schema = v.schema;\n      cv.errors = null;\n      cv.refs = v.refs;\n      cv.refVal = v.refVal;\n      cv.root = v.root;\n      cv.$async = v.$async;\n      if (opts.sourceCode) cv.source = v.source;\n    }\n    return v;\n  } finally {\n    endCompiling.call(this, schema, root, baseId);\n  }\n\n  /* @this   {*} - custom context, see passContext option */\n  function callValidate() {\n    /* jshint validthis: true */\n    var validate = compilation.validate;\n    var result = validate.apply(this, arguments);\n    callValidate.errors = validate.errors;\n    return result;\n  }\n\n  function localCompile(_schema, _root, localRefs, baseId) {\n    var isRoot = !_root || (_root && _root.schema == _schema);\n    if (_root.schema != root.schema)\n      return compile.call(self, _schema, _root, localRefs, baseId);\n\n    var $async = _schema.$async === true;\n\n    var sourceCode = validateGenerator({\n      isTop: true,\n      schema: _schema,\n      isRoot: isRoot,\n      baseId: baseId,\n      root: _root,\n      schemaPath: '',\n      errSchemaPath: '#',\n      errorPath: '\"\"',\n      MissingRefError: errorClasses.MissingRef,\n      RULES: RULES,\n      validate: validateGenerator,\n      util: util,\n      resolve: resolve,\n      resolveRef: resolveRef,\n      usePattern: usePattern,\n      useDefault: useDefault,\n      useCustomRule: useCustomRule,\n      opts: opts,\n      formats: formats,\n      logger: self.logger,\n      self: self\n    });\n\n    sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode)\n                   + vars(defaults, defaultCode) + vars(customRules, customRuleCode)\n                   + sourceCode;\n\n    if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema);\n    // console.log('\\n\\n\\n *** \\n', JSON.stringify(sourceCode));\n    var validate;\n    try {\n      var makeValidate = new Function(\n        'self',\n        'RULES',\n        'formats',\n        'root',\n        'refVal',\n        'defaults',\n        'customRules',\n        'equal',\n        'ucs2length',\n        'ValidationError',\n        'regExp',\n        sourceCode\n      );\n\n      validate = makeValidate(\n        self,\n        RULES,\n        formats,\n        root,\n        refVal,\n        defaults,\n        customRules,\n        equal,\n        ucs2length,\n        ValidationError,\n        opts.regExp\n      );\n\n      refVal[0] = validate;\n    } catch(e) {\n      self.logger.error('Error compiling schema, function code:', sourceCode);\n      throw e;\n    }\n\n    validate.schema = _schema;\n    validate.errors = null;\n    validate.refs = refs;\n    validate.refVal = refVal;\n    validate.root = isRoot ? validate : _root;\n    if ($async) validate.$async = true;\n    if (opts.sourceCode === true) {\n      validate.source = {\n        code: sourceCode,\n        patterns: patterns,\n        defaults: defaults\n      };\n    }\n\n    return validate;\n  }\n\n  function resolveRef(baseId, ref, isRoot) {\n    ref = resolve.url(baseId, ref);\n    var refIndex = refs[ref];\n    var _refVal, refCode;\n    if (refIndex !== undefined) {\n      _refVal = refVal[refIndex];\n      refCode = 'refVal[' + refIndex + ']';\n      return resolvedRef(_refVal, refCode);\n    }\n    if (!isRoot && root.refs) {\n      var rootRefId = root.refs[ref];\n      if (rootRefId !== undefined) {\n        _refVal = root.refVal[rootRefId];\n        refCode = addLocalRef(ref, _refVal);\n        return resolvedRef(_refVal, refCode);\n      }\n    }\n\n    refCode = addLocalRef(ref);\n    var v = resolve.call(self, localCompile, root, ref);\n    if (v === undefined) {\n      var localSchema = localRefs && localRefs[ref];\n      if (localSchema) {\n        v = resolve.inlineRef(localSchema, opts.inlineRefs)\n            ? localSchema\n            : compile.call(self, localSchema, root, localRefs, baseId);\n      }\n    }\n\n    if (v === undefined) {\n      removeLocalRef(ref);\n    } else {\n      replaceLocalRef(ref, v);\n      return resolvedRef(v, refCode);\n    }\n  }\n\n  function addLocalRef(ref, v) {\n    var refId = refVal.length;\n    refVal[refId] = v;\n    refs[ref] = refId;\n    return 'refVal' + refId;\n  }\n\n  function removeLocalRef(ref) {\n    delete refs[ref];\n  }\n\n  function replaceLocalRef(ref, v) {\n    var refId = refs[ref];\n    refVal[refId] = v;\n  }\n\n  function resolvedRef(refVal, code) {\n    return typeof refVal == 'object' || typeof refVal == 'boolean'\n            ? { code: code, schema: refVal, inline: true }\n            : { code: code, $async: refVal && !!refVal.$async };\n  }\n\n  function usePattern(regexStr) {\n    var index = patternsHash[regexStr];\n    if (index === undefined) {\n      index = patternsHash[regexStr] = patterns.length;\n      patterns[index] = regexStr;\n    }\n    return 'pattern' + index;\n  }\n\n  function useDefault(value) {\n    switch (typeof value) {\n      case 'boolean':\n      case 'number':\n        return '' + value;\n      case 'string':\n        return util.toQuotedString(value);\n      case 'object':\n        if (value === null) return 'null';\n        var valueStr = stableStringify(value);\n        var index = defaultsHash[valueStr];\n        if (index === undefined) {\n          index = defaultsHash[valueStr] = defaults.length;\n          defaults[index] = value;\n        }\n        return 'default' + index;\n    }\n  }\n\n  function useCustomRule(rule, schema, parentSchema, it) {\n    if (self._opts.validateSchema !== false) {\n      var deps = rule.definition.dependencies;\n      if (deps && !deps.every(function(keyword) {\n        return Object.prototype.hasOwnProperty.call(parentSchema, keyword);\n      }))\n        throw new Error('parent schema must have all required keywords: ' + deps.join(','));\n\n      var validateSchema = rule.definition.validateSchema;\n      if (validateSchema) {\n        var valid = validateSchema(schema);\n        if (!valid) {\n          var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors);\n          if (self._opts.validateSchema == 'log') self.logger.error(message);\n          else throw new Error(message);\n        }\n      }\n    }\n\n    var compile = rule.definition.compile\n      , inline = rule.definition.inline\n      , macro = rule.definition.macro;\n\n    var validate;\n    if (compile) {\n      validate = compile.call(self, schema, parentSchema, it);\n    } else if (macro) {\n      validate = macro.call(self, schema, parentSchema, it);\n      if (opts.validateSchema !== false) self.validateSchema(validate, true);\n    } else if (inline) {\n      validate = inline.call(self, it, rule.keyword, schema, parentSchema);\n    } else {\n      validate = rule.definition.validate;\n      if (!validate) return;\n    }\n\n    if (validate === undefined)\n      throw new Error('custom keyword \"' + rule.keyword + '\"failed to compile');\n\n    var index = customRules.length;\n    customRules[index] = validate;\n\n    return {\n      code: 'customRule' + index,\n      validate: validate\n    };\n  }\n}\n\n\n/**\n * Checks if the schema is currently compiled\n * @this   Ajv\n * @param  {Object} schema schema to compile\n * @param  {Object} root root object\n * @param  {String} baseId base schema ID\n * @return {Object} object with properties \"index\" (compilation index) and \"compiling\" (boolean)\n */\nfunction checkCompiling(schema, root, baseId) {\n  /* jshint validthis: true */\n  var index = compIndex.call(this, schema, root, baseId);\n  if (index >= 0) return { index: index, compiling: true };\n  index = this._compilations.length;\n  this._compilations[index] = {\n    schema: schema,\n    root: root,\n    baseId: baseId\n  };\n  return { index: index, compiling: false };\n}\n\n\n/**\n * Removes the schema from the currently compiled list\n * @this   Ajv\n * @param  {Object} schema schema to compile\n * @param  {Object} root root object\n * @param  {String} baseId base schema ID\n */\nfunction endCompiling(schema, root, baseId) {\n  /* jshint validthis: true */\n  var i = compIndex.call(this, schema, root, baseId);\n  if (i >= 0) this._compilations.splice(i, 1);\n}\n\n\n/**\n * Index of schema compilation in the currently compiled list\n * @this   Ajv\n * @param  {Object} schema schema to compile\n * @param  {Object} root root object\n * @param  {String} baseId base schema ID\n * @return {Integer} compilation index\n */\nfunction compIndex(schema, root, baseId) {\n  /* jshint validthis: true */\n  for (var i=0; i<this._compilations.length; i++) {\n    var c = this._compilations[i];\n    if (c.schema == schema && c.root == root && c.baseId == baseId) return i;\n  }\n  return -1;\n}\n\n\nfunction defaultCode(i) {\n  return 'var default' + i + ' = defaults[' + i + '];';\n}\n\n\nfunction refValCode(i, refVal) {\n  return refVal[i] === undefined ? '' : 'var refVal' + i + ' = refVal[' + i + '];';\n}\n\n\nfunction customRuleCode(i) {\n  return 'var customRule' + i + ' = customRules[' + i + '];';\n}\n\n\nfunction vars(arr, statement) {\n  if (!arr.length) return '';\n  var code = '';\n  for (var i=0; i<arr.length; i++)\n    code += statement(i, arr);\n  return code;\n}\n\n\n/***/ }),\n\n/***/ 4292:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar URI = __webpack_require__(6777)\n  , equal = __webpack_require__(5215)\n  , util = __webpack_require__(6862)\n  , SchemaObject = __webpack_require__(4427)\n  , traverse = __webpack_require__(4316);\n\nmodule.exports = resolve;\n\nresolve.normalizeId = normalizeId;\nresolve.fullPath = getFullPath;\nresolve.url = resolveUrl;\nresolve.ids = resolveIds;\nresolve.inlineRef = inlineRef;\nresolve.schema = resolveSchema;\n\n/**\n * [resolve and compile the references ($ref)]\n * @this   Ajv\n * @param  {Function} compile reference to schema compilation funciton (localCompile)\n * @param  {Object} root object with information about the root schema for the current schema\n * @param  {String} ref reference to resolve\n * @return {Object|Function} schema object (if the schema can be inlined) or validation function\n */\nfunction resolve(compile, root, ref) {\n  /* jshint validthis: true */\n  var refVal = this._refs[ref];\n  if (typeof refVal == 'string') {\n    if (this._refs[refVal]) refVal = this._refs[refVal];\n    else return resolve.call(this, compile, root, refVal);\n  }\n\n  refVal = refVal || this._schemas[ref];\n  if (refVal instanceof SchemaObject) {\n    return inlineRef(refVal.schema, this._opts.inlineRefs)\n            ? refVal.schema\n            : refVal.validate || this._compile(refVal);\n  }\n\n  var res = resolveSchema.call(this, root, ref);\n  var schema, v, baseId;\n  if (res) {\n    schema = res.schema;\n    root = res.root;\n    baseId = res.baseId;\n  }\n\n  if (schema instanceof SchemaObject) {\n    v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId);\n  } else if (schema !== undefined) {\n    v = inlineRef(schema, this._opts.inlineRefs)\n        ? schema\n        : compile.call(this, schema, root, undefined, baseId);\n  }\n\n  return v;\n}\n\n\n/**\n * Resolve schema, its root and baseId\n * @this Ajv\n * @param  {Object} root root object with properties schema, refVal, refs\n * @param  {String} ref  reference to resolve\n * @return {Object} object with properties schema, root, baseId\n */\nfunction resolveSchema(root, ref) {\n  /* jshint validthis: true */\n  var p = URI.parse(ref)\n    , refPath = _getFullPath(p)\n    , baseId = getFullPath(this._getId(root.schema));\n  if (Object.keys(root.schema).length === 0 || refPath !== baseId) {\n    var id = normalizeId(refPath);\n    var refVal = this._refs[id];\n    if (typeof refVal == 'string') {\n      return resolveRecursive.call(this, root, refVal, p);\n    } else if (refVal instanceof SchemaObject) {\n      if (!refVal.validate) this._compile(refVal);\n      root = refVal;\n    } else {\n      refVal = this._schemas[id];\n      if (refVal instanceof SchemaObject) {\n        if (!refVal.validate) this._compile(refVal);\n        if (id == normalizeId(ref))\n          return { schema: refVal, root: root, baseId: baseId };\n        root = refVal;\n      } else {\n        return;\n      }\n    }\n    if (!root.schema) return;\n    baseId = getFullPath(this._getId(root.schema));\n  }\n  return getJsonPointer.call(this, p, baseId, root.schema, root);\n}\n\n\n/* @this Ajv */\nfunction resolveRecursive(root, ref, parsedRef) {\n  /* jshint validthis: true */\n  var res = resolveSchema.call(this, root, ref);\n  if (res) {\n    var schema = res.schema;\n    var baseId = res.baseId;\n    root = res.root;\n    var id = this._getId(schema);\n    if (id) baseId = resolveUrl(baseId, id);\n    return getJsonPointer.call(this, parsedRef, baseId, schema, root);\n  }\n}\n\n\nvar PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']);\n/* @this Ajv */\nfunction getJsonPointer(parsedRef, baseId, schema, root) {\n  /* jshint validthis: true */\n  parsedRef.fragment = parsedRef.fragment || '';\n  if (parsedRef.fragment.slice(0,1) != '/') return;\n  var parts = parsedRef.fragment.split('/');\n\n  for (var i = 1; i < parts.length; i++) {\n    var part = parts[i];\n    if (part) {\n      part = util.unescapeFragment(part);\n      schema = schema[part];\n      if (schema === undefined) break;\n      var id;\n      if (!PREVENT_SCOPE_CHANGE[part]) {\n        id = this._getId(schema);\n        if (id) baseId = resolveUrl(baseId, id);\n        if (schema.$ref) {\n          var $ref = resolveUrl(baseId, schema.$ref);\n          var res = resolveSchema.call(this, root, $ref);\n          if (res) {\n            schema = res.schema;\n            root = res.root;\n            baseId = res.baseId;\n          }\n        }\n      }\n    }\n  }\n  if (schema !== undefined && schema !== root.schema)\n    return { schema: schema, root: root, baseId: baseId };\n}\n\n\nvar SIMPLE_INLINED = util.toHash([\n  'type', 'format', 'pattern',\n  'maxLength', 'minLength',\n  'maxProperties', 'minProperties',\n  'maxItems', 'minItems',\n  'maximum', 'minimum',\n  'uniqueItems', 'multipleOf',\n  'required', 'enum'\n]);\nfunction inlineRef(schema, limit) {\n  if (limit === false) return false;\n  if (limit === undefined || limit === true) return checkNoRef(schema);\n  else if (limit) return countKeys(schema) <= limit;\n}\n\n\nfunction checkNoRef(schema) {\n  var item;\n  if (Array.isArray(schema)) {\n    for (var i=0; i<schema.length; i++) {\n      item = schema[i];\n      if (typeof item == 'object' && !checkNoRef(item)) return false;\n    }\n  } else {\n    for (var key in schema) {\n      if (key == '$ref') return false;\n      item = schema[key];\n      if (typeof item == 'object' && !checkNoRef(item)) return false;\n    }\n  }\n  return true;\n}\n\n\nfunction countKeys(schema) {\n  var count = 0, item;\n  if (Array.isArray(schema)) {\n    for (var i=0; i<schema.length; i++) {\n      item = schema[i];\n      if (typeof item == 'object') count += countKeys(item);\n      if (count == Infinity) return Infinity;\n    }\n  } else {\n    for (var key in schema) {\n      if (key == '$ref') return Infinity;\n      if (SIMPLE_INLINED[key]) {\n        count++;\n      } else {\n        item = schema[key];\n        if (typeof item == 'object') count += countKeys(item) + 1;\n        if (count == Infinity) return Infinity;\n      }\n    }\n  }\n  return count;\n}\n\n\nfunction getFullPath(id, normalize) {\n  if (normalize !== false) id = normalizeId(id);\n  var p = URI.parse(id);\n  return _getFullPath(p);\n}\n\n\nfunction _getFullPath(p) {\n  return URI.serialize(p).split('#')[0] + '#';\n}\n\n\nvar TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n  return id ? id.replace(TRAILING_SLASH_HASH, '') : '';\n}\n\n\nfunction resolveUrl(baseId, id) {\n  id = normalizeId(id);\n  return URI.resolve(baseId, id);\n}\n\n\n/* @this Ajv */\nfunction resolveIds(schema) {\n  var schemaId = normalizeId(this._getId(schema));\n  var baseIds = {'': schemaId};\n  var fullPaths = {'': getFullPath(schemaId, false)};\n  var localRefs = {};\n  var self = this;\n\n  traverse(schema, {allKeys: true}, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n    if (jsonPtr === '') return;\n    var id = self._getId(sch);\n    var baseId = baseIds[parentJsonPtr];\n    var fullPath = fullPaths[parentJsonPtr] + '/' + parentKeyword;\n    if (keyIndex !== undefined)\n      fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex));\n\n    if (typeof id == 'string') {\n      id = baseId = normalizeId(baseId ? URI.resolve(baseId, id) : id);\n\n      var refVal = self._refs[id];\n      if (typeof refVal == 'string') refVal = self._refs[refVal];\n      if (refVal && refVal.schema) {\n        if (!equal(sch, refVal.schema))\n          throw new Error('id \"' + id + '\" resolves to more than one schema');\n      } else if (id != normalizeId(fullPath)) {\n        if (id[0] == '#') {\n          if (localRefs[id] && !equal(sch, localRefs[id]))\n            throw new Error('id \"' + id + '\" resolves to more than one schema');\n          localRefs[id] = sch;\n        } else {\n          self._refs[id] = fullPath;\n        }\n      }\n    }\n    baseIds[jsonPtr] = baseId;\n    fullPaths[jsonPtr] = fullPath;\n  });\n\n  return localRefs;\n}\n\n\n/***/ }),\n\n/***/ 3483:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar ruleModules = __webpack_require__(8161)\n  , toHash = (__webpack_require__(6862).toHash);\n\nmodule.exports = function rules() {\n  var RULES = [\n    { type: 'number',\n      rules: [ { 'maximum': ['exclusiveMaximum'] },\n               { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] },\n    { type: 'string',\n      rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },\n    { type: 'array',\n      rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] },\n    { type: 'object',\n      rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames',\n               { 'properties': ['additionalProperties', 'patternProperties'] } ] },\n    { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] }\n  ];\n\n  var ALL = [ 'type', '$comment' ];\n  var KEYWORDS = [\n    '$schema', '$id', 'id', '$data', '$async', 'title',\n    'description', 'default', 'definitions',\n    'examples', 'readOnly', 'writeOnly',\n    'contentMediaType', 'contentEncoding',\n    'additionalItems', 'then', 'else'\n  ];\n  var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];\n  RULES.all = toHash(ALL);\n  RULES.types = toHash(TYPES);\n\n  RULES.forEach(function (group) {\n    group.rules = group.rules.map(function (keyword) {\n      var implKeywords;\n      if (typeof keyword == 'object') {\n        var key = Object.keys(keyword)[0];\n        implKeywords = keyword[key];\n        keyword = key;\n        implKeywords.forEach(function (k) {\n          ALL.push(k);\n          RULES.all[k] = true;\n        });\n      }\n      ALL.push(keyword);\n      var rule = RULES.all[keyword] = {\n        keyword: keyword,\n        code: ruleModules[keyword],\n        implements: implKeywords\n      };\n      return rule;\n    });\n\n    RULES.all.$comment = {\n      keyword: '$comment',\n      code: ruleModules.$comment\n    };\n\n    if (group.type) RULES.types[group.type] = group;\n  });\n\n  RULES.keywords = toHash(ALL.concat(KEYWORDS));\n  RULES.custom = {};\n\n  return RULES;\n};\n\n\n/***/ }),\n\n/***/ 4427:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar util = __webpack_require__(6862);\n\nmodule.exports = SchemaObject;\n\nfunction SchemaObject(obj) {\n  util.copy(obj, this);\n}\n\n\n/***/ }),\n\n/***/ 611:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nmodule.exports = function ucs2length(str) {\n  var length = 0\n    , len = str.length\n    , pos = 0\n    , value;\n  while (pos < len) {\n    length++;\n    value = str.charCodeAt(pos++);\n    if (value >= 0xD800 && value <= 0xDBFF && pos < len) {\n      // high surrogate, and there is a next character\n      value = str.charCodeAt(pos);\n      if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\n    }\n  }\n  return length;\n};\n\n\n/***/ }),\n\n/***/ 6862:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n\nmodule.exports = {\n  copy: copy,\n  checkDataType: checkDataType,\n  checkDataTypes: checkDataTypes,\n  coerceToTypes: coerceToTypes,\n  toHash: toHash,\n  getProperty: getProperty,\n  escapeQuotes: escapeQuotes,\n  equal: __webpack_require__(5215),\n  ucs2length: __webpack_require__(611),\n  varOccurences: varOccurences,\n  varReplace: varReplace,\n  schemaHasRules: schemaHasRules,\n  schemaHasRulesExcept: schemaHasRulesExcept,\n  schemaUnknownRules: schemaUnknownRules,\n  toQuotedString: toQuotedString,\n  getPathExpr: getPathExpr,\n  getPath: getPath,\n  getData: getData,\n  unescapeFragment: unescapeFragment,\n  unescapeJsonPointer: unescapeJsonPointer,\n  escapeFragment: escapeFragment,\n  escapeJsonPointer: escapeJsonPointer\n};\n\n\nfunction copy(o, to) {\n  to = to || {};\n  for (var key in o) to[key] = o[key];\n  return to;\n}\n\n\nfunction checkDataType(dataType, data, strictNumbers, negate) {\n  var EQUAL = negate ? ' !== ' : ' === '\n    , AND = negate ? ' || ' : ' && '\n    , OK = negate ? '!' : ''\n    , NOT = negate ? '' : '!';\n  switch (dataType) {\n    case 'null': return data + EQUAL + 'null';\n    case 'array': return OK + 'Array.isArray(' + data + ')';\n    case 'object': return '(' + OK + data + AND +\n                          'typeof ' + data + EQUAL + '\"object\"' + AND +\n                          NOT + 'Array.isArray(' + data + '))';\n    case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\n                           NOT + '(' + data + ' % 1)' +\n                           AND + data + EQUAL + data +\n                           (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n    case 'number': return '(typeof ' + data + EQUAL + '\"' + dataType + '\"' +\n                          (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n    default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\n  }\n}\n\n\nfunction checkDataTypes(dataTypes, data, strictNumbers) {\n  switch (dataTypes.length) {\n    case 1: return checkDataType(dataTypes[0], data, strictNumbers, true);\n    default:\n      var code = '';\n      var types = toHash(dataTypes);\n      if (types.array && types.object) {\n        code = types.null ? '(': '(!' + data + ' || ';\n        code += 'typeof ' + data + ' !== \"object\")';\n        delete types.null;\n        delete types.array;\n        delete types.object;\n      }\n      if (types.number) delete types.integer;\n      for (var t in types)\n        code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true);\n\n      return code;\n  }\n}\n\n\nvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\nfunction coerceToTypes(optionCoerceTypes, dataTypes) {\n  if (Array.isArray(dataTypes)) {\n    var types = [];\n    for (var i=0; i<dataTypes.length; i++) {\n      var t = dataTypes[i];\n      if (COERCE_TO_TYPES[t]) types[types.length] = t;\n      else if (optionCoerceTypes === 'array' && t === 'array') types[types.length] = t;\n    }\n    if (types.length) return types;\n  } else if (COERCE_TO_TYPES[dataTypes]) {\n    return [dataTypes];\n  } else if (optionCoerceTypes === 'array' && dataTypes === 'array') {\n    return ['array'];\n  }\n}\n\n\nfunction toHash(arr) {\n  var hash = {};\n  for (var i=0; i<arr.length; i++) hash[arr[i]] = true;\n  return hash;\n}\n\n\nvar IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nvar SINGLE_QUOTE = /'|\\\\/g;\nfunction getProperty(key) {\n  return typeof key == 'number'\n          ? '[' + key + ']'\n          : IDENTIFIER.test(key)\n            ? '.' + key\n            : \"['\" + escapeQuotes(key) + \"']\";\n}\n\n\nfunction escapeQuotes(str) {\n  return str.replace(SINGLE_QUOTE, '\\\\$&')\n            .replace(/\\n/g, '\\\\n')\n            .replace(/\\r/g, '\\\\r')\n            .replace(/\\f/g, '\\\\f')\n            .replace(/\\t/g, '\\\\t');\n}\n\n\nfunction varOccurences(str, dataVar) {\n  dataVar += '[^0-9]';\n  var matches = str.match(new RegExp(dataVar, 'g'));\n  return matches ? matches.length : 0;\n}\n\n\nfunction varReplace(str, dataVar, expr) {\n  dataVar += '([^0-9])';\n  expr = expr.replace(/\\$/g, '$$$$');\n  return str.replace(new RegExp(dataVar, 'g'), expr + '$1');\n}\n\n\nfunction schemaHasRules(schema, rules) {\n  if (typeof schema == 'boolean') return !schema;\n  for (var key in schema) if (rules[key]) return true;\n}\n\n\nfunction schemaHasRulesExcept(schema, rules, exceptKeyword) {\n  if (typeof schema == 'boolean') return !schema && exceptKeyword != 'not';\n  for (var key in schema) if (key != exceptKeyword && rules[key]) return true;\n}\n\n\nfunction schemaUnknownRules(schema, rules) {\n  if (typeof schema == 'boolean') return;\n  for (var key in schema) if (!rules[key]) return key;\n}\n\n\nfunction toQuotedString(str) {\n  return '\\'' + escapeQuotes(str) + '\\'';\n}\n\n\nfunction getPathExpr(currentPath, expr, jsonPointers, isNumber) {\n  var path = jsonPointers // false by default\n              ? '\\'/\\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \\'~0\\').replace(/\\\\//g, \\'~1\\')')\n              : (isNumber ? '\\'[\\' + ' + expr + ' + \\']\\'' : '\\'[\\\\\\'\\' + ' + expr + ' + \\'\\\\\\']\\'');\n  return joinPaths(currentPath, path);\n}\n\n\nfunction getPath(currentPath, prop, jsonPointers) {\n  var path = jsonPointers // false by default\n              ? toQuotedString('/' + escapeJsonPointer(prop))\n              : toQuotedString(getProperty(prop));\n  return joinPaths(currentPath, path);\n}\n\n\nvar JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nvar RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, lvl, paths) {\n  var up, jsonPointer, data, matches;\n  if ($data === '') return 'rootData';\n  if ($data[0] == '/') {\n    if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data);\n    jsonPointer = $data;\n    data = 'rootData';\n  } else {\n    matches = $data.match(RELATIVE_JSON_POINTER);\n    if (!matches) throw new Error('Invalid JSON-pointer: ' + $data);\n    up = +matches[1];\n    jsonPointer = matches[2];\n    if (jsonPointer == '#') {\n      if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\n      return paths[lvl - up];\n    }\n\n    if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\n    data = 'data' + ((lvl - up) || '');\n    if (!jsonPointer) return data;\n  }\n\n  var expr = data;\n  var segments = jsonPointer.split('/');\n  for (var i=0; i<segments.length; i++) {\n    var segment = segments[i];\n    if (segment) {\n      data += getProperty(unescapeJsonPointer(segment));\n      expr += ' && ' + data;\n    }\n  }\n  return expr;\n}\n\n\nfunction joinPaths (a, b) {\n  if (a == '\"\"') return b;\n  return (a + ' + ' + b).replace(/([^\\\\])' \\+ '/g, '$1');\n}\n\n\nfunction unescapeFragment(str) {\n  return unescapeJsonPointer(decodeURIComponent(str));\n}\n\n\nfunction escapeFragment(str) {\n  return encodeURIComponent(escapeJsonPointer(str));\n}\n\n\nfunction escapeJsonPointer(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\n\nfunction unescapeJsonPointer(str) {\n  return str.replace(/~1/g, '/').replace(/~0/g, '~');\n}\n\n\n/***/ }),\n\n/***/ 8852:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar KEYWORDS = [\n  'multipleOf',\n  'maximum',\n  'exclusiveMaximum',\n  'minimum',\n  'exclusiveMinimum',\n  'maxLength',\n  'minLength',\n  'pattern',\n  'additionalItems',\n  'maxItems',\n  'minItems',\n  'uniqueItems',\n  'maxProperties',\n  'minProperties',\n  'required',\n  'additionalProperties',\n  'enum',\n  'format',\n  'const'\n];\n\nmodule.exports = function (metaSchema, keywordsJsonPointers) {\n  for (var i=0; i<keywordsJsonPointers.length; i++) {\n    metaSchema = JSON.parse(JSON.stringify(metaSchema));\n    var segments = keywordsJsonPointers[i].split('/');\n    var keywords = metaSchema;\n    var j;\n    for (j=1; j<segments.length; j++)\n      keywords = keywords[segments[j]];\n\n    for (j=0; j<KEYWORDS.length; j++) {\n      var key = KEYWORDS[j];\n      var schema = keywords[key];\n      if (schema) {\n        keywords[key] = {\n          anyOf: [\n            schema,\n            { $ref: 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }\n          ]\n        };\n      }\n    }\n  }\n\n  return metaSchema;\n};\n\n\n/***/ }),\n\n/***/ 9407:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar metaSchema = __webpack_require__(8198);\n\nmodule.exports = {\n  $id: 'https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js',\n  definitions: {\n    simpleTypes: metaSchema.definitions.simpleTypes\n  },\n  type: 'object',\n  dependencies: {\n    schema: ['validate'],\n    $data: ['validate'],\n    statements: ['inline'],\n    valid: {not: {required: ['macro']}}\n  },\n  properties: {\n    type: metaSchema.properties.type,\n    schema: {type: 'boolean'},\n    statements: {type: 'boolean'},\n    dependencies: {\n      type: 'array',\n      items: {type: 'string'}\n    },\n    metaSchema: {type: 'object'},\n    modifying: {type: 'boolean'},\n    valid: {type: 'boolean'},\n    $data: {type: 'boolean'},\n    async: {type: 'boolean'},\n    errors: {\n      anyOf: [\n        {type: 'boolean'},\n        {const: 'full'}\n      ]\n    }\n  }\n};\n\n\n/***/ }),\n\n/***/ 1765:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate__limit(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $isMax = $keyword == 'maximum',\n    $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',\n    $schemaExcl = it.schema[$exclusiveKeyword],\n    $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data,\n    $op = $isMax ? '<' : '>',\n    $notOp = $isMax ? '>' : '<',\n    $errorKeyword = undefined;\n  if (!($isData || typeof $schema == 'number' || $schema === undefined)) {\n    throw new Error($keyword + ' must be number');\n  }\n  if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) {\n    throw new Error($exclusiveKeyword + ' must be number or boolean');\n  }\n  if ($isDataExcl) {\n    var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\n      $exclusive = 'exclusive' + $lvl,\n      $exclType = 'exclType' + $lvl,\n      $exclIsNumber = 'exclIsNumber' + $lvl,\n      $opExpr = 'op' + $lvl,\n      $opStr = '\\' + ' + $opExpr + ' + \\'';\n    out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\n    $schemaValueExcl = 'schemaExcl' + $lvl;\n    out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \\'boolean\\' && ' + ($exclType) + ' != \\'undefined\\' && ' + ($exclType) + ' != \\'number\\') { ';\n    var $errorKeyword = $exclusiveKeyword;\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    out += ' } else if ( ';\n    if ($isData) {\n      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n    }\n    out += ' ' + ($exclType) + ' == \\'number\\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\'; ';\n    if ($schema === undefined) {\n      $errorKeyword = $exclusiveKeyword;\n      $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n      $schemaValue = $schemaValueExcl;\n      $isData = $isDataExcl;\n    }\n  } else {\n    var $exclIsNumber = typeof $schemaExcl == 'number',\n      $opStr = $op;\n    if ($exclIsNumber && $isData) {\n      var $opExpr = '\\'' + $opStr + '\\'';\n      out += ' if ( ';\n      if ($isData) {\n        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n      }\n      out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { ';\n    } else {\n      if ($exclIsNumber && $schema === undefined) {\n        $exclusive = true;\n        $errorKeyword = $exclusiveKeyword;\n        $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n        $schemaValue = $schemaExcl;\n        $notOp += '=';\n      } else {\n        if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);\n        if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {\n          $exclusive = true;\n          $errorKeyword = $exclusiveKeyword;\n          $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n          $notOp += '=';\n        } else {\n          $exclusive = false;\n          $opStr += '=';\n        }\n      }\n      var $opExpr = '\\'' + $opStr + '\\'';\n      out += ' if ( ';\n      if ($isData) {\n        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n      }\n      out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { ';\n    }\n  }\n  $errorKeyword = $errorKeyword || $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be ' + ($opStr) + ' ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue);\n      } else {\n        out += '' + ($schemaValue) + '\\'';\n      }\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' } ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 9337:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate__limitItems(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  var $op = $keyword == 'maxItems' ? '>' : '<';\n  out += 'if ( ';\n  if ($isData) {\n    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n  }\n  out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n  var $errorKeyword = $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should NOT have ';\n      if ($keyword == 'maxItems') {\n        out += 'more';\n      } else {\n        out += 'fewer';\n      }\n      out += ' than ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + ($schema);\n      }\n      out += ' items\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 5433:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate__limitLength(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  var $op = $keyword == 'maxLength' ? '>' : '<';\n  out += 'if ( ';\n  if ($isData) {\n    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n  }\n  if (it.opts.unicode === false) {\n    out += ' ' + ($data) + '.length ';\n  } else {\n    out += ' ucs2length(' + ($data) + ') ';\n  }\n  out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\n  var $errorKeyword = $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should NOT be ';\n      if ($keyword == 'maxLength') {\n        out += 'longer';\n      } else {\n        out += 'shorter';\n      }\n      out += ' than ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + ($schema);\n      }\n      out += ' characters\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 7724:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate__limitProperties(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  var $op = $keyword == 'maxProperties' ? '>' : '<';\n  out += 'if ( ';\n  if ($isData) {\n    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n  }\n  out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n  var $errorKeyword = $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should NOT have ';\n      if ($keyword == 'maxProperties') {\n        out += 'more';\n      } else {\n        out += 'fewer';\n      }\n      out += ' than ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + ($schema);\n      }\n      out += ' properties\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 3531:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_allOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $currentBaseId = $it.baseId,\n    $allSchemasEmpty = true;\n  var arr1 = $schema;\n  if (arr1) {\n    var $sch, $i = -1,\n      l1 = arr1.length - 1;\n    while ($i < l1) {\n      $sch = arr1[$i += 1];\n      if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n        $allSchemasEmpty = false;\n        $it.schema = $sch;\n        $it.schemaPath = $schemaPath + '[' + $i + ']';\n        $it.errSchemaPath = $errSchemaPath + '/' + $i;\n        out += '  ' + (it.validate($it)) + ' ';\n        $it.baseId = $currentBaseId;\n        if ($breakOnError) {\n          out += ' if (' + ($nextValid) + ') { ';\n          $closingBraces += '}';\n        }\n      }\n    }\n  }\n  if ($breakOnError) {\n    if ($allSchemasEmpty) {\n      out += ' if (true) { ';\n    } else {\n      out += ' ' + ($closingBraces.slice(0, -1)) + ' ';\n    }\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 8854:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_anyOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $noEmptySchema = $schema.every(function($sch) {\n    return (it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all));\n  });\n  if ($noEmptySchema) {\n    var $currentBaseId = $it.baseId;\n    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false;  ';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    var arr1 = $schema;\n    if (arr1) {\n      var $sch, $i = -1,\n        l1 = arr1.length - 1;\n      while ($i < l1) {\n        $sch = arr1[$i += 1];\n        $it.schema = $sch;\n        $it.schemaPath = $schemaPath + '[' + $i + ']';\n        $it.errSchemaPath = $errSchemaPath + '/' + $i;\n        out += '  ' + (it.validate($it)) + ' ';\n        $it.baseId = $currentBaseId;\n        out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { ';\n        $closingBraces += '}';\n      }\n    }\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should match some schema in anyOf\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError(vErrors); ';\n      } else {\n        out += ' validate.errors = vErrors; return false; ';\n      }\n    }\n    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n    if (it.opts.allErrors) {\n      out += ' } ';\n    }\n  } else {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 8372:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_comment(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $schema = it.schema[$keyword];\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $comment = it.util.toQuotedString($schema);\n  if (it.opts.$comment === true) {\n    out += ' console.log(' + ($comment) + ');';\n  } else if (typeof it.opts.$comment == 'function') {\n    out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 9650:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_const(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!$isData) {\n    out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\n  }\n  out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') {   ';\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('const') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be equal to constant\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' }';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 1292:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_contains(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $idx = 'i' + $lvl,\n    $dataNxt = $it.dataLevel = it.dataLevel + 1,\n    $nextData = 'data' + $dataNxt,\n    $currentBaseId = it.baseId,\n    $nonEmptySchema = (it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all));\n  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n  if ($nonEmptySchema) {\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n    var $passData = $data + '[' + $idx + ']';\n    $it.dataPathArr[$dataNxt] = $idx;\n    var $code = it.validate($it);\n    $it.baseId = $currentBaseId;\n    if (it.util.varOccurences($code, $nextData) < 2) {\n      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n    } else {\n      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n    }\n    out += ' if (' + ($nextValid) + ') break; }  ';\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {';\n  } else {\n    out += ' if (' + ($data) + '.length == 0) {';\n  }\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('contains') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should contain a valid item\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' } else { ';\n  if ($nonEmptySchema) {\n    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n  }\n  if (it.opts.allErrors) {\n    out += ' } ';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 8050:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_custom(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $rule = this,\n    $definition = 'definition' + $lvl,\n    $rDef = $rule.definition,\n    $closingBraces = '';\n  var $compile, $inline, $macro, $ruleValidate, $validateCode;\n  if ($isData && $rDef.$data) {\n    $validateCode = 'keywordValidate' + $lvl;\n    var $validateSchema = $rDef.validateSchema;\n    out += ' var ' + ($definition) + ' = RULES.custom[\\'' + ($keyword) + '\\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;';\n  } else {\n    $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);\n    if (!$ruleValidate) return;\n    $schemaValue = 'validate.schema' + $schemaPath;\n    $validateCode = $ruleValidate.code;\n    $compile = $rDef.compile;\n    $inline = $rDef.inline;\n    $macro = $rDef.macro;\n  }\n  var $ruleErrs = $validateCode + '.errors',\n    $i = 'i' + $lvl,\n    $ruleErr = 'ruleErr' + $lvl,\n    $asyncKeyword = $rDef.async;\n  if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema');\n  if (!($inline || $macro)) {\n    out += '' + ($ruleErrs) + ' = null;';\n  }\n  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n  if ($isData && $rDef.$data) {\n    $closingBraces += '}';\n    out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { ';\n    if ($validateSchema) {\n      $closingBraces += '}';\n      out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { ';\n    }\n  }\n  if ($inline) {\n    if ($rDef.statements) {\n      out += ' ' + ($ruleValidate.validate) + ' ';\n    } else {\n      out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; ';\n    }\n  } else if ($macro) {\n    var $it = it.util.copy(it);\n    var $closingBraces = '';\n    $it.level++;\n    var $nextValid = 'valid' + $it.level;\n    $it.schema = $ruleValidate.validate;\n    $it.schemaPath = '';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    var $code = it.validate($it).replace(/validate\\.schema/g, $validateCode);\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' ' + ($code);\n  } else {\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = '';\n    out += '  ' + ($validateCode) + '.call( ';\n    if (it.opts.passContext) {\n      out += 'this';\n    } else {\n      out += 'self';\n    }\n    if ($compile || $rDef.schema === false) {\n      out += ' , ' + ($data) + ' ';\n    } else {\n      out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' ';\n    }\n    out += ' , (dataPath || \\'\\')';\n    if (it.errorPath != '\"\"') {\n      out += ' + ' + (it.errorPath);\n    }\n    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData )  ';\n    var def_callRuleValidate = out;\n    out = $$outStack.pop();\n    if ($rDef.errors === false) {\n      out += ' ' + ($valid) + ' = ';\n      if ($asyncKeyword) {\n        out += 'await ';\n      }\n      out += '' + (def_callRuleValidate) + '; ';\n    } else {\n      if ($asyncKeyword) {\n        $ruleErrs = 'customErrors' + $lvl;\n        out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } ';\n      } else {\n        out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; ';\n      }\n    }\n  }\n  if ($rDef.modifying) {\n    out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];';\n  }\n  out += '' + ($closingBraces);\n  if ($rDef.valid) {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  } else {\n    out += ' if ( ';\n    if ($rDef.valid === undefined) {\n      out += ' !';\n      if ($macro) {\n        out += '' + ($nextValid);\n      } else {\n        out += '' + ($valid);\n      }\n    } else {\n      out += ' ' + (!$rDef.valid) + ' ';\n    }\n    out += ') { ';\n    $errorKeyword = $rule.keyword;\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = '';\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    var def_customError = out;\n    out = $$outStack.pop();\n    if ($inline) {\n      if ($rDef.errors) {\n        if ($rDef.errors != 'full') {\n          out += '  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\n          if (it.opts.verbose) {\n            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n          }\n          out += ' } ';\n        }\n      } else {\n        if ($rDef.errors === false) {\n          out += ' ' + (def_customError) + ' ';\n        } else {\n          out += ' if (' + ($errs) + ' == errors) { ' + (def_customError) + ' } else {  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\n          if (it.opts.verbose) {\n            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n          }\n          out += ' } } ';\n        }\n      }\n    } else if ($macro) {\n      out += '   var err =   '; /* istanbul ignore else */\n      if (it.createErrors !== false) {\n        out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\n        if (it.opts.messages !== false) {\n          out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\n        }\n        if (it.opts.verbose) {\n          out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n        }\n        out += ' } ';\n      } else {\n        out += ' {} ';\n      }\n      out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n      if (!it.compositeRule && $breakOnError) {\n        /* istanbul ignore if */\n        if (it.async) {\n          out += ' throw new ValidationError(vErrors); ';\n        } else {\n          out += ' validate.errors = vErrors; return false; ';\n        }\n      }\n    } else {\n      if ($rDef.errors === false) {\n        out += ' ' + (def_customError) + ' ';\n      } else {\n        out += ' if (Array.isArray(' + ($ruleErrs) + ')) { if (vErrors === null) vErrors = ' + ($ruleErrs) + '; else vErrors = vErrors.concat(' + ($ruleErrs) + '); errors = vErrors.length;  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + ';  ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\";  ';\n        if (it.opts.verbose) {\n          out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n        }\n        out += ' } } else { ' + (def_customError) + ' } ';\n      }\n    }\n    out += ' } ';\n    if ($breakOnError) {\n      out += ' else { ';\n    }\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 2860:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_dependencies(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $schemaDeps = {},\n    $propertyDeps = {},\n    $ownProperties = it.opts.ownProperties;\n  for ($property in $schema) {\n    if ($property == '__proto__') continue;\n    var $sch = $schema[$property];\n    var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;\n    $deps[$property] = $sch;\n  }\n  out += 'var ' + ($errs) + ' = errors;';\n  var $currentErrorPath = it.errorPath;\n  out += 'var missing' + ($lvl) + ';';\n  for (var $property in $propertyDeps) {\n    $deps = $propertyDeps[$property];\n    if ($deps.length) {\n      out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n      if ($ownProperties) {\n        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n      }\n      if ($breakOnError) {\n        out += ' && ( ';\n        var arr1 = $deps;\n        if (arr1) {\n          var $propertyKey, $i = -1,\n            l1 = arr1.length - 1;\n          while ($i < l1) {\n            $propertyKey = arr1[$i += 1];\n            if ($i) {\n              out += ' || ';\n            }\n            var $prop = it.util.getProperty($propertyKey),\n              $useData = $data + $prop;\n            out += ' ( ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n          }\n        }\n        out += ')) {  ';\n        var $propertyPath = 'missing' + $lvl,\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n        }\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'should have ';\n            if ($deps.length == 1) {\n              out += 'property ' + (it.util.escapeQuotes($deps[0]));\n            } else {\n              out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n            }\n            out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n      } else {\n        out += ' ) { ';\n        var arr2 = $deps;\n        if (arr2) {\n          var $propertyKey, i2 = -1,\n            l2 = arr2.length - 1;\n          while (i2 < l2) {\n            $propertyKey = arr2[i2 += 1];\n            var $prop = it.util.getProperty($propertyKey),\n              $missingProperty = it.util.escapeQuotes($propertyKey),\n              $useData = $data + $prop;\n            if (it.opts._errorDataPathProperty) {\n              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n            }\n            out += ' if ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') {  var err =   '; /* istanbul ignore else */\n            if (it.createErrors !== false) {\n              out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n              if (it.opts.messages !== false) {\n                out += ' , message: \\'should have ';\n                if ($deps.length == 1) {\n                  out += 'property ' + (it.util.escapeQuotes($deps[0]));\n                } else {\n                  out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n                }\n                out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n              }\n              if (it.opts.verbose) {\n                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n              }\n              out += ' } ';\n            } else {\n              out += ' {} ';\n            }\n            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n          }\n        }\n      }\n      out += ' }   ';\n      if ($breakOnError) {\n        $closingBraces += '}';\n        out += ' else { ';\n      }\n    }\n  }\n  it.errorPath = $currentErrorPath;\n  var $currentBaseId = $it.baseId;\n  for (var $property in $schemaDeps) {\n    var $sch = $schemaDeps[$property];\n    if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n      out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n      if ($ownProperties) {\n        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n      }\n      out += ') { ';\n      $it.schema = $sch;\n      $it.schemaPath = $schemaPath + it.util.getProperty($property);\n      $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\n      out += '  ' + (it.validate($it)) + ' ';\n      $it.baseId = $currentBaseId;\n      out += ' }  ';\n      if ($breakOnError) {\n        out += ' if (' + ($nextValid) + ') { ';\n        $closingBraces += '}';\n      }\n    }\n  }\n  if ($breakOnError) {\n    out += '   ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 7112:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_enum(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $i = 'i' + $lvl,\n    $vSchema = 'schema' + $lvl;\n  if (!$isData) {\n    out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';';\n  }\n  out += 'var ' + ($valid) + ';';\n  if ($isData) {\n    out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n  }\n  out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';\n  if ($isData) {\n    out += '  }  ';\n  }\n  out += ' if (!' + ($valid) + ') {   ';\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('enum') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be equal to one of the allowed values\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' }';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 4682:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_format(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  if (it.opts.format === false) {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n    return out;\n  }\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $unknownFormats = it.opts.unknownFormats,\n    $allowUnknown = Array.isArray($unknownFormats);\n  if ($isData) {\n    var $format = 'format' + $lvl,\n      $isObject = 'isObject' + $lvl,\n      $formatType = 'formatType' + $lvl;\n    out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \\'object\\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \\'string\\'; if (' + ($isObject) + ') { ';\n    if (it.async) {\n      out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; ';\n    }\n    out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if (  ';\n    if ($isData) {\n      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n    }\n    out += ' (';\n    if ($unknownFormats != 'ignore') {\n      out += ' (' + ($schemaValue) + ' && !' + ($format) + ' ';\n      if ($allowUnknown) {\n        out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 ';\n      }\n      out += ') || ';\n    }\n    out += ' (' + ($format) + ' && ' + ($formatType) + ' == \\'' + ($ruleType) + '\\' && !(typeof ' + ($format) + ' == \\'function\\' ? ';\n    if (it.async) {\n      out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';\n    } else {\n      out += ' ' + ($format) + '(' + ($data) + ') ';\n    }\n    out += ' : ' + ($format) + '.test(' + ($data) + '))))) {';\n  } else {\n    var $format = it.formats[$schema];\n    if (!$format) {\n      if ($unknownFormats == 'ignore') {\n        it.logger.warn('unknown format \"' + $schema + '\" ignored in schema at path \"' + it.errSchemaPath + '\"');\n        if ($breakOnError) {\n          out += ' if (true) { ';\n        }\n        return out;\n      } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {\n        if ($breakOnError) {\n          out += ' if (true) { ';\n        }\n        return out;\n      } else {\n        throw new Error('unknown format \"' + $schema + '\" is used in schema at path \"' + it.errSchemaPath + '\"');\n      }\n    }\n    var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;\n    var $formatType = $isObject && $format.type || 'string';\n    if ($isObject) {\n      var $async = $format.async === true;\n      $format = $format.validate;\n    }\n    if ($formatType != $ruleType) {\n      if ($breakOnError) {\n        out += ' if (true) { ';\n      }\n      return out;\n    }\n    if ($async) {\n      if (!it.async) throw new Error('async format in sync schema');\n      var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';\n      out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { ';\n    } else {\n      out += ' if (! ';\n      var $formatRef = 'formats' + it.util.getProperty($schema);\n      if ($isObject) $formatRef += '.validate';\n      if (typeof $format == 'function') {\n        out += ' ' + ($formatRef) + '(' + ($data) + ') ';\n      } else {\n        out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';\n      }\n      out += ') { ';\n    }\n  }\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('format') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format:  ';\n    if ($isData) {\n      out += '' + ($schemaValue);\n    } else {\n      out += '' + (it.util.toQuotedString($schema));\n    }\n    out += '  } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should match format \"';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + (it.util.escapeQuotes($schema));\n      }\n      out += '\"\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + (it.util.toQuotedString($schema));\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' } ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 1678:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_if(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $thenSch = it.schema['then'],\n    $elseSch = it.schema['else'],\n    $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? (typeof $thenSch == 'object' && Object.keys($thenSch).length > 0) || $thenSch === false : it.util.schemaHasRules($thenSch, it.RULES.all)),\n    $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? (typeof $elseSch == 'object' && Object.keys($elseSch).length > 0) || $elseSch === false : it.util.schemaHasRules($elseSch, it.RULES.all)),\n    $currentBaseId = $it.baseId;\n  if ($thenPresent || $elsePresent) {\n    var $ifClause;\n    $it.createErrors = false;\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true;  ';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    out += '  ' + (it.validate($it)) + ' ';\n    $it.baseId = $currentBaseId;\n    $it.createErrors = true;\n    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }  ';\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    if ($thenPresent) {\n      out += ' if (' + ($nextValid) + ') {  ';\n      $it.schema = it.schema['then'];\n      $it.schemaPath = it.schemaPath + '.then';\n      $it.errSchemaPath = it.errSchemaPath + '/then';\n      out += '  ' + (it.validate($it)) + ' ';\n      $it.baseId = $currentBaseId;\n      out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n      if ($thenPresent && $elsePresent) {\n        $ifClause = 'ifClause' + $lvl;\n        out += ' var ' + ($ifClause) + ' = \\'then\\'; ';\n      } else {\n        $ifClause = '\\'then\\'';\n      }\n      out += ' } ';\n      if ($elsePresent) {\n        out += ' else { ';\n      }\n    } else {\n      out += ' if (!' + ($nextValid) + ') { ';\n    }\n    if ($elsePresent) {\n      $it.schema = it.schema['else'];\n      $it.schemaPath = it.schemaPath + '.else';\n      $it.errSchemaPath = it.errSchemaPath + '/else';\n      out += '  ' + (it.validate($it)) + ' ';\n      $it.baseId = $currentBaseId;\n      out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n      if ($thenPresent && $elsePresent) {\n        $ifClause = 'ifClause' + $lvl;\n        out += ' var ' + ($ifClause) + ' = \\'else\\'; ';\n      } else {\n        $ifClause = '\\'else\\'';\n      }\n      out += ' } ';\n    }\n    out += ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('if') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should match \"\\' + ' + ($ifClause) + ' + \\'\" schema\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError(vErrors); ';\n      } else {\n        out += ' validate.errors = vErrors; return false; ';\n      }\n    }\n    out += ' }   ';\n    if ($breakOnError) {\n      out += ' else { ';\n    }\n  } else {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 8161:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n//all requires must be explicit because browserify won't work with dynamic requires\nmodule.exports = {\n  '$ref': __webpack_require__(7096),\n  allOf: __webpack_require__(3531),\n  anyOf: __webpack_require__(8854),\n  '$comment': __webpack_require__(8372),\n  const: __webpack_require__(9650),\n  contains: __webpack_require__(1292),\n  dependencies: __webpack_require__(2860),\n  'enum': __webpack_require__(7112),\n  format: __webpack_require__(4682),\n  'if': __webpack_require__(1678),\n  items: __webpack_require__(3913),\n  maximum: __webpack_require__(1765),\n  minimum: __webpack_require__(1765),\n  maxItems: __webpack_require__(9337),\n  minItems: __webpack_require__(9337),\n  maxLength: __webpack_require__(5433),\n  minLength: __webpack_require__(5433),\n  maxProperties: __webpack_require__(7724),\n  minProperties: __webpack_require__(7724),\n  multipleOf: __webpack_require__(812),\n  not: __webpack_require__(1004),\n  oneOf: __webpack_require__(6288),\n  pattern: __webpack_require__(2079),\n  properties: __webpack_require__(2124),\n  propertyNames: __webpack_require__(4926),\n  required: __webpack_require__(2000),\n  uniqueItems: __webpack_require__(7812),\n  validate: __webpack_require__(1035)\n};\n\n\n/***/ }),\n\n/***/ 3913:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_items(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $idx = 'i' + $lvl,\n    $dataNxt = $it.dataLevel = it.dataLevel + 1,\n    $nextData = 'data' + $dataNxt,\n    $currentBaseId = it.baseId;\n  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n  if (Array.isArray($schema)) {\n    var $additionalItems = it.schema.additionalItems;\n    if ($additionalItems === false) {\n      out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';\n      var $currErrSchemaPath = $errSchemaPath;\n      $errSchemaPath = it.errSchemaPath + '/additionalItems';\n      out += '  if (!' + ($valid) + ') {   ';\n      var $$outStack = $$outStack || [];\n      $$outStack.push(out);\n      out = ''; /* istanbul ignore else */\n      if (it.createErrors !== false) {\n        out += ' { keyword: \\'' + ('additionalItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } ';\n        if (it.opts.messages !== false) {\n          out += ' , message: \\'should NOT have more than ' + ($schema.length) + ' items\\' ';\n        }\n        if (it.opts.verbose) {\n          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n        }\n        out += ' } ';\n      } else {\n        out += ' {} ';\n      }\n      var __err = out;\n      out = $$outStack.pop();\n      if (!it.compositeRule && $breakOnError) {\n        /* istanbul ignore if */\n        if (it.async) {\n          out += ' throw new ValidationError([' + (__err) + ']); ';\n        } else {\n          out += ' validate.errors = [' + (__err) + ']; return false; ';\n        }\n      } else {\n        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n      }\n      out += ' } ';\n      $errSchemaPath = $currErrSchemaPath;\n      if ($breakOnError) {\n        $closingBraces += '}';\n        out += ' else { ';\n      }\n    }\n    var arr1 = $schema;\n    if (arr1) {\n      var $sch, $i = -1,\n        l1 = arr1.length - 1;\n      while ($i < l1) {\n        $sch = arr1[$i += 1];\n        if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n          out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';\n          var $passData = $data + '[' + $i + ']';\n          $it.schema = $sch;\n          $it.schemaPath = $schemaPath + '[' + $i + ']';\n          $it.errSchemaPath = $errSchemaPath + '/' + $i;\n          $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\n          $it.dataPathArr[$dataNxt] = $i;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          out += ' }  ';\n          if ($breakOnError) {\n            out += ' if (' + ($nextValid) + ') { ';\n            $closingBraces += '}';\n          }\n        }\n      }\n    }\n    if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? (typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0) || $additionalItems === false : it.util.schemaHasRules($additionalItems, it.RULES.all))) {\n      $it.schema = $additionalItems;\n      $it.schemaPath = it.schemaPath + '.additionalItems';\n      $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\n      out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') {  for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n      $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n      var $passData = $data + '[' + $idx + ']';\n      $it.dataPathArr[$dataNxt] = $idx;\n      var $code = it.validate($it);\n      $it.baseId = $currentBaseId;\n      if (it.util.varOccurences($code, $nextData) < 2) {\n        out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n      } else {\n        out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n      }\n      if ($breakOnError) {\n        out += ' if (!' + ($nextValid) + ') break; ';\n      }\n      out += ' } }  ';\n      if ($breakOnError) {\n        out += ' if (' + ($nextValid) + ') { ';\n        $closingBraces += '}';\n      }\n    }\n  } else if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += '  for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n    var $passData = $data + '[' + $idx + ']';\n    $it.dataPathArr[$dataNxt] = $idx;\n    var $code = it.validate($it);\n    $it.baseId = $currentBaseId;\n    if (it.util.varOccurences($code, $nextData) < 2) {\n      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n    } else {\n      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n    }\n    if ($breakOnError) {\n      out += ' if (!' + ($nextValid) + ') break; ';\n    }\n    out += ' }';\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 812:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_multipleOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  out += 'var division' + ($lvl) + ';if (';\n  if ($isData) {\n    out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\n  }\n  out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\n  if (it.opts.multipleOfPrecision) {\n    out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\n  } else {\n    out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\n  }\n  out += ' ) ';\n  if ($isData) {\n    out += '  )  ';\n  }\n  out += ' ) {   ';\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be multiple of ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue);\n      } else {\n        out += '' + ($schemaValue) + '\\'';\n      }\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 1004:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_not(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += ' var ' + ($errs) + ' = errors;  ';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    $it.createErrors = false;\n    var $allErrorsOption;\n    if ($it.opts.allErrors) {\n      $allErrorsOption = $it.opts.allErrors;\n      $it.opts.allErrors = false;\n    }\n    out += ' ' + (it.validate($it)) + ' ';\n    $it.createErrors = true;\n    if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' if (' + ($nextValid) + ') {   ';\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should NOT be valid\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n    if (it.opts.allErrors) {\n      out += ' } ';\n    }\n  } else {\n    out += '  var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should NOT be valid\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if ($breakOnError) {\n      out += ' if (false) { ';\n    }\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 6288:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_oneOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $currentBaseId = $it.baseId,\n    $prevValid = 'prevValid' + $lvl,\n    $passingSchemas = 'passingSchemas' + $lvl;\n  out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; ';\n  var $wasComposite = it.compositeRule;\n  it.compositeRule = $it.compositeRule = true;\n  var arr1 = $schema;\n  if (arr1) {\n    var $sch, $i = -1,\n      l1 = arr1.length - 1;\n    while ($i < l1) {\n      $sch = arr1[$i += 1];\n      if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n        $it.schema = $sch;\n        $it.schemaPath = $schemaPath + '[' + $i + ']';\n        $it.errSchemaPath = $errSchemaPath + '/' + $i;\n        out += '  ' + (it.validate($it)) + ' ';\n        $it.baseId = $currentBaseId;\n      } else {\n        out += ' var ' + ($nextValid) + ' = true; ';\n      }\n      if ($i) {\n        out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { ';\n        $closingBraces += '}';\n      }\n      out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }';\n    }\n  }\n  it.compositeRule = $it.compositeRule = $wasComposite;\n  out += '' + ($closingBraces) + 'if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should match exactly one schema in oneOf\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError(vErrors); ';\n    } else {\n      out += ' validate.errors = vErrors; return false; ';\n    }\n  }\n  out += '} else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\n  if (it.opts.allErrors) {\n    out += ' } ';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 2079:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_pattern(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $regExpCode = it.opts.regExp ? 'regExp' : 'new RegExp';\n  if ($isData) {\n    out += ' var ' + ($valid) + ' = true; try { ' + ($valid) + ' = ' + ($regExpCode) + '(' + ($schemaValue) + ').test(' + ($data) + '); } catch(e) { ' + ($valid) + ' = false; } if ( ';\n    if ($isData) {\n      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n    }\n    out += ' !' + ($valid) + ') {';\n  } else {\n    var $regexp = it.usePattern($schema);\n    out += ' if ( ';\n    if ($isData) {\n      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n    }\n    out += ' !' + ($regexp) + '.test(' + ($data) + ') ) {';\n  }\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern:  ';\n    if ($isData) {\n      out += '' + ($schemaValue);\n    } else {\n      out += '' + (it.util.toQuotedString($schema));\n    }\n    out += '  } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should match pattern \"';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + (it.util.escapeQuotes($schema));\n      }\n      out += '\"\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + (it.util.toQuotedString($schema));\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 2124:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_properties(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $key = 'key' + $lvl,\n    $idx = 'idx' + $lvl,\n    $dataNxt = $it.dataLevel = it.dataLevel + 1,\n    $nextData = 'data' + $dataNxt,\n    $dataProperties = 'dataProperties' + $lvl;\n  var $schemaKeys = Object.keys($schema || {}).filter(notProto),\n    $pProperties = it.schema.patternProperties || {},\n    $pPropertyKeys = Object.keys($pProperties).filter(notProto),\n    $aProperties = it.schema.additionalProperties,\n    $someProperties = $schemaKeys.length || $pPropertyKeys.length,\n    $noAdditional = $aProperties === false,\n    $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\n    $removeAdditional = it.opts.removeAdditional,\n    $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional,\n    $ownProperties = it.opts.ownProperties,\n    $currentBaseId = it.baseId;\n  var $required = it.schema.required;\n  if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) {\n    var $requiredHash = it.util.toHash($required);\n  }\n\n  function notProto(p) {\n    return p !== '__proto__';\n  }\n  out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';\n  if ($ownProperties) {\n    out += ' var ' + ($dataProperties) + ' = undefined;';\n  }\n  if ($checkAdditional) {\n    if ($ownProperties) {\n      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n    } else {\n      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n    }\n    if ($someProperties) {\n      out += ' var isAdditional' + ($lvl) + ' = !(false ';\n      if ($schemaKeys.length) {\n        if ($schemaKeys.length > 8) {\n          out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') ';\n        } else {\n          var arr1 = $schemaKeys;\n          if (arr1) {\n            var $propertyKey, i1 = -1,\n              l1 = arr1.length - 1;\n            while (i1 < l1) {\n              $propertyKey = arr1[i1 += 1];\n              out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\n            }\n          }\n        }\n      }\n      if ($pPropertyKeys.length) {\n        var arr2 = $pPropertyKeys;\n        if (arr2) {\n          var $pProperty, $i = -1,\n            l2 = arr2.length - 1;\n          while ($i < l2) {\n            $pProperty = arr2[$i += 1];\n            out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') ';\n          }\n        }\n      }\n      out += ' ); if (isAdditional' + ($lvl) + ') { ';\n    }\n    if ($removeAdditional == 'all') {\n      out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n    } else {\n      var $currentErrorPath = it.errorPath;\n      var $additionalProperty = '\\' + ' + $key + ' + \\'';\n      if (it.opts._errorDataPathProperty) {\n        it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n      }\n      if ($noAdditional) {\n        if ($removeAdditional) {\n          out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n        } else {\n          out += ' ' + ($nextValid) + ' = false; ';\n          var $currErrSchemaPath = $errSchemaPath;\n          $errSchemaPath = it.errSchemaPath + '/additionalProperties';\n          var $$outStack = $$outStack || [];\n          $$outStack.push(out);\n          out = ''; /* istanbul ignore else */\n          if (it.createErrors !== false) {\n            out += ' { keyword: \\'' + ('additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\n            if (it.opts.messages !== false) {\n              out += ' , message: \\'';\n              if (it.opts._errorDataPathProperty) {\n                out += 'is an invalid additional property';\n              } else {\n                out += 'should NOT have additional properties';\n              }\n              out += '\\' ';\n            }\n            if (it.opts.verbose) {\n              out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n            }\n            out += ' } ';\n          } else {\n            out += ' {} ';\n          }\n          var __err = out;\n          out = $$outStack.pop();\n          if (!it.compositeRule && $breakOnError) {\n            /* istanbul ignore if */\n            if (it.async) {\n              out += ' throw new ValidationError([' + (__err) + ']); ';\n            } else {\n              out += ' validate.errors = [' + (__err) + ']; return false; ';\n            }\n          } else {\n            out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n          }\n          $errSchemaPath = $currErrSchemaPath;\n          if ($breakOnError) {\n            out += ' break; ';\n          }\n        }\n      } else if ($additionalIsSchema) {\n        if ($removeAdditional == 'failing') {\n          out += ' var ' + ($errs) + ' = errors;  ';\n          var $wasComposite = it.compositeRule;\n          it.compositeRule = $it.compositeRule = true;\n          $it.schema = $aProperties;\n          $it.schemaPath = it.schemaPath + '.additionalProperties';\n          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n          var $passData = $data + '[' + $key + ']';\n          $it.dataPathArr[$dataNxt] = $key;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; }  ';\n          it.compositeRule = $it.compositeRule = $wasComposite;\n        } else {\n          $it.schema = $aProperties;\n          $it.schemaPath = it.schemaPath + '.additionalProperties';\n          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n          var $passData = $data + '[' + $key + ']';\n          $it.dataPathArr[$dataNxt] = $key;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          if ($breakOnError) {\n            out += ' if (!' + ($nextValid) + ') break; ';\n          }\n        }\n      }\n      it.errorPath = $currentErrorPath;\n    }\n    if ($someProperties) {\n      out += ' } ';\n    }\n    out += ' }  ';\n    if ($breakOnError) {\n      out += ' if (' + ($nextValid) + ') { ';\n      $closingBraces += '}';\n    }\n  }\n  var $useDefaults = it.opts.useDefaults && !it.compositeRule;\n  if ($schemaKeys.length) {\n    var arr3 = $schemaKeys;\n    if (arr3) {\n      var $propertyKey, i3 = -1,\n        l3 = arr3.length - 1;\n      while (i3 < l3) {\n        $propertyKey = arr3[i3 += 1];\n        var $sch = $schema[$propertyKey];\n        if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n          var $prop = it.util.getProperty($propertyKey),\n            $passData = $data + $prop,\n            $hasDefault = $useDefaults && $sch.default !== undefined;\n          $it.schema = $sch;\n          $it.schemaPath = $schemaPath + $prop;\n          $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\n          $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\n          $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            $code = it.util.varReplace($code, $nextData, $passData);\n            var $useData = $passData;\n          } else {\n            var $useData = $nextData;\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\n          }\n          if ($hasDefault) {\n            out += ' ' + ($code) + ' ';\n          } else {\n            if ($requiredHash && $requiredHash[$propertyKey]) {\n              out += ' if ( ' + ($useData) + ' === undefined ';\n              if ($ownProperties) {\n                out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n              }\n              out += ') { ' + ($nextValid) + ' = false; ';\n              var $currentErrorPath = it.errorPath,\n                $currErrSchemaPath = $errSchemaPath,\n                $missingProperty = it.util.escapeQuotes($propertyKey);\n              if (it.opts._errorDataPathProperty) {\n                it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n              }\n              $errSchemaPath = it.errSchemaPath + '/required';\n              var $$outStack = $$outStack || [];\n              $$outStack.push(out);\n              out = ''; /* istanbul ignore else */\n              if (it.createErrors !== false) {\n                out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n                if (it.opts.messages !== false) {\n                  out += ' , message: \\'';\n                  if (it.opts._errorDataPathProperty) {\n                    out += 'is a required property';\n                  } else {\n                    out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n                  }\n                  out += '\\' ';\n                }\n                if (it.opts.verbose) {\n                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n                }\n                out += ' } ';\n              } else {\n                out += ' {} ';\n              }\n              var __err = out;\n              out = $$outStack.pop();\n              if (!it.compositeRule && $breakOnError) {\n                /* istanbul ignore if */\n                if (it.async) {\n                  out += ' throw new ValidationError([' + (__err) + ']); ';\n                } else {\n                  out += ' validate.errors = [' + (__err) + ']; return false; ';\n                }\n              } else {\n                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n              }\n              $errSchemaPath = $currErrSchemaPath;\n              it.errorPath = $currentErrorPath;\n              out += ' } else { ';\n            } else {\n              if ($breakOnError) {\n                out += ' if ( ' + ($useData) + ' === undefined ';\n                if ($ownProperties) {\n                  out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n                }\n                out += ') { ' + ($nextValid) + ' = true; } else { ';\n              } else {\n                out += ' if (' + ($useData) + ' !== undefined ';\n                if ($ownProperties) {\n                  out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n                }\n                out += ' ) { ';\n              }\n            }\n            out += ' ' + ($code) + ' } ';\n          }\n        }\n        if ($breakOnError) {\n          out += ' if (' + ($nextValid) + ') { ';\n          $closingBraces += '}';\n        }\n      }\n    }\n  }\n  if ($pPropertyKeys.length) {\n    var arr4 = $pPropertyKeys;\n    if (arr4) {\n      var $pProperty, i4 = -1,\n        l4 = arr4.length - 1;\n      while (i4 < l4) {\n        $pProperty = arr4[i4 += 1];\n        var $sch = $pProperties[$pProperty];\n        if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n          $it.schema = $sch;\n          $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\n          $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\n          if ($ownProperties) {\n            out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n          } else {\n            out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n          }\n          out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { ';\n          $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n          var $passData = $data + '[' + $key + ']';\n          $it.dataPathArr[$dataNxt] = $key;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          if ($breakOnError) {\n            out += ' if (!' + ($nextValid) + ') break; ';\n          }\n          out += ' } ';\n          if ($breakOnError) {\n            out += ' else ' + ($nextValid) + ' = true; ';\n          }\n          out += ' }  ';\n          if ($breakOnError) {\n            out += ' if (' + ($nextValid) + ') { ';\n            $closingBraces += '}';\n          }\n        }\n      }\n    }\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 4926:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_propertyNames(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  out += 'var ' + ($errs) + ' = errors;';\n  if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    var $key = 'key' + $lvl,\n      $idx = 'idx' + $lvl,\n      $i = 'i' + $lvl,\n      $invalidName = '\\' + ' + $key + ' + \\'',\n      $dataNxt = $it.dataLevel = it.dataLevel + 1,\n      $nextData = 'data' + $dataNxt,\n      $dataProperties = 'dataProperties' + $lvl,\n      $ownProperties = it.opts.ownProperties,\n      $currentBaseId = it.baseId;\n    if ($ownProperties) {\n      out += ' var ' + ($dataProperties) + ' = undefined; ';\n    }\n    if ($ownProperties) {\n      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n    } else {\n      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n    }\n    out += ' var startErrs' + ($lvl) + ' = errors; ';\n    var $passData = $key;\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    var $code = it.validate($it);\n    $it.baseId = $currentBaseId;\n    if (it.util.varOccurences($code, $nextData) < 2) {\n      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n    } else {\n      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n    }\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '<errors; ' + ($i) + '++) { vErrors[' + ($i) + '].propertyName = ' + ($key) + '; }   var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('propertyNames') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { propertyName: \\'' + ($invalidName) + '\\' } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'property name \\\\\\'' + ($invalidName) + '\\\\\\' is invalid\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError(vErrors); ';\n      } else {\n        out += ' validate.errors = vErrors; return false; ';\n      }\n    }\n    if ($breakOnError) {\n      out += ' break; ';\n    }\n    out += ' } }';\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 7096:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_ref(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $async, $refCode;\n  if ($schema == '#' || $schema == '#/') {\n    if (it.isRoot) {\n      $async = it.async;\n      $refCode = 'validate';\n    } else {\n      $async = it.root.schema.$async === true;\n      $refCode = 'root.refVal[0]';\n    }\n  } else {\n    var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);\n    if ($refVal === undefined) {\n      var $message = it.MissingRefError.message(it.baseId, $schema);\n      if (it.opts.missingRefs == 'fail') {\n        it.logger.error($message);\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('$ref') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \\'' + (it.util.escapeQuotes($schema)) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'can\\\\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        if ($breakOnError) {\n          out += ' if (false) { ';\n        }\n      } else if (it.opts.missingRefs == 'ignore') {\n        it.logger.warn($message);\n        if ($breakOnError) {\n          out += ' if (true) { ';\n        }\n      } else {\n        throw new it.MissingRefError(it.baseId, $schema, $message);\n      }\n    } else if ($refVal.inline) {\n      var $it = it.util.copy(it);\n      $it.level++;\n      var $nextValid = 'valid' + $it.level;\n      $it.schema = $refVal.schema;\n      $it.schemaPath = '';\n      $it.errSchemaPath = $schema;\n      var $code = it.validate($it).replace(/validate\\.schema/g, $refVal.code);\n      out += ' ' + ($code) + ' ';\n      if ($breakOnError) {\n        out += ' if (' + ($nextValid) + ') { ';\n      }\n    } else {\n      $async = $refVal.$async === true || (it.async && $refVal.$async !== false);\n      $refCode = $refVal.code;\n    }\n  }\n  if ($refCode) {\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = '';\n    if (it.opts.passContext) {\n      out += ' ' + ($refCode) + '.call(this, ';\n    } else {\n      out += ' ' + ($refCode) + '( ';\n    }\n    out += ' ' + ($data) + ', (dataPath || \\'\\')';\n    if (it.errorPath != '\"\"') {\n      out += ' + ' + (it.errorPath);\n    }\n    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData)  ';\n    var __callValidate = out;\n    out = $$outStack.pop();\n    if ($async) {\n      if (!it.async) throw new Error('async schema referenced by sync schema');\n      if ($breakOnError) {\n        out += ' var ' + ($valid) + '; ';\n      }\n      out += ' try { await ' + (__callValidate) + '; ';\n      if ($breakOnError) {\n        out += ' ' + ($valid) + ' = true; ';\n      }\n      out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ';\n      if ($breakOnError) {\n        out += ' ' + ($valid) + ' = false; ';\n      }\n      out += ' } ';\n      if ($breakOnError) {\n        out += ' if (' + ($valid) + ') { ';\n      }\n    } else {\n      out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';\n      if ($breakOnError) {\n        out += ' else { ';\n      }\n    }\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 2000:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_required(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $vSchema = 'schema' + $lvl;\n  if (!$isData) {\n    if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {\n      var $required = [];\n      var arr1 = $schema;\n      if (arr1) {\n        var $property, i1 = -1,\n          l1 = arr1.length - 1;\n        while (i1 < l1) {\n          $property = arr1[i1 += 1];\n          var $propertySch = it.schema.properties[$property];\n          if (!($propertySch && (it.opts.strictKeywords ? (typeof $propertySch == 'object' && Object.keys($propertySch).length > 0) || $propertySch === false : it.util.schemaHasRules($propertySch, it.RULES.all)))) {\n            $required[$required.length] = $property;\n          }\n        }\n      }\n    } else {\n      var $required = $schema;\n    }\n  }\n  if ($isData || $required.length) {\n    var $currentErrorPath = it.errorPath,\n      $loopRequired = $isData || $required.length >= it.opts.loopRequired,\n      $ownProperties = it.opts.ownProperties;\n    if ($breakOnError) {\n      out += ' var missing' + ($lvl) + '; ';\n      if ($loopRequired) {\n        if (!$isData) {\n          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n        }\n        var $i = 'i' + $lvl,\n          $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n        }\n        out += ' var ' + ($valid) + ' = true; ';\n        if ($isData) {\n          out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n        }\n        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';\n        if ($ownProperties) {\n          out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n        }\n        out += '; if (!' + ($valid) + ') break; } ';\n        if ($isData) {\n          out += '  }  ';\n        }\n        out += '  if (!' + ($valid) + ') {   ';\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'';\n            if (it.opts._errorDataPathProperty) {\n              out += 'is a required property';\n            } else {\n              out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        out += ' } else { ';\n      } else {\n        out += ' if ( ';\n        var arr2 = $required;\n        if (arr2) {\n          var $propertyKey, $i = -1,\n            l2 = arr2.length - 1;\n          while ($i < l2) {\n            $propertyKey = arr2[$i += 1];\n            if ($i) {\n              out += ' || ';\n            }\n            var $prop = it.util.getProperty($propertyKey),\n              $useData = $data + $prop;\n            out += ' ( ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n          }\n        }\n        out += ') {  ';\n        var $propertyPath = 'missing' + $lvl,\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n        }\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'';\n            if (it.opts._errorDataPathProperty) {\n              out += 'is a required property';\n            } else {\n              out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        out += ' } else { ';\n      }\n    } else {\n      if ($loopRequired) {\n        if (!$isData) {\n          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n        }\n        var $i = 'i' + $lvl,\n          $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n        }\n        if ($isData) {\n          out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) {  var err =   '; /* istanbul ignore else */\n          if (it.createErrors !== false) {\n            out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n            if (it.opts.messages !== false) {\n              out += ' , message: \\'';\n              if (it.opts._errorDataPathProperty) {\n                out += 'is a required property';\n              } else {\n                out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n              }\n              out += '\\' ';\n            }\n            if (it.opts.verbose) {\n              out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n            }\n            out += ' } ';\n          } else {\n            out += ' {} ';\n          }\n          out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';\n        }\n        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';\n        if ($ownProperties) {\n          out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n        }\n        out += ') {  var err =   '; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'';\n            if (it.opts._errorDataPathProperty) {\n              out += 'is a required property';\n            } else {\n              out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\n        if ($isData) {\n          out += '  }  ';\n        }\n      } else {\n        var arr3 = $required;\n        if (arr3) {\n          var $propertyKey, i3 = -1,\n            l3 = arr3.length - 1;\n          while (i3 < l3) {\n            $propertyKey = arr3[i3 += 1];\n            var $prop = it.util.getProperty($propertyKey),\n              $missingProperty = it.util.escapeQuotes($propertyKey),\n              $useData = $data + $prop;\n            if (it.opts._errorDataPathProperty) {\n              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n            }\n            out += ' if ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') {  var err =   '; /* istanbul ignore else */\n            if (it.createErrors !== false) {\n              out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n              if (it.opts.messages !== false) {\n                out += ' , message: \\'';\n                if (it.opts._errorDataPathProperty) {\n                  out += 'is a required property';\n                } else {\n                  out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n                }\n                out += '\\' ';\n              }\n              if (it.opts.verbose) {\n                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n              }\n              out += ' } ';\n            } else {\n              out += ' {} ';\n            }\n            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n          }\n        }\n      }\n    }\n    it.errorPath = $currentErrorPath;\n  } else if ($breakOnError) {\n    out += ' if (true) {';\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 7812:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_uniqueItems(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (($schema || $isData) && it.opts.uniqueItems !== false) {\n    if ($isData) {\n      out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\n    }\n    out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { ';\n    var $itemType = it.schema.items && it.schema.items.type,\n      $typeIsArray = Array.isArray($itemType);\n    if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) {\n      out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } ';\n    } else {\n      out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; ';\n      var $method = 'checkDataType' + ($typeIsArray ? 's' : '');\n      out += ' if (' + (it.util[$method]($itemType, 'item', it.opts.strictNumbers, true)) + ') continue; ';\n      if ($typeIsArray) {\n        out += ' if (typeof item == \\'string\\') item = \\'\"\\' + item; ';\n      }\n      out += ' if (typeof itemIndices[item] == \\'number\\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ';\n    }\n    out += ' } ';\n    if ($isData) {\n      out += '  }  ';\n    }\n    out += ' if (!' + ($valid) + ') {   ';\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema:  ';\n        if ($isData) {\n          out += 'validate.schema' + ($schemaPath);\n        } else {\n          out += '' + ($schema);\n        }\n        out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    out += ' } ';\n    if ($breakOnError) {\n      out += ' else { ';\n    }\n  } else {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 1035:\n/***/ (function(module) {\n\n\"use strict\";\n\nmodule.exports = function generate_validate(it, $keyword, $ruleType) {\n  var out = '';\n  var $async = it.schema.$async === true,\n    $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'),\n    $id = it.self._getId(it.schema);\n  if (it.opts.strictKeywords) {\n    var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords);\n    if ($unknownKwd) {\n      var $keywordsMsg = 'unknown keyword: ' + $unknownKwd;\n      if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg);\n      else throw new Error($keywordsMsg);\n    }\n  }\n  if (it.isTop) {\n    out += ' var validate = ';\n    if ($async) {\n      it.async = true;\n      out += 'async ';\n    }\n    out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \\'use strict\\'; ';\n    if ($id && (it.opts.sourceCode || it.opts.processCode)) {\n      out += ' ' + ('/\\*# sourceURL=' + $id + ' */') + ' ';\n    }\n  }\n  if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) {\n    var $keyword = 'false schema';\n    var $lvl = it.level;\n    var $dataLvl = it.dataLevel;\n    var $schema = it.schema[$keyword];\n    var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n    var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n    var $breakOnError = !it.opts.allErrors;\n    var $errorKeyword;\n    var $data = 'data' + ($dataLvl || '');\n    var $valid = 'valid' + $lvl;\n    if (it.schema === false) {\n      if (it.isTop) {\n        $breakOnError = true;\n      } else {\n        out += ' var ' + ($valid) + ' = false; ';\n      }\n      var $$outStack = $$outStack || [];\n      $$outStack.push(out);\n      out = ''; /* istanbul ignore else */\n      if (it.createErrors !== false) {\n        out += ' { keyword: \\'' + ($errorKeyword || 'false schema') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n        if (it.opts.messages !== false) {\n          out += ' , message: \\'boolean schema is false\\' ';\n        }\n        if (it.opts.verbose) {\n          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n        }\n        out += ' } ';\n      } else {\n        out += ' {} ';\n      }\n      var __err = out;\n      out = $$outStack.pop();\n      if (!it.compositeRule && $breakOnError) {\n        /* istanbul ignore if */\n        if (it.async) {\n          out += ' throw new ValidationError([' + (__err) + ']); ';\n        } else {\n          out += ' validate.errors = [' + (__err) + ']; return false; ';\n        }\n      } else {\n        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n      }\n    } else {\n      if (it.isTop) {\n        if ($async) {\n          out += ' return data; ';\n        } else {\n          out += ' validate.errors = null; return true; ';\n        }\n      } else {\n        out += ' var ' + ($valid) + ' = true; ';\n      }\n    }\n    if (it.isTop) {\n      out += ' }; return validate; ';\n    }\n    return out;\n  }\n  if (it.isTop) {\n    var $top = it.isTop,\n      $lvl = it.level = 0,\n      $dataLvl = it.dataLevel = 0,\n      $data = 'data';\n    it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));\n    it.baseId = it.baseId || it.rootId;\n    delete it.isTop;\n    it.dataPathArr = [\"\"];\n    if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) {\n      var $defaultMsg = 'default is ignored in the schema root';\n      if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n      else throw new Error($defaultMsg);\n    }\n    out += ' var vErrors = null; ';\n    out += ' var errors = 0;     ';\n    out += ' if (rootData === undefined) rootData = data; ';\n  } else {\n    var $lvl = it.level,\n      $dataLvl = it.dataLevel,\n      $data = 'data' + ($dataLvl || '');\n    if ($id) it.baseId = it.resolve.url(it.baseId, $id);\n    if ($async && !it.async) throw new Error('async schema in sync schema');\n    out += ' var errs_' + ($lvl) + ' = errors;';\n  }\n  var $valid = 'valid' + $lvl,\n    $breakOnError = !it.opts.allErrors,\n    $closingBraces1 = '',\n    $closingBraces2 = '';\n  var $errorKeyword;\n  var $typeSchema = it.schema.type,\n    $typeIsArray = Array.isArray($typeSchema);\n  if ($typeSchema && it.opts.nullable && it.schema.nullable === true) {\n    if ($typeIsArray) {\n      if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null');\n    } else if ($typeSchema != 'null') {\n      $typeSchema = [$typeSchema, 'null'];\n      $typeIsArray = true;\n    }\n  }\n  if ($typeIsArray && $typeSchema.length == 1) {\n    $typeSchema = $typeSchema[0];\n    $typeIsArray = false;\n  }\n  if (it.schema.$ref && $refKeywords) {\n    if (it.opts.extendRefs == 'fail') {\n      throw new Error('$ref: validation keywords used in schema at path \"' + it.errSchemaPath + '\" (see option extendRefs)');\n    } else if (it.opts.extendRefs !== true) {\n      $refKeywords = false;\n      it.logger.warn('$ref: keywords ignored in schema at path \"' + it.errSchemaPath + '\"');\n    }\n  }\n  if (it.schema.$comment && it.opts.$comment) {\n    out += ' ' + (it.RULES.all.$comment.code(it, '$comment'));\n  }\n  if ($typeSchema) {\n    if (it.opts.coerceTypes) {\n      var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema);\n    }\n    var $rulesGroup = it.RULES.types[$typeSchema];\n    if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) {\n      var $schemaPath = it.schemaPath + '.type',\n        $errSchemaPath = it.errSchemaPath + '/type';\n      var $schemaPath = it.schemaPath + '.type',\n        $errSchemaPath = it.errSchemaPath + '/type',\n        $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';\n      out += ' if (' + (it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true)) + ') { ';\n      if ($coerceToTypes) {\n        var $dataType = 'dataType' + $lvl,\n          $coerced = 'coerced' + $lvl;\n        out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; var ' + ($coerced) + ' = undefined; ';\n        if (it.opts.coerceTypes == 'array') {\n          out += ' if (' + ($dataType) + ' == \\'object\\' && Array.isArray(' + ($data) + ') && ' + ($data) + '.length == 1) { ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; if (' + (it.util.checkDataType(it.schema.type, $data, it.opts.strictNumbers)) + ') ' + ($coerced) + ' = ' + ($data) + '; } ';\n        }\n        out += ' if (' + ($coerced) + ' !== undefined) ; ';\n        var arr1 = $coerceToTypes;\n        if (arr1) {\n          var $type, $i = -1,\n            l1 = arr1.length - 1;\n          while ($i < l1) {\n            $type = arr1[$i += 1];\n            if ($type == 'string') {\n              out += ' else if (' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\') ' + ($coerced) + ' = \\'\\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \\'\\'; ';\n            } else if ($type == 'number' || $type == 'integer') {\n              out += ' else if (' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \\'string\\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';\n              if ($type == 'integer') {\n                out += ' && !(' + ($data) + ' % 1)';\n              }\n              out += ')) ' + ($coerced) + ' = +' + ($data) + '; ';\n            } else if ($type == 'boolean') {\n              out += ' else if (' + ($data) + ' === \\'false\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \\'true\\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';\n            } else if ($type == 'null') {\n              out += ' else if (' + ($data) + ' === \\'\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';\n            } else if (it.opts.coerceTypes == 'array' && $type == 'array') {\n              out += ' else if (' + ($dataType) + ' == \\'string\\' || ' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; ';\n            }\n          }\n        }\n        out += ' else {   ';\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n          if ($typeIsArray) {\n            out += '' + ($typeSchema.join(\",\"));\n          } else {\n            out += '' + ($typeSchema);\n          }\n          out += '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'should be ';\n            if ($typeIsArray) {\n              out += '' + ($typeSchema.join(\",\"));\n            } else {\n              out += '' + ($typeSchema);\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        out += ' } if (' + ($coerced) + ' !== undefined) {  ';\n        var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n          $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n        out += ' ' + ($data) + ' = ' + ($coerced) + '; ';\n        if (!$dataLvl) {\n          out += 'if (' + ($parentData) + ' !== undefined)';\n        }\n        out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } ';\n      } else {\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n          if ($typeIsArray) {\n            out += '' + ($typeSchema.join(\",\"));\n          } else {\n            out += '' + ($typeSchema);\n          }\n          out += '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'should be ';\n            if ($typeIsArray) {\n              out += '' + ($typeSchema.join(\",\"));\n            } else {\n              out += '' + ($typeSchema);\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n      }\n      out += ' } ';\n    }\n  }\n  if (it.schema.$ref && !$refKeywords) {\n    out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' ';\n    if ($breakOnError) {\n      out += ' } if (errors === ';\n      if ($top) {\n        out += '0';\n      } else {\n        out += 'errs_' + ($lvl);\n      }\n      out += ') { ';\n      $closingBraces2 += '}';\n    }\n  } else {\n    var arr2 = it.RULES;\n    if (arr2) {\n      var $rulesGroup, i2 = -1,\n        l2 = arr2.length - 1;\n      while (i2 < l2) {\n        $rulesGroup = arr2[i2 += 1];\n        if ($shouldUseGroup($rulesGroup)) {\n          if ($rulesGroup.type) {\n            out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers)) + ') { ';\n          }\n          if (it.opts.useDefaults) {\n            if ($rulesGroup.type == 'object' && it.schema.properties) {\n              var $schema = it.schema.properties,\n                $schemaKeys = Object.keys($schema);\n              var arr3 = $schemaKeys;\n              if (arr3) {\n                var $propertyKey, i3 = -1,\n                  l3 = arr3.length - 1;\n                while (i3 < l3) {\n                  $propertyKey = arr3[i3 += 1];\n                  var $sch = $schema[$propertyKey];\n                  if ($sch.default !== undefined) {\n                    var $passData = $data + it.util.getProperty($propertyKey);\n                    if (it.compositeRule) {\n                      if (it.opts.strictDefaults) {\n                        var $defaultMsg = 'default is ignored for: ' + $passData;\n                        if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n                        else throw new Error($defaultMsg);\n                      }\n                    } else {\n                      out += ' if (' + ($passData) + ' === undefined ';\n                      if (it.opts.useDefaults == 'empty') {\n                        out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n                      }\n                      out += ' ) ' + ($passData) + ' = ';\n                      if (it.opts.useDefaults == 'shared') {\n                        out += ' ' + (it.useDefault($sch.default)) + ' ';\n                      } else {\n                        out += ' ' + (JSON.stringify($sch.default)) + ' ';\n                      }\n                      out += '; ';\n                    }\n                  }\n                }\n              }\n            } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) {\n              var arr4 = it.schema.items;\n              if (arr4) {\n                var $sch, $i = -1,\n                  l4 = arr4.length - 1;\n                while ($i < l4) {\n                  $sch = arr4[$i += 1];\n                  if ($sch.default !== undefined) {\n                    var $passData = $data + '[' + $i + ']';\n                    if (it.compositeRule) {\n                      if (it.opts.strictDefaults) {\n                        var $defaultMsg = 'default is ignored for: ' + $passData;\n                        if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n                        else throw new Error($defaultMsg);\n                      }\n                    } else {\n                      out += ' if (' + ($passData) + ' === undefined ';\n                      if (it.opts.useDefaults == 'empty') {\n                        out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n                      }\n                      out += ' ) ' + ($passData) + ' = ';\n                      if (it.opts.useDefaults == 'shared') {\n                        out += ' ' + (it.useDefault($sch.default)) + ' ';\n                      } else {\n                        out += ' ' + (JSON.stringify($sch.default)) + ' ';\n                      }\n                      out += '; ';\n                    }\n                  }\n                }\n              }\n            }\n          }\n          var arr5 = $rulesGroup.rules;\n          if (arr5) {\n            var $rule, i5 = -1,\n              l5 = arr5.length - 1;\n            while (i5 < l5) {\n              $rule = arr5[i5 += 1];\n              if ($shouldUseRule($rule)) {\n                var $code = $rule.code(it, $rule.keyword, $rulesGroup.type);\n                if ($code) {\n                  out += ' ' + ($code) + ' ';\n                  if ($breakOnError) {\n                    $closingBraces1 += '}';\n                  }\n                }\n              }\n            }\n          }\n          if ($breakOnError) {\n            out += ' ' + ($closingBraces1) + ' ';\n            $closingBraces1 = '';\n          }\n          if ($rulesGroup.type) {\n            out += ' } ';\n            if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) {\n              out += ' else { ';\n              var $schemaPath = it.schemaPath + '.type',\n                $errSchemaPath = it.errSchemaPath + '/type';\n              var $$outStack = $$outStack || [];\n              $$outStack.push(out);\n              out = ''; /* istanbul ignore else */\n              if (it.createErrors !== false) {\n                out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n                if ($typeIsArray) {\n                  out += '' + ($typeSchema.join(\",\"));\n                } else {\n                  out += '' + ($typeSchema);\n                }\n                out += '\\' } ';\n                if (it.opts.messages !== false) {\n                  out += ' , message: \\'should be ';\n                  if ($typeIsArray) {\n                    out += '' + ($typeSchema.join(\",\"));\n                  } else {\n                    out += '' + ($typeSchema);\n                  }\n                  out += '\\' ';\n                }\n                if (it.opts.verbose) {\n                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n                }\n                out += ' } ';\n              } else {\n                out += ' {} ';\n              }\n              var __err = out;\n              out = $$outStack.pop();\n              if (!it.compositeRule && $breakOnError) {\n                /* istanbul ignore if */\n                if (it.async) {\n                  out += ' throw new ValidationError([' + (__err) + ']); ';\n                } else {\n                  out += ' validate.errors = [' + (__err) + ']; return false; ';\n                }\n              } else {\n                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n              }\n              out += ' } ';\n            }\n          }\n          if ($breakOnError) {\n            out += ' if (errors === ';\n            if ($top) {\n              out += '0';\n            } else {\n              out += 'errs_' + ($lvl);\n            }\n            out += ') { ';\n            $closingBraces2 += '}';\n          }\n        }\n      }\n    }\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces2) + ' ';\n  }\n  if ($top) {\n    if ($async) {\n      out += ' if (errors === 0) return data;           ';\n      out += ' else throw new ValidationError(vErrors); ';\n    } else {\n      out += ' validate.errors = vErrors; ';\n      out += ' return errors === 0;       ';\n    }\n    out += ' }; return validate;';\n  } else {\n    out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';';\n  }\n\n  function $shouldUseGroup($rulesGroup) {\n    var rules = $rulesGroup.rules;\n    for (var i = 0; i < rules.length; i++)\n      if ($shouldUseRule(rules[i])) return true;\n  }\n\n  function $shouldUseRule($rule) {\n    return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule));\n  }\n\n  function $ruleImplementsSomeKeyword($rule) {\n    var impl = $rule.implements;\n    for (var i = 0; i < impl.length; i++)\n      if (it.schema[impl[i]] !== undefined) return true;\n  }\n  return out;\n}\n\n\n/***/ }),\n\n/***/ 413:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i;\nvar customRuleCode = __webpack_require__(8050);\nvar definitionSchema = __webpack_require__(9407);\n\nmodule.exports = {\n  add: addKeyword,\n  get: getKeyword,\n  remove: removeKeyword,\n  validate: validateKeyword\n};\n\n\n/**\n * Define custom keyword\n * @this  Ajv\n * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords).\n * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.\n * @return {Ajv} this for method chaining\n */\nfunction addKeyword(keyword, definition) {\n  /* jshint validthis: true */\n  /* eslint no-shadow: 0 */\n  var RULES = this.RULES;\n  if (RULES.keywords[keyword])\n    throw new Error('Keyword ' + keyword + ' is already defined');\n\n  if (!IDENTIFIER.test(keyword))\n    throw new Error('Keyword ' + keyword + ' is not a valid identifier');\n\n  if (definition) {\n    this.validateKeyword(definition, true);\n\n    var dataType = definition.type;\n    if (Array.isArray(dataType)) {\n      for (var i=0; i<dataType.length; i++)\n        _addRule(keyword, dataType[i], definition);\n    } else {\n      _addRule(keyword, dataType, definition);\n    }\n\n    var metaSchema = definition.metaSchema;\n    if (metaSchema) {\n      if (definition.$data && this._opts.$data) {\n        metaSchema = {\n          anyOf: [\n            metaSchema,\n            { '$ref': 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }\n          ]\n        };\n      }\n      definition.validateSchema = this.compile(metaSchema, true);\n    }\n  }\n\n  RULES.keywords[keyword] = RULES.all[keyword] = true;\n\n\n  function _addRule(keyword, dataType, definition) {\n    var ruleGroup;\n    for (var i=0; i<RULES.length; i++) {\n      var rg = RULES[i];\n      if (rg.type == dataType) {\n        ruleGroup = rg;\n        break;\n      }\n    }\n\n    if (!ruleGroup) {\n      ruleGroup = { type: dataType, rules: [] };\n      RULES.push(ruleGroup);\n    }\n\n    var rule = {\n      keyword: keyword,\n      definition: definition,\n      custom: true,\n      code: customRuleCode,\n      implements: definition.implements\n    };\n    ruleGroup.rules.push(rule);\n    RULES.custom[keyword] = rule;\n  }\n\n  return this;\n}\n\n\n/**\n * Get keyword\n * @this  Ajv\n * @param {String} keyword pre-defined or custom keyword.\n * @return {Object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise.\n */\nfunction getKeyword(keyword) {\n  /* jshint validthis: true */\n  var rule = this.RULES.custom[keyword];\n  return rule ? rule.definition : this.RULES.keywords[keyword] || false;\n}\n\n\n/**\n * Remove keyword\n * @this  Ajv\n * @param {String} keyword pre-defined or custom keyword.\n * @return {Ajv} this for method chaining\n */\nfunction removeKeyword(keyword) {\n  /* jshint validthis: true */\n  var RULES = this.RULES;\n  delete RULES.keywords[keyword];\n  delete RULES.all[keyword];\n  delete RULES.custom[keyword];\n  for (var i=0; i<RULES.length; i++) {\n    var rules = RULES[i].rules;\n    for (var j=0; j<rules.length; j++) {\n      if (rules[j].keyword == keyword) {\n        rules.splice(j, 1);\n        break;\n      }\n    }\n  }\n  return this;\n}\n\n\n/**\n * Validate keyword definition\n * @this  Ajv\n * @param {Object} definition keyword definition object.\n * @param {Boolean} throwError true to throw exception if definition is invalid\n * @return {boolean} validation result\n */\nfunction validateKeyword(definition, throwError) {\n  validateKeyword.errors = null;\n  var v = this._validateKeyword = this._validateKeyword\n                                  || this.compile(definitionSchema, true);\n\n  if (v(definition)) return true;\n  validateKeyword.errors = v.errors;\n  if (throwError)\n    throw new Error('custom keyword definition is invalid: '  + this.errorsText(v.errors));\n  else\n    return false;\n}\n\n\n/***/ }),\n\n/***/ 5215:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n\n\n/***/ }),\n\n/***/ 9306:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nmodule.exports = function (data, opts) {\n    if (!opts) opts = {};\n    if (typeof opts === 'function') opts = { cmp: opts };\n    var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n    var cmp = opts.cmp && (function (f) {\n        return function (node) {\n            return function (a, b) {\n                var aobj = { key: a, value: node[a] };\n                var bobj = { key: b, value: node[b] };\n                return f(aobj, bobj);\n            };\n        };\n    })(opts.cmp);\n\n    var seen = [];\n    return (function stringify (node) {\n        if (node && node.toJSON && typeof node.toJSON === 'function') {\n            node = node.toJSON();\n        }\n\n        if (node === undefined) return;\n        if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n        if (typeof node !== 'object') return JSON.stringify(node);\n\n        var i, out;\n        if (Array.isArray(node)) {\n            out = '[';\n            for (i = 0; i < node.length; i++) {\n                if (i) out += ',';\n                out += stringify(node[i]) || 'null';\n            }\n            return out + ']';\n        }\n\n        if (node === null) return 'null';\n\n        if (seen.indexOf(node) !== -1) {\n            if (cycles) return JSON.stringify('__cycle__');\n            throw new TypeError('Converting circular structure to JSON');\n        }\n\n        var seenIndex = seen.push(node) - 1;\n        var keys = Object.keys(node).sort(cmp && cmp(node));\n        out = '';\n        for (i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var value = stringify(node[key]);\n\n            if (!value) continue;\n            if (out) out += ',';\n            out += JSON.stringify(key) + ':' + value;\n        }\n        seen.splice(seenIndex, 1);\n        return '{' + out + '}';\n    })(data);\n};\n\n\n/***/ }),\n\n/***/ 1342:\n/***/ (function(module) {\n\n/*\r\n * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license\r\n * Author: Jim Palmer (based on chunking idea from Dave Koelle)\r\n */\r\n/*jshint unused:false */\r\nmodule.exports = function naturalSort (a, b) {\r\n\t\"use strict\";\r\n\tvar re = /(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,\r\n\t\tsre = /(^[ ]*|[ ]*$)/g,\r\n\t\tdre = /(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/,\r\n\t\thre = /^0x[0-9a-f]+$/i,\r\n\t\tore = /^0/,\r\n\t\ti = function(s) { return naturalSort.insensitive && ('' + s).toLowerCase() || '' + s; },\r\n\t\t// convert all to strings strip whitespace\r\n\t\tx = i(a).replace(sre, '') || '',\r\n\t\ty = i(b).replace(sre, '') || '',\r\n\t\t// chunk/tokenize\r\n\t\txN = x.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\tyN = y.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\t// numeric, hex or date detection\r\n\t\txD = parseInt(x.match(hre), 16) || (xN.length !== 1 && x.match(dre) && Date.parse(x)),\r\n\t\tyD = parseInt(y.match(hre), 16) || xD && y.match(dre) && Date.parse(y) || null,\r\n\t\toFxNcL, oFyNcL;\r\n\t// first try and sort Hex codes or Dates\r\n\tif (yD) {\r\n\t\tif ( xD < yD ) { return -1; }\r\n\t\telse if ( xD > yD ) { return 1; }\r\n\t}\r\n\t// natural sorting through split numeric strings and default strings\r\n\tfor(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {\r\n\t\t// find floats not starting with '0', string or 0 if not defined (Clint Priest)\r\n\t\toFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;\r\n\t\toFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;\r\n\t\t// handle numeric vs string comparison - number < string - (Kyle Adams)\r\n\t\tif (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return (isNaN(oFxNcL)) ? 1 : -1; }\r\n\t\t// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\r\n\t\telse if (typeof oFxNcL !== typeof oFyNcL) {\r\n\t\t\toFxNcL += '';\r\n\t\t\toFyNcL += '';\r\n\t\t}\r\n\t\tif (oFxNcL < oFyNcL) { return -1; }\r\n\t\tif (oFxNcL > oFyNcL) { return 1; }\r\n\t}\r\n\treturn 0;\r\n};\r\n\n\n/***/ }),\n\n/***/ 9151:\n/***/ (function(__unused_webpack_module, exports) {\n\n(function(exports) {\n  \"use strict\";\n\n  function isArray(obj) {\n    if (obj !== null) {\n      return Object.prototype.toString.call(obj) === \"[object Array]\";\n    } else {\n      return false;\n    }\n  }\n\n  function isObject(obj) {\n    if (obj !== null) {\n      return Object.prototype.toString.call(obj) === \"[object Object]\";\n    } else {\n      return false;\n    }\n  }\n\n  function strictDeepEqual(first, second) {\n    // Check the scalar case first.\n    if (first === second) {\n      return true;\n    }\n\n    // Check if they are the same type.\n    var firstType = Object.prototype.toString.call(first);\n    if (firstType !== Object.prototype.toString.call(second)) {\n      return false;\n    }\n    // We know that first and second have the same type so we can just check the\n    // first type from now on.\n    if (isArray(first) === true) {\n      // Short circuit if they're not the same length;\n      if (first.length !== second.length) {\n        return false;\n      }\n      for (var i = 0; i < first.length; i++) {\n        if (strictDeepEqual(first[i], second[i]) === false) {\n          return false;\n        }\n      }\n      return true;\n    }\n    if (isObject(first) === true) {\n      // An object is equal if it has the same key/value pairs.\n      var keysSeen = {};\n      for (var key in first) {\n        if (hasOwnProperty.call(first, key)) {\n          if (strictDeepEqual(first[key], second[key]) === false) {\n            return false;\n          }\n          keysSeen[key] = true;\n        }\n      }\n      // Now check that there aren't any keys in second that weren't\n      // in first.\n      for (var key2 in second) {\n        if (hasOwnProperty.call(second, key2)) {\n          if (keysSeen[key2] !== true) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  function isFalse(obj) {\n    // From the spec:\n    // A false value corresponds to the following values:\n    // Empty list\n    // Empty object\n    // Empty string\n    // False boolean\n    // null value\n\n    // First check the scalar values.\n    if (obj === \"\" || obj === false || obj === null) {\n        return true;\n    } else if (isArray(obj) && obj.length === 0) {\n        // Check for an empty array.\n        return true;\n    } else if (isObject(obj)) {\n        // Check for an empty object.\n        for (var key in obj) {\n            // If there are any keys, then\n            // the object is not empty so the object\n            // is not false.\n            if (obj.hasOwnProperty(key)) {\n              return false;\n            }\n        }\n        return true;\n    } else {\n        return false;\n    }\n  }\n\n  function objValues(obj) {\n    var keys = Object.keys(obj);\n    var values = [];\n    for (var i = 0; i < keys.length; i++) {\n      values.push(obj[keys[i]]);\n    }\n    return values;\n  }\n\n  function merge(a, b) {\n      var merged = {};\n      for (var key in a) {\n          merged[key] = a[key];\n      }\n      for (var key2 in b) {\n          merged[key2] = b[key2];\n      }\n      return merged;\n  }\n\n  var trimLeft;\n  if (typeof String.prototype.trimLeft === \"function\") {\n    trimLeft = function(str) {\n      return str.trimLeft();\n    };\n  } else {\n    trimLeft = function(str) {\n      return str.match(/^\\s*(.*)/)[1];\n    };\n  }\n\n  // Type constants used to define functions.\n  var TYPE_NUMBER = 0;\n  var TYPE_ANY = 1;\n  var TYPE_STRING = 2;\n  var TYPE_ARRAY = 3;\n  var TYPE_OBJECT = 4;\n  var TYPE_BOOLEAN = 5;\n  var TYPE_EXPREF = 6;\n  var TYPE_NULL = 7;\n  var TYPE_ARRAY_NUMBER = 8;\n  var TYPE_ARRAY_STRING = 9;\n  var TYPE_NAME_TABLE = {\n    0: 'number',\n    1: 'any',\n    2: 'string',\n    3: 'array',\n    4: 'object',\n    5: 'boolean',\n    6: 'expression',\n    7: 'null',\n    8: 'Array<number>',\n    9: 'Array<string>'\n  };\n\n  var TOK_EOF = \"EOF\";\n  var TOK_UNQUOTEDIDENTIFIER = \"UnquotedIdentifier\";\n  var TOK_QUOTEDIDENTIFIER = \"QuotedIdentifier\";\n  var TOK_RBRACKET = \"Rbracket\";\n  var TOK_RPAREN = \"Rparen\";\n  var TOK_COMMA = \"Comma\";\n  var TOK_COLON = \"Colon\";\n  var TOK_RBRACE = \"Rbrace\";\n  var TOK_NUMBER = \"Number\";\n  var TOK_CURRENT = \"Current\";\n  var TOK_EXPREF = \"Expref\";\n  var TOK_PIPE = \"Pipe\";\n  var TOK_OR = \"Or\";\n  var TOK_AND = \"And\";\n  var TOK_EQ = \"EQ\";\n  var TOK_GT = \"GT\";\n  var TOK_LT = \"LT\";\n  var TOK_GTE = \"GTE\";\n  var TOK_LTE = \"LTE\";\n  var TOK_NE = \"NE\";\n  var TOK_FLATTEN = \"Flatten\";\n  var TOK_STAR = \"Star\";\n  var TOK_FILTER = \"Filter\";\n  var TOK_DOT = \"Dot\";\n  var TOK_NOT = \"Not\";\n  var TOK_LBRACE = \"Lbrace\";\n  var TOK_LBRACKET = \"Lbracket\";\n  var TOK_LPAREN= \"Lparen\";\n  var TOK_LITERAL= \"Literal\";\n\n  // The \"&\", \"[\", \"<\", \">\" tokens\n  // are not in basicToken because\n  // there are two token variants\n  // (\"&&\", \"[?\", \"<=\", \">=\").  This is specially handled\n  // below.\n\n  var basicTokens = {\n    \".\": TOK_DOT,\n    \"*\": TOK_STAR,\n    \",\": TOK_COMMA,\n    \":\": TOK_COLON,\n    \"{\": TOK_LBRACE,\n    \"}\": TOK_RBRACE,\n    \"]\": TOK_RBRACKET,\n    \"(\": TOK_LPAREN,\n    \")\": TOK_RPAREN,\n    \"@\": TOK_CURRENT\n  };\n\n  var operatorStartToken = {\n      \"<\": true,\n      \">\": true,\n      \"=\": true,\n      \"!\": true\n  };\n\n  var skipChars = {\n      \" \": true,\n      \"\\t\": true,\n      \"\\n\": true\n  };\n\n\n  function isAlpha(ch) {\n      return (ch >= \"a\" && ch <= \"z\") ||\n             (ch >= \"A\" && ch <= \"Z\") ||\n             ch === \"_\";\n  }\n\n  function isNum(ch) {\n      return (ch >= \"0\" && ch <= \"9\") ||\n             ch === \"-\";\n  }\n  function isAlphaNum(ch) {\n      return (ch >= \"a\" && ch <= \"z\") ||\n             (ch >= \"A\" && ch <= \"Z\") ||\n             (ch >= \"0\" && ch <= \"9\") ||\n             ch === \"_\";\n  }\n\n  function Lexer() {\n  }\n  Lexer.prototype = {\n      tokenize: function(stream) {\n          var tokens = [];\n          this._current = 0;\n          var start;\n          var identifier;\n          var token;\n          while (this._current < stream.length) {\n              if (isAlpha(stream[this._current])) {\n                  start = this._current;\n                  identifier = this._consumeUnquotedIdentifier(stream);\n                  tokens.push({type: TOK_UNQUOTEDIDENTIFIER,\n                               value: identifier,\n                               start: start});\n              } else if (basicTokens[stream[this._current]] !== undefined) {\n                  tokens.push({type: basicTokens[stream[this._current]],\n                              value: stream[this._current],\n                              start: this._current});\n                  this._current++;\n              } else if (isNum(stream[this._current])) {\n                  token = this._consumeNumber(stream);\n                  tokens.push(token);\n              } else if (stream[this._current] === \"[\") {\n                  // No need to increment this._current.  This happens\n                  // in _consumeLBracket\n                  token = this._consumeLBracket(stream);\n                  tokens.push(token);\n              } else if (stream[this._current] === \"\\\"\") {\n                  start = this._current;\n                  identifier = this._consumeQuotedIdentifier(stream);\n                  tokens.push({type: TOK_QUOTEDIDENTIFIER,\n                               value: identifier,\n                               start: start});\n              } else if (stream[this._current] === \"'\") {\n                  start = this._current;\n                  identifier = this._consumeRawStringLiteral(stream);\n                  tokens.push({type: TOK_LITERAL,\n                               value: identifier,\n                               start: start});\n              } else if (stream[this._current] === \"`\") {\n                  start = this._current;\n                  var literal = this._consumeLiteral(stream);\n                  tokens.push({type: TOK_LITERAL,\n                               value: literal,\n                               start: start});\n              } else if (operatorStartToken[stream[this._current]] !== undefined) {\n                  tokens.push(this._consumeOperator(stream));\n              } else if (skipChars[stream[this._current]] !== undefined) {\n                  // Ignore whitespace.\n                  this._current++;\n              } else if (stream[this._current] === \"&\") {\n                  start = this._current;\n                  this._current++;\n                  if (stream[this._current] === \"&\") {\n                      this._current++;\n                      tokens.push({type: TOK_AND, value: \"&&\", start: start});\n                  } else {\n                      tokens.push({type: TOK_EXPREF, value: \"&\", start: start});\n                  }\n              } else if (stream[this._current] === \"|\") {\n                  start = this._current;\n                  this._current++;\n                  if (stream[this._current] === \"|\") {\n                      this._current++;\n                      tokens.push({type: TOK_OR, value: \"||\", start: start});\n                  } else {\n                      tokens.push({type: TOK_PIPE, value: \"|\", start: start});\n                  }\n              } else {\n                  var error = new Error(\"Unknown character:\" + stream[this._current]);\n                  error.name = \"LexerError\";\n                  throw error;\n              }\n          }\n          return tokens;\n      },\n\n      _consumeUnquotedIdentifier: function(stream) {\n          var start = this._current;\n          this._current++;\n          while (this._current < stream.length && isAlphaNum(stream[this._current])) {\n              this._current++;\n          }\n          return stream.slice(start, this._current);\n      },\n\n      _consumeQuotedIdentifier: function(stream) {\n          var start = this._current;\n          this._current++;\n          var maxLength = stream.length;\n          while (stream[this._current] !== \"\\\"\" && this._current < maxLength) {\n              // You can escape a double quote and you can escape an escape.\n              var current = this._current;\n              if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n                                               stream[current + 1] === \"\\\"\")) {\n                  current += 2;\n              } else {\n                  current++;\n              }\n              this._current = current;\n          }\n          this._current++;\n          return JSON.parse(stream.slice(start, this._current));\n      },\n\n      _consumeRawStringLiteral: function(stream) {\n          var start = this._current;\n          this._current++;\n          var maxLength = stream.length;\n          while (stream[this._current] !== \"'\" && this._current < maxLength) {\n              // You can escape a single quote and you can escape an escape.\n              var current = this._current;\n              if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n                                               stream[current + 1] === \"'\")) {\n                  current += 2;\n              } else {\n                  current++;\n              }\n              this._current = current;\n          }\n          this._current++;\n          var literal = stream.slice(start + 1, this._current - 1);\n          return literal.replace(\"\\\\'\", \"'\");\n      },\n\n      _consumeNumber: function(stream) {\n          var start = this._current;\n          this._current++;\n          var maxLength = stream.length;\n          while (isNum(stream[this._current]) && this._current < maxLength) {\n              this._current++;\n          }\n          var value = parseInt(stream.slice(start, this._current));\n          return {type: TOK_NUMBER, value: value, start: start};\n      },\n\n      _consumeLBracket: function(stream) {\n          var start = this._current;\n          this._current++;\n          if (stream[this._current] === \"?\") {\n              this._current++;\n              return {type: TOK_FILTER, value: \"[?\", start: start};\n          } else if (stream[this._current] === \"]\") {\n              this._current++;\n              return {type: TOK_FLATTEN, value: \"[]\", start: start};\n          } else {\n              return {type: TOK_LBRACKET, value: \"[\", start: start};\n          }\n      },\n\n      _consumeOperator: function(stream) {\n          var start = this._current;\n          var startingChar = stream[start];\n          this._current++;\n          if (startingChar === \"!\") {\n              if (stream[this._current] === \"=\") {\n                  this._current++;\n                  return {type: TOK_NE, value: \"!=\", start: start};\n              } else {\n                return {type: TOK_NOT, value: \"!\", start: start};\n              }\n          } else if (startingChar === \"<\") {\n              if (stream[this._current] === \"=\") {\n                  this._current++;\n                  return {type: TOK_LTE, value: \"<=\", start: start};\n              } else {\n                  return {type: TOK_LT, value: \"<\", start: start};\n              }\n          } else if (startingChar === \">\") {\n              if (stream[this._current] === \"=\") {\n                  this._current++;\n                  return {type: TOK_GTE, value: \">=\", start: start};\n              } else {\n                  return {type: TOK_GT, value: \">\", start: start};\n              }\n          } else if (startingChar === \"=\") {\n              if (stream[this._current] === \"=\") {\n                  this._current++;\n                  return {type: TOK_EQ, value: \"==\", start: start};\n              }\n          }\n      },\n\n      _consumeLiteral: function(stream) {\n          this._current++;\n          var start = this._current;\n          var maxLength = stream.length;\n          var literal;\n          while(stream[this._current] !== \"`\" && this._current < maxLength) {\n              // You can escape a literal char or you can escape the escape.\n              var current = this._current;\n              if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n                                               stream[current + 1] === \"`\")) {\n                  current += 2;\n              } else {\n                  current++;\n              }\n              this._current = current;\n          }\n          var literalString = trimLeft(stream.slice(start, this._current));\n          literalString = literalString.replace(\"\\\\`\", \"`\");\n          if (this._looksLikeJSON(literalString)) {\n              literal = JSON.parse(literalString);\n          } else {\n              // Try to JSON parse it as \"<literal>\"\n              literal = JSON.parse(\"\\\"\" + literalString + \"\\\"\");\n          }\n          // +1 gets us to the ending \"`\", +1 to move on to the next char.\n          this._current++;\n          return literal;\n      },\n\n      _looksLikeJSON: function(literalString) {\n          var startingChars = \"[{\\\"\";\n          var jsonLiterals = [\"true\", \"false\", \"null\"];\n          var numberLooking = \"-0123456789\";\n\n          if (literalString === \"\") {\n              return false;\n          } else if (startingChars.indexOf(literalString[0]) >= 0) {\n              return true;\n          } else if (jsonLiterals.indexOf(literalString) >= 0) {\n              return true;\n          } else if (numberLooking.indexOf(literalString[0]) >= 0) {\n              try {\n                  JSON.parse(literalString);\n                  return true;\n              } catch (ex) {\n                  return false;\n              }\n          } else {\n              return false;\n          }\n      }\n  };\n\n      var bindingPower = {};\n      bindingPower[TOK_EOF] = 0;\n      bindingPower[TOK_UNQUOTEDIDENTIFIER] = 0;\n      bindingPower[TOK_QUOTEDIDENTIFIER] = 0;\n      bindingPower[TOK_RBRACKET] = 0;\n      bindingPower[TOK_RPAREN] = 0;\n      bindingPower[TOK_COMMA] = 0;\n      bindingPower[TOK_RBRACE] = 0;\n      bindingPower[TOK_NUMBER] = 0;\n      bindingPower[TOK_CURRENT] = 0;\n      bindingPower[TOK_EXPREF] = 0;\n      bindingPower[TOK_PIPE] = 1;\n      bindingPower[TOK_OR] = 2;\n      bindingPower[TOK_AND] = 3;\n      bindingPower[TOK_EQ] = 5;\n      bindingPower[TOK_GT] = 5;\n      bindingPower[TOK_LT] = 5;\n      bindingPower[TOK_GTE] = 5;\n      bindingPower[TOK_LTE] = 5;\n      bindingPower[TOK_NE] = 5;\n      bindingPower[TOK_FLATTEN] = 9;\n      bindingPower[TOK_STAR] = 20;\n      bindingPower[TOK_FILTER] = 21;\n      bindingPower[TOK_DOT] = 40;\n      bindingPower[TOK_NOT] = 45;\n      bindingPower[TOK_LBRACE] = 50;\n      bindingPower[TOK_LBRACKET] = 55;\n      bindingPower[TOK_LPAREN] = 60;\n\n  function Parser() {\n  }\n\n  Parser.prototype = {\n      parse: function(expression) {\n          this._loadTokens(expression);\n          this.index = 0;\n          var ast = this.expression(0);\n          if (this._lookahead(0) !== TOK_EOF) {\n              var t = this._lookaheadToken(0);\n              var error = new Error(\n                  \"Unexpected token type: \" + t.type + \", value: \" + t.value);\n              error.name = \"ParserError\";\n              throw error;\n          }\n          return ast;\n      },\n\n      _loadTokens: function(expression) {\n          var lexer = new Lexer();\n          var tokens = lexer.tokenize(expression);\n          tokens.push({type: TOK_EOF, value: \"\", start: expression.length});\n          this.tokens = tokens;\n      },\n\n      expression: function(rbp) {\n          var leftToken = this._lookaheadToken(0);\n          this._advance();\n          var left = this.nud(leftToken);\n          var currentToken = this._lookahead(0);\n          while (rbp < bindingPower[currentToken]) {\n              this._advance();\n              left = this.led(currentToken, left);\n              currentToken = this._lookahead(0);\n          }\n          return left;\n      },\n\n      _lookahead: function(number) {\n          return this.tokens[this.index + number].type;\n      },\n\n      _lookaheadToken: function(number) {\n          return this.tokens[this.index + number];\n      },\n\n      _advance: function() {\n          this.index++;\n      },\n\n      nud: function(token) {\n        var left;\n        var right;\n        var expression;\n        switch (token.type) {\n          case TOK_LITERAL:\n            return {type: \"Literal\", value: token.value};\n          case TOK_UNQUOTEDIDENTIFIER:\n            return {type: \"Field\", name: token.value};\n          case TOK_QUOTEDIDENTIFIER:\n            var node = {type: \"Field\", name: token.value};\n            if (this._lookahead(0) === TOK_LPAREN) {\n                throw new Error(\"Quoted identifier not allowed for function names.\");\n            }\n            return node;\n          case TOK_NOT:\n            right = this.expression(bindingPower.Not);\n            return {type: \"NotExpression\", children: [right]};\n          case TOK_STAR:\n            left = {type: \"Identity\"};\n            right = null;\n            if (this._lookahead(0) === TOK_RBRACKET) {\n                // This can happen in a multiselect,\n                // [a, b, *]\n                right = {type: \"Identity\"};\n            } else {\n                right = this._parseProjectionRHS(bindingPower.Star);\n            }\n            return {type: \"ValueProjection\", children: [left, right]};\n          case TOK_FILTER:\n            return this.led(token.type, {type: \"Identity\"});\n          case TOK_LBRACE:\n            return this._parseMultiselectHash();\n          case TOK_FLATTEN:\n            left = {type: TOK_FLATTEN, children: [{type: \"Identity\"}]};\n            right = this._parseProjectionRHS(bindingPower.Flatten);\n            return {type: \"Projection\", children: [left, right]};\n          case TOK_LBRACKET:\n            if (this._lookahead(0) === TOK_NUMBER || this._lookahead(0) === TOK_COLON) {\n                right = this._parseIndexExpression();\n                return this._projectIfSlice({type: \"Identity\"}, right);\n            } else if (this._lookahead(0) === TOK_STAR &&\n                       this._lookahead(1) === TOK_RBRACKET) {\n                this._advance();\n                this._advance();\n                right = this._parseProjectionRHS(bindingPower.Star);\n                return {type: \"Projection\",\n                        children: [{type: \"Identity\"}, right]};\n            }\n            return this._parseMultiselectList();\n          case TOK_CURRENT:\n            return {type: TOK_CURRENT};\n          case TOK_EXPREF:\n            expression = this.expression(bindingPower.Expref);\n            return {type: \"ExpressionReference\", children: [expression]};\n          case TOK_LPAREN:\n            var args = [];\n            while (this._lookahead(0) !== TOK_RPAREN) {\n              if (this._lookahead(0) === TOK_CURRENT) {\n                expression = {type: TOK_CURRENT};\n                this._advance();\n              } else {\n                expression = this.expression(0);\n              }\n              args.push(expression);\n            }\n            this._match(TOK_RPAREN);\n            return args[0];\n          default:\n            this._errorToken(token);\n        }\n      },\n\n      led: function(tokenName, left) {\n        var right;\n        switch(tokenName) {\n          case TOK_DOT:\n            var rbp = bindingPower.Dot;\n            if (this._lookahead(0) !== TOK_STAR) {\n                right = this._parseDotRHS(rbp);\n                return {type: \"Subexpression\", children: [left, right]};\n            }\n            // Creating a projection.\n            this._advance();\n            right = this._parseProjectionRHS(rbp);\n            return {type: \"ValueProjection\", children: [left, right]};\n          case TOK_PIPE:\n            right = this.expression(bindingPower.Pipe);\n            return {type: TOK_PIPE, children: [left, right]};\n          case TOK_OR:\n            right = this.expression(bindingPower.Or);\n            return {type: \"OrExpression\", children: [left, right]};\n          case TOK_AND:\n            right = this.expression(bindingPower.And);\n            return {type: \"AndExpression\", children: [left, right]};\n          case TOK_LPAREN:\n            var name = left.name;\n            var args = [];\n            var expression, node;\n            while (this._lookahead(0) !== TOK_RPAREN) {\n              if (this._lookahead(0) === TOK_CURRENT) {\n                expression = {type: TOK_CURRENT};\n                this._advance();\n              } else {\n                expression = this.expression(0);\n              }\n              if (this._lookahead(0) === TOK_COMMA) {\n                this._match(TOK_COMMA);\n              }\n              args.push(expression);\n            }\n            this._match(TOK_RPAREN);\n            node = {type: \"Function\", name: name, children: args};\n            return node;\n          case TOK_FILTER:\n            var condition = this.expression(0);\n            this._match(TOK_RBRACKET);\n            if (this._lookahead(0) === TOK_FLATTEN) {\n              right = {type: \"Identity\"};\n            } else {\n              right = this._parseProjectionRHS(bindingPower.Filter);\n            }\n            return {type: \"FilterProjection\", children: [left, right, condition]};\n          case TOK_FLATTEN:\n            var leftNode = {type: TOK_FLATTEN, children: [left]};\n            var rightNode = this._parseProjectionRHS(bindingPower.Flatten);\n            return {type: \"Projection\", children: [leftNode, rightNode]};\n          case TOK_EQ:\n          case TOK_NE:\n          case TOK_GT:\n          case TOK_GTE:\n          case TOK_LT:\n          case TOK_LTE:\n            return this._parseComparator(left, tokenName);\n          case TOK_LBRACKET:\n            var token = this._lookaheadToken(0);\n            if (token.type === TOK_NUMBER || token.type === TOK_COLON) {\n                right = this._parseIndexExpression();\n                return this._projectIfSlice(left, right);\n            }\n            this._match(TOK_STAR);\n            this._match(TOK_RBRACKET);\n            right = this._parseProjectionRHS(bindingPower.Star);\n            return {type: \"Projection\", children: [left, right]};\n          default:\n            this._errorToken(this._lookaheadToken(0));\n        }\n      },\n\n      _match: function(tokenType) {\n          if (this._lookahead(0) === tokenType) {\n              this._advance();\n          } else {\n              var t = this._lookaheadToken(0);\n              var error = new Error(\"Expected \" + tokenType + \", got: \" + t.type);\n              error.name = \"ParserError\";\n              throw error;\n          }\n      },\n\n      _errorToken: function(token) {\n          var error = new Error(\"Invalid token (\" +\n                                token.type + \"): \\\"\" +\n                                token.value + \"\\\"\");\n          error.name = \"ParserError\";\n          throw error;\n      },\n\n\n      _parseIndexExpression: function() {\n          if (this._lookahead(0) === TOK_COLON || this._lookahead(1) === TOK_COLON) {\n              return this._parseSliceExpression();\n          } else {\n              var node = {\n                  type: \"Index\",\n                  value: this._lookaheadToken(0).value};\n              this._advance();\n              this._match(TOK_RBRACKET);\n              return node;\n          }\n      },\n\n      _projectIfSlice: function(left, right) {\n          var indexExpr = {type: \"IndexExpression\", children: [left, right]};\n          if (right.type === \"Slice\") {\n              return {\n                  type: \"Projection\",\n                  children: [indexExpr, this._parseProjectionRHS(bindingPower.Star)]\n              };\n          } else {\n              return indexExpr;\n          }\n      },\n\n      _parseSliceExpression: function() {\n          // [start:end:step] where each part is optional, as well as the last\n          // colon.\n          var parts = [null, null, null];\n          var index = 0;\n          var currentToken = this._lookahead(0);\n          while (currentToken !== TOK_RBRACKET && index < 3) {\n              if (currentToken === TOK_COLON) {\n                  index++;\n                  this._advance();\n              } else if (currentToken === TOK_NUMBER) {\n                  parts[index] = this._lookaheadToken(0).value;\n                  this._advance();\n              } else {\n                  var t = this._lookahead(0);\n                  var error = new Error(\"Syntax error, unexpected token: \" +\n                                        t.value + \"(\" + t.type + \")\");\n                  error.name = \"Parsererror\";\n                  throw error;\n              }\n              currentToken = this._lookahead(0);\n          }\n          this._match(TOK_RBRACKET);\n          return {\n              type: \"Slice\",\n              children: parts\n          };\n      },\n\n      _parseComparator: function(left, comparator) {\n        var right = this.expression(bindingPower[comparator]);\n        return {type: \"Comparator\", name: comparator, children: [left, right]};\n      },\n\n      _parseDotRHS: function(rbp) {\n          var lookahead = this._lookahead(0);\n          var exprTokens = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER, TOK_STAR];\n          if (exprTokens.indexOf(lookahead) >= 0) {\n              return this.expression(rbp);\n          } else if (lookahead === TOK_LBRACKET) {\n              this._match(TOK_LBRACKET);\n              return this._parseMultiselectList();\n          } else if (lookahead === TOK_LBRACE) {\n              this._match(TOK_LBRACE);\n              return this._parseMultiselectHash();\n          }\n      },\n\n      _parseProjectionRHS: function(rbp) {\n          var right;\n          if (bindingPower[this._lookahead(0)] < 10) {\n              right = {type: \"Identity\"};\n          } else if (this._lookahead(0) === TOK_LBRACKET) {\n              right = this.expression(rbp);\n          } else if (this._lookahead(0) === TOK_FILTER) {\n              right = this.expression(rbp);\n          } else if (this._lookahead(0) === TOK_DOT) {\n              this._match(TOK_DOT);\n              right = this._parseDotRHS(rbp);\n          } else {\n              var t = this._lookaheadToken(0);\n              var error = new Error(\"Sytanx error, unexpected token: \" +\n                                    t.value + \"(\" + t.type + \")\");\n              error.name = \"ParserError\";\n              throw error;\n          }\n          return right;\n      },\n\n      _parseMultiselectList: function() {\n          var expressions = [];\n          while (this._lookahead(0) !== TOK_RBRACKET) {\n              var expression = this.expression(0);\n              expressions.push(expression);\n              if (this._lookahead(0) === TOK_COMMA) {\n                  this._match(TOK_COMMA);\n                  if (this._lookahead(0) === TOK_RBRACKET) {\n                    throw new Error(\"Unexpected token Rbracket\");\n                  }\n              }\n          }\n          this._match(TOK_RBRACKET);\n          return {type: \"MultiSelectList\", children: expressions};\n      },\n\n      _parseMultiselectHash: function() {\n        var pairs = [];\n        var identifierTypes = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER];\n        var keyToken, keyName, value, node;\n        for (;;) {\n          keyToken = this._lookaheadToken(0);\n          if (identifierTypes.indexOf(keyToken.type) < 0) {\n            throw new Error(\"Expecting an identifier token, got: \" +\n                            keyToken.type);\n          }\n          keyName = keyToken.value;\n          this._advance();\n          this._match(TOK_COLON);\n          value = this.expression(0);\n          node = {type: \"KeyValuePair\", name: keyName, value: value};\n          pairs.push(node);\n          if (this._lookahead(0) === TOK_COMMA) {\n            this._match(TOK_COMMA);\n          } else if (this._lookahead(0) === TOK_RBRACE) {\n            this._match(TOK_RBRACE);\n            break;\n          }\n        }\n        return {type: \"MultiSelectHash\", children: pairs};\n      }\n  };\n\n\n  function TreeInterpreter(runtime) {\n    this.runtime = runtime;\n  }\n\n  TreeInterpreter.prototype = {\n      search: function(node, value) {\n          return this.visit(node, value);\n      },\n\n      visit: function(node, value) {\n          var matched, current, result, first, second, field, left, right, collected, i;\n          switch (node.type) {\n            case \"Field\":\n              if (value !== null && isObject(value)) {\n                  field = value[node.name];\n                  if (field === undefined) {\n                      return null;\n                  } else {\n                      return field;\n                  }\n              }\n              return null;\n            case \"Subexpression\":\n              result = this.visit(node.children[0], value);\n              for (i = 1; i < node.children.length; i++) {\n                  result = this.visit(node.children[1], result);\n                  if (result === null) {\n                      return null;\n                  }\n              }\n              return result;\n            case \"IndexExpression\":\n              left = this.visit(node.children[0], value);\n              right = this.visit(node.children[1], left);\n              return right;\n            case \"Index\":\n              if (!isArray(value)) {\n                return null;\n              }\n              var index = node.value;\n              if (index < 0) {\n                index = value.length + index;\n              }\n              result = value[index];\n              if (result === undefined) {\n                result = null;\n              }\n              return result;\n            case \"Slice\":\n              if (!isArray(value)) {\n                return null;\n              }\n              var sliceParams = node.children.slice(0);\n              var computed = this.computeSliceParams(value.length, sliceParams);\n              var start = computed[0];\n              var stop = computed[1];\n              var step = computed[2];\n              result = [];\n              if (step > 0) {\n                  for (i = start; i < stop; i += step) {\n                      result.push(value[i]);\n                  }\n              } else {\n                  for (i = start; i > stop; i += step) {\n                      result.push(value[i]);\n                  }\n              }\n              return result;\n            case \"Projection\":\n              // Evaluate left child.\n              var base = this.visit(node.children[0], value);\n              if (!isArray(base)) {\n                return null;\n              }\n              collected = [];\n              for (i = 0; i < base.length; i++) {\n                current = this.visit(node.children[1], base[i]);\n                if (current !== null) {\n                  collected.push(current);\n                }\n              }\n              return collected;\n            case \"ValueProjection\":\n              // Evaluate left child.\n              base = this.visit(node.children[0], value);\n              if (!isObject(base)) {\n                return null;\n              }\n              collected = [];\n              var values = objValues(base);\n              for (i = 0; i < values.length; i++) {\n                current = this.visit(node.children[1], values[i]);\n                if (current !== null) {\n                  collected.push(current);\n                }\n              }\n              return collected;\n            case \"FilterProjection\":\n              base = this.visit(node.children[0], value);\n              if (!isArray(base)) {\n                return null;\n              }\n              var filtered = [];\n              var finalResults = [];\n              for (i = 0; i < base.length; i++) {\n                matched = this.visit(node.children[2], base[i]);\n                if (!isFalse(matched)) {\n                  filtered.push(base[i]);\n                }\n              }\n              for (var j = 0; j < filtered.length; j++) {\n                current = this.visit(node.children[1], filtered[j]);\n                if (current !== null) {\n                  finalResults.push(current);\n                }\n              }\n              return finalResults;\n            case \"Comparator\":\n              first = this.visit(node.children[0], value);\n              second = this.visit(node.children[1], value);\n              switch(node.name) {\n                case TOK_EQ:\n                  result = strictDeepEqual(first, second);\n                  break;\n                case TOK_NE:\n                  result = !strictDeepEqual(first, second);\n                  break;\n                case TOK_GT:\n                  result = first > second;\n                  break;\n                case TOK_GTE:\n                  result = first >= second;\n                  break;\n                case TOK_LT:\n                  result = first < second;\n                  break;\n                case TOK_LTE:\n                  result = first <= second;\n                  break;\n                default:\n                  throw new Error(\"Unknown comparator: \" + node.name);\n              }\n              return result;\n            case TOK_FLATTEN:\n              var original = this.visit(node.children[0], value);\n              if (!isArray(original)) {\n                return null;\n              }\n              var merged = [];\n              for (i = 0; i < original.length; i++) {\n                current = original[i];\n                if (isArray(current)) {\n                  merged.push.apply(merged, current);\n                } else {\n                  merged.push(current);\n                }\n              }\n              return merged;\n            case \"Identity\":\n              return value;\n            case \"MultiSelectList\":\n              if (value === null) {\n                return null;\n              }\n              collected = [];\n              for (i = 0; i < node.children.length; i++) {\n                  collected.push(this.visit(node.children[i], value));\n              }\n              return collected;\n            case \"MultiSelectHash\":\n              if (value === null) {\n                return null;\n              }\n              collected = {};\n              var child;\n              for (i = 0; i < node.children.length; i++) {\n                child = node.children[i];\n                collected[child.name] = this.visit(child.value, value);\n              }\n              return collected;\n            case \"OrExpression\":\n              matched = this.visit(node.children[0], value);\n              if (isFalse(matched)) {\n                  matched = this.visit(node.children[1], value);\n              }\n              return matched;\n            case \"AndExpression\":\n              first = this.visit(node.children[0], value);\n\n              if (isFalse(first) === true) {\n                return first;\n              }\n              return this.visit(node.children[1], value);\n            case \"NotExpression\":\n              first = this.visit(node.children[0], value);\n              return isFalse(first);\n            case \"Literal\":\n              return node.value;\n            case TOK_PIPE:\n              left = this.visit(node.children[0], value);\n              return this.visit(node.children[1], left);\n            case TOK_CURRENT:\n              return value;\n            case \"Function\":\n              var resolvedArgs = [];\n              for (i = 0; i < node.children.length; i++) {\n                  resolvedArgs.push(this.visit(node.children[i], value));\n              }\n              return this.runtime.callFunction(node.name, resolvedArgs);\n            case \"ExpressionReference\":\n              var refNode = node.children[0];\n              // Tag the node with a specific attribute so the type\n              // checker verify the type.\n              refNode.jmespathType = TOK_EXPREF;\n              return refNode;\n            default:\n              throw new Error(\"Unknown node type: \" + node.type);\n          }\n      },\n\n      computeSliceParams: function(arrayLength, sliceParams) {\n        var start = sliceParams[0];\n        var stop = sliceParams[1];\n        var step = sliceParams[2];\n        var computed = [null, null, null];\n        if (step === null) {\n          step = 1;\n        } else if (step === 0) {\n          var error = new Error(\"Invalid slice, step cannot be 0\");\n          error.name = \"RuntimeError\";\n          throw error;\n        }\n        var stepValueNegative = step < 0 ? true : false;\n\n        if (start === null) {\n            start = stepValueNegative ? arrayLength - 1 : 0;\n        } else {\n            start = this.capSliceRange(arrayLength, start, step);\n        }\n\n        if (stop === null) {\n            stop = stepValueNegative ? -1 : arrayLength;\n        } else {\n            stop = this.capSliceRange(arrayLength, stop, step);\n        }\n        computed[0] = start;\n        computed[1] = stop;\n        computed[2] = step;\n        return computed;\n      },\n\n      capSliceRange: function(arrayLength, actualValue, step) {\n          if (actualValue < 0) {\n              actualValue += arrayLength;\n              if (actualValue < 0) {\n                  actualValue = step < 0 ? -1 : 0;\n              }\n          } else if (actualValue >= arrayLength) {\n              actualValue = step < 0 ? arrayLength - 1 : arrayLength;\n          }\n          return actualValue;\n      }\n\n  };\n\n  function Runtime(interpreter) {\n    this._interpreter = interpreter;\n    this.functionTable = {\n        // name: [function, <signature>]\n        // The <signature> can be:\n        //\n        // {\n        //   args: [[type1, type2], [type1, type2]],\n        //   variadic: true|false\n        // }\n        //\n        // Each arg in the arg list is a list of valid types\n        // (if the function is overloaded and supports multiple\n        // types.  If the type is \"any\" then no type checking\n        // occurs on the argument.  Variadic is optional\n        // and if not provided is assumed to be false.\n        abs: {_func: this._functionAbs, _signature: [{types: [TYPE_NUMBER]}]},\n        avg: {_func: this._functionAvg, _signature: [{types: [TYPE_ARRAY_NUMBER]}]},\n        ceil: {_func: this._functionCeil, _signature: [{types: [TYPE_NUMBER]}]},\n        contains: {\n            _func: this._functionContains,\n            _signature: [{types: [TYPE_STRING, TYPE_ARRAY]},\n                        {types: [TYPE_ANY]}]},\n        \"ends_with\": {\n            _func: this._functionEndsWith,\n            _signature: [{types: [TYPE_STRING]}, {types: [TYPE_STRING]}]},\n        floor: {_func: this._functionFloor, _signature: [{types: [TYPE_NUMBER]}]},\n        length: {\n            _func: this._functionLength,\n            _signature: [{types: [TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT]}]},\n        map: {\n            _func: this._functionMap,\n            _signature: [{types: [TYPE_EXPREF]}, {types: [TYPE_ARRAY]}]},\n        max: {\n            _func: this._functionMax,\n            _signature: [{types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]}]},\n        \"merge\": {\n            _func: this._functionMerge,\n            _signature: [{types: [TYPE_OBJECT], variadic: true}]\n        },\n        \"max_by\": {\n          _func: this._functionMaxBy,\n          _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n        },\n        sum: {_func: this._functionSum, _signature: [{types: [TYPE_ARRAY_NUMBER]}]},\n        \"starts_with\": {\n            _func: this._functionStartsWith,\n            _signature: [{types: [TYPE_STRING]}, {types: [TYPE_STRING]}]},\n        min: {\n            _func: this._functionMin,\n            _signature: [{types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]}]},\n        \"min_by\": {\n          _func: this._functionMinBy,\n          _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n        },\n        type: {_func: this._functionType, _signature: [{types: [TYPE_ANY]}]},\n        keys: {_func: this._functionKeys, _signature: [{types: [TYPE_OBJECT]}]},\n        values: {_func: this._functionValues, _signature: [{types: [TYPE_OBJECT]}]},\n        sort: {_func: this._functionSort, _signature: [{types: [TYPE_ARRAY_STRING, TYPE_ARRAY_NUMBER]}]},\n        \"sort_by\": {\n          _func: this._functionSortBy,\n          _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n        },\n        join: {\n            _func: this._functionJoin,\n            _signature: [\n                {types: [TYPE_STRING]},\n                {types: [TYPE_ARRAY_STRING]}\n            ]\n        },\n        reverse: {\n            _func: this._functionReverse,\n            _signature: [{types: [TYPE_STRING, TYPE_ARRAY]}]},\n        \"to_array\": {_func: this._functionToArray, _signature: [{types: [TYPE_ANY]}]},\n        \"to_string\": {_func: this._functionToString, _signature: [{types: [TYPE_ANY]}]},\n        \"to_number\": {_func: this._functionToNumber, _signature: [{types: [TYPE_ANY]}]},\n        \"not_null\": {\n            _func: this._functionNotNull,\n            _signature: [{types: [TYPE_ANY], variadic: true}]\n        }\n    };\n  }\n\n  Runtime.prototype = {\n    callFunction: function(name, resolvedArgs) {\n      var functionEntry = this.functionTable[name];\n      if (functionEntry === undefined) {\n          throw new Error(\"Unknown function: \" + name + \"()\");\n      }\n      this._validateArgs(name, resolvedArgs, functionEntry._signature);\n      return functionEntry._func.call(this, resolvedArgs);\n    },\n\n    _validateArgs: function(name, args, signature) {\n        // Validating the args requires validating\n        // the correct arity and the correct type of each arg.\n        // If the last argument is declared as variadic, then we need\n        // a minimum number of args to be required.  Otherwise it has to\n        // be an exact amount.\n        var pluralized;\n        if (signature[signature.length - 1].variadic) {\n            if (args.length < signature.length) {\n                pluralized = signature.length === 1 ? \" argument\" : \" arguments\";\n                throw new Error(\"ArgumentError: \" + name + \"() \" +\n                                \"takes at least\" + signature.length + pluralized +\n                                \" but received \" + args.length);\n            }\n        } else if (args.length !== signature.length) {\n            pluralized = signature.length === 1 ? \" argument\" : \" arguments\";\n            throw new Error(\"ArgumentError: \" + name + \"() \" +\n                            \"takes \" + signature.length + pluralized +\n                            \" but received \" + args.length);\n        }\n        var currentSpec;\n        var actualType;\n        var typeMatched;\n        for (var i = 0; i < signature.length; i++) {\n            typeMatched = false;\n            currentSpec = signature[i].types;\n            actualType = this._getTypeName(args[i]);\n            for (var j = 0; j < currentSpec.length; j++) {\n                if (this._typeMatches(actualType, currentSpec[j], args[i])) {\n                    typeMatched = true;\n                    break;\n                }\n            }\n            if (!typeMatched) {\n                var expected = currentSpec\n                    .map(function(typeIdentifier) {\n                        return TYPE_NAME_TABLE[typeIdentifier];\n                    })\n                    .join(',');\n                throw new Error(\"TypeError: \" + name + \"() \" +\n                                \"expected argument \" + (i + 1) +\n                                \" to be type \" + expected +\n                                \" but received type \" +\n                                TYPE_NAME_TABLE[actualType] + \" instead.\");\n            }\n        }\n    },\n\n    _typeMatches: function(actual, expected, argValue) {\n        if (expected === TYPE_ANY) {\n            return true;\n        }\n        if (expected === TYPE_ARRAY_STRING ||\n            expected === TYPE_ARRAY_NUMBER ||\n            expected === TYPE_ARRAY) {\n            // The expected type can either just be array,\n            // or it can require a specific subtype (array of numbers).\n            //\n            // The simplest case is if \"array\" with no subtype is specified.\n            if (expected === TYPE_ARRAY) {\n                return actual === TYPE_ARRAY;\n            } else if (actual === TYPE_ARRAY) {\n                // Otherwise we need to check subtypes.\n                // I think this has potential to be improved.\n                var subtype;\n                if (expected === TYPE_ARRAY_NUMBER) {\n                  subtype = TYPE_NUMBER;\n                } else if (expected === TYPE_ARRAY_STRING) {\n                  subtype = TYPE_STRING;\n                }\n                for (var i = 0; i < argValue.length; i++) {\n                    if (!this._typeMatches(\n                            this._getTypeName(argValue[i]), subtype,\n                                             argValue[i])) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n        } else {\n            return actual === expected;\n        }\n    },\n    _getTypeName: function(obj) {\n        switch (Object.prototype.toString.call(obj)) {\n            case \"[object String]\":\n              return TYPE_STRING;\n            case \"[object Number]\":\n              return TYPE_NUMBER;\n            case \"[object Array]\":\n              return TYPE_ARRAY;\n            case \"[object Boolean]\":\n              return TYPE_BOOLEAN;\n            case \"[object Null]\":\n              return TYPE_NULL;\n            case \"[object Object]\":\n              // Check if it's an expref.  If it has, it's been\n              // tagged with a jmespathType attr of 'Expref';\n              if (obj.jmespathType === TOK_EXPREF) {\n                return TYPE_EXPREF;\n              } else {\n                return TYPE_OBJECT;\n              }\n        }\n    },\n\n    _functionStartsWith: function(resolvedArgs) {\n        return resolvedArgs[0].lastIndexOf(resolvedArgs[1]) === 0;\n    },\n\n    _functionEndsWith: function(resolvedArgs) {\n        var searchStr = resolvedArgs[0];\n        var suffix = resolvedArgs[1];\n        return searchStr.indexOf(suffix, searchStr.length - suffix.length) !== -1;\n    },\n\n    _functionReverse: function(resolvedArgs) {\n        var typeName = this._getTypeName(resolvedArgs[0]);\n        if (typeName === TYPE_STRING) {\n          var originalStr = resolvedArgs[0];\n          var reversedStr = \"\";\n          for (var i = originalStr.length - 1; i >= 0; i--) {\n              reversedStr += originalStr[i];\n          }\n          return reversedStr;\n        } else {\n          var reversedArray = resolvedArgs[0].slice(0);\n          reversedArray.reverse();\n          return reversedArray;\n        }\n    },\n\n    _functionAbs: function(resolvedArgs) {\n      return Math.abs(resolvedArgs[0]);\n    },\n\n    _functionCeil: function(resolvedArgs) {\n        return Math.ceil(resolvedArgs[0]);\n    },\n\n    _functionAvg: function(resolvedArgs) {\n        var sum = 0;\n        var inputArray = resolvedArgs[0];\n        for (var i = 0; i < inputArray.length; i++) {\n            sum += inputArray[i];\n        }\n        return sum / inputArray.length;\n    },\n\n    _functionContains: function(resolvedArgs) {\n        return resolvedArgs[0].indexOf(resolvedArgs[1]) >= 0;\n    },\n\n    _functionFloor: function(resolvedArgs) {\n        return Math.floor(resolvedArgs[0]);\n    },\n\n    _functionLength: function(resolvedArgs) {\n       if (!isObject(resolvedArgs[0])) {\n         return resolvedArgs[0].length;\n       } else {\n         // As far as I can tell, there's no way to get the length\n         // of an object without O(n) iteration through the object.\n         return Object.keys(resolvedArgs[0]).length;\n       }\n    },\n\n    _functionMap: function(resolvedArgs) {\n      var mapped = [];\n      var interpreter = this._interpreter;\n      var exprefNode = resolvedArgs[0];\n      var elements = resolvedArgs[1];\n      for (var i = 0; i < elements.length; i++) {\n          mapped.push(interpreter.visit(exprefNode, elements[i]));\n      }\n      return mapped;\n    },\n\n    _functionMerge: function(resolvedArgs) {\n      var merged = {};\n      for (var i = 0; i < resolvedArgs.length; i++) {\n        var current = resolvedArgs[i];\n        for (var key in current) {\n          merged[key] = current[key];\n        }\n      }\n      return merged;\n    },\n\n    _functionMax: function(resolvedArgs) {\n      if (resolvedArgs[0].length > 0) {\n        var typeName = this._getTypeName(resolvedArgs[0][0]);\n        if (typeName === TYPE_NUMBER) {\n          return Math.max.apply(Math, resolvedArgs[0]);\n        } else {\n          var elements = resolvedArgs[0];\n          var maxElement = elements[0];\n          for (var i = 1; i < elements.length; i++) {\n              if (maxElement.localeCompare(elements[i]) < 0) {\n                  maxElement = elements[i];\n              }\n          }\n          return maxElement;\n        }\n      } else {\n          return null;\n      }\n    },\n\n    _functionMin: function(resolvedArgs) {\n      if (resolvedArgs[0].length > 0) {\n        var typeName = this._getTypeName(resolvedArgs[0][0]);\n        if (typeName === TYPE_NUMBER) {\n          return Math.min.apply(Math, resolvedArgs[0]);\n        } else {\n          var elements = resolvedArgs[0];\n          var minElement = elements[0];\n          for (var i = 1; i < elements.length; i++) {\n              if (elements[i].localeCompare(minElement) < 0) {\n                  minElement = elements[i];\n              }\n          }\n          return minElement;\n        }\n      } else {\n        return null;\n      }\n    },\n\n    _functionSum: function(resolvedArgs) {\n      var sum = 0;\n      var listToSum = resolvedArgs[0];\n      for (var i = 0; i < listToSum.length; i++) {\n        sum += listToSum[i];\n      }\n      return sum;\n    },\n\n    _functionType: function(resolvedArgs) {\n        switch (this._getTypeName(resolvedArgs[0])) {\n          case TYPE_NUMBER:\n            return \"number\";\n          case TYPE_STRING:\n            return \"string\";\n          case TYPE_ARRAY:\n            return \"array\";\n          case TYPE_OBJECT:\n            return \"object\";\n          case TYPE_BOOLEAN:\n            return \"boolean\";\n          case TYPE_EXPREF:\n            return \"expref\";\n          case TYPE_NULL:\n            return \"null\";\n        }\n    },\n\n    _functionKeys: function(resolvedArgs) {\n        return Object.keys(resolvedArgs[0]);\n    },\n\n    _functionValues: function(resolvedArgs) {\n        var obj = resolvedArgs[0];\n        var keys = Object.keys(obj);\n        var values = [];\n        for (var i = 0; i < keys.length; i++) {\n            values.push(obj[keys[i]]);\n        }\n        return values;\n    },\n\n    _functionJoin: function(resolvedArgs) {\n        var joinChar = resolvedArgs[0];\n        var listJoin = resolvedArgs[1];\n        return listJoin.join(joinChar);\n    },\n\n    _functionToArray: function(resolvedArgs) {\n        if (this._getTypeName(resolvedArgs[0]) === TYPE_ARRAY) {\n            return resolvedArgs[0];\n        } else {\n            return [resolvedArgs[0]];\n        }\n    },\n\n    _functionToString: function(resolvedArgs) {\n        if (this._getTypeName(resolvedArgs[0]) === TYPE_STRING) {\n            return resolvedArgs[0];\n        } else {\n            return JSON.stringify(resolvedArgs[0]);\n        }\n    },\n\n    _functionToNumber: function(resolvedArgs) {\n        var typeName = this._getTypeName(resolvedArgs[0]);\n        var convertedValue;\n        if (typeName === TYPE_NUMBER) {\n            return resolvedArgs[0];\n        } else if (typeName === TYPE_STRING) {\n            convertedValue = +resolvedArgs[0];\n            if (!isNaN(convertedValue)) {\n                return convertedValue;\n            }\n        }\n        return null;\n    },\n\n    _functionNotNull: function(resolvedArgs) {\n        for (var i = 0; i < resolvedArgs.length; i++) {\n            if (this._getTypeName(resolvedArgs[i]) !== TYPE_NULL) {\n                return resolvedArgs[i];\n            }\n        }\n        return null;\n    },\n\n    _functionSort: function(resolvedArgs) {\n        var sortedArray = resolvedArgs[0].slice(0);\n        sortedArray.sort();\n        return sortedArray;\n    },\n\n    _functionSortBy: function(resolvedArgs) {\n        var sortedArray = resolvedArgs[0].slice(0);\n        if (sortedArray.length === 0) {\n            return sortedArray;\n        }\n        var interpreter = this._interpreter;\n        var exprefNode = resolvedArgs[1];\n        var requiredType = this._getTypeName(\n            interpreter.visit(exprefNode, sortedArray[0]));\n        if ([TYPE_NUMBER, TYPE_STRING].indexOf(requiredType) < 0) {\n            throw new Error(\"TypeError\");\n        }\n        var that = this;\n        // In order to get a stable sort out of an unstable\n        // sort algorithm, we decorate/sort/undecorate (DSU)\n        // by creating a new list of [index, element] pairs.\n        // In the cmp function, if the evaluated elements are\n        // equal, then the index will be used as the tiebreaker.\n        // After the decorated list has been sorted, it will be\n        // undecorated to extract the original elements.\n        var decorated = [];\n        for (var i = 0; i < sortedArray.length; i++) {\n          decorated.push([i, sortedArray[i]]);\n        }\n        decorated.sort(function(a, b) {\n          var exprA = interpreter.visit(exprefNode, a[1]);\n          var exprB = interpreter.visit(exprefNode, b[1]);\n          if (that._getTypeName(exprA) !== requiredType) {\n              throw new Error(\n                  \"TypeError: expected \" + requiredType + \", received \" +\n                  that._getTypeName(exprA));\n          } else if (that._getTypeName(exprB) !== requiredType) {\n              throw new Error(\n                  \"TypeError: expected \" + requiredType + \", received \" +\n                  that._getTypeName(exprB));\n          }\n          if (exprA > exprB) {\n            return 1;\n          } else if (exprA < exprB) {\n            return -1;\n          } else {\n            // If they're equal compare the items by their\n            // order to maintain relative order of equal keys\n            // (i.e. to get a stable sort).\n            return a[0] - b[0];\n          }\n        });\n        // Undecorate: extract out the original list elements.\n        for (var j = 0; j < decorated.length; j++) {\n          sortedArray[j] = decorated[j][1];\n        }\n        return sortedArray;\n    },\n\n    _functionMaxBy: function(resolvedArgs) {\n      var exprefNode = resolvedArgs[1];\n      var resolvedArray = resolvedArgs[0];\n      var keyFunction = this.createKeyFunction(exprefNode, [TYPE_NUMBER, TYPE_STRING]);\n      var maxNumber = -Infinity;\n      var maxRecord;\n      var current;\n      for (var i = 0; i < resolvedArray.length; i++) {\n        current = keyFunction(resolvedArray[i]);\n        if (current > maxNumber) {\n          maxNumber = current;\n          maxRecord = resolvedArray[i];\n        }\n      }\n      return maxRecord;\n    },\n\n    _functionMinBy: function(resolvedArgs) {\n      var exprefNode = resolvedArgs[1];\n      var resolvedArray = resolvedArgs[0];\n      var keyFunction = this.createKeyFunction(exprefNode, [TYPE_NUMBER, TYPE_STRING]);\n      var minNumber = Infinity;\n      var minRecord;\n      var current;\n      for (var i = 0; i < resolvedArray.length; i++) {\n        current = keyFunction(resolvedArray[i]);\n        if (current < minNumber) {\n          minNumber = current;\n          minRecord = resolvedArray[i];\n        }\n      }\n      return minRecord;\n    },\n\n    createKeyFunction: function(exprefNode, allowedTypes) {\n      var that = this;\n      var interpreter = this._interpreter;\n      var keyFunc = function(x) {\n        var current = interpreter.visit(exprefNode, x);\n        if (allowedTypes.indexOf(that._getTypeName(current)) < 0) {\n          var msg = \"TypeError: expected one of \" + allowedTypes +\n                    \", received \" + that._getTypeName(current);\n          throw new Error(msg);\n        }\n        return current;\n      };\n      return keyFunc;\n    }\n\n  };\n\n  function compile(stream) {\n    var parser = new Parser();\n    var ast = parser.parse(stream);\n    return ast;\n  }\n\n  function tokenize(stream) {\n      var lexer = new Lexer();\n      return lexer.tokenize(stream);\n  }\n\n  function search(data, expression) {\n      var parser = new Parser();\n      // This needs to be improved.  Both the interpreter and runtime depend on\n      // each other.  The runtime needs the interpreter to support exprefs.\n      // There's likely a clean way to avoid the cyclic dependency.\n      var runtime = new Runtime();\n      var interpreter = new TreeInterpreter(runtime);\n      runtime._interpreter = interpreter;\n      var node = parser.parse(expression);\n      return interpreter.search(node, data);\n  }\n\n  exports.tokenize = tokenize;\n  exports.compile = compile;\n  exports.search = search;\n  exports.strictDeepEqual = strictDeepEqual;\n})( false ? 0 : exports);\n\n\n/***/ }),\n\n/***/ 4316:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar traverse = module.exports = function (schema, opts, cb) {\n  // Legacy support for v0.3.1 and earlier.\n  if (typeof opts == 'function') {\n    cb = opts;\n    opts = {};\n  }\n\n  cb = opts.cb || cb;\n  var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n  var post = cb.post || function() {};\n\n  _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n  additionalItems: true,\n  items: true,\n  contains: true,\n  additionalProperties: true,\n  propertyNames: true,\n  not: true\n};\n\ntraverse.arrayKeywords = {\n  items: true,\n  allOf: true,\n  anyOf: true,\n  oneOf: true\n};\n\ntraverse.propsKeywords = {\n  definitions: true,\n  properties: true,\n  patternProperties: true,\n  dependencies: true\n};\n\ntraverse.skipKeywords = {\n  default: true,\n  enum: true,\n  const: true,\n  required: true,\n  maximum: true,\n  minimum: true,\n  exclusiveMaximum: true,\n  exclusiveMinimum: true,\n  multipleOf: true,\n  maxLength: true,\n  minLength: true,\n  pattern: true,\n  format: true,\n  maxItems: true,\n  minItems: true,\n  uniqueItems: true,\n  maxProperties: true,\n  minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n    pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n    for (var key in schema) {\n      var sch = schema[key];\n      if (Array.isArray(sch)) {\n        if (key in traverse.arrayKeywords) {\n          for (var i=0; i<sch.length; i++)\n            _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n        }\n      } else if (key in traverse.propsKeywords) {\n        if (sch && typeof sch == 'object') {\n          for (var prop in sch)\n            _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n        }\n      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n        _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n      }\n    }\n    post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n  }\n}\n\n\nfunction escapeJsonPtr(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\n\n/***/ }),\n\n/***/ 3094:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\nvar escapedChars = {\n  'b': '\\b',\n  'f': '\\f',\n  'n': '\\n',\n  'r': '\\r',\n  't': '\\t',\n  '\"': '\"',\n  '/': '/',\n  '\\\\': '\\\\'\n};\n\nvar A_CODE = 'a'.charCodeAt();\n\n\nexports.parse = function (source, _, options) {\n  var pointers = {};\n  var line = 0;\n  var column = 0;\n  var pos = 0;\n  var bigint = options && options.bigint && typeof BigInt != 'undefined';\n  return {\n    data: _parse('', true),\n    pointers: pointers\n  };\n\n  function _parse(ptr, topLevel) {\n    whitespace();\n    var data;\n    map(ptr, 'value');\n    var char = getChar();\n    switch (char) {\n      case 't': read('rue'); data = true; break;\n      case 'f': read('alse'); data = false; break;\n      case 'n': read('ull'); data = null; break;\n      case '\"': data = parseString(); break;\n      case '[': data = parseArray(ptr); break;\n      case '{': data = parseObject(ptr); break;\n      default:\n        backChar();\n        if ('-0123456789'.indexOf(char) >= 0)\n          data = parseNumber();\n        else\n          unexpectedToken();\n    }\n    map(ptr, 'valueEnd');\n    whitespace();\n    if (topLevel && pos < source.length) unexpectedToken();\n    return data;\n  }\n\n  function whitespace() {\n    loop:\n      while (pos < source.length) {\n        switch (source[pos]) {\n          case ' ': column++; break;\n          case '\\t': column += 4; break;\n          case '\\r': column = 0; break;\n          case '\\n': column = 0; line++; break;\n          default: break loop;\n        }\n        pos++;\n      }\n  }\n\n  function parseString() {\n    var str = '';\n    var char;\n    while (true) {\n      char = getChar();\n      if (char == '\"') {\n        break;\n      } else if (char == '\\\\') {\n        char = getChar();\n        if (char in escapedChars)\n          str += escapedChars[char];\n        else if (char == 'u')\n          str += getCharCode();\n        else\n          wasUnexpectedToken();\n      } else {\n        str += char;\n      }\n    }\n    return str;\n  }\n\n  function parseNumber() {\n    var numStr = '';\n    var integer = true;\n    if (source[pos] == '-') numStr += getChar();\n\n    numStr += source[pos] == '0'\n              ? getChar()\n              : getDigits();\n\n    if (source[pos] == '.') {\n      numStr += getChar() + getDigits();\n      integer = false;\n    }\n\n    if (source[pos] == 'e' || source[pos] == 'E') {\n      numStr += getChar();\n      if (source[pos] == '+' || source[pos] == '-') numStr += getChar();\n      numStr += getDigits();\n      integer = false;\n    }\n\n    var result = +numStr;\n    return bigint && integer && (result > Number.MAX_SAFE_INTEGER || result < Number.MIN_SAFE_INTEGER)\n            ? BigInt(numStr)\n            : result;\n  }\n\n  function parseArray(ptr) {\n    whitespace();\n    var arr = [];\n    var i = 0;\n    if (getChar() == ']') return arr;\n    backChar();\n\n    while (true) {\n      var itemPtr = ptr + '/' + i;\n      arr.push(_parse(itemPtr));\n      whitespace();\n      var char = getChar();\n      if (char == ']') break;\n      if (char != ',') wasUnexpectedToken();\n      whitespace();\n      i++;\n    }\n    return arr;\n  }\n\n  function parseObject(ptr) {\n    whitespace();\n    var obj = {};\n    if (getChar() == '}') return obj;\n    backChar();\n\n    while (true) {\n      var loc = getLoc();\n      if (getChar() != '\"') wasUnexpectedToken();\n      var key = parseString();\n      var propPtr = ptr + '/' + escapeJsonPointer(key);\n      mapLoc(propPtr, 'key', loc);\n      map(propPtr, 'keyEnd');\n      whitespace();\n      if (getChar() != ':') wasUnexpectedToken();\n      whitespace();\n      obj[key] = _parse(propPtr);\n      whitespace();\n      var char = getChar();\n      if (char == '}') break;\n      if (char != ',') wasUnexpectedToken();\n      whitespace();\n    }\n    return obj;\n  }\n\n  function read(str) {\n    for (var i=0; i<str.length; i++)\n      if (getChar() !== str[i]) wasUnexpectedToken();\n  }\n\n  function getChar() {\n    checkUnexpectedEnd();\n    var char = source[pos];\n    pos++;\n    column++; // new line?\n    return char;\n  }\n\n  function backChar() {\n    pos--;\n    column--;\n  }\n\n  function getCharCode() {\n    var count = 4;\n    var code = 0;\n    while (count--) {\n      code <<= 4;\n      var char = getChar().toLowerCase();\n      if (char >= 'a' && char <= 'f')\n        code += char.charCodeAt() - A_CODE + 10;\n      else if (char >= '0' && char <= '9')\n        code += +char;\n      else\n        wasUnexpectedToken();\n    }\n    return String.fromCharCode(code);\n  }\n\n  function getDigits() {\n    var digits = '';\n    while (source[pos] >= '0' && source[pos] <= '9')\n      digits += getChar();\n\n    if (digits.length) return digits;\n    checkUnexpectedEnd();\n    unexpectedToken();\n  }\n\n  function map(ptr, prop) {\n    mapLoc(ptr, prop, getLoc());\n  }\n\n  function mapLoc(ptr, prop, loc) {\n    pointers[ptr] = pointers[ptr] || {};\n    pointers[ptr][prop] = loc;\n  }\n\n  function getLoc() {\n    return {\n      line: line,\n      column: column,\n      pos: pos\n    };\n  }\n\n  function unexpectedToken() {\n    throw new SyntaxError('Unexpected token ' + source[pos] + ' in JSON at position ' + pos);\n  }\n\n  function wasUnexpectedToken() {\n    backChar();\n    unexpectedToken();\n  }\n\n  function checkUnexpectedEnd() {\n    if (pos >= source.length)\n      throw new SyntaxError('Unexpected end of JSON input');\n  }\n};\n\n\nexports.stringify = function (data, _, options) {\n  if (!validType(data)) return;\n  var wsLine = 0;\n  var wsPos, wsColumn;\n  var whitespace = typeof options == 'object'\n                    ? options.space\n                    : options;\n  switch (typeof whitespace) {\n    case 'number':\n      var len = whitespace > 10\n                  ? 10\n                  : whitespace < 0\n                    ? 0\n                    : Math.floor(whitespace);\n      whitespace = len && repeat(len, ' ');\n      wsPos = len;\n      wsColumn = len;\n      break;\n    case 'string':\n      whitespace = whitespace.slice(0, 10);\n      wsPos = 0;\n      wsColumn = 0;\n      for (var j=0; j<whitespace.length; j++) {\n        var char = whitespace[j];\n        switch (char) {\n          case ' ': wsColumn++; break;\n          case '\\t': wsColumn += 4; break;\n          case '\\r': wsColumn = 0; break;\n          case '\\n': wsColumn = 0; wsLine++; break;\n          default: throw new Error('whitespace characters not allowed in JSON');\n        }\n        wsPos++;\n      }\n      break;\n    default:\n      whitespace = undefined;\n  }\n\n  var json = '';\n  var pointers = {};\n  var line = 0;\n  var column = 0;\n  var pos = 0;\n  var es6 = options && options.es6 && typeof Map == 'function';\n  _stringify(data, 0, '');\n  return {\n    json: json,\n    pointers: pointers\n  };\n\n  function _stringify(_data, lvl, ptr) {\n    map(ptr, 'value');\n    switch (typeof _data) {\n      case 'number':\n      case 'bigint':\n      case 'boolean':\n        out('' + _data); break;\n      case 'string':\n        out(quoted(_data)); break;\n      case 'object':\n        if (_data === null) {\n          out('null');\n        } else if (typeof _data.toJSON == 'function') {\n          out(quoted(_data.toJSON()));\n        } else if (Array.isArray(_data)) {\n          stringifyArray();\n        } else if (es6) {\n          if (_data.constructor.BYTES_PER_ELEMENT)\n            stringifyArray();\n          else if (_data instanceof Map)\n            stringifyMapSet();\n          else if (_data instanceof Set)\n            stringifyMapSet(true);\n          else\n            stringifyObject();\n        } else {\n          stringifyObject();\n        }\n    }\n    map(ptr, 'valueEnd');\n\n    function stringifyArray() {\n      if (_data.length) {\n        out('[');\n        var itemLvl = lvl + 1;\n        for (var i=0; i<_data.length; i++) {\n          if (i) out(',');\n          indent(itemLvl);\n          var item = validType(_data[i]) ? _data[i] : null;\n          var itemPtr = ptr + '/' + i;\n          _stringify(item, itemLvl, itemPtr);\n        }\n        indent(lvl);\n        out(']');\n      } else {\n        out('[]');\n      }\n    }\n\n    function stringifyObject() {\n      var keys = Object.keys(_data);\n      if (keys.length) {\n        out('{');\n        var propLvl = lvl + 1;\n        for (var i=0; i<keys.length; i++) {\n          var key = keys[i];\n          var value = _data[key];\n          if (validType(value)) {\n            if (i) out(',');\n            var propPtr = ptr + '/' + escapeJsonPointer(key);\n            indent(propLvl);\n            map(propPtr, 'key');\n            out(quoted(key));\n            map(propPtr, 'keyEnd');\n            out(':');\n            if (whitespace) out(' ');\n            _stringify(value, propLvl, propPtr);\n          }\n        }\n        indent(lvl);\n        out('}');\n      } else {\n        out('{}');\n      }\n    }\n\n    function stringifyMapSet(isSet) {\n      if (_data.size) {\n        out('{');\n        var propLvl = lvl + 1;\n        var first = true;\n        var entries = _data.entries();\n        var entry = entries.next();\n        while (!entry.done) {\n          var item = entry.value;\n          var key = item[0];\n          var value = isSet ? true : item[1];\n          if (validType(value)) {\n            if (!first) out(',');\n            first = false;\n            var propPtr = ptr + '/' + escapeJsonPointer(key);\n            indent(propLvl);\n            map(propPtr, 'key');\n            out(quoted(key));\n            map(propPtr, 'keyEnd');\n            out(':');\n            if (whitespace) out(' ');\n            _stringify(value, propLvl, propPtr);\n          }\n          entry = entries.next();\n        }\n        indent(lvl);\n        out('}');\n      } else {\n        out('{}');\n      }\n    }\n  }\n\n  function out(str) {\n    column += str.length;\n    pos += str.length;\n    json += str;\n  }\n\n  function indent(lvl) {\n    if (whitespace) {\n      json += '\\n' + repeat(lvl, whitespace);\n      line++;\n      column = 0;\n      while (lvl--) {\n        if (wsLine) {\n          line += wsLine;\n          column = wsColumn;\n        } else {\n          column += wsColumn;\n        }\n        pos += wsPos;\n      }\n      pos += 1; // \\n character\n    }\n  }\n\n  function map(ptr, prop) {\n    pointers[ptr] = pointers[ptr] || {};\n    pointers[ptr][prop] = {\n      line: line,\n      column: column,\n      pos: pos\n    };\n  }\n\n  function repeat(n, str) {\n    return Array(n + 1).join(str);\n  }\n};\n\n\nvar VALID_TYPES = ['number', 'bigint', 'boolean', 'string', 'object'];\nfunction validType(data) {\n  return VALID_TYPES.indexOf(typeof data) >= 0;\n}\n\n\nvar ESC_QUOTE = /\"|\\\\/g;\nvar ESC_B = /[\\b]/g;\nvar ESC_F = /\\f/g;\nvar ESC_N = /\\n/g;\nvar ESC_R = /\\r/g;\nvar ESC_T = /\\t/g;\nfunction quoted(str) {\n  str = str.replace(ESC_QUOTE, '\\\\$&')\n           .replace(ESC_F, '\\\\f')\n           .replace(ESC_B, '\\\\b')\n           .replace(ESC_N, '\\\\n')\n           .replace(ESC_R, '\\\\r')\n           .replace(ESC_T, '\\\\t');\n  return '\"' + str + '\"';\n}\n\n\nvar ESC_0 = /~/g;\nvar ESC_1 = /\\//g;\nfunction escapeJsonPointer(str) {\n  return str.replace(ESC_0, '~0')\n            .replace(ESC_1, '~1');\n}\n\n\n/***/ }),\n\n/***/ 8340:\n/***/ (function(module, exports) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n(function (root, factory) {\n    \"use strict\";\n\n    if (true) {\n        !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n    }\n    else // removed by dead control flow\n{}\n}(this, function () {\n\n    /**\n     * A self-contained modal library\n     */\n    \"use strict\";\n\n    /** Returns whether a value is a dom node */\n    function isNode(value) {\n        if ( typeof Node === \"object\" ) {\n            return value instanceof Node;\n        }\n        else {\n            return value && typeof value === \"object\" && typeof value.nodeType === \"number\";\n        }\n    }\n\n    /** Returns whether a value is a string */\n    function isString(value) {\n        return typeof value === \"string\";\n    }\n\n    /**\n     * Generates observable objects that can be watched and triggered\n     */\n    function observable() {\n        var callbacks = [];\n        return {\n            watch: callbacks.push.bind(callbacks),\n            trigger: function(context, detail) {\n\n                var unprevented = true;\n                var event = {\n                    detail: detail,\n                    preventDefault: function preventDefault () {\n                        unprevented = false;\n                    }\n                };\n\n                for (var i = 0; i < callbacks.length; i++) {\n                    callbacks[i](context, event);\n                }\n\n                return unprevented;\n            }\n        };\n    }\n\n\n    /** Whether an element is hidden */\n    function isHidden ( elem ) {\n        // @see http://stackoverflow.com/questions/19669786\n        return window.getComputedStyle(elem).display === 'none';\n    }\n\n\n    /**\n     * A small interface for creating and managing a dom element\n     */\n    function Elem( elem ) {\n        this.elem = elem;\n    }\n\n    /** Creates a new div */\n    Elem.make = function ( parent, tag ) {\n        if ( typeof parent === \"string\" ) {\n            parent = document.querySelector(parent);\n        }\n        var elem = document.createElement(tag || 'div');\n        (parent || document.body).appendChild(elem);\n        return new Elem(elem);\n    };\n\n    Elem.prototype = {\n\n        /** Creates a child of this node */\n        child: function (tag) {\n            return Elem.make(this.elem, tag);\n        },\n\n        /** Applies a set of styles to an element */\n        stylize: function(styles) {\n            styles = styles || {};\n\n            if ( typeof styles.opacity !== \"undefined\" ) {\n                styles.filter = \"alpha(opacity=\" + (styles.opacity * 100) + \")\";\n            }\n\n            for (var prop in styles) {\n                if (styles.hasOwnProperty(prop)) {\n                    this.elem.style[prop] = styles[prop];\n                }\n            }\n\n            return this;\n        },\n\n        /** Adds a class name */\n        clazz: function (clazz) {\n            this.elem.className += \" \" + clazz;\n            return this;\n        },\n\n        /** Sets the HTML */\n        html: function (content) {\n            if ( isNode(content) ) {\n                this.elem.appendChild( content );\n            }\n            else {\n                this.elem.innerHTML = content;\n            }\n            return this;\n        },\n\n        /** Adds a click handler to this element */\n        onClick: function(callback) {\n            this.elem.addEventListener('click', callback);\n            return this;\n        },\n\n        /** Removes this element from the DOM */\n        destroy: function() {\n            this.elem.parentNode.removeChild(this.elem);\n        },\n\n        /** Hides this element */\n        hide: function() {\n            this.elem.style.display = \"none\";\n        },\n\n        /** Shows this element */\n        show: function() {\n            this.elem.style.display = \"block\";\n        },\n\n        /** Sets an attribute on this element */\n        attr: function ( name, value ) {\n            if (value !== undefined) {\n                this.elem.setAttribute(name, value);\n            }\n            return this;\n        },\n\n        /** Executes a callback on all the ancestors of an element */\n        anyAncestor: function ( predicate ) {\n            var elem = this.elem;\n            while ( elem ) {\n                if ( predicate( new Elem(elem) ) ) {\n                    return true;\n                }\n                else {\n                    elem = elem.parentNode;\n                }\n            }\n            return false;\n        },\n\n        /** Whether this element is visible */\n        isVisible: function () {\n            return !isHidden(this.elem);\n        }\n    };\n\n\n    /** Generates the grey-out effect */\n    function buildOverlay( getOption, close ) {\n        return Elem.make( getOption(\"parent\") )\n            .clazz(\"pico-overlay\")\n            .clazz( getOption(\"overlayClass\", \"\") )\n            .stylize({\n                display: \"none\",\n                position: \"fixed\",\n                top: \"0px\",\n                left: \"0px\",\n                height: \"100%\",\n                width: \"100%\",\n                zIndex: 10000\n            })\n            .stylize(getOption('overlayStyles', {\n                opacity: 0.5,\n                background: \"#000\"\n            }))\n            .onClick(function () {\n                if ( getOption('overlayClose', true) ) {\n                    close();\n                }\n            });\n    }\n\n    // An auto incrementing ID assigned to each modal\n    var autoinc = 1;\n\n    /** Builds the content of a modal */\n    function buildModal( getOption, close ) {\n        var width = getOption('width', 'auto');\n        if ( typeof width === \"number\" ) {\n            width = \"\" + width + \"px\";\n        }\n\n        var id = getOption(\"modalId\", \"pico-\" + autoinc++);\n\n        var elem = Elem.make( getOption(\"parent\") )\n            .clazz(\"pico-content\")\n            .clazz( getOption(\"modalClass\", \"\") )\n            .stylize({\n                display: 'none',\n                position: 'fixed',\n                zIndex: 10001,\n                left: \"50%\",\n                top: \"38.1966%\",\n                maxHeight: '90%',\n                boxSizing: 'border-box',\n                width: width,\n                '-ms-transform': 'translate(-50%,-38.1966%)',\n                '-moz-transform': 'translate(-50%,-38.1966%)',\n                '-webkit-transform': 'translate(-50%,-38.1966%)',\n                '-o-transform': 'translate(-50%,-38.1966%)',\n                transform: 'translate(-50%,-38.1966%)'\n            })\n            .stylize(getOption('modalStyles', {\n                overflow: 'auto',\n                backgroundColor: \"white\",\n                padding: \"20px\",\n                borderRadius: \"5px\"\n            }))\n            .html( getOption('content') )\n            .attr(\"id\", id)\n            .attr(\"role\", \"dialog\")\n            .attr(\"aria-labelledby\", getOption(\"ariaLabelledBy\"))\n            .attr(\"aria-describedby\", getOption(\"ariaDescribedBy\", id))\n            .onClick(function (event) {\n                var isCloseClick = new Elem(event.target).anyAncestor(function (elem) {\n                    return /\\bpico-close\\b/.test(elem.elem.className);\n                });\n                if ( isCloseClick ) {\n                    close();\n                }\n            });\n\n        return elem;\n    }\n\n    /** Builds the close button */\n    function buildClose ( elem, getOption ) {\n        if ( getOption('closeButton', true) ) {\n            return elem.child('button')\n                .html( getOption('closeHtml', \"&#xD7;\") )\n                .clazz(\"pico-close\")\n                .clazz( getOption(\"closeClass\", \"\") )\n                .stylize( getOption('closeStyles', {\n                    borderRadius: \"2px\",\n                    border: 0,\n                    padding: 0,\n                    cursor: \"pointer\",\n                    height: \"15px\",\n                    width: \"15px\",\n                    position: \"absolute\",\n                    top: \"5px\",\n                    right: \"5px\",\n                    fontSize: \"16px\",\n                    textAlign: \"center\",\n                    lineHeight: \"15px\",\n                    background: \"#CCC\"\n                }) )\n                .attr(\"aria-label\", getOption(\"close-label\", \"Close\"));\n        }\n    }\n\n    /** Builds a method that calls a method and returns an element */\n    function buildElemAccessor( builder ) {\n        return function () {\n            return builder().elem;\n        };\n    }\n\n\n    // An observable that is triggered whenever the escape key is pressed\n    var escapeKey = observable();\n\n    // An observable that is triggered when the user hits the tab key\n    var tabKey = observable();\n\n    /** A global event handler to detect the escape key being pressed */\n    document.documentElement.addEventListener('keydown', function onKeyPress (event) {\n        var keycode = event.which || event.keyCode;\n\n        // If this is the escape key\n        if ( keycode === 27 ) {\n            escapeKey.trigger();\n        }\n\n        // If this is the tab key\n        else if ( keycode === 9 ) {\n            tabKey.trigger(event);\n        }\n    });\n\n\n    /** Attaches focus management events */\n    function manageFocus ( iface, isEnabled ) {\n\n        /** Whether an element matches a selector */\n        function matches ( elem, selector ) {\n            var fn = elem.msMatchesSelector || elem.webkitMatchesSelector || elem.matches;\n            return fn.call(elem, selector);\n        }\n\n        /**\n         * Returns whether an element is focusable\n         * @see http://stackoverflow.com/questions/18261595\n         */\n        function canFocus( elem ) {\n            if (\n                isHidden(elem) ||\n                matches(elem, \":disabled\") ||\n                elem.hasAttribute(\"contenteditable\")\n            ) {\n                return false;\n            }\n            else {\n                return elem.hasAttribute(\"tabindex\") ||\n                    matches(elem, \"input,select,textarea,button,a[href],area[href],iframe\");\n            }\n        }\n\n        /** Returns the first descendant that can be focused */\n        function firstFocusable ( elem ) {\n            var items = elem.getElementsByTagName(\"*\");\n            for (var i = 0; i < items.length; i++) {\n                if ( canFocus(items[i]) ) {\n                    return items[i];\n                }\n            }\n        }\n\n        /** Returns the last descendant that can be focused */\n        function lastFocusable ( elem ) {\n            var items = elem.getElementsByTagName(\"*\");\n            for (var i = items.length; i--;) {\n                if ( canFocus(items[i]) ) {\n                    return items[i];\n                }\n            }\n        }\n\n        // The element focused before the modal opens\n        var focused;\n\n        // Records the currently focused element so state can be returned\n        // after the modal closes\n        iface.beforeShow(function getActiveFocus() {\n            focused = document.activeElement;\n        });\n\n        // Shift focus into the modal\n        iface.afterShow(function focusModal() {\n            if ( isEnabled() ) {\n                var focusable = firstFocusable(iface.modalElem());\n                if ( focusable ) {\n                    focusable.focus();\n                }\n            }\n        });\n\n        // Restore the previously focused element when the modal closes\n        iface.afterClose(function returnFocus() {\n            if ( isEnabled() && focused ) {\n                focused.focus();\n            }\n            focused = null;\n        });\n\n        // Capture tab key presses and loop them within the modal\n        tabKey.watch(function tabKeyPress (event) {\n            if ( isEnabled() && iface.isVisible() ) {\n                var first = firstFocusable(iface.modalElem());\n                var last = lastFocusable(iface.modalElem());\n\n                var from = event.shiftKey ? first : last;\n                if ( from === document.activeElement ) {\n                    (event.shiftKey ? last : first).focus();\n                    event.preventDefault();\n                }\n            }\n        });\n    }\n\n    /** Manages setting the 'overflow: hidden' on the body tag */\n    function manageBodyOverflow(iface, isEnabled) {\n        var origOverflow;\n        var body = new Elem(document.body);\n\n        iface.beforeShow(function () {\n            // Capture the current values so they can be restored\n            origOverflow = body.elem.style.overflow;\n\n            if (isEnabled()) {\n                body.stylize({ overflow: \"hidden\" });\n            }\n        });\n\n        iface.afterClose(function () {\n            body.stylize({ overflow: origOverflow });\n        });\n    }\n\n    /**\n     * Displays a modal\n     */\n    return function picoModal(options) {\n\n        if ( isString(options) || isNode(options) ) {\n            options = { content: options };\n        }\n\n        var afterCreateEvent = observable();\n        var beforeShowEvent = observable();\n        var afterShowEvent = observable();\n        var beforeCloseEvent = observable();\n        var afterCloseEvent = observable();\n\n        /**\n         * Returns a named option if it has been explicitly defined. Otherwise,\n         * it returns the given default value\n         */\n        function getOption ( opt, defaultValue ) {\n            var value = options[opt];\n            if ( typeof value === \"function\" ) {\n                value = value( defaultValue );\n            }\n            return value === undefined ? defaultValue : value;\n        }\n\n\n        // The various DOM elements that constitute the modal\n        var modalElem = build.bind(window, 'modal');\n        var shadowElem = build.bind(window, 'overlay');\n        var closeElem = build.bind(window, 'close');\n\n        // This will eventually contain the modal API returned to the user\n        var iface;\n\n\n        /** Hides this modal */\n        function forceClose (detail) {\n            shadowElem().hide();\n            modalElem().hide();\n            afterCloseEvent.trigger(iface, detail);\n        }\n\n        /** Gracefully hides this modal */\n        function close (detail) {\n            if ( beforeCloseEvent.trigger(iface, detail) ) {\n                forceClose(detail);\n            }\n        }\n\n        /** Wraps a method so it returns the modal interface */\n        function returnIface ( callback ) {\n            return function () {\n                callback.apply(this, arguments);\n                return iface;\n            };\n        }\n\n\n        // The constructed dom nodes\n        var built;\n\n        /** Builds a method that calls a method and returns an element */\n        function build (name, detail) {\n            if ( !built ) {\n                var modal = buildModal(getOption, close);\n                built = {\n                    modal: modal,\n                    overlay: buildOverlay(getOption, close),\n                    close: buildClose(modal, getOption)\n                };\n                afterCreateEvent.trigger(iface, detail);\n            }\n            return built[name];\n        }\n\n        iface = {\n\n            /** Returns the wrapping modal element */\n            modalElem: buildElemAccessor(modalElem),\n\n            /** Returns the close button element */\n            closeElem: buildElemAccessor(closeElem),\n\n            /** Returns the overlay element */\n            overlayElem: buildElemAccessor(shadowElem),\n\n            /** Builds the dom without showing the modal */\n            buildDom: returnIface(build.bind(null, null)),\n\n            /** Returns whether this modal is currently being shown */\n            isVisible: function () {\n                return !!(built && modalElem && modalElem().isVisible());\n            },\n\n            /** Shows this modal */\n            show: function (detail) {\n                if ( beforeShowEvent.trigger(iface, detail) ) {\n                    shadowElem().show();\n                    closeElem();\n                    modalElem().show();\n                    afterShowEvent.trigger(iface, detail);\n                }\n                return this;\n            },\n\n            /** Hides this modal */\n            close: returnIface(close),\n\n            /**\n             * Force closes this modal. This will not call beforeClose\n             * events and will just immediately hide the modal\n             */\n            forceClose: returnIface(forceClose),\n\n            /** Destroys this modal */\n            destroy: function () {\n                modalElem().destroy();\n                shadowElem().destroy();\n                shadowElem = modalElem = closeElem = undefined;\n            },\n\n            /**\n             * Updates the options for this modal. This will only let you\n             * change options that are re-evaluted regularly, such as\n             * `overlayClose`.\n             */\n            options: function ( opts ) {\n                Object.keys(opts).map(function (key) {\n                    options[key] = opts[key];\n                });\n            },\n\n            /** Executes after the DOM nodes are created */\n            afterCreate: returnIface(afterCreateEvent.watch),\n\n            /** Executes a callback before this modal is closed */\n            beforeShow: returnIface(beforeShowEvent.watch),\n\n            /** Executes a callback after this modal is shown */\n            afterShow: returnIface(afterShowEvent.watch),\n\n            /** Executes a callback before this modal is closed */\n            beforeClose: returnIface(beforeCloseEvent.watch),\n\n            /** Executes a callback after this modal is closed */\n            afterClose: returnIface(afterCloseEvent.watch)\n        };\n\n        manageFocus(iface, getOption.bind(null, \"focus\", true));\n\n        manageBodyOverflow(iface, getOption.bind(null, \"bodyOverflow\", true));\n\n        // If a user presses the 'escape' key, close the modal.\n        escapeKey.watch(function escapeKeyPress () {\n            if ( getOption(\"escCloses\", true) && iface.isVisible() ) {\n                iface.close();\n            }\n        });\n\n        return iface;\n    };\n\n}));\n\n\n/***/ }),\n\n/***/ 6777:\n/***/ (function(__unused_webpack_module, exports) {\n\n/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */\n(function (global, factory) {\n\t true ? factory(exports) :\n\t0;\n}(this, (function (exports) { 'use strict';\n\nfunction merge() {\n    for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) {\n        sets[_key] = arguments[_key];\n    }\n\n    if (sets.length > 1) {\n        sets[0] = sets[0].slice(0, -1);\n        var xl = sets.length - 1;\n        for (var x = 1; x < xl; ++x) {\n            sets[x] = sets[x].slice(1, -1);\n        }\n        sets[xl] = sets[xl].slice(1);\n        return sets.join('');\n    } else {\n        return sets[0];\n    }\n}\nfunction subexp(str) {\n    return \"(?:\" + str + \")\";\n}\nfunction typeOf(o) {\n    return o === undefined ? \"undefined\" : o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase();\n}\nfunction toUpperCase(str) {\n    return str.toUpperCase();\n}\nfunction toArray(obj) {\n    return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : [];\n}\nfunction assign(target, source) {\n    var obj = target;\n    if (source) {\n        for (var key in source) {\n            obj[key] = source[key];\n        }\n    }\n    return obj;\n}\n\nfunction buildExps(isIRI) {\n    var ALPHA$$ = \"[A-Za-z]\",\n        CR$ = \"[\\\\x0D]\",\n        DIGIT$$ = \"[0-9]\",\n        DQUOTE$$ = \"[\\\\x22]\",\n        HEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"),\n        //case-insensitive\n    LF$$ = \"[\\\\x0A]\",\n        SP$$ = \"[\\\\x20]\",\n        PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)),\n        //expanded\n    GEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n        SUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n        RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n        UCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\",\n        //subset, excludes bidi control characters\n    IPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\",\n        //subset\n    UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n        SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n        USERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n        DEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n        DEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$),\n        //relaxed parsing rules\n    IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n        H16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n        LS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n        IPV6ADDRESS1$ = subexp(subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$),\n        //                           6( h16 \":\" ) ls32\n    IPV6ADDRESS2$ = subexp(\"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$),\n        //                      \"::\" 5( h16 \":\" ) ls32\n    IPV6ADDRESS3$ = subexp(subexp(H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$),\n        //[               h16 ] \"::\" 4( h16 \":\" ) ls32\n    IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$),\n        //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n    IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$),\n        //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n    IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$),\n        //[ *3( h16 \":\" ) h16 ] \"::\"    h16 \":\"   ls32\n    IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$),\n        //[ *4( h16 \":\" ) h16 ] \"::\"              ls32\n    IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$),\n        //[ *5( h16 \":\" ) h16 ] \"::\"              h16\n    IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\"),\n        //[ *6( h16 \":\" ) h16 ] \"::\"\n    IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n        ZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"),\n        //RFC 6874\n    IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$),\n        //RFC 6874\n    IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$),\n        //RFC 6874, with relaxed parsing rules\n    IPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n        IP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"),\n        //RFC 6874\n    REG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n        HOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n        PORT$ = subexp(DIGIT$$ + \"*\"),\n        AUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n        PCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n        SEGMENT$ = subexp(PCHAR$ + \"*\"),\n        SEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n        SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n        PATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n        PATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"),\n        //simplified\n    PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$),\n        //simplified\n    PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$),\n        //simplified\n    PATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n        PATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n        QUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n        FRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n        HIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n        URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n        RELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n        RELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n        URI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n        ABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n        GENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n        RELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n        ABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n        SAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n        AUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\";\n    return {\n        NOT_SCHEME: new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n        NOT_USERINFO: new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n        NOT_HOST: new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n        NOT_PATH: new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n        NOT_PATH_NOSCHEME: new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n        NOT_QUERY: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n        NOT_FRAGMENT: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n        ESCAPE: new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n        UNRESERVED: new RegExp(UNRESERVED$$, \"g\"),\n        OTHER_CHARS: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n        PCT_ENCODED: new RegExp(PCT_ENCODED$, \"g\"),\n        IPV4ADDRESS: new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n        IPV6ADDRESS: new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n    };\n}\nvar URI_PROTOCOL = buildExps(false);\n\nvar IRI_PROTOCOL = buildExps(true);\n\nvar slicedToArray = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if (Symbol.iterator in Object(arr)) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  } else {\n    return Array.from(arr);\n  }\n};\n\n/** Highest positive signed 32-bit float value */\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nvar regexPunycode = /^xn--/;\nvar regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nvar regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nvar errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error$1(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tvar result = [];\n\tvar length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tvar parts = string.split('@');\n\tvar result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tvar labels = string.split('.');\n\tvar encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t// Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nvar ucs2encode = function ucs2encode(array) {\n\treturn String.fromCodePoint.apply(String, toConsumableArray(array));\n};\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nvar basicToDigit = function basicToDigit(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nvar digitToBasic = function digitToBasic(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nvar adapt = function adapt(delta, numPoints, firstTime) {\n\tvar k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nvar decode = function decode(input) {\n\t// Don't use UCS-2.\n\tvar output = [];\n\tvar inputLength = input.length;\n\tvar i = 0;\n\tvar n = initialN;\n\tvar bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tvar basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (var j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror$1('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tvar oldi = i;\n\t\tfor (var w = 1, k = base;; /* no condition */k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror$1('invalid-input');\n\t\t\t}\n\n\t\t\tvar digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror$1('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tvar t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror$1('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\t\t}\n\n\t\tvar out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror$1('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\t}\n\n\treturn String.fromCodePoint.apply(String, output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nvar encode = function encode(input) {\n\tvar output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tvar inputLength = input.length;\n\n\t// Initialize the state.\n\tvar n = initialN;\n\tvar delta = 0;\n\tvar bias = initialBias;\n\n\t// Handle the basic code points.\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _currentValue2 = _step.value;\n\n\t\t\tif (_currentValue2 < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(_currentValue2));\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar basicLength = output.length;\n\tvar handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tvar m = maxInt;\n\t\tvar _iteratorNormalCompletion2 = true;\n\t\tvar _didIteratorError2 = false;\n\t\tvar _iteratorError2 = undefined;\n\n\t\ttry {\n\t\t\tfor (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\t\tvar currentValue = _step2.value;\n\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow.\n\t\t} catch (err) {\n\t\t\t_didIteratorError2 = true;\n\t\t\t_iteratorError2 = err;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t\t_iterator2.return();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (_didIteratorError2) {\n\t\t\t\t\tthrow _iteratorError2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror$1('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tvar _iteratorNormalCompletion3 = true;\n\t\tvar _didIteratorError3 = false;\n\t\tvar _iteratorError3 = undefined;\n\n\t\ttry {\n\t\t\tfor (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n\t\t\t\tvar _currentValue = _step3.value;\n\n\t\t\t\tif (_currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror$1('overflow');\n\t\t\t\t}\n\t\t\t\tif (_currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\t\tvar q = delta;\n\t\t\t\t\tfor (var k = base;; /* no condition */k += base) {\n\t\t\t\t\t\tvar t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar qMinusT = q - t;\n\t\t\t\t\t\tvar baseMinusT = base - t;\n\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t_didIteratorError3 = true;\n\t\t\t_iteratorError3 = err;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!_iteratorNormalCompletion3 && _iterator3.return) {\n\t\t\t\t\t_iterator3.return();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (_didIteratorError3) {\n\t\t\t\t\tthrow _iteratorError3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nvar toUnicode = function toUnicode(input) {\n\treturn mapDomain(input, function (string) {\n\t\treturn regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nvar toASCII = function toASCII(input) {\n\treturn mapDomain(input, function (string) {\n\t\treturn regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nvar punycode = {\n\t/**\n  * A string representing the current Punycode.js version number.\n  * @memberOf punycode\n  * @type String\n  */\n\t'version': '2.1.0',\n\t/**\n  * An object of methods to convert from JavaScript's internal character\n  * representation (UCS-2) to Unicode code points, and back.\n  * @see <https://mathiasbynens.be/notes/javascript-encoding>\n  * @memberOf punycode\n  * @type Object\n  */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\n/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\nvar SCHEMES = {};\nfunction pctEncChar(chr) {\n    var c = chr.charCodeAt(0);\n    var e = void 0;\n    if (c < 16) e = \"%0\" + c.toString(16).toUpperCase();else if (c < 128) e = \"%\" + c.toString(16).toUpperCase();else if (c < 2048) e = \"%\" + (c >> 6 | 192).toString(16).toUpperCase() + \"%\" + (c & 63 | 128).toString(16).toUpperCase();else e = \"%\" + (c >> 12 | 224).toString(16).toUpperCase() + \"%\" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + \"%\" + (c & 63 | 128).toString(16).toUpperCase();\n    return e;\n}\nfunction pctDecChars(str) {\n    var newStr = \"\";\n    var i = 0;\n    var il = str.length;\n    while (i < il) {\n        var c = parseInt(str.substr(i + 1, 2), 16);\n        if (c < 128) {\n            newStr += String.fromCharCode(c);\n            i += 3;\n        } else if (c >= 194 && c < 224) {\n            if (il - i >= 6) {\n                var c2 = parseInt(str.substr(i + 4, 2), 16);\n                newStr += String.fromCharCode((c & 31) << 6 | c2 & 63);\n            } else {\n                newStr += str.substr(i, 6);\n            }\n            i += 6;\n        } else if (c >= 224) {\n            if (il - i >= 9) {\n                var _c = parseInt(str.substr(i + 4, 2), 16);\n                var c3 = parseInt(str.substr(i + 7, 2), 16);\n                newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63);\n            } else {\n                newStr += str.substr(i, 9);\n            }\n            i += 9;\n        } else {\n            newStr += str.substr(i, 3);\n            i += 3;\n        }\n    }\n    return newStr;\n}\nfunction _normalizeComponentEncoding(components, protocol) {\n    function decodeUnreserved(str) {\n        var decStr = pctDecChars(str);\n        return !decStr.match(protocol.UNRESERVED) ? str : decStr;\n    }\n    if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n    if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n    if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n    if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n    if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n    if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n    return components;\n}\n\nfunction _stripLeadingZeros(str) {\n    return str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\nfunction _normalizeIPv4(host, protocol) {\n    var matches = host.match(protocol.IPV4ADDRESS) || [];\n\n    var _matches = slicedToArray(matches, 2),\n        address = _matches[1];\n\n    if (address) {\n        return address.split(\".\").map(_stripLeadingZeros).join(\".\");\n    } else {\n        return host;\n    }\n}\nfunction _normalizeIPv6(host, protocol) {\n    var matches = host.match(protocol.IPV6ADDRESS) || [];\n\n    var _matches2 = slicedToArray(matches, 3),\n        address = _matches2[1],\n        zone = _matches2[2];\n\n    if (address) {\n        var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(),\n            _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2),\n            last = _address$toLowerCase$2[0],\n            first = _address$toLowerCase$2[1];\n\n        var firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n        var lastFields = last.split(\":\").map(_stripLeadingZeros);\n        var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n        var fieldCount = isLastFieldIPv4Address ? 7 : 8;\n        var lastFieldsStart = lastFields.length - fieldCount;\n        var fields = Array(fieldCount);\n        for (var x = 0; x < fieldCount; ++x) {\n            fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n        }\n        if (isLastFieldIPv4Address) {\n            fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n        }\n        var allZeroFields = fields.reduce(function (acc, field, index) {\n            if (!field || field === \"0\") {\n                var lastLongest = acc[acc.length - 1];\n                if (lastLongest && lastLongest.index + lastLongest.length === index) {\n                    lastLongest.length++;\n                } else {\n                    acc.push({ index: index, length: 1 });\n                }\n            }\n            return acc;\n        }, []);\n        var longestZeroFields = allZeroFields.sort(function (a, b) {\n            return b.length - a.length;\n        })[0];\n        var newHost = void 0;\n        if (longestZeroFields && longestZeroFields.length > 1) {\n            var newFirst = fields.slice(0, longestZeroFields.index);\n            var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n            newHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n        } else {\n            newHost = fields.join(\":\");\n        }\n        if (zone) {\n            newHost += \"%\" + zone;\n        }\n        return newHost;\n    } else {\n        return host;\n    }\n}\nvar URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nvar NO_MATCH_IS_UNDEFINED = \"\".match(/(){0}/)[1] === undefined;\nfunction parse(uriString) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var components = {};\n    var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;\n    if (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n    var matches = uriString.match(URI_PARSE);\n    if (matches) {\n        if (NO_MATCH_IS_UNDEFINED) {\n            //store each component\n            components.scheme = matches[1];\n            components.userinfo = matches[3];\n            components.host = matches[4];\n            components.port = parseInt(matches[5], 10);\n            components.path = matches[6] || \"\";\n            components.query = matches[7];\n            components.fragment = matches[8];\n            //fix port number\n            if (isNaN(components.port)) {\n                components.port = matches[5];\n            }\n        } else {\n            //IE FIX for improper RegExp matching\n            //store each component\n            components.scheme = matches[1] || undefined;\n            components.userinfo = uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined;\n            components.host = uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined;\n            components.port = parseInt(matches[5], 10);\n            components.path = matches[6] || \"\";\n            components.query = uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined;\n            components.fragment = uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined;\n            //fix port number\n            if (isNaN(components.port)) {\n                components.port = uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined;\n            }\n        }\n        if (components.host) {\n            //normalize IP hosts\n            components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n        }\n        //determine reference type\n        if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n            components.reference = \"same-document\";\n        } else if (components.scheme === undefined) {\n            components.reference = \"relative\";\n        } else if (components.fragment === undefined) {\n            components.reference = \"absolute\";\n        } else {\n            components.reference = \"uri\";\n        }\n        //check for reference errors\n        if (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n            components.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n        }\n        //find scheme handler\n        var schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n        //check if scheme can't handle IRIs\n        if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n            //if host component is a domain name\n            if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) {\n                //convert Unicode IDN -> ASCII IDN\n                try {\n                    components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n                } catch (e) {\n                    components.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n                }\n            }\n            //convert IRI -> URI\n            _normalizeComponentEncoding(components, URI_PROTOCOL);\n        } else {\n            //normalize encodings\n            _normalizeComponentEncoding(components, protocol);\n        }\n        //perform scheme specific parsing\n        if (schemeHandler && schemeHandler.parse) {\n            schemeHandler.parse(components, options);\n        }\n    } else {\n        components.error = components.error || \"URI can not be parsed.\";\n    }\n    return components;\n}\n\nfunction _recomposeAuthority(components, options) {\n    var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;\n    var uriTokens = [];\n    if (components.userinfo !== undefined) {\n        uriTokens.push(components.userinfo);\n        uriTokens.push(\"@\");\n    }\n    if (components.host !== undefined) {\n        //normalize IP hosts, add brackets and escape zone separator for IPv6\n        uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) {\n            return \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\";\n        }));\n    }\n    if (typeof components.port === \"number\" || typeof components.port === \"string\") {\n        uriTokens.push(\":\");\n        uriTokens.push(String(components.port));\n    }\n    return uriTokens.length ? uriTokens.join(\"\") : undefined;\n}\n\nvar RDS1 = /^\\.\\.?\\//;\nvar RDS2 = /^\\/\\.(\\/|$)/;\nvar RDS3 = /^\\/\\.\\.(\\/|$)/;\nvar RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\nfunction removeDotSegments(input) {\n    var output = [];\n    while (input.length) {\n        if (input.match(RDS1)) {\n            input = input.replace(RDS1, \"\");\n        } else if (input.match(RDS2)) {\n            input = input.replace(RDS2, \"/\");\n        } else if (input.match(RDS3)) {\n            input = input.replace(RDS3, \"/\");\n            output.pop();\n        } else if (input === \".\" || input === \"..\") {\n            input = \"\";\n        } else {\n            var im = input.match(RDS5);\n            if (im) {\n                var s = im[0];\n                input = input.slice(s.length);\n                output.push(s);\n            } else {\n                throw new Error(\"Unexpected dot segment condition\");\n            }\n        }\n    }\n    return output.join(\"\");\n}\n\nfunction serialize(components) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL;\n    var uriTokens = [];\n    //find scheme handler\n    var schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n    //perform scheme specific serialization\n    if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n    if (components.host) {\n        //if host component is an IPv6 address\n        if (protocol.IPV6ADDRESS.test(components.host)) {}\n        //TODO: normalize IPv6 address as per RFC 5952\n\n        //if host component is a domain name\n        else if (options.domainHost || schemeHandler && schemeHandler.domainHost) {\n                //convert IDN via punycode\n                try {\n                    components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host);\n                } catch (e) {\n                    components.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n                }\n            }\n    }\n    //normalize encoding\n    _normalizeComponentEncoding(components, protocol);\n    if (options.reference !== \"suffix\" && components.scheme) {\n        uriTokens.push(components.scheme);\n        uriTokens.push(\":\");\n    }\n    var authority = _recomposeAuthority(components, options);\n    if (authority !== undefined) {\n        if (options.reference !== \"suffix\") {\n            uriTokens.push(\"//\");\n        }\n        uriTokens.push(authority);\n        if (components.path && components.path.charAt(0) !== \"/\") {\n            uriTokens.push(\"/\");\n        }\n    }\n    if (components.path !== undefined) {\n        var s = components.path;\n        if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n            s = removeDotSegments(s);\n        }\n        if (authority === undefined) {\n            s = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n        }\n        uriTokens.push(s);\n    }\n    if (components.query !== undefined) {\n        uriTokens.push(\"?\");\n        uriTokens.push(components.query);\n    }\n    if (components.fragment !== undefined) {\n        uriTokens.push(\"#\");\n        uriTokens.push(components.fragment);\n    }\n    return uriTokens.join(\"\"); //merge tokens into a string\n}\n\nfunction resolveComponents(base, relative) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var skipNormalization = arguments[3];\n\n    var target = {};\n    if (!skipNormalization) {\n        base = parse(serialize(base, options), options); //normalize base components\n        relative = parse(serialize(relative, options), options); //normalize relative components\n    }\n    options = options || {};\n    if (!options.tolerant && relative.scheme) {\n        target.scheme = relative.scheme;\n        //target.authority = relative.authority;\n        target.userinfo = relative.userinfo;\n        target.host = relative.host;\n        target.port = relative.port;\n        target.path = removeDotSegments(relative.path || \"\");\n        target.query = relative.query;\n    } else {\n        if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n            //target.authority = relative.authority;\n            target.userinfo = relative.userinfo;\n            target.host = relative.host;\n            target.port = relative.port;\n            target.path = removeDotSegments(relative.path || \"\");\n            target.query = relative.query;\n        } else {\n            if (!relative.path) {\n                target.path = base.path;\n                if (relative.query !== undefined) {\n                    target.query = relative.query;\n                } else {\n                    target.query = base.query;\n                }\n            } else {\n                if (relative.path.charAt(0) === \"/\") {\n                    target.path = removeDotSegments(relative.path);\n                } else {\n                    if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n                        target.path = \"/\" + relative.path;\n                    } else if (!base.path) {\n                        target.path = relative.path;\n                    } else {\n                        target.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n                    }\n                    target.path = removeDotSegments(target.path);\n                }\n                target.query = relative.query;\n            }\n            //target.authority = base.authority;\n            target.userinfo = base.userinfo;\n            target.host = base.host;\n            target.port = base.port;\n        }\n        target.scheme = base.scheme;\n    }\n    target.fragment = relative.fragment;\n    return target;\n}\n\nfunction resolve(baseURI, relativeURI, options) {\n    var schemelessOptions = assign({ scheme: 'null' }, options);\n    return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n}\n\nfunction normalize(uri, options) {\n    if (typeof uri === \"string\") {\n        uri = serialize(parse(uri, options), options);\n    } else if (typeOf(uri) === \"object\") {\n        uri = parse(serialize(uri, options), options);\n    }\n    return uri;\n}\n\nfunction equal(uriA, uriB, options) {\n    if (typeof uriA === \"string\") {\n        uriA = serialize(parse(uriA, options), options);\n    } else if (typeOf(uriA) === \"object\") {\n        uriA = serialize(uriA, options);\n    }\n    if (typeof uriB === \"string\") {\n        uriB = serialize(parse(uriB, options), options);\n    } else if (typeOf(uriB) === \"object\") {\n        uriB = serialize(uriB, options);\n    }\n    return uriA === uriB;\n}\n\nfunction escapeComponent(str, options) {\n    return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar);\n}\n\nfunction unescapeComponent(str, options) {\n    return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars);\n}\n\nvar handler = {\n    scheme: \"http\",\n    domainHost: true,\n    parse: function parse(components, options) {\n        //report missing host\n        if (!components.host) {\n            components.error = components.error || \"HTTP URIs must have a host.\";\n        }\n        return components;\n    },\n    serialize: function serialize(components, options) {\n        var secure = String(components.scheme).toLowerCase() === \"https\";\n        //normalize the default port\n        if (components.port === (secure ? 443 : 80) || components.port === \"\") {\n            components.port = undefined;\n        }\n        //normalize the empty path\n        if (!components.path) {\n            components.path = \"/\";\n        }\n        //NOTE: We do not parse query strings for HTTP URIs\n        //as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n        //and not the HTTP spec.\n        return components;\n    }\n};\n\nvar handler$1 = {\n    scheme: \"https\",\n    domainHost: handler.domainHost,\n    parse: handler.parse,\n    serialize: handler.serialize\n};\n\nfunction isSecure(wsComponents) {\n    return typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n//RFC 6455\nvar handler$2 = {\n    scheme: \"ws\",\n    domainHost: true,\n    parse: function parse(components, options) {\n        var wsComponents = components;\n        //indicate if the secure flag is set\n        wsComponents.secure = isSecure(wsComponents);\n        //construct resouce name\n        wsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n        wsComponents.path = undefined;\n        wsComponents.query = undefined;\n        return wsComponents;\n    },\n    serialize: function serialize(wsComponents, options) {\n        //normalize the default port\n        if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n            wsComponents.port = undefined;\n        }\n        //ensure scheme matches secure flag\n        if (typeof wsComponents.secure === 'boolean') {\n            wsComponents.scheme = wsComponents.secure ? 'wss' : 'ws';\n            wsComponents.secure = undefined;\n        }\n        //reconstruct path from resource name\n        if (wsComponents.resourceName) {\n            var _wsComponents$resourc = wsComponents.resourceName.split('?'),\n                _wsComponents$resourc2 = slicedToArray(_wsComponents$resourc, 2),\n                path = _wsComponents$resourc2[0],\n                query = _wsComponents$resourc2[1];\n\n            wsComponents.path = path && path !== '/' ? path : undefined;\n            wsComponents.query = query;\n            wsComponents.resourceName = undefined;\n        }\n        //forbid fragment component\n        wsComponents.fragment = undefined;\n        return wsComponents;\n    }\n};\n\nvar handler$3 = {\n    scheme: \"wss\",\n    domainHost: handler$2.domainHost,\n    parse: handler$2.parse,\n    serialize: handler$2.serialize\n};\n\nvar O = {};\nvar isIRI = true;\n//RFC 3986\nvar UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nvar HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nvar PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\";  //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$);  //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$));  //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nvar ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nvar QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nvar VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nvar SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nvar UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nvar PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nvar NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nvar NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nvar NOT_HFVALUE = NOT_HFNAME;\nfunction decodeUnreserved(str) {\n    var decStr = pctDecChars(str);\n    return !decStr.match(UNRESERVED) ? str : decStr;\n}\nvar handler$4 = {\n    scheme: \"mailto\",\n    parse: function parse$$1(components, options) {\n        var mailtoComponents = components;\n        var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(\",\") : [];\n        mailtoComponents.path = undefined;\n        if (mailtoComponents.query) {\n            var unknownHeaders = false;\n            var headers = {};\n            var hfields = mailtoComponents.query.split(\"&\");\n            for (var x = 0, xl = hfields.length; x < xl; ++x) {\n                var hfield = hfields[x].split(\"=\");\n                switch (hfield[0]) {\n                    case \"to\":\n                        var toAddrs = hfield[1].split(\",\");\n                        for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) {\n                            to.push(toAddrs[_x]);\n                        }\n                        break;\n                    case \"subject\":\n                        mailtoComponents.subject = unescapeComponent(hfield[1], options);\n                        break;\n                    case \"body\":\n                        mailtoComponents.body = unescapeComponent(hfield[1], options);\n                        break;\n                    default:\n                        unknownHeaders = true;\n                        headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n                        break;\n                }\n            }\n            if (unknownHeaders) mailtoComponents.headers = headers;\n        }\n        mailtoComponents.query = undefined;\n        for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) {\n            var addr = to[_x2].split(\"@\");\n            addr[0] = unescapeComponent(addr[0]);\n            if (!options.unicodeSupport) {\n                //convert Unicode IDN -> ASCII IDN\n                try {\n                    addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n                } catch (e) {\n                    mailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n                }\n            } else {\n                addr[1] = unescapeComponent(addr[1], options).toLowerCase();\n            }\n            to[_x2] = addr.join(\"@\");\n        }\n        return mailtoComponents;\n    },\n    serialize: function serialize$$1(mailtoComponents, options) {\n        var components = mailtoComponents;\n        var to = toArray(mailtoComponents.to);\n        if (to) {\n            for (var x = 0, xl = to.length; x < xl; ++x) {\n                var toAddr = String(to[x]);\n                var atIdx = toAddr.lastIndexOf(\"@\");\n                var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n                var domain = toAddr.slice(atIdx + 1);\n                //convert IDN via punycode\n                try {\n                    domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain);\n                } catch (e) {\n                    components.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n                }\n                to[x] = localPart + \"@\" + domain;\n            }\n            components.path = to.join(\",\");\n        }\n        var headers = mailtoComponents.headers = mailtoComponents.headers || {};\n        if (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n        if (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n        var fields = [];\n        for (var name in headers) {\n            if (headers[name] !== O[name]) {\n                fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + \"=\" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar));\n            }\n        }\n        if (fields.length) {\n            components.query = fields.join(\"&\");\n        }\n        return components;\n    }\n};\n\nvar URN_PARSE = /^([^\\:]+)\\:(.*)/;\n//RFC 2141\nvar handler$5 = {\n    scheme: \"urn\",\n    parse: function parse$$1(components, options) {\n        var matches = components.path && components.path.match(URN_PARSE);\n        var urnComponents = components;\n        if (matches) {\n            var scheme = options.scheme || urnComponents.scheme || \"urn\";\n            var nid = matches[1].toLowerCase();\n            var nss = matches[2];\n            var urnScheme = scheme + \":\" + (options.nid || nid);\n            var schemeHandler = SCHEMES[urnScheme];\n            urnComponents.nid = nid;\n            urnComponents.nss = nss;\n            urnComponents.path = undefined;\n            if (schemeHandler) {\n                urnComponents = schemeHandler.parse(urnComponents, options);\n            }\n        } else {\n            urnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n        }\n        return urnComponents;\n    },\n    serialize: function serialize$$1(urnComponents, options) {\n        var scheme = options.scheme || urnComponents.scheme || \"urn\";\n        var nid = urnComponents.nid;\n        var urnScheme = scheme + \":\" + (options.nid || nid);\n        var schemeHandler = SCHEMES[urnScheme];\n        if (schemeHandler) {\n            urnComponents = schemeHandler.serialize(urnComponents, options);\n        }\n        var uriComponents = urnComponents;\n        var nss = urnComponents.nss;\n        uriComponents.path = (nid || options.nid) + \":\" + nss;\n        return uriComponents;\n    }\n};\n\nvar UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\n//RFC 4122\nvar handler$6 = {\n    scheme: \"urn:uuid\",\n    parse: function parse(urnComponents, options) {\n        var uuidComponents = urnComponents;\n        uuidComponents.uuid = uuidComponents.nss;\n        uuidComponents.nss = undefined;\n        if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n            uuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n        }\n        return uuidComponents;\n    },\n    serialize: function serialize(uuidComponents, options) {\n        var urnComponents = uuidComponents;\n        //normalize UUID\n        urnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n        return urnComponents;\n    }\n};\n\nSCHEMES[handler.scheme] = handler;\nSCHEMES[handler$1.scheme] = handler$1;\nSCHEMES[handler$2.scheme] = handler$2;\nSCHEMES[handler$3.scheme] = handler$3;\nSCHEMES[handler$4.scheme] = handler$4;\nSCHEMES[handler$5.scheme] = handler$5;\nSCHEMES[handler$6.scheme] = handler$6;\n\nexports.SCHEMES = SCHEMES;\nexports.pctEncChar = pctEncChar;\nexports.pctDecChars = pctDecChars;\nexports.parse = parse;\nexports.removeDotSegments = removeDotSegments;\nexports.serialize = serialize;\nexports.resolveComponents = resolveComponents;\nexports.resolve = resolve;\nexports.normalize = normalize;\nexports.equal = equal;\nexports.escapeComponent = escapeComponent;\nexports.unescapeComponent = unescapeComponent;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n\n/***/ }),\n\n/***/ 7598:\n/***/ (function(module) {\n\n/*!\n * vanilla-picker v2.12.3\n * https://vanilla-picker.js.org\n *\n * Copyright 2017-2024 Andreas Borgen (https://github.com/Sphinxxxx), Adam Brooks (https://github.com/dissimulate)\n * Released under the ISC license.\n */\n(function (global, factory) {\n   true ? module.exports = factory() :\n  0;\n})(this, (function () { 'use strict';\n\n  var classCallCheck = function (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 slicedToArray = function () {\n    function sliceIterator(arr, i) {\n      var _arr = [];\n      var _n = true;\n      var _d = false;\n      var _e = undefined;\n\n      try {\n        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n          _arr.push(_s.value);\n\n          if (i && _arr.length === i) break;\n        }\n      } catch (err) {\n        _d = true;\n        _e = err;\n      } finally {\n        try {\n          if (!_n && _i[\"return\"]) _i[\"return\"]();\n        } finally {\n          if (_d) throw _e;\n        }\n      }\n\n      return _arr;\n    }\n\n    return function (arr, i) {\n      if (Array.isArray(arr)) {\n        return arr;\n      } else if (Symbol.iterator in Object(arr)) {\n        return sliceIterator(arr, i);\n      } else {\n        throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n      }\n    };\n  }();\n\n  String.prototype.startsWith = String.prototype.startsWith || function (needle) {\n      return this.indexOf(needle) === 0;\n  };\n  String.prototype.padStart = String.prototype.padStart || function (len, pad) {\n      var str = this;while (str.length < len) {\n          str = pad + str;\n      }return str;\n  };\n\n  var colorNames = { cb: '0f8ff', tqw: 'aebd7', q: '-ffff', qmrn: '7fffd4', zr: '0ffff', bg: '5f5dc', bsq: 'e4c4', bck: '---', nch: 'ebcd', b: '--ff', bvt: '8a2be2', brwn: 'a52a2a', brw: 'deb887', ctb: '5f9ea0', hrt: '7fff-', chcT: 'd2691e', cr: '7f50', rnw: '6495ed', crns: '8dc', crms: 'dc143c', cn: '-ffff', Db: '--8b', Dcn: '-8b8b', Dgnr: 'b8860b', Dgr: 'a9a9a9', Dgrn: '-64-', Dkhk: 'bdb76b', Dmgn: '8b-8b', Dvgr: '556b2f', Drng: '8c-', Drch: '9932cc', Dr: '8b--', Dsmn: 'e9967a', Dsgr: '8fbc8f', DsTb: '483d8b', DsTg: '2f4f4f', Dtrq: '-ced1', Dvt: '94-d3', ppnk: '1493', pskb: '-bfff', mgr: '696969', grb: '1e90ff', rbrc: 'b22222', rwht: 'af0', stg: '228b22', chs: '-ff', gnsb: 'dcdcdc', st: '8f8ff', g: 'd7-', gnr: 'daa520', gr: '808080', grn: '-8-0', grnw: 'adff2f', hnw: '0fff0', htpn: '69b4', nnr: 'cd5c5c', ng: '4b-82', vr: '0', khk: '0e68c', vnr: 'e6e6fa', nrb: '0f5', wngr: '7cfc-', mnch: 'acd', Lb: 'add8e6', Lcr: '08080', Lcn: 'e0ffff', Lgnr: 'afad2', Lgr: 'd3d3d3', Lgrn: '90ee90', Lpnk: 'b6c1', Lsmn: 'a07a', Lsgr: '20b2aa', Lskb: '87cefa', LsTg: '778899', Lstb: 'b0c4de', Lw: 'e0', m: '-ff-', mgrn: '32cd32', nn: 'af0e6', mgnt: '-ff', mrn: '8--0', mqm: '66cdaa', mmb: '--cd', mmrc: 'ba55d3', mmpr: '9370db', msg: '3cb371', mmsT: '7b68ee', '': '-fa9a', mtr: '48d1cc', mmvt: 'c71585', mnLb: '191970', ntc: '5fffa', mstr: 'e4e1', mccs: 'e4b5', vjw: 'dead', nv: '--80', c: 'df5e6', v: '808-0', vrb: '6b8e23', rng: 'a5-', rngr: '45-', rch: 'da70d6', pgnr: 'eee8aa', pgrn: '98fb98', ptrq: 'afeeee', pvtr: 'db7093', ppwh: 'efd5', pchp: 'dab9', pr: 'cd853f', pnk: 'c0cb', pm: 'dda0dd', pwrb: 'b0e0e6', prp: '8-080', cc: '663399', r: '--', sbr: 'bc8f8f', rb: '4169e1', sbrw: '8b4513', smn: 'a8072', nbr: '4a460', sgrn: '2e8b57', ssh: '5ee', snn: 'a0522d', svr: 'c0c0c0', skb: '87ceeb', sTb: '6a5acd', sTgr: '708090', snw: 'afa', n: '-ff7f', stb: '4682b4', tn: 'd2b48c', t: '-8080', thst: 'd8bfd8', tmT: '6347', trqs: '40e0d0', vt: 'ee82ee', whT: '5deb3', wht: '', hts: '5f5f5', w: '-', wgrn: '9acd32' };\n\n  function printNum(num) {\n      var decs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n      var str = decs > 0 ? num.toFixed(decs).replace(/0+$/, '').replace(/\\.$/, '') : num.toString();\n      return str || '0';\n  }\n\n  var Color = function () {\n      function Color(r, g, b, a) {\n          classCallCheck(this, Color);\n\n\n          var that = this;\n          function parseString(input) {\n\n              if (input.startsWith('hsl')) {\n                  var _input$match$map = input.match(/([\\-\\d\\.e]+)/g).map(Number),\n                      _input$match$map2 = slicedToArray(_input$match$map, 4),\n                      h = _input$match$map2[0],\n                      s = _input$match$map2[1],\n                      l = _input$match$map2[2],\n                      _a = _input$match$map2[3];\n\n                  if (_a === undefined) {\n                      _a = 1;\n                  }\n\n                  h /= 360;\n                  s /= 100;\n                  l /= 100;\n                  that.hsla = [h, s, l, _a];\n              } else if (input.startsWith('rgb')) {\n                  var _input$match$map3 = input.match(/([\\-\\d\\.e]+)/g).map(Number),\n                      _input$match$map4 = slicedToArray(_input$match$map3, 4),\n                      _r = _input$match$map4[0],\n                      _g = _input$match$map4[1],\n                      _b = _input$match$map4[2],\n                      _a2 = _input$match$map4[3];\n\n                  if (_a2 === undefined) {\n                      _a2 = 1;\n                  }\n\n                  that.rgba = [_r, _g, _b, _a2];\n              } else {\n                  if (input.startsWith('#')) {\n                      that.rgba = Color.hexToRgb(input);\n                  } else {\n                      that.rgba = Color.nameToRgb(input) || Color.hexToRgb(input);\n                  }\n              }\n          }\n\n          if (r === undefined) ; else if (Array.isArray(r)) {\n              this.rgba = r;\n          } else if (b === undefined) {\n              var color = r && '' + r;\n              if (color) {\n                  parseString(color.toLowerCase());\n              }\n          } else {\n              this.rgba = [r, g, b, a === undefined ? 1 : a];\n          }\n      }\n\n      createClass(Color, [{\n          key: 'printRGB',\n          value: function printRGB(alpha) {\n              var rgb = alpha ? this.rgba : this.rgba.slice(0, 3),\n                  vals = rgb.map(function (x, i) {\n                  return printNum(x, i === 3 ? 3 : 0);\n              });\n\n              return alpha ? 'rgba(' + vals + ')' : 'rgb(' + vals + ')';\n          }\n      }, {\n          key: 'printHSL',\n          value: function printHSL(alpha) {\n              var mults = [360, 100, 100, 1],\n                  suff = ['', '%', '%', ''];\n\n              var hsl = alpha ? this.hsla : this.hsla.slice(0, 3),\n                  vals = hsl.map(function (x, i) {\n                  return printNum(x * mults[i], i === 3 ? 3 : 1) + suff[i];\n              });\n\n              return alpha ? 'hsla(' + vals + ')' : 'hsl(' + vals + ')';\n          }\n      }, {\n          key: 'printHex',\n          value: function printHex(alpha) {\n              var hex = this.hex;\n              return alpha ? hex : hex.substring(0, 7);\n          }\n      }, {\n          key: 'rgba',\n          get: function get() {\n              if (this._rgba) {\n                  return this._rgba;\n              }\n              if (!this._hsla) {\n                  throw new Error('No color is set');\n              }\n\n              return this._rgba = Color.hslToRgb(this._hsla);\n          },\n          set: function set(rgb) {\n              if (rgb.length === 3) {\n                  rgb[3] = 1;\n              }\n\n              this._rgba = rgb;\n              this._hsla = null;\n          }\n      }, {\n          key: 'rgbString',\n          get: function get() {\n              return this.printRGB();\n          }\n      }, {\n          key: 'rgbaString',\n          get: function get() {\n              return this.printRGB(true);\n          }\n      }, {\n          key: 'hsla',\n          get: function get() {\n              if (this._hsla) {\n                  return this._hsla;\n              }\n              if (!this._rgba) {\n                  throw new Error('No color is set');\n              }\n\n              return this._hsla = Color.rgbToHsl(this._rgba);\n          },\n          set: function set(hsl) {\n              if (hsl.length === 3) {\n                  hsl[3] = 1;\n              }\n\n              this._hsla = hsl;\n              this._rgba = null;\n          }\n      }, {\n          key: 'hslString',\n          get: function get() {\n              return this.printHSL();\n          }\n      }, {\n          key: 'hslaString',\n          get: function get() {\n              return this.printHSL(true);\n          }\n      }, {\n          key: 'hex',\n          get: function get() {\n              var rgb = this.rgba,\n                  hex = rgb.map(function (x, i) {\n                  return i < 3 ? x.toString(16) : Math.round(x * 255).toString(16);\n              });\n\n              return '#' + hex.map(function (x) {\n                  return x.padStart(2, '0');\n              }).join('');\n          },\n          set: function set(hex) {\n              this.rgba = Color.hexToRgb(hex);\n          }\n      }], [{\n          key: 'hexToRgb',\n          value: function hexToRgb(input) {\n\n              var hex = (input.startsWith('#') ? input.slice(1) : input).replace(/^(\\w{3})$/, '$1F').replace(/^(\\w)(\\w)(\\w)(\\w)$/, '$1$1$2$2$3$3$4$4').replace(/^(\\w{6})$/, '$1FF');\n\n              if (!hex.match(/^([0-9a-fA-F]{8})$/)) {\n                  throw new Error('Unknown hex color; ' + input);\n              }\n\n              var rgba = hex.match(/^(\\w\\w)(\\w\\w)(\\w\\w)(\\w\\w)$/).slice(1).map(function (x) {\n                  return parseInt(x, 16);\n              });\n\n              rgba[3] = rgba[3] / 255;\n              return rgba;\n          }\n      }, {\n          key: 'nameToRgb',\n          value: function nameToRgb(input) {\n\n              var hash = input.toLowerCase().replace('at', 'T').replace(/[aeiouyldf]/g, '').replace('ght', 'L').replace('rk', 'D').slice(-5, 4),\n                  hex = colorNames[hash];\n              return hex === undefined ? hex : Color.hexToRgb(hex.replace(/\\-/g, '00').padStart(6, 'f'));\n          }\n      }, {\n          key: 'rgbToHsl',\n          value: function rgbToHsl(_ref) {\n              var _ref2 = slicedToArray(_ref, 4),\n                  r = _ref2[0],\n                  g = _ref2[1],\n                  b = _ref2[2],\n                  a = _ref2[3];\n\n              r /= 255;\n              g /= 255;\n              b /= 255;\n\n              var max = Math.max(r, g, b),\n                  min = Math.min(r, g, b);\n              var h = void 0,\n                  s = void 0,\n                  l = (max + min) / 2;\n\n              if (max === min) {\n                  h = s = 0;\n              } else {\n                  var d = max - min;\n                  s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n                  switch (max) {\n                      case r:\n                          h = (g - b) / d + (g < b ? 6 : 0);break;\n                      case g:\n                          h = (b - r) / d + 2;break;\n                      case b:\n                          h = (r - g) / d + 4;break;\n                  }\n\n                  h /= 6;\n              }\n\n              return [h, s, l, a];\n          }\n      }, {\n          key: 'hslToRgb',\n          value: function hslToRgb(_ref3) {\n              var _ref4 = slicedToArray(_ref3, 4),\n                  h = _ref4[0],\n                  s = _ref4[1],\n                  l = _ref4[2],\n                  a = _ref4[3];\n\n              var r = void 0,\n                  g = void 0,\n                  b = void 0;\n\n              if (s === 0) {\n                  r = g = b = l;\n              } else {\n                  var hue2rgb = function hue2rgb(p, q, t) {\n                      if (t < 0) t += 1;\n                      if (t > 1) t -= 1;\n                      if (t < 1 / 6) return p + (q - p) * 6 * t;\n                      if (t < 1 / 2) return q;\n                      if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n                      return p;\n                  };\n\n                  var q = l < 0.5 ? l * (1 + s) : l + s - l * s,\n                      p = 2 * l - q;\n\n                  r = hue2rgb(p, q, h + 1 / 3);\n                  g = hue2rgb(p, q, h);\n                  b = hue2rgb(p, q, h - 1 / 3);\n              }\n\n              var rgba = [r * 255, g * 255, b * 255].map(Math.round);\n              rgba[3] = a;\n\n              return rgba;\n          }\n      }]);\n      return Color;\n  }();\n\n  var EventBucket = function () {\n      function EventBucket() {\n          classCallCheck(this, EventBucket);\n\n          this._events = [];\n      }\n\n      createClass(EventBucket, [{\n          key: 'add',\n          value: function add(target, type, handler) {\n              target.addEventListener(type, handler, false);\n              this._events.push({\n                  target: target,\n                  type: type,\n                  handler: handler\n              });\n          }\n      }, {\n          key: 'remove',\n          value: function remove(target, type, handler) {\n              this._events = this._events.filter(function (e) {\n                  var isMatch = true;\n                  if (target && target !== e.target) {\n                      isMatch = false;\n                  }\n                  if (type && type !== e.type) {\n                      isMatch = false;\n                  }\n                  if (handler && handler !== e.handler) {\n                      isMatch = false;\n                  }\n\n                  if (isMatch) {\n                      EventBucket._doRemove(e.target, e.type, e.handler);\n                  }\n                  return !isMatch;\n              });\n          }\n      }, {\n          key: 'destroy',\n          value: function destroy() {\n              this._events.forEach(function (e) {\n                  return EventBucket._doRemove(e.target, e.type, e.handler);\n              });\n              this._events = [];\n          }\n      }], [{\n          key: '_doRemove',\n          value: function _doRemove(target, type, handler) {\n              target.removeEventListener(type, handler, false);\n          }\n      }]);\n      return EventBucket;\n  }();\n\n  function parseHTML(htmlString) {\n\n      var div = document.createElement('div');\n      div.innerHTML = htmlString;\n      return div.firstElementChild;\n  }\n\n  function dragTrack(eventBucket, area, callback) {\n      var dragging = false;\n\n      function clamp(val, min, max) {\n          return Math.max(min, Math.min(val, max));\n      }\n\n      function onMove(e, info, starting) {\n          if (starting) {\n              dragging = true;\n          }\n          if (!dragging) {\n              return;\n          }\n\n          e.preventDefault();\n\n          var bounds = area.getBoundingClientRect(),\n              w = bounds.width,\n              h = bounds.height,\n              x = info.clientX,\n              y = info.clientY;\n\n          var relX = clamp(x - bounds.left, 0, w),\n              relY = clamp(y - bounds.top, 0, h);\n\n          callback(relX / w, relY / h);\n      }\n\n      function onMouse(e, starting) {\n          var button = e.buttons === undefined ? e.which : e.buttons;\n          if (button === 1) {\n              onMove(e, e, starting);\n          } else {\n              dragging = false;\n          }\n      }\n\n      function onTouch(e, starting) {\n          if (e.touches.length === 1) {\n              onMove(e, e.touches[0], starting);\n          } else {\n              dragging = false;\n          }\n      }\n\n      eventBucket.add(area, 'mousedown', function (e) {\n          onMouse(e, true);\n      });\n      eventBucket.add(area, 'touchstart', function (e) {\n          onTouch(e, true);\n      });\n      eventBucket.add(window, 'mousemove', onMouse);\n      eventBucket.add(area, 'touchmove', onTouch);\n      eventBucket.add(window, 'mouseup', function (e) {\n          dragging = false;\n      });\n      eventBucket.add(area, 'touchend', function (e) {\n          dragging = false;\n      });\n      eventBucket.add(area, 'touchcancel', function (e) {\n          dragging = false;\n      });\n  }\n\n  var BG_TRANSP = 'linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0 / 2em 2em,\\n                   linear-gradient(45deg, lightgrey 25%,       white 25%,       white 75%, lightgrey 75%) 1em 1em / 2em 2em';\n  var HUES = 360;\n\n  var EVENT_KEY = 'keydown',\n      EVENT_CLICK_OUTSIDE = 'mousedown',\n      EVENT_TAB_MOVE = 'focusin';\n\n  function $(selector, context) {\n      return (context || document).querySelector(selector);\n  }\n\n  function stopEvent(e) {\n\n      e.preventDefault();\n      e.stopPropagation();\n  }\n  function onKey(bucket, target, keys, handler, stop) {\n      bucket.add(target, EVENT_KEY, function (e) {\n          if (keys.indexOf(e.key) >= 0) {\n              if (stop) {\n                  stopEvent(e);\n              }\n              handler(e);\n          }\n      });\n  }\n\n  var Picker = function () {\n      function Picker(options) {\n          classCallCheck(this, Picker);\n\n\n          this.settings = {\n\n              popup: 'right',\n              layout: 'default',\n              alpha: true,\n              editor: true,\n              editorFormat: 'hex',\n              cancelButton: false,\n              defaultColor: '#0cf'\n          };\n\n          this._events = new EventBucket();\n\n          this.onChange = null;\n\n          this.onDone = null;\n\n          this.onOpen = null;\n\n          this.onClose = null;\n\n          this.setOptions(options);\n      }\n\n      createClass(Picker, [{\n          key: 'setOptions',\n          value: function setOptions(options) {\n              var _this = this;\n\n              if (!options) {\n                  return;\n              }\n              var settings = this.settings;\n\n              function transfer(source, target, skipKeys) {\n                  for (var key in source) {\n                      if (skipKeys && skipKeys.indexOf(key) >= 0) {\n                          continue;\n                      }\n\n                      target[key] = source[key];\n                  }\n              }\n\n              if (options instanceof HTMLElement) {\n                  settings.parent = options;\n              } else {\n\n                  if (settings.parent && options.parent && settings.parent !== options.parent) {\n                      this._events.remove(settings.parent);\n                      this._popupInited = false;\n                  }\n\n                  transfer(options, settings);\n\n                  if (options.onChange) {\n                      this.onChange = options.onChange;\n                  }\n                  if (options.onDone) {\n                      this.onDone = options.onDone;\n                  }\n                  if (options.onOpen) {\n                      this.onOpen = options.onOpen;\n                  }\n                  if (options.onClose) {\n                      this.onClose = options.onClose;\n                  }\n\n                  var col = options.color || options.colour;\n                  if (col) {\n                      this._setColor(col);\n                  }\n              }\n\n              var parent = settings.parent;\n              if (parent && settings.popup && !this._popupInited) {\n\n                  var openProxy = function openProxy(e) {\n                      return _this.openHandler(e);\n                  };\n\n                  this._events.add(parent, 'click', openProxy);\n\n                  onKey(this._events, parent, [' ', 'Spacebar', 'Enter'], openProxy);\n\n                  this._popupInited = true;\n              } else if (options.parent && !settings.popup) {\n                  this.show();\n              }\n          }\n      }, {\n          key: 'openHandler',\n          value: function openHandler(e) {\n              if (this.show()) {\n\n                  e && e.preventDefault();\n\n                  this.settings.parent.style.pointerEvents = 'none';\n\n                  var toFocus = e && e.type === EVENT_KEY ? this._domEdit : this.domElement;\n                  setTimeout(function () {\n                      return toFocus.focus();\n                  }, 100);\n\n                  if (this.onOpen) {\n                      this.onOpen(this.colour);\n                  }\n              }\n          }\n      }, {\n          key: 'closeHandler',\n          value: function closeHandler(e) {\n              var event = e && e.type;\n              var doHide = false;\n\n              if (!e) {\n                  doHide = true;\n              } else if (event === EVENT_CLICK_OUTSIDE || event === EVENT_TAB_MOVE) {\n\n                  var knownTime = (this.__containedEvent || 0) + 100;\n                  if (e.timeStamp > knownTime) {\n                      doHide = true;\n                  }\n              } else {\n\n                  stopEvent(e);\n\n                  doHide = true;\n              }\n\n              if (doHide && this.hide()) {\n                  this.settings.parent.style.pointerEvents = '';\n\n                  if (event !== EVENT_CLICK_OUTSIDE) {\n                      this.settings.parent.focus();\n                  }\n\n                  if (this.onClose) {\n                      this.onClose(this.colour);\n                  }\n              }\n          }\n      }, {\n          key: 'movePopup',\n          value: function movePopup(options, open) {\n\n              this.closeHandler();\n\n              this.setOptions(options);\n              if (open) {\n                  this.openHandler();\n              }\n          }\n      }, {\n          key: 'setColor',\n          value: function setColor(color, silent) {\n              this._setColor(color, { silent: silent });\n          }\n      }, {\n          key: '_setColor',\n          value: function _setColor(color, flags) {\n              if (typeof color === 'string') {\n                  color = color.trim();\n              }\n              if (!color) {\n                  return;\n              }\n\n              flags = flags || {};\n              var c = void 0;\n              try {\n\n                  c = new Color(color);\n              } catch (ex) {\n                  if (flags.failSilently) {\n                      return;\n                  }\n                  throw ex;\n              }\n\n              if (!this.settings.alpha) {\n                  var hsla = c.hsla;\n                  hsla[3] = 1;\n                  c.hsla = hsla;\n              }\n              this.colour = this.color = c;\n              this._setHSLA(null, null, null, null, flags);\n          }\n      }, {\n          key: 'setColour',\n          value: function setColour(colour, silent) {\n              this.setColor(colour, silent);\n          }\n      }, {\n          key: 'show',\n          value: function show() {\n              var parent = this.settings.parent;\n              if (!parent) {\n                  return false;\n              }\n\n              if (this.domElement) {\n                  var toggled = this._toggleDOM(true);\n\n                  this._setPosition();\n\n                  return toggled;\n              }\n\n              var html = this.settings.template || '<div class=\"picker_wrapper\" tabindex=\"-1\"><div class=\"picker_arrow\"></div><div class=\"picker_hue picker_slider\"><div class=\"picker_selector\"></div></div><div class=\"picker_sl\"><div class=\"picker_selector\"></div></div><div class=\"picker_alpha picker_slider\"><div class=\"picker_selector\"></div></div><div class=\"picker_editor\"><input aria-label=\"Type a color name or hex value\"/></div><div class=\"picker_sample\"></div><div class=\"picker_done\"><button>Ok</button></div><div class=\"picker_cancel\"><button>Cancel</button></div></div>';\n              var wrapper = parseHTML(html);\n\n              this.domElement = wrapper;\n              this._domH = $('.picker_hue', wrapper);\n              this._domSL = $('.picker_sl', wrapper);\n              this._domA = $('.picker_alpha', wrapper);\n              this._domEdit = $('.picker_editor input', wrapper);\n              this._domSample = $('.picker_sample', wrapper);\n              this._domOkay = $('.picker_done button', wrapper);\n              this._domCancel = $('.picker_cancel button', wrapper);\n\n              wrapper.classList.add('layout_' + this.settings.layout);\n              if (!this.settings.alpha) {\n                  wrapper.classList.add('no_alpha');\n              }\n              if (!this.settings.editor) {\n                  wrapper.classList.add('no_editor');\n              }\n              if (!this.settings.cancelButton) {\n                  wrapper.classList.add('no_cancel');\n              }\n              this._ifPopup(function () {\n                  return wrapper.classList.add('popup');\n              });\n\n              this._setPosition();\n\n              if (this.colour) {\n                  this._updateUI();\n              } else {\n                  this._setColor(this.settings.defaultColor);\n              }\n              this._bindEvents();\n\n              return true;\n          }\n      }, {\n          key: 'hide',\n          value: function hide() {\n              return this._toggleDOM(false);\n          }\n      }, {\n          key: 'destroy',\n          value: function destroy() {\n              this._events.destroy();\n              if (this.domElement) {\n                  this.settings.parent.removeChild(this.domElement);\n              }\n          }\n      }, {\n          key: '_bindEvents',\n          value: function _bindEvents() {\n              var _this2 = this;\n\n              var that = this,\n                  dom = this.domElement,\n                  events = this._events;\n\n              function addEvent(target, type, handler) {\n                  events.add(target, type, handler);\n              }\n\n              addEvent(dom, 'click', function (e) {\n                  return e.preventDefault();\n              });\n\n              dragTrack(events, this._domH, function (x, y) {\n                  return that._setHSLA(x);\n              });\n\n              dragTrack(events, this._domSL, function (x, y) {\n                  return that._setHSLA(null, x, 1 - y);\n              });\n\n              if (this.settings.alpha) {\n                  dragTrack(events, this._domA, function (x, y) {\n                      return that._setHSLA(null, null, null, 1 - y);\n                  });\n              }\n\n              var editInput = this._domEdit;\n              {\n                  addEvent(editInput, 'input', function (e) {\n                      that._setColor(this.value, { fromEditor: true, failSilently: true });\n                  });\n\n                  addEvent(editInput, 'focus', function (e) {\n                      var input = this;\n\n                      if (input.selectionStart === input.selectionEnd) {\n                          input.select();\n                      }\n                  });\n              }\n\n              this._ifPopup(function () {\n\n                  var popupCloseProxy = function popupCloseProxy(e) {\n                      return _this2.closeHandler(e);\n                  };\n\n                  addEvent(window, EVENT_CLICK_OUTSIDE, popupCloseProxy);\n                  addEvent(window, EVENT_TAB_MOVE, popupCloseProxy);\n                  onKey(events, dom, ['Esc', 'Escape'], popupCloseProxy);\n\n                  var timeKeeper = function timeKeeper(e) {\n                      _this2.__containedEvent = e.timeStamp;\n                  };\n                  addEvent(dom, EVENT_CLICK_OUTSIDE, timeKeeper);\n\n                  addEvent(dom, EVENT_TAB_MOVE, timeKeeper);\n\n                  addEvent(_this2._domCancel, 'click', popupCloseProxy);\n              });\n\n              var onDoneProxy = function onDoneProxy(e) {\n                  _this2._ifPopup(function () {\n                      return _this2.closeHandler(e);\n                  });\n                  if (_this2.onDone) {\n                      _this2.onDone(_this2.colour);\n                  }\n              };\n              addEvent(this._domOkay, 'click', onDoneProxy);\n              onKey(events, dom, ['Enter'], onDoneProxy);\n          }\n      }, {\n          key: '_setPosition',\n          value: function _setPosition() {\n              var parent = this.settings.parent,\n                  elm = this.domElement;\n\n              if (parent !== elm.parentNode) {\n                  parent.appendChild(elm);\n              }\n\n              this._ifPopup(function (popup) {\n\n                  if (getComputedStyle(parent).position === 'static') {\n                      parent.style.position = 'relative';\n                  }\n\n                  var cssClass = popup === true ? 'popup_right' : 'popup_' + popup;\n\n                  ['popup_top', 'popup_bottom', 'popup_left', 'popup_right'].forEach(function (c) {\n\n                      if (c === cssClass) {\n                          elm.classList.add(c);\n                      } else {\n                          elm.classList.remove(c);\n                      }\n                  });\n\n                  elm.classList.add(cssClass);\n              });\n          }\n      }, {\n          key: '_setHSLA',\n          value: function _setHSLA(h, s, l, a, flags) {\n              flags = flags || {};\n\n              var col = this.colour,\n                  hsla = col.hsla;\n\n              [h, s, l, a].forEach(function (x, i) {\n                  if (x || x === 0) {\n                      hsla[i] = x;\n                  }\n              });\n              col.hsla = hsla;\n\n              this._updateUI(flags);\n\n              if (this.onChange && !flags.silent) {\n                  this.onChange(col);\n              }\n          }\n      }, {\n          key: '_updateUI',\n          value: function _updateUI(flags) {\n              if (!this.domElement) {\n                  return;\n              }\n              flags = flags || {};\n\n              var col = this.colour,\n                  hsl = col.hsla,\n                  cssHue = 'hsl(' + hsl[0] * HUES + ', 100%, 50%)',\n                  cssHSL = col.hslString,\n                  cssHSLA = col.hslaString;\n\n              var uiH = this._domH,\n                  uiSL = this._domSL,\n                  uiA = this._domA,\n                  thumbH = $('.picker_selector', uiH),\n                  thumbSL = $('.picker_selector', uiSL),\n                  thumbA = $('.picker_selector', uiA);\n\n              function posX(parent, child, relX) {\n                  child.style.left = relX * 100 + '%';\n              }\n              function posY(parent, child, relY) {\n                  child.style.top = relY * 100 + '%';\n              }\n\n              posX(uiH, thumbH, hsl[0]);\n\n              this._domSL.style.backgroundColor = this._domH.style.color = cssHue;\n\n              posX(uiSL, thumbSL, hsl[1]);\n              posY(uiSL, thumbSL, 1 - hsl[2]);\n\n              uiSL.style.color = cssHSL;\n\n              posY(uiA, thumbA, 1 - hsl[3]);\n\n              var opaque = cssHSL,\n                  transp = opaque.replace('hsl', 'hsla').replace(')', ', 0)'),\n                  bg = 'linear-gradient(' + [opaque, transp] + ')';\n\n              this._domA.style.background = bg + ', ' + BG_TRANSP;\n\n              if (!flags.fromEditor) {\n                  var format = this.settings.editorFormat,\n                      alpha = this.settings.alpha;\n\n                  var value = void 0;\n                  switch (format) {\n                      case 'rgb':\n                          value = col.printRGB(alpha);break;\n                      case 'hsl':\n                          value = col.printHSL(alpha);break;\n                      default:\n                          value = col.printHex(alpha);\n                  }\n                  this._domEdit.value = value;\n              }\n\n              this._domSample.style.color = cssHSLA;\n          }\n      }, {\n          key: '_ifPopup',\n          value: function _ifPopup(actionIf, actionElse) {\n              if (this.settings.parent && this.settings.popup) {\n                  actionIf && actionIf(this.settings.popup);\n              } else {\n                  actionElse && actionElse();\n              }\n          }\n      }, {\n          key: '_toggleDOM',\n          value: function _toggleDOM(toVisible) {\n              var dom = this.domElement;\n              if (!dom) {\n                  return false;\n              }\n\n              var displayStyle = toVisible ? '' : 'none',\n                  toggle = dom.style.display !== displayStyle;\n\n              if (toggle) {\n                  dom.style.display = displayStyle;\n              }\n              return toggle;\n          }\n      }]);\n      return Picker;\n  }();\n\n  {\n      var style = document.createElement('style');\n      style.textContent = '.picker_wrapper.no_alpha .picker_alpha{display:none}.picker_wrapper.no_editor .picker_editor{position:absolute;z-index:-1;opacity:0}.picker_wrapper.no_cancel .picker_cancel{display:none}.layout_default.picker_wrapper{display:flex;flex-flow:row wrap;justify-content:space-between;align-items:stretch;font-size:10px;width:25em;padding:.5em}.layout_default.picker_wrapper input,.layout_default.picker_wrapper button{font-size:1rem}.layout_default.picker_wrapper>*{margin:.5em}.layout_default.picker_wrapper::before{content:\"\";display:block;width:100%;height:0;order:1}.layout_default .picker_slider,.layout_default .picker_selector{padding:1em}.layout_default .picker_hue{width:100%}.layout_default .picker_sl{flex:1 1 auto}.layout_default .picker_sl::before{content:\"\";display:block;padding-bottom:100%}.layout_default .picker_editor{order:1;width:6.5rem}.layout_default .picker_editor input{width:100%;height:100%}.layout_default .picker_sample{order:1;flex:1 1 auto}.layout_default .picker_done,.layout_default .picker_cancel{order:1}.picker_wrapper{box-sizing:border-box;background:#f2f2f2;box-shadow:0 0 0 1px silver;cursor:default;font-family:sans-serif;color:#444;pointer-events:auto}.picker_wrapper:focus{outline:none}.picker_wrapper button,.picker_wrapper input{box-sizing:border-box;border:none;box-shadow:0 0 0 1px silver;outline:none}.picker_wrapper button:focus,.picker_wrapper button:active,.picker_wrapper input:focus,.picker_wrapper input:active{box-shadow:0 0 2px 1px #1e90ff}.picker_wrapper button{padding:.4em .6em;cursor:pointer;background-color:#f5f5f5;background-image:linear-gradient(0deg, gainsboro, transparent)}.picker_wrapper button:active{background-image:linear-gradient(0deg, transparent, gainsboro)}.picker_wrapper button:hover{background-color:#fff}.picker_selector{position:absolute;z-index:1;display:block;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);border:2px solid #fff;border-radius:100%;box-shadow:0 0 3px 1px #67b9ff;background:currentColor;cursor:pointer}.picker_slider .picker_selector{border-radius:2px}.picker_hue{position:relative;background-image:linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red);box-shadow:0 0 0 1px silver}.picker_sl{position:relative;box-shadow:0 0 0 1px silver;background-image:linear-gradient(180deg, white, rgba(255, 255, 255, 0) 50%),linear-gradient(0deg, black, rgba(0, 0, 0, 0) 50%),linear-gradient(90deg, #808080, rgba(128, 128, 128, 0))}.picker_alpha,.picker_sample{position:relative;background:linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0/2em 2em,linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em/2em 2em;box-shadow:0 0 0 1px silver}.picker_alpha .picker_selector,.picker_sample .picker_selector{background:none}.picker_editor input{font-family:monospace;padding:.2em .4em}.picker_sample::before{content:\"\";position:absolute;display:block;width:100%;height:100%;background:currentColor}.picker_arrow{position:absolute;z-index:-1}.picker_wrapper.popup{position:absolute;z-index:2;margin:1.5em}.picker_wrapper.popup,.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{background:#f2f2f2;box-shadow:0 0 10px 1px rgba(0,0,0,.4)}.picker_wrapper.popup .picker_arrow{width:3em;height:3em;margin:0}.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{content:\"\";display:block;position:absolute;top:0;left:0;z-index:-99}.picker_wrapper.popup .picker_arrow::before{width:100%;height:100%;-webkit-transform:skew(45deg);transform:skew(45deg);-webkit-transform-origin:0 100%;transform-origin:0 100%}.picker_wrapper.popup .picker_arrow::after{width:150%;height:150%;box-shadow:none}.popup.popup_top{bottom:100%;left:0}.popup.popup_top .picker_arrow{bottom:0;left:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.popup.popup_bottom{top:100%;left:0}.popup.popup_bottom .picker_arrow{top:0;left:0;-webkit-transform:rotate(90deg) scale(1, -1);transform:rotate(90deg) scale(1, -1)}.popup.popup_left{top:0;right:100%}.popup.popup_left .picker_arrow{top:0;right:0;-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.popup.popup_right{top:0;left:100%}.popup.popup_right .picker_arrow{top:0;left:0}';\n      document.documentElement.firstElementChild.appendChild(style);\n\n      Picker.StyleElement = style;\n  }\n\n  return Picker;\n\n}));\n\n\n/***/ }),\n\n/***/ 9857:\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  m: function() { return /* binding */ jsonrepair; }\n});\n\n;// ./node_modules/jsonrepair/lib/esm/utils/JSONRepairError.js\nclass JSONRepairError extends Error {\n  constructor(message, position) {\n    super(`${message} at position ${position}`);\n    this.position = position;\n  }\n}\n\n;// ./node_modules/jsonrepair/lib/esm/utils/stringUtils.js\nconst codeSpace = 0x20; // \" \"\nconst codeNewline = 0xa; // \"\\n\"\nconst codeTab = 0x9; // \"\\t\"\nconst codeReturn = 0xd; // \"\\r\"\n\n// unicode spaces: https://jkorpela.fi/chars/spaces.html\nconst codeNonBreakingSpace = 0x00a0;\nconst codeMongolianVowelSeparator = 0x180e;\nconst codeEnQuad = 0x2000;\nconst codeZeroWidthSpace = 0x200b;\nconst codeNarrowNoBreakSpace = 0x202f;\nconst codeMediumMathematicalSpace = 0x205f;\nconst codeIdeographicSpace = 0x3000;\nconst codeZeroWidthNoBreakSpace = 0xfeff;\nfunction isHex(char) {\n  return /^[0-9A-Fa-f]$/.test(char);\n}\nfunction isDigit(char) {\n  return char >= '0' && char <= '9';\n}\nfunction isValidStringCharacter(char) {\n  // note that the valid range is between \\u{0020} and \\u{10ffff},\n  // but in JavaScript it is not possible to create a code point larger than\n  // \\u{10ffff}, so there is no need to test for that here.\n  return char >= '\\u0020';\n}\nfunction isDelimiter(char) {\n  return ',:[]/{}()\\n+'.includes(char);\n}\nfunction isFunctionNameCharStart(char) {\n  return char >= 'a' && char <= 'z' || char >= 'A' && char <= 'Z' || char === '_' || char === '$';\n}\nfunction isFunctionNameChar(char) {\n  return char >= 'a' && char <= 'z' || char >= 'A' && char <= 'Z' || char === '_' || char === '$' || char >= '0' && char <= '9';\n}\n\n// matches \"https://\" and other schemas\nconst regexUrlStart = /^(http|https|ftp|mailto|file|data|irc):\\/\\/$/;\n\n// matches all valid URL characters EXCEPT \"[\", \"]\", and \",\", since that are important JSON delimiters\nconst regexUrlChar = /^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;\nfunction isUnquotedStringDelimiter(char) {\n  return ',[]/{}\\n+'.includes(char);\n}\nfunction isStartOfValue(char) {\n  return isQuote(char) || regexStartOfValue.test(char);\n}\n\n// alpha, number, minus, or opening bracket or brace\nconst regexStartOfValue = /^[[{\\w-]$/;\nfunction isControlCharacter(char) {\n  return char === '\\n' || char === '\\r' || char === '\\t' || char === '\\b' || char === '\\f';\n}\n/**\n * Check if the given character is a whitespace character like space, tab, or\n * newline\n */\nfunction isWhitespace(text, index) {\n  const code = text.charCodeAt(index);\n  return code === codeSpace || code === codeNewline || code === codeTab || code === codeReturn;\n}\n\n/**\n * Check if the given character is a whitespace character like space or tab,\n * but NOT a newline\n */\nfunction isWhitespaceExceptNewline(text, index) {\n  const code = text.charCodeAt(index);\n  return code === codeSpace || code === codeTab || code === codeReturn;\n}\n\n/**\n * Check if the given character is a special whitespace character, some\n * unicode variant\n */\nfunction isSpecialWhitespace(text, index) {\n  const code = text.charCodeAt(index);\n  return code === codeNonBreakingSpace || code === codeMongolianVowelSeparator || code >= codeEnQuad && code <= codeZeroWidthSpace || code === codeNarrowNoBreakSpace || code === codeMediumMathematicalSpace || code === codeIdeographicSpace || code === codeZeroWidthNoBreakSpace;\n}\n\n/**\n * Test whether the given character is a quote or double quote character.\n * Also tests for special variants of quotes.\n */\nfunction isQuote(char) {\n  // the first check double quotes, since that occurs most often\n  return isDoubleQuoteLike(char) || isSingleQuoteLike(char);\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Also tests for special variants of double quotes.\n */\nfunction isDoubleQuoteLike(char) {\n  return char === '\"' || char === '\\u201c' || char === '\\u201d';\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Does NOT test for special variants of double quotes.\n */\nfunction isDoubleQuote(char) {\n  return char === '\"';\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Also tests for special variants of single quotes.\n */\nfunction isSingleQuoteLike(char) {\n  return char === \"'\" || char === '\\u2018' || char === '\\u2019' || char === '\\u0060' || char === '\\u00b4';\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Does NOT test for special variants of single quotes.\n */\nfunction isSingleQuote(char) {\n  return char === \"'\";\n}\n\n/**\n * Strip last occurrence of textToStrip from text\n */\nfunction stripLastOccurrence(text, textToStrip) {\n  let stripRemainingText = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  const index = text.lastIndexOf(textToStrip);\n  return index !== -1 ? text.substring(0, index) + (stripRemainingText ? '' : text.substring(index + 1)) : text;\n}\nfunction insertBeforeLastWhitespace(text, textToInsert) {\n  let index = text.length;\n  if (!isWhitespace(text, index - 1)) {\n    // no trailing whitespaces\n    return text + textToInsert;\n  }\n  while (isWhitespace(text, index - 1)) {\n    index--;\n  }\n  return text.substring(0, index) + textToInsert + text.substring(index);\n}\nfunction removeAtIndex(text, start, count) {\n  return text.substring(0, start) + text.substring(start + count);\n}\n\n/**\n * Test whether a string ends with a newline or comma character and optional whitespace\n */\nfunction endsWithCommaOrNewline(text) {\n  return /[,\\n][ \\t\\r]*$/.test(text);\n}\n\n;// ./node_modules/jsonrepair/lib/esm/regular/jsonrepair.js\n\n\nconst controlCharacters = {\n  '\\b': '\\\\b',\n  '\\f': '\\\\f',\n  '\\n': '\\\\n',\n  '\\r': '\\\\r',\n  '\\t': '\\\\t'\n};\n\n// map with all escape characters\nconst escapeCharacters = {\n  '\"': '\"',\n  '\\\\': '\\\\',\n  '/': '/',\n  b: '\\b',\n  f: '\\f',\n  n: '\\n',\n  r: '\\r',\n  t: '\\t'\n  // note that \\u is handled separately in parseString()\n};\n\n/**\n * Repair a string containing an invalid JSON document.\n * For example changes JavaScript notation into JSON notation.\n *\n * Example:\n *\n *     try {\n *       const json = \"{name: 'John'}\"\n *       const repaired = jsonrepair(json)\n *       console.log(repaired)\n *       // '{\"name\": \"John\"}'\n *     } catch (err) {\n *       console.error(err)\n *     }\n *\n */\nfunction jsonrepair(text) {\n  let i = 0; // current index in text\n  let output = ''; // generated output\n\n  parseMarkdownCodeBlock(['```', '[```', '{```']);\n  const processed = parseValue();\n  if (!processed) {\n    throwUnexpectedEnd();\n  }\n  parseMarkdownCodeBlock(['```', '```]', '```}']);\n  const processedComma = parseCharacter(',');\n  if (processedComma) {\n    parseWhitespaceAndSkipComments();\n  }\n  if (isStartOfValue(text[i]) && endsWithCommaOrNewline(output)) {\n    // start of a new value after end of the root level object: looks like\n    // newline delimited JSON -> turn into a root level array\n    if (!processedComma) {\n      // repair missing comma\n      output = insertBeforeLastWhitespace(output, ',');\n    }\n    parseNewlineDelimitedJSON();\n  } else if (processedComma) {\n    // repair: remove trailing comma\n    output = stripLastOccurrence(output, ',');\n  }\n\n  // repair redundant end quotes\n  while (text[i] === '}' || text[i] === ']') {\n    i++;\n    parseWhitespaceAndSkipComments();\n  }\n  if (i >= text.length) {\n    // reached the end of the document properly\n    return output;\n  }\n  throwUnexpectedCharacter();\n  function parseValue() {\n    parseWhitespaceAndSkipComments();\n    const processed = parseObject() || parseArray() || parseString() || parseNumber() || parseKeywords() || parseUnquotedString(false) || parseRegex();\n    parseWhitespaceAndSkipComments();\n    return processed;\n  }\n  function parseWhitespaceAndSkipComments() {\n    let skipNewline = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n    const start = i;\n    let changed = parseWhitespace(skipNewline);\n    do {\n      changed = parseComment();\n      if (changed) {\n        changed = parseWhitespace(skipNewline);\n      }\n    } while (changed);\n    return i > start;\n  }\n  function parseWhitespace(skipNewline) {\n    const _isWhiteSpace = skipNewline ? isWhitespace : isWhitespaceExceptNewline;\n    let whitespace = '';\n    while (true) {\n      if (_isWhiteSpace(text, i)) {\n        whitespace += text[i];\n        i++;\n      } else if (isSpecialWhitespace(text, i)) {\n        // repair special whitespace\n        whitespace += ' ';\n        i++;\n      } else {\n        break;\n      }\n    }\n    if (whitespace.length > 0) {\n      output += whitespace;\n      return true;\n    }\n    return false;\n  }\n  function parseComment() {\n    // find a block comment '/* ... */'\n    if (text[i] === '/' && text[i + 1] === '*') {\n      // repair block comment by skipping it\n      while (i < text.length && !atEndOfBlockComment(text, i)) {\n        i++;\n      }\n      i += 2;\n      return true;\n    }\n\n    // find a line comment '// ...'\n    if (text[i] === '/' && text[i + 1] === '/') {\n      // repair line comment by skipping it\n      while (i < text.length && text[i] !== '\\n') {\n        i++;\n      }\n      return true;\n    }\n    return false;\n  }\n  function parseMarkdownCodeBlock(blocks) {\n    // find and skip over a Markdown fenced code block:\n    //     ``` ... ```\n    // or\n    //     ```json ... ```\n    if (skipMarkdownCodeBlock(blocks)) {\n      if (isFunctionNameCharStart(text[i])) {\n        // strip the optional language specifier like \"json\"\n        while (i < text.length && isFunctionNameChar(text[i])) {\n          i++;\n        }\n      }\n      parseWhitespaceAndSkipComments();\n      return true;\n    }\n    return false;\n  }\n  function skipMarkdownCodeBlock(blocks) {\n    parseWhitespace(true);\n    for (const block of blocks) {\n      const end = i + block.length;\n      if (text.slice(i, end) === block) {\n        i = end;\n        return true;\n      }\n    }\n    return false;\n  }\n  function parseCharacter(char) {\n    if (text[i] === char) {\n      output += text[i];\n      i++;\n      return true;\n    }\n    return false;\n  }\n  function skipCharacter(char) {\n    if (text[i] === char) {\n      i++;\n      return true;\n    }\n    return false;\n  }\n  function skipEscapeCharacter() {\n    return skipCharacter('\\\\');\n  }\n\n  /**\n   * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n   * or a similar construct in objects.\n   */\n  function skipEllipsis() {\n    parseWhitespaceAndSkipComments();\n    if (text[i] === '.' && text[i + 1] === '.' && text[i + 2] === '.') {\n      // repair: remove the ellipsis (three dots) and optionally a comma\n      i += 3;\n      parseWhitespaceAndSkipComments();\n      skipCharacter(',');\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Parse an object like '{\"key\": \"value\"}'\n   */\n  function parseObject() {\n    if (text[i] === '{') {\n      output += '{';\n      i++;\n      parseWhitespaceAndSkipComments();\n\n      // repair: skip leading comma like in {, message: \"hi\"}\n      if (skipCharacter(',')) {\n        parseWhitespaceAndSkipComments();\n      }\n      let initial = true;\n      while (i < text.length && text[i] !== '}') {\n        let processedComma;\n        if (!initial) {\n          processedComma = parseCharacter(',');\n          if (!processedComma) {\n            // repair missing comma\n            output = insertBeforeLastWhitespace(output, ',');\n          }\n          parseWhitespaceAndSkipComments();\n        } else {\n          processedComma = true;\n          initial = false;\n        }\n        skipEllipsis();\n        const processedKey = parseString() || parseUnquotedString(true);\n        if (!processedKey) {\n          if (text[i] === '}' || text[i] === '{' || text[i] === ']' || text[i] === '[' || text[i] === undefined) {\n            // repair trailing comma\n            output = stripLastOccurrence(output, ',');\n          } else {\n            throwObjectKeyExpected();\n          }\n          break;\n        }\n        parseWhitespaceAndSkipComments();\n        const processedColon = parseCharacter(':');\n        const truncatedText = i >= text.length;\n        if (!processedColon) {\n          if (isStartOfValue(text[i]) || truncatedText) {\n            // repair missing colon\n            output = insertBeforeLastWhitespace(output, ':');\n          } else {\n            throwColonExpected();\n          }\n        }\n        const processedValue = parseValue();\n        if (!processedValue) {\n          if (processedColon || truncatedText) {\n            // repair missing object value\n            output += 'null';\n          } else {\n            throwColonExpected();\n          }\n        }\n      }\n      if (text[i] === '}') {\n        output += '}';\n        i++;\n      } else {\n        // repair missing end bracket\n        output = insertBeforeLastWhitespace(output, '}');\n      }\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Parse an array like '[\"item1\", \"item2\", ...]'\n   */\n  function parseArray() {\n    if (text[i] === '[') {\n      output += '[';\n      i++;\n      parseWhitespaceAndSkipComments();\n\n      // repair: skip leading comma like in [,1,2,3]\n      if (skipCharacter(',')) {\n        parseWhitespaceAndSkipComments();\n      }\n      let initial = true;\n      while (i < text.length && text[i] !== ']') {\n        if (!initial) {\n          const processedComma = parseCharacter(',');\n          if (!processedComma) {\n            // repair missing comma\n            output = insertBeforeLastWhitespace(output, ',');\n          }\n        } else {\n          initial = false;\n        }\n        skipEllipsis();\n        const processedValue = parseValue();\n        if (!processedValue) {\n          // repair trailing comma\n          output = stripLastOccurrence(output, ',');\n          break;\n        }\n      }\n      if (text[i] === ']') {\n        output += ']';\n        i++;\n      } else {\n        // repair missing closing array bracket\n        output = insertBeforeLastWhitespace(output, ']');\n      }\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Parse and repair Newline Delimited JSON (NDJSON):\n   * multiple JSON objects separated by a newline character\n   */\n  function parseNewlineDelimitedJSON() {\n    // repair NDJSON\n    let initial = true;\n    let processedValue = true;\n    while (processedValue) {\n      if (!initial) {\n        // parse optional comma, insert when missing\n        const processedComma = parseCharacter(',');\n        if (!processedComma) {\n          // repair: add missing comma\n          output = insertBeforeLastWhitespace(output, ',');\n        }\n      } else {\n        initial = false;\n      }\n      processedValue = parseValue();\n    }\n    if (!processedValue) {\n      // repair: remove trailing comma\n      output = stripLastOccurrence(output, ',');\n    }\n\n    // repair: wrap the output inside array brackets\n    output = `[\\n${output}\\n]`;\n  }\n\n  /**\n   * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\n   * Repair strings enclosed in single quotes or special quotes\n   * Repair an escaped string\n   *\n   * The function can run in two stages:\n   * - First, it assumes the string has a valid end quote\n   * - If it turns out that the string does not have a valid end quote followed\n   *   by a delimiter (which should be the case), the function runs again in a\n   *   more conservative way, stopping the string at the first next delimiter\n   *   and fixing the string by inserting a quote there, or stopping at a\n   *   stop index detected in the first iteration.\n   */\n  function parseString() {\n    let stopAtDelimiter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    let stopAtIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\n    let skipEscapeChars = text[i] === '\\\\';\n    if (skipEscapeChars) {\n      // repair: remove the first escape character\n      i++;\n      skipEscapeChars = true;\n    }\n    if (isQuote(text[i])) {\n      // double quotes are correct JSON,\n      // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\n      // otherwise, we will match any double-quote-like start with a double-quote-like end,\n      // or any single-quote-like start with a single-quote-like end\n      const isEndQuote = isDoubleQuote(text[i]) ? isDoubleQuote : isSingleQuote(text[i]) ? isSingleQuote : isSingleQuoteLike(text[i]) ? isSingleQuoteLike : isDoubleQuoteLike;\n      const iBefore = i;\n      const oBefore = output.length;\n      let str = '\"';\n      i++;\n      while (true) {\n        if (i >= text.length) {\n          // end of text, we are missing an end quote\n\n          const iPrev = prevNonWhitespaceIndex(i - 1);\n          if (!stopAtDelimiter && isDelimiter(text.charAt(iPrev))) {\n            // if the text ends with a delimiter, like [\"hello],\n            // so the missing end quote should be inserted before this delimiter\n            // retry parsing the string, stopping at the first next delimiter\n            i = iBefore;\n            output = output.substring(0, oBefore);\n            return parseString(true);\n          }\n\n          // repair missing quote\n          str = insertBeforeLastWhitespace(str, '\"');\n          output += str;\n          return true;\n        }\n        if (i === stopAtIndex) {\n          // use the stop index detected in the first iteration, and repair end quote\n          str = insertBeforeLastWhitespace(str, '\"');\n          output += str;\n          return true;\n        }\n        if (isEndQuote(text[i])) {\n          // end quote\n          // let us check what is before and after the quote to verify whether this is a legit end quote\n          const iQuote = i;\n          const oQuote = str.length;\n          str += '\"';\n          i++;\n          output += str;\n          parseWhitespaceAndSkipComments(false);\n          if (stopAtDelimiter || i >= text.length || isDelimiter(text[i]) || isQuote(text[i]) || isDigit(text[i])) {\n            // The quote is followed by the end of the text, a delimiter,\n            // or a next value. So the quote is indeed the end of the string.\n            parseConcatenatedString();\n            return true;\n          }\n          const iPrevChar = prevNonWhitespaceIndex(iQuote - 1);\n          const prevChar = text.charAt(iPrevChar);\n          if (prevChar === ',') {\n            // A comma followed by a quote, like '{\"a\":\"b,c,\"d\":\"e\"}'.\n            // We assume that the quote is a start quote, and that the end quote\n            // should have been located right before the comma but is missing.\n            i = iBefore;\n            output = output.substring(0, oBefore);\n            return parseString(false, iPrevChar);\n          }\n          if (isDelimiter(prevChar)) {\n            // This is not the right end quote: it is preceded by a delimiter,\n            // and NOT followed by a delimiter. So, there is an end quote missing\n            // parse the string again and then stop at the first next delimiter\n            i = iBefore;\n            output = output.substring(0, oBefore);\n            return parseString(true);\n          }\n\n          // revert to right after the quote but before any whitespace, and continue parsing the string\n          output = output.substring(0, oBefore);\n          i = iQuote + 1;\n\n          // repair unescaped quote\n          str = `${str.substring(0, oQuote)}\\\\${str.substring(oQuote)}`;\n        } else if (stopAtDelimiter && isUnquotedStringDelimiter(text[i])) {\n          // we're in the mode to stop the string at the first delimiter\n          // because there is an end quote missing\n\n          // test start of an url like \"https://...\" (this would be parsed as a comment)\n          if (text[i - 1] === ':' && regexUrlStart.test(text.substring(iBefore + 1, i + 2))) {\n            while (i < text.length && regexUrlChar.test(text[i])) {\n              str += text[i];\n              i++;\n            }\n          }\n\n          // repair missing quote\n          str = insertBeforeLastWhitespace(str, '\"');\n          output += str;\n          parseConcatenatedString();\n          return true;\n        } else if (text[i] === '\\\\') {\n          // handle escaped content like \\n or \\u2605\n          const char = text.charAt(i + 1);\n          const escapeChar = escapeCharacters[char];\n          if (escapeChar !== undefined) {\n            str += text.slice(i, i + 2);\n            i += 2;\n          } else if (char === 'u') {\n            let j = 2;\n            while (j < 6 && isHex(text[i + j])) {\n              j++;\n            }\n            if (j === 6) {\n              str += text.slice(i, i + 6);\n              i += 6;\n            } else if (i + j >= text.length) {\n              // repair invalid or truncated unicode char at the end of the text\n              // by removing the unicode char and ending the string here\n              i = text.length;\n            } else {\n              throwInvalidUnicodeCharacter();\n            }\n          } else {\n            // repair invalid escape character: remove it\n            str += char;\n            i += 2;\n          }\n        } else {\n          // handle regular characters\n          const char = text.charAt(i);\n          if (char === '\"' && text[i - 1] !== '\\\\') {\n            // repair unescaped double quote\n            str += `\\\\${char}`;\n            i++;\n          } else if (isControlCharacter(char)) {\n            // unescaped control character\n            str += controlCharacters[char];\n            i++;\n          } else {\n            if (!isValidStringCharacter(char)) {\n              throwInvalidCharacter(char);\n            }\n            str += char;\n            i++;\n          }\n        }\n        if (skipEscapeChars) {\n          // repair: skipped escape character (nothing to do)\n          skipEscapeCharacter();\n        }\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n   */\n  function parseConcatenatedString() {\n    let processed = false;\n    parseWhitespaceAndSkipComments();\n    while (text[i] === '+') {\n      processed = true;\n      i++;\n      parseWhitespaceAndSkipComments();\n\n      // repair: remove the end quote of the first string\n      output = stripLastOccurrence(output, '\"', true);\n      const start = output.length;\n      const parsedStr = parseString();\n      if (parsedStr) {\n        // repair: remove the start quote of the second string\n        output = removeAtIndex(output, start, 1);\n      } else {\n        // repair: remove the + because it is not followed by a string\n        output = insertBeforeLastWhitespace(output, '\"');\n      }\n    }\n    return processed;\n  }\n\n  /**\n   * Parse a number like 2.4 or 2.4e6\n   */\n  function parseNumber() {\n    const start = i;\n    if (text[i] === '-') {\n      i++;\n      if (atEndOfNumber()) {\n        repairNumberEndingWithNumericSymbol(start);\n        return true;\n      }\n      if (!isDigit(text[i])) {\n        i = start;\n        return false;\n      }\n    }\n\n    // Note that in JSON leading zeros like \"00789\" are not allowed.\n    // We will allow all leading zeros here though and at the end of parseNumber\n    // check against trailing zeros and repair that if needed.\n    // Leading zeros can have meaning, so we should not clear them.\n    while (isDigit(text[i])) {\n      i++;\n    }\n    if (text[i] === '.') {\n      i++;\n      if (atEndOfNumber()) {\n        repairNumberEndingWithNumericSymbol(start);\n        return true;\n      }\n      if (!isDigit(text[i])) {\n        i = start;\n        return false;\n      }\n      while (isDigit(text[i])) {\n        i++;\n      }\n    }\n    if (text[i] === 'e' || text[i] === 'E') {\n      i++;\n      if (text[i] === '-' || text[i] === '+') {\n        i++;\n      }\n      if (atEndOfNumber()) {\n        repairNumberEndingWithNumericSymbol(start);\n        return true;\n      }\n      if (!isDigit(text[i])) {\n        i = start;\n        return false;\n      }\n      while (isDigit(text[i])) {\n        i++;\n      }\n    }\n\n    // if we're not at the end of the number by this point, allow this to be parsed as another type\n    if (!atEndOfNumber()) {\n      i = start;\n      return false;\n    }\n    if (i > start) {\n      // repair a number with leading zeros like \"00789\"\n      const num = text.slice(start, i);\n      const hasInvalidLeadingZero = /^0\\d/.test(num);\n      output += hasInvalidLeadingZero ? `\"${num}\"` : num;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Parse keywords true, false, null\n   * Repair Python keywords True, False, None\n   */\n  function parseKeywords() {\n    return parseKeyword('true', 'true') || parseKeyword('false', 'false') || parseKeyword('null', 'null') ||\n    // repair Python keywords True, False, None\n    parseKeyword('True', 'true') || parseKeyword('False', 'false') || parseKeyword('None', 'null');\n  }\n  function parseKeyword(name, value) {\n    if (text.slice(i, i + name.length) === name) {\n      output += value;\n      i += name.length;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Repair an unquoted string by adding quotes around it\n   * Repair a MongoDB function call like NumberLong(\"2\")\n   * Repair a JSONP function call like callback({...});\n   */\n  function parseUnquotedString(isKey) {\n    // note that the symbol can end with whitespaces: we stop at the next delimiter\n    // also, note that we allow strings to contain a slash / in order to support repairing regular expressions\n    const start = i;\n    if (isFunctionNameCharStart(text[i])) {\n      while (i < text.length && isFunctionNameChar(text[i])) {\n        i++;\n      }\n      let j = i;\n      while (isWhitespace(text, j)) {\n        j++;\n      }\n      if (text[j] === '(') {\n        // repair a MongoDB function call like NumberLong(\"2\")\n        // repair a JSONP function call like callback({...});\n        i = j + 1;\n        parseValue();\n        if (text[i] === ')') {\n          // repair: skip close bracket of function call\n          i++;\n          if (text[i] === ';') {\n            // repair: skip semicolon after JSONP call\n            i++;\n          }\n        }\n        return true;\n      }\n    }\n    while (i < text.length && !isUnquotedStringDelimiter(text[i]) && !isQuote(text[i]) && (!isKey || text[i] !== ':')) {\n      i++;\n    }\n\n    // test start of an url like \"https://...\" (this would be parsed as a comment)\n    if (text[i - 1] === ':' && regexUrlStart.test(text.substring(start, i + 2))) {\n      while (i < text.length && regexUrlChar.test(text[i])) {\n        i++;\n      }\n    }\n    if (i > start) {\n      // repair unquoted string\n      // also, repair undefined into null\n\n      // first, go back to prevent getting trailing whitespaces in the string\n      while (isWhitespace(text, i - 1) && i > 0) {\n        i--;\n      }\n      const symbol = text.slice(start, i);\n      output += symbol === 'undefined' ? 'null' : JSON.stringify(symbol);\n      if (text[i] === '\"') {\n        // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n        i++;\n      }\n      return true;\n    }\n  }\n  function parseRegex() {\n    if (text[i] === '/') {\n      const start = i;\n      i++;\n      while (i < text.length && (text[i] !== '/' || text[i - 1] === '\\\\')) {\n        i++;\n      }\n      i++;\n      output += JSON.stringify(text.substring(start, i));\n      return true;\n    }\n  }\n  function prevNonWhitespaceIndex(start) {\n    let prev = start;\n    while (prev > 0 && isWhitespace(text, prev)) {\n      prev--;\n    }\n    return prev;\n  }\n  function atEndOfNumber() {\n    return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i);\n  }\n  function repairNumberEndingWithNumericSymbol(start) {\n    // repair numbers cut off at the end\n    // this will only be called when we end after a '.', '-', or 'e' and does not\n    // change the number more than it needs to make it valid JSON\n    output += `${text.slice(start, i)}0`;\n  }\n  function throwInvalidCharacter(char) {\n    throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i);\n  }\n  function throwUnexpectedCharacter() {\n    throw new JSONRepairError(`Unexpected character ${JSON.stringify(text[i])}`, i);\n  }\n  function throwUnexpectedEnd() {\n    throw new JSONRepairError('Unexpected end of json string', text.length);\n  }\n  function throwObjectKeyExpected() {\n    throw new JSONRepairError('Object key expected', i);\n  }\n  function throwColonExpected() {\n    throw new JSONRepairError('Colon expected', i);\n  }\n  function throwInvalidUnicodeCharacter() {\n    const chars = text.slice(i, i + 6);\n    throw new JSONRepairError(`Invalid unicode character \"${chars}\"`, i);\n  }\n}\nfunction atEndOfBlockComment(text, i) {\n  return text[i] === '*' && text[i + 1] === '/';\n}\n\n\n/***/ }),\n\n/***/ 3420:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = /*#__PURE__*/JSON.parse('{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"$id\":\"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\"description\":\"Meta-schema for $data reference (JSON Schema extension proposal)\",\"type\":\"object\",\"required\":[\"$data\"],\"properties\":{\"$data\":{\"type\":\"string\",\"anyOf\":[{\"format\":\"relative-json-pointer\"},{\"format\":\"json-pointer\"}]}},\"additionalProperties\":false}');\n\n/***/ }),\n\n/***/ 5207:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = /*#__PURE__*/JSON.parse('{\"id\":\"http://json-schema.org/draft-04/schema#\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"description\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"positiveInteger\":{\"type\":\"integer\",\"minimum\":0},\"positiveIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/positiveInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1,\"uniqueItems\":true}},\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"$schema\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":{},\"multipleOf\":{\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"boolean\",\"default\":false},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"boolean\",\"default\":false},\"maxLength\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minLength\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"anyOf\":[{\"type\":\"boolean\"},{\"$ref\":\"#\"}],\"default\":{}},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":{}},\"maxItems\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minItems\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"maxProperties\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"boolean\"},{\"$ref\":\"#\"}],\"default\":{}},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"format\":{\"type\":\"string\"},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"dependencies\":{\"exclusiveMaximum\":[\"maximum\"],\"exclusiveMinimum\":[\"minimum\"]},\"default\":{}}');\n\n/***/ }),\n\n/***/ 6801:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = /*#__PURE__*/JSON.parse('{\"$schema\":\"http://json-schema.org/draft-06/schema#\",\"$id\":\"http://json-schema.org/draft-06/schema#\",\"title\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"nonNegativeInteger\":{\"type\":\"integer\",\"minimum\":0},\"nonNegativeIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/nonNegativeInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"uniqueItems\":true,\"default\":[]}},\"type\":[\"object\",\"boolean\"],\"properties\":{\"$id\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$schema\":{\"type\":\"string\",\"format\":\"uri\"},\"$ref\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":{},\"examples\":{\"type\":\"array\",\"items\":{}},\"multipleOf\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"number\"},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"number\"},\"maxLength\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minLength\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"$ref\":\"#\"},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":{}},\"maxItems\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minItems\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"contains\":{\"$ref\":\"#\"},\"maxProperties\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"$ref\":\"#\"},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"propertyNames\":{\"$ref\":\"#\"},\"const\":{},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"format\":{\"type\":\"string\"},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"default\":{}}');\n\n/***/ }),\n\n/***/ 8198:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = /*#__PURE__*/JSON.parse('{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"$id\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"nonNegativeInteger\":{\"type\":\"integer\",\"minimum\":0},\"nonNegativeIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/nonNegativeInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"uniqueItems\":true,\"default\":[]}},\"type\":[\"object\",\"boolean\"],\"properties\":{\"$id\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$schema\":{\"type\":\"string\",\"format\":\"uri\"},\"$ref\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$comment\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":true,\"readOnly\":{\"type\":\"boolean\",\"default\":false},\"examples\":{\"type\":\"array\",\"items\":true},\"multipleOf\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"number\"},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"number\"},\"maxLength\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minLength\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"$ref\":\"#\"},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":true},\"maxItems\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minItems\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"contains\":{\"$ref\":\"#\"},\"maxProperties\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"$ref\":\"#\"},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"propertyNames\":{\"format\":\"regex\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"propertyNames\":{\"$ref\":\"#\"},\"const\":true,\"enum\":{\"type\":\"array\",\"items\":true,\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"format\":{\"type\":\"string\"},\"contentMediaType\":{\"type\":\"string\"},\"contentEncoding\":{\"type\":\"string\"},\"if\":{\"$ref\":\"#\"},\"then\":{\"$ref\":\"#\"},\"else\":{\"$ref\":\"#\"},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"default\":true}');\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/amd define */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.amdD = function () {\n/******/ \t\t\tthrow new Error('define cannot be used indirect');\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/node module decorator */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.nmd = function(module) {\n/******/ \t\t\tmodule.paths = [];\n/******/ \t\t\tif (!module.children) module.children = [];\n/******/ \t\t\treturn module;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(1346);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});",".jsoneditor,\n.jsoneditor-modal {\n  -webkit-text-size-adjust: none;\n  text-size-adjust: none;\n}\n\n.jsoneditor input,\n.jsoneditor input:not([type]),\n.jsoneditor input[type=text],\n.jsoneditor input[type=search],\n.jsoneditor-modal input,\n.jsoneditor-modal input:not([type]),\n.jsoneditor-modal input[type=text],\n.jsoneditor-modal input[type=search] {\n  height: auto;\n  border: inherit;\n  box-shadow: none;\n  font-size: inherit;\n  box-sizing: inherit;\n  padding: inherit;\n  font-family: inherit;\n  transition: none;\n  line-height: inherit;\n}\n\n.jsoneditor input:focus,\n.jsoneditor input:not([type]):focus,\n.jsoneditor input[type=text]:focus,\n.jsoneditor input[type=search]:focus,\n.jsoneditor-modal input:focus,\n.jsoneditor-modal input:not([type]):focus,\n.jsoneditor-modal input[type=text]:focus,\n.jsoneditor-modal input[type=search]:focus {\n  border: inherit;\n  box-shadow: inherit;\n}\n\n.jsoneditor textarea,\n.jsoneditor-modal textarea {\n  height: inherit;\n}\n\n.jsoneditor select,\n.jsoneditor-modal select {\n  display: inherit;\n  height: inherit;\n}\n\n.jsoneditor label,\n.jsoneditor-modal label {\n  font-size: inherit;\n  font-weight: inherit;\n  color: inherit;\n}\n\n.jsoneditor table,\n.jsoneditor-modal table {\n  border-collapse: collapse;\n  width: auto;\n}\n\n.jsoneditor td,\n.jsoneditor th,\n.jsoneditor-modal td,\n.jsoneditor-modal th {\n  padding: 0;\n  display: table-cell;\n  text-align: left;\n  vertical-align: inherit;\n  border-radius: inherit;\n}\n\n.jsoneditor .autocomplete.dropdown {\n  position: absolute;\n  background: #ffffff;\n  box-shadow: 2px 2px 12px rgba(128, 128, 128, 0.3);\n  border: 1px solid #d3d3d3;\n  overflow-x: hidden;\n  overflow-y: auto;\n  cursor: default;\n  margin: 0;\n  padding: 5px;\n  text-align: left;\n  outline: 0;\n  font-family: consolas, menlo, monaco, \"Ubuntu Mono\", \"source-code-pro\", monospace;\n  font-size: 14px;\n}\n\n.jsoneditor .autocomplete.dropdown .item {\n  color: #1a1a1a;\n}\n\n.jsoneditor .autocomplete.dropdown .item.hover {\n  background-color: #ebebeb;\n}\n\n.jsoneditor .autocomplete.hint {\n  color: #a1a1a1;\n  top: 4px;\n  left: 4px;\n}\n\n.jsoneditor-contextmenu-root {\n  position: relative;\n  width: 0;\n  height: 0;\n}\n\n.jsoneditor-contextmenu {\n  position: absolute;\n  box-sizing: content-box;\n  z-index: 2;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu {\n  position: relative;\n  left: 0;\n  top: 0;\n  width: 128px;\n  height: auto;\n  background: #ffffff;\n  border: 1px solid #d3d3d3;\n  box-shadow: 2px 2px 12px rgba(128, 128, 128, 0.3);\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu button {\n  position: relative;\n  padding: 0 8px 0 0;\n  margin: 0;\n  width: 128px;\n  height: auto;\n  border: none;\n  cursor: pointer;\n  color: #4d4d4d;\n  background: transparent;\n  font-size: 14px;\n  font-family: arial, sans-serif;\n  box-sizing: border-box;\n  text-align: left;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu button::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu button.jsoneditor-default {\n  width: 96px;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu button.jsoneditor-expand {\n  float: right;\n  width: 32px;\n  height: 24px;\n  border-left: 1px solid #e5e5e5;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu li {\n  overflow: hidden;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu li ul {\n  display: none;\n  position: relative;\n  left: -10px;\n  top: 0;\n  border: none;\n  box-shadow: inset 0 0 10px rgba(128, 128, 128, 0.5);\n  padding: 0 10px;\n  -webkit-transition: all 0.3s ease-out;\n  -moz-transition: all 0.3s ease-out;\n  -o-transition: all 0.3s ease-out;\n  transition: all 0.3s ease-out;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu li ul .jsoneditor-icon {\n  margin-left: 24px;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu li ul li button {\n  padding-left: 24px;\n  animation: all ease-in-out 1s;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu li button .jsoneditor-expand {\n  position: absolute;\n  top: 0;\n  right: 0;\n  width: 24px;\n  height: 24px;\n  padding: 0;\n  margin: 0 4px 0 0;\n  background-image: url(\"./img/jsoneditor-icons.svg\");\n  background-position: 0 -72px;\n}\n\n.jsoneditor-contextmenu .jsoneditor-icon {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 24px;\n  height: 24px;\n  border: none;\n  padding: 0;\n  margin: 0;\n  background-image: url(\"./img/jsoneditor-icons.svg\");\n}\n\n.jsoneditor-contextmenu .jsoneditor-text {\n  padding: 4px 0 4px 24px;\n  word-wrap: break-word;\n}\n\n.jsoneditor-contextmenu .jsoneditor-text.jsoneditor-right-margin {\n  padding-right: 24px;\n}\n\n.jsoneditor-contextmenu .jsoneditor-separator {\n  height: 0;\n  border-top: 1px solid #e5e5e5;\n  padding-top: 5px;\n  margin-top: 5px;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-remove .jsoneditor-icon {\n  background-position: -24px 0;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-append .jsoneditor-icon {\n  background-position: 0 0;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-insert .jsoneditor-icon {\n  background-position: 0 0;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-duplicate .jsoneditor-icon {\n  background-position: -48px 0;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-sort-asc .jsoneditor-icon {\n  background-position: -168px 0;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-sort-desc .jsoneditor-icon {\n  background-position: -192px 0;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-transform .jsoneditor-icon {\n  background-position: -216px 0;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-extract .jsoneditor-icon {\n  background-position: 0 -24px;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-type-string .jsoneditor-icon {\n  background-position: -144px 0;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-type-auto .jsoneditor-icon {\n  background-position: -120px 0;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-type-object .jsoneditor-icon {\n  background-position: -72px 0;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-type-array .jsoneditor-icon {\n  background-position: -96px 0;\n}\n\n.jsoneditor-contextmenu button.jsoneditor-type-modes .jsoneditor-icon {\n  background-image: none;\n  width: 6px;\n}\n\n.jsoneditor-contextmenu ul,\n.jsoneditor-contextmenu li {\n  box-sizing: content-box;\n  position: relative;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu button:hover,\n.jsoneditor-contextmenu .jsoneditor-menu button:focus {\n  color: #1a1a1a;\n  background-color: #f5f5f5;\n  outline: none;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected,\n.jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected:hover,\n.jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected:focus {\n  color: #ffffff;\n  background-color: #ee422e;\n}\n\n.jsoneditor-contextmenu .jsoneditor-menu li ul li button:hover,\n.jsoneditor-contextmenu .jsoneditor-menu li ul li button:focus {\n  background-color: #f5f5f5;\n}\n\n.jsoneditor-modal {\n  max-width: 95%;\n  border-radius: 2px !important;\n  padding: 45px 15px 15px 15px !important;\n  box-shadow: 2px 2px 12px rgba(128, 128, 128, 0.3);\n  color: #4d4d4d;\n  line-height: 1.3em;\n}\n\n.jsoneditor-modal.jsoneditor-modal-transform {\n  width: 600px !important;\n}\n\n.jsoneditor-modal .pico-modal-header {\n  position: absolute;\n  box-sizing: border-box;\n  top: 0;\n  left: 0;\n  width: 100%;\n  padding: 0 10px;\n  height: 30px;\n  line-height: 30px;\n  font-family: arial, sans-serif;\n  font-size: 11pt;\n  background: #3883fa;\n  color: #ffffff;\n}\n\n.jsoneditor-modal table {\n  width: 100%;\n}\n\n.jsoneditor-modal table td {\n  padding: 3px 0;\n}\n\n.jsoneditor-modal table td.jsoneditor-modal-input {\n  text-align: right;\n  padding-right: 0;\n  white-space: nowrap;\n}\n\n.jsoneditor-modal table td.jsoneditor-modal-actions {\n  padding-top: 15px;\n}\n\n.jsoneditor-modal table th {\n  vertical-align: middle;\n}\n\n.jsoneditor-modal p:first-child {\n  margin-top: 0;\n}\n\n.jsoneditor-modal a {\n  color: #3883fa;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-block {\n  margin-bottom: 10px;\n}\n\n.jsoneditor-modal .pico-close {\n  background: none !important;\n  font-size: 24px !important;\n  top: 7px !important;\n  right: 7px !important;\n  color: #ffffff;\n}\n\n.jsoneditor-modal input {\n  padding: 4px;\n}\n\n.jsoneditor-modal input[type=text] {\n  cursor: inherit;\n}\n\n.jsoneditor-modal input[disabled] {\n  background: #d3d3d3;\n  color: #808080;\n}\n\n.jsoneditor-modal .jsoneditor-select-wrapper {\n  position: relative;\n  display: inline-block;\n}\n\n.jsoneditor-modal .jsoneditor-select-wrapper:after {\n  content: \"\";\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-top: 6px solid #666;\n  position: absolute;\n  right: 8px;\n  top: 14px;\n  pointer-events: none;\n}\n\n.jsoneditor-modal select {\n  padding: 3px 24px 3px 10px;\n  min-width: 180px;\n  max-width: 350px;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  text-indent: 0;\n  text-overflow: \"\";\n  font-size: 14px;\n  line-height: 1.5em;\n}\n\n.jsoneditor-modal select::-ms-expand {\n  display: none;\n}\n\n.jsoneditor-modal .jsoneditor-button-group input {\n  padding: 4px 10px;\n  margin: 0;\n  border-radius: 0;\n  border-left-style: none;\n}\n\n.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-first {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n  border-left-style: solid;\n}\n\n.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-last {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n\n.jsoneditor-modal .jsoneditor-transform-preview {\n  background: #f5f5f5;\n  height: 200px;\n}\n\n.jsoneditor-modal .jsoneditor-transform-preview.jsoneditor-error {\n  color: #ee422e;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-wizard {\n  line-height: 1.2em;\n  width: 100%;\n  padding: 0;\n  border-radius: 3px;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-label {\n  font-weight: bold;\n  color: dodgerblue;\n  margin-top: 20px;\n  margin-bottom: 5px;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-wizard-table {\n  width: 100%;\n  border-collapse: collapse;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-wizard-label {\n  font-style: italic;\n  margin: 4px 0 2px 0;\n}\n\n.jsoneditor-modal .jsoneditor-inline {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n  padding-top: 2px;\n  padding-bottom: 2px;\n}\n\n.jsoneditor-modal .jsoneditor-inline:not(:last-child) {\n  padding-right: 2px;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-filter {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-filter-field {\n  width: 180px;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-filter-relation {\n  width: 100px;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-filter-value {\n  min-width: 180px;\n  flex: 1;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-sort-field {\n  width: 170px;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-sort-order {\n  width: 150px;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-select-fields {\n  width: 100%;\n}\n\n.jsoneditor-modal .selectr-selected {\n  border-color: #d3d3d3;\n  padding: 4px 28px 4px 8px;\n}\n\n.jsoneditor-modal .selectr-selected .selectr-tag {\n  background-color: #3883fa;\n  border-radius: 5px;\n}\n\n.jsoneditor-modal table th,\n.jsoneditor-modal table td {\n  text-align: left;\n  vertical-align: middle;\n  font-weight: normal;\n  color: #4d4d4d;\n  border-spacing: 0;\n  border-collapse: collapse;\n}\n\n.jsoneditor-modal select,\n.jsoneditor-modal textarea,\n.jsoneditor-modal input,\n.jsoneditor-modal input[type=text],\n.jsoneditor-modal input[type=text]:focus,\n.jsoneditor-modal #query {\n  background: #ffffff;\n  border: 1px solid #d3d3d3;\n  color: #4d4d4d;\n  border-radius: 3px;\n  padding: 4px;\n}\n\n.jsoneditor-modal textarea,\n.jsoneditor-modal #query {\n  border-radius: unset;\n}\n\n.jsoneditor-modal,\n.jsoneditor-modal table td,\n.jsoneditor-modal table th,\n.jsoneditor-modal select,\n.jsoneditor-modal option,\n.jsoneditor-modal textarea,\n.jsoneditor-modal input,\n.jsoneditor-modal input[type=text],\n.jsoneditor-modal #query {\n  font-size: 10.5pt;\n  font-family: arial, sans-serif;\n}\n\n.jsoneditor-modal #query,\n.jsoneditor-modal .jsoneditor-transform-preview {\n  font-family: consolas, menlo, monaco, \"Ubuntu Mono\", \"source-code-pro\", monospace;\n  font-size: 14px;\n  width: 100%;\n  box-sizing: border-box;\n}\n\n.jsoneditor-modal input[type=button],\n.jsoneditor-modal input[type=submit] {\n  background: #f5f5f5;\n  padding: 4px 20px;\n}\n\n.jsoneditor-modal select,\n.jsoneditor-modal input {\n  cursor: pointer;\n}\n\n.jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-asc input.jsoneditor-button-asc,\n.jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-desc input.jsoneditor-button-desc {\n  background: #3883fa;\n  border-color: #3883fa;\n  color: #ffffff;\n}\n\n.jsoneditor {\n  color: #1a1a1a;\n  border: thin solid #3883fa;\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  width: 100%;\n  height: 100%;\n  position: relative;\n  padding: 0;\n  line-height: 100%;\n}\n\ndiv.jsoneditor-field,\ndiv.jsoneditor-value,\na.jsoneditor-value,\ndiv.jsoneditor-readonly,\ndiv.jsoneditor-default {\n  border: 1px solid transparent;\n  min-height: 16px;\n  min-width: 32px;\n  line-height: 16px;\n  padding: 2px;\n  margin: 1px;\n  word-wrap: break-word;\n  word-break: break-word;\n  overflow-wrap: break-word;\n  float: left;\n}\n\ndiv.jsoneditor-field p,\ndiv.jsoneditor-value p {\n  margin: 0;\n}\n\ndiv.jsoneditor-value.jsoneditor-empty::after {\n  content: \"value\";\n}\n\ndiv.jsoneditor-value.jsoneditor-string {\n  color: #006000;\n}\n\ndiv.jsoneditor-value.jsoneditor-number {\n  color: #ee422e;\n}\n\ndiv.jsoneditor-value.jsoneditor-boolean {\n  color: #ff8c00;\n}\n\ndiv.jsoneditor-value.jsoneditor-null {\n  color: #004ed0;\n}\n\ndiv.jsoneditor-value.jsoneditor-color-value {\n  color: #1a1a1a;\n}\n\ndiv.jsoneditor-value.jsoneditor-invalid {\n  color: #1a1a1a;\n}\n\ndiv.jsoneditor-readonly {\n  min-width: 16px;\n  color: #808080;\n}\n\ndiv.jsoneditor-empty {\n  border-color: #d3d3d3;\n  border-style: dashed;\n  border-radius: 2px;\n}\n\ndiv.jsoneditor-field.jsoneditor-empty::after {\n  content: \"field\";\n}\n\ndiv.jsoneditor td {\n  vertical-align: top;\n}\n\ndiv.jsoneditor td.jsoneditor-separator {\n  padding: 3px 0;\n  vertical-align: top;\n  color: #808080;\n}\n\ndiv.jsoneditor td.jsoneditor-tree {\n  vertical-align: top;\n}\n\ndiv.jsoneditor.busy pre.jsoneditor-preview {\n  background: #f5f5f5;\n  color: #808080;\n}\n\ndiv.jsoneditor.busy div.jsoneditor-busy {\n  display: inherit;\n}\n\ndiv.jsoneditor code.jsoneditor-preview {\n  background: none;\n}\n\ndiv.jsoneditor.jsoneditor-mode-preview pre.jsoneditor-preview {\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n  overflow: auto;\n  padding: 2px;\n  margin: 0;\n  white-space: pre-wrap;\n  word-break: break-all;\n}\n\ndiv.jsoneditor-default {\n  color: #808080;\n  padding-left: 10px;\n}\n\ndiv.jsoneditor-tree {\n  width: 100%;\n  height: 100%;\n  position: relative;\n  overflow: auto;\n  background: #ffffff;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-button {\n  width: 24px;\n  height: 24px;\n  padding: 0;\n  margin: 0;\n  border: none;\n  cursor: pointer;\n  background-color: transparent;\n  background-image: url(\"./img/jsoneditor-icons.svg\");\n}\n\ndiv.jsoneditor-tree button.jsoneditor-button:focus {\n  background-color: #f5f5f5;\n  outline: #e5e5e5 solid 1px;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-collapsed {\n  background-position: 0 -48px;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-expanded {\n  background-position: 0 -72px;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-contextmenu-button {\n  background-position: -48px -72px;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-invisible {\n  visibility: hidden;\n  background: none;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-dragarea {\n  background-image: url(\"./img/jsoneditor-icons.svg\");\n  background-position: -72px -72px;\n  cursor: move;\n}\n\ndiv.jsoneditor-tree *:focus {\n  outline: none;\n}\n\ndiv.jsoneditor-tree div.jsoneditor-show-more {\n  display: inline-block;\n  padding: 3px 4px;\n  margin: 2px 0;\n  background-color: #e5e5e5;\n  border-radius: 3px;\n  color: #808080;\n  font-family: arial, sans-serif;\n  font-size: 14px;\n}\n\ndiv.jsoneditor-tree div.jsoneditor-show-more a {\n  display: inline-block;\n  color: #808080;\n}\n\ndiv.jsoneditor-tree div.jsoneditor-color {\n  display: inline-block;\n  width: 12px;\n  height: 12px;\n  margin: 4px;\n  border: 1px solid #808080;\n  cursor: pointer;\n}\n\ndiv.jsoneditor-tree div.jsoneditor-color.jsoneditor-color-readonly {\n  cursor: inherit;\n}\n\ndiv.jsoneditor-tree div.jsoneditor-date {\n  background: #a1a1a1;\n  color: #ffffff;\n  font-family: arial, sans-serif;\n  border-radius: 3px;\n  display: inline-block;\n  padding: 3px;\n  margin: 0 3px;\n}\n\ndiv.jsoneditor-tree table.jsoneditor-tree {\n  border-collapse: collapse;\n  border-spacing: 0;\n  width: 100%;\n}\n\ndiv.jsoneditor-tree .jsoneditor-button {\n  display: block;\n}\n\ndiv.jsoneditor-tree .jsoneditor-button.jsoneditor-schema-error {\n  width: 24px;\n  height: 24px;\n  padding: 0;\n  margin: 0 4px 0 0;\n  background-image: url(\"./img/jsoneditor-icons.svg\");\n  background-position: -168px -48px;\n  background-color: transparent;\n}\n\ndiv.jsoneditor-outer {\n  position: static;\n  width: 100%;\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n}\n\ndiv.jsoneditor-outer.has-nav-bar {\n  margin-top: -26px;\n  padding-top: 26px;\n}\n\ndiv.jsoneditor-outer.has-nav-bar.has-main-menu-bar {\n  margin-top: -61px;\n  padding-top: 61px;\n}\n\ndiv.jsoneditor-outer.has-status-bar {\n  margin-bottom: -26px;\n  padding-bottom: 26px;\n}\n\ndiv.jsoneditor-outer.has-main-menu-bar {\n  margin-top: -35px;\n  padding-top: 35px;\n}\n\ndiv.jsoneditor-busy {\n  position: absolute;\n  top: 15%;\n  left: 0;\n  box-sizing: border-box;\n  width: 100%;\n  text-align: center;\n  display: none;\n}\n\ndiv.jsoneditor-busy span {\n  background-color: #ffffab;\n  border: 1px solid #ffee00;\n  border-radius: 3px;\n  padding: 5px 15px;\n  box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);\n}\n\ndiv.jsoneditor-field.jsoneditor-empty::after,\ndiv.jsoneditor-value.jsoneditor-empty::after {\n  pointer-events: none;\n  color: #d3d3d3;\n  font-size: 8pt;\n}\n\ndiv.jsoneditor-value.jsoneditor-url,\na.jsoneditor-value.jsoneditor-url {\n  color: #006000;\n  text-decoration: underline;\n}\n\na.jsoneditor-value.jsoneditor-url {\n  display: inline-block;\n  padding: 2px;\n  margin: 2px;\n}\n\na.jsoneditor-value.jsoneditor-url:hover,\na.jsoneditor-value.jsoneditor-url:focus {\n  color: #ee422e;\n}\n\ndiv.jsoneditor-field[contenteditable=true]:focus,\ndiv.jsoneditor-field[contenteditable=true]:hover,\ndiv.jsoneditor-value[contenteditable=true]:focus,\ndiv.jsoneditor-value[contenteditable=true]:hover,\ndiv.jsoneditor-field.jsoneditor-highlight,\ndiv.jsoneditor-value.jsoneditor-highlight {\n  background-color: #ffffab;\n  border: 1px solid #ffee00;\n  border-radius: 2px;\n}\n\ndiv.jsoneditor-field.jsoneditor-highlight-active,\ndiv.jsoneditor-field.jsoneditor-highlight-active:focus,\ndiv.jsoneditor-field.jsoneditor-highlight-active:hover,\ndiv.jsoneditor-value.jsoneditor-highlight-active,\ndiv.jsoneditor-value.jsoneditor-highlight-active:focus,\ndiv.jsoneditor-value.jsoneditor-highlight-active:hover {\n  background-color: #ffee00;\n  border: 1px solid #ffc700;\n  border-radius: 2px;\n}\n\ndiv.jsoneditor-value.jsoneditor-object,\ndiv.jsoneditor-value.jsoneditor-array {\n  min-width: 16px;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-contextmenu-button:hover,\ndiv.jsoneditor-tree button.jsoneditor-contextmenu-button:focus,\ndiv.jsoneditor-tree button.jsoneditor-contextmenu-button.jsoneditor-selected,\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu-button {\n  background-position: -48px -48px;\n}\n\ndiv.jsoneditor-tree div.jsoneditor-show-more a:hover,\ndiv.jsoneditor-tree div.jsoneditor-show-more a:focus {\n  color: #ee422e;\n}\n\ntextarea.jsoneditor-text,\n.ace-jsoneditor {\n  min-height: 150px;\n}\n\ntextarea.jsoneditor-text.ace_editor,\n.ace-jsoneditor.ace_editor {\n  font-family: consolas, menlo, monaco, \"Ubuntu Mono\", \"source-code-pro\", monospace;\n}\n\ntextarea.jsoneditor-text {\n  width: 100%;\n  height: 100%;\n  margin: 0;\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  outline-width: 0;\n  border: none;\n  background-color: #ffffff;\n  resize: none;\n}\n\ntr.jsoneditor-highlight,\ntr.jsoneditor-selected {\n  background-color: #d3d3d3;\n}\n\ntr.jsoneditor-selected button.jsoneditor-dragarea,\ntr.jsoneditor-selected button.jsoneditor-contextmenu-button {\n  visibility: hidden;\n}\n\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea,\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu-button {\n  visibility: visible;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-dragarea:hover,\ndiv.jsoneditor-tree button.jsoneditor-dragarea:focus,\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea {\n  background-position: -72px -48px;\n}\n\ndiv.jsoneditor tr,\ndiv.jsoneditor th,\ndiv.jsoneditor td {\n  padding: 0;\n  margin: 0;\n}\n\ndiv.jsoneditor-field,\ndiv.jsoneditor-value,\ndiv.jsoneditor td,\ndiv.jsoneditor th,\ndiv.jsoneditor textarea,\npre.jsoneditor-preview,\n.jsoneditor-schema-error,\n.jsoneditor-popover {\n  font-family: consolas, menlo, monaco, \"Ubuntu Mono\", \"source-code-pro\", monospace;\n  font-size: 14px;\n  color: #1a1a1a;\n}\n\n.jsoneditor-schema-error {\n  cursor: default;\n  display: inline-block;\n  height: 24px;\n  line-height: 24px;\n  position: relative;\n  text-align: center;\n  width: 24px;\n}\n\n.jsoneditor-popover {\n  background-color: #4c4c4c;\n  border-radius: 3px;\n  box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);\n  color: #ffffff;\n  padding: 7px 10px;\n  position: absolute;\n  cursor: auto;\n  width: 200px;\n}\n\n.jsoneditor-popover.jsoneditor-above {\n  bottom: 32px;\n  left: -98px;\n}\n\n.jsoneditor-popover.jsoneditor-above:before {\n  border-top: 7px solid #4c4c4c;\n  bottom: -7px;\n}\n\n.jsoneditor-popover.jsoneditor-below {\n  top: 32px;\n  left: -98px;\n}\n\n.jsoneditor-popover.jsoneditor-below:before {\n  border-bottom: 7px solid #4c4c4c;\n  top: -7px;\n}\n\n.jsoneditor-popover.jsoneditor-left {\n  top: -7px;\n  right: 32px;\n}\n\n.jsoneditor-popover.jsoneditor-left:before {\n  border-left: 7px solid #4c4c4c;\n  border-top: 7px solid transparent;\n  border-bottom: 7px solid transparent;\n  content: \"\";\n  top: 19px;\n  right: -14px;\n  left: inherit;\n  margin-left: inherit;\n  margin-top: -7px;\n  position: absolute;\n}\n\n.jsoneditor-popover.jsoneditor-right {\n  top: -7px;\n  left: 32px;\n}\n\n.jsoneditor-popover.jsoneditor-right:before {\n  border-right: 7px solid #4c4c4c;\n  border-top: 7px solid transparent;\n  border-bottom: 7px solid transparent;\n  content: \"\";\n  top: 19px;\n  left: -14px;\n  margin-left: inherit;\n  margin-top: -7px;\n  position: absolute;\n}\n\n.jsoneditor-popover:before {\n  border-right: 7px solid transparent;\n  border-left: 7px solid transparent;\n  content: \"\";\n  display: block;\n  left: 50%;\n  margin-left: -7px;\n  position: absolute;\n}\n\n.jsoneditor-text-errors tr.jump-to-line:hover {\n  text-decoration: underline;\n  cursor: pointer;\n}\n\n.jsoneditor-schema-error:hover .jsoneditor-popover,\n.jsoneditor-schema-error:focus .jsoneditor-popover {\n  display: block;\n  animation: fade-in 0.3s linear 1, move-up 0.3s linear 1;\n}\n\n@keyframes fade-in {\n  from {\n    opacity: 0;\n  }\n\n  to {\n    opacity: 1;\n  }\n}\n\n/* JSON schema errors displayed at the bottom of the editor in mode text and code */\n\n.jsoneditor .jsoneditor-validation-errors-container {\n  max-height: 130px;\n  overflow-y: auto;\n}\n\n.jsoneditor .jsoneditor-validation-errors {\n  width: 100%;\n  overflow: hidden;\n}\n\n.jsoneditor .jsoneditor-additional-errors {\n  position: absolute;\n  margin: auto;\n  bottom: 31px;\n  left: calc(50% - 92px);\n  color: #808080;\n  background-color: #ebebeb;\n  padding: 7px 15px;\n  border-radius: 8px;\n}\n\n.jsoneditor .jsoneditor-additional-errors.visible {\n  visibility: visible;\n  opacity: 1;\n  transition: opacity 2s linear;\n}\n\n.jsoneditor .jsoneditor-additional-errors.hidden {\n  visibility: hidden;\n  opacity: 0;\n  transition: visibility 0s 2s, opacity 2s linear;\n}\n\n.jsoneditor .jsoneditor-text-errors {\n  width: 100%;\n  border-collapse: collapse;\n  border-top: 1px solid #ffc700;\n}\n\n.jsoneditor .jsoneditor-text-errors td {\n  padding: 3px 6px;\n  vertical-align: middle;\n}\n\n.jsoneditor .jsoneditor-text-errors td pre {\n  margin: 0;\n  white-space: pre-wrap;\n}\n\n.jsoneditor .jsoneditor-text-errors tr {\n  background-color: #ffffab;\n}\n\n.jsoneditor .jsoneditor-text-errors tr.parse-error {\n  background-color: rgba(238, 46, 46, 0.4392156863);\n}\n\n.jsoneditor-text-errors .jsoneditor-schema-error {\n  border: none;\n  width: 24px;\n  height: 24px;\n  padding: 0;\n  margin: 0 4px 0 0;\n  cursor: pointer;\n}\n\n.jsoneditor-text-errors tr .jsoneditor-schema-error {\n  background-image: url(\"./img/jsoneditor-icons.svg\");\n  background-position: -168px -48px;\n  background-color: transparent;\n}\n\n.jsoneditor-text-errors tr.parse-error .jsoneditor-schema-error {\n  background-image: url(\"./img/jsoneditor-icons.svg\");\n  background-position: -25px 0px;\n  background-color: transparent;\n}\n\n.jsoneditor-anchor {\n  cursor: pointer;\n}\n\n.jsoneditor-anchor .picker_wrapper.popup.popup_bottom {\n  top: 28px;\n  left: -10px;\n}\n\n.fadein {\n  -webkit-animation: fadein 0.3s;\n  animation: fadein 0.3s;\n  -moz-animation: fadein 0.3s;\n  -o-animation: fadein 0.3s;\n}\n\n@keyframes fadein {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n.jsoneditor-modal input[type=search].selectr-input {\n  border: 1px solid #d3d3d3;\n  width: calc(100% - 4px);\n  margin: 2px;\n  padding: 4px;\n  box-sizing: border-box;\n}\n\n.jsoneditor-modal button.selectr-input-clear {\n  right: 8px;\n}\n\n.jsoneditor-menu {\n  width: 100%;\n  height: 35px;\n  padding: 2px;\n  margin: 0;\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  color: #ffffff;\n  background-color: #3883fa;\n  border-bottom: 1px solid #3883fa;\n}\n\n.jsoneditor-menu > button,\n.jsoneditor-menu > .jsoneditor-modes > button {\n  width: 26px;\n  height: 26px;\n  margin: 2px;\n  padding: 0;\n  border-radius: 2px;\n  border: 1px solid transparent;\n  background-color: transparent;\n  background-image: url(\"./img/jsoneditor-icons.svg\");\n  color: #ffffff;\n  opacity: 0.8;\n  font-family: arial, sans-serif;\n  font-size: 14px;\n  float: left;\n}\n\n.jsoneditor-menu > button:hover,\n.jsoneditor-menu > .jsoneditor-modes > button:hover {\n  background-color: rgba(255, 255, 255, 0.2);\n  border: 1px solid rgba(255, 255, 255, 0.4);\n}\n\n.jsoneditor-menu > button:focus,\n.jsoneditor-menu > button:active,\n.jsoneditor-menu > .jsoneditor-modes > button:focus,\n.jsoneditor-menu > .jsoneditor-modes > button:active {\n  background-color: rgba(255, 255, 255, 0.3);\n}\n\n.jsoneditor-menu > button:disabled,\n.jsoneditor-menu > .jsoneditor-modes > button:disabled {\n  opacity: 0.5;\n  background-color: transparent;\n  border: none;\n}\n\n.jsoneditor-menu > button.jsoneditor-collapse-all {\n  background-position: 0 -96px;\n}\n\n.jsoneditor-menu > button.jsoneditor-expand-all {\n  background-position: 0 -120px;\n}\n\n.jsoneditor-menu > button.jsoneditor-sort {\n  background-position: -120px -96px;\n}\n\n.jsoneditor-menu > button.jsoneditor-transform {\n  background-position: -144px -96px;\n}\n\n.jsoneditor.jsoneditor-mode-view > .jsoneditor-menu > button.jsoneditor-sort,\n.jsoneditor.jsoneditor-mode-form > .jsoneditor-menu > button.jsoneditor-sort,\n.jsoneditor.jsoneditor-mode-view > .jsoneditor-menu > button.jsoneditor-transform,\n.jsoneditor.jsoneditor-mode-form > .jsoneditor-menu > button.jsoneditor-transform {\n  display: none;\n}\n\n.jsoneditor-menu > button.jsoneditor-undo {\n  background-position: -24px -96px;\n}\n\n.jsoneditor-menu > button.jsoneditor-undo:disabled {\n  background-position: -24px -120px;\n}\n\n.jsoneditor-menu > button.jsoneditor-redo {\n  background-position: -48px -96px;\n}\n\n.jsoneditor-menu > button.jsoneditor-redo:disabled {\n  background-position: -48px -120px;\n}\n\n.jsoneditor-menu > button.jsoneditor-compact {\n  background-position: -72px -96px;\n}\n\n.jsoneditor-menu > button.jsoneditor-format {\n  background-position: -72px -120px;\n}\n\n.jsoneditor-menu > button.jsoneditor-repair {\n  background-position: -96px -96px;\n}\n\n.jsoneditor-menu > .jsoneditor-modes {\n  display: inline-block;\n  float: left;\n}\n\n.jsoneditor-menu > .jsoneditor-modes > button {\n  background-image: none;\n  width: auto;\n  padding-left: 6px;\n  padding-right: 6px;\n}\n\n.jsoneditor-menu > button.jsoneditor-separator,\n.jsoneditor-menu > .jsoneditor-modes > button.jsoneditor-separator {\n  margin-left: 10px;\n}\n\n.jsoneditor-menu a {\n  font-family: arial, sans-serif;\n  font-size: 14px;\n  color: #ffffff;\n  opacity: 0.8;\n  vertical-align: middle;\n}\n\n.jsoneditor-menu a:hover {\n  opacity: 1;\n}\n\n.jsoneditor-menu a.jsoneditor-poweredBy {\n  font-size: 8pt;\n  position: absolute;\n  right: 0;\n  top: 0;\n  padding: 10px;\n}\n\n.jsoneditor-navigation-bar {\n  width: 100%;\n  height: 26px;\n  line-height: 26px;\n  padding: 0;\n  margin: 0;\n  border-bottom: 1px solid #d3d3d3;\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  color: #808080;\n  background-color: #ebebeb;\n  overflow: hidden;\n  font-family: arial, sans-serif;\n  font-size: 14px;\n}\n\n.jsoneditor-search {\n  font-family: arial, sans-serif;\n  position: absolute;\n  right: 4px;\n  top: 4px;\n  border-collapse: collapse;\n  border-spacing: 0;\n  display: flex;\n}\n\n.jsoneditor-search input {\n  color: #1a1a1a;\n  width: 120px;\n  border: none;\n  outline: none;\n  margin: 1px;\n  line-height: 20px;\n  font-family: arial, sans-serif;\n}\n\n.jsoneditor-search button {\n  width: 16px;\n  height: 24px;\n  padding: 0;\n  margin: 0;\n  border: none;\n  background: url(\"./img/jsoneditor-icons.svg\");\n  vertical-align: top;\n}\n\n.jsoneditor-search button:hover {\n  background-color: transparent;\n}\n\n.jsoneditor-search button.jsoneditor-refresh {\n  width: 18px;\n  background-position: -99px -73px;\n}\n\n.jsoneditor-search button.jsoneditor-next {\n  cursor: pointer;\n  background-position: -124px -73px;\n}\n\n.jsoneditor-search button.jsoneditor-next:hover {\n  background-position: -124px -49px;\n}\n\n.jsoneditor-search button.jsoneditor-previous {\n  cursor: pointer;\n  background-position: -148px -73px;\n  margin-right: 2px;\n}\n\n.jsoneditor-search button.jsoneditor-previous:hover {\n  background-position: -148px -49px;\n}\n\n.jsoneditor-results {\n  font-family: arial, sans-serif;\n  color: #ffffff;\n  padding-right: 5px;\n  line-height: 26px;\n}\n\n.jsoneditor-frame {\n  border: 1px solid transparent;\n  background-color: #ffffff;\n  padding: 0 2px;\n  margin: 0;\n}\n\n.jsoneditor-statusbar {\n  line-height: 26px;\n  height: 26px;\n  color: #808080;\n  background-color: #ebebeb;\n  border-top: 1px solid #d3d3d3;\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  font-size: 14px;\n}\n\n.jsoneditor-statusbar > .jsoneditor-curserinfo-val {\n  margin-right: 12px;\n}\n\n.jsoneditor-statusbar > .jsoneditor-curserinfo-count {\n  margin-left: 4px;\n}\n\n.jsoneditor-statusbar > .jsoneditor-validation-error-icon {\n  float: right;\n  width: 24px;\n  height: 24px;\n  padding: 0;\n  margin-top: 1px;\n  background-image: url(\"./img/jsoneditor-icons.svg\");\n  background-position: -168px -48px;\n  cursor: pointer;\n}\n\n.jsoneditor-statusbar > .jsoneditor-validation-error-count {\n  float: right;\n  margin: 0 4px 0 0;\n  cursor: pointer;\n}\n\n.jsoneditor-statusbar > .jsoneditor-parse-error-icon {\n  float: right;\n  width: 24px;\n  height: 24px;\n  padding: 0;\n  margin: 1px;\n  background-image: url(\"./img/jsoneditor-icons.svg\");\n  background-position: -25px 0px;\n}\n\n.jsoneditor-statusbar .jsoneditor-array-info a {\n  color: inherit;\n}\n\ndiv.jsoneditor-statusbar > .jsoneditor-curserinfo-label,\ndiv.jsoneditor-statusbar > .jsoneditor-size-info {\n  margin: 0 4px;\n}\n\n.jsoneditor-treepath {\n  padding: 0 5px;\n  overflow: hidden;\n  white-space: nowrap;\n  outline: none;\n}\n\n.jsoneditor-treepath.show-all {\n  word-wrap: break-word;\n  white-space: normal;\n  position: absolute;\n  background-color: #ebebeb;\n  z-index: 1;\n  box-shadow: 2px 2px 12px rgba(128, 128, 128, 0.3);\n}\n\n.jsoneditor-treepath.show-all span.jsoneditor-treepath-show-all-btn {\n  display: none;\n}\n\n.jsoneditor-treepath div.jsoneditor-contextmenu-root {\n  position: absolute;\n  left: 0;\n}\n\n.jsoneditor-treepath .jsoneditor-treepath-show-all-btn {\n  position: absolute;\n  background-color: #ebebeb;\n  left: 0;\n  height: 20px;\n  padding: 0 3px;\n  cursor: pointer;\n}\n\n.jsoneditor-treepath .jsoneditor-treepath-element {\n  margin: 1px;\n  font-family: arial, sans-serif;\n  font-size: 14px;\n}\n\n.jsoneditor-treepath .jsoneditor-treepath-seperator {\n  margin: 2px;\n  font-size: 9pt;\n  font-family: arial, sans-serif;\n}\n\n.jsoneditor-treepath span.jsoneditor-treepath-element:hover,\n.jsoneditor-treepath span.jsoneditor-treepath-seperator:hover {\n  cursor: pointer;\n  text-decoration: underline;\n}\n\n/*!\n * Selectr 2.4.13\n * http://mobius.ovh/docs/selectr\n *\n * Released under the MIT license\n */\n\n.selectr-container {\n  position: relative;\n}\n\n.selectr-container li {\n  list-style: none;\n}\n\n.selectr-hidden {\n  position: absolute;\n  overflow: hidden;\n  clip: rect(0px, 0px, 0px, 0px);\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  border: 0 none;\n}\n\n.selectr-visible {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0;\n  z-index: 11;\n}\n\n.selectr-desktop.multiple .selectr-visible {\n  display: none;\n}\n\n.selectr-desktop.multiple.native-open .selectr-visible {\n  top: 100%;\n  min-height: 200px !important;\n  height: auto;\n  opacity: 1;\n  display: block;\n}\n\n.selectr-container.multiple.selectr-mobile .selectr-selected {\n  z-index: 0;\n}\n\n.selectr-selected {\n  position: relative;\n  z-index: 1;\n  box-sizing: border-box;\n  width: 100%;\n  padding: 7px 28px 7px 14px;\n  cursor: pointer;\n  border: 1px solid #999999;\n  border-radius: 3px;\n  background-color: #ffffff;\n}\n\n.selectr-selected::before {\n  position: absolute;\n  top: 50%;\n  right: 10px;\n  width: 0;\n  height: 0;\n  content: \"\";\n  -o-transform: rotate(0deg) translate3d(0px, -50%, 0px);\n  -ms-transform: rotate(0deg) translate3d(0px, -50%, 0px);\n  -moz-transform: rotate(0deg) translate3d(0px, -50%, 0px);\n  -webkit-transform: rotate(0deg) translate3d(0px, -50%, 0px);\n  transform: rotate(0deg) translate3d(0px, -50%, 0px);\n  border-width: 4px 4px 0 4px;\n  border-style: solid;\n  border-color: #6c7a86 transparent transparent;\n}\n\n.selectr-container.open .selectr-selected::before,\n.selectr-container.native-open .selectr-selected::before {\n  border-width: 0 4px 4px 4px;\n  border-style: solid;\n  border-color: transparent transparent #6c7a86;\n}\n\n.selectr-label {\n  display: none;\n  overflow: hidden;\n  width: 100%;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.selectr-placeholder {\n  color: #6c7a86;\n}\n\n.selectr-tags {\n  margin: 0;\n  padding: 0;\n  white-space: normal;\n}\n\n.has-selected .selectr-tags {\n  margin: 0 0 -2px;\n}\n\n.selectr-tag {\n  list-style: none;\n  position: relative;\n  float: left;\n  padding: 2px 25px 2px 8px;\n  margin: 0 2px 2px 0;\n  cursor: default;\n  color: #ffffff;\n  border: medium none;\n  border-radius: 10px;\n  background: #acb7bf none repeat scroll 0 0;\n}\n\n.selectr-container.multiple.has-selected .selectr-selected {\n  padding: 5px 28px 5px 5px;\n}\n\n.selectr-options-container {\n  position: absolute;\n  z-index: 10000;\n  top: calc(100% - 1px);\n  left: 0;\n  display: none;\n  box-sizing: border-box;\n  width: 100%;\n  border-width: 0 1px 1px;\n  border-style: solid;\n  border-color: transparent #999999 #999999;\n  border-radius: 0 0 3px 3px;\n  background-color: #ffffff;\n}\n\n.selectr-container.open .selectr-options-container {\n  display: block;\n}\n\n.selectr-input-container {\n  position: relative;\n  display: none;\n}\n\n.selectr-clear,\n.selectr-input-clear,\n.selectr-tag-remove {\n  position: absolute;\n  top: 50%;\n  right: 22px;\n  width: 20px;\n  height: 20px;\n  padding: 0;\n  cursor: pointer;\n  -o-transform: translate3d(0px, -50%, 0px);\n  -ms-transform: translate3d(0px, -50%, 0px);\n  -moz-transform: translate3d(0px, -50%, 0px);\n  -webkit-transform: translate3d(0px, -50%, 0px);\n  transform: translate3d(0px, -50%, 0px);\n  border: medium none;\n  background-color: transparent;\n  z-index: 11;\n}\n\n.selectr-clear,\n.selectr-input-clear {\n  display: none;\n}\n\n.selectr-container.has-selected .selectr-clear,\n.selectr-input-container.active .selectr-input-clear {\n  display: block;\n}\n\n.selectr-selected .selectr-tag-remove {\n  right: 2px;\n}\n\n.selectr-clear::before,\n.selectr-clear::after,\n.selectr-input-clear::before,\n.selectr-input-clear::after,\n.selectr-tag-remove::before,\n.selectr-tag-remove::after {\n  position: absolute;\n  top: 5px;\n  left: 9px;\n  width: 2px;\n  height: 10px;\n  content: \" \";\n  background-color: #6c7a86;\n}\n\n.selectr-tag-remove::before,\n.selectr-tag-remove::after {\n  top: 4px;\n  width: 3px;\n  height: 12px;\n  background-color: #ffffff;\n}\n\n.selectr-clear:before,\n.selectr-input-clear::before,\n.selectr-tag-remove::before {\n  -o-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n\n.selectr-clear:after,\n.selectr-input-clear::after,\n.selectr-tag-remove::after {\n  -o-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n  -moz-transform: rotate(-45deg);\n  -webkit-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n\n.selectr-input-container.active,\n.selectr-input-container.active .selectr-clear {\n  display: block;\n}\n\n.selectr-input {\n  top: 5px;\n  left: 5px;\n  box-sizing: border-box;\n  width: calc(100% - 30px);\n  margin: 10px 15px;\n  padding: 7px 30px 7px 9px;\n  border: 1px solid #999999;\n  border-radius: 3px;\n}\n\n.selectr-notice {\n  display: none;\n  box-sizing: border-box;\n  width: 100%;\n  padding: 8px 16px;\n  border-top: 1px solid #999999;\n  border-radius: 0 0 3px 3px;\n  background-color: #ffffff;\n}\n\n.selectr-container.notice .selectr-notice {\n  display: block;\n}\n\n.selectr-container.notice .selectr-selected {\n  border-radius: 3px 3px 0 0;\n}\n\n.selectr-options {\n  position: relative;\n  top: calc(100% + 2px);\n  display: none;\n  overflow-x: auto;\n  overflow-y: scroll;\n  max-height: 200px;\n  margin: 0;\n  padding: 0;\n}\n\n.selectr-container.open .selectr-options,\n.selectr-container.open .selectr-input-container,\n.selectr-container.notice .selectr-options-container {\n  display: block;\n}\n\n.selectr-option {\n  position: relative;\n  display: block;\n  padding: 5px 20px;\n  list-style: outside none none;\n  cursor: pointer;\n  font-weight: normal;\n}\n\n.selectr-options.optgroups > .selectr-option {\n  padding-left: 25px;\n}\n\n.selectr-optgroup {\n  font-weight: bold;\n  padding: 0;\n}\n\n.selectr-optgroup--label {\n  font-weight: bold;\n  margin-top: 10px;\n  padding: 5px 15px;\n}\n\n.selectr-match {\n  text-decoration: underline;\n}\n\n.selectr-option.selected {\n  background-color: #ddd;\n}\n\n.selectr-option.active {\n  color: #ffffff;\n  background-color: #5897fb;\n}\n\n.selectr-option.disabled {\n  opacity: 0.4;\n}\n\n.selectr-option.excluded {\n  display: none;\n}\n\n.selectr-container.open .selectr-selected {\n  border-color: #999999 #999999 transparent #999999;\n  border-radius: 3px 3px 0 0;\n}\n\n.selectr-container.open .selectr-selected::after {\n  -o-transform: rotate(180deg) translate3d(0px, 50%, 0px);\n  -ms-transform: rotate(180deg) translate3d(0px, 50%, 0px);\n  -moz-transform: rotate(180deg) translate3d(0px, 50%, 0px);\n  -webkit-transform: rotate(180deg) translate3d(0px, 50%, 0px);\n  transform: rotate(180deg) translate3d(0px, 50%, 0px);\n}\n\n.selectr-disabled {\n  opacity: 0.6;\n}\n\n.selectr-empty,\n.has-selected .selectr-placeholder {\n  display: none;\n}\n\n.has-selected .selectr-label {\n  display: block;\n}\n\n/* TAGGABLE */\n\n.taggable .selectr-selected {\n  padding: 4px 28px 4px 4px;\n}\n\n.taggable .selectr-selected::after {\n  display: table;\n  content: \" \";\n  clear: both;\n}\n\n.taggable .selectr-label {\n  width: auto;\n}\n\n.taggable .selectr-tags {\n  float: left;\n  display: block;\n}\n\n.taggable .selectr-placeholder {\n  display: none;\n}\n\n.input-tag {\n  float: left;\n  min-width: 90px;\n  width: auto;\n}\n\n.selectr-tag-input {\n  border: medium none;\n  padding: 3px 10px;\n  width: 100%;\n  font-family: inherit;\n  font-weight: inherit;\n  font-size: inherit;\n}\n\n.selectr-input-container.loading::after {\n  position: absolute;\n  top: 50%;\n  right: 20px;\n  width: 20px;\n  height: 20px;\n  content: \"\";\n  -o-transform: translate3d(0px, -50%, 0px);\n  -ms-transform: translate3d(0px, -50%, 0px);\n  -moz-transform: translate3d(0px, -50%, 0px);\n  -webkit-transform: translate3d(0px, -50%, 0px);\n  transform: translate3d(0px, -50%, 0px);\n  -o-transform-origin: 50% 0 0;\n  -ms-transform-origin: 50% 0 0;\n  -moz-transform-origin: 50% 0 0;\n  -webkit-transform-origin: 50% 0 0;\n  transform-origin: 50% 0 0;\n  -moz-animation: 500ms linear 0s normal forwards infinite running selectr-spin;\n  -webkit-animation: 500ms linear 0s normal forwards infinite running selectr-spin;\n  animation: 500ms linear 0s normal forwards infinite running selectr-spin;\n  border-width: 3px;\n  border-style: solid;\n  border-color: #aaa #ddd #ddd;\n  border-radius: 50%;\n}\n\n@-webkit-keyframes selectr-spin {\n  0% {\n    -webkit-transform: rotate(0deg) translate3d(0px, -50%, 0px);\n    transform: rotate(0deg) translate3d(0px, -50%, 0px);\n  }\n\n  100% {\n    -webkit-transform: rotate(360deg) translate3d(0px, -50%, 0px);\n    transform: rotate(360deg) translate3d(0px, -50%, 0px);\n  }\n}\n\n@keyframes selectr-spin {\n  0% {\n    -webkit-transform: rotate(0deg) translate3d(0px, -50%, 0px);\n    transform: rotate(0deg) translate3d(0px, -50%, 0px);\n  }\n\n  100% {\n    -webkit-transform: rotate(360deg) translate3d(0px, -50%, 0px);\n    transform: rotate(360deg) translate3d(0px, -50%, 0px);\n  }\n}\n\n.selectr-container.open.inverted .selectr-selected {\n  border-color: transparent #999999 #999999;\n  border-radius: 0 0 3px 3px;\n}\n\n.selectr-container.inverted .selectr-options-container {\n  border-width: 1px 1px 0;\n  border-color: #999999 #999999 transparent;\n  border-radius: 3px 3px 0 0;\n  background-color: #ffffff;\n}\n\n.selectr-container.inverted .selectr-options-container {\n  top: auto;\n  bottom: calc(100% - 1px);\n}\n\n.selectr-container ::-webkit-input-placeholder {\n  color: #6c7a86;\n  opacity: 1;\n}\n\n.selectr-container ::-moz-placeholder {\n  color: #6c7a86;\n  opacity: 1;\n}\n\n.selectr-container :-ms-input-placeholder {\n  color: #6c7a86;\n  opacity: 1;\n}\n\n.selectr-container ::placeholder {\n  color: #6c7a86;\n  opacity: 1;\n}","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport { confirm } from '@girder/core/dialog';\nimport events from '@girder/core/events';\nimport { localeSort } from '@girder/core/misc';\n\nimport JsonMetadatumEditWidgetTemplate from '@girder/core/templates/widgets/jsonMetadatumEditWidget.pug';\nimport JsonMetadatumViewTemplate from '@girder/core/templates/widgets/jsonMetadatumView.pug';\nimport MetadataWidgetTemplate from '@girder/core/templates/widgets/metadataWidget.pug';\nimport MetadatumEditWidgetTemplate from '@girder/core/templates/widgets/metadatumEditWidget.pug';\nimport MetadatumViewTemplate from '@girder/core/templates/widgets/metadatumView.pug';\n\nimport '@girder/core/stylesheets/widgets/metadataWidget.styl';\n\nimport JSONEditor from 'jsoneditor/dist/jsoneditor.js'; // can't 'jsoneditor'\nimport 'jsoneditor/dist/jsoneditor.css';\n\nimport 'bootstrap/js/dropdown';\n\nvar MetadatumWidget = View.extend({\n    className: 'g-widget-metadata-row',\n\n    events: {\n        'click .g-widget-metadata-edit-button': 'editMetadata'\n    },\n\n    initialize: function (settings) {\n        if (!_.has(this.parentView.modes, settings.mode)) {\n            throw new Error('Unsupported metadatum mode ' + settings.mode + ' detected.');\n        }\n\n        this.mode = settings.mode;\n        this.key = settings.key;\n        this.value = settings.value;\n        this.accessLevel = settings.accessLevel;\n        this.parentView = settings.parentView;\n        this.fieldName = settings.fieldName;\n        this.apiPath = settings.apiPath;\n        this.onMetadataEdited = settings.onMetadataEdited;\n        this.onMetadataAdded = settings.onMetadataAdded;\n    },\n\n    _validate: function (from, to, value) {\n        var newMode = this.parentView.modes[to];\n\n        if (_.has(newMode, 'validation') &&\n            _.has(newMode.validation, 'from') &&\n            _.has(newMode.validation.from, from)) {\n            var validate = newMode.validation.from[from][0];\n            var msg = newMode.validation.from[from][1];\n\n            if (!validate(value)) {\n                events.trigger('g:alert', {\n                    text: msg,\n                    type: 'warning'\n                });\n                return false;\n            }\n        }\n\n        return true;\n    },\n\n    // @todo too much duplication with editMetadata\n    toggleEditor: function (event, newEditorMode, existingEditor, overrides) {\n        var fromEditorMode = (existingEditor instanceof JsonMetadatumEditWidget) ? 'json' : 'simple';\n        var newValue = (overrides || {}).value || existingEditor.$el.attr('g-value');\n        if (!this._validate(fromEditorMode, newEditorMode, newValue)) {\n            return;\n        }\n\n        var row = existingEditor.$el;\n        existingEditor.destroy();\n        row.addClass('editing').empty();\n\n        var opts = _.extend({\n            el: row,\n            item: this.parentView.item,\n            key: row.attr('g-key'),\n            value: row.attr('g-value'),\n            accessLevel: this.accessLevel,\n            newDatum: false,\n            parentView: this,\n            fieldName: this.fieldName,\n            apiPath: this.apiPath,\n            onMetadataEdited: this.onMetadataEdited,\n            onMetadataAdded: this.onMetadataAdded\n        }, overrides || {});\n\n        this.parentView.modes[newEditorMode].editor(opts).render();\n    },\n\n    editMetadata: function () {\n        this.$el.addClass('editing');\n        this.$el.empty();\n\n        var opts = {\n            item: this.parentView.item,\n            key: this.$el.attr('g-key'),\n            value: this.$el.attr('g-value'),\n            accessLevel: this.accessLevel,\n            newDatum: false,\n            parentView: this,\n            fieldName: this.fieldName,\n            apiPath: this.apiPath,\n            onMetadataEdited: this.onMetadataEdited,\n            onMetadataAdded: this.onMetadataAdded\n        };\n\n        // If they're trying to open false, null, 6, etc which are not stored as strings\n        if (this.mode === 'json') {\n            try {\n                var jsonValue = JSON.parse(this.$el.attr('g-value'));\n\n                if (jsonValue !== undefined && !_.isObject(jsonValue)) {\n                    opts.value = jsonValue;\n                }\n            } catch (e) {\n                // ignore\n            }\n        }\n\n        this.parentView.modes[this.mode].editor(opts)\n            .render()\n            .$el.appendTo(this.$el);\n    },\n\n    render: function () {\n        this.$el.attr({\n            'g-key': this.key,\n            'g-value': _.bind(this.parentView.modes[this.mode].displayValue, this)()\n        }).empty();\n\n        this.$el.html(this.parentView.modes[this.mode].template({\n            key: this.key,\n            value: _.bind(this.parentView.modes[this.mode].displayValue, this)(),\n            accessLevel: this.accessLevel,\n            AccessType: AccessType\n        }));\n\n        return this;\n    }\n});\n\nvar MetadatumEditWidget = View.extend({\n    events: {\n        'click .g-widget-metadata-cancel-button': 'cancelEdit',\n        'click .g-widget-metadata-save-button': 'save',\n        'click .g-widget-metadata-delete-button': 'deleteMetadatum',\n        'click .g-widget-metadata-toggle-button': function (event) {\n            var editorType;\n            // @todo modal\n            // in the future this event will have the new editorType (assuming a dropdown)\n            if (this instanceof JsonMetadatumEditWidget) {\n                editorType = 'simple';\n            } else {\n                editorType = 'json';\n            }\n\n            this.parentView.toggleEditor(event, editorType, this, {\n                // Save state before toggling editor\n                key: this.$el.find('.g-widget-metadata-key-input').val(),\n                value: this.getCurrentValue()\n            });\n        }\n    },\n\n    initialize: function (settings) {\n        this.item = settings.item;\n        this.key = settings.key || '';\n        this.fieldName = settings.fieldName || 'meta';\n        this.value = (settings.value !== undefined) ? settings.value : '';\n        this.accessLevel = settings.accessLevel;\n        this.newDatum = settings.newDatum;\n        this.fieldName = settings.fieldName;\n        this.apiPath = settings.apiPath;\n        this.onMetadataEdited = settings.onMetadataEdited;\n        this.onMetadataAdded = settings.onMetadataAdded;\n    },\n\n    editTemplate: MetadatumEditWidgetTemplate,\n\n    getCurrentValue: function () {\n        return this.$el.find('.g-widget-metadata-value-input').val();\n    },\n\n    deleteMetadatum: function (event) {\n        event.stopImmediatePropagation();\n        const target = $(event.currentTarget);\n        var metadataList = target.parent().parent();\n        var params = {\n            text: 'Are you sure you want to delete the metadatum <b>' +\n                _.escape(this.key) + '</b>?',\n            escapedHtml: true,\n            yesText: 'Delete',\n            confirmCallback: () => {\n                this.item.removeMetadata(this.key, function () {\n                    metadataList.remove();\n                }, null, {\n                    field: this.fieldName,\n                    path: this.apiPath\n                });\n            }\n        };\n        confirm(params);\n    },\n\n    cancelEdit: function (event) {\n        event.stopImmediatePropagation();\n        const target = $(event.currentTarget);\n        var curRow = target.parent().parent();\n        if (this.newDatum) {\n            curRow.remove();\n        } else {\n            this.parentView.render();\n        }\n    },\n\n    save: function (event, value) {\n        event.stopImmediatePropagation();\n        const target = $(event.currentTarget);\n        var curRow = target.parent(),\n            tempKey = curRow.find('.g-widget-metadata-key-input').val(),\n            tempValue = (value !== undefined) ? value : curRow.find('.g-widget-metadata-value-input').val();\n\n        if (this.newDatum && tempKey === '') {\n            events.trigger('g:alert', {\n                text: 'A key is required for all metadata.',\n                type: 'warning'\n            });\n            return;\n        }\n\n        var saveCallback = () => {\n            this.key = tempKey;\n            this.value = tempValue;\n\n            this.parentView.key = this.key;\n            this.parentView.value = this.value;\n\n            if (this instanceof JsonMetadatumEditWidget) {\n                this.parentView.mode = 'json';\n            } else {\n                this.parentView.mode = 'simple';\n            }\n\n            this.parentView.render();\n\n            this.newDatum = false;\n        };\n\n        var errorCallback = function (out) {\n            events.trigger('g:alert', {\n                text: out.message,\n                type: 'danger'\n            });\n        };\n\n        if (this.newDatum) {\n            if (this.onMetadataAdded) {\n                this.onMetadataAdded(tempKey, tempValue, saveCallback, errorCallback);\n            } else {\n                this.item.addMetadata(tempKey, tempValue, saveCallback, errorCallback, {\n                    field: this.fieldName,\n                    path: this.apiPath\n                });\n            }\n        } else {\n            if (this.onMetadataEdited) {\n                this.onMetadataEdited(tempKey, this.key, tempValue, saveCallback, errorCallback);\n            } else {\n                this.item.editMetadata(tempKey, this.key, tempValue, saveCallback, errorCallback, {\n                    field: this.fieldName,\n                    path: this.apiPath\n                });\n            }\n        }\n    },\n\n    render: function () {\n        this.$el.html(this.editTemplate({\n            item: this.item,\n            key: this.key,\n            value: this.value,\n            accessLevel: this.accessLevel,\n            newDatum: this.newDatum,\n            AccessType: AccessType\n        }));\n        this.$el.find('.g-widget-metadata-key-input').trigger('focus');\n\n        return this;\n    }\n});\n\nvar JsonMetadatumEditWidget = MetadatumEditWidget.extend({\n    editTemplate: JsonMetadatumEditWidgetTemplate,\n\n    getCurrentValue: function () {\n        return this.editor.getText();\n    },\n\n    save: function (event) {\n        try {\n            MetadatumEditWidget.prototype.save.call(\n                this, event, this.editor.get());\n        } catch (err) {\n            events.trigger('g:alert', {\n                text: 'The field contains invalid JSON and can not be saved.',\n                type: 'warning'\n            });\n        }\n    },\n\n    render: function () {\n        MetadatumEditWidget.prototype.render.apply(this, arguments);\n\n        const jsonEditorEl = this.$el.find('.g-json-editor');\n        this.editor = new JSONEditor(jsonEditorEl[0], {\n            mode: 'tree',\n            modes: ['code', 'tree'],\n            onError: () => {\n                events.trigger('g:alert', {\n                    text: 'The field contains invalid JSON and can not be viewed in Tree Mode.',\n                    type: 'warning'\n                });\n            }\n        });\n\n        if (this.value !== undefined) {\n            this.editor.setText(JSON.stringify(this.value));\n            this.editor.expandAll();\n        }\n\n        return this;\n    }\n});\n\n/**\n * This widget shows a list of metadata in a given item.\n */\nvar MetadataWidget = View.extend({\n    events: {\n        'click .g-add-json-metadata': function (event) {\n            this.addMetadata(event, 'json');\n        },\n        'click .g-add-simple-metadata': function (event) {\n            this.addMetadata(event, 'simple');\n        }\n    },\n\n    /**\n     * Creates a widget to display and optionally edit metadata fields.\n     *\n     * @param settings.item {Model} The model object whose metadata to display.\n     *    Can be any model type that inherits MetadataMixin.\n     * @param [settings.fieldName='meta'] {string} The name of the model attribute\n     *    to display/edit. The model attribute with this name should be an object\n     *    whose top level keys represent metadata keys.\n     * @param [settings.title='Metadata'] {string} Title for the widget.\n     * @param [settings.apiPath] {string} The relative API path to use when editing\n     *    metadata keys for this model. Defaults to using the MetadataMixin default path.\n     * @param [settings.accessLevel=AccessType.READ] {AccessType} The\n     *    access level for this widget. Use READ for read-only, or WRITE (or greater)\n     *    for adding editing capabilities as well.\n     * @param [settings.onMetadataAdded] {Function} A custom callback for when a\n     *    new metadata key is added to the list. If passed, will override the\n     *    default behavior of calling MetadataMixin.addMetadata.\n     * @param [settings.onMetadataEdited] {Function} A custom callback for when an\n     *    existing metadata key is updated. If passed, will override the default\n     *    behavior of calling MetadataMixin.editMetadata.\n     */\n    initialize: function (settings) {\n        this.item = settings.item;\n        this.fieldName = settings.fieldName || 'meta';\n        this.title = settings.title || 'Metadata';\n        this.apiPath = settings.apiPath;\n        this.accessLevel = settings.accessLevel;\n        this.onMetadataEdited = settings.onMetadataEdited;\n        this.onMetadataAdded = settings.onMetadataAdded;\n\n        this.item.on('g:changed', function () {\n            this.render();\n        }, this);\n        this.render();\n    },\n\n    modes: {\n        simple: {\n            editor: function (args) {\n                return new MetadatumEditWidget(args);\n            },\n            displayValue: function () {\n                return this.value;\n            },\n            template: MetadatumViewTemplate\n        },\n        json: {\n            editor: function (args) {\n                if (args.value !== undefined) {\n                    args.value = JSON.parse(args.value);\n                }\n                return new JsonMetadatumEditWidget(args);\n            },\n            displayValue: function () {\n                return JSON.stringify(this.value, null, 4);\n            },\n            validation: {\n                from: {\n                    simple: [\n                        function (value) {\n                            try {\n                                JSON.parse(value);\n                                return true;\n                            } catch (e) {\n                                // ignore\n                            }\n\n                            return false;\n                        },\n                        'The simple field is not valid JSON and can not be converted.'\n                    ]\n                }\n            },\n            template: JsonMetadatumViewTemplate\n        }\n    },\n\n    setItem: function (item) {\n        this.item = item;\n        return this;\n    },\n\n    // Does not support modal editing\n    getModeFromValue: function (value) {\n        return _.isString(value) ? 'simple' : 'json';\n    },\n\n    addMetadata: function (event, mode) {\n        var EditWidget = this.modes[mode].editor;\n        var value = (mode === 'json') ? '{}' : '';\n\n        var widget = new MetadatumWidget({\n            className: 'g-widget-metadata-row editing',\n            mode: mode,\n            key: '',\n            value: value,\n            item: this.item,\n            fieldName: this.fieldName,\n            apiPath: this.apiPath,\n            accessLevel: this.accessLevel,\n            parentView: this,\n            onMetadataEdited: this.onMetadataEdited,\n            onMetadataAdded: this.onMetadataAdded\n        });\n        widget.$el.appendTo(this.$('.g-widget-metadata-container'));\n\n        new EditWidget({\n            item: this.item,\n            key: '',\n            value: value,\n            fieldName: this.fieldName,\n            apiPath: this.apiPath,\n            accessLevel: this.accessLevel,\n            newDatum: true,\n            parentView: widget,\n            onMetadataEdited: this.onMetadataEdited,\n            onMetadataAdded: this.onMetadataAdded\n        })\n            .render()\n            .$el.appendTo(widget.$el);\n    },\n\n    render: function () {\n        var metaDict = this.item.get(this.fieldName) || {};\n        var metaKeys = Object.keys(metaDict);\n        metaKeys.sort(localeSort);\n\n        // Metadata header\n        this.$el.html(MetadataWidgetTemplate({\n            item: this.item,\n            title: this.title,\n            accessLevel: this.accessLevel,\n            AccessType: AccessType\n        }));\n\n        // Append each metadatum\n        _.each(metaKeys, function (metaKey) {\n            this.$el.find('.g-widget-metadata-container').append(new MetadatumWidget({\n                mode: this.getModeFromValue(metaDict[metaKey]),\n                key: metaKey,\n                value: metaDict[metaKey],\n                accessLevel: this.accessLevel,\n                parentView: this,\n                fieldName: this.fieldName,\n                apiPath: this.apiPath,\n                onMetadataEdited: this.onMetadataEdited,\n                onMetadataAdded: this.onMetadataAdded\n            }).render().$el);\n        }, this);\n\n        return this;\n    }\n});\n\nexport default MetadataWidget;\n","include uploadWidgetMixins\n\n.modal-dialog\n  .modal-content\n    form#g-upload-form.modal-form(role=\"form\")\n      .modal-header\n        button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n        h4.modal-title= title\n        +g-upload-widget-subtitle\n      .modal-body\n        +g-upload-widget-browse-or-drop\n        +g-upload-widget-progress\n      .modal-footer\n        a.btn.btn-small.btn-default(data-dismiss=\"modal\") Close\n        +g-upload-widget-start-button\n","include uploadWidgetMixins\n\nform#g-upload-form\n  if title\n    h4= title\n  +g-upload-widget-subtitle\n  +g-upload-widget-browse-or-drop\n  +g-upload-widget-progress\n  .g-nonmodal-upload-buttons-container\n    +g-upload-widget-start-button\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport FileModel from '@girder/core/models/FileModel';\nimport View from '@girder/core/views/View';\nimport { formatSize } from '@girder/core/misc';\nimport { handleClose, handleOpen } from '@girder/core/dialog';\n\nimport UploadWidgetTemplate from '@girder/core/templates/widgets/uploadWidget.pug';\nimport UploadWidgetNonModalTemplate from '@girder/core/templates/widgets/uploadWidgetNonModal.pug';\n\nimport '@girder/core/stylesheets/widgets/uploadWidget.styl';\n\nimport '@girder/core/utilities/jquery/girderEnable';\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This widget is used to upload files to a folder. Pass a folder model\n * to its constructor as the parent folder that will be uploaded into.\n * The events:\n *   itemComplete: Triggered each time an individual item is finished uploading.\n *   finished: Triggered when the entire set of items is uploaded.\n */\nvar UploadWidget = View.extend({\n    events: {\n        'submit #g-upload-form': function (e) {\n            e.preventDefault();\n            this.startUpload();\n        },\n        'click .g-resume-upload': function () {\n            this.$('.g-upload-error-message').html('');\n            this.currentFile.resumeUpload();\n        },\n        'click .g-restart-upload': function () {\n            this.$('.g-upload-error-message').html('');\n            this.uploadNextFile();\n        },\n        'change #g-files': function () {\n            var files = this.$('#g-files')[0].files;\n\n            if (files.length) {\n                this.files = files;\n                this.filesChanged();\n            }\n        },\n        'click .g-drop-zone': function () {\n            this.$('#g-files').trigger('click');\n        },\n        'dragenter .g-drop-zone': function (e) {\n            e.stopPropagation();\n            e.preventDefault();\n            e.originalEvent.dataTransfer.dropEffect = 'copy';\n            this.$('.g-drop-zone')\n                .addClass('g-dropzone-show')\n                .html('<i class=\"icon-bullseye\"/> Drop files here');\n        },\n        'dragleave .g-drop-zone': function (e) {\n            e.stopPropagation();\n            e.preventDefault();\n            this.$('.g-drop-zone')\n                .removeClass('g-dropzone-show')\n                .html('<i class=\"icon-docs\"/> Browse or drop files');\n        },\n        'dragover .g-drop-zone': function (e) {\n            var dataTransfer = e.originalEvent.dataTransfer;\n            if (!dataTransfer) {\n                return;\n            }\n            // The following two lines enable drag and drop from the chrome download bar\n            var allowed = dataTransfer.effectAllowed;\n            dataTransfer.dropEffect = (allowed === 'move' || allowed === 'linkMove') ? 'move' : 'copy';\n\n            e.preventDefault();\n        },\n        'drop .g-drop-zone': 'filesDropped'\n    },\n\n    /**\n     * This widget has several configuration options to control its view and\n     * behavior. The following keys can be passed in the settings object:\n     *\n     * @param [parent] If the parent object is known when instantiating this\n     * upload widget, pass the object here.\n     * @param [parentType=folder] If the parent type is known when instantiating this\n     * upload widget, pass the object here. Otherwise set noParent: true and\n     * set it later, prior to starting the upload.\n     * @param [noParent=false] If the parent object being uploaded into is not known\n     * at the time of widget instantiation, pass noParent: true. Callers must\n     * ensure that the parent is set by the time uploadNextFile() actually gets\n     * called.\n     * @param [title=\"Upload files\"] Title for the widget. This is highly recommended\n     * when rendering as a modal dialog. To disable rendering of the title, simply\n     * pass a falsy object.\n     * @param [modal=true] This widget normally renders as a modal dialog. Pass\n     * modal: false to disable the modal behavior and simply render underneath a\n     * parent element.\n     * @param [overrideStart=false] Some callers will want to hook into the pressing\n     * of the start upload button and add their own logic prior to actually sending\n     * the files. To do so, set overrideStart: true and bind to the \"g:uploadStarted\"\n     * event of this widget. The caller is then responsible for calling \"uploadNextFile()\"\n     * on the widget when they have completed their actions and are ready to actually\n     * send the files.\n     * @param [multiFile=true] By default, this widget allows selection of multiple\n     * files. Set this to false to only allow a single file to be chosen.\n     * @param [otherParams={}] An object containing other parameters to pass into the\n     * upload initialization endpoint, or a function that returns such an object. If a\n     * function, will be called when the upload is started.\n     *\n     * Other events:\n     *   - \"g:filesChanged\": This is triggered any time the user changes the\n     *     file selection, either by dropping or browsing and selecting new files.\n     *     Handlers will receive a single argument, which is the list of chosen files.\n     *   - \"g:uploadFinished\": When all files have been successfully uploaded,\n     *     this event is fired.\n     */\n    initialize: function (settings) {\n        if (settings.noParent) {\n            this.parent = null;\n            this.parentType = null;\n        } else {\n            this.parent = settings.parent || settings.folder;\n            this.parentType = settings.parentType || 'folder';\n        }\n        this.files = [];\n        this.totalSize = 0;\n        this.title = _.has(settings, 'title') ? settings.title : 'Upload files';\n        this.modal = _.has(settings, 'modal') ? settings.modal : true;\n        this.multiFile = _.has(settings, 'multiFile') ? settings.multiFile : this.parentType !== 'file';\n        this.overrideStart = settings.overrideStart || false;\n        this.otherParams = settings.otherParams || {};\n\n        this._browseText = this.multiFile ? 'Browse or drop files here' : 'Browse or drop a file here';\n        this._noneSelectedText = this.multiFile ? 'No files selected' : 'No file selected';\n    },\n\n    render: function () {\n        var templateParams = {\n            parent: this.parent,\n            parentType: this.parentType,\n            title: this.title,\n            multiFile: this.multiFile,\n            browseText: this._browseText,\n            noneSelectedText: this._noneSelectedText\n        };\n\n        if (this.modal) {\n            this.$el.html(UploadWidgetTemplate(templateParams));\n\n            var dialogid;\n            if (this.parentType === 'file') {\n                dialogid = this.parent.get('_id');\n            }\n\n            this.$el.girderModal(this).on('hidden.bs.modal', () => {\n                /* If we are showing the resume option, we have a partial upload\n                 * that should be deleted, since the user has no way to get back\n                 * to it. */\n                if ($('.g-resume-upload').length && this.currentFile) {\n                    this.currentFile.abortUpload();\n                }\n                handleClose('upload', undefined, dialogid);\n            });\n\n            handleOpen('upload', undefined, dialogid);\n        } else {\n            this.$el.html(UploadWidgetNonModalTemplate(templateParams));\n        }\n        return this;\n    },\n\n    filesDropped: function (e) {\n        e.stopPropagation();\n        e.preventDefault();\n\n        this.$('.g-drop-zone')\n            .removeClass('g-dropzone-show')\n            .html(`<i class=\"icon-docs\"/> ${this._browseText}`);\n\n        var dataTransfer = e.originalEvent.dataTransfer;\n\n        // Require all dropped items to be files\n        if (!_.every(dataTransfer.items, (item) => this._isFile(item))) {\n            this.$('.g-upload-error-message').html('Only files may be uploaded.');\n            return;\n        }\n        this.files = dataTransfer.files;\n\n        if (!this.multiFile && this.files.length > 1) {\n            // If in single-file mode and the user drops multiple files,\n            // we just take the first one.\n            this.files = [this.files[0]];\n        }\n\n        this.filesChanged();\n    },\n\n    filesChanged: function () {\n        if (this.files.length === 0) {\n            this.$('.g-overall-progress-message').text(this._noneSelectedText);\n            this.setUploadEnabled(false);\n        } else {\n            this.totalSize = 0;\n            _.each(this.files, function (file) {\n                this.totalSize += file.size;\n            }, this);\n\n            var msg;\n\n            if (this.files.length > 1) {\n                msg = 'Selected ' + this.files.length + ' files';\n            } else {\n                msg = 'Selected <b>' + this.files[0].name + '</b>';\n            }\n            this.$('.g-overall-progress-message').html('<i class=\"icon-ok\"/> ' +\n                msg + '  (' + formatSize(this.totalSize) +\n                ') -- Press start button');\n            this.setUploadEnabled(true);\n            this.$('.g-progress-overall,.g-progress-current').addClass('hide');\n            this.$('.g-current-progress-message').empty();\n            this.$('.g-upload-error-message').empty();\n        }\n\n        this.trigger('g:filesChanged', this.files);\n    },\n\n    startUpload: function () {\n        this.setUploadEnabled(false);\n        this.$('.g-drop-zone').addClass('hide');\n        this.$('.g-progress-overall').removeClass('hide');\n        this.$('.g-upload-error-message').empty();\n\n        if (this.multiFile) {\n            this.$('.g-progress-current').removeClass('hide');\n        }\n\n        this.currentIndex = 0;\n        this.overallProgress = 0;\n        this.trigger('g:uploadStarted');\n\n        if (!this.overrideStart) {\n            this.uploadNextFile();\n        }\n    },\n\n    /**\n     * Enable or disable the start upload button.\n     *\n     * @param state {bool} Truthy for enabled, falsy for disabled.\n     */\n    setUploadEnabled: function (state) {\n        this.$('.g-start-upload').girderEnable(state);\n    },\n\n    /**\n     * Initializes the upload of a file by requesting the upload token\n     * from the server. If successful, this will call _uploadChunk to send the\n     * actual bytes from the file if it is of non-zero length.\n     */\n    uploadNextFile: function () {\n        if (this.currentIndex >= this.files.length) {\n            // All files have finished\n            if (this.modal) {\n                this.$el.modal('hide');\n            }\n            this.trigger('g:uploadFinished', {\n                files: this.files,\n                totalSize: this.totalSize\n            });\n            return;\n        }\n\n        this.currentFile = this.parentType === 'file' ? this.parent : new FileModel();\n\n        this.currentFile.on('g:upload.complete', function () {\n            this.files[this.currentIndex].id = this.currentFile.id;\n            this.currentIndex += 1;\n            this.uploadNextFile();\n        }, this).on('g:upload.chunkSent', function (info) {\n            this.overallProgress += info.bytes;\n        }, this).on('g:upload.progress', function (info) {\n            var currentProgress = info.startByte + info.loaded;\n\n            this.$('.g-progress-current>.progress-bar').css('width',\n                Math.ceil(100 * currentProgress / info.total) + '%');\n            this.$('.g-progress-overall>.progress-bar').css('width',\n                Math.ceil(100 * (this.overallProgress + info.loaded) /\n                          this.totalSize) + '%');\n            this.$('.g-current-progress-message').html(\n                '<i class=\"icon-doc-text\"/>' + (this.currentIndex + 1) + ' of ' +\n                    this.files.length + ' - <b>' + info.file.name + '</b>: ' +\n                    formatSize(currentProgress) + ' / ' +\n                    formatSize(info.total)\n            );\n            this.$('.g-overall-progress-message').html('Overall progress: ' +\n                formatSize(this.overallProgress + info.loaded) + ' / ' +\n                formatSize(this.totalSize));\n        }, this).on('g:upload.error', function (info) {\n            var html = info.message + ' <a class=\"g-resume-upload\">' +\n                'Click to resume upload</a>';\n            $('.g-upload-error-message').html(html);\n        }, this).on('g:upload.errorStarting', function (info) {\n            var html = info.message + ' <a class=\"g-restart-upload\">' +\n                'Click to restart upload</a>';\n            $('.g-upload-error-message').html(html);\n        }, this);\n\n        if (this.parentType === 'file') {\n            this.currentFile.updateContents(this.files[this.currentIndex]);\n        } else {\n            var otherParams = this.otherParams;\n            if (_.isFunction(this.otherParams)) {\n                otherParams = this.otherParams(this);\n            }\n            this.currentFile.upload(this.parent, this.files[this.currentIndex], null, otherParams);\n        }\n    },\n\n    /**\n     * Check whether a DataTransferItem from a drag and drop operation\n     * represents a file, as opposed to a directory, URI, string, or other\n     * entity.\n     * @param {DataTransferItem} item - The item from a drag and drop operation.\n     * @returns {boolean} True if item represents a file.\n     */\n    _isFile: function (item) {\n        var getAsEntry = item.getAsEntry;\n        if (!_.isFunction(getAsEntry)) {\n            getAsEntry = item.webkitGetAsEntry;\n        }\n        if (!_.isFunction(getAsEntry)) {\n            // Unsupported; assume item is file\n            return true;\n        }\n\n        var entry = getAsEntry.call(item);\n        return entry && entry.isFile;\n    }\n});\n\nexport default UploadWidget;\n","- var idx = 0\neach obj in links\n  li\n    a.g-breadcrumb-link(g-index=idx)\n      if obj.resourceName === 'user'\n        i.icon-user\n      else if obj.resourceName === 'collection'\n        i.icon-sitemap\n      = obj.name()\n  - idx += 1\n\nif current\n  li.active\n    if current.resourceName === 'user'\n      i.icon-user\n    else if current.resourceName === 'collection'\n      i.icon-sitemap\n    = current.name()\n\nif descriptionText\n  a.g-description-preview= descriptionText\n\n.pull-right\n  .g-child-count-container.hide\n    .g-subfolder-count-container(title='total folders')\n      i.icon-folder\n      .g-subfolder-count\n\n    if idx > 0\n      .g-item-count-container(title='total items')\n        i.icon-doc-text-inv\n        .g-item-count\n\n  if idx > 0\n    .g-level-up-button-container\n      a.g-hierarchy-level-up(title=\"Go up one level\")\n        i.icon-level-up\n",".g-hierarchy-pages-header\n  .g-hierarchycenter\n    ul.pagination.pagination-sm\n      if (currentPage >1 && !disabled)\n        li.g-page-prev\n          a#g-previous-paginated « Prev\n      else\n        li.g-page-prev.disabled\n          a#g-previous-paginated « Prev\n      li\n        span Page:\n          input#g-page-selection-input(disabled=disabled, type='number', min=1, max=totalPages, value=currentPage)\n          span of #{totalPages}\n      if (currentPage+1<=totalPages && !disabled)\n        li.g-page-next\n          a#g-next-paginated Next »\n      else\n        li.g-page-next.disabled\n          a#g-next-paginated Next »\n",".g-hierarchy-widget\n  .g-hierarchy-breadcrumb-bar\n    ol.breadcrumb\n  if showActions\n    .g-hierarchy-actions-header\n      if checkboxes\n        input.g-select-all(type=\"checkbox\", title=\"Select / Unselect all\")\n\n        .btn-group\n          button.g-checked-actions-button.btn.btn-sm.btn-default.dropdown-toggle(\n            data-toggle=\"dropdown\", disabled=\"disabled\", title=\"Checked actions\")\n            i.icon-check\n            i.icon-down-dir\n          ul.g-checked-actions-menu.dropdown-menu(role=\"menu\")\n\n      .g-folder-header-buttons\n        if (type === 'folder')\n          button.g-folder-info-button.btn.btn-sm.btn-info(title=\"Show folder info\")\n            i.icon-info\n          if (level >= AccessType.WRITE)\n            button.g-upload-here-button.btn.btn-sm.btn-success(title=\"Upload here\")\n              i.icon-upload\n          if (level >= AccessType.ADMIN)\n            button.g-folder-access-button.g-edit-access.btn.btn-sm.btn-warning(title=\"Access control\")\n              i.icon-lock\n        else if (type === 'collection')\n          button.g-collection-info-button.btn.btn-sm.btn-info(title=\"Show collection info\")\n            i.icon-info\n          if (level >= AccessType.ADMIN)\n            button.g-edit-access.btn.btn-sm.btn-warning(title=\"Access control\")\n              i.icon-lock\n        .btn-group\n          button.g-folder-actions-button.btn.btn-sm.btn-default.dropdown-toggle(\n              data-toggle=\"dropdown\", title=`${capitalize(type)} actions`)\n            if type === 'collection'\n              i.icon-sitemap\n            else if type === 'user'\n              i.icon-user\n            else if type === 'folder'\n              i.icon-folder-open\n            i.icon-down-dir\n          ul.g-folder-actions-menu.dropdown-menu.pull-right(role=\"menu\")\n            li.dropdown-header(role=\"presentation\")\n              if type === 'collection'\n                i.icon-sitemap\n              else if type === 'user'\n                i.icon-user\n              else if type === 'folder'\n                i.icon-folder-open\n              |  #{model.name()}\n            if type === 'folder' || type === 'collection'\n              li(role=\"presentation\")\n                a.g-download-folder(role=\"menuitem\", href=model.downloadUrl())\n                  i.icon-download\n                  | Download #{type}\n            if level >= AccessType.WRITE\n              li(role=\"presentation\")\n                a.g-create-subfolder(role=\"menuitem\")\n                  i.icon-folder\n                  | Create folder here\n              if type === 'folder' || type === 'collection'\n                if type === 'folder'\n                  li(role=\"presentation\")\n                    a.g-create-item(role=\"menuitem\")\n                      i.icon-doc\n                      | Create item here\n                li(role=\"presentation\")\n                  a.g-edit-folder(role=\"menuitem\")\n                    i.icon-edit\n                    | Edit #{type}\n            if level >= AccessType.ADMIN && (type === 'folder' || type === 'collection')\n              li.divider(role=\"presentation\")\n              li(role=\"presentation\")\n                a.g-delete-folder(role=\"menuitem\")\n                  i.icon-trash\n                  | Delete this #{type}\n      .g-clear-right\n  if onFolderSelect\n    .g-select-folder-container\n      ul.g-folder-list\n        li.g-folder-list-entry(public='true')\n          button.g-select-folder.btn.btn-sm.btn-info\n            i.icon-folder\n            |  Select this #{type}.\n            i.icon-right-dir\n  .g-folder-list-container\n  .g-item-list-container\n  .g-empty-parent-message.g-info-message-container.hide\n    i.icon-info-circled\n    if itemFilter\n      |  This folder has no suitable items.\n    else\n      |  This folder is empty.\n  .g-hierarachy-paginated-bar\nif showMetadata\n  .g-folder-metadata\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport * as allModels from '@girder/core/models';\nimport AccessWidget from '@girder/core/views/widgets/AccessWidget';\nimport CheckedMenuWidget from '@girder/core/views/widgets/CheckedMenuWidget';\nimport CollectionInfoWidget from '@girder/core/views/widgets/CollectionInfoWidget';\nimport EditCollectionWidget from '@girder/core/views/widgets/EditCollectionWidget';\nimport EditFolderWidget from '@girder/core/views/widgets/EditFolderWidget';\nimport EditItemWidget from '@girder/core/views/widgets/EditItemWidget';\nimport FolderInfoWidget from '@girder/core/views/widgets/FolderInfoWidget';\nimport FolderListWidget from '@girder/core/views/widgets/FolderListWidget';\nimport ItemListWidget from '@girder/core/views/widgets/ItemListWidget';\nimport ItemModel from '@girder/core/models/ItemModel';\nimport MetadataWidget from '@girder/core/views/widgets/MetadataWidget';\nimport router from '@girder/core/router';\nimport UploadWidget from '@girder/core/views/widgets/UploadWidget';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport { confirm, handleClose } from '@girder/core/dialog';\nimport events from '@girder/core/events';\nimport { getModelClassByName, renderMarkdown, formatCount, capitalize, formatSize } from '@girder/core/misc';\nimport { restRequest, getApiRoot } from '@girder/core/rest';\n\nimport HierarchyBreadcrumbTemplate from '@girder/core/templates/widgets/hierarchyBreadcrumb.pug';\nimport HierarchyPaginatedTemplate from '@girder/core/templates/widgets/hierarchyPaginated.pug';\nimport HierarchyWidgetTemplate from '@girder/core/templates/widgets/hierarchyWidget.pug';\n\nimport '@girder/core/stylesheets/widgets/hierarchyWidget.styl';\n\nimport 'bootstrap/js/dropdown';\n\nvar pickedResources = null;\n\n/**\n * Renders the breadcrumb list in the hierarchy widget.\n */\nvar HierarchyBreadcrumbView = View.extend({\n    events: {\n        'click a.g-breadcrumb-link': function (event) {\n            var link = $(event.currentTarget);\n            this.trigger('g:breadcrumbClicked', parseInt(link.attr('g-index'), 10));\n        }\n    },\n\n    initialize: function (settings) {\n        this.objects = settings.objects;\n    },\n\n    render: function () {\n        // Clone the array so we don't alter the instance's copy\n        var objects = this.objects.slice(0);\n\n        // Pop off the last object, it refers to the currently viewed\n        // object and should be the \"active\" class, and not a link.\n        var active = objects.pop();\n\n        var descriptionText = $(renderMarkdown(\n            active.get('description') || '')).text();\n\n        this.$el.html(HierarchyBreadcrumbTemplate({\n            links: objects,\n            current: active,\n            descriptionText: descriptionText\n        }));\n\n        return this;\n    }\n});\n\nvar HierarchyPaginatedView = View.extend({\n    events: {\n        'change #g-page-selection-input': function (event) {\n            const num = Number(event.target.value);\n            if (this.itemListWidget && num <= this.itemListWidget.getNumPages() && num > 0) {\n                this.disabled = true;\n                this.itemListWidget.setPage(num).done(() => {\n                    this.disabled = false;\n                    this.render();\n                });\n            }\n            this.render();\n        },\n        'click li.g-page-next:not(.disabled) a#g-next-paginated': function () {\n            this.disabled = true;\n            this.itemListWidget.setPage(Number(this.$('#g-page-selection-input').val()) + 1).done(() => {\n                this.disabled = false;\n                this.render();\n            });\n            this.render();\n        },\n        'click li.g-page-prev:not(.disabled) a#g-previous-paginated': function () {\n            this.disabled = true;\n            this.itemListWidget.setPage(Number(this.$('#g-page-selection-input').val()) - 1).done(() => {\n                this.disabled = false;\n                this.render();\n            });\n            this.render();\n        }\n    },\n    initialize: function (settings) {\n        this.itemListWidget = settings.itemListWidget;\n        this.disabled = false;\n    },\n    render: function () {\n        this.$el.html(HierarchyPaginatedTemplate({\n            totalPages: this.itemListWidget && this.itemListWidget.getNumPages(),\n            currentPage: this.itemListWidget && this.itemListWidget.getCurrentPage(),\n            disabled: this.disabled\n        }));\n\n        return this;\n    }\n});\n\n/**\n * This widget is used to navigate the data hierarchy of folders and items.\n */\nvar HierarchyWidget = View.extend({\n    events: {\n        'click a.g-create-subfolder': 'createFolderDialog',\n        'click a.g-edit-folder': 'editFolderDialog',\n        'click button.g-select-folder': 'selectFolder',\n        'click a.g-delete-folder': 'deleteFolderDialog',\n        'click .g-folder-info-button': 'showInfoDialog',\n        'click .g-collection-info-button': 'showInfoDialog',\n        'click .g-description-preview': 'showInfoDialog',\n        'click a.g-create-item': 'createItemDialog',\n        'click .g-upload-here-button': 'uploadDialog',\n        'click .g-edit-access': 'editAccess',\n        'click .g-hierarchy-level-up': 'upOneLevel',\n        'click a.g-download-checked': 'downloadChecked',\n        'click a.g-pick-checked': 'pickChecked',\n        'click a.g-move-picked': 'movePickedResources',\n        'click a.g-copy-picked': 'copyPickedResources',\n        'click a.g-clear-picked': 'clearPickedResources',\n        'click a.g-delete-checked': 'deleteCheckedDialog',\n        'click .g-list-checkbox': 'checkboxListener',\n        'change .g-select-all': function (e) {\n            this.folderListView.checkAll(e.currentTarget.checked);\n\n            if (this.itemListView) {\n                this.itemListView.checkAll(e.currentTarget.checked);\n            }\n        }\n    },\n\n    /**\n     * This should be instantiated with the following settings:\n     *   parentModel: The model representing the root node. Must be a User,\n     *                 Collection, or Folder model.\n     *   [showActions=true]: Whether to show the action bar.\n     *   [showItems=true]: Whether to show items in the list (or just folders).\n     *   [checkboxes=true]: Whether to show checkboxes next to each resource.\n     *   [routing=true]: Whether the route should be updated by this widget.\n     *   [appendPages=false]: Whether new pages should be appended instead of\n     *                        replaced.\n     *   [onItemClick]: A function that will be called when an item is clicked,\n     *                  passed the Item model as its first argument and the\n     *                  event as its second.\n     *   [defaultSelectedResource] : default selected Resource item , will open up to this resource\n     *   [highlightItem=false] : sets the item to be styled as selected and will scroll to it in the list\n     *   [paginated=false] : sets the itemlist view to be paginated, will set appendPages to false\n     */\n    initialize: function (settings) {\n        this.parentModel = settings.parentModel;\n        this.upload = settings.upload;\n\n        this._showActions = _.has(settings, 'showActions') ? settings.showActions : true;\n        this._showItems = _.has(settings, 'showItems') ? settings.showItems : true;\n\n        this._itemFilter = settings.itemFilter;\n\n        this._checkboxes = _.has(settings, 'checkboxes') ? settings.checkboxes : true;\n        this._downloadLinks = _.has(settings, 'downloadLinks') ? settings.downloadLinks : true;\n        this._viewLinks = _.has(settings, 'viewLinks') ? settings.viewLinks : true;\n        this._showSizes = _.has(settings, 'showSizes') ? settings.showSizes : true;\n        this._showMetadata = _.has(settings, 'showMetadata') ? settings.showMetadata : true;\n        this._routing = _.has(settings, 'routing') ? settings.routing : true;\n        this._appendPages = _.has(settings, 'appendPages') ? settings.appendPages : false;\n        this._onItemClick = settings.onItemClick || function (item) {\n            router.navigate('item/' + item.get('_id'), { trigger: true });\n        };\n        this._defaultSelectedResource = settings.defaultSelectedResource;\n        this._highlightItem = _.has(settings, 'highlightItem') ? settings.highlightItem : false;\n        this._paginated = _.has(settings, 'paginated') ? settings.paginated : false;\n        this._onFolderSelect = settings.onFolderSelect;\n\n        this.folderAccess = settings.folderAccess;\n        this.folderCreate = settings.folderCreate;\n        this.folderEdit = settings.folderEdit;\n        this.itemCreate = settings.itemCreate;\n        this.breadcrumbs = [this.parentModel];\n\n        // Initialize the breadcrumb bar state\n        this.breadcrumbView = new HierarchyBreadcrumbView({\n            objects: this.breadcrumbs,\n            parentView: this\n        });\n        this.breadcrumbView.on('g:breadcrumbClicked', function (idx) {\n            this.breadcrumbs = this.breadcrumbs.slice(0, idx + 1);\n            this.setCurrentModel(this.breadcrumbs[idx]);\n            this._setRoute();\n        }, this);\n\n        this.checkedMenuWidget = new CheckedMenuWidget({\n            pickedCount: this.getPickedCount(),\n            pickedCopyAllowed: this.getPickedCopyAllowed(),\n            pickedMoveAllowed: this.getPickedMoveAllowed(),\n            pickedDesc: this.getPickedDescription(),\n            parentView: this\n        });\n\n        this.folderListView = new FolderListWidget({\n            folderFilter: this._itemFilter,\n            parentType: this.parentModel.resourceName,\n            parentId: this.parentModel.get('_id'),\n            checkboxes: this._checkboxes,\n            parentView: this\n        });\n        this.folderListView.on('g:folderClicked', function (folder) {\n            this.descend(folder);\n\n            if (this.uploadWidget) {\n                this.uploadWidget.folder = folder;\n            }\n        }, this).off('g:checkboxesChanged')\n            .on('g:checkboxesChanged', this.updateChecked, this)\n            .off('g:changed').on('g:changed', function () {\n                this.folderCount = this.folderListView.collection.length;\n                this._childCountCheck();\n            }, this);\n\n        if (this.parentModel.resourceName === 'folder') {\n            this._fetchToRoot(this.parentModel);\n        } else {\n            this.itemCount = 0;\n            this.render();\n        }\n        events.on('g:login', () => {\n            this.constructor.resetPickedResources();\n        }, this);\n    },\n\n    /**\n     * If both the child folders and child items have been fetched, and\n     * there are neither of either type in this parent container, we should\n     * show the \"empty container\" message.\n     */\n    _childCountCheck: function () {\n        var container = this.$('.g-empty-parent-message').addClass('hide');\n        if (this.folderCount === 0 && this.itemCount === 0) {\n            container.removeClass('hide');\n        }\n    },\n\n    /**\n     * Initializes the subwidgets that are only shown when the parent resource\n     * is a folder type.\n     */\n    _initFolderViewSubwidgets: function () {\n        if (!this.itemListView) {\n            this.itemListView = new ItemListWidget({\n                itemFilter: this._itemFilter,\n                folderId: this.parentModel.id,\n                public: this.parentModel.get('public'),\n                accessLevel: this.parentModel.getAccessLevel(),\n                checkboxes: this._checkboxes,\n                downloadLinks: this._downloadLinks,\n                viewLinks: this._viewLinks,\n                showSizes: this._showSizes,\n                selectedItem: this._defaultSelectedResource,\n                highlightItem: this._highlightItem,\n                paginated: this._paginated,\n                parentView: this\n            });\n            this.listenTo(this.itemListView, 'g:itemClicked', this._onItemClick);\n            this.listenTo(this.itemListView, 'g:checkboxesChanged', this.updateChecked);\n\n            this.listenTo(this.itemListView, 'g:changed', () => {\n                this.itemCount = this.itemListView.collection.length;\n                this._childCountCheck();\n                if (this._paginated && this.hierarchyPaginated && this.itemListView.getNumPages() > 1) {\n                    if (this.parentModel.resourceName !== 'collection') {\n                        this.hierarchyPaginated.setElement(this.$('.g-hierarachy-paginated-bar')).render();\n                    }\n                    this.$('.g-hierarchy-breadcrumb-bar').addClass('g-hierarchy-sticky');\n                    this.$('.g-hierarachy-paginated-bar').addClass('g-hierarchy-sticky');\n                    this.$('.g-hierarchy-breadcrumb-bar').css({ top: 0 });\n                    this.$('.g-hierarachy-paginated-bar').css({ bottom: 0 });\n                    this.$('.g-hierarachy-paginated-bar').removeClass('hidden');\n                } else {\n                    // We remove the bar if the current folder doesn't have more than one page, keep the sticky breadcrumb though\n                    this.$('.g-hierarachy-paginated-bar').addClass('hidden');\n                }\n            });\n            // Only emitted when there is more than one page of data\n            this.listenTo(this.itemListView, 'g:paginated', () => {\n                if (this._paginated && !this.hierarchyPaginated) {\n                    this.hierarchyPaginated = new HierarchyPaginatedView({\n                        parentView: this,\n                        itemListWidget: this.itemListView\n                    });\n                }\n            });\n        }\n\n        if (!this.metadataWidget) {\n            this.metadataWidget = new MetadataWidget({\n                item: this.parentModel,\n                parentView: this,\n                accessLevel: this.parentModel.getAccessLevel()\n            });\n        }\n    },\n\n    _setRoute: function () {\n        if (this._routing) {\n            var route = this.breadcrumbs[0].resourceName + '/' +\n                this.breadcrumbs[0].get('_id');\n            if (this.parentModel.resourceName === 'folder') {\n                route += '/folder/' + this.parentModel.get('_id');\n            }\n            router.navigate(route);\n            events.trigger('g:hierarchy.route', { route: route });\n        }\n    },\n\n    _fetchToRoot: function (folder) {\n        folder.getRootPath().done((path) => {\n            const breadcrumbs = path.map((r) => new allModels[getModelClassByName(r.type)](r.object));\n            this.breadcrumbs.unshift(...breadcrumbs);\n            this.render();\n        });\n    },\n\n    render: function () {\n        this.folderCount = null;\n        this.itemCount = null;\n\n        this.$el.html(HierarchyWidgetTemplate({\n            type: this.parentModel.resourceName,\n            model: this.parentModel,\n            level: this.parentModel.getAccessLevel(),\n            AccessType: AccessType,\n            onFolderSelect: this._onFolderSelect,\n            showActions: this._showActions,\n            showMetadata: this._showMetadata,\n            checkboxes: this._checkboxes,\n            capitalize: capitalize,\n            itemFilter: this._itemFilter\n        }));\n\n        if (this.$('.g-folder-actions-menu>li>a').length === 0) {\n            // Disable the actions button if actions list is empty\n            this.$('.g-folder-actions-button').girderEnable(false);\n        }\n\n        this.breadcrumbView.setElement(this.$('.g-hierarchy-breadcrumb-bar>ol')).render();\n        this.checkedMenuWidget.dropdownToggle = this.$('.g-checked-actions-button');\n        this.checkedMenuWidget.setElement(this.$('.g-checked-actions-menu')).render();\n        this.folderListView.setElement(this.$('.g-folder-list-container')).render();\n        if (this.hierarchyPaginated && this.parentModel.resourceName !== 'collection') {\n            this.hierarchyPaginated.setElement(this.$('.g-hierarachy-paginated-bar')).render();\n        }\n        if (this.parentModel.resourceName === 'folder' && this._showItems) {\n            this._initFolderViewSubwidgets();\n            this.itemListView.setElement(this.$('.g-item-list-container')).render();\n            this.metadataWidget.setItem(this.parentModel);\n            this.metadataWidget.accessLevel = this.parentModel.getAccessLevel();\n            if (this._showMetadata) {\n                this.metadataWidget.setElement(this.$('.g-folder-metadata')).render();\n            }\n        }\n\n        if (this.parentModel.resourceName === 'collection' && this._showMetadata) {\n            if (!this.metadataWidget) {\n                this.metadataWidget = new MetadataWidget({\n                    item: this.parentModel,\n                    parentView: this,\n                    accessLevel: this.parentModel.getAccessLevel()\n                });\n            }\n            this.metadataWidget.setItem(this.parentModel);\n            this.metadataWidget.accessLevel = this.parentModel.getAccessLevel();\n            this.metadataWidget.setElement(this.$('.g-folder-metadata')).render();\n        }\n\n        if (this.upload) {\n            this.uploadDialog();\n        } else if (this.folderAccess) {\n            this.editAccess();\n        } else if (this.folderCreate) {\n            this.createFolderDialog();\n        } else if (this.folderEdit) {\n            this.editFolderDialog();\n        } else if (this.itemCreate) {\n            this.createItemDialog();\n        }\n\n        this.fetchAndShowChildCount();\n\n        return this;\n    },\n\n    /**\n     * Descend into the given folder.\n     */\n    descend: function (folder) {\n        this.breadcrumbs.push(folder);\n        this.setCurrentModel(folder);\n    },\n\n    /**\n     * Go to the parent of the current folder\n     */\n    upOneLevel: function () {\n        this.breadcrumbs.pop();\n        this.setCurrentModel(this.breadcrumbs[this.breadcrumbs.length - 1]);\n    },\n\n    /**\n     * Called when the \"select this folder\" link is clicked.\n     */\n    selectFolder: function () {\n        if (_.isFunction(this._onFolderSelect)) {\n            this._onFolderSelect(this.parentModel);\n        }\n    },\n\n    /**\n     * Prompt the user to create a new subfolder in the current folder.\n     */\n    createFolderDialog: function () {\n        new EditFolderWidget({\n            el: $('#g-dialog-container'),\n            parentModel: this.parentModel,\n            parentView: this\n        }).on('g:saved', function (folder) {\n            this.folderListView.insertFolder(folder);\n            if (this.parentModel.has('nFolders')) {\n                this.parentModel.increment('nFolders');\n            }\n            this.updateChecked();\n        }, this).render();\n    },\n\n    /**\n     * Prompt the user to create a new item in the current folder\n     */\n    createItemDialog: function () {\n        new EditItemWidget({\n            el: $('#g-dialog-container'),\n            parentModel: this.parentModel,\n            parentView: this\n        }).on('g:saved', function (item) {\n            this.itemListView.insertItem(item);\n            if (this.parentModel.has('nItems')) {\n                this.parentModel.increment('nItems');\n            }\n            this.updateChecked();\n        }, this).render();\n    },\n\n    /**\n     * Prompt user to edit the current folder or collection.\n     */\n    editFolderDialog: function () {\n        if (this.parentModel.resourceName === 'folder') {\n            new EditFolderWidget({\n                el: $('#g-dialog-container'),\n                parentModel: this.parentModel,\n                folder: this.parentModel,\n                parentView: this\n            }).on('g:saved', function () {\n                events.trigger('g:alert', {\n                    icon: 'ok',\n                    text: 'Folder info updated.',\n                    type: 'success',\n                    timeout: 4000\n                });\n                this.breadcrumbView.render();\n            }, this).on('g:fileUploaded', function (args) {\n                var item = new ItemModel({\n                    _id: args.model.get('itemId')\n                });\n\n                item.once('g:fetched', function () {\n                    this.itemListView.insertItem(item);\n                    if (this.parentModel.has('nItems')) {\n                        this.parentModel.increment('nItems');\n                    }\n                    this.updateChecked();\n                }, this).fetch();\n            }, this).render();\n        } else if (this.parentModel.resourceName === 'collection') {\n            new EditCollectionWidget({\n                el: $('#g-dialog-container'),\n                model: this.parentModel,\n                parentView: this\n            }).on('g:saved', function () {\n                this.breadcrumbView.render();\n                this.trigger('g:collectionChanged');\n            }, this).render();\n        }\n    },\n\n    /**\n     * Prompt the user to delete the currently viewed folder or collection.\n     */\n    deleteFolderDialog: function () {\n        var type = this.parentModel.resourceName;\n        var params = {\n            text: 'Are you sure you want to delete the ' + type + ' <b>' +\n                  this.parentModel.escape('name') + '</b>?',\n            escapedHtml: true,\n            yesText: 'Delete',\n            confirmCallback: () => {\n                this.parentModel.on('g:deleted', function () {\n                    if (type === 'collection') {\n                        router.navigate('collections', { trigger: true });\n                    } else if (type === 'folder') {\n                        this.breadcrumbs.pop();\n                        this.setCurrentModel(this.breadcrumbs.slice(-1)[0]);\n                    }\n                }, this).destroy({\n                    throwError: true,\n                    progress: true\n                });\n            }\n        };\n        if (type === 'collection' &&\n           (this.parentModel.get('nFolders') !== 0 || this.parentModel.get('size') !== 0)) {\n            params = _.extend({\n                name: this.parentModel.escape('name'),\n                additionalText: '<b>' + this.parentModel.escape('name') + '</b>' +\n                                ' contains <b>' + this.parentModel.escape('nFolders') +\n                                ' folders</b> taking up <b>' +\n                                formatSize(parseInt(this.parentModel.get('size'), 10)) + '</b>',\n                msgConfirmation: true\n            }, params);\n        }\n        confirm(params);\n    },\n\n    showInfoDialog: function () {\n        var opts = {\n            el: $('#g-dialog-container'),\n            model: this.parentModel,\n            parentView: this\n        };\n\n        if (this.parentModel.resourceName === 'collection') {\n            new CollectionInfoWidget(opts).render();\n        } else if (this.parentModel.resourceName === 'folder') {\n            new FolderInfoWidget(opts).render();\n        }\n    },\n\n    fetchAndShowChildCount: function () {\n        this.$('.g-child-count-container').addClass('hide');\n\n        var showCounts = () => {\n            const folderCount = formatCount(this.parentModel.get('nFolders'));\n            this.$('.g-child-count-container').removeClass('hide');\n            this.$('.g-subfolder-count').text(folderCount);\n            const folderTooltip = folderCount === 1 ? `${folderCount} total folder` : `${folderCount} total folders`;\n            this.$('.g-subfolder-count-container').attr('title', folderTooltip);\n            if (this.parentModel.has('nItems')) {\n                const itemCount = formatCount(this.parentModel.get('nItems'));\n                this.$('.g-item-count').text(itemCount);\n                const itemTooltip = itemCount === 1 ? `${itemCount} total item` : `${itemCount} total items`;\n                this.$('.g-item-count-container').attr('title', itemTooltip);\n            }\n        };\n\n        if (this.parentModel.has('nFolders')) {\n            showCounts();\n        } else {\n            this.parentModel.set('nFolders', 0); // prevents fetching details twice\n            this.parentModel.once('g:fetched.details', function () {\n                showCounts();\n            }, this).fetch({ extraPath: 'details' });\n        }\n\n        this.parentModel.off('change:nItems', showCounts, this)\n            .on('change:nItems', showCounts, this)\n            .off('change:nFolders', showCounts, this)\n            .on('change:nFolders', showCounts, this);\n\n        return this;\n    },\n\n    /**\n     * Change the current parent model, i.e. the resource being shown currently.\n     *\n     * @param parent The parent model to change to.\n     */\n    setCurrentModel: function (parent, opts) {\n        opts = opts || {};\n        this.parentModel = parent;\n\n        this.breadcrumbView.objects = this.breadcrumbs;\n\n        this.folderListView.initialize({\n            parentType: parent.resourceName,\n            parentId: parent.get('_id'),\n            checkboxes: this._checkboxes,\n            folderFilter: this._itemFilter\n        });\n\n        this.updateChecked();\n\n        if (parent.resourceName === 'folder') {\n            if (this.itemListView) {\n                this.itemListView.initialize({\n                    folderId: parent.get('_id'),\n                    checkboxes: this._checkboxes,\n                    downloadLinks: this._downloadLinks,\n                    viewLinks: this._viewLinks,\n                    itemFilter: this._itemFilter,\n                    showSizes: this._showSizes,\n                    paginated: this._paginated,\n                    public: this.parentModel.get('public'),\n                    accessLevel: this.parentModel.getAccessLevel()\n                });\n            }\n            this._initFolderViewSubwidgets();\n        }\n\n        this.render();\n        if (!_.has(opts, 'setRoute') || opts.setRoute) {\n            this._setRoute();\n        }\n        this.trigger('g:setCurrentModel');\n    },\n\n    /**\n     * Based on a resource collection with either has model references or\n     * checkbox references, return a string that describes the collection.\n     * :param resources: a hash with different resources.\n     * :returns: description of the resources.\n     */\n    _describeResources: function (resources) {\n        /* If the resources aren't English words or don't have simple plurals,\n         * this will need to be refactored. */\n        var kinds = ['folder', 'item'];\n\n        var desc = [];\n        for (var i = 0; i < kinds.length; i += 1) {\n            var kind = kinds[i];\n            if (resources[kind] && resources[kind].length) {\n                desc.push(resources[kind].length + ' ' + kind +\n                          (resources[kind].length !== 1 ? 's' : ''));\n            }\n        }\n        switch (desc.length) {\n            case 0:\n                return 'nothing';\n            case 1:\n                return desc[0];\n            case 2:\n                return desc[0] + ' and ' + desc[1];\n            /* If we add a third model type, enable this:\n            default:\n                desc[desc.length-1] = 'and ' + desc[desc.length-1];\n                return ', '.join(desc);\n             */\n        }\n    },\n\n    /**\n     * Prompt the user to delete the currently checked items.\n     */\n    deleteCheckedDialog: function () {\n        var folders = this.folderListView.checked;\n        var items;\n        if (this.itemListView && this.itemListView.checked.length) {\n            items = this.itemListView.checked;\n        }\n        var desc = this._describeResources({ folder: folders, item: items });\n\n        var params = {\n            text: 'Are you sure you want to delete the checked resources (' +\n                  desc + ')?',\n\n            yesText: 'Delete',\n            confirmCallback: () => {\n                var resources = this._getCheckedResourceParam();\n                var resourceSize = this._getCheckedResourceSize();\n                /* Content on DELETE requests is somewhat oddly supported (I\n                 * can't get it to work under jasmine/phantom), so override the\n                 * method. */\n                restRequest({\n                    url: 'resource',\n                    method: 'POST',\n                    data: { resources: resources, progress: true },\n                    headers: { 'X-HTTP-Method-Override': 'DELETE' }\n                }).done(() => {\n                    if (items && items.length && this.parentModel.has('nItems')) {\n                        this.parentModel.increment('nItems', -items.length);\n                    }\n                    if (folders.length && this.parentModel.has('nFolders')) {\n                        this.parentModel.increment('nFolders', -folders.length);\n                    }\n                    if (this.parentModel.has('size') && resourceSize.items) {\n                        this.parentModel.increment('size', -resourceSize.items);\n                    }\n                    this.setCurrentModel(this.parentModel, { setRoute: false });\n                });\n            }\n        };\n        confirm(params);\n    },\n\n    /**\n     * Show and handle the upload dialog\n     */\n    uploadDialog: function () {\n        var container = $('#g-dialog-container');\n\n        new UploadWidget({\n            el: container,\n            parent: this.parentModel,\n            parentType: this.parentType,\n            parentView: this\n        }).on('g:uploadFinished', function (info) {\n            handleClose('upload');\n            this.upload = false;\n            if (this.parentModel.has('nItems')) {\n                this.parentModel.increment('nItems', info.files.length);\n            }\n            if (this.parentModel.has('size')) {\n                this.parentModel.increment('size', info.totalSize);\n            }\n            this.setCurrentModel(this.parentModel, { setRoute: false });\n        }, this).render();\n    },\n\n    /**\n     * When any of the checkboxes is changed, this will be called to update\n     * the checked menu state.\n     */\n    updateChecked: function () {\n        var folders = this.folderListView.checked,\n            items = [];\n\n        // Only show actions corresponding to the minimum access level over\n        // the whole set of checked resources.\n        var minFolderLevel = AccessType.ADMIN;\n        _.every(folders, function (cid) {\n            var folder = this.folderListView.collection.get(cid);\n            minFolderLevel = Math.min(minFolderLevel, folder.getAccessLevel());\n            return minFolderLevel > AccessType.READ; // acts as 'break'\n        }, this);\n\n        var minItemLevel = AccessType.ADMIN;\n        if (this.itemListView) {\n            items = this.itemListView.checked;\n            if (items.length) {\n                minItemLevel = Math.min(minItemLevel, this.parentModel.getAccessLevel());\n            }\n        }\n\n        // Disable folder actions if checkboxes are checked\n        const anyChecked = folders.length + items.length > 0;\n        this.$('.g-folder-actions-button').girderEnable(!anyChecked);\n\n        this.checkedMenuWidget.update({\n            minFolderLevel: minFolderLevel,\n            minItemLevel: minItemLevel,\n            folderCount: folders.length,\n            itemCount: items.length,\n            pickedCount: this.getPickedCount(),\n            pickedCopyAllowed: this.getPickedCopyAllowed(),\n            pickedMoveAllowed: this.getPickedMoveAllowed(),\n            pickedDesc: this.getPickedDescription()\n        });\n    },\n\n    getPickedCount: function () {\n        var pickedCount = 0;\n        if (pickedResources && pickedResources.resources) {\n            _.each(pickedResources.resources, function (list) {\n                pickedCount += list.length;\n            });\n        }\n        return pickedCount;\n    },\n\n    getPickedCopyAllowed: function () {\n        /* We must have something picked */\n        if (!pickedResources) {\n            return false;\n        }\n        /* If we have an item picked but this page isn't a folder's list, then\n         * you can't move or copy them here. */\n        if (this.parentModel.resourceName !== 'folder') {\n            if (pickedResources.resources.item &&\n                    pickedResources.resources.item.length) {\n                return false;\n            }\n        }\n        /* We must have permission to write to this folder to be allowed to\n         * copy. */\n        if (this.parentModel.getAccessLevel() < AccessType.WRITE) {\n            return false;\n        }\n        return true;\n    },\n\n    getPickedMoveAllowed: function () {\n        /* All of the restrictions for copy are the same */\n        if (!this.getPickedCopyAllowed()) {\n            return false;\n        }\n        /* We also can't move an item or folder if we don't have permission to\n         * delete that item or folder (since a move deletes it from the\n         * original spot). */\n        if (pickedResources.minFolderLevel < AccessType.ADMIN) {\n            return false;\n        }\n        if (pickedResources.minItemLevel < AccessType.WRITE) {\n            return false;\n        }\n        return true;\n    },\n\n    getPickedDescription: function () {\n        if (!pickedResources || !pickedResources.resources) {\n            return '';\n        }\n        return this._describeResources(pickedResources.resources);\n    },\n\n    /**\n     * Get a parameter that can be added to a url for the checked resources.\n     */\n    _getCheckedResourceParam: function (asObject) {\n        var resources = { folder: [], item: [] };\n        var folders = this.folderListView.checked;\n        _.each(folders, function (cid) {\n            var folder = this.folderListView.collection.get(cid);\n            resources.folder.push(folder.id);\n        }, this);\n        if (this.itemListView) {\n            var items = this.itemListView.checked;\n            _.each(items, function (cid) {\n                var item = this.itemListView.collection.get(cid);\n                resources.item.push(item.id);\n            }, this);\n        }\n        _.each(resources, function (list, key) {\n            if (!list.length) {\n                delete resources[key];\n            }\n        });\n        if (asObject) {\n            return resources;\n        }\n        return JSON.stringify(resources);\n    },\n\n    /**\n     * Get the sum of the sizes of checked resources.\n     */\n    _getCheckedResourceSize: function () {\n        var totalSize = { items: 0, folders: 0 };\n        var folders = this.folderListView.checked;\n        _.each(folders, function (cid) {\n            var folder = this.folderListView.collection.get(cid);\n            totalSize.folders += (folder.get('size') || 0);\n        }, this);\n        if (this.itemListView) {\n            var items = this.itemListView.checked;\n            _.each(items, function (cid) {\n                var item = this.itemListView.collection.get(cid);\n                totalSize.items += (item.get('size') || 0);\n            }, this);\n        }\n        return totalSize;\n    },\n\n    downloadChecked: function () {\n        var url = getApiRoot() + '/resource/download';\n        var resources = this._getCheckedResourceParam();\n        var data = { resources: resources };\n\n        this.redirectViaForm('POST', url, data);\n    },\n\n    pickChecked: function () {\n        if (!pickedResources) {\n            pickedResources = {\n                resources: {},\n                minItemLevel: AccessType.ADMIN,\n                minFolderLevel: AccessType.ADMIN\n            };\n        }\n        /* Maintain our minimum permissions.  It is expensive to compute them\n         * arbitrarily later. */\n        var folders = this.folderListView.checked;\n        _.every(folders, function (cid) {\n            var folder = this.folderListView.collection.get(cid);\n            pickedResources.minFolderLevel = Math.min(\n                pickedResources.minFolderLevel,\n                folder.getAccessLevel());\n            return (pickedResources.minFolderLevel >\n                    AccessType.READ); // acts as 'break'\n        }, this);\n        if (this.itemListView) {\n            var items = this.itemListView.checked;\n            if (items.length) {\n                pickedResources.minItemLevel = Math.min(\n                    pickedResources.minItemLevel,\n                    this.parentModel.getAccessLevel());\n            }\n        }\n        var resources = this._getCheckedResourceParam(true);\n        var pickDesc = this._describeResources(resources);\n        /* Merge these resources with any that are already picked */\n        var existing = pickedResources.resources;\n        _.each(existing, function (list, resource) {\n            if (!resources[resource]) {\n                resources[resource] = list;\n            } else {\n                resources[resource] = _.union(list, resources[resource]);\n            }\n        });\n        pickedResources.resources = resources;\n        this.updateChecked();\n        var totalPickDesc = this.getPickedDescription();\n        var desc = totalPickDesc + ' picked.';\n        if (pickDesc !== totalPickDesc) {\n            desc = pickDesc + ' added to picked resources.  Now ' + desc;\n        }\n        events.trigger('g:alert', {\n            icon: 'ok',\n            text: desc,\n            type: 'info',\n            timeout: 4000\n        });\n    },\n\n    _incrementCounts: function (nFolders, nItems) {\n        if (this.parentModel.has('nItems')) {\n            this.parentModel.increment('nItems', nItems);\n        }\n        if (this.parentModel.has('nFolders')) {\n            this.parentModel.increment('nFolders', nFolders);\n        }\n    },\n\n    movePickedResources: function () {\n        if (!this.getPickedMoveAllowed()) {\n            return;\n        }\n        var resources = JSON.stringify(pickedResources.resources);\n        var nFolders = (pickedResources.resources.folder || []).length;\n        var nItems = (pickedResources.resources.item || []).length;\n        restRequest({\n            url: 'resource/move',\n            method: 'PUT',\n            data: {\n                resources: resources,\n                parentType: this.parentModel.resourceName,\n                parentId: this.parentModel.get('_id'),\n                progress: true\n            }\n        }).done(() => {\n            this._incrementCounts(nFolders, nItems);\n            this.setCurrentModel(this.parentModel, { setRoute: false });\n        });\n        this.clearPickedResources();\n    },\n\n    copyPickedResources: function () {\n        if (!this.getPickedCopyAllowed()) {\n            return;\n        }\n        var resources = JSON.stringify(pickedResources.resources);\n        var nFolders = (pickedResources.resources.folder || []).length;\n        var nItems = (pickedResources.resources.item || []).length;\n        restRequest({\n            url: 'resource/copy',\n            method: 'POST',\n            data: {\n                resources: resources,\n                parentType: this.parentModel.resourceName,\n                parentId: this.parentModel.get('_id'),\n                progress: true\n            }\n        }).done(() => {\n            this._incrementCounts(nFolders, nItems);\n            this.setCurrentModel(this.parentModel, { setRoute: false });\n        });\n        this.clearPickedResources();\n    },\n\n    clearPickedResources: function (event) {\n        this.constructor.resetPickedResources();\n        this.updateChecked();\n        if (event) {\n            events.trigger('g:alert', {\n                icon: 'ok',\n                text: 'Cleared picked resources',\n                type: 'info',\n                timeout: 4000\n            });\n        }\n    },\n\n    redirectViaForm: function (method, url, data) {\n        var form = $('<form/>').attr({ action: url, method: method });\n        _.each(data, function (value, key) {\n            form.append($('<input/>').attr({ type: 'text', name: key, value: value }));\n        });\n        // $(form).trigger('submit') will *not* work w/ Firefox (http://stackoverflow.com/q/7117084/250457)\n        $(form).appendTo('body').trigger('submit').remove();\n    },\n\n    editAccess: function () {\n        new AccessWidget({\n            el: $('#g-dialog-container'),\n            modelType: this.parentModel.resourceName,\n            model: this.parentModel,\n            parentView: this\n        }).on('g:accessListSaved', function (params) {\n            if (params.recurse) {\n                // Refresh list since the public flag may have changed on the children.\n                this.refreshFolderList();\n            }\n        }, this);\n    },\n\n    /**\n     * Reloads the folder list view.\n     */\n    refreshFolderList: function () {\n        this.folderListView.collection.fetch(null, true);\n    },\n\n    /**\n     * Select (highlight) an item in the list.\n     * @param item An ItemModel instance representing the item to select.\n     */\n    selectItem: function (item) {\n        this.itemListView.selectItem(item);\n    },\n\n    /**\n     * Return the currently selected item, or null if there is no selected item.\n     */\n    getSelectedItem: function () {\n        return this.itemListView.getSelectedItem();\n    },\n\n    /**\n     * In order to handle range selection, we must listen to checkbox changes\n     * at this level, in case a range selection crosses the boundary between\n     * folders and items.\n     */\n    checkboxListener: function (e) {\n        var checkbox = $(e.currentTarget);\n\n        if (this._lastCheckbox) {\n            if (e.shiftKey) {\n                var checkboxes = this.$el.find(':checkbox');\n                var from = checkboxes.index(this._lastCheckbox);\n                var to = checkboxes.index(checkbox);\n\n                checkboxes.slice(Math.min(from, to), Math.max(from, to) + 1)\n                    .prop('checked', checkbox.prop('checked'));\n\n                this.folderListView.recomputeChecked();\n\n                if (this.itemListView) {\n                    this.itemListView.recomputeChecked();\n                }\n\n                this.updateChecked();\n            }\n        }\n        this._lastCheckbox = checkbox;\n    }\n}, {\n    /* Because we need to be able to clear picked resources when the current user\n     * changes, this function is placed in the girder namespace. */\n    resetPickedResources: function (val) {\n        pickedResources = val || null;\n    },\n    getPickedResources: function () {\n        return pickedResources;\n    }\n});\n\nexport default HierarchyWidget;\n","- selected = selected || {id: ''};\nselect#g-root-selector.form-control(required)\n  if !selected.id\n    option(value=\"\", disabled, selected, hidden) Select a root...\n  each groupName in display\n    if groupName === 'Home' && home\n      option(value=home.id, selected=selected.id === home.id) Home\n    else if groupName in groups\n      - var group = groups[groupName];\n      optgroup(label=groupName)\n        each model in group.models\n          if !home || model.id !== home.id\n            option(value=model.id, data-group=groupName, selected=model.id === selected.id)= format(model)\n","import _ from 'underscore';\n\nimport CollectionCollection from '@girder/core/collections/CollectionCollection';\nimport UserCollection from '@girder/core/collections/UserCollection';\nimport View from '@girder/core/views/View';\nimport events from '@girder/core/events';\nimport { getCurrentUser } from '@girder/core/auth';\n\nimport RootSelectorWidgetTemplate from '@girder/core/templates/widgets/rootSelectorWidget.pug';\n\n/**\n * This widget creates a dropdown box allowing the user to select\n * \"root\" paths for a hierarchy widget.\n *\n * @emits RootSelectorWidget#g:selected The selected element changed\n * @type {object}\n * @property {Model|null} root The selected root model\n * @property {string|null} group The selection group\n *\n * @emits RootSelectorWidget#g:group A collection group was updated\n * @type {object}\n * @property {Collection} collection\n */\nvar RootSelectorWidget = View.extend({\n    events: {\n        'change #g-root-selector': '_selectRoot'\n    },\n\n    /**\n     * Initialize the widget.  The caller can configure the list of items\n     * that are present in the select box.  If no values are given, then\n     * appropriate rest calls will be made to fetch models automatically.\n     *\n     * Additional categories of roots can be provided via an object mapping,\n     * for example:\n     *\n     *   {\n     *     friends: new UserCollection([...]),\n     *     saved: new FolderCollection([...])\n     *   }\n     *\n     * Only a single page of results are displayed for each collection provided.\n     * The default maximum number can be configured, but for more sophisticated\n     * behavior, the caller should act on the collection objects directly and\n     * rerender.\n     *\n     * @param {object} settings\n     * @param {UserModel} [settings.home=getCurrentUser()]\n     * @param {object} [settings.groups] Additional collection groups to add\n     * @param {number} [settings.pageLimit=25] The maximum number of models to fetch\n     * @param {Model} [settings.selected] The default/current selection\n     * @param {string[]} [settings.display=['Home', 'Collections', 'Users'] Display order\n     * @param {boolean} [settings.reset=true] Always fetch from offset 0\n     * @param {Model|string} [settings.selectByResource] use the baseParentId to\n     * set the default selected item, can use a model based like an object, or a specific string ParentId\n     *\n     */\n    initialize: function (settings) {\n        settings = settings || {};\n\n        this.pageLimit = settings.pageLimit || 25;\n\n        // collections are provided for public access here\n        this.groups = {\n            Collections: new CollectionCollection(),\n            Users: new UserCollection()\n        };\n\n        this.groups.Collections.pageLimit = settings.pageLimit;\n        this.groups.Users.pageLimit = settings.pageLimit;\n        this.groups.Users.sortField = 'login';\n\n        // override default selection groups\n        _.extend(this.groups, settings.groups);\n\n        // attach collection change events\n        _.each(this.groups, (group) => {\n            this.listenTo(group, 'g:changed', () => {\n                this._updateGroup(group);\n            });\n        });\n\n        // possible values that determine rendered behavior for \"Home\":\n        //   - model: show this model as Home\n        //   - undefined|null: use getCurrentUser()\n        this.home = settings.home;\n\n        // we need to fetch the collections and rerender on login\n        this.listenTo(events, 'g:login', this.fetch);\n\n        this.selected = settings.selected;\n        this.selectByResource = settings.selectByResource;\n        this.display = settings.display || ['Home', 'Collections', 'Users'];\n\n        this.fetch();\n    },\n\n    render: function () {\n        this._home = this.home || getCurrentUser();\n        // Set the selected item if it is already defined and get it by resource if not\n        if (this.selectByResource) {\n            this.setRootByBaseParent(this.selectByResource);\n        }\n        this.$el.html(\n            RootSelectorWidgetTemplate({\n                home: this._home,\n                groups: this.groups,\n                display: this.display,\n                selected: this.selected,\n                format: this._formatName\n            })\n        );\n\n        return this;\n    },\n\n    setRootByBaseParent: function (baseParentId) {\n        // Filter for an Id String from an object if given\n        if (_.isObject(baseParentId)) {\n            if ((baseParentId.attributes || {}).baseParentId !== undefined) {\n                baseParentId = baseParentId.attributes.baseParentId;\n            }\n        }\n\n        if (_.isString(baseParentId)) {\n            _.each(this.groups, (group) => {\n                if (group.get(baseParentId) !== undefined) {\n                    this.selected = group.get(baseParentId);\n                }\n            });\n        }\n    },\n\n    /**\n     * Called when the user selects a new item.  Resolves the\n     * model object from the DOM and triggers the g:selected event.\n     */\n    _selectRoot: function () {\n        var sel = this.$(':selected');\n        var id = sel.val();\n        var group = sel.data('group') || null;\n        this.selected = null;\n        if (_.has(this.groups, group)) {\n            this.selected = this.groups[group].get(id);\n        } else if (this._home && this._home.id === id) {\n            this.selected = this._home;\n        }\n        this.trigger('g:selected', {\n            root: this.selected,\n            group: group\n        });\n    },\n\n    /**\n     * Called when a collection is modified... rerenders the view.\n     */\n    _updateGroup: function (collection) {\n        this.trigger('g:group', {\n            collection: collection\n        });\n        this.render();\n    },\n\n    /**\n     * Return a string to display for the given model.\n     */\n    _formatName: function (model) {\n        var name = model.id;\n        switch (model.get('_modelType')) {\n            case 'user':\n                name = model.get('login');\n                break;\n            case 'folder':\n            case 'collection':\n                name = model.get('name');\n                break;\n        }\n        return name;\n    },\n\n    /**\n     * Fetch all collections from the server.\n     */\n    fetch: function () {\n        var reset = this.reset;\n        _.each(this.groups, function (collection) {\n            collection.fetch(null, reset);\n        });\n    }\n});\n\nexport default RootSelectorWidget;\n",".modal-dialog\n  .modal-content\n    .modal-header\n      button.close(data-dismiss='modal', aria-hidden='true', type='button') &times;\n      h4.modal-title\n        = title\n\n    .modal-body.g-browser-widget\n      .g-hierarchy-root-container.form-group\n      .g-hierarchy-widget-container.g-wait-for-root.form-group.hidden\n\n      if input\n        .g-input-element.form-group\n          label.control-label(for='g-input-element') #{input.label}\n          input#g-input-element.form-control(\n            type='text', placeholder=input.placeholder, value=input.default)\n\n      .help-block.g-wait-for-root.hidden\n        = help\n\n      if preview\n        .g-selected-model.g-wait-for-root.form-group.hidden\n          label.control-label(for='g-selected-model') Selected #{selectItem ? 'item' : 'folder'}\n          input#g-selected-model.form-control(type='text', readonly, value=defaultSelectedResource)\n\n      .g-validation-failed-message.hidden\n\n    .modal-footer\n      a.btn.btn-small.btn-default(data-dismiss='modal') Cancel\n      button.g-submit-button.btn.btn-small.btn-primary(type='submit')\n        i.icon-edit\n        = submit\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport HierarchyWidget from '@girder/core/views/widgets/HierarchyWidget';\nimport RootSelectorWidget from '@girder/core/views/widgets/RootSelectorWidget';\nimport View from '@girder/core/views/View';\nimport CollectionModel from '@girder/core/models/CollectionModel';\nimport FolderModel from '@girder/core/models/FolderModel';\nimport UserModel from '@girder/core/models/UserModel';\n\nimport BrowserWidgetTemplate from '@girder/core/templates/widgets/browserWidget.pug';\n\nimport '@girder/core/stylesheets/widgets/browserWidget.styl';\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This widget provides the user with an interface similar to a filesystem\n * browser to pick a single user, collection, folder, or item from a\n * hierarchical view.\n */\nvar BrowserWidget = View.extend({\n    events: {\n        'click .g-submit-button': function () {\n            this._validate();\n        }\n    },\n\n    /**\n     * Initialize the widget.\n     * @param {object} settings\n     * @param {string} [titleText=\"Select an item\"] Text to display in the modal header\n     * @param {string} [helpText] Info text to display below the hierarchy widget\n     * @param {string} [submitText=\"Save\"] Text to display on the submit button\n     * @param {boolean} [showItems=false] Show items in the hierarchy widget\n     * @param {boolean} [showPreview=true] Show a preview of the current object id\n     * @param {function} [validate] A validation function, which is passed the selected model as a\n        parameter, and which should return a promise. The returned promise should resolve if the\n        selection is acceptable and reject with a string value (as an error message) if the\n        selection is unacceptable.\n     * @param {object} [rootSelectorSettings] Settings passed to the root selector widget\n     * @param {boolean} [showMetadata=false] Show the metadata editor inside the hierarchy widget\n     * @param {Model} [root] The default root model to pass to the hierarchy widget\n     * @param {Model} [defaultSelectedResource] default resource item to be selected.  It will start\n     *  the browser with this item selected.  Will override the root to the parent of\n     *  the defaultSelectedResource\n     * @param {boolean} [selectItem=false] Adjust behavior to enable selecting items rather\n     *   than folders. This will add a handler to the hierarchy widget responding to\n     *   clicks on items to select a target rather than inferring it from the browsed\n     *   location.\n     * @param {object} [input=false] Settings passed to an optional text input box\n     *   The input box is primarily meant to be for a user to enter a file name\n     *   as in a \"Save As\" dialog.  The default (false) hides this element.\n     * @param {string} [input.label=\"Name\"] A label for the input element.\n     * @param {string} [input.default] The default value\n     * @param {function} [input.validate] A validation function, which is passed the value of the\n        user-specified input element as a parameter, and which should return a promise. The returned\n        promise should resolve if the selection is acceptable and reject with a string value (as an\n        error message) if the selection is unacceptable.\n     * @param {string} [input.placeholder] A placeholder string for the input element.\n     * @param {boolean} [highlightItem=false] highlights the selected item in the hierarchy and scrolls to it.\n     * @param {boolean} [paginated=false] the browser widget is paginated\n     */\n    initialize: function (settings) {\n        // store options\n        settings = settings || {};\n        this.titleText = settings.titleText || 'Select an item';\n        this.validate = settings.validate || _.constant($.Deferred().resolve().promise());\n        this.helpText = settings.helpText;\n        this.showItems = settings.showItems;\n        this.showPreview = _.isUndefined(settings.showPreview) ? true : !!settings.showPreview;\n        this.submitText = settings.submitText || 'Save';\n        this.root = settings.root;\n        this.defaultSelectedResource = settings.defaultSelectedResource;\n        this.input = settings.input;\n        this.selectItem = !!settings.selectItem;\n        this.showMetadata = !!settings.showMetadata;\n        this.highlightItem = !!settings.highlightItem;\n        this.paginated = !!settings.paginated;\n        this._selected = null;\n\n        // Sets RootSelectorWidget to open properly to the root if not already set in the settings\n        if (this.defaultSelectedResource) {\n            if (!settings.rootSelectorSettings) {\n                settings.rootSelectorSettings = {};\n            }\n            if (!settings.rootSelectorSettings.selectByResource) {\n                settings.rootSelectorSettings.selectByResource = this.defaultSelectedResource;\n            }\n        }\n        // generate the root selection view and listen to it's events\n        this._rootSelectionView = new RootSelectorWidget(_.extend({\n            parentView: this\n        }, settings.rootSelectorSettings));\n        this.listenTo(this._rootSelectionView, 'g:selected', function (evt) {\n            this.root = evt.root;\n            this._renderHierarchyView();\n        });\n        if (this.defaultSelectedResource && !this.root) {\n            this._calculateDefaultSelectedRoot();\n        }\n    },\n\n    render: function () {\n        const defaultResourcename = (this.defaultSelectedResource && this.defaultSelectedResource.get('name'));\n        this.$el.html(\n            BrowserWidgetTemplate({\n                title: this.titleText,\n                help: this.helpText,\n                preview: this.showPreview,\n                submit: this.submitText,\n                input: this.input,\n                selectItem: this.selectItem,\n                defaultSelectedResource: defaultResourcename\n            })\n        ).girderModal(this);\n        this._renderRootSelection();\n        return this;\n    },\n\n    /**\n     * Return the selected model.\n     */\n    selectedModel: function () {\n        return this._selected;\n    },\n\n    _renderRootSelection: function () {\n        this._rootSelectionView.setElement(this.$('.g-hierarchy-root-container')).render();\n        this._renderHierarchyView();\n    },\n\n    _renderHierarchyView: function () {\n        if (this._hierarchyView) {\n            this.stopListening(this._hierarchyView);\n            this._hierarchyView.off();\n            this.$('.g-hierarchy-widget-container').empty();\n        }\n        if (!this.root) {\n            return;\n        }\n        this.$('.g-wait-for-root').removeClass('hidden');\n        this._hierarchyView = new HierarchyWidget({\n            el: this.$('.g-hierarchy-widget-container'),\n            parentView: this,\n            parentModel: this.root,\n            checkboxes: false,\n            routing: false,\n            showActions: false,\n            showItems: this.showItems,\n            onItemClick: _.bind(this._selectItem, this),\n            defaultSelectedResource: this.defaultSelectedResource,\n            highlightItem: this.highlightItem,\n            paginated: this.paginated,\n            showMetadata: this.showMetadata\n        });\n        this.listenTo(this._hierarchyView, 'g:setCurrentModel', this._selectModel);\n        this._selectModel();\n    },\n\n    _resetSelection: function (model) {\n        this._selected = model;\n        this.$('.g-validation-failed-message').addClass('hidden');\n        this.$('.g-selected-model').removeClass('has-error');\n        this.$('.g-input-element').removeClass('has-error');\n        this.$('#g-selected-model').val('');\n        if (this._selected) {\n            this.$('#g-selected-model').val(this._selected.get('name'));\n            if (this.highlightItem && this.selectItem) {\n                this._hierarchyView.selectItem(this._selected);\n            } else {\n                this._hierarchyView.selectFolder(this._selected);\n            }\n        }\n    },\n\n    _selectItem: function (item) {\n        if (!this.selectItem) {\n            return;\n        }\n        this._resetSelection(item);\n    },\n\n    _selectModel: function () {\n        if (this.selectItem) {\n            return;\n        }\n        this._resetSelection(this._hierarchyView.parentModel);\n    },\n\n    /**\n     * Independently validate the input-element and the selected-model.\n     */\n    _validate: function () {\n        // Validate input element\n        let inputValidation;\n        if (this.input && this.input.validate) {\n            inputValidation = this.input.validate(this.$('#g-input-element').val());\n            if (inputValidation === undefined) {\n                console.warn('Static validation is deprecated, return a promise instead');\n                inputValidation = $.Deferred().resolve().promise();\n            } else if (!_.isFunction(inputValidation.then)) {\n                console.warn('Static validation is deprecated, return a promise instead');\n                inputValidation = $.Deferred().reject(inputValidation).promise();\n            }\n        } else {\n            // No validator is implicit acceptance\n            inputValidation = $.Deferred().resolve().promise();\n        }\n\n        // Validate selected element\n        const selectedModel = this.selectedModel();\n        let selectedValidation = this.validate(selectedModel);\n        if (selectedValidation === undefined) {\n            console.warn('Static validation is deprecated, return a promise instead');\n            selectedValidation = $.Deferred().resolve().promise();\n        } else if (!_.isFunction(selectedValidation.then)) {\n            console.warn('Static validation is deprecated, return a promise instead');\n            selectedValidation = $.Deferred().reject(selectedValidation).promise();\n        }\n\n        let invalidInputElement = null;\n        let invalidSelectedModel = null;\n        // We want to wait until both promises to run to completion, which only happens if they're\n        // accepted. So, chain an extra handler on to them, which transforms a rejection into an\n        // acceptance.\n        $.when(\n            inputValidation\n                .catch((failMessage) => {\n                    // input-element is invalid\n                    invalidInputElement = failMessage;\n                    return undefined;\n                }),\n            selectedValidation\n                .catch((failMessage) => {\n                    // selected-model is invalid\n                    invalidSelectedModel = failMessage;\n                    return undefined;\n                })\n        )\n            .done(() => {\n                // Reset any previous error states\n                this.$('.g-selected-model').removeClass('has-error');\n                this.$('.g-input-element').removeClass('has-error');\n                this.$('.g-validation-failed-message').addClass('hidden').html('');\n\n                // The 4 possible outcomes of this validation are as follows...\n                //\n                // Case |  input-element  |  selected-model\n                //  1.  |      Valid      |      Valid\n                //  2.  |      Valid      |     Invalid\n                //  3.  |     Invalid     |      Valid\n                //  4.  |     Invalid     |     Invalid\n                if (!invalidInputElement && !invalidSelectedModel) {\n                    // Case 1\n                    this.root = this._hierarchyView.parentModel;\n                    this.$el.modal('hide');\n                    this.trigger('g:saved', selectedModel, this.$('#g-input-element').val());\n                } else if (!invalidInputElement && invalidSelectedModel) {\n                    // Case 2\n                    this.$('.g-selected-model').addClass('has-error');\n                    this.$('.g-validation-failed-message').removeClass('hidden').text(invalidSelectedModel);\n                } else if (invalidInputElement && !invalidSelectedModel) {\n                    // Case 3\n                    this.$('.g-input-element').addClass('has-error');\n                    this.$('.g-validation-failed-message').removeClass('hidden').text(invalidInputElement);\n                } else if (invalidInputElement && invalidSelectedModel) {\n                    // Case 4\n                    this.$('.g-selected-model').addClass('has-error');\n                    this.$('.g-input-element').addClass('has-error');\n                    this.$('.g-validation-failed-message').removeClass('hidden').html(\n                        _.escape(invalidInputElement) + '<br>' + _.escape(invalidSelectedModel));\n                }\n            });\n    },\n\n    /**\n     * If we have a defaultSelectedResource we need the root item for the hiearachyWidget\n     * This will calculate what the root item should be if one hasn't been supplied\n     */\n    _calculateDefaultSelectedRoot: function () {\n        // If we are are only using folders, the root is the defaultselectedResource then\n        if (!this.selectItem) {\n            this.root = this.defaultSelectedResource;\n            return;\n        }\n        // We need to calculate the parent model of the default.selectedResoure when selectItem is true\n        const modelTypes = {\n            folder: FolderModel,\n            collection: CollectionModel,\n            user: UserModel\n        };\n        let modelType = 'folder'; // folder type by default, other types if necessary\n        let modelId = null;\n        // If it is an item it will have a folderId associated with it as a parent item\n        if (this.defaultSelectedResource.get('folderId')) {\n            modelId = this.defaultSelectedResource.get('folderId');\n        } else if (this.defaultSelectedResource.get('parentCollection')) {\n            // Case for providing a folder as the defaultSelectedResource but want the user to select an item\n            // folder parent is either 'user' | 'folder' | 'collection', most likely folder though\n            modelType = this.defaultSelectedResource.get('parentCollection');\n            modelId = this.defaultSelectedResource.get('parentId');\n        }\n        if (modelTypes[modelType] && modelId) {\n            const parentModel = new modelTypes[modelType]();\n            parentModel.set({\n                _id: modelId\n            }).on('g:fetched', function () {\n                this.root = parentModel;\n                this.render();\n            }, this).on('g:error', function () {\n                this.render();\n            }, this).fetch();\n        }\n    }\n});\n\nexport default BrowserWidget;\n",".g-body-title Import existing data from the filesystem\n.g-body-subtitle= assetstore.name()\n\n.g-import-instructions.\n  Use this page to import existing data from this assetstore's filesystem.\n  Specify a root directory on the filesystem, and it will be imported recursively.\n  The directory does not need to be under the assetstore's root dir. You must also\n  specify a destination collection, user, or folder ID under which to place the\n  imported data. Files that are imported are not managed directly by the server.\n  They will not be copied, but will be served from their existing location. When\n  the referencing files in Girder are deleted, the underlying imported file will\n  not be removed.\n\nform.g-filesystem-import-form\n  .form-group\n    label(for=\"g-filesystem-import-path\") Import path (absolute path to directory or file)\n    input#g-filesystem-import-path.form-control.input-sm(type=\"text\")\n  .form-group\n    label(for=\"g-filesystem-import-dest-type\") Destination type\n    select#g-filesystem-import-dest-type.form-control\n      option(value=\"folder\") Folder\n      option(value=\"user\") User\n      option(value=\"collection\") Collection\n  .form-group\n    label(for=\"g-filesystem-import-dest-id\") Destination ID\n    .input-group.input-group-sm\n      input#g-filesystem-import-dest-id.form-control.input-sm(\n          type=\"text\",\n          placeholder=\"Existing folder, user, or collection ID to use as the destination\")\n      .input-group-btn\n        button.g-open-browser.btn.btn-default(type=\"button\")\n          i.icon-folder-open\n  .form-group\n    label(for=\"g-filesystem-import-leaf-items\") Leaf Folders as Items\n    select#g-filesystem-import-leaf-items.form-control\n      option(value=\"false\") False\n      option(value=\"true\") True\n  .g-validation-failed-message\n  button.g-submit-assetstore-import.btn.btn-success(type=\"submit\")\n    i.icon-link-ext\n    |  Begin import\n","import $ from 'jquery';\n\nimport BrowserWidget from '@girder/core/views/widgets/BrowserWidget';\nimport router from '@girder/core/router';\nimport View from '@girder/core/views/View';\nimport { restRequest } from '@girder/core/rest';\n\nimport FilesystemImportTemplate from '@girder/core/templates/body/filesystemImport.pug';\n\nvar FilesystemImportView = View.extend({\n    events: {\n        'submit .g-filesystem-import-form': function (e) {\n            e.preventDefault();\n\n            var destId = this.$('#g-filesystem-import-dest-id').val().trim().split(/\\s/)[0],\n                destType = this.$('#g-filesystem-import-dest-type').val(),\n                foldersAsItems = this.$('#g-filesystem-import-leaf-items').val();\n\n            this.$('.g-validation-failed-message').empty();\n\n            this.assetstore.off('g:imported').on('g:imported', function () {\n                router.navigate(destType + '/' + destId, { trigger: true });\n            }, this).on('g:error', function (resp) {\n                this.$('.g-validation-failed-message').text(resp.responseJSON.message);\n            }, this).import({\n                importPath: this.$('#g-filesystem-import-path').val().trim(),\n                leafFoldersAsItems: foldersAsItems,\n                destinationId: destId,\n                destinationType: destType,\n                progress: true\n            });\n        },\n        'click .g-open-browser': '_openBrowser'\n    },\n\n    initialize: function (settings) {\n        this._browserWidgetView = new BrowserWidget({\n            parentView: this,\n            titleText: 'Destination',\n            helpText: 'Browse to a location to select it as the destination.',\n            submitText: 'Select Destination',\n            validate: function (model) {\n                const isValid = $.Deferred();\n                if (!model) {\n                    isValid.reject('Please select a valid root.');\n                } else {\n                    isValid.resolve();\n                }\n                return isValid.promise();\n            }\n        });\n        this.listenTo(this._browserWidgetView, 'g:saved', function (val) {\n            this.$('#g-filesystem-import-dest-id').val(val.id);\n            this.$('#g-filesystem-import-dest-type').val(val.get('_modelType'));\n            restRequest({\n                url: `resource/${val.id}/path`,\n                method: 'GET',\n                data: { type: val.get('_modelType') }\n            }).done((result) => {\n                // Only add the resource path if the value wasn't altered\n                if (this.$('#g-filesystem-import-dest-id').val() === val.id) {\n                    this.$('#g-filesystem-import-dest-id').val(`${val.id} (${result})`);\n                }\n            });\n        });\n        this.assetstore = settings.assetstore;\n        this.render();\n    },\n\n    render: function () {\n        this.$el.html(FilesystemImportTemplate({\n            assetstore: this.assetstore\n        }));\n\n        return this;\n    },\n\n    _openBrowser: function () {\n        this._browserWidgetView.setElement($('#g-dialog-container')).render();\n    }\n});\n\nexport default FilesystemImportView;\n",".g-body-title Import existing data from S3\n.g-body-subtitle= assetstore.get('name')\n\n.g-import-instructions.g-s3import-instructions.\n  Use this page to import existing data from this assetstore's S3 bucket\n  (#[b= assetstore.get('bucket') ]). You may import a specific directory of keys\n  within the bucket, or a specific key by path. If you wish to import the entire\n  bucket into the selected destination, simply leave the import path field blank.\n  If you specify a directory, it will be imported recursively. You must also\n  specify a destination collection, user, or folder ID under which to place the\n  imported data.\n\nform.g-s3-import-form\n  .form-group\n    label(for=\"g-s3-import-path\") Import path (key or directory)\n    input#g-s3-import-path.form-control.input-sm(type=\"text\")\n  .form-group\n    label(for=\"g-s3-import-dest-type\") Destination type\n    select#g-s3-import-dest-type.form-control\n      option(value=\"folder\") Folder\n      option(value=\"user\") User\n      option(value=\"collection\") Collection\n  .form-group\n    label(for=\"g-s3-import-dest-id\") Destination ID\n    .input-group.input-group-sm\n      input#g-s3-import-dest-id.form-control.input-sm(\n          type=\"text\",\n          placeholder=\"Existing folder, user, or collection ID to use as the destination\")\n      .input-group-btn\n        button.g-open-browser.btn.btn-default(type=\"button\")\n          i.icon-folder-open\n  .g-validation-failed-message\n  button.g-submit-assetstore-import.g-submit-s3-import.btn.btn-success(type=\"submit\")\n    i.icon-link-ext\n    |  Begin import\n","import $ from 'jquery';\n\nimport BrowserWidget from '@girder/core/views/widgets/BrowserWidget';\nimport router from '@girder/core/router';\nimport View from '@girder/core/views/View';\nimport { restRequest } from '@girder/core/rest';\n\nimport S3ImportTemplate from '@girder/core/templates/body/s3Import.pug';\n\nvar S3ImportView = View.extend({\n    events: {\n        'submit .g-s3-import-form': function (e) {\n            e.preventDefault();\n\n            var destId = this.$('#g-s3-import-dest-id').val().trim().split(/\\s/)[0],\n                destType = this.$('#g-s3-import-dest-type').val();\n\n            this.$('.g-validation-failed-message').empty();\n\n            this.assetstore.off('g:imported').on('g:imported', function () {\n                router.navigate(destType + '/' + destId, { trigger: true });\n            }, this).on('g:error', function (resp) {\n                this.$('.g-validation-failed-message').text(resp.responseJSON.message);\n            }, this).import({\n                importPath: this.$('#g-s3-import-path').val().trim(),\n                destinationId: destId,\n                destinationType: destType,\n                progress: true\n            });\n        },\n        'click .g-open-browser': '_openBrowser'\n    },\n\n    initialize: function (settings) {\n        this._browserWidgetView = new BrowserWidget({\n            parentView: this,\n            titleText: 'Destination',\n            helpText: 'Browse to a location to select it as the destination.',\n            submitText: 'Select Destination',\n            validate: function (model) {\n                const isValid = $.Deferred();\n                if (!model) {\n                    isValid.reject('Please select a valid root.');\n                } else {\n                    isValid.resolve();\n                }\n                return isValid.promise();\n            }\n        });\n        this.listenTo(this._browserWidgetView, 'g:saved', function (val) {\n            this.$('#g-s3-import-dest-id').val(val.id);\n            this.$('#g-s3-import-dest-type').val(val.get('_modelType'));\n            restRequest({\n                url: `resource/${val.id}/path`,\n                method: 'GET',\n                data: { type: val.get('_modelType') }\n            }).done((result) => {\n                // Only add the resource path if the value wasn't altered\n                if (this.$('#g-s3-import-dest-id').val() === val.id) {\n                    this.$('#g-s3-import-dest-id').val(`${val.id} (${result})`);\n                }\n            });\n        });\n        this.assetstore = settings.assetstore;\n        this.render();\n    },\n\n    render: function () {\n        this.$el.html(S3ImportTemplate({\n            assetstore: this.assetstore\n        }));\n        return this;\n    },\n\n    _openBrowser: function () {\n        this._browserWidgetView.setElement($('#g-dialog-container')).render();\n    }\n});\n\nexport default S3ImportView;\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport AssetstoreCollection from '@girder/core/collections/AssetstoreCollection';\nimport AssetstoreModel from '@girder/core/models/AssetstoreModel';\nimport EditAssetstoreWidget from '@girder/core/views/widgets/EditAssetstoreWidget';\nimport NewAssetstoreWidget from '@girder/core/views/widgets/NewAssetstoreWidget';\nimport View from '@girder/core/views/View';\nimport { AssetstoreType } from '@girder/core/constants';\nimport { cancelRestRequests } from '@girder/core/rest';\nimport { confirm } from '@girder/core/dialog';\nimport events from '@girder/core/events';\nimport { formatSize } from '@girder/core/misc';\nimport { getCurrentUser } from '@girder/core/auth';\n\nimport AssetstoresTemplate from '@girder/core/templates/body/assetstores.pug';\n\nimport '@girder/core/stylesheets/body/assetstores.styl';\n\nimport ApexCharts from 'apexcharts';\n\n/**\n * This private data structure is a dynamic way to map assetstore types to the views\n * that should be rendered to import data into them.\n */\nimport FilesystemImportView from '@girder/core/views/body/FilesystemImportView';\nimport S3ImportView from '@girder/core/views/body/S3ImportView';\nvar assetstoreImportViewMap = {};\nassetstoreImportViewMap[AssetstoreType.FILESYSTEM] = FilesystemImportView;\nassetstoreImportViewMap[AssetstoreType.S3] = S3ImportView;\n\n/**\n * This view shows the admin console, which links to all available admin pages.\n */\nvar AssetstoresView = View.extend({\n    events: {\n        'click .g-set-current': 'setCurrentAssetstore',\n        'click .g-delete-assetstore': 'deleteAssetstore',\n        'click .g-edit-assetstore': 'editAssetstore'\n    },\n\n    initialize: function (settings) {\n        cancelRestRequests('fetch');\n        this.plots = [];\n        this.assetstoreEdit = settings.assetstoreEdit || false;\n        this.importableTypes = [\n            AssetstoreType.FILESYSTEM,\n            AssetstoreType.S3\n        ].concat(settings.importableTypes || []);\n\n        this.newAssetstoreWidget = new NewAssetstoreWidget({\n            parentView: this\n        }).on('g:created', this.addAssetstore, this);\n\n        // Fetch all of the current assetstores\n        this.collection = new AssetstoreCollection();\n        this.collection.on('g:changed', function () {\n            this.render();\n        }, this).fetch();\n    },\n\n    destroy: function () {\n        this._destroyPlots();\n        View.prototype.destroy.call(this);\n    },\n\n    _destroyPlots: function () {\n        for (const plot of this.plots) {\n            plot.destroy();\n        }\n        this.plots = [];\n    },\n\n    render: function () {\n        if (!getCurrentUser() || !getCurrentUser().get('admin')) {\n            this.$el.text('Must be logged in as admin to view this page.');\n            return;\n        }\n        this._destroyPlots();\n        this.$el.html(AssetstoresTemplate({\n            assetstores: this.collection.toArray(),\n            types: AssetstoreType,\n            importableTypes: this.importableTypes,\n            getAssetstoreImportRoute: this.getAssetstoreImportRoute\n        }));\n\n        this.newAssetstoreWidget.setElement(this.$('#g-new-assetstore-container')).render();\n\n        _.each(this.$('.g-assetstore-capacity-chart'),\n            this.capacityChart, this);\n\n        if (this.assetstoreEdit) {\n            this.editAssetstoreDialog(this.assetstoreEdit);\n            this.assetstoreEdit = false;\n        }\n\n        return this;\n    },\n\n    addAssetstore: function (assetstore) {\n        this.collection.add(assetstore);\n        this.render();\n    },\n\n    /**\n     * Renders the capacities of the assetstores in a pie chart using Chart.js.\n     * @param el The canvas element to render in.\n     */\n    capacityChart: function (el) {\n        var assetstore = this.collection.get($(el).attr('cid'));\n        var capacity = assetstore.get('capacity');\n        var used = capacity.total - capacity.free;\n        if (capacity.reserved) {\n            used -= capacity.reserved;\n        }\n        var data = [\n            ['Used (' + formatSize(used) + ')', used],\n            ['Free (' + formatSize(capacity.free) + ')', capacity.free]\n        ];\n        if (capacity.reserved) {\n            data.push(['Reserved (' + formatSize(capacity.reserved) + ')', capacity.reserved]);\n        }\n        var plot = new ApexCharts(el, {\n            series: data.map(d => d[1]),\n            chart: {\n                type: 'pie',\n                animations: { enabled: false }\n            },\n            labels: data.map(d => d[0]),\n            plotOptions: {\n                pie: {\n                    startAngle: -90,\n                    endAngle: 270,\n                    expandOnClick: false,\n                    dataLabels: {\n                        enabled: true\n                    }\n                }\n            },\n            dataLabels: {\n                style: {\n                  colors: ['#000', '#000', '#000']\n                },\n                dropShadow: {enabled: false},\n            },\n            legend: { position: 'right' }\n        });\n        plot.render();\n        this.plots.push(plot);\n    },\n\n    setCurrentAssetstore: function (evt) {\n        var el = $(evt.currentTarget);\n        var assetstore = this.collection.get(el.attr('cid'));\n        assetstore.set({ current: true });\n        assetstore.off('g:saved').on('g:saved', function () {\n            events.trigger('g:alert', {\n                icon: 'ok',\n                text: 'Changed current assetstore.',\n                type: 'success',\n                timeout: 4000\n            });\n            this.collection.fetch({}, true);\n        }, this).off('g:error').on('g:error', function (err) {\n            events.trigger('g:alert', {\n                icon: 'cancel',\n                text: err.responseJSON.message,\n                type: 'danger'\n            });\n        }).save();\n    },\n\n    deleteAssetstore: function (evt) {\n        var el = $(evt.currentTarget);\n        var assetstore = this.collection.get(el.attr('cid'));\n\n        confirm({\n            text: 'Are you sure you want to delete the assetstore <b>' +\n                  assetstore.escape('name') + '</b>?  There are no files ' +\n                  'stored in it, and no data will be lost.',\n            escapedHtml: true,\n            yesText: 'Delete',\n            confirmCallback: () => {\n                assetstore.on('g:deleted', function () {\n                    events.trigger('g:alert', {\n                        icon: 'ok',\n                        text: 'Assetstore deleted.',\n                        type: 'success',\n                        timeout: 4000\n                    });\n                    this.collection.fetch({}, true);\n                }, this).off('g:error').on('g:error', function (resp) {\n                    events.trigger('g:alert', {\n                        icon: 'attention',\n                        text: resp.responseJSON.message,\n                        type: 'danger',\n                        timeout: 4000\n                    });\n                }, this).destroy();\n            }\n        });\n    },\n\n    editAssetstore: function (evt) {\n        var cid = $(evt.currentTarget).attr('cid');\n        this.editAssetstoreDialog(cid);\n    },\n\n    editAssetstoreDialog: function (cid) {\n        var assetstore = this.collection.get(cid);\n        var container = $('#g-dialog-container');\n\n        var editAssetstoreWidget = new EditAssetstoreWidget({\n            el: container,\n            model: assetstore,\n            parentView: this\n        }).off('g:saved').on('g:saved', function () {\n            this.render();\n        }, this);\n        editAssetstoreWidget.render();\n    }\n}, {\n    import: function (assetstoreId) {\n        var assetstore = new AssetstoreModel({ _id: assetstoreId });\n        assetstore.once('g:fetched', function () {\n            var View = assetstoreImportViewMap[assetstore.get('type')];\n            if (View) {\n                events.trigger('g:navigateTo', View, {\n                    assetstore: assetstore\n                });\n            } else {\n                throw new Error('No such view');\n            }\n        }).fetch();\n    }\n});\n\nexport { assetstoreImportViewMap };\nexport default AssetstoresView;\n","ul.pagination.pagination-sm\n  li.g-page-prev.disabled\n    a &laquo; Prev\n  li.active\n    a.g-page-number Page #{collection.pageNum() + 1}\n  li.g-page-next.disabled\n    a Next &raquo;\n","import View from '@girder/core/views/View';\n\nimport PaginateWidgetTemplate from '@girder/core/templates/widgets/paginateWidget.pug';\n\n/**\n * This widget is used to provide a consistent widget for iterating amongst\n * pages of a Collection.\n */\nvar PaginateWidget = View.extend({\n    events: {\n        'click .g-page-next:not(.disabled)': function () {\n            this.collection.fetchNextPage();\n        },\n        'click .g-page-prev:not(.disabled)': function () {\n            this.collection.fetchPreviousPage();\n        }\n    },\n\n    initialize: function (settings) {\n        this.collection = settings.collection;\n    },\n\n    /**\n     * Do not call render() until the collection has been fetched once.\n     */\n    render: function () {\n        this.$el.html(PaginateWidgetTemplate({\n            collection: this.collection\n        }));\n\n        this.$('.g-page-next').girderEnable(this.collection.hasNextPage());\n        this.$('.g-page-prev').girderEnable(this.collection.hasPreviousPage());\n        return this;\n    }\n});\n\nexport default PaginateWidget;\n",".g-collection-list-header\n\n  .g-collection-pagination\n  form.g-collection-search-form.form-inline(role=\"form\")\n    .form-group.g-collections-search-container\n\n  if getCurrentUser()\n    button.g-collection-create-button.btn.btn-sm.btn-default\n      i.icon-plus-squared\n      |  Create collection\n\neach collection in collections\n  .g-collection-list-entry.g-top-level-list-entry(public=(collection.get('public') ? \"true\" : \"false\"))\n    .g-collection-right-column\n      .g-collection-created\n        .g-large-screen\n          i.icon-clock\n          | Created on\n          span.g-collection-created-date  #{formatDate(collection.get('created'), DATE_MINUTE)}\n        .g-small-screen\n          i.icon-clock\n          span.g-collection-created-date  #{formatDate(collection.get('created'), DATE_YYMMDD)}\n      if collection.has('size')\n        .g-space-used\n          .g-large-screen\n            i.icon-floppy\n            | Currently using\n            span.g-user-space-used  #{formatSize(collection.get('size'))}\n          .g-small-screen\n            i.icon-floppy\n            span.g-user-space-used  #{formatSize(collection.get('size'))}\n    .g-list-public-status-icon\n      if collection.get('public')\n        i.icon-globe(title=\"Public collection\")\n      else\n        i.icon-lock(title=\"Private collection\")\n    .g-top-level-list-title-container\n      .g-collection-title\n        a.g-collection-link(g-collection-cid=collection.cid)\n          b= collection.name()\n        span.g-text-fade(public=(collection.get('public') ? 'true' : 'false'))\n      if collection.get('description')\n        .g-collection-subtitle\n          a.g-show-description(state=\"hidden\", cid=collection.cid)\n            span Show description\n            i.icon-down-dir\n    .g-clear-right\n    .g-collection-description.hide(cid=collection.cid)\n","import $ from 'jquery';\n\nimport CollectionCollection from '@girder/core/collections/CollectionCollection';\nimport CollectionModel from '@girder/core/models/CollectionModel';\nimport EditCollectionWidget from '@girder/core/views/widgets/EditCollectionWidget';\nimport PaginateWidget from '@girder/core/views/widgets/PaginateWidget';\nimport router from '@girder/core/router';\nimport SearchFieldWidget from '@girder/core/views/widgets/SearchFieldWidget';\nimport View from '@girder/core/views/View';\nimport { cancelRestRequests } from '@girder/core/rest';\nimport { formatDate, formatSize, renderMarkdown, DATE_YYMMDD, DATE_MINUTE } from '@girder/core/misc';\nimport { getCurrentUser } from '@girder/core/auth';\n\nimport CollectionListTemplate from '@girder/core/templates/body/collectionList.pug';\n\nimport '@girder/core/stylesheets/body/collectionList.styl';\n\n/**\n * This view lists the collections.\n */\nvar CollectionsView = View.extend({\n    events: {\n        'click a.g-collection-link': function (event) {\n            var cid = $(event.currentTarget).attr('g-collection-cid');\n            router.navigate('collection/' + this.collection.get(cid).id, { trigger: true });\n        },\n        'click button.g-collection-create-button': 'createCollectionDialog',\n        'submit .g-collections-search-form': function (event) {\n            event.preventDefault();\n        },\n        'click .g-show-description': '_toggleDescription'\n    },\n\n    initialize: function (settings) {\n        cancelRestRequests('fetch');\n        this.collection = new CollectionCollection();\n        this.collection.on('g:changed', function () {\n            this.render();\n        }, this).fetch();\n\n        this.paginateWidget = new PaginateWidget({\n            collection: this.collection,\n            parentView: this\n        });\n\n        this.searchWidget = new SearchFieldWidget({\n            placeholder: 'Search collections...',\n            types: ['collection'],\n            parentView: this\n        }).on('g:resultClicked', this._gotoCollection, this);\n\n        this.create = settings.dialog === 'create';\n    },\n\n    /**\n     * Prompt the user to create a new collection\n     */\n    createCollectionDialog: function () {\n        var container = $('#g-dialog-container');\n\n        new EditCollectionWidget({\n            el: container,\n            parentView: this\n        }).on('g:saved', function (collection) {\n            router.navigate('collection/' + collection.get('_id'),\n                { trigger: true });\n        }, this).render();\n    },\n\n    render: function () {\n        this.$el.html(CollectionListTemplate({\n            collections: this.collection.toArray(),\n            getCurrentUser: getCurrentUser,\n            formatDate: formatDate,\n            DATE_MINUTE: DATE_MINUTE,\n            DATE_YYMMDD: DATE_YYMMDD,\n            formatSize: formatSize\n        }));\n\n        this.paginateWidget.setElement(this.$('.g-collection-pagination')).render();\n        this.searchWidget.setElement(this.$('.g-collections-search-container')).render();\n\n        if (this.create) {\n            this.createCollectionDialog();\n        }\n\n        return this;\n    },\n\n    /**\n     * When the user clicks a search result collection, this helper method\n     * will navigate them to the view for that specific collection.\n     */\n    _gotoCollection: function (result) {\n        var collection = new CollectionModel();\n        collection.set('_id', result.id).on('g:fetched', function () {\n            router.navigate('/collection/' + collection.get('_id'), { trigger: true });\n        }, this).fetch();\n    },\n\n    _toggleDescription: function (e) {\n        const link = $(e.currentTarget);\n        const cid = link.attr('cid');\n        const dest = this.$(`.g-collection-description[cid=\"${cid}\"]`);\n\n        if (link.attr('state') === 'hidden') {\n            renderMarkdown(this.collection.get(cid).get('description'), dest);\n            dest.removeClass('hide');\n            link.attr('state', 'visible');\n            link.find('i').removeClass('icon-down-dir').addClass('icon-up-dir');\n            link.find('span').text('Hide description');\n        } else {\n            dest.addClass('hide');\n            link.attr('state', 'hidden');\n            link.find('i').removeClass('icon-up-dir').addClass('icon-down-dir');\n            link.find('span').text('Show description');\n        }\n    }\n});\n\nexport default CollectionsView;\n",".g-collection-header\n\n  .btn-group.pull-right\n    button.g-collection-actions-button.btn.btn-default.dropdown-toggle(\n        data-toggle=\"dropdown\", title=\"Collection actions\")\n      i.icon-sitemap\n      |  Actions\n      i.icon-down-dir\n    ul.g-collection-actions-menu.dropdown-menu.pull-right(role=\"menu\")\n      li(role=\"presentation\")\n        a.g-download-collection(role=\"menuitem\", href=collection.downloadUrl())\n          i.icon-download\n          | Download collection\n      if (collection.getAccessLevel() >= AccessType.WRITE)\n        li.divider(role=\"presentation\")\n        li(role=\"presentation\")\n          a.g-edit-collection(role=\"menuitem\")\n            i.icon-edit\n            | Edit collection\n      if (collection.getAccessLevel() >= AccessType.ADMIN)\n        li.divider(role=\"presentation\")\n        li(role=\"presentation\")\n          a.g-collection-access-control(role=\"menuitem\")\n            i.icon-lock\n            | Access control\n        li(role=\"presentation\")\n          a.g-delete-collection(role=\"menuitem\")\n            i.icon-trash\n            | Delete collection\n\n  .g-collection-name.g-body-title= collection.name()\n  if collection.get('description')\n    .g-collection-description!= renderMarkdown(collection.get('description'))\n  .g-clear-right\n\n.g-collection-hierarchy-container\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport AccessWidget from '@girder/core/views/widgets/AccessWidget';\nimport CollectionModel from '@girder/core/models/CollectionModel';\nimport EditCollectionWidget from '@girder/core/views/widgets/EditCollectionWidget';\nimport FolderModel from '@girder/core/models/FolderModel';\nimport HierarchyWidget from '@girder/core/views/widgets/HierarchyWidget';\nimport router from '@girder/core/router';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport { cancelRestRequests } from '@girder/core/rest';\nimport { confirm } from '@girder/core/dialog';\nimport { renderMarkdown, formatSize } from '@girder/core/misc';\nimport events from '@girder/core/events';\n\nimport CollectionPageTemplate from '@girder/core/templates/body/collectionPage.pug';\n\nimport '@girder/core/stylesheets/body/collectionPage.styl';\n\nimport 'bootstrap/js/dropdown';\n\n/**\n * This view shows a single collection's page.\n */\nvar CollectionView = View.extend({\n    events: {\n        'click .g-edit-collection': 'editCollection',\n        'click .g-collection-access-control': 'editAccess',\n        'click .g-delete-collection': 'deleteConfirmation'\n    },\n\n    initialize: function (settings) {\n        cancelRestRequests('fetch');\n\n        this.upload = settings.upload || false;\n        this.access = settings.access || false;\n        this.edit = settings.edit || false;\n        this.folderAccess = settings.folderAccess || false;\n        this.folderCreate = settings.folderCreate || false;\n        this.folderEdit = settings.folderEdit || false;\n        this.itemCreate = settings.itemCreate || false;\n\n        // If collection model is already passed, there is no need to fetch.\n        if (settings.collection) {\n            this.model = settings.collection;\n\n            if (settings.folderId) {\n                this.folder = new FolderModel();\n                this.folder.set({\n                    _id: settings.folderId\n                }).on('g:fetched', function () {\n                    this.render();\n                }, this).on('g:error', function () {\n                    this.folder = null;\n                    this.render();\n                }, this).fetch();\n            } else {\n                this.render();\n            }\n        } else if (settings.id) {\n            this.model = new CollectionModel();\n            this.model.set('_id', settings.id);\n\n            this.model.on('g:fetched', function () {\n                this.render();\n            }, this).fetch();\n        }\n    },\n\n    editCollection: function () {\n        var container = $('#g-dialog-container');\n\n        if (!this.editCollectionWidget) {\n            this.editCollectionWidget = new EditCollectionWidget({\n                el: container,\n                model: this.model,\n                parentView: this\n            }).on('g:saved', function () {\n                this.render();\n            }, this);\n        }\n        this.editCollectionWidget.render();\n    },\n\n    render: function () {\n        this.$el.html(CollectionPageTemplate({\n            collection: this.model,\n            AccessType: AccessType,\n            renderMarkdown: renderMarkdown\n        }));\n\n        if (!this.hierarchyWidget) {\n            // The HierarchyWidget will self-render when instantiated\n            this.hierarchyWidget = new HierarchyWidget({\n                el: this.$('.g-collection-hierarchy-container'),\n                parentModel: this.folder || this.model,\n                upload: this.upload,\n                folderAccess: this.folderAccess,\n                folderEdit: this.folderEdit,\n                folderCreate: this.folderCreate,\n                itemCreate: this.itemCreate,\n                parentView: this\n            }).on('g:setCurrentModel', () => {\n                // When a user descends into the hierarchy, hide the collection\n                // actions list to avoid confusion.\n                this.$('.g-collection-header .g-collection-actions-button').hide();\n            });\n        } else {\n            this.hierarchyWidget\n                .setElement(this.$('.g-collection-hierarchy-container'))\n                .render();\n        }\n\n        this.upload = false;\n        this.folderAccess = false;\n        this.folderEdit = false;\n        this.folderCreate = false;\n        this.itemCreate = false;\n\n        if (this.edit) {\n            this.editCollection();\n        } else if (this.access) {\n            this.editAccess();\n        }\n\n        return this;\n    },\n\n    editAccess: function () {\n        new AccessWidget({\n            el: $('#g-dialog-container'),\n            modelType: 'collection',\n            model: this.model,\n            parentView: this\n        }).on('g:accessListSaved', function (params) {\n            if (params.recurse) {\n                this.hierarchyWidget.refreshFolderList();\n            }\n        }, this);\n    },\n\n    deleteConfirmation: function () {\n        let params = {\n            text: 'Are you sure you want to delete the collection <b>' +\n                  this.model.escape('name') + this.model.escape('nFolders') + '</b>?',\n            yesText: 'Delete',\n            escapedHtml: true,\n            confirmCallback: () => {\n                this.model.on('g:deleted', function () {\n                    events.trigger('g:alert', {\n                        icon: 'ok',\n                        text: 'Collection deleted.',\n                        type: 'success',\n                        timeout: 4000\n                    });\n                    router.navigate('collections', { trigger: true });\n                }).destroy();\n            }\n        };\n        if (this.model.get('nFolders') !== 0 || this.model.get('size') !== 0) {\n            params = _.extend({\n                additionalText: '<b>' + this.model.escape('name') + '</b>' +\n                                ' contains <b>' + this.model.escape('nFolders') +\n                                ' folders</b> taking up <b>' +\n                                formatSize(parseInt(this.model.get('size'), 10)) + '</b>',\n                msgConfirmation: true,\n                name: this.model.escape('name')\n            }, params);\n        }\n        confirm(params);\n    }\n}, {\n    /**\n     * Helper function for fetching the user and rendering the view with\n     * an arbitrary set of extra parameters.\n     */\n    fetchAndInit: function (cid, params) {\n        var collection = new CollectionModel();\n        collection.set({ _id: cid }).on('g:fetched', function () {\n            events.trigger('g:navigateTo', CollectionView, _.extend({\n                collection: collection\n            }, params || {}));\n        }, this).fetch();\n    }\n});\n\nexport default CollectionView;\n","import _ from 'underscore';\n\nimport FolderModel from '@girder/core/models/FolderModel';\nimport HierarchyWidget from '@girder/core/views/widgets/HierarchyWidget';\nimport View from '@girder/core/views/View';\nimport { cancelRestRequests } from '@girder/core/rest';\nimport events from '@girder/core/events';\n\n/**\n * This view shows a single folder as a hierarchy widget.\n */\nvar FolderView = View.extend({\n    initialize: function (settings) {\n        cancelRestRequests('fetch');\n        this.folder = settings.folder;\n        this.upload = settings.upload || false;\n        this.folderAccess = settings.folderAccess || false;\n        this.folderCreate = settings.folderCreate || false;\n        this.folderEdit = settings.folderEdit || false;\n        this.itemCreate = settings.itemCreate || false;\n\n        this.render();\n    },\n\n    render: function () {\n        this.hierarchyWidget = new HierarchyWidget({\n            el: this.$el,\n            parentModel: this.folder,\n            upload: this.upload,\n            folderAccess: this.folderAccess,\n            folderEdit: this.folderEdit,\n            folderCreate: this.folderCreate,\n            itemCreate: this.itemCreate,\n            parentView: this\n        });\n\n        return this;\n    }\n}, {\n    /**\n     * Helper function for fetching the folder by id, then render the view.\n     */\n    fetchAndInit: function (id, params) {\n        var folder = new FolderModel();\n        folder.set({ _id: id }).on('g:fetched', function () {\n            events.trigger('g:navigateTo', FolderView, _.extend({\n                folder: folder\n            }, params || {}));\n        }, this).fetch();\n    }\n\n});\n\nexport default FolderView;\n",".g-frontpage-header\n  .g-frontpage-logo-container\n    img.g-frontpage-logo(src='Girder_Mark.png')\n  .g-frontpage-title-container\n    .g-frontpage-title #{brandName}\n    .g-frontpage-subtitle Data management platform\n\n.g-frontpage-body\n  .g-frontpage-paragraph\n    .g-frontpage-welcome-text-content\n      b.g-frontpage-welcome-text Welcome to #{brandName}!\n\n    ul\n      if !currentUser\n        li You are currently browsing anonymously.\n        ul\n          li\n            | To explore the data hosted on this server, start with the\n            a.g-collections-link(href=\"#collections\")  Collections\n            |  page.\n\n          li\n            | To create an account, use the\n            a.g-register-link  Register\n            |  link in the upper right corner.\n\n          li\n            | If you already have an account you can\n            a.g-login-link  log in\n            |  with the link in the upper right corner.\n      else\n        li\n          | You are currently logged in as\n          b  #{currentUser.get('login')}\n          | .\n\n          ul\n            li\n              | To explore the data hosted on this server, start with the\n              a.g-collections-link(href=\"#collections\")  Collections\n              |  page.\n\n            li\n              | To explore your data, go to your\n              a.g-my-folders-link(href=`#user/${currentUser.id}`)  personal data space\n              |  or your\n              a.g-my-account-link(href=`#useraccount/${currentUser.id}/info`)  user account page\n              | .\n\n      li\n        if brandName === 'Girder'\n          | Girder is\n        else\n          | #{brandName} is powered by Girder,\n        | Kitware's open-source platform for data management, analytics, and\n        | visualization. To learn more about how Kitware and Girder can help to solve your\n        | data challenges, read our series of\n        a(target=\"_blank\", href=\"https://blog.kitware.com/tag/girder/\")  blog posts\n        | or\n        a(target=\"_blank\", href=\"http://www.kitware.com/contact-us\")  contact us\n        | directly.\n\n        ul\n          li\n            | To learn more about Girder's software, including how you can host your own\n            | instance either locally or in the cloud, see the\n            a(target=\"_blank\", href=\"http://girder.readthedocs.io/en/latest/user-guide.html\")  User Guide\n            | , the\n            a(target=\"_blank\", href=\"http://girder.readthedocs.io/en/latest\")  full documentation\n            | , or visit the\n            a(target=\"_blank\", href=\"https://github.com/girder/girder\")  GitHub repository\n            | .\n\n      li\n        | To use the REST API to interact with this server, check out the\n        a(href=apiRoot)  interactive web API docs\n        | .\n\n      if version\n        li\n          | This instance of #{brandName} was built from version\n          code.g-version= version\n          | .\n","import $ from 'jquery';\n\nimport version from '@girder/core/version';\nimport View from '@girder/core/views/View';\nimport { cancelRestRequests, getApiRoot } from '@girder/core/rest';\nimport events from '@girder/core/events';\nimport { getCurrentUser } from '@girder/core/auth';\n\nimport FrontPageTemplate from '@girder/core/templates/body/frontPage.pug';\n\nimport '@girder/core/stylesheets/body/frontPage.styl';\n\n/**\n * This is the view for the front page of the app.\n */\nvar FrontPageView = View.extend({\n    events: {\n        'click .g-register-link': function () {\n            events.trigger('g:registerUi');\n        },\n        'click .g-login-link': function () {\n            events.trigger('g:loginUi');\n        },\n        'click .g-quicksearch-link': function () {\n            $('.g-quick-search-container .g-search-field').trigger('focus');\n        }\n    },\n\n    initialize: function (settings) {\n        cancelRestRequests('fetch');\n        this.brandName = settings.brandName || 'Girder';\n        this.render();\n    },\n\n    render: function () {\n        this.$el.html(FrontPageTemplate({\n            apiRoot: getApiRoot(),\n            currentUser: getCurrentUser(),\n            version,\n            brandName: this.brandName\n        }));\n\n        return this;\n    }\n});\n\nexport default FrontPageView;\n",".modal-dialog\n  .modal-content\n    form#g-group-edit-form.modal-form(role=\"form\")\n      .modal-header\n        button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n        h4.modal-title\n          if (group)\n            | Edit group\n          else\n            | Create group\n      .modal-body\n        .g-public-container\n          .radio\n            label\n              input#g-access-private(type=\"radio\", name=\"privacy\",\n                  checked=(publicFlag ? undefined : \"checked\"))\n              i.icon-lock\n              | Private &mdash; Only members can see this group\n          .radio\n            label\n              input#g-access-public(type=\"radio\", name=\"privacy\",\n                  checked=(publicFlag ? \"checked\" : undefined))\n              i.icon-globe\n              | Public &mdash; Anyone can see this group\n        .form-group\n          label.control-label(for=\"g-name\") Name\n          input#g-name.input-sm.form-control(type=\"text\", placeholder=\"Enter group name\")\n        .form-group\n          label.control-label(for=\"g-description\") Description (optional)\n          textarea#g-description.input-sm.form-control(placeholder=\"Enter group description\")\n        if groupAddAllowed\n          .form-group\n            label.control-label(for=\"g-add-to-group\") Allow members to be directly added to this group\n            select#g-add-to-group.form-control.input-sm\n              if addToGroupPolicy === 'yesadmin'\n                option(value='default', selected=(addAllowed === 'default')) Default - Yes, allow group administrators to add members\n              else if addToGroupPolicy === 'yesmod'\n                option(value='default', selected=(addAllowed === 'default')) Default - Yes, allow group administrators and moderators to add members\n              else\n                option(value='default', selected=(addAllowed === 'default')) Default - No\n              option(value='no', selected=(addAllowed === 'no')) No - members must be invited and accept invitations\n              if groupAddAllowed === 'mod'\n                option(value='yesmod', selected=(addAllowed === 'yesmod')) Yes - allow group administrators and moderators to directly add members\n              option(value='yesadmin', selected=(addAllowed === 'yesadmin')) Yes - allow group administrators to directly add members\n        .g-validation-failed-message\n      .modal-footer\n        a.btn.btn-small.btn-default(data-dismiss=\"modal\") Cancel\n        button.g-save-group.btn.btn-small.btn-primary(type=\"submit\")\n          if (group)\n            i.icon-edit\n            | Save\n          else\n            i.icon-plus-squared\n            | Create\n","import $ from 'jquery';\n\nimport GroupModel from '@girder/core/models/GroupModel';\nimport View from '@girder/core/views/View';\nimport { getCurrentUser } from '@girder/core/auth';\nimport { handleClose, handleOpen } from '@girder/core/dialog';\n\nimport EditGroupWidgetTemplate from '@girder/core/templates/widgets/editGroupWidget.pug';\n\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This widget is used to create a new group or edit an existing one.\n */\nvar EditGroupWidget = View.extend({\n    events: {\n        'submit #g-group-edit-form': function (e) {\n            e.preventDefault();\n\n            var fields = {\n                name: this.$('#g-name').val(),\n                description: this.$('#g-description').val(),\n                public: this.$('#g-access-public').is(':checked')\n            };\n            if (this.$('#g-add-to-group').length) {\n                fields.addAllowed = this.$('#g-add-to-group').val();\n            }\n\n            if (this.model) {\n                this.updateGroup(fields);\n            } else {\n                this.createGroup(fields);\n            }\n\n            this.$('button.g-save-group').girderEnable(false);\n            this.$('.g-validation-failed-message').text('');\n        },\n\n        'change .g-public-container .radio input': 'privacyChanged'\n    },\n\n    initialize: function (settings) {\n        this.model = settings.model || null;\n    },\n\n    render: function () {\n        var pub = this.model ? this.model.get('public') : false;\n        var groupAddAllowed;\n        var addToGroupPolicy = this.model ? this.model.get('_addToGroupPolicy') : null;\n        if (getCurrentUser().get('admin')) {\n            if (addToGroupPolicy === 'nomod' || addToGroupPolicy === 'yesmod') {\n                groupAddAllowed = 'mod';\n            } else if (addToGroupPolicy === 'noadmin' || addToGroupPolicy === 'yesadmin') {\n                groupAddAllowed = 'admin';\n            }\n        }\n        var modal = this.$el.html(EditGroupWidgetTemplate({\n            group: this.model,\n            publicFlag: pub,\n            addToGroupPolicy: addToGroupPolicy,\n            groupAddAllowed: groupAddAllowed,\n            addAllowed: this.model ? this.model.get('addAllowed') : false\n        })).girderModal(this).on('shown.bs.modal', () => {\n            this.$('#g-name').trigger('focus');\n            if (this.model) {\n                handleOpen('edit');\n            } else {\n                handleOpen('create');\n            }\n        }).on('hidden.bs.modal', () => {\n            if (this.create) {\n                handleClose('create');\n            } else {\n                handleClose('edit');\n            }\n        }).on('ready.girder.modal', () => {\n            if (this.model) {\n                this.$('#g-name').val(this.model.get('name'));\n                this.$('#g-description').val(this.model.get('description'));\n                this.create = false;\n            } else {\n                this.create = true;\n            }\n        });\n        modal.trigger($.Event('ready.girder.modal', { relatedTarget: modal }));\n        this.$('#g-name').trigger('focus');\n\n        this.privacyChanged();\n\n        return this;\n    },\n\n    createGroup: function (fields) {\n        var group = new GroupModel();\n        group.set(fields);\n        group.on('g:saved', function () {\n            this.$el.modal('hide');\n            this.trigger('g:saved', group);\n        }, this).on('g:error', function (err) {\n            this.$('.g-validation-failed-message').text(err.responseJSON.message);\n            this.$('button.g-save-group').girderEnable(true);\n            this.$('#g-' + err.responseJSON.field).trigger('focus');\n        }, this).save();\n    },\n\n    updateGroup: function (fields) {\n        this.model.set(fields);\n        this.model.off().on('g:saved', function () {\n            this.$el.modal('hide');\n            this.trigger('g:saved', this.model);\n        }, this).on('g:error', function (err) {\n            this.$('.g-validation-failed-message').text(err.responseJSON.message);\n            this.$('button.g-save-group').girderEnable(true);\n            this.$('#g-' + err.responseJSON.field).trigger('focus');\n        }, this).save();\n    },\n\n    privacyChanged: function () {\n        this.$('.g-public-container .radio').removeClass('g-selected');\n        var selected = this.$('.g-public-container .radio input:checked');\n        selected.parents('.radio').addClass('g-selected');\n    }\n});\n\nexport default EditGroupWidget;\n",".g-groups-list-header\n\n  .g-group-pagination\n  form.g-group-search-form.form-inline(role=\"form\")\n    .form-group.g-groups-search-container\n\n  if getCurrentUser()\n    button.g-group-create-button.btn.btn-sm.btn-default\n      i.icon-plus-squared\n      |  Create Group\n\neach group in groups\n  .g-group-list-entry.g-top-level-list-entry(public=(group.get('public') ? \"true\" : \"false\"))\n    .g-group-right-column\n      .g-group-created\n        .g-large-screen\n          i.icon-clock\n          | Created on\n          span.g-group-created-date  #{formatDate(group.get('created'), DATE_DAY)}\n        .g-small-screen\n          i.icon-clock\n          span.g-group-created-date  #{formatDate(group.get('created'), DATE_YYMMDD)}\n    .g-list-public-status-icon\n      if group.get('public')\n        i.icon-globe(title=\"Public group\")\n      else\n        i.icon-lock(title=\"Private group\")\n    .g-top-level-list-title-container\n      .g-group-title\n        a.g-group-link(g-group-cid=group.cid)\n          b= group.name()\n        span.g-text-fade(public=(group.get('public') ? 'true' : 'false'))\n      .g-group-subtitle\n        span.g-group-description= group.get('description')\n        span.g-text-fade(public=(group.get('public') ? 'true' : 'false'))\n    .g-clear-right\n","import $ from 'jquery';\n\nimport EditGroupWidget from '@girder/core/views/widgets/EditGroupWidget';\nimport GroupCollection from '@girder/core/collections/GroupCollection';\nimport GroupModel from '@girder/core/models/GroupModel';\nimport PaginateWidget from '@girder/core/views/widgets/PaginateWidget';\nimport router from '@girder/core/router';\nimport SearchFieldWidget from '@girder/core/views/widgets/SearchFieldWidget';\nimport View from '@girder/core/views/View';\nimport { cancelRestRequests } from '@girder/core/rest';\nimport { formatDate, DATE_DAY, DATE_YYMMDD } from '@girder/core/misc';\nimport { getCurrentUser } from '@girder/core/auth';\n\nimport GroupListTemplate from '@girder/core/templates/body/groupList.pug';\n\nimport '@girder/core/stylesheets/body/groupList.styl';\n\n/**\n * This view lists groups.\n */\nvar GroupsView = View.extend({\n    events: {\n        'click a.g-group-link': function (event) {\n            var cid = $(event.currentTarget).attr('g-group-cid');\n            router.navigate('group/' + this.collection.get(cid).id, { trigger: true });\n        },\n        'submit .g-group-search-form': function (event) {\n            event.preventDefault();\n        },\n        'click .g-group-create-button': function () {\n            this.createGroupDialog();\n        }\n    },\n\n    initialize: function (settings) {\n        cancelRestRequests('fetch');\n        this.collection = new GroupCollection();\n        this.collection.on('g:changed', function () {\n            this.render();\n        }, this).fetch();\n\n        this.paginateWidget = new PaginateWidget({\n            collection: this.collection,\n            parentView: this\n        });\n\n        this.searchWidget = new SearchFieldWidget({\n            placeholder: 'Search groups...',\n            types: ['group'],\n            parentView: this\n        }).on('g:resultClicked', this._gotoGroup, this);\n\n        this.create = settings.dialog === 'create';\n    },\n\n    render: function () {\n        this.$el.html(GroupListTemplate({\n            groups: this.collection.toArray(),\n            getCurrentUser: getCurrentUser,\n            formatDate: formatDate,\n            DATE_DAY: DATE_DAY,\n            DATE_YYMMDD: DATE_YYMMDD\n        }));\n\n        this.paginateWidget.setElement(this.$('.g-group-pagination')).render();\n        this.searchWidget.setElement(this.$('.g-groups-search-container')).render();\n\n        if (this.create) {\n            this.createGroupDialog();\n            this.create = false;\n        }\n\n        return this;\n    },\n\n    /**\n     * Prompt the user to create a new group\n     */\n    createGroupDialog: function () {\n        new EditGroupWidget({\n            el: $('#g-dialog-container'),\n            parentView: this\n        }).off('g:saved').on('g:saved', function (group) {\n            // Since the user has now joined this group, we can append its ID\n            // to their groups list\n            var userGroups = getCurrentUser().get('groups') || [];\n            userGroups.push(group.get('_id'));\n            getCurrentUser().set('groups', userGroups);\n\n            router.navigate('group/' + group.get('_id'), { trigger: true });\n        }, this).render();\n    },\n\n    /**\n     * When the user clicks a search result group, this helper method\n     * will navigate them to the view for that group.\n     */\n    _gotoGroup: function (result) {\n        var group = new GroupModel();\n        group.set('_id', result.id).on('g:fetched', function () {\n            router.navigate('group/' + group.get('_id'), { trigger: true });\n        }, this).fetch();\n    }\n\n});\n\nexport default GroupsView;\n",".btn-group\n  a.g-sort-order-button.g-up.btn.btn-sm(title=\"Sort order\")\n    i.icon-sort-name-up\n  a.g-sort-order-button.g-down.btn.btn-sm(title=\"Sort order\")\n    i.icon-sort-name-down\n  button.g-collection-sort-actions.btn.btn-sm.btn-default.dropdown-toggle(\n      data-toggle=\"dropdown\", title=\"Sort by Field\")\n    | Sort by\n    i.icon-down-dir\n  ul.g-collection-sort-menu.dropdown-menu(role=\"menu\")\n    each fieldName, field in fields\n      li(role=\"presentation\")\n        a.g-collection-sort-link(role=\"menuitem\", g-sort=field)\n          = fieldName\n","import $ from 'jquery';\n\nimport View from '@girder/core/views/View';\nimport { SORT_ASC, SORT_DESC } from '@girder/core/constants';\n\nimport SortCollectionWidgetTemplate from '@girder/core/templates/widgets/sortCollectionWidget.pug';\n\nimport 'bootstrap/js/dropdown';\n\n/**\n * This widget is used to provide a consistent widget for sorting\n * pages of a Collection by a chosen field.\n */\nvar SortCollectionWidget = View.extend({\n    events: {\n        'click a.g-collection-sort-link': function (event) {\n            var sortField = $(event.currentTarget).attr('g-sort');\n            this.collection.sortField = sortField;\n            this.collection.fetch({}, true);\n        },\n        'click a.g-sort-order-button': function () {\n            if (this.collection.sortDir === SORT_ASC) {\n                this.collection.sortDir = SORT_DESC;\n            } else {\n                this.collection.sortDir = SORT_ASC;\n            }\n            this.collection.fetch({}, true);\n        }\n    },\n\n    initialize: function (settings) {\n        this.collection = settings.collection;\n        this.fields = settings.fields;\n    },\n\n    /**\n     * Do not call render() until the collection has been fetched once.\n     */\n    render: function () {\n        this.$el.html(SortCollectionWidgetTemplate({\n            collection: this.collection,\n            fields: this.fields\n        }));\n        if (this.collection.sortDir === SORT_ASC) {\n            this.$('.g-down').addClass('hide');\n        } else {\n            this.$('.g-up').addClass('hide');\n        }\n        return this;\n    }\n});\n\nexport default SortCollectionWidget;\n","- const isAdmin = currentUser && currentUser.get('admin');\n- const userTooltip = usersCount === 1 ? `${usersCount} total user` : `${usersCount} total users`;\n.g-user-list-header\n  .g-user-pagination\n  if currentUser\n    .g-user-count-container(title=userTooltip)\n      i.icon-user\n      span.g-user-count= usersCount\n\n  .g-user-sort\n  form.g-user-search-form.form-inline(role=\"form\")\n    .form-group.g-users-search-container\n  if isAdmin\n    button.g-user-create-button.btn.btn-sm.btn-default\n      i.icon-plus-squared\n      |  Create user\n\neach user in users\n  .g-user-list-entry\n    .g-user-right-column\n      .g-user-joined\n        i.icon-clock\n        | Joined on\n        span.g-user-joined-date  #{formatDate(user.get('created'), DATE_DAY)}\n      if user.get('size') !== undefined\n        .g-space-used\n          i.icon-floppy\n          | Currently using\n          span.g-user-space-used  #{formatSize(user.get('size'))}\n      if user.get('status') === 'disabled'\n        .g-user-status\n          i.icon-cancel-circled\n          | Account disabled\n      else if user.get('status') === 'pending'\n        .g-user-status\n          i.icon-attention-circled\n          | Account pending approval\n    .g-user-title\n      a.g-user-link(g-user-cid=user.cid)\n        b= user.name()\n    .g-user-subtitle\n      span.g-user-login  #{user.get('login')}\n    .g-clear-right\n","import $ from 'jquery';\n\nimport PaginateWidget from '@girder/core/views/widgets/PaginateWidget';\nimport RegisterView from '@girder/core/views/layout/RegisterView';\nimport router from '@girder/core/router';\nimport SearchFieldWidget from '@girder/core/views/widgets/SearchFieldWidget';\nimport SortCollectionWidget from '@girder/core/views/widgets/SortCollectionWidget';\nimport UserCollection from '@girder/core/collections/UserCollection';\nimport UserModel from '@girder/core/models/UserModel';\nimport View from '@girder/core/views/View';\nimport { cancelRestRequests } from '@girder/core/rest';\nimport { formatDate, formatSize, DATE_DAY } from '@girder/core/misc';\nimport { getCurrentUser } from '@girder/core/auth';\n\nimport UserListTemplate from '@girder/core/templates/body/userList.pug';\n\nimport '@girder/core/stylesheets/body/userList.styl';\n\n/**\n * This view lists users.\n */\nvar UsersView = View.extend({\n    events: {\n        'click a.g-user-link': function (event) {\n            var cid = $(event.currentTarget).attr('g-user-cid');\n            router.navigate('user/' + this.collection.get(cid).id, { trigger: true });\n        },\n        'click button.g-user-create-button': 'createUserDialog',\n        'submit .g-user-search-form': function (event) {\n            event.preventDefault();\n        }\n    },\n\n    initialize: function (settings) {\n        cancelRestRequests('fetch');\n        this.collection = new UserCollection();\n\n        const promiseArray = [];\n        promiseArray.push(this.collection.fetch());\n\n        this.paginateWidget = new PaginateWidget({\n            collection: this.collection,\n            parentView: this\n        });\n\n        this.sortCollectionWidget = new SortCollectionWidget({\n            collection: this.collection,\n            parentView: this,\n            fields: {\n                lastName: 'Last Name',\n                created: 'Creation Date',\n                size: 'Used Space'\n            }\n        });\n\n        this.searchWidget = new SearchFieldWidget({\n            placeholder: 'Search users...',\n            types: ['user'],\n            modes: 'prefix',\n            parentView: this\n        }).on('g:resultClicked', this._gotoUser, this);\n\n        if (getCurrentUser()) {\n            const userCountPromise = UserCollection.getTotalCount()\n                .done((count) => {\n                    this.usersCount = count;\n                });\n            promiseArray.push(userCountPromise);\n        }\n        this.register = settings.dialog === 'register' && getCurrentUser() &&\n                        getCurrentUser().get('admin');\n\n        $.when(...promiseArray)\n            .done(() => {\n                this.listenTo(this.collection, 'g:changed', this.render);\n                this.render();\n            });\n    },\n\n    render: function () {\n        this.$el.html(UserListTemplate({\n            users: this.collection.toArray(),\n            currentUser: getCurrentUser(),\n            usersCount: this.usersCount,\n            formatDate: formatDate,\n            formatSize: formatSize,\n            DATE_DAY: DATE_DAY\n        }));\n\n        this.paginateWidget.setElement(this.$('.g-user-pagination')).render();\n        this.sortCollectionWidget.setElement(this.$('.g-user-sort')).render();\n        this.searchWidget.setElement(this.$('.g-users-search-container')).render();\n\n        if (this.register) {\n            this.createUserDialog();\n        }\n\n        return this;\n    },\n\n    /**\n     * When the user clicks a search result user, this helper method\n     * will navigate them to the view for that specific user.\n     */\n    _gotoUser: function (result) {\n        var user = new UserModel();\n        user.set('_id', result.id).on('g:fetched', function () {\n            router.navigate('user/' + user.get('_id'), { trigger: true });\n        }, this).fetch();\n    },\n\n    createUserDialog: function () {\n        var container = $('#g-dialog-container');\n\n        new RegisterView({\n            el: container,\n            parentView: this\n        }).on('g:userCreated', function (info) {\n            router.navigate('user/' + info.user.id, { trigger: true });\n        }, this).render();\n    }\n});\n\nexport default UsersView;\n",".g-user-header\n\n  if user.getAccessLevel() >= AccessType.WRITE\n    .btn-group.pull-right\n      button.g-user-actions-button.btn.btn-default.dropdown-toggle(\n        data-toggle=\"dropdown\", title=\"Item actions\")\n        i.icon-user\n        |  Actions\n        i.icon-down-dir\n      ul.g-item-actions-menu.dropdown-menu.pull-right(role=\"menu\")\n        li(role=\"presentation\")\n          a.g-edit-user(role=\"menuitem\")\n            i.icon-edit\n            | Edit user\n        if user.getAccessLevel() >= AccessType.ADMIN\n          li.divider(role=\"presentation\")\n          if user.get('status') === 'pending'\n            li(role=\"presentation\")\n              a.g-approve-user(role=\"menuitem\")\n                i.icon-ok-squared\n                | Approve account\n          else if user.get('status') === 'enabled'\n            li(role=\"presentation\")\n              a.g-disable-user(role=\"menuitem\")\n                i.icon-cancel\n                | Disable account\n          else if user.get('status') === 'disabled'\n            li(role=\"presentation\")\n              a.g-enable-user(role=\"menuitem\")\n                i.icon-ok\n                | Enable account\n          li(role=\"presentation\")\n            a.g-delete-user(role=\"menuitem\")\n              i.icon-trash\n              | Delete user\n\n  .g-user-name.g-body-title #{user.get('firstName')} #{user.get('lastName')}\n  .g-user-login.g-body-subtitle #{user.get('login')}\n\n.g-user-hierarchy-container\n","import _ from 'underscore';\n\nimport FolderModel from '@girder/core/models/FolderModel';\nimport HierarchyWidget from '@girder/core/views/widgets/HierarchyWidget';\nimport router from '@girder/core/router';\nimport UserModel from '@girder/core/models/UserModel';\nimport UsersView from '@girder/core/views/body/UsersView';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport { cancelRestRequests } from '@girder/core/rest';\nimport { confirm } from '@girder/core/dialog';\nimport events from '@girder/core/events';\n\nimport UserPageTemplate from '@girder/core/templates/body/userPage.pug';\n\nimport '@girder/core/stylesheets/body/userPage.styl';\n\nimport 'bootstrap/js/dropdown';\n\n/**\n * This view shows a single user's page.\n */\nvar UserView = View.extend({\n    events: {\n        'click a.g-edit-user': function () {\n            var editUrl = 'useraccount/' + this.model.get('_id') + '/info';\n            router.navigate(editUrl, { trigger: true });\n        },\n\n        'click a.g-delete-user': function () {\n            confirm({\n                text: 'Are you sure you want to delete the user <b>' +\n                      this.model.escape('login') + '</b>?',\n                yesText: 'Delete',\n                escapedHtml: true,\n                confirmCallback: () => {\n                    this.model.on('g:deleted', function () {\n                        router.navigate('', { trigger: true });\n                    }).destroy();\n                }\n            });\n        },\n\n        'click a.g-approve-user': function () {\n            this._setAndSave(\n                { status: 'enabled' }, 'Approved user account.');\n        },\n\n        'click a.g-disable-user': function () {\n            this._setAndSave(\n                { status: 'disabled' }, 'Disabled user account.');\n        },\n\n        'click a.g-enable-user': function () {\n            this._setAndSave(\n                { status: 'enabled' }, 'Enabled user account.');\n        }\n    },\n\n    initialize: function (settings) {\n        cancelRestRequests('fetch');\n        this.folderId = settings.folderId || null;\n        this.upload = settings.upload || false;\n        this.folderAccess = settings.folderAccess || false;\n        this.folderCreate = settings.folderCreate || false;\n        this.folderEdit = settings.folderEdit || false;\n        this.itemCreate = settings.itemCreate || false;\n\n        if (settings.user) {\n            this.model = settings.user;\n\n            if (settings.folderId) {\n                this.folder = new FolderModel();\n                this.folder.set({\n                    _id: settings.folderId\n                }).on('g:fetched', function () {\n                    this.render();\n                }, this).on('g:error', function () {\n                    this.folder = null;\n                    this.render();\n                }, this).fetch();\n            } else {\n                this.render();\n            }\n        } else if (settings.id) {\n            this.model = new UserModel();\n            this.model.set('_id', settings.id);\n\n            this.model.on('g:fetched', function () {\n                this.render();\n            }, this).fetch();\n        }\n    },\n\n    render: function () {\n        this.$el.html(UserPageTemplate({\n            user: this.model,\n            AccessType: AccessType\n        }));\n\n        if (!this.hierarchyWidget) {\n            // The HierarchyWidget will self-render when instantiated\n            this.hierarchyWidget = new HierarchyWidget({\n                el: this.$('.g-user-hierarchy-container'),\n                parentModel: this.folder || this.model,\n                upload: this.upload,\n                folderAccess: this.folderAccess,\n                folderEdit: this.folderEdit,\n                folderCreate: this.folderCreate,\n                itemCreate: this.itemCreate,\n                parentView: this\n            });\n        } else {\n            this.hierarchyWidget\n                .setElement(this.$('.g-user-hierarchy-container'))\n                .render();\n        }\n\n        this.upload = false;\n        this.folderAccess = false;\n        this.folderEdit = false;\n        this.folderCreate = false;\n        this.itemCreate = false;\n\n        return this;\n    },\n\n    _setAndSave: function (data, message) {\n        this.model.set(data);\n        this.model.off('g:saved').on('g:saved', function () {\n            events.trigger('g:alert', {\n                icon: 'ok',\n                text: message,\n                type: 'success',\n                timeout: 4000\n            });\n            this.render();\n        }, this).off('g:error').on('g:error', function (err) {\n            events.trigger('g:alert', {\n                icon: 'cancel',\n                text: err.responseJSON.message,\n                type: 'danger'\n            });\n        }).save();\n    }\n}, {\n    /**\n     * Helper function for fetching the user and rendering the view with\n     * an arbitrary set of extra parameters.\n     */\n    fetchAndInit: function (userId, params) {\n        var user = new UserModel();\n        user.set({\n            _id: userId\n        }).on('g:fetched', function () {\n            events.trigger('g:navigateTo', UserView, _.extend({\n                user: user\n            }, params || {}));\n        }, this).on('g:error', function () {\n            events.trigger('g:navigateTo', UsersView);\n        }, this).fetch();\n    }\n});\n\nexport default UserView;\n",".g-group-admins-header.g-group-list-header(title=\"Group administrators can edit group properties and can add, invite, and remove group members, moderators, and administrators.\")\n  i.icon-star\n  span Administrators\n\n.g-group-admins-body\n  ul.g-group-admins\n    each userAccess in admins\n      li(userid=userAccess.id, username=userAccess.name)\n        a.g-member-name\n          i.icon-user\n          span #{userAccess.name} (#{userAccess.login})\n        .g-group-member-controls.pull-right\n          if level >= accessType.ADMIN\n            span.dropdown\n              a.g-group-admin-demote.dropdown-toggle(title=\"Demote user\",\n                  data-toggle=\"dropdown\")\n                i.icon-down-big\n                i.icon-down-dir\n              ul.dropdown-menu.pull-right(role=\"menu\")\n                li(role=\"presentation\")\n                  a.g-demote-moderator(role=\"menuitem\")\n                    i.icon-minus\n                    span Demote to moderator\n                li(role=\"presentation\")\n                  a.g-demote-member(role=\"menuitem\")\n                    i.icon-minus\n                    span Demote to member\n            a.g-group-admin-remove(title=\"Remove user from the group\")\n              i.icon-block\n    if (!admins.length)\n      .g-member-list-empty\n        i.icon-info-circled\n        span There are no administrators in this group.\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport UserModel from '@girder/core/models/UserModel';\nimport UserView from '@girder/core/views/body/UserView';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport { confirm } from '@girder/core/dialog';\nimport events from '@girder/core/events';\n\nimport GroupAdminListTemplate from '@girder/core/templates/widgets/groupAdminList.pug';\n\nimport 'bootstrap/js/dropdown';\n\n/**\n * This view shows a list of administrators of a group.\n */\nvar GroupAdminsWidget = View.extend({\n    events: {\n        'click .g-demote-moderator': function (e) {\n            var li = $(e.currentTarget).parents('.g-group-admins>li');\n            var userid = li.attr('userid');\n\n            confirm({\n                text: 'Are you sure you want to demote <b>' +\n                    _.escape(li.attr('username')) + '</b> to a moderator?',\n                escapedHtml: true,\n                confirmCallback: () => {\n                    var user = new UserModel({ _id: userid });\n                    this.model.off('g:promoted').on('g:promoted', () => {\n                        this.trigger('g:moderatorAdded');\n                    }, this).promoteUser(user, AccessType.WRITE);\n                }\n            });\n        },\n\n        'click .g-demote-member': function (e) {\n            var li = $(e.currentTarget).parents('.g-group-admins>li');\n\n            confirm({\n                text: 'Are you sure you want to remove admin privileges ' +\n                    'from <b>' + _.escape(li.attr('username')) + '</b>?',\n                escapedHtml: true,\n                confirmCallback: () => {\n                    this.trigger('g:demoteUser', li.attr('userid'));\n                }\n            });\n        },\n\n        'click a.g-group-admin-remove': function (e) {\n            var li = $(e.currentTarget).parents('li');\n\n            confirm({\n                text: 'Are you sure you want to remove <b> ' +\n                    _.escape(li.attr('username')) +\n                    '</b> from this group?',\n                escapedHtml: true,\n                confirmCallback: () => {\n                    this.trigger('g:removeMember', li.attr('userid'));\n                }\n            });\n        },\n\n        'click a.g-member-name': function (e) {\n            events.trigger('g:navigateTo', UserView, {\n                id: $(e.currentTarget).parents('li').attr('userid')\n            });\n        }\n    },\n\n    initialize: function (settings) {\n        this.model = settings.group;\n        this.admins = settings.admins;\n    },\n\n    render: function () {\n        this.$el.html(GroupAdminListTemplate({\n            group: this.model,\n            level: this.model.get('_accessLevel'),\n            admins: this.admins,\n            accessType: AccessType\n        }));\n\n        return this;\n    }\n});\n\nexport default GroupAdminsWidget;\n","ul.g-group-invites\n  each user in invitees\n    li(cid=user.cid, username=user.name())\n      a.g-member-name\n        i.icon-user\n        span #{user.name()} (#{user.get('login')})\n      .g-group-member-controls.pull-right\n        if level >= accessType.WRITE\n          a.g-group-uninvite(title=\"Uninvite this user\")\n            i.icon-block\n  if (!invitees.length)\n    .g-member-list-empty\n      i.icon-info-circled\n      span There are no pending invitations to this group.\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport router from '@girder/core/router';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport { confirm } from '@girder/core/dialog';\n\nimport GroupInviteListTemplate from '@girder/core/templates/widgets/groupInviteList.pug';\n\n/**\n * This view shows a list of pending invitations to the group.\n */\nvar GroupInvitesWidget = View.extend({\n    events: {\n        'click .g-group-uninvite': function (e) {\n            var li = $(e.currentTarget).parents('li');\n\n            confirm({\n                text: 'Are you sure you want to remove the invitation ' +\n                    'for <b>' + _.escape(li.attr('username')) + '</b>?',\n                escapedHtml: true,\n                confirmCallback: () => {\n                    var user = this.collection.get(li.attr('cid'));\n                    this.group.off('g:removed').on('g:removed', () => {\n                        this.collection.remove(user);\n                        this.render();\n                        this.parentView.render();\n                    }).removeMember(user.get('_id'));\n                }\n            });\n        },\n\n        'click a.g-member-name': function (e) {\n            var user = this.collection.get($(e.currentTarget).parents('li').attr('cid'));\n            router.navigate('user/' + user.get('_id'), { trigger: true });\n        }\n    },\n\n    initialize: function (settings) {\n        this.collection = settings.invitees;\n        this.group = settings.group;\n    },\n\n    render: function () {\n        this.$el.html(GroupInviteListTemplate({\n            level: this.group.get('_accessLevel'),\n            invitees: this.collection.toArray(),\n            accessType: AccessType\n        }));\n\n        return this;\n    }\n});\n\nexport default GroupInvitesWidget;\n",".modal-dialog\n  .modal-content\n    .modal-header\n      button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n      h4.modal-title Invite user to group\n      .g-dialog-subtitle\n        i.icon-user\n        span #{user.text}\n    .modal-body\n      label.control-label Select a role for this user\n      #g-invite-role-container.panel-group\n        .panel.panel-default\n          .panel-heading(data-toggle=\"collapse\",\n              data-parent=\"#g-invite-role-container\",\n              data-target=\"#g-invite-role-member\")\n            .panel-title\n              a Invite as member\n          #g-invite-role-member.panel-collapse.collapse.in\n            .panel-body\n              p.\n                Group members are able to gain all privileges granted to\n                the group itself on other resources. They are able to view the\n                group, but may not change properties of the group.\n              .g-invite-as-member.btn.btn-primary\n                i.icon-mail\n                span Invite as member\n              if mayAdd\n                .g-add-as-member.btn.btn-warning.g-add-user-button\n                  i.icon-plus\n                  span Add as member\n\n        if (level >= accessType.ADMIN)\n          .panel.panel-default\n            .panel-heading(data-toggle=\"collapse\",\n                data-parent=\"#g-invite-role-container\",\n                data-target=\"#g-invite-role-moderator\")\n              .panel-title\n                a Invite as moderator\n            #g-invite-role-moderator.panel-collapse.collapse\n              .panel-body\n                p.\n                  Group moderators are members of the group who are also\n                  granted the power to add and remove users from the group.\n                .g-invite-as-moderator.btn.btn-primary\n                  i.icon-mail\n                  span Invite as moderator\n                if mayAdd\n                  .g-add-as-moderator.btn.btn-warning.g-add-user-button\n                    i.icon-plus\n                    span Add as moderator\n\n        if (level >= accessType.ADMIN)\n          .panel.panel-default\n            .panel-heading(data-toggle=\"collapse\",\n                data-parent=\"#g-invite-role-container\",\n                data-target=\"#g-invite-role-admin\")\n              .panel-title\n                a Invite as administrator\n            #g-invite-role-admin.panel-collapse.collapse\n              .panel-body\n                p.\n                  Group administrators have all the power of group moderators,\n                  and additionally can promote group members to moderators\n                  or administrators. They also have the power to delete the\n                  group entirely.\n                .g-invite-as-admin.btn.btn-primary\n                  i.icon-mail\n                  span Invite as administrator\n                if mayAdd\n                  .g-add-as-admin.btn.btn-warning.g-add-user-button\n                    i.icon-plus\n                    span Add as administrator\n\n      .g-validation-failed-message\n    .modal-footer\n      a.btn.btn-small.btn-default(data-dismiss=\"modal\") Cancel\n",".g-group-members-header.g-group-list-header\n  i.icon-users\n  span Members\n  if level >= accessType.WRITE\n    form.g-group-invite-form.form-inline(role=\"form\")\n      span\n        i.icon-mail-alt\n      .form-group.g-group-invite-container\n  .g-member-pagination\n.g-group-members-body\n  ul.g-group-members\n    each member in members\n      li(cid=member.cid)\n        a.g-member-name\n          i.icon-user\n          span #{member.name()} (#{member.get('login')})\n        .g-group-member-controls.pull-right\n          if level >= accessType.ADMIN\n            span.dropdown\n              a.g-group-member-promote.dropdown-toggle(\n                  title=\"Promote user\", data-toggle=\"dropdown\")\n                i.icon-up-big\n                i.icon-down-dir\n              ul.dropdown-menu.pull-right(role=\"menu\")\n                li(role=\"presentation\")\n                  a.g-promote-moderator(role=\"menuitem\")\n                    i.icon-plus\n                    span Promote to moderator\n                li(role=\"presentation\")\n                  a.g-promote-admin(role=\"menuitem\")\n                    i.icon-plus\n                    span Promote to administrator\n          if level >= accessType.WRITE\n            a.g-group-member-remove(title=\"Remove user from the group\")\n              i.icon-block\n    if (!members.length)\n      .g-member-list-empty\n        i.icon-info-circled\n        span There are no members in this group.\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport PaginateWidget from '@girder/core/views/widgets/PaginateWidget';\nimport router from '@girder/core/router';\nimport SearchFieldWidget from '@girder/core/views/widgets/SearchFieldWidget';\nimport UserCollection from '@girder/core/collections/UserCollection';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport { confirm } from '@girder/core/dialog';\n\nimport GroupInviteDialogTemplate from '@girder/core/templates/widgets/groupInviteDialog.pug';\nimport GroupMemberListTemplate from '@girder/core/templates/widgets/groupMemberList.pug';\n\nimport 'bootstrap/js/collapse';\nimport 'bootstrap/js/dropdown';\nimport 'bootstrap/js/transition';\n\nimport '@girder/core/utilities/jquery/girderModal';\n\nvar InviteUserDialog = View.extend({\n    events: {\n        'click .g-invite-as-member': function () {\n            this._sendInvitation(AccessType.READ);\n        },\n\n        'click .g-invite-as-moderator': function () {\n            this._sendInvitation(AccessType.WRITE);\n        },\n\n        'click .g-invite-as-admin': function () {\n            this._sendInvitation(AccessType.ADMIN);\n        },\n\n        'click .g-add-as-member': function () {\n            this._sendInvitation(AccessType.READ, true);\n        },\n\n        'click .g-add-as-moderator': function () {\n            this._sendInvitation(AccessType.WRITE, true);\n        },\n\n        'click .g-add-as-admin': function () {\n            this._sendInvitation(AccessType.ADMIN, true);\n        }\n    },\n\n    initialize: function (settings) {\n        this.group = settings.group;\n        this.user = settings.user;\n    },\n\n    render: function () {\n        this.$el.html(GroupInviteDialogTemplate({\n            group: this.group,\n            user: this.user,\n            level: this.group.get('_accessLevel'),\n            accessType: AccessType,\n            mayAdd: this.group.mayAddMembers()\n        })).girderModal(this);\n\n        return this;\n    },\n\n    _sendInvitation: function (level, force) {\n        this.$el.modal('hide');\n        this.trigger('g:sendInvite', {\n            user: this.user,\n            group: this.group,\n            level: level,\n            force: force\n        });\n    }\n});\n\n/**\n * This view shows a list of members of a group.\n */\nvar GroupMembersWidget = View.extend({\n    events: {\n        'click a.g-member-name': function (e) {\n            var model = this.membersColl.get(\n                $(e.currentTarget).parents('li').attr('cid')\n            );\n            router.navigate('user/' + model.get('_id'), { trigger: true });\n        },\n\n        'click a.g-group-member-remove': function (e) {\n            var user = this.membersColl.get(\n                $(e.currentTarget).parents('li').attr('cid')\n            );\n\n            confirm({\n                text: 'Are you sure you want to remove <b> ' + _.escape(user.name()) +\n                    '</b> from this group?',\n                escapedHtml: true,\n                confirmCallback: () => {\n                    this.trigger('g:removeMember', user);\n                }\n            });\n        },\n\n        'click .g-promote-moderator': function (e) {\n            var cid = $(e.currentTarget).parents('.g-group-members>li')\n                .attr('cid');\n            var user = this.membersColl.get(cid);\n            this.model.off('g:promoted').on('g:promoted', function () {\n                this.trigger('g:moderatorAdded');\n            }, this).promoteUser(user, AccessType.WRITE);\n        },\n\n        'click .g-promote-admin': function (e) {\n            var cid = $(e.currentTarget).parents('.g-group-members>li')\n                .attr('cid');\n            var user = this.membersColl.get(cid);\n            this.model.off('g:promoted').on('g:promoted', function () {\n                this.trigger('g:adminAdded');\n            }, this).promoteUser(user, AccessType.ADMIN);\n        }\n    },\n\n    initialize: function (settings) {\n        this.model = settings.group;\n        this.modsAndAdmins = _.union(\n            _.pluck(settings.admins, 'id'),\n            _.pluck(settings.moderators, 'id')\n        );\n        this.membersColl = new UserCollection();\n        this.membersColl.altUrl =\n            'group/' + this.model.get('_id') + '/member';\n        this.membersColl.on('g:changed', function () {\n            this.render();\n        }, this).fetch();\n    },\n\n    render: function () {\n        var members = [];\n        for (var i = 0; i < this.membersColl.models.length; i += 1) {\n            var member = this.membersColl.models[i];\n            if ($.inArray(member.id, this.modsAndAdmins) < 0) {\n                members.push(member);\n            }\n        }\n        this.$el.html(GroupMemberListTemplate({\n            group: this.model,\n            members: members,\n            level: this.model.get('_accessLevel'),\n            accessType: AccessType\n        }));\n\n        new PaginateWidget({\n            el: this.$('.g-member-pagination'),\n            collection: this.membersColl,\n            parentView: this\n        }).render();\n\n        this.userSearch = new SearchFieldWidget({\n            el: this.$('.g-group-invite-container'),\n            placeholder: 'Invite a user to join...',\n            types: ['user'],\n            parentView: this\n        }).off().on('g:resultClicked', this._inviteUser, this).render();\n\n        return this;\n    },\n\n    /**\n     * When user searches and clicks a user, this method is called and a\n     * dialog is opened allowing the user to select a role to invite into.\n     */\n    _inviteUser: function (user) {\n        this.userSearch.resetState();\n\n        new InviteUserDialog({\n            el: $('#g-dialog-container'),\n            group: this.model,\n            user: user,\n            parentView: this\n        }).on('g:sendInvite', function (params) {\n            this.trigger('g:sendInvite', params);\n        }, this).render();\n    }\n});\n\nexport default GroupMembersWidget;\n",".g-group-mods-header.g-group-list-header(title=\"Group moderators can invite and approve group members.\")\n  i.icon-shield\n  span Moderators\n\n.g-group-mods-body\n  ul.g-group-mods\n    each userAccess in moderators\n      li(userid=userAccess.id, username=userAccess.name)\n        a.g-member-name\n          i.icon-user\n          span #{userAccess.name} (#{userAccess.login})\n        .g-group-member-controls.pull-right\n          if level >= accessType.ADMIN\n            a.g-group-mod-promote(title=\"Promote to administrator\")\n              i.icon-up-big\n            a.g-group-mod-demote(title=\"Demote to member\")\n              i.icon-down-big\n            a.g-group-mod-remove(title=\"Remove user from the group\")\n              i.icon-block\n    if (!moderators.length)\n      .g-member-list-empty\n        i.icon-info-circled\n        span There are no moderators in this group.\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport UserModel from '@girder/core/models/UserModel';\nimport UserView from '@girder/core/views/body/UserView';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport { confirm } from '@girder/core/dialog';\nimport events from '@girder/core/events';\n\nimport GroupModListTemplate from '@girder/core/templates/widgets/groupModList.pug';\n\n/**\n * This view shows a list of moderators of a group.\n */\nvar GroupModsWidget = View.extend({\n    events: {\n        'click .g-group-mod-promote': function (e) {\n            var userid = $(e.currentTarget).parents('li').attr('userid');\n            var user = new UserModel({ _id: userid });\n            this.model.off('g:promoted').on('g:promoted', function () {\n                this.trigger('g:adminAdded');\n            }, this).promoteUser(user, AccessType.ADMIN);\n        },\n\n        'click .g-group-mod-demote': function (e) {\n            var li = $(e.currentTarget).parents('li');\n\n            confirm({\n                text: 'Are you sure you want to remove moderator privileges ' +\n                    'from <b>' + _.escape(li.attr('username')) + '</b>?',\n                escapedHtml: true,\n                confirmCallback: () => {\n                    this.trigger('g:demoteUser', li.attr('userid'));\n                }\n            });\n        },\n\n        'click a.g-group-mod-remove': function (e) {\n            var li = $(e.currentTarget).parents('li');\n\n            confirm({\n                text: 'Are you sure you want to remove <b> ' +\n                    _.escape(li.attr('username')) +\n                    '</b> from this group?',\n                escapedHtml: true,\n                confirmCallback: () => {\n                    this.trigger('g:removeMember', li.attr('userid'));\n                }\n            });\n        },\n\n        'click a.g-member-name': function (e) {\n            events.trigger('g:navigateTo', UserView, {\n                id: $(e.currentTarget).parents('li').attr('userid')\n            });\n        }\n    },\n\n    initialize: function (settings) {\n        this.model = settings.group;\n        this.moderators = settings.moderators;\n    },\n\n    render: function () {\n        this.$el.html(GroupModListTemplate({\n            group: this.model,\n            level: this.model.get('_accessLevel'),\n            moderators: this.moderators,\n            accessType: AccessType\n        }));\n\n        return this;\n    }\n});\n\nexport default GroupModsWidget;\n",".g-group-header\n  .btn-group.pull-right\n    if (isMember || isInvited || getCurrentUser() || group.get('_accessLevel') >= AccessType.ADMIN)\n      button.g-group-actions-button.btn.btn-default.dropdown-toggle(\n          data-toggle=\"dropdown\", title=\"Group actions\")\n        i.icon-users\n        |  Actions\n        i.icon-down-dir\n      ul.g-group-actions-menu.dropdown-menu.pull-right(role=\"menu\")\n        if (isMember)\n          li(role=\"presentation\")\n            a.g-group-leave(role=\"menuitem\")\n              i.icon-block\n              | Leave group\n        else if (isInvited)\n          li(role=\"presentation\")\n            a.g-group-join(role=\"menuitem\")\n              i.icon-login\n              | Join group\n        else if (getCurrentUser())\n          li(role=\"presentation\")\n            a.g-group-request-invite(role=\"menuitem\")\n              i.icon-export\n              | Request membership\n        if (group.get('_accessLevel') >= AccessType.ADMIN)\n          li.divider(role=\"presentation\")\n          li(role=\"presentation\")\n            a.g-edit-group(role=\"menuitem\")\n              i.icon-edit\n              | Edit group\n        if (group.get('_accessLevel') >= AccessType.ADMIN)\n          li.divider(role=\"presentation\")\n          li(role=\"presentation\")\n            a.g-group-delete(role=\"menuitem\")\n              i.icon-trash\n              | Delete group\n\n  .g-group-name.g-body-title= group.name()\n  .g-group-description.g-body-subtitle= group.get('description')\n  .g-clear-right\n\nif (getCurrentUser())\n  if (isMember)\n    .g-group-status-container.g-member\n      i.icon-ok\n      if (isAdmin)\n        |  You are an #[b administrator] of this group.\n      else if (isModerator)\n        |  You are a #[b moderator] of this group.\n      else\n        |  You are a #[b member] of this group.\n  else if (isInvited)\n    .g-group-status-container.g-invited\n      i.icon-mail-alt\n      |  You have been invited to this group.\n      a.g-group-join  Join group\n  else if (isRequested)\n    .g-group-status-container.g-requested-invite\n      i.icon-comment\n      |  You have requested to join this group.\n  else\n    .g-group-status-container.g-nonmember\n      i.icon-minus-circled\n      |  You are not a member of this group.\n      a.g-group-request-invite  Request membership\n  if (group.get('_accessLevel') >= AccessType.ADMIN && !isAdmin)\n    .g-group-status-container.g-admin\n      i.icon-star\n      |  You have #[b administrator] privileges.\n\nul.g-group-tabs.nav.nav-tabs\n  li.active\n    a(href=\"#g-group-tab-roles\", data-toggle=\"tab\", name=\"roles\")\n      i.icon-th-list\n      |  Roles\n  li\n    a(href=\"#g-group-tab-pending\", data-toggle=\"tab\", name=\"pending\")\n      i.icon-inbox\n      | Pending\n      #g-group-tab-pending-status\n\n.tab-content\n  #g-group-tab-roles.tab-pane.active\n    .g-group-admins-container\n    .g-group-mods-container\n    .g-group-members-container\n  #g-group-tab-pending.tab-pane\n    .g-group-requests-container\n      .g-group-requests-header.g-group-list-header\n        i.icon-comment\n        |  Requests for membership\n\n      .g-group-requests-body\n        ul.g-group-requests\n          each user in group.get('requests')\n            li(userid=user.id)\n              a.g-member-name\n                i.icon-user\n                |  #{user.name} (#{user.login})\n              .g-group-member-controls.pull-right\n                if group.get('_accessLevel') >= AccessType.WRITE\n                  a.g-group-request-accept(title=\"Add to group\")\n                    i.icon-thumbs-up\n                  a.g-group-request-deny(title=\"Deny request\")\n                    i.icon-thumbs-down\n          if (!group.get('requests').length)\n            .g-member-list-empty\n              i.icon-info-circled\n              |  There are no outstanding invitation requests for this group.\n\n    .g-group-invites-container\n      .g-group-invites-header.g-group-list-header\n        i.icon-mail-alt\n        |  Sent invitations\n\n      .g-group-invites-body\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport EditGroupWidget from '@girder/core/views/widgets/EditGroupWidget';\nimport GroupAdminsWidget from '@girder/core/views/widgets/GroupAdminsWidget';\nimport GroupInvitesWidget from '@girder/core/views/widgets/GroupInvitesWidget';\nimport GroupMembersWidget from '@girder/core/views/widgets/GroupMembersWidget';\nimport GroupModel from '@girder/core/models/GroupModel';\nimport GroupModsWidget from '@girder/core/views/widgets/GroupModsWidget';\nimport LoadingAnimation from '@girder/core/views/widgets/LoadingAnimation';\nimport router from '@girder/core/router';\nimport UserCollection from '@girder/core/collections/UserCollection';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport { cancelRestRequests } from '@girder/core/rest';\nimport { confirm } from '@girder/core/dialog';\nimport events from '@girder/core/events';\nimport { getCurrentUser } from '@girder/core/auth';\n\nimport GroupPageTemplate from '@girder/core/templates/body/groupPage.pug';\n\nimport '@girder/core/stylesheets/body/groupPage.styl';\n\nimport 'bootstrap/js/dropdown';\nimport 'bootstrap/js/tab';\n\n/**\n * This view shows a single group's page.\n */\nvar GroupView = View.extend({\n    events: {\n        'click .g-edit-group': 'editGroup',\n        'click .g-group-join': 'joinGroup',\n        'click .g-group-leave': 'leaveGroup',\n        'click .g-group-delete': 'deleteGroup',\n        'click .g-group-request-invite': 'requestInvitation',\n        'click .g-group-request-accept': 'acceptMembershipRequest',\n        'click .g-group-request-deny': 'denyMembershipRequest',\n\n        'click #g-group-tab-pending a.g-member-name': function (e) {\n            var userId = $(e.currentTarget).parents('li').attr('userid');\n            router.navigate('user/' + userId, { trigger: true });\n        }\n    },\n\n    initialize: function (settings) {\n        cancelRestRequests('fetch');\n        this.tab = settings.tab || 'roles';\n        this.edit = settings.edit || false;\n\n        // If group model is already passed, there is no need to fetch.\n        if (settings.group) {\n            this.model = settings.group;\n            this.model.on('g:accessFetched', function () {\n                this.render();\n            }, this).fetchAccess();\n        } else if (settings.id) {\n            this.model = new GroupModel();\n            this.model.set('_id', settings.id);\n\n            this.model.on('g:fetched', function () {\n                this.model.on('g:accessFetched', function () {\n                    this.render();\n                }, this).fetchAccess();\n            }, this).fetch();\n        }\n    },\n\n    editGroup: function () {\n        var container = $('#g-dialog-container');\n\n        if (!this.editGroupWidget) {\n            this.editGroupWidget = new EditGroupWidget({\n                el: container,\n                model: this.model,\n                parentView: this\n            }).off('g:saved').on('g:saved', function () {\n                this.render();\n            }, this);\n        }\n        this.editGroupWidget.render();\n    },\n\n    deleteGroup: function () {\n        confirm({\n            text: 'Are you sure you want to delete the group <b>' +\n                this.model.escape('name') + '</b>?',\n            escapedHtml: true,\n            confirmCallback: () => {\n                this.model.on('g:deleted', function () {\n                    router.navigate('groups', { trigger: true });\n                }).destroy();\n            }\n        });\n    },\n\n    render: function () {\n        this.isMember = false;\n        this.isInvited = false;\n        this.isRequested = false;\n        this.isModerator = false;\n        this.isAdmin = false;\n\n        if (getCurrentUser()) {\n            _.every(getCurrentUser().get('groups'), function (groupId) {\n                if (groupId === this.model.get('_id')) {\n                    this.isMember = true;\n                    return false; // 'break;'\n                }\n                return true;\n            }, this);\n\n            _.every(getCurrentUser().get('groupInvites'), function (inv) {\n                if (inv.groupId === this.model.get('_id')) {\n                    this.isInvited = true;\n                    return false; // 'break;'\n                }\n                return true;\n            }, this);\n\n            _.every(this.model.get('requests') || [], function (user) {\n                if (user.id === getCurrentUser().get('_id')) {\n                    this.isRequested = true;\n                    return false; // 'break;'\n                }\n                return true;\n            }, this);\n        }\n\n        if (this.isMember) {\n            _.every(this.model.get('access').users || [], function (access) {\n                if (access.id === getCurrentUser().get('_id')) {\n                    if (access.level === AccessType.WRITE) {\n                        this.isModerator = true;\n                    } else if (access.level === AccessType.ADMIN) {\n                        this.isAdmin = true;\n                    }\n                    return false; // 'break';\n                }\n                return true;\n            }, this);\n        }\n        this.$el.html(GroupPageTemplate({\n            group: this.model,\n            getCurrentUser: getCurrentUser,\n            AccessType: AccessType,\n            isInvited: this.isInvited,\n            isRequested: this.isRequested,\n            isMember: this.isMember,\n            isModerator: this.isModerator,\n            isAdmin: this.isAdmin\n        }));\n\n        if (this.invitees) {\n            this._renderInvitesWidget();\n        } else {\n            var container = this.$('.g-group-invites-body');\n            new LoadingAnimation({\n                el: container,\n                parentView: this\n            }).render();\n\n            this.invitees = new UserCollection();\n            this.invitees.altUrl =\n                'group/' + this.model.get('_id') + '/invitation';\n            this.invitees.on('g:changed', () => {\n                this._renderInvitesWidget();\n                this.updatePendingStatus();\n            }, this).fetch();\n        }\n\n        this._updateRolesLists();\n\n        router.navigate('group/' + this.model.get('_id') + '/' +\n                               this.tab, { replace: true });\n\n        if (this.edit) {\n            if (this.model.get('_accessLevel') >= AccessType.ADMIN) {\n                this.editGroup();\n            }\n            this.edit = false;\n        }\n\n        _.each($('.g-group-tabs>li>a'), (el) => {\n            var tabLink = $(el);\n            tabLink.tab().on('shown.bs.tab', (e) => {\n                this.tab = $(e.currentTarget).attr('name');\n                router.navigate('group/' + this.model.get('_id') + '/' + this.tab);\n            });\n\n            if (tabLink.attr('name') === this.tab) {\n                tabLink.tab('show');\n            }\n        });\n\n        return this;\n    },\n\n    _renderInvitesWidget: function () {\n        new GroupInvitesWidget({\n            el: this.$('.g-group-invites-body'),\n            invitees: this.invitees,\n            group: this.model,\n            parentView: this\n        }).render();\n        this.updatePendingStatus();\n    },\n\n    updatePendingStatus: function () {\n        var count = this.invitees.length +\n            this.model.get('requests').length;\n        $('#g-group-tab-pending-status').text(' (' + count + ')');\n    },\n\n    joinGroup: function () {\n        this.model.off('g:joined').on('g:joined', function () {\n            this.invitees.fetch(null, true);\n        }, this).joinGroup();\n    },\n\n    leaveGroup: function () {\n        confirm({\n            text: 'Are you sure you want to leave this group?',\n            confirmCallback: () => {\n                this.model.off('g:removed').on('g:removed', () => {\n                    this.render();\n                }).removeMember(getCurrentUser().get('_id'));\n            }\n        });\n    },\n\n    removeMember: function (user) {\n        var id = user;\n        if ($.type(user) !== 'string') {\n            id = user.get('_id');\n        }\n        this.model.off('g:removed').on('g:removed', function () {\n            this.render();\n        }, this).removeMember(id);\n    },\n\n    requestInvitation: function () {\n        this.model.off('g:inviteRequested').on('g:inviteRequested', function () {\n            this.render();\n        }, this).requestInvitation();\n    },\n\n    acceptMembershipRequest: function (e) {\n        var userId = $(e.currentTarget).parents('li').attr('userid');\n        this.model.off('g:invited').on('g:invited', this.render, this)\n            .sendInvitation(userId, AccessType.READ, true);\n    },\n\n    denyMembershipRequest: function (e) {\n        var userId = $(e.currentTarget).parents('li').attr('userid');\n        this.model.off('g:removed').on('g:removed', this.render, this)\n            .removeMember(userId);\n    },\n\n    _updateRolesLists: function () {\n        var mods = [],\n            admins = [];\n\n        _.each(this.model.get('access').users, function (userAccess) {\n            if (userAccess.level === AccessType.WRITE) {\n                mods.push(userAccess);\n            } else if (userAccess.level === AccessType.ADMIN) {\n                admins.push(userAccess);\n            }\n        }, this);\n\n        this.adminsWidget = new GroupAdminsWidget({\n            el: this.$('.g-group-admins-container'),\n            group: this.model,\n            admins: admins,\n            parentView: this\n        }).off().on('g:demoteUser', function (userId) {\n            this.model.off('g:demoted').on('g:demoted', this.render, this)\n                .demoteUser(userId, AccessType.ADMIN);\n        }, this).on('g:removeMember', this.removeMember, this)\n            .on('g:moderatorAdded', this.render, this)\n            .render();\n\n        this.modsWidget = new GroupModsWidget({\n            el: this.$('.g-group-mods-container'),\n            group: this.model,\n            moderators: mods,\n            parentView: this\n        }).on('g:demoteUser', function (userId) {\n            this.model.off('g:demoted').on('g:demoted', this.render, this)\n                .demoteUser(userId, AccessType.WRITE);\n        }, this).on('g:removeMember', this.removeMember, this)\n            .on('g:adminAdded', this.render, this)\n            .render();\n\n        this.membersWidget = new GroupMembersWidget({\n            el: this.$('.g-group-members-container'),\n            group: this.model,\n            admins: admins,\n            moderators: mods,\n            parentView: this\n        }).on('g:sendInvite', function (params) {\n            var opts = {\n                force: params.force || false\n            };\n            this.model.off('g:invited').on('g:invited', function () {\n                this.invitees.fetch(null, true);\n                if (params.force) {\n                    this.model.fetchAccess();\n                }\n            }, this).off('g:error').on('g:error', function (err) {\n                events.trigger('g:alert', {\n                    text: err.responseJSON.message,\n                    type: 'warning'\n                });\n            }, this).sendInvitation(params.user.id, params.level, false, opts);\n        }, this).on('g:removeMember', this.removeMember, this)\n            .on('g:moderatorAdded', this.render, this)\n            .on('g:adminAdded', this.render, this);\n    }\n}, {\n    /**\n     * Helper function for fetching the user and rendering the view with\n     * an arbitrary set of extra parameters.\n     */\n    fetchAndInit: function (groupId, params) {\n        var group = new GroupModel();\n        group.set({ _id: groupId }).once('g:fetched', function () {\n            events.trigger('g:navigateTo', GroupView, _.extend({\n                group: group\n            }, params || {}));\n        }, this).fetch();\n    }\n});\n\nexport default GroupView;\n",".modal-dialog\n  .modal-content\n    form#g-file-edit-form.modal-form(role=\"form\")\n      .modal-header\n        button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n        h4.modal-title Edit file\n      .modal-body\n        .form-group\n          label.control-label(for=\"g-name\") Name\n          input#g-name.input-sm.form-control(\n            type=\"text\", placeholder=\"Enter file name\", value=file.name())\n        .form-group\n          label.control-label(for=\"g-mimetype\") MIME type\n          input#g-mimetype.input-sm.form-control(\n            type=\"text\", placeholder=\"Enter MIME type\", value=file.get('mimeType'))\n        .g-validation-failed-message\n      .modal-footer\n        a.btn.btn-small.btn-default(data-dismiss=\"modal\") Cancel\n        button.g-save-file.btn.btn-small.btn-primary(type=\"submit\")\n          i.icon-edit\n          | Save\n","import View from '@girder/core/views/View';\nimport { handleClose, handleOpen } from '@girder/core/dialog';\n\nimport EditFileWidgetTemplate from '@girder/core/templates/widgets/editFileWidget.pug';\n\nimport '@girder/core/utilities/jquery/girderEnable';\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This widget is used to edit file information.\n */\nvar EditFileWidget = View.extend({\n    events: {\n        'submit #g-file-edit-form': function () {\n            var fields = {\n                name: this.$('#g-name').val(),\n                mimeType: this.$('#g-mimetype').val()\n            };\n\n            this.file.set(fields);\n            this.file.off(null, null, this).on('g:saved', function () {\n                this.$el.modal('hide');\n                this.trigger('g:saved', this.file);\n            }, this).on('g:error', function (err) {\n                this.$('.g-validation-failed-message').text(err.responseJSON.message);\n                this.$('button.g-save-file').girderEnable(true);\n                this.$('#g-' + err.responseJSON.field).trigger('focus');\n            }, this).save();\n\n            this.$('button.g-save-file').girderEnable(false);\n            this.$('.g-validation-failed-message').empty();\n\n            return false;\n        }\n    },\n\n    initialize: function (settings) {\n        this.file = settings.file || null;\n    },\n\n    render: function () {\n        if (this.file.get('mimeType') === undefined) {\n            this.file.set('mimeType', '');\n        }\n        this.$el.html(EditFileWidgetTemplate({ file: this.file }))\n            .girderModal(this).on('shown.bs.modal', () => {\n                this.$('#g-name').trigger('select').trigger('focus');\n            }).on('hidden.bs.modal', () => {\n                handleClose('fileedit', undefined, this.file.get('_id'));\n            });\n        handleOpen('fileedit', undefined, this.file.get('_id'));\n        return this;\n    }\n});\n\nexport default EditFileWidget;\n",".modal-dialog\n  .modal-content\n    .modal-header\n      button.close(data-dismiss=\"modal\", aria-hidden=\"true\") &times;\n      h4.modal-title File information\n      .g-dialog-subtitle\n        i.icon-doc-inv\n        span= file.name()\n    .modal-body\n      .g-file-info-lines\n        .g-file-info-line(property=\"created\")\n          i.icon-clock\n          span= 'Created '\n          span.g-bold-part= formatDate(file.get('created'), DATE_SECOND)\n\n        .g-file-info-line(property=\"mimeType\")\n          i.icon-info\n          span MIME type:\n          span.g-bold-part  #{file.get('mimeType') || 'unknown'}\n\n        if file.has('size')\n          .g-file-info-line(property=\"size\")\n            i.icon-hdd\n            span Size:\n            span.g-bold-part  #{file.get('size')} bytes\n\n        .g-file-info-line(property=\"id\")\n          i.icon-share\n          span Unique ID:\n          span.g-bold-part  #{file.id}\n\n    .modal-footer\n      a.btn.btn-small.btn-default(data-dismiss=\"modal\") Close\n","import View from '@girder/core/views/View';\nimport { formatDate, DATE_SECOND } from '@girder/core/misc';\n\nimport FileInfoDialogTemplate from '@girder/core/templates/widgets/fileInfoDialog.pug';\n\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This widget shows information about a single file in a modal dialog.\n */\nvar FileInfoWidget = View.extend({\n    initialize: function (settings) {\n        this.parentItem = settings.parentItem;\n    },\n\n    render: function () {\n        this.$el.html(FileInfoDialogTemplate({\n            file: this.model,\n            formatDate: formatDate,\n            DATE_SECOND: DATE_SECOND\n        })).girderModal(this);\n        return this;\n    }\n});\n\nexport default FileInfoWidget;\n","ul.g-file-list\n  each file in files\n    li.g-file-list-entry\n      a.g-file-list-link(cid=file.cid, title=\"Download file\",\n          target=file.get('linkUrl') ? '_blank' : '_self', href=file.downloadUrl(),\n          rel=\"noopener noreferrer\")\n        if file.get('linkUrl')\n          i.icon-link\n          span.g-file-name= file.name()\n          i.icon-link-ext\n        else\n          i.icon-doc-inv\n          = file.name()\n      a.g-view-inline(title=\"View in browser\", target=\"_blank\", rel=\"noopener noreferrer\",\n          href=file.downloadUrl({contentDisposition: 'inline'}))\n        i.icon-eye\n      a.g-show-info(file-cid=file.cid, title=\"Show info\")\n        i.icon-info\n      if file.has('size')\n        .g-file-size= formatSize(file.get('size'))\n      .g-file-actions-container(file-cid=file.cid)\n        if parentItem && parentItem.get('_accessLevel') >= AccessType.WRITE\n          a.g-update-info(title=\"Edit file info\")\n            i.icon-edit\n          a.g-update-contents(title=\"Replace file contents\")\n            i.icon-upload\n          a.g-delete-file(title=\"Delete file\")\n            i.icon-cancel\n  if hasMore\n    li.g-show-more\n      a.g-show-more-files\n        i.icon-level-down\n        | Show more files...\n","import $ from 'jquery';\n\nimport EditFileWidget from '@girder/core/views/widgets/EditFileWidget';\nimport FileCollection from '@girder/core/collections/FileCollection';\nimport FileInfoWidget from '@girder/core/views/widgets/FileInfoWidget';\nimport UploadWidget from '@girder/core/views/widgets/UploadWidget';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport { confirm } from '@girder/core/dialog';\nimport { formatSize } from '@girder/core/misc';\nimport events from '@girder/core/events';\n\nimport FileListTemplate from '@girder/core/templates/widgets/fileList.pug';\n\n/**\n * This widget shows a list of files in a given item.\n */\nvar FileListWidget = View.extend({\n    events: {\n        'click a.g-show-more-files': function () {\n            this.collection.fetchNextPage();\n        },\n\n        'click a.g-show-info': function (e) {\n            var cid = $(e.currentTarget).attr('file-cid');\n            new FileInfoWidget({\n                el: $('#g-dialog-container'),\n                model: this.collection.get(cid),\n                parentItem: this.parentItem,\n                parentView: this\n            }).render();\n        },\n\n        'click a.g-update-contents': function (e) {\n            var cid = $(e.currentTarget).parent().attr('file-cid');\n            this.uploadDialog(cid);\n        },\n\n        'click a.g-update-info': function (e) {\n            var cid = $(e.currentTarget).parent().attr('file-cid');\n            this.editFileDialog(cid);\n        },\n\n        'click a.g-delete-file': function (e) {\n            var cid = $(e.currentTarget).parent().attr('file-cid');\n            var file = this.collection.get(cid);\n\n            confirm({\n                text: 'Are you sure you want to delete the file <b>' +\n                      file.escape('name') + '</b>?',\n                yesText: 'Delete',\n                escapedHtml: true,\n                confirmCallback: () => {\n                    file.once('g:deleted', function () {\n                        events.trigger('g:alert', {\n                            icon: 'ok',\n                            type: 'success',\n                            text: 'File deleted.',\n                            timeout: 4000\n                        });\n\n                        this.render();\n                    }, this).once('g:error', function () {\n                        events.trigger('g:alert', {\n                            icon: 'cancel',\n                            text: 'Failed to delete file.',\n                            type: 'danger',\n                            timeout: 4000\n                        });\n                    }).destroy();\n                }\n            });\n        }\n    },\n\n    initialize: function (settings) {\n        this.upload = settings.upload;\n        this.fileEdit = settings.fileEdit;\n        this.checked = [];\n        this.collection = new FileCollection();\n        this.collection.altUrl = 'item/' +\n            (settings.itemId || settings.item.get('_id')) + '/files';\n        this.collection.append = true; // Append, don't replace pages\n        this.collection.on('g:changed', function () {\n            this.render();\n            this.trigger('g:changed');\n        }, this).fetch();\n\n        this.parentItem = settings.item;\n    },\n\n    editFileDialog: function (cid) {\n        this.editFileWidget = new EditFileWidget({\n            el: $('#g-dialog-container'),\n            file: this.collection.get(cid),\n            parentView: this\n        }).off('g:saved', null, this).on('g:saved', function () {\n            this.render();\n        }, this);\n        this.editFileWidget.render();\n    },\n\n    uploadDialog: function (cid) {\n        new UploadWidget({\n            el: $('#g-dialog-container'),\n            title: 'Replace file contents',\n            parent: this.collection.get(cid),\n            parentType: 'file',\n            parentView: this\n        }).on('g:uploadFinished', function () {\n            events.trigger('g:alert', {\n                icon: 'ok',\n                text: 'File contents updated.',\n                type: 'success',\n                timeout: 4000\n            });\n        }, this).render();\n    },\n\n    render: function () {\n        this.checked = [];\n        this.$el.html(FileListTemplate({\n            files: this.collection.toArray(),\n            hasMore: this.collection.hasNextPage(),\n            AccessType: AccessType,\n            formatSize: formatSize,\n            parentItem: this.parentItem\n        }));\n\n        if (this.fileEdit) {\n            this.editFileDialog(this.fileEdit);\n            this.fileEdit = false;\n        } else if (this.upload) {\n            this.uploadDialog(this.upload);\n            this.upload = false;\n        }\n\n        return this;\n    },\n\n    /**\n     * Insert a file into the collection and re-render it.\n     */\n    insertFile: function (file) {\n        this.collection.add(file);\n        this.render();\n        this.trigger('g:changed');\n    }\n});\n\nexport default FileListWidget;\n","ol.breadcrumb\n  each parent in parentChain\n    li\n      a.g-item-breadcrumb-link(data-id=parent.object._id, data-type=parent.type)\n        if (parent.type === \"user\")\n          i.icon-user\n          = parent.object.login\n        else if (parent.type === \"collection\")\n          i.icon-sitemap\n          = parent.object.name\n        else\n          = parent.object.name\n\n  .pull-right\n    a.g-hierarchy-level-up(title=\"Go to parent folder\")\n      i.icon-level-up\n","import $ from 'jquery';\n\nimport router from '@girder/core/router';\nimport View from '@girder/core/views/View';\n\nimport ItemBreadcrumbTemplate from '@girder/core/templates/widgets/itemBreadcrumb.pug';\n\n/**\n * Renders the a breadcrumb for the item page\n */\nvar ItemBreadcrumbWidget = View.extend({\n    events: {\n        'click a.g-item-breadcrumb-link': function (event) {\n            var link = $(event.currentTarget);\n            router.navigate(link.data('type') + '/' + link.data('id'),\n                { trigger: true });\n        },\n        'click a.g-hierarchy-level-up': function () {\n            var folder = this.parentChain.pop().object;\n            router.navigate('folder/' + folder._id, { trigger: true });\n        }\n    },\n\n    initialize: function (settings) {\n        this.parentChain = settings.parentChain;\n        this.render();\n    },\n\n    render: function () {\n        this.$el.html(ItemBreadcrumbTemplate({\n            parentChain: this.parentChain\n        }));\n\n        return this;\n    }\n});\n\nexport default ItemBreadcrumbWidget;\n",".g-item-breadcrumb-container\n.g-item-header\n\n  .pull-right\n    if (accessLevel >= AccessType.WRITE)\n      button.g-upload-into-item.btn.btn-sm.btn-success(title=\"Upload files into item\")\n        i.icon-upload\n    .btn-group\n      button.g-item-actions-button.btn.btn-sm.btn-default.dropdown-toggle(\n          data-toggle=\"dropdown\", title=\"Item actions\")\n        i.icon-doc-text-inv\n        |  Actions\n        i.icon-down-dir\n      ul.g-item-actions-menu.dropdown-menu.pull-right(role=\"menu\")\n        li(role=\"presentation\")\n          a.g-download-item(role=\"menuitem\", href=item.downloadUrl())\n            i.icon-download\n            | Download item\n        if (accessLevel >= AccessType.WRITE)\n          li.divider(role=\"presentation\")\n          li(role=\"presentation\")\n            a.g-edit-item(role=\"menuitem\")\n              i.icon-edit\n              | Edit item\n          li.divider(role=\"presentation\")\n          li(role=\"presentation\")\n            a.g-delete-item(role=\"menuitem\")\n              i.icon-trash\n              | Delete item\n\n  .g-item-name.g-body-title= item.name()\n\n.g-item-description!= renderMarkdown(item.get('description'))\n\n.g-item-info\n  .g-item-info-header\n    i.icon-info\n    | Info\n  .g-item-size.g-info-list-entry\n    i.icon-hdd\n    if item.get('size') < 1024\n      | #{item.get('size')} bytes\n    else\n      | #{formatSize(item.get('size'))} (#{item.get('size')} bytes)\n  .g-item-created.g-info-list-entry\n    i.icon-clock\n    | Created on #{formatDate(item.get('created'), DATE_SECOND)}\n  .g-item-updated.g-info-list-entry\n    i.icon-clock\n    | Updated on #{formatDate(item.get('updated'), DATE_SECOND)}\n  .g-item-id.g-info-list-entry\n    i.icon-share\n    | Unique ID: #{item.id}\n\n.g-item-metadata\n\n.g-item-files\n  .g-item-files-header\n    i.icon-docs\n    |  Files &amp; links\n  .g-item-files-container\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport EditItemWidget from '@girder/core/views/widgets/EditItemWidget';\nimport FileListWidget from '@girder/core/views/widgets/FileListWidget';\nimport ItemBreadcrumbWidget from '@girder/core/views/widgets/ItemBreadcrumbWidget';\nimport ItemModel from '@girder/core/models/ItemModel';\nimport MetadataWidget from '@girder/core/views/widgets/MetadataWidget';\nimport router from '@girder/core/router';\nimport UploadWidget from '@girder/core/views/widgets/UploadWidget';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport { cancelRestRequests } from '@girder/core/rest';\nimport { confirm, handleClose } from '@girder/core/dialog';\nimport events from '@girder/core/events';\nimport { formatSize, formatDate, renderMarkdown, DATE_SECOND } from '@girder/core/misc';\n\nimport ItemPageTemplate from '@girder/core/templates/body/itemPage.pug';\n\nimport '@girder/core/stylesheets/body/itemPage.styl';\n\nimport 'bootstrap/js/dropdown';\n\n/**\n * This view shows a single item's page.\n */\nvar ItemView = View.extend({\n    events: {\n        'click .g-edit-item': 'editItem',\n        'click .g-delete-item': 'deleteItem',\n        'click .g-upload-into-item': 'uploadIntoItem'\n    },\n\n    initialize: function (settings) {\n        cancelRestRequests('fetch');\n        this.edit = settings.edit || false;\n        this.fileEdit = settings.fileEdit || false;\n        this.upload = settings.upload || false;\n\n        // If collection model is already passed, there is no need to fetch.\n        if (settings.item) {\n            this.model = settings.item;\n            this.render();\n        } else {\n            console.error('Implement fetch then render item');\n        }\n    },\n\n    uploadIntoItem: function () {\n        new UploadWidget({\n            el: $('#g-dialog-container'),\n            parent: this.model,\n            parentType: 'item',\n            parentView: this\n        }).on('g:uploadFinished', function () {\n            handleClose('upload');\n            this.upload = false;\n\n            events.trigger('g:alert', {\n                icon: 'ok',\n                text: 'Files added.',\n                type: 'success',\n                timeout: 4000\n            });\n\n            this.fileListWidget.collection.fetch(null, true);\n        }, this).render();\n    },\n\n    editItem: function () {\n        var container = $('#g-dialog-container');\n\n        if (!this.editItemWidget) {\n            this.editItemWidget = new EditItemWidget({\n                el: container,\n                item: this.model,\n                parentView: this\n            }).off('g:saved').on('g:saved', function () {\n                this.render();\n            }, this);\n        }\n        this.editItemWidget.render();\n    },\n\n    deleteItem: function () {\n        var folderId = this.model.get('folderId');\n        var parentRoute = this.model.get('baseParentType') + '/' +\n            this.model.get('baseParentId') + '/folder/' + folderId;\n        confirm({\n            text: 'Are you sure you want to delete <b>' + this.model.escape('name') + '</b>?',\n            yesText: 'Delete',\n            escapedHtml: true,\n            confirmCallback: () => {\n                this.model.on('g:deleted', () => {\n                    router.navigate(parentRoute, { trigger: true });\n                }).off('g:error').on('g:error', () => {\n                    this.render();\n                    events.trigger('g:alert', {\n                        icon: 'cancel',\n                        text: 'Failed to delete item.',\n                        type: 'danger',\n                        timeout: 4000\n                    });\n                }, this).destroy();\n            }\n        });\n    },\n\n    render: function () {\n        // Fetch the access level asynchronously and render once we have\n        // it. TODO: load the page and adjust only the action menu once\n        // the access level is fetched.\n        this.model.getAccessLevel((accessLevel) => {\n            this.accessLevel = accessLevel;\n            this.$el.html(ItemPageTemplate({\n                item: this.model,\n                accessLevel: accessLevel,\n                AccessType: AccessType,\n                formatSize: formatSize,\n                formatDate: formatDate,\n                renderMarkdown: renderMarkdown,\n                DATE_SECOND: DATE_SECOND\n            }));\n\n            this.fileListWidget = new FileListWidget({\n                el: this.$('.g-item-files-container'),\n                item: this.model,\n                fileEdit: this.fileEdit,\n                upload: this.upload,\n                parentView: this\n            });\n            this.fileListWidget.once('g:changed', function () {\n                this.trigger('g:rendered');\n            }, this);\n\n            this.fileEdit = false;\n            this.upload = false;\n\n            this.metadataWidget = new MetadataWidget({\n                el: this.$('.g-item-metadata'),\n                item: this.model,\n                accessLevel: accessLevel,\n                parentView: this\n            });\n\n            this.model.getRootPath((resp) => {\n                this.breadcrumbWidget = new ItemBreadcrumbWidget({\n                    el: this.$('.g-item-breadcrumb-container'),\n                    parentChain: resp,\n                    parentView: this\n                });\n            });\n\n            if (this.edit) {\n                this.editItem();\n                this.edit = false;\n            }\n        });\n\n        return this;\n    }\n}, {\n    /**\n     * Helper function for fetching the user and rendering the view with\n     * an arbitrary set of extra parameters.\n     */\n    fetchAndInit: function (itemId, params) {\n        var item = new ItemModel();\n        item.set({ _id: itemId }).on('g:fetched', function () {\n            events.trigger('g:navigateTo', ItemView, _.extend({\n                item: item\n            }, params || {}));\n        }, this).fetch();\n    }\n});\n\nexport default ItemView;\n",".g-body-title Plugins\n.g-plugin-list-container\n  each plugin in allPlugins\n    - var experimental = plugin.value.version ? plugin.value.version.indexOf('0.') === 0 : true\n    .g-plugin-list-item(data-name=plugin.key)\n      .g-plugin-name()\n        if plugin.value.url\n          a(href=plugin.value.url, target='_blank')= plugin.value.name\n        else\n          span= plugin.value.name\n        if plugin.value.version\n          span.g-plugin-version Version #{plugin.value.version}\n        if experimental\n          span.g-plugin-list-item-notice.g-plugin-list-item-experimental-notice(\n            title=\"WARNING: this plugin is an alpha version and is subject \" +\n                  \"to breaking changes; use at your own risk.\") Experimental\n        if plugin.value.configRoute\n          a.g-plugin-config-link(g-route=plugin.value.configRoute, title=\"Configure Plugin\")\n            i.icon-cog\n      .g-plugin-description= plugin.value.description\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport router from '@girder/core/router';\nimport View from '@girder/core/views/View';\nimport { getPluginConfigRoute } from '@girder/core/utilities/PluginUtils';\nimport { restRequest, cancelRestRequests } from '@girder/core/rest';\n\nimport PluginsTemplate from '@girder/core/templates/body/plugins.pug';\n\nimport '@girder/core/stylesheets/body/plugins.styl';\n\n/**\n * This is the plugin management page for administrators.\n */\nvar PluginsView = View.extend({\n    events: {\n        'click a.g-plugin-config-link': function (evt) {\n            var route = $(evt.currentTarget).attr('g-route');\n            router.navigate(route, { trigger: true });\n        }\n    },\n\n    initialize: function (settings) {\n        cancelRestRequests('fetch');\n        if (settings.all) {\n            this.allPlugins = settings.all;\n            this.render();\n        } else {\n            // Fetch the plugin list\n            restRequest({\n                url: 'system/plugins',\n                method: 'GET'\n            })\n                .done((resp) => {\n                    this.allPlugins = resp.all;\n                    this.render();\n                }).fail(() => {\n                    router.navigate('/', { trigger: true });\n                });\n        }\n    },\n\n    render: function () {\n        _.each(this.allPlugins, function (info, name) {\n            info.configRoute = getPluginConfigRoute(name);\n        }, this);\n\n        this.$el.html(PluginsTemplate({\n            allPlugins: this._sortPlugins(this.allPlugins)\n        }));\n\n        return this;\n    },\n\n    _sortPlugins: function (plugins) {\n        /* Sort a dictionary of plugins alphabetically so that the appear in a\n         * predictable order to the user.\n         *\n         * @param plugins: a dictionary to sort.  Each entry has a .name\n         *                 attribute used for sorting.\n         * @returns sortedPlugins: the sorted list. */\n        var sortedPlugins = _.map(plugins, function (value, key) {\n            return { key: key, value: value };\n        });\n        sortedPlugins.sort(function (a, b) {\n            return a.value.name.localeCompare(b.value.name);\n        });\n        return sortedPlugins;\n    }\n});\n\nexport default PluginsView;\n","import AccessControlledModel from '@girder/core/models/AccessControlledModel';\nimport { restRequest } from '@girder/core/rest';\n\nvar CollectionCreationPolicyModel = AccessControlledModel.extend({\n    resourceName: 'system/setting/collection_creation_policy',\n    fetchAccess: function () {\n        return restRequest({\n            url: `${this.resourceName}/access`,\n            method: 'GET'\n        }).done((resp) => {\n            this.set('access', resp);\n            this.trigger('g:accessFetched');\n            return resp;\n        }).fail((err) => {\n            this.trigger('g:error', err);\n        });\n    }\n});\n\nexport default CollectionCreationPolicyModel;\n",".g-body-title System configuration\n.g-body-subtitle\n  p\n    | Note: all settings other than those referencing data in the database should be set as\n    | environment variables in the execution environment.\nform.g-settings-form(role=\"form\")\n  .g-settings-form-container\n    h4 Instance Branding\n    .form-group\n      label(for=\"g-core-brand-name\") Brand Name\n      input#g-core-brand-name.form-control.input-sm(\n          disabled=true,\n          type=\"text\", value=settings['core.brand_name'] || '',\n          title=\"The brand name of the application.\")\n    .form-group\n      label(for=\"g-core-contact-email-address\") Contact email address\n      input#g-core-contact-email-address.form-control.input-sm(\n          disabled=true,\n          type=\"text\", value=settings['core.contact_email_address'] || '',\n          title=\"The contact email address for users to obtain support with this instance.\")\n    .form-group\n      label(for=\"g-core-banner-color\") Banner Color\n      #g-core-banner-color-container\n        input#g-core-banner-color.form-control.input-sm(\n            disabled=true,\n            type=\"color\", value=settings['core.banner_color'],\n            title=\"The banner color of the application.\")\n  .form-group\n    label(for=\"g-core-privacy-notice\") Privacy Notice Link\n    input#g-core-privacy-notice.form-control.input-sm(\n        disabled=true,\n        type=\"text\", value=settings['core.privacy_notice'] || '',\n        title=\"The privacy notice link.\")\n  .form-group\n    label(for=\"g-core-cookie-lifetime\") Cookie duration (days)\n    input#g-core-cookie-lifetime.form-control.input-sm(\n        disabled=true,\n        type=\"text\", value=settings['core.cookie_lifetime'] || '',\n        title=\"How long users will stay logged in.\")\n  .g-settings-form-container\n    h4 Administrative Policy\n    .form-group\n      label(for=\"g-core-registration-policy\") Registration policy\n      select#g-core-registration-policy.form-control.input-sm(\n          disabled=true)\n        option(value=\"open\",\n            selected=(settings['core.registration_policy'] === \"open\")) Open registration\n        option(value=\"closed\",\n            selected=(settings['core.registration_policy'] === \"closed\")) Closed registration\n        option(value=\"approve\",\n            selected=(settings['core.registration_policy'] === \"approve\")) Admin approval required\n    .form-group\n      label(for=\"g-core-email-verification\") Email verification\n      select#g-core-email-verification.form-control.input-sm(\n          disabled=true)\n        option(value=\"required\",\n            selected=(settings['core.email_verification'] === \"required\")) Required\n        option(value=\"optional\",\n            selected=(settings['core.email_verification'] === \"optional\")) Optional\n        option(value=\"disabled\",\n            selected=(settings['core.email_verification'] === \"disabled\")) Disabled\n    .form-group\n      label(for=\"g-core-add-to-group-policy\") Allow members to be directly added to groups\n      select#g-core-add-to-group-policy.form-control.input-sm(\n          disabled=true)\n        option(value=\"never\",\n            selected=(settings['core.add_to_group_policy'] === \"never\"))\n          | No, members must be invited and accept invitations\n        option(value=\"noadmin\",\n            selected=(settings['core.add_to_group_policy'] === \"noadmin\"))\n          | No, except for group administrators when enabled per group\n        option(value=\"nomod\",\n            selected=(settings['core.add_to_group_policy'] === \"nomod\"))\n          | No, except for group administrators and moderators when enabled per group\n        option(value=\"yesadmin\",\n            selected=(settings['core.add_to_group_policy'] === \"yesadmin\"))\n          | Yes, by group administrators unless disabled per group\n        option(value=\"yesmod\",\n            selected=(settings['core.add_to_group_policy'] === \"yesmod\"))\n          | Yes, by group administrators and moderators unless disabled per group\n    .g-collection-create-policy-container\n      label Collection creation policy\n      p.\n        Allow additional users and groups to create collections.\n      input.g-setting-switch(type=\"checkbox\",\n          checked=\"checked\", data-size=\"mini\", data-on-color=\"primary\")\n      .access-widget-container\n      textarea#g-core-collection-create-policy.hide\n        = JSON.stringify(settings['core.collection_create_policy'])\n    .form-group\n      label(for=\"g-core-user-default-folders\") Create default folders for new users\n      select#g-core-user-default-folders.form-control.input-sm(\n          disabled=true)\n        option(value=\"none\",\n            selected=(settings['core.user_default_folders'] === \"none\")) No\n        option(value=\"public_private\",\n            selected=(settings['core.user_default_folders'] === \"public_private\")) Yes, \"Public\" and \"Private\"\n    .form-group\n      .checkbox\n        label(for=\"g-core-api-keys\")\n          input#g-core-api-keys(type=\"checkbox\", checked=settings['core.api_keys'],\n              disabled=true)\n          | Enable API keys\n    .form-group\n      .checkbox\n        label(for=\"g-core-enable-password-login\")\n          input#g-core-enable-password-login(\n              type=\"checkbox\", checked=settings['core.enable_password_login'],\n              disabled=true)\n          | Enable password login\n  .g-settings-form-container\n    h4 Email Creation\n    .form-group\n      label(for=\"g-core-email-from-address\") Email from address\n      input#g-core-email-from-address.form-control.input-sm(\n          disabled=true,\n          type=\"text\", value=settings['core.email_from_address'] || '',\n          title=\"The email address the system will use when sending emails.\")\n    .form-group\n      label(for=\"g-core-email-host\") Email host\n      input#g-core-email-host.form-control.input-sm(\n          disabled=true,\n          type=\"text\", value=settings['core.email_host'] || '',\n          title=\"The host email server that is shown as a link in the footer of emails.\")\n  .g-settings-form-container\n    h4 Email Delivery\n    .form-group\n      label(for=\"g-core-smtp-host\") SMTP host\n      input#g-core-smtp-host.form-control.input-sm(\n          disabled=true,\n          type=\"text\", value=settings['core.smtp_host'] || '',\n          title=\"The hostname of the SMTP server used to send emails.\")\n    .form-group\n      label(for=\"g-core-smtp-port\") SMTP port\n      input#g-core-smtp-port.form-control.input-sm(\n          disabled=true,\n          type=\"text\", value=settings['core.smtp.port'] || '',\n          title=\"The port number of the SMTP server used to send emails.\")\n    .form-group\n      label(for=\"g-core-smtp-encryption\") SMTP encryption\n      select#g-core-smtp-encryption.form-control.input-sm(\n          disabled=true)\n        option(value=\"none\",\n            selected=(settings['core.smtp.encryption'] === \"none\")) None\n        option(value=\"starttls\",\n            selected=(settings['core.smtp.encryption'] === \"starttls\")) Use STARTTLS\n        option(value=\"ssl\",\n            selected=(settings['core.smtp.encryption'] === \"ssl\")) Use SSL/TLS\n    .form-group\n      label(for=\"g-core-smtp-username\") SMTP username\n      input#g-core-smtp-username.form-control.input-sm(\n          disabled=true,\n          type=\"text\", value=settings['core.smtp.username'] || '',\n          title=\"The username, if any, used to authenticate to the SMTP server used to send emails.\")\n    .form-group\n      label(for=\"g-core-smtp-password\") SMTP password\n      input#g-core-smtp-password.form-control.input-sm(\n          disabled=true,\n          type=\"password\", value=settings['core.smtp.password'] || '',\n          title=\"The password, if any, used to authenticate to the SMTP server used to send emails.\")\n\n  #g-configuration-accordion.panel-group\n    .panel.panel-default\n      .panel-heading(data-toggle=\"collapse\",\n          data-parent=\"#g-configuration-accordion\",\n          data-target=\"#g-advanced-settings-tab\")\n        .panel-title\n          a\n            b Advanced Settings\n      #g-advanced-settings-tab.panel-collapse.collapse\n        .panel-body\n          p These settings should only be changed if you are certain of what you are doing.\n          .form-group\n            label(for=\"g-core-server-root\") Server root URL\n            input#g-core-server-root.form-control.input-sm(\n                disabled=true,\n                type=\"text\", value=settings['core.server_root'] || '',\n                placeholder='Detect automatically')\n          .form-group\n            label(for=\"g-core-upload-minimum-chunk-size\") Upload minimum chunk size (bytes)\n            br\n            span This applies to Filesystem assetstores.\n            input#g-core-upload-minimum-chunk-size.form-control.input-sm(\n                disabled=true,\n                type=\"text\", value=settings['core.upload_minimum_chunk_size'] || '',\n                title=\"For large files, the minimum size of all but the last chunk.\")\n          .g-settings-form-container\n            h4 CORS\n            p.\n              CORS (Cross-origin resource sharing) allows access from other websites.\n              These settings are described in\n              detail #[a(href=\"http://girder.readthedocs.org/en/latest/security.html#cors-cross-origin-resource-sharing\", target=\"_blank\") here].\n            .form-group\n              label(for=\"g-core-cors-allow-origin\") CORS Allowed Origins\n              input#g-core-cors-allow-origin.form-control.input-sm(\n                  disabled=true,\n                  type=\"text\", value=settings['core.cors.allow_origin'] || '',\n                  title=\"A comma-separated list of allowed base URLs that can make cross-site requests. This may include *.\")\n            .form-group\n              label(for=\"g-core-cors-allow-methods\") CORS Allowed Methods\n              input#g-core-cors-allow-methods.form-control.input-sm(\n                  disabled=true,\n                  type=\"text\", value=settings['core.cors.allow_methods'] || '',\n                  placeholder=\"Default: allow all methods\",\n                  title=\"A comma-separated list of allowed methods\")\n            .form-group\n              label(for=\"g-core-cors-allow-headers\") CORS Allowed Headers\n              input#g-core-cors-allow-headers.form-control.input-sm(\n                  disabled=true,\n                  type=\"text\", value=settings['core.cors.allow_headers'] || '',\n                  title=\"A comma-separated list of allowed headers.\")\n  p\n  .form-group\n    button.g-submit-settings.btn.btn-default.btn-sm #[i.icon-ok]  Save\n  #g-settings-error-message.g-validation-failed-message\n","/**\n  * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.\n  *\n  * @version v3.3.5\n  * @homepage https://bttstrp.github.io/bootstrap-switch\n  * @author Mattia Larentis <mattia@larentis.eu> (http://larentis.eu)\n  * @license MIT\n  */\n\n(function (global, factory) {\n  if (typeof define === \"function\" && define.amd) {\n    define(['jquery'], factory);\n  } else if (typeof exports !== \"undefined\") {\n    factory(require('jquery'));\n  } else {\n    var mod = {\n      exports: {}\n    };\n    factory(global.jquery);\n    global.bootstrapSwitch = mod.exports;\n  }\n})(this, function (_jquery) {\n  'use strict';\n\n  var _jquery2 = _interopRequireDefault(_jquery);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\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 $ = _jquery2.default || window.jQuery || window.$;\n\n  function getClasses(options, id) {\n    var state = options.state,\n        size = options.size,\n        disabled = options.disabled,\n        readonly = options.readonly,\n        indeterminate = options.indeterminate,\n        inverse = options.inverse;\n\n    return [state ? 'on' : 'off', size, disabled ? 'disabled' : undefined, readonly ? 'readonly' : undefined, indeterminate ? 'indeterminate' : undefined, inverse ? 'inverse' : undefined, id ? 'id-' + id : undefined].filter(function (v) {\n      return v == null;\n    });\n  }\n\n  function prvgetElementOptions() {\n    return {\n      state: this.$element.is(':checked'),\n      size: this.$element.data('size'),\n      animate: this.$element.data('animate'),\n      disabled: this.$element.is(':disabled'),\n      readonly: this.$element.is('[readonly]'),\n      indeterminate: this.$element.data('indeterminate'),\n      inverse: this.$element.data('inverse'),\n      radioAllOff: this.$element.data('radio-all-off'),\n      onColor: this.$element.data('on-color'),\n      offColor: this.$element.data('off-color'),\n      onText: this.$element.data('on-text'),\n      offText: this.$element.data('off-text'),\n      labelText: this.$element.data('label-text'),\n      handleWidth: this.$element.data('handle-width'),\n      labelWidth: this.$element.data('label-width'),\n      baseClass: this.$element.data('base-class'),\n      wrapperClass: this.$element.data('wrapper-class')\n    };\n  }\n\n  function prvwidth() {\n    var _this = this;\n\n    var $handles = this.$on.add(this.$off).add(this.$label).css('width', '');\n    var handleWidth = this.options.handleWidth === 'auto' ? Math.round(Math.max(this.$on.width(), this.$off.width())) : this.options.handleWidth;\n    $handles.width(handleWidth);\n    this.$label.width(function (index, width) {\n      if (_this.options.labelWidth !== 'auto') {\n        return _this.options.labelWidth;\n      }\n      if (width < handleWidth) {\n        return handleWidth;\n      }\n      return width;\n    });\n    this.privateHandleWidth = this.$on.outerWidth();\n    this.privateLabelWidth = this.$label.outerWidth();\n    this.$container.width(this.privateHandleWidth * 2 + this.privateLabelWidth);\n    return this.$wrapper.width(this.privateHandleWidth + this.privateLabelWidth);\n  }\n\n  function prvcontainerPosition() {\n    var _this2 = this;\n\n    var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.ope;\n\n    this.$container.css('margin-left', function () {\n      var values = [0, '-' + _this2.privateHandleWidth + 'px'];\n      if (_this2.options.indeterminate) {\n        return '-' + _this2.privateHandleWidth / 2 + 'px';\n      }\n      if (state) {\n        if (_this2.options.inverse) {\n          return values[1];\n        }\n        return values[0];\n      }\n      if (_this2.options.inverse) {\n        return values[0];\n      }\n      return values[1];\n    });\n  }\n\n  function prvgetClass(name) {\n    return this.options.baseClass + '-' + name;\n  }\n\n  function prvinit() {\n    var _this3 = this;\n\n    var init = function init() {\n      _this3.setPrevOptions();\n      prvwidth.call(_this3);\n      prvcontainerPosition.call(_this3);\n      setTimeout(function () {\n        return _this3.options.animate && _this3.$wrapper.addClass(prvgetClass.call(_this3, 'animate'));\n      }, 50);\n    };\n    if (this.$wrapper.is(':visible')) {\n      init();\n      return;\n    }\n    var initInterval = window.setInterval(function () {\n      return _this3.$wrapper.is(':visible') && (init() || true) && window.clearInterval(initInterval);\n    }, 50);\n  }\n\n  function prvelementHandlers() {\n    var _this4 = this;\n\n    return this.$element.on({\n      'setPreviousOptions.bootstrapSwitch': function setPreviousOptionsBootstrapSwitch() {\n        return _this4.setPrevOptions();\n      },\n\n      'previousState.bootstrapSwitch': function previousStateBootstrapSwitch() {\n        _this4.options = _this4.prevOptions;\n        if (_this4.options.indeterminate) {\n          _this4.$wrapper.addClass(prvgetClass.call(_this4, 'indeterminate'));\n        }\n        _this4.$element.prop('checked', _this4.options.state).trigger('change.bootstrapSwitch', true);\n      },\n\n      'change.bootstrapSwitch': function changeBootstrapSwitch(event, skip) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        var state = _this4.$element.is(':checked');\n        prvcontainerPosition.call(_this4, state);\n        if (state === _this4.options.state) {\n          return;\n        }\n        _this4.options.state = state;\n        _this4.$wrapper.toggleClass(prvgetClass.call(_this4, 'off')).toggleClass(prvgetClass.call(_this4, 'on'));\n        if (!skip) {\n          if (_this4.$element.is(':radio')) {\n            $('[name=\"' + _this4.$element.attr('name') + '\"]').not(_this4.$element).prop('checked', false).trigger('change.bootstrapSwitch', true);\n          }\n          _this4.$element.trigger('switchChange.bootstrapSwitch', [state]);\n        }\n      },\n\n      'focus.bootstrapSwitch': function focusBootstrapSwitch(event) {\n        event.preventDefault();\n        _this4.$wrapper.addClass(prvgetClass.call(_this4, 'focused'));\n      },\n\n      'blur.bootstrapSwitch': function blurBootstrapSwitch(event) {\n        event.preventDefault();\n        _this4.$wrapper.removeClass(prvgetClass.call(_this4, 'focused'));\n      },\n\n      'keydown.bootstrapSwitch': function keydownBootstrapSwitch(event) {\n        if (!event.which || _this4.options.disabled || _this4.options.readonly) {\n          return;\n        }\n        if (event.which === 37 || event.which === 39) {\n          event.preventDefault();\n          event.stopImmediatePropagation();\n          _this4.state(event.which === 39);\n        }\n      }\n    });\n  }\n\n  function prvhandleHandlers() {\n    var _this5 = this;\n\n    this.$on.on('click.bootstrapSwitch', function (event) {\n      event.preventDefault();\n      event.stopPropagation();\n      _this5.state(false);\n      return _this5.$element.trigger('focus.bootstrapSwitch');\n    });\n    return this.$off.on('click.bootstrapSwitch', function (event) {\n      event.preventDefault();\n      event.stopPropagation();\n      _this5.state(true);\n      return _this5.$element.trigger('focus.bootstrapSwitch');\n    });\n  }\n\n  function prvlabelHandlers() {\n    var _this6 = this;\n\n    var dragStart = void 0;\n    var dragEnd = void 0;\n    var handlers = {\n      click: function click(event) {\n        event.stopPropagation();\n      },\n\n\n      'mousedown.bootstrapSwitch touchstart.bootstrapSwitch': function mousedownBootstrapSwitchTouchstartBootstrapSwitch(event) {\n        if (dragStart || _this6.options.disabled || _this6.options.readonly) {\n          return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        dragStart = (event.pageX || event.originalEvent.touches[0].pageX) - parseInt(_this6.$container.css('margin-left'), 10);\n        if (_this6.options.animate) {\n          _this6.$wrapper.removeClass(prvgetClass.call(_this6, 'animate'));\n        }\n        _this6.$element.trigger('focus.bootstrapSwitch');\n      },\n\n      'mousemove.bootstrapSwitch touchmove.bootstrapSwitch': function mousemoveBootstrapSwitchTouchmoveBootstrapSwitch(event) {\n        if (dragStart == null) {\n          return;\n        }\n        var difference = (event.pageX || event.originalEvent.touches[0].pageX) - dragStart;\n        event.preventDefault();\n        if (difference < -_this6.privateHandleWidth || difference > 0) {\n          return;\n        }\n        dragEnd = difference;\n        _this6.$container.css('margin-left', dragEnd + 'px');\n      },\n\n      'mouseup.bootstrapSwitch touchend.bootstrapSwitch': function mouseupBootstrapSwitchTouchendBootstrapSwitch(event) {\n        if (!dragStart) {\n          return;\n        }\n        event.preventDefault();\n        if (_this6.options.animate) {\n          _this6.$wrapper.addClass(prvgetClass.call(_this6, 'animate'));\n        }\n        if (dragEnd) {\n          var state = dragEnd > -(_this6.privateHandleWidth / 2);\n          dragEnd = false;\n          _this6.state(_this6.options.inverse ? !state : state);\n        } else {\n          _this6.state(!_this6.options.state);\n        }\n        dragStart = false;\n      },\n\n      'mouseleave.bootstrapSwitch': function mouseleaveBootstrapSwitch() {\n        _this6.$label.trigger('mouseup.bootstrapSwitch');\n      }\n    };\n    this.$label.on(handlers);\n  }\n\n  function prvexternalLabelHandler() {\n    var _this7 = this;\n\n    var $externalLabel = this.$element.closest('label');\n    $externalLabel.on('click', function (event) {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      if (event.target === $externalLabel[0]) {\n        _this7.toggleState();\n      }\n    });\n  }\n\n  function prvformHandler() {\n    function isBootstrapSwitch() {\n      return $(this).data('bootstrap-switch');\n    }\n\n    function performReset() {\n      return $(this).bootstrapSwitch('state', this.checked);\n    }\n\n    var $form = this.$element.closest('form');\n    if ($form.data('bootstrap-switch')) {\n      return;\n    }\n    $form.on('reset.bootstrapSwitch', function () {\n      window.setTimeout(function () {\n        $form.find('input').filter(isBootstrapSwitch).each(performReset);\n      }, 1);\n    }).data('bootstrap-switch', true);\n  }\n\n  function prvgetClasses(classes) {\n    var _this8 = this;\n\n    if (!$.isArray(classes)) {\n      return [prvgetClass.call(this, classes)];\n    }\n    return classes.map(function (v) {\n      return prvgetClass.call(_this8, v);\n    });\n  }\n\n  var BootstrapSwitch = function () {\n    function BootstrapSwitch(element) {\n      var _this9 = this;\n\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      _classCallCheck(this, BootstrapSwitch);\n\n      this.$element = $(element);\n      this.options = $.extend({}, $.fn.bootstrapSwitch.defaults, prvgetElementOptions.call(this), options);\n      this.prevOptions = {};\n      this.$wrapper = $('<div>', {\n        class: function _class() {\n          return getClasses(_this9.options, _this9.$element.attr('id')).map(function (v) {\n            return prvgetClass.call(_this9, v);\n          }).concat([_this9.options.baseClass], prvgetClasses.call(_this9, _this9.options.wrapperClass)).join(' ');\n        }\n      });\n      this.$container = $('<div>', { class: prvgetClass.call(this, 'container') });\n      this.$on = $('<span>', {\n        html: this.options.onText,\n        class: prvgetClass.call(this, 'handle-on') + ' ' + prvgetClass.call(this, this.options.onColor)\n      });\n      this.$off = $('<span>', {\n        html: this.options.offText,\n        class: prvgetClass.call(this, 'handle-off') + ' ' + prvgetClass.call(this, this.options.offColor)\n      });\n      this.$label = $('<span>', {\n        html: this.options.labelText,\n        class: prvgetClass.call(this, 'label')\n      });\n\n      this.$element.on('init.bootstrapSwitch', function () {\n        return _this9.options.onInit(element);\n      });\n      this.$element.on('switchChange.bootstrapSwitch', function () {\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        var changeState = _this9.options.onSwitchChange.apply(element, args);\n        if (changeState === false) {\n          if (_this9.$element.is(':radio')) {\n            $('[name=\"' + _this9.$element.attr('name') + '\"]').trigger('previousState.bootstrapSwitch', true);\n          } else {\n            _this9.$element.trigger('previousState.bootstrapSwitch', true);\n          }\n        }\n      });\n\n      this.$container = this.$element.wrap(this.$container).parent();\n      this.$wrapper = this.$container.wrap(this.$wrapper).parent();\n      this.$element.before(this.options.inverse ? this.$off : this.$on).before(this.$label).before(this.options.inverse ? this.$on : this.$off);\n\n      if (this.options.indeterminate) {\n        this.$element.prop('indeterminate', true);\n      }\n\n      prvinit.call(this);\n      prvelementHandlers.call(this);\n      prvhandleHandlers.call(this);\n      prvlabelHandlers.call(this);\n      prvformHandler.call(this);\n      prvexternalLabelHandler.call(this);\n      this.$element.trigger('init.bootstrapSwitch', this.options.state);\n    }\n\n    _createClass(BootstrapSwitch, [{\n      key: 'setPrevOptions',\n      value: function setPrevOptions() {\n        this.prevOptions = _extends({}, this.options);\n      }\n    }, {\n      key: 'state',\n      value: function state(value, skip) {\n        if (typeof value === 'undefined') {\n          return this.options.state;\n        }\n        if (this.options.disabled || this.options.readonly || this.options.state && !this.options.radioAllOff && this.$element.is(':radio')) {\n          return this.$element;\n        }\n        if (this.$element.is(':radio')) {\n          $('[name=\"' + this.$element.attr('name') + '\"]').trigger('setPreviousOptions.bootstrapSwitch');\n        } else {\n          this.$element.trigger('setPreviousOptions.bootstrapSwitch');\n        }\n        if (this.options.indeterminate) {\n          this.indeterminate(false);\n        }\n        this.$element.prop('checked', Boolean(value)).trigger('change.bootstrapSwitch', skip);\n        return this.$element;\n      }\n    }, {\n      key: 'toggleState',\n      value: function toggleState(skip) {\n        if (this.options.disabled || this.options.readonly) {\n          return this.$element;\n        }\n        if (this.options.indeterminate) {\n          this.indeterminate(false);\n          return this.state(true);\n        }\n        return this.$element.prop('checked', !this.options.state).trigger('change.bootstrapSwitch', skip);\n      }\n    }, {\n      key: 'size',\n      value: function size(value) {\n        if (typeof value === 'undefined') {\n          return this.options.size;\n        }\n        if (this.options.size != null) {\n          this.$wrapper.removeClass(prvgetClass.call(this, this.options.size));\n        }\n        if (value) {\n          this.$wrapper.addClass(prvgetClass.call(this, value));\n        }\n        prvwidth.call(this);\n        prvcontainerPosition.call(this);\n        this.options.size = value;\n        return this.$element;\n      }\n    }, {\n      key: 'animate',\n      value: function animate(value) {\n        if (typeof value === 'undefined') {\n          return this.options.animate;\n        }\n        if (this.options.animate === Boolean(value)) {\n          return this.$element;\n        }\n        return this.toggleAnimate();\n      }\n    }, {\n      key: 'toggleAnimate',\n      value: function toggleAnimate() {\n        this.options.animate = !this.options.animate;\n        this.$wrapper.toggleClass(prvgetClass.call(this, 'animate'));\n        return this.$element;\n      }\n    }, {\n      key: 'disabled',\n      value: function disabled(value) {\n        if (typeof value === 'undefined') {\n          return this.options.disabled;\n        }\n        if (this.options.disabled === Boolean(value)) {\n          return this.$element;\n        }\n        return this.toggleDisabled();\n      }\n    }, {\n      key: 'toggleDisabled',\n      value: function toggleDisabled() {\n        this.options.disabled = !this.options.disabled;\n        this.$element.prop('disabled', this.options.disabled);\n        this.$wrapper.toggleClass(prvgetClass.call(this, 'disabled'));\n        return this.$element;\n      }\n    }, {\n      key: 'readonly',\n      value: function readonly(value) {\n        if (typeof value === 'undefined') {\n          return this.options.readonly;\n        }\n        if (this.options.readonly === Boolean(value)) {\n          return this.$element;\n        }\n        return this.toggleReadonly();\n      }\n    }, {\n      key: 'toggleReadonly',\n      value: function toggleReadonly() {\n        this.options.readonly = !this.options.readonly;\n        this.$element.prop('readonly', this.options.readonly);\n        this.$wrapper.toggleClass(prvgetClass.call(this, 'readonly'));\n        return this.$element;\n      }\n    }, {\n      key: 'indeterminate',\n      value: function indeterminate(value) {\n        if (typeof value === 'undefined') {\n          return this.options.indeterminate;\n        }\n        if (this.options.indeterminate === Boolean(value)) {\n          return this.$element;\n        }\n        return this.toggleIndeterminate();\n      }\n    }, {\n      key: 'toggleIndeterminate',\n      value: function toggleIndeterminate() {\n        this.options.indeterminate = !this.options.indeterminate;\n        this.$element.prop('indeterminate', this.options.indeterminate);\n        this.$wrapper.toggleClass(prvgetClass.call(this, 'indeterminate'));\n        prvcontainerPosition.call(this);\n        return this.$element;\n      }\n    }, {\n      key: 'inverse',\n      value: function inverse(value) {\n        if (typeof value === 'undefined') {\n          return this.options.inverse;\n        }\n        if (this.options.inverse === Boolean(value)) {\n          return this.$element;\n        }\n        return this.toggleInverse();\n      }\n    }, {\n      key: 'toggleInverse',\n      value: function toggleInverse() {\n        this.$wrapper.toggleClass(prvgetClass.call(this, 'inverse'));\n        var $on = this.$on.clone(true);\n        var $off = this.$off.clone(true);\n        this.$on.replaceWith($off);\n        this.$off.replaceWith($on);\n        this.$on = $off;\n        this.$off = $on;\n        this.options.inverse = !this.options.inverse;\n        return this.$element;\n      }\n    }, {\n      key: 'onColor',\n      value: function onColor(value) {\n        if (typeof value === 'undefined') {\n          return this.options.onColor;\n        }\n        if (this.options.onColor) {\n          this.$on.removeClass(prvgetClass.call(this, this.options.onColor));\n        }\n        this.$on.addClass(prvgetClass.call(this, value));\n        this.options.onColor = value;\n        return this.$element;\n      }\n    }, {\n      key: 'offColor',\n      value: function offColor(value) {\n        if (typeof value === 'undefined') {\n          return this.options.offColor;\n        }\n        if (this.options.offColor) {\n          this.$off.removeClass(prvgetClass.call(this, this.options.offColor));\n        }\n        this.$off.addClass(prvgetClass.call(this, value));\n        this.options.offColor = value;\n        return this.$element;\n      }\n    }, {\n      key: 'onText',\n      value: function onText(value) {\n        if (typeof value === 'undefined') {\n          return this.options.onText;\n        }\n        this.$on.html(value);\n        prvwidth.call(this);\n        prvcontainerPosition.call(this);\n        this.options.onText = value;\n        return this.$element;\n      }\n    }, {\n      key: 'offText',\n      value: function offText(value) {\n        if (typeof value === 'undefined') {\n          return this.options.offText;\n        }\n        this.$off.html(value);\n        prvwidth.call(this);\n        prvcontainerPosition.call(this);\n        this.options.offText = value;\n        return this.$element;\n      }\n    }, {\n      key: 'labelText',\n      value: function labelText(value) {\n        if (typeof value === 'undefined') {\n          return this.options.labelText;\n        }\n        this.$label.html(value);\n        prvwidth.call(this);\n        this.options.labelText = value;\n        return this.$element;\n      }\n    }, {\n      key: 'handleWidth',\n      value: function handleWidth(value) {\n        if (typeof value === 'undefined') {\n          return this.options.handleWidth;\n        }\n        this.options.handleWidth = value;\n        prvwidth.call(this);\n        prvcontainerPosition.call(this);\n        return this.$element;\n      }\n    }, {\n      key: 'labelWidth',\n      value: function labelWidth(value) {\n        if (typeof value === 'undefined') {\n          return this.options.labelWidth;\n        }\n        this.options.labelWidth = value;\n        prvwidth.call(this);\n        prvcontainerPosition.call(this);\n        return this.$element;\n      }\n    }, {\n      key: 'baseClass',\n      value: function baseClass() {\n        return this.options.baseClass;\n      }\n    }, {\n      key: 'wrapperClass',\n      value: function wrapperClass(value) {\n        if (typeof value === 'undefined') {\n          return this.options.wrapperClass;\n        }\n        var wrapperClass = value || $.fn.bootstrapSwitch.defaults.wrapperClass;\n        this.$wrapper.removeClass(prvgetClasses.call(this, this.options.wrapperClass).join(' '));\n        this.$wrapper.addClass(prvgetClasses.call(this, wrapperClass).join(' '));\n        this.options.wrapperClass = wrapperClass;\n        return this.$element;\n      }\n    }, {\n      key: 'radioAllOff',\n      value: function radioAllOff(value) {\n        if (typeof value === 'undefined') {\n          return this.options.radioAllOff;\n        }\n        var val = Boolean(value);\n        if (this.options.radioAllOff === val) {\n          return this.$element;\n        }\n        this.options.radioAllOff = val;\n        return this.$element;\n      }\n    }, {\n      key: 'onInit',\n      value: function onInit(value) {\n        if (typeof value === 'undefined') {\n          return this.options.onInit;\n        }\n        this.options.onInit = value || $.fn.bootstrapSwitch.defaults.onInit;\n        return this.$element;\n      }\n    }, {\n      key: 'onSwitchChange',\n      value: function onSwitchChange(value) {\n        if (typeof value === 'undefined') {\n          return this.options.onSwitchChange;\n        }\n        this.options.onSwitchChange = value || $.fn.bootstrapSwitch.defaults.onSwitchChange;\n        return this.$element;\n      }\n    }, {\n      key: 'destroy',\n      value: function destroy() {\n        var $form = this.$element.closest('form');\n        if ($form.length) {\n          $form.off('reset.bootstrapSwitch').removeData('bootstrap-switch');\n        }\n        this.$container.children().not(this.$element).remove();\n        this.$element.unwrap().unwrap().off('.bootstrapSwitch').removeData('bootstrap-switch');\n        return this.$element;\n      }\n    }]);\n\n    return BootstrapSwitch;\n  }();\n\n  function bootstrapSwitch(option) {\n    for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n\n    function reducer(ret, next) {\n      var $this = $(next);\n      var existingData = $this.data('bootstrap-switch');\n      var data = existingData || new BootstrapSwitch(next, option);\n      if (!existingData) {\n        $this.data('bootstrap-switch', data);\n      }\n      if (typeof option === 'string') {\n        return data[option].apply(data, args);\n      }\n      return ret;\n    }\n    return Array.prototype.reduce.call(this, reducer, this);\n  }\n\n  $.fn.bootstrapSwitch = bootstrapSwitch;\n  $.fn.bootstrapSwitch.Constructor = BootstrapSwitch;\n  $.fn.bootstrapSwitch.defaults = {\n    state: true,\n    size: null,\n    animate: true,\n    disabled: false,\n    readonly: false,\n    indeterminate: false,\n    inverse: false,\n    radioAllOff: false,\n    onColor: 'primary',\n    offColor: 'default',\n    onText: 'ON',\n    offText: 'OFF',\n    labelText: '&nbsp',\n    handleWidth: 'auto',\n    labelWidth: 'auto',\n    baseClass: 'bootstrap-switch',\n    wrapperClass: 'wrapper',\n    onInit: function onInit() {},\n    onSwitchChange: function onSwitchChange() {}\n  };\n});\n","/**\n  * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.\n  *\n  * @version v3.3.5\n  * @homepage https://bttstrp.github.io/bootstrap-switch\n  * @author Mattia Larentis <mattia@larentis.eu> (http://larentis.eu)\n  * @license MIT\n  */\n\n.bootstrap-switch {\n  display: inline-block;\n  direction: ltr;\n  cursor: pointer;\n  border-radius: 4px;\n  border: 1px solid;\n  border-color: #ccc;\n  position: relative;\n  text-align: left;\n  overflow: hidden;\n  line-height: 8px;\n  z-index: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  vertical-align: middle;\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.bootstrap-switch .bootstrap-switch-container {\n  display: inline-block;\n  top: 0;\n  border-radius: 4px;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n.bootstrap-switch .bootstrap-switch-handle-on,\n.bootstrap-switch .bootstrap-switch-handle-off,\n.bootstrap-switch .bootstrap-switch-label {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  cursor: pointer;\n  display: table-cell;\n  vertical-align: middle;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 20px;\n}\n.bootstrap-switch .bootstrap-switch-handle-on,\n.bootstrap-switch .bootstrap-switch-handle-off {\n  text-align: center;\n  z-index: 1;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {\n  color: #fff;\n  background: #337ab7;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {\n  color: #fff;\n  background: #5bc0de;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {\n  color: #fff;\n  background: #5cb85c;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {\n  background: #f0ad4e;\n  color: #fff;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {\n  color: #fff;\n  background: #d9534f;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {\n  color: #000;\n  background: #eeeeee;\n}\n.bootstrap-switch .bootstrap-switch-label {\n  text-align: center;\n  margin-top: -1px;\n  margin-bottom: -1px;\n  z-index: 100;\n  color: #333;\n  background: #fff;\n}\n.bootstrap-switch span::before {\n  content: \"\\200b\";\n}\n.bootstrap-switch .bootstrap-switch-handle-on {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.bootstrap-switch .bootstrap-switch-handle-off {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.bootstrap-switch input[type='radio'],\n.bootstrap-switch input[type='checkbox'] {\n  position: absolute !important;\n  top: 0;\n  left: 0;\n  margin: 0;\n  z-index: -1;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  visibility: hidden;\n}\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label {\n  padding: 6px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.bootstrap-switch.bootstrap-switch-disabled,\n.bootstrap-switch.bootstrap-switch-readonly,\n.bootstrap-switch.bootstrap-switch-indeterminate {\n  cursor: default !important;\n}\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default !important;\n}\n.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container {\n  -webkit-transition: margin-left 0.5s;\n  -o-transition: margin-left 0.5s;\n  transition: margin-left 0.5s;\n}\n.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.bootstrap-switch.bootstrap-switch-focused {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n","import _ from 'underscore';\n\nimport AccessWidget from '@girder/core/views/widgets/AccessWidget';\nimport View from '@girder/core/views/View';\nimport events from '@girder/core/events';\nimport { restRequest, cancelRestRequests } from '@girder/core/rest';\nimport CollectionCreationPolicyModel from '@girder/core/models/CollectionCreationPolicyModel';\n\nimport SystemConfigurationTemplate from '@girder/core/templates/body/systemConfiguration.pug';\n\nimport '@girder/core/stylesheets/body/systemConfig.styl';\n\nimport 'bootstrap/js/collapse';\nimport 'bootstrap/js/transition';\nimport 'bootstrap-switch'; // /dist/js/bootstrap-switch.js',\nimport 'bootstrap-switch/dist/css/bootstrap3/bootstrap-switch.css';\n\n/**\n * The system config page for administrators.\n */\nvar SystemConfigurationView = View.extend({\n    events: {\n        'submit .g-settings-form': function (event) {\n            event.preventDefault();\n            this.$('.g-submit-settings').girderEnable(false);\n            this.$('#g-settings-error-message').empty();\n\n            this.$('#g-core-collection-create-policy').val(JSON.stringify(this._covertCollectionCreationPolicy()));\n            var settings = _.map(this.settingsKeys, (key) => {\n                const element = this.$('#g-' + key.replace(/[_.]/g, '-'));\n\n                if (_.contains(\n                    [\n                        'core.api_keys',\n                        'core.enable_password_login',\n                    ],\n                    key\n                )) { // booleans via checkboxes\n                    return {\n                        key,\n                        value: element.is(':checked')\n                    };\n                } else { // all other settings use $.fn.val()\n                    return {\n                        key,\n                        value: element.val() || null\n                    };\n                }\n            });\n\n            restRequest({\n                method: 'PUT',\n                url: 'system/setting',\n                data: {\n                    list: JSON.stringify(settings)\n                },\n                error: null\n            }).done(() => {\n                this.$('.g-submit-settings').girderEnable(true);\n                events.trigger('g:alert', {\n                    icon: 'ok',\n                    text: 'Settings saved.',\n                    type: 'success',\n                    timeout: 4000\n                });\n            }).fail((resp) => {\n                this.$('.g-submit-settings').girderEnable(true);\n                this.$('#g-settings-error-message').text(resp.responseJSON.message);\n            });\n        },\n    },\n\n    initialize: function () {\n        cancelRestRequests('fetch');\n\n        var keys = [\n            'core.api_keys',\n            'core.contact_email_address',\n            'core.brand_name',\n            'core.banner_color',\n            'core.privacy_notice',\n            'core.cookie_lifetime',\n            'core.enable_password_login',\n            'core.email_from_address',\n            'core.email_host',\n            'core.registration_policy',\n            'core.email_verification',\n            'core.server_root',\n            'core.smtp_host',\n            'core.smtp.port',\n            'core.smtp.encryption',\n            'core.smtp.username',\n            'core.smtp.password',\n            'core.upload_minimum_chunk_size',\n            'core.cors.allow_origin',\n            'core.cors.allow_methods',\n            'core.cors.allow_headers',\n            'core.add_to_group_policy',\n            'core.collection_create_policy',\n            'core.user_default_folders',\n        ];\n        this.settingsKeys = keys;\n        restRequest({\n            url: 'system/setting',\n            method: 'GET',\n            data: {\n                list: JSON.stringify(keys)\n            }\n        }).done((resp) => {\n            this.settings = resp;\n            this.render();\n        });\n    },\n\n    render: function () {\n        this.$el.html(SystemConfigurationTemplate({\n            settings: this.settings,\n            JSON: window.JSON\n        }));\n\n        var enableCollectionCreationPolicy = this.settings['core.collection_create_policy'] ? this.settings['core.collection_create_policy'].open : false;\n\n        this.$('.g-setting-switch')\n            .bootstrapSwitch()\n            .bootstrapSwitch('state', enableCollectionCreationPolicy)\n            .off('switchChange.bootstrapSwitch')\n            .on('switchChange.bootstrapSwitch', (event, state) => {\n                if (state) {\n                    this._renderCollectionCreationPolicyAccessWidget();\n                } else {\n                    this.accessWidget.destroy();\n                    this.accessWidget = null;\n                }\n            });\n\n        if (enableCollectionCreationPolicy) {\n            this._renderCollectionCreationPolicyAccessWidget();\n        }\n\n        return this;\n    },\n\n    _renderCollectionCreationPolicyAccessWidget: function () {\n        var collectionCreationPolicyModel = new CollectionCreationPolicyModel();\n\n        this.accessWidget = new AccessWidget({\n            el: this.$('.g-collection-create-policy-container .access-widget-container'),\n            modelType: 'collection_creation_policy',\n            model: collectionCreationPolicyModel,\n            parentView: this,\n            modal: false,\n            hideRecurseOption: true,\n            hideSaveButton: true,\n            hidePrivacyEditor: true,\n            hideAccessType: true,\n            noAccessFlag: true\n        });\n    },\n\n    _covertCollectionCreationPolicy: function () {\n        // get collection creation policy from AccessWidget and format the result properly\n        var settingValue = null;\n        if (this.$('.g-setting-switch').bootstrapSwitch('state') && this.accessWidget) {\n            settingValue = { open: this.$('.g-setting-switch').bootstrapSwitch('state') };\n            var accessList = this.accessWidget.getAccessList();\n            _.each(_.keys(accessList), (key) => {\n                settingValue[key] = _.pluck(accessList[key], 'id');\n            });\n        } else {\n            settingValue = this.settings['core.collection_create_policy'];\n            settingValue.open = false;\n        }\n        return settingValue;\n    }\n});\n\nexport default SystemConfigurationView;\n",".modal-dialog\n  .modal-content\n    form#g-api-key-edit-form.modal-form(role=\"form\")\n      .modal-header\n        button.close(data-dismiss=\"modal\", aria-hidden=\"true\", type=\"button\") &times;\n        h4.modal-title\n          if apiKey\n            | Edit API key\n          else\n            | Create new API key\n      .modal-body\n        .form-group\n          label.control-label(for=\"g-api-key-name\") Name\n          input#g-api-key-name.input-sm.form-control(type=\"text\", placeholder=\"Enter a name for this API key\")\n        .form-group\n          label.control-label(for=\"g-api-key-token-duration\") Token duration in days (optional)\n          input#g-api-key-token-duration.input-sm.form-control(placeholder=\"Enter number of days\")\n\n        label.control-label Permission scope for this key\n        .g-scope-selection-container\n          .radio\n            label\n              input#g-scope-mode-full(type=\"radio\", name=\"scopeType\", value=\"full\", checked)\n              | Allow all actions on behalf of my user\n          .radio\n            label\n              input#g-scope-mode-custom(type=\"radio\", name=\"scopeType\", value=\"custom\")\n              | Only allow specific permissions for this key:\n          each tokenScope in tokenScopes\n            .checkbox.disabled\n              label.g-custom-scope-description(title=tokenScope.description)\n                input.g-custom-scope-checkbox(type=\"checkbox\", value=tokenScope.id, disabled)\n                span= tokenScope.name\n        .g-validation-failed-message\n      .modal-footer\n        a.btn.btn-small.btn-default(data-dismiss=\"modal\") Cancel\n        button.g-save-api-key.btn.btn-small.btn-primary(type=\"submit\")\n          if apiKey\n            i.icon-edit\n            |  Save\n          else\n            i.icon-plus-squared\n            |  Create\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport ApiKeyModel from '@girder/core/models/ApiKeyModel';\nimport View from '@girder/core/views/View';\nimport { getCurrentUser } from '@girder/core/auth';\nimport { restRequest } from '@girder/core/rest';\n\nimport EditApiKeyWidgetTemplate from '@girder/core/templates/widgets/editApiKeyWidget.pug';\n\nimport '@girder/core/utilities/jquery/girderEnable';\nimport '@girder/core/utilities/jquery/girderModal';\n\n/**\n * This widget is used to create a new API key or edit an existing one.\n */\nvar EditApiKeyWidget = View.extend({\n    events: {\n        'submit #g-api-key-edit-form': function (e) {\n            e.preventDefault();\n\n            var fields = {\n                name: this.$('#g-api-key-name').val(),\n                tokenDuration: this.$('#g-api-key-token-duration').val(),\n                scope: null,\n                targetUserId: this.targetUserId\n            };\n\n            if (this._getSelectedScopeMode() === 'custom') {\n                fields.scope = _.map(this.$('.g-custom-scope-checkbox:checked'), function (el) {\n                    return $(el).val();\n                });\n            }\n\n            this.saveModel(this.model, fields);\n\n            this.$('button.g-save-api-key').girderEnable(false);\n            this.$('.g-validation-failed-message').text('');\n        },\n\n        'change .g-scope-selection-container .radio input': function () {\n            var mode = this._getSelectedScopeMode();\n            if (mode === 'full') {\n                this.$('.g-custom-scope-checkbox').girderEnable(false)\n                    .parent().parent().girderEnable(false);\n            } else if (mode === 'custom') {\n                this.$('.g-custom-scope-checkbox').girderEnable(true)\n                    .parent().parent().girderEnable(true);\n            }\n        }\n    },\n\n    initialize: function (settings) {\n        this.model = settings.model || null;\n        this.scopeInfo = null;\n        this.targetUserId = settings.parentView.model.id;\n        this._shouldRender = false;\n\n        restRequest({\n            url: 'token/scopes'\n        }).done((resp) => {\n            this.scopeInfo = resp;\n            if (this._shouldRender) {\n                this._shouldRender = false;\n                this.render();\n            }\n        });\n    },\n\n    render: function () {\n        if (!this.scopeInfo) { // Wait for scope list to be fetched\n            this._shouldRender = true;\n            return;\n        }\n\n        let tokenScopes = this.scopeInfo.custom;\n        if (getCurrentUser().get('admin')) {\n            tokenScopes = tokenScopes.concat(this.scopeInfo.adminCustom);\n        }\n\n        var modal = this.$el.html(EditApiKeyWidgetTemplate({\n            apiKey: this.model,\n            tokenScopes: tokenScopes\n        })).girderModal(this).on('shown.bs.modal', () => {\n            this.$('#g-api-key-name').trigger('focus');\n        }).on('ready.girder.modal', () => {\n            if (this.model) {\n                this.$('#g-api-key-name').val(this.model.get('name'));\n                this.$('#g-api-key-token-duration').val(this.model.get('tokenDuration') || '');\n                if (this.model.get('scope')) {\n                    this.$('#g-scope-mode-custom').attr('checked', 'checked').trigger('change');\n                    this.$('.g-custom-scope-checkbox').girderEnable(true);\n                    _.each(this.model.get('scope'), function (scope) {\n                        this.$('.g-custom-scope-checkbox[value=\"' + scope + '\"]').attr('checked', 'checked');\n                    }, this);\n                }\n            }\n        });\n        modal.trigger($.Event('ready.girder.modal', { relatedTarget: modal }));\n\n        this.$('#g-api-key-name').trigger('focus');\n\n        return this;\n    },\n\n    saveModel: function (model, fields) {\n        model = model || new ApiKeyModel();\n\n        model.set(fields);\n        model.once('g:saved', function () {\n            this.$el.modal('hide');\n            this.trigger('g:saved', model);\n        }, this).off('g:error', null, this).on('g:error', function (err) {\n            this.$('.g-validation-failed-message').text(err.responseJSON.message);\n            this.$('button.g-save-api-key').girderEnable(true);\n        }, this).save();\n    },\n\n    _getSelectedScopeMode: function () {\n        return this.$('.g-scope-selection-container .radio input:checked').attr('value');\n    }\n});\n\nexport default EditApiKeyWidget;\n","if apiKeys.length === 0\n  .g-api-keys-empty-message You have no existing API keys. Click the button below to create one.\nelse\n  .g-api-key-list-header Your API keys\n  table.g-api-key-table\n    thead: tr\n      th(col=\"name\") Name\n      th(col=\"key\") Key\n      th(col=\"scope\") Scope\n      th(col=\"active\") Active\n      th(col=\"tokenDuration\") Token duration\n      th(col=\"lastUse\") Last used\n      th(col=\"actions\") Actions\n    tbody\n      each apiKey in apiKeys\n        tr.g-api-key-container(api-key-id=apiKey.id, cid=apiKey.cid)\n          td(col=\"name\")= apiKey.get('name')\n          td(col=\"key\"): a.g-show-api-key(data-toggle=\"popover\", data-content=apiKey.get('key')) show\n          td(col=\"scope\")\n            if apiKey.get('scope')\n              span Custom scopes\n            else\n              span Full access\n          td(col=\"active\")= apiKey.get('active') ? 'Yes' : 'No'\n          td(col=\"tokenDuration\")\n            if apiKey.get('tokenDuration')\n              span #{apiKey.get('tokenDuration')} days\n            else\n              span Default\n          td(col=\"lastUse\")\n            if apiKey.get('lastUse')\n              - var lastUse = moment(apiKey.get('lastUse'))\n              span(title=lastUse)= lastUse.fromNow()\n            else\n              span Never\n          td(col=\"actions\")\n            button.btn.btn-sm.btn-primary.g-api-key-edit(title=\"Edit\")\n              i.icon-edit\n            if apiKey.get('active')\n              button.btn.btn-sm.btn-warning.g-api-key-toggle-active(title=\"Deactivate\")\n                i.icon-minus-circled\n            else\n              button.btn.btn-sm.btn-success.g-api-key-toggle-active(title=\"Activate\")\n                i.icon-plus-circled\n            button.btn.btn-sm.btn-danger.g-api-key-delete(title=\"Delete key\")\n              i.icon-cancel\n\n.g-paginate-container\n.g-api-key-list-bottom-buttons\n  button.btn.btn-default.g-api-key-new Create new key\n","import $ from 'jquery';\nimport moment from 'moment';\n// Bootstrap tooltip is required by popover\nimport 'bootstrap/js/tooltip';\nimport 'bootstrap/js/popover';\n\nimport ApiKeyCollection from '@girder/core/collections/ApiKeyCollection';\nimport EditApiKeyWidget from '@girder/core/views/widgets/EditApiKeyWidget';\nimport PaginateWidget from '@girder/core/views/widgets/PaginateWidget';\nimport View from '@girder/core/views/View';\nimport { confirm } from '@girder/core/dialog';\nimport events from '@girder/core/events';\n\nimport ApiKeyListTemplate from '@girder/core/templates/widgets/apiKeyList.pug';\n\nvar ApiKeyListWidget = View.extend({\n    events: {\n        'click .g-api-key-toggle-active': function (e) {\n            var apiKey = this._getModelFromEvent(e);\n            var toggleActive = () => {\n                apiKey.once('g:setActive', function () {\n                    this.render();\n                }, this).setActive(!apiKey.get('active'));\n            };\n\n            if (apiKey.get('active')) {\n                confirm({\n                    text: 'Deactivating this API key will delete any existing tokens ' +\n                          'created with it, and will not be usable until it is activated ' +\n                          'again. Are you sure you want to deactivate it?',\n                    yesText: 'Yes',\n                    yesClass: 'btn-warning',\n                    escapedHtml: true,\n                    confirmCallback: toggleActive\n                });\n            } else {\n                toggleActive();\n            }\n        },\n\n        'click .g-api-key-new': function () {\n            this._renderEditWidget();\n        },\n\n        'click .g-api-key-edit': function (e) {\n            var apiKey = this._getModelFromEvent(e);\n            this._renderEditWidget(apiKey);\n        },\n\n        'click .g-api-key-delete': function (e) {\n            var apiKey = this._getModelFromEvent(e);\n\n            confirm({\n                text: 'Are you sure you want to delete the API key <b>' +\n                      apiKey.escape('name') + '</b>? Any client applications using ' +\n                      'this key will no longer be able to authenticate.',\n                yesText: 'Delete',\n                escapedHtml: true,\n                confirmCallback: () => {\n                    apiKey.on('g:deleted', function () {\n                        events.trigger('g:alert', {\n                            icon: 'ok',\n                            text: 'API key deleted.',\n                            type: 'success',\n                            timeout: 3000\n                        });\n                        this.render();\n                    }, this).destroy();\n                }\n            });\n        }\n    },\n\n    /**\n     * A widget for listing and editing API keys for a user.\n     *\n     * @param settings.user {UserModel} The user whose keys to show.\n     */\n    initialize: function (settings) {\n        this.model = settings.user;\n        this.fetched = false;\n\n        this.collection = new ApiKeyCollection();\n        this.collection.on('g:changed', function () {\n            this.fetched = true;\n            this.render();\n            this.trigger('g:changed');\n        }, this).fetch({\n            userId: this.model.id\n        });\n\n        this.paginateWidget = new PaginateWidget({\n            collection: this.collection,\n            parentView: this\n        });\n    },\n\n    render: function () {\n        if (!this.fetched) {\n            return;\n        }\n\n        this.$el.html(ApiKeyListTemplate({\n            apiKeys: this.collection.toArray(),\n            moment: moment\n        }));\n\n        this.$('.g-show-api-key').popover({\n            container: this.$('.g-api-key-table'),\n            placement: 'top'\n        });\n\n        this.paginateWidget.setElement(this.$('.g-paginate-container')).render();\n\n        return this;\n    },\n\n    _getModelFromEvent: function (e) {\n        var cid = $(e.currentTarget).parents('.g-api-key-container').attr('cid');\n        return this.collection.get(cid);\n    },\n\n    _renderEditWidget: function (apiKey) {\n        if (!this.editApiKeyWidget) {\n            this.editApiKeyWidget = new EditApiKeyWidget({\n                el: $('#g-dialog-container'),\n                parentView: this\n            }).on('g:saved', function (model) {\n                if (!this.collection.get(model.cid)) {\n                    this.collection.add(model);\n                }\n                this.render();\n            }, this);\n        }\n        this.editApiKeyWidget.model = apiKey || null;\n        this.editApiKeyWidget.render();\n    }\n});\n\nexport default ApiKeyListWidget;\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n  return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n  0, // Not used\n  26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n  404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n  1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n  2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param  {Number} version QR Code version\n * @return {Number}         size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n  if (!version) throw new Error('\"version\" cannot be null or undefined')\n  if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n  return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n  return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param  {Number} data Value to encode\n * @return {Number}      Encoded value\n */\nexports.getBCHDigit = function (data) {\n  let digit = 0\n\n  while (data !== 0) {\n    digit++\n    data >>>= 1\n  }\n\n  return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n  if (typeof f !== 'function') {\n    throw new Error('\"toSJISFunc\" is not a valid function.')\n  }\n\n  toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n  return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n  return toSJISFunction(kanji)\n}\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'l':\n    case 'low':\n      return exports.L\n\n    case 'm':\n    case 'medium':\n      return exports.M\n\n    case 'q':\n    case 'quartile':\n      return exports.Q\n\n    case 'h':\n    case 'high':\n      return exports.H\n\n    default:\n      throw new Error('Unknown EC Level: ' + string)\n  }\n}\n\nexports.isValid = function isValid (level) {\n  return level && typeof level.bit !== 'undefined' &&\n    level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","function BitBuffer () {\n  this.buffer = []\n  this.length = 0\n}\n\nBitBuffer.prototype = {\n\n  get: function (index) {\n    const bufIndex = Math.floor(index / 8)\n    return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n  },\n\n  put: function (num, length) {\n    for (let i = 0; i < length; i++) {\n      this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n    }\n  },\n\n  getLengthInBits: function () {\n    return this.length\n  },\n\n  putBit: function (bit) {\n    const bufIndex = Math.floor(this.length / 8)\n    if (this.buffer.length <= bufIndex) {\n      this.buffer.push(0)\n    }\n\n    if (bit) {\n      this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n    }\n\n    this.length++\n  }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n  if (!size || size < 1) {\n    throw new Error('BitMatrix size must be defined and greater than 0')\n  }\n\n  this.size = size\n  this.data = new Uint8Array(size * size)\n  this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n  const index = row * this.size + col\n  this.data[index] = value\n  if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param  {Number}  row\n * @param  {Number}  col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n  return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n  this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number}   row\n * @param {Number}   col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n  return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n  if (version === 1) return []\n\n  const posCount = Math.floor(version / 7) + 2\n  const size = getSymbolSize(version)\n  const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n  const positions = [size - 7] // Last coord is always (size - 7)\n\n  for (let i = 1; i < posCount - 1; i++) {\n    positions[i] = positions[i - 1] - intervals\n  }\n\n  positions.push(6) // First coord is always 6\n\n  return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const coords = []\n  const pos = exports.getRowColCoords(version)\n  const posLength = pos.length\n\n  for (let i = 0; i < posLength; i++) {\n    for (let j = 0; j < posLength; j++) {\n      // Skip if position is occupied by finder patterns\n      if ((i === 0 && j === 0) || // top-left\n          (i === 0 && j === posLength - 1) || // bottom-left\n          (i === posLength - 1 && j === 0)) { // top-right\n        continue\n      }\n\n      coords.push([pos[i], pos[j]])\n    }\n  }\n\n  return coords\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const size = getSymbolSize(version)\n\n  return [\n    // top-left\n    [0, 0],\n    // top-right\n    [size - FINDER_PATTERN_SIZE, 0],\n    // bottom-left\n    [0, size - FINDER_PATTERN_SIZE]\n  ]\n}\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n  PATTERN000: 0,\n  PATTERN001: 1,\n  PATTERN010: 2,\n  PATTERN011: 3,\n  PATTERN100: 4,\n  PATTERN101: 5,\n  PATTERN110: 6,\n  PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n  N1: 3,\n  N2: 3,\n  N3: 40,\n  N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param  {Number}  mask    Mask pattern\n * @return {Boolean}         true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n  return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param  {Number|String} value        Mask pattern value\n * @return {Number}                     Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n  return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n  const size = data.size\n  let points = 0\n  let sameCountCol = 0\n  let sameCountRow = 0\n  let lastCol = null\n  let lastRow = null\n\n  for (let row = 0; row < size; row++) {\n    sameCountCol = sameCountRow = 0\n    lastCol = lastRow = null\n\n    for (let col = 0; col < size; col++) {\n      let module = data.get(row, col)\n      if (module === lastCol) {\n        sameCountCol++\n      } else {\n        if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n        lastCol = module\n        sameCountCol = 1\n      }\n\n      module = data.get(col, row)\n      if (module === lastRow) {\n        sameCountRow++\n      } else {\n        if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n        lastRow = module\n        sameCountRow = 1\n      }\n    }\n\n    if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n    if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n  }\n\n  return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n  const size = data.size\n  let points = 0\n\n  for (let row = 0; row < size - 1; row++) {\n    for (let col = 0; col < size - 1; col++) {\n      const last = data.get(row, col) +\n        data.get(row, col + 1) +\n        data.get(row + 1, col) +\n        data.get(row + 1, col + 1)\n\n      if (last === 4 || last === 0) points++\n    }\n  }\n\n  return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n  const size = data.size\n  let points = 0\n  let bitsCol = 0\n  let bitsRow = 0\n\n  for (let row = 0; row < size; row++) {\n    bitsCol = bitsRow = 0\n    for (let col = 0; col < size; col++) {\n      bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n      if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n      bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n      if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n    }\n  }\n\n  return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n  let darkCount = 0\n  const modulesCount = data.data.length\n\n  for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n  const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n  return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param  {Number} maskPattern Pattern reference value\n * @param  {Number} i           Row\n * @param  {Number} j           Column\n * @return {Boolean}            Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n  switch (maskPattern) {\n    case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n    case exports.Patterns.PATTERN001: return i % 2 === 0\n    case exports.Patterns.PATTERN010: return j % 3 === 0\n    case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n    case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n    case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n    case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n    case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n    default: throw new Error('bad maskPattern:' + maskPattern)\n  }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param  {Number}    pattern Pattern reference number\n * @param  {BitMatrix} data    BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n  const size = data.size\n\n  for (let col = 0; col < size; col++) {\n    for (let row = 0; row < size; row++) {\n      if (data.isReserved(row, col)) continue\n      data.xor(row, col, getMaskAt(pattern, row, col))\n    }\n  }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param  {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n  const numPatterns = Object.keys(exports.Patterns).length\n  let bestPattern = 0\n  let lowerPenalty = Infinity\n\n  for (let p = 0; p < numPatterns; p++) {\n    setupFormatFunc(p)\n    exports.applyMask(p, data)\n\n    // Calculate penalty\n    const penalty =\n      exports.getPenaltyN1(data) +\n      exports.getPenaltyN2(data) +\n      exports.getPenaltyN3(data) +\n      exports.getPenaltyN4(data)\n\n    // Undo previously applied mask\n    exports.applyMask(p, data)\n\n    if (penalty < lowerPenalty) {\n      lowerPenalty = penalty\n      bestPattern = p\n    }\n  }\n\n  return bestPattern\n}\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L  M  Q  H\r\n  1, 1, 1, 1,\r\n  1, 1, 1, 1,\r\n  1, 1, 2, 2,\r\n  1, 2, 2, 4,\r\n  1, 2, 4, 4,\r\n  2, 4, 4, 4,\r\n  2, 4, 6, 5,\r\n  2, 4, 6, 6,\r\n  2, 5, 8, 8,\r\n  4, 5, 8, 8,\r\n  4, 5, 8, 11,\r\n  4, 8, 10, 11,\r\n  4, 9, 12, 16,\r\n  4, 9, 16, 16,\r\n  6, 10, 12, 18,\r\n  6, 10, 17, 16,\r\n  6, 11, 16, 19,\r\n  6, 13, 18, 21,\r\n  7, 14, 21, 25,\r\n  8, 16, 20, 25,\r\n  8, 17, 23, 25,\r\n  9, 17, 23, 34,\r\n  9, 18, 25, 30,\r\n  10, 20, 27, 32,\r\n  12, 21, 29, 35,\r\n  12, 23, 34, 37,\r\n  12, 25, 34, 40,\r\n  13, 26, 35, 42,\r\n  14, 28, 38, 45,\r\n  15, 29, 40, 48,\r\n  16, 31, 43, 51,\r\n  17, 33, 45, 54,\r\n  18, 35, 48, 57,\r\n  19, 37, 51, 60,\r\n  19, 38, 53, 63,\r\n  20, 40, 56, 66,\r\n  21, 43, 59, 70,\r\n  22, 45, 62, 74,\r\n  24, 47, 65, 77,\r\n  25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L  M  Q  H\r\n  7, 10, 13, 17,\r\n  10, 16, 22, 28,\r\n  15, 26, 36, 44,\r\n  20, 36, 52, 64,\r\n  26, 48, 72, 88,\r\n  36, 64, 96, 112,\r\n  40, 72, 108, 130,\r\n  48, 88, 132, 156,\r\n  60, 110, 160, 192,\r\n  72, 130, 192, 224,\r\n  80, 150, 224, 264,\r\n  96, 176, 260, 308,\r\n  104, 198, 288, 352,\r\n  120, 216, 320, 384,\r\n  132, 240, 360, 432,\r\n  144, 280, 408, 480,\r\n  168, 308, 448, 532,\r\n  180, 338, 504, 588,\r\n  196, 364, 546, 650,\r\n  224, 416, 600, 700,\r\n  224, 442, 644, 750,\r\n  252, 476, 690, 816,\r\n  270, 504, 750, 900,\r\n  300, 560, 810, 960,\r\n  312, 588, 870, 1050,\r\n  336, 644, 952, 1110,\r\n  360, 700, 1020, 1200,\r\n  390, 728, 1050, 1260,\r\n  420, 784, 1140, 1350,\r\n  450, 812, 1200, 1440,\r\n  480, 868, 1290, 1530,\r\n  510, 924, 1350, 1620,\r\n  540, 980, 1440, 1710,\r\n  570, 1036, 1530, 1800,\r\n  570, 1064, 1590, 1890,\r\n  600, 1120, 1680, 1980,\r\n  630, 1204, 1770, 2100,\r\n  660, 1260, 1860, 2220,\r\n  720, 1316, 1950, 2310,\r\n  750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n  let x = 1\n  for (let i = 0; i < 255; i++) {\n    EXP_TABLE[i] = x\n    LOG_TABLE[x] = i\n\n    x <<= 1 // multiply by 2\n\n    // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n    // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n    if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n      x ^= 0x11D\n    }\n  }\n\n  // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n  // stay inside the bounds (because we will mainly use this table for the multiplication of\n  // two GF numbers, no more).\n  // @see {@link mul}\n  for (let i = 255; i < 512; i++) {\n    EXP_TABLE[i] = EXP_TABLE[i - 255]\n  }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n  if (n < 1) throw new Error('log(' + n + ')')\n  return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n  return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param  {Number} x\n * @param  {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n  if (x === 0 || y === 0) return 0\n\n  // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n  // @see {@link initTables}\n  return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param  {Uint8Array} p1 Polynomial\n * @param  {Uint8Array} p2 Polynomial\n * @return {Uint8Array}    Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n  const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n  for (let i = 0; i < p1.length; i++) {\n    for (let j = 0; j < p2.length; j++) {\n      coeff[i + j] ^= GF.mul(p1[i], p2[j])\n    }\n  }\n\n  return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param  {Uint8Array} divident Polynomial\n * @param  {Uint8Array} divisor  Polynomial\n * @return {Uint8Array}          Remainder\n */\nexports.mod = function mod (divident, divisor) {\n  let result = new Uint8Array(divident)\n\n  while ((result.length - divisor.length) >= 0) {\n    const coeff = result[0]\n\n    for (let i = 0; i < divisor.length; i++) {\n      result[i] ^= GF.mul(divisor[i], coeff)\n    }\n\n    // remove all zeros from buffer head\n    let offset = 0\n    while (offset < result.length && result[offset] === 0) offset++\n    result = result.slice(offset)\n  }\n\n  return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param  {Number} degree Degree of the generator polynomial\n * @return {Uint8Array}    Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n  let poly = new Uint8Array([1])\n  for (let i = 0; i < degree; i++) {\n    poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n  }\n\n  return poly\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n  this.genPoly = undefined\n  this.degree = degree\n\n  if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param  {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n  // create an irreducible generator polynomial\n  this.degree = degree\n  this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param  {Uint8Array} data Buffer containing input data\n * @return {Uint8Array}      Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n  if (!this.genPoly) {\n    throw new Error('Encoder not initialized')\n  }\n\n  // Calculate EC for this data block\n  // extends data size to data+genPoly size\n  const paddedData = new Uint8Array(data.length + this.degree)\n  paddedData.set(data)\n\n  // The error correction codewords are the remainder after dividing the data codewords\n  // by a generator polynomial\n  const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n  // return EC data blocks (last n byte, where n is the degree of genPoly)\n  // If coefficients number in remainder are less than genPoly degree,\n  // pad with 0s to the left to reach the needed number of coefficients\n  const start = this.degree - remainder.length\n  if (start > 0) {\n    const buff = new Uint8Array(this.degree)\n    buff.set(remainder, start)\n\n    return buff\n  }\n\n  return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","/**\n * Check if QR Code version is valid\n *\n * @param  {Number}  version QR Code version\n * @return {Boolean}         true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n  return !isNaN(version) && version >= 1 && version <= 40\n}\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n  '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n  '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n  '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n  return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n  return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n  return TEST_ALPHANUMERIC.test(str)\n}\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n  id: 'Numeric',\n  bit: 1 << 0,\n  ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n *      26 alphabetic characters (A - Z),\n *   and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n  id: 'Alphanumeric',\n  bit: 1 << 1,\n  ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n  id: 'Byte',\n  bit: 1 << 2,\n  ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n  id: 'Kanji',\n  bit: 1 << 3,\n  ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n  bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param  {Mode}   mode    Data mode\n * @param  {Number} version QR Code version\n * @return {Number}         Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n  if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid version: ' + version)\n  }\n\n  if (version >= 1 && version < 10) return mode.ccBits[0]\n  else if (version < 27) return mode.ccBits[1]\n  return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param  {String} dataStr Input data string\n * @return {Mode}           Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n  if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n  else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n  else if (Regex.testKanji(dataStr)) return exports.KANJI\n  else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String}  Mode name\n */\nexports.toString = function toString (mode) {\n  if (mode && mode.id) return mode.id\n  throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param   {Mode}    mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n  return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param   {String} string Mode name\n * @returns {Mode}          Mode object\n */\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'numeric':\n      return exports.NUMERIC\n    case 'alphanumeric':\n      return exports.ALPHANUMERIC\n    case 'kanji':\n      return exports.KANJI\n    case 'byte':\n      return exports.BYTE\n    default:\n      throw new Error('Unknown mode: ' + string)\n  }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param  {Mode|String} value        Encoding mode\n * @param  {Mode}        defaultValue Fallback value\n * @return {Mode}                     Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n  // Character count indicator + mode indicator bits\n  return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n  let totalBits = 0\n\n  segments.forEach(function (data) {\n    const reservedBits = getReservedBitsCount(data.mode, version)\n    totalBits += reservedBits + data.getBitsLength()\n  })\n\n  return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    const length = getTotalBitsFromDataArray(segments, currentVersion)\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param  {Number|String} value        QR Code version\n * @param  {Number}        defaultValue Fallback value\n * @return {Number}                     QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n  if (VersionCheck.isValid(value)) {\n    return parseInt(value, 10)\n  }\n\n  return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param  {Number} version              QR Code version (1-40)\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Mode}   mode                 Data mode\n * @return {Number}                      Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  // Use Byte mode as default\n  if (typeof mode === 'undefined') mode = Mode.BYTE\n\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n  const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n  // Return max number of storable codewords\n  switch (mode) {\n    case Mode.NUMERIC:\n      return Math.floor((usableBits / 10) * 3)\n\n    case Mode.ALPHANUMERIC:\n      return Math.floor((usableBits / 11) * 2)\n\n    case Mode.KANJI:\n      return Math.floor(usableBits / 13)\n\n    case Mode.BYTE:\n    default:\n      return Math.floor(usableBits / 8)\n  }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param  {Segment} data                    Segment of data\n * @param  {Number} [errorCorrectionLevel=H] Error correction level\n * @param  {Mode} mode                       Data mode\n * @return {Number}                          QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n  let seg\n\n  const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n  if (Array.isArray(data)) {\n    if (data.length > 1) {\n      return getBestVersionForMixedData(data, ecl)\n    }\n\n    if (data.length === 0) {\n      return 1\n    }\n\n    seg = data[0]\n  } else {\n    seg = data\n  }\n\n  return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n  if (!VersionCheck.isValid(version) || version < 7) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  let d = version << 12\n\n  while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n    d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n  }\n\n  return (version << 12) | d\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Number} mask                 Mask pattern\n * @return {Number}                      Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n  const data = ((errorCorrectionLevel.bit << 3) | mask)\n  let d = data << 10\n\n  while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n    d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n  }\n\n  // xor final data with mask pattern in order to ensure that\n  // no combination of Error Correction Level and data mask pattern\n  // will result in an all-zero data string\n  return ((data << 10) | d) ^ G15_MASK\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n  this.mode = Mode.NUMERIC\n  this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n  return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n  return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n  let i, group, value\n\n  // The input data string is divided into groups of three digits,\n  // and each group is converted to its 10-bit binary equivalent.\n  for (i = 0; i + 3 <= this.data.length; i += 3) {\n    group = this.data.substr(i, 3)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, 10)\n  }\n\n  // If the number of input digits is not an exact multiple of three,\n  // the final one or two digits are converted to 4 or 7 bits respectively.\n  const remainingNum = this.data.length - i\n  if (remainingNum > 0) {\n    group = this.data.substr(i)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, remainingNum * 3 + 1)\n  }\n}\n\nmodule.exports = NumericData\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n  ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n  this.mode = Mode.ALPHANUMERIC\n  this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n  return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n  return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n  let i\n\n  // Input data characters are divided into groups of two characters\n  // and encoded as 11-bit binary codes.\n  for (i = 0; i + 2 <= this.data.length; i += 2) {\n    // The character value of the first character is multiplied by 45\n    let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n    // The character value of the second digit is added to the product\n    value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n    // The sum is then stored as 11-bit binary number\n    bitBuffer.put(value, 11)\n  }\n\n  // If the number of input data characters is not a multiple of two,\n  // the character value of the final character is encoded as a 6-bit binary number.\n  if (this.data.length % 2) {\n    bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n  }\n}\n\nmodule.exports = AlphanumericData\n","const Mode = require('./mode')\n\nfunction ByteData (data) {\n  this.mode = Mode.BYTE\n  if (typeof (data) === 'string') {\n    this.data = new TextEncoder().encode(data)\n  } else {\n    this.data = new Uint8Array(data)\n  }\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n  return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n  return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n  for (let i = 0, l = this.data.length; i < l; i++) {\n    bitBuffer.put(this.data[i], 8)\n  }\n}\n\nmodule.exports = ByteData\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n  this.mode = Mode.KANJI\n  this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n  return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n  return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n  let i\n\n  // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n  // These byte values are shifted from the JIS X 0208 values.\n  // JIS X 0208 gives details of the shift coded representation.\n  for (i = 0; i < this.data.length; i++) {\n    let value = Utils.toSJIS(this.data[i])\n\n    // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n    if (value >= 0x8140 && value <= 0x9FFC) {\n      // Subtract 0x8140 from Shift JIS value\n      value -= 0x8140\n\n    // For characters with Shift JIS values from 0xE040 to 0xEBBF\n    } else if (value >= 0xE040 && value <= 0xEBBF) {\n      // Subtract 0xC140 from Shift JIS value\n      value -= 0xC140\n    } else {\n      throw new Error(\n        'Invalid SJIS character: ' + this.data[i] + '\\n' +\n        'Make sure your charset is UTF-8')\n    }\n\n    // Multiply most significant byte of result by 0xC0\n    // and add least significant byte to product\n    value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n    // Convert result to a 13-bit binary string\n    bitBuffer.put(value, 13)\n  }\n}\n\nmodule.exports = KanjiData\n","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n *   Wyatt Baldwin <self@wyattbaldwin.com>\n *   All rights reserved\n *\n * Licensed under the MIT license.\n *\n *   http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n  single_source_shortest_paths: function(graph, s, d) {\n    // Predecessor map for each node that has been encountered.\n    // node ID => predecessor node ID\n    var predecessors = {};\n\n    // Costs of shortest paths from s to all nodes encountered.\n    // node ID => cost\n    var costs = {};\n    costs[s] = 0;\n\n    // Costs of shortest paths from s to all nodes encountered; differs from\n    // `costs` in that it provides easy access to the node that currently has\n    // the known shortest path from s.\n    // XXX: Do we actually need both `costs` and `open`?\n    var open = dijkstra.PriorityQueue.make();\n    open.push(s, 0);\n\n    var closest,\n        u, v,\n        cost_of_s_to_u,\n        adjacent_nodes,\n        cost_of_e,\n        cost_of_s_to_u_plus_cost_of_e,\n        cost_of_s_to_v,\n        first_visit;\n    while (!open.empty()) {\n      // In the nodes remaining in graph that have a known cost from s,\n      // find the node, u, that currently has the shortest path from s.\n      closest = open.pop();\n      u = closest.value;\n      cost_of_s_to_u = closest.cost;\n\n      // Get nodes adjacent to u...\n      adjacent_nodes = graph[u] || {};\n\n      // ...and explore the edges that connect u to those nodes, updating\n      // the cost of the shortest paths to any or all of those nodes as\n      // necessary. v is the node across the current edge from u.\n      for (v in adjacent_nodes) {\n        if (adjacent_nodes.hasOwnProperty(v)) {\n          // Get the cost of the edge running from u to v.\n          cost_of_e = adjacent_nodes[v];\n\n          // Cost of s to u plus the cost of u to v across e--this is *a*\n          // cost from s to v that may or may not be less than the current\n          // known cost to v.\n          cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n          // If we haven't visited v yet OR if the current known cost from s to\n          // v is greater than the new cost we just found (cost of s to u plus\n          // cost of u to v across e), update v's cost in the cost list and\n          // update v's predecessor in the predecessor list (it's now u).\n          cost_of_s_to_v = costs[v];\n          first_visit = (typeof costs[v] === 'undefined');\n          if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n            costs[v] = cost_of_s_to_u_plus_cost_of_e;\n            open.push(v, cost_of_s_to_u_plus_cost_of_e);\n            predecessors[v] = u;\n          }\n        }\n      }\n    }\n\n    if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n      var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n      throw new Error(msg);\n    }\n\n    return predecessors;\n  },\n\n  extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n    var nodes = [];\n    var u = d;\n    var predecessor;\n    while (u) {\n      nodes.push(u);\n      predecessor = predecessors[u];\n      u = predecessors[u];\n    }\n    nodes.reverse();\n    return nodes;\n  },\n\n  find_path: function(graph, s, d) {\n    var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n    return dijkstra.extract_shortest_path_from_predecessor_list(\n      predecessors, d);\n  },\n\n  /**\n   * A very naive priority queue implementation.\n   */\n  PriorityQueue: {\n    make: function (opts) {\n      var T = dijkstra.PriorityQueue,\n          t = {},\n          key;\n      opts = opts || {};\n      for (key in T) {\n        if (T.hasOwnProperty(key)) {\n          t[key] = T[key];\n        }\n      }\n      t.queue = [];\n      t.sorter = opts.sorter || T.default_sorter;\n      return t;\n    },\n\n    default_sorter: function (a, b) {\n      return a.cost - b.cost;\n    },\n\n    /**\n     * Add a new item to the queue and ensure the highest priority element\n     * is at the front of the queue.\n     */\n    push: function (value, cost) {\n      var item = {value: value, cost: cost};\n      this.queue.push(item);\n      this.queue.sort(this.sorter);\n    },\n\n    /**\n     * Return the highest priority element in the queue.\n     */\n    pop: function () {\n      return this.queue.shift();\n    },\n\n    empty: function () {\n      return this.queue.length === 0;\n    }\n  }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n  module.exports = dijkstra;\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param  {String} str Input string\n * @return {Number}     Number of byte\n */\nfunction getStringByteLength (str) {\n  return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param  {Mode}   mode Segment mode\n * @param  {String} str  String to process\n * @return {Array}       Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n  const segments = []\n  let result\n\n  while ((result = regex.exec(str)) !== null) {\n    segments.push({\n      data: result[0],\n      index: result.index,\n      mode: mode,\n      length: result[0].length\n    })\n  }\n\n  return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param  {String} dataStr Input string\n * @return {Array}          Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n  const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n  const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n  let byteSegs\n  let kanjiSegs\n\n  if (Utils.isKanjiModeEnabled()) {\n    byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n    kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n  } else {\n    byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n    kanjiSegs = []\n  }\n\n  const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n  return segs\n    .sort(function (s1, s2) {\n      return s1.index - s2.index\n    })\n    .map(function (obj) {\n      return {\n        data: obj.data,\n        mode: obj.mode,\n        length: obj.length\n      }\n    })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param  {Number} length String length\n * @param  {Mode} mode     Segment mode\n * @return {Number}        Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n  switch (mode) {\n    case Mode.NUMERIC:\n      return NumericData.getBitsLength(length)\n    case Mode.ALPHANUMERIC:\n      return AlphanumericData.getBitsLength(length)\n    case Mode.KANJI:\n      return KanjiData.getBitsLength(length)\n    case Mode.BYTE:\n      return ByteData.getBitsLength(length)\n  }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction mergeSegments (segs) {\n  return segs.reduce(function (acc, curr) {\n    const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n    if (prevSeg && prevSeg.mode === curr.mode) {\n      acc[acc.length - 1].data += curr.data\n      return acc\n    }\n\n    acc.push(curr)\n    return acc\n  }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction buildNodes (segs) {\n  const nodes = []\n  for (let i = 0; i < segs.length; i++) {\n    const seg = segs[i]\n\n    switch (seg.mode) {\n      case Mode.NUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.ALPHANUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.KANJI:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n        break\n      case Mode.BYTE:\n        nodes.push([\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n    }\n  }\n\n  return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param  {Array} nodes    Array of object with segments data\n * @param  {Number} version QR Code version\n * @return {Object}         Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n  const table = {}\n  const graph = { start: {} }\n  let prevNodeIds = ['start']\n\n  for (let i = 0; i < nodes.length; i++) {\n    const nodeGroup = nodes[i]\n    const currentNodeIds = []\n\n    for (let j = 0; j < nodeGroup.length; j++) {\n      const node = nodeGroup[j]\n      const key = '' + i + j\n\n      currentNodeIds.push(key)\n      table[key] = { node: node, lastCount: 0 }\n      graph[key] = {}\n\n      for (let n = 0; n < prevNodeIds.length; n++) {\n        const prevNodeId = prevNodeIds[n]\n\n        if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n          graph[prevNodeId][key] =\n            getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n            getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n          table[prevNodeId].lastCount += node.length\n        } else {\n          if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n          graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n            4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n        }\n      }\n    }\n\n    prevNodeIds = currentNodeIds\n  }\n\n  for (let n = 0; n < prevNodeIds.length; n++) {\n    graph[prevNodeIds[n]].end = 0\n  }\n\n  return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param  {String} data             Input data\n * @param  {Mode | String} modesHint Data mode\n * @return {Segment}                 Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n  let mode\n  const bestMode = Mode.getBestModeForData(data)\n\n  mode = Mode.from(modesHint, bestMode)\n\n  // Make sure data can be encoded\n  if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n    throw new Error('\"' + data + '\"' +\n      ' cannot be encoded with mode ' + Mode.toString(mode) +\n      '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n  }\n\n  // Use Mode.BYTE if Kanji support is disabled\n  if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n    mode = Mode.BYTE\n  }\n\n  switch (mode) {\n    case Mode.NUMERIC:\n      return new NumericData(data)\n\n    case Mode.ALPHANUMERIC:\n      return new AlphanumericData(data)\n\n    case Mode.KANJI:\n      return new KanjiData(data)\n\n    case Mode.BYTE:\n      return new ByteData(data)\n  }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param  {Array} array Array of objects with segments data\n * @return {Array}       Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n  return array.reduce(function (acc, seg) {\n    if (typeof seg === 'string') {\n      acc.push(buildSingleSegment(seg, null))\n    } else if (seg.data) {\n      acc.push(buildSingleSegment(seg.data, seg.mode))\n    }\n\n    return acc\n  }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param  {String} data    Input string\n * @param  {Number} version QR Code version\n * @return {Array}          Array of segments\n */\nexports.fromString = function fromString (data, version) {\n  const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n  const nodes = buildNodes(segs)\n  const graph = buildGraph(nodes, version)\n  const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n  const optimizedSegs = []\n  for (let i = 1; i < path.length - 1; i++) {\n    optimizedSegs.push(graph.table[path[i]].node)\n  }\n\n  return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param  {string} data Input string\n * @return {Array}       Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n  return exports.fromArray(\n    getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n  )\n}\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//   http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n//   http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n  const size = matrix.size\n  const pos = FinderPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -1; r <= 7; r++) {\n      if (row + r <= -1 || size <= row + r) continue\n\n      for (let c = -1; c <= 7; c++) {\n        if (col + c <= -1 || size <= col + c) continue\n\n        if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n          (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n          (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param  {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n  const size = matrix.size\n\n  for (let r = 8; r < size - 8; r++) {\n    const value = r % 2 === 0\n    matrix.set(r, 6, value, true)\n    matrix.set(6, r, value, true)\n  }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n  const pos = AlignmentPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -2; r <= 2; r++) {\n      for (let c = -2; c <= 2; c++) {\n        if (r === -2 || r === 2 || c === -2 || c === 2 ||\n          (r === 0 && c === 0)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n  const size = matrix.size\n  const bits = Version.getEncodedBits(version)\n  let row, col, mod\n\n  for (let i = 0; i < 18; i++) {\n    row = Math.floor(i / 3)\n    col = i % 3 + size - 8 - 3\n    mod = ((bits >> i) & 1) === 1\n\n    matrix.set(row, col, mod, true)\n    matrix.set(col, row, mod, true)\n  }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param  {BitMatrix} matrix               Modules matrix\n * @param  {ErrorCorrectionLevel}    errorCorrectionLevel Error correction level\n * @param  {Number}    maskPattern          Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n  const size = matrix.size\n  const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n  let i, mod\n\n  for (i = 0; i < 15; i++) {\n    mod = ((bits >> i) & 1) === 1\n\n    // vertical\n    if (i < 6) {\n      matrix.set(i, 8, mod, true)\n    } else if (i < 8) {\n      matrix.set(i + 1, 8, mod, true)\n    } else {\n      matrix.set(size - 15 + i, 8, mod, true)\n    }\n\n    // horizontal\n    if (i < 8) {\n      matrix.set(8, size - i - 1, mod, true)\n    } else if (i < 9) {\n      matrix.set(8, 15 - i - 1 + 1, mod, true)\n    } else {\n      matrix.set(8, 15 - i - 1, mod, true)\n    }\n  }\n\n  // fixed module\n  matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param  {BitMatrix}  matrix Modules matrix\n * @param  {Uint8Array} data   Data codewords\n */\nfunction setupData (matrix, data) {\n  const size = matrix.size\n  let inc = -1\n  let row = size - 1\n  let bitIndex = 7\n  let byteIndex = 0\n\n  for (let col = size - 1; col > 0; col -= 2) {\n    if (col === 6) col--\n\n    while (true) {\n      for (let c = 0; c < 2; c++) {\n        if (!matrix.isReserved(row, col - c)) {\n          let dark = false\n\n          if (byteIndex < data.length) {\n            dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n          }\n\n          matrix.set(row, col - c, dark)\n          bitIndex--\n\n          if (bitIndex === -1) {\n            byteIndex++\n            bitIndex = 7\n          }\n        }\n      }\n\n      row += inc\n\n      if (row < 0 || size <= row) {\n        row -= inc\n        inc = -inc\n        break\n      }\n    }\n  }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param  {Number}   version              QR Code version\n * @param  {ErrorCorrectionLevel}   errorCorrectionLevel Error correction level\n * @param  {ByteData} data                 Data input\n * @return {Uint8Array}                    Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n  // Prepare data buffer\n  const buffer = new BitBuffer()\n\n  segments.forEach(function (data) {\n    // prefix data with mode indicator (4 bits)\n    buffer.put(data.mode.bit, 4)\n\n    // Prefix data with character count indicator.\n    // The character count indicator is a string of bits that represents the\n    // number of characters that are being encoded.\n    // The character count indicator must be placed after the mode indicator\n    // and must be a certain number of bits long, depending on the QR version\n    // and data mode\n    // @see {@link Mode.getCharCountIndicator}.\n    buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n    // add binary data sequence to buffer\n    data.write(buffer)\n  })\n\n  // Calculate required number of bits\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  // Add a terminator.\n  // If the bit string is shorter than the total number of required bits,\n  // a terminator of up to four 0s must be added to the right side of the string.\n  // If the bit string is more than four bits shorter than the required number of bits,\n  // add four 0s to the end.\n  if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n    buffer.put(0, 4)\n  }\n\n  // If the bit string is fewer than four bits shorter, add only the number of 0s that\n  // are needed to reach the required number of bits.\n\n  // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n  // pad the string on the right with 0s to make the string's length a multiple of 8.\n  while (buffer.getLengthInBits() % 8 !== 0) {\n    buffer.putBit(0)\n  }\n\n  // Add pad bytes if the string is still shorter than the total number of required bits.\n  // Extend the buffer to fill the data capacity of the symbol corresponding to\n  // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n  // and 00010001 (0x11) alternately.\n  const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n  for (let i = 0; i < remainingByte; i++) {\n    buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n  }\n\n  return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param  {BitBuffer} bitBuffer            Data to encode\n * @param  {Number}    version              QR Code version\n * @param  {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array}                     Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n  // Total number of blocks\n  const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n  // Calculate how many blocks each group should contain\n  const blocksInGroup2 = totalCodewords % ecTotalBlocks\n  const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n  const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n  const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n  const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n  // Number of EC codewords is the same for both groups\n  const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n  // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n  const rs = new ReedSolomonEncoder(ecCount)\n\n  let offset = 0\n  const dcData = new Array(ecTotalBlocks)\n  const ecData = new Array(ecTotalBlocks)\n  let maxDataSize = 0\n  const buffer = new Uint8Array(bitBuffer.buffer)\n\n  // Divide the buffer into the required number of blocks\n  for (let b = 0; b < ecTotalBlocks; b++) {\n    const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n    // extract a block of data from buffer\n    dcData[b] = buffer.slice(offset, offset + dataSize)\n\n    // Calculate EC codewords for this data block\n    ecData[b] = rs.encode(dcData[b])\n\n    offset += dataSize\n    maxDataSize = Math.max(maxDataSize, dataSize)\n  }\n\n  // Create final data\n  // Interleave the data and error correction codewords from each block\n  const data = new Uint8Array(totalCodewords)\n  let index = 0\n  let i, r\n\n  // Add data codewords\n  for (i = 0; i < maxDataSize; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      if (i < dcData[r].length) {\n        data[index++] = dcData[r][i]\n      }\n    }\n  }\n\n  // Apped EC codewords\n  for (i = 0; i < ecCount; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      data[index++] = ecData[r][i]\n    }\n  }\n\n  return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param  {String} data                 Input string\n * @param  {Number} version              QR Code version\n * @param  {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param  {MaskPattern} maskPattern     Mask pattern\n * @return {Object}                      Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n  let segments\n\n  if (Array.isArray(data)) {\n    segments = Segments.fromArray(data)\n  } else if (typeof data === 'string') {\n    let estimatedVersion = version\n\n    if (!estimatedVersion) {\n      const rawSegments = Segments.rawSplit(data)\n\n      // Estimate best version that can contain raw splitted segments\n      estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n    }\n\n    // Build optimized segments\n    // If estimated version is undefined, try with the highest version\n    segments = Segments.fromString(data, estimatedVersion || 40)\n  } else {\n    throw new Error('Invalid data')\n  }\n\n  // Get the min version that can contain data\n  const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n  // If no version is found, data cannot be stored\n  if (!bestVersion) {\n    throw new Error('The amount of data is too big to be stored in a QR Code')\n  }\n\n  // If not specified, use min version as default\n  if (!version) {\n    version = bestVersion\n\n  // Check if the specified version can contain the data\n  } else if (version < bestVersion) {\n    throw new Error('\\n' +\n      'The chosen QR Code version cannot contain this amount of data.\\n' +\n      'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n    )\n  }\n\n  const dataBits = createData(version, errorCorrectionLevel, segments)\n\n  // Allocate matrix buffer\n  const moduleCount = Utils.getSymbolSize(version)\n  const modules = new BitMatrix(moduleCount)\n\n  // Add function modules\n  setupFinderPattern(modules, version)\n  setupTimingPattern(modules)\n  setupAlignmentPattern(modules, version)\n\n  // Add temporary dummy bits for format info just to set them as reserved.\n  // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n  // since the masking operation must be performed only on the encoding region.\n  // These blocks will be replaced with correct values later in code.\n  setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n  if (version >= 7) {\n    setupVersionInfo(modules, version)\n  }\n\n  // Add data codewords\n  setupData(modules, dataBits)\n\n  if (isNaN(maskPattern)) {\n    // Find best mask pattern\n    maskPattern = MaskPattern.getBestMask(modules,\n      setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n  }\n\n  // Apply mask pattern\n  MaskPattern.applyMask(maskPattern, modules)\n\n  // Replace format info bits with correct values\n  setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n  return {\n    modules: modules,\n    version: version,\n    errorCorrectionLevel: errorCorrectionLevel,\n    maskPattern: maskPattern,\n    segments: segments\n  }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data                 Input data\n * @param {Object} options                      Optional configurations\n * @param {Number} options.version              QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc         Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n  if (typeof data === 'undefined' || data === '') {\n    throw new Error('No input text')\n  }\n\n  let errorCorrectionLevel = ECLevel.M\n  let version\n  let mask\n\n  if (typeof options !== 'undefined') {\n    // Use higher error correction level as default\n    errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n    version = Version.from(options.version)\n    mask = MaskPattern.from(options.maskPattern)\n\n    if (options.toSJISFunc) {\n      Utils.setToSJISFunction(options.toSJISFunc)\n    }\n  }\n\n  return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","function hex2rgba (hex) {\n  if (typeof hex === 'number') {\n    hex = hex.toString()\n  }\n\n  if (typeof hex !== 'string') {\n    throw new Error('Color should be defined as hex string')\n  }\n\n  let hexCode = hex.slice().replace('#', '').split('')\n  if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n    throw new Error('Invalid hex color: ' + hex)\n  }\n\n  // Convert from short to long form (fff -> ffffff)\n  if (hexCode.length === 3 || hexCode.length === 4) {\n    hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n      return [c, c]\n    }))\n  }\n\n  // Add default alpha value\n  if (hexCode.length === 6) hexCode.push('F', 'F')\n\n  const hexValue = parseInt(hexCode.join(''), 16)\n\n  return {\n    r: (hexValue >> 24) & 255,\n    g: (hexValue >> 16) & 255,\n    b: (hexValue >> 8) & 255,\n    a: hexValue & 255,\n    hex: '#' + hexCode.slice(0, 6).join('')\n  }\n}\n\nexports.getOptions = function getOptions (options) {\n  if (!options) options = {}\n  if (!options.color) options.color = {}\n\n  const margin = typeof options.margin === 'undefined' ||\n    options.margin === null ||\n    options.margin < 0\n    ? 4\n    : options.margin\n\n  const width = options.width && options.width >= 21 ? options.width : undefined\n  const scale = options.scale || 4\n\n  return {\n    width: width,\n    scale: width ? 4 : scale,\n    margin: margin,\n    color: {\n      dark: hex2rgba(options.color.dark || '#000000ff'),\n      light: hex2rgba(options.color.light || '#ffffffff')\n    },\n    type: options.type,\n    rendererOpts: options.rendererOpts || {}\n  }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n  return opts.width && opts.width >= qrSize + opts.margin * 2\n    ? opts.width / (qrSize + opts.margin * 2)\n    : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n  const scale = exports.getScale(qrSize, opts)\n  return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n  const size = qr.modules.size\n  const data = qr.modules.data\n  const scale = exports.getScale(size, opts)\n  const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n  const scaledMargin = opts.margin * scale\n  const palette = [opts.color.light, opts.color.dark]\n\n  for (let i = 0; i < symbolSize; i++) {\n    for (let j = 0; j < symbolSize; j++) {\n      let posDst = (i * symbolSize + j) * 4\n      let pxColor = opts.color.light\n\n      if (i >= scaledMargin && j >= scaledMargin &&\n        i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n        const iSrc = Math.floor((i - scaledMargin) / scale)\n        const jSrc = Math.floor((j - scaledMargin) / scale)\n        pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n      }\n\n      imgData[posDst++] = pxColor.r\n      imgData[posDst++] = pxColor.g\n      imgData[posDst++] = pxColor.b\n      imgData[posDst] = pxColor.a\n    }\n  }\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n  ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n  if (!canvas.style) canvas.style = {}\n  canvas.height = size\n  canvas.width = size\n  canvas.style.height = size + 'px'\n  canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n  try {\n    return document.createElement('canvas')\n  } catch (e) {\n    throw new Error('You need to specify a canvas element')\n  }\n}\n\nexports.render = function render (qrData, canvas, options) {\n  let opts = options\n  let canvasEl = canvas\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!canvas) {\n    canvasEl = getCanvasElement()\n  }\n\n  opts = Utils.getOptions(opts)\n  const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n  const ctx = canvasEl.getContext('2d')\n  const image = ctx.createImageData(size, size)\n  Utils.qrToImageData(image.data, qrData, opts)\n\n  clearCanvas(ctx, canvasEl, size)\n  ctx.putImageData(image, 0, 0)\n\n  return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n  let opts = options\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!opts) opts = {}\n\n  const canvasEl = exports.render(qrData, canvas, opts)\n\n  const type = opts.type || 'image/png'\n  const rendererOpts = opts.rendererOpts || {}\n\n  return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n  const alpha = color.a / 255\n  const str = attrib + '=\"' + color.hex + '\"'\n\n  return alpha < 1\n    ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n    : str\n}\n\nfunction svgCmd (cmd, x, y) {\n  let str = cmd + x\n  if (typeof y !== 'undefined') str += ' ' + y\n\n  return str\n}\n\nfunction qrToPath (data, size, margin) {\n  let path = ''\n  let moveBy = 0\n  let newRow = false\n  let lineLength = 0\n\n  for (let i = 0; i < data.length; i++) {\n    const col = Math.floor(i % size)\n    const row = Math.floor(i / size)\n\n    if (!col && !newRow) newRow = true\n\n    if (data[i]) {\n      lineLength++\n\n      if (!(i > 0 && col > 0 && data[i - 1])) {\n        path += newRow\n          ? svgCmd('M', col + margin, 0.5 + row + margin)\n          : svgCmd('m', moveBy, 0)\n\n        moveBy = 0\n        newRow = false\n      }\n\n      if (!(col + 1 < size && data[i + 1])) {\n        path += svgCmd('h', lineLength)\n        lineLength = 0\n      }\n    } else {\n      moveBy++\n    }\n  }\n\n  return path\n}\n\nexports.render = function render (qrData, options, cb) {\n  const opts = Utils.getOptions(options)\n  const size = qrData.modules.size\n  const data = qrData.modules.data\n  const qrcodesize = size + opts.margin * 2\n\n  const bg = !opts.color.light.a\n    ? ''\n    : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n      ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n  const path =\n    '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n    ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n  const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n  const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n  const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n  if (typeof cb === 'function') {\n    cb(null, svgTag)\n  }\n\n  return svgTag\n}\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n  const args = [].slice.call(arguments, 1)\n  const argsNum = args.length\n  const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n  if (!isLastArgCb && !canPromise()) {\n    throw new Error('Callback required as last argument')\n  }\n\n  if (isLastArgCb) {\n    if (argsNum < 2) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 2) {\n      cb = text\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 3) {\n      if (canvas.getContext && typeof cb === 'undefined') {\n        cb = opts\n        opts = undefined\n      } else {\n        cb = opts\n        opts = text\n        text = canvas\n        canvas = undefined\n      }\n    }\n  } else {\n    if (argsNum < 1) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 1) {\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 2 && !canvas.getContext) {\n      opts = text\n      text = canvas\n      canvas = undefined\n    }\n\n    return new Promise(function (resolve, reject) {\n      try {\n        const data = QRCode.create(text, opts)\n        resolve(renderFunc(data, canvas, opts))\n      } catch (e) {\n        reject(e)\n      }\n    })\n  }\n\n  try {\n    const data = QRCode.create(text, opts)\n    cb(null, renderFunc(data, canvas, opts))\n  } catch (e) {\n    cb(e)\n  }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n  return SvgRenderer.render(data, opts)\n})\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n","module.exports = {}","var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n    ? Symbol.toStringTag\n    : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n    [].__proto__ === Array.prototype // eslint-disable-line no-proto\n        ? function (O) {\n            return O.__proto__; // eslint-disable-line no-proto\n        }\n        : null\n);\n\nfunction addNumericSeparator(num, str) {\n    if (\n        num === Infinity\n        || num === -Infinity\n        || num !== num\n        || (num && num > -1000 && num < 1000)\n        || $test.call(/e/, str)\n    ) {\n        return str;\n    }\n    var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n    if (typeof num === 'number') {\n        var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n        if (int !== num) {\n            var intStr = String(int);\n            var dec = $slice.call(str, intStr.length + 1);\n            return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n        }\n    }\n    return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nvar quotes = {\n    __proto__: null,\n    'double': '\"',\n    single: \"'\"\n};\nvar quoteREs = {\n    __proto__: null,\n    'double': /([\"\\\\])/g,\n    single: /(['\\\\])/g\n};\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n    var opts = options || {};\n\n    if (has(opts, 'quoteStyle') && !has(quotes, opts.quoteStyle)) {\n        throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n    }\n    if (\n        has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n            ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n            : opts.maxStringLength !== null\n        )\n    ) {\n        throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n    }\n    var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n    if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n        throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n    }\n\n    if (\n        has(opts, 'indent')\n        && opts.indent !== null\n        && opts.indent !== '\\t'\n        && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n    ) {\n        throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n    }\n    if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n        throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n    }\n    var numericSeparator = opts.numericSeparator;\n\n    if (typeof obj === 'undefined') {\n        return 'undefined';\n    }\n    if (obj === null) {\n        return 'null';\n    }\n    if (typeof obj === 'boolean') {\n        return obj ? 'true' : 'false';\n    }\n\n    if (typeof obj === 'string') {\n        return inspectString(obj, opts);\n    }\n    if (typeof obj === 'number') {\n        if (obj === 0) {\n            return Infinity / obj > 0 ? '0' : '-0';\n        }\n        var str = String(obj);\n        return numericSeparator ? addNumericSeparator(obj, str) : str;\n    }\n    if (typeof obj === 'bigint') {\n        var bigIntStr = String(obj) + 'n';\n        return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n    }\n\n    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n    if (typeof depth === 'undefined') { depth = 0; }\n    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n        return isArray(obj) ? '[Array]' : '[Object]';\n    }\n\n    var indent = getIndent(opts, depth);\n\n    if (typeof seen === 'undefined') {\n        seen = [];\n    } else if (indexOf(seen, obj) >= 0) {\n        return '[Circular]';\n    }\n\n    function inspect(value, from, noIndent) {\n        if (from) {\n            seen = $arrSlice.call(seen);\n            seen.push(from);\n        }\n        if (noIndent) {\n            var newOpts = {\n                depth: opts.depth\n            };\n            if (has(opts, 'quoteStyle')) {\n                newOpts.quoteStyle = opts.quoteStyle;\n            }\n            return inspect_(value, newOpts, depth + 1, seen);\n        }\n        return inspect_(value, opts, depth + 1, seen);\n    }\n\n    if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n        var name = nameOf(obj);\n        var keys = arrObjKeys(obj, inspect);\n        return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n    }\n    if (isSymbol(obj)) {\n        var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n        return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n    }\n    if (isElement(obj)) {\n        var s = '<' + $toLowerCase.call(String(obj.nodeName));\n        var attrs = obj.attributes || [];\n        for (var i = 0; i < attrs.length; i++) {\n            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n        }\n        s += '>';\n        if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n        s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n        return s;\n    }\n    if (isArray(obj)) {\n        if (obj.length === 0) { return '[]'; }\n        var xs = arrObjKeys(obj, inspect);\n        if (indent && !singleLineValues(xs)) {\n            return '[' + indentedJoin(xs, indent) + ']';\n        }\n        return '[ ' + $join.call(xs, ', ') + ' ]';\n    }\n    if (isError(obj)) {\n        var parts = arrObjKeys(obj, inspect);\n        if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n            return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n        }\n        if (parts.length === 0) { return '[' + String(obj) + ']'; }\n        return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n    }\n    if (typeof obj === 'object' && customInspect) {\n        if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n            return utilInspect(obj, { depth: maxDepth - depth });\n        } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n            return obj.inspect();\n        }\n    }\n    if (isMap(obj)) {\n        var mapParts = [];\n        if (mapForEach) {\n            mapForEach.call(obj, function (value, key) {\n                mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n            });\n        }\n        return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n    }\n    if (isSet(obj)) {\n        var setParts = [];\n        if (setForEach) {\n            setForEach.call(obj, function (value) {\n                setParts.push(inspect(value, obj));\n            });\n        }\n        return collectionOf('Set', setSize.call(obj), setParts, indent);\n    }\n    if (isWeakMap(obj)) {\n        return weakCollectionOf('WeakMap');\n    }\n    if (isWeakSet(obj)) {\n        return weakCollectionOf('WeakSet');\n    }\n    if (isWeakRef(obj)) {\n        return weakCollectionOf('WeakRef');\n    }\n    if (isNumber(obj)) {\n        return markBoxed(inspect(Number(obj)));\n    }\n    if (isBigInt(obj)) {\n        return markBoxed(inspect(bigIntValueOf.call(obj)));\n    }\n    if (isBoolean(obj)) {\n        return markBoxed(booleanValueOf.call(obj));\n    }\n    if (isString(obj)) {\n        return markBoxed(inspect(String(obj)));\n    }\n    // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n    /* eslint-env browser */\n    if (typeof window !== 'undefined' && obj === window) {\n        return '{ [object Window] }';\n    }\n    if (\n        (typeof globalThis !== 'undefined' && obj === globalThis)\n        || (typeof global !== 'undefined' && obj === global)\n    ) {\n        return '{ [object globalThis] }';\n    }\n    if (!isDate(obj) && !isRegExp(obj)) {\n        var ys = arrObjKeys(obj, inspect);\n        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n        var protoTag = obj instanceof Object ? '' : 'null prototype';\n        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n        var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n        var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n        if (ys.length === 0) { return tag + '{}'; }\n        if (indent) {\n            return tag + '{' + indentedJoin(ys, indent) + '}';\n        }\n        return tag + '{ ' + $join.call(ys, ', ') + ' }';\n    }\n    return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n    var style = opts.quoteStyle || defaultStyle;\n    var quoteChar = quotes[style];\n    return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n    return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction canTrustToString(obj) {\n    return !toStringTag || !(typeof obj === 'object' && (toStringTag in obj || typeof obj[toStringTag] !== 'undefined'));\n}\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && canTrustToString(obj); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && canTrustToString(obj); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && canTrustToString(obj); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && canTrustToString(obj); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && canTrustToString(obj); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && canTrustToString(obj); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && canTrustToString(obj); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n    if (hasShammedSymbols) {\n        return obj && typeof obj === 'object' && obj instanceof Symbol;\n    }\n    if (typeof obj === 'symbol') {\n        return true;\n    }\n    if (!obj || typeof obj !== 'object' || !symToString) {\n        return false;\n    }\n    try {\n        symToString.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isBigInt(obj) {\n    if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n        return false;\n    }\n    try {\n        bigIntValueOf.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n    return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n    return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n    if (f.name) { return f.name; }\n    var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n    if (m) { return m[1]; }\n    return null;\n}\n\nfunction indexOf(xs, x) {\n    if (xs.indexOf) { return xs.indexOf(x); }\n    for (var i = 0, l = xs.length; i < l; i++) {\n        if (xs[i] === x) { return i; }\n    }\n    return -1;\n}\n\nfunction isMap(x) {\n    if (!mapSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        mapSize.call(x);\n        try {\n            setSize.call(x);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof Map; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakMap(x) {\n    if (!weakMapHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakMapHas.call(x, weakMapHas);\n        try {\n            weakSetHas.call(x, weakSetHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakRef(x) {\n    if (!weakRefDeref || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakRefDeref.call(x);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isSet(x) {\n    if (!setSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        setSize.call(x);\n        try {\n            mapSize.call(x);\n        } catch (m) {\n            return true;\n        }\n        return x instanceof Set; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakSet(x) {\n    if (!weakSetHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakSetHas.call(x, weakSetHas);\n        try {\n            weakMapHas.call(x, weakMapHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isElement(x) {\n    if (!x || typeof x !== 'object') { return false; }\n    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n        return true;\n    }\n    return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n    if (str.length > opts.maxStringLength) {\n        var remaining = str.length - opts.maxStringLength;\n        var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n        return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n    }\n    var quoteRE = quoteREs[opts.quoteStyle || 'single'];\n    quoteRE.lastIndex = 0;\n    // eslint-disable-next-line no-control-regex\n    var s = $replace.call($replace.call(str, quoteRE, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n    return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n    var n = c.charCodeAt(0);\n    var x = {\n        8: 'b',\n        9: 't',\n        10: 'n',\n        12: 'f',\n        13: 'r'\n    }[n];\n    if (x) { return '\\\\' + x; }\n    return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n    return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n    return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n    var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n    return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n    for (var i = 0; i < xs.length; i++) {\n        if (indexOf(xs[i], '\\n') >= 0) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction getIndent(opts, depth) {\n    var baseIndent;\n    if (opts.indent === '\\t') {\n        baseIndent = '\\t';\n    } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n        baseIndent = $join.call(Array(opts.indent + 1), ' ');\n    } else {\n        return null;\n    }\n    return {\n        base: baseIndent,\n        prev: $join.call(Array(depth + 1), baseIndent)\n    };\n}\n\nfunction indentedJoin(xs, indent) {\n    if (xs.length === 0) { return ''; }\n    var lineJoiner = '\\n' + indent.prev + indent.base;\n    return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n    var isArr = isArray(obj);\n    var xs = [];\n    if (isArr) {\n        xs.length = obj.length;\n        for (var i = 0; i < obj.length; i++) {\n            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n        }\n    }\n    var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n    var symMap;\n    if (hasShammedSymbols) {\n        symMap = {};\n        for (var k = 0; k < syms.length; k++) {\n            symMap['$' + syms[k]] = syms[k];\n        }\n    }\n\n    for (var key in obj) { // eslint-disable-line no-restricted-syntax\n        if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n            // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n            continue; // eslint-disable-line no-restricted-syntax, no-continue\n        } else if ($test.call(/[^\\w$]/, key)) {\n            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n        } else {\n            xs.push(key + ': ' + inspect(obj[key], obj));\n        }\n    }\n    if (typeof gOPS === 'function') {\n        for (var j = 0; j < syms.length; j++) {\n            if (isEnumerable.call(obj, syms[j])) {\n                xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n            }\n        }\n    }\n    return xs;\n}\n","'use strict';\n\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\n\n/*\n* This function traverses the list returning the node corresponding to the given key.\n*\n* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list.\n* By doing so, all the recently used nodes can be accessed relatively quickly.\n*/\n/** @type {import('./list.d.ts').listGetNode} */\n// eslint-disable-next-line consistent-return\nvar listGetNode = function (list, key, isDelete) {\n\t/** @type {typeof list | NonNullable<(typeof list)['next']>} */\n\tvar prev = list;\n\t/** @type {(typeof list)['next']} */\n\tvar curr;\n\t// eslint-disable-next-line eqeqeq\n\tfor (; (curr = prev.next) != null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tif (!isDelete) {\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tcurr.next = /** @type {NonNullable<typeof list.next>} */ (list.next);\n\t\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\t}\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\n/** @type {import('./list.d.ts').listGet} */\nvar listGet = function (objects, key) {\n\tif (!objects) {\n\t\treturn void undefined;\n\t}\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\n/** @type {import('./list.d.ts').listSet} */\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = /** @type {import('./list.d.ts').ListNode<typeof value, typeof key>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t});\n\t}\n};\n/** @type {import('./list.d.ts').listHas} */\nvar listHas = function (objects, key) {\n\tif (!objects) {\n\t\treturn false;\n\t}\n\treturn !!listGetNode(objects, key);\n};\n/** @type {import('./list.d.ts').listDelete} */\n// eslint-disable-next-line consistent-return\nvar listDelete = function (objects, key) {\n\tif (objects) {\n\t\treturn listGetNode(objects, key, true);\n\t}\n};\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannelList() {\n\t/** @typedef {ReturnType<typeof getSideChannelList>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {import('./list.d.ts').RootNode<V, K> | undefined} */ var $o;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tvar deletedNode = listDelete($o, key);\n\t\t\tif (deletedNode && $o && !$o.next) {\n\t\t\t\t$o = void undefined;\n\t\t\t}\n\t\t\treturn !!deletedNode;\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn listGet($o, key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn listHas($o, key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$o) {\n\t\t\t\t// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head\n\t\t\t\t$o = {\n\t\t\t\t\tnext: void undefined\n\t\t\t\t};\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tlistSet(/** @type {NonNullable<typeof $o>} */ ($o), key, value);\n\t\t}\n\t};\n\treturn channel;\n};\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n","'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n","'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n","'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n","'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n","'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n","'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n","'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n","'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n","'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n","'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n","'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n","'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n","'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n","'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n","'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n","'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n","'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n    var arr = [];\n\n    for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n    }\n    for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n    }\n\n    return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n    var arr = [];\n    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n    }\n    return arr;\n};\n\nvar joiny = function (arr, joiner) {\n    var str = '';\n    for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n            str += joiner;\n        }\n    }\n    return str;\n};\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slicy(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                concatty(args, arguments)\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        }\n        return target.apply(\n            that,\n            concatty(args, arguments)\n        );\n\n    };\n\n    var boundLength = max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = '$' + i;\n    }\n\n    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n","'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n","'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n","'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n","'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n","'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n","'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\nvar $Map = GetIntrinsic('%Map%', true);\n\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => V} */\nvar $mapGet = callBound('Map.prototype.get', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K, value: V) => void} */\nvar $mapSet = callBound('Map.prototype.set', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapHas = callBound('Map.prototype.has', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapDelete = callBound('Map.prototype.delete', true);\n/** @type {<K, V>(thisArg: Map<K, V>) => number} */\nvar $mapSize = callBound('Map.prototype.size', true);\n\n/** @type {import('.')} */\nmodule.exports = !!$Map && /** @type {Exclude<import('.'), false>} */ function getSideChannelMap() {\n\t/** @typedef {ReturnType<typeof getSideChannelMap>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {Map<K, V> | undefined} */ var $m;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tif ($m) {\n\t\t\t\tvar result = $mapDelete($m, key);\n\t\t\t\tif ($mapSize($m) === 0) {\n\t\t\t\t\t$m = void undefined;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($m) {\n\t\t\t\treturn $mapGet($m, key);\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($m) {\n\t\t\t\treturn $mapHas($m, key);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$m) {\n\t\t\t\t// @ts-expect-error TS can't handle narrowing a variable inside a closure\n\t\t\t\t$m = new $Map();\n\t\t\t}\n\t\t\t$mapSet($m, key, value);\n\t\t}\n\t};\n\n\t// @ts-expect-error TODO: figure out why TS is erroring here\n\treturn channel;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\nvar getSideChannelMap = require('side-channel-map');\n\nvar $TypeError = require('es-errors/type');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\n\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => V} */\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K, value: V) => void} */\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapDelete = callBound('WeakMap.prototype.delete', true);\n\n/** @type {import('.')} */\nmodule.exports = $WeakMap\n\t? /** @type {Exclude<import('.'), false>} */ function getSideChannelWeakMap() {\n\t\t/** @typedef {ReturnType<typeof getSideChannelWeakMap>} Channel */\n\t\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t\t/** @type {WeakMap<K & object, V> | undefined} */ var $wm;\n\t\t/** @type {Channel | undefined} */ var $m;\n\n\t\t/** @type {Channel} */\n\t\tvar channel = {\n\t\t\tassert: function (key) {\n\t\t\t\tif (!channel.has(key)) {\n\t\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t\t}\n\t\t\t},\n\t\t\t'delete': function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapDelete($wm, key);\n\t\t\t\t\t}\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif ($m) {\n\t\t\t\t\t\treturn $m['delete'](key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tget: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $m && $m.get(key);\n\t\t\t},\n\t\t\thas: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!$m && $m.has(key);\n\t\t\t},\n\t\t\tset: function (key, value) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif (!$wm) {\n\t\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t\t}\n\t\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif (!$m) {\n\t\t\t\t\t\t$m = getSideChannelMap();\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\t\t/** @type {NonNullable<typeof $m>} */ ($m).set(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// @ts-expect-error TODO: figure out why this is erroring\n\t\treturn channel;\n\t}\n\t: getSideChannelMap;\n","'use strict';\n\nvar $TypeError = require('es-errors/type');\nvar inspect = require('object-inspect');\nvar getSideChannelList = require('side-channel-list');\nvar getSideChannelMap = require('side-channel-map');\nvar getSideChannelWeakMap = require('side-channel-weakmap');\n\nvar makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannel() {\n\t/** @typedef {ReturnType<typeof getSideChannel>} Channel */\n\n\t/** @type {Channel | undefined} */ var $channelData;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tvar keyDesc = key && Object(key) === key\n\t\t\t\t\t? 'the given object key'\n\t\t\t\t\t: inspect(key);\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + keyDesc);\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\treturn !!$channelData && $channelData['delete'](key);\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn $channelData && $channelData.get(key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn !!$channelData && $channelData.has(key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$channelData) {\n\t\t\t\t$channelData = makeChannel();\n\t\t\t}\n\n\t\t\t$channelData.set(key, value);\n\t\t}\n\t};\n\n\treturn channel;\n};\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n    'default': Format.RFC3986,\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: Format.RFC1738,\n    RFC3986: Format.RFC3986\n};\n","'use strict';\n\nvar formats = require('./formats');\nvar getSideChannel = require('side-channel');\nvar defineProperty = require('es-define-property');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\n// Track objects created from arrayLimit overflow using side-channel\n// Stores the current max numeric index for O(1) lookup\nvar overflowChannel = getSideChannel();\n\nvar markOverflow = function markOverflow(obj, maxIndex) {\n    overflowChannel.set(obj, maxIndex);\n    return obj;\n};\n\nvar isOverflow = function isOverflow(obj) {\n    return overflowChannel.has(obj);\n};\n\nvar getMaxIndex = function getMaxIndex(obj) {\n    return overflowChannel.get(obj);\n};\n\nvar setMaxIndex = function setMaxIndex(obj, maxIndex) {\n    overflowChannel.set(obj, maxIndex);\n};\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array[array.length] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    while (queue.length > 1) {\n        var item = queue.pop();\n        var obj = item.obj[item.prop];\n\n        if (isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted[compacted.length] = obj[j];\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? { __proto__: null } : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar setProperty = function setProperty(obj, key, value) {\n    if (key === '__proto__' && defineProperty) {\n        defineProperty(obj, key, {\n            configurable: true,\n            enumerable: true,\n            value: value,\n            writable: true\n        });\n    } else {\n        obj[key] = value;\n    }\n};\n\nvar merge = function merge(target, source, options) {\n    /* eslint no-param-reassign: 0 */\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object' && typeof source !== 'function') {\n        if (isArray(target)) {\n            var nextIndex = target.length;\n            if (options && typeof options.arrayLimit === 'number' && nextIndex >= options.arrayLimit) {\n                if (options.throwOnLimitExceeded) {\n                    throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n                }\n                return markOverflow(arrayToObject(target.concat(source), options), nextIndex);\n            }\n            target[nextIndex] = source;\n        } else if (target && typeof target === 'object') {\n            if (isOverflow(target)) {\n                // Add at next numeric index for overflow objects\n                var newIndex = getMaxIndex(target) + 1;\n                target[newIndex] = source;\n                setMaxIndex(target, newIndex);\n            } else if (options && options.strictMerge) {\n                return [target, source];\n            } else if (\n                (options && (options.plainObjects || options.allowPrototypes))\n                || !has.call(Object.prototype, source)\n            ) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        if (isOverflow(source)) {\n            // Create new object with target at 0, source values shifted by 1\n            var sourceKeys = Object.keys(source);\n            var result = options && options.plainObjects\n                ? { __proto__: null, 0: target }\n                : { 0: target };\n            for (var m = 0; m < sourceKeys.length; m++) {\n                var oldKey = parseInt(sourceKeys[m], 10);\n                result[oldKey + 1] = source[sourceKeys[m]];\n            }\n            return markOverflow(result, getMaxIndex(source) + 1);\n        }\n        var combined = [target].concat(source);\n        if (options && typeof options.arrayLimit === 'number' && combined.length > options.arrayLimit) {\n            if (options.throwOnLimitExceeded) {\n                throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n            }\n            return markOverflow(arrayToObject(combined, options), combined.length - 1);\n        }\n        return combined;\n    }\n\n    var mergeTarget = target;\n    if (isArray(target) && !isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (isArray(target) && isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target[target.length] = item;\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        if (options && typeof options.arrayLimit === 'number' && target.length > options.arrayLimit) {\n            if (options.throwOnLimitExceeded) {\n                throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n            }\n            return markOverflow(arrayToObject(target, options), target.length - 1);\n        }\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            setProperty(acc, key, merge(acc[key], value, options));\n        } else {\n            setProperty(acc, key, value);\n        }\n\n        if (isOverflow(source) && !isOverflow(acc)) {\n            markOverflow(acc, getMaxIndex(source));\n        }\n        if (isOverflow(acc)) {\n            var keyNum = parseInt(key, 10);\n            if (String(keyNum) === key && keyNum >= 0 && keyNum > getMaxIndex(acc)) {\n                setMaxIndex(acc, keyNum);\n            }\n        }\n\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        setProperty(acc, key, source[key]);\n        return acc;\n    }, target);\n};\n\nvar decode = function (str, defaultDecoder, charset) {\n    var strWithoutPlus = str.replace(/\\+/g, ' ');\n    if (charset === 'iso-8859-1') {\n        // unescape never throws, no try...catch needed:\n        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n    }\n    // utf-8\n    try {\n        return decodeURIComponent(strWithoutPlus);\n    } catch (e) {\n        return strWithoutPlus;\n    }\n};\n\nvar limit = 1024;\n\n/* eslint operator-linebreak: [2, \"before\"] */\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = str;\n    if (typeof str === 'symbol') {\n        string = Symbol.prototype.toString.call(str);\n    } else if (typeof str !== 'string') {\n        string = String(str);\n    }\n\n    if (charset === 'iso-8859-1') {\n        return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n            return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n        });\n    }\n\n    var out = '';\n    for (var j = 0; j < string.length; j += limit) {\n        var segment = string.length >= limit ? string.slice(j, j + limit) : string;\n        if (j + limit < string.length) {\n            var last = segment.charCodeAt(segment.length - 1);\n            if (last >= 0xD800 && last <= 0xDBFF) {\n                segment = segment.slice(0, -1);\n                j -= 1;\n            }\n        }\n        var arr = [];\n\n        for (var i = 0; i < segment.length; ++i) {\n            var c = segment.charCodeAt(i);\n            if (\n                c === 0x2D // -\n                || c === 0x2E // .\n                || c === 0x5F // _\n                || c === 0x7E // ~\n                || (c >= 0x30 && c <= 0x39) // 0-9\n                || (c >= 0x41 && c <= 0x5A) // a-z\n                || (c >= 0x61 && c <= 0x7A) // A-Z\n                || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n            ) {\n                arr[arr.length] = segment.charAt(i);\n                continue;\n            }\n\n            if (c < 0x80) {\n                arr[arr.length] = hexTable[c];\n                continue;\n            }\n\n            if (c < 0x800) {\n                arr[arr.length] = hexTable[0xC0 | (c >> 6)]\n                    + hexTable[0x80 | (c & 0x3F)];\n                continue;\n            }\n\n            if (c < 0xD800 || c >= 0xE000) {\n                arr[arr.length] = hexTable[0xE0 | (c >> 12)]\n                    + hexTable[0x80 | ((c >> 6) & 0x3F)]\n                    + hexTable[0x80 | (c & 0x3F)];\n                continue;\n            }\n\n            i += 1;\n            c = 0x10000 + (((c & 0x3FF) << 10) | (segment.charCodeAt(i) & 0x3FF));\n\n            arr[arr.length] = hexTable[0xF0 | (c >> 18)]\n                + hexTable[0x80 | ((c >> 12) & 0x3F)]\n                + hexTable[0x80 | ((c >> 6) & 0x3F)]\n                + hexTable[0x80 | (c & 0x3F)];\n        }\n\n        out += arr.join('');\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = getSideChannel();\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && !refs.has(val)) {\n                queue[queue.length] = { obj: obj, prop: key };\n                refs.set(val, true);\n            }\n        }\n    }\n\n    compactQueue(queue);\n\n    return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (!obj || typeof obj !== 'object') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b, arrayLimit, plainObjects, throwOnLimitExceeded) {\n    // If 'a' is already an overflow object, add to it\n    if (isOverflow(a)) {\n        if (throwOnLimitExceeded) {\n            throw new RangeError('Array limit exceeded. Only ' + arrayLimit + ' element' + (arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n        }\n        var newIndex = getMaxIndex(a) + 1;\n        a[newIndex] = b;\n        setMaxIndex(a, newIndex);\n        return a;\n    }\n\n    var result = [].concat(a, b);\n    if (result.length > arrayLimit) {\n        if (throwOnLimitExceeded) {\n            throw new RangeError('Array limit exceeded. Only ' + arrayLimit + ' element' + (arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n        }\n        return markOverflow(arrayToObject(result, { plainObjects: plainObjects }), result.length - 1);\n    }\n    return result;\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n    if (isArray(val)) {\n        var mapped = [];\n        for (var i = 0; i < val.length; i += 1) {\n            mapped[mapped.length] = fn(val[i]);\n        }\n        return mapped;\n    }\n    return fn(val);\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    combine: combine,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isOverflow: isOverflow,\n    isRegExp: isRegExp,\n    markOverflow: markOverflow,\n    maybeMap: maybeMap,\n    merge: merge\n};\n","'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    comma: 'comma',\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n    addQueryPrefix: false,\n    allowDots: false,\n    allowEmptyArrays: false,\n    arrayFormat: 'indices',\n    charset: 'utf-8',\n    charsetSentinel: false,\n    commaRoundTrip: false,\n    delimiter: '&',\n    encode: true,\n    encodeDotInKeys: false,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    filter: void undefined,\n    format: defaultFormat,\n    formatter: formats.formatters[defaultFormat],\n    // deprecated\n    indices: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n    return typeof v === 'string'\n        || typeof v === 'number'\n        || typeof v === 'boolean'\n        || typeof v === 'symbol'\n        || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    commaRoundTrip,\n    allowEmptyArrays,\n    strictNullHandling,\n    skipNulls,\n    encodeDotInKeys,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    format,\n    formatter,\n    encodeValuesOnly,\n    charset,\n    sideChannel\n) {\n    var obj = object;\n\n    var tmpSc = sideChannel;\n    var step = 0;\n    var findFlag = false;\n    while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n        // Where object last appeared in the ref tree\n        var pos = tmpSc.get(object);\n        step += 1;\n        if (typeof pos !== 'undefined') {\n            if (pos === step) {\n                throw new RangeError('Cyclic object value');\n            } else {\n                findFlag = true; // Break while\n            }\n        }\n        if (typeof tmpSc.get(sentinel) === 'undefined') {\n            step = 0;\n        }\n    }\n\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        obj = utils.maybeMap(obj, function (value) {\n            if (value instanceof Date) {\n                return serializeDate(value);\n            }\n            return value;\n        });\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return formatter(encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix);\n        }\n\n        obj = '';\n    }\n\n    if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        // we need to join elements in\n        if (encodeValuesOnly && encoder) {\n            obj = utils.maybeMap(obj, function (v) {\n                return v == null ? v : encoder(v);\n            });\n        }\n        objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n    } else if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    var encodedPrefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n\n    var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;\n\n    if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n        return adjustedPrefix + '[]';\n    }\n\n    for (var j = 0; j < objKeys.length; ++j) {\n        var key = objKeys[j];\n        var value = typeof key === 'object' && key && typeof key.value !== 'undefined'\n            ? key.value\n            : obj[key];\n\n        if (skipNulls && value === null) {\n            continue;\n        }\n\n        var encodedKey = allowDots && encodeDotInKeys ? String(key).replace(/\\./g, '%2E') : String(key);\n        var keyPrefix = isArray(obj)\n            ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix\n            : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']');\n\n        sideChannel.set(object, step);\n        var valueSideChannel = getSideChannel();\n        valueSideChannel.set(sentinel, sideChannel);\n        pushToArray(values, stringify(\n            value,\n            keyPrefix,\n            generateArrayPrefix,\n            commaRoundTrip,\n            allowEmptyArrays,\n            strictNullHandling,\n            skipNulls,\n            encodeDotInKeys,\n            generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            format,\n            formatter,\n            encodeValuesOnly,\n            charset,\n            valueSideChannel\n        ));\n    }\n\n    return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n    }\n\n    if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n        throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n    }\n\n    if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var charset = opts.charset || defaults.charset;\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    var format = formats['default'];\n    if (typeof opts.format !== 'undefined') {\n        if (!has.call(formats.formatters, opts.format)) {\n            throw new TypeError('Unknown format option provided.');\n        }\n        format = opts.format;\n    }\n    var formatter = formats.formatters[format];\n\n    var filter = defaults.filter;\n    if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n        filter = opts.filter;\n    }\n\n    var arrayFormat;\n    if (opts.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = opts.arrayFormat;\n    } else if ('indices' in opts) {\n        arrayFormat = opts.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = defaults.arrayFormat;\n    }\n\n    if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n        throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n    }\n\n    var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n    return {\n        addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n        allowDots: allowDots,\n        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n        arrayFormat: arrayFormat,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        commaRoundTrip: !!opts.commaRoundTrip,\n        delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n        encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n        encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n        encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n        encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n        filter: filter,\n        format: format,\n        formatter: formatter,\n        serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n        skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n        sort: typeof opts.sort === 'function' ? opts.sort : null,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = normalizeStringifyOptions(opts);\n\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];\n    var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (options.sort) {\n        objKeys.sort(options.sort);\n    }\n\n    var sideChannel = getSideChannel();\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (typeof key === 'undefined' || key === null) {\n            continue;\n        }\n\n        var value = obj[key];\n\n        if (options.skipNulls && value === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            value,\n            key,\n            generateArrayPrefix,\n            commaRoundTrip,\n            options.allowEmptyArrays,\n            options.strictNullHandling,\n            options.skipNulls,\n            options.encodeDotInKeys,\n            options.encode ? options.encoder : null,\n            options.filter,\n            options.sort,\n            options.allowDots,\n            options.serializeDate,\n            options.format,\n            options.formatter,\n            options.encodeValuesOnly,\n            options.charset,\n            sideChannel\n        ));\n    }\n\n    var joined = keys.join(options.delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    if (options.charsetSentinel) {\n        if (options.charset === 'iso-8859-1') {\n            // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n            prefix += 'utf8=%26%2310003%3B' + options.delimiter;\n        } else {\n            // encodeURIComponent('✓')\n            prefix += 'utf8=%E2%9C%93' + options.delimiter;\n        }\n    }\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n    allowDots: false,\n    allowEmptyArrays: false,\n    allowPrototypes: false,\n    allowSparse: false,\n    arrayLimit: 20,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    comma: false,\n    decodeDotInKeys: false,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    duplicates: 'combine',\n    ignoreQueryPrefix: false,\n    interpretNumericEntities: false,\n    parameterLimit: 1000,\n    parseArrays: true,\n    plainObjects: false,\n    strictDepth: false,\n    strictMerge: true,\n    strictNullHandling: false,\n    throwOnLimitExceeded: false\n};\n\nvar interpretNumericEntities = function (str) {\n    return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n        return String.fromCharCode(parseInt(numberStr, 10));\n    });\n};\n\nvar parseArrayValue = function (val, options, currentArrayLength, isFlatArrayValue) {\n    if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n        if (isFlatArrayValue && options.throwOnLimitExceeded) {\n            var commaCount = 0;\n            var commaIndex = val.indexOf(',');\n            while (commaIndex > -1) {\n                commaCount += 1;\n                if (commaCount >= options.arrayLimit) {\n                    throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n                }\n                commaIndex = val.indexOf(',', commaIndex + 1);\n            }\n        }\n        return val.split(',');\n    }\n\n    if (options.throwOnLimitExceeded && currentArrayLength >= options.arrayLimit) {\n        throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n    }\n\n    return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = { __proto__: null };\n\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    cleanStr = cleanStr.replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n\n    var limit = options.parameterLimit === Infinity ? void undefined : options.parameterLimit;\n    var parts = cleanStr.split(\n        options.delimiter,\n        options.throwOnLimitExceeded && typeof limit !== 'undefined' ? limit + 1 : limit\n    );\n\n    if (options.throwOnLimitExceeded && typeof limit !== 'undefined' && parts.length > limit) {\n        throw new RangeError('Parameter limit exceeded. Only ' + limit + ' parameter' + (limit === 1 ? '' : 's') + ' allowed.');\n    }\n\n    var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n    var i;\n\n    var charset = options.charset;\n    if (options.charsetSentinel) {\n        for (i = 0; i < parts.length; ++i) {\n            if (parts[i].indexOf('utf8=') === 0) {\n                if (parts[i] === charsetSentinel) {\n                    charset = 'utf-8';\n                } else if (parts[i] === isoSentinel) {\n                    charset = 'iso-8859-1';\n                }\n                skipIndex = i;\n                i = parts.length; // The eslint settings do not allow break;\n            }\n        }\n    }\n\n    for (i = 0; i < parts.length; ++i) {\n        if (i === skipIndex) {\n            continue;\n        }\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key;\n        var val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder, charset, 'key');\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n\n            if (key !== null) {\n                val = utils.maybeMap(\n                    parseArrayValue(\n                        part.slice(pos + 1),\n                        options,\n                        isArray(obj[key]) ? obj[key].length : 0,\n                        part.indexOf('[]=') === -1\n                    ),\n                    function (encodedVal) {\n                        return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n                    }\n                );\n            }\n        }\n\n        if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n            val = interpretNumericEntities(String(val));\n        }\n\n        if (part.indexOf('[]=') > -1) {\n            val = isArray(val) ? [val] : val;\n        }\n\n        if (options.comma && isArray(val) && val.length > options.arrayLimit) {\n            val = utils.combine([], val, options.arrayLimit, options.plainObjects, options.throwOnLimitExceeded);\n        }\n\n        if (key !== null) {\n            var existing = has.call(obj, key);\n            if (existing && (options.duplicates === 'combine' || part.indexOf('[]=') > -1)) {\n                obj[key] = utils.combine(\n                    obj[key],\n                    val,\n                    options.arrayLimit,\n                    options.plainObjects,\n                    options.throwOnLimitExceeded\n                );\n            } else if (!existing || options.duplicates === 'last') {\n                obj[key] = val;\n            }\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n    var currentArrayLength = 0;\n    if (chain.length > 0 && chain[chain.length - 1] === '[]') {\n        var parentKey = chain.slice(0, -1).join('');\n        currentArrayLength = Array.isArray(val) && val[parentKey] ? val[parentKey].length : 0;\n    }\n\n    var leaf = valuesParsed ? val : parseArrayValue(val, options, currentArrayLength);\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            if (utils.isOverflow(leaf)) {\n                // leaf is already an overflow object, preserve it\n                obj = leaf;\n            } else {\n                obj = options.allowEmptyArrays && (leaf === '' || (options.strictNullHandling && leaf === null))\n                    ? []\n                    : utils.combine(\n                        [],\n                        leaf,\n                        options.arrayLimit,\n                        options.plainObjects,\n                        options.throwOnLimitExceeded\n                    );\n            }\n        } else {\n            obj = options.plainObjects ? { __proto__: null } : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot;\n            var index = parseInt(decodedRoot, 10);\n            var isValidArrayIndex = !isNaN(index)\n                && root !== decodedRoot\n                && String(index) === decodedRoot\n                && index >= 0\n                && options.parseArrays;\n            if (!options.parseArrays && decodedRoot === '') {\n                obj = { 0: leaf };\n            } else if (isValidArrayIndex && index < options.arrayLimit) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (isValidArrayIndex && options.throwOnLimitExceeded) {\n                throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n            } else if (isValidArrayIndex) {\n                obj[index] = leaf;\n                utils.markOverflow(obj, index);\n            } else if (decodedRoot !== '__proto__') {\n                obj[decodedRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\n// Split a key like \"a[b][c[]]\" into ['a', '[b]', '[c[]]'] while preserving\n// qs parse semantics for depth/prototype guards.\nvar splitKeyIntoSegments = function splitKeyIntoSegments(originalKey, options) {\n    var key = options.allowDots ? originalKey.replace(/\\.([^.[]+)/g, '[$1]') : originalKey;\n\n    // depth <= 0 keeps the whole key as one segment\n    if (options.depth <= 0) {\n        if (!options.plainObjects && has.call(Object.prototype, key)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        return [key];\n    }\n\n    var segments = [];\n\n    // parent before the first '[' (may be empty if key starts with '[')\n    var first = key.indexOf('[');\n    var parent = first >= 0 ? key.slice(0, first) : key;\n    if (parent) {\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        segments[segments.length] = parent;\n    }\n\n    var n = key.length;\n    var open = first;\n    var collected = 0;\n\n    while (open >= 0 && collected < options.depth) {\n        var level = 1;\n        var i = open + 1;\n        var close = -1;\n\n        // balance nested '[' and ']' inside this bracket group using a nesting level counter\n        while (i < n && close < 0) {\n            var cu = key.charCodeAt(i);\n            if (cu === 0x5B) { // '['\n                level += 1;\n            } else if (cu === 0x5D) { // ']'\n                level -= 1;\n                if (level === 0) {\n                    close = i; // found matching close; loop will exit by condition\n                }\n            }\n            i += 1;\n        }\n\n        if (close < 0) {\n            // Unterminated group: wrap the raw remainder in one bracket pair so it stays\n            // a single literal segment (e.g. \"[[]b\" -> \"[[]b]\"); we do not infer missing ']'.\n            segments[segments.length] = '[' + key.slice(open) + ']';\n            return segments;\n        }\n\n        var seg = key.slice(open, close + 1);\n        // prototype guard for the content of this group\n        var content = seg.slice(1, -1);\n        if (!options.plainObjects && has.call(Object.prototype, content) && !options.allowPrototypes) {\n            return;\n        }\n\n        segments[segments.length] = seg;\n        collected += 1;\n\n        // find the next '[' after this balanced group\n        open = key.indexOf('[', close + 1);\n    }\n\n    if (open >= 0) {\n        if (options.strictDepth === true) {\n            throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true');\n        }\n\n        segments[segments.length] = '[' + key.slice(open) + ']';\n    }\n\n    return segments;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n    if (!givenKey) {\n        return;\n    }\n\n    var keys = splitKeyIntoSegments(givenKey, options);\n\n    if (!keys) {\n        return;\n    }\n\n    return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n    }\n\n    if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {\n        throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided');\n    }\n\n    if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    if (typeof opts.throwOnLimitExceeded !== 'undefined' && typeof opts.throwOnLimitExceeded !== 'boolean') {\n        throw new TypeError('`throwOnLimitExceeded` option must be a boolean');\n    }\n\n    var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n    var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates;\n\n    if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {\n        throw new TypeError('The duplicates option must be either combine, first, or last');\n    }\n\n    var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n    return {\n        allowDots: allowDots,\n        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n        allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n        allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n        arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n        decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,\n        decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n        delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n        // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n        depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n        duplicates: duplicates,\n        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n        interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n        parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n        parseArrays: opts.parseArrays !== false,\n        plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n        strictDepth: typeof opts.strictDepth === 'boolean' ? !!opts.strictDepth : defaults.strictDepth,\n        strictMerge: typeof opts.strictMerge === 'boolean' ? !!opts.strictMerge : defaults.strictMerge,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n        throwOnLimitExceeded: typeof opts.throwOnLimitExceeded === 'boolean' ? opts.throwOnLimitExceeded : false\n    };\n};\n\nmodule.exports = function (str, opts) {\n    var options = normalizeParseOptions(opts);\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? { __proto__: null } : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? { __proto__: null } : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    if (options.allowSparse === true) {\n        return obj;\n    }\n\n    return utils.compact(obj);\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n","/*\n * Copyright Joyent, Inc. and other Node contributors.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to permit\n * persons to whom the Software is furnished to do so, subject to the\n * following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n * USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n'use strict';\n\nvar punycode = require('punycode/');\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n/*\n * define these here so at least they only have to be\n * compiled once on the first module load.\n */\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n  portPattern = /:[0-9]*$/,\n\n  // Special case for a simple path URL\n  simplePathPattern = /^(\\/\\/?(?!\\/)[^?\\s]*)(\\?[^\\s]*)?$/,\n\n  /*\n   * RFC 2396: characters reserved for delimiting URLs.\n   * We actually just auto-escape these.\n   */\n  delims = [\n    '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'\n  ],\n\n  // RFC 2396: characters not allowed for various reasons.\n  unwise = [\n    '{', '}', '|', '\\\\', '^', '`'\n  ].concat(delims),\n\n  // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n  autoEscape = ['\\''].concat(unwise),\n  /*\n   * Characters that are never ever allowed in a hostname.\n   * Note that any invalid chars are also handled, but these\n   * are the ones that are *expected* to be seen, so we fast-path\n   * them.\n   */\n  nonHostChars = [\n    '%', '/', '?', ';', '#'\n  ].concat(autoEscape),\n  hostEndingChars = [\n    '/', '?', '#'\n  ],\n  hostnameMaxLen = 255,\n  hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n  hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n  // protocols that can allow \"unsafe\" and \"unwise\" chars.\n  unsafeProtocol = {\n    javascript: true,\n    'javascript:': true\n  },\n  // protocols that never have a hostname.\n  hostlessProtocol = {\n    javascript: true,\n    'javascript:': true\n  },\n  // protocols that always contain a // bit.\n  slashedProtocol = {\n    http: true,\n    https: true,\n    ftp: true,\n    gopher: true,\n    file: true,\n    'http:': true,\n    'https:': true,\n    'ftp:': true,\n    'gopher:': true,\n    'file:': true\n  },\n  querystring = require('qs');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && typeof url === 'object' && url instanceof Url) { return url; }\n\n  var u = new Url();\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function (url, parseQueryString, slashesDenoteHost) {\n  if (typeof url !== 'string') {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  /*\n   * Copy chrome, IE, opera backslash-handling behavior.\n   * Back slashes before the query string get converted to forward slashes\n   * See: https://code.google.com/p/chromium/issues/detail?id=25916\n   */\n  var queryIndex = url.indexOf('?'),\n    splitter = queryIndex !== -1 && queryIndex < url.indexOf('#') ? '?' : '#',\n    uSplit = url.split(splitter),\n    slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  /*\n   * trim before proceeding.\n   * This is to support parse stuff like \"  http://foo.com  \\n\"\n   */\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  /*\n   * figure out if it's got a host\n   * user@server is *always* interpreted as a hostname, and url\n   * resolution will treat //foo/bar as host=foo,path=bar because that's\n   * how the browser resolves relative URLs.\n   */\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@/]+@[^@/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) {\n\n    /*\n     * there's a hostname.\n     * the first instance of /, ?, ;, or # ends the host.\n     *\n     * If there is an @ in the hostname, then non-host chars *are* allowed\n     * to the left of the last @ sign, unless some host-ending character\n     * comes *before* the @-sign.\n     * URLs are obnoxious.\n     *\n     * ex:\n     * http://a@b@c/ => user:a@b host:c\n     * http://a@b?@c => user:a host:c path:/?@c\n     */\n\n    /*\n     * v0.12 TODO(isaacs): This is not quite how Chrome does things.\n     * Review our test case against browsers more comprehensively.\n     */\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }\n    }\n\n    /*\n     * at this point, either we have an explicit point where the\n     * auth portion cannot go past, or the last @ char is the decider.\n     */\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      /*\n       * atSign must be in auth portion.\n       * http://a@b/c@d => host:b auth:a path:/c@d\n       */\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    /*\n     * Now we have a portion which is definitely the auth.\n     * Pull that off.\n     */\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1) { hostEnd = rest.length; }\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    /*\n     * we've indicated that there is a hostname,\n     * so even if it's empty, it has to be present.\n     */\n    this.hostname = this.hostname || '';\n\n    /*\n     * if hostname begins with [ and ends with ]\n     * assume that it's an IPv6 address.\n     */\n    var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) { continue; }\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              /*\n               * we replace non-ASCII char with a temporary placeholder\n               * we need this to make sure size of hostname is not\n               * broken by replacing non-ASCII by nothing\n               */\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      /*\n       * IDNA Support: Returns a punycoded representation of \"domain\".\n       * It only converts parts of the domain name that\n       * have non-ASCII characters, i.e. it doesn't matter if\n       * you call it with a domain that already is ASCII-only.\n       */\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    /*\n     * strip [ and ] from the hostname\n     * the host field still retains them, though\n     */\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  /*\n   * now rest is set to the post-host stuff.\n   * chop off any delim chars.\n   */\n  if (!unsafeProtocol[lowerProto]) {\n\n    /*\n     * First, make 100% sure that any \"autoEscape\" chars get\n     * escaped, even if encodeURIComponent doesn't think they\n     * need to be.\n     */\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1) { continue; }\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) { this.pathname = rest; }\n  if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  // to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  /*\n   * ensure it's an object, and not a string url.\n   * If it's an obj, this is a no-op.\n   * this way, you can call url_format() on strings\n   * to clean up potentially wonky urls.\n   */\n  if (typeof obj === 'string') { obj = urlParse(obj); }\n  if (!(obj instanceof Url)) { return Url.prototype.format.call(obj); }\n  return obj.format();\n}\n\nUrl.prototype.format = function () {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n    pathname = this.pathname || '',\n    hash = this.hash || '',\n    host = false,\n    query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query && typeof this.query === 'object' && Object.keys(this.query).length) {\n    query = querystring.stringify(this.query, {\n      arrayFormat: 'repeat',\n      addQueryPrefix: false\n    });\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') { protocol += ':'; }\n\n  /*\n   * only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n   * unless they had them to begin with.\n   */\n  if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') { pathname = '/' + pathname; }\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') { hash = '#' + hash; }\n  if (search && search.charAt(0) !== '?') { search = '?' + search; }\n\n  pathname = pathname.replace(/[?#]/g, function (match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function (relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) { return relative; }\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function (relative) {\n  if (typeof relative === 'string') {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  /*\n   * hash is always overridden, no matter what.\n   * even href=\"\" will remove it.\n   */\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol') { result[rkey] = relative[rkey]; }\n    }\n\n    // urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) {\n      result.pathname = '/';\n      result.path = result.pathname;\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    /*\n     * if it's a known url protocol, then changing\n     * the protocol does weird things\n     * first, if it's not file:, then we MUST have a host,\n     * and if there was a path\n     * to begin with, then we MUST have a path.\n     * if it is file:, then the host is dropped,\n     * because that's known to be hostless.\n     * anything else is assumed to be absolute.\n     */\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift())) { }\n      if (!relative.host) { relative.host = ''; }\n      if (!relative.hostname) { relative.hostname = ''; }\n      if (relPath[0] !== '') { relPath.unshift(''); }\n      if (relPath.length < 2) { relPath.unshift(''); }\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/',\n    isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/',\n    mustEndAbs = isRelAbs || isSourceAbs || (result.host && relative.pathname),\n    removeAllDots = mustEndAbs,\n    srcPath = result.pathname && result.pathname.split('/') || [],\n    relPath = relative.pathname && relative.pathname.split('/') || [],\n    psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  /*\n   * if the url is a non-slashed url, then relative\n   * links like ../.. should be able\n   * to crawl up to the hostname, as well.  This is strange.\n   * result.protocol has already been set by now.\n   * Later on, put the first path part into the host field.\n   */\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') { srcPath[0] = result.host; } else { srcPath.unshift(result.host); }\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') { relPath[0] = relative.host; } else { relPath.unshift(relative.host); }\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = relative.host || relative.host === '' ? relative.host : result.host;\n    result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    /*\n     * it's relative\n     * throw away the existing file, and take the new path instead.\n     */\n    if (!srcPath) { srcPath = []; }\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (relative.search != null) {\n    /*\n     * just pull out the search.\n     * like href='?foo'.\n     * Put this after the other two cases because it simplifies the booleans\n     */\n    if (psychotic) {\n      result.host = srcPath.shift();\n      result.hostname = result.host;\n      /*\n       * occationaly the auth can get stuck only in host\n       * this especially happens in cases like\n       * url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n       */\n      var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.hostname = authInHost.shift();\n        result.host = result.hostname;\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    // to support http.request\n    if (result.pathname !== null || result.search !== null) {\n      result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    /*\n     * no path at all.  easy.\n     * we've already handled the other stuff above.\n     */\n    result.pathname = null;\n    // to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  /*\n   * if a url ENDs in . or .., then it must get a trailing slash.\n   * however, if it ends in anything else non-slashy,\n   * then it must NOT get a trailing slash.\n   */\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === '';\n\n  /*\n   * strip single dots, resolve double dots to parent dir\n   * if the path tries to go above the root, `up` ends up > 0\n   */\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = isAbsolute ? '' : srcPath.length ? srcPath.shift() : '';\n    result.host = result.hostname;\n    /*\n     * occationaly the auth can get stuck only in host\n     * this especially happens in cases like\n     * url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n     */\n    var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.hostname = authInHost.shift();\n      result.host = result.hostname;\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (srcPath.length > 0) {\n    result.pathname = srcPath.join('/');\n  } else {\n    result.pathname = null;\n    result.path = null;\n  }\n\n  // to support request.http\n  if (result.pathname !== null || result.search !== null) {\n    result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function () {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) { this.hostname = host; }\n};\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n","//\n// The MIT License (MIT)\n//\n// Copyright (c) 2014 Lorenzo Villani\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n//\n\n/** @module url-otpauth */\n\nvar url = require('url');\n\n//\n// Exception types\n//\n\nvar ErrorType = {\n    INVALID_ISSUER: 0,\n    INVALID_LABEL: 1,\n    INVALID_PROTOCOL: 2,\n    MISSING_ACCOUNT_NAME: 3,\n    MISSING_COUNTER: 4,\n    MISSING_ISSUER: 5,\n    MISSING_SECRET_KEY: 6,\n    UNKNOWN_OTP: 7,\n    INVALID_DIGITS: 8,\n    UNKNOWN_ALGORITHM: 9\n};\n\nvar PossibleDigits = [6, 8];\n\nvar PossibleAlgorithms = [\"SHA1\", \"SHA256\", \"SHA512\", \"MD5\"];\n\nfunction OtpauthInvalidURL(errorType) {\n    this.name = 'OtpauthInvalidURL';\n    this.message = 'Given otpauth:// URL is invalid. (Error ' + errorType + ')';\n    this.errorType = errorType;\n}\n\nOtpauthInvalidURL.prototype = new Error();\nOtpauthInvalidURL.prototype.constructor = OtpauthInvalidURL;\n\n//\n// Code\n//\n\nmodule.exports = {\n    /**\n     * Parses an OTPAuth URI.\n     *\n     * Parses an URL as described in Google Authenticator's \"KeyUriFormat\" document (see:\n     * [https://code.google.com/p/google-authenticator/wiki/KeyUriFormat](https://code.google.com/p/google-authenticator/wiki/KeyUriFormat))\n     * and returns an object that contains the following properties:\n     *\n     * - `account`: The account name.\n     * - `digits`: The number of digits of the resulting OTP. Default is 6 (six).\n     * - `key`: The shared key in Base32 encoding.\n     * - `issuer`: Provider or service this account is associated with. The default is the empty\n     *   string.\n     * - `type`: Either the string `hotp` or `totp`.\n     *\n     * OTP of type `hotp` have an additional `counter` field which contains the start value for the\n     * HOTP counter. In all other cases this field is missing from the resulting object.\n     *\n     * @param rawUrl {string} The URI to parse.\n     * @returns {Object} An object with properties described above.\n     */\n    parse: function parse(rawUrl) {\n        var ret = {};\n\n        //\n        // Protocol\n        //\n\n        var parsed = url.parse(rawUrl, true);\n\n        if (parsed.protocol !== 'otpauth:') {\n            throw new OtpauthInvalidURL(ErrorType.INVALID_PROTOCOL);\n        }\n\n        //\n        // Type\n        //\n\n        var otpAlgo = decodeURIComponent(parsed.host);\n\n        if (otpAlgo !== 'hotp' && otpAlgo !== 'totp') {\n            throw new OtpauthInvalidURL(ErrorType.UNKNOWN_OTP);\n        }\n\n        ret.type = otpAlgo;\n\n        //\n        // Label (contains account name, may contain issuer)\n        //\n\n        var label = decodeURIComponent(parsed.pathname.substring(1));\n        var labelComponents = label.split(':');\n        var issuer = '';\n        var account = '';\n\n        if (labelComponents.length === 1) {\n            account = labelComponents[0];\n        } else if (labelComponents.length === 2) {\n            issuer = labelComponents[0];\n            account = labelComponents[1];\n        } else {\n            throw new OtpauthInvalidURL(ErrorType.INVALID_LABEL);\n        }\n\n        if (account.length < 1) {\n            throw new OtpauthInvalidURL(ErrorType.MISSING_ACCOUNT_NAME);\n        }\n\n        if ((labelComponents.length === 2) && (issuer.length < 1)) {\n            throw new OtpauthInvalidURL(ErrorType.INVALID_ISSUER);\n        }\n\n        ret.account = account;\n\n        //\n        // Parameters\n        //\n\n        var parameters = parsed.query;\n\n        // Secret key\n        if (!parameters.secret) {\n            throw new OtpauthInvalidURL(ErrorType.MISSING_SECRET_KEY);\n        }\n\n        ret.key = parameters.secret;\n\n        // Issuer\n        if (parameters.issuer && issuer && (parameters.issuer !== issuer)) {\n            // If present, it must be equal to the \"issuer\" specified in the label.\n            throw new OtpauthInvalidURL(ErrorType.INVALID_ISSUER);\n        }\n\n        ret.issuer = issuer || parameters.issuer || '';\n\n        // OTP digits\n        ret.digits = 6;  // Default is 6\n\n        if (parameters.digits) {\n            var parsedDigits = parseInt(parameters.digits, 10);\n            if (PossibleDigits.indexOf(parsedDigits) == -1) {\n                throw new OtpauthInvalidURL(ErrorType.INVALID_DIGITS);\n            } else {\n                ret.digits = parsedDigits;\n            }\n        }\n\n        // Algorithm to create hash\n        if (parameters.algorithm) {\n            if (PossibleAlgorithms.indexOf(parameters.algorithm) == -1) {\n                throw new OtpauthInvalidURL(ErrorType.UNKNOWN_ALGORITHM);\n            } else {\n                // Optional 'algorithm' parameter.\n                ret.algorithm = parameters.algorithm;\n            }\n        }\n\n        // Period (only for TOTP)\n        if (otpAlgo === 'totp') {\n            // Optional 'period' parameter for TOTP.\n            if (parameters.period) {\n                ret.period = parseFloat(parameters.period);\n            }\n        }\n\n        // Counter (only for HOTP)\n        if (otpAlgo === 'hotp') {\n            if (!parameters.counter) {\n                // We require the 'counter' parameter for HOTP.\n                throw new OtpauthInvalidURL(ErrorType.MISSING_COUNTER);\n            } else {\n                ret.counter = parseInt(parameters.counter, 10);\n            }\n        }\n\n        return ret;\n    },\n\n    /**\n     * Enumeration of all error types raised by `OtpauthInvalidURL`.\n     */\n    ErrorType: ErrorType,\n\n    /**\n     * Exception thrown whenever there's an error deconstructing an 'otpauth://' URI.\n     *\n     * You can query the `errorType` attribute to obtain the exact reason for failure. The\n     * `errorType` attributes contains a value from the `ErrorType` enumeration.\n     */\n    OtpauthInvalidURL: OtpauthInvalidURL\n};\n","h2 Enable Two-factor authentication\n\nbutton#g-user-otp-initialize-enable.btn.btn-primary(type=\"submit\")\n  |  Begin\n","h2 Enable Two-factor authentication\n\nol.g-account-otp-steps\n  li.g-account-otp-step\n    h3 Install an authenticator app on your mobile device.\n    div.\n      There are many compatible apps, including, but not limited to\n      #[a(href='https://support.google.com/accounts/answer/1066447?hl=en', target='_blank', rel='noopener') Google Authenticator],\n      #[a(href='https://guide.duo.com/third-party-accounts', target='_blank', rel='noopener') Duo Mobile], and\n      #[a(href='https://freeotp.github.io/', target='_blank', rel='noopener') FreeOTP].\n  li.g-account-otp-step\n    h3 Enter your key into the authenticator app\n    .g-account-otp-scan-qr\n      h4 Scan with your mobile device's camera:\n      canvas#g-user-otp-qr\n    .g-account-otp-enter-manual\n      h4 Advanced Users:\n        span You may enter your information manually, instead:\n      table\n        tr\n          th Service\n          td\n            code= totpInfo.issuer\n        tr\n          th Account\n          td\n            code= totpInfo.account\n        tr\n          th Key\n          td\n            // Split into 4-character chunks for human readability\n            code= totpInfo.key.match(/.{1,4}/g).join('-')\n        tr\n          th Type\n          td\n            span #[code Time-based] / #[code TOTP]\n  li.g-account-otp-step\n    h3 Enter the authentication code from your app\n    input#g-user-otp-token(type='text', minlength=6, maxlength=6, placeholder='Your 6-digit code')\n    div\n      span#g-account-otp-error.g-validation-failed-message\n.g-user-otp-footer\n  a#g-user-otp-cancel-enable.btn.btn-default Cancel\n  button#g-user-otp-finalize-enable.btn.btn-primary.btn-success(type=\"submit\") Enable Two-Factor\n","h2.g-user-otp-heading-enable Two-factor authentication is currently enabled\n\nh3.g-user-otp-heading-disable Disable Two-factor authentication\n\nbutton#g-user-otp-disable.btn.btn-primary(type=\"submit\")\n  |  Disable\n","import QRCode from 'qrcode';\nimport OTPAuth from 'url-otpauth';\n\nimport View from '@girder/core/views/View';\n\nimport UserOtpBeginTemplate from '@girder/core/templates/widgets/userOtpBegin.pug';\nimport UserOtpEnableTemplate from '@girder/core/templates/widgets/userOtpEnable.pug';\nimport UserOtpDisableTemplate from '@girder/core/templates/widgets/userOtpDisable.pug';\nimport '@girder/core/stylesheets/widgets/userOtpManagementWidget.styl';\n\nconst UserOtpManagementWidget = View.extend({\n    events: {\n        'click #g-user-otp-initialize-enable': function () {\n            this.model.initializeEnableOtp()\n                .done((totpUri) => {\n                    this.totpUri = totpUri;\n                    this.render();\n                });\n        },\n        'click #g-user-otp-finalize-enable': function () {\n            const otpToken = this.$('#g-user-otp-token').val().trim();\n\n            if (otpToken.length !== 6) {\n                this.$('#g-account-otp-error').text('Enter a 6-digit token.');\n                return;\n            } else {\n                this.$('#g-account-otp-error').text('');\n            }\n\n            this.model.finializeEnableOtp(otpToken)\n                .done(() => {\n                    this.totpUri = undefined;\n                    this.render();\n                })\n                .fail((err) => {\n                    this.$('#g-account-otp-error').text(err.responseJSON.message);\n                });\n        },\n        'click #g-user-otp-cancel-enable': function () {\n            this.totpUri = undefined;\n            this.render();\n        },\n        'click #g-user-otp-disable': function () {\n            this.model.disableOtp()\n                .done(() => {\n                    this.render();\n                });\n        }\n    },\n\n    /**\n     * A widget for listing and editing API keys for a user.\n     *\n     * @param settings.user {UserModel} The user whose keys to show.\n     */\n    initialize: function (settings) {\n        this.model = settings.user;\n    },\n\n    render: function () {\n        if (!this.model.get('otp')) {\n            // OTP not set up\n            if (!this.totpUri) {\n                // Enablement has not started\n                this._renderBegin();\n            } else {\n                // Enablement is pending\n                this._renderConfirmation();\n            }\n        } else {\n            // OTP already enabled\n            this._renderDisable();\n        }\n\n        return this;\n    },\n\n    _renderBegin: function () {\n        this.$el.html(UserOtpBeginTemplate());\n    },\n\n    _renderConfirmation: function () {\n        // The OTP URI format is defined at https://github.com/google/google-authenticator/wiki/Key-Uri-Format\n        const totpInfo = OTPAuth.parse(this.totpUri);\n\n        this.$el.html(UserOtpEnableTemplate({\n            totpInfo: totpInfo\n        }));\n\n        // Render the OTP as a QR code\n        QRCode.toCanvas(\n            this.$('#g-user-otp-qr')[0],\n            this.totpUri,\n            {\n                errorCorrectionLevel: 'H'\n            }\n        );\n    },\n\n    _renderDisable: function () {\n        this.$el.html(UserOtpDisableTemplate());\n    }\n});\n\nexport default UserOtpManagementWidget;\n",".g-account-header\n  .g-user-name.g-body-title= user.name()\n  .g-user-description.g-body-subtitle= user.get('login')\n\nul.g-account-tabs.nav.nav-tabs\n  li.active\n    a(href=\"#g-account-tab-info\", data-toggle=\"tab\", name=\"info\")\n      i.icon-info-circled\n      |  Profile\n  li\n    a(href=\"#g-account-tab-password\", data-toggle=\"tab\", name=\"password\")\n      i.icon-lock\n      | Password\n  li\n    a(href=\"#g-account-tab-api-keys\", data-toggle=\"tab\", name=\"apikeys\")\n      i.icon-key-inv\n      | API keys\n  li\n    a(href=\"#g-account-tab-otp\", data-toggle=\"tab\", name=\"otp\")\n      i.icon-mobile\n      | Two-factor authentication\n\n.tab-content\n  #g-account-tab-info.tab-pane.active\n    .g-user-info-container.g-user-settings-container\n      form#g-user-info-form(role=\"form\")\n        .form-group\n          label(for=\"g-login\") Login\n          p.form-control-static= user.get('login')\n        .form-group\n          label(for=\"g-email\") Email\n          input#g-email.input-sm.form-control(type=\"text\", value=user.get('email'))\n        .form-group\n          label(for=\"g-firstName\") First name\n          input#g-firstName.input-sm.form-control(type=\"text\", value=user.get('firstName'))\n        .form-group\n          label(for=\"g-lastName\") Last name\n          input#g-lastName.input-sm.form-control(type=\"text\", value=user.get('lastName'))\n        if getCurrentUser().get('admin')\n          .form-group\n            label(for=\"g-admin\") User is site admin\n            input#g-admin.input-sm-form-control(type=\"checkbox\", checked=user.get('admin'))\n        button.btn.btn-default.btn-sm(type=\"submit\")\n          i.icon-edit\n          | Save\n        #g-user-info-error-msg.g-validation-failed-message\n\n  #g-account-tab-password.tab-pane\n    .g-password-change-container.g-user-settings-container\n      form#g-password-change-form(role=\"form\")\n        if temporaryToken\n          input#g-password-old.input-sm.form-control(type=\"hidden\", value=temporaryToken)\n        else if isCurrentUser\n          .form-group\n            label(for=\"g-password-old\") Current password\n            input#g-password-old.input-sm.form-control(type=\"password\", placeholder=\"Enter current password\")\n        .form-group\n          label(for=\"g-password-new\") New password\n          input#g-password-new.input-sm.form-control(type=\"password\", placeholder=\"Enter new password\")\n        .form-group\n          label(for=\"g-password-retype\") Retype new password\n          input#g-password-retype.input-sm.form-control(type=\"password\", placeholder=\"Retype new password\")\n        button.btn.btn-default.btn-sm(type=\"submit\")\n          i.icon-lock\n          | Change\n        #g-password-change-error-msg.g-validation-failed-message\n  #g-account-tab-api-keys.tab-pane\n    .g-api-keys-container.g-user-settings-container\n      .g-api-keys-info-text.\n        API keys can be used to grant limited or total access to client applications on your behalf.\n        Clients can use these keys to create tokens that can be used for authenticated access. You may\n        limit the tokens created with a given key to certain authorization scopes, or allow the tokens\n        complete access to everything your user can do. You may also choose the maximum time that\n        tokens created with a given key will last before expiration. If you do not specify a duration,\n        the default expiration for user login sessions will be used.\n\n      .g-api-keys-list-container\n  #g-account-tab-otp.tab-pane\n    .g-user-settings-container\n      .g-account-otp-info-text.\n        Two-factor authentication adds another level of authentication to your account log-in.\n\n      .g-account-otp-container\n","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport ApiKeyListWidget from '@girder/core/views/widgets/ApiKeyListWidget';\nimport UserOtpManagementWidget from '@girder/core/views/widgets/UserOtpManagementWidget';\nimport router from '@girder/core/router';\nimport UserModel from '@girder/core/models/UserModel';\nimport View from '@girder/core/views/View';\nimport { AccessType } from '@girder/core/constants';\nimport events from '@girder/core/events';\nimport { getCurrentUser } from '@girder/core/auth';\nimport { cancelRestRequests } from '@girder/core/rest';\n\nimport UserAccountTemplate from '@girder/core/templates/body/userAccount.pug';\n\nimport '@girder/core/stylesheets/body/userAccount.styl';\n\nimport 'bootstrap/js/tab';\n\n/**\n * This is the view for the user account (profile) page.\n */\nvar UserAccountView = View.extend({\n    events: {\n        'submit #g-user-info-form': function (event) {\n            event.preventDefault();\n            this.$('#g-user-info-error-msg').empty();\n\n            var params = {\n                email: this.$('#g-email').val(),\n                firstName: this.$('#g-firstName').val(),\n                lastName: this.$('#g-lastName').val()\n            };\n\n            if (this.$('#g-admin').length > 0) {\n                params.admin = this.$('#g-admin').is(':checked');\n            }\n\n            this.user.set(params);\n\n            this.user.off('g:error').on('g:error', function (err) {\n                var msg = err.responseJSON.message;\n                this.$('#g-' + err.responseJSON.field).trigger('focus');\n                this.$('#g-user-info-error-msg').text(msg);\n            }, this).off('g:saved')\n                .on('g:saved', function () {\n                    events.trigger('g:alert', {\n                        icon: 'ok',\n                        text: 'Info saved.',\n                        type: 'success',\n                        timeout: 4000\n                    });\n                }, this).save();\n        },\n        'submit #g-password-change-form': function (event) {\n            event.preventDefault();\n            this.$('#g-password-change-error-msg').empty();\n\n            if (this.$('#g-password-new').val() !==\n                    this.$('#g-password-retype').val()) {\n                this.$('#g-password-change-error-msg').text(\n                    'Passwords do not match, try again.'\n                );\n                this.$('#g-password-retype,#g-password-new').val('');\n                this.$('#g-password-new').trigger('focus');\n                return;\n            }\n\n            this.user.off('g:error').on('g:error', function (err) {\n                var msg = err.responseJSON.message;\n                this.$('#g-password-change-error-msg').text(msg);\n            }, this).off('g:passwordChanged')\n                .on('g:passwordChanged', function () {\n                    events.trigger('g:alert', {\n                        icon: 'ok',\n                        text: 'Password changed.',\n                        type: 'success',\n                        timeout: 4000\n                    });\n                    this.$('#g-password-old,#g-password-new,#g-password-retype').val('');\n                }, this);\n\n            // here and in the template, an admin user who wants to change their\n            //   own password is intentionally forced to re-enter their old\n            //   password\n            if (this.isCurrentUser) {\n                this.user.changePassword(\n                    this.$('#g-password-old').val(),\n                    this.$('#g-password-new').val()\n                );\n            } else {\n                this.user.adminChangePassword(this.$('#g-password-new').val());\n            }\n        }\n    },\n\n    initialize: function (settings) {\n        this.tab = settings.tab || 'info';\n        this.user = settings.user || getCurrentUser();\n        this.isCurrentUser = getCurrentUser() &&\n            settings.user.id === getCurrentUser().id;\n\n        this.model = this.user;\n        this.temporary = settings.temporary;\n\n        if (!this.user || this.user.getAccessLevel() < AccessType.WRITE) {\n            router.navigate('', { trigger: true });\n            return;\n        }\n\n        cancelRestRequests('fetch');\n\n        this.apiKeyListWidget = new ApiKeyListWidget({\n            user: this.user,\n            parentView: this\n        });\n\n        this.userOtpManagementWidget = new UserOtpManagementWidget({\n            user: this.user,\n            parentView: this\n        });\n\n        this.render();\n    },\n\n    render: function () {\n        if (getCurrentUser() === null) {\n            router.navigate('', { trigger: true });\n            return;\n        }\n\n        this.$el.html(UserAccountTemplate({\n            user: this.model,\n            isCurrentUser: this.isCurrentUser,\n            getCurrentUser: getCurrentUser,\n            temporaryToken: this.temporary\n        }));\n\n        _.each($('.g-account-tabs>li>a'), function (el) {\n            var tabLink = $(el);\n            tabLink.tab().on('shown.bs.tab', (e) => {\n                this.tab = $(e.currentTarget).attr('name');\n                router.navigate('useraccount/' + this.model.id + '/' + this.tab);\n\n                if (this.tab === 'apikeys') {\n                    this.apiKeyListWidget.setElement(\n                        this.$('.g-api-keys-list-container')).render();\n                } else if (this.tab === 'otp') {\n                    this.userOtpManagementWidget\n                        .setElement(this.$('.g-account-otp-container'))\n                        .render();\n                }\n            });\n\n            if (tabLink.attr('name') === this.tab) {\n                tabLink.tab('show');\n            }\n        }, this);\n\n        return this;\n    }\n}, {\n    /**\n     * Helper function for fetching the user by id, then render the view.\n     */\n    fetchAndInit: function (id, tab) {\n        var user = new UserModel();\n        user.set({ _id: id }).on('g:fetched', function () {\n            events.trigger('g:navigateTo', UserAccountView, {\n                user: user,\n                tab: tab\n            });\n        }, this).on('g:error', function () {\n            router.navigate('', { trigger: true });\n        }, this).fetch();\n    }\n});\n\nexport default UserAccountView;\n","import _ from 'underscore';\n\nimport View from '@girder/core/views/View';\nimport { restRequest } from '@girder/core/rest';\n\nimport PaginateWidgetTemplate from '@girder/core/templates/widgets/paginateWidget.pug';\nimport SearchFieldWidget from '@girder/core/views/widgets/SearchFieldWidget';\n/**\n * This widget is used to provide a consistent widget for iterating amongst\n * pages of a list of search results (using a search mode, a query, an unique type,\n * and a limit).\n */\n\nvar SearchPaginateWidget = View.extend({\n    events: {\n        'click .g-page-next:not(.disabled)': function () {\n            this._updateHasNextPage(true);\n        },\n        'click .g-page-prev:not(.disabled)': function () {\n            this._updateHasPreviousPage(true);\n        }\n    },\n\n    initialize: function (settings) {\n        this._type = settings.type;\n        this._query = settings.query;\n        this._mode = settings.mode;\n        this._limit = settings.limit;\n\n        this._offset = 0;\n        this._currentPage = 0;\n        this._hasNextPage = false;\n        this._hasPreviousPage = false;\n\n        this.results = null;\n\n        this._updateHasNextPage();\n    },\n\n    render: function () {\n        this.$el.html(PaginateWidgetTemplate({\n            collection: this\n        }));\n\n        this.$('.g-page-next').girderEnable(this._hasNextPage);\n        this.$('.g-page-prev').girderEnable(this._hasPreviousPage);\n\n        if (!this._hasNextPage && !this._hasPreviousPage) {\n            this.$el.hide();\n        } else {\n            this.$el.show();\n        }\n\n        return this;\n    },\n\n    pageNum: function () {\n        return this._currentPage;\n    },\n\n    _updateHasPreviousPage: function (update = false) {\n        if (this._currentPage) {\n            if (update) {\n                return this._fetchPreviousPage(update)\n                    .done(() => {\n                        return this._fetchPreviousPage();\n                    });\n            } else {\n                return this._fetchPreviousPage();\n            }\n        } else {\n            return this._fetchPreviousPage();\n        }\n    },\n\n    _updateHasNextPage: function (update = false) {\n        if (update) {\n            return this._fetchNextPage(update)\n                .done(() => {\n                    return this._fetchNextPage();\n                });\n        } else {\n            return this._fetchNextPage();\n        }\n    },\n\n    _fetchPreviousPage: function (update = false) {\n        var offset = this._limit * (this._currentPage - 1);\n        if (offset < 0) {\n            this._hasPreviousPage = false;\n            this.render();\n        } else {\n            return this._fetch(offset)\n                .done((results) => {\n                    var result = results[this._type];\n                    if (result.length) {\n                        this._hasPreviousPage = true;\n                        if (update) {\n                            this.results = result;\n                            this.trigger('g:changed');\n                            this._currentPage--;\n                            this._updateHasNextPage();\n                        }\n                    } else {\n                        this._hasPreviousPage = false;\n                    }\n                    this.render();\n                });\n        }\n    },\n\n    _fetchNextPage: function (update = false) {\n        var offset = this._limit * (this._currentPage + 1);\n        return this._fetch(offset)\n            .done((results) => {\n                var result = results[this._type];\n                if (result.length) {\n                    this._hasNextPage = true;\n                    if (update) {\n                        this.results = result;\n                        this.trigger('g:changed');\n                        this._currentPage++;\n                        this._updateHasPreviousPage();\n                    }\n                } else {\n                    this._hasNextPage = false;\n                }\n                this.render();\n            });\n    },\n\n    _fetch: function (offset) {\n        return restRequest({\n            url: 'resource/search',\n            data: {\n                q: this._query,\n                mode: this._mode,\n                types: JSON.stringify(_.intersection(\n                    [this._type],\n                    SearchFieldWidget.getModeTypes(this._mode))\n                ),\n                limit: this._limit,\n                offset: offset\n            }\n        });\n    }\n});\n\nexport default SearchPaginateWidget;\n",".g-search-results-header-container\n  .g-search-results-title-container\n    i.g-search-results-title-element.icon-search\n    span.g-search-results-title.g-search-results-title-element Results : #{query}\n  .g-search-results-header\n    .g-search-results-advance-search\n\n.g-search-results-container\n\n.g-search-pending\n  i.icon-spin4.animate-spin\n\n.g-search-no-results(style='display: none;')\n  i.icon-block\n  |  No results found\n",".g-search-result-type-header-container\n  i.g-search-result-type-header.g-search-result-type-icon(class=`icon-${icon}`)\n  .g-search-result-type-header.g-search-results-type-title\n    | #{collectionName}\nul.g-search-results-type\n  each element in results\n    li.g-search-result\n      a(href=`#${type}/${element._id}`)\n        if type === 'user'\n          | #{element.firstName} #{element.lastName} (#{element.login})\n        else\n          | #{element.name}\n.g-search-results-paginate(id=`${type}Paginate`)\n","import _ from 'underscore';\n\nimport View from '@girder/core/views/View';\nimport { restRequest } from '@girder/core/rest';\nimport SearchPaginateWidget from '@girder/core/views/widgets/SearchPaginateWidget';\nimport SearchFieldWidget from '@girder/core/views/widgets/SearchFieldWidget';\n\nimport SearchResultsTemplate from '@girder/core/templates/body/searchResults.pug';\nimport SearchResultsTypeTemplate from '@girder/core/templates/body/searchResultsType.pug';\nimport '@girder/core/stylesheets/body/searchResultsList.styl';\n\n/**\n * This view display all the search results by instantiating a subview\n * per each type found.\n */\nvar SearchResultsView = View.extend({\n    initialize: function (settings) {\n        this._query = settings.query || '';\n        this._mode = settings.mode || 'text';\n\n        this._sizeOneElement = 28;\n        this.pageLimit = 10;\n\n        this._request = restRequest({\n            url: 'resource/search',\n            data: {\n                q: this._query,\n                mode: this._mode,\n                types: JSON.stringify(SearchFieldWidget.getModeTypes(this._mode)),\n                limit: this.pageLimit\n            }\n        });\n        this.render();\n    },\n\n    /**\n     * Return a consistent and semantically-meaningful type ordering.\n     */\n    _getTypeOrdering: function (resultTypes) {\n        // This ordering places hopefully-more relevant types first\n        const builtinOrdering = ['collection', 'folder', 'item', 'group', 'user'];\n\n        // _.intersection will use the ordering of its first argument\n        const orderedKnownTypes = _.intersection(builtinOrdering, resultTypes);\n        const orderedUnknownTypes =  _.difference(resultTypes, builtinOrdering).sort();\n\n        return orderedKnownTypes.concat(orderedUnknownTypes);\n    },\n\n    render: function () {\n        this.$el.html(SearchResultsTemplate({\n            query: this._query\n        }));\n        this._subviews = {};\n\n        this._request\n            .done((results) => {\n                this.$('.g-search-pending').hide();\n\n                const resultTypes =  _.keys(results);\n                const orderedTypes = this._getTypeOrdering(resultTypes);\n                _.each(orderedTypes, (type) => {\n                    if (results[type].length) {\n                        this._subviews[type] = new SearchResultsTypeView({\n                            parentView: this,\n                            query: this._query,\n                            mode: this._mode,\n                            type: type,\n                            limit: this.pageLimit,\n                            initResults: results[type],\n                            sizeOneElement: this._sizeOneElement\n                        })\n                            .render();\n                        this._subviews[type].$el\n                            .appendTo(this.$('.g-search-results-container'));\n                    }\n                });\n\n                if (_.isEmpty(this._subviews)) {\n                    this.$('.g-search-no-results').show();\n                }\n            });\n\n        return this;\n    }\n});\n\n/**\n * This subview display all the search results for one type.\n * It also contain a pagination widget that provide a consistent widget\n * for iterating amongst pages of a list of search results.\n */\nvar SearchResultsTypeView = View.extend({\n    className: 'g-search-results-type-container',\n\n    initialize: function (settings) {\n        this._query = settings.query;\n        this._mode = settings.mode;\n        this._type = settings.type;\n        this._initResults = settings.initResults || [];\n        this._pageLimit = settings.limit || 10;\n        this._sizeOneElement = settings.sizeOneElement || 30;\n\n        this._paginateWidget = new SearchPaginateWidget({\n            parentView: this,\n            type: this._type,\n            query: this._query,\n            mode: this._mode,\n            limit: this._pageLimit\n        })\n            .on('g:changed', () => {\n                this._results = this._paginateWidget.results;\n                this.render();\n            });\n\n        this._results = this._initResults;\n    },\n\n    _getTypeName: function (type) {\n        const names = {\n            collection: 'Collections',\n            group: 'Groups',\n            user: 'Users',\n            folder: 'Folders',\n            item: 'Items'\n        };\n        return names[type] || type;\n    },\n\n    _getTypeIcon: function (type) {\n        const icons = {\n            user: 'user',\n            group: 'users',\n            collection: 'sitemap',\n            folder: 'folder',\n            item: 'doc-text-inv'\n        };\n        return icons[type] || 'icon-attention-alt';\n    },\n\n    render: function () {\n        this.$el.html(SearchResultsTypeTemplate({\n            results: this._results,\n            collectionName: this._getTypeName(this._type),\n            type: this._type,\n            icon: this._getTypeIcon(this._type)\n        }));\n\n        /* This size of the results list cannot be known until after the fetch completes. And we don't want to set\n        the 'min-height' to the max results size, because we'd frequently have lots of whitespace for short result\n        lists. Do not try to move that set in stylesheet.\n        */\n        this.$('.g-search-results-type').css('min-height', `${this._initResults.length * this._sizeOneElement}px`);\n        this._paginateWidget\n            .setElement(this.$(`#${this._type}Paginate`))\n            .render();\n\n        return this;\n    }\n});\n\nexport default SearchResultsView;\n","import router from '@girder/core/router';\nimport events from '@girder/core/events';\nimport eventStream from '@girder/core/utilities/EventStream';\nimport { getCurrentUser, setCurrentUser } from '@girder/core/auth';\nimport { restRequest } from '@girder/core/rest';\n\n/**\n * Admin\n */\nimport AdminView from '@girder/core/views/body/AdminView';\n\n/**\n * Assetstores\n */\nimport AssetstoresView from '@girder/core/views/body/AssetstoresView';\n\n/**\n * Collections\n */\nimport CollectionsView from '@girder/core/views/body/CollectionsView';\n\n/**\n * Collection\n */\nimport CollectionView from '@girder/core/views/body/CollectionView';\n\n/**\n * Folder\n */\nimport FolderView from '@girder/core/views/body/FolderView';\n\n/**\n * FrontPage\n */\nimport FrontPageView from '@girder/core/views/body/FrontPageView';\n\n/**\n * Groups\n */\nimport GroupsView from '@girder/core/views/body/GroupsView';\n\n/**\n * Group\n */\nimport GroupView from '@girder/core/views/body/GroupView';\n\n/**\n * Item\n */\nimport ItemView from '@girder/core/views/body/ItemView';\n\n/**\n * Plugins\n */\nimport PluginsView from '@girder/core/views/body/PluginsView';\nimport UsersView from '@girder/core/views/body/UsersView';\n\n/**\n * SystemConfiguration\n */\nimport SystemConfigurationView from '@girder/core/views/body/SystemConfigurationView';\n\n/**\n * UserAccount\n */\nimport UserAccountView from '@girder/core/views/body/UserAccountView';\nimport UserModel from '@girder/core/models/UserModel';\n\n/**\n * User\n */\nimport UserView from '@girder/core/views/body/UserView';\n\n/**\n * SearchResults\n */\nimport SearchResultsView from '@girder/core/views/body/SearchResultsView';\nrouter.route('admin', 'admin', function () {\n    events.trigger('g:navigateTo', AdminView);\n});\nrouter.route('assetstores', 'assetstores', function (params) {\n    events.trigger('g:navigateTo', AssetstoresView, {\n        assetstoreEdit: params.dialog === 'assetstoreedit' ? params.dialogid : false\n    });\n});\nrouter.route('assetstore/:id/import', 'assetstoreImport', function (assetstoreId) {\n    AssetstoresView.import(assetstoreId);\n});\nrouter.route('collections', 'collections', function (params) {\n    events.trigger('g:navigateTo', CollectionsView, params || {});\n    events.trigger('g:highlightItem', 'CollectionsView');\n});\nrouter.route('collection/:id', 'collectionAccess', function (cid, params) {\n    CollectionView.fetchAndInit(cid, {\n        access: params.dialog === 'access',\n        edit: params.dialog === 'edit',\n        folderCreate: params.dialog === 'foldercreate',\n        dialog: params.dialog\n    });\n});\nrouter.route('collection/:id/folder/:id', 'collectionFolder', function (cid, folderId, params) {\n    CollectionView.fetchAndInit(cid, {\n        folderId: folderId,\n        upload: params.dialog === 'upload',\n        access: params.dialog === 'access',\n        edit: params.dialog === 'edit',\n        folderAccess: params.dialog === 'folderaccess',\n        folderCreate: params.dialog === 'foldercreate',\n        folderEdit: params.dialog === 'folderedit',\n        itemCreate: params.dialog === 'itemcreate'\n    });\n});\nrouter.route('folder/:id', 'folder', function (id, params) {\n    FolderView.fetchAndInit(id, {\n        upload: params.dialog === 'upload',\n        folderAccess: params.dialog === 'folderaccess',\n        folderCreate: params.dialog === 'foldercreate',\n        folderEdit: params.dialog === 'folderedit',\n        itemCreate: params.dialog === 'itemcreate'\n    });\n});\nrouter.route('', 'index', function () {\n    events.trigger('g:navigateTo', FrontPageView);\n});\nrouter.route('groups', 'groups', function (params) {\n    events.trigger('g:navigateTo', GroupsView, params || {});\n    events.trigger('g:highlightItem', 'GroupsView');\n});\nrouter.route('group/:id', 'groupView', function (groupId, params) {\n    GroupView.fetchAndInit(groupId, {\n        edit: params.dialog === 'edit'\n    });\n});\nrouter.route('group/:id/:tab', 'groupView', function (groupId, tab, params) {\n    GroupView.fetchAndInit(groupId, {\n        edit: params.dialog === 'edit',\n        tab: tab\n    });\n});\nrouter.route('item/:id', 'item', function (itemId, params) {\n    ItemView.fetchAndInit(itemId, {\n        edit: params.dialog === 'itemedit',\n        fileEdit: params.dialog === 'fileedit' ? params.dialogid : false,\n        upload: params.dialog === 'upload' ? params.dialogid : false\n    });\n});\nrouter.route('plugins', 'plugins', function () {\n    events.trigger('g:navigateTo', PluginsView);\n});\nrouter.route('settings', 'settings', function () {\n    events.trigger('g:navigateTo', SystemConfigurationView);\n});\nrouter.route('useraccount/:id/:tab', 'accountTab', function (id, tab) {\n    UserAccountView.fetchAndInit(id, tab);\n});\nrouter.route('useraccount/:id/token/:token', 'accountToken', function (id, token) {\n    UserModel.fromTemporaryToken(id, token)\n        .done(() => {\n            events.trigger('g:navigateTo', UserAccountView, {\n                user: getCurrentUser(),\n                tab: 'password',\n                temporary: token\n            });\n        }).fail(() => {\n            router.navigate('', { trigger: true });\n        });\n});\n\nrouter.route('useraccount/:id/verification/:token', 'accountVerify', function (id, token) {\n    restRequest({\n        url: `user/${id}/verification`,\n        method: 'PUT',\n        data: { token: token },\n        error: null\n    }).done((resp) => {\n        if (resp.authToken) {\n            resp.user.token = resp.authToken.token;\n            eventStream.close();\n            setCurrentUser(new UserModel(resp.user));\n            eventStream.open();\n            events.trigger('g:login-changed');\n        }\n        events.trigger('g:navigateTo', FrontPageView);\n        events.trigger('g:alert', {\n            icon: 'ok',\n            text: 'Email verified.',\n            type: 'success',\n            timeout: 4000\n        });\n    }).fail(() => {\n        events.trigger('g:navigateTo', FrontPageView);\n        events.trigger('g:alert', {\n            icon: 'cancel',\n            text: 'Could not verify email.',\n            type: 'danger',\n            timeout: 4000\n        });\n    });\n});\n\n/**\n * Users\n */\nrouter.route('users', 'users', function (params) {\n    events.trigger('g:navigateTo', UsersView, params || {});\n    events.trigger('g:highlightItem', 'UsersView');\n});\nrouter.route('user/:id', 'user', function (userId, params) {\n    UserView.fetchAndInit(userId, {\n        folderCreate: params.dialog === 'foldercreate',\n        dialog: params.dialog\n    });\n});\nrouter.route('user/:id/folder/:id', 'userFolder', function (userId, folderId, params) {\n    UserView.fetchAndInit(userId, {\n        folderId: folderId,\n        upload: params.dialog === 'upload',\n        folderAccess: params.dialog === 'folderaccess',\n        folderCreate: params.dialog === 'foldercreate',\n        folderEdit: params.dialog === 'folderedit',\n        itemCreate: params.dialog === 'itemcreate'\n    });\n});\nrouter.route('search/results', 'SearchResults', function (params) {\n    events.trigger('g:navigateTo', SearchResultsView, {\n        query: params.query,\n        mode: params.mode\n    });\n});\n","import $ from 'jquery';\nimport _ from 'underscore';\nimport Backbone from 'backbone';\nimport 'typeface-open-sans';\nimport 'bootstrap/dist/css/bootstrap.css';\nimport 'bootstrap/js/alert';\nimport '@girder/fontello/dist/css/animation.css';\nimport '@girder/fontello/dist/css/fontello.css';\n\nimport '@girder/core/utilities/jquery/girderModal';\n\nimport events from '@girder/core/events';\nimport eventStream from '@girder/core/utilities/EventStream';\nimport LayoutFooterView from '@girder/core/views/layout/FooterView';\nimport LayoutGlobalNavView from '@girder/core/views/layout/GlobalNavView';\nimport LayoutHeaderView from '@girder/core/views/layout/HeaderView';\nimport LoginView from '@girder/core/views/layout/LoginView';\nimport ProgressListView from '@girder/core/views/layout/ProgressListView';\nimport RegisterView from '@girder/core/views/layout/RegisterView';\nimport ResetPasswordView from '@girder/core/views/layout/ResetPasswordView';\nimport router from '@girder/core/router';\nimport UserModel from '@girder/core/models/UserModel';\nimport View from '@girder/core/views/View';\nimport { fetchCurrentUser, setCurrentUser, getCurrentUser } from '@girder/core/auth';\nimport { Layout } from '@girder/core/constants';\nimport { splitRoute } from '@girder/core/misc';\n\nimport AlertTemplate from '@girder/core/templates/layout/alert.pug';\nimport LayoutTemplate from '@girder/core/templates/layout/layout.pug';\n\nimport '@girder/core/routes';\n\nimport '@girder/core/stylesheets/layout/global.styl';\nimport '@girder/core/stylesheets/layout/layout.styl';\n\nvar App = View.extend({\n    /**\n     * @param {object} [settings]\n     * @param {bool} [settings.start=true] Run start after initialization\n     */\n    initialize: function (settings) {\n        this._started = false;\n        settings = settings || {};\n        this.contactEmail = settings.contactEmail || null;\n        this.privacyNoticeHref = settings.privacyNoticeHref || null;\n        this.brandName = settings.brandName || null;\n        this.bannerColor = settings.bannerColor || null;\n        this.registrationPolicy = settings.registrationPolicy || null;\n        this.enablePasswordLogin = _.has(settings, 'enablePasswordLogin') ? settings.enablePasswordLogin : true;\n\n        if (settings.start === undefined || settings.start) {\n            this.start();\n        }\n    },\n\n    /**\n     * Start the application with optional components.\n     * @param {object} [settings]\n     * @param {bool} [settings.fetch=true] Fetch the current user modal\n     * @param {bool} [settings.render=true] Render the layout after starting\n     * @param {bool} [settings.history=true] Start backbone's history api\n     * @returns {$.Deferred} A promise-like object that resolves when the app is ready\n     */\n    start: function (settings) {\n        // start is a noop if the app is already running\n        var promise = new $.Deferred().resolve(null).promise();\n        if (this._started) {\n            return promise;\n        }\n\n        // set defaults\n        settings = _.defaults(settings || {}, {\n            fetch: true,\n            render: true,\n            history: true\n        });\n\n        // define a function to be run after fetching the user model\n        var afterFetch = (user) => {\n            this._createLayout();\n\n            if (user) {\n                setCurrentUser(new UserModel(user));\n                eventStream.open();\n            }\n\n            this._started = true;\n\n            if (settings.render) {\n                this.render();\n            }\n\n            if (settings.history) {\n                Backbone.history.stop();\n                Backbone.history.start({\n                    pushState: false\n                });\n            }\n        };\n\n        // If fetching the user from the server then we return the jqxhr object\n        // from the request, otherwise just call the callback.\n        if (settings.fetch) {\n            promise = fetchCurrentUser()\n                .done(afterFetch);\n        } else {\n            afterFetch(null);\n        }\n\n        this.bindGirderEvents();\n        return promise;\n    },\n\n    /**\n     * Bind the application to the global event object.\n     */\n    bindGirderEvents: function () {\n        // Unbind any current handlers in case this happens to be called twice.\n        events.off(null, null, this);\n\n        events.on('g:navigateTo', this.navigateTo, this);\n        events.on('g:loginUi', this.loginDialog, this);\n        events.on('g:registerUi', this.registerDialog, this);\n        events.on('g:resetPasswordUi', this.resetPasswordDialog, this);\n        events.on('g:alert', this.alert, this);\n        events.on('g:login', this.login, this);\n    },\n\n    /**\n     * Create the main layout views.\n     * @private\n     */\n    _createLayout: function () {\n        this.headerView = new LayoutHeaderView({\n            parentView: this,\n            brandName: this.brandName,\n            bannerColor: this.bannerColor,\n            registrationPolicy: this.registrationPolicy\n        });\n\n        this.globalNavView = new LayoutGlobalNavView({\n            parentView: this\n        });\n\n        this.footerView = new LayoutFooterView({\n            parentView: this,\n            contactEmail: this.contactEmail,\n            privacyNoticeHref: this.privacyNoticeHref\n        });\n\n        this.progressListView = new ProgressListView({\n            eventStream: eventStream,\n            parentView: this\n        });\n\n        this.layoutRenderMap = {};\n        this.layoutRenderMap[Layout.DEFAULT] = this._defaultLayout;\n        this.layoutRenderMap[Layout.EMPTY] = this._emptyLayout;\n    },\n\n    _layout: 'default',\n\n    _defaultLayout: {\n        show: function () {\n            this.$('#g-app-header-container,#g-global-nav-container,#g-app-footer-container').show();\n            this.$('#g-app-body-container').addClass('g-default-layout');\n        },\n\n        hide: function () {\n            this.$('#g-app-header-container,#g-global-nav-container,#g-app-footer-container').hide();\n            this.$('#g-app-body-container').removeClass('g-default-layout');\n        }\n    },\n\n    _emptyLayout: {\n        show: function () {\n            this.$('#g-app-body-container').addClass('g-empty-layout');\n        },\n\n        hide: function () {\n            this.$('#g-app-body-container').removeClass('g-empty-layout');\n        }\n    },\n\n    render: function () {\n        if (!this._started) {\n            return;\n        }\n        this.$el.html(LayoutTemplate());\n\n        this.globalNavView.setElement(this.$('#g-global-nav-container')).render();\n        this.headerView.setElement(this.$('#g-app-header-container')).render();\n        this.footerView.setElement(this.$('#g-app-footer-container')).render();\n        this.progressListView.setElement(this.$('#g-app-progress-container')).render();\n\n        return this;\n    },\n\n    /**\n     * Changes the current body view to the view class specified by view.\n     * @param view The view to display in the body.\n     * @param [settings={}] Settings to pass to the view initialize() method.\n     * @param opts Additional options for navigateTo, if any.\n     */\n    navigateTo: function (view, settings, opts) {\n        this.globalNavView.deactivateAll();\n\n        settings = settings || {};\n        opts = opts || {};\n\n        if (opts.layout) {\n            if (this._layout !== opts.layout) {\n                if (_.has(this.layoutRenderMap, opts.layout)) {\n                    // set a layout if opts specifies one different from current\n                    this.layoutRenderMap[this._layout].hide.call(this, opts);\n                    this._layout = opts.layout;\n                    this.layoutRenderMap[this._layout].show.call(this, opts);\n                } else {\n                    console.error('Attempting to set unknown layout type: ' + opts.layout);\n                }\n            }\n        } else if (this._layout !== Layout.DEFAULT) {\n            // reset to default as needed when nothing specified in opts\n            this.layoutRenderMap[this._layout].hide.call(this, opts);\n            this._layout = Layout.DEFAULT;\n            this.layoutRenderMap[this._layout].show.call(this, opts);\n        }\n\n        if (view) {\n            if (this.bodyView) {\n                this.bodyView.destroy();\n            }\n\n            settings = _.extend(settings, {\n                el: this.$('#g-app-body-container'),\n                parentView: this,\n                brandName: this.brandName\n            });\n\n            /* We let the view be created in this way even though it is\n             * normally against convention.\n             */\n            this.bodyView = new view(settings); // eslint-disable-line new-cap\n\n            if (opts.renderNow) {\n                this.bodyView.render();\n            }\n        } else {\n            console.error('Undefined page.');\n        }\n        return this;\n    },\n\n    /**\n     * Close any open dialog if we are already logged in.\n     * :returns: true if we have a current user.\n     */\n    closeDialogIfUser: function () {\n        if (getCurrentUser()) {\n            $('.modal').girderModal('close');\n            return true;\n        }\n        return false;\n    },\n\n    /**\n     * Show a dialog allowing a user to login or register.\n     */\n    loginDialog: function () {\n        if (this.closeDialogIfUser()) {\n            return;\n        }\n        if (!this.loginView) {\n            this.loginView = new LoginView({\n                el: this.$('#g-dialog-container'),\n                parentView: this,\n                registrationPolicy: this.registrationPolicy,\n                enablePasswordLogin: this.enablePasswordLogin\n            });\n        }\n        this.loginView.render();\n    },\n\n    registerDialog: function () {\n        if (this.closeDialogIfUser()) {\n            return;\n        }\n        if (!this.registerView) {\n            this.registerView = new RegisterView({\n                el: this.$('#g-dialog-container'),\n                parentView: this\n            });\n        }\n        this.registerView.render();\n    },\n\n    resetPasswordDialog: function () {\n        if (this.closeDialogIfUser()) {\n            return;\n        }\n        if (!this.resetPasswordView) {\n            this.resetPasswordView = new ResetPasswordView({\n                el: this.$('#g-dialog-container'),\n                parentView: this,\n                registrationPolicy: this.registrationPolicy\n            });\n        }\n        this.resetPasswordView.render();\n    },\n\n    /**\n     * Display a brief alert on the screen with the following options:\n     *   - text: The text to be displayed\n     *   - [type]: The alert class ('info', 'warning', 'success', 'danger').\n     *             Default is 'info'.\n     *   - [icon]: An optional icon to display in the alert.\n     *   - [timeout]: How long before the alert should automatically disappear.\n     *                Default is 6000ms. Set to <= 0 to have no timeout.\n     */\n    alert: function (options) {\n        var el = $(AlertTemplate({\n            text: options.text,\n            type: options.type || 'info',\n            icon: options.icon\n        }));\n        $('#g-alerts-container').append(el);\n        el.fadeIn(500);\n\n        if (options.timeout === undefined) {\n            options.timeout = 6000;\n        }\n        if (options.timeout > 0) {\n            window.setTimeout(function () {\n                el.fadeOut(750, function () {\n                    $(this).remove();\n                });\n            }, options.timeout);\n        }\n    },\n\n    /**\n     * On login we re-render the current body view; whereas on\n     * logout, we redirect to the front page.\n     */\n    login: function () {\n        var route = splitRoute(Backbone.history.fragment).base;\n        Backbone.history.fragment = null;\n        eventStream.close();\n\n        if (getCurrentUser()) {\n            eventStream.open();\n            router.navigate(route, { trigger: true });\n        } else {\n            router.navigate('/', { trigger: true });\n        }\n    }\n});\n\nexport default App;\n","import AdminView from './AdminView';\nimport AssetstoresView, { assetstoreImportViewMap } from './AssetstoresView';\nimport CollectionView from './CollectionView';\nimport CollectionsView from './CollectionsView';\nimport FilesystemImportView from './FilesystemImportView';\nimport FolderView from './FolderView';\nimport FrontPageView from './FrontPageView';\nimport GroupView from './GroupView';\nimport GroupsView from './GroupsView';\nimport ItemView from './ItemView';\nimport PluginsView from './PluginsView';\nimport S3ImportView from './S3ImportView';\nimport SearchResultsView from './SearchResultsView';\nimport SystemConfigurationView from './SystemConfigurationView';\nimport UserAccountView from './UserAccountView';\nimport UserView from './UserView';\nimport UsersView from './UsersView';\n\nexport {\n    AdminView,\n    AssetstoresView,\n    assetstoreImportViewMap,\n    CollectionView,\n    CollectionsView,\n    FilesystemImportView,\n    FolderView,\n    FrontPageView,\n    GroupView,\n    GroupsView,\n    ItemView,\n    PluginsView,\n    S3ImportView,\n    SearchResultsView,\n    SystemConfigurationView,\n    UserAccountView,\n    UserView,\n    UsersView\n};\n","import FooterView from './FooterView';\nimport GlobalNavView from './GlobalNavView';\nimport HeaderUserView from './HeaderUserView';\nimport HeaderView from './HeaderView';\nimport LoginView from './LoginView';\nimport ProgressListView from './ProgressListView';\nimport RegisterView from './RegisterView';\nimport ResetPasswordView from './ResetPasswordView';\n\nexport {\n    FooterView,\n    GlobalNavView,\n    HeaderUserView,\n    HeaderView,\n    LoginView,\n    ProgressListView,\n    RegisterView,\n    ResetPasswordView\n};\n",".form-group\n  label.control-label= fromLabel\n  if showIcon\n    .input-group.date.g-datetime-widget-from\n      input.input-sm.form-control(type=\"text\")\n      .input-group-addon\n        span.icon-calendar\n  else\n    .input-group.date\n      input.input-sm.form-control.g-datetime-widget-from(type=\"text\")\n.form-group\n  label.control-label= toLabel\n  if showIcon\n    .input-group.date.g-datetime-widget-to\n      input.input-sm.form-control(type=\"text\")\n      .input-group-addon\n        span.icon-calendar\n  else\n    .input-group.date\n      input.input-sm.form-control.g-datetime-widget-to(type=\"text\")\n","import _ from 'underscore';\nimport moment from 'moment';\n\nimport View from '@girder/core/views/View';\n\nimport dateTimeRangeWidgetTemplate from '@girder/core/templates/widgets/dateTimeRangeWidget.pug';\n\n// Momentjs is not require()'d in the way this library expects\n// import 'eonasdan-bootstrap-datetimepicker'; // /src/js/bootstrap-datetimepicker.js'\nimport 'eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.css';\n\n/**\n * This widget provides text input fields to specify a range of dates/times.\n * That is, the first field specifies \"from\" and the second field specifies\n * \"to.\" The user chooses each date/time using a popup picker.\n */\nvar DateTimeRangeWidget = View.extend({\n\n    /**\n     * @param [settings.defaultFromDate=false] The default \"from\" date/time when\n     * not set explicitly. Set to false to have no default.\n     * @param [settings.defaultToDate=false] The default \"to\" date/time when not\n     * set explicitly. Set to false to have no default.\n     * @param [settings.showIcon=true] Whether to show calendar icons beside\n     * the input fields. When true, clicking the icon shows the popup. Otherwise,\n     * focusing the input field shows the popup.\n     * @param [settings.fromLabel='Start date'] The label text for the \"from\"\n     * input field.\n     * @param [settings.toLabel='End date'] The label text for the \"to\" input\n     * field.\n     */\n    initialize: function (settings) {\n        this.defaultFromDate = settings.defaultFromDate || false;\n        this.defaultToDate = settings.defaultToDate || false;\n        this.showIcon = _.has(settings, 'showIcon') ? settings.showIcon : true;\n        this.fromLabel = settings.fromLabel || 'Start date';\n        this.toLabel = settings.toLabel || 'End date';\n    },\n\n    render: function () {\n        this.$el.html(dateTimeRangeWidgetTemplate({\n            showIcon: this.showIcon,\n            fromLabel: this.fromLabel,\n            toLabel: this.toLabel\n        }));\n\n        // Link datetimepickers to disallow choosing range where \"from\" date is\n        // after \"to\" date\n\n        var options = {\n            showClear: true,\n            showTodayButton: true,\n            icons: {\n                time: 'icon-clock',\n                date: 'icon-calendar',\n                up: 'icon-up-open',\n                down: 'icon-down-open',\n                previous: 'icon-left-open',\n                next: 'icon-right-open',\n                clear: 'icon-trash',\n                close: 'icon-cancel',\n                today: 'icon-target'\n            }\n        };\n        options.useCurrent = 'day';\n        options.defaultDate = this.defaultFromDate;\n        this.$('.g-datetime-widget-from').datetimepicker(options);\n\n        options.useCurrent = false;\n        options.defaultDate = this.defaultToDate;\n        this.$('.g-datetime-widget-to').datetimepicker(options);\n\n        this.$('.g-datetime-widget-from').on('dp.change', (e) => {\n            var picker = this._picker('.g-datetime-widget-to');\n            picker.minDate(e.date);\n        });\n        this.$('.g-datetime-widget-to').on('dp.change', (e) => {\n            var picker = this._picker('.g-datetime-widget-from');\n            picker.maxDate(e.date);\n        });\n\n        return this;\n    },\n\n    /**\n     * Set \"from\" date/time. Argument can be an ISO 8601-formatted date string,\n     * a moment object, or a Date object. Call with null or the empty string to\n     * clear. When called with a string, the widget displays in local time.\n     *\n     * @param date From date/time to display.\n     */\n    setFromDate: function (date) {\n        this._setDate('.g-datetime-widget-from', date);\n    },\n\n    /**\n     * Set \"to\" date/time. Argument can be an ISO 8601-formatted date string,\n     * a moment object, or a Date object. Call with null or the empty string to\n     * clear. When called with a string, the widget displays in local time.\n     *\n     * @param date To date/time to display.\n     */\n    setToDate: function (date) {\n        this._setDate('.g-datetime-widget-to', date);\n    },\n\n    /*\n     * Convenience function to set date/time for a specified datetimepicker.\n     *\n     * @param [id] Element ID on which to access the datetimepicker.\n     */\n    _setDate: function (id, date) {\n        var picker = this._picker(id);\n        if (_.isEmpty(date)) {\n            picker.clear();\n        } else if (_.isString(date)) {\n            var localDate = moment.utc(date).local();\n            picker.date(localDate);\n        } else {\n            picker.date(date);\n        }\n    },\n\n    /**\n     * Get the \"from\" date/time as a moment object in UTC. Returns null if no\n     * date is set.\n     */\n    fromDate: function () {\n        return this._date('.g-datetime-widget-from');\n    },\n\n    /**\n     * Get the \"to\" date/time as a moment object in UTC. Returns null if no date\n     * is set.\n     */\n    toDate: function () {\n        return this._date('.g-datetime-widget-to');\n    },\n\n    /**\n     * Convenience function to return \"from\" the date/time as a string in UTC.\n     * Returns the empty string if no date is set.\n     */\n    fromDateString: function () {\n        return this._dateString('.g-datetime-widget-from');\n    },\n\n    /**\n     * Convenience function to return the \"to\" date/time as a string in UTC.\n     * Returns the empty string if no date is set.\n     */\n    toDateString: function () {\n        return this._dateString('.g-datetime-widget-to');\n    },\n\n    _picker: function (id) {\n        var picker = this.$(id).data('DateTimePicker');\n        return picker;\n    },\n\n    _date: function (id) {\n        var picker = this._picker(id);\n        var date = picker.date();\n        if (date !== null) {\n            date = moment(date);\n            date.utc();\n        }\n        return date;\n    },\n\n    _dateString: function (id) {\n        var date = this._date(id);\n        if (date === null) {\n            return '';\n        }\n        return date.format();\n    }\n});\n\nexport default DateTimeRangeWidget;\n","if showIcon\n  .input-group.date.g-datetime-widget\n    input.input-sm.form-control(type=\"text\")\n    span.input-group-addon\n      span.icon-calendar\nelse\n  .input-group\n    input.input-sm.form-control.g-datetime-widget(type=\"text\")\n","import _ from 'underscore';\nimport moment from 'moment';\n\nimport View from '@girder/core/views/View';\n\nimport dateTimeWidgetTemplate from '@girder/core/templates/widgets/dateTimeWidget.pug';\n\n// Momentjs is not require()'d in the way this library expects\n// import 'eonasdan-bootstrap-datetimepicker'; // /src/js/bootstrap-datetimepicker.js'\nimport 'eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.css';\n\n/**\n * This widget provides a text input field to specify a date/time. The user\n * chooses the date/time using a popup picker.\n */\nvar DateTimeWidget = View.extend({\n\n    /**\n     * @param [settings.defaultDate=false] The default date/time when not set\n     * explicitly. Set to false to have no default.\n     * @param [settings.showIcon=true] Whether to show a calendar icon beside\n     * the input field. When true, clicking the icon shows the popup. Otherwise,\n     * focusing the input field shows the popup.\n     */\n    initialize: function (settings) {\n        this.defaultDate = settings.defaultDate || false;\n        this.showIcon = _.has(settings, 'showIcon') ? settings.showIcon : true;\n    },\n\n    render: function () {\n        this.$el.html(dateTimeWidgetTemplate({\n            showIcon: this.showIcon\n        }));\n\n        this.$('.g-datetime-widget').datetimepicker({\n            showClear: true,\n            showTodayButton: true,\n            useCurrent: 'day',\n            icons: {\n                time: 'icon-clock',\n                date: 'icon-calendar',\n                up: 'icon-up-open',\n                down: 'icon-down-open',\n                previous: 'icon-left-open',\n                next: 'icon-right-open',\n                clear: 'icon-trash',\n                close: 'icon-cancel',\n                today: 'icon-target'\n            },\n            defaultDate: this.defaultDate\n        });\n\n        return this;\n    },\n\n    /**\n     * Set date/time. Argument can be an ISO 8601-formatted date string, a\n     * moment object, or a Date object. Call with null or the empty string to\n     * clear. When called with a string, the widget displays in local time.\n     *\n     * @param date Date/time to display.\n     */\n    setDate: function (date) {\n        var picker = this._picker();\n        if (_.isEmpty(date)) {\n            picker.clear();\n        } else if (_.isString(date)) {\n            var localDate = moment.utc(date).local();\n            picker.date(localDate);\n        } else {\n            picker.date(date);\n        }\n    },\n\n    /**\n     * Get the date/time as a moment object in UTC. Returns null if no date is\n     * set.\n     */\n    date: function () {\n        var picker = this._picker();\n        var date = picker.date();\n        if (date !== null) {\n            date = moment(date);\n            date.utc();\n        }\n        return date;\n    },\n\n    /**\n     * Convenience function to return the date/time as a string in UTC. Returns\n     * the empty string if no date is set.\n     */\n    dateString: function () {\n        var date = this.date();\n        if (date === null) {\n            return '';\n        }\n        return date.format();\n    },\n\n    /**\n     * Convenience function to access the datetimepicker on an element.\n     */\n    _picker: function () {\n        var picker = this.$('.g-datetime-widget').data('DateTimePicker');\n        return picker;\n    }\n});\n\nexport default DateTimeWidget;\n",".g-plugin-config-breadcrumbs\n  ol.breadcrumb\n    li\n      a.g-admin-console-link\n        i.icon-wrench\n        | Admin console\n    li\n      a.g-plugins-link\n        i.icon-puzzle\n        | Plugins\n    li.active\n      i.icon-cog\n      | #{pluginName}\n","import router from '@girder/core/router';\nimport View from '@girder/core/views/View';\n\nimport PluginConfigBreadcrumbTemplate from '@girder/core/templates/widgets/pluginConfigBreadcrumb.pug';\n\n/**\n * This widget provides a consistent breadcrumb to be displayed on the admin\n * configuration pages for plugins.\n */\nvar PluginConfigBreadcrumbWidget = View.extend({\n    events: {\n        'click a.g-admin-console-link': function () {\n            router.navigate('admin', { trigger: true });\n        },\n        'click a.g-plugins-link': function () {\n            router.navigate('plugins', { trigger: true });\n        }\n    },\n\n    initialize: function (settings) {\n        this.pluginName = settings.pluginName;\n    },\n\n    render: function () {\n        this.$el.html(PluginConfigBreadcrumbTemplate({\n            pluginName: this.pluginName\n        }));\n\n        return this;\n    }\n});\n\nexport default PluginConfigBreadcrumbWidget;\n",".g-timeline-widget-wrapper\n  .g-timeline-container\n    each segment in segments\n      .g-timeline-segment(\n          title=segment.tooltip, class=segment.class,\n          style=`left: ${segment.left}; width: ${segment.width}; ${segment.color}`)\n    each point in points\n      .g-timeline-point(\n          title=point.tooltip, class=point.class, style=`left: calc(${point.left} - 10px); ${point.color}`)\n  if startLabel !== undefined || endLabel !== undefined\n    .g-timeline-labels-container\n      if startLabel !== undefined\n        .g-timeline-start-label= startLabel\n      if endLabel !== undefined\n        .g-timeline-end-label= endLabel\n","import _ from 'underscore';\n\nimport View from '@girder/core/views/View';\n\nimport TimelineTemplate from '@girder/core/templates/widgets/timeline.pug';\n\nimport '@girder/core/stylesheets/widgets/timelineWidget.styl';\n\n/**\n * This widget displays a timeline of events. This is visualized as a line (a bar)\n * with two sorts of primitives overlaid:\n *\n * 1. Segments: spans of time, with a start and end.\n * 2. Points: a single point in time. Points always display on top of segments.\n *\n * Any number of these primitives can be displayed on the timeline, so long as they\n * are bounded between the specified startTime and endTime. The time values for\n * startTime, endTime, and for the primitives can be specified either as numeric\n * values (i.e. a relative offset in time), or as date strings that can be parsed\n * by JavaScript, or as Date objects. For obvious reasons, in a single instance of\n * this widget, it is not possible to mix the numeric/relative values with datestamp\n * values.\n */\nvar TimelineWidget = View.extend({\n    /**\n     * Initialize the timeline widget.\n     *\n     * @param settings.startTime The numeric value or timestamp representing where\n     *    the timeline should start.\n     * @param settings.endTime The numeric value or timestamp representing where\n     *    the timeline should end. Must be greater than the startTime value. All\n     *    segments and points should be bounded within the interval [startTime, endTime].\n     * @param [settings.numeric=false] If the time values being passed in are simply\n     *    relative, scalar values (e.g. number of seconds since start) rather than\n     *    timestamps, set this to true.\n     * @param [settings.startLabel] Pass to show a label for the start of the timeline.\n     * @param [settings.endLabel] Pass to show a label for the end of the timeline.\n     * @param [settings.defaultSegmentClass='g-segment-default'] A CSS class set\n     *     on segments that do not specify a class.\n     * @param [settings.defaultPointClass='g-point-default'] A CSS class set\n     *     on points that do not specify a class.\n     * @param [settings.segments=[]] A list of segments. Each element of the list\n     *    should be an object with the following keys:\n     *      - start: A number or timestamp representing\n     *      - end: A number of timestamp representing the end of this segment.\n     *      - [class]: A CSS class name to apply to the segment. Uses the\n     *                 widget's defaultSegmentClass if this key is not set.\n     *      - [tooltip]: A tooltip value for this segment. Tooltips containing the\n     *                   special token \"%r\" will have that token expanded into the\n     *                   elapsed time between start and end.\n     * @param [settings.points=[]] A list of points. Each element of the list should\n     *    be an object with the following keys:\n     *      - time: A number or timestamp representing the location of the point.\n     *      - [class]: A CSS class name to apply to the point. Uses the\n     *                 widget's defaultPointClass if this key is not set.\n     *      - [tooltip]: A tooltip value for this point. Tooltips containing the\n     *                   special token \"%t\" will have that token expanded into the\n     *                   time value for that point.\n     */\n    initialize: function (settings) {\n        this.startTime = settings.startTime;\n        this.endTime = settings.endTime;\n        this.segments = settings.segments || [];\n        this.points = settings.points || [];\n        this.numeric = !!settings.numeric;\n        this.startLabel = settings.startLabel;\n        this.endLabel = settings.endLabel;\n        this.defaultSegmentClass = settings.defaultSegmentClass || 'g-segment-default';\n        this.defaultPointClass = settings.defaultPointClass || 'g-point-default';\n\n        this._processData();\n    },\n\n    // Processes the points and segments for display in the widget\n    _processData: function () {\n        if (!this.numeric) {\n            this.startTime = new Date(this.startTime);\n            this.endTime = new Date(this.endTime);\n        }\n\n        if (this.endTime <= this.startTime) {\n            console.error('Timeline widget: end time must be after start time.');\n            this._processedSegments = [];\n            this._processedPoints = [];\n            return;\n        }\n\n        var range = this.endTime - this.startTime;\n\n        this._processedSegments = _.map(this.segments, function (segment) {\n            var start = this.numeric ? segment.start : new Date(segment.start);\n            var end = this.numeric ? segment.end : new Date(segment.end);\n            var classes = segment.class ? [segment.class] : [this.defaultSegmentClass];\n            var color = segment.color ? `background-color: ${segment.color}` : '';\n\n            return {\n                class: classes.join(' '),\n                left: (100 * (start - this.startTime) / range).toFixed(1) + '%',\n                width: (100 * (end - start) / range).toFixed(1) + '%',\n                tooltip: this._segmentTooltip(segment, {\n                    range: this.numeric ? end - start : (end - start) / 1000\n                }),\n                color\n            };\n        }, this);\n\n        this._processedPoints = _.map(this.points, function (point) {\n            var time = this.numeric ? point.time : new Date(point.time);\n            var classes = point.class ? [point.class] : [this.defaultPointClass];\n            var color = point.color ? `background-color: ${point.color}` : '';\n\n            return {\n                class: classes.join(' '),\n                left: (100 * (time - this.startTime) / range).toFixed(1) + '%',\n                tooltip: this._pointTooltip(point, {\n                    time: time\n                }),\n                color\n            };\n        }, this);\n    },\n\n    _segmentTooltip: function (segment, info) {\n        if (!segment.tooltip) {\n            return null;\n        }\n\n        return segment.tooltip.replace('%r', info.range);\n    },\n\n    _pointTooltip: function (point, info) {\n        if (!point.tooltip) {\n            return null;\n        }\n\n        if (this.numeric) {\n            return point.tooltip.replace('%t', info.time);\n        } else {\n            return point.tooltip.replace('%t', info.time.toISOString());\n        }\n    },\n\n    render: function () {\n        this.$el.html(TimelineTemplate({\n            segments: this._processedSegments,\n            points: this._processedPoints,\n            startLabel: this.startLabel,\n            endLabel: this.endLabel\n        }));\n\n        return this;\n    }\n});\n\nexport default TimelineWidget;\n","import AccessWidget from './AccessWidget';\nimport ApiKeyListWidget from './ApiKeyListWidget';\nimport BrowserWidget from './BrowserWidget';\nimport CheckedMenuWidget from './CheckedMenuWidget';\nimport CollectionInfoWidget from './CollectionInfoWidget';\nimport DateTimeRangeWidget from './DateTimeRangeWidget';\nimport DateTimeWidget from './DateTimeWidget';\nimport EditApiKeyWidget from './EditApiKeyWidget';\nimport EditAssetstoreWidget from './EditAssetstoreWidget';\nimport EditCollectionWidget from './EditCollectionWidget';\nimport EditFileWidget from './EditFileWidget';\nimport EditFolderWidget from './EditFolderWidget';\nimport EditGroupWidget from './EditGroupWidget';\nimport EditItemWidget from './EditItemWidget';\nimport FileInfoWidget from './FileInfoWidget';\nimport FileListWidget from './FileListWidget';\nimport FolderInfoWidget from './FolderInfoWidget';\nimport FolderListWidget from './FolderListWidget';\nimport GroupAdminsWidget from './GroupAdminsWidget';\nimport GroupInvitesWidget from './GroupInvitesWidget';\nimport GroupMembersWidget from './GroupMembersWidget';\nimport GroupModsWidget from './GroupModsWidget';\nimport HierarchyWidget from './HierarchyWidget';\nimport ItemBreadcrumbWidget from './ItemBreadcrumbWidget';\nimport ItemListWidget from './ItemListWidget';\nimport LoadingAnimation from './LoadingAnimation';\nimport MarkdownWidget from './MarkdownWidget';\nimport MetadataWidget from './MetadataWidget';\nimport NewAssetstoreWidget from './NewAssetstoreWidget';\nimport PaginateWidget from './PaginateWidget';\nimport PluginConfigBreadcrumbWidget from './PluginConfigBreadcrumbWidget';\nimport RootSelectorWidget from './RootSelectorWidget';\nimport SearchFieldWidget from './SearchFieldWidget';\nimport SearchPaginateWidget from './SearchPaginateWidget';\nimport SortCollectionWidget from './SortCollectionWidget';\nimport TaskProgressWidget from './TaskProgressWidget';\nimport TimelineWidget from './TimelineWidget';\nimport UploadWidget from './UploadWidget';\nimport UserOtpManagementWidget from './UserOtpManagementWidget';\n\nexport {\n    AccessWidget,\n    ApiKeyListWidget,\n    BrowserWidget,\n    CheckedMenuWidget,\n    CollectionInfoWidget,\n    DateTimeWidget,\n    DateTimeRangeWidget,\n    EditApiKeyWidget,\n    EditAssetstoreWidget,\n    EditCollectionWidget,\n    EditFileWidget,\n    EditFolderWidget,\n    EditGroupWidget,\n    EditItemWidget,\n    FileInfoWidget,\n    FileListWidget,\n    FolderInfoWidget,\n    FolderListWidget,\n    GroupAdminsWidget,\n    GroupInvitesWidget,\n    GroupMembersWidget,\n    GroupModsWidget,\n    HierarchyWidget,\n    ItemBreadcrumbWidget,\n    ItemListWidget,\n    LoadingAnimation,\n    MarkdownWidget,\n    MetadataWidget,\n    NewAssetstoreWidget,\n    PaginateWidget,\n    PluginConfigBreadcrumbWidget,\n    RootSelectorWidget,\n    SearchFieldWidget,\n    SearchPaginateWidget,\n    SortCollectionWidget,\n    TaskProgressWidget,\n    TimelineWidget,\n    UploadWidget,\n    UserOtpManagementWidget\n};\n","import App from './App';\nimport View from './View';\nimport * as body from './body';\nimport * as layout from './layout';\nimport * as widgets from './widgets';\n\nexport {\n    App,\n    View,\n    body,\n    layout,\n    widgets\n};\n","import $ from 'jquery';\n\nimport _ from 'underscore';\n\nimport Backbone from 'backbone';\n\nimport moment from 'moment';\n\nimport * as auth from './auth';\nimport * as collections from './collections';\nimport * as constants from './constants';\nimport * as dialog from './dialog';\nimport * as misc from './misc';\nimport * as models from './models';\nimport * as pluginUtils from './pluginUtils';\nimport * as rest from './rest';\nimport * as utilities from './utilities';\nimport * as views from './views';\nimport events from './events';\nimport router from './router';\nimport version from './version';\n\nconst initializeDefaultApp = async (apiRoot: string, el: string | HTMLElement = 'body') => {\n    return new Promise((resolve, reject) => {\n        $(() => {\n            rest.setApiRoot(apiRoot);\n            events.trigger('g:appload.before');\n            rest.restRequest({\n                url: `system/public_settings`,\n                method: 'GET',\n            }).done((resp: any) => {\n                rest.setPublicSettings(resp);\n                const app = new views.App({\n                    el,\n                    parentView: null,\n                    contactEmail: resp['core.contact_email_address'],\n                    privacyNoticeHref: resp['core.privacy_notice'],\n                    brandName: resp['core.brand_name'],\n                    bannerColor: resp['core.banner_color'],\n                    registrationPolicy: resp['core.registration_policy'],\n                    enablePasswordLogin: resp['core.enable_password_login'],\n                });\n                app.render();\n                document.title = resp['core.brand_name'];\n                events.trigger('g:appload.after', app);\n                resolve(app);\n            }).fail((resp: any) => {\n                events.trigger('g:error', resp);\n                reject(new Error(\"Could not retrieve public settings from server.\"));\n            });\n        });\n    });\n};\n\nconst girder = {\n    $,\n    _,\n    Backbone,\n    moment,\n    initializeDefaultApp,\n    auth,\n    collections,\n    constants,\n    dialog,\n    events,\n    misc,\n    models,\n    plugins: {},\n    pluginUtils,\n    rest,\n    router,\n    utilities,\n    version,\n    views\n};\n\nexport type Girder = typeof girder;\n\nexport {\n    girder,\n};\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,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,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,220,229,236,238,239,250,266,267,270,282,301,302,364,365,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447],"mappings":"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AS,CAAC,EACf,EAAK,MAAM,WAAa,EAAK,MAAM,YAAc,aAC1C,CACT,CACA,QAAS,CACP,MAAO,CACL,WAAY,CACV,MAAO,CACL,OAAQ,CAAC,MAAM,CACjB,CACF,EACA,QAAS,CACP,OAAQ,GACR,UAAW,EACb,EACA,MAAO,CACL,WAAY,CACV,MAAO,CACT,CACF,EACA,KAAM,CACJ,KAAM,QACN,SAAU,CACR,MAAO,QACP,QAAS,GACT,eAAgB,IAChB,YAAa,GACb,UAAW,EACb,CACF,CACF,CACF,CACA,SAAU,CACR,MAAO,CACL,WAAY,CACV,QAAS,EACX,EACA,QAAS,CACP,OAAQ,GACR,UAAW,EACb,EACA,QAAS,CACP,KAAM,EACN,YAAa,EACb,MAAO,CACL,WAAY,CACd,CACF,CACF,CACF,CACA,SAAU,CACR,MAAO,CACL,MAAO,CACL,QAAS,EACX,EACA,KAAM,CACJ,QAAS,CACX,EACA,WAAY,CACV,MAAO,CACL,OAAQ,CAAC,MAAM,CACjB,CACF,EACA,OAAQ,CACN,OAAQ,CAAC,MAAM,CACjB,EACA,QAAS,CACP,aAAc,GACd,OAAQ,CACN,KAAM,EACR,EACA,EAAG,CACD,KAAM,EACR,CACF,EACA,OAAQ,CACN,SAAU,MACV,QAAS,CACP,MAAO,QACT,CACF,EACA,KAAM,CACJ,QAAS,CACP,MAAO,EACT,CACF,CACF,CACF,CACA,SAAU,CACR,MAAO,CACL,MAAO,CACL,KAAM,CACJ,QAAS,EACX,CACF,EACA,WAAY,CACV,MAAO,CACL,SAAU,GACV,WAAY,IACZ,OAAQ,CAAC,MAAM,CACjB,CACF,EACA,OAAQ,CACN,KAAM,GACN,MAAO,EACP,OAAQ,CAAC,MAAM,CACjB,EACA,OAAQ,CACN,KAAM,EACR,EACA,KAAM,CACJ,QAAS,EACT,SAAU,CACR,MAAO,CAAC,EAAG,GAAG,CAChB,CACF,EACA,QAAS,CACP,aAAc,GACd,EAAG,CACD,KAAM,EACR,CACF,EACA,KAAM,CACJ,QAAS,CACP,KAAM,EACN,MAAO,CACT,CACF,EACA,MAAO,CACL,WAAY,CACV,KAAM,EACR,EAC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AAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,KAAM,GAAI,MAAO,GAAI,KAAM,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,MAAO,GAAI,GAAI,EAAG,GAAI,KAAM,IAAK,EAAG,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC9xF,EAAO,EACP,EAAM,CAAC,EACF,EAAI,EAAG,EAAI,EAAU,OAAQ,GAAK,EACvC,EAAI,KAAK,GAAQ,EAAU,EAAE,EACzB,EAAU,EAAI,IACd,EAAI,KAAK,GAAI,GAAQ,EAAU,EAAI,EAAE,EAE7C,EAAQ,UAAY,OAAO,aAAa,MAAM,KAAM,CAAG,CAEvD,CAAC,EAED,IAAI,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,aAAa,gBAAgB,gCAAgC,4BAA4B,cAAc,eAAe,qBAAqB,WAAW,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACrP,IAAI,EAAS,EAAQ,WAAW,EAC5B,EAAY,EAAQ,cAAc,CAAC,CAAC,UACpC,EAAqB,EAAQ,wBAAwB,CAAC,CAAC,mBACvD,EAAkB,EAAQ,oBAAoB,CAAC,CAAC,gBAChD,EAAU,EAAQ,YAAY,EAC9B,EAAO,EAAQ,aAAa,EAC5B,EAAgB,EAAQ,mBAAmB,CAAC,CAAC,cAC7C,EAAQ,EAAQ,UAAU,CAAC,CAAC,MAC5B,EACG,UAAY,CACf,KAAK,eAAiB,CAC1B,GACC,UAAY,CACT,KAAK,kBAAoB,IAAI,EAC7B,KAAK,QAAc,OAAO,KAAO,EAAQ,UAAY,SAAU,GAAG,EAClE,KAAK,WAAiB,OAAO,SAAW,EAAQ,UAAY,eAAgB,GAAG,EAC/E,KAAK,aAAe,UAAY,CAK5B,MAJA,CAEI,KAAK,cADL,KAAK,gBAAkB,KAAK,iBAAmB,IAAI,KAAK,eAAe,KAAK,oBAAoB,EAC9E,IAAI,EAAU,KAAK,gBAAgB,SAAS,CAAC,GAE5D,KAAK,UAChB,EACA,KAAK,iBAAmB,GACxB,KAAK,aAAe,GACpB,KAAK,mBAAqB,SAAU,EAAO,EAAS,EAAU,EAAQ,CAClE,IAAI,EAAM,EAAQ,IACd,EAAmB,GACnB,EAAe,GACf,EAAY,IACZ,EAAU,EAAQ,WAAW,EAC7B,EAAkB,GACtB,GAAK,KAAK,iBAgCL,CACD,GAAI,MAAM,QAAQ,KAAK,gBAAgB,EACnC,IAAI,EAAc,KAAK,iBAAiB,IAAI,EAAK,YAAY,CAAC,CAAC,KAAK,GAAG,EACnE,EAAmB,KAAK,iBAAiB,OAG7C,KAAI,EAAc,EAAK,aAAa,KAAK,gBAAgB,EACrD,EAAmB,KAAK,iBAEhC,EAAkB,OAAO,aAAe,EAAc,KAAK,EAC3D,EAAkB,EAAQ,eAAe,EACzC,IAAI,EAAY,SAAU,EAAM,EAAG,CAC/B,IAAI,EAAI,EAAK,MAAM,CAAW,EACzB,KAEL,KAAI,EAAQ,EAAE,EAAE,CAAC,OAAQ,EAAM,EAAE,EAAE,CAAC,OAChC,CAAC,EAAkB,EAAM,EAAO,CAAG,GAAK,EAAE,EAAE,CAAC,EAAM,IAAM,KACzD,IACJ,EAAI,aAAa,EAAG,EAAO,CAAG,CAHM,CAIxC,EACI,EAAmB,EAAmB,IACtC,EAAU,SAAU,EAAM,EAAG,EACzB,CAAC,GAAoB,KAAK,KAAK,CAAI,KAC/B,EAAkB,EAAM,EAAW,CAAS,EAC5C,EAAI,aAAa,CAAE,IAAK,EAAG,OAAQ,CAAU,EAAG,CAAgB,EAEhE,EAAI,aAAa,CAAE,IAAK,EAAG,OAAQ,CAAU,EAAG,CAAgB,EAE5E,EACI,EAAa,SAAU,EAAM,EAAG,CAChC,OAAO,EAAY,KAAK,CAAI,CAChC,EACI,EAAoB,SAAU,EAAM,EAAQ,EAAO,CAEnD,IADA,IAAI,EAAS,EACN,KAAY,EAAK,OAAO,CAAM,GAAK,KACtC,IACJ,GAAI,EAAS,GAAW,EACpB,MAAO,GAEX,IADA,IAAI,EAAS,EACN,EAAK,OAAO,GAAO,GAAK,KAC3B,IAIA,OAHA,EAAU,EACH,EAAS,GAAW,EAAU,EAE9B,EAAS,GAAW,CACnC,CACJ,KA9E4B,CACxB,GAAI,CAAC,KAAK,aACN,MAAO,GACX,IAAI,EAAmB,KAAK,aAAa,MACrC,EAAiB,KAAK,aAAa,IACnC,EAAkB,OAAO,aAAe,EAAK,aAAa,CAAgB,EAAI,GAAG,EACjF,EAAgB,OAAO,MAAQ,EAAK,aAAa,CAAc,EAAI,QAAQ,EAC3E,EAAU,SAAU,EAAM,EAAG,CACzB,EAAW,EAAM,CAAC,IAElB,CAAC,GAAoB,KAAK,KAAK,CAAI,KACnC,EAAI,aAAa,CAAE,IAAK,EAAG,OAAQ,EAAK,MAAO,EAAG,CAAc,EAChE,EAAI,aAAa,CAAE,IAAK,EAAG,OAAQ,CAAU,EAAG,CAAgB,EAExE,EACI,EAAY,SAAU,EAAM,EAAG,CAC/B,IAAI,GACA,EAAI,EAAK,MAAM,CAAS,IACxB,EAAI,aAAa,EAAG,EAAK,OAAS,EAAE,EAAE,CAAC,OAAQ,EAAK,MAAM,GAC1D,EAAI,EAAK,MAAM,CAAW,IAC1B,EAAI,aAAa,EAAG,EAAE,EAAE,CAAC,OAAQ,EAAE,EAAE,CAAC,MAAM,CACpD,EACI,EAAa,SAAU,EAAM,EAAK,CAClC,GAAI,EAAY,KAAK,CAAI,EACrB,MAAO,GAEX,IAAK,IADD,EAAS,EAAQ,UAAU,CAAG,EACzB,EAAI,EAAG,EAAI,EAAO,OAAQ,IAC/B,GAAI,EAAO,EAAE,CAAC,OAAS,UACnB,MAAO,EAEnB,CACJ,CAgDA,SAAS,EAAK,EAAK,CACf,IAAK,IAAI,EAAI,EAAU,GAAK,EAAQ,IAChC,EAAI,EAAI,QAAQ,CAAC,EAAG,CAAC,CAC7B,CACA,IAAI,EAAiB,IACrB,EAAK,SAAU,EAAM,EAAG,CACpB,IAAI,EAAS,EAAK,OAAO,IAAI,EACzB,IAAW,GAMN,EAAiB,EAAK,SAC3B,EAAiB,EAAK,SANlB,EAAS,IACT,EAAY,GACZ,GAAgB,CAAC,EAAW,EAAM,CAAC,IACnC,EAAe,IAK3B,CAAC,EACG,GAAa,MACb,EAAY,EACZ,EAAmB,GACnB,EAAe,IAEf,GAAmB,EAAY,GAAW,IAC1C,EAAY,KAAK,MAAM,EAAY,CAAO,EAAI,GAClD,EAAK,EAAe,EAAY,CAAO,CAC3C,EACA,KAAK,mBAAqB,SAAU,EAAO,EAAS,EAAO,EAAQ,CAC/D,IAAI,EAAU,KAAK,aACd,KAEL,CAAI,CAAC,EAAQ,OAAS,EAAQ,KAC1B,EAAU,EAAQ,IACtB,IAAI,EAAW,IAAI,EAAc,EAAS,EAAO,IAAK,EAAO,MAAM,EAC/D,EAAQ,EAAS,gBAAgB,EAC3B,EAAQ,UAClB,IAAI,EAAe,EAAQ,UAAU,gBAAgB,EACjD,EAAU,EACd,GAAI,GAAS,UAAU,KAAK,EAAM,IAAI,EAAG,CAErC,IADA,IAAI,EAAY,EACT,GAAS,UAAU,KAAK,EAAM,IAAI,GAAG,CACxC,IAAI,EAAI,EAAM,MAAM,QAAQ,EAAQ,KAAK,EACzC,GAAI,GAAK,GAAI,CACT,IAAI,EAAM,EAAS,mBAAmB,EAClC,EAAS,EAAS,sBAAsB,EAAI,EAChD,EAAa,IAAI,EAAM,EAAK,EAAQ,EAAK,EAAS,EAAQ,MAAM,MAAM,EACtE,KACJ,CACA,EAAQ,EAAS,aAAa,CAClC,CAGA,IAFA,IAAI,EAAW,IAAI,EAAc,EAAS,EAAO,IAAK,EAAO,MAAM,EAC/D,EAAQ,EAAS,gBAAgB,EAC9B,GAAS,UAAU,KAAK,EAAM,IAAI,GAAG,CACxC,IAAI,EAAI,EAAM,MAAM,QAAQ,EAAQ,GAAG,EACvC,GAAI,GAAK,GAAI,CACT,IAAI,EAAM,EAAS,mBAAmB,EAClC,EAAS,EAAS,sBAAsB,EAAI,EAChD,EAAW,IAAI,EAAM,EAAK,EAAQ,EAAK,EAAS,EAAQ,IAAI,MAAM,EAClE,KACJ,CACA,EAAQ,EAAS,YAAY,CACjC,CACI,GACA,EAAQ,OAAO,CAAQ,EACvB,IACA,EAAQ,OAAO,CAAU,EACzB,EAAW,EAAW,MAAM,IAC5B,EAAU,CAAC,EAAQ,MAAM,OAEjC,KAEI,GAAU,EAAQ,MAAM,OACxB,EAAW,EAAM,MAAM,IACvB,EAAQ,OAAO,EAAM,IAAK,EAAQ,GAAG,EACrC,EAAQ,OAAO,EAAM,MAAO,EAAQ,KAAK,EAEzC,EAAa,MAAM,KAAO,IAC1B,EAAa,MAAM,QAAU,GAC7B,EAAa,IAAI,KAAO,IACxB,EAAa,IAAI,QAAU,GAC/B,EAAQ,UAAU,kBAAkB,CAAY,CAhD1B,CAiD1B,EACA,KAAK,kBAAoB,SAAU,EAAO,EAAM,EAAK,CACjD,OAAO,KAAK,WAAW,CAAI,CAC/B,EACA,KAAK,aAAe,SAAU,EAAO,EAAM,EAAO,CAC9C,MAAO,EACX,EACA,KAAK,YAAc,SAAU,EAAO,EAAK,EAAK,CAC9C,EACA,KAAK,WAAa,SAAU,EAAM,CAC9B,OAAO,EAAK,MAAM,MAAM,CAAC,CAAC,EAC9B,EACA,KAAK,aAAe,SAAU,EAAS,CACnC,OAAO,IACX,EACA,KAAK,oBAAsB,SAAU,EAAS,CAG1C,IAAK,IAAI,IAFT,MAAK,QAAU,CAAC,EAChB,KAAK,OAAS,CAAC,EACD,EACV,GAAI,EAAQ,GAAI,CACZ,IAAI,EAAO,EAAQ,GACf,EAAK,EAAK,UAAU,IACpB,EAAO,EAAO,OAAO,GACpB,IACD,EAAO,OAAO,GAAM,EAAO,IAAI,GAC9B,EAAO,OAAO,KACf,EAAO,OAAO,GAAK,GACvB,KAAK,QAAQ,KAAK,CAAC,EACnB,KAAK,OAAO,GAAK,CACrB,CAeJ,IAAK,IAbD,EAAc,CAAC,qBAAsB,qBAAsB,oBAC3D,eAAgB,cAAe,kBAAmB,gBAAgB,EAClE,EAAU,SAAU,EAAG,EACtB,SAAU,EAAO,CACd,IAAI,EAAe,EAAY,GAC3B,EAAiB,EAAM,GAC3B,EAAM,EAAY,IACd,UAAY,CACR,OAAO,KAAK,WAAW,EAAc,UAAW,CAAc,CAClE,CACR,EAAA,CAAE,CAAM,CACZ,EACI,EAAS,KACJ,EAAI,EAAG,EAAI,EAAY,OAAQ,IACpC,EAAQ,CAAC,CAEjB,EACA,KAAK,WAAa,SAAU,EAAQ,EAAM,EAAgB,CACtD,IAAI,EAAQ,EAAK,IAAM,QACvB,GAAI,OAAO,GAAS,SAAU,CAC1B,GAAI,MAAM,QAAQ,EAAM,EAAE,EAAG,CACzB,IAAI,EAAW,EAAM,EAAE,CAAC,EAAM,EAAE,CAAC,OAAS,GACtC,EAAO,KAAK,OAAO,GACvB,GAAI,EACA,OAAO,EAAK,EAAO,CAAC,MAAM,EAAM,CAAC,EAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,EAAM,CAAC,CAAC,CAAC,CACjF,CACA,EAAQ,EAAM,IAAM,OACxB,CACA,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,QAAQ,OAAQ,IAChC,QAAK,OAAO,KAAK,QAAQ,IAE9B,KAAI,EAAQ,EAAM,MAAM,KAAK,QAAQ,EAAE,EACvC,GAAI,CAAC,EAAM,IAAM,EAAM,GAAI,CACvB,EAAK,GAAK,EAAM,GAChB,IAAI,EAAO,KAAK,OAAO,KAAK,QAAQ,IACpC,OAAO,EAAK,EAAO,CAAC,MAAM,EAAM,CAAI,CACxC,CALuC,CAO3C,IAAI,EAAM,EAAe,MAAM,KAAM,CAAI,EACzC,OAAO,EAAiB,EAAM,IAAA,EAClC,EACA,KAAK,gBAAkB,SAAU,EAAO,EAAQ,EAAQ,EAAS,EAAO,CACpE,GAAI,KAAK,WAAY,CACjB,IAAI,EAAa,KAAK,WAAW,cAAc,EAC/C,IAAK,IAAI,KAAO,EACZ,GAAI,EAAW,EAAI,CAAC,GAAS,CACzB,IAAI,EAAM,EAAW,EAAI,CAAC,EAAO,CAAC,MAAM,KAAM,SAAS,EACvD,GAAI,EACA,OAAO,CAEf,CAER,CACJ,EACA,KAAK,YAAc,SAAU,EAAQ,CACjC,GAAI,CAAC,KAAK,mBAAoB,CAC1B,IAAI,EAAQ,KAAK,WAAW,MACxB,EAAqB,CAAC,EAC1B,IAAK,IAAI,KAAQ,EAEb,IAAK,IADD,EAAU,EAAM,GACX,EAAI,EAAG,EAAI,EAAQ,OAAQ,EAAI,EAAG,IACvC,GAAI,OAAO,EAAQ,EAAE,CAAC,OAAU,SACxB,0BAA0B,KAAK,EAAQ,EAAE,CAAC,KAAK,GAC/C,EAAmB,KAAK,EAAQ,EAAE,CAAC,KAAK,OAE3C,GAAI,OAAO,EAAQ,EAAE,CAAC,OAAU,cAC5B,IAAI,EAAI,EAAG,EAAU,EAAQ,EAAE,CAAC,MAAM,OAAQ,EAAI,EAAS,IAC5D,GAAI,0BAA0B,KAAK,EAAQ,EAAE,CAAC,MAAM,EAAE,EAAG,CACrD,IAAI,EAAO,EAAQ,EAAE,CAAC,MAAM,MAAM,UAAU,CAAC,CAAC,GAC9C,EAAmB,KAAK,EAAK,OAAO,EAAG,EAAK,OAAS,CAAC,CAAC,CAC3D,EAKhB,KAAK,mBAAqB,CAC9B,CAGA,OAFK,EAEE,EAAmB,OAAO,KAAK,cAAgB,CAAC,CAAC,EAD7C,KAAK,YAEpB,EACA,KAAK,mBAAqB,UAAY,CAGlC,OAFK,KAAK,iBACN,KAAK,aAAa,EACf,KAAK,aAAe,KAAK,gBAAgB,cAAgB,CAAC,CACrE,EACA,KAAK,eAAiB,SAAU,EAAO,EAAS,EAAK,EAAQ,CAEzD,OADe,KAAK,cAAgB,KAAK,mBAAmB,EAAA,CAC5C,IAAI,SAAU,EAAM,CAChC,MAAO,CACH,KAAM,EACN,MAAO,EACP,MAAO,EACP,KAAM,SACV,CACJ,CAAC,CACL,EACA,KAAK,IAAM,eACf,EAAA,CAAG,KAAK,EAAK,SAAS,EACtB,EAAQ,KAAO,CAEf,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,aAAa,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC/G,IAAI,EAAM,EAAQ,WAAW,EA8U7B,EAAQ,YA7UyB,UAAY,CACzC,SAAS,EAAY,EAAS,CAC1B,KAAK,QAAU,EACf,KAAK,QAAQ,cAAgB,KAC7B,KAAK,QAAQ,aAAe,KAAK,aACjC,KAAK,QAAQ,uBAAyB,KAAK,uBAC3C,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,QAAQ,gBAAkB,CAAC,EAChC,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,QAAQ,GAAG,SAAU,KAAK,cAAc,EAC7C,KAAK,QAAQ,GAAG,aAAc,KAAK,YAAY,EAC/C,KAAK,QAAQ,GAAG,eAAgB,KAAK,eAAe,CACxD,CA6TA,MA5TA,GAAY,UAAU,aAAe,SAAU,EAAK,CAChD,IAAI,EACA,KAAK,aACD,KAAK,YAAY,IAAQ,KAAK,YAAY,EAAI,CAAC,UAE/C,EAKJ,MAJA,CAAC,KAAK,cAAmB,CAAC,KAAK,UAAa,GACrC,EAAI,EAGJ,KAAK,UAAa,EAAI,CAAC,OAAS,EAAI,CAEnD,EACA,EAAY,UAAU,uBAAyB,UAAY,CACvD,IAAI,EAAa,EAKjB,OAJA,KAAK,YAAY,QAAQ,SAAU,EAAG,CAC9B,GAAK,EAAE,UAAY,CAAC,EAAE,SACtB,GAAc,EAAE,SACxB,CAAC,EACM,CACX,EACA,EAAY,UAAU,gBAAkB,SAAU,EAAG,CACjD,KAAK,OAAO,EAAE,MAAM,CACxB,EACA,EAAY,UAAU,OAAS,SAAU,EAAQ,CACzC,GAAU,EAAO,eAAiB,EAAO,eAAiB,MAC1D,EAAO,cAAc,OAAO,EAC5B,KAAK,QAAU,IAEnB,KAAK,OAAO,EACZ,KAAK,OAAS,EACV,IACA,EAAO,cAAgB,KACvB,EAAO,SAAS,GAAG,eAAgB,KAAK,cAAc,EACtD,EAAO,SAAS,GAAG,cAAe,KAAK,aAAa,GAE5D,EACA,EAAY,UAAU,OAAS,SAAU,EAAG,CACxC,IAAI,EAAS,KAAK,OACb,KAKL,CAHA,KAAK,OAAS,KACd,EAAO,cAAgB,KACvB,EAAO,SAAS,IAAI,eAAgB,KAAK,cAAc,EACvD,EAAO,SAAS,IAAI,cAAe,KAAK,aAAa,EACrD,IAAI,EAAc,KAAK,QAAQ,YAC/B,GAAe,EAAY,QAAQ,SAAU,EAAG,CACxC,GAAK,EAAE,IAAM,EAAE,GAAG,aAClB,EAAE,YAAc,GAChB,EAAE,GAAG,WAAW,YAAY,EAAE,EAAE,EAExC,CAAC,CAPoD,CAQzD,EACA,EAAY,UAAU,aAAe,SAAU,EAAG,EAAS,CACvD,IAAI,EAAc,EAAQ,YACtB,MAAC,GAAe,CAAC,EAAE,QAMvB,KAAK,IAJD,EAAO,EAAE,KACT,EAAQ,EAAK,MAAM,IACnB,EAAM,EAAK,IAAI,IACf,EAAO,EAAE,QAAU,MACd,EAAI,EAAQ,EAAG,EAAI,EAAK,IACzB,EAAY,KACZ,EAAY,EAAE,CAAC,OAAS,GAE5B,EAAY,KACR,EACK,EAAY,GAGb,EAAY,EAAI,CAAC,OAAS,EAF1B,EAAY,GAAS,EAAY,IAKjC,EAAY,IAAU,EAAY,KAClC,EAAY,GAAS,IAAA,IACzB,EAAY,EAAI,CAAC,OAAS,GAZF,CAepC,EACA,EAAY,UAAU,eAAiB,SAAU,EAAO,CACpD,IAAI,EAAc,KAAK,QAAQ,YAC1B,KAEL,KAAI,EAAW,EAAM,MAAM,IACvB,EAAM,EAAM,IAAI,IAAM,EAC1B,GAAI,IAAQ,EAEP,GAAI,EAAM,QAAU,SAAU,CAC/B,IAAI,EAAU,EAAY,OAAO,EAAW,EAAG,CAAG,EAC9C,CAAC,EAAY,IAAa,EAAQ,EAAQ,OAAS,KACnD,EAAY,GAAY,EAAQ,IAAI,GAExC,EAAQ,QAAQ,SAAU,EAAG,CACzB,GAAK,KAAK,iBAAiB,CAAC,CAChC,EAAG,IAAI,EACP,KAAK,YAAY,CACrB,KACK,CACD,IAAI,EAAW,MAAM,CAAG,EACpB,EAAY,IAAa,EAAY,EAAS,CAAC,QAAU,MACrD,EAAM,MAAM,OAAS,EAAY,EAAS,CAAC,QAC3C,IAER,EAAK,QAAQ,EAAU,CAAC,EACxB,EAAY,OAAO,MAAM,EAAa,CAAI,EAC1C,KAAK,YAAY,CACrB,CAvB2B,CAwB/B,EACA,EAAY,UAAU,YAAc,UAAY,CAC5C,IAAI,EAAc,KAAK,QAAQ,YAC1B,KAEL,KAAI,EAAY,GAChB,EAAY,QAAQ,SAAU,EAAG,EAAG,CAChC,GAAI,EAGA,IAFA,EAAY,GACZ,EAAE,IAAM,EACD,EAAE,YACL,EAAE,WAAW,IAAM,EACnB,EAAI,EAAE,UAGlB,CAAC,EACG,IACA,KAAK,QAAQ,YAAc,KAZf,CAapB,EACA,EAAY,UAAU,oBAAsB,SAAU,EAAG,CAChD,KAAK,QAAQ,cACd,KAAK,QAAQ,YAAkB,MAAM,KAAK,QAAQ,UAAU,CAAC,GACjE,IAAI,EAAM,KAAK,QAAQ,YAAY,EAAE,KASrC,OARI,IACA,EAAE,WAAa,EACX,EAAI,IAAM,EAAI,GAAG,aACjB,EAAI,GAAG,WAAW,YAAY,EAAI,EAAE,EACpC,EAAI,YAAc,KAG1B,KAAK,QAAQ,YAAY,EAAE,KAAO,EAC3B,CACX,EACA,EAAY,UAAU,cAAgB,SAAU,EAAG,CAG/C,GAFA,KAAK,oBAAoB,CAAC,EAC1B,EAAE,QAAU,KAAK,QACb,CAAC,KAAK,OACN,OAAO,EACX,IAAI,EAAW,KAAK,OAAO,SACvB,EAAE,MAAQ,CAAC,EAAE,KACb,EAAE,GAAK,EAAI,cAAc,KAAK,EAC9B,EAAE,GAAG,UAAY,EAAE,MAEnB,EAAE,MAAQ,CAAC,EAAE,KACb,EAAE,GAAK,EAAI,cAAc,KAAK,EAC9B,EAAE,GAAG,YAAc,EAAE,MAErB,EAAE,KACF,EAAI,YAAY,EAAE,GAAI,yBAAyB,EAC3C,EAAE,WACF,EAAI,YAAY,EAAE,GAAI,EAAE,SAAS,EAErC,EAAE,GAAG,MAAM,SAAW,WACtB,EAAE,GAAG,MAAM,OAAS,IACpB,EAAS,UAAU,YAAY,EAAE,EAAE,EACnC,EAAE,YAAc,GACX,EAAE,cACH,EAAE,GAAG,MAAM,OAAS,KAExB,AACI,EAAE,cAAc,EAAE,GAAG,cAG7B,AACI,EAAE,WAAW,EAAE,YAAc,EAAS,YAAY,WAEtD,IAAI,EAAO,KAAK,QAAQ,UAAU,EAAE,IAAK,CAAC,EAE1C,GADA,EAAE,MAAQ,EACN,EAAM,CACN,IAAI,EAAc,KAAK,QAAQ,YAC3B,EAAE,KAAO,EAAK,IAAI,KAAO,CAAC,EAAY,EAAK,MAAM,KACjD,EAAY,EAAK,MAAM,KAAO,EAE9B,EAAE,OAAS,EACnB,CAKA,OAJA,KAAK,QAAQ,MAAM,aAAc,CAAE,KAAM,CAAE,MAAO,CAAE,IAAK,EAAE,GAAI,CAAE,CAAE,CAAC,EACpE,KAAK,YAAY,EACjB,KAAK,cAAc,KAAM,CAAQ,EACjC,KAAK,gBAAgB,CAAC,EACf,CACX,EACA,EAAY,UAAU,iBAAmB,SAAU,EAAG,CAKlD,GAJA,EAAE,YAAc,GAChB,EAAE,QAAU,KACR,EAAE,IAAM,EAAE,GAAG,YACb,EAAE,GAAG,WAAW,YAAY,EAAE,EAAE,EAChC,EAAE,QAAU,EAAE,OAAO,QACrB,GAAI,CACA,EAAE,OAAO,QAAQ,CACrB,MACU,CAAE,CAChB,GAAI,KAAK,QAAQ,YAAa,CAC1B,IAAI,EAAK,KAAK,QAAQ,YAAY,EAAE,KACpC,GAAI,GAAM,EACN,KAAK,QAAQ,YAAY,EAAE,KAAO,EAAE,WAChC,EAAE,YACF,KAAK,gBAAgB,EAAE,UAAU,OAGrC,KAAO,GAAI,CACP,GAAI,EAAG,YAAc,EAAG,CACpB,EAAG,WAAa,EAAE,WAClB,KACJ,CACA,EAAK,EAAG,UACZ,CAER,CACA,KAAK,QAAQ,MAAM,aAAc,CAAE,KAAM,CAAE,MAAO,CAAE,IAAK,EAAE,GAAI,CAAE,CAAE,CAAC,EACpE,KAAK,YAAY,CACrB,EACA,EAAY,UAAU,gBAAkB,SAAU,EAAK,CAInD,IAHA,IAAI,EAAc,KAAK,QAAQ,YAC3B,EAAI,GAAe,EAAY,GAC/B,EAAO,CAAC,EACL,GACH,EAAK,KAAK,CAAC,EACX,EAAI,EAAE,WAEV,OAAO,CACX,EACA,EAAY,UAAU,gBAAkB,SAAU,EAAG,CACjD,KAAK,QAAQ,gBAAgB,KAAK,CAAC,EACnC,KAAK,QAAU,KAAK,OAAO,SAAS,WAAW,CACnD,EACA,EAAY,UAAU,eAAiB,SAAU,EAAG,EAAU,CAC1D,IAAI,EAAiB,KAAK,QAAQ,gBAC9B,EAAS,EAAS,YAClB,MAAC,GAAkB,CAAC,EAAe,QAGvC,KAAK,IADD,EAAM,IACD,EAAI,EAAG,EAAI,EAAe,OAAQ,IAAK,CAC5C,IAAI,EAAI,EAAe,GACnB,MAAC,GAAK,CAAC,EAAE,KAET,EAAE,SAAW,KAAK,QAEtB,IAAI,CAAC,EAAE,YAAa,CAChB,GAAI,KAAK,QAAQ,YAAY,EAAE,MAAQ,EACnC,SACJ,EAAE,YAAc,GAChB,EAAS,UAAU,YAAY,EAAE,EAAE,CACvC,CACA,EAAE,EAAI,EAAE,GAAG,aACN,EAAE,aACH,EAAE,EAAI,EAAE,GAAG,YACX,EAAE,YAAc,KAAK,KAAK,EAAE,EAAI,EAAO,cAAc,GAEzD,IAAI,EAAW,EAAE,EAAI,EAAO,WACxB,EAAE,YACF,GAAY,KAAK,QAAQ,gBAAgB,EAAE,GAAG,EAC1C,EAAW,IACX,EAAW,IAEf,EAAE,UAAY,IACd,EAAE,SAAW,EACT,EAAE,IAAM,IACR,EAAM,EAAE,KAfhB,CAiBJ,CACI,GAAO,MACP,KAAK,QAAQ,MAAM,aAAc,CAAE,KAAM,CAAE,MAAO,CAAE,IAAK,CAAI,CAAE,CAAE,CAAC,EAClE,KAAK,QAAQ,gBAAkB,MAEnC,KAAK,QAAQ,gBAAkB,CAAC,CALhC,CAMJ,EACA,EAAY,UAAU,cAAgB,SAAU,EAAG,EAAU,CACzD,IAAI,EAAS,EAAS,YAClB,EAAc,KAAK,QAAQ,YAC1B,KAIL,KAFA,IAAI,EAAQ,KAAK,IAAI,KAAK,SAAU,EAAO,QAAQ,EAC/C,EAAO,KAAK,IAAI,KAAK,QAAS,EAAO,QAAS,EAAY,MAAM,EAC7D,EAAQ,GAAK,CAAC,EAAY,IAC7B,IACJ,KAAK,SAAW,EAAO,SACvB,KAAK,QAAU,EAAO,QACtB,EAAS,aAAa,OAAS,EAC/B,IAAK,IAAI,EAAI,EAAO,GAAK,EAAM,IAAK,CAChC,IAAI,EAAI,EAAY,GAChB,MAAC,GAAK,CAAC,EAAE,IAEb,IAAI,EAAE,OAAQ,CACV,EAAE,GAAG,MAAM,IAAM,MAAQ,EAAE,aAAe,GAAK,KAC/C,QACJ,CACK,EAAE,cACH,EAAE,YAAc,GAChB,EAAS,UAAU,YAAY,EAAE,EAAE,GAEvC,IAAI,EAAM,EAAS,aAAa,iBAAiB,CAAE,IAAK,EAAG,OAAQ,CAAE,EAAG,EAAI,CAAC,CAAC,IACzE,EAAE,YACH,GAAO,EAAO,WAAa,KAAK,QAAQ,gBAAgB,EAAE,GAAG,GACjE,EAAE,GAAG,MAAM,IAAM,EAAM,EAAO,OAAS,KACvC,IAAI,EAAO,EAAE,YAAc,EAAI,EAAS,YACnC,EAAE,aACH,GAAQ,EAAS,YACrB,EAAE,GAAG,MAAM,KAAO,EAAO,KACrB,EAAE,WAAa,EAAE,cACjB,EAAE,GAAG,MAAM,SAAW,EAAO,MAAQ,EAAI,EAAO,QAAU,MAE1D,EAAE,WACF,EAAE,GAAG,MAAM,MAAQ,EAAS,UAAU,SAAS,EAAI,KAGnD,EAAE,GAAG,MAAM,MAAQ,EApBvB,CAsBJ,CAjCI,CAkCR,EACO,CACX,EACgC,CAEhC,CAAC,EAED,IAAI,OAAO,kBAAkB,CAAC,UAAU,UAAU,QAAQ,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aA2BhG,EAAQ,WAAa,SAAU,EAAU,EAAO,EAAe,CAC3D,IAAI,EAAM,EAAM,MAAM,IAClB,EAAc,EAAM,MAAM,OAC1B,EAAO,EAAS,IAAQ,GAC5B,OAAQ,EAAM,OAAd,CACI,IAAK,SAED,GADY,EAAM,MACR,SAAW,EACjB,EAAS,GAAO,EAAK,UAAU,EAAG,CAAW,EAAI,EAAM,MAAM,GAAK,EAAK,UAAU,CAAW,MAE3F,CACD,IAAI,EAAO,CAAC,EAAK,CAAC,CAAC,CAAC,OAAO,EAAM,KAAK,EACtC,EAAS,OAAO,MAAM,EAAU,CAAI,EACpC,EAAS,GAAO,EAAK,UAAU,EAAG,CAAW,EAAI,EAAS,GAC1D,EAAS,EAAM,EAAM,MAAM,OAAS,IAAM,EAAK,UAAU,CAAW,CACxE,CACA,MACJ,IAAK,SACD,IAAI,EAAY,EAAM,IAAI,OACtB,EAAS,EAAM,IAAI,IACnB,IAAQ,EACR,EAAS,GAAO,EAAK,UAAU,EAAG,CAAW,EAAI,EAAK,UAAU,CAAS,EAGzE,EAAS,OAAO,EAAK,EAAS,EAAM,EAAG,EAAK,UAAU,EAAG,CAAW,EAAI,EAAS,EAAO,CAAC,UAAU,CAAS,CAAC,EAEjH,KACR,CACJ,CAEA,CAAC,EAED,IAAI,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,cAAc,uBAAuB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACjI,IAAI,EAAM,EAAQ,WAAW,EACzB,EAAe,EAAQ,qBAAqB,CAAC,CAAC,aAC9C,EAAwB,UAAY,CACpC,SAAS,EAAO,EAAK,EAAK,EAAQ,CAC9B,KAAK,UAAY,KAAK,SAAS,KAAK,IAAI,EACxC,KAAK,OAAO,CAAG,EACX,OAAO,GAAO,SAGd,KAAK,YAAY,EAAK,CAAM,EAF5B,KAAK,YAAY,EAAI,IAAK,EAAI,MAAM,CAG5C,CAgEA,MA/DA,GAAO,UAAU,YAAc,UAAY,CACvC,OAAO,KAAK,wBAAwB,KAAK,IAAK,KAAK,MAAM,CAC7D,EACA,EAAO,UAAU,YAAc,UAAY,CACvC,OAAO,KAAK,QAChB,EACA,EAAO,UAAU,SAAW,SAAU,EAAO,CACrC,OAAM,MAAM,KAAO,EAAM,IAAI,KAAO,EAAM,MAAM,KAAO,KAAK,MAE5D,IAAM,MAAM,IAAM,KAAK,KAE3B,KAAI,EAAQ,EAAqB,EAAO,CAAE,IAAK,KAAK,IAAK,OAAQ,KAAK,MAAO,EAAG,KAAK,YAAY,EACjG,KAAK,YAAY,EAAM,IAAK,EAAM,OAAQ,EAAI,CADmD,CAErG,EACA,EAAO,UAAU,YAAc,SAAU,EAAK,EAAQ,EAAQ,CAC1D,IAAI,EACA,EACM,CACG,MACG,QACZ,EAGM,KAAK,wBAAwB,EAAK,CAAM,EAE9C,UAAK,KAAO,EAAI,KAAO,KAAK,QAAU,EAAI,QAE9C,KAAI,EAAM,CACN,IAAK,KAAK,IACV,OAAQ,KAAK,MACjB,EACA,KAAK,IAAM,EAAI,IACf,KAAK,OAAS,EAAI,OAClB,KAAK,QAAQ,SAAU,CACd,MACL,MAAO,CACX,CAAC,CAND,CAOJ,EACA,EAAO,UAAU,OAAS,UAAY,CAClC,KAAK,SAAS,IAAI,SAAU,KAAK,SAAS,CAC9C,EACA,EAAO,UAAU,OAAS,SAAU,EAAK,CACrC,KAAK,SAAW,GAAO,KAAK,SAC5B,KAAK,SAAS,GAAG,SAAU,KAAK,SAAS,CAC7C,EACA,EAAO,UAAU,wBAA0B,SAAU,EAAK,EAAQ,CAC9D,IAAI,EAAM,CAAC,EAeX,OAdI,GAAO,KAAK,SAAS,UAAU,GAC/B,EAAI,IAAM,KAAK,IAAI,EAAG,KAAK,SAAS,UAAU,EAAI,CAAC,EACnD,EAAI,OAAS,KAAK,SAAS,QAAQ,EAAI,GAAG,CAAC,CAAC,QAEvC,EAAM,GACX,EAAI,IAAM,EACV,EAAI,OAAS,IAGb,EAAI,IAAM,EACV,EAAI,OAAS,KAAK,IAAI,KAAK,SAAS,QAAQ,EAAI,GAAG,CAAC,CAAC,OAAQ,KAAK,IAAI,EAAG,CAAM,CAAC,GAEhF,EAAS,IACT,EAAI,OAAS,GACV,CACX,EACO,CACX,EAAE,EACF,EAAO,UAAU,aAAe,GAChC,EAAI,UAAU,EAAO,UAAW,CAAY,EAC5C,SAAS,EAAe,EAAQ,EAAQ,EAAoB,CACxD,IAAI,EAAc,EAAqB,EAAO,QAAU,EAAO,OAAS,EAAO,OAAS,EAAO,OAC/F,OAAQ,EAAO,IAAM,EAAO,KAAS,EAAO,KAAO,EAAO,KAAO,CACrE,CACA,SAAS,EAAqB,EAAO,EAAO,EAAa,CACrD,IAAI,EAAgB,EAAM,QAAU,SAChC,GAAiB,EAAgB,EAAI,KAAO,EAAM,IAAI,IAAM,EAAM,MAAM,KACxE,GAAiB,EAAgB,EAAI,KAAO,EAAM,IAAI,OAAS,EAAM,MAAM,QAC3E,EAAa,EAAM,MACnB,EAAW,EAAgB,EAAa,EAAM,IAalD,OAZI,EAAe,EAAO,EAAY,CAAW,EACtC,CACH,IAAK,EAAM,IACX,OAAQ,EAAM,MAClB,EAEA,EAAe,EAAU,EAAO,CAAC,CAAW,EACrC,CACH,IAAK,EAAM,IAAM,EACjB,OAAQ,EAAM,QAAU,EAAM,KAAO,EAAS,IAAM,EAAgB,EACxE,EAEG,CACH,IAAK,EAAW,IAChB,OAAQ,EAAW,MACvB,CACJ,CACA,EAAQ,OAAS,CAEjB,CAAC,EAED,IAAI,OAAO,eAAe,CAAC,UAAU,UAAU,SAAS,cAAc,kBAAkB,wBAAwB,YAAY,YAAY,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC9K,IAAI,EAAM,EAAQ,WAAW,EACzB,EAAa,EAAQ,eAAe,CAAC,CAAC,WACtC,EAAe,EAAQ,qBAAqB,CAAC,CAAC,aAC9C,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAS,EAAQ,UAAU,CAAC,CAAC,OAC7B,EAA0B,UAAY,CACtC,SAAS,EAAS,EAAa,CAC3B,KAAK,OAAS,CAAC,EAAE,EACb,EAAY,SAAW,EACvB,KAAK,OAAS,CAAC,EAAE,EAEZ,MAAM,QAAQ,CAAW,EAC9B,KAAK,kBAAkB,CAAE,IAAK,EAAG,OAAQ,CAAE,EAAG,CAAW,EAGzD,KAAK,OAAO,CAAE,IAAK,EAAG,OAAQ,CAAE,EAAG,CAAW,CAEtD,CAsTA,MArTA,GAAS,UAAU,SAAW,SAAU,EAAM,CAC1C,IAAI,EAAM,KAAK,UAAU,EAAI,EAC7B,KAAK,OAAO,IAAI,EAAM,EAAG,EAAG,EAAK,KAAK,QAAQ,CAAG,CAAC,CAAC,MAAM,CAAC,EAC1D,KAAK,OAAO,CAAE,IAAK,EAAG,OAAQ,CAAE,EAAG,GAAQ,EAAE,CACjD,EACA,EAAS,UAAU,SAAW,UAAY,CACtC,OAAO,KAAK,YAAY,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,CAC7D,EACA,EAAS,UAAU,aAAe,SAAU,EAAK,EAAQ,CACrD,OAAO,IAAI,EAAO,KAAM,EAAK,CAAM,CACvC,EACA,EAAS,UAAU,eAAiB,SAAU,EAAM,CAChD,IAAI,EAAQ,EAAK,MAAM,mBAAmB,EAC1C,KAAK,aAAe,EAAQ,EAAM,GAAK;EACvC,KAAK,QAAQ,mBAAmB,CACpC,EACA,EAAS,UAAU,oBAAsB,UAAY,CACjD,OAAQ,KAAK,aAAb,CACI,IAAK,UACD,MAAO;EACX,IAAK,OACD,MAAO;EACX,QACI,OAAO,KAAK,cAAgB;CACpC,CACJ,EACA,EAAS,UAAU,eAAiB,SAAU,EAAa,CACnD,KAAK,eAAiB,IAE1B,KAAK,aAAe,EACpB,KAAK,QAAQ,mBAAmB,EACpC,EACA,EAAS,UAAU,eAAiB,UAAY,CAC5C,OAAO,KAAK,YAChB,EACA,EAAS,UAAU,UAAY,SAAU,EAAM,CAC3C,OAAQ,GAAQ;GAAU,GAAQ,MAAQ,GAAQ;CACtD,EACA,EAAS,UAAU,QAAU,SAAU,EAAK,CACxC,OAAO,KAAK,OAAO,IAAQ,EAC/B,EACA,EAAS,UAAU,SAAW,SAAU,EAAU,EAAS,CACvD,OAAO,KAAK,OAAO,MAAM,EAAU,EAAU,CAAC,CAClD,EACA,EAAS,UAAU,YAAc,UAAY,CACzC,OAAO,KAAK,SAAS,EAAG,KAAK,UAAU,CAAC,CAC5C,EACA,EAAS,UAAU,UAAY,UAAY,CACvC,OAAO,KAAK,OAAO,MACvB,EACA,EAAS,UAAU,aAAe,SAAU,EAAO,CAC/C,OAAO,KAAK,iBAAiB,CAAK,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,CACvE,EACA,EAAS,UAAU,iBAAmB,SAAU,EAAO,CACnD,IAAI,EACJ,GAAI,EAAM,MAAM,MAAQ,EAAM,IAAI,IAC9B,EAAQ,CAAC,KAAK,QAAQ,EAAM,MAAM,GAAG,CAAC,CAAC,UAAU,EAAM,MAAM,OAAQ,EAAM,IAAI,MAAM,CAAC,MAErF,CACD,EAAQ,KAAK,SAAS,EAAM,MAAM,IAAK,EAAM,IAAI,GAAG,EACpD,EAAM,IAAM,EAAM,IAAM,GAAA,CAAI,UAAU,EAAM,MAAM,MAAM,EACxD,IAAI,EAAI,EAAM,OAAS,EACnB,EAAM,IAAI,IAAM,EAAM,MAAM,KAAO,IACnC,EAAM,GAAK,EAAM,EAAE,CAAC,UAAU,EAAG,EAAM,IAAI,MAAM,EACzD,CACA,OAAO,CACX,EACA,EAAS,UAAU,YAAc,SAAU,EAAK,EAAO,CAEnD,OADA,QAAQ,KAAK,oFAAoF,EAC1F,KAAK,gBAAgB,EAAK,CAAK,CAC1C,EACA,EAAS,UAAU,YAAc,SAAU,EAAU,EAAS,CAE1D,OADA,QAAQ,KAAK,oFAAoF,EAC1F,KAAK,gBAAgB,EAAU,CAAO,CACjD,EACA,EAAS,UAAU,cAAgB,SAAU,EAAU,CAEnD,OADA,QAAQ,KAAK,iGAAiG,EACvG,KAAK,kBAAkB,EAAU,CAAC,GAAI,EAAE,CAAC,CACpD,EACA,EAAS,UAAU,OAAS,SAAU,EAAU,EAAM,CAGlD,OAFI,KAAK,UAAU,GAAK,GACpB,KAAK,eAAe,CAAI,EACrB,KAAK,kBAAkB,EAAU,KAAK,OAAO,CAAI,CAAC,CAC7D,EACA,EAAS,UAAU,aAAe,SAAU,EAAU,EAAM,CACxD,IAAI,EAAQ,KAAK,WAAW,EAAS,IAAK,EAAS,MAAM,EACrD,EAAM,KAAK,IAAI,EAAS,IAAK,EAAS,OAAS,EAAK,MAAM,EAO9D,OANA,KAAK,WAAW,CACL,QACF,MACL,OAAQ,SACR,MAAO,CAAC,CAAI,CAChB,EAAG,EAAI,EACA,KAAK,SAAS,CAAG,CAC5B,EACA,EAAS,UAAU,WAAa,SAAU,EAAK,EAAQ,CACnD,IAAI,EAAS,KAAK,UAAU,EACxB,IAAQ,IAAA,GACR,EAAM,EAED,EAAM,EACX,EAAM,EAED,GAAO,IACZ,EAAM,EAAS,EACf,EAAS,IAAA,IAEb,IAAI,EAAO,KAAK,QAAQ,CAAG,EAI3B,MAHA,CACI,IAAS,EAAK,OAClB,EAAS,KAAK,IAAI,KAAK,IAAI,EAAQ,CAAC,EAAG,EAAK,MAAM,EAC3C,CAAO,MAAa,QAAO,CACtC,EACA,EAAS,UAAU,SAAW,SAAU,EAAK,CACzC,MAAO,CAAE,IAAK,EAAI,IAAK,OAAQ,EAAI,MAAO,CAC9C,EACA,EAAS,UAAU,IAAM,SAAU,EAAK,EAAQ,CAC5C,MAAO,CAAO,MAAa,QAAO,CACtC,EACA,EAAS,UAAU,cAAgB,SAAU,EAAU,CACnD,IAAI,EAAS,KAAK,UAAU,EAS5B,OARI,EAAS,KAAO,GAChB,EAAS,IAAM,KAAK,IAAI,EAAG,EAAS,CAAC,EACrC,EAAS,OAAS,KAAK,QAAQ,EAAS,CAAC,CAAC,CAAC,SAG3C,EAAS,IAAM,KAAK,IAAI,EAAG,EAAS,GAAG,EACvC,EAAS,OAAS,KAAK,IAAI,KAAK,IAAI,EAAS,OAAQ,CAAC,EAAG,KAAK,QAAQ,EAAS,GAAG,CAAC,CAAC,MAAM,GAEvF,CACX,EACA,EAAS,UAAU,gBAAkB,SAAU,EAAK,EAAO,CACvD,EAAM,KAAK,IAAI,KAAK,IAAI,EAAK,CAAC,EAAG,KAAK,UAAU,CAAC,EACjD,IAAI,EAAS,EACT,EAAM,KAAK,UAAU,GACrB,EAAQ,EAAM,OAAO,CAAC,EAAE,CAAC,EACzB,EAAS,IAGT,EAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAK,EACzB,IACA,EAAS,KAAK,OAAO,EAAI,CAAC,QAE9B,KAAK,kBAAkB,CAAO,MAAa,QAAO,EAAG,CAAK,CAC9D,EACA,EAAS,UAAU,kBAAoB,SAAU,EAAU,EAAO,CAC9D,IAAI,EAAQ,KAAK,WAAW,EAAS,IAAK,EAAS,MAAM,EACrD,EAAM,CACN,IAAK,EAAM,IAAM,EAAM,OAAS,EAChC,QAAS,EAAM,QAAU,EAAI,EAAM,OAAS,GAAK,EAAM,EAAM,OAAS,EAAE,CAAC,MAC7E,EAOA,OANA,KAAK,WAAW,CACL,QACF,MACL,OAAQ,SACD,OACX,CAAC,EACM,KAAK,SAAS,CAAG,CAC5B,EACA,EAAS,UAAU,OAAS,SAAU,EAAO,CACzC,IAAI,EAAQ,KAAK,WAAW,EAAM,MAAM,IAAK,EAAM,MAAM,MAAM,EAC3D,EAAM,KAAK,WAAW,EAAM,IAAI,IAAK,EAAM,IAAI,MAAM,EAOzD,OANA,KAAK,WAAW,CACL,QACF,MACL,OAAQ,SACR,MAAO,KAAK,iBAAiB,CAAS,QAAY,KAAI,CAAC,CAC3D,CAAC,EACM,KAAK,SAAS,CAAK,CAC9B,EACA,EAAS,UAAU,aAAe,SAAU,EAAK,EAAa,EAAW,CACrE,IAAI,EAAQ,KAAK,WAAW,EAAK,CAAW,EACxC,EAAM,KAAK,WAAW,EAAK,CAAS,EAOxC,OANA,KAAK,WAAW,CACL,QACF,MACL,OAAQ,SACR,MAAO,KAAK,iBAAiB,CAAS,QAAY,KAAI,CAAC,CAC3D,EAAG,EAAI,EACA,KAAK,SAAS,CAAK,CAC9B,EACA,EAAS,UAAU,gBAAkB,SAAU,EAAU,EAAS,CAC9D,EAAW,KAAK,IAAI,KAAK,IAAI,EAAG,CAAQ,EAAG,KAAK,UAAU,EAAI,CAAC,EAC/D,EAAU,KAAK,IAAI,KAAK,IAAI,EAAG,CAAO,EAAG,KAAK,UAAU,EAAI,CAAC,EAC7D,IAAI,EAAqB,GAAW,KAAK,UAAU,EAAI,GAAK,EAAW,EACnE,EAAoB,EAAU,KAAK,UAAU,EAAI,EACjD,EAAY,EAAqB,EAAW,EAAI,EAChD,EAAY,EAAqB,KAAK,QAAQ,CAAQ,CAAC,CAAC,OAAS,EACjE,EAAU,EAAoB,EAAU,EAAI,EAE5C,EAAQ,IAAI,EAAM,EAAU,EAAU,EAD5B,EAAoB,EAAI,KAAK,QAAQ,CAAM,CAAC,CAAC,MACH,EACpD,EAAe,KAAK,OAAO,MAAM,EAAU,EAAU,CAAC,EAO1D,OANA,KAAK,WAAW,CACZ,MAAO,EAAM,MACb,IAAK,EAAM,IACX,OAAQ,SACR,MAAO,KAAK,iBAAiB,CAAK,CACtC,CAAC,EACM,CACX,EACA,EAAS,UAAU,cAAgB,SAAU,EAAK,CAC1C,EAAM,KAAK,UAAU,EAAI,GAAK,GAAO,GACrC,KAAK,WAAW,CACZ,MAAO,KAAK,IAAI,EAAK,KAAK,QAAQ,CAAG,CAAC,CAAC,MAAM,EAC7C,IAAK,KAAK,IAAI,EAAM,EAAG,CAAC,EACxB,OAAQ,SACR,MAAO,CAAC,GAAI,EAAE,CAClB,CAAC,CAET,EACA,EAAS,UAAU,QAAU,SAAU,EAAO,EAAM,CAehD,OAdM,aAAiB,IACnB,EAAQ,EAAM,WAAW,EAAM,MAAO,EAAM,GAAG,GAC/C,EAAK,SAAW,GAAK,EAAM,QAAQ,EAC5B,EAAM,MACb,GAAQ,KAAK,aAAa,CAAK,EACxB,EAAM,KACjB,KAAK,OAAO,CAAK,EAEb,EACM,KAAK,OAAO,EAAM,MAAO,CAAI,EAG7B,EAAM,MAGpB,EACA,EAAS,UAAU,YAAc,SAAU,EAAQ,CAC/C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAC/B,KAAK,WAAW,EAAO,EAAE,CAEjC,EACA,EAAS,UAAU,aAAe,SAAU,EAAQ,CAChD,IAAK,IAAI,EAAI,EAAO,OAAS,EAAG,GAAK,EAAG,IACpC,KAAK,YAAY,EAAO,EAAE,CAElC,EACA,EAAS,UAAU,WAAa,SAAU,EAAO,EAAe,CAC5D,IAAI,EAAW,EAAM,QAAU,UAC3B,EAAW,EAAM,MAAM,QAAU,GAAK,CAAC,EAAM,MAAM,GACjD,CAAC,EAAM,cAAc,EAAM,MAAO,EAAM,GAAG,KAG7C,GAAY,EAAM,MAAM,OAAS,IACjC,KAAK,yBAAyB,EAAO,GAAK,GAG1C,EAAW,KAAK,OAAQ,EAAO,CAAa,EAC5C,KAAK,QAAQ,SAAU,CAAK,GAEpC,EACA,EAAS,UAAU,gBAAkB,SAAU,EAAO,CAClD,IAAI,EAAY,KAAK,OAAO,QACxB,EAAM,QAAU,UAAY,EAAM,MAAM,IAAM,GAAa,EAAM,IAAI,IAAM,GACxE,EAAM,QAAU,UAAY,EAAM,MAAM,KAAO,IAClD,KAAK,WAAW,CAAK,CAE7B,EACA,EAAS,UAAU,yBAA2B,SAAU,EAAO,EAAK,CAKhE,IAAK,IAJD,EAAQ,EAAM,MACd,EAAI,EAAM,OAAS,EAAM,EACzB,EAAM,EAAM,MAAM,IAClB,EAAS,EAAM,MAAM,OAChB,EAAO,EAAG,EAAK,EAAG,EAAO,EAAG,EAAO,EAAI,CAC5C,GAAM,EAAM,EACZ,IAAI,EAAQ,EAAM,MAAM,EAAM,CAAE,EAChC,EAAM,KAAK,EAAE,EACb,KAAK,WAAW,CACZ,MAAO,KAAK,IAAI,EAAM,EAAM,CAAM,EAClC,IAAK,KAAK,IAAI,EAAM,EAAI,EAAS,CAAC,EAClC,OAAQ,EAAM,OACd,MAAO,CACX,EAAG,EAAI,CACX,CACA,EAAM,MAAQ,EAAM,MAAM,CAAI,EAC9B,EAAM,MAAM,IAAM,EAAM,EACxB,EAAM,MAAM,OAAS,EACrB,KAAK,WAAW,EAAO,EAAI,CAC/B,EACA,EAAS,UAAU,YAAc,SAAU,EAAO,CAC9C,KAAK,gBAAgB,CACjB,MAAO,KAAK,SAAS,EAAM,KAAK,EAChC,IAAK,KAAK,SAAS,EAAM,GAAG,EAC5B,OAAS,EAAM,QAAU,SAAW,SAAW,SAC/C,MAAO,EAAM,MAAM,MAAM,CAC7B,CAAC,CACL,EACA,EAAS,UAAU,gBAAkB,SAAU,EAAO,EAAU,CAG5D,IAAK,IAFD,EAAQ,KAAK,QAAU,KAAK,YAAY,EACxC,EAAgB,KAAK,oBAAoB,CAAC,CAAC,OACtC,EAAI,GAAY,EAAG,EAAI,EAAM,OAAQ,EAAI,EAAG,IAEjD,GADA,GAAS,EAAM,EAAE,CAAC,OAAS,EACvB,EAAQ,EACR,MAAO,CAAE,IAAK,EAAG,OAAQ,EAAQ,EAAM,EAAE,CAAC,OAAS,CAAc,EAEzE,MAAO,CAAE,IAAK,EAAI,EAAG,OAAQ,EAAQ,EAAM,EAAI,EAAE,CAAC,OAAS,CAAc,CAC7E,EACA,EAAS,UAAU,gBAAkB,SAAU,EAAK,EAAU,CAK1D,IAAK,IAJD,EAAQ,KAAK,QAAU,KAAK,YAAY,EACxC,EAAgB,KAAK,oBAAoB,CAAC,CAAC,OAC3C,EAAQ,EACR,EAAM,KAAK,IAAI,EAAI,IAAK,EAAM,MAAM,EAC/B,EAAI,GAAY,EAAG,EAAI,EAAK,EAAE,EACnC,GAAS,EAAM,EAAE,CAAC,OAAS,EAC/B,OAAO,EAAQ,EAAI,MACvB,EACA,EAAS,UAAU,OAAS,SAAU,EAAM,CACxC,OAAO,EAAK,MAAM,YAAY,CAClC,EACO,CACX,EAAE,EACF,EAAS,UAAU,aAAe,GAClC,EAAS,UAAU,aAAe,OAClC,EAAI,UAAU,EAAS,UAAW,CAAY,EAC9C,EAAQ,SAAW,CAEnB,CAAC,EAED,IAAI,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,cAAc,uBAAuB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC/I,IAAI,EAAM,EAAQ,WAAW,EACzB,EAAe,EAAQ,qBAAqB,CAAC,CAAC,aAC9C,EAAqC,UAAY,CACjD,SAAS,EAAoB,EAAW,EAAS,CAC7C,KAAK,QAAU,GACf,KAAK,MAAQ,CAAC,EACd,KAAK,OAAS,CAAC,EACf,KAAK,YAAc,EACnB,KAAK,UAAY,EACjB,IAAI,EAAO,KACX,KAAK,QAAU,UAAY,CAClB,KAAK,QAQV,KALA,IAAI,EAAc,IAAI,KAClB,EAAc,EAAK,YACnB,EAAU,GACV,EAAM,EAAK,IACX,EAAY,EACT,EAAK,MAAM,IACd,IACJ,IAAI,EAAM,EAAI,UAAU,EACpB,EAAiB,EAErB,IADA,EAAK,QAAU,GACR,EAAc,GAAK,CACtB,EAAK,aAAa,CAAW,EAC7B,EAAU,EACV,EACI,WACK,EAAK,MAAM,IAEpB,GADA,IACK,EAAiB,GAAM,GAAO,IAAI,KAAS,EAAe,GAAI,CAC/D,EAAK,QAAU,WAAW,EAAK,QAAS,EAAE,EAC1C,KACJ,CACJ,CACA,EAAK,YAAc,EACf,GAAW,KACX,EAAU,GACV,GAAa,GACb,EAAK,gBAAgB,EAAW,CAAO,CApBvC,CAqBR,CACJ,CAqFA,MApFA,GAAoB,UAAU,aAAe,SAAU,EAAW,CAC9D,KAAK,UAAY,EACjB,KAAK,MAAQ,CAAC,EACd,KAAK,OAAS,CAAC,EACf,KAAK,MAAM,CAAC,CAChB,EACA,EAAoB,UAAU,YAAc,SAAU,EAAK,CACvD,KAAK,IAAM,EACX,KAAK,MAAQ,CAAC,EACd,KAAK,OAAS,CAAC,EACf,KAAK,KAAK,CACd,EACA,EAAoB,UAAU,gBAAkB,SAAU,EAAU,EAAS,CACzE,IAAI,EAAO,CACP,MAAO,EACP,KAAM,CACV,EACA,KAAK,QAAQ,SAAU,CAAQ,MAAK,CAAC,CACzC,EACA,EAAoB,UAAU,MAAQ,SAAU,EAAU,CACtD,KAAK,YAAc,KAAK,IAAI,GAAY,EAAG,KAAK,YAAa,KAAK,IAAI,UAAU,CAAC,EACjF,KAAK,MAAM,OAAO,KAAK,YAAa,KAAK,MAAM,MAAM,EACrD,KAAK,OAAO,OAAO,KAAK,YAAa,KAAK,OAAO,MAAM,EACvD,KAAK,KAAK,EACV,KAAK,QAAU,WAAW,KAAK,QAAS,GAAG,CAC/C,EACA,EAAoB,UAAU,cAAgB,UAAY,CACtD,AACI,KAAK,UAAU,WAAW,KAAK,QAAS,GAAG,CACnD,EACA,EAAoB,UAAU,gBAAkB,SAAU,EAAO,CAC7D,IAAI,EAAW,EAAM,MAAM,IACvB,EAAM,EAAM,IAAI,IAAM,EAC1B,GAAI,IAAQ,EACR,KAAK,MAAM,GAAY,UAEtB,GAAI,EAAM,QAAU,SACrB,KAAK,MAAM,OAAO,EAAU,EAAM,EAAG,IAAI,EACzC,KAAK,OAAO,OAAO,EAAU,EAAM,EAAG,IAAI,MAEzC,CACD,IAAI,EAAO,MAAM,EAAM,CAAC,EACxB,EAAK,QAAQ,EAAU,CAAC,EACxB,KAAK,MAAM,OAAO,MAAM,KAAK,MAAO,CAAI,EACxC,KAAK,OAAO,OAAO,MAAM,KAAK,OAAQ,CAAI,CAC9C,CACA,KAAK,YAAc,KAAK,IAAI,EAAU,KAAK,YAAa,KAAK,IAAI,UAAU,CAAC,EAC5E,KAAK,KAAK,CACd,EACA,EAAoB,UAAU,KAAO,UAAY,CACzC,KAAK,SACL,aAAa,KAAK,OAAO,EAC7B,KAAK,QAAU,EACnB,EACA,EAAoB,UAAU,UAAY,SAAU,EAAK,CACrD,OAAO,KAAK,MAAM,IAAQ,KAAK,aAAa,CAAG,CACnD,EACA,EAAoB,UAAU,SAAW,SAAU,EAAK,CAGpD,OAFI,KAAK,aAAe,GACpB,KAAK,aAAa,CAAG,EAClB,KAAK,OAAO,IAAQ,OAC/B,EACA,EAAoB,UAAU,aAAe,SAAU,EAAK,CACxD,IAAI,EAAO,KAAK,IAAI,QAAQ,CAAG,EAC3B,EAAQ,KAAK,OAAO,EAAM,GAC1B,EAAO,KAAK,UAAU,cAAc,EAAM,EAAO,CAAG,EAUxD,OATI,KAAK,OAAO,GAAO,IAAO,EAAK,MAAQ,GAMlC,KAAK,aAAe,IACzB,KAAK,YAAc,EAAM,IANzB,KAAK,OAAO,GAAO,EAAK,MACxB,KAAK,MAAM,EAAM,GAAK,KAClB,KAAK,YAAc,EAAM,IACzB,KAAK,YAAc,EAAM,IAK1B,KAAK,MAAM,GAAO,EAAK,MAClC,EACA,EAAoB,UAAU,QAAU,UAAY,CAChD,KAAK,QAAU,GACf,KAAK,MAAQ,CAAC,EACd,KAAK,OAAS,CAAC,EACf,KAAK,YAAc,EACnB,KAAK,mBAAmB,CAC5B,EACO,CACX,EAAE,EACF,EAAI,UAAU,EAAoB,UAAW,CAAY,EACzD,EAAQ,oBAAsB,CAE9B,CAAC,EAED,IAAI,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,eAAe,WAAW,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAChI,IAAI,EAAO,EAAQ,YAAY,EAC3B,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAiC,UAAY,CAC7C,SAAS,EAAgB,EAAQ,EAAO,EAAM,CACtC,IAAS,IAAK,KAAK,EAAO,QAC9B,KAAK,UAAU,CAAM,EACrB,KAAK,MAAQ,EACb,KAAK,KAAO,EACZ,KAAK,OAAS,CAClB,CAqDA,MApDA,GAAgB,UAAU,UAAY,SAAU,EAAQ,CAChD,KAAK,OAAS,IAAM,EAAS,KAEjC,KAAK,OAAS,EACd,KAAK,MAAQ,CAAC,EAClB,EACA,EAAgB,UAAU,OAAS,SAAU,EAAM,EAAa,EAAS,EAAQ,CACxE,QAAK,OAOV,KAAK,IALD,EAAQ,EAAO,SACf,EAAM,EAAO,QACb,EAAuB,CAAC,EACxB,EAAU,EAAQ,SAAW,EAAQ,QAAQ,QAC7C,EAAW,GAAW,EAAQ,mBAAmB,EAAQ,QAAQ,qBAAqB,CAAC,EAClF,EAAI,EAAO,GAAK,EAAK,IAAK,CAC/B,IAAI,EAAS,KAAK,MAAM,GACxB,GAAI,GAAU,MAAQ,EAAQ,SAAS,CAAC,CAAC,QAAU,KAAK,OAAQ,CAC5D,GAAI,EAAU,CACV,EAAS,CAAC,EACV,IAAI,EAAQ,EAAQ,kBAAkB,EAAS,KAAK,OAAQ,EAAG,CAAG,EAClE,GAAI,EAAO,CACP,IAAI,EAAU,EAAM,QAAU,EAAM,EAAM,OAAS,EAAI,EACnD,EAAU,IACV,EAAI,GACR,EAAO,KAAK,IAAI,EAAM,EAAM,SAAU,EAAM,SAAU,EAAM,OAAQ,EAAM,MAAM,CAAC,CACrF,CACI,EAAO,OAAS,KAAK,aACrB,EAAS,EAAO,MAAM,EAAG,KAAK,UAAU,EAChD,KAEI,GAAS,EAAK,gBAAgB,EAAQ,QAAQ,CAAC,EAAG,KAAK,MAAM,EACzD,EAAO,OAAS,KAAK,aACrB,EAAS,EAAO,MAAM,EAAG,KAAK,UAAU,GAC5C,EAAS,EAAO,IAAI,SAAU,EAAO,CACjC,OAAO,IAAI,EAAM,EAAG,EAAM,OAAQ,EAAG,EAAM,OAAS,EAAM,MAAM,CACpE,CAAC,EAEL,KAAK,MAAM,GAAK,EAAO,OAAS,EAAS,EAC7C,CACI,KAAO,SAAW,EAEtB,IAAK,IAAI,EAAI,EAAO,OAAQ,KAAM,CAC9B,IAAI,EAAqB,EAAO,EAAE,CAAC,cAAc,CAAO,EACpD,EAAgB,EAAmB,SAAS,EAC5C,EAAqB,KAEzB,EAAqB,GAAiB,GACtC,EAAY,qBAAqB,EAAM,EAAoB,KAAK,MAAO,CAAM,EACjF,CACJ,CACA,KAAK,OAAS,EAAQ,SAAS,CAAC,CAAC,MADjC,CAEJ,EACO,CACX,EAAE,EACF,EAAgB,UAAU,WAAa,IACvC,EAAQ,gBAAkB,CAE1B,CAAC,EAED,IAAI,OAAO,kBAAkB,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC5G,IAAI,EAA6B,UAAY,CACzC,SAAS,GAAc,CACnB,KAAK,eACL,KAAK,QAAU,EACf,KAAK,UAAY,GACjB,KAAK,WAAa,IAClB,KAAK,MAAM,CACf,CA+KA,MA9KA,GAAY,UAAU,WAAa,SAAU,EAAS,CAClD,KAAK,SAAW,CACpB,EACA,EAAY,UAAU,IAAM,SAAU,EAAO,EAAY,EAAS,CAC1D,SAAK,WAEL,GAAS,KAAK,WAIlB,IAFK,KAAK,iBACN,KAAK,WAAW,OAAS,GACzB,IAAe,IAAS,CAAC,KAAK,WAAY,CAC1C,KAAK,WAAa,CAAC,EACnB,IAAI,EAAkB,KAAK,WAAW,OAClC,EAAkB,KAAK,WAAa,GACpC,KAAK,WAAW,OAAO,EAAG,EAAkB,KAAK,WAAa,CAAC,EAEnE,KAAK,WAAW,KAAK,KAAK,UAAU,EACpC,EAAM,GAAK,KAAK,KAAO,EAAE,KAAK,OAClC,EACI,EAAM,QAAU,UAAY,EAAM,QAAU,YAC5C,KAAK,WAAa,GACtB,KAAK,WAAW,KAAK,CAAK,CAH1B,CAIJ,EACA,EAAY,UAAU,aAAe,SAAU,EAAW,EAAK,CAC3D,KAAK,WAAW,KAAK,CACjB,MAAO,EACP,IAAK,GAAO,KAAK,IACrB,CAAC,CACL,EACA,EAAY,UAAU,cAAgB,UAAY,CAE9C,MADA,MAAK,WAAa,KACX,KAAK,IAChB,EACA,EAAY,UAAU,YAAc,SAAU,EAAM,EAAI,CACpD,AACI,IAAK,KAAK,KAAO,EAErB,IAAK,IADD,EAAQ,KAAK,WACR,EAAI,EAAM,OAAQ,KAAM,CAC7B,IAAI,EAAQ,EAAM,EAAE,CAAC,GACrB,GAAI,EAAM,IAAM,EACZ,MACA,EAAM,GAAK,IACX,EAAM,OAAS,GACvB,CACA,KAAK,WAAa,IACtB,EACA,EAAY,UAAU,aAAe,SAAU,EAAK,EAAO,CAEvD,IAAK,IADD,EAAQ,KAAK,WACR,EAAI,EAAM,OAAQ,KAAM,CAC7B,IAAI,EAAY,EAAM,GACtB,GAAI,EAAU,IAAM,EAGhB,OAFI,IACA,EAAY,EAAM,EAAI,IACnB,CAEf,CACJ,EACA,EAAY,UAAU,YAAc,UAAY,CAC5C,OAAO,KAAK,IAChB,EACA,EAAY,UAAU,UAAY,SAAU,EAAM,EAAI,CAClD,AACI,IAAK,KAAK,KAAO,EAGrB,IAAK,IAFD,EAAQ,KAAK,WACb,EAAM,KAAM,EAAQ,EACf,EAAI,EAAM,OAAQ,KAAM,CAC7B,IAAI,EAAQ,EAAM,EAAE,CAAC,GAGrB,GAFI,EAAM,GAAK,GAAM,CAAC,IAClB,EAAM,EAAI,GACV,EAAM,IAAM,EAAM,CAClB,EAAQ,EAAI,EACZ,KACJ,CACJ,CACA,OAAO,EAAM,MAAM,EAAO,CAAG,CACjC,EACA,EAAY,UAAU,iBAAmB,SAAU,EAAM,EAAI,CACzD,AACI,IAAK,KAAK,KAAO,CACzB,EACA,EAAY,UAAU,gBAAkB,SAAU,EAAM,EAAI,CACxD,AACI,IAAK,KAAK,KAAO,CACzB,EACA,EAAY,UAAU,KAAO,SAAU,EAAS,EAAY,CACxD,KAAK,WAAa,KAClB,IAAI,EAAQ,KAAK,WACZ,KAAmB,EAAO,EAAM,MAAM,EAM3C,CAJA,AACI,IAAU,KAAK,SACf,KAAK,oBAAsB,KAAK,MAAQ,KAAK,WAAW,SACxD,KAAK,WAAa,CAAC,GACvB,KAAK,UAAY,GACjB,IAAI,EAAW,EAAM,IAAI,EACrB,EAAqB,KAOzB,OANI,IACA,EAAqB,EAAQ,YAAY,EAAU,CAAU,EAC7D,KAAK,WAAW,KAAK,CAAQ,EAC7B,KAAK,SAAS,GAElB,KAAK,UAAY,GACV,CATU,CAUrB,EACA,EAAY,UAAU,KAAO,SAAU,EAAS,EAAY,CAKxD,GAJA,KAAK,WAAa,KAClB,AACI,IAAU,KAAK,SACnB,KAAK,UAAY,GACb,KAAK,mBAAqB,KAAK,KAAM,CACrC,IAAI,EAAO,KAAK,UAAU,KAAK,kBAAmB,KAAK,KAAO,CAAC,EAC/D,EAAgB,KAAK,WAAY,CAAI,EACrC,KAAK,kBAAoB,KAAK,KAC9B,KAAK,WAAW,QAAQ,SAAU,EAAG,CACjC,EAAE,EAAE,CAAC,GAAK,EAAE,KAAK,OACrB,EAAG,IAAI,CACX,CACA,IAAI,EAAW,KAAK,WAAW,IAAI,EAC/B,EAAqB,KAOzB,OANI,IACA,EAAqB,EAAQ,YAAY,EAAU,CAAU,EAC7D,KAAK,WAAW,KAAK,CAAQ,EAC7B,KAAK,SAAS,GAElB,KAAK,UAAY,GACV,CACX,EACA,EAAY,UAAU,SAAW,UAAY,CACzC,IAAI,EAAQ,KAAK,WACb,EAAY,EAAM,EAAM,OAAS,GACjC,EAAK,GAAa,EAAU,EAAE,CAAC,IAAM,EACzC,KAAK,kBAAoB,EACzB,KAAK,KAAO,CAChB,EACA,EAAY,UAAU,MAAQ,UAAY,CACtC,KAAK,WAAa,KAClB,KAAK,WAAa,KAClB,KAAK,WAAa,CAAC,EACnB,KAAK,WAAa,CAAC,EACnB,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,kBAAoB,KAAK,KAC9B,KAAK,WAAa,CAAC,CACvB,EACA,EAAY,UAAU,QAAU,UAAY,CACxC,OAAO,KAAK,WAAW,OAAS,CACpC,EACA,EAAY,UAAU,QAAU,UAAY,CACxC,OAAO,KAAK,WAAW,OAAS,CACpC,EACA,EAAY,UAAU,SAAW,SAAU,EAAK,CAC5C,AACI,IAAM,KAAK,KACf,KAAK,KAAO,CAChB,EACA,EAAY,UAAU,aAAe,UAAY,CAC7C,OAAO,KAAK,OAAS,KAAK,IAC9B,EACA,EAAY,UAAU,OAAS,UAAY,CACvC,MAAO,CACH,WAAY,KAAK,WACjB,WAAY,KAAK,UACrB,CACJ,EACA,EAAY,UAAU,SAAW,SAAU,EAAM,CAC7C,KAAK,MAAM,EACX,KAAK,WAAa,EAAK,WACvB,KAAK,WAAa,EAAK,UAC3B,EACA,EAAY,UAAU,aAAe,SAAU,EAAO,CAGlD,OAFI,EACO,EAAe,CAAK,EACxB,EAAe,KAAK,UAAU,EAAI;;EAAY,EAAe,KAAK,UAAU,CACvF,EACO,CACX,EAAE,EACF,EAAY,UAAU,QAAU,EAAY,UAAU,QACtD,EAAY,UAAU,QAAU,EAAY,UAAU,QACtD,EAAY,UAAU,QAAU,EAAY,UAAU,aACtD,EAAY,UAAU,UAAY,EAAY,UAAU,SACxD,SAAS,EAAmB,EAAO,EAAK,CACpC,IAAK,IAAI,EAAI,EAAK,KAAM,CACpB,IAAI,EAAW,EAAM,GACrB,GAAI,GAAY,CAAC,EAAS,EAAE,CAAC,OAAQ,CACjC,KAAO,EAAI,EAAM,GAAG,CAChB,IAAI,EAAU,EAAW,EAAM,GAAI,EAAM,EAAI,EAAE,EAC/C,EAAM,GAAK,EAAQ,GACnB,EAAM,EAAI,GAAK,EAAQ,GACvB,GACJ,CACA,MAAO,EACX,CACJ,CACJ,CACA,IAAI,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAM,EAAM,cACI,EAAM,cAwC1B,SAAS,EAAS,EAAK,CACnB,MAAO,CAAE,IAAK,EAAI,IAAK,OAAQ,EAAI,MAAO,CAC9C,CACA,SAAS,EAAW,EAAG,CACnB,MAAO,CACH,MAAO,EAAS,EAAE,KAAK,EACvB,IAAK,EAAS,EAAE,GAAG,EACnB,OAAQ,EAAE,OACV,MAAO,EAAE,MAAM,MAAM,CACzB,CACJ,CACA,SAAS,EAAe,EAAG,CAEvB,GADA,IAAS,KACL,MAAM,QAAQ,CAAC,EACf,OAAO,EAAE,IAAI,CAAc,CAAC,CAAC,KAAK;CAAI,EAE1C,IAAI,EAAO,GAmBX,OAlBI,EAAE,QACF,EAAO,EAAE,QAAU,SAAW,IAAM,IACpC,GAAQ,IAAM,EAAE,MAAQ,KAEnB,EAAE,QACP,AAII,EAJA,MAAM,QAAQ,EAAE,KAAK,EACd,EAAE,MAAM,IAAI,CAAc,CAAC,CAAC,KAAK;CAAI,EAGrC,EAAe,EAAE,KAAK,GAGjC,EAAE,QACF,GAAQ,EAAe,CAAC,IAExB,EAAE,IAAM,EAAE,OACV,GAAQ,MAAS,EAAE,IAAM,EAAE,KAAO,KAE/B,CACX,CACA,SAAS,EAAe,EAAG,CACvB,OAAO,EAAE,MAAM,IAAM,IAAM,EAAE,MAAM,OAC7B,KAAO,EAAE,IAAI,IAAM,IAAM,EAAE,IAAI,MACzC,CACA,SAAS,EAAK,EAAI,EAAI,CAClB,IAAI,EAAK,EAAG,QAAU,SAClB,EAAK,EAAG,QAAU,SACtB,GAAI,GAAM,EACN,GAAI,EAAI,EAAG,MAAO,EAAG,GAAG,GAAK,EACzB,EAAM,EAAI,EAAI,EAAE,OAEf,GAAI,EAAI,EAAG,MAAO,EAAG,KAAK,GAAK,EAChC,EAAM,EAAI,EAAI,CAAE,OAGhB,OAAO,UAGV,GAAI,GAAM,CAAC,EACZ,GAAI,EAAI,EAAG,MAAO,EAAG,GAAG,GAAK,EACzB,EAAM,EAAI,EAAI,EAAE,OAEf,GAAI,EAAI,EAAG,IAAK,EAAG,KAAK,GAAK,EAC9B,EAAM,EAAI,EAAI,EAAE,OAGhB,OAAO,UAGV,GAAI,CAAC,GAAM,EACZ,GAAI,EAAI,EAAG,MAAO,EAAG,KAAK,GAAK,EAC3B,EAAM,EAAI,EAAI,CAAE,OAEf,GAAI,EAAI,EAAG,MAAO,EAAG,KAAK,GAAK,EAChC,EAAM,EAAI,EAAI,CAAE,OAGhB,OAAO,UAGV,GAAI,CAAC,GAAM,CAAC,EACb,GAAI,EAAI,EAAG,MAAO,EAAG,KAAK,GAAK,EAC3B,EAAM,EAAI,EAAI,CAAE,OAEf,GAAI,EAAI,EAAG,IAAK,EAAG,KAAK,GAAK,EAC9B,EAAM,EAAI,EAAI,EAAE,OAGhB,OAAO,KAGf,MAAO,CAAC,EAAI,CAAE,CAClB,CACA,SAAS,EAAW,EAAK,EAAK,CAC1B,IAAK,IAAI,EAAI,EAAI,OAAQ,KACrB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC5B,GAAI,CAAC,EAAK,EAAI,GAAI,EAAI,EAAE,EAAG,CACvB,KAAO,EAAI,EAAI,QAAQ,CACnB,KAAO,KACH,EAAK,EAAI,GAAI,EAAI,EAAE,EAEvB,EAAI,EAAI,OACR,GACJ,CACA,MAAO,CAAC,EAAK,CAAG,CACpB,CAKR,MAFA,GAAI,gBAAkB,EAAI,gBACtB,EAAI,eAAiB,EAAI,eAAiB,KACvC,CAAC,EAAK,CAAG,CACpB,CACA,SAAS,EAAM,EAAI,EAAI,CACnB,IAAI,EAAK,EAAG,QAAU,SAClB,EAAK,EAAG,QAAU,SACtB,GAAI,GAAM,EACF,EAAI,EAAG,MAAO,EAAG,KAAK,EAAI,EAC1B,EAAM,EAAI,EAAI,CAAC,EAGf,EAAM,EAAI,EAAI,CAAC,OAGlB,GAAI,GAAM,CAAC,EACR,EAAI,EAAG,MAAO,EAAG,GAAG,GAAK,EACzB,EAAM,EAAI,EAAI,EAAE,GAEX,EAAI,EAAG,MAAO,EAAG,KAAK,GAAK,GAIhC,EAAM,EAAI,EAAM,WAAW,EAAG,MAAO,EAAG,KAAK,EAAG,EAAE,EAHlD,EAAM,EAAI,EAAI,CAAE,QAOnB,GAAI,CAAC,GAAM,EACR,EAAI,EAAG,MAAO,EAAG,GAAG,GAAK,EACzB,EAAM,EAAI,EAAI,EAAE,GAEX,EAAI,EAAG,MAAO,EAAG,KAAK,GAAK,GAIhC,EAAM,EAAI,EAAM,WAAW,EAAG,MAAO,EAAG,KAAK,EAAG,EAAE,EAHlD,EAAM,EAAI,EAAI,CAAE,QAOnB,GAAI,CAAC,GAAM,CAAC,EACb,GAAI,EAAI,EAAG,MAAO,EAAG,GAAG,GAAK,EACzB,EAAM,EAAI,EAAI,EAAE,OAEf,GAAI,EAAI,EAAG,IAAK,EAAG,KAAK,GAAK,EAC9B,EAAM,EAAI,EAAI,EAAE,MAEf,CACD,IAAI,EAAQ,EAeZ,OAdI,EAAI,EAAG,MAAO,EAAG,KAAK,EAAI,IAC1B,EAAS,EACT,EAAK,EAAW,EAAI,EAAG,KAAK,GAE5B,EAAI,EAAG,IAAK,EAAG,GAAG,EAAI,IACtB,EAAQ,EAAW,EAAI,EAAG,GAAG,GAEjC,EAAS,EAAG,IAAK,EAAG,MAAO,EAAG,IAAK,EAAE,EACjC,GAAS,CAAC,IACV,EAAG,MAAQ,EAAM,MACjB,EAAG,MAAQ,EAAM,MACjB,EAAG,IAAM,EAAM,IACf,EAAQ,GAEL,CAAC,EAAI,EAAQ,CAAK,CAAC,CAAC,OAAO,OAAO,CAC7C,CAEJ,MAAO,CAAC,EAAI,CAAE,CAClB,CACA,SAAS,EAAM,EAAI,EAAI,EAAK,CACxB,EAAS,EAAG,MAAO,EAAG,MAAO,EAAG,IAAK,CAAG,EACxC,EAAS,EAAG,IAAK,EAAG,MAAO,EAAG,IAAK,CAAG,CAC1C,CACA,SAAS,EAAS,EAAK,EAAO,EAAK,EAAK,CAChC,EAAI,MAAQ,GAAO,EAAI,EAAQ,EAAA,CAAK,MACpC,EAAI,QAAU,GAAO,EAAI,OAAS,EAAM,SAE5C,EAAI,KAAO,GAAO,EAAI,IAAM,EAAM,IACtC,CACA,SAAS,EAAW,EAAG,EAAK,CACxB,IAAI,EAAQ,EAAE,MACV,EAAM,EAAE,IACZ,EAAE,IAAM,EAAS,CAAG,EACpB,IAAI,EAAa,EAAE,IAAI,IAAM,EAAE,MAAM,IACjC,EAAa,EAAM,OAAO,EAAY,EAAM,MAAM,EAClD,EAAM,EAAa,EAAI,OAAS,EAAI,OAAS,EAAE,MAAM,OASzD,OARA,EAAM,KAAK,EAAW,EAAE,CAAC,UAAU,EAAG,CAAG,CAAC,EAC1C,EAAW,GAAK,EAAW,EAAE,CAAC,OAAO,CAAG,EAOjC,CALH,MAAO,EAAS,CAAG,EACd,MACL,MAAO,EACP,OAAQ,EAAE,MAEJ,CACd,CACA,SAAS,EAAgB,EAAW,EAAG,CACnC,EAAI,EAAW,CAAC,EAChB,IAAK,IAAI,EAAI,EAAU,OAAQ,KAAM,CAEjC,IAAK,IADD,EAAW,EAAU,GAChB,EAAI,EAAG,EAAI,EAAS,OAAQ,IAAK,CACtC,IAAI,EAAI,EAAS,GACb,EAAU,EAAM,EAAG,CAAC,EACxB,EAAI,EAAQ,GACR,EAAQ,QAAU,IACd,EAAQ,IACR,EAAS,OAAO,EAAI,EAAG,EAAG,EAAQ,GAAI,EAAQ,EAAE,EAChD,KAEM,EAAQ,KACd,EAAS,OAAO,EAAG,CAAC,EACpB,KAGZ,CACK,EAAS,QACV,EAAU,OAAO,EAAG,CAAC,CAE7B,CACA,OAAO,CACX,CACA,SAAS,EAAgB,EAAW,EAAW,CAC3C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,OAAQ,IAElC,IAAK,IADD,EAAS,EAAU,GACd,EAAI,EAAG,EAAI,EAAO,OAAQ,IAC/B,EAAgB,EAAW,EAAO,EAAE,CAGhD,CACA,EAAQ,YAAc,CAEtB,CAAC,EAED,IAAI,OAAO,6BAA6B,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACvH,IAAI,EAAQ,EAAQ,UAAU,CAAC,CAAC,MA4LhC,EAAQ,SA3LsB,UAAY,CACtC,SAAS,EAAS,EAAU,EAAO,CAC/B,KAAK,SAAW,EACZ,MAAM,QAAQ,CAAK,EACnB,KAAK,MAAQ,EAGb,EAAQ,KAAK,MAAQ,CAAC,CAAK,EAE/B,IAAI,EAAO,EAAM,EAAM,OAAS,GAChC,KAAK,MAAQ,IAAI,EAAM,EAAM,EAAE,CAAC,MAAM,IAAK,EAAM,EAAE,CAAC,MAAM,OAAQ,EAAK,IAAI,IAAK,EAAK,IAAI,MAAM,EAC/F,KAAK,MAAQ,KAAK,MAAM,MACxB,KAAK,IAAM,KAAK,MAAM,IACtB,KAAK,MAAM,QAAQ,SAAU,EAAM,CAC/B,EAAK,YAAY,IAAI,CACzB,EAAG,IAAI,CACX,CAyKA,MAxKA,GAAS,UAAU,SAAW,SAAU,EAAO,CAC3C,KAAK,MAAM,KAAO,EAClB,KAAK,IAAI,KAAO,EAChB,KAAK,MAAM,QAAQ,SAAU,EAAM,CAC/B,EAAK,MAAM,KAAO,EAClB,EAAK,IAAI,KAAO,CACpB,CAAC,CACL,EACA,EAAS,UAAU,QAAU,SAAU,EAAM,CACzC,GAAI,EAAK,QAAS,CACd,GAAI,EAAK,MAAM,IAAM,KAAK,UAAY,EAAK,OAAS,KAAK,OACrD,MAAU,MAAM,2DAA2D,EAE/E,KAAK,MAAM,KAAK,CAAI,EACpB,KAAK,MAAM,KAAK,SAAU,EAAG,EAAG,CAC5B,MAAO,CAAC,EAAE,MAAM,WAAW,EAAE,MAAM,IAAK,EAAE,MAAM,MAAM,CAC1D,CAAC,EACG,KAAK,MAAM,WAAW,EAAK,MAAM,IAAK,EAAK,MAAM,MAAM,EAAI,GAC3D,KAAK,IAAI,IAAM,EAAK,IAAI,IACxB,KAAK,IAAI,OAAS,EAAK,IAAI,QAEtB,KAAK,MAAM,aAAa,EAAK,IAAI,IAAK,EAAK,IAAI,MAAM,EAAI,IAC9D,KAAK,MAAM,IAAM,EAAK,MAAM,IAC5B,KAAK,MAAM,OAAS,EAAK,MAAM,OAEvC,MACK,GAAI,EAAK,MAAM,KAAO,KAAK,IAAI,IAChC,KAAK,MAAM,KAAK,CAAI,EACpB,KAAK,IAAI,IAAM,EAAK,IAAI,IACxB,KAAK,IAAI,OAAS,EAAK,IAAI,YAE1B,GAAI,EAAK,IAAI,KAAO,KAAK,MAAM,IAChC,KAAK,MAAM,QAAQ,CAAI,EACvB,KAAK,MAAM,IAAM,EAAK,MAAM,IAC5B,KAAK,MAAM,OAAS,EAAK,MAAM,YAG/B,MAAU,MAAM,gEAAgE,EAEpF,EAAK,SAAW,IACpB,EACA,EAAS,UAAU,YAAc,SAAU,EAAK,CAC5C,OAAO,GAAO,KAAK,MAAM,KAAO,GAAO,KAAK,IAAI,GACpD,EACA,EAAS,UAAU,KAAO,SAAU,EAAU,EAAQ,EAAW,CAC7D,IAAI,EAAU,EAAG,EAAQ,KAAK,MAAO,EAAM,EAAK,EAAM,EAAW,GAC7D,IACA,EAAS,KAAK,IAAI,IAClB,EAAY,KAAK,IAAI,QAEzB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CAGnC,GAFA,EAAO,EAAM,GACb,EAAM,EAAK,MAAM,aAAa,EAAQ,CAAS,EAC3C,GAAO,GAAI,CACX,EAAS,KAAM,EAAQ,EAAW,EAAS,CAAQ,EACnD,MACJ,CAGA,GAFA,EAAO,EAAS,KAAM,EAAK,MAAM,IAAK,EAAK,MAAM,OAAQ,EAAS,CAAQ,EAC1E,EAAO,CAAC,GAAQ,EAAS,EAAK,YAAa,EAAK,MAAM,IAAK,EAAK,MAAM,OAAQ,CAAO,EACjF,GAAQ,IAAQ,EAChB,OAEJ,EAAW,CAAC,EAAK,QACjB,EAAU,EAAK,IAAI,MACvB,CACA,EAAS,KAAM,EAAQ,EAAW,EAAS,CAAQ,CACvD,EACA,EAAS,UAAU,cAAgB,SAAU,EAAK,EAAQ,CAEtD,IAAK,IADD,EAAM,EACD,EAAI,EAAG,EAAI,KAAK,MAAM,OAAQ,IAAK,CAGxC,GAFA,EAAO,KAAK,MAAM,GAClB,EAAM,EAAK,MAAM,WAAW,EAAK,CAAM,EACnC,GAAO,GACP,MAAO,CACG,OACN,KAAM,OACV,EAEC,GAAI,IAAQ,EACb,MAAO,CACG,OACN,KAAM,QACV,CAER,CACA,OAAO,IACX,EACA,EAAS,UAAU,eAAiB,SAAU,EAAK,EAAQ,EAAK,CAC5D,IAAI,EAAM,KAAK,cAAc,EAAK,CAAM,EAAG,EAAM,EACjD,GAAI,EAEA,IADA,EAAO,EAAI,KACP,EAAI,MAAQ,UACT,EAAK,MAAM,QAAU,GACrB,EAAK,MAAM,KAAO,EACrB,OAAO,SAAW,OAAO,QAAQ,IAAI,EAAK,EAAQ,CAAI,OAErD,GAAI,EAAK,MAAM,KAAO,EAAK,CAC5B,EAAQ,KAAK,MACb,IAAI,EAAI,EAAM,QAAQ,CAAI,EAI1B,IAHI,IAAM,IACN,KAAK,MAAM,QAAU,GAEjB,EAAI,EAAM,OAAQ,IAAK,CAG3B,GAFA,EAAO,EAAM,GACb,EAAK,MAAM,QAAU,EACjB,CAAC,EAAK,QACN,OAEJ,EAAK,IAAI,QAAU,CACvB,CACA,KAAK,IAAI,QAAU,CACvB,EAER,EACA,EAAS,UAAU,MAAQ,SAAU,EAAK,EAAQ,CAC9C,IAAI,EAAM,KAAK,cAAc,EAAK,CAAM,EACxC,GAAI,CAAC,GAAO,EAAI,MAAQ,SACpB,OAAO,KACX,IAAI,EAAO,EAAI,KACX,EAAQ,KAAK,MACb,EAAW,KAAK,SAChB,EAAI,EAAM,QAAQ,CAAI,EACtB,EAAa,EAAM,EAAI,GAC3B,KAAK,IAAI,IAAM,EAAW,IAAI,IAC9B,KAAK,IAAI,OAAS,EAAW,IAAI,OACjC,EAAQ,EAAM,OAAO,EAAG,EAAM,OAAS,CAAC,EACxC,IAAI,EAAc,IAAI,EAAS,EAAU,CAAK,EAE9C,OADA,EAAS,OAAO,EAAS,QAAQ,IAAI,EAAI,EAAG,EAAG,CAAW,EACnD,CACX,EACA,EAAS,UAAU,MAAQ,SAAU,EAAc,CAE/C,IAAK,IADD,EAAQ,EAAa,MAChB,EAAI,EAAG,EAAI,EAAM,OAAQ,IAC9B,KAAK,QAAQ,EAAM,EAAE,EAEzB,IAAI,EAAW,KAAK,SACpB,EAAS,OAAO,EAAS,QAAQ,CAAY,EAAG,CAAC,CACrD,EACA,EAAS,UAAU,SAAW,UAAY,CACtC,IAAI,EAAM,CAAC,KAAK,MAAM,SAAS,EAAI,KAAK,EAKxC,OAJA,KAAK,MAAM,QAAQ,SAAU,EAAM,CAC/B,EAAI,KAAK,KAAO,EAAK,SAAS,CAAC,CACnC,CAAC,EACD,EAAI,KAAK,GAAG,EACL,EAAI,KAAK;CAAI,CACxB,EACA,EAAS,UAAU,cAAgB,SAAU,EAAK,CAE9C,IAAK,IADD,EAAoB,EACf,EAAI,EAAG,EAAI,KAAK,MAAM,OAAQ,IAAK,CACxC,IAAI,EAAO,KAAK,MAAM,GAEtB,GADA,GAAO,EAAK,MAAM,OAAS,EACvB,EAAM,EACN,MAAO,CACH,IAAK,EAAK,MAAM,IAChB,OAAQ,EAAK,MAAM,OAAS,CAChC,EAGJ,GADA,GAAO,EAAK,YAAY,OACpB,EAAM,EACN,OAAO,EAAK,MAEhB,EAAoB,EAAK,IAAI,MACjC,CACA,MAAO,CACH,IAAK,KAAK,IAAI,IACd,OAAQ,KAAK,IAAI,OAAS,CAC9B,CACJ,EACO,CACX,EAC0B,CAE1B,CAAC,EAED,IAAI,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAE3G,IAAI,EADQ,EAAQ,SAAS,CAAC,CAAC,MACL,cACtB,EAA2B,UAAY,CACvC,SAAS,GAAY,CACjB,KAAK,OAAS,CAAC,EACf,KAAK,MAAQ,CACjB,CAiNA,MAhNA,GAAU,UAAU,WAAa,SAAU,EAAK,EAAc,EAAY,CAEtE,IAAK,IADD,EAAO,KAAK,OACP,EAAI,GAAc,EAAG,EAAI,EAAK,OAAQ,IAAK,CAChD,IAAI,EAAQ,EAAK,GACb,EAAS,EAAc,EAAK,EAAM,GAAG,EACrC,OAAS,GAEb,KAAI,EAAW,EAAc,EAAK,EAAM,KAAK,EAK7C,OAJI,IAAW,EACJ,GAAgB,IAAa,EAAI,CAAC,EAAI,EAAI,EACjD,EAAW,GAAM,IAAa,GAAK,CAAC,EAC7B,EACJ,CAAC,EAAI,CALiC,CAMjD,CACA,MAAO,CAAC,EAAI,CAChB,EACA,EAAU,UAAU,IAAM,SAAU,EAAO,CACvC,IAAI,EAAe,CAAC,EAAM,QAAQ,EAC9B,EAAa,KAAK,WAAW,EAAM,MAAO,CAAY,EACtD,EAAa,IACb,EAAa,CAAC,EAAa,GAC/B,IAAI,EAAW,KAAK,WAAW,EAAM,IAAK,EAAc,CAAU,EAKlE,OAJI,EAAW,EACX,EAAW,CAAC,EAAW,EAEvB,IACG,KAAK,OAAO,OAAO,EAAY,EAAW,EAAY,CAAK,CACtE,EACA,EAAU,UAAU,QAAU,SAAU,EAAM,CAE1C,IAAK,IADD,EAAU,CAAC,EACN,EAAI,EAAK,OAAQ,KACtB,EAAQ,KAAK,MAAM,EAAS,KAAK,IAAI,EAAK,EAAE,CAAC,EAEjD,OAAO,CACX,EACA,EAAU,UAAU,eAAiB,SAAU,EAAK,CAChD,IAAI,EAAI,KAAK,WAAW,CAAG,EAC3B,GAAI,GAAK,EACL,OAAO,KAAK,OAAO,OAAO,EAAG,CAAC,CACtC,EACA,EAAU,UAAU,MAAQ,UAAY,CACpC,IAAI,EAAU,CAAC,EACX,EAAO,KAAK,OAChB,EAAO,EAAK,KAAK,SAAU,EAAG,EAAG,CAC7B,OAAO,EAAc,EAAE,MAAO,EAAE,KAAK,CACzC,CAAC,EAED,IAAK,IADD,EAAO,EAAK,GAAI,EACX,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CAClC,EAAQ,EACR,EAAO,EAAK,GACZ,IAAI,EAAM,EAAc,EAAM,IAAK,EAAK,KAAK,EACzC,EAAM,GAEN,GAAO,GAAK,CAAC,EAAM,QAAQ,GAAK,CAAC,EAAK,QAAQ,IAE9C,EAAc,EAAM,IAAK,EAAK,GAAG,EAAI,IACrC,EAAM,IAAI,IAAM,EAAK,IAAI,IACzB,EAAM,IAAI,OAAS,EAAK,IAAI,QAEhC,EAAK,OAAO,EAAG,CAAC,EAChB,EAAQ,KAAK,CAAI,EACjB,EAAO,EACP,IACJ,CAEA,MADA,MAAK,OAAS,EACP,CACX,EACA,EAAU,UAAU,SAAW,SAAU,EAAK,EAAQ,CAClD,OAAO,KAAK,WAAW,CAAO,MAAa,QAAO,CAAC,GAAK,CAC5D,EACA,EAAU,UAAU,cAAgB,SAAU,EAAK,CAC/C,OAAO,KAAK,WAAW,CAAG,GAAK,CACnC,EACA,EAAU,UAAU,aAAe,SAAU,EAAK,CAC9C,IAAI,EAAI,KAAK,WAAW,CAAG,EAC3B,GAAI,GAAK,EACL,OAAO,KAAK,OAAO,EAC3B,EACA,EAAU,UAAU,SAAW,SAAU,EAAU,EAAQ,CACvD,IAAI,EAAO,KAAK,OAChB,GAAI,EAAK,EAAE,CAAC,MAAM,IAAM,GAAU,EAAK,EAAK,OAAS,EAAE,CAAC,MAAM,IAAM,EAChE,MAAO,CAAC,EACZ,IAAI,EAAa,KAAK,WAAW,CAAE,IAAK,EAAU,OAAQ,CAAE,CAAC,EACzD,EAAa,IACb,EAAa,CAAC,EAAa,GAC/B,IAAI,EAAW,KAAK,WAAW,CAAE,IAAK,EAAQ,OAAQ,CAAE,EAAG,CAAU,EACjE,EAAW,IACX,EAAW,CAAC,EAAW,GAE3B,IAAK,IADD,EAAU,CAAC,EACN,EAAI,EAAY,EAAI,EAAU,IACnC,EAAQ,KAAK,EAAK,EAAE,EAExB,OAAO,CACX,EACA,EAAU,UAAU,UAAY,UAAY,CACxC,OAAO,KAAK,OAAO,OAAO,EAAG,KAAK,OAAO,MAAM,CACnD,EACA,EAAU,UAAU,OAAS,SAAU,EAAS,CACxC,KAAK,SACL,KAAK,OAAO,EAChB,KAAK,QAAU,EACf,KAAK,SAAW,KAAK,UAAU,KAAK,IAAI,EACxC,KAAK,QAAQ,GAAG,SAAU,KAAK,QAAQ,CAC3C,EACA,EAAU,UAAU,OAAS,UAAY,CAChC,AAGL,KAAK,WADL,KAAK,QAAQ,eAAe,SAAU,KAAK,QAAQ,EACpC,KACnB,EACA,EAAU,UAAU,UAAY,SAAU,EAAO,CAM7C,IAAK,IALD,EAAQ,EAAM,MACd,EAAM,EAAM,IACZ,EAAW,EAAM,IACjB,EAAS,EAAI,IACb,EAAS,KAAK,OACT,EAAI,EAAG,EAAI,EAAO,OAAQ,EAAI,EAAG,IAAK,CAC3C,IAAI,EAAI,EAAO,GACf,GAAI,EAAE,IAAI,KAAO,EACb,KACR,CACA,GAAI,EAAM,QAAU,SAGhB,IAFA,IAAI,EAAU,EAAS,EACnB,EAAU,CAAC,EAAM,OAAS,EAAI,OAC3B,EAAI,EAAG,IAAK,CACf,IAAI,EAAI,EAAO,GACf,GAAI,EAAE,MAAM,IAAM,EACd,MASJ,GARI,EAAE,MAAM,KAAO,GAAY,EAAE,MAAM,QAAU,EAAM,SAC/C,EAAE,MAAM,QAAU,EAAM,QAAU,KAAK,OAAS,IAGhD,EAAE,MAAM,QAAU,EAClB,EAAE,MAAM,KAAO,IAGnB,EAAE,IAAI,KAAO,GAAY,EAAE,IAAI,QAAU,EAAM,OAAQ,CACvD,GAAI,EAAE,IAAI,QAAU,EAAM,QAAU,KAAK,MAAQ,EAC7C,SAEA,EAAE,IAAI,QAAU,EAAM,QAAU,EAAU,GAAK,EAAI,EAAI,GACnD,EAAE,IAAI,OAAS,EAAE,MAAM,QAAU,EAAE,IAAI,QAAU,EAAO,EAAI,EAAE,CAAC,MAAM,SACrE,EAAE,IAAI,QAAU,GAExB,EAAE,IAAI,QAAU,EAChB,EAAE,IAAI,KAAO,CACjB,CACJ,MAKA,IAFA,IAAI,EAAU,EAAW,EACrB,EAAU,EAAM,OAAS,EAAI,OAC1B,EAAI,EAAG,IAAK,CACf,IAAI,EAAI,EAAO,GACf,GAAI,EAAE,MAAM,IAAM,EACd,MACA,EAAE,IAAI,IAAM,IACR,EAAW,EAAE,IAAI,KACd,GAAY,EAAE,IAAI,KAAO,EAAM,OAAS,EAAE,IAAI,SACrD,EAAE,IAAI,IAAM,EACZ,EAAE,IAAI,OAAS,EAAM,QAEhB,EAAE,IAAI,KAAO,EACd,EAAE,IAAI,QAAU,EAAI,QAChB,GAAW,EAAE,IAAI,OAAS,EAAM,UAChC,EAAE,IAAI,OAAS,EAAM,OACrB,EAAE,IAAI,IAAM,EAAM,MAItB,EAAE,IAAI,QAAU,EAChB,EAAE,IAAI,KAAO,GAGZ,EAAE,IAAI,IAAM,IACjB,EAAE,IAAI,KAAO,GAEb,EAAE,MAAM,IAAM,IACV,EAAW,EAAE,MAAM,KAChB,GAAY,EAAE,MAAM,KAAO,EAAM,OAAS,EAAE,MAAM,SACzD,EAAE,MAAM,IAAM,EACd,EAAE,MAAM,OAAS,EAAM,QAElB,EAAE,MAAM,KAAO,EAChB,EAAE,MAAM,QAAU,EAAI,QAClB,GAAW,EAAE,MAAM,OAAS,EAAM,UAClC,EAAE,MAAM,OAAS,EAAM,OACvB,EAAE,MAAM,IAAM,EAAM,MAIxB,EAAE,MAAM,QAAU,EAClB,EAAE,MAAM,KAAO,GAGd,EAAE,MAAM,IAAM,IACnB,EAAE,MAAM,KAAO,EAEvB,CAEJ,GAAI,GAAW,GAAK,EAAI,EACpB,KAAO,EAAI,EAAG,IAAK,CACf,IAAI,EAAI,EAAO,GACf,EAAE,MAAM,KAAO,EACf,EAAE,IAAI,KAAO,CACjB,CAER,EACO,CACX,EAAE,EACF,EAAU,UAAU,cAAgB,EACpC,EAAQ,UAAY,CAEpB,CAAC,EAED,IAAI,OAAO,wBAAwB,CAAC,UAAU,UAAU,SAAS,gBAAgB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACvH,IAAI,EAAa,MAAQ,KAAK,YAAe,UAAY,CACrD,IAAI,EAAgB,SAAU,EAAG,EAAG,CAIhC,MAHA,GAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAU,EAAG,EAAG,CAAE,EAAE,UAAY,CAAG,GAC1E,SAAU,EAAG,EAAG,CAAE,IAAK,IAAI,KAAK,EAAO,OAAO,UAAU,eAAe,KAAK,EAAG,CAAC,IAAG,EAAE,GAAK,EAAE,GAAI,EAC7F,EAAc,EAAG,CAAC,CAC7B,EACA,OAAO,SAAU,EAAG,EAAG,CACnB,GAAI,OAAO,GAAM,YAAc,IAAM,KACjC,MAAU,UAAU,uBAAyB,OAAO,CAAC,EAAI,+BAA+B,EAC5F,EAAc,EAAG,CAAC,EAClB,SAAS,GAAK,CAAE,KAAK,YAAc,CAAG,CACtC,EAAE,UAAY,IAAM,KAAO,OAAO,OAAO,CAAC,GAAK,EAAG,UAAY,EAAE,UAAW,IAAI,EACnF,CACJ,EAAA,CAAG,EAEC,EAAsB,SAAU,EAAQ,CACxC,EAAU,EAAM,CAAM,EACtB,SAAS,EAAK,EAAO,EAAa,CAC9B,IAAI,EAAQ,EAAO,KAAK,IAAI,GAAK,KAQjC,MAPA,GAAM,SAAW,KACjB,EAAM,YAAc,EACpB,EAAM,MAAQ,EACd,EAAM,MAAQ,EAAM,MACpB,EAAM,IAAM,EAAM,IAClB,EAAM,QAAU,EAAM,MAAM,KAAO,EAAM,IAAI,IAC7C,EAAM,SAAW,EAAM,OAAS,CAAC,EAC1B,CACX,CAwDA,MAvDA,GAAK,UAAU,SAAW,UAAY,CAClC,MAAO,IAAM,KAAK,YAAc,KAAO,KAAK,MAAM,SAAS,CAC/D,EACA,EAAK,UAAU,YAAc,SAAU,EAAU,CAC7C,KAAK,SAAW,EAChB,KAAK,SAAS,QAAQ,SAAU,EAAM,CAClC,EAAK,YAAY,CAAQ,CAC7B,CAAC,CACL,EACA,EAAK,UAAU,MAAQ,UAAY,CAE/B,IAAI,EAAO,IAAI,EADH,KAAK,MAAM,MACC,EAAG,KAAK,WAAW,EAK3C,OAJA,KAAK,SAAS,QAAQ,SAAU,EAAS,CACrC,EAAK,SAAS,KAAK,EAAQ,MAAM,CAAC,CACtC,CAAC,EACD,EAAK,iBAAmB,KAAK,iBACtB,CACX,EACA,EAAK,UAAU,WAAa,SAAU,EAAM,CACpC,SAAK,MAAM,QAAQ,CAAI,EAE3B,GAAa,EAAM,KAAK,KAAK,EAE7B,IAAK,IADD,EAAM,EAAK,MAAM,IAAK,EAAS,EAAK,MAAM,OACrC,EAAI,EAAG,EAAM,GAAI,EAAI,KAAK,SAAS,SACxC,EAAM,KAAK,SAAS,EAAE,CAAC,MAAM,QAAQ,EAAK,CAAM,EAC5C,GAAO,GAFqC,KAKpD,IAAI,EAAa,KAAK,SAAS,GAC3B,EAAgB,EACpB,GAAI,GAAO,EACP,IAAI,EAAW,MAAM,cAAc,CAAI,EACnC,OAAO,EAAW,WAAW,CAAI,EAEjC,EAAgB,CAAA,CAGxB,IAAK,IADD,EAAM,EAAK,MAAM,IAAI,IAAK,EAAS,EAAK,MAAM,IAAI,OAC7C,EAAI,EAAG,EAAM,GAAI,EAAI,KAAK,SAAS,SACxC,EAAM,KAAK,SAAS,EAAE,CAAC,MAAM,QAAQ,EAAK,CAAM,EAC5C,GAAO,GAFqC,KAKhD,GAAO,GACP,IAGJ,IAAK,IAFD,EAAgB,KAAK,SAAS,OAAO,EAAG,EAAI,EAAG,CAAI,EACnD,EAAO,GAAO,EAAI,EAAc,OAAS,EAAI,EAAc,OACtD,EAAI,EAAe,EAAI,EAAM,IAClC,EAAK,WAAW,EAAc,EAAE,EAGpC,OADA,EAAK,YAAY,KAAK,QAAQ,EACvB,CA7BsB,CA8BjC,EACA,EAAK,UAAU,aAAe,SAAU,EAAO,CAC3C,OAAO,EAAa,EAAO,KAAK,KAAK,CACzC,EACO,CACX,EAtEgB,EAAQ,eAAe,CAAC,CAAC,SAsE9B,EACX,SAAS,EAAa,EAAO,EAAQ,CACjC,EAAM,KAAO,EAAO,IAChB,EAAM,KAAO,IACb,EAAM,QAAU,EAAO,OAC/B,CACA,SAAS,EAAa,EAAO,EAAQ,CACjC,EAAa,EAAM,MAAO,CAAM,EAChC,EAAa,EAAM,IAAK,CAAM,CAClC,CACA,SAAS,EAAa,EAAO,EAAQ,CAC7B,EAAM,KAAO,IACb,EAAM,QAAU,EAAO,QAC3B,EAAM,KAAO,EAAO,GACxB,CACA,SAAS,EAAa,EAAO,EAAQ,CACjC,EAAa,EAAM,MAAO,CAAM,EAChC,EAAa,EAAM,IAAK,CAAM,CAClC,CACA,EAAQ,KAAO,CAEf,CAAC,EAED,IAAI,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,YAAY,6BAA6B,wBAAwB,qBAAqB,uBAAuB,EAAG,SAAS,EAAS,EAAS,EAAO,CACtN,aACA,IAAI,EAAQ,EAAQ,UAAU,CAAC,CAAC,MAC5B,EAAW,EAAQ,aAAa,CAAC,CAAC,SAClC,EAAO,EAAQ,QAAQ,CAAC,CAAC,KACzB,EAAgB,EAAQ,mBAAmB,CAAC,CAAC,cAC7C,EAAa,EAAQ,sBAAsB,CAAC,CAAC,WACjD,SAAS,GAAU,CACf,KAAK,UAAY,SAAU,EAAK,EAAQ,EAAM,CAC1C,IAAI,EAAW,KAAK,YAAY,CAAG,EACnC,GAAI,CAAC,EACD,OAAO,KAEX,IAAK,IADD,EAAQ,EAAS,MACZ,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACnC,IAAI,EAAQ,EAAM,EAAE,CAAC,MACrB,GAAI,EAAM,SAAS,EAAK,CAAM,EAAG,CAIxB,GAHD,GAAQ,GAAK,EAAM,MAAM,EAAK,CAAM,GAAK,CAAC,EAAM,QAAQ,GAGnD,GAAQ,IAAM,EAAM,QAAQ,EAAK,CAAM,GAAK,CAAC,EAAM,QAAQ,EAChE,SAEJ,OAAO,EAAM,EACjB,CACJ,CACJ,EACA,KAAK,gBAAkB,SAAU,EAAO,CACpC,IAAI,EAAQ,EAAM,MACd,EAAM,EAAM,IACZ,EAAY,KAAK,UACjB,EAAa,CAAC,EAClB,EAAM,QAAU,EAChB,IAAI,OACJ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,OAAQ,IAAK,CACvC,IAAI,EAAM,EAAU,EAAE,CAAC,MAAM,aAAa,CAAK,EAC3C,MAAO,EAGN,IAAI,GAAO,GACZ,MAGJ,IAAK,IADD,EAAQ,EAAU,EAAE,CAAC,MAChB,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACnC,IAAI,EAAO,EAAM,GAEjB,GADA,EAAM,EAAK,MAAM,aAAa,CAAK,EAC/B,GAAO,GACP,MAEK,MAAO,EAIhB,IAAI,GAAO,GACP,MAEJ,EAAW,KAAK,CAAI,CAFhB,CAGR,CAjBI,CAkBR,CAGA,MAFA,IAAM,OACN,EAAI,QAAU,EACP,CACX,EACA,KAAK,oBAAsB,SAAU,EAAQ,CACzC,GAAI,MAAM,QAAQ,CAAM,EAAG,CACvB,IAAI,EAAQ,CAAC,EACb,EAAO,QAAQ,SAAU,EAAO,CAC5B,EAAQ,EAAM,OAAO,KAAK,gBAAgB,CAAK,CAAC,CACpD,EAAG,IAAI,CACX,KAEI,KAAI,EAAQ,KAAK,gBAAgB,CAAM,EAE3C,OAAO,CACX,EACA,KAAK,YAAc,UAAY,CAG3B,IAAK,IAFD,EAAQ,CAAC,EACT,EAAY,KAAK,UACZ,EAAI,EAAG,EAAI,EAAU,OAAQ,IAClC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,EAAE,CAAC,MAAM,OAAQ,IAC3C,EAAM,KAAK,EAAU,EAAE,CAAC,MAAM,EAAE,EACxC,OAAO,CACX,EACA,KAAK,gBAAkB,SAAU,EAAK,EAAQ,EAAM,EAAU,CAE1D,GADA,IAAuB,KAAK,YAAY,CAAG,EACvC,CAAC,EACD,OAAO,KAKX,IAAK,IAJD,EAAW,CACX,IAAK,CAAE,OAAQ,CAAE,CACrB,EACI,EAAK,EACA,EAAI,EAAG,EAAI,EAAS,MAAM,OAAQ,IAAK,CAC5C,EAAO,EAAS,MAAM,GACtB,IAAI,EAAM,EAAK,MAAM,WAAW,EAAK,CAAM,EAC3C,GAAI,GAAO,GAAI,CACX,EAAM,KACD,QAAQ,EAAK,MAAM,GAAG,CAAC,CACvB,UAAU,EAAS,IAAI,OAAQ,EAAK,MAAM,MAAM,EACrD,KACJ,MACK,GAAI,IAAQ,EACb,OAAO,KAEX,EAAW,CACf,CAQI,MAPJ,CACI,IAAM,KAAK,QAAQ,EAAK,MAAM,GAAG,CAAC,CAAC,UAAU,EAAS,IAAI,MAAM,EAChE,GAAQ,GACD,EAAI,UAAU,EAAG,EAAS,EAAS,IAAI,MAAM,EAC/C,GAAQ,EACN,EAAI,UAAU,EAAS,EAAS,IAAI,MAAM,EAE1C,CACf,EACA,KAAK,YAAc,SAAU,EAAQ,EAAe,CAChD,IAAI,EAAW,KAAK,UAChB,EAAI,EAKR,IAJI,IACA,EAAI,EAAS,QAAQ,CAAa,GAClC,GAAK,KACL,EAAI,GACA,EAAI,EAAS,OAAQ,IAAK,CAC9B,IAAI,EAAW,EAAS,GACxB,GAAI,EAAS,MAAM,KAAO,GAAU,EAAS,IAAI,KAAO,EACpD,OAAO,EAEN,GAAI,EAAS,IAAI,IAAM,EACxB,OAAO,IAEf,CACA,OAAO,IACX,EACA,KAAK,gBAAkB,SAAU,EAAQ,EAAe,CACpD,IAAI,EAAW,KAAK,UAChB,EAAI,EAKR,IAJI,IACA,EAAI,EAAS,QAAQ,CAAa,GAClC,GAAK,KACL,EAAI,GACA,EAAI,EAAS,OAAQ,IAAK,CAC9B,IAAI,EAAW,EAAS,GACxB,GAAI,EAAS,IAAI,KAAO,EACpB,OAAO,CAEf,CACA,OAAO,IACX,EACA,KAAK,kBAAoB,SAAU,EAAO,EAAM,CAE5C,IAAK,IADD,EAAW,KAAK,UAAW,EAAW,EAAO,EAAQ,EAChD,EAAI,EAAG,EAAI,EAAS,OAAQ,IAAK,CACtC,IAAI,EAAW,EAAS,GAAI,EAAM,EAAS,IAAI,IAAK,EAAQ,EAAS,MAAM,IAC3E,GAAI,GAAO,EAAM,CACT,EAAQ,IACJ,GAAS,EACT,GAAY,EAAO,EAEnB,EAAW,GAEnB,KACJ,MACS,GAAO,IACR,GAAS,EACT,GAAY,EAAM,EAElB,GAAY,EAAM,EAAQ,EAEtC,CACA,OAAO,CACX,EACA,KAAK,aAAe,SAAU,EAAU,CAKpC,OAJA,KAAK,UAAU,KAAK,CAAQ,EAC5B,KAAK,UAAU,KAAK,SAAU,EAAG,EAAG,CAChC,OAAO,EAAE,MAAM,IAAM,EAAE,MAAM,GACjC,CAAC,EACM,CACX,EACA,KAAK,QAAU,SAAU,EAAa,EAAO,CACzC,IAAI,EAAW,KAAK,UAChB,EAAQ,GACR,EACA,aAAuB,EACvB,EAAO,GAEP,EAAO,IAAI,EAAK,EAAO,CAAW,EAClC,EAAK,iBAAmB,EAAM,kBAElC,KAAK,qBAAqB,EAAK,KAAK,EACpC,IAAI,EAAW,EAAK,MAAM,IACtB,EAAc,EAAK,MAAM,OACzB,EAAS,EAAK,IAAI,IAClB,EAAY,EAAK,IAAI,OACrB,EAAY,KAAK,UAAU,EAAU,EAAa,CAAC,EACnD,EAAU,KAAK,UAAU,EAAQ,EAAW,EAAE,EAClD,GAAI,GAAa,GAAW,EACxB,OAAO,EAAU,WAAW,CAAI,EAChC,GAAa,CAAC,EAAU,MAAM,QAAQ,EAAU,CAAW,GAC3D,KAAK,WAAW,CAAS,EACzB,GAAW,CAAC,EAAQ,MAAM,MAAM,EAAQ,CAAS,GACjD,KAAK,WAAW,CAAO,EAC3B,IAAI,EAAQ,KAAK,gBAAgB,EAAK,KAAK,EACvC,EAAM,OAAS,IACf,KAAK,YAAY,CAAK,EACjB,EAAK,kBACN,EAAM,QAAQ,SAAU,EAAS,CAC7B,EAAK,WAAW,CAAO,CAC3B,CAAC,GAGT,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,OAAQ,IAAK,CACtC,IAAI,EAAW,EAAS,GACxB,GAAI,GAAU,EAAS,MAAM,IAAK,CAC9B,EAAS,QAAQ,CAAI,EACrB,EAAQ,GACR,KACJ,MACK,GAAI,GAAY,EAAS,IAAI,IAAK,CAGnC,GAFA,EAAS,QAAQ,CAAI,EACrB,EAAQ,GACJ,CAAC,EAAK,QAAS,CACf,IAAI,EAAe,EAAS,EAAI,GAChC,GAAI,GAAgB,EAAa,MAAM,KAAO,EAAQ,CAClD,EAAS,MAAM,CAAY,EAC3B,KACJ,CACJ,CACA,KACJ,MACK,GAAI,GAAU,EAAS,MAAM,IAC9B,KAER,CASA,OARK,IACD,EAAW,KAAK,aAAa,IAAI,EAAS,KAAK,UAAW,CAAI,CAAC,GAC/D,KAAK,aACL,KAAK,gBAAgB,EAAS,MAAM,IAAK,EAAS,MAAM,GAAG,EAE3D,KAAK,sBAAsB,EAAS,MAAM,IAAK,EAAS,MAAM,GAAG,EACrE,KAAK,UAAY,GACjB,KAAK,QAAQ,aAAc,CAAE,KAAM,EAAM,OAAQ,KAAM,CAAC,EACjD,CACX,EACA,KAAK,SAAW,SAAU,EAAO,CAC7B,EAAM,QAAQ,SAAU,EAAM,CAC1B,KAAK,QAAQ,CAAI,CACrB,EAAG,IAAI,CACX,EACA,KAAK,WAAa,SAAU,EAAM,CAC9B,IAAI,EAAW,EAAK,SAChB,EAAW,EAAS,MAAM,IAC1B,EAAS,EAAS,IAAI,IACtB,EAAY,KAAK,UACjB,EAAQ,EAAS,MACrB,GAAI,EAAM,QAAU,EAChB,EAAU,OAAO,EAAU,QAAQ,CAAQ,EAAG,CAAC,OAGnD,GAAI,EAAS,MAAM,MAAM,EAAK,IAAI,IAAK,EAAK,IAAI,MAAM,EAClD,EAAM,IAAI,EACV,EAAS,IAAI,IAAM,EAAM,EAAM,OAAS,EAAE,CAAC,IAAI,IAC/C,EAAS,IAAI,OAAS,EAAM,EAAM,OAAS,EAAE,CAAC,IAAI,YAGtD,GAAI,EAAS,MAAM,QAAQ,EAAK,MAAM,IAAK,EAAK,MAAM,MAAM,EACxD,EAAM,MAAM,EACZ,EAAS,MAAM,IAAM,EAAM,EAAE,CAAC,MAAM,IACpC,EAAS,MAAM,OAAS,EAAM,EAAE,CAAC,MAAM,YAG3C,GAAI,EAAK,QACL,EAAM,OAAO,EAAM,QAAQ,CAAI,EAAG,CAAC,MAGvC,CACI,IAAI,EAAc,EAAS,MAAM,EAAK,MAAM,IAAK,EAAK,MAAM,MAAM,EAClE,EAAQ,EAAY,MACpB,EAAM,MAAM,EACZ,EAAY,MAAM,IAAM,EAAM,EAAE,CAAC,MAAM,IACvC,EAAY,MAAM,OAAS,EAAM,EAAE,CAAC,MAAM,MAC9C,CACK,KAAK,YACF,KAAK,aACL,KAAK,gBAAgB,EAAU,CAAM,EAErC,KAAK,sBAAsB,EAAU,CAAM,GAEnD,KAAK,UAAY,GACjB,KAAK,QAAQ,aAAc,CAAE,KAAM,EAAM,OAAQ,QAAS,CAAC,CAC/D,EACA,KAAK,YAAc,SAAU,EAAO,CAEhC,IAAK,IADD,EAAa,CAAC,EACT,EAAI,EAAG,EAAI,EAAM,OAAQ,IAC9B,EAAW,KAAK,EAAM,EAAE,EAE5B,EAAW,QAAQ,SAAU,EAAM,CAC/B,KAAK,WAAW,CAAI,CACxB,EAAG,IAAI,EACP,KAAK,UAAY,EACrB,EACA,KAAK,WAAa,SAAU,EAAM,CAC9B,KAAK,WAAW,CAAI,EACpB,EAAK,SAAS,QAAQ,SAAU,EAAS,CACrC,EAAK,aAAa,CAAO,EACzB,KAAK,QAAQ,CAAO,CACxB,EAAG,IAAI,EACH,EAAK,iBAAmB,GACxB,KAAK,QAAQ,EAAK,MAAM,IAAM,EAAG,EAAK,IAAI,IAAK,EAAK,iBAAmB,CAAC,EAE5E,EAAK,SAAW,CAAC,CACrB,EACA,KAAK,YAAc,SAAU,EAAO,CAChC,EAAM,QAAQ,SAAU,EAAM,CAC1B,KAAK,WAAW,CAAI,CACxB,EAAG,IAAI,CACX,EACA,KAAK,OAAS,SAAU,EAAU,EAAa,CAC3C,IAAI,EAAO,EACX,GAAI,GAAY,KACZ,EAAQ,IAAI,EAAM,EAAG,EAAG,KAAK,UAAU,EAAG,CAAC,EAC3C,AACI,IAAc,QAEjB,GAAI,OAAO,GAAY,SACxB,EAAQ,IAAI,EAAM,EAAU,EAAG,EAAU,KAAK,QAAQ,CAAQ,CAAC,CAAC,MAAM,OAErE,GAAI,QAAS,EACd,EAAQ,EAAM,WAAW,EAAU,CAAQ,OAE1C,GAAI,MAAM,QAAQ,CAAQ,EAK3B,MAJA,GAAQ,CAAC,EACT,EAAS,QAAQ,SAAU,EAAO,CAC9B,EAAQ,EAAM,OAAO,KAAK,OAAO,CAAK,CAAC,CAC3C,EAAG,IAAI,EACA,MAGP,GAAQ,EAEZ,EAAQ,KAAK,oBAAoB,CAAK,EAEtC,IADA,IAAI,EAAiB,EACd,EAAM,QAAU,GAChB,EAAM,cAAc,EAAM,EAAE,CAAC,MAAO,EAAM,KAAK,EAAI,GACnD,EAAM,cAAc,EAAM,EAAE,CAAC,IAAK,EAAM,GAAG,EAAI,GAClD,KAAK,YAAY,CAAK,EACtB,EAAQ,KAAK,oBAAoB,CAAK,EAQ1C,GANI,GAAe,EAIf,KAAK,YAAY,CAAK,EAHtB,KAAK,YAAY,CAAK,EAKtB,EAAe,OACf,OAAO,CACf,EACA,KAAK,YAAc,SAAU,EAAQ,EAAc,CAC/C,MAAO,CAAC,CAAC,KAAK,YAAY,EAAQ,CAAY,CAClD,EACA,KAAK,cAAgB,SAAU,EAAQ,EAAc,CACjD,IAAI,EAAW,KAAK,YAAY,EAAQ,CAAY,EACpD,OAAO,EAAW,EAAS,IAAI,IAAM,CACzC,EACA,KAAK,gBAAkB,SAAU,EAAQ,EAAc,CACnD,IAAI,EAAW,KAAK,YAAY,EAAQ,CAAY,EACpD,OAAO,EAAW,EAAS,MAAM,IAAM,CAC3C,EACA,KAAK,mBAAqB,SAAU,EAAU,EAAQ,EAAW,EAAU,EAAa,CACpF,AACI,IAAW,EAAS,MAAM,IAC9B,AACI,IAAc,EAClB,AACI,IAAS,EAAS,IAAI,IAC1B,AACI,IAAY,KAAK,QAAQ,CAAM,CAAC,CAAC,OACrC,IAAI,EAAM,KAAK,IACX,EAAW,GAgBf,OAfA,EAAS,KAAK,SAAU,EAAa,EAAK,EAAQ,EAAY,CACtD,OAAM,GAEV,IAAI,GAAO,EAAU,CACjB,GAAI,EAAS,EACT,OACJ,EAAa,KAAK,IAAI,EAAa,CAAU,CACjD,CACI,GAAe,KAIf,GAAY,EAAI,QAAQ,CAAG,CAAC,CAAC,UAAU,EAAY,CAAM,EAHzD,GAAY,CAFhB,CAOJ,EAAG,EAAQ,CAAS,EACb,CACX,EACA,KAAK,eAAiB,SAAU,EAAK,EAAW,EAAU,EAAa,CACnE,IAAI,EAAW,KAAK,YAAY,CAAG,EACnC,GAAK,EAMD,OAAO,KAAK,mBAAmB,EAAU,EAAK,EAAW,EAAU,CAAW,EAL9E,IAAI,EACG,KAAK,IAAI,QAAQ,CAAG,EAC3B,OAAO,EAAK,UAAU,GAAe,EAAG,GAAa,EAAK,MAAM,CAKxE,EACA,KAAK,eAAiB,UAAY,CAC9B,IAAI,EAAK,CAAC,EAOV,MANA,GAAK,KAAK,UAAU,IAAI,SAAU,EAAU,CACxC,IAAI,EAAQ,EAAS,MAAM,IAAI,SAAU,EAAM,CAC3C,OAAO,EAAK,MAAM,CACtB,CAAC,EACD,OAAO,IAAI,EAAS,EAAI,CAAK,CACjC,CAAC,EACM,CACX,EACA,KAAK,WAAa,SAAU,EAAa,CAErC,IAAI,EADY,KAAK,UACC,SAAS,EAC3B,EACA,EACJ,GAAI,EAAM,QAAQ,EAAG,CACjB,IAAI,EAAS,EAAM,MAEnB,GADA,EAAO,KAAK,UAAU,EAAO,IAAK,EAAO,MAAM,EAC3C,EAAM,CACN,KAAK,WAAW,CAAI,EACpB,MACJ,MACK,GAAI,EAAa,CAClB,IAAI,EAAW,KAAK,YAAY,EAAO,GAAG,EACtC,GACA,KAAK,YAAY,EAAS,KAAK,EACnC,MACJ,MACS,EAAa,KAAK,oBAAoB,CAAM,GAC7C,EAAM,aAAa,CAAU,GAAK,EAClC,EAAM,IAAM,GAGZ,EAAM,MAAQ,EACd,EAAM,MAAM,SACZ,EAAM,IAAI,WAGT,EAAa,KAAK,oBAAoB,CAAE,IAAK,EAAO,IAAK,OAAQ,EAAO,OAAS,CAAE,CAAC,IACrF,EAAM,aAAa,CAAU,GAAK,EAClC,EAAM,IAAM,EAEZ,EAAM,MAAQ,EAClB,EAAM,MAAM,UAGZ,EAAQ,KAAK,oBAAoB,EAAO,IAAK,EAAO,MAAM,GAAK,CAEvE,KACK,CACD,IAAI,EAAQ,KAAK,gBAAgB,CAAK,EACtC,GAAI,GAAe,EAAM,OAAQ,CAC7B,KAAK,YAAY,CAAK,EACtB,MACJ,MACS,EAAM,QAAU,IACrB,EAAO,EAAM,GAErB,CAGA,GAFA,AACI,IAAO,KAAK,UAAU,EAAM,MAAM,IAAK,EAAM,MAAM,MAAM,EACzD,GAAQ,EAAK,MAAM,SAAS,GAAK,EAAM,SAAS,EAAG,CACnD,KAAK,WAAW,CAAI,EACpB,MACJ,CACA,IAAI,EAAc,MAClB,GAAI,CAAC,EAAM,YAAY,EAAG,CAEtB,GADA,EAAc,KAAK,aAAa,CAAK,EACjC,EAAY,OAAS,EACrB,OACJ,EAAc,EAAY,KAAK,CAAC,CAAC,UAAU,EAAG,CAAC,EAAI,IACvD,CACA,KAAK,QAAQ,EAAa,CAAK,CACnC,EACA,KAAK,oBAAsB,SAAU,EAAK,EAAQ,EAAK,CACnD,IAAI,EAAW,IAAI,EAAc,KAAM,EAAK,CAAM,EAC9C,EAAQ,EAAS,gBAAgB,EACjC,EAAO,GAAS,EAAM,KAC1B,GAAI,GAAS,kBAAkB,KAAK,CAAI,EAAG,CACvC,EAAO,EAAK,MAAM,gBAAgB,CAAC,CAAC,GAChC,GAAQ,YACR,GAAQ,qBACZ,IAAI,EAAK,IAAI,OAAO,CAAI,EACpB,EAAQ,IAAI,EAChB,GAAI,GAAO,EAAG,CACV,EACI,GAAQ,EAAS,aAAa,QACzB,GAAS,EAAG,KAAK,EAAM,IAAI,GACpC,EAAQ,EAAS,YAAY,CACjC,CACA,EAAM,MAAM,IAAM,EAAS,mBAAmB,EAC9C,EAAM,MAAM,OAAS,EAAS,sBAAsB,EAAI,EAAM,MAAM,OACpE,EAAW,IAAI,EAAc,KAAM,EAAK,CAAM,EAC9C,IAAI,EAAY,KAAK,SAAS,EAAS,IAAI,EAC3C,GAAI,GAAO,GAAI,CACX,IAAI,EAAU,GACd,GAEI,GADA,EAAQ,EAAS,YAAY,EACzB,GAAW,GAAI,CACf,IAAI,EAAQ,KAAK,SAAS,EAAS,IAAI,EACnC,EAAU,SAAS,IAAM,EAAM,SAAS,IACxC,EAAU,EAAS,KAC3B,MACK,GAAI,EAAS,KAAO,EACrB,YAEC,GAAS,EAAG,KAAK,EAAM,IAAI,GACpC,EAAQ,EAAS,aAAa,CAClC,KAEI,GAAQ,EAAS,gBAAgB,EAKrC,MAJA,GAAM,IAAI,IAAM,EAAS,mBAAmB,EAC5C,EAAM,IAAI,OAAS,EAAS,sBAAsB,EAC9C,EAAM,MAAM,KAAO,EAAM,IAAI,KAAO,EAAM,MAAM,OAAS,EAAM,IAAI,OACnE,OACG,CACX,CACJ,EACA,KAAK,QAAU,SAAU,EAAU,EAAQ,EAAO,EAAM,CACpD,AACI,IAAQ,IACZ,IAAI,EAAc,KAAK,YAClB,KAGL,CADA,IAAmB,KAAK,UAAU,EAClC,IAAuB,EACvB,IAAK,IAAI,EAAM,EAAU,EAAM,EAAQ,IACnC,GAAI,EAAY,KACZ,EAAY,GAAO,KAAK,cAAc,CAAG,GACzC,EAAY,IAAQ,SAEpB,KAAQ,CAAC,EAAK,CAAG,GAErB,KAAI,EAAQ,KAAK,mBAAmB,CAAG,EACnC,GAAS,EAAM,YAAY,GACxB,EAAM,IAAI,KAAO,GACjB,EAAM,MAAM,KAAO,IACtB,EAAM,EAAM,IAAI,IAChB,EAAM,iBAAmB,EACzB,KAAK,QAAQ,MAAO,CAAK,EANU,CARpB,CAiB3B,EACA,KAAK,YAAc,SAAU,EAAO,CAEhC,IADA,KAAK,QAAQ,EACN,IAAU,GACb,KAAK,OAAO,KAAM,EAAK,CAC/B,EACA,KAAK,gBAAkB,UAAY,CAC/B,IAAI,EAAU,KACd,KAAK,QAAQ,KAAM,KAAM,KAAM,SAAU,EAAK,CAE1C,IAAK,IADD,EAAS,EAAQ,UAAU,CAAG,EACzB,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAQ,EAAO,GACf,OAAM,MAAQ,QAAU,QAAQ,KAAK,EAAM,KAAK,GAIpD,MAFA,EAAI,UAAU,KAAK,EAAM,IAAI,CAGjC,CACJ,CAAC,CACL,EACA,KAAK,YAAc,CACf,OAAU,EACV,UAAa,EACb,aAAgB,CACpB,EACA,KAAK,WAAa,YAClB,KAAK,aAAe,SAAU,EAAO,CACjC,GAAI,CAAC,KAAK,YAAY,GAClB,MAAU,MAAM,uBAAyB,EAAQ,IAAM,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,KAAK,IAAI,EAAI,GAAG,EACrG,QAAK,YAAc,EAGvB,CADA,KAAK,WAAa,EACd,GAAS,UACT,KAAK,OAAO,EAChB,IAAI,EAAO,KAAK,UAChB,KAAK,YAAY,IAAI,EACrB,KAAK,YAAY,CAAI,CAHL,CAIpB,EACA,KAAK,YAAc,SAAU,EAAU,CAC/B,QAAK,WAAa,EAMtB,IAJA,KAAK,UAAY,EACjB,KAAK,IAAI,SAAU,KAAK,kBAAkB,EAC1C,KAAK,IAAI,kBAAmB,KAAK,2BAA2B,EAC5D,KAAK,QAAQ,kBAAkB,EAC3B,CAAC,GAAY,KAAK,YAAc,SAAU,CAC1C,KAAK,YAAc,KACnB,MACJ,CACA,KAAK,YAAc,CAAC,EACpB,KAAK,cAAgB,EAAS,cAAc,KAAK,EAAU,KAAM,KAAK,UAAU,EAChF,KAAK,mBAAqB,EAAS,mBAAmB,KAAK,EAAU,KAAM,KAAK,UAAU,EAC1F,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1D,KAAK,4BAA8B,KAAK,2BAA2B,KAAK,IAAI,EAC5E,KAAK,GAAG,SAAU,KAAK,kBAAkB,EACzC,KAAK,GAAG,kBAAmB,KAAK,2BAA2B,CAP3D,CAQJ,EACA,KAAK,uBAAyB,SAAU,EAAK,EAAe,CACxD,IAAI,EAAK,KAAK,YACd,GAAI,CAAC,GAAO,GAAiB,EAAG,GAC5B,MAAO,CAAC,EAEZ,IADA,IAAI,EAAI,EAAM,EAAG,EACV,GAAK,GAAG,CACX,IAAI,EAAI,EAAG,GAGX,GAFA,AACI,IAAI,EAAG,GAAK,KAAK,cAAc,CAAC,EAChC,GAAK,QAAS,CACd,IAAI,EAAQ,KAAK,mBAAmB,CAAC,EAGrC,GAFA,AACI,IAAa,EACb,GAAS,EAAM,IAAI,KAAO,EAC1B,KACR,CACA,GACJ,CACA,MAAO,CACH,MAAO,IAAM,IAAM,EACP,YAChB,CACJ,EACA,KAAK,kBAAoB,SAAU,EAAK,EAAG,CACnC,aAAa,IACb,EAAI,EAAE,UACV,IAAI,EAAU,CACV,SAAU,EAAE,SACZ,IAAK,EAAE,SAAW,EAAE,QACpB,SAAU,EAAE,MAChB,EAEA,GAAI,CADQ,KAAK,kBAAkB,EAAK,CAC/B,EAAG,CACR,IAAI,EAAM,EAAE,QAAU,EAAE,WACpB,GAAM,kBAAkB,KAAK,EAAG,SAAS,IACzC,EAAG,WAAa,eACxB,CACJ,EACA,KAAK,kBAAoB,SAAU,EAAK,EAAS,CACxC,QAAK,cAEV,KAAI,EAAO,KAAK,cAAc,CAAG,EAC7B,EAAO,KAAK,QAAQ,CAAG,EACvB,EAAM,IAAS,MAAQ,GAAK,EAC5B,EAAO,KAAK,UAAU,EAAK,IAAQ,GAAK,EAAI,EAAK,OAAQ,CAAG,EAChE,GAAI,EAKA,OAJI,EAAQ,UAAY,EAAQ,IAC5B,KAAK,WAAW,CAAI,EAEpB,KAAK,WAAW,CAAI,EACjB,EAEX,IAAI,EAAQ,KAAK,mBAAmB,EAAK,EAAI,EAC7C,GAAI,GAAS,CAAC,EAAM,YAAY,IAC5B,EAAO,KAAK,UAAU,EAAM,MAAM,IAAK,EAAM,MAAM,OAAQ,CAAC,EACxD,GAAQ,EAAM,QAAQ,EAAK,KAAK,GAEhC,OADA,KAAK,WAAW,CAAI,EACb,EAGf,GAAI,EAAQ,SAAU,CAClB,IAAI,EAAO,KAAK,uBAAuB,CAAG,EAC1C,GAAI,EAAK,MACL,IAAI,EAAW,EAAK,MAAM,MAAM,IAAM,EAClC,EAAS,EAAK,MAAM,IAAI,IAEhC,KAAK,QAAQ,EAAU,EAAQ,EAAQ,IAAM,IAAQ,CAAC,CAC1D,MACS,EAAQ,UACb,EAAS,EAAQ,EAAM,IAAI,IAAM,KAAK,UAAU,EAChD,KAAK,QAAQ,EAAM,EAAG,EAAQ,EAAQ,IAAM,IAAQ,CAAC,GAEhD,IACD,EAAQ,MACR,EAAM,iBAAmB,KAC7B,KAAK,QAAQ,MAAO,CAAK,GAE7B,OAAO,CApC0B,CAqCrC,EACA,KAAK,iBAAmB,SAAU,EAAc,CAC5C,IAAI,EAAM,KAAK,UAAU,UAAU,CAAC,CAAC,IACrC,EAAM,KAAK,gBAAgB,CAAG,EAC9B,IAAI,EAAQ,KAAK,kBAAkB,EAAK,CAAC,CAAC,EACtC,MAEJ,KAAI,EAAO,KAAK,uBAAuB,EAAK,EAAI,EAEhD,GADA,EAAQ,EAAK,OAAS,EAAK,WACvB,EAAO,CACP,EAAM,EAAM,MAAM,IAClB,IAAI,EAAO,KAAK,UAAU,EAAK,KAAK,QAAQ,CAAG,CAAC,CAAC,OAAQ,CAAC,EACtD,EACA,KAAK,WAAW,CAAI,EAGpB,KAAK,QAAQ,MAAO,CAAK,CAEjC,CAXgD,CAYpD,EACA,KAAK,kBAAoB,SAAU,EAAO,CACtC,IAAI,EAAW,EAAM,MAAM,IACvB,EAAM,EAAM,IAAI,IAAM,EAC1B,GAAI,IAAQ,EACR,KAAK,YAAY,GAAY,UAE5B,GAAI,EAAM,QAAU,SACrB,KAAK,YAAY,OAAO,EAAU,EAAM,EAAG,IAAI,MAE9C,CACD,IAAI,EAAO,MAAM,EAAM,CAAC,EACxB,EAAK,QAAQ,EAAU,CAAC,EACxB,KAAK,YAAY,OAAO,MAAM,KAAK,YAAa,CAAI,CACxD,CACJ,EACA,KAAK,2BAA6B,SAAU,EAAG,CAC3C,IAAI,EAAO,EAAE,KACT,EAAK,OAAS,EAAK,MACf,KAAK,YAAY,OAAS,EAAK,OAC/B,KAAK,YAAY,OAAO,EAAK,MAAO,KAAK,YAAY,MAAM,CAEvE,CACJ,CACA,EAAQ,QAAU,CAElB,CAAC,EAED,IAAI,OAAO,iCAAiC,CAAC,UAAU,UAAU,SAAS,qBAAqB,WAAW,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAChJ,IAAI,EAAgB,EAAQ,mBAAmB,CAAC,CAAC,cAC7C,EAAQ,EAAQ,UAAU,CAAC,CAAC,MAChC,SAAS,GAAe,CACpB,KAAK,oBAAsB,SAAU,EAAU,EAAK,CAChD,GAAI,EAAS,QAAU,EACnB,OAAO,KACX,IAAI,EAAmB,GAAO,KAAK,QAAQ,EAAS,GAAG,CAAC,CAAC,OAAO,EAAS,OAAS,CAAC,EACnF,GAAI,GAAoB,GACpB,OAAO,KACX,IAAI,EAAQ,EAAiB,MAAM,uBAAuB,EAMtD,OALC,EAED,EAAM,GACC,KAAK,oBAAoB,EAAM,GAAI,CAAQ,EAE3C,KAAK,oBAAoB,EAAM,GAAI,CAAQ,EAJ3C,IAKf,EACA,KAAK,gBAAkB,SAAU,EAAK,CAClC,IAAI,EAAO,KAAK,QAAQ,EAAI,GAAG,EAC3B,EAAS,GAAM,EACf,EAAM,EAAK,OAAO,EAAI,OAAS,CAAC,EAChC,EAAQ,GAAO,EAAI,MAAM,uBAAuB,EAOpD,GANK,IACD,EAAM,EAAK,OAAO,EAAI,MAAM,EAC5B,EAAM,CAAE,IAAK,EAAI,IAAK,OAAQ,EAAI,OAAS,CAAE,EAC7C,EAAQ,GAAO,EAAI,MAAM,uBAAuB,EAChD,EAAS,IAET,CAAC,EACD,OAAO,KACX,GAAI,EAAM,GAAI,CACV,IAAI,EAAa,KAAK,oBAAoB,EAAM,GAAI,CAAG,EACvD,GAAI,CAAC,EACD,OAAO,KACX,EAAQ,EAAM,WAAW,EAAK,CAAU,EACnC,IACD,EAAM,IAAI,SACV,EAAM,MAAM,UAEhB,EAAM,OAAS,EAAM,GACzB,KACK,CACD,IAAI,EAAa,KAAK,oBAAoB,EAAM,GAAI,CAAG,EACvD,GAAI,CAAC,EACD,OAAO,KACX,EAAQ,EAAM,WAAW,EAAY,CAAG,EACnC,IACD,EAAM,MAAM,SACZ,EAAM,IAAI,UAEd,EAAM,OAAS,EAAM,KACzB,CACA,OAAO,CACX,EACA,KAAK,yBAA2B,SAAU,EAAK,EAAa,CACxD,IAAI,EAAO,KAAK,QAAQ,EAAI,GAAG,EAC3B,EAAiB,wBACjB,EAAM,CAAC,GAAe,EAAK,OAAO,EAAI,OAAS,CAAC,EAChD,EAAQ,GAAO,EAAI,MAAM,CAAc,EAS3C,GARA,AAMI,KALA,GAAO,IAAgB,IAAA,IAAa,IAAgB,EAAK,OAAO,EAAI,MAAM,EAC1E,EAAM,CACF,IAAK,EAAI,IACT,OAAQ,EAAI,OAAS,CACzB,EACQ,GAAO,EAAI,MAAM,CAAc,GAEvC,CAAC,EACD,OAAO,KACX,IAAI,EAAa,IAAI,EAAM,EAAI,IAAK,EAAI,OAAS,EAAG,EAAI,IAAK,EAAI,MAAM,EACnE,EAAa,EAAM,GAAK,KAAK,oBAAoB,EAAM,GAAI,CAAG,EAC5D,KAAK,oBAAoB,EAAM,GAAI,CAAG,EAI5C,OAHK,EAGE,CAAC,EAAY,IADD,EAAM,EAAW,IAAK,EAAW,OAAQ,EAAW,IAAK,EAAW,OAAS,CACrE,CAAC,EAFjB,CAAC,CAAU,CAG1B,EACA,KAAK,UAAY,CACb,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,GACT,EACA,KAAK,oBAAsB,SAAU,EAAS,EAAU,EAAQ,CAC5D,IAAI,EAAc,KAAK,UAAU,GAC7B,EAAQ,EACR,EAAW,IAAI,EAAc,KAAM,EAAS,IAAK,EAAS,MAAM,EAChE,EAAQ,EAAS,gBAAgB,EACrC,GACI,IAAQ,EAAS,YAAY,EAC5B,EAEL,CACI,IAAa,OAAO,QAChB,EAAM,KAAK,QAAQ,IAAK,KAAK,CAAC,CAAC,QAAQ,SAAU,QAAQ,CAAC,CACrD,QAAQ,cAAe,qBAAqB,CAAC,CAC7C,QAAQ,WAAY,eAAe,EACtC,IAAI,EAId,IAFA,IAAI,EAAa,EAAS,OAAS,EAAS,sBAAsB,EAAI,EAClE,EAAQ,EAAM,QACL,CACT,KAAO,GAAc,GAAG,CACpB,IAAI,EAAM,EAAM,OAAO,CAAU,EACjC,GAAI,GAAO,EAEP,IADA,IACI,GAAS,EACT,MAAO,CAAE,IAAK,EAAS,mBAAmB,EACtC,OAAQ,EAAa,EAAS,sBAAsB,CAAE,CAAA,MAGzD,GAAO,IACZ,GAAS,GAEb,GACJ,CACA,EACI,GAAQ,EAAS,aAAa,QACzB,GAAS,CAAC,EAAO,KAAK,EAAM,IAAI,GACzC,GAAI,GAAS,KACT,MACJ,EAAQ,EAAM,MACd,EAAa,EAAM,OAAS,CAChC,CACA,OAAO,IA3BO,CA4BlB,EACA,KAAK,oBAAsB,SAAU,EAAS,EAAU,EAAQ,CAC5D,IAAI,EAAiB,KAAK,UAAU,GAChC,EAAQ,EACR,EAAW,IAAI,EAAc,KAAM,EAAS,IAAK,EAAS,MAAM,EAChE,EAAQ,EAAS,gBAAgB,EACrC,GACI,IAAQ,EAAS,YAAY,EAC5B,EAEL,CACI,IAAa,OAAO,QAChB,EAAM,KAAK,QAAQ,IAAK,KAAK,CAAC,CAAC,QAAQ,SAAU,QAAQ,CAAC,CACrD,QAAQ,sBAAuB,qBAAqB,CAAC,CACrD,QAAQ,UAAW,eAAe,EACrC,IAAI,EAGd,IADA,IAAI,EAAa,EAAS,OAAS,EAAS,sBAAsB,IACrD,CAGT,IAFA,IAAI,EAAQ,EAAM,MACd,EAAc,EAAM,OACjB,EAAa,GAAa,CAC7B,IAAI,EAAM,EAAM,OAAO,CAAU,EACjC,GAAI,GAAO,EAEP,IADA,IACI,GAAS,EACT,MAAO,CAAE,IAAK,EAAS,mBAAmB,EACtC,OAAQ,EAAa,EAAS,sBAAsB,CAAE,CAAA,MAGzD,GAAO,IACZ,GAAS,GAEb,GAAc,CAClB,CACA,EACI,GAAQ,EAAS,YAAY,QACxB,GAAS,CAAC,EAAO,KAAK,EAAM,IAAI,GACzC,GAAI,GAAS,KACT,MACJ,EAAa,CACjB,CACA,OAAO,IA3BO,CA4BlB,EACA,KAAK,gBAAkB,SAAU,EAAK,CAClC,IAAI,EAAW,IAAI,EAAc,KAAM,EAAI,IAAK,EAAI,MAAM,EACtD,EAAQ,KAAK,aAAa,CAAQ,EACjC,KAOD,OALY,EAAS,aACb,CAAC,CAAC,QAAU,IACb,KAAK,gBAAgB,EAAU,CAAK,EAGpC,KAAK,gBAAgB,EAAU,CAAK,CAEnD,EACA,KAAK,aAAe,SAAU,EAAU,CACpC,IAAI,EAAQ,EAAS,gBAAgB,EACjC,EAAQ,GACR,EAAW,GACf,GAAI,GAAS,EAAM,KAAK,QAAQ,UAAU,IAAM,GAC5C,EACI,CAGI,EAHA,EACQ,EAAS,aAAa,EAEtB,EAAS,YAAY,EAC7B,IACI,EAAM,QAAU,KAChB,EAAW,GAEN,EAAM,KAAK,QAAQ,UAAU,IAAM,KACxC,EAAQ,WAGX,GAAS,CAAC,GAEvB,OAAO,CACX,EACA,KAAK,gBAAkB,SAAU,EAAU,EAAO,CAC9C,IAAI,EACA,EAAa,EAAM,MACnB,EAAM,EAAM,MACZ,EAAQ,EACR,EAAe,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,CAAC,EACjK,EAAQ,EAAS,YAAY,EAC7B,IAAI,EAAc,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,EAAM,MAAM,MAAM,EAC7K,EAAkB,GACtB,EAAG,CAEC,GADA,EAAY,EACR,EAAU,KAAK,QAAQ,WAAW,IAAM,IAAM,CAAC,EAAiB,CAChE,IAAI,EAAa,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,CAAC,EAC/J,EAAkB,EACtB,CAEA,GADA,EAAQ,EAAS,YAAY,EACzB,EAAO,CACP,GAAI,EAAM,QAAU,KAAO,CAAC,EAAiB,CACzC,IAAI,EAAa,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,CAAC,EAC/J,EAAkB,EACtB,CACA,GAAI,EAAM,KAAK,QAAQ,UAAU,IAAM,GAEnC,IADA,EAAa,EAAM,MACf,IAAQ,MACJ,EAAU,QAAU,IACpB,SAEC,GAAI,EAAU,QAAU,OACzB,IACI,EAAQ,GAAG,CACX,EAAS,aAAa,EACtB,IAAI,EAAgB,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,CAAC,EAClK,EAAQ,EAAS,YAAY,EAC7B,IAAI,EAAe,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,EAAM,MAAM,MAAM,EAIlL,GAHI,EAAM,KAAK,QAAQ,WAAW,IAAM,KACpC,EAAQ,EAAS,YAAY,GAE7B,GAAS,EAAM,QAAU,IACzB,IAAI,EAAc,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,CAAC,OAGhK,MAER,CACJ,OAGH,GAAI,IAAQ,GAAc,EAAM,QAAU,OAC3C,IACI,EAAQ,GACR,IAAI,EAAgB,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,CAAC,EAC9J,EAAe,EACf,EAAc,EACd,EAAa,IAAI,EAAM,EAAY,IAAI,IAAK,EAAY,IAAI,OAAQ,EAAY,IAAI,IAAK,EAAY,IAAI,OAAS,CAAC,CAGnI,CACJ,OAAS,GAAS,GAAS,GAC3B,GAAI,GAAgB,GAAc,GAAiB,GAAe,GAAe,EAC7E,MAAO,CACH,QAAS,IAAI,EAAM,EAAa,MAAM,IAAK,EAAa,MAAM,OAAQ,EAAW,IAAI,IAAK,EAAW,IAAI,MAAM,EAC/G,SAAU,IAAI,EAAM,EAAc,MAAM,IAAK,EAAc,MAAM,OAAQ,EAAY,IAAI,IAAK,EAAY,IAAI,MAAM,EACvG,cACC,cAClB,CAER,EACA,KAAK,gBAAkB,SAAU,EAAU,EAAO,CAC9C,IAAI,EAAY,EAAS,gBAAgB,EACrC,EAAM,EAAM,MACZ,EAAQ,EACR,EAAW,EAAS,mBAAmB,EACvC,EAAc,EAAS,sBAAsB,EAC7C,EAAY,EAAc,EAC1B,EAAgB,IAAI,EAAM,EAAU,EAAa,EAAU,CAAS,EACxE,EAAS,YAAY,EACrB,IAAI,EAAe,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,EAAM,MAAM,MAAM,EAClL,GAAI,EAAM,KAAK,QAAQ,WAAW,IAAM,KACpC,EAAQ,EAAS,YAAY,GAE7B,GAAC,GAAS,EAAM,QAAU,KAE9B,KAAI,EAAc,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,CAAC,EAChK,EAAS,aAAa,EACtB,EAAS,aAAa,EACtB,GAMI,GALA,EAAQ,EACR,EAAW,EAAS,mBAAmB,EACvC,EAAc,EAAS,sBAAsB,EAC7C,EAAY,EAAc,EAAM,MAAM,OACtC,EAAY,EAAS,aAAa,EAC9B,MACI,EAAM,KAAK,QAAQ,UAAU,IAAM,OAC/B,IAAQ,EAAM,SACV,EAAU,QAAU,IAEpB,IADA,IACI,EAAQ,EAAG,CACX,IAAI,EAAc,IAAI,EAAM,EAAU,EAAa,EAAU,CAAS,EAClE,EAAe,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,CAAC,EACjK,EACI,GAAQ,EAAS,YAAY,QACxB,GAAS,EAAM,QAAU,KAClC,IAAI,EAAa,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,CAAC,CACnK,OAEK,EAAU,QAAU,MACzB,GACJ,MAGH,GAAI,EAAM,QAAU,KAAM,CAG3B,IAFA,IAAI,EAAY,EACZ,EAAW,EACR,GAAU,CACb,GAAI,EAAS,KAAK,QAAQ,UAAU,IAAM,IAAM,EAAS,QAAU,EAAK,CACpE,IACA,KACJ,MACK,GAAI,EAAS,QAAU,IACxB,MAEJ,EAAW,EAAS,aAAa,EACjC,GACJ,CACA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,IAC3B,EAAS,YAAY,CAE7B,QAEC,GAAa,GAAS,GAC/B,GAAI,GAAgB,GAAc,GAAiB,GAAe,GAAe,EAC7E,MAAO,CACH,QAAS,IAAI,EAAM,EAAa,MAAM,IAAK,EAAa,MAAM,OAAQ,EAAW,IAAI,IAAK,EAAW,IAAI,MAAM,EAC/G,SAAU,IAAI,EAAM,EAAc,MAAM,IAAK,EAAc,MAAM,OAAQ,EAAY,IAAI,IAAK,EAAY,IAAI,MAAM,EACvG,cACC,cAClB,CAtD4J,CAwDpK,CACJ,CACA,EAAQ,aAAe,CAEvB,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,cAAc,eAAe,kBAAkB,aAAa,wBAAwB,gBAAgB,gBAAgB,YAAY,mBAAmB,eAAe,2BAA2B,uBAAuB,kBAAkB,2BAA2B,gCAAgC,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACnY,IAAI,EAAM,EAAQ,WAAW,EACzB,EAAO,EAAQ,YAAY,EAC3B,EAAc,EAAQ,eAAe,CAAC,CAAC,YACvC,EAAS,EAAQ,UAAU,EAC3B,EAAe,EAAQ,qBAAqB,CAAC,CAAC,aAC9C,EAAY,EAAQ,aAAa,CAAC,CAAC,UACnC,EAAW,EAAQ,aAAa,CAAC,CAAC,KAClC,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAc,EAAQ,gBAAgB,CAAC,CAAC,YACxC,EAAW,EAAQ,YAAY,CAAC,CAAC,SACjC,EAAsB,EAAQ,wBAAwB,CAAC,CAAC,oBACxD,EAAkB,EAAQ,oBAAoB,CAAC,CAAC,gBAChD,EAAc,EAAQ,eAAe,CAAC,CAAC,YACvC,EAA6B,UAAY,CACzC,SAAS,EAAY,EAAM,EAAM,CAAE,KAAK,IACpC,KAAK,aAAe,CAAC,EACrB,KAAK,aAAe,CAAC,EACrB,KAAK,cAAgB,CAAC,EACtB,KAAK,aAAe,CAAC,EACrB,KAAK,UAAY,EACjB,KAAK,YAAc,GACnB,KAAK,QAAU,KACf,KAAK,OAAS,CAAC,EACf,KAAK,UAAY,CAAC,EAClB,KAAK,GAAK,WAAa,EAAE,EAAY,KACrC,KAAK,UAAU,SAAW,UAAY,CAClC,OAAO,KAAK,KAAK;CAAI,CACzB,EACA,KAAK,qBAAuB,CAAC,EAC7B,KAAK,YAAc,IAAI,EAAqB,IAAI,EAAS,CAAC,CAAE,aAAa,EAAG,IAAI,EAChF,IAAI,EAAQ,KACZ,KAAK,YAAY,GAAG,SAAU,SAAU,EAAG,CACvC,EAAM,QAAQ,kBAAmB,CAAC,CACtC,CAAC,EACD,KAAK,GAAG,aAAc,KAAK,aAAa,KAAK,IAAI,CAAC,EAClD,KAAK,UAAY,KAAK,SAAS,KAAK,IAAI,GACpC,OAAO,GAAQ,UAAY,CAAC,EAAK,WACjC,EAAO,IAAI,EAA6B,CAAK,GACjD,KAAK,YAAY,CAAI,EACrB,KAAK,UAAY,IAAI,EAAU,IAAI,EACnC,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1D,KAAK,UAAU,GAAG,kBAAmB,KAAK,kBAAkB,EAC5D,KAAK,UAAU,GAAG,eAAgB,KAAK,kBAAkB,EACzD,KAAK,aAAe,IAAI,EAAY,IAAI,EACxC,EAAO,aAAa,IAAI,EACxB,KAAK,QAAQ,CAAI,EACjB,EAAO,QAAQ,UAAW,IAAI,EAC9B,KAAK,UAAY,GACjB,KAAK,wBAAwB,CACjC,CA8+CA,MA7+CA,GAAY,UAAU,wBAA0B,UAAY,CACxD,IAAI,EAAQ,KACZ,KAAK,MAAQ,KACb,KAAK,GAAG,SAAU,UAAY,CACrB,EAAM,QACP,EAAM,eAAe,EACrB,EAAM,MAAM,gBAAkB,EAAM,UAExC,EAAM,MAAM,WAAa,EAC7B,EAAG,EAAI,EACP,KAAK,GAAG,kBAAmB,UAAY,CAC9B,EAAM,QACP,EAAM,eAAe,EACrB,EAAM,MAAM,gBAAkB,EAAM,UAExC,EAAM,MAAM,iBAAmB,EACnC,EAAG,EAAI,EACP,KAAK,qBAAuB,EAAK,YAAY,KAAK,aAAa,KAAK,KAAM,EAAI,CAAC,CACnF,EACA,EAAY,UAAU,eAAiB,SAAU,EAAc,CAC3D,GAAI,KAAK,MAAO,CACZ,GAAI,CAAC,GAAgB,KAAK,MAAM,QAC5B,OAEJ,KAAK,OAAS,KAAK,KACvB,CACA,AACI,IAAe,CAAC,EAEpB,KAAK,qBAAqB,SAAS,EACnC,KAAK,MAAQ,CACT,QAAS,EAAa,SAAW,CAAC,EAClC,KAAM,EAAa,IACvB,EACA,KAAK,MAAM,gBAAkB,KAAK,UAAU,OAAO,EACnD,KAAK,QAAQ,iBAAkB,CAAY,CAC/C,EACA,EAAY,UAAU,aAAe,SAAU,EAAG,CAC9C,GAAI,KAAK,MAAO,CACZ,GAAI,GAAK,EAAE,cAAgB,GAAO,CAC9B,KAAK,MAAQ,KACb,KAAK,QAAQ,eAAgB,CAAC,EAC9B,MACJ,CACA,GAAI,GAAK,GAAQ,KAAK,MAAM,SAAW,KAAK,MAAM,QAAQ,MAAQ,QAC9D,OAEJ,IAAI,EAAmB,KAAK,UAAU,OAAO,EAC7C,KAAK,MAAM,eAAiB,EAC5B,KAAK,SAAW,KAAK,UAAU,OAAO,EACtC,KAAK,eAAe,CAAC,CAAC,aAAa,CAAgB,EACnD,KAAK,QAAQ,oBAAoB,EACjC,KAAK,OAAS,KAAK,MACnB,KAAK,MAAQ,KACb,KAAK,QAAQ,eAAgB,CAAC,CAClC,CACJ,EACA,EAAY,UAAU,YAAc,SAAU,EAAK,CAC3C,KAAK,KACL,KAAK,IAAI,IAAI,SAAU,KAAK,SAAS,EACzC,KAAK,IAAM,EACX,EAAI,GAAG,SAAU,KAAK,UAAW,EAAI,EACrC,KAAK,YAAY,YAAY,KAAK,YAAY,CAAC,EAC/C,KAAK,YAAY,CACrB,EACA,EAAY,UAAU,YAAc,UAAY,CAC5C,OAAO,KAAK,GAChB,EACA,OAAO,eAAe,EAAY,UAAW,gBAAiB,CAC1D,IAAK,UAAY,CACb,IAAI,EAAgB,IAAI,EAAY,IAAI,EAIxC,MAHA,MAAK,cAAgB,EACjB,KAAK,SACL,EAAc,OAAO,KAAK,OAAO,EAC9B,CACX,EACA,IAAK,SAAU,EAAO,CAClB,OAAO,eAAe,KAAM,gBAAiB,CACzC,SAAU,GACV,WAAY,GACZ,aAAc,GACP,OACX,CAAC,CACL,EACA,WAAY,GACZ,aAAc,EAClB,CAAC,EACD,EAAY,UAAU,eAAiB,SAAU,EAAQ,CACrD,GAAI,CAAC,EAAQ,CACT,KAAK,aAAe,CAAC,EACrB,KAAK,gBAAkB,CAAC,EACxB,MACJ,CACA,IAAI,EAAI,KAAK,aAAa,OACtB,EAAI,KAAK,kBAAkB,KAAK,aAAc,CAAM,EAAI,EACxD,EAAI,IACJ,KAAK,aAAa,OAAO,EAAG,CAAC,EAC7B,KAAK,gBAAgB,OAAO,EAAG,CAAC,EAExC,EACA,EAAY,UAAU,kBAAoB,SAAU,EAAY,EAAK,CAGjE,IAFA,IAAI,EAAM,EACN,EAAK,EAAW,OAAS,EACtB,GAAO,GAAI,CACd,IAAI,EAAO,EAAM,GAAO,EACpB,EAAI,EAAW,GACnB,GAAI,EAAM,EACN,EAAM,EAAM,OACX,GAAI,EAAM,EACX,EAAK,EAAM,OAEX,OAAO,CACf,CACA,OAAO,EAAM,CACjB,EACA,EAAY,UAAU,YAAc,UAAY,CAC5C,KAAK,UAAY,GACjB,KAAK,UAAY,CAAC,EAClB,KAAK,gBAAkB,CAAC,EACxB,KAAK,eAAe,CAAC,EAChB,KAAK,WACN,KAAK,YAAY,MAAM,CAAC,CAChC,EACA,EAAY,UAAU,aAAe,SAAU,EAAG,CAC9C,IAAI,EAAO,EAAE,KACb,KAAK,eAAe,EAAK,MAAM,GAAG,CACtC,EACA,EAAY,UAAU,SAAW,SAAU,EAAO,CAC9C,KAAK,UAAY,GACjB,KAAK,aAAa,SAAS,CAAK,EAChC,KAAK,eAAe,EAAM,MAAM,GAAG,EACnC,IAAI,EAAe,KAAK,4BAA4B,CAAK,EACrD,CAAC,KAAK,WAAa,KAAK,eACpB,GAAgB,EAAa,SAC7B,KAAK,aAAa,IAAI,CAClB,OAAQ,cACR,MAAO,CACX,EAAG,KAAK,eAAe,EACvB,KAAK,gBAAkB,IAE3B,KAAK,aAAa,IAAI,EAAO,KAAK,eAAe,EACjD,KAAK,gBAAkB,GACvB,KAAK,mBAAmB,SAAS,GAErC,KAAK,YAAY,gBAAgB,CAAK,EACtC,KAAK,QAAQ,SAAU,CAAK,CAChC,EACA,EAAY,UAAU,kBAAoB,UAAY,CAClD,KAAK,QAAQ,iBAAiB,CAClC,EACA,EAAY,UAAU,SAAW,SAAU,EAAM,CAC7C,KAAK,IAAI,SAAS,CAAI,EACtB,KAAK,UAAU,OAAO,EAAG,CAAC,EAC1B,KAAK,eAAe,CAAC,EACrB,KAAK,eAAe,KAAK,YAAY,EACrC,KAAK,eAAe,CAAC,CAAC,MAAM,CAChC,EACA,EAAY,SAAW,SAAU,EAAS,CAClC,OAAO,GAAW,WAClB,EAAU,KAAK,MAAM,CAAO,GAChC,IAAI,EAAc,IAAI,EACtB,EAAY,WAAa,EAAQ,QAAQ,KACzC,EAAY,WAAa,EAAQ,QAAQ,KACzC,EAAY,KAAO,EAAQ,QAAQ,KACnC,EAAY,KAAO,EAAQ,QAAQ,IACnC,IAAI,EAAc,IAAI,EAAY,EAAQ,KAAK,EAW/C,OAVA,EAAQ,MAAM,QAAQ,SAAU,EAAM,CAClC,EAAY,QAAQ,MAAO,EAAM,WAAW,EAAK,MAAO,EAAK,GAAG,CAAC,CACrE,CAAC,EACD,EAAY,eAAe,EAAQ,WAAW,EAC9C,EAAY,eAAe,EAAQ,WAAW,EAC9C,EAAY,QAAQ,EAAQ,IAAI,EAChC,EAAY,cAAc,EAAQ,UAAU,EAC5C,EAAY,aAAa,EAAQ,SAAS,EAC1C,EAAY,eAAe,CAAW,EACtC,EAAY,UAAU,SAAS,EAAQ,SAAS,EACzC,CACX,EACA,EAAY,UAAU,OAAS,UAAY,CACvC,MAAO,CACH,YAAa,KAAK,aAClB,YAAa,KAAK,aAClB,MAAO,KAAK,YAAY,CAAC,CAAC,IAAI,SAAU,EAAM,CAC1C,OAAO,EAAK,KAChB,CAAC,EACD,QAAS,KAAK,eAAe,EAC7B,KAAM,KAAK,MAAM,IACjB,WAAY,KAAK,YACjB,UAAW,KAAK,WAChB,UAAW,KAAK,UAAU,OAAO,EACjC,MAAO,KAAK,IAAI,SAAS,CAC7B,CACJ,EACA,EAAY,UAAU,SAAW,UAAY,CACzC,OAAO,KAAK,IAAI,SAAS,CAC7B,EACA,EAAY,UAAU,aAAe,UAAY,CAC7C,OAAO,KAAK,SAChB,EACA,EAAY,UAAU,SAAW,SAAU,EAAK,CAC5C,OAAO,KAAK,YAAY,SAAS,CAAG,CACxC,EACA,EAAY,UAAU,UAAY,SAAU,EAAK,CAC7C,OAAO,KAAK,YAAY,UAAU,CAAG,CACzC,EACA,EAAY,UAAU,WAAa,SAAU,EAAK,EAAQ,CACtD,IAAI,EAAS,KAAK,YAAY,UAAU,CAAG,EACvC,EAAO,EAAI,EACf,GAAI,GAAU,KAAM,CAChB,IAAI,EAAI,EAAO,OAAS,EACxB,EAAI,KAAK,QAAQ,CAAG,CAAC,CAAC,MAC1B,MAEI,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,SACvB,GAAK,EAAO,EAAE,CAAC,MAAM,OACjB,KAAK,IAFsB,KAWvC,MALA,GAAQ,EAAO,GACV,GAEL,EAAM,MAAQ,EACd,EAAM,MAAQ,EAAI,EAAM,MAAM,OACvB,GAHI,IAIf,EACA,EAAY,UAAU,eAAiB,SAAU,EAAa,CAI1D,GAHA,KAAK,aAAe,EAChB,KAAK,oBACL,KAAK,mBAAmB,OAAO,EAC/B,EAAa,CACb,IAAI,EAAO,KACX,EAAY,WAAW,IAAI,EAC3B,KAAK,uBAAyB,UAAY,CACtC,EAAK,mBAAmB,OAAO,EAC/B,EAAK,gBAAkB,EAC3B,EACA,KAAK,mBAAqB,EAAK,YAAY,KAAK,sBAAsB,CAC1E,KAEI,MAAK,uBAAyB,UAAY,CAAE,CAEpD,EACA,EAAY,UAAU,cAAgB,UAAY,CAC1C,KAAK,wBACL,KAAK,uBAAuB,CACpC,EACA,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,cAAgB,KAAK,mBACrC,EACA,EAAY,UAAU,aAAe,UAAY,CAKzC,OAJA,KAAK,eAAe,EACb,EAAK,aAAa,IAAK,KAAK,WAAW,CAAC,EAGxC,GAEf,EACA,EAAY,UAAU,eAAiB,SAAU,EAAK,CAClD,KAAK,UAAU,cAAe,CAAG,CACrC,EACA,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,cAAgB,CAAC,KAAK,MAAM,eAC5C,EACA,EAAY,UAAU,WAAa,SAAU,EAAS,CAClD,KAAK,UAAU,UAAW,CAAO,CACrC,EACA,EAAY,UAAU,WAAa,UAAY,CAC3C,OAAO,KAAK,QAChB,EACA,EAAY,UAAU,UAAY,SAAU,EAAU,CAClD,OAAO,KAAK,cAAiB,EAAS,OAAS,KAAK,WAAa,CACrE,EACA,EAAY,UAAU,0BAA4B,SAAU,EAAwB,CAChF,KAAK,UAAU,yBAA0B,CAAsB,CACnE,EACA,EAAY,UAAU,0BAA4B,UAAY,CAC1D,OAAO,KAAK,uBAChB,EACA,EAAY,UAAU,aAAe,SAAU,EAAW,CACtD,KAAK,UAAU,YAAa,CAAS,CACzC,EACA,EAAY,UAAU,aAAe,UAAY,CAC7C,OAAO,KAAK,UAChB,EACA,EAAY,UAAU,gBAAkB,UAAY,CAChD,KAAK,aAAa,CAAC,KAAK,UAAU,CACtC,EACA,EAAY,UAAU,oBAAsB,SAAU,EAAK,EAAW,CAC7D,KAAK,aAAa,KACnB,KAAK,aAAa,GAAO,IAC7B,KAAK,aAAa,IAAQ,IAAM,EAChC,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACA,EAAY,UAAU,yBAA2B,SAAU,EAAK,CACxD,KAAK,SACL,KAAK,QAAQ,SAAS,aAAa,oBAAoB,CAAG,CAElE,EACA,EAAY,UAAU,sBAAwB,SAAU,EAAK,EAAY,CACjE,KAAK,SACL,KAAK,QAAQ,SAAS,aAAa,iBAAiB,EAAK,CAAU,CAE3E,EACA,EAAY,UAAU,uBAAyB,SAAU,EAAK,EAAW,CACrE,KAAK,aAAa,IAAQ,KAAK,aAAa,IAAQ,GAAA,CAAI,QAAQ,IAAM,EAAW,EAAE,EACnF,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACA,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,YAChB,EACA,EAAY,UAAU,eAAiB,SAAU,EAAM,CACnD,KAAK,aAAe,CAAC,EACrB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC7B,KAAK,aAAa,EAAK,IAAM,iBAEjC,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACA,EAAY,UAAU,iBAAmB,UAAY,CACjD,KAAK,aAAe,CAAC,EACrB,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACA,EAAY,UAAU,cAAgB,SAAU,EAAK,EAAW,CACxD,IAAc,IAAA,KACd,EAAY,kBACZ,EACA,KAAK,aAAa,GAAO,EAEzB,OAAO,KAAK,aAAa,GAC7B,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACA,EAAY,UAAU,gBAAkB,SAAU,EAAK,CACnD,OAAO,KAAK,aAAa,GACzB,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACA,EAAY,UAAU,UAAY,SAAU,EAAO,EAAO,EAAM,EAAS,CACrE,IAAI,EAAK,KAAK,YACV,EAAS,CACF,QACP,KAAM,GAAQ,OACd,SAAU,OAAO,GAAQ,WAAa,EAAO,KACtC,QACP,QAAS,CAAC,CAAC,EACP,IACR,EASA,OARI,GACA,KAAK,cAAc,GAAM,EACzB,KAAK,QAAQ,mBAAmB,IAGhC,KAAK,aAAa,GAAM,EACxB,KAAK,QAAQ,kBAAkB,GAE5B,CACX,EACA,EAAY,UAAU,iBAAmB,SAAU,EAAQ,EAAS,CAC3D,KAAO,OAEZ,KAAI,EAAK,KAAK,YAWd,MAVA,GAAO,GAAK,EACZ,EAAO,QAAU,CAAC,CAAC,EACf,GACA,KAAK,cAAc,GAAM,EACzB,KAAK,QAAQ,mBAAmB,IAGhC,KAAK,aAAa,GAAM,EACxB,KAAK,QAAQ,kBAAkB,GAE5B,CAXO,CAYlB,EACA,EAAY,UAAU,aAAe,SAAU,EAAU,CACrD,IAAI,EAAS,KAAK,cAAc,IAAa,KAAK,aAAa,GAC1D,KAEL,KAAI,EAAU,EAAO,QAAU,KAAK,cAAgB,KAAK,aACzD,OAAQ,EAAQ,GAChB,KAAK,QAAQ,EAAO,QAAU,oBAAsB,kBAAkB,CAFb,CAG7D,EACA,EAAY,UAAU,WAAa,SAAU,EAAS,CAClD,OAAO,EAAU,KAAK,cAAgB,KAAK,YAC/C,EACA,EAAY,UAAU,UAAY,SAAU,EAAI,CAC5C,GAAI,CAAC,KAAK,iBAAkB,CACxB,IAAI,EAAY,IAAI,EAAgB,KAAM,oBAAqB,MAAM,EACrE,KAAK,iBAAmB,KAAK,iBAAiB,CAAS,CAC3D,CACA,KAAK,iBAAiB,UAAU,CAAE,CACtC,EACA,EAAY,UAAU,eAAiB,SAAU,EAAU,EAAQ,EAAO,EAAS,CAC3E,OAAO,GAAU,WACjB,EAAQ,EACR,EAAS,GAEb,AACI,IAAQ,WACZ,IAAI,EAAQ,IAAI,EAAM,EAAU,EAAG,EAAQ,GAAQ,EAEnD,MADA,GAAM,GAAK,KAAK,UAAU,EAAO,EAAO,WAAY,CAAO,EACpD,CACX,EACA,EAAY,UAAU,eAAiB,SAAU,EAAa,CAC1D,KAAK,aAAe,EACpB,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACA,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,cAAgB,CAAC,CACjC,EACA,EAAY,UAAU,iBAAmB,UAAY,CACjD,KAAK,eAAe,CAAC,CAAC,CAC1B,EACA,EAAY,UAAU,eAAiB,SAAU,EAAM,CACnD,IAAI,EAAQ,EAAK,MAAM,cAAc,EACjC,EACA,KAAK,aAAe,EAAM,GAG1B,KAAK,aAAe;CAE5B,EACA,EAAY,UAAU,aAAe,SAAU,EAAK,EAAQ,CACxD,IAAI,EAAO,KAAK,QAAQ,CAAG,EACvB,EAAU,GAKd,GAJI,EAAS,IACT,EAAU,CAAC,CAAC,EAAK,OAAO,EAAS,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,GAC1D,AACI,IAAU,CAAC,CAAC,EAAK,OAAO,CAAM,CAAC,CAAC,MAAM,KAAK,OAAO,EAClD,EACA,IAAI,EAAK,KAAK,aACb,GAAI,QAAQ,KAAK,EAAK,MAAM,EAAS,EAAG,EAAS,CAAC,CAAC,EACpD,IAAI,EAAK,SAET,KAAI,EAAK,KAAK,WAClB,IAAI,EAAQ,EACZ,GAAI,EAAQ,EAAG,CACX,EACI,WACK,GAAS,GAAK,EAAK,OAAO,CAAK,CAAC,CAAC,MAAM,CAAE,GAClD,GACJ,CAEA,IADA,IAAI,EAAM,EACH,EAAM,EAAK,QAAU,EAAK,OAAO,CAAG,CAAC,CAAC,MAAM,CAAE,GACjD,IAEJ,OAAO,IAAI,EAAM,EAAK,EAAO,EAAK,CAAG,CACzC,EACA,EAAY,UAAU,cAAgB,SAAU,EAAK,EAAQ,CAGzD,IAFA,IAAI,EAAY,KAAK,aAAa,EAAK,CAAM,EACzC,EAAO,KAAK,QAAQ,EAAU,IAAI,GAAG,EAClC,EAAK,OAAO,EAAU,IAAI,MAAM,CAAC,CAAC,MAAM,OAAO,GAClD,EAAU,IAAI,QAAU,EAE5B,OAAO,CACX,EACA,EAAY,UAAU,eAAiB,SAAU,EAAa,CAC1D,KAAK,IAAI,eAAe,CAAW,CACvC,EACA,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,IAAI,eAAe,CACnC,EACA,EAAY,UAAU,aAAe,SAAU,EAAW,CAAE,KAAK,UAAU,YAAa,CAAS,CAAG,EACpG,EAAY,UAAU,aAAe,UAAY,CAAE,OAAO,KAAK,UAAY,EAC3E,EAAY,UAAU,kBAAoB,SAAU,EAAG,CACnD,IAAI,EAAO,EAAE,KACb,KAAK,YAAY,MAAM,EAAK,KAAK,EACjC,KAAK,QAAQ,kBAAmB,CAAC,CACrC,EACA,EAAY,UAAU,QAAU,SAAU,EAAM,EAAI,CAChD,GAAI,GAAQ,OAAO,GAAS,SAAU,CAClC,GAAI,EAAK,aACL,OAAO,KAAK,cAAc,CAAI,EAClC,IAAI,EAAU,EACV,EAAO,EAAQ,IACvB,KAEI,GAA2B,GAAS,gBAIxC,GAFK,KAAK,OAAO,mBACb,KAAK,OAAO,iBAAmB,IAAI,GACnC,KAAK,OAAO,IAAS,CAAC,EAAS,CAC/B,KAAK,cAAc,KAAK,OAAO,EAAK,EACpC,GAAM,EAAG,EACT,MACJ,CACA,KAAK,QAAU,EACf,EAAO,WAAW,CAAC,OAAQ,CAAI,EAAG,SAAU,EAAG,CACvC,SAAK,UAGT,IAAI,KAAK,UAAY,EACjB,OAAO,GAAM,EAAG,EAChB,KAAK,OAAO,IAAS,CAAC,EACtB,KAAK,cAAc,KAAK,OAAO,EAAK,EAE/B,GAAK,EAAE,OACZ,EAAI,IAAI,EAAE,KAAK,CAAO,EACjB,IACD,KAAK,OAAO,GAAQ,EACpB,EAAE,IAAM,GAEZ,KAAK,cAAc,CAAC,GAExB,GAAM,EAAG,CAZW,CAaxB,EAAE,KAAK,IAAI,CAAC,EACP,KAAK,OACN,KAAK,cAAc,KAAK,OAAO,iBAAkB,EAAI,CAC7D,EACA,EAAY,UAAU,cAAgB,SAAU,EAAM,EAAgB,CAClE,GAAK,IACD,KAAK,QAAU,EAAK,KACpB,KAAK,QAAU,EAEnB,KAAI,EAAU,KAAK,MACnB,KAAK,MAAQ,EACb,KAAK,YAAY,EACb,KAAK,YACL,KAAK,aAAa,EACtB,IAAI,EAAY,EAAK,aAAa,EAClC,GAAI,EAAU,KAAO,IAAA,GAAW,CAC5B,IAAI,EAAoB,KAAK,kBAAkB,KAAK,IAAI,EACxD,EAAU,GAAG,SAAU,CAAiB,CAC5C,CACA,KAAK,YAAY,aAAa,CAAS,EACvC,KAAK,YAAY,YAAY,KAAK,YAAY,CAAC,EAC/C,KAAK,QAAU,EAAK,QACpB,KAAK,WAAa,EAAK,WAClB,IACG,EAAK,iBACL,EAAK,gBAAgB,IAAI,EAC7B,KAAK,SAAS,WAAW,IAAI,KAAK,KAAM,KAAK,WAAW,EACxD,KAAK,YAAY,EAAK,YAAY,EAClC,KAAK,YAAY,MAAM,CAAC,EACxB,KAAK,MAAM,aAAc,CAAW,UAAe,MAAK,CAAC,EApB1C,CAsBvB,EACA,EAAY,UAAU,YAAc,UAAY,CAC5C,AAEI,KAAK,WADL,KAAK,QAAQ,UAAU,EACR,KAEvB,EACA,EAAY,UAAU,aAAe,UAAY,CAC7C,GAAI,CACA,KAAK,QAAU,KAAK,MAAM,aAAa,IAAI,CAC/C,OACO,EAAG,CACN,EAAO,KAAK,wBAAyB,CAAC,EACtC,KAAK,QAAU,IACnB,CACJ,EACA,EAAY,UAAU,QAAU,UAAY,CACxC,OAAO,KAAK,KAChB,EACA,EAAY,UAAU,aAAe,SAAU,EAAW,CAClD,KAAK,aAAe,GAAa,MAAM,CAAS,IAEpD,KAAK,WAAa,EAClB,KAAK,QAAQ,kBAAmB,CAAS,EAC7C,EACA,EAAY,UAAU,aAAe,UAAY,CAC7C,OAAO,KAAK,UAChB,EACA,EAAY,UAAU,cAAgB,SAAU,EAAY,CACpD,KAAK,cAAgB,GAAc,MAAM,CAAU,IAEvD,KAAK,YAAc,EACnB,KAAK,QAAQ,mBAAoB,CAAU,EAC/C,EACA,EAAY,UAAU,cAAgB,UAAY,CAC9C,OAAO,KAAK,WAChB,EACA,EAAY,UAAU,eAAiB,UAAY,CAI/C,OAHA,KAAK,cAAc,EACf,KAAK,YACE,KAAK,IAAI,KAAK,sBAAsB,EAAG,KAAK,WAAW,EAC3D,KAAK,WAChB,EACA,EAAY,UAAU,sBAAwB,UAAY,CACtD,GAAI,KAAK,kBAAoB,KACzB,OAAO,KAAK,iBAChB,IAAI,EAAQ,EAKZ,OAJA,KAAK,YAAY,QAAQ,SAAU,EAAG,CAC9B,GAAK,EAAE,YAAc,IACrB,EAAQ,EAAE,YAClB,CAAC,EACM,KAAK,gBAAkB,CAClC,EACA,EAAY,UAAU,cAAgB,SAAU,EAAO,CACnD,GAAI,KAAK,WAAa,EAAO,CAEzB,GADA,KAAK,UAAY,GACb,KAAK,aACL,MAAO,MAAK,YAAc,KAAK,WAQnC,IAAK,IAPD,EAAQ,KAAK,IAAI,YAAY,EAC7B,EAAQ,KAAK,gBACb,EAAoB,EACpB,EAAY,EACZ,EAAW,KAAK,UAAU,GAC1B,EAAY,EAAW,EAAS,MAAM,IAAM,IAC5C,EAAM,EAAM,OACP,EAAI,EAAG,EAAI,EAAK,IAAK,CAC1B,GAAI,EAAI,EAAW,CAEf,GADA,EAAI,EAAS,IAAI,IAAM,EACnB,GAAK,EACL,MACJ,EAAW,KAAK,UAAU,KAC1B,EAAY,EAAW,EAAS,MAAM,IAAM,GAChD,CACI,EAAM,KACN,EAAM,GAAK,KAAK,sBAAsB,EAAM,EAAE,CAAC,CAAC,IAChD,EAAM,GAAK,IACX,EAAoB,EAAM,GAClC,CACA,KAAK,YAAc,CACvB,CACJ,EACA,EAAY,UAAU,QAAU,SAAU,EAAK,CAC3C,OAAO,KAAK,IAAI,QAAQ,CAAG,CAC/B,EACA,EAAY,UAAU,SAAW,SAAU,EAAU,EAAS,CAC1D,OAAO,KAAK,IAAI,SAAS,EAAU,CAAO,CAC9C,EACA,EAAY,UAAU,UAAY,UAAY,CAC1C,OAAO,KAAK,IAAI,UAAU,CAC9B,EACA,EAAY,UAAU,aAAe,SAAU,EAAO,CAClD,OAAO,KAAK,IAAI,aAAa,GAAS,KAAK,UAAU,SAAS,CAAC,CACnE,EACA,EAAY,UAAU,OAAS,SAAU,EAAU,EAAM,CACrD,OAAO,KAAK,IAAI,OAAO,EAAU,CAAI,CACzC,EACA,EAAY,UAAU,OAAS,SAAU,EAAO,CAC5C,OAAO,KAAK,IAAI,OAAO,CAAK,CAChC,EACA,EAAY,UAAU,gBAAkB,SAAU,EAAU,EAAS,CACjE,OAAO,KAAK,IAAI,gBAAgB,EAAU,CAAO,CACrD,EACA,EAAY,UAAU,YAAc,SAAU,EAAQ,EAAY,CACzD,KAAO,OAEZ,MAAK,UAAY,GACjB,IAAK,IAAI,EAAI,EAAO,OAAS,EAAG,GAAK,GAAI,IAAK,CAC1C,IAAI,EAAQ,EAAO,GACf,EAAM,QAAU,UAAY,EAAM,QAAU,SAC5C,KAAK,IAAI,YAAY,CAAK,EAErB,EAAM,OACX,KAAK,SAAS,EAAM,KAAK,CAEjC,CACI,CAAC,GAAc,KAAK,cAChB,EAAO,gBACP,KAAK,UAAU,SAAS,EAAO,eAAe,EAE9C,KAAK,UAAU,SAAS,KAAK,kBAAkB,EAAQ,EAAI,CAAC,GAEpE,KAAK,UAAY,EAhBA,CAiBrB,EACA,EAAY,UAAU,YAAc,SAAU,EAAQ,EAAY,CACzD,KAAO,OAEZ,MAAK,UAAY,GACjB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAQ,EAAO,IACf,EAAM,QAAU,UAAY,EAAM,QAAU,WAC5C,KAAK,IAAI,gBAAgB,CAAK,CAEtC,CACI,CAAC,GAAc,KAAK,cAChB,EAAO,eACP,KAAK,UAAU,SAAS,EAAO,cAAc,EAE7C,KAAK,UAAU,SAAS,KAAK,kBAAkB,EAAQ,EAAK,CAAC,GAErE,KAAK,UAAY,EAbA,CAcrB,EACA,EAAY,UAAU,cAAgB,SAAU,EAAQ,CACpD,KAAK,YAAc,CACvB,EACA,EAAY,UAAU,kBAAoB,SAAU,EAAQ,EAAQ,CAChE,SAAS,EAAS,EAAO,CACrB,OAAO,EAAS,EAAM,SAAW,SAAW,EAAM,SAAW,QACjE,CAEA,IAAK,IADD,EAAO,EACF,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAQ,EAAO,GACd,KAAM,MAEX,IAAI,CAAC,EAAO,CACR,AAII,EAJA,EAAS,CAAK,EACN,EAAM,WAAW,EAAM,MAAO,EAAM,GAAG,EAGvC,EAAM,WAAW,EAAM,MAAO,EAAM,KAAK,EAErD,QACJ,CACI,EAAS,CAAK,GACd,EAAQ,EAAM,MACV,EAAM,QAAQ,EAAM,IAAK,EAAM,MAAM,GAAK,IAC1C,EAAM,SAAS,CAAK,EAExB,EAAQ,EAAM,IACV,EAAM,QAAQ,EAAM,IAAK,EAAM,MAAM,GAAK,GAC1C,EAAM,OAAO,CAAK,IAItB,EAAQ,EAAM,MACV,EAAM,QAAQ,EAAM,IAAK,EAAM,MAAM,GAAK,KAC1C,EAAQ,EAAM,WAAW,EAAM,MAAO,EAAM,KAAK,GAdzD,CAiBJ,CACA,OAAO,CACX,EACA,EAAY,UAAU,QAAU,SAAU,EAAO,EAAM,CACnD,OAAO,KAAK,IAAI,QAAQ,EAAO,CAAI,CACvC,EACA,EAAY,UAAU,SAAW,SAAU,EAAW,EAAY,EAAM,CACpE,IAAI,EAAO,KAAK,aAAa,CAAS,EAClC,EAAQ,KAAK,gBAAgB,CAAS,EACtC,EAAU,EAAM,WAAW,EAAY,CAAU,EACrD,GAAI,CAAC,EAAM,CACP,KAAK,OAAO,CAAS,EACrB,IAAI,EAAU,EAAU,MAAM,IAAM,EAAU,IAAI,IAC9C,EAAW,EAAU,CAAC,EAAU,IAAI,OAAS,EAAU,MAAM,OAAS,EAAU,IAAI,OACpF,IACI,EAAQ,MAAM,KAAO,EAAU,IAAI,KAAO,EAAQ,MAAM,OAAS,EAAU,IAAI,SAC/E,EAAQ,MAAM,QAAU,GACxB,EAAQ,IAAI,KAAO,EAAU,IAAI,KAAO,EAAQ,IAAI,OAAS,EAAU,IAAI,SAC3E,EAAQ,IAAI,QAAU,IAE1B,GAAW,EAAQ,MAAM,KAAO,EAAU,IAAI,MAC9C,EAAQ,MAAM,KAAO,EACrB,EAAQ,IAAI,KAAO,EAE3B,CAEA,GADA,EAAQ,IAAM,KAAK,OAAO,EAAQ,MAAO,CAAI,EACzC,EAAM,OAAQ,CACd,IAAI,EAAW,EAAU,MACrB,EAAW,EAAQ,MACnB,EAAU,EAAS,IAAM,EAAS,IAClC,EAAW,EAAS,OAAS,EAAS,OAC1C,KAAK,SAAS,EAAM,IAAI,SAAU,EAAG,CAQjC,MAPA,GAAI,EAAE,MAAM,EACR,EAAE,MAAM,KAAO,EAAS,MACxB,EAAE,MAAM,QAAU,GAClB,EAAE,IAAI,KAAO,EAAS,MACtB,EAAE,IAAI,QAAU,GACpB,EAAE,MAAM,KAAO,EACf,EAAE,IAAI,KAAO,EACN,CACX,CAAC,CAAC,CACN,CACA,OAAO,CACX,EACA,EAAY,UAAU,WAAa,SAAU,EAAU,EAAQ,EAAc,CACzE,EAAe,EAAa,QAAQ,MAAO,KAAK,aAAa,CAAC,EAC9D,IAAK,IAAI,EAAM,EAAU,GAAO,EAAQ,IACpC,KAAK,IAAI,aAAa,CAAO,MAAK,OAAQ,CAAE,EAAG,CAAY,CACnE,EACA,EAAY,UAAU,YAAc,SAAU,EAAO,CAIjD,IAAK,IAHD,EAAW,EAAM,aAAa,EAC9B,EAAc,IAAI,EAAM,EAAG,EAAG,EAAG,CAAC,EAClC,EAAO,KAAK,WAAW,EAClB,EAAI,EAAS,MAAM,IAAK,GAAK,EAAS,IAAI,IAAK,EAAE,EAAG,CACzD,IAAI,EAAO,KAAK,QAAQ,CAAC,EACzB,EAAY,MAAM,IAAM,EACxB,EAAY,IAAI,IAAM,EACtB,IAAK,IAAI,EAAI,EAAG,EAAI,GACZ,EAAK,OAAO,CAAC,GAAK,IADA,EAAE,GAGxB,EAAI,GAAQ,EAAK,OAAO,CAAC,GAAK,KAC9B,EAAY,MAAM,OAAS,EAC3B,EAAY,IAAI,OAAS,EAAI,IAG7B,EAAY,MAAM,OAAS,EAC3B,EAAY,IAAI,OAAS,GAE7B,KAAK,OAAO,CAAW,CAC3B,CACJ,EACA,EAAY,UAAU,WAAa,SAAU,EAAU,EAAS,EAAK,CAGjE,GAFA,EAAW,KAAK,gBAAgB,CAAQ,EACxC,EAAU,KAAK,cAAc,CAAO,EAChC,EAAM,EAAG,CACT,IAAI,EAAM,KAAK,gBAAgB,EAAW,CAAG,EAC7C,GAAI,EAAM,EACN,MAAO,GACX,IAAI,EAAO,EAAM,CACrB,MACK,GAAI,EAAM,EAAG,CACd,IAAI,EAAM,KAAK,cAAc,EAAU,CAAG,EAC1C,GAAI,EAAM,KAAK,IAAI,UAAU,EAAI,EAC7B,MAAO,GACX,IAAI,EAAO,EAAM,CACrB,KACK,CACD,EAAW,KAAK,mBAAmB,CAAQ,EAC3C,EAAU,KAAK,mBAAmB,CAAO,EACzC,IAAI,EAAO,EAAU,EAAW,CACpC,CACA,IAAI,EAAQ,IAAI,EAAM,EAAU,EAAG,EAAS,OAAO,SAAS,EACxD,EAAQ,KAAK,gBAAgB,CAAK,CAAC,CAAC,IAAI,SAAU,EAAG,CAIrD,MAHA,GAAI,EAAE,MAAM,EACZ,EAAE,MAAM,KAAO,EACf,EAAE,IAAI,KAAO,EACN,CACX,CAAC,EACG,EAAQ,GAAO,EACb,KAAK,IAAI,SAAS,EAAU,CAAO,EACnC,KAAK,IAAI,gBAAgB,EAAU,CAAO,EAGhD,OAFA,KAAK,IAAI,gBAAgB,EAAW,EAAM,CAAK,EAC/C,EAAM,QAAU,KAAK,SAAS,CAAK,EAC5B,CACX,EACA,EAAY,UAAU,YAAc,SAAU,EAAU,EAAS,CAC7D,OAAO,KAAK,WAAW,EAAU,EAAS,EAAE,CAChD,EACA,EAAY,UAAU,cAAgB,SAAU,EAAU,EAAS,CAC/D,OAAO,KAAK,WAAW,EAAU,EAAS,CAAC,CAC/C,EACA,EAAY,UAAU,eAAiB,SAAU,EAAU,EAAS,CAChE,OAAO,KAAK,WAAW,EAAU,EAAS,CAAC,CAC/C,EACA,EAAY,UAAU,mBAAqB,SAAU,EAAK,CACtD,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAK,KAAK,IAAI,UAAU,EAAI,CAAC,CAAC,CAC9D,EACA,EAAY,UAAU,iBAAmB,SAAU,EAAK,EAAQ,CAG5D,OAFI,EAAS,EACF,EACJ,KAAK,IAAI,KAAK,IAAI,QAAQ,CAAG,CAAC,CAAC,OAAQ,CAAM,CACxD,EACA,EAAY,UAAU,wBAA0B,SAAU,EAAK,EAAQ,CAEnE,GADA,EAAS,KAAK,IAAI,EAAG,CAAM,EACvB,EAAM,EACN,EAAM,EACN,EAAS,MAER,CACD,IAAI,EAAM,KAAK,IAAI,UAAU,EACzB,GAAO,GACP,EAAM,EAAM,EACZ,EAAS,KAAK,IAAI,QAAQ,EAAM,CAAC,CAAC,CAAC,QAGnC,EAAS,KAAK,IAAI,KAAK,IAAI,QAAQ,CAAG,CAAC,CAAC,OAAQ,CAAM,CAE9D,CACA,MAAO,CACE,MACG,QACZ,CACJ,EACA,EAAY,UAAU,qBAAuB,SAAU,EAAO,CACtD,EAAM,MAAM,IAAM,GAClB,EAAM,MAAM,IAAM,EAClB,EAAM,MAAM,OAAS,GAGrB,EAAM,MAAM,OAAS,KAAK,iBAAiB,EAAM,MAAM,IAAK,EAAM,MAAM,MAAM,EAElF,IAAI,EAAM,KAAK,IAAI,UAAU,EAAI,EAQjC,OAPI,EAAM,IAAI,IAAM,GAChB,EAAM,IAAI,IAAM,EAChB,EAAM,IAAI,OAAS,KAAK,IAAI,QAAQ,CAAG,CAAC,CAAC,QAGzC,EAAM,IAAI,OAAS,KAAK,iBAAiB,EAAM,IAAI,IAAK,EAAM,IAAI,MAAM,EAErE,CACX,EACA,EAAY,UAAU,eAAiB,SAAU,EAAa,CAC1D,GAAI,GAAe,KAAK,aAAc,CAIlC,GAHA,KAAK,aAAe,EACpB,KAAK,UAAY,GACjB,KAAK,eAAe,CAAC,EACjB,EAAa,CACb,IAAI,EAAM,KAAK,UAAU,EACzB,KAAK,UAAY,MAAM,CAAG,EAC1B,KAAK,gBAAgB,EAAG,EAAM,CAAC,CACnC,CACA,KAAK,QAAQ,gBAAgB,CACjC,CACJ,EACA,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,YAChB,EACA,EAAY,UAAU,kBAAoB,SAAU,EAAK,EAAK,EACtD,KAAK,gBAAgB,MAAQ,GAAO,KAAK,gBAAgB,MAAQ,KACjE,KAAK,gBAAkB,CAAO,MAAU,KAAI,EAC5C,KAAK,UAAY,GACjB,KAAK,aAAa,YAAY,EAC1B,KAAK,cACL,KAAK,QAAQ,gBAAgB,EAEzC,EACA,EAAY,UAAU,gBAAkB,SAAU,EAAc,EAAc,CAC1E,IAAI,EAAS,KAAK,gBACd,EAAO,IAAM,IACb,EAAS,CAAE,IAAK,EAAc,IAAK,CAAa,GACpD,IAAI,EAAY,KAAK,oBAAoB,EAAc,EAAO,IAAK,EAAO,GAAG,EAW7E,OAVI,GAAa,KAAK,YAAc,EAAY,GAC5C,KAAK,WAAa,EAClB,KAAK,UAAY,GACb,KAAK,eACL,KAAK,gBAAgB,EAAG,KAAK,UAAU,EAAI,CAAC,EAC5C,KAAK,eAAe,CAAC,EACrB,KAAK,QAAQ,iBAAiB,GAE3B,IAEJ,EACX,EACA,EAAY,UAAU,oBAAsB,SAAU,EAAW,EAAK,EAAK,CAKvE,OAJI,IACA,EAAY,KAAK,IAAI,EAAK,CAAS,GACnC,IACA,EAAY,KAAK,IAAI,EAAK,CAAS,GAChC,CACX,EACA,EAAY,UAAU,aAAe,UAAY,CAC7C,OAAO,KAAK,UAChB,EACA,EAAY,UAAU,aAAe,SAAU,EAAO,CAClD,KAAK,kBAAkB,EAAO,CAAK,CACvC,EACA,EAAY,UAAU,kBAAoB,UAAY,CAClD,MAAO,CACH,IAAK,KAAK,gBAAgB,IAC1B,IAAK,KAAK,gBAAgB,GAC9B,CACJ,EACA,EAAY,UAAU,4BAA8B,SAAU,EAAO,CACjE,IAAI,EAAc,KAAK,aACnB,EAAS,EAAM,OACf,EAAQ,EAAM,MACd,EAAM,EAAM,IACZ,EAAW,EAAM,IACjB,EAAU,EAAI,IACd,EAAM,EAAU,EAChB,EAAe,KAEnB,GADA,KAAK,UAAY,GACb,GAAO,EACP,GAAI,IAAW,SAAU,CACrB,KAAK,EAAc,YAAc,kBAAkB,CAAC,OAAO,EAAU,CAAG,EACxE,IAAI,EAAY,KAAK,UACrB,EAAe,KAAK,gBAAgB,CAAK,EACzC,KAAK,YAAY,CAAY,EAC7B,IAAI,EAAW,KAAK,YAAY,EAAI,GAAG,EACnC,EAAM,EACV,GAAI,EAAU,CACV,EAAS,eAAe,EAAI,IAAK,EAAI,OAAQ,EAAM,OAAS,EAAI,MAAM,EACtE,EAAS,SAAS,CAAC,CAAG,EACtB,IAAI,EAAiB,KAAK,YAAY,CAAQ,EAC1C,GAAkB,IAAmB,IACrC,EAAe,MAAM,CAAQ,EAC7B,EAAW,GAEf,EAAM,EAAU,QAAQ,CAAQ,EAAI,CACxC,CACA,KAAU,EAAM,EAAU,OAAQ,IAAO,CACrC,IAAI,EAAW,EAAU,GACrB,EAAS,MAAM,KAAO,EAAI,KAC1B,EAAS,SAAS,CAAC,CAAG,CAE9B,CACA,EAAU,CACd,KACK,CACD,IAAI,EAAO,MAAM,CAAG,EACpB,EAAK,QAAQ,EAAU,CAAC,EACxB,IAAI,EAAM,EAAc,KAAK,UAAY,KAAK,gBAC9C,EAAI,OAAO,MAAM,EAAK,CAAI,EAC1B,IAAI,EAAY,KAAK,UACjB,EAAW,KAAK,YAAY,CAAQ,EACpC,EAAM,EACV,GAAI,EAAU,CACV,IAAI,EAAM,EAAS,MAAM,cAAc,EAAM,IAAK,EAAM,MAAM,EAC1D,GAAO,GACP,EAAW,EAAS,MAAM,EAAM,IAAK,EAAM,MAAM,EAC7C,IACA,EAAS,SAAS,CAAG,EACrB,EAAS,eAAe,EAAS,EAAG,EAAI,OAAS,EAAM,MAAM,IAIjE,GAAO,KACP,EAAS,eAAe,EAAU,EAAG,EAAI,OAAS,EAAM,MAAM,EAC9D,EAAS,SAAS,CAAG,GAEzB,EAAM,EAAU,QAAQ,CAAQ,EAAI,CACxC,CACA,KAAU,EAAM,EAAU,OAAQ,IAAO,CACrC,IAAI,EAAW,EAAU,GACrB,EAAS,MAAM,KAAO,GACtB,EAAS,SAAS,CAAG,CAE7B,CACJ,KAEC,CACD,EAAM,KAAK,IAAI,EAAM,MAAM,OAAS,EAAM,IAAI,MAAM,EAChD,IAAW,WACX,EAAe,KAAK,gBAAgB,CAAK,EACzC,KAAK,YAAY,CAAY,EAC7B,EAAM,CAAC,GAEX,IAAI,EAAW,KAAK,YAAY,CAAQ,EACpC,GACA,EAAS,eAAe,EAAU,EAAM,OAAQ,CAAG,CAE3D,CASA,OARI,GAAe,KAAK,UAAU,QAAU,KAAK,IAAI,UAAU,GAC3D,QAAQ,MAAM,2DAA2D,EAE7E,KAAK,UAAY,GACb,EACA,KAAK,gBAAgB,EAAU,CAAO,EAEtC,KAAK,sBAAsB,EAAU,CAAO,EACzC,CACX,EACA,EAAY,UAAU,sBAAwB,SAAU,EAAU,EAAS,CACvE,KAAK,gBAAgB,GAAY,KACjC,KAAK,gBAAgB,GAAW,IACpC,EACA,EAAY,UAAU,gBAAkB,SAAU,EAAU,EAAS,CACjE,IAAI,EAAQ,KAAK,IAAI,YAAY,EAC7B,EAAU,KAAK,WAAW,EAC1B,EAAW,KAAK,UAChB,EAAY,KAAK,WACjB,EACA,EACA,EAAM,EAEV,IADA,EAAU,KAAK,IAAI,EAAS,EAAM,OAAS,CAAC,EACrC,GAAO,GACV,EAAW,KAAK,YAAY,EAAK,CAAQ,EACpC,GAMD,EAAS,CAAC,EACV,EAAS,KAAK,SAAU,EAAa,EAAK,EAAQ,EAAY,CAC1D,IAAI,EACJ,GAAI,GAAe,KAAM,CACrB,EAAa,KAAK,kBAAkB,EAAa,EAAO,MAAM,EAC9D,EAAW,GAAK,EAChB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,IACnC,EAAW,GAAK,CAExB,KAEI,GAAa,KAAK,kBAAkB,EAAM,EAAI,CAAC,UAAU,EAAY,CAAM,EAAG,EAAO,MAAM,EAE/F,EAAS,EAAO,OAAO,CAAU,CACrC,EAAE,KAAK,IAAI,EAAG,EAAS,IAAI,IAAK,EAAM,EAAS,IAAI,IAAI,CAAC,OAAS,CAAC,EAClE,EAAS,EAAS,MAAM,KAAO,KAAK,mBAAmB,EAAQ,EAAW,CAAO,EACjF,EAAM,EAAS,IAAI,IAAM,IArBzB,EAAS,KAAK,kBAAkB,EAAM,EAAI,EAC1C,EAAS,GAAO,KAAK,mBAAmB,EAAQ,EAAW,CAAO,EAClE,IAsBZ,EACA,EAAY,UAAU,mBAAqB,SAAU,EAAQ,EAAW,EAAS,CAC7E,GAAI,EAAO,QAAU,EACjB,MAAO,CAAC,EAEZ,IAAI,EAAS,CAAC,EACV,EAAgB,EAAO,OACvB,EAAY,EAAG,EAAe,EAC9B,EAAS,KAAK,YACd,EAAmB,KAAK,kBACxB,EAAY,GAAa,KAAK,IAAI,EAAI,EAAS,CAAC,GAC7C,IAAqB,GAAQ,EAAI,KAAK,MAAM,EAAY,CAAC,EAChE,SAAS,GAAgB,CACrB,IAAI,EAAc,EAClB,GAAI,IAAc,EACd,OAAO,EACX,GAAI,EACA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAQ,EAAO,GACnB,GAAI,GAAS,EACT,GAAe,OACd,GAAI,GAAS,EACd,GAAe,OACd,GAAI,GAAS,EACd,cAEA,KACR,CAIJ,OAFI,GAAU,IAAqB,KAC/B,GAAe,GACZ,KAAK,IAAI,EAAa,CAAS,CAC1C,CACA,SAAS,EAAS,EAAW,CAEzB,IAAK,IADD,EAAM,EAAY,EACb,EAAI,EAAW,EAAI,EAAW,IAAK,CACxC,IAAI,EAAK,EAAO,IACZ,IAAO,IAAM,IAAO,IACpB,GACR,CACK,EAAO,SACR,EAAS,EAAc,EACvB,EAAO,OAAS,GAEpB,GAAgB,EAChB,EAAO,KAAK,CAAY,EACxB,EAAY,CAChB,CAEA,IADA,IAAI,EAAS,EACN,EAAgB,EAAY,EAAY,GAAQ,CACnD,IAAI,EAAQ,EAAY,EAAY,EACpC,GAAI,EAAO,EAAQ,IAAM,GAAS,EAAO,IAAU,EAAO,CACtD,EAAS,CAAK,EACd,QACJ,CACA,GAAI,EAAO,IAAU,GAAqB,EAAO,IAAU,EAAkB,CACzE,KAAY,GAAS,EAAY,GACzB,EAAO,IAAU,EADW,KAKpC,GAAI,EAAQ,EAAW,CACnB,EAAS,CAAK,EACd,QACJ,CAEA,IADA,EAAQ,EAAY,EACR,EAAQ,EAAO,QACnB,EAAO,IAAU,EADU,KAKnC,GAAI,GAAS,EAAO,OAChB,MAEJ,EAAS,CAAK,EACd,QACJ,CAEA,IADA,IAAI,EAAW,KAAK,IAAI,GAAS,GAAa,GAAa,IAAK,EAAY,CAAC,EACtE,EAAQ,GAAY,EAAO,GAAS,GACvC,IAEJ,GAAI,EAAQ,CACR,KAAO,EAAQ,GAAY,EAAO,GAAS,GACvC,IAEJ,KAAO,EAAQ,GAAY,EAAO,IAAU,GACxC,GAER,MAEI,KAAO,EAAQ,GAAY,EAAO,GAAS,GACvC,IAGR,GAAI,EAAQ,EAAU,CAClB,EAAS,EAAE,CAAK,EAChB,QACJ,CACA,EAAQ,EAAY,EAChB,EAAO,IAAU,GACjB,IACJ,EAAS,EAAQ,CAAM,CAC3B,CACA,OAAO,CACX,EACA,EAAY,UAAU,kBAAoB,SAAU,EAAK,EAAQ,CAC7D,IAAI,EAAM,CAAC,EACP,EACJ,IAAmB,EACnB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACjC,IAAI,EAAI,EAAI,WAAW,CAAC,EACxB,GAAI,GAAK,EAAG,CACR,EAAU,KAAK,iBAAiB,EAAI,OAAS,CAAM,EACnD,EAAI,KAAK,CAAG,EACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,IACzB,EAAI,KAAK,CAAS,CAE1B,MACS,GAAK,GACV,EAAI,KAAK,CAAK,EAER,EAAI,IAAM,EAAI,IAAQ,EAAI,IAAM,EAAI,GAC1C,EAAI,KAAK,CAAW,EAEf,GAAK,MAAU,EAAY,CAAC,EACjC,EAAI,KAAK,EAAM,CAAQ,EAGvB,EAAI,KAAK,CAAI,CAErB,CACA,OAAO,CACX,EACA,EAAY,UAAU,sBAAwB,SAAU,EAAK,EAAiB,EAAc,CACxF,GAAI,GAAmB,EACnB,MAAO,CAAC,EAAG,CAAC,EAChB,AACI,IAAkB,IACtB,IAA+B,EAC/B,IAAI,EAAG,EACP,IAAK,EAAS,EAAG,EAAS,EAAI,SAC1B,EAAI,EAAI,WAAW,CAAM,EACrB,GAAK,EACL,GAAgB,KAAK,iBAAiB,CAAY,EAE7C,GAAK,MAAU,EAAY,CAAC,EACjC,GAAgB,EAGhB,GAAgB,EAEhB,IAAe,IAXe,KAetC,MAAO,CAAC,EAAc,CAAM,CAChC,EACA,EAAY,UAAU,aAAe,SAAU,EAAK,CAChD,IAAI,EAAI,EAMJ,OALA,KAAK,cACL,GAAK,KAAK,YAAY,IAAQ,KAAK,YAAY,EAAI,CAAC,UAAY,GAChE,CAAC,KAAK,cAAgB,CAAC,KAAK,UAAU,GAC/B,EAEA,KAAK,UAAU,EAAI,CAAC,OAAS,CAC5C,EACA,EAAY,UAAU,gBAAkB,SAAU,EAAK,CAK/C,MAJA,CAAC,KAAK,cAAgB,CAAC,KAAK,UAAU,GAC/B,EAGA,KAAK,UAAU,EAAI,CAAC,OAAS,CAE5C,EACA,EAAY,UAAU,iBAAmB,SAAU,EAAW,CAC1D,GAAI,KAAK,aAAc,CACnB,IAAI,EAAM,KAAK,yBAAyB,EAAW,OAAO,SAAS,EAC/D,EAAS,KAAK,UAAU,EAAI,KAChC,OAAO,EAAO,QAAU,EAAO,GAAK,EAAI,OAAS,EAAO,OAAS,CACrE,MAEI,MAAO,EAEf,EACA,EAAY,UAAU,uBAAyB,SAAU,EAAW,CAChE,IAAI,EAAM,KAAK,yBAAyB,EAAW,OAAO,SAAS,EACnE,OAAO,KAAK,uBAAuB,EAAI,IAAK,EAAI,MAAM,CAC1D,EACA,EAAY,UAAU,yBAA2B,SAAU,EAAQ,EAAW,CAC1E,IAAI,EAAY,KAAK,oBAAoB,EAAQ,CAAS,EAC1D,OAAO,KAAK,uBAAuB,CAAS,CAChD,EACA,EAAY,UAAU,iCAAmC,SAAU,EAAQ,EAAW,CAClF,IAAI,EAAY,KAAK,oBAAoB,EAAQ,CAAS,EAC1D,OAAO,KAAK,yBAAyB,EAAW,OAAO,UAAY,EAAE,CACzE,EACA,EAAY,UAAU,gBAAkB,SAAU,EAAK,CACnD,GAAK,KAAK,aAIN,OAAO,KAAK,UAAU,EAE9B,EACA,EAAY,UAAU,iBAAmB,SAAU,EAAc,CAC7D,OAAO,KAAK,UAAY,EAAe,KAAK,SAAW,EAC3D,EACA,EAAY,UAAU,oBAAsB,SAAU,EAAW,EAAc,CAC3E,OAAO,KAAK,yBAAyB,EAAW,CAAY,CAAC,CAAC,GAClE,EACA,EAAY,UAAU,uBAAyB,SAAU,EAAW,EAAc,CAC9E,OAAO,KAAK,yBAAyB,EAAW,CAAY,CAAC,CAAC,MAClE,EACA,EAAY,UAAU,yBAA2B,SAAU,EAAW,EAAc,EAAS,CACzF,GAAI,EAAY,EACZ,MAAO,CAAE,IAAK,EAAG,OAAQ,CAAE,EAC/B,IAAI,EACA,EAAS,EACT,EAAY,EACZ,EACA,EAAM,EACN,EAAY,EACZ,EAAW,KAAK,gBAChB,EAAI,KAAK,kBAAkB,EAAU,CAAS,EAC9C,EAAI,EAAS,OACjB,GAAI,GAAK,GAAK,EACV,IAAI,EAAM,EAAS,GACf,EAAS,KAAK,aAAa,GAC3B,EAAU,EAAY,EAAS,EAAI,OAGvC,KAAI,EAAU,CAAC,EAKnB,IAHA,IAAI,EAAS,KAAK,UAAU,EAAI,EAC5B,EAAW,KAAK,gBAAgB,CAAM,EACtC,EAAY,EAAW,EAAS,MAAM,IAAM,IACzC,GAAO,IACV,EAAY,KAAK,aAAa,CAAM,EAChC,IAAM,EAAY,GAAa,GAAU,KAIzC,GAAO,EACP,IACI,EAAS,IACT,EAAS,EAAS,IAAI,IAAM,EAC5B,EAAW,KAAK,gBAAgB,EAAQ,CAAQ,EAChD,EAAY,EAAW,EAAS,MAAM,IAAM,KAGhD,IACA,KAAK,aAAa,KAAK,CAAM,EAC7B,KAAK,gBAAgB,KAAK,CAAG,GAGrC,GAAI,GAAY,EAAS,MAAM,KAAO,EAClC,EAAO,KAAK,mBAAmB,CAAQ,EACvC,EAAS,EAAS,MAAM,SAEvB,GAAI,EAAM,GAAa,GAAa,EAAS,EAC9C,MAAO,CACH,IAAK,EACL,OAAQ,KAAK,QAAQ,CAAM,CAAC,CAAC,MACjC,MAGA,GAAO,KAAK,QAAQ,CAAM,EAC1B,EAAW,KAEf,IAAI,EAAa,EAAG,EAAa,KAAK,MAAM,EAAY,CAAG,EAC3D,GAAI,KAAK,aAAc,CACnB,IAAI,EAAS,KAAK,UAAU,GACxB,IACA,EAAS,EAAO,GACZ,EAAa,GAAK,EAAO,SACzB,EAAa,EAAO,OACpB,EAAY,EAAO,EAAa,IAAM,EAAO,EAAO,OAAS,GAC7D,EAAO,EAAK,UAAU,CAAS,GAG3C,CAQA,OAPI,IAAY,IAAA,IAAa,KAAK,aAAa,UAAU,EAAM,EAAY,EAAQ,CAAU,IACzF,EAAe,KAAK,aAAa,YAAY,CAAO,GACxD,GAAa,KAAK,sBAAsB,EAAM,EAAe,CAAU,CAAC,CAAC,GACrE,KAAK,cAAgB,GAAa,IAClC,EAAY,EAAS,GACrB,EACO,EAAS,cAAc,CAAS,EACpC,CAAE,IAAK,EAAQ,OAAQ,CAAU,CAC5C,EACA,EAAY,UAAU,yBAA2B,SAAU,EAAQ,EAAW,CAC1E,GAAW,IAAc,OACrB,IAAI,EAAM,KAAK,wBAA2C,EAAQ,IAAwB,EAAQ,MAAM,MAExG,GAAM,KAAK,wBAA4C,EAAS,CAAS,EAC7E,EAAS,EAAI,IACb,EAAY,EAAI,OAChB,IAAI,EAAY,EACZ,EAAe,KACf,EAAO,KACX,EAAO,KAAK,UAAU,EAAQ,EAAW,CAAC,EACtC,IACA,EAAS,EAAK,MAAM,IACpB,EAAY,EAAK,MAAM,QAE3B,IAAI,EAAQ,EAAM,EACd,EAAW,KAAK,aAChB,EAAI,KAAK,kBAAkB,EAAU,CAAM,EAC3C,EAAI,EAAS,OACjB,GAAI,GAAK,GAAK,EACV,IAAI,EAAM,EAAS,GACf,EAAY,KAAK,gBAAgB,GACjC,EAAU,EAAS,EAAS,EAAI,OAGpC,KAAI,EAAU,CAAC,EAInB,IAFA,IAAI,EAAW,KAAK,gBAAgB,CAAG,EACnC,EAAY,EAAW,EAAS,MAAM,IAAM,IACzC,EAAM,GAAQ,CACjB,GAAI,GAAO,EAAW,CAElB,GADA,EAAS,EAAS,IAAI,IAAM,EACxB,EAAS,EACT,MACJ,EAAW,KAAK,gBAAgB,EAAQ,CAAQ,EAChD,EAAY,EAAW,EAAS,MAAM,IAAM,GAChD,KAEI,GAAS,EAAM,EAEnB,GAAa,KAAK,aAAa,CAAG,EAClC,EAAM,EACF,IACA,KAAK,aAAa,KAAK,CAAG,EAC1B,KAAK,gBAAgB,KAAK,CAAS,EAE3C,CACA,IAAI,EAAW,GACX,GAAY,GAAO,GACnB,EAAW,KAAK,mBAAmB,EAAU,EAAQ,CAAS,EAC9D,EAAe,EAAS,MAAM,MAG9B,EAAW,KAAK,QAAQ,CAAM,CAAC,CAAC,UAAU,EAAG,CAAS,EACtD,EAAe,GAEnB,IAAI,EAAa,EACjB,GAAI,KAAK,aAAc,CACnB,IAAI,EAAU,KAAK,UAAU,GAC7B,GAAI,EAAS,CAET,IADA,IAAI,EAAkB,EACf,EAAS,QAAU,EAAQ,IAC9B,IACA,IAEJ,EAAW,EAAS,UAAU,EAAQ,EAAkB,IAAM,EAAG,EAAS,MAAM,EAChF,EAAa,EAAkB,EAAI,EAAQ,OAAS,CACxD,CACJ,CAGA,OAFI,KAAK,aAAe,KAAK,YAAY,IAAQ,KAAK,YAAY,EAAI,CAAC,YACnE,GAAa,KAAK,YAAY,EAAI,CAAC,WAChC,CACH,IAAK,EACL,OAAQ,EAAa,KAAK,sBAAsB,CAAQ,CAAC,CAAC,EAC9D,CACJ,EACA,EAAY,UAAU,uBAAyB,SAAU,EAAK,EAAW,CACrE,OAAO,KAAK,yBAAyB,EAAK,CAAS,CAAC,CAAC,MACzD,EACA,EAAY,UAAU,oBAAsB,SAAU,EAAQ,EAAW,CACrE,OAAO,KAAK,yBAAyB,EAAQ,CAAS,CAAC,CAAC,GAC5D,EACA,EAAY,UAAU,gBAAkB,UAAY,CAChD,IAAI,EAAa,EACb,EAAO,KACX,GAAK,KAAK,aAaN,IAJA,IAAI,EAAU,KAAK,UAAU,OACzB,EAAM,EAAG,EAAI,EACb,EAAO,KAAK,UAAU,KACtB,EAAY,EAAO,EAAK,MAAM,IAAM,IACjC,EAAM,GAAS,CAClB,IAAI,EAAS,KAAK,UAAU,GAC5B,GAAc,EAAS,EAAO,OAAS,EAAI,EAC3C,IACI,EAAM,IACN,EAAM,EAAK,IAAI,IAAM,EACrB,EAAO,KAAK,UAAU,KACtB,EAAY,EAAO,EAAK,MAAM,IAAM,IAE5C,KAtBoB,CACpB,EAAa,KAAK,UAAU,EAE5B,IAAK,IADD,EAAW,KAAK,UACX,EAAI,EAAG,EAAI,EAAS,OAAQ,IACjC,EAAO,EAAS,GAChB,GAAc,EAAK,IAAI,IAAM,EAAK,MAAM,GAEhD,CAmBA,OAFI,KAAK,cACL,GAAc,KAAK,uBAAuB,GACvC,CACX,EACA,EAAY,UAAU,gBAAkB,SAAU,EAAI,CAC7C,KAAK,iBAEV,KAAK,sBAAwB,SAAU,EAAK,EAAiB,EAAc,CACvE,GAAI,IAAoB,EACpB,MAAO,CAAC,EAAG,CAAC,EAChB,AACI,IAAkB,IACtB,IAA+B,EAC/B,IAAI,EAAG,EACP,IAAK,EAAS,EAAG,EAAS,EAAI,SAC1B,EAAI,EAAI,OAAO,CAAM,EACjB,IAAM,IACN,GAAgB,KAAK,iBAAiB,CAAY,EAGlD,GAAgB,EAAG,kBAAkB,CAAC,EAEtC,IAAe,IARe,KAYtC,MAAO,CAAC,EAAc,CAAM,CAChC,EACJ,EACA,EAAY,UAAU,sBAAwB,UAAY,CACtD,IAAI,EAAM,KAAK,UAAU,UAAU,EAKnC,OAJI,EAAI,SAAW,EACR,EAAI,MAAQ,EAAI,GAAK,KAAK,IAAI,oBAAoB,EAE3C,KAAK,QAAQ,EAAI,GAClB,CAAC,CAAC,EAAI,OAAS,EACpC,EACA,EAAY,UAAU,QAAU,UAAY,CACxC,AAGI,KAAK,aAFL,KAAK,YAAY,YAAY,IAAI,EACjC,KAAK,YAAY,QAAQ,EACR,IAErB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACpB,KAAK,KACL,KAAK,IAAI,IAAI,SAAU,KAAK,SAAS,EAErC,KAAK,YACL,KAAK,UAAU,IAAI,eAAgB,KAAK,kBAAkB,EAC1D,KAAK,UAAU,IAAI,kBAAmB,KAAK,kBAAkB,GAEjE,KAAK,UAAU,OAAO,CAC1B,EACO,CACX,EAAE,EACF,EAAY,KAAO,EACnB,EAAY,UAAU,OAAS,EAAO,OACtC,EAAY,UAAU,SAAW,EAAY,UAAU,SACvD,EAAY,UAAU,oBAAsB,CACxC,KAAM,UAAY,CAAE,EACpB,KAAM,UAAY,CAAE,EACpB,QAAS,UAAY,CAAE,EACvB,QAAS,UAAY,CAAE,EACvB,MAAO,UAAY,CAAE,EACrB,IAAK,UAAY,CAAE,EACnB,aAAc,UAAY,CAAE,EAC5B,cAAe,UAAY,CAAE,EAC7B,WAAY,UAAY,CAAE,CAC9B,EACA,EAAY,UAAU,WAAa,GACnC,EAAY,UAAU,MAAQ,KAC9B,EAAY,UAAU,QAAU,KAChC,EAAY,UAAU,WAAa,EACnC,EAAY,UAAU,YAAc,EACpC,EAAY,UAAU,WAAa,GACnC,EAAY,UAAU,aAAe,GACrC,EAAY,UAAU,gBAAkB,CACpC,IAAK,KACL,IAAK,IACT,EACA,EAAY,UAAU,YAAc,KACpC,EAAY,UAAU,YAAc,EACpC,EAAI,UAAU,EAAY,UAAW,CAAY,EACjD,IAAI,EAAO,EAAG,EAAW,EAAG,EAAoB,EAAG,EAAmB,EAAG,EAAc,EAAG,EAAQ,GAAI,EAAM,GAAI,EAAY,GAC5H,SAAS,EAAY,EAAG,CAGpB,OAFI,EAAI,KACG,GACJ,GAAK,MAAU,GAAK,MACvB,GAAK,MAAU,GAAK,MACpB,GAAK,MAAU,GAAK,MACpB,GAAK,MAAU,GAAK,MACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,KAC5B,CACA,EAAQ,wBAAwB,CAAC,CAAC,QAAQ,KAAK,EAAY,SAAS,EACpE,EAAQ,8BAA8B,CAAC,CAAC,aAAa,KAAK,EAAY,SAAS,EAC/E,EAAO,cAAc,EAAY,UAAW,UAAW,CACnD,KAAM,CACF,IAAK,SAAU,EAAO,CAClB,GAAI,CAAC,GAAS,GAAS,MACnB,EAAQ,GACH,GAAS,OACd,EAAQ,GACH,GAAS,cACd,EAAQ,GACH,OAAO,GAAS,WACrB,EAAQ,SAAS,EAAO,EAAE,GAAK,IAC/B,KAAK,OAAS,EAGlB,GADA,KAAK,MAAQ,EACT,CAAC,EACD,KAAK,eAAe,EAAK,MAExB,CACD,IAAI,EAAM,OAAO,GAAS,SAAW,EAAQ,KAC7C,KAAK,kBAAkB,EAAK,CAAG,EAC/B,KAAK,eAAe,EAAI,CAC5B,CACJ,EACA,IAAK,UAAY,CAQb,OAPI,KAAK,eAAe,EAChB,KAAK,OAAS,GACP,cACN,KAAK,kBAAkB,CAAC,CAAC,IAEvB,KAAK,MADD,OAGR,KACX,EACA,WAAY,EAChB,EACA,WAAY,CACR,IAAK,SAAU,EAAK,CAChB,EAAM,GAAO,OACP,KAAK,MAAM,MAAQ,OACnB,GAAO,OACT,GAAO,KAAK,cACZ,KAAK,YAAc,EACf,KAAK,eACL,KAAK,aAAe,GACpB,KAAK,eAAe,EAAI,GAGpC,EACA,aAAc,MAClB,EACA,iBAAkB,CACd,IAAK,UAAY,CACT,KAAK,eACL,KAAK,aAAe,GACpB,KAAK,eAAe,EAAI,EAEhC,EACA,aAAc,EAClB,EACA,gBAAiB,CACb,IAAK,UAAY,CAAE,KAAK,QAAQ,kBAAkB,CAAG,EACrD,aAAc,CAClB,EACA,UAAW,CACP,IAAK,SAAU,EAAW,CACtB,KAAK,WAAa,EAClB,KAAK,YAAY,EACb,GACA,KAAK,aAAa,CAC1B,EACA,aAAc,EAClB,EACA,YAAa,CAAE,aAAc,EAAK,EAClC,QAAS,CACL,IAAK,SAAU,EAAS,CACpB,EAAU,SAAS,CAAO,EACtB,EAAU,GAAK,KAAK,WAAa,IACjC,KAAK,UAAY,GACjB,KAAK,gBAAkB,CAAC,EACxB,KAAK,SAAW,EAChB,KAAK,QAAQ,eAAe,EAEpC,EACA,aAAc,EACd,WAAY,EAChB,EACA,uBAAwB,CAAE,aAAc,EAAM,EAC9C,UAAW,CACP,IAAK,SAAU,EAAK,CAAE,KAAK,aAAa,CAAG,CAAG,EAC9C,WAAY,EAChB,EACA,UAAW,CACP,IAAK,SAAU,EAAK,CAAE,KAAK,QAAQ,iBAAiB,CAAG,EACvD,aAAc,EAClB,EACA,YAAa,CACT,IAAK,SAAU,EAAK,CAAE,KAAK,IAAI,eAAe,CAAG,CAAG,EACpD,IAAK,UAAY,CAAE,OAAO,KAAK,IAAI,eAAe,CAAG,EACrD,WAAY,EAChB,EACA,KAAM,CACF,IAAK,SAAU,EAAK,CAAE,KAAK,QAAQ,CAAG,CAAG,EACzC,IAAK,UAAY,CAAE,OAAO,KAAK,OAAS,EACxC,WAAY,EAChB,CACJ,CAAC,EACD,EAAQ,YAAc,CAEtB,CAAC,EAED,IAAI,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,eAAe,cAAc,WAAW,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACpI,IAAI,EAAO,EAAQ,YAAY,EAC3B,EAAM,EAAQ,WAAW,EACzB,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAwB,UAAY,CACpC,SAAS,GAAS,CACd,KAAK,SAAW,CAAC,CACrB,CA4aA,MA3aA,GAAO,UAAU,IAAM,SAAU,EAAS,CAEtC,OADA,EAAI,MAAM,KAAK,SAAU,CAAO,EACzB,IACX,EACA,EAAO,UAAU,WAAa,UAAY,CACtC,OAAO,EAAK,WAAW,KAAK,QAAQ,CACxC,EACA,EAAO,UAAU,WAAa,SAAU,EAAS,CAC7C,KAAK,SAAW,CACpB,EACA,EAAO,UAAU,KAAO,SAAU,EAAS,CACvC,IAAI,EAAU,KAAK,SACf,EAAW,KAAK,eAAe,EAAS,CAAO,EACnD,GAAI,CAAC,EACD,MAAO,GACX,IAAI,EAAa,KAUjB,OATA,EAAS,QAAQ,SAAU,EAAI,EAAI,EAAI,EAAI,CAOvC,MANA,GAAa,IAAI,EAAM,EAAI,EAAI,EAAI,CAAE,EACjC,GAAM,GAAM,EAAQ,OAA4B,EAAQ,MAAO,OAC5D,EAAQ,aAAe,GAAS,EAAW,QAA2B,EAAQ,KAAM,GACvF,EAAa,KACN,IAEJ,EACX,CAAC,EACM,CACX,EACA,EAAO,UAAU,QAAU,SAAU,EAAS,CAC1C,IAAI,EAAU,KAAK,SACnB,GAAI,CAAC,EAAQ,OACT,MAAO,CAAC,EACZ,KAAK,gBAAgB,CAAO,EAC5B,IAAI,EAAQ,EAAQ,MAChB,EAAQ,EACN,EAAQ,SAAS,EAAM,MAAM,IAAK,EAAM,IAAI,GAAG,EAC/C,EAAQ,IAAI,YAAY,EAC1B,EAAS,CAAC,EACV,EAAK,EAAQ,GACjB,GAAI,EAAQ,aAAc,CACtB,IAAI,EAAM,EAAG,OACT,EAAS,EAAM,OAAS,EACxB,EACJ,MAAO,IAAK,IAAI,EAAM,EAAG,QAAU,EAAG,GAAO,EAAQ,IAAO,CACxD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,IACrB,GAAI,EAAM,EAAM,EAAE,CAAC,OAAO,EAAG,EAAE,GAAK,GAChC,SAAS,MACjB,IAAI,EAAY,EAAM,GAClB,EAAO,EAAM,EAAM,EAAM,GACzB,EAAa,EAAU,OAAS,EAAU,MAAM,EAAG,EAAE,CAAC,CAAC,EAAE,CAAC,OAC1D,EAAW,EAAK,MAAM,EAAG,EAAM,EAAE,CAAC,CAAC,EAAE,CAAC,OACtC,GAAa,EAAU,IAAI,MAAQ,GACnC,EAAU,IAAI,OAAS,IAG3B,EAAO,KAAK,EAAY,IAAI,EAAM,EAAK,EAAY,EAAM,EAAM,EAAG,CAAQ,CAAC,EACvE,EAAM,IACN,EAAM,EAAM,EAAM,GAC1B,CACJ,MAEI,IAAK,IAAI,EAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IACvC,GAAI,KAAK,mBAAmB,CAAO,EAAG,CAClC,IAAI,EAAM,EAAM,OAAS,EAEzB,GADA,EAAU,KAAK,kBAAkB,EAAS,EAAI,EAAG,CAAG,EAChD,EAAS,CACT,IAAI,EAAU,EAAQ,QAAU,EAAM,EAAQ,OAAS,EAAI,EACvD,EAAU,IACV,EAAI,GACR,EAAO,KAAK,IAAI,EAAM,EAAQ,SAAU,EAAQ,SAAU,EAAQ,OAAQ,EAAQ,MAAM,CAAC,CAC7F,CACJ,KACK,CACD,EAAU,EAAK,gBAAgB,EAAM,GAAI,CAAE,EAC3C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACrC,IAAI,EAAQ,EAAQ,GACpB,EAAO,KAAK,IAAI,EAAM,EAAG,EAAM,OAAQ,EAAG,EAAM,OAAS,EAAM,MAAM,CAAC,CAC1E,CACJ,CAGR,GAAI,EAAO,CAIP,IAHA,IAAI,EAAc,EAAM,MAAM,OAC1B,EAAY,EAAM,IAAI,OACtB,EAAI,EAAG,EAAI,EAAO,OAAS,EACxB,EAAI,GAAK,EAAO,EAAE,CAAC,MAAM,OAAS,GAAe,EAAO,EAAE,CAAC,MAAM,KAAO,GAC3E,IAEJ,IADA,IAAI,EAAS,EAAM,IAAI,IAAM,EAAM,MAAM,IAClC,EAAI,GAAK,EAAO,EAAE,CAAC,IAAI,OAAS,GAAa,EAAO,EAAE,CAAC,IAAI,KAAO,GACrE,IAEJ,IADA,EAAS,EAAO,MAAM,EAAG,EAAI,CAAC,EACzB,EAAI,EAAG,EAAI,EAAO,OAAQ,EAAI,EAAG,IAClC,EAAO,EAAE,CAAC,MAAM,KAAO,EAAM,MAAM,IACnC,EAAO,EAAE,CAAC,IAAI,KAAO,EAAM,MAAM,GAEzC,CACA,OAAO,CACX,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAe,CAY3D,IAAK,IAXD,EAAW,CACX,WAAY,GACZ,UAAW,GACX,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,UAAW,GACX,EAAG,IACH,EAAG,GACP,EACI,EAAc,GACT,EAAI,EAAG,EAAM,EAAc,OAAQ,EAAI,EAAK,IAAK,CACtD,IAAI,EAAS,EAAc,WAAW,CAAC,EACvC,GAAI,IAAW,EAAS,UAAW,CAE/B,GADA,IACI,GAAK,EAAK,CACV,GAAe,KACf,KACJ,CAEA,OADiB,EAAc,WAAW,CACzB,EAAjB,CACI,KAAK,EAAS,UACV,GAAe,KACf,MACJ,KAAK,EAAS,EACV,GAAe;EACf,MACJ,KAAK,EAAS,EACV,GAAe,IACf,KACR,CACA,QACJ,CACA,GAAI,IAAW,EAAS,WAAY,CAEhC,GADA,IACI,GAAK,EAAK,CACV,GAAe,IACf,KACJ,CACA,IAAI,EAAe,EAAc,WAAW,CAAC,EAC7C,GAAI,IAAiB,EAAS,WAAY,CACtC,GAAe,KACf,QACJ,CACA,GAAI,IAAiB,EAAS,QAAU,IAAiB,EAAS,UAAW,CACzE,GAAe,KACf,QACJ,CACA,GAAI,EAAS,QAAU,GAAgB,GAAgB,EAAS,OAAQ,CACpE,GAAe,IAAM,EAAc,GACnC,QACJ,CACJ,CACA,GAAe,EAAc,EACjC,CACA,OAAO,GAAe,CAC1B,EACA,EAAO,UAAU,QAAU,SAAU,EAAO,EAAa,CACrD,IAAI,EAAU,KAAK,SACf,EAAK,KAAK,gBAAgB,CAAO,EACrC,GAAI,EAAQ,aACR,OAAO,EACN,KAEL,KAAI,EAAW,KAAK,mBAAmB,CAAO,EAC1C,IACA,EAAQ,EAAM,QAAQ,cAAe;CAAI,GAC7C,IAAI,EAAQ,EAAG,KAAK,CAAK,EACzB,GAAI,CAAC,GAAU,CAAC,GAAY,EAAM,EAAE,CAAC,QAAU,EAAM,OACjD,OAAO,KAKX,GAJA,EAAc,EAAQ,OAChB,KAAK,mBAAmB,CAAW,EACnC,EAAY,QAAQ,MAAO,MAAM,EACvC,EAAc,EAAM,QAAQ,EAAI,CAAW,EACvC,EAAQ,aAAc,CACtB,EAAc,EAAY,MAAM,EAAE,EAClC,IAAK,IAAI,EAAI,KAAK,IAAI,EAAM,OAAQ,EAAM,MAAM,EAAG,KAAM,CACrD,IAAI,EAAK,EAAM,GACX,GAAM,EAAG,YAAY,GAAK,EAC1B,EAAY,GAAK,EAAY,EAAE,CAAC,YAAY,EAE5C,EAAY,GAAK,EAAY,EAAE,CAAC,YAAY,CACpD,CACA,EAAc,EAAY,KAAK,EAAE,CACrC,CACA,OAAO,CArBuC,CAsBlD,EACA,EAAO,UAAU,gBAAkB,SAAU,EAAS,EAAuB,CACzE,GAAI,EAAQ,kBAAkB,OAC1B,MAAO,GAAQ,GAAK,EAAQ,OAChC,IAAI,EAAS,EAAQ,OACrB,GAAI,CAAC,EAAQ,OACT,MAAO,GAAQ,GAAK,GACnB,EAAQ,SACT,EAAS,EAAK,aAAa,CAAM,GACrC,IAAI,EAAW,EAAQ,cAAgB,KAAO,MAC9C,GAAI,CACA,IAAI,OAAO,EAAQ,GAAG,EACtB,EAAQ,qBAAuB,GAC/B,GAAY,GAChB,MACU,CACN,EAAQ,qBAAuB,EACnC,CAIA,GAHI,EAAQ,YACR,EAAS,EAAgB,EAAQ,CAAO,GAC5C,EAAQ,aAAe,CAAC,GAAyB,SAAS,KAAK,CAAM,EACjE,EAAQ,aACR,MAAO,GAAQ,GAAK,KAAK,yBAAyB,EAAQ,CAAQ,EACtE,GAAI,CACA,IAAI,EAAK,IAAI,OAAO,EAAQ,CAAQ,CACxC,MACU,CACN,EAAK,EACT,CACA,MAAO,GAAQ,GAAK,CACxB,EACA,EAAO,UAAU,yBAA2B,SAAU,EAAQ,EAAU,CAGpE,IAAK,IAFD,EAAQ,EAAO,QAAQ,cAAe;EAAM,CAAC,CAAC,MAAM;CAAI,EACxD,EAAK,CAAC,EACD,EAAI,EAAG,EAAI,EAAM,OAAQ,IAC9B,GAAI,CACA,EAAG,KAAK,IAAI,OAAO,EAAM,GAAI,CAAQ,CAAC,CAC1C,MACU,CACN,MAAO,EACX,CACJ,OAAO,CACX,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAS,CACrD,OAAO,EAAQ,IAAM,iBAAiB,KAAK,EAAQ,GAAG,MAAM,GAAK,EAAQ,QAAU,CAAC,EAAQ,YAChG,EACA,EAAO,UAAU,kBAAoB,SAAU,EAAS,EAAI,EAAO,EAAM,CAErE,IAAK,IADD,EAAM,EAAQ,EAAS,EAAS,CAAK,EAChC,EAAM,EAAO,GAAO,GAAO,CAChC,IAAK,IAAI,EAAI,EAAG,EAAI,GACZ,IAAM,GADa,IAAK,CAG5B,IAAI,EAAO,EAAQ,QAAQ,GAAK,EAChC,EAAO,GAAQ,KAAO,EAAO,EAAO;EAAO,CAC/C,CACA,IAAI,EAAQ,EAAG,KAAK,CAAI,EAExB,GADA,EAAG,UAAY,EACX,EAAO,CACP,IAAI,EAAc,EAAK,MAAM,EAAG,EAAM,KAAK,CAAC,CAAC,MAAM;CAAI,EACnD,EAAc,EAAM,EAAE,CAAC,MAAM;CAAI,EACjC,EAAW,EAAQ,EAAY,OAAS,EACxC,EAAW,EAAY,EAAY,OAAS,EAAE,CAAC,OAKnD,MAAO,CACO,WACA,WACV,OAPS,EAAW,EAAY,OAAS,EAQzC,OAPS,EAAY,QAAU,EAC7B,EAAW,EAAY,EAAE,CAAC,OAC1B,EAAY,EAAY,OAAS,EAAE,CAAC,MAM1C,CACJ,CACJ,CACA,OAAO,IACX,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAS,EAAI,EAAU,EAAO,EAAO,CAEjF,IAAK,IADD,EAAM,EAAQ,EAAS,EAAS,CAAK,EAAG,EAAY,EAAQ,QAAQ,CAAK,CAAC,CAAC,OAAS,EAC/E,EAAM,EAAO,GAAO,GAAQ,CACjC,IAAK,IAAI,EAAI,EAAG,EAAI,GAAS,GAAO,EAAO,IAAK,CAC5C,IAAI,EAAO,EAAQ,QAAQ,GAAK,EAChC,EAAO,GAAQ,KAAO,EAAO,EAAO;EAAO,CAC/C,CACA,IAAI,EAAQ,EAAuB,EAAM,EAAI,CAAS,EACtD,GAAI,EAAO,CACP,IAAI,EAAc,EAAK,MAAM,EAAG,EAAM,KAAK,CAAC,CAAC,MAAM;CAAI,EACnD,EAAc,EAAM,EAAE,CAAC,MAAM;CAAI,EACjC,EAAW,EAAM,EAAY,OAC7B,EAAW,EAAY,EAAY,OAAS,EAAE,CAAC,OAKnD,MAAO,CACO,WACA,WACV,OAPS,EAAW,EAAY,OAAS,EAQzC,OAPS,EAAY,QAAU,EAC7B,EAAW,EAAY,EAAE,CAAC,OAC1B,EAAY,EAAY,OAAS,EAAE,CAAC,MAM1C,CACJ,CACJ,CACA,OAAO,IACX,EACA,EAAO,UAAU,eAAiB,SAAU,EAAS,EAAS,CAC1D,IAAI,EAAK,KAAK,gBAAgB,CAAO,EACrC,GAAI,CAAC,EACD,MAAO,GACX,IAAI,EAAW,KAAK,mBAAmB,CAAO,EAC1C,EAAY,KAAK,kBACjB,EAAa,KAAK,mBAClB,EAAY,EAAQ,WAAa,EACjC,EAAc,EAAQ,aAAe,EACrC,EAAsB,EAAG,QACzB,EAAQ,EAAQ,MAChB,EAAQ,EAAQ,MACpB,AACI,IAAQ,EAAQ,EAAM,EAAY,MAAQ,SAAW,EAAQ,UAAU,SAAS,EAChF,EAAM,QACN,EAAQ,EAAM,GAAe,EAAoB,QAAR,QAC7C,IAAI,EAAW,EAAQ,EAAM,MAAM,IAAM,EACrC,EAAU,EAAQ,EAAM,IAAI,IAAM,EAAQ,UAAU,EAAI,EAC5D,GAAI,EACA,IAAI,EAAU,SAAU,EAAU,CAC9B,IAAI,EAAM,EAAM,IACZ,MAAc,EAAK,EAAM,OAAQ,CAAQ,EAE7C,KAAK,IAAO,GAAO,EAAU,IACzB,GAAI,EAAc,EAAK,OAAO,UAAW,CAAQ,EAC7C,OACJ,KAAQ,MAAQ,EAEpB,KAAK,EAAM,EAAS,EAAW,EAAM,IAAK,GAAO,EAAU,IACvD,GAAI,EAAc,EAAK,OAAO,UAAW,CAAQ,EAC7C,MAAA,CALA,CAMZ,MAGA,KAAI,EAAU,SAAU,EAAU,CAC9B,IAAI,EAAM,EAAM,IACZ,MAAc,EAAK,EAAM,OAAQ,CAAQ,EAE7C,KAAK,GAAY,EAAG,GAAO,EAAS,IAChC,GAAI,EAAc,EAAK,EAAG,CAAQ,EAC9B,OACJ,KAAQ,MAAQ,EAEpB,KAAK,EAAM,EAAU,EAAU,EAAM,IAAK,GAAO,EAAS,IACtD,GAAI,EAAc,EAAK,EAAG,CAAQ,EAC9B,MAAA,CALA,CAMZ,EAEJ,GAAI,EAAQ,aACR,IAAI,EAAM,EAAG,OACT,EAAgB,SAAU,EAAK,EAAQ,EAAU,CACjD,IAAI,EAAW,EAAY,EAAM,EAAM,EAAI,EACvC,OAAW,GAAK,EAAW,EAAM,EAAQ,UAAU,GAEvD,KAAI,EAAO,EAAQ,QAAQ,CAAQ,EAC/B,EAAa,EAAK,OAAO,EAAG,EAAE,EAC9B,MAAC,GAAa,EAAa,GAAU,IAAe,IAExD,KAAK,IAAI,EAAI,EAAG,EAAI,EAAK,IAErB,GADA,EAAO,EAAQ,QAAQ,EAAW,CAAC,EAC/B,EAAK,OAAO,EAAG,EAAE,GAAK,GACtB,OAER,IAAI,EAAW,EAAK,MAAM,EAAG,EAAM,EAAE,CAAC,CAAC,EAAE,CAAC,OACtC,QAAa,EAAW,IAExB,EAAS,EAAU,EAAY,EAAW,EAAM,EAAG,CAAQ,EAC3D,MAAO,EALX,CARmC,CAcvC,OAEC,GAAI,EACL,IAAI,EAAgB,SAAU,EAAK,EAAU,EAAU,CACnD,GAAI,EAAU,CACV,IAAI,EAAM,EAAW,EAAS,EAAI,EAAU,EAAK,CAAQ,EACzD,GAAI,CAAC,EACD,MAAO,GACX,GAAI,EAAS,EAAI,SAAU,EAAI,SAAU,EAAI,OAAQ,EAAI,MAAM,EAC3D,MAAO,EACf,KACK,CACD,IAAI,EAAO,EAAQ,QAAQ,CAAG,EAC1B,EAAU,CAAC,EACX,EAAG,EAAO,EAEd,IADA,EAAG,UAAY,EACP,EAAI,EAAG,KAAK,CAAI,GAAI,CACxB,IAAI,EAAS,EAAE,EAAE,CAAC,OAElB,GADA,EAAO,EAAE,MACL,CAAC,EAAQ,CACT,GAAI,GAAQ,EAAK,OACb,MACJ,EAAG,UAAY,GAAQ,EAAK,eAAe,EAAM,EAAM,CAAmB,CAC9E,CACA,GAAI,EAAE,MAAQ,EAAS,EACnB,MACJ,EAAQ,KAAK,EAAE,MAAO,CAAM,CAChC,CACA,IAAK,IAAI,EAAI,EAAQ,OAAS,EAAG,GAAK,EAAG,GAAK,EAAG,CAC7C,IAAI,EAAS,EAAQ,EAAI,GACrB,EAAS,EAAQ,GACrB,GAAI,EAAS,EAAK,EAAQ,EAAK,EAAS,CAAM,EAC1C,MAAO,EACf,CACJ,CACJ,MAGA,KAAI,EAAgB,SAAU,EAAK,EAAY,EAAU,CAErD,GADA,EAAG,UAAY,EACX,EAAU,CACV,IAAI,EAAM,EAAU,EAAS,EAAI,EAAK,CAAO,EAC7C,GAAI,EAAK,CACL,IAAI,EAAU,EAAI,QAAU,EAAU,EAAI,OAAS,EAAI,EACnD,EAAU,IACV,EAAM,EACd,CACA,GAAI,CAAC,EACD,MAAO,GACX,GAAI,EAAS,EAAI,SAAU,EAAI,SAAU,EAAI,OAAQ,EAAI,MAAM,EAC3D,MAAO,EACf,MAKI,IAHA,IAAI,EAAO,EAAQ,QAAQ,CAAG,EAC1B,EACA,EACI,EAAI,EAAG,KAAK,CAAI,GAAI,CACxB,IAAI,EAAS,EAAE,EAAE,CAAC,OAElB,GADA,EAAO,EAAE,MACL,EAAS,EAAK,EAAM,EAAK,EAAO,CAAM,EACtC,MAAO,GACX,GAAI,CAAC,IACD,EAAG,UAAY,GAAQ,EAAK,eAAe,EAAM,EAAM,CAAmB,EACtE,GAAQ,EAAK,QACb,MAAO,EAEnB,CAER,EAEJ,MAAO,CAAW,SAAQ,CAC9B,EACO,CACX,EAAE,EACF,SAAS,EAAgB,EAAQ,EAAS,CACtC,IAAI,EAAqB,EAAK,mBAAmB,EACjD,SAAS,EAAa,EAAG,EAAW,CAWhC,OAVI,IAAc,IAAK,KAAK,EAAY,KACvB,GAAsB,EAAQ,qBAA2B,OAAO,kBAAmB,GAAG,EAAQ,OAAO,KAAK,EAAA,CAC5G,KAAK,CAAC,GAAK,EAAQ,OAC1B,GAAsB,EAAQ,qBAC1B,EACO,0BACJ,yBAEJ,MAEJ,EACX,CACA,IAAI,EAAc,MAAM,KAAK,CAAM,EAC/B,EAAY,EAAY,GACxB,EAAW,EAAY,EAAY,OAAS,GAChD,OAAO,EAAa,CAAS,EAAI,EAAS,EAAa,EAAU,EAAK,CAC1E,CACA,SAAS,EAAuB,EAAM,EAAI,EAAW,CAGjD,IAFA,IAAI,EAAQ,KACR,EAAO,EACJ,GAAQ,EAAK,QAAQ,CACxB,EAAG,UAAY,EACf,IAAI,EAAW,EAAG,KAAK,CAAI,EAC3B,GAAI,CAAC,EACD,MACJ,IAAI,EAAM,EAAS,MAAQ,EAAS,EAAE,CAAC,OACvC,GAAI,EAAM,EAAK,OAAS,EACpB,OACA,CAAC,GAAS,EAAM,EAAM,MAAQ,EAAM,EAAE,CAAC,UACvC,EAAQ,GACZ,EAAO,EAAS,MAAQ,CAC5B,CACA,OAAO,CACX,CACA,SAAS,EAAS,EAAS,EAAO,CAC9B,IAAI,EAAO,IAAM,EAAgB,CAAE,IAAK,EAAO,OAAQ,CAAE,EAA4D,EAA5C,EAAQ,IAAI,gBAAgB,CAAuC,EAAI,EAChJ,OADuK,EAAQ,IAAI,gBAAgB,CAAwC,CAAC,CAAC,IACzN,CACxB,CACA,EAAQ,OAAS,CAEjB,CAAC,EAED,IAAI,OAAO,4BAA4B,CAAC,UAAU,UAAU,SAAS,eAAe,mBAAmB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC7I,IAAI,EAAa,MAAQ,KAAK,YAAe,UAAY,CACrD,IAAI,EAAgB,SAAU,EAAG,EAAG,CAIhC,MAHA,GAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAU,EAAG,EAAG,CAAE,EAAE,UAAY,CAAG,GAC1E,SAAU,EAAG,EAAG,CAAE,IAAK,IAAI,KAAK,EAAO,OAAO,UAAU,eAAe,KAAK,EAAG,CAAC,IAAG,EAAE,GAAK,EAAE,GAAI,EAC7F,EAAc,EAAG,CAAC,CAC7B,EACA,OAAO,SAAU,EAAG,EAAG,CACnB,GAAI,OAAO,GAAM,YAAc,IAAM,KACjC,MAAU,UAAU,uBAAyB,OAAO,CAAC,EAAI,+BAA+B,EAC5F,EAAc,EAAG,CAAC,EAClB,SAAS,GAAK,CAAE,KAAK,YAAc,CAAG,CACtC,EAAE,UAAY,IAAM,KAAO,OAAO,OAAO,CAAC,GAAK,EAAG,UAAY,EAAE,UAAW,IAAI,EACnF,CACJ,EAAA,CAAG,EAAO,EAAU,EAAQ,aAAa,EACrC,EAAY,EAAQ,kBAAkB,EACtC,EAAW,EAAQ,SACnB,EAAkC,UAAY,CAC9C,SAAS,EAAiB,EAAQ,EAAU,CACxC,KAAK,MAAM,EAAQ,EAAU,EAAK,CACtC,CA4KA,MA3KA,GAAiB,UAAU,MAAQ,SAAU,EAAQ,EAAU,EAAgB,CAC3E,KAAK,SAAW,IAAa,EAAU,MAAQ,MAAQ,OACvD,KAAK,SAAW,CAAC,EACjB,KAAK,kBAAoB,CAAC,EAC1B,KAAK,YAAY,CAAM,EACvB,KAAK,eAAiB,CAC1B,EACA,EAAiB,UAAU,WAAa,SAAU,EAAS,CACnD,KAAK,SAAS,EAAQ,OACtB,KAAK,cAAc,CAAO,EAC9B,KAAK,SAAS,EAAQ,MAAQ,EAC1B,EAAQ,SACR,KAAK,cAAc,CAAO,CAClC,EACA,EAAiB,UAAU,cAAgB,SAAU,EAAS,EAAa,CACvE,IAAI,EAAO,IAAY,OAAO,GAAY,SAAW,EAAU,EAAQ,MACvE,EAAU,KAAK,SAAS,GACnB,GACD,OAAO,KAAK,SAAS,GACzB,IAAI,EAAM,KAAK,kBACf,IAAK,IAAI,KAAS,EAAK,CACnB,IAAI,EAAW,EAAI,GACnB,GAAI,GAAY,EACZ,OAAO,EAAI,QAEV,GAAI,MAAM,QAAQ,CAAQ,EAAG,CAC9B,IAAI,EAAI,EAAS,QAAQ,CAAO,EAC5B,GAAK,KACL,EAAS,OAAO,EAAG,CAAC,EAChB,EAAS,QAAU,IACnB,EAAI,GAAS,EAAS,IAElC,CACJ,CACJ,EACA,EAAiB,UAAU,QAAU,SAAU,EAAK,EAAS,EAAU,CACnE,GAAI,OAAO,GAAO,UAAY,IAC1B,AACI,IAAW,EAAI,SACnB,EAAM,EAAI,KAAK,WAEd,EAEL,IAAI,OAAO,GAAW,WAClB,OAAO,KAAK,WAAW,CAAE,KAAM,EAAS,QAAS,EAAK,KAAM,EAAQ,MAA4B,CAAK,CAAC,EAAG,EAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,SAAU,EAAS,CACrJ,IAAI,EAAQ,GACZ,GAAI,EAAQ,QAAQ,GAAG,GAAK,GAAI,CAC5B,IAAI,EAAQ,EAAQ,MAAM,KAAK,EAC/B,EAAU,EAAM,IAAI,EACpB,EAAM,QAAQ,SAAU,EAAS,CAC7B,IAAI,EAAU,KAAK,UAAU,CAAO,EAChC,EAAK,EAAS,EAAQ,QAAU,EAAQ,IAC5C,IAAU,EAAQ,IAAM,IAAM,EAC9B,KAAK,qBAAqB,EAAO,WAAW,CAChD,EAAG,IAAI,EACP,GAAS,GACb,CACA,IAAI,EAAU,KAAK,UAAU,CAAO,EAChC,EAAK,EAAS,EAAQ,QAAU,EAAQ,IAC5C,KAAK,qBAAqB,EAAQ,EAAI,EAAS,CAAQ,CAC3D,EAAG,IAAI,CAhBmG,CAiB9G,EACA,EAAiB,UAAU,qBAAuB,SAAU,EAAO,EAAS,EAAU,CAClF,IAAI,EAAM,KAAK,kBAAmB,EAClC,GAAI,CAAC,EACD,OAAO,EAAI,QAEV,GAAI,CAAC,EAAI,IAAU,KAAK,eACzB,EAAI,GAAS,MAEZ,CACI,MAAM,QAAQ,EAAI,EAAM,GAGnB,EAAI,EAAI,EAAM,CAAC,QAAQ,CAAO,IAAM,IAC1C,EAAI,EAAM,CAAC,OAAO,EAAG,CAAC,EAHtB,EAAI,GAAS,CAAC,EAAI,EAAM,EAKxB,OAAO,GAAY,WACnB,EAAW,EAAY,CAAO,GAElC,IAAI,EAAW,EAAI,GACnB,IAAK,EAAI,EAAG,EAAI,EAAS,OAAQ,IAAK,CAClC,IAAI,EAAQ,EAAS,GAErB,GADe,EAAY,CAChB,EAAI,EACX,KACR,CACA,EAAS,OAAO,EAAG,EAAG,CAAO,CACjC,CACJ,EACA,EAAiB,UAAU,YAAc,SAAU,EAAU,CACzD,GAAY,OAAO,KAAK,CAAQ,CAAC,CAAC,QAAQ,SAAU,EAAM,CACtD,IAAI,EAAU,EAAS,GAClB,KAEL,IAAI,OAAO,GAAY,SACnB,OAAO,KAAK,QAAQ,EAAS,CAAI,EACjC,OAAO,GAAY,aACnB,EAAU,CAAE,KAAM,CAAQ,GAC1B,OAAO,GAAY,WAEvB,AACI,EAAQ,OAAO,EACnB,KAAK,WAAW,CAAO,EAPc,CAQzC,EAAG,IAAI,CACX,EACA,EAAiB,UAAU,eAAiB,SAAU,EAAU,CAC5D,OAAO,KAAK,CAAQ,CAAC,CAAC,QAAQ,SAAU,EAAM,CAC1C,KAAK,cAAc,EAAS,EAAK,CACrC,EAAG,IAAI,CACX,EACA,EAAiB,UAAU,SAAW,SAAU,EAAS,CACrD,OAAO,KAAK,CAAO,CAAC,CAAC,QAAQ,SAAU,EAAK,CACxC,KAAK,QAAQ,EAAK,EAAQ,EAAI,CAClC,EAAG,IAAI,CACX,EACA,EAAiB,UAAU,cAAgB,SAAU,EAAS,CAC1D,KAAK,QAAQ,EAAQ,QAAS,CAAO,CACzC,EACA,EAAiB,UAAU,UAAY,SAAU,EAAM,CACnD,IAAI,EAAQ,EAAK,YAAY,CAAC,CAAC,MAAM,iBAAiB,CAAC,CAAC,OAAO,SAAU,EAAG,CAAE,OAAO,CAAG,CAAC,EACrF,EAAM,EAAM,IAAI,EAChB,EAAU,EAAQ,GACtB,GAAI,EAAQ,cAAc,GACtB,EAAM,EAAQ,cAAc,EAAQ,CAAC,YAAY,OAChD,GAAI,CAAC,EAAM,OACZ,MAAO,CAAO,MAAK,OAAQ,EAAG,OAC7B,GAAI,EAAM,QAAU,GAAK,EAAM,IAAM,QACtC,MAAO,CAAE,IAAK,EAAI,YAAY,EAAG,OAAQ,EAAG,EAEhD,IAAK,IADD,EAAS,EACJ,EAAI,EAAM,OAAQ,KAAM,CAC7B,IAAI,EAAW,EAAQ,SAAS,EAAM,IACtC,GAAI,GAAY,KAGZ,OAFI,OAAO,QAAW,KAClB,QAAQ,MAAM,oBAAsB,EAAM,GAAK,OAAS,CAAI,EACzD,GAEX,GAAU,CACd,CACA,MAAO,CAAO,MAAa,QAAO,CACtC,EACA,EAAiB,UAAU,eAAiB,SAAU,EAAQ,EAAW,CACrE,IAAI,EAAM,EAAS,GAAU,EAC7B,OAAO,KAAK,kBAAkB,EAClC,EACA,EAAiB,UAAU,eAAiB,SAAU,EAAM,EAAQ,EAAW,EAAS,CAChF,OAAU,GAEd,KAAI,EAAM,EAAS,GAAU,EACzB,EAAU,KAAK,kBAAkB,GAiBrC,OAhBI,EAAK,YACL,EAAK,WAAa,IAAM,EACxB,EAAU,KAAK,kBAAkB,EAAK,YAAc,GAEpD,IACI,GAAW,aAAe,EAAQ,EAAQ,OAAS,IAAM,cACzD,EAAK,UAAY,EAAK,WAAa,EAC5B,CAAE,QAAS,MAAO,IAG7B,EAAK,aACA,CAAC,GAAU,GAAU,IAAM,EAAU,QAAU,EAChD,EAAK,UAAY,EAAK,UAAU,MAAM,EAAG,CAAC,EAAI,OAAS,CAAC,GACnD,GAAU,IAAM,EAAU,KAC/B,EAAK,UAAY,KAElB,CAAW,SAAQ,EAlBG,CAmBjC,EACA,EAAiB,UAAU,cAAgB,SAAU,EAAQ,EAAM,CAC/D,OAAO,EAAK,WAAa,EAC7B,EACO,CACX,EAAE,EACF,SAAS,EAAY,EAAS,CAC1B,OAAO,OAAO,GAAW,UAAY,EAAQ,SACtC,EAAQ,QAAQ,WACf,EAAQ,UAAY,KAAO,EACvC,CACA,IAAI,EAA6B,SAAU,EAAQ,CAC/C,EAAU,EAAa,CAAM,EAC7B,SAAS,EAAY,EAAQ,EAAU,CACnC,IAAI,EAAQ,EAAO,KAAK,KAAM,EAAQ,CAAQ,GAAK,KAEnD,MADA,GAAM,eAAiB,GAChB,CACX,CACA,OAAO,CACX,EAAE,CAAgB,EAClB,EAAY,KAAO,SAAU,EAAS,EAAQ,EAAU,CACpD,EAAiB,UAAU,MAAM,KAAK,EAAS,EAAQ,EAAU,EAAI,CACzE,EACA,EAAiB,KAAO,SAAU,EAAS,EAAQ,EAAU,CACzD,EAAiB,UAAU,MAAM,KAAK,EAAS,EAAQ,EAAU,EAAK,CAC1E,EACA,EAAQ,YAAc,EACtB,EAAQ,iBAAmB,CAE3B,CAAC,EAED,IAAI,OAAO,+BAA+B,CAAC,UAAU,UAAU,SAAS,cAAc,4BAA4B,uBAAuB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC/K,IAAI,EAAa,MAAQ,KAAK,YAAe,UAAY,CACrD,IAAI,EAAgB,SAAU,EAAG,EAAG,CAIhC,MAHA,GAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAU,EAAG,EAAG,CAAE,EAAE,UAAY,CAAG,GAC1E,SAAU,EAAG,EAAG,CAAE,IAAK,IAAI,KAAK,EAAO,OAAO,UAAU,eAAe,KAAK,EAAG,CAAC,IAAG,EAAE,GAAK,EAAE,GAAI,EAC7F,EAAc,EAAG,CAAC,CAC7B,EACA,OAAO,SAAU,EAAG,EAAG,CACnB,GAAI,OAAO,GAAM,YAAc,IAAM,KACjC,MAAU,UAAU,uBAAyB,OAAO,CAAC,EAAI,+BAA+B,EAC5F,EAAc,EAAG,CAAC,EAClB,SAAS,GAAK,CAAE,KAAK,YAAc,CAAG,CACtC,EAAE,UAAY,IAAM,KAAO,OAAO,OAAO,CAAC,GAAK,EAAG,UAAY,EAAE,UAAW,IAAI,EACnF,CACJ,EAAA,CAAG,EACC,EAAM,EAAQ,YAAY,EAC1B,EAAmB,EAAQ,0BAA0B,CAAC,CAAC,iBACvD,EAAe,EAAQ,sBAAsB,CAAC,CAAC,aAC/C,EAAgC,SAAU,EAAQ,CAClD,EAAU,EAAgB,CAAM,EAChC,SAAS,EAAe,EAAU,EAAU,CACxC,IAAI,EAAQ,EAAO,KAAK,KAAM,EAAU,CAAQ,GAAK,KAQrD,MAPA,GAAM,OAAS,EAAM,SACrB,EAAM,kBAAkB,OAAQ,SAAU,EAAG,CAIzC,OAHK,EAAE,KAGA,EAAE,QAAQ,KAAK,EAAE,OAAQ,EAAE,KAAM,EAAE,MAAO,EAAK,EAF3C,EAAE,QAAQ,KAAK,EAAE,OAAQ,CAAC,EAAG,EAAE,MAAO,EAAI,CAGzD,CAAC,EACM,CACX,CA+EA,MA9EA,GAAe,UAAU,KAAO,SAAU,EAAS,EAAQ,EAAM,CAC7D,GAAI,MAAM,QAAQ,CAAO,EAAG,CACxB,IAAK,IAAI,EAAI,EAAQ,OAAQ,KACzB,GAAI,KAAK,KAAK,EAAQ,GAAI,EAAQ,CAAI,EAClC,MAAO,GAEf,MAAO,EACX,CACI,OAAO,GAAY,WACnB,EAAU,KAAK,SAAS,IAC5B,IAAI,EAAI,CAAU,SAAiB,UAAe,MAAK,EAOvD,OANK,KAAK,WAAW,EAAS,CAAM,GAIpC,EAAE,YAAc,KAAK,MAAM,OAAQ,CAAC,EACpC,KAAK,QAAQ,YAAa,CAAC,EACpB,EAAE,cAAgB,KALrB,KAAK,QAAQ,qBAAsB,CAAC,EAC7B,GAKf,EACA,EAAe,UAAU,WAAa,SAAU,EAAS,EAAQ,CAS7D,OARI,OAAO,GAAY,WACnB,EAAU,KAAK,SAAS,IAK5B,EAJI,CAAC,GAED,GAAU,EAAO,WAAa,CAAC,EAAQ,UAEvC,KAAK,oBAAsB,GAAS,EAAQ,aAAe,CAAC,EAAQ,YAAY,CAAM,EAG9F,EACA,EAAe,UAAU,gBAAkB,SAAU,EAAQ,CACrD,SAAK,UAkBT,OAhBA,GAAU,EAAO,MAAM,cAAc,EACjC,KAAK,WACL,KAAK,MAAM,IAAI,EACf,KAAK,IAAI,OAAQ,KAAK,kBAAkB,EACnC,KAAK,MAAM,SACZ,KAAK,MAAQ,KAAK,UACf,KAAK,UAAY,KAE5B,AACI,KAAK,qBAAqB,SAAU,EAAG,CACnC,KAAK,MAAM,KAAK,CAAC,EAAE,QAAS,EAAE,IAAI,CAAC,CACvC,EAAE,KAAK,IAAI,EAEf,KAAK,SAAW,KAAK,MACrB,KAAK,MAAQ,CAAC,EACd,KAAK,GAAG,OAAQ,KAAK,kBAAkB,EAChC,KAAK,UAAY,GAC5B,EACA,EAAe,UAAU,OAAS,SAAU,EAAQ,CAC5C,UAAK,WAAa,CAAC,KAAK,OAE5B,IAAI,KAAK,UACL,OAAO,KAAK,gBAAgB,CAAM,EACtC,GAAI,CACA,KAAK,UAAY,GACjB,KAAK,MAAM,QAAQ,SAAU,EAAG,CACxB,OAAO,GAAK,SACZ,KAAK,KAAK,EAAG,CAAM,EAEnB,KAAK,KAAK,EAAE,GAAI,EAAQ,EAAE,EAAE,CACpC,EAAG,IAAI,CACX,QACQ,CACJ,KAAK,UAAY,EACrB,CAZsC,CAa1C,EACA,EAAe,UAAU,UAAY,SAAU,EAAG,CAC9C,OAAO,EAAE,IAAI,SAAU,EAAG,CAKtB,OAJI,OAAO,EAAE,IAAM,WACf,EAAE,GAAK,EAAE,EAAE,CAAC,MACX,EAAE,KACH,EAAI,EAAE,IACH,CACX,CAAC,CACL,EACO,CACX,EAAE,CAAgB,EAClB,EAAI,UAAU,EAAe,UAAW,CAAY,EACpD,EAAQ,eAAiB,CAEzB,CAAC,EAED,IAAI,OAAO,gCAAgC,CAAC,UAAU,UAAU,SAAS,eAAe,aAAa,WAAW,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACtJ,IAAI,EAAO,EAAQ,aAAa,EAC5B,EAAS,EAAQ,WAAW,EAC5B,EAAQ,EAAQ,UAAU,CAAC,CAAC,MAChC,SAAS,EAAQ,EAAK,EAAK,CACvB,MAAO,CAAO,MAAU,KAAI,CAChC,CACA,EAAQ,SAAW,CAAC,CACZ,KAAM,mBACN,YAAa,qBACb,QAAS,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAU,EAAQ,CACpB,EAAO,WAAW,wBAAyB,SAAU,EAAQ,CACzD,EAAO,KAAK,CAAM,EAClB,EAAO,iBAAiB,CAC5B,CAAC,CACL,EACA,SAAU,EACd,EAAG,CACC,KAAM,gBACN,YAAa,mBACb,QAAS,EAAQ,QAAS,IAAI,EAC9B,KAAM,SAAU,EAAQ,CACpB,EAAO,WAAW,uBAAwB,SAAU,EAAQ,CACxD,EAAO,gBAAgB,EAAQ,CAAC,CACpC,CAAC,CACL,EACA,eAAgB,UAChB,SAAU,EACd,EAAG,CACC,KAAM,oBACN,YAAa,uBACb,QAAS,EAAQ,cAAe,UAAU,EAC1C,KAAM,SAAU,EAAQ,CACpB,EAAO,WAAW,uBAAwB,SAAU,EAAQ,CACxD,EAAO,gBAAgB,EAAQ,EAAE,CACrC,CAAC,CACL,EACA,eAAgB,UAChB,SAAU,EACd,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAAS,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAU,EAAQ,CAAE,EAAO,UAAU,CAAG,EAC9C,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,mBACb,QAAS,EAAQ,KAAM,QAAQ,EAC/B,KAAM,SAAU,EAAQ,CAAE,EAAO,gBAAgB,CAAG,EACpD,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,gBACb,QAAS,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAU,EAAQ,EAAM,CACtB,OAAO,GAAS,UAAY,CAAC,MAAM,CAAI,GACvC,EAAO,SAAS,CAAI,EACxB,EAAO,OAAO,CAAE,MAAO,UAAW,CAAC,CACvC,EACA,SAAU,EACd,EAAG,CACC,KAAM,OACN,QAAS,EAAQ,gBAAiB,0BAA0B,EAC5D,KAAM,SAAU,EAAQ,CAAE,EAAO,QAAQ,WAAW,EAAK,CAAG,EAC5D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,SACN,QAAS,EAAQ,4BAA6B,sCAAsC,EACpF,KAAM,SAAU,EAAQ,CAAE,EAAO,QAAQ,WAAW,EAAI,CAAG,EAC3D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,mBACN,YAAa,qBACb,QAAS,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAU,EAAQ,CAAE,EAAO,QAAQ,iBAAiB,CAAG,EAC7D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,yBACN,YAAa,4BACb,QAAS,EAAQ,SAAU,QAAQ,EACnC,KAAM,SAAU,EAAQ,CAAE,EAAO,QAAQ,iBAAiB,EAAI,CAAG,EACjE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,UACN,YAAa,WACb,QAAS,EAAQ,KAAM,uBAAuB,EAC9C,KAAM,SAAU,EAAQ,CAAE,EAAO,QAAQ,QAAQ,CAAG,EACpD,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,oBACb,QAAS,EAAQ,KAAM,uBAAuB,EAC9C,KAAM,SAAU,EAAQ,CAAE,EAAO,QAAQ,gBAAgB,CAAG,EAC5D,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAAS,EAAQ,QAAS,kBAAkB,EAC5C,KAAM,SAAU,EAAQ,CACpB,EAAO,QAAQ,QAAQ,EACvB,EAAO,QAAQ,OAAO,EAAO,UAAU,aAAa,CAAC,CACzD,EACA,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAAS,EAAQ,cAAe,wBAAwB,EACxD,KAAM,SAAU,EAAQ,CAAE,EAAO,QAAQ,OAAO,CAAG,EACnD,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,YACb,QAAS,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAU,EAAQ,CAAE,EAAO,SAAS,CAAG,EAC7C,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,eACN,YAAa,gBACb,QAAS,EAAQ,eAAgB,iBAAiB,EAClD,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAG,EACjD,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,mBACN,YAAa,sBACb,QAAS,EAAQ,QAAS,QAAQ,EAClC,KAAM,SAAU,EAAQ,CAChB,EAAO,UAAU,QAAQ,EACzB,EAAO,UAAU,WAAW,EAE5B,EAAO,SAAS,CACxB,EACA,SAAU,EACd,EAAG,CACC,KAAM,uBACN,YAAa,0BACb,QAAS,EAAQ,cAAe,cAAc,EAC9C,KAAM,SAAU,EAAQ,CAChB,EAAO,UAAU,QAAQ,EACzB,EAAO,UAAU,WAAW,EAE5B,EAAO,aAAa,CAC5B,EACA,SAAU,EACd,EAAG,CACC,KAAM,OACN,YAAa,OACb,QAAS,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAU,EAAQ,CACpB,EAAO,WAAW,oBAAqB,SAAU,EAAG,CAAE,EAAE,OAAO,CAAM,CAAG,CAAC,CAC7E,EACA,SAAU,EACd,EAAG,CACC,KAAM,YACN,YAAa,YACb,QAAS,SACT,KAAM,SAAU,EAAQ,CAAE,EAAO,gBAAgB,CAAG,EACpD,SAAU,EACd,EAAG,CACC,KAAM,gBACN,YAAa,kBACb,QAAS,EAAQ,kBAAmB,qCAAqC,EACzE,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,gBAAgB,CAAG,EACnE,kBAAmB,UACnB,SAAU,GACV,eAAgB,UAChB,gBAAiB,UACrB,EAAG,CACC,KAAM,YACN,YAAa,cACb,QAAS,EAAQ,YAAa,yBAAyB,EACvD,KAAM,SAAU,EAAQ,CAAE,EAAO,kBAAkB,CAAG,EACtD,kBAAmB,UACnB,SAAU,GACV,eAAgB,UAChB,gBAAiB,UACrB,EAAG,CACC,KAAM,WACN,YAAa,YACb,QAAS,EAAQ,WAAY,uBAAuB,EACpD,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,SAAS,CAAG,EAC5D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,aACb,QAAS,EAAQ,KAAM,WAAW,EAClC,KAAM,SAAU,EAAQ,EAAM,CAAE,EAAO,WAAW,EAAK,KAAK,CAAG,EAC/D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,cACN,YAAa,gBACb,QAAS,EAAQ,iBAAkB,sCAAsC,EACzE,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,cAAc,CAAG,EACjE,kBAAmB,UACnB,SAAU,GACV,eAAgB,UAChB,gBAAiB,UACrB,EAAG,CACC,KAAM,UACN,YAAa,YACb,QAAS,EAAQ,WAAY,0BAA0B,EACvD,KAAM,SAAU,EAAQ,CAAE,EAAO,gBAAgB,CAAG,EACpD,kBAAmB,UACnB,SAAU,GACV,eAAgB,UAChB,gBAAiB,UACrB,EAAG,CACC,KAAM,aACN,YAAa,cACb,QAAS,EAAQ,aAAc,yBAAyB,EACxD,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,WAAW,CAAG,EAC9D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,aACN,YAAa,eACb,QAAS,EAAQ,OAAQ,aAAa,EACtC,KAAM,SAAU,EAAQ,EAAM,CAAE,EAAO,aAAa,EAAK,KAAK,CAAG,EACjE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,iBACN,YAAa,mBACb,QAAS,EAAQ,kBAAmB,mBAAmB,EACvD,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,eAAe,CAAG,EAClE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,eACN,YAAa,kBACb,QAAS,EAAQ,YAAa,aAAa,EAC3C,KAAM,SAAU,EAAQ,CAAE,EAAO,iBAAiB,CAAG,EACrD,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,oBACN,YAAa,uBACb,QAAS,EAAQ,iBAAkB,iCAAiC,EACpE,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,gBAAgB,CAAG,EACnE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,gBACN,YAAa,mBACb,QAAS,EAAQ,gBAAiB,0BAA0B,EAC5D,KAAM,SAAU,EAAQ,CAAE,EAAO,kBAAkB,CAAG,EACtD,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,aACN,YAAa,cACb,QAAS,EAAQ,aAAc,yBAAyB,EACxD,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,WAAW,CAAG,EAC9D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,aACb,QAAS,EAAQ,OAAQ,aAAa,EACtC,KAAM,SAAU,EAAQ,EAAM,CAAE,EAAO,aAAa,EAAK,KAAK,CAAG,EACjE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,oBACb,QAAS,EAAQ,mBAAoB,oBAAoB,EACzD,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,gBAAgB,CAAG,EACnE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,gBACN,YAAa,mBACb,QAAS,EAAQ,aAAc,cAAc,EAC7C,KAAM,SAAU,EAAQ,CAAE,EAAO,kBAAkB,CAAG,EACtD,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,qBACb,QAAS,EAAQ,kBAAmB,4CAA4C,EAChF,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,cAAc,CAAG,EACjE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,cACN,YAAa,iBACb,QAAS,EAAQ,gBAAiB,0BAA0B,EAC5D,KAAM,SAAU,EAAQ,CAAE,EAAO,gBAAgB,CAAG,EACpD,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,cACN,YAAa,eACb,QAAS,EAAQ,cAAe,aAAa,EAC7C,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,YAAY,CAAG,EAC/D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,YACN,YAAa,cACb,QAAS,EAAQ,QAAS,cAAc,EACxC,KAAM,SAAU,EAAQ,EAAM,CAAE,EAAO,cAAc,EAAK,KAAK,CAAG,EAClE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,iBACN,YAAa,mBACb,QAAS,iBACT,KAAM,SAAU,EAAQ,CAAE,EAAO,eAAe,CAAG,EACnD,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,YACb,QAAS,EAAQ,KAAM,iBAAiB,EACxC,KAAM,SAAU,EAAQ,CAAE,EAAO,eAAe,CAAG,EACnD,SAAU,EACd,EAAG,CACC,KAAM,eACN,YAAa,kBACb,QAAS,EAAQ,WAAY,iBAAiB,EAC9C,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAG,EACjD,SAAU,EACd,EAAG,CACC,KAAM,eACN,YAAa,iBACb,QAAS,eACT,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAG,EACjD,SAAU,EACd,EAAG,CACC,KAAM,SACN,YAAa,UACb,QAAS,EAAQ,KAAM,eAAe,EACtC,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAG,EACjD,SAAU,EACd,EAAG,CACC,KAAM,aACN,YAAa,gBACb,QAAS,SACT,KAAM,SAAU,EAAQ,CAAE,EAAO,WAAW,CAAG,EAC/C,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,YACb,QAAS,EAAQ,UAAW,IAAI,EAChC,KAAM,SAAU,EAAG,CAAE,EAAE,SAAS,SAAS,EAAG,GAAK,EAAE,SAAS,YAAY,UAAU,CAAG,EACrF,SAAU,EACd,EAAG,CACC,KAAM,aACN,YAAa,cACb,QAAS,EAAQ,YAAa,IAAI,EAClC,KAAM,SAAU,EAAG,CAAE,EAAE,SAAS,SAAS,EAAG,EAAI,EAAE,SAAS,YAAY,UAAU,CAAG,EACpF,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,oBACb,QAAS,aACT,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,gBAAgB,CAAG,EACnE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,gBACN,YAAa,kBACb,QAAS,YACT,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAC,cAAc,CAAG,EACjE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,mBACb,QAAS,EAAQ,aAAc,kBAAkB,EACjD,KAAM,SAAU,EAAQ,CAAE,EAAO,SAAS,gBAAgB,CAAM,CAAG,EACnE,SAAU,EACd,EAAG,CACC,KAAM,cACN,YAAa,eACb,QAAS,EAAQ,eAAgB,iBAAiB,EAClD,KAAM,SAAU,EAAQ,CAAE,EAAO,SAAS,OAAO,CAAM,CAAG,EAC1D,SAAU,EACd,EAAG,CACC,KAAM,iBACN,YAAa,mBACb,QAAS,EAAQ,iBAAkB,YAAY,EAC/C,KAAM,SAAU,EAAQ,CAAE,EAAO,eAAe,CAAG,EACnD,kBAAmB,UACnB,eAAgB,UAChB,SAAU,EACd,EAAG,CACC,KAAM,mBACN,YAAa,qBACb,QAAS,EAAQ,6BAA8B,kBAAkB,EACjE,KAAM,SAAU,EAAQ,CAAE,EAAO,eAAe,EAAI,CAAG,EACvD,kBAAmB,UACnB,eAAgB,UAChB,SAAU,EACd,EAAG,CACC,KAAM,mBACN,YAAa,qBACb,QAAS,EAAQ,eAAgB,cAAc,EAC/C,KAAM,SAAU,EAAQ,CAAE,EAAO,eAAe,GAAM,EAAI,CAAG,EAC7D,kBAAmB,UACnB,eAAgB,UAChB,SAAU,EACd,EAAG,CACC,KAAM,oBACN,YAAa,uBACb,QAAS,EAAQ,KAAM,IAAI,EAC3B,KAAM,UAAY,CAAE,EACpB,UAAW,GACX,SAAU,EACd,EAAG,CACC,KAAM,OACN,YAAa,OACb,KAAM,SAAU,EAAQ,CACxB,EACA,SAAU,EACd,EACA,CACI,KAAM,MACN,YAAa,MACb,KAAM,SAAU,EAAQ,CAEpB,IAAI,EADU,EAAO,yBAA2B,EAAO,UAAU,QAAQ,EACnD,EAAO,UAAU,aAAa,EAAI,EAAO,UAAU,SAAS,EAClF,EAAO,MAAM,MAAO,CAAK,EACpB,EAAM,QAAQ,GACf,EAAO,QAAQ,OAAO,CAAK,EAC/B,EAAO,eAAe,CAC1B,EACA,eAAgB,SAChB,kBAAmB,SACvB,EAAG,CACC,KAAM,QACN,YAAa,QACb,KAAM,SAAU,EAAQ,EAAM,CAC1B,EAAO,aAAa,CAAI,CAC5B,EACA,eAAgB,QACpB,EAAG,CACC,KAAM,aACN,YAAa,cACb,QAAS,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAU,EAAQ,CAAE,EAAO,YAAY,CAAG,EAChD,eAAgB,SAChB,kBAAmB,aACvB,EAAG,CACC,KAAM,qBACN,YAAa,sBACb,QAAS,EAAQ,eAAgB,iBAAiB,EAClD,KAAM,SAAU,EAAQ,CAAE,EAAO,mBAAmB,CAAG,EACvD,eAAgB,SAChB,kBAAmB,SACvB,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAAS,EAAQ,aAAc,eAAe,EAC9C,KAAM,SAAU,EAAQ,CAAE,EAAO,UAAU,CAAG,EAC9C,eAAgB,YAChB,kBAAmB,aACvB,EAAG,CACC,KAAM,gBACN,YAAa,iBACb,QAAS,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAU,EAAQ,CAAE,EAAO,mBAAmB,CAAG,EACvD,kBAAmB,cACnB,eAAgB,eACpB,EAAG,CACC,KAAM,qBACN,YAAa,uBACb,QAAS,EAAQ,eAAgB,iBAAiB,EAClD,KAAM,SAAU,EAAQ,CAAE,EAAO,mBAAmB,CAAG,EACvD,kBAAmB,UACnB,eAAgB,eACpB,EAAG,CACC,KAAM,iBACN,YAAa,mBACb,QAAS,EAAQ,gBAAiB,cAAc,EAChD,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAC,CAAG,EAClD,eAAgB,SAChB,kBAAmB,SACvB,EAAG,CACC,KAAM,mBACN,YAAa,qBACb,QAAS,EAAQ,kBAAmB,gBAAgB,EACpD,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,EAAE,CAAG,EACnD,eAAgB,SAChB,kBAAmB,SACvB,EAAG,CACC,KAAM,UACN,YAAa,UACb,QAAS,EAAQ,SAAU,kBAAkB,EAC7C,KAAM,SAAU,EAAQ,CACpB,EAAO,WAAW,oBAAqB,SAAU,EAAG,CAAE,EAAE,OAAO,EAAQ,EAAI,CAAG,CAAC,CACnF,CACJ,EAAG,CACC,KAAM,OACN,YAAa,OACb,QAAS,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAU,EAAQ,CAAE,EAAO,KAAK,CAAG,CAC7C,EAAG,CACC,KAAM,OACN,YAAa,OACb,QAAS,EAAQ,sBAAuB,2BAA2B,EACnE,KAAM,SAAU,EAAQ,CAAE,EAAO,KAAK,CAAG,CAC7C,EAAG,CACC,KAAM,cACN,YAAa,gBACb,QAAS,EAAQ,eAAgB,mBAAmB,EACpD,KAAM,SAAU,EAAQ,CAAE,EAAO,YAAY,CAAG,EAChD,eAAgB,QACpB,EAAG,CACC,KAAM,cACN,YAAa,gBACb,QAAS,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAU,EAAQ,CAAE,EAAO,YAAY,CAAG,EAChD,eAAgB,QACpB,EAAG,CACC,KAAM,gBACN,YAAa,kBACb,QAAS,EAAQ,iBAAkB,qBAAqB,EACxD,KAAM,SAAU,EAAQ,CAAE,EAAO,cAAc,CAAG,EAClD,eAAgB,QACpB,EAAG,CACC,KAAM,gBACN,YAAa,kBACb,QAAS,EAAQ,WAAY,aAAa,EAC1C,KAAM,SAAU,EAAQ,CAAE,EAAO,cAAc,CAAG,EAClD,eAAgB,QACpB,EAAG,CACC,KAAM,MACN,YAAa,SACb,QAAS,EAAQ,SAAU,4BAA4B,EACvD,KAAM,SAAU,EAAQ,CAAE,EAAO,OAAO,OAAO,CAAG,EAClD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,YACN,YAAa,YACb,QAAS,EAAQ,4BAA6B,iDAAiD,EAC/F,KAAM,SAAU,EAAQ,CAAE,EAAO,OAAO,MAAM,CAAG,EACjD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,gBACN,YAAa,gBACb,QAAS,EAAQ,eAAgB,IAAI,EACrC,KAAM,SAAU,EAAQ,CACpB,GAAI,EAAO,UAAU,QAAQ,EACzB,EAAO,OAAO,MAAM,OAGpB,MAAO,EAEf,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,oBACN,YAAa,uBACb,QAAS,EAAQ,gBAAiB,mBAAmB,EACrD,KAAM,SAAU,EAAQ,CAAE,EAAO,kBAAkB,CAAG,EACtD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,kBACN,YAAa,qBACb,QAAS,EAAQ,aAAc,uBAAuB,EACtD,KAAM,SAAU,EAAQ,CAAE,EAAO,gBAAgB,CAAG,EACpD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,wBACN,YAAa,4BACb,QAAS,EAAQ,uBAAwB,IAAI,EAC7C,KAAM,SAAU,EAAQ,CACpB,IAAI,EAAQ,EAAO,UAAU,SAAS,EACtC,EAAM,MAAM,OAAS,EACrB,EAAO,QAAQ,OAAO,CAAK,CAC/B,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,sBACN,YAAa,0BACb,QAAS,EAAQ,oBAAqB,IAAI,EAC1C,KAAM,SAAU,EAAQ,CACpB,IAAI,EAAQ,EAAO,UAAU,SAAS,EACtC,EAAM,IAAI,OAAS,OAAO,UAC1B,EAAO,QAAQ,OAAO,CAAK,CAC/B,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,iBACN,YAAa,mBACb,QAAS,EAAQ,iBAAkB,kCAAkC,EACrE,KAAM,SAAU,EAAQ,CAAE,EAAO,eAAe,CAAG,EACnD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,kBACN,YAAa,oBACb,QAAS,EAAQ,cAAe,YAAY,EAC5C,KAAM,SAAU,EAAQ,CAAE,EAAO,gBAAgB,CAAG,EACpD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,UACN,YAAa,UACb,QAAS,EAAQ,YAAa,WAAW,EACzC,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAG,EACjD,kBAAmB,UACnB,eAAgB,eACpB,EAAG,CACC,KAAM,SACN,YAAa,SACb,QAAS,EAAQ,MAAO,KAAK,EAC7B,KAAM,SAAU,EAAQ,CAAE,EAAO,OAAO,CAAG,EAC3C,kBAAmB,UACnB,eAAgB,eACpB,EAAG,CACC,KAAM,eACN,YAAa,gBACb,QAAS,EAAQ,SAAU,QAAQ,EACnC,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAG,EACjD,kBAAmB,cACnB,eAAgB,eACpB,EAAG,CACC,KAAM,cACN,YAAa,eACb,QAAS,EAAQ,SAAU,QAAQ,EACnC,KAAM,SAAU,EAAQ,CAAE,EAAO,YAAY,CAAG,EAChD,kBAAmB,cACnB,eAAgB,eACpB,EAAG,CACC,KAAM,eACN,YAAa,gBACb,KAAM,SAAU,EAAQ,EAAK,CAAE,EAAO,OAAO,CAAG,CAAG,EACnD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,aACN,YAAa,cACb,KAAM,SAAU,EAAQ,EAAM,CAC1B,EAAO,OAAO,EAAK,aAAa,EAAK,MAAQ,GAAI,EAAK,OAAS,CAAC,CAAC,CACrE,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAAS,EAAQ,KAAM,QAAQ,EAC/B,KAAM,SAAU,EAAQ,CAAE,EAAO,UAAU,CAAG,EAC9C,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,mBACN,YAAa,oBACb,QAAS,EAAQ,cAAe,QAAQ,EACxC,KAAM,SAAU,EAAQ,CAAE,EAAO,iBAAiB,CAAG,EACrD,kBAAmB,SAAU,EAAQ,CAAE,EAAO,oBAAoB,CAAC,CAAG,EACtE,eAAgB,QACpB,EAAG,CACC,KAAM,cACN,YAAa,eACb,QAAS,EAAQ,SAAU,QAAQ,EACnC,KAAM,SAAU,EAAQ,CAAE,EAAO,YAAY,CAAG,EAChD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,cACN,YAAa,eACb,QAAS,EAAQ,eAAgB,cAAc,EAC/C,KAAM,SAAU,EAAQ,CAAE,EAAO,YAAY,CAAG,EAChD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,aACN,YAAa,cACb,QAAS,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAU,EAAQ,CAAE,EAAO,WAAW,CAAG,EAC/C,eAAgB,SACpB,EAAG,CACC,KAAM,eACN,YAAa,iBACb,QAAS,EAAQ,eAAgB,iBAAiB,EAClD,KAAM,SAAU,EAAQ,CACpB,IAAI,EAAQ,EAAO,UAAU,SAAS,EACtC,EAAM,MAAM,OAAS,EAAM,IAAI,OAAS,EACxC,EAAM,IAAI,MACV,EAAO,UAAU,SAAS,EAAO,EAAK,CAC1C,EACA,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,WACN,QAAS,EAAQ,UAAW,IAAI,EAChC,KAAM,SAAU,EAAQ,CAAE,EAAO,SAAS,CAAG,CACjD,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAAS,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAU,EAAQ,CAQpB,IAAK,IAPD,EAAc,EAAO,UAAU,YAAY,EAC3C,EAAiB,EAAc,EAAO,UAAU,iBAAiB,EAAI,EAAO,UAAU,mBAAmB,EACzG,EAAe,EAAc,EAAO,UAAU,mBAAmB,EAAI,EAAO,UAAU,iBAAiB,EACvG,EAAkB,EAAO,QAAQ,IAAI,QAAQ,EAAe,GAAG,CAAC,CAAC,OAEjE,EADe,EAAO,QAAQ,IAAI,aAAa,EAAO,UAAU,SAAS,CAC9C,CAAC,CAAC,QAAQ,QAAS,GAAG,CAAC,CAAC,OACnD,EAAa,EAAO,QAAQ,IAAI,QAAQ,EAAe,GAAG,EACrD,EAAI,EAAe,IAAM,EAAG,GAAK,EAAa,IAAM,EAAG,IAAK,CACjE,IAAI,EAAU,EAAK,eAAe,EAAK,gBAAgB,EAAO,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EACjF,EAAQ,SAAW,IACnB,EAAU,IAAM,GAEpB,GAAc,CAClB,CACI,EAAa,IAAM,EAAK,EAAO,QAAQ,IAAI,UAAU,EAAI,IACzD,GAAc,EAAO,QAAQ,IAAI,oBAAoB,GAEzD,EAAO,eAAe,EACtB,EAAO,QAAQ,IAAI,QAAQ,IAAI,EAAM,EAAe,IAAK,EAAG,EAAa,IAAM,EAAG,CAAC,EAAG,CAAU,EAC5F,EAAgB,GAChB,EAAO,UAAU,aAAa,EAAe,IAAK,EAAe,MAAM,EACvE,EAAO,UAAU,SAAS,EAAe,IAAK,EAAe,OAAS,CAAa,IAGnF,EAAkB,EAAO,QAAQ,IAAI,QAAQ,EAAe,GAAG,CAAC,CAAC,OAAS,EAAmB,EAAkB,EAAK,EACpH,EAAO,UAAU,aAAa,EAAe,IAAK,CAAe,EAEzE,EACA,kBAAmB,UACnB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,mBACb,QAAS,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAU,EAAQ,CACpB,IAAI,EAAS,EAAO,QAAQ,IAAI,UAAU,EAAI,EAC1C,EAAS,EAAO,QAAQ,IAAI,QAAQ,CAAM,CAAC,CAAC,OAC5C,EAAS,EAAO,UAAU,UAAU,OACpC,EAAY,CAAC,EACb,EAAO,OAAS,IAChB,EAAS,CAAC,EAAO,UAAU,SAAS,CAAC,GAEzC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAC3B,GAAM,EAAO,OAAS,IAChB,EAAO,EAAE,CAAC,IAAI,MAAQ,GAAU,EAAO,EAAE,CAAC,IAAI,SAAW,GAC3D,EAAU,KAAK,IAAI,EAAM,EAAO,EAAE,CAAC,IAAI,IAAK,EAAO,EAAE,CAAC,IAAI,OAAQ,EAAQ,CAAM,CAAC,GAGrF,IAAM,EACA,EAAO,EAAE,CAAC,MAAM,MAAQ,GAAK,EAAO,EAAE,CAAC,MAAM,SAAW,GAC1D,EAAU,KAAK,IAAI,EAAM,EAAG,EAAG,EAAO,EAAE,CAAC,MAAM,IAAK,EAAO,EAAE,CAAC,MAAM,MAAM,CAAC,EAI/E,EAAU,KAAK,IAAI,EAAM,EAAO,EAAI,EAAE,CAAC,IAAI,IAAK,EAAO,EAAI,EAAE,CAAC,IAAI,OAAQ,EAAO,EAAE,CAAC,MAAM,IAAK,EAAO,EAAE,CAAC,MAAM,MAAM,CAAC,EAG9H,EAAO,oBAAoB,EAC3B,EAAO,eAAe,EACtB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,OAAQ,IAClC,EAAO,UAAU,SAAS,EAAU,GAAI,EAAK,CAErD,EACA,SAAU,GACV,eAAgB,MACpB,EAAG,CACC,KAAM,eACN,YAAa,sCACb,KAAM,SAAU,EAAQ,CACpB,EAAO,UAAU,eAAe,EAChC,EAAO,gBAAgB,EACvB,EAAO,OAAO;CAAI,CACtB,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,gBACN,YAAa,uCACb,KAAM,SAAU,EAAQ,CACpB,EAAO,UAAU,eAAe,EAChC,IAAI,EAAS,EAAO,kBAAkB,EACtC,EAAO,UAAU,OAAO,EAAO,IAAM,EAAG,OAAO,SAAS,EACxD,EAAO,OAAO;CAAI,EACd,EAAO,MAAQ,GACf,EAAO,WAAW,CAC1B,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,qBACN,KAAM,SAAU,EAAQ,CACpB,QAAQ,KAAK,uEAAuE,EACpF,EAAO,OAAO,CAAE,MAAO,UAAW,CAAC,CACvC,EACA,SAAU,EACd,EAAG,CACC,KAAM,qBACN,YAAa,uBACb,QAAS,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAU,EAAQ,CACpB,EAAO,OAAO,CAAE,MAAO,UAAW,CAAC,CACvC,EACA,SAAU,EACd,EAAG,CACC,KAAM,aACN,YAAa,0BACb,QAAS,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAU,EAAQ,CACpB,EAAO,OAAO,CAAE,MAAO,OAAQ,CAAC,CACpC,EACA,SAAU,EACd,CAAC,EACL,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IACnB,EAAQ,SAAS,KAAK,CAClB,KAAM,cAAgB,EACtB,YAAa,iBAAmB,EAChC,MAAO,EACP,KAAM,SAAU,EAAQ,CAAE,EAAO,QAAQ,YAAY,KAAK,KAAK,CAAG,EAClE,eAAgB,SAChB,SAAU,EACd,CAAC,CAGL,CAAC,EAED,IAAI,OAAO,8BAA8B,CAAC,UAAU,UAAU,SAAS,cAAc,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC3H,IAAI,EAAO,EAAQ,aAAa,EAyYhC,EAAQ,sBAxYmC,UAAY,CACnD,SAAS,EAAsB,EAAQ,CACnC,KAAK,OAAS,EACd,KAAK,YAAc,EAAO,SAAS,aACnC,KAAK,QAAU,EAAO,SAAS,QAC/B,KAAK,MAAQ,EAAO,SAAS,aAAa,OAC1C,KAAK,eAAiB,KACtB,KAAK,WAAa,KAClB,KAAK,kBAAoB,KAAK,OAAO,cAAc,QACvD,CA6XA,MA5XA,GAAsB,UAAU,YAAc,UAAY,CACtD,KAAK,QAAQ,iBAAiB,UAAW,KAAK,iBAAiB,KAAK,IAAI,CAAC,EACzE,KAAK,QAAQ,iBAAiB,WAAY,KAAK,YAAY,KAAK,IAAI,CAAC,EACrE,KAAK,OAAO,GAAG,aAAc,KAAK,YAAY,KAAK,IAAI,CAAC,CAC5D,EACA,EAAsB,UAAU,eAAiB,UAAY,CACzD,KAAK,QAAQ,oBAAoB,UAAW,KAAK,iBAAiB,KAAK,IAAI,CAAC,EAC5E,KAAK,QAAQ,oBAAoB,WAAY,KAAK,YAAY,KAAK,IAAI,CAAC,EACxE,KAAK,OAAO,IAAI,aAAc,KAAK,YAAY,KAAK,IAAI,CAAC,CAC7D,EACA,EAAsB,UAAU,iBAAmB,SAAU,EAAG,CAC5D,GAAI,KAAK,kBAAkB,OAAQ,CAC/B,EAAE,eAAe,EACb,EAAE,UAAY,EAAK,QACnB,KAAK,kBAAkB,KAAK,EAChC,MACJ,CACA,GAAI,EAAE,SAAW,KAAK,QAAS,CAC3B,GAAI,EAAE,SAAW,EAAK,MAClB,OAEJ,EAAE,eAAe,EACjB,IAAI,EAAM,KAAK,OAAO,kBAAkB,CAAC,CAAC,IACrC,KAAK,OAAO,aAAa,CAAG,GAC7B,KAAK,OAAO,aAAa,EAAK,GAAM,EAAI,EAC5C,WACA,UAAY,CACR,IAAI,EAAQ,KAAK,eAAe,KAAK,YAAY,YAAY,GAAG,EAC5D,EAA6B,KAAK,2BAA2B,CAAK,EAClE,EAAyB,KAAK,uBAAuB,CAAK,EAC1D,SAA+B,MAAQ,IAA2B,MAGtE,GAD2B,KAAK,mBAAmB,EAA4B,EAAwB,CAChF,IAAM,EAGzB,GAFA,KAAK,WAAa,OAClB,KAAK,eAAiB,EAClB,KAAK,uBAAuB,CAA0B,EAAG,CACzD,KAAK,mBAAmB,KAAK,cAAc,EAC3C,MACJ,KACK,CACD,KAAK,iBAAiB,KAAK,cAAc,EACzC,MACJ,KAEC,CACD,KAAK,eAAiB,EACtB,KAAK,WAAa,aAClB,KAAK,iBAAiB,KAAK,cAAc,EACzC,MACJ,CACJ,EAAE,KAAK,IAAI,EAAG,EAAE,EAChB,MACJ,CACA,KAAK,iCAAiC,CAAC,EACvC,WAAW,UAAY,CACnB,KAAK,OAAO,QAAQ,gBAAiB,IAAI,EAAoB,EAAG,IAAI,CAAC,CACzE,EAAE,KAAK,IAAI,EAAG,EAAE,CACpB,EACA,EAAsB,UAAU,iCAAmC,SAAU,EAAG,CAC5E,GAAI,EAAE,UAAY,EAAK,IAAQ,CAC3B,EAAE,eAAe,EACjB,MACJ,CACA,GAAI,EAAE,UAAY,EAAK,OAAW,CAC9B,EAAE,eAAe,EACjB,KAAK,YAAY,EACjB,KAAK,QAAQ,MAAM,EACnB,KAAK,KAAO,KACZ,MACJ,CACA,GAAI,EAAE,UAAY,EAAK,GAAO,CAE1B,OADA,EAAE,eAAe,EACT,KAAK,WAAb,CACI,IAAK,OACD,KAAK,kBAAkB,EACvB,MACJ,IAAK,aACD,KAAK,kBAAkB,EACvB,KACR,CACA,MACJ,CACA,GAAI,EAAE,UAAY,EAAK,KAAS,CAE5B,OADA,EAAE,eAAe,EACT,KAAK,WAAb,CACI,IAAK,OACD,KAAK,oBAAoB,EACzB,MACJ,IAAK,aACD,KAAK,oBAAoB,EACzB,KACR,CACA,MACJ,CACA,GAAI,EAAE,UAAY,EAAK,KAAS,CAC5B,EAAE,eAAe,EACjB,KAAK,YAAY,YAAY,EAC7B,MACJ,CACA,GAAI,EAAE,UAAY,EAAK,MAAU,CAC7B,EAAE,eAAe,EACjB,KAAK,YAAY,MAAM,EACvB,MACJ,CACA,GAAI,EAAE,UAAY,EAAK,OAAY,EAAE,UAAY,EAAK,MAAU,CAE5D,OADA,EAAE,eAAe,EACT,KAAK,WAAb,CACI,IAAK,OACD,IAAI,EAAM,KAAK,eAAe,KAAK,cAAc,EAC7C,EAAe,KAAK,OAAO,QAAQ,qBAAqB,GAC5D,GAAI,EACI,EAAa,WAAa,EAAa,UAAU,SACjD,EAAa,UAAU,QAAQ,EAAG,CAAG,OAGxC,GAAI,KAAK,YAAY,QAAQ,YAAY,KAAS,QAAS,CAC5D,KAAK,OAAO,QAAQ,kBAAkB,KAAK,eAAe,KAAK,cAAc,EAAG,CAAC,EACjF,WACA,UAAY,CACJ,KAAK,eAAe,KAAK,cAAc,IAAM,IAC7C,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,eAAiB,KAAK,eAAe,CAAG,EAC7C,KAAK,iBAAiB,KAAK,cAAc,EAEjD,EAAE,KAAK,IAAI,EAAG,EAAE,EAChB,KACJ,MACK,GAAI,KAAK,YAAY,QAAQ,YAAY,KAAK,eAAe,KAAK,cAAc,KAAO,MACxF,MAEJ,OACJ,IAAK,aACD,KAAK,kBAAkB,YAAY,KAAK,eAAe,KAAK,cAAc,CAAC,EAC3E,KAAK,kBAAkB,cAAgB,GACvC,KACR,CACA,MACJ,CACJ,EACA,EAAsB,UAAU,YAAc,UAAY,CACtD,GAAI,KAAK,iBAAmB,KACxB,OAAQ,KAAK,WAAb,CACI,IAAK,OACD,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,kBAAkB,KAAK,cAAc,EAC1C,MACJ,IAAK,aACD,KAAK,gBAAgB,KAAK,cAAc,EACxC,KACR,CAEA,KAAK,kBAAkB,QACvB,KAAK,kBAAkB,KAAK,CAEpC,EACA,EAAsB,UAAU,qBAAuB,SAAU,EAAO,CACpE,IAAI,EAAoB,KAAK,OAAO,kBAAkB,KAAK,eAAe,CAAK,CAAC,EAC5E,EAAgB,KAAK,eAAe,CAAK,CAAC,CAAC,MAAM,UAAY,OACjE,OAAO,GAAqB,CAChC,EACA,EAAsB,UAAU,uBAAyB,SAAU,EAAO,CACtE,IAAI,EAAoB,KAAK,OAAO,kBAAkB,KAAK,eAAe,CAAK,CAAC,EAC5E,EAAgB,CAAC,CAAC,KAAK,iBAAiB,CAAK,EACjD,OAAO,GAAqB,CAChC,EACA,EAAsB,UAAU,qBAAuB,SAAU,EAAO,CACpE,IAAI,EAAoB,KAAK,OAAO,kBAAkB,KAAK,eAAe,CAAK,CAAC,EAC5E,EAAgB,KAAK,eAAe,CAAK,CAAC,CAAC,MAAM,UAAY,OACjE,OAAO,GAAqB,CAChC,EACA,EAAsB,UAAU,eAAiB,SAAU,EAAO,CAG9D,OAFW,KAAK,MAAM,IAAI,CACT,CAAC,CAAC,QACJ,WAAW,EAC9B,EACA,EAAsB,UAAU,iBAAmB,SAAU,EAAO,CAGhE,OAFW,KAAK,MAAM,IAAI,CACT,CAAC,CAAC,QACJ,WAAW,EAC9B,EACA,EAAsB,UAAU,eAAiB,SAAU,EAAO,CAG9D,OAFW,KAAK,MAAM,IAAI,CACT,CAAC,CAAC,QACJ,WAAW,EAC9B,EACA,EAAsB,UAAU,2BAA6B,SAAU,EAAO,CAG1E,GAFI,KAAK,uBAAuB,CAAK,GAEjC,KAAK,qBAAqB,CAAK,EAC/B,OAAO,EAEX,IADA,IAAI,EAAI,EACD,EAAQ,EAAI,GAAK,EAAQ,EAAI,KAAK,MAAM,UAAU,EAAI,GAAG,CAE5D,GADA,IACI,EAAQ,GAAK,GAAK,KAAK,uBAAuB,EAAQ,CAAC,EACvD,OAAO,EAAQ,EACnB,GAAI,EAAQ,GAAK,KAAK,MAAM,UAAU,EAAI,GAAK,KAAK,uBAAuB,EAAQ,CAAC,EAChF,OAAO,EAAQ,EACnB,GAAI,EAAQ,GAAK,GAAK,KAAK,qBAAqB,EAAQ,CAAC,EACrD,OAAO,EAAQ,EACnB,GAAI,EAAQ,GAAK,KAAK,MAAM,UAAU,EAAI,GAAK,KAAK,qBAAqB,EAAQ,CAAC,EAC9E,OAAO,EAAQ,CACvB,CACA,OAAO,IACX,EACA,EAAsB,UAAU,uBAAyB,SAAU,EAAO,CACtE,GAAI,KAAK,qBAAqB,CAAK,EAC/B,OAAO,EAEX,IADA,IAAI,EAAI,EACD,EAAQ,EAAI,GAAK,EAAQ,EAAI,KAAK,MAAM,UAAU,EAAI,GAAG,CAE5D,GADA,IACI,EAAQ,GAAK,GAAK,KAAK,qBAAqB,EAAQ,CAAC,EACrD,OAAO,EAAQ,EACnB,GAAI,EAAQ,GAAK,KAAK,MAAM,UAAU,EAAI,GAAK,KAAK,qBAAqB,EAAQ,CAAC,EAC9E,OAAO,EAAQ,CACvB,CACA,OAAO,IACX,EACA,EAAsB,UAAU,iBAAmB,SAAU,EAAO,CAC5D,MAAS,KAEb,KAAI,EAAa,KAAK,eAAe,CAAK,EAC1C,EAAW,UAAU,IAAI,KAAK,OAAO,SAAS,sBAAsB,EACpE,EAAW,MAAM,CAFyB,CAG9C,EACA,EAAsB,UAAU,mBAAqB,SAAU,EAAO,CAC9D,MAAS,KAEb,KAAI,EAAe,KAAK,iBAAiB,CAAK,EAC1C,IACA,EAAa,UAAU,IAAI,KAAK,OAAO,SAAS,sBAAsB,EACtE,EAAa,MAAM,EAHuB,CAKlD,EACA,EAAsB,UAAU,iBAAmB,SAAU,EAAO,CAC5D,MAAS,KAEb,KAAI,EAAa,KAAK,eAAe,CAAK,EAC1C,EAAW,UAAU,IAAI,KAAK,OAAO,SAAS,sBAAsB,EACpE,EAAW,MAAM,CAFyB,CAG9C,EACA,EAAsB,UAAU,gBAAkB,SAAU,EAAO,CAC/D,IAAI,EAAa,KAAK,eAAe,CAAK,EAC1C,EAAW,UAAU,OAAO,KAAK,OAAO,SAAS,sBAAsB,EACvE,EAAW,KAAK,CACpB,EACA,EAAsB,UAAU,kBAAoB,SAAU,EAAO,CACjE,IAAI,EAAe,KAAK,iBAAiB,CAAK,EAC1C,IACA,EAAa,UAAU,OAAO,KAAK,OAAO,SAAS,sBAAsB,EACzE,EAAa,KAAK,EAE1B,EACA,EAAsB,UAAU,gBAAkB,SAAU,EAAO,CAC/D,IAAI,EAAa,KAAK,eAAe,CAAK,EAC1C,EAAW,UAAU,OAAO,KAAK,OAAO,SAAS,sBAAsB,EACvE,EAAW,KAAK,CACpB,EACA,EAAsB,UAAU,kBAAoB,UAAY,CAE5D,IADA,IAAI,EAAQ,KAAK,eACV,EAAQ,GAEX,GADA,IACI,KAAK,qBAAqB,CAAK,GAAK,KAAK,uBAAuB,CAAK,EAAG,CACxE,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,kBAAkB,KAAK,cAAc,EAC1C,KAAK,eAAiB,EAClB,KAAK,qBAAqB,CAAK,EAC/B,KAAK,iBAAiB,KAAK,cAAc,EAGzC,KAAK,mBAAmB,KAAK,cAAc,EAE/C,MACJ,CAGR,EACA,EAAsB,UAAU,oBAAsB,UAAY,CAE9D,IADA,IAAI,EAAQ,KAAK,eACV,EAAQ,KAAK,MAAM,UAAU,EAAI,GAEpC,GADA,IACI,KAAK,qBAAqB,CAAK,GAAK,KAAK,uBAAuB,CAAK,EAAG,CACxE,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,kBAAkB,KAAK,cAAc,EAC1C,KAAK,eAAiB,EAClB,KAAK,qBAAqB,CAAK,EAC/B,KAAK,iBAAiB,KAAK,cAAc,EAGzC,KAAK,mBAAmB,KAAK,cAAc,EAE/C,MACJ,CAGR,EACA,EAAsB,UAAU,kBAAoB,UAAY,CAE5D,IADA,IAAI,EAAQ,KAAK,eACV,EAAQ,GAEX,GADA,IACI,KAAK,qBAAqB,CAAK,EAAG,CAClC,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,eAAiB,EACtB,KAAK,iBAAiB,KAAK,cAAc,EACzC,MACJ,CAGR,EACA,EAAsB,UAAU,oBAAsB,UAAY,CAE9D,IADA,IAAI,EAAQ,KAAK,eACV,EAAQ,KAAK,MAAM,UAAU,EAAI,GAEpC,GADA,IACI,KAAK,qBAAqB,CAAK,EAAG,CAClC,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,eAAiB,EACtB,KAAK,iBAAiB,KAAK,cAAc,EACzC,MACJ,CAGR,EACA,EAAsB,UAAU,mBAAqB,SAAU,EAAM,EAAM,EAAQ,CAK/E,OAJI,IAAS,KACF,EACP,IAAS,MAEL,KAAK,IAAI,EAAS,CAAI,GAAK,KAAK,IAAI,EAAS,CAAI,EAD9C,EAC0D,CACzE,EACA,EAAsB,UAAU,YAAc,SAAU,EAAgB,CACpE,OAAQ,EAAR,CACI,IAAK,aACD,GAAI,KAAK,aAAe,aACpB,MAEJ,IAAI,EAAkB,KAAK,uBAAuB,KAAK,cAAc,EACrE,GAAI,GAAmB,KACnB,MAEJ,KAAK,WAAa,aAClB,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,kBAAkB,KAAK,cAAc,EAC1C,KAAK,eAAiB,EACtB,KAAK,iBAAiB,KAAK,cAAc,EACzC,MACJ,IAAK,OACD,GAAI,KAAK,aAAe,OACpB,MAEJ,IAAI,EAAsB,KAAK,2BAA2B,KAAK,cAAc,EAC7E,GAAI,IAAwB,KACxB,MAEJ,KAAK,WAAa,OAClB,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,eAAiB,EAClB,KAAK,uBAAuB,CAAmB,EAC/C,KAAK,mBAAmB,KAAK,cAAc,EAG3C,KAAK,iBAAiB,KAAK,cAAc,EAE7C,KACR,CAEJ,EACA,EAAsB,UAAU,eAAiB,SAAU,EAAO,CAC9D,IAAI,EAAO,KAAK,MAAM,IAAI,CAAK,EAG/B,OAFI,EACO,EAAK,IACT,IACX,EACA,EAAsB,UAAU,eAAiB,SAAU,EAAK,CAC5D,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,MAAM,UAAU,EAAG,IAExC,GADW,KAAK,MAAM,IAAI,CACnB,CAAC,CAAC,KAAO,EACZ,OAAO,EAEf,OAAO,IACX,EACO,CACX,EACoD,EACpD,IAAI,EAAqC,UAAY,CACjD,SAAS,EAAoB,EAAU,EAAuB,CAC1D,KAAK,sBAAwB,EAC7B,KAAK,SAAW,CACpB,CAaA,MAZA,GAAoB,UAAU,OAAS,UAAY,CAC/C,OAAO,EAAK,gBAAgB,KAAK,SAAS,OAAO,CACrD,EACA,EAAoB,UAAU,OAAS,UAAY,CAC/C,OAAO,KAAK,sBAAsB,eAAe,KAAK,sBAAsB,cAAc,CAC9F,EACA,EAAoB,UAAU,mBAAqB,UAAY,CAC3D,OAAO,KAAK,sBAAsB,aAAe,YACrD,EACA,EAAoB,UAAU,aAAe,UAAY,CACrD,OAAO,KAAK,sBAAsB,aAAe,MACrD,EACO,CACX,EAAE,EACF,EAAQ,oBAAsB,CAE9B,CAAC,EAED,IAAI,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,oBAAoB,yBAAyB,0BAA0B,yBAAyB,0BAA0B,mBAAmB,aAAa,YAAY,wBAAwB,+BAA+B,gCAAgC,aAAa,qBAAqB,8BAA8B,aAAa,gBAAgB,eAAe,gBAAgB,aAAa,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC7gB,IAAI,EAAY,MAAQ,KAAK,UAAa,SAAS,EAAG,CAClD,IAAI,EAAI,OAAO,QAAW,YAAc,OAAO,SAAU,EAAI,GAAK,EAAE,GAAI,EAAI,EAC5E,GAAI,EAAG,OAAO,EAAE,KAAK,CAAC,EACtB,GAAI,GAAK,OAAO,EAAE,QAAW,SAAU,MAAO,CAC1C,KAAM,UAAY,CAEd,OADI,GAAK,GAAK,EAAE,SAAQ,EAAI,IAAK,IAC1B,CAAE,MAAO,GAAK,EAAE,KAAM,KAAM,CAAC,CAAE,CAC1C,CACJ,EACA,MAAU,UAAU,EAAI,0BAA4B,iCAAiC,CACzF,EACI,EAAM,EAAQ,WAAW,EACzB,EAAM,EAAQ,WAAW,EACzB,EAAO,EAAQ,YAAY,EAC3B,EAAY,EAAQ,iBAAiB,EACrC,EAAY,EAAQ,sBAAsB,CAAC,CAAC,UAC5C,EAAe,EAAQ,uBAAuB,CAAC,CAAC,aAChD,EAAc,EAAQ,sBAAsB,CAAC,CAAC,YAC9C,EAAa,EAAQ,uBAAuB,CAAC,CAAC,WAC9C,EAAc,EAAQ,gBAAgB,CAAC,CAAC,YACxC,EAAS,EAAQ,UAAU,CAAC,CAAC,OAC7B,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAe,EAAQ,qBAAqB,CAAC,CAAC,aAC9C,EAAiB,EAAQ,4BAA4B,CAAC,CAAC,eACvD,EAAkB,EAAQ,6BAA6B,CAAC,CAAC,SACzD,EAAS,EAAQ,UAAU,EAC3B,EAAgB,EAAQ,kBAAkB,CAAC,CAAC,cAC5C,EAAwB,EAAQ,2BAA2B,CAAC,CAAC,sBAC7D,EAAM,EAAQ,UAAU,CAAC,CAAC,IAC1B,EAAY,EAAQ,aAAa,EACjC,EAAO,EAAQ,YAAY,EAC3B,EAAQ,EAAQ,aAAa,EAC7B,EAAe,EAAQ,WAAW,CAAC,CAAC,aACpC,EAAwB,UAAY,CACpC,SAAS,EAAO,EAAU,EAAS,EAAS,CACxC,KAAK,GAAK,UAAY,EAAE,EAAO,KAAO,KAAK,QAC3C,KAAK,WAAa,CAAC,EACnB,IAAI,EAAY,EAAS,oBAAoB,EAC7C,KAAK,UAAY,EACjB,KAAK,SAAW,EAChB,KAAK,SAAW,IAAI,EAAe,EAAU,MAAQ,MAAQ,MAAO,CAAe,EAC/E,OAAO,UAAY,WACnB,KAAK,UAAY,IAAI,EAAU,EAAS,qBAAqB,EAAG,IAAI,EACpE,KAAK,SAAS,SAAW,KAAK,UAAU,WAAW,EACnD,KAAK,cAAgB,IAAI,EAAa,IAAI,EAC1C,IAAI,EAAY,IAAI,GAExB,KAAK,WAAa,IAAI,EAAW,IAAI,EACrC,KAAK,QAAU,IAAI,EAAO,CAAC,CAAC,IAAI,CAC5B,KAAM,EACV,CAAC,EACD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,SAAS,GAAG,OAAQ,KAAK,eAAe,EAC7C,KAAK,wBAAwB,EAC7B,KAAK,iBAAmB,EAAK,YAAY,UAAY,CACjD,KAAK,QAAQ,QAAS,CAAC,CAAC,EACpB,KAAK,SAAW,CAAC,KAAK,QAAQ,WAC9B,KAAK,QAAQ,YAAY,cAAc,CAC/C,EAAE,KAAK,IAAI,CAAC,EACZ,KAAK,GAAG,SAAU,SAAU,EAAG,EAAO,CAClC,EAAM,iBAAiB,SAAS,EAAE,CACtC,CAAC,EACD,KAAK,WAAW,GAAW,GAAW,EAAQ,SAAW,IAAI,EAAY,EAAE,CAAC,EAC5E,EAAO,aAAa,IAAI,EACpB,GACA,KAAK,WAAW,CAAO,EAC3B,EAAO,QAAQ,SAAU,IAAI,CACjC,CA8oDA,MA7oDA,GAAO,UAAU,wBAA0B,UAAY,CACnD,KAAK,SAAS,GAAG,OAAQ,KAAK,eAAe,KAAK,IAAI,EAAG,EAAI,EAC7D,KAAK,SAAS,GAAG,YAAa,KAAK,aAAa,KAAK,IAAI,EAAG,EAAI,CACpE,EACA,EAAO,UAAU,eAAiB,SAAU,EAAc,CACtD,KAAK,QAAQ,eAAe,CAAY,CAC5C,EACA,EAAO,UAAU,aAAe,SAAU,EAAG,CACzC,KAAK,QAAQ,aAAa,CAAC,CAC/B,EACA,EAAO,UAAU,iBAAmB,SAAU,EAAc,CACxD,KAAK,MAAQ,KAAK,QAAQ,MAC1B,KAAK,MAAM,UAAY,KAAK,SAAS,UACrC,KAAK,OAAS,KAAK,QAAQ,OACtB,IACD,KAAK,gBAAkB,KAE/B,EACA,EAAO,UAAU,eAAiB,SAAU,EAAG,CAC3C,GAAI,KAAK,OAAS,KAAK,QAAS,CAC5B,GAAI,GAAK,EAAE,cAAgB,GAAO,CAC9B,KAAK,MAAQ,KACb,MACJ,CAEA,GADA,KAAK,QAAQ,oBAAoB,EAC7B,CAAC,KAAK,MACN,OACJ,IAAI,EAAU,KAAK,MAAM,QACrB,EAAiB,GAAW,EAAQ,eACxC,GAAI,EAAgB,CAChB,OAAQ,EAAR,CACI,IAAK,iBACD,EAAiB,UACrB,IAAK,SACD,KAAK,SAAS,qBAAqB,KAAM,EAAG,EAC5C,MACJ,IAAK,UACL,IAAK,SACD,KAAK,SAAS,qBAAqB,EACnC,MACJ,IAAK,gBACD,IAAI,EAAQ,KAAK,UAAU,SAAS,EAChC,EAAS,KAAK,SAAS,aACvB,EAAM,MAAM,KAAO,EAAO,SAAW,EAAM,IAAI,KAAO,EAAO,WAC7D,KAAK,SAAS,wBAAwB,KAAK,UAAU,OAAQ,KAAK,UAAU,IAAI,EAEpF,MACJ,QACI,KACR,CACI,GAAkB,WAClB,KAAK,SAAS,iBAAiB,KAAK,MAAM,SAAS,CAC3D,CACA,KAAK,SAAW,KAAK,QAAQ,UAAU,OAAO,EAC9C,KAAK,OAAS,KAAK,MACnB,KAAK,MAAQ,IACjB,CACJ,EACA,EAAO,UAAU,gBAAkB,SAAU,EAAG,CACvC,QAAK,iBAEV,KAAI,EAAO,KAAK,OACZ,EAAoB,KAAK,mBACzB,EAAc,EAAK,SAAY,EAAE,QAAQ,MAAQ,EAAK,QAAQ,KAClE,GAAI,EAAE,QAAQ,MAAQ,eAAgB,CAClC,IAAI,EAAO,EAAE,KACT,KAAK,mBAAqB,IAAA,KAC1B,KAAK,iBAAmB,IAC5B,EAAc,GACP,KAAK,mBACJ,CAAC,KAAK,KAAK,CAAI,GAAK,KAAK,KAAK,EAAK,IAAI,GAC/C,KAAK,iBAAmB,EAC5B,KAEI,KACO,EAAkB,QAAQ,EAAE,QAAQ,IAAI,IAAM,GAErD,KAAK,kBAAoB,UACtB,KAAK,IAAI,EAAI,KAAK,kBAAoB,MACzC,EAAc,IAEd,EACA,KAAK,QAAQ,gBAAkB,GAC1B,EAAkB,QAAQ,EAAE,QAAQ,IAAI,IAAM,KACnD,KAAK,kBAAoB,KAAK,IAAI,EAvBtB,CAwBpB,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAiB,EAAI,CACjE,GAAI,GAAmB,OAAO,GAAoB,UAAY,GAAmB,MAAO,CACpF,KAAK,cAAgB,EACrB,IAAI,EAAQ,KACZ,EAAO,WAAW,CAAC,aAAc,CAAe,EAAG,SAAU,EAAQ,CAC7D,EAAM,eAAiB,GACvB,EAAM,WAAW,mBAAmBE,GAAUA,EAAO,OAAO,EAChE,GAAM,EAAG,CACb,CAAC,CACL,KAEI,MAAK,cAAgB,KACrB,KAAK,WAAW,mBAAmB,CAAe,EAClD,GAAM,EAAG,CAEjB,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,WAAW,mBAAmB,CAC9C,EACA,EAAO,UAAU,WAAa,SAAU,EAAS,CACzC,QAAK,SAAW,EAIpB,CAFI,KAAK,OACL,KAAK,aAAa,EACtB,KAAK,MAAQ,CAAC,EACd,IAAI,EAAa,KAAK,QACtB,GAAI,EAAY,CACZ,KAAK,QAAQ,IAAI,SAAU,KAAK,iBAAiB,EACjD,KAAK,QAAQ,IAAI,aAAc,KAAK,aAAa,EACjD,KAAK,QAAQ,IAAI,kBAAmB,KAAK,kBAAkB,EAC3D,KAAK,QAAQ,IAAI,gBAAiB,KAAK,gBAAgB,EACvD,KAAK,QAAQ,IAAI,kBAAmB,KAAK,kBAAkB,EAC3D,KAAK,QAAQ,IAAI,iBAAkB,KAAK,iBAAiB,EACzD,KAAK,QAAQ,IAAI,aAAc,KAAK,aAAa,EACjD,KAAK,QAAQ,IAAI,oBAAqB,KAAK,oBAAoB,EAC/D,KAAK,QAAQ,IAAI,mBAAoB,KAAK,mBAAmB,EAC7D,KAAK,QAAQ,IAAI,mBAAoB,KAAK,mBAAmB,EAC7D,KAAK,QAAQ,IAAI,mBAAoB,KAAK,mBAAmB,EAC7D,KAAK,QAAQ,IAAI,kBAAmB,KAAK,eAAe,EACxD,KAAK,QAAQ,IAAI,kBAAmB,KAAK,kBAAkB,EAC3D,KAAK,QAAQ,IAAI,mBAAoB,KAAK,mBAAmB,EAC7D,KAAK,QAAQ,IAAI,iBAAkB,KAAK,iBAAiB,EACzD,KAAK,QAAQ,IAAI,eAAgB,KAAK,eAAe,EACrD,IAAI,EAAY,KAAK,QAAQ,aAAa,EAC1C,EAAU,IAAI,eAAgB,KAAK,eAAe,EAClD,EAAU,IAAI,kBAAmB,KAAK,kBAAkB,CAC5D,CACA,KAAK,QAAU,EACX,GACA,KAAK,kBAAoB,KAAK,iBAAiB,KAAK,IAAI,EACxD,EAAQ,GAAG,SAAU,KAAK,iBAAiB,EAC3C,KAAK,SAAS,WAAW,CAAO,EAChC,KAAK,cAAgB,KAAK,aAAa,KAAK,IAAI,EAChD,EAAQ,GAAG,aAAc,KAAK,aAAa,EAC3C,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1D,EAAQ,GAAG,kBAAmB,KAAK,kBAAkB,EACrD,KAAK,iBAAmB,KAAK,SAAS,gBAAgB,KAAK,KAAK,QAAQ,EACxE,EAAQ,GAAG,gBAAiB,KAAK,gBAAgB,EACjD,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1D,EAAQ,GAAG,kBAAmB,KAAK,kBAAkB,EACrD,KAAK,kBAAoB,KAAK,iBAAiB,KAAK,IAAI,EACxD,EAAQ,GAAG,iBAAkB,KAAK,iBAAiB,EACnD,KAAK,cAAgB,KAAK,aAAa,KAAK,IAAI,EAChD,EAAQ,GAAG,aAAc,KAAK,aAAa,EAC3C,KAAK,qBAAuB,KAAK,oBAAoB,KAAK,IAAI,EAC9D,KAAK,QAAQ,GAAG,oBAAqB,KAAK,oBAAoB,EAC9D,KAAK,oBAAsB,KAAK,mBAAmB,KAAK,IAAI,EAC5D,KAAK,QAAQ,GAAG,mBAAoB,KAAK,mBAAmB,EAC5D,KAAK,oBAAsB,KAAK,mBAAmB,KAAK,IAAI,EAC5D,KAAK,QAAQ,GAAG,mBAAoB,KAAK,mBAAmB,EAC5D,KAAK,oBAAsB,KAAK,mBAAmB,KAAK,IAAI,EAC5D,KAAK,QAAQ,GAAG,mBAAoB,KAAK,mBAAmB,EAC5D,KAAK,gBAAkB,KAAK,eAAe,KAAK,IAAI,EACpD,KAAK,QAAQ,GAAG,kBAAmB,KAAK,eAAe,EACvD,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1D,KAAK,QAAQ,GAAG,kBAAmB,KAAK,kBAAkB,EAC1D,KAAK,oBAAsB,KAAK,mBAAmB,KAAK,IAAI,EAC5D,KAAK,QAAQ,GAAG,mBAAoB,KAAK,mBAAmB,EAC5D,KAAK,UAAY,EAAQ,aAAa,EACtC,KAAK,UAAU,GAAG,eAAgB,KAAK,eAAe,EACtD,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1D,KAAK,UAAU,GAAG,kBAAmB,KAAK,kBAAkB,EAC5D,KAAK,kBAAoB,KAAK,iBAAiB,KAAK,IAAI,EACxD,KAAK,QAAQ,GAAG,iBAAkB,KAAK,iBAAiB,EACxD,KAAK,gBAAkB,KAAK,eAAe,KAAK,IAAI,EACpD,KAAK,QAAQ,GAAG,eAAgB,KAAK,eAAe,EACpD,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,eAAe,GAAK,KAAK,SAAS,gBAAgB,EAC/D,KAAK,SAAS,WAAW,IAGzB,KAAK,UAAY,KACjB,KAAK,SAAS,WAAW,CAAO,GAEpC,KAAK,QAAQ,gBAAiB,CACjB,UACG,YAChB,CAAC,EACD,KAAK,MAAQ,KACb,GAAc,EAAW,QAAQ,eAAgB,CAAE,UAAW,IAAK,CAAC,EAChE,IACA,EAAW,QAAU,MACzB,GAAW,EAAQ,QAAQ,eAAgB,CAAE,OAAQ,IAAK,CAAC,EACvD,IACA,EAAQ,QAAU,MAClB,GAAW,CAAC,EAAQ,WACpB,EAAQ,YAAY,cAAc,CA1FxB,CA2FlB,EACA,EAAO,UAAU,WAAa,UAAY,CACtC,OAAO,KAAK,OAChB,EACA,EAAO,UAAU,SAAW,SAAU,EAAK,EAAW,CAQlD,OAPA,KAAK,QAAQ,IAAI,SAAS,CAAG,EACxB,EAEI,GAAa,EAClB,KAAK,gBAAgB,EAChB,GAAa,IAClB,KAAK,kBAAkB,EAJvB,KAAK,UAAU,EAKZ,CACX,EACA,EAAO,UAAU,SAAW,UAAY,CACpC,OAAO,KAAK,QAAQ,SAAS,CACjC,EACA,EAAO,UAAU,aAAe,UAAY,CACxC,OAAO,KAAK,SAChB,EACA,EAAO,UAAU,OAAS,SAAU,EAAO,CACvC,KAAK,SAAS,SAAS,CAAK,CAChC,EACA,EAAO,UAAU,SAAW,SAAU,EAAO,EAAI,CAC7C,KAAK,SAAS,SAAS,EAAO,CAAE,CACpC,EACA,EAAO,UAAU,SAAW,UAAY,CACpC,OAAO,KAAK,SAAS,SAAS,CAClC,EACA,EAAO,UAAU,SAAW,SAAU,EAAO,EAAU,CACnD,KAAK,SAAS,SAAS,EAAO,CAAQ,CAC1C,EACA,EAAO,UAAU,WAAa,SAAU,EAAO,CAC3C,KAAK,SAAS,WAAW,CAAK,CAClC,EACA,EAAO,UAAU,YAAc,UAAY,CACvC,OAAO,KAAK,UAAU,UAAU,GAC5B,EAAI,cAAc,KAAK,SAAS,CAAC,CAAC,QAC1C,EACA,EAAO,UAAU,YAAc,SAAU,EAAM,CAC3C,KAAK,UAAU,WAAY,CAAI,CACnC,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC1C,SAAK,kBAGT,KAAI,EAAO,KACX,KAAK,kBAAoB,GACzB,WAAW,UAAY,CACnB,EAAK,kBAAoB,GACzB,IAAI,EAAU,EAAK,QACf,MAAC,GAAW,EAAQ,WAExB,CAII,EAAQ,qBAHR,EAAQ,kBAAkB,UAAU,QAAQ,SAAU,EAAI,CACtD,EAAQ,aAAa,CAAE,CAC3B,CAAC,EAC2B,MAEhC,IAAI,EAAM,EAAK,kBAAkB,EAC7B,EAAU,EAAK,mBAAmB,EAClC,EAAc,GAAW,EAAQ,2BAA6B,EAAQ,0BAA0B,CAAI,EACpG,EAAS,EAAQ,yBAAyB,EAAK,CAAW,EAC9D,GAAI,CAAC,EAAQ,CAET,IAAI,EAAQ,IADO,EAAc,EAAS,EAAI,IAAK,EAAI,MACpC,CAAC,CAAC,gBAAgB,EACrC,GAAI,GAAS,0BAA0B,KAAK,EAAM,IAAI,EAAG,CACrD,IAAI,EAAiB,EAAQ,gBAAgB,CAAG,EAC5C,IACA,EAAS,CACL,EAAe,YAAY,QAAQ,EAAI,EAAe,QAAU,EAAe,YAC/E,EAAe,aAAa,QAAQ,EAAI,EAAe,SAAW,EAAe,YACrF,EAER,CACJ,CAGA,GAFI,CAAC,GAAU,EAAQ,MAAM,cACzB,EAAS,EAAQ,MAAM,YAAY,EAAK,OAAO,GAC/C,CAAC,EAAQ,CACL,EAAK,yBAAyB,GAC9B,EAAK,SAAS,WAAW,sBAAsB,EACnD,MACJ,CACA,IAAI,EAAa,cACZ,MAAM,QAAQ,CAAM,EAGhB,EAAO,QAAU,IACtB,EAAa,qBAHb,EAAS,CAAC,CAAM,EAKhB,EAAO,QAAU,IACb,EAAM,cAAc,EAAO,EAAE,CAAC,IAAK,EAAO,EAAE,CAAC,KAAK,GAAK,EACvD,EAAS,CAAC,EAAM,WAAW,EAAO,EAAE,CAAC,MAAO,EAAO,EAAE,CAAC,GAAG,CAAC,EACrD,EAAM,cAAc,EAAO,EAAE,CAAC,MAAO,EAAO,EAAE,CAAC,GAAG,GAAK,IAC5D,EAAS,CAAC,EAAM,WAAW,EAAO,EAAE,CAAC,MAAO,EAAO,EAAE,CAAC,GAAG,CAAC,IAElE,EAAQ,kBAAoB,CAChB,SACR,UAAW,EAAO,IAAI,SAAU,EAAO,CACnC,OAAO,EAAQ,UAAU,EAAO,EAAY,MAAM,CACtD,CAAC,CACL,EACI,EAAK,yBAAyB,GAC9B,EAAK,SAAS,WAAW,sBAAsB,CA7CnD,CA8CJ,EAAG,EAAE,CA1DM,CA2Df,EACA,EAAO,UAAU,MAAQ,UAAY,CACjC,KAAK,UAAU,MAAM,CACzB,EACA,EAAO,UAAU,UAAY,UAAY,CACrC,OAAO,KAAK,UAAU,UAAU,CACpC,EACA,EAAO,UAAU,KAAO,UAAY,CAChC,KAAK,UAAU,KAAK,CACxB,EACA,EAAO,UAAU,QAAU,SAAU,EAAG,CAChC,KAAK,aAET,KAAK,WAAa,GAClB,KAAK,SAAS,WAAW,EACzB,KAAK,SAAS,eAAe,EAC7B,KAAK,MAAM,QAAS,CAAC,EACzB,EACA,EAAO,UAAU,OAAS,SAAU,EAAG,CAC9B,KAAK,aAEV,KAAK,WAAa,GAClB,KAAK,SAAS,WAAW,EACzB,KAAK,SAAS,cAAc,EAC5B,KAAK,MAAM,OAAQ,CAAC,EACxB,EACA,EAAO,UAAU,cAAgB,UAAY,CACzC,KAAK,SAAS,aAAa,EAC3B,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,CACpC,EACA,EAAO,UAAU,iBAAmB,SAAU,EAAO,CACjD,IAAI,EAAO,KAAK,QAAQ,aACpB,EAAW,EAAM,MAAM,KAAO,EAAM,IAAI,IAAM,EAAM,IAAI,IAAM,IAClE,KAAK,SAAS,YAAY,EAAM,MAAM,IAAK,EAAS,CAAI,EACxD,KAAK,QAAQ,SAAU,CAAK,EAC5B,KAAK,cAAc,CACvB,EACA,EAAO,UAAU,kBAAoB,SAAU,EAAG,CAC9C,IAAI,EAAO,EAAE,KACb,KAAK,SAAS,YAAY,EAAK,MAAO,EAAK,IAAI,CACnD,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,SAAS,UAAU,KAAK,QAAQ,aAAa,CAAC,CACvD,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,KAAK,SAAS,UAAU,KAAK,QAAQ,cAAc,CAAC,CACxD,EACA,EAAO,UAAU,eAAiB,UAAY,CAC1C,KAAK,cAAc,EACnB,KAAK,QAAQ,iBAAiB,CAClC,EACA,EAAO,UAAU,2BAA6B,UAAY,CACtD,IAAI,EAAU,KAAK,WAAW,EAC1B,EASJ,GARI,KAAK,wBACD,KAAK,iBAAmB,QAAU,CAAC,KAAK,UAAU,YAAY,KAC9D,EAAY,KAAK,kBAAkB,GACnC,KAAK,SAAS,OAAS,KAAK,SAAS,MAAM,yBAA2B,CAAC,KAAK,UAAU,QAAQ,IAC9F,EAAY,IACZ,KAAK,SAAS,WAAa,KAAK,QAAQ,UAAU,IAAM,GAAK,EAAE,KAAK,SAAS,UAAY,KACzF,EAAY,KAEhB,EAAQ,sBAAwB,CAAC,EACjC,EAAQ,aAAa,EAAQ,qBAAqB,EAAE,EACpD,EAAQ,qBAAuB,UAE9B,GAAI,CAAC,EAAQ,sBAAwB,EAAW,CACjD,IAAI,EAAQ,IAAI,EAAM,EAAU,IAAK,EAAU,OAAQ,EAAU,IAAK,GAAQ,EAC9E,EAAM,GAAK,EAAQ,UAAU,EAAO,kBAAmB,YAAY,EACnE,EAAQ,qBAAuB,CACnC,MACS,IACL,EAAQ,qBAAqB,MAAM,IAAM,EAAU,IACnD,EAAQ,qBAAqB,IAAI,IAAM,EAAU,IACjD,EAAQ,qBAAqB,MAAM,OAAS,EAAU,OACtD,EAAQ,QAAQ,kBAAkB,EAE1C,EACA,EAAO,UAAU,kBAAoB,SAAU,EAAG,CAC9C,IAAI,EAAU,KAAK,QAKnB,GAJI,EAAQ,kBACR,EAAQ,aAAa,EAAQ,gBAAgB,EAEjD,EAAQ,iBAAmB,KACtB,KAAK,UAAU,QAAQ,EAMxB,KAAK,2BAA2B,MANL,CAC3B,IAAI,EAAQ,KAAK,UAAU,SAAS,EAChC,EAAQ,KAAK,kBAAkB,EACnC,EAAQ,iBAAmB,EAAQ,UAAU,EAAO,gBAAiB,CAAK,CAC9E,CAIA,IAAI,EAAK,KAAK,wBAA0B,KAAK,6BAA6B,EAC1E,KAAK,QAAQ,UAAU,CAAE,EACzB,KAAK,QAAQ,iBAAiB,CAClC,EACA,EAAO,UAAU,6BAA+B,UAAY,CACxD,IAAI,EAAU,KAAK,QACf,EAAY,KAAK,kBAAkB,EACnC,OAAU,QAAQ,GAAK,EAAU,YAAY,GAEjD,KAAI,EAAc,EAAU,MAAM,OAC9B,EAAY,EAAU,IAAI,OAC1B,EAAO,EAAQ,QAAQ,EAAU,MAAM,GAAG,EAC1C,EAAS,EAAK,UAAU,EAAa,CAAS,EAC9C,OAAO,OAAS,KAAQ,CAAC,SAAS,KAAK,CAAM,GAEjD,KAAI,EAAK,KAAK,QAAQ,gBAAgB,CAClC,UAAW,GACX,cAAe,GACP,QACZ,CAAC,EACG,EAAmB,EAAK,UAAU,EAAc,EAAG,EAAY,CAAC,EAC/D,KAAG,KAAK,CAAgB,EAE7B,OAAO,CAJN,CAViC,CAetC,EACA,EAAO,UAAU,oBAAsB,UAAY,CAC/C,KAAK,SAAS,mBAAmB,CACrC,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,KAAK,SAAS,kBAAkB,CACpC,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,KAAK,SAAS,kBAAkB,CACpC,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,KAAK,SAAS,eAAe,KAAK,QAAQ,eAAe,CAAC,CAC9D,EACA,EAAO,UAAU,aAAe,SAAU,EAAG,CACzC,KAAK,SAAS,WAAW,EACzB,KAAK,MAAM,aAAc,CAAC,CAC9B,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,SAAS,WAAW,CAC7B,EACA,EAAO,UAAU,iBAAmB,UAAY,CAC5C,KAAK,SAAS,SAAS,EAAI,CAC/B,EACA,EAAO,UAAU,aAAe,UAAY,CACxC,KAAK,2BAA2B,EAChC,KAAK,SAAS,WAAW,CAC7B,EACA,EAAO,UAAU,gBAAkB,UAAY,CAC3C,OAAO,KAAK,QAAQ,aAAa,KAAK,kBAAkB,CAAC,CAC7D,EACA,EAAO,UAAU,YAAc,UAAY,CACvC,IAAI,EAAO,KAAK,gBAAgB,EAC5B,EAAK,KAAK,QAAQ,IAAI,oBAAoB,EAC1C,EAAW,GACf,GAAI,CAAC,GAAQ,KAAK,wBAAyB,CACvC,EAAW,GAEX,IAAK,IADD,EAAS,KAAK,UAAU,aAAa,EAChC,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAQ,EAAO,GACf,GAAK,EAAO,EAAI,EAAE,CAAC,MAAM,KAAO,EAAM,MAAM,MAEhD,GAAQ,KAAK,QAAQ,QAAQ,EAAM,MAAM,GAAG,EAAI,EACpD,CACJ,CACA,IAAI,EAAI,CAAQ,MAAK,EAGrB,OAFA,KAAK,QAAQ,OAAQ,CAAC,EACtB,EAAU,SAAW,EAAW,EAAE,KAAO,GAClC,EAAE,IACb,EACA,EAAO,UAAU,OAAS,UAAY,CAClC,KAAK,SAAS,KAAK,OAAQ,IAAI,CACnC,EACA,EAAO,UAAU,MAAQ,UAAY,CACjC,KAAK,SAAS,KAAK,MAAO,IAAI,CAClC,EACA,EAAO,UAAU,QAAU,SAAU,EAAM,EAAO,CAC9C,IAAI,EAAI,CAAQ,OAAa,OAAM,EACnC,KAAK,SAAS,KAAK,QAAS,KAAM,CAAC,CACvC,EACA,EAAO,UAAU,aAAe,SAAU,EAAG,CACrC,OAAO,GAAK,WACZ,EAAI,CAAE,KAAM,CAAE,GAClB,KAAK,QAAQ,QAAS,CAAC,EACvB,IAAI,EAAO,EAAE,KACT,EAAW,IAAS,EAAU,SAC9B,EAAU,KAAK,QACnB,GAAI,CAAC,KAAK,mBAAqB,KAAK,uBAC5B,EACA,EAAQ,OAAO,CAAE,IAAK,KAAK,UAAU,KAAK,IAAK,OAAQ,CAAE,EAAG,CAAI,EAEhE,KAAK,OAAO,CAAI,OAEnB,GAAI,EACL,KAAK,UAAU,UAAU,OAAO,QAAQ,SAAU,EAAO,CACrD,EAAQ,OAAO,CAAE,IAAK,EAAM,MAAM,IAAK,OAAQ,CAAE,EAAG,CAAI,CAC5D,CAAC,MAEA,CACD,IAAI,EAAQ,EAAK,MAAM,YAAY,EAC/B,EAAS,KAAK,UAAU,UAAU,OAClC,EAAa,EAAM,QAAU,IAAM,CAAC,EAAM,IAAM,CAAC,EAAM,IAC3D,GAAI,EAAM,QAAU,EAAO,QAAU,EACjC,OAAO,KAAK,SAAS,KAAK,eAAgB,KAAM,CAAI,EACxD,IAAK,IAAI,EAAI,EAAO,OAAQ,KAAM,CAC9B,IAAI,EAAQ,EAAO,GACd,EAAM,QAAQ,GACf,EAAQ,OAAO,CAAK,EACxB,EAAQ,OAAO,EAAM,MAAO,EAAM,EAAE,CACxC,CACJ,CACJ,EACA,EAAO,UAAU,YAAc,SAAU,EAAS,EAAM,CACpD,OAAO,KAAK,SAAS,KAAK,EAAS,KAAM,CAAI,CACjD,EACA,EAAO,UAAU,OAAS,SAAU,EAAM,EAAQ,CAC9C,IAAI,EAAU,KAAK,QACf,EAAO,EAAQ,QAAQ,EACvB,EAAS,KAAK,kBAAkB,EACpC,GAAI,KAAK,qBAAqB,GAAK,CAAC,EAAQ,CACxC,IAAI,EAAY,EAAK,gBAAgB,EAAQ,SAAS,EAAO,GAAG,EAAG,YAAa,KAAM,EAAS,CAAI,EAC/F,IACI,IAAS,EAAU,OACd,KAAK,yBACN,KAAK,QAAQ,gBAAkB,GAC/B,KAAK,iBAAmB,KAGhC,EAAO,EAAU,KAEzB,CAGA,GAFI,GAAQ,MACR,EAAO,KAAK,QAAQ,aAAa,GACjC,CAAC,KAAK,UAAU,QAAQ,EAAG,CAC3B,IAAI,EAAQ,KAAK,kBAAkB,EACnC,EAAS,KAAK,QAAQ,OAAO,CAAK,EAClC,KAAK,eAAe,CACxB,MACK,GAAI,KAAK,QAAQ,aAAa,GAAK,EAAK,QAAQ;CAAI,GAAK,GAAI,CAC9D,IAAI,EAAQ,EAAM,WAAW,EAAQ,CAAM,EAC3C,EAAM,IAAI,QAAU,EAAK,OACzB,KAAK,QAAQ,OAAO,CAAK,CAC7B,CACA,GAAI,GAAQ;GAAQ,GAAQ;EAAQ,CAChC,IAAI,EAAO,EAAQ,QAAQ,EAAO,GAAG,EACrC,GAAI,EAAO,OAAS,EAAK,OAAO,MAAM,EAAG,CACrC,IAAI,EAAI,EAAK,OAAO,EAAO,MAAM,CAAC,CAAC,OAAO,MAAM,EAChD,EAAQ,IAAI,aAAa,EAAO,IAAK,EAAO,OAAQ,EAAO,OAAS,CAAC,CACzE,CACJ,CACA,KAAK,eAAe,EACpB,IAAI,EAAQ,EAAO,OACf,EAAY,EAAQ,SAAS,EAAO,GAAG,EACvC,EAAO,EAAQ,QAAQ,EAAO,GAAG,EACjC,EAAgB,EAAK,aAAa,EAAW,EAAM,CAAI,EAU3D,GATA,EAAQ,OAAO,EAAQ,CAAI,EACvB,GAAa,EAAU,YACnB,EAAU,UAAU,QAAU,EAC9B,KAAK,UAAU,kBAAkB,IAAI,EAAM,EAAO,IAAK,EAAQ,EAAU,UAAU,GAAI,EAAO,IAAK,EAAQ,EAAU,UAAU,EAAE,CAAC,EAGlI,KAAK,UAAU,kBAAkB,IAAI,EAAM,EAAO,IAAM,EAAU,UAAU,GAAI,EAAU,UAAU,GAAI,EAAO,IAAM,EAAU,UAAU,GAAI,EAAU,UAAU,EAAE,CAAC,GAGxK,KAAK,kBAAmB,CACxB,GAAI,EAAQ,YAAY,CAAC,CAAC,UAAU,CAAI,EAAG,CACvC,IAAI,EAAa,EAAK,kBAAkB,EAAW,EAAK,MAAM,EAAG,EAAO,MAAM,EAAG,EAAQ,aAAa,CAAC,EACvG,EAAQ,OAAO,CAAE,IAAK,EAAO,IAAM,EAAG,OAAQ,CAAE,EAAG,CAAU,CACjE,CACI,GACA,EAAK,YAAY,EAAW,EAAS,EAAO,GAAG,CACvD,CACJ,EACA,EAAO,UAAU,WAAa,UAAY,CAUtC,IAAK,IATD,EAAU,KAAK,QACf,EAAO,EAAQ,QAAQ,EACvB,EAAS,KAAK,UAAU,QAAQ,EAC9B,CAAC,IAAI,EAAM,EAAG,EAAG,EAAQ,IAAI,UAAU,EAAI,EAAG,CAAC,CAAC,EAChD,KAAK,UAAU,aAAa,EAC9B,EAAgB,GAChB,EAAW,GACX,EAAa,GACb,EAAM,EAAQ,aAAa,EACtB,EAAI,EAAG,EAAI,EAAO,OAAQ,IAG/B,IAAK,IAFD,EAAW,EAAO,EAAE,CAAC,MAAM,IAC3B,EAAS,EAAO,EAAE,CAAC,IAAI,IAClB,EAAM,EAAU,GAAO,EAAQ,IAAO,CACvC,EAAM,IACN,EAAgB,EAAQ,SAAS,EAAM,CAAC,EACxC,EAAW,EAAQ,QAAQ,EAAM,CAAC,EAClC,EAAa,EAAK,kBAAkB,EAAe,EAAU,CAAG,GAEpE,IAAI,EAAO,EAAQ,QAAQ,CAAG,EAC1B,EAAa,EAAK,WAAW,CAAI,EACrC,GAAI,IAAe,EAAY,CAC3B,GAAI,EAAW,OAAS,EAAG,CACvB,IAAI,EAAQ,IAAI,EAAM,EAAK,EAAG,EAAK,EAAW,MAAM,EACpD,EAAQ,OAAO,CAAK,CACxB,CACI,EAAW,OAAS,GACpB,EAAQ,OAAO,CAAO,MAAK,OAAQ,CAAE,EAAG,CAAU,CAE1D,CACA,EAAK,YAAY,EAAe,EAAS,CAAG,CAChD,CAER,EACA,EAAO,UAAU,YAAc,SAAU,EAAM,EAAa,CACxD,GAAI,CAAC,EACD,OAAO,KAAK,WAAW,YAAY,CAAI,EAC3C,KAAK,eAAe,CAAE,QAAS,CAAE,KAAM,cAAe,CAAE,CAAC,EACzD,IAAI,EAAmB,KAAK,iBAAiB,KAAK,KAAM,EAAM,CAAW,EACrE,KAAK,UAAU,WACf,KAAK,iBAAiB,CAAgB,EAEtC,EAAiB,EACrB,KAAK,aAAa,CACtB,EACA,EAAO,UAAU,iBAAmB,SAAU,EAAM,EAAa,CAC7D,GAAI,EAAY,YAAc,EAAY,YAAa,CACnD,IAAI,EAAI,KAAK,UAAU,SAAS,EAChC,EAAE,MAAM,QAAU,EAAY,WAC9B,EAAE,IAAI,QAAU,EAAY,YACxB,EAAE,MAAM,OAAS,IACjB,EAAE,MAAM,MACR,EAAE,MAAM,QAAU,KAAK,QAAQ,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,OAAS,GAEjE,KAAK,UAAU,SAAS,CAAC,EACrB,CAAC,GAAQ,CAAC,EAAE,QAAQ,GACpB,KAAK,OAAO,CACpB,CAGA,IAFI,GAAQ,CAAC,KAAK,UAAU,QAAQ,IAChC,KAAK,OAAO,EAAM,EAAI,EACtB,EAAY,cAAgB,EAAY,WAAY,CACpD,IAAI,EAAI,KAAK,UAAU,SAAS,EAChC,EAAE,MAAM,QAAU,EAAY,aAC9B,EAAE,IAAI,QAAU,EAAY,WAC5B,KAAK,UAAU,SAAS,CAAC,CAC7B,CACJ,EACA,EAAO,UAAU,aAAe,SAAU,EAAG,EAAQ,EAAS,CAC1D,OAAO,KAAK,WAAW,aAAa,EAAG,EAAQ,CAAO,CAC1D,EACA,EAAO,UAAU,aAAe,SAAU,EAAW,CACjD,KAAK,QAAQ,aAAa,CAAS,CACvC,EACA,EAAO,UAAU,aAAe,UAAY,CACxC,OAAO,KAAK,QAAQ,aAAa,CACrC,EACA,EAAO,UAAU,gBAAkB,UAAY,CAC3C,KAAK,QAAQ,gBAAgB,CACjC,EACA,EAAO,UAAU,eAAiB,SAAU,EAAO,CAC/C,KAAK,UAAU,cAAe,CAAK,CACvC,EACA,EAAO,UAAU,eAAiB,UAAY,CAC1C,OAAO,KAAK,UAAU,aAAa,CACvC,EACA,EAAO,UAAU,aAAe,SAAU,EAAW,CACjD,KAAK,UAAU,YAAa,CAAS,CACzC,EACA,EAAO,UAAU,aAAe,UAAY,CACxC,OAAO,KAAK,UAAU,WAAW,CACrC,EACA,EAAO,UAAU,kBAAoB,SAAU,EAAK,CAChD,KAAK,UAAU,iBAAkB,CAAG,CACxC,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,UAAU,gBAAgB,CAC1C,EACA,EAAO,UAAU,uBAAyB,SAAU,EAAiB,CACjE,KAAK,UAAU,sBAAuB,CAAe,CACzD,EACA,EAAO,UAAU,uBAAyB,UAAY,CAClD,OAAO,KAAK,UAAU,qBAAqB,CAC/C,EACA,EAAO,UAAU,uBAAyB,SAAU,EAAiB,CACjE,KAAK,UAAU,sBAAuB,CAAe,CACzD,EACA,EAAO,UAAU,uBAAyB,UAAY,CAClD,OAAO,KAAK,UAAU,qBAAqB,CAC/C,EACA,EAAO,UAAU,yBAA2B,SAAU,EAAiB,CACnE,KAAK,UAAU,wBAAyB,CAAe,CAC3D,EACA,EAAO,UAAU,yBAA2B,UAAY,CACpD,OAAO,KAAK,sBAChB,EACA,EAAO,UAAU,kBAAoB,SAAU,EAAe,CAC1D,KAAK,SAAS,kBAAkB,CAAa,CACjD,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,SAAS,kBAAkB,CAC3C,EACA,EAAO,UAAU,kBAAoB,SAAU,EAAgB,CAC3D,KAAK,SAAS,kBAAkB,CAAc,CAClD,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,SAAS,kBAAkB,CAC3C,EACA,EAAO,UAAU,uBAAyB,SAAU,EAAS,CACzD,KAAK,SAAS,uBAAuB,CAAO,CAChD,EACA,EAAO,UAAU,uBAAyB,UAAY,CAClD,OAAO,KAAK,SAAS,uBAAuB,CAChD,EACA,EAAO,UAAU,yBAA2B,SAAU,EAAW,CAC7D,KAAK,SAAS,yBAAyB,CAAS,CACpD,EACA,EAAO,UAAU,yBAA2B,UAAY,CACpD,OAAO,KAAK,SAAS,yBAAyB,CAClD,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAiB,CAC7D,KAAK,SAAS,mBAAmB,CAAe,CACpD,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,SAAS,mBAAmB,CAC5C,EACA,EAAO,UAAU,qBAAuB,SAAU,EAAiB,CAC/D,KAAK,SAAS,qBAAqB,CAAe,CACtD,EACA,EAAO,UAAU,qBAAuB,UAAY,CAChD,OAAO,KAAK,SAAS,qBAAqB,CAC9C,EACA,EAAO,UAAU,YAAc,SAAU,EAAU,CAC/C,KAAK,UAAU,WAAY,CAAQ,CACvC,EACA,EAAO,UAAU,YAAc,UAAY,CACvC,OAAO,KAAK,UAAU,UAAU,CACpC,EACA,EAAO,UAAU,qBAAuB,SAAU,EAAS,CACvD,KAAK,UAAU,oBAAqB,CAAO,CAC/C,EACA,EAAO,UAAU,qBAAuB,UAAY,CAChD,OAAO,KAAK,UAAU,mBAAmB,CAC7C,EACA,EAAO,UAAU,yBAA2B,SAAU,EAAS,CAC3D,KAAK,UAAU,wBAAyB,CAAO,CACnD,EACA,EAAO,UAAU,yBAA2B,UAAY,CACpD,OAAO,KAAK,UAAU,uBAAuB,CACjD,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAM,CAClD,KAAK,UAAU,kBAAmB,CAAI,CAC1C,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,UAAU,iBAAiB,CAC3C,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAM,CAClD,KAAK,UAAU,kBAAmB,CAAI,CAC1C,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,UAAU,iBAAiB,CAC3C,EACA,EAAO,UAAU,OAAS,SAAU,EAAK,CACjC,KAAK,UAAU,QAAQ,IACnB,GAAO,OACP,KAAK,UAAU,WAAW,EAE1B,KAAK,UAAU,YAAY,GAEnC,IAAI,EAAQ,KAAK,kBAAkB,EACnC,GAAI,KAAK,qBAAqB,EAAG,CAC7B,IAAI,EAAU,KAAK,QACf,EAAQ,EAAQ,SAAS,EAAM,MAAM,GAAG,EACxC,EAAY,EAAQ,QAAQ,CAAC,CAAC,gBAAgB,EAAO,WAAY,KAAM,EAAS,CAAK,EACzF,GAAI,EAAM,IAAI,SAAW,EAAG,CACxB,IAAI,EAAO,EAAQ,aAAa,CAAK,EACrC,GAAI,EAAK,EAAK,OAAS,IAAM;EAAM,CAC/B,IAAI,EAAO,EAAQ,QAAQ,EAAM,IAAI,GAAG,EACpC,QAAQ,KAAK,CAAI,IACjB,EAAM,IAAI,OAAS,EAAK,OAEhC,CACJ,CACI,IACA,EAAQ,EAChB,CACA,KAAK,QAAQ,OAAO,CAAK,EACzB,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,gBAAkB,UAAY,CACvC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,gBAAgB,EACnC,KAAK,QAAQ,OAAO,KAAK,kBAAkB,CAAC,EAC5C,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,eAAiB,UAAY,CACtC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,eAAe,EAClC,KAAK,QAAQ,OAAO,KAAK,kBAAkB,CAAC,EAC5C,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,kBAAoB,UAAY,CACzC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,gBAAgB,EAC/B,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,WAAW,EAC9B,KAAK,QAAQ,OAAO,KAAK,kBAAkB,CAAC,EAC5C,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,gBAAkB,UAAY,CACvC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,cAAc,EACjC,IAAI,EAAQ,KAAK,kBAAkB,EAC/B,EAAM,MAAM,QAAU,EAAM,IAAI,QAAU,EAAM,MAAM,KAAO,EAAM,IAAI,MACvE,EAAM,IAAI,OAAS,EACnB,EAAM,IAAI,OAEd,KAAK,QAAQ,OAAO,CAAK,EACzB,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,UAAY,UAAY,CAChC,KAAK,UAAU,QAAQ,IACxB,KAAK,QAAQ,OAAO,KAAK,kBAAkB,CAAC,EAC5C,KAAK,eAAe,GAExB,IAAI,EAAS,KAAK,kBAAkB,EACpC,KAAK,OAAO;CAAI,EAChB,KAAK,qBAAqB,CAAM,CACpC,EACA,EAAO,UAAU,aAAe,SAAU,EAAM,EAAU,CACtD,KAAK,SAAS,aAAa,EAAM,CAAQ,CAC7C,EACA,EAAO,UAAU,gBAAkB,UAAY,CAC3C,KAAK,SAAS,gBAAgB,CAClC,EACA,EAAO,UAAU,iBAAmB,UAAY,CACvC,QAAK,UAAU,QAAQ,EAG5B,KAAI,EAAS,KAAK,kBAAkB,EAChC,EAAS,EAAO,OAChB,OAAW,EAEf,KAAI,EAAO,KAAK,QAAQ,QAAQ,EAAO,GAAG,EACtC,EAAM,EACN,EAAS,EAAK,QACd,EAAO,EAAK,OAAO,CAAM,EAAI,EAAK,OAAO,EAAS,CAAC,EACnD,EAAQ,IAAI,EAAM,EAAO,IAAK,EAAS,EAAG,EAAO,IAAK,EAAS,CAAC,IAGhE,EAAO,EAAK,OAAO,EAAS,CAAC,EAAI,EAAK,OAAO,EAAS,CAAC,EACvD,EAAQ,IAAI,EAAM,EAAO,IAAK,EAAS,EAAG,EAAO,IAAK,CAAM,GAEhE,KAAK,QAAQ,QAAQ,EAAO,CAAI,EAChC,KAAK,QAAQ,UAAU,eAAe,EAAM,GAAG,CAXL,CAJN,CAgBxC,EACA,EAAO,UAAU,YAAc,UAAY,CACvC,IAAI,EAAgB,KAAK,kBAAkB,EACvC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,WAAW,EAE9B,IAAI,EAAQ,KAAK,kBAAkB,EAC/B,EAAO,KAAK,QAAQ,aAAa,CAAK,EAC1C,KAAK,QAAQ,QAAQ,EAAO,EAAK,YAAY,CAAC,EAC9C,KAAK,UAAU,kBAAkB,CAAa,CAClD,EACA,EAAO,UAAU,YAAc,UAAY,CACvC,IAAI,EAAgB,KAAK,kBAAkB,EACvC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,WAAW,EAE9B,IAAI,EAAQ,KAAK,kBAAkB,EAC/B,EAAO,KAAK,QAAQ,aAAa,CAAK,EAC1C,KAAK,QAAQ,QAAQ,EAAO,EAAK,YAAY,CAAC,EAC9C,KAAK,UAAU,kBAAkB,CAAa,CAClD,EACA,EAAO,UAAU,OAAS,UAAY,CAClC,IAAI,EAAU,KAAK,QACf,EAAQ,KAAK,kBAAkB,EACnC,GAAI,EAAM,MAAM,IAAM,EAAM,IAAI,IAAK,CACjC,IAAI,EAAO,KAAK,iBAAiB,EACjC,EAAQ,WAAW,EAAK,MAAO,EAAK,KAAM,GAAI,EAC9C,MACJ,MACK,GAAI,EAAM,MAAM,OAAS,EAAM,IAAI,OAAQ,CAC5C,IAAI,EAAO,EAAQ,aAAa,CAAK,EACrC,GAAI,CAAC,QAAQ,KAAK,CAAI,EAAG,CACrB,IAAI,EAAO,KAAK,iBAAiB,EACjC,EAAQ,WAAW,EAAK,MAAO,EAAK,KAAM,GAAI,EAC9C,MACJ,CACJ,CACA,IAAI,EAAO,EAAQ,QAAQ,EAAM,MAAM,GAAG,EACtC,EAAW,EAAM,MACjB,EAAO,EAAQ,WAAW,EAC1B,EAAS,EAAQ,uBAAuB,EAAS,IAAK,EAAS,MAAM,EACzE,GAAI,KAAK,QAAQ,eAAe,EAC5B,IAAI,EAAS,EAAO,EAAS,EACzB,EAAe,EAAK,aAAa,IAAK,CAAK,MAE9C,CAED,IADA,IAAI,EAAQ,EAAS,EACd,EAAK,EAAM,MAAM,OAAS,IAAM,KAAO,GAC1C,EAAM,MAAM,SACZ,IAEJ,KAAK,UAAU,kBAAkB,CAAK,EACtC,EAAe,GACnB,CACA,OAAO,KAAK,OAAO,CAAY,CACnC,EACA,EAAO,UAAU,YAAc,UAAY,CACvC,IAAI,EAAO,KAAK,iBAAiB,EACjC,KAAK,QAAQ,WAAW,EAAK,MAAO,EAAK,KAAM,GAAI,CACvD,EACA,EAAO,UAAU,aAAe,UAAY,CACxC,IAAI,EAAY,KAAK,QAAQ,aAAa,EAC1C,KAAK,QAAQ,YAAY,EAAU,SAAS,CAAC,CACjD,EACA,EAAO,UAAU,UAAY,UAAY,CAIrC,IAAK,IAHD,EAAO,KAAK,iBAAiB,EAC7B,EAAU,KAAK,QACf,EAAQ,CAAC,EACJ,EAAI,EAAK,MAAO,GAAK,EAAK,KAAM,IACrC,EAAM,KAAK,EAAQ,QAAQ,CAAC,CAAC,EACjC,EAAM,KAAK,SAAU,EAAG,EAAG,CAKvB,OAJI,EAAE,YAAY,EAAI,EAAE,YAAY,EACzB,GACX,EAAI,EAAE,YAAY,EAAI,EAAE,YAAY,EAGxC,CAAC,EAED,IAAK,IADD,EAAc,IAAI,EAAM,EAAG,EAAG,EAAG,CAAC,EAC7B,EAAI,EAAK,MAAO,GAAK,EAAK,KAAM,IAAK,CAC1C,IAAI,EAAO,EAAQ,QAAQ,CAAC,EAC5B,EAAY,MAAM,IAAM,EACxB,EAAY,IAAI,IAAM,EACtB,EAAY,IAAI,OAAS,EAAK,OAC9B,EAAQ,QAAQ,EAAa,EAAM,EAAI,EAAK,MAAM,CACtD,CACJ,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,IAAI,EAAQ,KAAK,QAAQ,SAAS,KAAK,kBAAkB,CAAC,CAAC,GAAG,EAC1D,EAAO,KAAK,iBAAiB,EACjC,KAAK,QAAQ,QAAQ,CAAC,CAAC,mBAAmB,EAAO,KAAK,QAAS,EAAK,MAAO,EAAK,IAAI,CACxF,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,IAAI,EAAS,KAAK,kBAAkB,EAChC,EAAQ,KAAK,QAAQ,SAAS,EAAO,GAAG,EACxC,EAAQ,KAAK,kBAAkB,EACnC,KAAK,QAAQ,QAAQ,CAAC,CAAC,mBAAmB,EAAO,KAAK,QAAS,EAAO,CAAM,CAChF,EACA,EAAO,UAAU,YAAc,SAAU,EAAK,EAAQ,CAClD,IAAI,EAAY,4BAChB,EAAU,UAAY,EAEtB,IADA,IAAI,EAAI,KAAK,QAAQ,QAAQ,CAAG,EACzB,EAAU,UAAY,GAAQ,CACjC,IAAI,EAAI,EAAU,KAAK,CAAC,EACxB,GAAI,EAAE,OAAS,GAAU,EAAE,MAAQ,EAAE,EAAE,CAAC,QAAU,EAM9C,MAAO,CAJH,MAAO,EAAE,GACT,MAAO,EAAE,MACT,IAAK,EAAE,MAAQ,EAAE,EAAE,CAAC,MAEZ,CAEpB,CACA,OAAO,IACX,EACA,EAAO,UAAU,aAAe,SAAU,EAAQ,CAC9C,IAAI,EAAM,KAAK,UAAU,UAAU,CAAC,CAAC,IACjC,EAAS,KAAK,UAAU,UAAU,CAAC,CAAC,OACpC,EAAY,IAAI,EAAM,EAAK,EAAS,EAAG,EAAK,CAAM,EAClD,EAAI,KAAK,QAAQ,aAAa,CAAS,EAC3C,GAAI,CAAC,MAAM,WAAW,CAAC,CAAC,GAAK,SAAS,CAAC,EAAG,CACtC,IAAI,EAAK,KAAK,YAAY,EAAK,CAAM,EACrC,GAAI,EAAI,CACJ,IAAI,EAAK,EAAG,MAAM,QAAQ,GAAG,GAAK,EAAI,EAAG,MAAQ,EAAG,MAAM,QAAQ,GAAG,EAAI,EAAI,EAAG,IAC5E,EAAW,EAAG,MAAQ,EAAG,MAAM,OAAS,EACxC,EAAI,WAAW,EAAG,KAAK,EAC3B,GAAc,IAAI,EACd,IAAO,EAAG,KAAO,EAAS,EAC1B,GAAmB,KAAI,EAAG,IAAM,EAAS,GAGzC,GAAmB,KAAI,EAAG,IAAM,GAEpC,GAAK,EACL,GAAc,IAAI,EAClB,IAAI,EAAM,EAAE,QAAQ,CAAQ,EACxB,EAAe,IAAI,EAAM,EAAK,EAAG,MAAO,EAAK,EAAG,GAAG,EACvD,KAAK,QAAQ,QAAQ,EAAc,CAAG,EACtC,KAAK,aAAa,EAAK,KAAK,IAAI,EAAG,MAAQ,EAAG,EAAS,EAAI,OAAS,EAAG,MAAM,MAAM,CAAC,CACxF,CACJ,MAEI,KAAK,WAAW,CAExB,EACA,EAAO,UAAU,WAAa,UAAY,CACtC,IAAI,EAAM,KAAK,UAAU,UAAU,CAAC,CAAC,IACjC,EAAS,KAAK,UAAU,UAAU,CAAC,CAAC,OACxC,KAAK,UAAU,WAAW,EAC1B,IAAI,EAAe,KAAK,gBAAgB,EACpC,EAAgB,KAAK,UAAU,aAAa,CAAC,CAAC,MAAM,OACpD,EAAY,EAAa,QAAQ,+BAAgC,KAAK,CAAC,CAAC,MAAM,IAAI,EAClF,EAAQ,EAAS,EAAgB,EACjC,EAAQ,IACR,EAAQ,GACZ,IAAI,EAAY,EAAG,EAAW,EAC1B,EAAO,KACP,EAAa,MAAM,eAAe,GAClC,EAAU,QAAQ,SAAU,EAAM,EAAG,CACjC,EAAW,EAAY,EAAK,OACxB,GAAS,GAAa,GAAS,IAC/B,EAAe,EACf,EAAK,UAAU,eAAe,EAC9B,EAAK,aAAa,EAAK,EAAY,CAAa,EAChD,EAAK,UAAU,SAAS,EAAK,EAAW,CAAa,GAEzD,EAAY,CAChB,CAAC,EAIL,IAAK,IAFD,EAAY,KAAK,iBACjB,EACK,EAAI,EAAG,EAAI,EAAU,OAAQ,IAElC,IAAK,IADD,EAAO,EAAU,GACZ,EAAI,EAAG,GAAK,EAAG,IAAK,CACzB,IAAI,EAAS,CAAC,CAAC,EACX,EAAiB,EAAa,MAAU,OAAO,WAAa,EAAK,aAAa,EAAK,EAAE,EAAI,SAAU,GAAG,CAAC,EACvG,GACsB,EAAa,MAAU,OAAO,eAAiB,EAAK,aAAa,EAAe,EAAE,EAAI,WAAY,GAAG,CACzG,IACd,EAAM,EAAa,QAAQ,IAAI,OAAO,EAAK,aAAa,EAAK,EAAE,EAAG,GAAG,EAAG,SAAU,EAAQ,CACtF,IAAI,EAAM,EAAK,GAOf,OANI,EAAO,YAAY,GAAK,EACxB,EAAM,EAAI,YAAY,EAEjB,EAAO,OAAO,CAAC,CAAC,CAAC,YAAY,GAAK,EAAO,OAAO,CAAC,IACtD,EAAM,EAAI,OAAO,EAAG,CAAC,EAAI,EAAK,EAAO,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAI,EAAI,OAAO,CAAC,GAEzE,CACX,CAAC,EACD,KAAK,OAAO,CAAG,EACf,EAAM,GAGlB,CAER,EACA,EAAO,UAAU,WAAa,SAAU,EAAK,EAAQ,CACjD,IAAI,EAAK,EAEL,EADO,KAAK,QAAQ,QAAQ,CACb,CAAC,CAAC,MAAM,4BAA4B,EACnD,EAAiB,EACjB,EAAiB,IACjB,EAAiB,GACrB,IAAI,EAAmB,EAAG,EAAkB,EAAG,EAC/C,GAAI,CACA,IAAK,IAAI,EAAc,EAAS,CAAS,EAAG,EAAgB,EAAY,KAAK,EAAG,CAAC,EAAc,KAAM,EAAgB,EAAY,KAAK,EAAG,CACrI,IAAI,EAAO,EAAc,MAEzB,GADA,EAAkB,EAAmB,EAAK,OACtC,GAAkB,GAAoB,GAAkB,GACpD,EAAK,MAAM,4BAA4B,EAAG,CAC1C,EAAQ,EAAK,QAAQ,kBAAmB,EAAE,EAC1C,KACJ,CAEJ,EAAmB,CACvB,CACJ,OACO,EAAO,CAAE,EAAM,CAAE,MAAO,CAAM,CAAG,QAChC,CACJ,GAAI,CACI,GAAiB,CAAC,EAAc,OAAS,EAAK,EAAY,SAAS,EAAG,KAAK,CAAW,CAC9F,QACQ,CAAE,GAAI,EAAK,MAAM,EAAI,KAAO,CACxC,CACA,OAAO,CACX,EACA,EAAO,UAAU,SAAW,UAAY,CACpC,IAAI,EAAS,KAAK,UAAU,UAAU,EAClC,EAAM,KAAK,WAAW,EAAO,IAAK,EAAO,MAAM,EAGnD,OAFI,GACA,OAAO,KAAK,EAAK,QAAQ,EACtB,GAAO,IAClB,EACA,EAAO,UAAU,YAAc,UAAY,CACvC,IAAI,EAAO,KAAK,iBAAiB,EACjC,KAAK,QAAQ,gBAAgB,EAAK,MAAO,EAAK,IAAI,EAClD,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,IAAI,EAAM,KAAK,UACX,EAAM,KAAK,QACX,EAAQ,EAAI,SAAS,EACrB,EAAU,EAAI,YAAY,EAC9B,GAAI,EAAM,QAAQ,EAAG,CACjB,IAAI,EAAM,EAAM,MAAM,IACtB,EAAI,eAAe,EAAK,CAAG,CAC/B,KACK,CACD,IAAI,EAAQ,EAAU,EAAM,MAAQ,EAAM,IACtC,EAAW,EAAI,OAAO,EAAO,EAAI,aAAa,CAAK,CAAC,EACxD,EAAM,MAAQ,EACd,EAAM,IAAM,EACZ,EAAI,kBAAkB,EAAO,CAAO,CACxC,CACJ,EACA,EAAO,UAAU,cAAgB,UAAY,CACzC,KAAK,WAAW,EAAG,EAAK,CAC5B,EACA,EAAO,UAAU,YAAc,UAAY,CACvC,KAAK,WAAW,GAAI,EAAK,CAC7B,EACA,EAAO,UAAU,SAAW,SAAU,EAAO,EAAY,EAAM,CAC3D,OAAO,KAAK,QAAQ,SAAS,EAAO,EAAY,CAAI,CACxD,EACA,EAAO,UAAU,YAAc,UAAY,CACvC,KAAK,WAAW,GAAI,EAAI,CAC5B,EACA,EAAO,UAAU,cAAgB,UAAY,CACzC,KAAK,WAAW,EAAG,EAAI,CAC3B,EACA,EAAO,UAAU,WAAa,SAAU,EAAK,EAAM,CAC/C,IAAI,EAAM,EACN,EAAY,KAAK,UACrB,GAAI,CAAC,EAAU,mBAAqB,KAAK,uBAAwB,CAC7D,IAAI,EAAQ,EAAU,gBAAgB,EACtC,EAAO,KAAK,iBAAiB,CAAK,EAClC,EAAQ,KAAK,QAAQ,WAAW,EAAK,MAAO,EAAK,KAAM,EAAO,EAAI,CAAG,EACjE,GAAQ,GAAO,KACf,EAAQ,GACZ,EAAM,OAAO,EAAO,CAAC,EACrB,EAAU,kBAAkB,CAAK,CACrC,KACK,CACD,IAAI,EAAS,EAAU,UAAU,OACjC,EAAU,UAAU,OAAO,KAAK,OAAO,EACvC,KAAK,uBAAyB,GAI9B,IAAK,IAHD,EAAO,EACP,EAAY,EACZ,EAAI,EAAO,OACN,EAAI,EAAG,EAAI,EAAG,IAAK,CACxB,IAAI,EAAa,EACjB,EAAO,EAAE,CAAC,OAAO,EAAM,CAAC,EACxB,EAAO,KAAK,iBAAiB,EAAO,EAAE,EAGtC,IAFA,IAAI,EAAQ,EAAK,MACb,EAAO,EAAK,KACT,EAAE,EAAI,GAAG,CACR,GACA,EAAO,EAAE,CAAC,OAAO,EAAW,CAAC,EACjC,IAAI,EAAU,KAAK,iBAAiB,EAAO,EAAE,EAGxC,GAFD,GAAQ,EAAQ,OAAS,GAEpB,CAAC,GAAQ,EAAQ,MAAQ,EAAO,EACrC,MACJ,EAAO,EAAQ,IACnB,CAKA,IAJA,IACA,EAAO,KAAK,QAAQ,WAAW,EAAO,EAAM,EAAO,EAAI,CAAG,EACtD,GAAQ,GAAO,KACf,EAAa,EAAI,GACd,GAAc,GACjB,EAAO,EAAW,CAAC,OAAO,EAAM,CAAC,EACjC,IAEC,IACD,EAAO,GACX,GAAa,CACjB,CACA,EAAU,kBAAkB,EAAU,OAAO,EAAE,EAC/C,EAAU,UAAU,OAAO,KAAK,OAAO,EACvC,KAAK,uBAAyB,EAClC,CACJ,EACA,EAAO,UAAU,iBAAmB,SAAU,EAAO,CAEjD,MADA,IAAS,GAAS,KAAK,kBAAkB,EAAA,CAAG,aAAa,EAClD,CACH,MAAO,KAAK,QAAQ,gBAAgB,EAAM,MAAM,GAAG,EACnD,KAAM,KAAK,QAAQ,cAAc,EAAM,IAAI,GAAG,CAClD,CACJ,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAkB,CAC9D,KAAK,SAAS,gBAAgB,CAAgB,CAClD,EACA,EAAO,UAAU,oBAAsB,SAAU,EAAM,CACnD,KAAK,SAAS,mBAAmB,CAAI,CACzC,EACA,EAAO,UAAU,iBAAmB,UAAY,CAC5C,KAAK,SAAS,gBAAgB,CAClC,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,SAAS,mBAAmB,CAC5C,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,SAAS,kBAAkB,CAC3C,EACA,EAAO,UAAU,aAAe,SAAU,EAAK,CAC3C,OAAQ,GAAO,KAAK,mBAAmB,GAAK,GAAO,KAAK,kBAAkB,CAC9E,EACA,EAAO,UAAU,kBAAoB,SAAU,EAAK,CAChD,OAAQ,GAAO,KAAK,SAAS,wBAAwB,GAAK,GAAO,KAAK,SAAS,uBAAuB,CAC1G,EACA,EAAO,UAAU,oBAAsB,UAAY,CAC/C,OAAO,KAAK,SAAS,mBAAmB,EAAI,KAAK,SAAS,gBAAgB,EAAI,CAClF,EACA,EAAO,UAAU,YAAc,SAAU,EAAK,EAAQ,CAClD,IAAI,EAAW,KAAK,SAChB,EAAS,KAAK,SAAS,YACvB,EAAO,EAAM,KAAK,MAAM,EAAO,OAAS,EAAO,UAAU,EACzD,IAAW,GACX,KAAK,UAAU,eAAe,UAAY,CACtC,KAAK,aAAa,EAAM,CAAC,CAC7B,CAAC,EAEI,IAAW,KAChB,KAAK,UAAU,aAAa,EAAM,CAAC,EACnC,KAAK,UAAU,eAAe,GAElC,IAAI,EAAY,EAAS,UACzB,EAAS,SAAS,EAAG,EAAO,EAAO,UAAU,EACzC,GAAU,MACV,EAAS,qBAAqB,KAAM,EAAG,EAC3C,EAAS,iBAAiB,CAAS,CACvC,EACA,EAAO,UAAU,eAAiB,UAAY,CAC1C,KAAK,YAAY,EAAG,EAAI,CAC5B,EACA,EAAO,UAAU,aAAe,UAAY,CACxC,KAAK,YAAY,GAAI,EAAI,CAC7B,EACA,EAAO,UAAU,aAAe,UAAY,CACxC,KAAK,YAAY,EAAG,EAAK,CAC7B,EACA,EAAO,UAAU,WAAa,UAAY,CACtC,KAAK,YAAY,GAAI,EAAK,CAC9B,EACA,EAAO,UAAU,eAAiB,UAAY,CAC1C,KAAK,YAAY,CAAC,CACtB,EACA,EAAO,UAAU,aAAe,UAAY,CACxC,KAAK,YAAY,EAAE,CACvB,EACA,EAAO,UAAU,YAAc,SAAU,EAAK,CAC1C,KAAK,SAAS,YAAY,CAAG,CACjC,EACA,EAAO,UAAU,aAAe,SAAU,EAAM,EAAQ,EAAS,EAAU,CACvE,KAAK,SAAS,aAAa,EAAM,EAAQ,EAAS,CAAQ,CAC9D,EACA,EAAO,UAAU,gBAAkB,UAAY,CAC3C,IAAI,EAAQ,KAAK,kBAAkB,EAC/B,EAAM,CACN,IAAK,KAAK,MAAM,EAAM,MAAM,KAAO,EAAM,IAAI,IAAM,EAAM,MAAM,KAAO,CAAC,EACvE,OAAQ,KAAK,MAAM,EAAM,MAAM,QAAU,EAAM,IAAI,OAAS,EAAM,MAAM,QAAU,CAAC,CACvF,EACA,KAAK,SAAS,YAAY,EAAK,EAAG,CACtC,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,UAAU,UAAU,CACpC,EACA,EAAO,UAAU,wBAA0B,UAAY,CACnD,OAAO,KAAK,QAAQ,yBAAyB,KAAK,kBAAkB,CAAC,CACzE,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,UAAU,SAAS,CACnC,EACA,EAAO,UAAU,UAAY,UAAY,CACrC,KAAK,UAAU,UAAU,CAC7B,EACA,EAAO,UAAU,eAAiB,UAAY,CAC1C,KAAK,UAAU,eAAe,CAClC,EACA,EAAO,UAAU,aAAe,SAAU,EAAK,EAAQ,CACnD,KAAK,UAAU,aAAa,EAAK,CAAM,CAC3C,EACA,EAAO,UAAU,qBAAuB,SAAU,EAAK,CACnD,KAAK,UAAU,qBAAqB,CAAG,CAC3C,EACA,EAAO,UAAU,eAAiB,SAAU,EAAQ,EAAQ,CACxD,IAAI,EAAS,KAAK,kBAAkB,EAChC,EAAW,IAAI,EAAc,KAAK,QAAS,EAAO,IAAK,EAAO,MAAM,EACpE,EAAY,EAAS,gBAAgB,EACrC,EAAa,EACb,GAAa,EAAU,KAAK,QAAQ,UAAU,IAAM,KACpD,EAAY,EAAS,aAAa,GAEtC,IAAI,EAAQ,GAAa,EAAS,YAAY,EACzC,KAEL,KAAI,EACA,EAAQ,GACR,EAAQ,CAAC,EACT,EAAI,EAAO,OAAS,EAAM,MAC1B,EACA,EAAW,CACX,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,GACT,EACA,EAAG,CACC,GAAI,EAAM,MAAM,MAAM,aAAa,EAC/B,MAAO,EAAI,EAAM,MAAM,QAAU,CAAC,EAAO,IAChC,KAAS,EAAM,MAAM,IAO1B,OAJA,EAAc,EAAS,EAAM,MAAM,IAAM,IAAM,EAAM,KAAK,QAAQ,SAAU,QAAQ,EAChF,MAAM,EAAM,EAAY,IACxB,EAAM,GAAe,GAEjB,EAAM,MAAM,GAApB,CACI,IAAK,IACL,IAAK,IACL,IAAK,IACD,EAAM,EAAY,GAClB,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACD,EAAM,EAAY,GACd,EAAM,KAAiB,KACvB,EAAY,UACZ,EAAQ,IAEZ,KACR,CACJ,MAEK,EAAM,KAAK,QAAQ,UAAU,IAAM,KACpC,MAAM,EAAM,EAAM,MAAM,IACxB,EAAM,EAAM,OAAS,GAErB,EAAU,QAAU,KAAO,EAAa,EACxC,EAAM,EAAM,MAAM,GAEb,EAAU,QAAU,MACzB,EAAM,EAAM,MAAM,GAElB,EAAM,EAAM,SAAW,KACvB,EAAY,MACZ,EAAQ,KAGX,IACD,EAAY,EACZ,IACA,EAAQ,EAAS,YAAY,EAC7B,EAAI,EAEZ,OAAS,GAAS,CAAC,GACd,KAEL,KAAI,EAAO,EACX,GAAI,IAAc,UACd,EAAQ,KAAK,QAAQ,gBAAgB,CAAM,EACtC,IACD,EAAQ,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,EAAI,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,EAAI,CAAC,EAClK,EAAM,EAAM,OACR,GAAU,EAAI,MAAQ,EAAO,KAAO,KAAK,IAAI,EAAI,OAAS,EAAO,MAAM,EACrE,KACF,EAAQ,KAAK,QAAQ,gBAAgB,CAAG,SAG/C,GAAI,IAAc,MAAO,CAC1B,GAAI,CAAC,GAAS,EAAM,KAAK,QAAQ,UAAU,IAAM,GAC7C,OAEJ,GADA,EAAQ,IAAI,EAAM,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,EAAG,EAAS,mBAAmB,EAAG,EAAS,sBAAsB,EAAI,CAAC,EACtJ,EAAM,QAAQ,EAAO,IAAK,EAAO,MAAM,IAAM,EAAG,CAChD,IAAI,EAAa,KAAK,QAAQ,gBAAgB,CAAM,EAChD,IACI,EAAW,QAAQ,SAAS,EAAO,IAAK,EAAO,MAAM,GACrD,EAAQ,EAAW,SACnB,EAAM,EAAM,QAGZ,EAAQ,EAAW,QACnB,AAII,EAJA,EAAW,SAAS,MAAM,MAAQ,EAAO,KAAO,EAAW,SAAS,MAAM,SACtE,EAAO,OACL,EAAM,IAEN,EAAM,OAG5B,CACA,IAAa,EAAM,KACvB,CACA,EAAM,GAAS,EAAM,QAAU,EAC3B,IACI,EACI,GAAS,EACT,KAAK,UAAU,SAAS,CAAK,EAExB,GAAS,EAAM,QAAQ,KAAK,kBAAkB,CAAC,EACpD,KAAK,eAAe,EAGpB,KAAK,UAAU,SAAS,EAAI,IAAK,EAAI,MAAM,EAI/C,KAAK,UAAU,OAAO,EAAI,IAAK,EAAI,MAAM,EAhDtC,CAjEP,CAoHR,EACA,EAAO,UAAU,SAAW,SAAU,EAAY,EAAQ,EAAS,CAC/D,KAAK,UAAU,eAAe,EAC9B,KAAK,QAAQ,OAAO,CAAE,IAAK,EAAa,EAAG,OAAQ,GAAU,CAAE,CAAC,EAChE,KAAK,qBAAuB,KAAK,oBAAoB,EACrD,KAAK,aAAa,EAAa,EAAG,GAAU,CAAC,EACxC,KAAK,kBAAkB,EAAa,CAAC,GACtC,KAAK,aAAa,EAAa,EAAG,GAAM,CAAO,CACvD,EACA,EAAO,UAAU,WAAa,SAAU,EAAK,EAAQ,CACjD,KAAK,UAAU,OAAO,EAAK,CAAM,CACrC,EACA,EAAO,UAAU,WAAa,SAAU,EAAO,CAC3C,GAAI,KAAK,UAAU,YAAY,GAAK,CAAC,KAAK,UAAU,YAAY,EAAG,CAC/D,IAAI,EAAiB,KAAK,UAAU,OAAO,YAAY,EACvD,OAAO,KAAK,qBAAqB,CAAc,CACnD,CACA,KAAK,UAAU,eAAe,EAC9B,KAAK,UAAU,aAAa,CAAC,GAAS,GAAI,CAAC,CAC/C,EACA,EAAO,UAAU,aAAe,SAAU,EAAO,CAC7C,GAAI,KAAK,UAAU,YAAY,GAAK,KAAK,UAAU,YAAY,EAAG,CAC9D,IAAI,EAAe,KAAK,UAAU,OAAO,YAAY,EACrD,OAAO,KAAK,qBAAqB,CAAY,CACjD,CACA,KAAK,UAAU,eAAe,EAC9B,KAAK,UAAU,aAAa,GAAS,EAAG,CAAC,CAC7C,EACA,EAAO,UAAU,aAAe,SAAU,EAAO,CAC7C,GAAK,KAAK,UAAU,QAAQ,EAMxB,IADA,IAAiB,EACV,KACH,KAAK,UAAU,eAAe,MAPP,CAC3B,IAAI,EAAiB,KAAK,kBAAkB,CAAC,CAAC,MAC9C,KAAK,qBAAqB,CAAc,CAC5C,CAOA,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,cAAgB,SAAU,EAAO,CAC9C,GAAK,KAAK,UAAU,QAAQ,EAMxB,IADA,IAAiB,EACV,KACH,KAAK,UAAU,gBAAgB,MAPR,CAC3B,IAAI,EAAe,KAAK,kBAAkB,CAAC,CAAC,IAC5C,KAAK,qBAAqB,CAAY,CAC1C,CAOA,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,UAAU,oBAAoB,EACnC,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,gBAAkB,UAAY,CAC3C,KAAK,UAAU,kBAAkB,EACjC,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,gBAAkB,UAAY,CAC3C,KAAK,UAAU,kBAAkB,EACjC,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,UAAU,oBAAoB,EACnC,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,UAAU,oBAAoB,EACnC,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,iBAAmB,UAAY,CAC5C,KAAK,UAAU,mBAAmB,EAClC,KAAK,eAAe,CACxB,EACA,EAAO,UAAU,QAAU,SAAU,EAAa,EAAS,CACnD,GACA,KAAK,QAAQ,IAAI,CAAO,EAC5B,IAAI,EAAQ,KAAK,QAAQ,KAAK,KAAK,OAAO,EACtC,EAAW,EAQf,OAPK,GAED,KAAK,YAAY,EAAO,CAAW,IACnC,EAAW,GAEf,KAAK,UAAU,kBAAkB,CAAK,EACtC,KAAK,SAAS,wBAAwB,EAAM,MAAO,EAAM,GAAG,EACrD,GANI,CAOf,EACA,EAAO,UAAU,WAAa,SAAU,EAAa,EAAS,CACtD,GACA,KAAK,QAAQ,IAAI,CAAO,EAE5B,IAAI,EAAS,KAAK,QAAQ,QAAQ,KAAK,OAAO,EAC1C,EAAW,EACf,GAAI,CAAC,EAAO,OACR,OAAO,EACX,IAAI,EAAY,KAAK,kBAAkB,EACvC,KAAK,UAAU,OAAO,EAAG,CAAC,EAC1B,IAAK,IAAI,EAAI,EAAO,OAAS,EAAG,GAAK,EAAG,EAAE,EAClC,KAAK,YAAY,EAAO,GAAI,CAAW,GACvC,IAIR,OADA,KAAK,UAAU,kBAAkB,CAAS,EACnC,CACX,EACA,EAAO,UAAU,YAAc,SAAU,EAAO,EAAa,CACzD,IAAI,EAAQ,KAAK,QAAQ,aAAa,CAAK,EAOvC,MANJ,GAAc,KAAK,QAAQ,QAAQ,EAAO,CAAW,EACjD,IAAgB,KAKT,MAJP,EAAM,IAAM,KAAK,QAAQ,QAAQ,EAAO,CAAW,EAC5C,EAKf,EACA,EAAO,UAAU,qBAAuB,UAAY,CAChD,OAAO,KAAK,QAAQ,WAAW,CACnC,EACA,EAAO,UAAU,KAAO,SAAU,EAAQ,EAAS,EAAS,CACxD,AACI,IAAU,CAAC,EACX,OAAO,GAAU,UAAY,aAAkB,OAC/C,EAAQ,OAAS,EACZ,OAAO,GAAU,UACtB,EAAI,MAAM,EAAS,CAAM,EAC7B,IAAI,EAAQ,KAAK,UAAU,SAAS,EAChC,EAAQ,SACR,EAAS,KAAK,QAAQ,aAAa,CAAK,GACjC,KAAK,QAAQ,SAAS,OAC7B,AAEI,KADA,EAAQ,KAAK,QAAQ,aAAa,EAAM,MAAM,IAAK,EAAM,MAAM,MAAM,EAC5D,KAAK,QAAQ,aAAa,CAAK,GAE5C,KAAK,QAAQ,IAAI,CAAU,QAAO,CAAC,GAEvC,KAAK,QAAQ,IAAI,CAAO,EACnB,EAAQ,OACT,KAAK,QAAQ,IAAI,CAAE,MAAO,CAAM,CAAC,EACrC,IAAI,EAAW,KAAK,QAAQ,KAAK,KAAK,OAAO,EAC7C,GAAI,EAAQ,cACR,OAAO,EACX,GAAI,EAEA,OADA,KAAK,YAAY,EAAU,CAAO,EAC3B,EAEP,EAAQ,UACR,EAAM,MAAQ,EAAM,IAEpB,EAAM,IAAM,EAAM,MACtB,KAAK,UAAU,SAAS,CAAK,CACjC,EACA,EAAO,UAAU,SAAW,SAAU,EAAS,EAAS,CACpD,KAAK,KAAK,CAAE,YAAa,GAAM,UAAW,EAAM,EAAG,EAAS,CAAO,CACvE,EACA,EAAO,UAAU,aAAe,SAAU,EAAS,EAAS,CACxD,KAAK,KAAK,EAAS,CAAE,YAAa,GAAM,UAAW,EAAK,EAAG,CAAO,CACtE,EACA,EAAO,UAAU,YAAc,SAAU,EAAO,EAAS,CACrD,KAAK,QAAQ,OAAO,CAAK,EACzB,KAAK,UAAU,kBAAkB,CAAK,EACtC,IAAI,EAAY,KAAK,SAAS,UAC9B,KAAK,SAAS,wBAAwB,EAAM,MAAO,EAAM,IAAK,EAAG,EAC7D,IAAY,IACZ,KAAK,SAAS,iBAAiB,CAAS,CAChD,EACA,EAAO,UAAU,KAAO,UAAY,CAChC,KAAK,QAAQ,eAAe,CAAC,CAAC,KAAK,KAAK,OAAO,EAC/C,KAAK,SAAS,qBAAqB,KAAM,EAAG,CAChD,EACA,EAAO,UAAU,KAAO,UAAY,CAChC,KAAK,QAAQ,eAAe,CAAC,CAAC,KAAK,KAAK,OAAO,EAC/C,KAAK,SAAS,qBAAqB,KAAM,EAAG,CAChD,EACA,EAAO,UAAU,QAAU,UAAY,CACnC,KAAK,UAAY,GACjB,AAII,KAAK,cAHL,KAAK,WAAW,QAAQ,SAAU,EAAI,CAClC,EAAG,QAAQ,CACf,CAAC,EACiB,CAAC,GAEnB,KAAK,eACL,KAAK,cAAc,QAAQ,EAC/B,KAAK,SAAS,QAAQ,EACtB,KAAK,QAAQ,UAAW,IAAI,EACxB,KAAK,SACL,KAAK,QAAQ,QAAQ,EACrB,KAAK,kBACL,KAAK,iBAAiB,OAAO,EACjC,KAAK,mBAAmB,CAC5B,EACA,EAAO,UAAU,4BAA8B,SAAU,EAAQ,CACxD,KAEL,KAAI,EACA,EAAO,KACP,EAAe,GACnB,AACI,KAAK,gBAAgB,SAAS,cAAc,KAAK,EACrD,IAAI,EAAe,KAAK,cACxB,EAAa,MAAM,QAAU,oBAC7B,KAAK,UAAU,aAAa,EAAc,KAAK,UAAU,UAAU,EACnE,IAAI,EAAoB,KAAK,GAAG,kBAAmB,UAAY,CAC3D,EAAe,EACnB,CAAC,EACG,EAAiB,KAAK,SAAS,GAAG,eAAgB,UAAY,CAC1D,IACA,EAAO,EAAK,SAAS,UAAU,sBAAsB,EAC7D,CAAC,EACG,EAAgB,KAAK,SAAS,GAAG,cAAe,UAAY,CAC5D,GAAI,GAAgB,IAAS,EAAK,UAAU,GACrC,EAAK,WAAa,EAAK,UAAU,UAAU,GAAI,CAClD,IAAI,EAAW,EAAK,SAChB,EAAM,EAAS,aAAa,UAC5B,EAAS,EAAS,YAClB,EAAM,EAAI,IAAM,EAAO,OAC3B,AAQI,EARA,EAAI,KAAO,GAAK,EAAM,EAAK,IAAM,EAClB,GAEV,EAAI,IAAM,EAAO,QACtB,EAAI,IAAM,EAAK,IAAM,EAAO,WAAa,OAAO,YACjC,GAGA,KAEf,GAAgB,OAChB,EAAa,MAAM,IAAM,EAAM,KAC/B,EAAa,MAAM,KAAO,EAAI,KAAO,KACrC,EAAa,MAAM,OAAS,EAAO,WAAa,KAChD,EAAa,eAAe,CAAY,GAE5C,EAAe,EAAO,IAC1B,CACJ,CAAC,EACD,KAAK,4BAA8B,SAAU,EAAQ,CAC7C,IAEJ,OAAO,KAAK,4BACZ,KAAK,IAAI,kBAAmB,CAAiB,EAC7C,KAAK,SAAS,IAAI,cAAe,CAAa,EAC9C,KAAK,SAAS,IAAI,eAAgB,CAAc,EACpD,CAhDI,CAiDR,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,IAAI,EAAQ,KAAK,cAAgB,MAC7B,EAAc,KAAK,SAAS,aAC3B,IAEL,EAAY,kBAAkB,SAAS,KAAK,CAAK,CAAC,EAClD,EAAY,WAAa,CAAC,KAAK,WAAa,GAAS,OACrD,EAAI,YAAY,EAAY,QAAS,mBAAoB,OAAO,KAAK,CAAK,CAAC,EAC/E,EACA,EAAO,UAAU,OAAS,SAAU,EAAS,EAAS,EAAU,CAC5D,IAAI,EAAS,KACb,EAAO,WAAW,iBAAkB,SAAU,EAAQ,CAClD,EAAO,OAAO,EAAQ,EAAS,EAAS,CAAQ,CACpD,CAAC,CACL,EACA,OAAO,eAAe,EAAO,UAAW,eAAgB,CACpD,IAAK,UAAY,CACb,MAAO,CAAuB,KAAK,gBAAgB,IAAI,EAAa,KAAK,SAAS,CACtF,EACA,IAAK,SAAU,EAAO,CACd,KAAK,eACL,KAAK,cAAc,QAAQ,EAC/B,KAAK,cAAgB,CACzB,EACA,WAAY,GACZ,aAAc,EAClB,CAAC,EACM,CACX,EAAE,EACF,EAAO,KAAO,EACd,EAAO,UAAU,MAAQ,KACzB,EAAO,UAAU,OAAS,CAAC,EAC3B,EAAO,UAAU,mBAAqB,CAAC,YAAa,MAAO,cAAc,EACzE,EAAO,UAAU,iBAAmB,CAChC,CAAC,QAAS,MAAM,EAChB,CAAC,OAAQ,OAAO,EAChB,CAAC,MAAO,IAAI,EACZ,CAAC,QAAS,QAAQ,EAClB,CAAC,MAAO,QAAQ,EAChB,CAAC,QAAS,MAAM,EAChB,CAAC,KAAM,KAAK,EACZ,CAAC,IAAK,GAAG,EACT,CAAC,MAAO,KAAK,EACb,CAAC,MAAO,KAAK,EACb,CAAC,aAAc,UAAU,EACzB,CAAC,OAAQ,MAAM,EACf,CAAC,MAAO,QAAQ,EAChB,CAAC,KAAM,MAAM,EACb,CAAC,SAAU,OAAO,EAClB,CAAC,OAAQ,KAAK,EACd,CAAC,KAAM,KAAK,EACZ,CAAC,SAAU,SAAS,EACpB,CAAC,OAAQ,UAAU,EACnB,CAAC,WAAY,UAAU,EACvB,CAAC,SAAU,QAAQ,EACnB,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,IAAI,CACf,EACA,EAAI,UAAU,EAAO,UAAW,CAAY,EAC5C,EAAO,cAAc,EAAO,UAAW,SAAU,CAC7C,eAAgB,CACZ,IAAK,SAAU,EAAO,CAClB,KAAK,kBAAkB,EACvB,KAAK,QAAQ,uBAAwB,CAAE,KAAM,CAAM,CAAC,CACxD,EACA,aAAc,MAClB,EACA,oBAAqB,CACjB,IAAK,UAAY,CAAE,KAAK,2BAA2B,CAAG,EACtD,aAAc,EAClB,EACA,sBAAuB,CACnB,IAAK,SAAU,EAAiB,CAAE,KAAK,mBAAmB,CAAG,EAC7D,aAAc,EAClB,EACA,SAAU,CACN,IAAK,SAA8B,EAAU,CACzC,IAAI,EAAQ,KACZ,QAAK,UAAU,YAAY,CAAQ,EAC/B,MAAK,UAGT,CADA,KAAK,kBAAkB,EACvB,AACI,KAAK,oBAAoB,SAAU,EAAG,CAClC,IAAI,EAAa,GACjB,GAAI,GAAK,EAAE,MAAQ,UAMf,IALI,GAAK,EAAE,KAAO,CAAC,EAAE,SAAW,CAAC,EAAE,UAC3B,EAAE,KAAO,KACT,EAAE,eAAe,EACrB,EAAa,EAAE,IAAI,QAAU,GAE7B,CAAC,EACD,MAAA,MAEC,GAAK,EAAE,OAAS,SACrB,EAAa,IAEjB,GAAI,EAAY,CACZ,IAAI,EAAU,EAAI,cAAc,KAAK,EACrC,EAAQ,YAAc,EAAI,iCAAkC,qBAAqB,EAC5E,EAAM,aAAa,QACpB,EAAM,aAAa,aAAa,EAAO,EAAM,kBAAkB,EAAG,CAAO,CAEjF,MACS,EAAM,cAAgB,EAAM,aAAa,QAC9C,EAAM,aAAa,KAAK,CAEhC,EAEJ,IAAI,EAAW,KAAK,UAAU,WAAW,EACrC,GACA,EAAM,YAAY,EAAU,UAAW,KAAK,kBAAmB,IAAI,EACnE,KAAK,SAAS,GAAG,OAAQ,KAAK,iBAAiB,EAC/C,KAAK,SAAS,GAAG,qBAAsB,KAAK,iBAAiB,IAG7D,EAAM,eAAe,EAAU,UAAW,KAAK,iBAAiB,EAChE,KAAK,SAAS,IAAI,OAAQ,KAAK,iBAAiB,EAChD,KAAK,SAAS,IAAI,qBAAsB,KAAK,iBAAiB,EAX9D,CAaR,EACA,aAAc,EAClB,EACA,uBAAwB,CACpB,IAAK,SAAU,EAAO,CAClB,KAAK,UAAU,0BAA0B,CAAK,CAClD,EACA,aAAc,EAClB,EACA,YAAa,CACT,IAAK,SAAU,EAAK,CAAE,KAAK,kBAAkB,CAAG,EAChD,OAAQ,CAAC,MAAO,OAAQ,SAAU,MAAM,EACxC,aAAc,KAClB,EACA,gBAAiB,CACb,OAAQ,CAAC,GAAO,GAAM,QAAQ,EAC9B,aAAc,EAClB,EACA,kBAAmB,CAAE,aAAc,EAAK,EACxC,sBAAuB,CAAE,aAAc,EAAK,EAC5C,iBAAkB,CAAE,aAAc,EAAK,EACvC,yBAA0B,CACtB,IAAK,SAAU,EAAK,CAAE,KAAK,4BAA4B,CAAG,CAAG,CACjE,EACA,gBAAiB,CACb,IAAK,SAAU,EAAK,CAAE,KAAK,mBAAmB,CAAG,CAAG,EACpD,IAAK,UAAY,CAAE,OAAO,KAAK,aAAe,EAC9C,WAAY,EAChB,EACA,MAAO,CACH,IAAK,SAAU,EAAK,CAAE,KAAK,QAAQ,SAAS,CAAG,CAAG,EAClD,IAAK,UAAY,CAAE,OAAO,KAAK,SAAS,CAAG,EAC3C,WAAY,GACZ,OAAQ,EACZ,EACA,QAAS,CACL,IAAK,SAAU,EAAK,CAAE,KAAK,WAAW,CAAG,CAAG,EAC5C,IAAK,UAAY,CAAE,OAAO,KAAK,OAAS,EACxC,WAAY,GACZ,OAAQ,EACZ,EACA,gBAAiB,CACb,IAAK,SAAU,EAAM,CACjB,KAAK,SAAS,aAAa,mBAAmB,CAAI,EAClD,KAAK,SAAS,MAAM,SAAS,KAAK,SAAS,aAAa,EACpD,GAAQ,KAAK,qBACb,EAAuB,OAAO,IAAI,EAElC,EAAuB,OAAO,IAAI,CAC1C,EACA,aAAc,EAClB,EACA,oBAAqB,CACjB,IAAK,SAAU,EAAO,CACd,KAAK,kBAAoB,EACzB,EAAuB,OAAO,IAAI,EAElC,EAAuB,OAAO,IAAI,CAC1C,CACJ,EACA,YAAa,CACT,IAAK,SAAU,EAAS,CACf,KAAK,qBACN,KAAK,mBAAqB,UAAY,CAClC,IAAI,EAAW,KAAK,UAAY,KAAK,SAAS,cAC1C,KAAK,QAAQ,UAAU,EAAI,GAAK,KAAK,QAAQ,QAAQ,CAAC,CAAC,CAAC,OAAS,GACrE,GAAI,GAAY,KAAK,SAAS,gBAC1B,KAAK,SAAS,IAAI,cAAe,KAAK,kBAAkB,EACxD,EAAI,eAAe,KAAK,UAAW,oBAAoB,EACvD,KAAK,SAAS,gBAAgB,OAAO,EACrC,KAAK,SAAS,gBAAkB,UAE/B,GAAI,CAAC,GAAY,CAAC,KAAK,SAAS,gBAAiB,CAClD,KAAK,SAAS,GAAG,cAAe,KAAK,kBAAkB,EACvD,EAAI,YAAY,KAAK,UAAW,oBAAoB,EACpD,IAAI,EAAK,EAAI,cAAc,KAAK,EAChC,EAAG,UAAY,kBACf,EAAG,YAAc,KAAK,cAAgB,GACtC,KAAK,SAAS,gBAAkB,EAChC,KAAK,SAAS,QAAQ,YAAY,KAAK,SAAS,eAAe,CACnE,KACS,CAAC,GAAY,KAAK,SAAS,kBAChC,KAAK,SAAS,gBAAgB,YAAc,KAAK,cAAgB,GAEzE,EAAE,KAAK,IAAI,EACX,KAAK,GAAG,QAAS,KAAK,kBAAkB,GAE5C,KAAK,mBAAmB,CAC5B,CACJ,EACA,4BAA6B,CACzB,IAAK,SAAU,EAAO,CAClB,IAAI,EAAc,CACd,KAAM,gBACN,YAAa,wEACb,QAAS,MACT,KAAM,SAAU,EAAQ,CACpB,EAAO,KAAK,EACZ,EAAO,SAAS,SAAS,MAAM,CACnC,EACA,SAAU,EACd,EACI,EAAoB,SAAU,EAAG,CACjC,GAAI,EAAE,QAAU,KAAK,SAAS,UAAY,EAAE,UAAY,EAAK,MAAU,CACnE,EAAE,eAAe,EACjB,IAAI,EAAM,KAAK,kBAAkB,CAAC,CAAC,IAC9B,KAAK,aAAa,CAAG,GACtB,KAAK,aAAa,EAAK,GAAM,EAAI,EACrC,KAAK,MAAM,CACf,CACJ,EACI,EACA,GACA,KAAK,SAAS,4BAA8B,GAC5C,KAAK,SAAS,uBAAyB,qBACvC,KAAK,UAAU,WAAW,CAAC,CAAC,aAAa,WAAY,EAAE,EACvD,KAAK,UAAU,sBAAsB,EAAU,MAAQ,EAAI,CAAC,EAC5D,KAAK,SAAS,SAAS,aAAa,WAAY,CAAC,EACjD,KAAK,SAAS,SAAS,aAAa,OAAQ,OAAO,EACnD,KAAK,SAAS,SAAS,aAAa,uBAAwB,EAAI,uCAAwC,QAAQ,CAAC,EACjH,KAAK,SAAS,SAAS,UAAU,IAAI,KAAK,SAAS,sBAAsB,EACzE,KAAK,SAAS,SAAS,aAAa,aAAc,EAAI,6BAA8B,oEAAoE,CAAC,EACzJ,KAAK,SAAS,SAAS,iBAAiB,QAAS,EAAkB,KAAK,IAAI,CAAC,EAC7E,KAAK,SAAS,WAAW,CAAW,EACpC,KAAK,SAAS,QAAQ,aAAa,WAAY,CAAC,EAChD,KAAK,SAAS,QAAQ,aAAa,cAAe,EAAK,EACvD,KAAK,SAAS,QAAQ,aAAa,OAAQ,OAAO,EAClD,KAAK,SAAS,QAAQ,aAAa,uBAAwB,EAAI,qCAAsC,eAAe,CAAC,EACrH,KAAK,SAAS,QAAQ,aAAa,aAAc,EAAI,2BAA4B,6FAA6F,CAAC,EAC/K,KAAK,SAAS,QAAQ,UAAU,IAAI,KAAK,SAAS,sBAAsB,EACxE,KAAK,SAAS,QAAQ,aAAa,cAAe,EAAI,EACtD,AACI,IAAwB,IAAI,EAAsB,IAAI,EAC1D,EAAsB,YAAY,EAClC,KAAK,UAAU,eAAe,CAC1B,SAAU,EACd,CAAC,IAGD,KAAK,SAAS,4BAA8B,GAC5C,KAAK,UAAU,WAAW,CAAC,CAAC,aAAa,WAAY,CAAC,EACtD,KAAK,UAAU,sBAAsB,CAAC,EACtC,KAAK,SAAS,SAAS,aAAa,WAAY,EAAE,EAClD,KAAK,SAAS,SAAS,gBAAgB,MAAM,EAC7C,KAAK,SAAS,SAAS,gBAAgB,sBAAsB,EAC7D,KAAK,SAAS,SAAS,UAAU,OAAO,KAAK,SAAS,sBAAsB,EAC5E,KAAK,SAAS,SAAS,gBAAgB,YAAY,EACnD,KAAK,SAAS,SAAS,oBAAoB,QAAS,EAAkB,KAAK,IAAI,CAAC,EAChF,KAAK,SAAS,cAAc,CAAW,EACvC,KAAK,SAAS,QAAQ,gBAAgB,aAAa,EACnD,KAAK,SAAS,QAAQ,aAAa,WAAY,EAAE,EACjD,KAAK,SAAS,QAAQ,aAAa,cAAe,EAAI,EACtD,KAAK,SAAS,QAAQ,gBAAgB,MAAM,EAC5C,KAAK,SAAS,QAAQ,gBAAgB,sBAAsB,EAC5D,KAAK,SAAS,QAAQ,gBAAgB,YAAY,EAClD,KAAK,SAAS,QAAQ,UAAU,OAAO,KAAK,SAAS,sBAAsB,EACvE,GACA,EAAsB,eAAe,EAEjD,EACA,aAAc,EAClB,EACA,mBAAoB,CAChB,IAAK,SAAU,EAAK,CAAE,KAAK,oBAAsB,CAAK,EACtD,aAAc,EAClB,EACA,iBAAkB,CACd,IAAK,SAAU,EAAK,CAAE,KAAK,kBAAoB,CAAK,EACpD,aAAc,EAClB,EACA,gBAAiB,WACjB,wBAAyB,WACzB,wBAAyB,WACzB,oBAAqB,WACrB,eAAgB,WAChB,eAAgB,WAChB,gBAAiB,WACjB,kBAAmB,WACnB,YAAa,WACb,gBAAiB,WACjB,gBAAiB,WACjB,oBAAqB,WACrB,sBAAuB,WACvB,WAAY,WACZ,SAAU,WACV,WAAY,WACZ,SAAU,WACV,SAAU,WACV,cAAe,WACf,iBAAkB,WAClB,MAAO,WACP,iBAAkB,WAClB,eAAgB,WAChB,kBAAmB,WACnB,kBAAmB,WACnB,kBAAmB,WACnB,sBAAuB,WACvB,YAAa,gBACb,UAAW,gBACX,YAAa,gBACb,aAAc,gBACd,gBAAiB,UACjB,UAAW,UACX,YAAa,UACb,UAAW,UACX,YAAa,UACb,uBAAwB,UACxB,QAAS,UACT,KAAM,UACN,iBAAkB,UAClB,UAAW,UACX,KAAM,SACV,CAAC,EACD,IAAI,EAAyB,CACzB,QAAS,SAAkC,EAA4B,EAAK,CACxE,OAAQ,KAAK,IAAI,EAAQ,UAAU,KAAK,IAAM,CAAG,GAAM,EAAM,GAAK,EAAM,EAAI,IAAS,KAAQ,EACjG,EACA,SAAU,SAAU,EAA4B,EAAgB,EAAQ,CACpE,OAAO,KAAK,IAAI,EAAe,SAAS,CAAC,CAAC,QAAS,EAAO,QAAU,EAAA,CAAG,SAAS,CAAC,CAAC,OAAQ,CAAC,EAAI,EAAO,cAC1G,EACA,OAAQ,SAAU,EAAsB,EAAQ,CAC5C,EAAO,SAAS,MAAM,SAAS,EAAO,SAAS,aAAa,CAChE,EACA,OAAQ,SAA6B,EAAQ,CACzC,EAAO,SAAS,aAAa,UAAY,KACzC,EAAO,GAAG,kBAAmB,KAAK,MAAM,EACxC,KAAK,OAAO,KAAM,CAAM,CAC5B,EACA,OAAQ,SAA6B,EAAQ,CACrC,EAAO,SAAS,aAAa,WAAa,OAC1C,EAAO,SAAS,aAAa,UAAY,MAC7C,EAAO,IAAI,kBAAmB,KAAK,MAAM,EACzC,KAAK,OAAO,KAAM,CAAM,CAC5B,CACJ,EACA,EAAQ,OAAS,CAEjB,CAAC,EAED,IAAI,OAAO,kBAAkB,CAAC,UAAU,UAAU,SAAS,aAAa,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC9G,IAAI,EAAM,EAAQ,YAAY,EAmG9B,EAAQ,MAlGmB,UAAY,CACnC,SAAS,EAAM,EAAS,EAAc,CAClC,KAAK,QAAU,EACf,KAAK,aAAe,GAAgB,IACpC,KAAK,QAAQ,MAAM,OAAU,KAAK,aAAe,EAAK,KACtD,KAAK,MAAQ,CAAC,EACd,KAAK,UAAY,CAAC,EAClB,KAAK,mBAAqB,CAC9B,CAwFA,MAvFA,GAAM,UAAU,cAAgB,SAAU,EAAQ,CAC9C,EAAI,UAAU,KAAK,QAAS,EAAG,EAAG,EAAO,eAAiB,EAAO,WAAc,KAAK,cAAgB,EAAO,OAAS,KAAK,kBAAkB,CAC/I,EACA,EAAM,UAAU,YAAc,SAAU,EAAW,EAAW,CAC1D,OAAQ,KAAK,MAAO,EAAU,eAAiB,EAAU,WAAc,KAAK,YAAY,IACpF,KAAK,MAAO,EAAU,eAAiB,EAAU,WAAc,KAAK,YAAY,CACxF,EACA,EAAM,UAAU,eAAiB,SAAU,EAAK,EAAQ,EAAS,CAC7D,IAAI,EAAY,EAAO,eAAiB,EAAO,WAC3C,EAAa,KAAK,MAAM,EAAY,KAAK,YAAY,EAEzD,OADc,EAAQ,oBAAoB,EAAK,CAAC,EAAI,EAAO,WACzC,EAAa,KAAK,YACxC,EACA,EAAM,UAAU,kBAAoB,SAAU,EAAK,EAAQ,EAAS,CAChE,OAAO,EAAO,WAAa,EAAQ,gBAAgB,CAAG,CAC1D,EACA,EAAM,UAAU,UAAY,UAAY,CACpC,OAAO,KAAK,MAAM,MACtB,EACA,EAAM,UAAU,IAAM,SAAU,EAAO,CACnC,OAAO,KAAK,MAAM,EACtB,EACA,EAAM,UAAU,MAAQ,UAAY,CAChC,KAAK,WAAW,KAAK,MAAM,MAAM,CAAC,CACtC,EACA,EAAM,UAAU,IAAM,UAAY,CAC9B,KAAK,WAAW,KAAK,MAAM,IAAI,CAAC,CACpC,EACA,EAAM,UAAU,KAAO,SAAU,EAAM,CACnC,GAAI,MAAM,QAAQ,CAAI,EAAG,CACrB,KAAK,MAAM,KAAK,MAAM,KAAK,MAAO,CAAI,EAEtC,IAAK,IADD,EAAW,EAAI,eAAe,KAAK,OAAO,EACrC,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC7B,EAAS,YAAY,EAAK,EAAE,CAAC,OAAO,EAExC,KAAK,QAAQ,YAAY,CAAQ,CACrC,MAEI,KAAK,MAAM,KAAK,CAAI,EACpB,KAAK,QAAQ,YAAY,EAAK,OAAO,CAE7C,EACA,EAAM,UAAU,QAAU,SAAU,EAAM,CACtC,GAAI,MAAM,QAAQ,CAAI,EAAG,CACrB,KAAK,MAAM,QAAQ,MAAM,KAAK,MAAO,CAAI,EAEzC,IAAK,IADD,EAAW,EAAI,eAAe,KAAK,OAAO,EACrC,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC7B,EAAS,YAAY,EAAK,EAAE,CAAC,OAAO,EAEpC,KAAK,QAAQ,WACb,KAAK,QAAQ,aAAa,EAAU,KAAK,QAAQ,UAAU,EAE3D,KAAK,QAAQ,YAAY,CAAQ,CACzC,MAEI,KAAK,MAAM,QAAQ,CAAI,EACvB,KAAK,QAAQ,sBAAsB,aAAc,EAAK,OAAO,CAErE,EACA,EAAM,UAAU,KAAO,UAAY,CAI3B,OAHA,KAAK,MAAM,OACJ,KAAK,MAAM,KAAK,MAAM,OAAS,GAE/B,IACf,EACA,EAAM,UAAU,WAAa,SAAU,EAAM,CACpC,IAEL,EAAK,QAAQ,OAAO,EACpB,KAAK,UAAU,KAAK,CAAI,EAC5B,EACA,EAAM,UAAU,WAAa,SAAU,EAAK,EAAQ,EAAS,EAAa,CACtE,IAAI,EAAO,KAAK,UAAU,IAAI,EAC9B,GAAI,CAAC,EAAM,CACP,IAAI,EAAU,EAAI,cAAc,KAAK,EACjC,GACA,EAAY,CAAO,EACvB,KAAK,QAAQ,YAAY,CAAO,EAChC,EAAO,CACM,UACT,KAAM,GACD,KACT,CACJ,CAEA,MADA,GAAK,IAAM,EACJ,CACX,EACO,CACX,EACoB,CAEpB,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,wBAAwB,kBAAkB,YAAY,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACnM,IAAI,EAAM,EAAQ,YAAY,EAC1B,EAAM,EAAQ,YAAY,EAC1B,EAAO,EAAQ,aAAa,EAC5B,EAAe,EAAQ,sBAAsB,CAAC,CAAC,aAC/C,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAM,EAAQ,WAAW,CAAC,CAAC,IAC3B,EAAwB,UAAY,CACpC,SAAS,EAAO,EAAU,CACtB,KAAK,kBAAoB,KACzB,KAAK,QAAU,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,6BACzB,EAAS,YAAY,KAAK,OAAO,EACjC,KAAK,mBAAmB,KAAK,gBAAgB,EAC7C,KAAK,YAAc,EACnB,KAAK,aAAe,CAAC,EACrB,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,OAAS,IAAI,EAAM,KAAK,OAAO,EACpC,KAAK,OAAO,mBAAqB,CACrC,CA0iBA,MAziBA,GAAO,UAAU,WAAa,SAAU,EAAS,CACzC,KAAK,SACL,KAAK,QAAQ,IAAI,SAAU,KAAK,kBAAkB,EACtD,KAAK,QAAU,EACX,GACA,EAAQ,GAAG,SAAU,KAAK,kBAAkB,CACpD,EACA,EAAO,UAAU,oBAAsB,SAAU,EAAK,EAAW,CACzD,OAAO,SACP,QAAQ,MAAQ,QAAQ,KAAK,4CAA4C,EAC7E,KAAK,QAAQ,oBAAoB,EAAK,CAAS,CACnD,EACA,EAAO,UAAU,uBAAyB,SAAU,EAAK,EAAW,CAC5D,OAAO,SACP,QAAQ,MAAQ,QAAQ,KAAK,+CAA+C,EAChF,KAAK,QAAQ,uBAAuB,EAAK,CAAS,CACtD,EACA,EAAO,UAAU,eAAiB,SAAU,EAAa,CACrD,KAAK,aAAe,CAAC,EACrB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,OAAQ,IAAK,CACzC,IAAI,EAAa,EAAY,GACzB,EAAM,EAAW,IACjB,EAAU,KAAK,aAAa,GAChC,AACI,IAAU,KAAK,aAAa,GAAO,CAAE,KAAM,CAAC,EAAG,KAAM,CAAC,EAAG,YAAa,CAAC,CAAE,EAC7E,IAAI,EAAW,EAAW,KACtB,EAAkB,EAAW,KAC7B,EAAW,EAAW,KAC1B,EAAW,EAAW,EAAK,WAAW,CAAQ,EAAI,EAAW,MAAQ,GACrE,EAAkB,GAAoC,EAAW,MAAQ,GACrE,EAAQ,KAAK,QAAQ,CAAQ,IAAM,KACnC,EAAQ,KAAK,KAAK,CAAQ,EAC1B,EAAQ,KAAK,KAAK,CAAQ,EAC1B,EAAQ,YAAY,KAAK,CAAe,GAE5C,IAAI,EAAY,EAAW,UACvB,EACA,EAAQ,UAAY,EAEf,IAAa,QAClB,EAAQ,UAAY,aAEf,IAAa,YAAc,CAAC,gBAAgB,KAAK,EAAQ,SAAS,EACvE,EAAQ,UAAY,gBAEf,IAAa,WAAa,CAAC,2BAA2B,KAAK,EAAQ,SAAS,EACjF,EAAQ,UAAY,eAEf,IAAa,QAAU,CAAC,EAAQ,UACrC,EAAQ,UAAY,YAEf,IAAa,QAAU,CAAC,EAAQ,YACrC,EAAQ,UAAY,YAE5B,CACJ,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAO,CAC9C,QAAK,aAAa,OAEvB,KAAI,EAAW,EAAM,MAAM,IACvB,EAAM,EAAM,IAAI,IAAM,EAC1B,GAAI,IAAQ,EAEP,GAAI,EAAM,QAAU,SACrB,KAAK,aAAa,OAAO,EAAU,EAAM,EAAG,IAAI,MAE/C,CACD,IAAI,EAAW,MAAM,EAAM,CAAC,EAC5B,EAAK,QAAQ,EAAU,CAAC,EACxB,KAAK,aAAa,OAAO,MAAM,KAAK,aAAc,CAAI,CAC1D,CAX2B,CAY/B,EACA,EAAO,UAAU,OAAS,SAAU,EAAQ,CACxC,KAAK,OAAS,EACd,IAAI,EAAU,KAAK,QACf,EAAW,EAAO,SAClB,EAAU,KAAK,IAAI,EAAO,QAAU,EAAO,aAC/C,EAAQ,UAAU,EAAI,CAAC,EACvB,KAAK,WAAa,EAClB,KAAK,OAAS,EACd,KAAK,OAAO,cAAc,CAAM,EAChC,KAAK,iBAAiB,EAMtB,IALA,IAAI,EAAO,EAAQ,gBAAgB,CAAQ,EACvC,EAAY,EAAO,EAAK,MAAM,IAAM,IACpC,EAAO,KACP,EAAQ,GACR,EAAM,IACG,CAMT,GALI,EAAM,IACN,EAAM,EAAK,IAAI,IAAM,EACrB,EAAO,EAAQ,gBAAgB,EAAK,CAAI,EACxC,EAAY,EAAO,EAAK,MAAM,IAAM,KAEpC,EAAM,EAAS,CACf,KAAO,KAAK,OAAO,UAAU,EAAI,EAAQ,GACrC,KAAK,OAAO,IAAI,EACpB,KACJ,CACA,EAAO,KAAK,OAAO,IAAI,EAAE,CAAK,EAC1B,EACA,EAAK,IAAM,GAGX,EAAO,KAAK,OAAO,WAAW,EAAK,EAAQ,KAAK,QAAS,CAAY,EACrE,KAAK,OAAO,KAAK,CAAI,GAEzB,KAAK,YAAY,EAAM,EAAQ,EAAM,CAAG,EACxC,GACJ,CACA,KAAK,QAAQ,aAAa,EAC1B,KAAK,mBAAmB,CAAM,EAC1B,KAAK,mBAAqB,KAAK,sBAC/B,KAAK,oBAAoB,CACjC,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAQ,CACpD,IAAI,EAAU,KAAK,QACf,EAAiB,EAAQ,gBAAkB,KAAK,UAChD,EAAkB,EAAQ,iBAC1B,EAAe,KAAK,OAAO,KAAK,EAAI,KAAK,OAAO,KAAK,CAAC,CAAC,KAAO,IAC9D,KAAK,aAAe,EAAQ,gBAC5B,EAAe,EAAQ,UAAU,EAAI,EAAkB,GAC3D,IAAI,EAAc,EACZ,EAAe,SAAS,EAAS,EAAc,CAAM,EACrD,EAAa,SAAS,CAAC,CAAC,OAAS,EAAO,eAC1C,EAAU,KAAK,UAAY,KAAK,gBAAgB,EACpD,GAAe,EAAQ,KAAO,EAAQ,MAClC,IAAgB,KAAK,aAAe,CAAC,MAAM,CAAW,IACtD,KAAK,YAAc,EAAa,KAAM,QAAQ,WAAY,MAAM,MAC5D,KAAK,QAAQ,MAAM,MAAQ,KAAK,KAAK,KAAK,WAAW,EAAI,KAC7D,KAAK,QAAQ,oBAAqB,CAAW,EAErD,EACA,EAAO,UAAU,iBAAmB,UAAY,CACvC,QAAK,qBAEV,KAAI,EAAW,KAAK,QAAQ,UAAU,UAAU,EAC5C,KAAK,aAAe,EAAS,MAEjC,KAAK,WAAa,EAAS,IAHqB,CAIpD,EACA,EAAO,UAAU,oBAAsB,UAAY,CAC/C,GAAI,KAAK,mBACL,KAAK,oBAAoB,EACxB,KAAK,qBAEV,KAAI,EAAM,KAAK,QAAQ,UAAU,OAAO,IACxC,QAAK,WAAa,EACd,OAAK,aAAe,KAAK,YAAY,KAAO,GAEhD,CAAI,KAAK,cACL,KAAK,YAAY,QAAQ,UAAY,KAAK,YAAY,QAAQ,UAAU,QAAQ,0BAA2B,EAAE,GACjH,IAAI,EAAQ,KAAK,OAAO,MACxB,KAAK,YAAc,KACnB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACnC,IAAI,EAAO,EAAM,GACjB,GAAI,EAAK,KAAO,KAAK,WAAY,CAC7B,GAAI,EAAK,IAAM,KAAK,WAAY,CAC5B,IAAI,EAAO,KAAK,QAAQ,YAAY,KAAK,UAAU,EACnD,GAAI,EAAI,GAAK,GAAQ,EAAK,MAAM,KAAO,EAAM,EAAI,EAAE,CAAC,IAChD,EAAO,EAAM,EAAI,QAEjB,KACR,CACA,EAAK,QAAQ,UAAY,0BAA4B,EAAK,QAAQ,UAClE,KAAK,YAAc,EACnB,KACJ,CACJ,CAjBiH,CALzE,CAuB5C,EACA,EAAO,UAAU,oBAAsB,UAAY,CAC1C,QAAK,QAEV,KAAI,EAAU,KAAK,QACd,KAAK,oBACN,KAAK,kBAAoB,EAAI,cAAc,KAAK,EAChD,KAAK,kBAAkB,UAAY,oBACnC,KAAK,kBAAkB,MAAM,cAAgB,OAC7C,KAAK,QAAQ,YAAY,KAAK,iBAAiB,GAEnD,IAAI,EAAM,EAAQ,UAAU,OACxB,EAAS,KAAK,OACd,EAAQ,KAAK,OACb,EAAY,EAAO,eAAiB,EAAO,WAC3C,EAAa,KAAK,MAAM,EAAY,EAAM,YAAY,EAEtD,EADU,EAAQ,oBAAoB,CAAG,EAAI,EAAO,WACnC,EAAa,EAAM,aACxC,EAAI,SAAS,KAAK,kBAAkB,MAAO,SAAU,EAAO,WAAa,IAAI,EAC7E,EAAI,SAAS,KAAK,kBAAkB,MAAO,MAAO,EAAM,IAAI,CAfzC,CAgBvB,EACA,EAAO,UAAU,YAAc,SAAU,EAAQ,CAC7C,IAAI,EAAY,KAAK,OAGrB,GAFA,KAAK,OAAS,EACd,KAAK,iBAAiB,EAClB,KAAK,OAAO,YAAY,EAAW,CAAM,EACzC,OAAO,KAAK,OAAO,CAAM,EAC7B,KAAK,OAAO,cAAc,CAAM,EAChC,IAAI,EAAU,KAAK,IAAI,EAAO,QAAU,EAAO,aAC/C,KAAK,QAAQ,UAAU,EAAI,CAAC,EACxB,EAAa,KAAK,WAItB,GAHA,KAAK,WAAa,EACd,CAAC,GAAa,EAAa,EAAO,UAElC,EAAU,EAAU,SACpB,OAAO,KAAK,OAAO,CAAM,EAC7B,GAAI,EAAU,SAAW,EAAO,SAC5B,IAAK,IAAI,EAAM,KAAK,QAAQ,kBAAkB,EAAU,SAAU,EAAO,SAAW,CAAC,EAAG,EAAM,EAAG,IAC7F,KAAK,OAAO,MAAM,EAC1B,GAAI,EAAa,EACb,IAAK,IAAI,EAAM,KAAK,QAAQ,kBAAkB,EAAU,EAAG,CAAU,EAAG,EAAM,EAAG,IAC7E,KAAK,OAAO,IAAI,EACpB,EAAO,SAAW,EAAU,UAC5B,KAAK,OAAO,QAAQ,KAAK,aAAa,EAAQ,EAAO,SAAU,EAAU,SAAW,CAAC,CAAC,EAEtF,EAAU,GACV,KAAK,OAAO,KAAK,KAAK,aAAa,EAAQ,EAAa,EAAG,CAAO,CAAC,EAEvE,KAAK,oBAAoB,EACzB,KAAK,QAAQ,aAAa,EAC1B,KAAK,mBAAmB,CAAM,CAClC,EACA,EAAO,UAAU,aAAe,SAAU,EAAQ,EAAU,EAAS,CAKjE,IAJA,IAAI,EAAW,CAAC,EACZ,EAAM,EACN,EAAW,KAAK,QAAQ,gBAAgB,CAAG,EAC3C,EAAY,EAAW,EAAS,MAAM,IAAM,IAExC,EAAM,IACN,EAAM,EAAS,IAAI,IAAM,EACzB,EAAW,KAAK,QAAQ,gBAAgB,EAAK,CAAQ,EACrD,EAAY,EAAW,EAAS,MAAM,IAAM,KAE5C,IAAM,IAND,CAQT,IAAI,EAAO,KAAK,OAAO,WAAW,EAAK,EAAQ,KAAK,QAAS,CAAY,EACzE,KAAK,YAAY,EAAM,EAAQ,EAAU,CAAG,EAC5C,EAAS,KAAK,CAAI,EAClB,GACJ,CACA,OAAO,CACX,EACA,EAAO,UAAU,YAAc,SAAU,EAAM,EAAQ,EAAM,EAAK,CAC9D,IAAI,EAAU,EAAK,QACf,EAAU,KAAK,QACf,EAAW,EAAQ,WAAW,GAC9B,EAAa,EAAQ,WAAW,GAChC,EAAiB,EAAQ,WAAW,GACpC,EAAe,EAAQ,WAAW,GAClC,EAAqB,EAAe,WACpC,EAAkB,EAAQ,iBAC1B,EAAc,EAAQ,aACtB,EAAc,EAAQ,aACtB,EAAiB,EAAQ,gBAAkB,KAAK,UAChD,EAAc,KAAK,kBAAoB,EAAQ,YAC/C,EAAY,EAAO,EAAK,MAAM,IAAM,OAAO,UAC3C,EAAa,EAAO,WAAa,KACjC,EAAY,KAAK,mBAAqB,6BAA+B,mBACrE,EAAgB,KAAK,mBAAqB,eAAiB,WAC3D,GAAW,EACT,EAAe,QAAQ,EAAS,CAAG,EACnC,EAAM,EAAA,CAAiB,SAAS,EAiBtC,GAhBI,KAAK,uBACD,GAAO,KAAK,YAAe,GAAQ,EAAM,KAAK,YAAc,GAAO,GAAa,KAAK,YAAc,EAAK,IAAI,OAC5G,GAAa,0BACT,KAAK,aAAe,IAChB,KAAK,cACL,KAAK,YAAY,QAAQ,UAAY,KAAK,YAAY,QAAQ,UAAU,QAAQ,0BAA2B,EAAE,GACjH,KAAK,YAAc,IAI3B,EAAY,KACZ,GAAa,EAAY,IACzB,EAAY,KACZ,GAAa,EAAY,IACzB,KAAK,aAAa,IAAQ,IAAQ,IAClC,GAAa,KAAK,aAAa,EAAI,CAAC,WACpC,EAAa,CACb,IAAI,EAAI,EAAY,GACpB,AACI,IAAI,EAAY,GAAO,EAAQ,cAAc,CAAG,CACxD,CACA,GAAI,EAAG,CACH,IAAI,EAAY,uBAAyB,EACrC,EAAe,GAAK,SAAW,GAAO,GAAa,EAAM,EAAK,IAAI,IACtE,GAAI,EAAc,CACd,GAAa,cAGb,IAAK,IAFD,EAAsB,GACtB,EAAmB,GACd,EAAI,EAAM,EAAG,GAAK,EAAK,IAAI,IAAK,IAChC,QAAK,aAAa,GAEvB,IAAI,KAAK,aAAa,EAAE,CAAC,YAAc,aAAc,CACjD,EAAmB,GACnB,EAAsB,kBACtB,KACJ,CACI,KAAK,aAAa,EAAE,CAAC,YAAc,iBACnC,EAAmB,GACnB,EAAsB,sBAEjB,KAAK,aAAa,EAAE,CAAC,YAAc,gBACxC,IAAwB,uBACxB,EAAmB,GACnB,EAAsB,oBAR1B,CAWJ,GAAa,CACjB,KAEI,IAAa,YACb,EAAW,WAAa,IACxB,EAAW,UAAY,GAC3B,EAAI,SAAS,EAAW,MAAO,SAAU,CAAU,EACnD,EAAI,SAAS,EAAW,MAAO,UAAW,cAAc,EACxD,EAAW,aAAa,OAAQ,QAAQ,EACxC,EAAW,aAAa,WAAY,IAAI,EACxC,IAAI,EAAY,EAAQ,mBAAmB,CAAG,EAC1C,EACA,EAAW,aAAa,aAAc,EAAI,uCAAwC,0CAA2C,CACzH,EAAU,MAAM,IAAM,EACtB,EAAU,IAAI,IAAM,CACxB,CAAC,CAAC,EAEE,EACA,EAAW,aAAa,aAAc,EAAI,wCAAyC,0CAA2C,CAC1H,EAAK,MAAM,IAAM,EACjB,EAAK,IAAI,IAAM,CACnB,CAAC,CAAC,EAEF,EAAW,aAAa,aAAc,EAAI,sCAAuC,8BAA+B,CAAC,EAAM,CAAC,CAAC,CAAC,EAE9H,GACA,EAAW,aAAa,gBAAiB,OAAO,EAChD,EAAW,aAAa,QAAS,EAAI,mCAAoC,aAAa,CAAC,IAGvF,EAAW,aAAa,gBAAiB,MAAM,EAC/C,EAAW,aAAa,QAAS,EAAI,iCAAkC,WAAW,CAAC,EAE3F,MAEQ,IACA,EAAI,SAAS,EAAW,MAAO,UAAW,MAAM,EAChD,EAAW,aAAa,WAAY,GAAG,EACvC,EAAW,gBAAgB,MAAM,EACjC,EAAW,gBAAgB,YAAY,GAG/C,IAAI,EAAyB,KAAK,QAAQ,qBAAqB,GAO/D,GANI,EACA,KAAK,iBAAiB,EAAK,EAAwB,CAAI,EAElD,GACL,KAAK,oBAAoB,EAAK,CAAI,EAElC,GAAoB,KAAK,uBAAwB,CACjD,EAAe,UAAY,wBAC3B,EAAmB,UAAY,EAC/B,EAAmB,WAAa,EAChC,EAAI,SAAS,EAAmB,MAAO,SAAU,CAAU,EAC3D,EAAI,SAAS,EAAe,MAAO,UAAW,OAAO,EACrD,EAAI,SAAS,EAAe,MAAO,SAAU,CAAU,EACvD,IAAI,EACJ,OAAQ,EAAR,CACI,IAAK,kBACD,EAAY,EAAI,qCAAsC,iCAAkC,CAAC,CAAO,CAAC,EACjG,MACJ,IAAK,qBACD,EAAY,EAAI,wCAAyC,4CAA6C,CAAC,CAAO,CAAC,EAC/G,MACJ,IAAK,oBACD,EAAY,EAAI,uCAAwC,mCAAoC,CAAC,CAAO,CAAC,EACrG,KACR,CACA,EAAe,aAAa,aAAc,CAAS,EACnD,EAAe,aAAa,WAAY,IAAI,EAC5C,EAAe,aAAa,OAAQ,QAAQ,CAChD,MACK,GAAI,KAAK,aAAa,GAAM,CAC7B,EAAe,UAAY,wBAC3B,EAAmB,UAAY,EAC3B,KAAK,mBACL,EAAmB,WAAa,KAAK,aAAa,EAAI,CAAC,UAEvD,EAAQ,UAAU,IAAI,KAAK,aAAa,EAAI,CAAC,UAAU,QAAQ,IAAK,EAAE,CAAC,EAC3E,EAAI,SAAS,EAAmB,MAAO,SAAU,CAAU,EAC3D,EAAI,SAAS,EAAe,MAAO,UAAW,OAAO,EACrD,EAAI,SAAS,EAAe,MAAO,SAAU,CAAU,EACvD,IAAI,EACJ,OAAQ,KAAK,aAAa,EAAI,CAAC,UAA/B,CACI,IAAK,aACD,EAAY,EAAI,qCAAsC,iCAAkC,CAAC,CAAO,CAAC,EACjG,MACJ,IAAK,gBACD,EAAY,EAAI,wCAAyC,4CAA6C,CAAC,CAAO,CAAC,EAC/G,MACJ,IAAK,eACD,EAAY,EAAI,uCAAwC,mCAAoC,CAAC,CAAO,CAAC,EACrG,MACJ,IAAK,YACD,EAAY,EAAI,oCAAqC,gCAAiC,CAAC,CAAO,CAAC,EAC/F,MACJ,IAAK,YACD,EAAY,EAAI,oCAAqC,sCAAuC,CAAC,CAAO,CAAC,EACrG,KACR,CACA,EAAe,aAAa,aAAc,CAAS,EACnD,EAAe,aAAa,WAAY,IAAI,EAC5C,EAAe,aAAa,OAAQ,QAAQ,CAChD,MAEI,EAAI,SAAS,EAAe,MAAO,UAAW,MAAM,EACpD,EAAe,gBAAgB,YAAY,EAC3C,EAAe,gBAAgB,MAAM,EACrC,EAAe,aAAa,WAAY,GAAG,EAc/C,OAZI,IAAY,EAAS,OACrB,EAAS,KAAO,GAEhB,EAAQ,WAAa,IACrB,EAAQ,UAAY,GACxB,EAAI,SAAS,EAAK,QAAQ,MAAO,SAAU,KAAK,OAAO,kBAAkB,EAAK,EAAQ,CAAO,EAAI,IAAI,EACrG,EAAI,SAAS,EAAK,QAAQ,MAAO,MAAO,KAAK,OAAO,eAAe,EAAK,EAAQ,CAAO,EAAI,IAAI,EAC/F,EAAK,KAAO,EACR,EAAe,MAAM,UAAY,QAAU,EAAW,MAAM,UAAY,QAAU,CAAC,EACnF,EAAK,QAAQ,aAAa,cAAe,EAAI,EAE7C,EAAK,QAAQ,aAAa,cAAe,EAAK,EAC3C,CACX,EACA,EAAO,UAAU,uBAAyB,SAAU,EAAqB,CACrE,KAAK,qBAAuB,EACxB,CAAC,GAAuB,KAAK,oBAC7B,KAAK,kBAAkB,OAAO,EAC9B,KAAK,kBAAoB,KAEjC,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAM,CAClD,KAAK,UAAY,CAAC,GAAQ,CACtB,SAAU,UAAY,CAAE,MAAO,EAAG,EAClC,QAAS,UAAY,CAAE,MAAO,EAAI,CACtC,CACJ,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,gBAChB,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAM,CAC9C,EACA,EAAI,YAAY,KAAK,QAAS,qBAAqB,EAEnD,EAAI,eAAe,KAAK,QAAS,qBAAqB,EAC1D,KAAK,iBAAmB,EACxB,KAAK,SAAW,IACpB,EACA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,gBAChB,EACA,EAAO,UAAU,gBAAkB,SAAU,EAAK,EAAM,CACpD,IAAI,EAAU,GAAQ,KAAK,eAAe,CAAG,EAC7C,GAAI,GAAW,EAAQ,QAAS,CAC5B,IAAI,EAAa,EAAQ,QAAQ,WAAW,GACxC,GACA,EAAI,SAAS,EAAW,MAAO,UAAW,MAAM,CAExD,CACJ,EACA,EAAO,UAAU,gBAAkB,SAAU,EAAK,EAAM,CACpD,IAAI,EAAU,GAAQ,KAAK,eAAe,CAAG,EAC7C,GAAI,GAAW,EAAQ,QAAS,CAC5B,IAAI,EAAa,EAAQ,QAAQ,WAAW,GACxC,GAAc,KAAK,QAAQ,aAAe,KAAK,QAAQ,YAAY,EAAQ,MAC3E,EAAI,SAAS,EAAW,MAAO,UAAW,cAAc,CAEhE,CACJ,EACA,EAAO,UAAU,eAAiB,SAAU,EAAK,CAC7C,IAAI,EAAQ,KAAK,OAAO,MACpB,EAAM,EACN,EAAM,EAAM,OAAS,EACrB,OAAM,EAAM,EAAE,CAAC,KAAO,EAAM,EAAM,EAAI,CAAC,KAE3C,MAAO,GAAO,GAAK,CACf,IAAI,EAAM,KAAK,OAAO,EAAM,GAAO,CAAC,EAChC,EAAO,EAAM,GACjB,GAAI,EAAK,IAAM,EACX,EAAM,EAAM,OAEX,GAAI,EAAK,IAAM,EAChB,EAAM,EAAM,OAGZ,OAAO,CAEf,CACA,OAAO,CADP,CAEJ,EACA,EAAO,UAAU,iBAAmB,SAAU,EAAK,EAAI,EAAM,CACzD,IAAI,EAAY,EAAG,UAAW,EAAQ,EAAG,MAAO,EAAQ,EAAG,MAAO,EAAY,EAAG,UACjF,KAAK,QAAQ,qBAAqB,GAAO,CAAa,YAAkB,QAAc,QAAkB,WAAU,EAClH,KAAK,gBAAgB,EAAK,CAAI,EAC9B,IAAI,EAAU,GAAQ,KAAK,eAAe,CAAG,EAC7C,GAAI,GAAW,EAAQ,QAAS,CAC5B,IAAI,EAAe,EAAQ,QAAQ,cAAc,oBAAoB,EACjE,GACA,EAAa,OAAO,EAExB,EAAe,EAAI,cAAc,MAAM,EACvC,EAAa,UAAY,qBAA4B,IACrD,EAAa,aAAa,WAAY,IAAI,EAC1C,EAAa,aAAa,OAAQ,QAAQ,EAC1C,EAAa,aAAa,aAAc,CAAK,EAC7C,EAAa,aAAa,QAAS,CAAK,EACxC,EAAI,SAAS,EAAa,MAAO,UAAW,cAAc,EAC1D,EAAI,SAAS,EAAa,MAAO,SAAU,SAAS,EAChD,GAAa,EAAU,SACvB,EAAa,iBAAiB,QAAS,SAAU,EAAG,CAChD,EAAU,QAAQ,EAAG,CAAG,EACxB,EAAE,gBAAgB,CACtB,CAAC,EAEL,EAAQ,QAAQ,YAAY,CAAY,CAC5C,CACJ,EACA,EAAO,UAAU,oBAAsB,SAAU,EAAK,EAAM,CACxD,OAAO,KAAK,QAAQ,qBAAqB,GACzC,KAAK,gBAAgB,EAAK,CAAI,EAC9B,IAAI,EAAU,GAAQ,KAAK,eAAe,CAAG,EAC7C,GAAI,GAAW,EAAQ,QAAS,CAC5B,IAAI,EAAe,EAAQ,QAAQ,cAAc,oBAAoB,EACjE,GACA,EAAQ,QAAQ,YAAY,CAAY,CAEhD,CACJ,EACA,EAAO,UAAU,gBAAkB,UAAY,CAC3C,GAAI,CAAC,KAAK,QAAQ,WACd,MAAO,CAAE,KAAM,EAAG,MAAO,CAAE,EAC/B,IAAI,EAAQ,EAAI,cAAmC,KAAK,QAAQ,UAAW,EAM3E,MALA,MAAK,SAAW,CAAC,EACjB,KAAK,SAAS,MAAQ,SAAS,EAAM,eAAe,GAAK,IAClD,SAAS,EAAM,WAAW,GAAK,GAAK,EAC3C,KAAK,SAAS,OAAS,SAAS,EAAM,gBAAgB,GAAK,IACpD,SAAS,EAAM,YAAY,GAAK,GAChC,KAAK,QAChB,EACA,EAAO,UAAU,UAAY,SAAU,EAAO,CAC1C,IAAI,EAAU,KAAK,UAAY,KAAK,gBAAgB,EAChD,EAAO,KAAK,QAAQ,sBAAsB,EAC9C,GAAI,EAAM,EAAI,EAAQ,KAAO,EAAK,KAC9B,MAAO,UACX,GAAI,KAAK,kBAAoB,EAAM,EAAI,EAAK,MAAQ,EAAQ,MACxD,MAAO,aACf,EACO,CACX,EAAE,EACF,EAAO,UAAU,YAAc,GAC/B,EAAO,UAAU,qBAAuB,GACxC,EAAO,UAAU,UAAY,IAAA,GAC7B,EAAO,UAAU,iBAAmB,GACpC,EAAO,UAAU,iBAAmB,GACpC,EAAI,UAAU,EAAO,UAAW,CAAY,EAC5C,SAAS,EAAa,EAAS,CAC3B,IAAI,EAAW,SAAS,eAAe,EAAE,EACzC,EAAQ,YAAY,CAAQ,EAC5B,IAAI,EAAa,EAAI,cAAc,MAAM,EACzC,EAAQ,YAAY,CAAU,EAC9B,IAAI,EAAiB,EAAI,cAAc,MAAM,EAC7C,EAAQ,YAAY,CAAc,EAClC,IAAI,EAAqB,EAAI,cAAc,MAAM,EAEjD,OADA,EAAe,YAAY,CAAkB,EACtC,CACX,CACA,EAAQ,OAAS,CAEjB,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,YAAY,aAAa,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC3H,IAAI,EAAQ,EAAQ,UAAU,CAAC,CAAC,MAC5B,EAAM,EAAQ,YAAY,EAC1B,EAAwB,UAAY,CACpC,SAAS,EAAO,EAAU,CACtB,KAAK,QAAU,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,6BACzB,EAAS,YAAY,KAAK,OAAO,CACrC,CAqKA,MApKA,GAAO,UAAU,WAAa,SAAU,EAAS,CAC7C,KAAK,SAAW,CACpB,EACA,EAAO,UAAU,WAAa,SAAU,EAAS,CAC7C,KAAK,QAAU,CACnB,EACA,EAAO,UAAU,WAAa,SAAU,EAAS,CAC7C,KAAK,QAAU,CACnB,EACA,EAAO,UAAU,IAAM,SAAU,EAAW,EAAK,CAC7C,IAAI,EAAI,KAAK,GAAK,IAAM,KAAK,QAAQ,WAAW,KAAK,GAChD,EAMD,KAAK,KALL,EAAI,SAAS,cAAc,KAAK,EAChC,KAAK,QAAQ,YAAY,CAAC,EAC1B,KAAK,EAAI,IAKb,EAAE,MAAM,QAAU,EAClB,EAAE,UAAY,CAClB,EACA,EAAO,UAAU,OAAS,SAAU,EAAQ,CACnC,KAGL,CADA,KAAK,OAAS,EACd,KAAK,EAAI,EACT,IAAI,EACJ,IAAK,IAAI,KAAO,KAAK,QAAS,CAC1B,IAAI,EAAS,KAAK,QAAQ,GAC1B,GAAI,CAAC,EAAO,MAAO,CACf,EAAO,OAAO,EAAM,KAAM,KAAK,QAAS,CAAM,EAC9C,QACJ,CACA,IAAI,EAAQ,EAAO,MAAM,SAAS,EAAO,SAAU,EAAO,OAAO,EAC7D,MAAM,QAAQ,EAGlB,GADA,EAAQ,EAAM,cAAc,KAAK,OAAO,EACpC,EAAO,SAAU,CACjB,IAAI,EAAM,KAAK,QAAQ,EAAM,MAAM,IAAK,CAAM,EAC1C,EAAO,KAAK,SAAW,EAAM,MAAM,OAAS,EAAO,eACvD,EAAO,SAAS,EAAM,EAAO,EAAM,EAAK,CAAM,CAClD,MACS,EAAO,MAAQ,WACpB,KAAK,mBAAmB,EAAM,EAAO,EAAO,MAAO,CAAM,EAEpD,EAAO,MAAQ,aACpB,KAAK,qBAAqB,EAAM,EAAO,EAAO,MAAO,CAAM,EAEtD,EAAM,YAAY,EACnB,EAAO,MAAQ,OACf,KAAK,eAAe,EAAM,EAAO,EAAO,MAAO,CAAM,EAErD,KAAK,oBAAoB,EAAM,EAAO,EAAO,MAAO,CAAM,EAG9D,KAAK,qBAAqB,EAAM,EAAO,EAAO,MAAQ,sBAA4B,CAAM,CAEhG,CACA,GAAI,KAAK,GAAK,GACV,KAAO,KAAK,EAAI,KAAK,QAAQ,mBACzB,KAAK,QAAQ,YAAY,KAAK,QAAQ,SAAS,CAnC9C,CAqCb,EACA,EAAO,UAAU,QAAU,SAAU,EAAK,EAAa,CACnD,OAAQ,EAAM,EAAY,gBAAkB,EAAY,UAC5D,EACA,EAAO,UAAU,eAAiB,SAAU,EAAe,EAAO,EAAO,EAAa,EAAY,CAS9F,IARA,IAAI,EAAU,KAAK,QACf,EAAQ,EAAM,MAAM,IACpB,EAAM,EAAM,IAAI,IAChB,EAAM,EACN,EAAO,EACP,EAAO,EACP,EAAO,EAAQ,uBAAuB,CAAG,EACzC,EAAY,IAAI,EAAM,EAAK,EAAM,MAAM,OAAQ,EAAK,CAAI,EACrD,GAAO,EAAK,IACf,EAAU,MAAM,IAAM,EAAU,IAAI,IAAM,EAC1C,EAAU,MAAM,OAAS,GAAO,EAAQ,EAAM,MAAM,OAAS,EAAQ,iBAAiB,CAAG,EACzF,EAAU,IAAI,OAAS,EACvB,EAAO,EACP,EAAO,EACP,EAAO,EAAM,EAAI,EAAM,EAAQ,uBAAuB,EAAM,CAAC,EAAI,GAAO,EAAM,EAAI,EAAM,IAAI,OAC5F,KAAK,qBAAqB,EAAe,EAAW,GAAS,GAAO,EAAQ,aAAe,IAAM,UAC3F,EAAe,GAAO,GAAS,GAAO,EAAQ,GAAK,EAAM,MAAM,OAAQ,EAAO,EAAM,EAAO,EAAM,GAAO,CAAG,EAAG,EAAa,GAAO,EAAM,EAAI,EAAG,CAAU,CAEvK,EACA,EAAO,UAAU,oBAAsB,SAAU,EAAe,EAAO,EAAO,EAAQ,EAAY,CAC9F,IAAI,EAAU,KAAK,SACf,EAAS,EAAO,WAChB,EAAM,KAAK,QAAQ,EAAM,MAAM,IAAK,CAAM,EAC1C,EAAO,EAAU,EAAM,MAAM,OAAS,EAAO,eAEjD,GADA,IAA2B,GACvB,KAAK,QAAQ,aAAa,UAAU,EAAM,MAAM,GAAG,EAAG,CACtD,IAAI,EAAS,EAAM,MAAM,EACzB,EAAO,IAAI,IAAM,EAAO,MAAM,IAC9B,EAAO,IAAI,OAAS,KAAK,QAAQ,QAAQ,EAAO,MAAM,GAAG,CAAC,CAAC,OAC3D,KAAK,yBAAyB,EAAe,EAAQ,EAAQ,qBAAsB,EAAQ,KAAM,CAAU,CAC/G,MAEI,KAAK,IAAI,EAAQ,qBAAsB,UAAY,EAAS,YAAmB,EAAU,UAAiB,EAAM,WAAa,EAAO,OAAS,GAAc,GAAG,EAElK,GAAI,KAAK,QAAQ,aAAa,UAAU,EAAM,IAAI,GAAG,EAAG,CACpD,IAAI,EAAS,EAAM,MAAM,EACzB,EAAO,MAAM,IAAM,EAAO,IAAI,IAC9B,EAAO,MAAM,OAAS,EACtB,KAAK,yBAAyB,EAAe,EAAQ,EAAQ,YAAa,EAAQ,KAAM,CAAU,CACtG,KACK,CACD,EAAM,KAAK,QAAQ,EAAM,IAAI,IAAK,CAAM,EACxC,IAAI,EAAQ,EAAM,IAAI,OAAS,EAAO,eACtC,KAAK,IAAI,EAAQ,YAAa,UAAY,EAAS,YACpC,EAAQ,UACV,EAAM,WACL,EAAU,OAAS,GAAc,GAAG,CACtD,CACA,MAAU,EAAM,IAAI,IAAM,EAAM,MAAM,IAAM,GAAK,EAAO,WACpD,KAAU,GAEd,GAAM,KAAK,QAAQ,EAAM,MAAM,IAAM,EAAG,CAAM,EAC9C,IAAI,EAAe,IAAM,MAAM,QAAmB,EAAM,IAAI,OAAS,EAAI,GACzE,KAAK,IAAI,GAAS,EAAc,UAAY,EAAc,IAAK,UAAY,EAAS,YACrE,EAAU,UACZ,EAAM,WACL,EAAU,OAAS,GAAc,GAAG,CALJ,CAMlD,EACA,EAAO,UAAU,qBAAuB,SAAU,EAAe,EAAO,EAAO,EAAQ,EAAa,EAAY,CAC5G,GAAI,KAAK,QAAQ,aAAa,UAAU,EAAM,MAAM,GAAG,EACnD,OAAO,KAAK,yBAAyB,EAAe,EAAO,EAAO,EAAQ,EAAa,CAAU,EACrG,IAAI,EAAS,EAAO,WAChB,GAAS,EAAM,IAAI,QAAU,GAAe,GAAK,EAAM,MAAM,QAAU,EAAO,eAC9E,EAAM,KAAK,QAAQ,EAAM,MAAM,IAAK,CAAM,EAC1C,EAAO,KAAK,SAAW,EAAM,MAAM,OAAS,EAAO,eACvD,KAAK,IAAI,EAAO,UAAY,EAAS,YACtB,EAAQ,UACV,EAAM,WACL,EAAO,OAAS,GAAc,GAAG,CACnD,EACA,EAAO,UAAU,yBAA2B,SAAU,EAAe,EAAO,EAAO,EAAQ,EAAa,EAAY,CAChH,IAAI,EAAS,EAAO,WAAY,EAAM,KAAK,QAAQ,EAAM,MAAM,IAAK,CAAM,EAAG,EAAU,KAAK,SAE5F,KADsB,QAAQ,aAAa,cAAc,EAAM,MAAM,OAAQ,EAAM,IAAI,MAC9E,CAAC,CAAC,QAAQ,SAAU,EAAW,CACpC,KAAK,IAAI,EAAO,UAAY,EAAS,aACrB,EAAU,OAAS,GAAe,IAAM,UAC3C,EAAM,YACJ,EAAU,EAAU,MAAQ,OAAS,GAAc,GAAG,CACzE,EAAG,IAAI,CACX,EACA,EAAO,UAAU,mBAAqB,SAAU,EAAe,EAAO,EAAO,EAAQ,EAAY,CAC7F,IAAI,EAAM,KAAK,QAAQ,EAAM,MAAM,IAAK,CAAM,EAC1C,EAAS,EAAO,WAChB,EAAM,MAAM,KAAO,EAAM,IAAI,MAC7B,GAAU,KAAK,QAAQ,EAAM,IAAI,IAAK,CAAM,EAAI,GACpD,KAAK,IAAI,EAAO,UAAY,EAAS,UACxB,EAAM,sBACM,GAAc,GAAG,CAC9C,EACA,EAAO,UAAU,qBAAuB,SAAU,EAAe,EAAO,EAAO,EAAQ,EAAY,CAC/F,IAAI,EAAM,KAAK,QAAQ,EAAM,MAAM,IAAK,CAAM,EAC1C,EAAS,EAAO,WACpB,KAAK,IAAI,EAAO,UAAY,EAAS,UACxB,EAAM,sBACM,GAAc,GAAG,CAC9C,EACO,CACX,EAAE,EACF,EAAO,UAAU,SAAW,EAC5B,SAAS,EAAe,EAAI,EAAI,EAAI,EAAI,CACpC,MAAQ,KAAe,EAAK,EAAI,IAAM,EAAK,EAAI,IAAM,EAAK,EAAI,EAClE,CACA,EAAQ,OAAS,CAEjB,CAAC,EAED,IAAI,OAAO,sBAAsB,CAAC,UAAU,UAAU,QAAQ,EAAG,SAAS,EAAS,EAAS,EAAO,CACnG,IAAI,EAAa,IAAI,IAAI,CAAC,OAAQ,SAAU,QAAQ,CAAC,EACrD,EAAQ,YAAc,SAAU,EAAW,CACvC,OAAO,EAAW,IAAI,CAAS,CACnC,CAEA,CAAC,EAED,IAAI,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,kBAAkB,wBAAwB,aAAa,qBAAqB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACvN,IAAI,EAAM,EAAQ,YAAY,EAC1B,EAAM,EAAQ,YAAY,EAC1B,EAAO,EAAQ,aAAa,EAC5B,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAe,EAAQ,sBAAsB,CAAC,CAAC,aAC/C,EAAM,EAAQ,WAAW,CAAC,CAAC,IAC3B,EAAc,EAAQ,aAAa,CAAC,CAAC,YACrC,EAAsB,UAAY,CAClC,SAAS,EAAK,EAAU,CACpB,KAAK,IAAM,EACX,KAAK,QAAU,KAAK,IAAI,cAAc,KAAK,EAC3C,KAAK,QAAQ,UAAY,2BACzB,EAAS,YAAY,KAAK,OAAO,EACjC,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,OAAS,IAAI,EAAM,KAAK,OAAO,CACxC,CAslBA,MArlBA,GAAK,UAAU,eAAiB,UAAY,CACxC,IAAI,EAAM,KAAK,QAAQ,IAEnB,EADW,EAAI,oBAAoB,GAAK;GAAQ,EAAI,eAAe,GAAK,UAClD,KAAK,YAAc,KAAK,cAClD,GAAI,KAAK,UAAY,EAEjB,MADA,MAAK,SAAW,EACT,EAEf,EACA,EAAK,UAAU,WAAa,SAAU,EAAS,CAC3C,KAAK,SAAW,EAChB,KAAK,QAAQ,MAAM,OAAS,KAAO,EAAU,IACjD,EACA,EAAK,UAAU,cAAgB,UAAY,CACvC,OAAO,KAAK,aAAa,eAAe,QAAU,CACtD,EACA,EAAK,UAAU,kBAAoB,UAAY,CAC3C,OAAO,KAAK,aAAa,eAAe,OAAS,CACrD,EACA,EAAK,UAAU,gBAAkB,SAAU,EAAS,CAChD,KAAK,aAAe,EACpB,KAAK,aAAa,GAAG,sBACrB,SAAU,EAAG,CACT,KAAK,QAAQ,sBAAuB,CAAC,CACzC,EAAE,KAAK,IAAI,CAAC,EACZ,KAAK,iBAAiB,CAC1B,EACA,EAAK,UAAU,oBAAsB,UAAY,CAC7C,KAAK,aAAa,oBAAoB,CAC1C,EACA,EAAK,UAAU,iBAAmB,UAAY,CAC1C,MAAO,MAAK,sBAAwB,KAAK,aAAa,iBAAiB,CAC3E,EACA,EAAK,UAAU,WAAa,SAAU,EAAS,CAC3C,KAAK,QAAU,EACX,GACA,KAAK,kBAAkB,CAC/B,EACA,EAAK,UAAU,kBAAoB,SAAU,EAAgB,CAazD,OAZI,KAAK,gBAAkB,EAChB,IACX,KAAK,eAAiB,EAClB,OAAO,GAAkB,UACzB,KAAK,WAAa,OAAO,KAAK,CAAc,EAC5C,KAAK,SAAW,SAAS,KAAK,CAAc,EAC5C,KAAK,QAAU,OAAO,KAAK,CAAc,GAGzC,KAAK,WAAa,KAAK,SAAW,KAAK,QAAU,EAErD,KAAK,kBAAkB,EAChB,GACX,EACA,EAAK,UAAU,uBAAyB,SAAU,EAAS,CAKvD,OAJI,KAAK,qBAAuB,EACrB,IACX,KAAK,oBAAsB,EAC3B,KAAK,kBAAkB,EAChB,GACX,EACA,EAAK,UAAU,yBAA2B,SAAU,EAAW,CAI3D,OAHI,KAAK,yBAA2B,EACzB,IACX,KAAK,uBAAyB,EACvB,EACX,EACA,EAAK,UAAU,kBAAoB,UAAY,CAC3C,IAAI,EAAU,KAAK,QAAQ,WAAW,EACtC,KAAK,QAAU,EACf,IAAK,IADuB,EAAS,KAAK,YAAc,CAAC,CAAC,EACjD,EAAI,EAAG,EAAI,EAAU,EAAG,IAC7B,GAAI,KAAK,SAAU,CACf,IAAI,EAAO,KAAK,IAAI,cAAc,MAAM,EACxC,EAAK,UAAY,kCACjB,EAAK,YAAc,EAAK,aAAa,KAAK,SAAU,CAAC,EACrD,EAAO,KAAK,CAAI,CACpB,MAEI,EAAO,KAAK,KAAK,IAAI,eAAe,EAAK,aAAa,IAAK,CAAC,EAAG,KAAK,OAAO,CAAC,EAGpF,GAAI,KAAK,oBAAqB,CAC1B,KAAK,eAAiB,mBACtB,IAAI,EAAY,mBACZ,EAAa,KAAK,WAAa,qCAAuC,GACtE,EAAe,KAAK,WAClB,EAAK,aAAa,KAAK,WAAY,KAAK,OAAO,EAC/C,EAAK,aAAa,IAAK,KAAK,OAAO,EACrC,EAAW,KAAK,SAAW,mCAAqC,GAChE,EAAa,KAAK,SAChB,EAAK,aAAa,KAAK,SAAU,KAAK,OAAO,EAC7C,EACF,EAAO,KAAK,IAAI,cAAc,MAAM,EACxC,EAAK,UAAY,EAAY,EAC7B,EAAK,YAAc,EACnB,KAAK,YAAY,KAAO,EACxB,IAAI,EAAO,KAAK,IAAI,cAAc,MAAM,EACxC,EAAK,UAAY,EAAY,EAC7B,EAAK,YAAc,EACnB,KAAK,YAAY,KAAQ,CAC7B,CACJ,EACA,EAAK,UAAU,YAAc,SAAU,EAAQ,EAAU,EAAS,CAC9D,GAAI,KAAK,OAAO,SAAW,EAAO,SAC9B,KAAK,OAAO,UAAY,EAAO,SAC/B,OAAO,KAAK,OAAO,CAAM,EAE7B,KAAK,OAAS,EAKd,IAAK,IAJD,EAAQ,KAAK,IAAI,EAAU,EAAO,QAAQ,EAC1C,EAAO,KAAK,IAAI,EAAS,EAAO,OAAO,EACvC,EAAe,KAAK,QAAQ,WAC5B,EAAkB,EACb,EAAM,EAAO,SAAU,EAAM,EAAO,IAAO,CAChD,IAAI,EAAW,KAAK,QAAQ,YAAY,CAAG,EAC3C,GAAI,EACA,GAAI,EAAS,YAAY,CAAK,EAAG,CAC7B,EAAQ,EAAS,MAAM,IACvB,KACJ,KAEI,GAAM,EAAS,IAAI,IAG3B,GACJ,CAKA,IAJA,IAAI,EAAgB,GAChB,EAAM,EACN,EAAW,KAAK,QAAQ,gBAAgB,CAAG,EAC3C,EAAY,EAAW,EAAS,MAAM,IAAM,IAExC,EAAM,IACN,EAAM,EAAS,IAAI,IAAM,EACzB,EAAW,KAAK,QAAQ,gBAAgB,EAAK,CAAQ,EACrD,EAAY,EAAW,EAAS,MAAM,IAAM,KAE5C,IAAM,IAND,CAOE,IAAI,EAAc,EAAa,KAC1C,GAAI,EAAa,CACb,KAAK,IAAI,eAAe,CAAW,EACnC,KAAK,YAAY,EAAa,EAAK,GAAO,GAAY,CAAgB,EAClE,IACA,EAAY,MAAM,IAAM,KAAK,OAAO,eAAe,EAAK,EAAQ,KAAK,OAAO,EAAI,MACpF,IAAI,EAAU,EAAO,WAAa,KAAK,QAAQ,aAAa,CAAG,EAAK,KAChE,EAAY,MAAM,QAAU,IAC5B,EAAgB,GAChB,EAAY,MAAM,OAAS,EAEnC,CACA,GACJ,CACA,GAAI,EACA,KAAO,EAAkB,KAAK,OAAO,MAAM,QAAQ,CAC/C,IAAI,EAAO,KAAK,OAAO,MAAM,KAC7B,EAAK,QAAQ,MAAM,IAAM,KAAK,OAAO,eAAe,EAAK,IAAK,EAAQ,KAAK,OAAO,EAAI,IAC1F,CAER,EACA,EAAK,UAAU,YAAc,SAAU,EAAQ,CAC3C,IAAI,EAAY,KAAK,OAErB,GADA,KAAK,OAAS,EACV,KAAK,OAAO,YAAY,EAAW,CAAM,EACzC,OAAO,KAAK,OAAO,CAAM,EAC7B,KAAK,OAAO,cAAc,CAAM,EAChC,IAAI,EAAU,EAAO,QACjB,EAAa,EAAY,EAAU,QAAU,GAOjD,GANI,CAAC,GAAa,EAAa,EAAO,UAElC,EAAU,EAAU,UAEpB,CAAC,GAAa,EAAU,QAAU,EAAO,UAEzC,EAAO,QAAU,EAAU,SAC3B,OAAO,KAAK,OAAO,CAAM,EAC7B,GAAI,EAAU,SAAW,EAAO,SAC5B,IAAK,IAAI,EAAM,KAAK,QAAQ,kBAAkB,EAAU,SAAU,EAAO,SAAW,CAAC,EAAG,EAAM,EAAG,IAC7F,KAAK,OAAO,MAAM,EAC1B,GAAI,EAAU,QAAU,EAAO,QAC3B,IAAK,IAAI,EAAM,KAAK,QAAQ,kBAAkB,EAAO,QAAU,EAAG,EAAU,OAAO,EAAG,EAAM,EAAG,IAC3F,KAAK,OAAO,IAAI,EACpB,EAAO,SAAW,EAAU,UAC5B,KAAK,OAAO,QAAQ,KAAK,qBAAqB,EAAQ,EAAO,SAAU,EAAU,SAAW,CAAC,CAAC,EAE9F,EAAO,QAAU,EAAU,SAC3B,KAAK,OAAO,KAAK,KAAK,qBAAqB,EAAQ,EAAU,QAAU,EAAG,EAAO,OAAO,CAAC,EAE7F,KAAK,sBAAsB,CAC/B,EACA,EAAK,UAAU,qBAAuB,SAAU,EAAQ,EAAU,EAAS,CAKvE,IAJA,IAAI,EAAW,CAAC,EACZ,EAAM,EACN,EAAW,KAAK,QAAQ,gBAAgB,CAAG,EAC3C,EAAY,EAAW,EAAS,MAAM,IAAM,IAExC,EAAM,IACN,EAAM,EAAS,IAAI,IAAM,EACzB,EAAW,KAAK,QAAQ,gBAAgB,EAAK,CAAQ,EACrD,EAAY,EAAW,EAAS,MAAM,IAAM,KAE5C,IAAM,IAND,CAQT,IAAI,EAAO,KAAK,OAAO,WAAW,EAAK,EAAQ,KAAK,OAAO,EACvD,EAAS,EAAK,QAClB,KAAK,IAAI,eAAe,CAAM,EAC9B,EAAI,SAAS,EAAO,MAAO,SAAU,KAAK,OAAO,kBAAkB,EAAK,EAAQ,KAAK,OAAO,EAAI,IAAI,EACpG,EAAI,SAAS,EAAO,MAAO,MAAO,KAAK,OAAO,eAAe,EAAK,EAAQ,KAAK,OAAO,EAAI,IAAI,EAC9F,KAAK,YAAY,EAAQ,EAAK,GAAO,GAAY,CAAgB,EAC7D,KAAK,eAAe,EACpB,EAAO,UAAY,iBAGnB,EAAO,UAAY,WAEvB,EAAS,KAAK,CAAI,EAClB,GACJ,CACA,OAAO,CACX,EACA,EAAK,UAAU,OAAS,SAAU,EAAQ,CACtC,KAAK,OAAO,cAAc,CAAM,EAChC,KAAK,OAAS,EAId,IAHA,IAAI,EAAW,EAAO,SAClB,EAAU,EAAO,QACjB,EAAQ,KAAK,OACV,EAAM,UAAU,GACnB,EAAM,IAAI,EACd,EAAM,KAAK,KAAK,qBAAqB,EAAQ,EAAU,CAAO,CAAC,CACnE,EACA,EAAK,UAAU,aAAe,SAAU,EAAQ,EAAc,EAAO,EAAO,CAMxE,IALA,IAAI,EAAO,KACP,EAAK,wrBACL,EAAgB,KAAK,IAAI,eAAe,KAAK,OAAO,EACpD,EACA,EAAI,EACD,EAAI,EAAG,KAAK,CAAK,GAAG,CACvB,IAAI,EAAM,EAAE,GACR,EAAc,EAAE,GAChB,EAAmB,EAAE,GACrB,EAAW,EAAE,GACb,EAAM,EAAE,GACR,MAAC,EAAK,YAAc,GAExB,KAAI,EAAS,GAAK,EAAE,MAAkC,GAA1B,EAAM,MAAM,EAAG,EAAE,KAAK,EAKlD,GAJA,EAAI,EAAE,MAAQ,EAAE,EAAE,CAAC,OACf,GACA,EAAc,YAAY,KAAK,IAAI,eAAe,EAAQ,KAAK,OAAO,CAAC,EAEvE,EAAK,CACL,IAAI,EAAU,EAAK,QAAQ,iBAAiB,EAAe,EAAE,KAAK,EAC9D,EAAO,EAAK,YAAY,EAAQ,CAAC,UAAU,EAAI,EACnD,EAAK,UAAe,EACpB,EAAc,YAAY,CAAI,EAC9B,GAAgB,EAAU,CAC9B,MACK,GAAI,EACL,GAAI,EAAK,WAAY,CACjB,IAAI,EAAO,KAAK,IAAI,cAAc,MAAM,EACxC,EAAK,UAAY,oCACjB,EAAK,YAAc,EAAK,aAAa,EAAK,WAAY,EAAY,MAAM,EACxE,EAAc,YAAY,CAAI,CAClC,MAEI,EAAc,YAAY,KAAK,IAAI,eAAe,EAAa,KAAK,OAAO,CAAC,OAG/E,GAAI,EAAkB,CACvB,IAAI,EAAO,KAAK,IAAI,cAAc,MAAM,EACxC,EAAK,UAAY,gDACjB,EAAK,YAAc,EAAK,aAAa,EAAK,WAAY,EAAiB,MAAM,EAC7E,EAAc,YAAY,CAAI,CAClC,MACK,GAAI,EAAU,CACf,GAAgB,EAChB,IAAI,EAAO,KAAK,IAAI,cAAc,MAAM,EACxC,EAAK,MAAM,MAAS,EAAK,OAAO,eAAiB,EAAK,KACtD,EAAK,UAAY,EAAK,WAAa,4CAA8C,UACjF,EAAK,YAAc,EAAK,WAAa,EAAK,WAAa,EACvD,EAAc,YAAY,CAAI,CAClC,MACK,GAAI,EAAK,CACV,GAAgB,EAChB,IAAI,EAAO,KAAK,IAAI,cAAc,MAAM,EACxC,EAAK,MAAM,MAAS,EAAK,OAAO,eAAiB,EAAK,KACtD,EAAK,UAAY,UACjB,EAAK,YAAc,EACnB,EAAc,YAAY,CAAI,CAClC,CA5CsD,CA6C1D,CAEA,GADA,EAAc,YAAY,KAAK,IAAI,eAAe,EAAI,EAAM,MAAM,CAAC,EAAI,EAAO,KAAK,OAAO,CAAC,EACtF,EAAY,EAAM,IAAI,EAYvB,EAAO,YAAY,CAAa,MAZN,CAC1B,IAAI,EAAU,OAAS,EAAM,KAAK,QAAQ,MAAO,OAAO,EACpD,EAAO,KAAK,IAAI,cAAc,MAAM,EACpC,EAAM,MAAQ,SACd,EAAK,MAAM,MAAS,EAAM,MAAM,OAAS,KAAK,OAAO,eAAkB,KACvE,EAAK,aAAa,QAAS,EAAI,2BAA4B,aAAa,CAAC,GAE7E,EAAK,UAAY,EACjB,EAAK,YAAY,CAAa,EAC9B,EAAO,YAAY,CAAI,CAC3B,CAIA,OAAO,EAAe,EAAM,MAChC,EACA,EAAK,UAAU,kBAAoB,SAAU,EAAQ,EAAO,EAAK,CAC7D,IAAI,EAAO,EAAM,OAAO,KAAK,cAAc,EAC3C,GAAI,GAAQ,GAAK,GAAQ,EACrB,OAAO,EACX,GAAI,EAAM,IAAM,IAAK,CACjB,GAAQ,EAAO,KAAK,QAEpB,IAAK,IADD,EAAQ,EAAO,KAAK,QACf,EAAI,EAAG,EAAI,EAAO,IACvB,EAAO,YAAY,KAAK,YAAY,IAAI,CAAC,UAAU,EAAI,CAAC,EAG5D,OADA,KAAK,sBAAsB,EACpB,EAAM,OAAO,CAAI,CAC5B,MACK,GAAI,EAAM,IAAM,IAAM,CACvB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,IACtB,EAAO,YAAY,KAAK,YAAY,IAAK,CAAC,UAAU,EAAI,CAAC,EAG7D,OADA,KAAK,sBAAsB,EACpB,EAAM,OAAO,CAAI,CAC5B,CAEA,OADA,KAAK,sBAAsB,EACpB,CACX,EACA,EAAK,UAAU,sBAAwB,UAAY,CAC3C,MAAC,KAAK,wBAA0B,CAAC,KAAK,qBAE1C,MAAK,4BAA8B,CAC/B,YAAa,IAAA,GACb,MAAO,IAAA,GACP,IAAK,IAAA,GACL,IAAK,IAAA,EACT,EACA,IAAI,EAAQ,KAAK,QAAQ,IAAI,OACxB,KAEL,KAAI,EAAS,KAAK,QAAQ,UAAU,UAAU,EAC1C,EAAgB,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,EAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OACrE,EAAqB,KAAK,MAAM,EAAgB,KAAK,OAAO,EAMhE,GALA,KAAK,4BAA8B,CAC/B,YAAa,EACb,MAAO,EAAO,GAClB,EACuB,KAAK,QAAQ,kBAGhC,KAAK,IADD,EAAS,KAAK,QAAQ,kBAAkB,OACnC,EAAI,EAAG,EAAI,EAAO,OAAQ,IAC/B,GAAI,EAAO,MAAQ,EAAO,EAAE,CAAC,MAAM,IAAK,CACpC,KAAK,4BAA4B,IAAM,EAAO,EAAE,CAAC,MAAM,IAAM,EACzD,EAAO,IAAM,EAAO,EAAE,CAAC,MAAM,IAC7B,KAAK,4BAA4B,IAAM,GAGvC,KAAK,4BAA4B,IAAM,EAE3C,KACJ,EAGR,GAAI,CAAC,KAAK,4BAA4B,KAC9B,EAAM,EAAO,OAAS,IAAM,EAAO,SAAW,EAAM,EAAO,IAAI,CAAC,OAAQ,CACxE,KAAK,4BAA4B,IAAM,EACvC,IAAK,IAAI,EAAI,EAAO,IAAM,EAAG,EAAI,EAAM,OAAQ,IAAK,CAChD,IAAI,EAAO,EAAM,GACb,EAAgB,OAAO,KAAK,CAAI,CAAC,CAAC,EAAE,CAAC,OACzC,GAAI,IAAS,KACT,KAAK,4BAA4B,IAAM,EACnC,GAAiB,GACjB,KAEZ,CACJ,CAEJ,KAAK,4BAA4B,CArCa,CAJ9C,CA0CJ,EACA,EAAK,UAAU,wBAA0B,UAAY,CAEjD,IAAK,IADD,EAAqB,KAAK,QAAQ,iBAAiB,0BAA0B,EACxE,EAAI,EAAG,EAAI,EAAmB,OAAQ,IAC3C,EAAmB,EAAE,CAAC,UAAU,OAAO,yBAAyB,CAExE,EACA,EAAK,UAAU,sBAAwB,SAAU,EAAM,EAAa,CAEhE,GADW,KAAK,QAAQ,IAAI,QAAQ,EAAK,GAClC,IAAM,GAAI,CACb,IAAI,EAAU,EAAK,QACnB,GAAI,EAAK,QAAQ,WAAa,EAAK,QAAQ,UAAU,SAAS,gBAAgB,EAC1E,GAAI,EAAK,QAAQ,WAAW,OAAS,EACjC,EAAU,EAAK,QAAQ,WAAW,QAGlC,OAGR,IAAI,EAAa,EAAQ,WACzB,GAAI,EAAY,CACZ,IAAI,EAAO,EAAW,EAAc,GAChC,GAAQ,EAAK,WAAa,EAAK,UAAU,SAAS,kBAAkB,GACpE,EAAK,UAAU,IAAI,yBAAyB,CACpD,CACJ,CACJ,EACA,EAAK,UAAU,4BAA8B,UAAY,CAChD,QAAK,OAEV,KAAI,EAAQ,KAAK,OAAO,MACxB,KAAK,wBAAwB,EAC7B,IAAI,EAAc,KAAK,4BAA4B,YACnD,GAAI,IAAgB,EAChB,GAAI,KAAK,4BAA4B,MAAQ,EACzC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACnC,IAAI,EAAO,EAAM,GACjB,GAAI,KAAK,4BAA4B,KAAO,EAAK,KAAO,KAAK,4BAA4B,MACnF,EAAG,CACL,GAAI,EAAK,KAAO,KAAK,4BAA4B,IAC7C,MACJ,KAAK,sBAAsB,EAAM,CAAW,CAChD,CACJ,MAGA,IAAK,IAAI,EAAI,EAAM,OAAS,EAAG,GAAK,EAAG,IAAK,CACxC,IAAI,EAAO,EAAM,GACjB,GAAI,KAAK,4BAA4B,KAAO,EAAK,IAAM,KAAK,4BAA4B,MAAO,CAC3F,GAAI,EAAK,IAAM,KAAK,4BAA4B,IAC5C,MACJ,KAAK,sBAAsB,EAAM,CAAW,CAChD,CACJ,CAvBgB,CA0B5B,EACA,EAAK,UAAU,mBAAqB,SAAU,EAAQ,CAClD,IAAI,EAAS,KAAK,IAAI,cAAc,KAAK,EAGzC,MAFA,GAAO,UAAY,WACnB,EAAO,MAAM,OAAS,KAAK,OAAO,WAAa,KACxC,CACX,EACA,EAAK,UAAU,mBAAqB,SAAU,EAAQ,EAAQ,EAAQ,CAClE,IAAI,EAAQ,EACR,EAAQ,EACR,EAAa,EAAO,GACpB,EAAe,EACf,EAAS,KAAK,mBAAmB,EACrC,EAAO,YAAY,CAAM,EACzB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAQ,EAAO,GACf,EAAQ,EAAM,MAClB,GAAI,GAAK,GAAK,KAAK,oBAAqB,CAGpC,GAFA,EAAQ,EAAM,OACd,EAAQ,KAAK,kBAAkB,EAAQ,EAAO,CAAU,EACpD,CAAC,EACD,SACJ,GAAS,EAAM,MACnB,CACA,GAAI,EAAQ,EAAM,OAAS,EACvB,EAAe,KAAK,aAAa,EAAQ,EAAc,EAAO,CAAK,EACnE,GAAS,EAAM,WAEd,CACD,KAAO,EAAQ,EAAM,QAAU,GAAY,CACvC,EAAe,KAAK,aAAa,EAAQ,EAAc,EAAO,EAAM,UAAU,EAAG,EAAa,CAAK,CAAC,EACpG,EAAQ,EAAM,UAAU,EAAa,CAAK,EAC1C,EAAQ,EACR,EAAS,KAAK,mBAAmB,EACjC,EAAO,YAAY,CAAM,EACzB,IAAI,EAAO,KAAK,IAAI,eAAe,EAAK,aAAa,OAAQ,EAAO,MAAM,EAAG,KAAK,OAAO,EACzF,EAAK,UAAe,EACpB,EAAO,YAAY,CAAI,EACvB,IACA,EAAe,EACf,EAAa,EAAO,IAAU,OAAO,SACzC,CACI,EAAM,QAAU,IAChB,GAAS,EAAM,OACf,EAAe,KAAK,aAAa,EAAQ,EAAc,EAAO,CAAK,EAE3E,CACJ,CACI,EAAO,EAAO,OAAS,GAAK,KAAK,iBACjC,KAAK,uBAAuB,EAAQ,EAAc,KAAM,GAAI,EAAI,CACxE,EACA,EAAK,UAAU,kBAAoB,SAAU,EAAQ,EAAQ,CAEzD,IAAK,IADD,EAAe,EACV,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAQ,EAAO,GACf,EAAQ,EAAM,WACd,GAAK,GAAK,KAAK,sBACf,EAAQ,KAAK,kBAAkB,EAAQ,CAAK,EACxC,CAAC,IAGT,IAAI,EAAe,EAAM,OAAS,KAAK,gBACnC,OAAO,KAAK,uBAAuB,EAAQ,EAAc,EAAO,CAAK,EACzE,EAAe,KAAK,aAAa,EAAQ,EAAc,EAAO,CAAK,CADM,CAE7E,CACJ,EACA,EAAK,UAAU,uBAAyB,SAAU,EAAQ,EAAc,EAAO,EAAO,EAAM,CACxF,GAAS,KAAK,aAAa,EAAQ,EAAc,EAAO,EAAM,MAAM,EAAG,KAAK,gBAAkB,CAAY,CAAC,EAC3G,IAAI,EAAa,KAAK,IAAI,cAAc,MAAM,EAC9C,EAAW,UAAY,gDACvB,EAAW,YAAc,EAAO,SAAW,yBAC3C,EAAO,YAAY,CAAU,CACjC,EACA,EAAK,UAAU,YAAc,SAAU,EAAQ,EAAK,EAAU,CAG1D,GAFI,CAAC,GAAY,GAAY,IACzB,EAAW,KAAK,QAAQ,YAAY,CAAG,GACvC,EACA,IAAI,EAAS,KAAK,mBAAmB,EAAK,CAAQ,MAElD,KAAI,EAAS,KAAK,QAAQ,UAAU,CAAG,EAC3C,IAAI,EAAa,EACjB,GAAI,EAAO,OAAQ,CACf,IAAI,EAAS,KAAK,QAAQ,gBAAgB,CAAG,EAC7C,GAAI,GAAU,EAAO,OAAQ,CACzB,KAAK,mBAAmB,EAAQ,EAAQ,CAAM,EAC9C,IAAI,EAAa,EAAO,SAC5B,KACK,CACD,IAAI,EAAa,EACb,KAAK,eAAe,IACpB,EAAa,KAAK,mBAAmB,EACrC,EAAO,YAAY,CAAU,GAEjC,KAAK,kBAAkB,EAAY,CAAM,CAC7C,CACJ,MACS,KAAK,eAAe,IACzB,EAAa,KAAK,mBAAmB,EACrC,EAAO,YAAY,CAAU,GAEjC,GAAI,KAAK,SAAW,EAAY,CACxB,IACA,EAAM,EAAS,IAAI,KACvB,IAAI,EAAc,KAAK,IAAI,cAAc,MAAM,EAC/C,EAAY,UAAY,kCACxB,EAAY,YAAc,GAAO,KAAK,QAAQ,UAAU,EAAI,EAAI,KAAK,SAAW,KAAK,SACrF,EAAW,YAAY,CAAW,CACtC,CACJ,EACA,EAAK,UAAU,mBAAqB,SAAU,EAAK,EAAU,CACzD,IAAI,EAAU,KAAK,QACf,EAAe,CAAC,EACpB,SAAS,EAAU,EAAQ,EAAM,EAAI,CAEjC,IADA,IAAI,EAAM,EAAG,EAAM,EACX,EAAM,EAAO,EAAI,CAAC,MAAM,OAAU,GAGtC,GAFA,GAAO,EAAO,EAAI,CAAC,MAAM,OACzB,IACI,GAAO,EAAO,OACd,OAER,GAAI,GAAO,EAAM,CACb,IAAI,EAAQ,EAAO,EAAI,CAAC,MAAM,UAAU,EAAO,CAAG,EAC9C,EAAM,OAAU,EAAK,IACrB,EAAQ,EAAM,UAAU,EAAG,EAAK,CAAI,GACxC,EAAa,KAAK,CACd,KAAM,EAAO,EAAI,CAAC,KACX,OACX,CAAC,EACD,EAAM,EAAO,EAAM,OACnB,GAAO,CACX,CACA,KAAO,EAAM,GAAM,EAAM,EAAO,QAAQ,CACpC,IAAI,EAAQ,EAAO,EAAI,CAAC,MACpB,EAAM,OAAS,EAAM,EACrB,EAAa,KAAK,CACd,KAAM,EAAO,EAAI,CAAC,KAClB,MAAO,EAAM,UAAU,EAAG,EAAK,CAAG,CACtC,CAAC,EAGD,EAAa,KAAK,EAAO,EAAI,EACjC,GAAO,EAAM,OACb,GAAO,CACX,CACJ,CACA,IAAI,EAAS,EAAQ,UAAU,CAAG,EAelC,OAdA,EAAS,KAAK,SAAU,EAAa,EAAK,EAAQ,EAAY,EAAU,CAChE,GAAe,MAOX,IACA,EAAS,EAAQ,UAAU,CAAG,GAC9B,EAAO,QACP,EAAU,EAAQ,EAAY,CAAM,GATxC,EAAa,KAAK,CACd,KAAM,OACN,MAAO,CACX,CAAC,CAQT,EAAG,EAAS,IAAI,IAAK,KAAK,QAAQ,QAAQ,EAAS,IAAI,GAAG,CAAC,CAAC,MAAM,EAC3D,CACX,EACA,EAAK,UAAU,eAAiB,UAAY,CACxC,OAAO,KAAK,QAAQ,eAAe,CACvC,EACO,CACX,EAAE,EACF,EAAK,UAAU,SAAW,IAC1B,EAAK,UAAU,YAAc,IAC7B,EAAK,UAAU,cAAgB,IAC/B,EAAK,UAAU,SAAW,EAAK,UAAU,YACzC,EAAK,UAAU,SAAW,IAC1B,EAAK,UAAU,WAAa,IAC5B,EAAK,UAAU,SAAW,EAC1B,EAAK,UAAU,gBAAkB,IACjC,EAAK,UAAU,eAAiB,GAChC,EAAK,UAAU,WAAa,GAC5B,EAAK,UAAU,SAAW,GAC1B,EAAK,UAAU,QAAU,GACzB,EAAK,UAAU,oBAAsB,GACrC,EAAK,UAAU,uBAAyB,GACxC,EAAK,UAAU,YAAc,CAAC,EAC9B,EAAK,UAAU,QAAU,CAAC,EAC1B,EAAK,UAAU,gBAAkB,EAAK,UAAU,kBAChD,EAAI,UAAU,EAAK,UAAW,CAAY,EAC1C,EAAQ,KAAO,CAEf,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,aAAa,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC/G,IAAI,EAAM,EAAQ,YAAY,EAC1B,EAAwB,UAAY,CACpC,SAAS,EAAO,EAAU,CACtB,KAAK,QAAU,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,6BACzB,EAAS,YAAY,KAAK,OAAO,EACjC,KAAK,UAAY,GACjB,KAAK,WAAa,GAClB,KAAK,cAAgB,IACrB,KAAK,eAAiB,GACtB,KAAK,QAAU,CAAC,EAChB,KAAK,OAAS,KAAK,UAAU,EAC7B,EAAI,YAAY,KAAK,QAAS,oBAAoB,EAClD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,CACvD,CA+KA,MA9KA,GAAO,UAAU,eAAiB,SAAU,EAAK,CAE7C,IAAK,IADD,EAAU,KAAK,QACV,EAAI,EAAQ,OAAQ,KACzB,EAAI,SAAS,EAAQ,EAAE,CAAC,MAAO,UAAW,EAAM,GAAK,GAAG,CAChE,EACA,EAAO,UAAU,mBAAqB,UAAY,CAE9C,IAAK,IADD,EAAU,KAAK,QACV,EAAI,EAAQ,OAAQ,KACzB,EAAQ,EAAE,CAAC,MAAM,kBAAoB,KAAK,cAAgB,KAC9D,KAAK,aAAe,GACpB,WAAW,UAAY,CACf,KAAK,cACL,EAAI,YAAY,KAAK,QAAS,sBAAsB,CAE5D,EAAE,KAAK,IAAI,CAAC,CAChB,EACA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,aAAe,GACpB,EAAI,eAAe,KAAK,QAAS,sBAAsB,CAC3D,EACA,EAAO,UAAU,WAAa,SAAU,EAAS,CAC7C,KAAK,SAAW,CACpB,EACA,EAAO,UAAU,WAAa,SAAU,EAAS,CAC7C,KAAK,QAAU,CACnB,EACA,EAAO,UAAU,YAAc,SAAU,EAAU,CAC3C,GAAY,KAAK,aACjB,KAAK,WAAa,EAClB,KAAK,aAAa,EAE1B,EACA,EAAO,UAAU,iBAAmB,SAAU,EAAe,CACrD,GAAiB,KAAK,gBACtB,KAAK,cAAgB,EACrB,KAAK,aAAa,EAE1B,EACA,EAAO,UAAU,kBAAoB,SAAU,EAAgB,CACvD,GAAkB,KAAK,iBACvB,KAAK,eAAiB,EACtB,EAAI,YAAY,KAAK,QAAS,sBAAuB,CAAc,EACnE,KAAK,eAAe,EAAI,EACxB,KAAK,aAAa,EAE1B,EACA,EAAO,UAAU,UAAY,UAAY,CACrC,IAAI,EAAK,EAAI,cAAc,KAAK,EAIhC,MAHA,GAAG,UAAY,aACf,KAAK,QAAQ,YAAY,CAAE,EAC3B,KAAK,QAAQ,KAAK,CAAE,EACb,CACX,EACA,EAAO,UAAU,aAAe,UAAY,CACxC,GAAI,KAAK,QAAQ,OAAS,EAAG,CACzB,IAAI,EAAK,KAAK,QAAQ,IAAI,EAE1B,OADA,EAAG,WAAW,YAAY,CAAE,EACrB,CACX,CACJ,EACA,EAAO,UAAU,WAAa,UAAY,CACtC,KAAK,UAAY,GACjB,EAAI,YAAY,KAAK,QAAS,oBAAoB,EAClD,KAAK,aAAa,CACtB,EACA,EAAO,UAAU,WAAa,UAAY,CACtC,KAAK,UAAY,GACjB,EAAI,eAAe,KAAK,QAAS,oBAAoB,EACrD,KAAK,aAAa,CACtB,EACA,EAAO,UAAU,aAAe,UAAY,CACxC,IAAI,EAAS,KAAK,eASlB,GARA,cAAc,KAAK,UAAU,EAC7B,aAAa,KAAK,SAAS,EAC3B,KAAK,kBAAkB,EACnB,KAAK,iBACL,KAAK,kBAAoB,GACzB,EAAI,eAAe,KAAK,QAAS,qBAAqB,GAE1D,EAAO,EAAI,EACP,CAAC,KAAK,YAAc,CAAC,KAAK,eAAiB,CAAC,KAAK,UAAW,CAC5D,KAAK,kBAAkB,EACvB,MACJ,CASA,GARI,KAAK,iBACL,KAAK,kBAAoB,GACzB,WAAW,UAAY,CACf,KAAK,mBACL,EAAI,YAAY,KAAK,QAAS,qBAAqB,CAE3D,EAAE,KAAK,IAAI,CAAC,GAEZ,EAAI,kBACJ,KAAK,mBAAmB,MAEvB,CACD,IAAI,EAA2B,UAAY,CACvC,KAAK,UAAY,WAAW,UAAY,CACpC,EAAO,EAAK,CAChB,EAAG,GAAM,KAAK,aAAa,CAC/B,EAAE,KAAK,IAAI,EACX,KAAK,WAAa,YAAY,UAAY,CACtC,EAAO,EAAI,EACX,EAAM,CACV,EAAG,KAAK,aAAa,EACrB,EAAM,CACV,CACJ,EACA,EAAO,UAAU,iBAAmB,SAAU,EAAU,EAAU,CAC9D,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,QACtB,MAAO,CAAE,KAAM,EAAG,IAAK,CAAE,EAC7B,AACI,IAAW,KAAK,QAAQ,UAAU,UAAU,EAChD,IAAI,EAAM,KAAK,QAAQ,yBAAyB,CAAQ,EAMxD,MAAO,CAAE,KALQ,KAAK,UAAY,KAAK,QAAQ,aAAa,UAAU,EAAI,IAAK,EAAS,GAAG,EACrF,KAAK,QAAQ,aAAa,WAAW,EAAI,MAAM,EAC/C,EAAI,OAAS,KAAK,OAAO,gBAGJ,KAFV,EAAI,KAAO,EAAW,KAAK,OAAO,eAAiB,IAChE,KAAK,OAAO,UAC0B,CAC9C,EACA,EAAO,UAAU,eAAiB,SAAU,EAAU,EAAQ,CAC1D,OAAO,EAAS,KAAO,GAAK,EAAS,IAAM,EAAO,SACtD,EACA,EAAO,UAAU,OAAS,SAAU,EAAQ,CACxC,KAAK,OAAS,EACd,IAAI,EAAa,KAAK,QAAQ,kBAC1B,EAAI,EAAG,EAAc,GACrB,IAAe,IAAA,IAAa,EAAW,SAAW,KAClD,EAAa,CAAC,CAAE,OAAQ,IAAK,CAAC,GAElC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,EAAI,EAAG,IAAK,CAC/C,IAAI,EAAW,KAAK,iBAAiB,EAAW,EAAE,CAAC,OAAQ,EAAI,EAC/D,MAAK,EAAS,IAAM,EAAO,OAAS,EAAO,QACvC,EAAS,IAAM,IAAM,EAAI,GAG7B,KAAI,EAAU,KAAK,QAAQ,MAAkB,KAAK,UAAU,EACxD,EAAQ,EAAQ,MACf,KAAK,WAYN,KAAK,WAAW,EAAS,EAAU,EAAQ,EAAW,GAAI,KAAK,OAAO,EAXjE,KAAK,eAAe,EAAU,CAAM,GAIrC,EAAI,SAAS,EAAO,UAAW,OAAO,EACtC,EAAI,UAAU,EAAS,EAAS,KAAM,EAAS,GAAG,EAClD,EAAI,SAAS,EAAO,QAAS,KAAK,MAAM,EAAO,cAAc,EAAI,IAAI,EACrE,EAAI,SAAS,EAAO,SAAU,EAAO,WAAa,IAAI,GANtD,EAAI,SAAS,EAAO,UAAW,MAAM,CAJe,CAgBhE,CACA,KAAO,KAAK,QAAQ,OAAS,GACzB,KAAK,aAAa,EACtB,IAAI,EAAY,KAAK,QAAQ,aAAa,EAC1C,KAAK,cAAc,CAAS,EAC5B,KAAK,UAAY,EACjB,KAAK,aAAa,CACtB,EACA,EAAO,UAAU,cAAgB,SAAU,EAAW,CAC9C,GAAa,KAAK,YAClB,KAAK,UAAY,EACb,EACA,EAAI,YAAY,KAAK,QAAS,uBAAuB,EAErD,EAAI,eAAe,KAAK,QAAS,uBAAuB,EAEpE,EACA,EAAO,UAAU,QAAU,UAAY,CACnC,cAAc,KAAK,UAAU,EAC7B,aAAa,KAAK,SAAS,CAC/B,EACO,CACX,EAAE,EACF,EAAO,UAAU,SAAW,EAC5B,EAAO,UAAU,WAAa,KAC9B,EAAQ,OAAS,CAEjB,CAAC,EAED,IAAI,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,gBAAgB,uBAAuB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAClK,IAAI,EAAa,MAAQ,KAAK,YAAe,UAAY,CACrD,IAAI,EAAgB,SAAU,EAAG,EAAG,CAIhC,MAHA,GAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAU,EAAG,EAAG,CAAE,EAAE,UAAY,CAAG,GAC1E,SAAU,EAAG,EAAG,CAAE,IAAK,IAAI,KAAK,EAAO,OAAO,UAAU,eAAe,KAAK,EAAG,CAAC,IAAG,EAAE,GAAK,EAAE,GAAI,EAC7F,EAAc,EAAG,CAAC,CAC7B,EACA,OAAO,SAAU,EAAG,EAAG,CACnB,GAAI,OAAO,GAAM,YAAc,IAAM,KACjC,MAAU,UAAU,uBAAyB,OAAO,CAAC,EAAI,+BAA+B,EAC5F,EAAc,EAAG,CAAC,EAClB,SAAS,GAAK,CAAE,KAAK,YAAc,CAAG,CACtC,EAAE,UAAY,IAAM,KAAO,OAAO,OAAO,CAAC,GAAK,EAAG,UAAY,EAAE,UAAW,IAAI,EACnF,CACJ,EAAA,CAAG,EACC,EAAM,EAAQ,WAAW,EACzB,EAAM,EAAQ,WAAW,EACzB,EAAQ,EAAQ,aAAa,EAC7B,EAAe,EAAQ,qBAAqB,CAAC,CAAC,aAC9C,EAAe,MACf,EAA2B,UAAY,CACvC,SAAS,EAAU,EAAQ,EAAa,CACpC,KAAK,QAAU,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,8BAAgC,EACzD,KAAK,MAAQ,EAAI,cAAc,KAAK,EACpC,KAAK,MAAM,UAAY,sBACvB,KAAK,MAAM,YAAc,OACzB,KAAK,QAAQ,YAAY,KAAK,KAAK,EACnC,EAAO,YAAY,KAAK,OAAO,EAC/B,KAAK,WAAW,EAAK,EACrB,KAAK,UAAY,GACjB,EAAM,YAAY,KAAK,QAAS,SAAU,KAAK,SAAS,KAAK,IAAI,CAAC,EAClE,EAAM,YAAY,KAAK,QAAS,YAAa,EAAM,cAAc,CACrE,CAMA,MALA,GAAU,UAAU,WAAa,SAAU,EAAW,CAClD,KAAK,QAAQ,MAAM,QAAU,EAAY,GAAK,OAC9C,KAAK,UAAY,EACjB,KAAK,MAAQ,CACjB,EACO,CACX,EAAE,EACF,EAAI,UAAU,EAAU,UAAW,CAAY,EAC/C,IAAI,EAA4B,SAAU,EAAQ,CAC9C,EAAU,EAAY,CAAM,EAC5B,SAAS,EAAW,EAAQ,EAAU,CAClC,IAAI,EAAQ,EAAO,KAAK,KAAM,EAAQ,IAAI,GAAK,KAQ/C,MAPA,GAAM,UAAY,EAClB,EAAM,aAAe,EACrB,EAAS,gBACL,EAAM,MAAQ,EAAI,eAAe,EAAO,aAAa,EACzD,EAAM,MAAM,MAAM,MACd,EAAM,QAAQ,MAAM,OAAS,EAAM,OAAS,IAAM,EAAI,KAC1D,EAAM,UAAY,EACX,CACX,CAoCA,MAnCA,GAAW,UAAU,SAAW,UAAY,CACxC,GAAI,CAAC,KAAK,UAAW,CAEjB,GADA,KAAK,UAAY,KAAK,QAAQ,UAC1B,KAAK,OAAS,EAAG,CACjB,IAAI,EAAI,KAAK,QAAQ,aAAe,KAAK,aACzC,KAAK,UAAY,KAAK,WAAa,EAAI,IAAM,KAAK,MAAQ,EAC9D,CACA,KAAK,MAAM,SAAU,CAAE,KAAM,KAAK,SAAU,CAAC,CACjD,CACA,KAAK,UAAY,EACrB,EACA,EAAW,UAAU,SAAW,UAAY,CACxC,OAAO,KAAK,IAAI,KAAK,UAAY,KAAK,MAAQ,EAAG,KAAK,WAAa,CAAC,CACxE,EACA,EAAW,UAAU,UAAY,SAAU,EAAQ,CAC/C,KAAK,QAAQ,MAAM,OAAS,EAAS,IACzC,EACA,EAAW,UAAU,gBAAkB,SAAU,EAAQ,CACrD,KAAK,aAAe,EAChB,EAAS,GACT,KAAK,MAAQ,EAAe,EAC5B,EAAS,GAEJ,KAAK,OAAS,IACnB,KAAK,MAAQ,GAEjB,KAAK,MAAM,MAAM,OAAS,EAAS,IACvC,EACA,EAAW,UAAU,aAAe,SAAU,EAAW,CACjD,KAAK,WAAa,IAClB,KAAK,UAAY,GACjB,KAAK,UAAY,EACjB,KAAK,QAAQ,UAAY,EAAY,KAAK,MAElD,EACO,CACX,EAAE,CAAS,EACX,EAAW,UAAU,eAAiB,EAAW,UAAU,gBAC3D,IAAI,EAA4B,SAAU,EAAQ,CAC9C,EAAU,EAAY,CAAM,EAC5B,SAAS,EAAW,EAAQ,EAAU,CAClC,IAAI,EAAQ,EAAO,KAAK,KAAM,EAAQ,IAAI,GAAK,KAK/C,MAJA,GAAM,WAAa,EACnB,EAAM,OAAS,EAAS,gBACxB,EAAM,MAAM,MAAM,OACd,EAAM,QAAQ,MAAM,QAAU,EAAM,QAAU,IAAM,EAAI,KACrD,CACX,CA0BA,MAzBA,GAAW,UAAU,SAAW,UAAY,CACnC,KAAK,YACN,KAAK,WAAa,KAAK,QAAQ,WAC/B,KAAK,MAAM,SAAU,CAAE,KAAM,KAAK,UAAW,CAAC,GAElD,KAAK,UAAY,EACrB,EACA,EAAW,UAAU,UAAY,UAAY,CACzC,OAAO,KAAK,UAAY,KAAK,OAAS,CAC1C,EACA,EAAW,UAAU,SAAW,SAAU,EAAO,CAC7C,KAAK,QAAQ,MAAM,MAAQ,EAAQ,IACvC,EACA,EAAW,UAAU,cAAgB,SAAU,EAAO,CAClD,KAAK,MAAM,MAAM,MAAQ,EAAQ,IACrC,EACA,EAAW,UAAU,eAAiB,SAAU,EAAO,CACnD,KAAK,MAAM,MAAM,MAAQ,EAAQ,IACrC,EACA,EAAW,UAAU,cAAgB,SAAU,EAAY,CACnD,KAAK,YAAc,IACnB,KAAK,UAAY,GACjB,KAAK,WAAa,KAAK,QAAQ,WAAa,EAEpD,EACO,CACX,EAAE,CAAS,EACX,EAAQ,UAAY,EACpB,EAAQ,WAAa,EACrB,EAAQ,WAAa,EACrB,EAAQ,WAAa,EACrB,EAAQ,WAAa,CAErB,CAAC,EAED,IAAI,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,gBAAgB,uBAAuB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACzK,IAAI,EAAa,MAAQ,KAAK,YAAe,UAAY,CACrD,IAAI,EAAgB,SAAU,EAAG,EAAG,CAIhC,MAHA,GAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAU,EAAG,EAAG,CAAE,EAAE,UAAY,CAAG,GAC1E,SAAU,EAAG,EAAG,CAAE,IAAK,IAAI,KAAK,EAAO,OAAO,UAAU,eAAe,KAAK,EAAG,CAAC,IAAG,EAAE,GAAK,EAAE,GAAI,EAC7F,EAAc,EAAG,CAAC,CAC7B,EACA,OAAO,SAAU,EAAG,EAAG,CACnB,GAAI,OAAO,GAAM,YAAc,IAAM,KACjC,MAAU,UAAU,uBAAyB,OAAO,CAAC,EAAI,+BAA+B,EAC5F,EAAc,EAAG,CAAC,EAClB,SAAS,GAAK,CAAE,KAAK,YAAc,CAAG,CACtC,EAAE,UAAY,IAAM,KAAO,OAAO,OAAO,CAAC,GAAK,EAAG,UAAY,EAAE,UAAW,IAAI,EACnF,CACJ,EAAA,CAAG,EACC,EAAM,EAAQ,WAAW,EACzB,EAAM,EAAQ,WAAW,EACzB,EAAQ,EAAQ,aAAa,EAC7B,EAAe,EAAQ,qBAAqB,CAAC,CAAC,aAClD,EAAI,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAgvB,oBAAqB,EAAK,EAC9xB,IAAI,EAA2B,UAAY,CACvC,SAAS,EAAU,EAAQ,EAAa,CACpC,KAAK,QAAU,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,SAAW,EACpC,KAAK,MAAQ,EAAI,cAAc,KAAK,EACpC,KAAK,MAAM,UAAY,GACvB,KAAK,QAAQ,YAAY,KAAK,KAAK,EACnC,KAAK,aAAe,GACpB,KAAK,cAAgB,GACrB,EAAO,YAAY,KAAK,OAAO,EAC/B,KAAK,WAAW,EAAK,EACrB,KAAK,UAAY,GACjB,EAAM,0BAA0B,KAAK,QAAS,CAAC,IAAK,IAAK,GAAG,EAAG,KAAM,aAAa,CACtF,CAMA,MALA,GAAU,UAAU,WAAa,SAAU,EAAW,CAClD,KAAK,QAAQ,MAAM,QAAU,EAAY,GAAK,OAC9C,KAAK,UAAY,EACjB,KAAK,MAAQ,CACjB,EACO,CACX,EAAE,EACF,EAAI,UAAU,EAAU,UAAW,CAAY,EAC/C,IAAI,EAA4B,SAAU,EAAQ,CAC9C,EAAU,EAAY,CAAM,EAC5B,SAAS,EAAW,EAAQ,EAAU,CAClC,IAAI,EAAQ,EAAO,KAAK,KAAM,EAAQ,IAAI,GAAK,KAQ/C,MAPA,GAAM,UAAY,EAClB,EAAM,aAAe,EACrB,EAAM,OAAS,EACf,EAAM,MAAQ,EAAM,aACpB,EAAM,SAAW,EACjB,EAAM,MAAM,MAAM,MAAQ,EAAM,QAAQ,MAAM,OAAS,EAAM,OAAS,IAAM,KAC5E,EAAM,UAAY,EACX,CACX,CAiFA,MAhFA,GAAW,UAAU,YAAc,SAAU,EAAO,EAAG,CAC/C,OAAU,aAEV,IAAM,UAAU,CAAC,IAAM,GAAK,EAAE,SAAW,GAG7C,IAAI,EAAE,SAAW,KAAK,MAAO,CACzB,IAAI,EAAO,KACP,EAAa,EAAE,QACf,EAAc,SAAU,EAAG,CAC3B,EAAa,EAAE,OACnB,EACI,EAAY,UAAY,CACxB,cAAc,CAAO,CACzB,EACI,EAAS,EAAE,QACX,EAAW,KAAK,SAChB,EAAmB,UAAY,CAC3B,OAAe,IAAA,GAEnB,KAAI,EAAY,EAAK,sBAAsB,EAAW,EAAa,CAAM,EACrE,IAAc,EAAK,WAEvB,EAAK,MAAM,SAAU,CAAE,KAAM,CAAU,CAAC,CAHiC,CAI7E,EACA,EAAM,QAAQ,KAAK,MAAO,EAAa,CAAS,EAChD,IAAI,EAAU,YAAY,EAAkB,EAAE,EAC9C,OAAO,EAAM,eAAe,CAAC,CACjC,CACA,IAAI,EAAM,EAAE,QAAU,KAAK,QAAQ,sBAAsB,CAAC,CAAC,IAAM,KAAK,YAAc,EAEpF,OADA,KAAK,MAAM,SAAU,CAAE,KAAM,KAAK,sBAAsB,CAAG,CAAE,CAAC,EACvD,EAAM,eAAe,CAAC,CAH7B,CAIJ,EACA,EAAW,UAAU,UAAY,UAAY,CACzC,OAAO,KAAK,MAChB,EACA,EAAW,UAAU,sBAAwB,SAAU,EAAU,CAC7D,IAAI,EAAY,GAAY,KAAK,WAAa,KAAK,aAAe,KAAK,YAAc,KAAK,aAQ1F,MAPA,KAAyB,EACrB,EAAY,EACZ,EAAY,EAEP,EAAY,KAAK,WAAa,KAAK,aACxC,EAAY,KAAK,WAAa,KAAK,YAEhC,CACX,EACA,EAAW,UAAU,SAAW,UAAY,CACxC,OAAO,KAAK,IAAI,KAAK,UAAY,KAAK,MAAQ,EAAG,KAAK,WAAa,CAAC,CACxE,EACA,EAAW,UAAU,UAAY,SAAU,EAAQ,CAC/C,KAAK,OAAS,KAAK,IAAI,EAAG,CAAM,EAChC,KAAK,YAAc,KAAK,OACxB,KAAK,WAAa,KAAK,OACvB,KAAK,gBAAgB,KAAK,WAAY,EAAI,CAC9C,EACA,EAAW,UAAU,gBAAkB,SAAU,EAAQ,EAAO,CACxD,KAAK,aAAe,GAAU,CAAC,IAEnC,KAAK,WAAa,EAClB,KAAK,YAAc,KAAK,YAAc,KAAK,WAAa,KAAK,WACzD,KAAK,YAAc,KAAK,cACxB,KAAK,YAAc,KAAK,aACxB,KAAK,YAAc,KACnB,KAAK,YAAc,IACvB,KAAK,MAAM,MAAM,OAAS,KAAK,YAAc,KACzC,KAAK,UAAa,KAAK,WAAa,KAAK,aACzC,KAAK,UAAa,KAAK,WAAa,KAAK,WACrC,KAAK,UAAY,IACjB,KAAK,UAAY,GACrB,KAAK,MAAM,SAAU,CAAE,KAAM,KAAK,SAAU,CAAC,GAErD,EACA,EAAW,UAAU,aAAe,SAAU,EAAW,CACrD,KAAK,UAAY,EACb,EAAY,IACZ,EAAY,GAChB,KAAK,SAAW,GAAa,KAAK,YAAc,KAAK,cAAgB,KAAK,WAAa,KAAK,YAC5F,KAAK,MAAM,MAAM,IAAM,KAAK,SAAW,IAC3C,EACO,CACX,EAAE,CAAS,EACX,EAAW,UAAU,eAAiB,EAAW,UAAU,gBAC3D,IAAI,EAA4B,SAAU,EAAQ,CAC9C,EAAU,EAAY,CAAM,EAC5B,SAAS,EAAW,EAAQ,EAAU,CAClC,IAAI,EAAQ,EAAO,KAAK,KAAM,EAAQ,IAAI,GAAK,KAM/C,MALA,GAAM,WAAa,EACnB,EAAM,YAAc,EACpB,EAAM,OAAS,EAAM,cACrB,EAAM,MAAM,MAAM,OAAS,EAAM,QAAQ,MAAM,QAAU,EAAM,QAAU,IAAM,KAC/E,EAAM,SAAW,EACV,CACX,CA+EA,MA9EA,GAAW,UAAU,YAAc,SAAU,EAAO,EAAG,CAC/C,OAAU,aAEV,IAAM,UAAU,CAAC,IAAM,GAAK,EAAE,SAAW,GAG7C,IAAI,EAAE,SAAW,KAAK,MAAO,CACzB,IAAI,EAAO,KACP,EAAa,EAAE,QACf,EAAc,SAAU,EAAG,CAC3B,EAAa,EAAE,OACnB,EACI,EAAY,UAAY,CACxB,cAAc,CAAO,CACzB,EACI,EAAS,EAAE,QACX,EAAY,KAAK,UACjB,EAAmB,UAAY,CAC3B,OAAe,IAAA,GAEnB,KAAI,EAAa,EAAK,wBAAwB,EAAY,EAAa,CAAM,EACzE,IAAe,EAAK,YAExB,EAAK,MAAM,SAAU,CAAE,KAAM,CAAW,CAAC,CAHoC,CAIjF,EACA,EAAM,QAAQ,KAAK,MAAO,EAAa,CAAS,EAChD,IAAI,EAAU,YAAY,EAAkB,EAAE,EAC9C,OAAO,EAAM,eAAe,CAAC,CACjC,CACA,IAAI,EAAO,EAAE,QAAU,KAAK,QAAQ,sBAAsB,CAAC,CAAC,KAAO,KAAK,WAAa,EAErF,OADA,KAAK,MAAM,SAAU,CAAE,KAAM,KAAK,wBAAwB,CAAI,CAAE,CAAC,EAC1D,EAAM,eAAe,CAAC,CAH7B,CAIJ,EACA,EAAW,UAAU,UAAY,UAAY,CACzC,OAAO,KAAK,UAAY,KAAK,OAAS,CAC1C,EACA,EAAW,UAAU,wBAA0B,SAAU,EAAW,CAChE,IAAI,EAAa,GAAa,KAAK,UAAY,KAAK,YAAc,KAAK,WAAa,KAAK,YAQzF,MAPA,KAA2B,EACvB,EAAa,EACb,EAAa,EAER,EAAa,KAAK,UAAY,KAAK,YACxC,EAAa,KAAK,UAAY,KAAK,WAEhC,CACX,EACA,EAAW,UAAU,SAAW,SAAU,EAAO,CAC7C,KAAK,MAAQ,KAAK,IAAI,EAAG,CAAK,EAC9B,KAAK,QAAQ,MAAM,MAAQ,KAAK,MAAQ,KACxC,KAAK,WAAa,KAAK,MACvB,KAAK,UAAY,KAAK,MACtB,KAAK,eAAe,KAAK,UAAW,EAAI,CAC5C,EACA,EAAW,UAAU,eAAiB,SAAU,EAAO,EAAO,CACtD,KAAK,YAAc,GAAS,CAAC,IAEjC,KAAK,UAAY,EACjB,KAAK,WAAa,KAAK,WAAa,KAAK,UAAY,KAAK,UACtD,KAAK,WAAa,KAAK,aACvB,KAAK,WAAa,KAAK,YACvB,KAAK,WAAa,KAClB,KAAK,WAAa,IACtB,KAAK,MAAM,MAAM,MAAQ,KAAK,WAAa,KACvC,KAAK,WAAc,KAAK,UAAY,KAAK,YACzC,KAAK,WAAc,KAAK,UAAY,KAAK,UACrC,KAAK,WAAa,IAClB,KAAK,WAAa,GACtB,KAAK,MAAM,SAAU,CAAE,KAAM,KAAK,UAAW,CAAC,GAEtD,EACA,EAAW,UAAU,cAAgB,SAAU,EAAY,CACvD,KAAK,WAAa,EACd,EAAa,IACb,EAAa,GACjB,KAAK,UAAY,GAAc,KAAK,WAAa,KAAK,aAAe,KAAK,UAAY,KAAK,WAC3F,KAAK,MAAM,MAAM,KAAQ,KAAK,UAAa,IAC/C,EACO,CACX,EAAE,CAAS,EACX,EAAW,UAAU,cAAgB,EAAW,UAAU,eAC1D,EAAQ,UAAY,EACpB,EAAQ,WAAa,EACrB,EAAQ,WAAa,EACrB,EAAQ,WAAa,EACrB,EAAQ,WAAa,CAErB,CAAC,EAED,IAAI,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,eAAe,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC/G,IAAI,EAAQ,EAAQ,aAAa,EAyCjC,EAAQ,WAxCwB,UAAY,CACxC,SAAS,EAAW,EAAU,EAAK,CAC/B,KAAK,SAAW,EAChB,KAAK,QAAU,GACf,KAAK,QAAU,EACf,KAAK,gBAAkB,EACvB,KAAK,OAAS,GAAO,OACrB,IAAI,EAAQ,KACZ,KAAK,OAAS,SAAU,EAAI,CACxB,EAAM,QAAU,GAChB,IAAI,EAAU,EAAM,QAMpB,GALI,IACA,EAAM,UAAU,GAAG,EACnB,EAAM,QAAU,EAChB,EAAM,SAAS,CAAO,GAEtB,EAAM,QAAS,CACf,GAAI,EAAM,kBAAoB,EAC1B,OACJ,EAAM,SAAS,CACnB,KAEI,GAAM,gBAAkB,CAEhC,CACJ,CAaA,MAZA,GAAW,UAAU,SAAW,SAAU,EAAQ,CAC9C,KAAK,SAAyB,EAC1B,KAAK,SAAW,CAAC,KAAK,UACtB,EAAM,UAAU,KAAK,MAAM,EAC3B,KAAK,QAAU,GAEvB,EACA,EAAW,UAAU,MAAQ,SAAU,EAAQ,CAC3C,IAAI,EAAU,KAAK,QAEnB,MADA,MAAK,QAAU,EACR,CACX,EACO,CACX,EAC8B,CAE9B,CAAC,EAED,IAAI,OAAO,yBAAyB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,gBAAgB,oBAAoB,uBAAuB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,IAAI,EAAM,EAAQ,YAAY,EACxO,EAAM,EAAQ,YAAY,EAC1B,EAAO,EAAQ,aAAa,EAC5B,EAAQ,EAAQ,cAAc,EAC9B,EAAY,EAAQ,kBAAkB,EACtC,EAAe,EAAQ,sBAAsB,CAAC,CAAC,aAC/C,EAAa,IACb,EAAe,OAAO,gBAAkB,WACxC,EAAI,IACJ,EAA6B,UAAY,CACzC,SAAS,EAAY,EAAU,CAC3B,KAAK,GAAK,EAAI,cAAc,KAAK,EACjC,KAAK,sBAAsB,KAAK,GAAG,MAAO,EAAI,EAC9C,KAAK,MAAQ,EAAI,cAAc,KAAK,EACpC,KAAK,sBAAsB,KAAK,MAAM,KAAK,EAC3C,KAAK,aAAe,EAAI,cAAc,KAAK,EAC3C,KAAK,sBAAsB,KAAK,aAAa,KAAK,EAClD,KAAK,GAAG,YAAY,KAAK,KAAK,EAC9B,KAAK,GAAG,YAAY,KAAK,YAAY,EACrC,EAAS,YAAY,KAAK,EAAE,EAC5B,KAAK,aAAa,YAAc,EAAK,aAAa,IAAK,CAAU,EACjE,KAAK,eAAiB,CAAE,MAAO,EAAG,OAAQ,CAAE,EACxC,EACA,KAAK,aAAa,EAElB,KAAK,oBAAoB,CACjC,CAoIA,MAnIA,GAAY,UAAU,sBAAwB,SAAU,EAAO,EAAQ,CACnE,EAAM,MAAQ,EAAM,OAAS,OAC7B,EAAM,KAAO,EAAM,IAAM,MACzB,EAAM,WAAa,SACnB,EAAM,SAAW,WACjB,EAAM,WAAa,MACf,EAAU,KAAO,EACjB,EAAM,eAAiB,UAGvB,EAAM,KAAO,UAEjB,EAAM,SAAW,EAAS,SAAW,SACzC,EACA,EAAY,UAAU,oBAAsB,SAAU,EAAM,CAGxD,GAFI,IAAS,IAAA,KACT,EAAO,KAAK,cAAc,GAC1B,IAAS,KAAK,eAAe,QAAU,EAAK,OAAS,KAAK,eAAe,SAAW,EAAK,QAAS,CAClG,KAAK,aAAa,MAAM,WAAa,OACrC,IAAI,EAAW,KAAK,cAAc,EAClC,KAAK,aAAa,MAAM,WAAa,GACrC,KAAK,eAAiB,EACtB,KAAK,UAAY,OAAO,OAAO,IAAI,EACnC,KAAK,eAAiB,GAAY,EAAS,QAAU,EAAK,OAAS,EAAS,SAAW,EAAK,OAC5F,KAAK,MAAM,sBAAuB,CAAE,KAAM,CAAK,CAAC,CACpD,CACJ,EACA,EAAY,UAAU,aAAe,UAAY,CAC7C,IAAI,EAAO,KACX,KAAK,UAAY,IAAI,OAAO,eAAe,SAAU,EAAG,CACpD,EAAK,oBAAoB,CAC7B,CAAC,EACD,KAAK,UAAU,QAAQ,KAAK,YAAY,CAC5C,EACA,EAAY,UAAU,iBAAmB,UAAY,CACjD,GAAI,KAAK,uBAAyB,KAAK,UACnC,OAAO,KAAK,sBAChB,IAAI,EAAO,KACX,MAAO,MAAK,sBAAwB,EAAM,OAAO,SAAS,GAAK,CAC3D,EAAK,oBAAoB,EACzB,EAAM,OAAO,EAAI,GAAG,CACxB,EAAG,GAAG,CACV,EACA,EAAY,UAAU,WAAa,SAAU,EAAK,CAC1C,EACA,KAAK,iBAAiB,EAErB,AAED,KAAK,yBADL,cAAc,KAAK,qBAAqB,EACX,EAErC,EACA,EAAY,UAAU,cAAgB,SAAU,EAAM,CAClD,IAAI,EAAO,CACP,QAAS,GAAQ,KAAK,aAAA,CAAc,aACpC,OAAQ,GAAQ,KAAK,aAAA,CAAc,YAAc,CACrD,EAGA,OAFI,EAAK,QAAU,GAAK,EAAK,SAAW,EAC7B,KACJ,CACX,EACA,EAAY,UAAU,kBAAoB,SAAU,EAAI,CAGpD,MAFA,MAAK,MAAM,YAAc,EAAK,aAAa,EAAI,CAAU,EAC9C,KAAK,MAAM,sBACZ,CAAC,CAAC,MAAQ,CACxB,EACA,EAAY,UAAU,kBAAoB,SAAU,EAAI,CACpD,IAAI,EAAI,KAAK,UAAU,GAIvB,OAHI,IAAM,IAAA,KACN,EAAI,KAAK,UAAU,GAAM,KAAK,kBAAkB,CAAE,EAAI,KAAK,eAAe,OAEvE,CACX,EACA,EAAY,UAAU,QAAU,UAAY,CACxC,cAAc,KAAK,qBAAqB,EACpC,KAAK,WACL,KAAK,UAAU,WAAW,EAC1B,KAAK,IAAM,KAAK,GAAG,YACnB,KAAK,GAAG,WAAW,YAAY,KAAK,EAAE,CAC9C,EACA,EAAY,UAAU,SAAW,SAAU,EAAS,CAGhD,MAFI,CAAC,GAAW,CAAC,EAAQ,cACd,GACH,OAAO,OAAO,iBAAiB,CAAO,CAAC,CAAC,IAAO,GAAK,GAAK,KAAK,SAAS,EAAQ,aAAa,CACxG,EACA,EAAY,UAAU,2BAA6B,UAAY,CAC3D,IAAI,EAAI,SAAU,EAAG,EAAG,CACpB,MAAO,CAAC,MAAO,CACP,MAAO,0BAA4B,EAAI,WAAa,EAAI,KAC5D,CAAC,CACT,EACA,KAAK,IAAM,EAAI,SAAS,CAAC,EAAE,EAAG,CAAC,EAAG,EAAE,EAAG,CAAC,EAAG,EAAE,EAAG,CAAC,EAAG,EAAE,EAAG,CAAC,CAAC,EAAG,KAAK,EAAE,CACzE,EACA,EAAY,UAAU,qBAAuB,SAAU,EAAW,EAAO,CACrE,AAEI,IAAY,EAAI,EADL,KAAK,SAAS,KAAK,EACP,EAAG,CAAS,EAEvC,SAAS,EAAM,EAAI,EAAI,EAAG,CACtB,IAAI,EAAM,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EAAG,GACrC,MAAO,EACF,CAAC,EAAG,GAAK,EAAE,GAAK,EAAG,GAAK,EAAE,IAAM,GAChC,CAAC,EAAG,GAAK,EAAE,GAAK,EAAG,GAAK,EAAE,IAAM,CACrC,CACJ,CACA,SAAS,EAAI,EAAG,EAAG,CAAE,MAAO,CAAC,EAAE,GAAK,EAAE,GAAI,EAAE,GAAK,EAAE,EAAE,CAAG,CACxD,SAAS,EAAI,EAAG,EAAG,CAAE,MAAO,CAAC,EAAE,GAAK,EAAE,GAAI,EAAE,GAAK,EAAE,EAAE,CAAG,CACxD,SAAS,EAAI,EAAG,EAAG,CAAE,MAAO,CAAC,EAAI,EAAE,GAAI,EAAI,EAAE,EAAE,CAAG,CAC7C,KAAK,KACN,KAAK,2BAA2B,EACpC,SAAS,EAAE,EAAI,CACX,IAAI,EAAI,EAAG,sBAAsB,EACjC,MAAO,CAAC,EAAE,KAAM,EAAE,GAAG,CACzB,CACA,IAAI,EAAI,EAAE,KAAK,IAAI,EAAE,EACjB,EAAI,EAAE,KAAK,IAAI,EAAE,EACjB,EAAI,EAAE,KAAK,IAAI,EAAE,EACjB,EAAI,EAAE,KAAK,IAAI,EAAE,EACjB,EAAI,EAAM,EAAI,EAAG,CAAC,EAAG,EAAI,EAAG,CAAC,EAAG,EAAI,EAAI,EAAG,CAAC,EAAG,EAAI,EAAG,CAAC,CAAC,CAAC,EACzD,EAAK,EAAI,EAAI,EAAE,GAAI,EAAI,EAAG,CAAC,CAAC,EAC5B,EAAK,EAAI,EAAI,EAAE,GAAI,EAAI,EAAG,CAAC,CAAC,EAChC,GAAI,EAAO,CACP,IAAI,EAAI,EACJ,EAAI,EAAE,GAAK,EAAE,GAAK,EAAI,EAAE,GAAK,EAAE,GAAK,EAAI,EACxC,EAAK,EAAI,EAAI,EAAE,GAAI,CAAE,EAAG,EAAI,EAAE,GAAI,CAAE,CAAC,EACzC,OAAO,EAAI,EAAI,EAAI,EAAI,EAAG,CAAE,EAAG,CAAC,CACpC,CACA,IAAI,EAAI,EAAI,EAAW,CAAC,EAExB,OAAO,EAAI,EADH,EAAM,EAAI,EAAI,EAAI,EAAE,GAAI,CAAC,CAAC,EAAG,EAAI,EAAI,EAAI,EAAE,GAAI,CAAC,CAAC,EAAG,CAC9C,CAAC,CACnB,EACO,CACX,EAAE,EACF,EAAY,UAAU,eAAiB,CAAE,MAAO,EAAG,OAAQ,CAAE,EAC7D,EAAI,UAAU,EAAY,UAAW,CAAY,EACjD,EAAQ,YAAc,CAEtB,CAAC,EAED,IAAI,OAAO,qBAAqB,CAAC,UAAU,UAAU,QAAQ,EAAG,SAAS,EAAS,EAAS,EAAO,CAWlG,EAAO,QAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEjB,CAAC,EAED,IAAI,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,uBAAuB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACzJ,IAAI,EAAM,EAAQ,YAAY,EAC1B,EAAM,EAAQ,YAAY,EAC1B,EAAe,EAAQ,sBAAsB,CAAC,CAAC,aAC/C,EAA2B,UAAY,CACvC,SAAS,EAAU,EAAY,EAAU,CACrC,KAAK,SAAW,EAChB,KAAK,WAAa,EAClB,KAAK,UAAY,EAAS,YAAY,UACtC,KAAK,WAAa,EAAS,YAAY,WACvC,KAAK,oBAAuB,EAAI,KAAK,WAAc,EACnD,KAAK,wBAA2B,KAAK,oBAAsB,EAAK,EAChE,KAAK,OAAS,CAAC,EACf,KAAK,OAAO,KAAO,CACf,MAAS,uBACT,QAAW,uBACX,KAAQ,sBACZ,EACA,KAAK,OAAO,MAAQ,CAChB,MAAS,iBACT,QAAW,iBACX,KAAQ,gBACZ,EACA,KAAK,cAAc,CAAU,CACjC,CAkGA,MAjGA,GAAU,UAAU,cAAgB,UAAY,CAC5C,KAAK,OAAS,EAAI,cAAc,QAAQ,EACxC,KAAK,OAAO,MAAM,IAAM,MACxB,KAAK,OAAO,MAAM,MAAQ,MAC1B,KAAK,OAAO,MAAM,OAAS,IAC3B,KAAK,OAAO,MAAM,SAAW,UACjC,EACA,EAAU,UAAU,cAAgB,SAAU,EAAY,CACtD,KAAK,cAAc,EACnB,KAAK,WAAa,EAClB,EAAW,QAAQ,YAAY,KAAK,MAAM,EAC1C,KAAK,cAAc,CACvB,EACA,EAAU,UAAU,kBAAoB,SAAU,EAAQ,CACtD,GAAI,OAAO,KAAK,OAAO,YAAe,WAClC,OAEJ,IAAI,EAAU,KAAK,SAAS,MAAM,SAAW,GAAQ,KAAK,OAAO,KAAO,KAAK,OAAO,MACpF,KAAK,cAAc,CAAM,EACzB,IAAI,EAAM,KAAK,OAAO,WAAW,IAAI,EACrC,SAAS,EAAQ,EAAG,EAAG,CAKnB,OAJI,EAAE,SAAW,EAAE,SACR,GACX,EAAI,EAAE,SAAW,EAAE,SAGvB,CACA,IAAI,EAAc,KAAK,SAAS,QAAQ,aAExC,GADA,EAAI,UAAU,EAAG,EAAG,KAAK,OAAO,MAAO,KAAK,OAAO,MAAM,EACrD,EAAa,CACb,IAAI,EAAa,CACb,KAAQ,EACR,QAAW,EACX,MAAS,CACb,EACA,EAAY,QAAQ,SAAU,EAAM,CAChC,EAAK,SAAc,EAAW,EAAK,OAAS,IAChD,CAAC,EACD,EAAc,EAAY,KAAK,CAAO,EACtC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,OAAQ,IAAK,CACzC,IAAI,EAAM,EAAY,EAAE,CAAC,IACrB,EAAU,KAAK,wBAAwB,CAAG,EAC1C,EAAU,EAAU,KAAK,WACzB,EAAK,KAAK,MAAM,KAAK,YAAc,CAAO,EAC1C,EAAK,KAAK,MAAM,KAAK,YAAc,CAAO,EAC1C,EAAU,KAAK,OAAO,EAAK,GAAM,CAAC,EAClC,EAAc,EAAK,EACnB,EAAa,KAAK,0BAClB,EAAa,KAAK,yBAElB,EAAU,EAAa,IACvB,EAAU,GAEV,EAAU,EAAa,KAAK,eAC5B,EAAU,KAAK,aAAe,GAElC,IAAI,EAAO,EAAU,EAEjB,EADK,EAAU,EACG,EACtB,EAAI,UAAY,EAAO,EAAY,EAAE,CAAC,OAAS,KAC/C,EAAI,SAAS,EAAG,EAAM,KAAK,MAAM,KAAK,aAAe,CAAC,EAAG,CAAU,CACvE,CACJ,CACA,IAAI,EAAS,KAAK,SAAS,QAAQ,UAAU,UAAU,EACvD,GAAI,EAAQ,CACR,IAAI,EAAW,KAAK,MAAM,KAAK,wBAAwB,EAAO,GAAG,EAAI,KAAK,WAAW,EACrF,EAAI,UAAY,qBAChB,EAAI,SAAS,EAAG,EAAU,KAAK,YAAa,CAAC,CACjD,CACJ,EACA,EAAU,UAAU,wBAA0B,SAAU,EAAK,CAGzD,MAFA,IAAY,EACC,KAAK,SAAS,QAAQ,oBAAoB,EAAK,CAAC,EAAI,KAAK,UAE1E,EACA,EAAU,UAAU,cAAgB,SAAU,EAAQ,CAClD,IAAmB,KAAK,SAAS,YACjC,KAAK,UAAY,EAAO,UACxB,KAAK,WAAa,EAAO,WACzB,KAAK,aAAe,EAAO,OAC3B,KAAK,YAAc,KAAK,WAAW,OAAS,KAAK,YACjD,KAAK,aAAa,EAClB,KAAK,OAAO,MAAQ,KAAK,YACzB,KAAK,OAAO,OAAS,KAAK,aACtB,KAAK,UAAY,KAAK,aACtB,KAAK,YAAc,EAGnB,KAAK,YAAc,KAAK,aAAe,KAAK,SAEpD,EACA,EAAU,UAAU,aAAe,UAAY,CAC3C,KAAK,aAAe,KAAK,WAC7B,EACA,EAAU,UAAU,QAAU,UAAY,CACtC,KAAK,OAAO,WAAW,YAAY,KAAK,MAAM,CAClD,EACO,CACX,EAAE,EACF,EAAI,UAAU,EAAU,UAAW,CAAY,EAC/C,EAAQ,UAAY,CAEpB,CAAC,EAED,IAAI,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,aAAa,mBAAmB,mBAAmB,iBAAiB,mBAAmB,gBAAgB,gBAAgB,uBAAuB,uBAAuB,iBAAiB,yBAAyB,wBAAwB,qBAAqB,uBAAuB,oBAAoB,qBAAqB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC7c,IAAI,EAAM,EAAQ,WAAW,EACzB,EAAM,EAAQ,WAAW,EACzB,EAAO,EAAQ,YAAY,EAC3B,EAAS,EAAQ,UAAU,EAC3B,EAAc,EAAQ,gBAAgB,CAAC,CAAC,OACxC,EAAc,EAAQ,gBAAgB,CAAC,CAAC,OACxC,EAAY,EAAQ,cAAc,CAAC,CAAC,KACpC,EAAc,EAAQ,gBAAgB,CAAC,CAAC,OACxC,EAAa,EAAQ,aAAa,CAAC,CAAC,WACpC,EAAa,EAAQ,aAAa,CAAC,CAAC,WACpC,EAAmB,EAAQ,oBAAoB,CAAC,CAAC,WACjD,EAAmB,EAAQ,oBAAoB,CAAC,CAAC,WACjD,EAAa,EAAQ,cAAc,CAAC,CAAC,WACrC,EAAc,EAAQ,sBAAsB,CAAC,CAAC,YAC9C,EAAe,EAAQ,qBAAqB,CAAC,CAAC,aAC9C,EAAY,EAAQ,kBAAkB,EACtC,EAAY,EAAQ,oBAAoB,CAAC,CAAC,UAC1C,EAAY,EAAQ,iBAAiB,EACrC,EAAc,EAAQ,mBAAmB,CAAC,CAAC,YAC/C,EAAI,gBAAgB,EAAW,iBAAkB,EAAK,EACtD,IAAI,EAAiC,UAAY,CAC7C,SAAS,EAAgB,EAAW,EAAO,CACvC,IAAI,EAAQ,KACZ,KAAK,UAAY,GAAa,EAAI,cAAc,KAAK,EACrD,EAAI,YAAY,KAAK,UAAW,YAAY,EACxC,EAAI,QACJ,EAAI,YAAY,KAAK,UAAW,WAAW,EAC/C,KAAK,SAAS,CAAK,EACf,EAAO,IAAI,cAAc,GACzB,EAAO,IAAI,eAAgB,EAAK,EACpC,KAAK,QAAU,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,aACzB,KAAK,UAAU,YAAY,KAAK,OAAO,EACvC,KAAK,QAAQ,aAAa,cAAe,MAAM,EAC/C,KAAK,SAAW,EAAI,cAAc,KAAK,EACvC,KAAK,SAAS,UAAY,eAC1B,KAAK,UAAU,YAAY,KAAK,QAAQ,EACxC,KAAK,QAAU,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,cACzB,KAAK,SAAS,YAAY,KAAK,OAAO,EACtC,KAAK,aAAe,IAAI,EAAY,KAAK,OAAO,EAChD,KAAK,aAAa,GAAG,oBAAqB,KAAK,eAAe,KAAK,IAAI,CAAC,EACxE,KAAK,YAAc,IAAI,EAAY,KAAK,OAAO,EAC/C,IAAI,EAAY,KAAK,WAAa,IAAI,EAAU,KAAK,OAAO,EAC5D,KAAK,OAAS,EAAU,QACxB,KAAK,aAAe,IAAI,EAAY,KAAK,OAAO,EAChD,KAAK,aAAe,IAAI,EAAY,KAAK,OAAO,EAChD,KAAK,aAAe,GACpB,KAAK,SAAW,GAChB,KAAK,UACD,KAAK,WAAa,IAAI,EAAW,KAAK,UAAW,IAAI,EACzD,KAAK,WAAa,IAAI,EAAW,KAAK,UAAW,IAAI,EACrD,KAAK,WAAW,GAAG,SAAU,SAAU,EAAG,CACjC,EAAM,kBACP,EAAM,QAAQ,aAAa,EAAE,KAAO,EAAM,aAAa,GAAG,CAClE,CAAC,EACD,KAAK,WAAW,GAAG,SAAU,SAAU,EAAG,CACjC,EAAM,kBACP,EAAM,QAAQ,cAAc,EAAE,KAAO,EAAM,aAAa,IAAI,CACpE,CAAC,EACD,KAAK,UAAY,EACjB,KAAK,WAAa,EAClB,KAAK,UAAY,CACb,IAAK,EACL,OAAQ,CACZ,EACA,KAAK,aAAe,IAAI,EAAY,KAAK,SAAS,EAClD,KAAK,WAAW,gBAAgB,KAAK,YAAY,EACjD,KAAK,WAAW,GAAG,sBAAuB,SAAU,EAAG,CACnD,EAAM,oBAAoB,EAC1B,EAAM,SAAS,GAAM,EAAM,YAAa,EAAM,MAAM,MAAO,EAAM,MAAM,MAAM,EAC7E,EAAM,QAAQ,sBAAuB,CAAC,CAC1C,CAAC,EACD,KAAK,MAAQ,CACT,MAAO,EACP,OAAQ,EACR,eAAgB,EAChB,cAAe,EACf,OAAQ,EACZ,EACA,KAAK,YAAc,CACf,MAAO,EACP,QAAS,EACT,SAAU,EACV,eAAgB,EAChB,QAAS,EACT,WAAY,EACZ,eAAgB,EAChB,UAAW,EACX,UAAW,EACX,OAAQ,EACR,OAAQ,EACR,aAAc,CAClB,EACA,KAAK,aAAe,CAChB,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,EACR,EAAG,EACH,EAAG,CACP,EACA,KAAK,OAAS,CACV,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,EACR,EAAG,EACH,EAAG,CACP,EACA,KAAK,sBAAwB,CAAC,EAAU,MACxC,KAAK,MAAQ,IAAI,EAAW,KAAK,eAAe,KAAK,IAAI,EAAG,KAAK,UAAU,cAAc,WAAW,EACpG,KAAK,MAAM,SAAS,KAAK,WAAW,EACpC,KAAK,oBAAoB,EACzB,KAAK,WAAW,CAAC,EACjB,KAAK,mBAAmB,EACxB,EAAO,aAAa,IAAI,EACxB,EAAO,QAAQ,WAAY,IAAI,CACnC,CA2sCA,MA1sCA,GAAgB,UAAU,oBAAsB,UAAY,CACpD,KAAK,WAAW,gBAAkB,KAAK,kBACvC,KAAK,gBAAkB,KAAK,WAAW,eACvC,KAAK,SAAS,aAAc,CAAC,KAAK,eAAe,GAErD,KAAK,YAAY,eACb,KAAK,eAAiB,KAAK,WAAW,kBAAkB,EAC5D,KAAK,YAAY,WACb,KAAK,WAAa,KAAK,WAAW,cAAc,EACpD,KAAK,mBAAmB,EACxB,EAAI,SAAS,KAAK,SAAS,MAAO,cAAe,KAAK,WAAa,IAAI,CAC3E,EACA,EAAgB,UAAU,WAAa,SAAU,EAAS,CAClD,KAAK,SACL,KAAK,QAAQ,IAAI,IAAI,oBAAqB,KAAK,mBAAmB,EACtE,KAAK,QAAU,EACX,GAAW,KAAK,aAAa,KAAO,EAAQ,aAAa,GAAK,GAC9D,EAAQ,aAAa,CAAC,KAAK,aAAa,GAAG,EAC/C,KAAK,aAAa,WAAW,CAAO,EACpC,KAAK,YAAY,WAAW,CAAO,EACnC,KAAK,aAAa,WAAW,CAAO,EACpC,KAAK,aAAa,WAAW,CAAO,EACpC,KAAK,WAAW,WAAW,CAAO,EAC7B,IAEL,KAAK,MAAM,SAAS,KAAK,WAAW,EACpC,KAAK,QAAQ,gBAAgB,KAAK,YAAY,EAC9C,KAAK,WAAW,WAAa,KAAK,WAAW,UAAY,KACzD,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,oBAAoB,EACzB,KAAK,QAAQ,IAAI,GAAG,oBAAqB,KAAK,mBAAmB,EACrE,EACA,EAAgB,UAAU,YAAc,SAAU,EAAU,EAAS,EAAO,CAexE,GAdI,IAAY,IAAA,KACZ,EAAU,KACT,KAAK,eAOF,KAAK,cAAc,SAAW,IAC9B,KAAK,cAAc,SAAW,GAC9B,KAAK,cAAc,QAAU,IAC7B,KAAK,cAAc,QAAU,IATjC,KAAK,cAAgB,CACP,WACD,SACb,EAQA,KAAK,cAAc,QAAU,KAAK,YAAY,SAC9C,GAAI,EACA,KAAK,cAAc,QAAU,KAAK,YAAY,aAE9C,OAEJ,KAAK,cAAc,SAAW,KAAK,YAAY,SAEnD,KAAK,MAAM,SAAS,KAAK,YAAY,CACzC,EACA,EAAgB,UAAU,oBAAsB,UAAY,CACxD,KAAK,MAAM,SAAS,KAAK,WAAW,EACpC,KAAK,WAAW,eAAe,EAC/B,KAAK,QAAQ,aAAa,WAAW,KAAK,WAAW,QAAQ,CACjE,EACA,EAAgB,UAAU,gBAAkB,UAAY,CACpD,KAAK,MAAM,SAAS,KAAK,YAAc,KAAK,aAAa,EACzD,KAAK,WAAW,gBAAgB,CACpC,EACA,EAAgB,UAAU,WAAa,UAAY,CAC/C,KAAK,MAAM,SAAS,KAAK,WAAW,CACxC,EACA,EAAgB,UAAU,WAAa,SAAU,EAAO,CAChD,EACA,KAAK,eAAe,KAAK,YAAa,EAAI,EAE1C,KAAK,MAAM,SAAS,KAAK,WAAW,CAC5C,EACA,EAAgB,UAAU,eAAiB,UAAY,CACnD,KAAK,WAAW,oBAAoB,CACxC,EACA,EAAgB,UAAU,iBAAmB,UAAY,CACjD,KAAK,MAAM,QACX,KAAK,MAAM,OAAS,GAEpB,KAAK,SAAS,CACtB,EACA,EAAgB,UAAU,SAAW,SAAU,EAAO,EAAa,EAAO,EAAQ,CAC1E,UAAK,SAAW,GAEf,CAAI,KAAK,SAAW,EACrB,KAAK,WAEL,KAAK,SAAW,KACpB,IAAI,EAAK,KAAK,UACd,AACI,IAAS,EAAG,cAAgB,EAAG,aAC/B,CAAC,GAAU,KAAK,WAAa,KAAK,WAAa,IAC3C,CAAC,EAAG,MAAM,QAAU,EAAG,MAAM,QAAU,SACvC,EAAG,MAAM,OAAS,MAClB,EAAS,EAAG,cAAgB,EAAG,cAGvC,AACI,IAAQ,EAAG,aAAe,EAAG,YACjC,IAAI,EAAU,KAAK,kBAAkB,EAAO,EAAa,EAAO,CAAM,EAGtE,GAFI,KAAK,cACL,KAAK,aAAa,OAAO,EACzB,CAAC,KAAK,MAAM,gBAAmB,CAAC,GAAS,CAAC,EAC1C,MAAO,MAAK,SAAW,EACvB,IACA,KAAK,aAAa,SAAW,MAC7B,EACA,KAAK,eAAe,EAAU,KAAK,SAAU,EAAI,EAEjD,KAAK,MAAM,SAAS,EAAU,KAAK,QAAQ,EAC/C,AACI,KAAK,WAAW,EACpB,KAAK,WAAW,WAAa,KAAK,WAAW,UAAY,KACrD,KAAK,kBACL,KAAK,uBAAuB,EAAI,CA3BJ,CA6BpC,EACA,EAAgB,UAAU,kBAAoB,SAAU,EAAO,EAAa,EAAO,EAAQ,CACvF,GAAW,KAAK,cAAgB,EAChC,IAAI,EAAU,EACV,EAAO,KAAK,MACZ,EAAU,CACV,MAAO,EAAK,MACZ,OAAQ,EAAK,OACb,eAAgB,EAAK,eACrB,cAAe,EAAK,aACxB,EAWA,GAVI,IAAW,GAAS,EAAK,QAAU,KACnC,EAAK,OAAS,EACd,GAAW,KAAK,YAChB,EAAK,eAAiB,EAAK,OACvB,KAAK,eACL,EAAK,gBAAkB,KAAK,WAAW,UAAU,GACrD,KAAK,WAAW,UAAU,EAAK,cAAc,EAC7C,KAAK,WAAW,QAAQ,MAAM,OAAS,KAAK,WAAW,UAAU,EAAI,KACrE,GAAoB,KAAK,eAEzB,IAAU,GAAS,EAAK,OAAS,GAAQ,CACzC,GAAW,KAAK,YAChB,EAAK,MAAQ,EACb,AACI,IAAc,KAAK,YAAc,KAAK,QAAQ,YAAc,EAChE,KAAK,YAAc,EACnB,EAAI,SAAS,KAAK,WAAW,QAAQ,MAAO,OAAQ,EAAc,IAAI,EACtE,EAAI,SAAS,KAAK,SAAS,MAAO,OAAQ,EAAc,KAAK,OAAO,KAAO,IAAI,EAC/E,EAAK,cAAgB,KAAK,IAAI,EAAG,EAAQ,EAAc,KAAK,WAAW,SAAS,EAAI,KAAK,OAAO,CAAC,EACjG,EAAI,SAAS,KAAK,QAAQ,MAAO,OAAQ,KAAK,OAAO,KAAO,IAAI,EAChE,IAAI,EAAQ,KAAK,WAAW,SAAS,EAAI,KACzC,EAAI,SAAS,KAAK,WAAW,QAAQ,MAAO,QAAS,CAAK,EAC1D,EAAI,SAAS,KAAK,SAAS,MAAO,QAAS,CAAK,EAChD,EAAI,SAAS,KAAK,SAAS,MAAO,SAAU,KAAK,WAAW,UAAU,CAAC,EACvE,KAAK,WAAW,SAAS,EAAK,aAAa,GACvC,KAAK,SAAW,KAAK,QAAQ,eAAe,GAAK,KAAK,gBAAgB,GAAK,KAC3E,GAAW,KAAK,YAExB,CAIA,MAHA,GAAK,OAAS,CAAC,GAAS,CAAC,EACrB,GACA,KAAK,QAAQ,SAAU,CAAO,EAC3B,CACX,EACA,EAAgB,UAAU,eAAiB,SAAU,EAAO,CACxD,IAAI,EAAc,KAAK,YAAc,EAAQ,EACzC,GAAe,KAAK,cACpB,KAAK,UAAY,KAAK,kBAAkB,GAAM,EAAa,KAAK,MAAM,MAAO,KAAK,MAAM,MAAM,GAC9F,KAAK,QAAQ,eAAe,GAAK,KAAK,gBAAgB,GAGjD,KAAK,MAAM,OAFhB,KAAK,MAAM,SAAS,KAAK,WAAW,EAMpC,KAAK,oBAAoB,CAEjC,EACA,EAAgB,UAAU,gBAAkB,UAAY,CACpD,IAAI,EAAiB,KAAK,MAAM,cAAgB,KAAK,SAAW,EAC5D,EAAQ,KAAK,MAAM,EAAiB,KAAK,cAAc,EAC3D,OAAO,KAAK,QAAQ,gBAAgB,EAAO,KAAK,kBAAoB,KAAK,kBAAkB,CAC/F,EACA,EAAgB,UAAU,kBAAoB,SAAU,EAAe,CACnE,KAAK,UAAU,iBAAkB,CAAa,CAClD,EACA,EAAgB,UAAU,kBAAoB,UAAY,CACtD,OAAO,KAAK,eAChB,EACA,EAAgB,UAAU,kBAAoB,SAAU,EAAgB,CACpE,KAAK,UAAU,iBAAkB,CAAc,EAC/C,KAAK,QAAQ,aAAa,kBAAkB,CAAc,CAC9D,EACA,EAAgB,UAAU,kBAAoB,UAAY,CACtD,OAAO,KAAK,UAAU,gBAAgB,CAC1C,EACA,EAAgB,UAAU,uBAAyB,UAAY,CAC3D,OAAO,KAAK,UAAU,qBAAqB,CAC/C,EACA,EAAgB,UAAU,uBAAyB,SAAU,EAAS,CAClE,KAAK,UAAU,sBAAuB,CAAO,CACjD,EACA,EAAgB,UAAU,yBAA2B,UAAY,CAC7D,OAAO,KAAK,UAAU,uBAAuB,CACjD,EACA,EAAgB,UAAU,yBAA2B,SAAU,EAAW,CACtE,KAAK,UAAU,wBAAyB,CAAS,CACrD,EACA,EAAgB,UAAU,mBAAqB,SAAU,EAAiB,CACtE,KAAK,UAAU,kBAAmB,CAAe,CACrD,EACA,EAAgB,UAAU,mBAAqB,UAAY,CACvD,OAAO,KAAK,UAAU,iBAAiB,CAC3C,EACA,EAAgB,UAAU,qBAAuB,SAAU,EAAmB,CAC1E,KAAK,UAAU,oBAAqB,CAAiB,CACzD,EACA,EAAgB,UAAU,qBAAuB,UAAY,CACzD,OAAO,KAAK,UAAU,mBAAmB,CAC7C,EACA,EAAgB,UAAU,cAAgB,UAAY,CAClD,OAAO,KAAK,UAAU,YAAY,CACtC,EACA,EAAgB,UAAU,cAAgB,SAAU,EAAM,CACtD,OAAO,KAAK,UAAU,aAAc,CAAI,CAC5C,EACA,EAAgB,UAAU,mBAAqB,UAAY,CACvD,OAAO,KAAK,UAAU,iBAAiB,CAC3C,EACA,EAAgB,UAAU,mBAAqB,SAAU,EAAM,CAC3D,KAAK,UAAU,kBAAmB,CAAI,CAC1C,EACA,EAAgB,UAAU,uBAAyB,SAAU,EAAiB,CAC1E,KAAK,UAAU,sBAAuB,CAAe,CACzD,EACA,EAAgB,UAAU,uBAAyB,UAAY,CAC3D,OAAO,KAAK,UAAU,qBAAqB,CAC/C,EACA,EAAgB,UAAU,mBAAqB,UAAY,CACnD,MAAC,KAAK,kBAAoB,CAAC,KAAK,gBAEpC,IAAI,CAAC,KAAK,eAAgB,CACtB,IAAI,EAAc,EAAI,cAAc,KAAK,EACzC,EAAY,UAAY,mCACxB,KAAK,eAAiB,EAAI,cAAc,KAAK,EAC7C,KAAK,eAAe,UAAY,mBAChC,EAAY,YAAY,KAAK,cAAc,EAC3C,KAAK,QAAQ,aAAa,EAAa,KAAK,QAAQ,UAAU,CAClE,CACA,IAAI,EAAQ,KAAK,eAAe,MAChC,EAAM,KAAO,KAAK,MAAM,KAAK,eAAiB,KAAK,mBAAqB,KAAK,QAAQ,EAAI,KACzF,EAAM,WAAa,KAAK,iBAAmB,UAAY,SACnD,KAAK,SAAW,KAAK,QAAQ,OAAS,IACtC,KAAK,gBAAgB,CALzB,CAMJ,EACA,EAAgB,UAAU,oBAAsB,UAAY,CACxD,OAAO,KAAK,SAChB,EACA,EAAgB,UAAU,oBAAsB,UAAY,CACxD,OAAO,KAAK,QAChB,EACA,EAAgB,UAAU,qBAAuB,UAAY,CACzD,OAAO,KAAK,SAChB,EACA,EAAgB,UAAU,sBAAwB,UAAY,CACtD,SAAK,gBAET,KAAI,EAAQ,KAAK,SAAS,MACtB,EAAc,KAAK,aACvB,GAAI,CAAC,KAAK,uBAAyB,CAAC,EAAa,CAC7C,EAAI,UAAU,KAAK,SAAU,KAAM,CAAC,EACpC,MACJ,CACA,IAAI,EAAW,KAAK,aAAa,UAC5B,KAEL,CAAI,GAAe,EAAY,cAC3B,EAAW,KAAK,aAAa,iBAAiB,EAAY,YAAY,MAAO,EAAI,GACrF,IAAI,EAAS,KAAK,YACd,EAAS,EAAS,IAClB,EAAU,EAAS,KACvB,GAAU,EAAO,OACjB,IAAI,EAAI,GAAe,EAAY,mBAAqB,EAAU,SAAW,KAAK,WAAa,EAC/F,GAAI,EAAS,GAAK,EAAS,EAAO,OAAS,EAAG,CAC1C,EAAI,UAAU,KAAK,SAAU,EAAG,CAAC,EACjC,MACJ,CACA,IAAI,EAAI,EACJ,EAAS,KAAK,MAAM,OAAS,EACjC,GAAI,CAAC,EACD,GAAU,KAAK,gBAGf,GAAI,EAAY,kBAAmB,CAC/B,IAAI,EAAM,KAAK,SAAS,MACxB,EAAI,KAAK,eAAkB,KAAK,QAAQ,sBAAsB,CAAG,CAAC,CAAC,EACvE,KAEI,IAAU,KAAK,WAAa,EAGpC,GAAW,KAAK,WACZ,EAAU,KAAK,MAAM,cAAgB,IACrC,EAAU,KAAK,MAAM,cAAgB,GACzC,GAAW,KAAK,YAAc,KAAK,OAAO,KAC1C,EAAI,SAAS,EAAO,SAAU,EAAI,IAAI,EACtC,EAAI,SAAS,EAAO,QAAS,EAAI,IAAI,EACrC,EAAI,UAAU,KAAK,SAAU,KAAK,IAAI,EAAS,KAAK,MAAM,cAAgB,CAAC,EAAG,KAAK,IAAI,EAAQ,CAAM,CAAC,CA9BjB,CAV3D,CAyC9B,EACA,EAAgB,UAAU,mBAAqB,UAAY,CACvD,OAAO,KAAK,YAAY,QAC5B,EACA,EAAgB,UAAU,wBAA0B,UAAY,CAC5D,OAAO,KAAK,YAAY,UAAY,KAAK,YAAY,SAAW,EAAI,EAAI,EAC5E,EACA,EAAgB,UAAU,uBAAyB,UAAY,CAC3D,IAAI,EAAS,KAAK,YACd,EAAU,EAAO,QAIrB,OAHU,KAAK,QAAQ,oBAAoB,EAAS,CAAC,EAAI,EAAO,WACtD,KAAK,QAAQ,aAAa,EAAI,EAAO,OAAS,EAAO,WACpD,EAAU,EACd,CACX,EACA,EAAgB,UAAU,kBAAoB,UAAY,CACtD,OAAO,KAAK,YAAY,OAC5B,EACA,EAAgB,UAAU,WAAa,SAAU,EAAS,CACtD,KAAK,SAAW,EAChB,KAAK,WAAW,WAAW,CAAO,EAClC,KAAK,aAAa,WAAW,CAAO,EACpC,KAAK,aAAa,WAAW,CAAO,EACpC,KAAK,YAAY,WAAW,CAAO,EACnC,KAAK,MAAM,SAAS,KAAK,WAAW,EACpC,KAAK,mBAAmB,CAC5B,EACA,EAAgB,UAAU,gBAAkB,SAAU,EAAK,EAAQ,EAAM,EAAO,CAC5E,IAAI,EAAK,KAAK,aACd,EAAG,IAAM,EAAM,EACf,EAAG,OAAS,EAAS,EACrB,EAAG,MAAQ,EAAQ,EACnB,EAAG,KAAO,EAAO,EACjB,EAAG,EAAI,EAAG,IAAM,EAAG,OACnB,EAAG,EAAI,EAAG,KAAO,EAAG,MAChB,EAAG,KAAO,KAAK,WAAa,GAAK,KAAK,SACtC,KAAK,QAAQ,aAAa,CAAC,EAAG,GAAG,EACrC,KAAK,WAAW,CACpB,EACA,EAAgB,UAAU,UAAY,SAAU,EAAK,EAAQ,EAAM,EAAO,CACtE,IAAI,EAAK,KAAK,OACd,EAAG,IAAM,EAAM,EACf,EAAG,OAAS,EAAS,EACrB,EAAG,MAAQ,EAAQ,EACnB,EAAG,KAAO,EAAO,EACjB,EAAG,EAAI,EAAG,IAAM,EAAG,OACnB,EAAG,EAAI,EAAG,KAAO,EAAG,MACpB,KAAK,kBAAkB,GAAM,KAAK,YAAa,KAAK,MAAM,MAAO,KAAK,MAAM,MAAM,EAClF,KAAK,WAAW,CACpB,EACA,EAAgB,UAAU,2BAA6B,UAAY,CAC/D,OAAO,KAAK,wBAChB,EACA,EAAgB,UAAU,2BAA6B,SAAU,EAAe,CAC5E,KAAK,UAAU,0BAA2B,CAAa,CAC3D,EACA,EAAgB,UAAU,2BAA6B,UAAY,CAC/D,OAAO,KAAK,wBAChB,EACA,EAAgB,UAAU,2BAA6B,SAAU,EAAe,CAC5E,KAAK,UAAU,0BAA2B,CAAa,CAC3D,EACA,EAAgB,UAAU,kBAAoB,UAAY,CACtD,IAAI,EAAe,KAAK,YAAY,UAChC,EAAiB,KAAK,MAAM,eAC5B,CAAC,KAAK,WAAa,KAAK,iBACxB,IAAiB,EAAiB,KAAK,YAAc,KAAK,eACtD,KAAK,UAAY,EAAe,IAChC,EAAe,KAAK,UAAY,EAChC,KAAK,WAAW,UAAY,OAGpC,KAAK,WAAW,gBAAgB,EAAe,KAAK,aAAa,CAAC,EAClE,KAAK,WAAW,aAAa,KAAK,UAAY,KAAK,aAAa,GAAG,CACvE,EACA,EAAgB,UAAU,kBAAoB,UAAY,CACtD,KAAK,WAAW,eAAe,KAAK,YAAY,MAAQ,EAAI,KAAK,SAAW,KAAK,aAAa,CAAC,EAC/F,KAAK,WAAW,cAAc,KAAK,WAAa,KAAK,aAAa,IAAI,CAC1E,EACA,EAAgB,UAAU,OAAS,UAAY,CAC3C,KAAK,QAAU,EACnB,EACA,EAAgB,UAAU,SAAW,UAAY,CAC7C,KAAK,QAAU,EACnB,EACA,EAAgB,UAAU,eAAiB,SAAU,EAAS,EAAO,CAKjE,GAJA,AAEI,KAAK,YADL,GAAW,KAAK,SACA,GAEf,CAAC,KAAK,SAAW,CAAC,KAAK,UAAU,aAAe,KAAK,SAAa,CAAC,GAAW,CAAC,EAAQ,CACxF,KAAK,UAAY,EACjB,MACJ,CACA,GAAI,KAAK,MAAM,OAEX,MADA,MAAK,UAAY,EACV,KAAK,SAAS,EAAI,EAExB,KAAK,YACN,KAAK,WAAW,oBAAoB,EAExC,KAAK,QAAQ,eAAgB,CAAO,EAChC,KAAK,SAAW,KAAK,QAAQ,cAC7B,KAAK,QAAQ,aAAa,sBAAsB,KAAK,YAAY,EACrE,IAAI,EAAS,KAAK,YAClB,GAAI,EAAU,KAAK,aACf,EAAU,KAAK,aACf,EAAU,KAAK,aACf,EAAU,KAAK,cACf,EAAU,KAAK,eACf,EAAU,KAAK,gBAAiB,CAEhC,GADA,GAAW,KAAK,oBAAoB,EAAI,KAAK,MAAM,MAAM,EACrD,EAAO,UAAY,KAAK,YAAY,UAAY,EAAO,gBAAkB,KAAK,YAAY,eAAgB,CAC1G,IAAI,EAAK,KAAK,WAAa,EAAO,SAAW,KAAK,IAAI,KAAK,YAAY,SAAU,CAAC,GAAK,KAAK,WACxF,EAAK,IACL,KAAK,UAAY,EACjB,GAAoB,KAAK,cACzB,GAAW,KAAK,oBAAoB,EAAI,KAAK,MAAM,MAAM,EAEjE,CACA,EAAS,KAAK,YACd,KAAK,kBAAkB,EACnB,EAAU,KAAK,iBACf,KAAK,kBAAkB,EAC3B,EAAI,UAAU,KAAK,QAAS,CAAC,KAAK,WAAY,CAAC,EAAO,MAAM,EAC5D,IAAI,EAAQ,EAAO,MAAQ,EAAI,KAAK,SAAW,KAC3C,EAAS,EAAO,UAAY,KAChC,EAAI,SAAS,KAAK,QAAQ,MAAO,QAAS,CAAK,EAC/C,EAAI,SAAS,KAAK,QAAQ,MAAO,SAAU,CAAM,CACrD,CAOA,GANI,EAAU,KAAK,kBACf,EAAI,UAAU,KAAK,QAAS,CAAC,KAAK,WAAY,CAAC,EAAO,MAAM,EAC5D,KAAK,SAAS,UAAY,KAAK,YAAc,EAAI,gBAAkB,gCAC/D,KAAK,8BACL,KAAK,SAAS,WAAa,KAAK,yBAEpC,EAAU,KAAK,YAAa,CAC5B,KAAK,cAAgB,KACrB,KAAK,WAAW,OAAO,CAAM,EACzB,KAAK,aACL,KAAK,aAAa,OAAO,CAAM,EAC/B,KAAK,kBACL,KAAK,iBAAiB,kBAAkB,CAAM,EAElD,KAAK,YAAY,OAAO,CAAM,EAC9B,KAAK,aAAa,OAAO,CAAM,EAC/B,KAAK,aAAa,OAAO,CAAM,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,cAAe,CAAO,EACnC,MACJ,CACA,GAAI,EAAU,KAAK,cAAe,CAC9B,KAAK,cAAgB,KACjB,EAAU,KAAK,aAAe,EAAU,KAAK,aAC7C,KAAK,WAAW,OAAO,CAAM,EAE7B,KAAK,WAAW,YAAY,CAAM,EAClC,KAAK,cACD,EAAU,KAAK,eAAiB,EAAU,KAAK,aAC/C,KAAK,aAAa,OAAO,CAAM,EAE/B,KAAK,aAAa,YAAY,CAAM,GAExC,KAAK,kBACL,KAAK,iBAAiB,kBAAkB,CAAM,EAElD,KAAK,YAAY,OAAO,CAAM,EAC9B,KAAK,aAAa,OAAO,CAAM,EAC/B,KAAK,aAAa,OAAO,CAAM,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,cAAe,CAAO,EACnC,MACJ,CACI,EAAU,KAAK,aACf,KAAK,cAAgB,KACrB,KAAK,WAAW,OAAO,CAAM,EACzB,KAAK,aACL,KAAK,aAAa,OAAO,CAAM,EAC/B,KAAK,kBACL,KAAK,iBAAiB,kBAAkB,CAAM,GAG7C,EAAU,KAAK,eAChB,KAAK,aAAa,GAAM,EAAU,KAAK,eAAkB,KAAK,cAC9D,KAAK,aAAa,OAAO,CAAM,EAC/B,KAAK,kBACL,KAAK,iBAAiB,kBAAkB,CAAM,GAG7C,EAAU,KAAK,aAAe,EAAU,KAAK,eAC9C,KAAK,aACL,KAAK,aAAa,OAAO,CAAM,EAC/B,KAAK,kBACL,KAAK,iBAAiB,kBAAkB,CAAM,GAG7C,EAAU,KAAK,gBAChB,KAAK,sBACL,KAAK,aAAa,oBAAoB,CAAM,EAC5C,KAAK,kBACL,KAAK,iBAAiB,kBAAkB,CAAM,GAGlD,EAAU,KAAK,gBACf,KAAK,aAAa,OAAO,CAAM,EAC/B,KAAK,sBAAsB,GAE3B,GAAW,KAAK,cAAgB,KAAK,sBACrC,KAAK,aAAa,OAAO,CAAM,EAE/B,GAAW,KAAK,cAAgB,KAAK,qBACrC,KAAK,YAAY,OAAO,CAAM,EAElC,KAAK,QAAQ,cAAe,CAAO,CACvC,EACA,EAAgB,UAAU,UAAY,UAAY,CAC9C,IAAI,EAAS,KAAK,QAAQ,gBAAgB,EAAI,KAAK,WAC/C,EAAY,KAAK,UAAY,KAAK,WAClC,EAAgB,KAAK,IAAI,EAAW,KAAK,KAAK,KAAK,WAAa,GAAK,KAAK,WAAY,CAAM,CAAC,EAAI,KAAK,aAAa,GAAK,KAAK,cAAgB,GAC7I,KAAK,eACL,GAAiB,KAAK,WAAW,UAAU,GAC3C,KAAK,iBAAmB,EAAgB,KAAK,kBAC7C,EAAgB,KAAK,iBAEzB,IAAI,EAAU,EADO,GAAiB,EAAI,KAAK,aACd,EAAS,EAC1C,GAAI,GAAiB,KAAK,eACtB,KAAK,MAAM,QAAU,KAAK,eAAiB,GAAW,KAAK,SAAU,CACjE,GAAW,KAAK,WAChB,KAAK,SAAW,EAChB,KAAK,WAAW,WAAW,CAAO,GAEtC,IAAI,EAAI,KAAK,UAAU,YACvB,KAAK,UAAU,MAAM,OAAS,EAAgB,KAC9C,KAAK,kBAAkB,GAAM,KAAK,aAAc,EAAG,CAAa,EAChE,KAAK,cAAgB,EACrB,KAAK,QAAQ,UAAU,CAC3B,CACJ,EACA,EAAgB,UAAU,oBAAsB,UAAY,CACxD,IAAI,EAAU,KAAK,QACf,EAAO,KAAK,MACZ,EAAiB,EAAK,QAAU,EAAI,KAAK,WAEzC,EADc,KAAK,QAAQ,gBACL,EAAI,KAAK,WAC/B,EAAc,KAAK,gBAAgB,EACnC,EAAc,CAAC,IAAmB,KAAK,0BACvC,EAAK,cAAgB,EAAc,EAAI,KAAK,SAAW,GACvD,EAAiB,KAAK,eAAiB,EACvC,IACA,KAAK,aAAe,EACpB,KAAK,WAAW,WAAW,CAAW,GAE1C,IAAI,EAAgB,KAAK,SACrB,KAAK,WAAa,KAAK,WAAa,IACpC,KAAK,UAAU,EACf,EAAiB,EAAK,QAAU,EAAI,KAAK,YAE7C,IAAI,EAAY,EAAK,eAAiB,KAAK,WACvC,EAAgB,CAAC,KAAK,WAAa,KAAK,gBACrC,EAAK,eAAiB,KAAK,YAAc,KAAK,eAC/C,EACN,GAAa,EACb,IAAI,EAAK,KAAK,aACd,KAAK,QAAQ,aAAa,KAAK,IAAI,CAAC,EAAG,IAAK,KAAK,IAAI,KAAK,UAAW,EAAY,EAAK,eAAiB,EAAG,MAAM,CAAC,CAAC,EAClH,KAAK,QAAQ,cAAc,KAAK,IAAI,CAAC,EAAG,KAAM,KAAK,IAAI,KAAK,WAAY,EAAc,EAAI,KAAK,SAAW,EAAK,cAAgB,EAAG,KAAK,CAAC,CAAC,EACzI,IAAI,EAAU,CAAC,IAAmB,KAAK,0BACnC,EAAK,eAAiB,EAAY,EAAgB,GAAK,KAAK,UAAY,EAAG,KAC3E,EAAiB,IAAkB,EACnC,IACA,KAAK,SAAW,EAChB,KAAK,WAAW,WAAW,CAAO,GAEtC,IAAI,EAAS,KAAK,UAAY,KAAK,WAC/B,EAAY,KAAK,KAAK,EAAY,KAAK,UAAU,EAAI,EACrD,EAAW,KAAK,IAAI,EAAG,KAAK,OAAO,KAAK,UAAY,GAAU,KAAK,UAAU,CAAC,EAC9E,EAAU,EAAW,EACrB,EAAgB,EAChB,EAAa,KAAK,WACtB,EAAW,EAAQ,oBAAoB,EAAU,CAAC,EAClD,IAAI,EAAW,EAAQ,YAAY,CAAQ,EACvC,IACA,EAAW,EAAS,MAAM,KAE9B,EAAiB,EAAQ,oBAAoB,EAAU,CAAC,EACxD,EAAiB,EAAQ,aAAa,CAAQ,EAAI,EAClD,EAAU,KAAK,IAAI,EAAQ,oBAAoB,EAAS,CAAC,EAAG,EAAQ,UAAU,EAAI,CAAC,EACnF,EAAY,EAAK,eAAiB,EAAQ,aAAa,CAAO,EAAI,EAC9D,EACJ,EAAS,KAAK,UAAY,EAAiB,EACvC,EAAS,GAAK,EAAiB,IAC/B,EAAiB,KAAK,IAAI,EAAG,EAAiB,KAAK,MAAM,EAAS,CAAU,CAAC,EAC7E,EAAS,KAAK,UAAY,EAAiB,GAE/C,IAAI,EAAU,EAyBd,OAxBI,KAAK,YAAY,OAAS,GAAe,KACzC,EAAU,KAAK,kBACf,GAAkB,KAClB,GAAW,KAAK,kBAAkB,GAAM,KAAK,YAAa,EAAK,MAAO,EAAK,MAAM,EACjF,KAAK,QAAQ,4BAA4B,EACrC,IACA,EAAc,KAAK,gBAAgB,IAE3C,KAAK,YAAc,CACf,MAAO,EACP,QAAS,KAAK,SACJ,WACM,iBACP,UACG,aACZ,eAAgB,KAAK,eACV,YACA,YACH,SACR,aAAc,EAAa,KAAK,IAAI,EAAG,KAAK,MAAM,EAAS,EAAK,OAAS,EAAK,gBAAkB,CAAU,CAAC,EAAI,EAC/G,OAAQ,KAAK,MAAM,cACvB,EACI,KAAK,QAAQ,cACb,KAAK,QAAQ,aAAa,gBAAgB,EAAc,KAAK,QAAQ,EAClE,CACX,EACA,EAAgB,UAAU,aAAe,UAAY,CAC5C,QAAK,cAEV,KAAI,EAAW,KAAK,cAAc,SAC9B,EAAU,KAAK,cAAc,QACjC,KAAK,cAAgB,KACrB,IAAI,EAAc,KAAK,YACnB,OAAW,EAAY,QAAU,IAGjC,IAAU,EAAY,UAG1B,IAAI,IAAY,IAAU,CAClB,KAAK,aACL,KAAK,aAAa,OAAO,CAAW,EACxC,KAAK,WAAW,OAAO,CAAW,EAClC,MACJ,CAEA,OADA,KAAK,WAAW,YAAY,EAAa,EAAU,CAAO,EACnD,EAFP,CAfkC,CAkBtC,EACA,EAAgB,UAAU,gBAAkB,UAAY,CACpD,IAAI,EAAY,KAAK,QAAQ,eAAe,EAK5C,OAJI,KAAK,gBAAkB,CAAC,KAAK,QAAQ,eACrC,GAAa,GACb,KAAK,YAAc,EAAY,KAAK,WAAW,kBAC/C,EAAY,KAAK,WAAW,gBAAkB,IAC3C,KAAK,IAAI,KAAK,MAAM,cAAgB,EAAI,KAAK,SAAU,KAAK,MAAM,EAAY,KAAK,cAAc,CAAC,CAC7G,EACA,EAAgB,UAAU,mBAAqB,UAAY,CACvD,KAAK,aAAa,WAAW,KAAK,QAAQ,WAAW,EAAI,CAAC,EAC1D,KAAK,MAAM,SAAS,KAAK,mBAAmB,CAChD,EACA,EAAgB,UAAU,kBAAoB,UAAY,CACtD,KAAK,YAAY,WAAW,KAAK,QAAQ,WAAW,CAAC,EACrD,KAAK,MAAM,SAAS,KAAK,kBAAkB,CAC/C,EACA,EAAgB,UAAU,oBAAsB,SAAU,EAAK,EAAW,CACtE,KAAK,aAAa,oBAAoB,EAAK,CAAS,CACxD,EACA,EAAgB,UAAU,uBAAyB,SAAU,EAAK,EAAW,CACzE,KAAK,aAAa,uBAAuB,EAAK,CAAS,CAC3D,EACA,EAAgB,UAAU,kBAAoB,SAAU,EAAM,CAC1D,KAAK,MAAQ,EACb,KAAK,MAAM,SAAS,KAAK,aAAa,CAC1C,EACA,EAAgB,UAAU,eAAiB,SAAU,EAAa,CAC9D,KAAK,aAAa,eAAe,CAAW,EAC5C,KAAK,MAAM,SAAS,KAAK,aAAa,CAC1C,EACA,EAAgB,UAAU,aAAe,UAAY,CACjD,KAAK,MAAM,SAAS,KAAK,aAAa,CAC1C,EACA,EAAgB,UAAU,WAAa,UAAY,CAC/C,KAAK,aAAa,WAAW,CACjC,EACA,EAAgB,UAAU,WAAa,UAAY,CAC/C,KAAK,aAAa,WAAW,CACjC,EACA,EAAgB,UAAU,wBAA0B,SAAU,EAAQ,EAAM,EAAQ,CAChF,KAAK,qBAAqB,EAAQ,CAAM,EACxC,KAAK,qBAAqB,EAAM,CAAM,CAC1C,EACA,EAAgB,UAAU,qBAAuB,SAAU,EAAQ,EAAQ,EAAa,CAChF,QAAK,MAAM,iBAAmB,EAElC,KAAI,EAAM,KAAK,aAAa,iBAAiB,CAAM,EAC/C,EAAU,EAAI,KACd,EAAS,EAAI,IACb,EAAY,GAAe,EAAY,KAAO,EAC9C,EAAe,GAAe,EAAY,QAAU,EACpD,KAAK,mBACL,KAAK,eAAiB,IAE1B,IAAI,EAAa,KAAK,iBAAmB,KAAK,QAAQ,aAAa,EAAI,KAAK,UACxE,EAAa,EAAY,GACrB,GAAU,EAAa,EAAY,EAAS,KAAK,aACjD,GAAU,EAAS,KAAK,MAAM,gBAC9B,IAAW,IACX,EAAS,CAAC,KAAK,aAAa,KAChC,KAAK,QAAQ,aAAa,CAAM,GAE3B,EAAa,KAAK,MAAM,eAAiB,EAAe,EAAS,KAAK,aACvE,GAAU,EAAa,KAAK,MAAM,eAAiB,EAAe,EAAS,KAAK,aAChF,GAAU,EAAS,KAAK,MAAM,gBAClC,KAAK,QAAQ,aAAa,EAAS,KAAK,WAAa,EAAe,KAAK,MAAM,cAAc,GAEjG,IAAI,EAAc,KAAK,WACnB,EAAgB,EAAI,KAAK,YAAY,eACrC,EAAU,EAAgB,GAC1B,GAAW,EACP,EAAU,KAAK,SAAW,IAC1B,EAAU,CAAC,KAAK,aAAa,MAEjC,KAAK,QAAQ,cAAc,CAAO,IAGlC,GAAW,EACP,EAAc,KAAK,MAAM,cAAgB,EAAU,KAAK,eACxD,KAAK,QAAQ,cAAc,KAAK,MAAM,EAAU,KAAK,eAAiB,KAAK,MAAM,aAAa,CAAC,EAE1F,GAAe,KAAK,UAAY,EAAU,EAAc,KAAK,gBAClE,KAAK,QAAQ,cAAc,CAAC,EApCe,CAuCvD,EACA,EAAgB,UAAU,aAAe,UAAY,CACjD,OAAO,KAAK,QAAQ,aAAa,CACrC,EACA,EAAgB,UAAU,cAAgB,UAAY,CAClD,OAAO,KAAK,QAAQ,cAAc,CACtC,EACA,EAAgB,UAAU,gBAAkB,UAAY,CACpD,OAAO,KAAK,UAAY,KAAK,UACjC,EACA,EAAgB,UAAU,mBAAqB,UAAY,CACvD,OAAO,KAAK,IAAI,EAAG,KAAK,OAAO,KAAK,UAAY,KAAK,MAAM,gBAAkB,KAAK,UAAU,EAAI,CAAC,CACrG,EACA,EAAgB,UAAU,YAAc,SAAU,EAAK,CACnD,KAAK,QAAQ,aAAa,EAAM,KAAK,UAAU,CACnD,EACA,EAAgB,UAAU,YAAc,SAAU,EAAQ,EAAW,CAC7D,OAAO,GAAU,WACjB,EAAS,CAAE,IAAK,EAAQ,OAAQ,CAAE,GACtC,IAAI,EAAM,KAAK,aAAa,iBAAiB,CAAM,EAC/C,EAAI,KAAK,MAAM,eAAiB,KAAK,WACrC,EAAS,EAAI,IAAM,GAAK,GAAa,GAEzC,OADA,KAAK,QAAQ,aAAa,CAAM,EACzB,CACX,EACA,EAAgB,UAAU,WAAa,SAAU,EAAW,EAAS,CACjE,IAAI,EAAI,EACJ,EAAI,KAAK,MACT,EAAQ,CAAC,EACT,EAAO,SAAU,EAAG,EAAO,EAAI,CAC/B,OAAO,IAAe,EAAI,IAAG,EAAK,GAAK,CAC3C,EACA,IAAK,EAAI,EAAG,EAAI,EAAG,EAAE,EACjB,EAAM,KAAK,EAAK,EAAI,KAAK,MAAO,EAAW,EAAU,CAAS,CAAC,EACnE,OAAO,CACX,EACA,EAAgB,UAAU,aAAe,SAAU,EAAM,EAAQ,EAAS,EAAU,CAEhF,IAAI,EADM,KAAK,aAAa,iBAAiB,CAAE,IAAK,EAAM,OAAQ,CAAE,CACrD,CAAC,CAAC,IACb,IACA,GAAU,KAAK,MAAM,eAAiB,GAC1C,IAAI,EAAgB,KAAK,UACzB,KAAK,QAAQ,aAAa,CAAM,EAC5B,IAAY,IACZ,KAAK,iBAAiB,EAAe,CAAQ,CACrD,EACA,EAAgB,UAAU,iBAAmB,SAAU,EAAW,EAAU,CACxE,IAAI,EAAU,KAAK,UACnB,GAAI,CAAC,KAAK,gBACN,OACJ,IAAI,EAAQ,KACZ,GAAI,GAAa,EACb,OACJ,GAAI,KAAK,iBAAkB,CACvB,IAAI,EAAW,KAAK,iBAAiB,MACrC,GAAI,EAAS,SACT,EAAY,EAAS,GACjB,GAAa,GACb,MAEZ,CACA,IAAI,EAAQ,EAAM,WAAW,EAAW,CAAO,EAC/C,KAAK,iBAAmB,CAAE,KAAM,EAAW,GAAI,EAAgB,OAAM,EACrE,cAAc,KAAK,MAAM,EACzB,EAAM,QAAQ,aAAa,EAAM,MAAM,CAAC,EACxC,EAAM,QAAQ,WAAa,EAC3B,SAAS,GAAe,CACpB,EAAM,OAAS,cAAc,EAAM,MAAM,EACzC,EAAM,iBAAmB,KACzB,EAAM,eAAiB,GACvB,GAAY,EAAS,CACzB,CACA,KAAK,OAAS,YAAY,UAAY,CAClC,GAAI,EAAM,eAAgB,CACtB,EAAa,EACb,MACJ,CACA,GAAI,CAAC,EAAM,QACP,OAAO,cAAc,EAAM,MAAM,EACjC,EAAM,QACN,EAAM,QAAQ,aAAa,EAAM,MAAM,CAAC,EACxC,EAAM,QAAQ,WAAa,GAEtB,GAAW,KAMhB,EAAa,GALb,EAAM,QAAQ,WAAa,GAC3B,EAAM,QAAQ,aAAa,CAAO,EAClC,EAAU,KAKlB,EAAG,EAAE,CACT,EACA,EAAgB,UAAU,UAAY,SAAU,EAAW,CACnD,KAAK,YAAc,IACnB,KAAK,MAAM,SAAS,KAAK,aAAa,EACtC,KAAK,UAAY,EAEzB,EACA,EAAgB,UAAU,UAAY,SAAU,EAAY,CACpD,KAAK,aAAe,IACpB,KAAK,WAAa,GACtB,KAAK,MAAM,SAAS,KAAK,eAAe,CAC5C,EACA,EAAgB,UAAU,SAAW,SAAU,EAAG,EAAG,CACjD,KAAK,QAAQ,aAAa,CAAC,EAC3B,KAAK,QAAQ,cAAc,CAAC,CAChC,EACA,EAAgB,UAAU,SAAW,SAAU,EAAQ,EAAQ,CAC3D,GAAU,KAAK,QAAQ,aAAa,KAAK,QAAQ,aAAa,EAAI,CAAM,EACxE,GAAU,KAAK,QAAQ,cAAc,KAAK,QAAQ,cAAc,EAAI,CAAM,CAC9E,EACA,EAAgB,UAAU,eAAiB,SAAU,EAAQ,EAAQ,CAQjE,GAPI,EAAS,GAAK,KAAK,QAAQ,aAAa,GAAK,EAAI,KAAK,aAAa,KAEnE,EAAS,GAAK,KAAK,QAAQ,aAAa,EAAI,KAAK,MAAM,eACrD,KAAK,YAAY,UAAY,GAAK,KAAK,aAAa,QAEtD,EAAS,GAAK,KAAK,QAAQ,cAAc,GAAK,EAAI,KAAK,aAAa,MAEpE,EAAS,GAAK,KAAK,QAAQ,cAAc,EAAI,KAAK,MAAM,cACtD,KAAK,YAAY,MAAQ,GAAK,KAAK,aAAa,MAClD,MAAO,EACf,EACA,EAAgB,UAAU,yBAA2B,SAAU,EAAG,EAAG,CACjE,IAAI,EACJ,GAAI,KAAK,kBAAmB,CACxB,EAAY,CAAE,IAAK,EAAG,KAAM,CAAE,EAC9B,IAAI,EAAI,KAAK,aAAa,qBAAqB,CAAC,EAAG,CAAC,CAAC,EACrD,EAAI,EAAE,GAAK,KAAK,YAAc,KAAK,OAAO,KAC1C,EAAI,EAAE,EACV,KAEI,GAAY,KAAK,SAAS,sBAAsB,EAEpD,IAAI,EAAU,EAAI,KAAK,WAAa,EAAU,KAAO,KAAK,SACtD,EAAS,EAAU,KAAK,eACxB,EAAM,KAAK,OAAO,EAAI,KAAK,UAAY,EAAU,KAAO,KAAK,UAAU,EACvE,EAAM,KAAK,aAAe,KAAK,MAAM,CAAM,EAAI,KAAK,MAAM,CAAM,EACpE,MAAO,CAAO,MAAK,OAAQ,EAAK,KAAM,EAAS,EAAM,EAAI,EAAI,GAAa,SAAQ,CACtF,EACA,EAAgB,UAAU,wBAA0B,SAAU,EAAG,EAAG,CAChE,IAAI,EACJ,GAAI,KAAK,kBAAmB,CACxB,EAAY,CAAE,IAAK,EAAG,KAAM,CAAE,EAC9B,IAAI,EAAI,KAAK,aAAa,qBAAqB,CAAC,EAAG,CAAC,CAAC,EACrD,EAAI,EAAE,GAAK,KAAK,YAAc,KAAK,OAAO,KAC1C,EAAI,EAAE,EACV,KAEI,GAAY,KAAK,SAAS,sBAAsB,EAEpD,IAAI,EAAU,EAAI,KAAK,WAAa,EAAU,KAAO,KAAK,SACtD,EAAS,EAAU,KAAK,eACxB,EAAM,KAAK,aAAe,KAAK,MAAM,CAAM,EAAI,KAAK,MAAM,CAAM,EAChE,EAAM,KAAK,OAAO,EAAI,KAAK,UAAY,EAAU,KAAO,KAAK,UAAU,EAC3E,OAAO,KAAK,QAAQ,yBAAyB,EAAK,KAAK,IAAI,EAAK,CAAC,EAAG,CAAO,CAC/E,EACA,EAAgB,UAAU,wBAA0B,SAAU,EAAK,EAAQ,CACvE,IAAI,EAAY,KAAK,SAAS,sBAAsB,EAChD,EAAM,KAAK,QAAQ,yBAAyB,EAAK,CAAM,EACvD,EAAI,KAAK,UAAY,KAAK,QAAQ,aAAa,UAAU,EAAI,IAAK,CAAG,EACnE,KAAK,QAAQ,aAAa,WAAW,EAAI,MAAM,EAC/C,KAAK,MAAM,EAAI,OAAS,KAAK,cAAc,GAC7C,EAAI,EAAI,IAAM,KAAK,WACvB,MAAO,CACH,MAAO,EAAU,KAAO,EAAI,KAAK,WACjC,MAAO,EAAU,IAAM,EAAI,KAAK,SACpC,CACJ,EACA,EAAgB,UAAU,eAAiB,UAAY,CACnD,EAAI,YAAY,KAAK,UAAW,WAAW,CAC/C,EACA,EAAgB,UAAU,cAAgB,UAAY,CAClD,EAAI,eAAe,KAAK,UAAW,WAAW,CAClD,EACA,EAAgB,UAAU,gBAAkB,SAAU,EAAa,CAC/D,KAAK,aAAe,EACpB,AACI,EAAY,UAAU,KAAK,SAAS,MAAM,QAE9C,AACI,EAAY,oBAAoB,KAAK,mBACrC,KAAK,oBACL,EAAI,YAAY,KAAK,SAAU,iBAAiB,EAChD,KAAK,SAAS,MAAM,QAAU,GAC9B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,QAAQ,MAAM,QAAU,QAG1C,EAAY,SAAW,KAAK,QAAQ,UAAU,EAAY,YAAa,yBAA0B,MAAM,CAE/G,EACA,EAAgB,UAAU,mBAAqB,SAAU,EAAM,CAC3D,IAAI,EAAS,KAAK,QAAQ,UAAU,OACpC,KAAK,SAAS,EAAM,0BAA2B,EAAO,IAAK,EAAO,MAAM,EACxE,KAAK,sBAAsB,CAC/B,EACA,EAAgB,UAAU,gBAAkB,UAAY,CAC/C,QAAK,aAKV,CAHI,KAAK,aAAa,UAClB,KAAK,QAAQ,aAAa,KAAK,aAAa,QAAQ,EACxD,EAAI,eAAe,KAAK,SAAU,iBAAiB,EACnD,KAAK,SAAS,MAAM,QAAU,KAAK,aAAa,QAChD,IAAI,EAAS,KAAK,QAAQ,UAAU,OACpC,KAAK,iBAAiB,EAAO,IAAK,EAAO,MAAM,EAC/C,KAAK,aAAe,KACpB,KAAK,aAAa,QAAQ,MAAM,QAAU,EAJM,CAKpD,EACA,EAAgB,UAAU,aAAe,SAAU,EAAM,EAAU,CAC/D,IAAI,EAAS,KAAK,QAAQ,UAAU,OAChC,EAAiB,GAAY,CAAE,IAAK,EAAO,IAAK,OAAQ,EAAO,MAAO,EAC1E,KAAK,gBAAgB,EACrB,IAAI,EAAa,KAAK,4BAA4B,EAAM,CAAc,EACtE,KAAK,SAAS,EAAW,EAAE,CAAC,KAAM,aAAc,EAAe,IAAK,EAAe,MAAM,EACzF,KAAK,WAAa,CACR,OACN,SAAU,CACN,IAAK,EAAe,IACpB,OAAQ,EAAe,MAC3B,CACJ,EACA,IAAI,EAAY,EAAI,cAAc,KAAK,EACvC,GAAI,EAAW,OAAS,EAAG,CACvB,IAAI,EAAe,KAAK,wBAAwB,EAAe,IAAK,EAAe,MAAM,EACrF,EACJ,EAAW,MAAM,CAAC,CAAC,CAAC,QAAQ,SAAU,EAAI,CACtC,IAAI,EAAW,EAAI,cAAc,KAAK,EAClC,EAAY,EAAI,cAAc,MAAM,EACxC,EAAU,UAAY,iBAClB,EAAG,UACH,EAAS,UAAY,2BACrB,EAAG,KAAK,SAAW,IACnB,EAAG,KAAO,KACd,EAAU,YAAY,EAAI,eAAe,EAAG,IAAI,CAAC,EACjD,EAAS,YAAY,CAAS,EAC9B,EAAU,YAAY,CAAQ,EAC9B,EAAc,CAClB,CAAC,EACD,EAAa,QAAQ,SAAU,EAAO,CAClC,IAAI,EAAU,EAAI,cAAc,MAAM,EACjC,EAAY,EAAM,IAAI,IACvB,EAAQ,UAAY,OAAS,EAAM,KAAK,QAAQ,MAAO,OAAO,GAClE,EAAQ,YAAY,EAAI,eAAe,EAAM,KAAK,CAAC,EACnD,EAAY,YAAY,CAAO,CACnC,CAAC,EACD,KAAK,iBAAmB,CACpB,GAAI,EACJ,IAAK,EAAe,IACpB,OAAQ,EAAe,OACvB,UAAW,0BACf,EACA,KAAK,QAAQ,cAAc,cAAc,KAAK,gBAAgB,EAC9D,IAAI,EAAgB,KAAK,aAAa,iBAAiB,EAAgB,EAAI,EAEvE,EADK,KAAK,UACE,sBAAsB,CAAC,CAAC,OACpC,EAAkB,EAAW,OAAS,KAAK,WAE/C,GADY,EAAmB,EAAS,EAAc,IAElD,OACA,EAAkB,EAClB,KAAK,SAAS,GAAI,EAAW,OAAS,GAAK,KAAK,UAAU,EAG1D,KAAK,YAAY,EAAe,GAAG,CAE3C,CACJ,EACA,EAAgB,UAAU,4BAA8B,SAAU,EAAM,EAAU,CAC9E,IAAI,EAAiB,KAAK,MAAM,cAAgB,KAAK,SAAW,EAC5D,EAAQ,KAAK,MAAM,EAAiB,KAAK,cAAc,EAAI,EAC/D,EAAQ,GAAS,EAAI,GAAK,EAG1B,IAAK,IAFD,EAAY,EAAK,MAAM,OAAO,EAC9B,EAAa,CAAC,EACT,EAAI,EAAG,EAAI,EAAU,OAAQ,IAAK,CACvC,IAAI,EAAgB,KAAK,QAAQ,kBAAkB,EAAU,GAAI,EAAS,MAAM,EAC5E,EAAa,KAAK,QAAQ,mBAAmB,EAAe,EAAO,KAAK,QAAQ,QAAQ,EAC5F,GAAI,EAAW,OAAS,EAAG,CACvB,IAAI,EAAQ,EACZ,EAAW,KAAK,EAAU,EAAE,CAAC,MAAM,EACnC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CACxC,IAAI,EAAY,EAAU,EAAE,CAAC,MAAM,EAAO,EAAW,EAAE,EACvD,EAAW,KAAK,CAAE,KAAM,EAAW,QAAS,EAAK,CAAC,EAClD,EAAQ,EAAW,EACvB,CACJ,MAEI,EAAW,KAAK,CAAE,KAAM,EAAU,GAAI,QAAS,EAAM,CAAC,CAE9D,CACA,OAAO,CACX,EACA,EAAgB,UAAU,gBAAkB,UAAY,CAC/C,QAAK,WAEV,KAAI,EAAW,KAAK,WAAW,SAC/B,KAAK,iBAAiB,EAAS,IAAK,EAAS,MAAM,EACnD,AAEI,KAAK,oBADL,KAAK,QAAQ,cAAc,iBAAiB,KAAK,gBAAgB,EACzC,MAE5B,KAAK,WAAa,IANa,CAOnC,EACA,EAAgB,UAAU,SAAW,SAAU,EAAM,EAAM,EAAK,EAAQ,CACpE,IAAI,EAAU,KAAK,QACnB,EAAQ,YAAY,MAAM,GAAO,KACjC,IAAI,EAAW,CAAQ,OAAM,MAAO,CAAK,EACrC,EAAS,EAAQ,UAAU,CAAG,EAClC,GAAI,GAAU,MAAQ,CAAC,EAAO,OAC1B,EAAO,KAAK,CAAQ,OAIpB,IAAK,IADD,EAAI,EACC,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAQ,EAAO,GAEnB,GADA,GAAK,EAAM,MAAM,OACb,GAAU,EAAG,CACb,IAAI,EAAO,EAAM,MAAM,QAAU,EAAI,GACjC,EAAS,EAAM,MAAM,MAAM,EAAG,CAAI,EAClC,EAAQ,EAAM,MAAM,MAAM,CAAI,EAClC,EAAO,OAAO,EAAG,EAAG,CAAE,KAAM,EAAM,KAAM,MAAO,CAAO,EAAG,EAAU,CAAE,KAAM,EAAM,KAAM,MAAO,CAAM,CAAC,EACrG,KACJ,CACJ,CAEJ,KAAK,YAAY,EAAK,CAAG,CAC7B,EACA,EAAgB,UAAU,wBAA0B,SAAU,EAAK,EAAQ,CAKvE,IAAK,IAJD,EAAS,KAAK,QAAQ,UAAU,CAAG,EACnC,EAAI,EACJ,EAAkB,GAClB,EAAe,CAAC,EACX,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAQ,EAAO,GACnB,MAAK,EAAM,MAAM,OACb,EAAM,OAAS,aAEnB,IAAI,EAAiB,CACjB,EAAa,KAAK,CAAE,KAAM,EAAM,KAAM,MAAO,EAAM,KAAM,CAAC,EAC1D,EAAM,KAAO,eACb,QACJ,CACI,IAAM,IACN,EAAkB,GAFtB,CAIJ,CAEA,OADA,KAAK,YAAY,EAAK,CAAG,EAClB,CACX,EACA,EAAgB,UAAU,iBAAmB,SAAU,EAAK,EAAQ,CAChE,KAAK,QAAQ,YAAY,MAAM,GAAO,KACtC,KAAK,YAAY,EAAK,CAAG,CAC7B,EACA,EAAgB,UAAU,SAAW,SAAU,EAAO,EAAI,CACtD,IAAI,EAAQ,KAGZ,GAFA,KAAK,SAAW,EAChB,EAAM,eAAe,cAAe,CAAS,OAAM,CAAC,EAChD,CAAC,GAAS,OAAO,GAAS,SAAU,CACpC,IAAI,EAAa,GAAS,KAAK,SAAS,MAAM,aAC9C,EAAO,WAAW,CAAC,QAAS,CAAU,EAAG,CAAS,CACtD,MAEI,EAAU,CAAK,EAEnB,SAAS,EAAU,EAAQ,CACvB,GAAI,EAAM,UAAY,EAClB,OAAO,GAAM,EAAG,EACpB,GAAI,CAACA,GAAU,CAACA,EAAO,SACnB,MAAU,MAAM,wBAA0B,EAAQ,2BAA2B,EAC7EA,EAAO,MACP,EAAM,SAAWA,EAAO,KAC5B,EAAI,gBAAgBA,EAAO,QAASA,EAAO,SAAU,EAAM,SAAS,EAChE,EAAM,OACN,EAAI,eAAe,EAAM,UAAW,EAAM,MAAM,QAAQ,EAC5D,IAAI,EAAU,YAAaA,EAASA,EAAO,QACrC,YAAc,EAAM,OAAS,CAAC,GAAK,EAAI,EAAM,SAGnD,GAFI,EAAM,UAAY,GAAW,EAAM,UACnC,EAAM,WAAW,CAAO,EACxB,EAAM,aAAc,CACpB,IAAI,EAAmBA,EAAO,wBAC1B,GAAoB,CAAC,EAAM,aAAa,kBACxC,EAAM,aAAa,kBAAoB,QAElC,CAAC,GAAoB,EAAM,aAAa,mBAAqB,UAClE,EAAM,aAAa,kBAAoB,KAE/C,CACA,EAAM,OAASA,EAAO,SACtB,EAAM,MAAQA,EACd,EAAI,YAAY,EAAM,UAAWA,EAAO,QAAQ,EAChD,EAAI,YAAY,EAAM,UAAW,WAAYA,EAAO,MAAM,EACtD,EAAM,QACN,EAAM,MAAM,MAAQ,EACpB,EAAM,iBAAiB,GAE3B,EAAM,eAAe,cAAe,CAAE,MAAOA,CAAO,CAAC,EACrD,GAAM,EAAG,EACL,EAAU,UAAY,EAAM,WAC5B,EAAM,SAAS,MAAM,WAAa,MAClC,EAAM,SAAS,MAAM,WAAa,GAE1C,CACJ,EACA,EAAgB,UAAU,SAAW,UAAY,CAC7C,OAAO,KAAK,QAChB,EACA,EAAgB,UAAU,SAAW,SAAU,EAAO,EAAS,CAC3D,EAAI,YAAY,KAAK,UAAW,EAAO,IAAY,EAAK,CAC5D,EACA,EAAgB,UAAU,WAAa,SAAU,EAAO,CACpD,EAAI,eAAe,KAAK,UAAW,CAAK,CAC5C,EACA,EAAgB,UAAU,eAAiB,SAAU,EAAO,CACxD,EAAI,SAAS,KAAK,SAAS,MAAO,SAAU,CAAK,CACrD,EACA,EAAgB,UAAU,eAAiB,SAAU,EAAa,CAC9D,EAAI,SAAS,KAAK,SAAS,MAAO,SAAU,CAAW,CAC3D,EACA,EAAgB,UAAU,mBAAqB,UAAY,CACvD,EAAI,gBAAgB,EAAW,iBAAkB,KAAK,SAAS,CACnE,EACA,EAAgB,UAAU,QAAU,UAAY,CAC5C,KAAK,OAAO,EACZ,KAAK,aAAa,QAAQ,EAC1B,KAAK,aAAa,QAAQ,EAC1B,KAAK,mBAAmB,EACxB,KAAK,UAAU,YAAc,GAC7B,KAAK,UAAU,oBAAqB,EAAK,CAC7C,EACA,EAAgB,UAAU,uBAAyB,SAAU,EAAK,CAC9D,IAAI,EAAQ,KACZ,KAAK,aAAe,KAAK,SAAW,KACpC,KAAK,WAAW,QAAQ,OAAO,EAC/B,KAAK,WAAW,QAAQ,OAAO,EAC3B,IAAQ,IACR,KAAK,WAAa,IAAI,EAAiB,KAAK,UAAW,IAAI,EAC3D,KAAK,WAAa,IAAI,EAAiB,KAAK,UAAW,IAAI,EAC3D,KAAK,WAAW,UAAU,KAAK,MAAM,cAAc,EACnD,KAAK,WAAW,SAAS,KAAK,MAAM,aAAa,EACjD,KAAK,WAAW,iBAAiB,SAAU,SAAU,EAAG,CAC/C,EAAM,kBACP,EAAM,QAAQ,aAAa,EAAE,KAAO,EAAM,aAAa,GAAG,CAClE,CAAC,EACD,KAAK,WAAW,iBAAiB,SAAU,SAAU,EAAG,CAC/C,EAAM,kBACP,EAAM,QAAQ,cAAc,EAAE,KAAO,EAAM,aAAa,IAAI,CACpE,CAAC,EACI,KAAK,kBAKN,KAAK,iBAAiB,cAAc,KAAK,UAAU,EACnD,KAAK,iBAAiB,kBAAkB,IALxC,KAAK,iBAAmB,IAAI,EAAU,KAAK,WAAY,IAAI,EAC3D,KAAK,iBAAiB,kBAAkB,KAQ5C,KAAK,WAAa,IAAI,EAAW,KAAK,UAAW,IAAI,EACrD,KAAK,WAAa,IAAI,EAAW,KAAK,UAAW,IAAI,EACrD,KAAK,WAAW,iBAAiB,SAAU,SAAU,EAAG,CAC/C,EAAM,kBACP,EAAM,QAAQ,aAAa,EAAE,KAAO,EAAM,aAAa,GAAG,CAClE,CAAC,EACD,KAAK,WAAW,iBAAiB,SAAU,SAAU,EAAG,CAC/C,EAAM,kBACP,EAAM,QAAQ,cAAc,EAAE,KAAO,EAAM,aAAa,IAAI,CACpE,CAAC,EAET,EACA,EAAgB,UAAU,mBAAqB,UAAY,CACnD,MAAC,OAAO,gBAAkB,KAAK,iBAEnC,KAAI,EAAO,KACX,KAAK,aAAe,EAAK,YAAY,UAAY,CACxC,EAAK,WACN,EAAK,SAAS,CACtB,EAAG,EAAE,EACL,KAAK,gBAAkB,IAAI,OAAO,eAAe,SAAU,EAAG,CAC1D,IAAI,EAAI,EAAE,EAAE,CAAC,YAAY,MACrB,EAAI,EAAE,EAAE,CAAC,YAAY,OACrB,KAAK,IAAI,EAAK,MAAM,MAAQ,CAAC,EAAI,GAC9B,KAAK,IAAI,EAAK,MAAM,OAAS,CAAC,EAAI,EACrC,EAAK,aAAa,MAAM,EAGxB,EAAK,aAAa,OAAO,CAEjC,CAAC,EACD,KAAK,gBAAgB,QAAQ,KAAK,SAAS,CAhBhC,CAiBf,EACO,CACX,EAAE,EACF,EAAgB,UAAU,cAAgB,EAC1C,EAAgB,UAAU,cAAgB,EAC1C,EAAgB,UAAU,cAAgB,EAC1C,EAAgB,UAAU,cAAgB,EAC1C,EAAgB,UAAU,aAAe,GACzC,EAAgB,UAAU,YAAc,GACxC,EAAgB,UAAU,YAAc,GACxC,EAAgB,UAAU,mBAAqB,IAC/C,EAAgB,UAAU,oBAAsB,IAChD,EAAgB,UAAU,YAAc,IACxC,EAAgB,UAAU,gBAAkB,KAC5C,EAAgB,UAAU,SAAW,EACrC,EAAgB,UAAU,SAAW,KACrC,EAAgB,UAAU,QAAU,GACpC,EAAgB,UAAU,MAAQ,EAClC,EAAI,UAAU,EAAgB,UAAW,CAAY,EACrD,EAAO,cAAc,EAAgB,UAAW,WAAY,CACxD,kBAAmB,CACf,IAAK,SAAU,EAAO,CACd,CAAC,GAAS,KAAK,iBACf,KAAK,gBAAgB,WAAW,EAChC,KAAK,aAAa,OAAO,EACzB,KAAK,aAAe,KAAK,gBAAkB,MAEtC,GAAS,CAAC,KAAK,iBACpB,KAAK,mBAAmB,CAEhC,CACJ,EACA,eAAgB,CAAE,aAAc,EAAM,EACtC,eAAgB,CACZ,IAAK,SAAU,EAAO,CACd,KAAK,WAAW,kBAAkB,CAAK,GACvC,KAAK,MAAM,SAAS,KAAK,WAAW,CAC5C,EACA,aAAc,EAClB,EACA,gBAAiB,CACb,IAAK,UAAY,CAAE,KAAK,mBAAmB,CAAG,EAC9C,aAAc,EAClB,EACA,kBAAmB,CACf,IAAK,UAAY,CAAE,KAAK,mBAAmB,CAAG,EAC9C,aAAc,EAClB,EACA,YAAa,CACT,IAAK,SAAU,EAAK,CACZ,OAAO,GAAO,WACd,KAAK,mBAAqB,GAC9B,KAAK,iBAAmB,CAAC,CAAC,EAC1B,KAAK,mBAAmB,CAC5B,EACA,IAAK,UAAY,CACb,OAAO,KAAK,kBAAoB,KAAK,kBACzC,CACJ,EACA,WAAY,CACR,IAAK,SAAU,EAAM,CACjB,KAAK,QAAQ,MAAM,QAAU,EAAO,QAAU,OAC9C,KAAK,MAAM,SAAS,KAAK,WAAW,EACpC,KAAK,eAAe,CACxB,EACA,aAAc,EAClB,EACA,kBAAmB,CACf,IAAK,SAAU,EAAO,CAClB,KAAK,aAAa,mBAAqB,CAC3C,EACA,aAAc,EAClB,EACA,sBAAuB,CACnB,IAAK,SAAU,EAAO,CAClB,KAAK,aAAa,uBAAyB,CAC/C,EACA,aAAc,EAClB,EACA,gBAAiB,CACb,IAAK,SAAU,EAAM,CACjB,EAAI,YAAY,KAAK,QAAS,wBAAyB,CAAI,CAC/D,EACA,aAAc,EAClB,EACA,gBAAiB,CACb,IAAK,SAAU,EAAM,CACjB,KAAK,aAAa,mBAAmB,CAAI,EACzC,KAAK,MAAM,SAAS,KAAK,aAAa,CAC1C,EACA,aAAc,EAClB,EACA,oBAAqB,CACjB,IAAK,SAAU,EAAM,CACb,KAAK,WAAW,uBAAuB,CAAI,GAC3C,KAAK,MAAM,SAAS,KAAK,WAAW,CAC5C,EACA,aAAc,EAClB,EACA,sBAAuB,CACnB,IAAK,SAAU,EAAM,CACb,KAAK,WAAW,yBAAyB,CAAI,GAAK,EAClD,KAAK,WAAW,sBAAsB,EAGtC,KAAK,WAAW,wBAAwB,KAAK,WAAW,OAAO,KAAK,CAE5E,EACA,aAAc,EAClB,EACA,oBAAqB,CACjB,IAAK,SAAU,EAAiB,CAC5B,KAAK,aAAa,uBAAuB,CAAe,EACxD,KAAK,MAAM,SAAS,KAAK,aAAa,CAC1C,EACA,aAAc,EAClB,EACA,wBAAyB,CACrB,IAAK,SAAU,EAAK,EACZ,CAAC,KAAK,0BAA4B,CAAC,KAAK,eACxC,KAAK,MAAM,SAAS,KAAK,aAAa,CAC9C,EACA,aAAc,EAClB,EACA,wBAAyB,CACrB,IAAK,SAAU,EAAK,EACZ,CAAC,KAAK,0BAA4B,CAAC,KAAK,WACxC,KAAK,MAAM,SAAS,KAAK,aAAa,CAC9C,EACA,aAAc,EAClB,EACA,SAAU,CACN,IAAK,SAAU,EAAM,CACb,OAAO,GAAQ,WACf,GAAc,MAClB,KAAK,UAAU,MAAM,SAAW,EAChC,KAAK,eAAe,CACxB,EACA,aAAc,EAClB,EACA,WAAY,CACR,IAAK,SAAU,EAAM,CACjB,KAAK,UAAU,MAAM,WAAa,EAClC,KAAK,eAAe,CACxB,CACJ,EACA,SAAU,CACN,IAAK,SAAU,EAAK,CAChB,KAAK,WAAW,CACpB,CACJ,EACA,SAAU,CACN,IAAK,SAAU,EAAK,CACV,KAAK,UAAY,kBACnB,KAAK,UAAY,GACrB,KAAK,WAAW,CACpB,CACJ,EACA,eAAgB,CACZ,IAAK,SAAU,EAAK,CAChB,KAAK,WAAW,CACpB,EACA,aAAc,CAClB,EACA,cAAe,CACX,IAAK,SAAU,EAAK,CAChB,EAAM,CAAC,GAAO,EACV,KAAK,gBAAkB,IAE3B,KAAK,eAAiB,EACtB,KAAK,MAAM,SAAS,KAAK,aAAa,EAC1C,EACA,aAAc,EACd,WAAY,EAChB,EACA,iBAAkB,CACd,IAAK,SAAU,EAAK,CAChB,KAAK,aAAa,YAAc,CAAC,CAAC,EAClC,KAAK,MAAM,SAAS,KAAK,aAAa,CAC1C,CACJ,EACA,gBAAiB,CACb,IAAK,SAAU,EAAK,CAChB,KAAK,uBAAuB,CAAG,CACnC,EACA,aAAc,EAClB,EACA,MAAO,CACH,IAAK,SAAU,EAAK,CAAE,KAAK,SAAS,CAAG,CAAG,EAC1C,IAAK,UAAY,CAAE,OAAO,KAAK,UAAY,KAAK,KAAO,EACvD,aAAc,mBACd,WAAY,EAChB,EACA,iBAAkB,CAAC,EACnB,kBAAmB,CACf,aAAc,CAAC,EAAU,UAAY,CAAC,EAAU,IACpD,CACJ,CAAC,EACD,EAAQ,gBAAkB,CAE1B,CAAC,EAED,IAAI,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,wBAAwB,YAAY,EAAG,SAAS,EAAS,EAAS,EAAQ,CAC1K,aAEA,IAAI,EAAM,EAAQ,YAAY,EAC1B,EAAM,EAAQ,YAAY,EAC1B,EAAe,EAAQ,sBAAsB,CAAC,CAAC,aAC/C,EAAS,EAAQ,WAAW,EAEhC,SAAS,EAAY,EAAW,CAC5B,IAAI,EAAS,kBAAoB,EAAI,WAAW,CAAS,EAAI,MAC7D,GAAI,CACA,OAAO,IAAI,KAAK,CAAC,CAAM,EAAG,CAAC,KAAQ,wBAAwB,CAAC,CAChE,MAAY,CAER,IAAI,EAAc,IADA,OAAO,aAAe,OAAO,mBAAqB,OAAO,gBAG3E,OADA,EAAY,OAAO,CAAM,EAClB,EAAY,QAAQ,wBAAwB,CACvD,CACJ,CAEA,SAAS,EAAa,EAAW,CAC7B,GAAI,OAAO,OAAU,IACjB,MAAO,CAAE,YAAa,UAAW,CAAC,EAAG,UAAW,UAAW,CAAC,CAAE,EAClE,GAAI,EAAO,IAAI,oBAAoB,EAAG,CAClC,IAAI,EAAO,EAAY,CAAS,EAE5B,GADM,OAAO,KAAO,OAAO,UAAA,CACb,gBAAgB,CAAI,EACtC,OAAO,IAAI,OAAO,CAAO,CAC7B,CACA,OAAO,IAAI,OAAO,CAAS,CAC/B,CAEA,IAAI,EAAe,SAAS,EAAQ,CAC3B,EAAO,cACR,EAAS,KAAK,2BAA2B,MAAM,KAAM,SAAS,GAElE,KAAK,QAAU,EACf,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,UAAY,KAAK,UAAU,KAAK,IAAI,EAEzC,KAAK,WAAa,EAClB,KAAK,UAAY,CAAC,EAElB,KAAK,QAAQ,UAAY,KAAK,SAClC,GAEC,UAAU,CAEP,EAAI,UAAU,KAAM,CAAY,EAEhC,KAAK,2BAA6B,SAAS,EAAoB,EAAK,EAAW,EAAW,EAAe,CAIrG,GAHI,EAAQ,WAAa,CAAC,EAAQ,QAC9B,EAAQ,MAAQ,EAAQ,WAExB,EAAO,IAAI,UAAU,GAAK,CAAC,EAAQ,MACnC,IAAyB,EAAO,UAAU,EAAK,QAAQ,MACpD,CACH,IAAI,EAAgB,KAAK,eACzB,IAAyB,EAAc,EAAQ,MAAM,uBAAwB,KAAM,GAAG,CAAC,EAEvF,IAAI,EAAO,CAAC,EACZ,EAAmB,QAAQ,SAAS,EAAI,CACpC,EAAK,GAAM,EAAc,EAAQ,MAAM,EAAI,KAAM,GAAG,CAAC,CAAC,QAAQ,kBAAmB,EAAE,CAAC,CACxF,CAAC,CACL,CAYA,MAVA,MAAK,QAAU,EAAa,CAAS,EACjC,GACA,KAAK,KAAK,gBAAiB,CAAa,EAE5C,KAAK,QAAQ,YAAY,CACrB,KAAO,GACA,OACP,OAAS,EACG,WAChB,CAAC,EACM,KAAK,OAChB,EAEA,KAAK,UAAY,SAAS,EAAG,CACzB,IAAI,EAAM,EAAE,KACZ,OAAQ,EAAI,KAAZ,CACI,IAAK,QACD,KAAK,QAAQ,EAAI,KAAM,CAAC,KAAM,EAAI,IAAI,CAAC,EACvC,MACJ,IAAK,OACD,IAAI,EAAW,KAAK,UAAU,EAAI,IAC9B,IACA,EAAS,EAAI,IAAI,EACjB,OAAO,KAAK,UAAU,EAAI,KAE9B,MACJ,IAAK,QACD,KAAK,YAAY,EAAI,IAAI,EACzB,MACJ,IAAK,MACD,OAAO,SAAW,QAAQ,KAAO,QAAQ,IAAI,MAAM,QAAS,EAAI,IAAI,EACpE,KACR,CACJ,EAEA,KAAK,YAAc,SAAS,EAAK,CAC7B,OAAO,SAAW,QAAQ,OAAS,QAAQ,MAAM,CAAG,CACxD,EAEA,KAAK,eAAiB,SAAS,EAAM,CACjC,OAAO,EAAI,WAAW,CAAI,CAC9B,EAEA,KAAK,UAAY,UAAW,CACxB,KAAK,QAAQ,YAAa,CAAC,CAAC,EAC5B,KAAK,WAAa,KAClB,KAAK,QAAQ,UAAU,EACvB,KAAK,QAAQ,QAAU,SAAS,EAAG,CAC/B,EAAE,eAAe,CACrB,EACA,KAAK,QAAU,KACX,KAAK,MACL,KAAK,KAAK,IAAI,SAAU,KAAK,cAAc,EAC/C,KAAK,KAAO,IAChB,EAEA,KAAK,KAAO,SAAS,EAAK,EAAM,CAC5B,KAAK,QAAQ,YAAY,CAAC,QAAS,EAAW,MAAI,CAAC,CACvD,EAEA,KAAK,KAAO,SAAS,EAAK,EAAM,EAAU,CACtC,GAAI,EAAU,CACV,IAAI,EAAK,KAAK,aACd,KAAK,UAAU,GAAM,EACrB,EAAK,KAAK,CAAE,CAChB,CACA,KAAK,KAAK,EAAK,CAAI,CACvB,EAEA,KAAK,KAAO,SAAS,EAAO,EAAM,CAC9B,GAAI,CACI,EAAK,MAAQ,EAAK,KAAK,MACvB,EAAK,KAAK,IAAM,CAAC,QAAS,EAAK,KAAK,IAAI,QAAS,MAAO,EAAK,KAAK,IAAI,MAAO,KAAM,EAAK,KAAK,IAAI,IAAI,GACrG,KAAK,SAAW,KAAK,QAAQ,YAAY,CAAQ,QAAO,KAAM,CAAC,KAAM,EAAK,IAAI,CAAC,CAAC,CACxF,OACM,EAAI,CACN,QAAQ,MAAM,EAAG,KAAK,CAC1B,CACJ,EAEA,KAAK,iBAAmB,SAAS,EAAK,CAC9B,KAAK,MACL,KAAK,UAAU,EAEnB,KAAK,KAAO,EACZ,KAAK,KAAK,WAAY,CAAC,EAAI,SAAS,CAAC,CAAC,EACtC,EAAI,GAAG,SAAU,KAAK,eAAgB,EAAI,CAC9C,EAEA,KAAK,eAAiB,SAAS,EAAO,CAC7B,KAAK,aACN,KAAK,WAAa,CAAC,EACnB,WAAW,KAAK,gBAAiB,CAAC,GAElC,EAAM,QAAU,SAChB,KAAK,WAAW,KAAK,EAAM,MAAO,EAAM,KAAK,EAE7C,KAAK,WAAW,KAAK,EAAM,MAAO,EAAM,GAAG,CACnD,EAEA,KAAK,gBAAkB,UAAW,CAC9B,IAAI,EAAI,KAAK,WACR,IACL,KAAK,WAAa,KACd,EAAE,OAAS,IAAM,EAAE,OAAS,KAAK,KAAK,UAAU,GAAK,EACrD,KAAK,KAAK,WAAY,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,EAE5C,KAAK,KAAK,SAAU,CAAC,KAAM,CAAC,CAAC,EACrC,CAEJ,EAAA,CAAG,KAAK,EAAa,SAAS,EAmD9B,EAAQ,eAAiB,SAhDK,EAAoB,EAAK,EAAW,CAC9D,IAAI,EAAO,KACP,EAAW,GACX,EAAS,OAAO,OAAO,CAAY,EAEnC,EAAgB,CAAC,EACjB,EAAe,IAAI,EAAa,CACjB,gBACf,UAAW,UAAW,CAAC,EACvB,YAAa,SAAS,EAAG,CACrB,EAAc,KAAK,CAAC,EACf,IACD,EACA,WAAW,CAAW,EAEtB,EAAY,EACpB,CACJ,CAAC,EAED,EAAa,YAAc,SAAS,EAAK,CAAE,EAAW,CAAK,EAE3D,IAAI,EAAc,UAAW,CACzB,IAAI,EAAM,EAAc,MAAM,EAC1B,EAAI,QACJ,EAAK,EAAI,QAAQ,CAAC,MAAM,EAAM,EAAI,IAAI,EACjC,EAAI,OACT,EAAO,QAAQ,EAAI,MAAO,EAAI,IAAI,CAC1C,EAkBA,MAhBA,GAAO,YAAc,SAAS,EAAK,CAC/B,EAAa,UAAU,CAAC,KAAM,CAAG,CAAC,CACtC,EACA,EAAO,SAAW,SAAS,EAAM,EAAY,CACzC,KAAK,YAAY,CAAC,KAAM,OAAQ,GAAI,EAAkB,MAAI,CAAC,CAC/D,EACA,EAAO,KAAO,SAAS,EAAM,EAAM,CAC/B,KAAK,YAAY,CAAC,KAAM,QAAe,OAAY,MAAI,CAAC,CAC5D,EAEA,EAAO,WAAW,CAAC,SAAU,CAAG,EAAG,SAAS,EAAM,CAE9C,IADA,EAAO,IAAI,EAAK,GAAW,CAAM,EAC1B,EAAc,QACjB,EAAY,CACpB,CAAC,EAEM,CACX,EAGA,EAAQ,aAAe,EACvB,EAAQ,aAAe,CAGvB,CAAC,EAED,IAAI,OAAO,kBAAkB,CAAC,UAAU,UAAU,SAAS,YAAY,wBAAwB,aAAa,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAClJ,IAAI,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAe,EAAQ,qBAAqB,CAAC,CAAC,aAC9C,EAAM,EAAQ,WAAW,EACzB,EAA6B,UAAY,CACzC,SAAS,EAAY,EAAS,EAAQ,EAAK,EAAQ,EAAW,EAAa,CACvE,IAAI,EAAQ,KACZ,KAAK,OAAS,EACd,KAAK,QAAU,EACf,KAAK,IAAM,EAAQ,YAAY,EAC/B,KAAK,UAAY,EACjB,KAAK,YAAc,EACnB,KAAK,UAAY,KAAK,SAAS,KAAK,IAAI,EACxC,KAAK,IAAI,GAAG,SAAU,KAAK,UAAW,EAAI,EAC1C,KAAK,QAAU,EACf,KAAK,gBAAkB,UAAY,CAC/B,WAAW,UAAY,CACnB,EAAM,eAAe,CACzB,CAAC,CACL,EACA,KAAK,KAAO,EACZ,IAAI,EAAY,EAAQ,eAAe,CAAC,CAAC,YAAc,EAAQ,eAAe,CAAC,CAAC,YAAiB,CAAE,OAAQ,EAAG,EAC9G,KAAK,gBAAkB,EAAU,OACjC,KAAK,MAAM,EACX,EAAQ,UAAU,GAAG,eAAgB,KAAK,eAAe,CAC7D,CA6HA,MA5HA,GAAY,UAAU,MAAQ,UAAY,CACtC,IAAI,EAAQ,KACR,EAAM,KAAK,IACX,EAAU,KAAK,QACnB,KAAK,gBAAkB,EAAQ,UAAU,OAAO,EAC5C,EAAQ,UAAU,mBAClB,EAAQ,UAAU,cAAc,EACpC,KAAK,IAAM,EAAI,aAAa,KAAK,KAAK,IAAK,KAAK,KAAK,MAAM,EAC3D,IAAI,EAAM,KAAK,IACf,EAAI,aAAe,GACnB,EAAI,OAAO,EACX,EAAI,SAAW,EAAQ,UAAU,IAAI,EAAM,EAAI,IAAK,EAAI,OAAQ,EAAI,IAAK,EAAI,OAAS,KAAK,MAAM,EAAG,KAAK,UAAW,KAAM,EAAK,EAC/H,KAAK,OAAS,CAAC,EACf,KAAK,QAAQ,QAAQ,SAAU,EAAO,CAClC,IAAI,EAAS,EAAI,aAAa,EAAM,IAAK,EAAM,MAAM,EACrD,EAAO,aAAe,GACtB,EAAO,OAAO,EACd,EAAM,OAAO,KAAK,CAAM,CAC5B,CAAC,EACD,EAAQ,cAAc,EAAK,CAC/B,EACA,EAAY,UAAU,iBAAmB,UAAY,CAC7C,SAAK,aAET,KAAI,EAAU,KAAK,QACf,EAAQ,KACZ,KAAK,aAAe,GACpB,KAAK,OAAO,QAAQ,SAAU,EAAQ,CAClC,EAAO,SAAW,EAAQ,UAAU,IAAI,EAAM,EAAO,IAAK,EAAO,OAAQ,EAAO,IAAK,EAAO,OAAS,EAAM,MAAM,EAAG,EAAM,YAAa,KAAM,EAAK,CACtJ,CAAC,CALkB,CAMvB,EACA,EAAY,UAAU,iBAAmB,UAAY,CAC5C,QAAK,aAEV,MAAK,aAAe,GACpB,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,OAAO,OAAQ,IACpC,KAAK,QAAQ,aAAa,KAAK,OAAO,EAAE,CAAC,QAAQ,CAFjC,CAIxB,EACA,EAAY,UAAU,SAAW,SAAU,EAAO,CAC9C,GAAI,KAAK,UACL,OAAO,KAAK,cAAc,CAAK,EACnC,IAAI,EAAQ,EACR,KAAM,MAAM,MAAQ,EAAM,IAAI,KAE9B,EAAM,MAAM,MAAQ,KAAK,IAAI,IAEjC,MAAK,UAAY,GACjB,IAAI,EAAa,EAAM,SAAW,SAAW,EAAM,IAAI,OAAS,EAAM,MAAM,OAAS,EAAM,MAAM,OAAS,EAAM,IAAI,OAChH,EAAc,EAAM,MAAM,QAAU,KAAK,IAAI,QAAU,EAAM,MAAM,QAAU,KAAK,IAAI,OAAS,KAAK,OAAS,EAC7G,EAAoB,EAAM,MAAM,OAAS,KAAK,IAAI,OAItD,GAHA,KAAK,cAAc,CAAK,EACpB,IACA,KAAK,QAAU,GACf,GAAe,CAAC,KAAK,QAAQ,cACzB,EAAM,SAAW,SACjB,IAAK,IAAI,EAAI,KAAK,OAAO,OAAS,EAAG,GAAK,EAAG,IAAK,CAC9C,IAAI,EAAW,KAAK,OAAO,GACvB,EAAS,CAAE,IAAK,EAAS,IAAK,OAAQ,EAAS,OAAS,CAAkB,EAC9E,KAAK,IAAI,kBAAkB,EAAQ,EAAM,KAAK,CAClD,MAEC,GAAI,EAAM,SAAW,SACtB,IAAK,IAAI,EAAI,KAAK,OAAO,OAAS,EAAG,GAAK,EAAG,IAAK,CAC9C,IAAI,EAAW,KAAK,OAAO,GACvB,EAAS,CAAE,IAAK,EAAS,IAAK,OAAQ,EAAS,OAAS,CAAkB,EAC9E,KAAK,IAAI,OAAO,IAAI,EAAM,EAAO,IAAK,EAAO,OAAQ,EAAO,IAAK,EAAO,OAAS,CAAU,CAAC,CAChG,EAGR,KAAK,UAAY,GACjB,KAAK,cAAc,CAxBF,CAyBrB,EACA,EAAY,UAAU,cAAgB,SAAU,EAAO,CACnD,KAAK,IAAI,SAAS,CAAK,EACvB,IAAK,IAAI,EAAI,KAAK,OAAO,OAAQ,KAC7B,KAAK,OAAO,EAAE,CAAC,SAAS,CAAK,EACjC,KAAK,cAAc,CACvB,EACA,EAAY,UAAU,cAAgB,UAAY,CAC1C,SAAK,UAET,KAAI,EAAQ,KACR,EAAU,KAAK,QACf,EAAe,SAAU,EAAK,EAAW,CACzC,EAAQ,aAAa,EAAI,QAAQ,EACjC,EAAI,SAAW,EAAQ,UAAU,IAAI,EAAM,EAAI,IAAK,EAAI,OAAQ,EAAI,IAAK,EAAI,OAAS,EAAM,MAAM,EAAG,EAAW,KAAM,EAAK,CAC/H,EACA,EAAa,KAAK,IAAK,KAAK,SAAS,EACrC,IAAK,IAAI,EAAI,KAAK,OAAO,OAAQ,KAC7B,EAAa,KAAK,OAAO,GAAI,KAAK,WAAW,CARrC,CAShB,EACA,EAAY,UAAU,eAAiB,SAAU,EAAO,CAChD,UAAK,WAAa,CAAC,KAAK,SAE5B,KAAI,EAAM,KAAK,QAAQ,UAAU,UAAU,EACvC,EAAI,MAAQ,KAAK,IAAI,KAAO,EAAI,QAAU,KAAK,IAAI,QAAU,EAAI,QAAU,KAAK,IAAI,OAAS,KAAK,QAClG,KAAK,iBAAiB,EACtB,KAAK,MAAM,cAAe,CAAK,IAG/B,KAAK,iBAAiB,EACtB,KAAK,MAAM,cAAe,CAAK,EAPQ,CAS/C,EACA,EAAY,UAAU,OAAS,UAAY,CACvC,KAAK,QAAQ,aAAa,KAAK,KAAO,KAAK,IAAI,QAAQ,EACvD,KAAK,iBAAiB,EACtB,KAAK,IAAI,IAAI,SAAU,KAAK,SAAS,EACrC,KAAK,QAAQ,UAAU,IAAI,eAAgB,KAAK,eAAe,EAC/D,KAAK,QAAQ,cAAc,EAAI,EAC/B,KAAK,QAAU,IACnB,EACA,EAAY,UAAU,OAAS,UAAY,CACnC,QAAK,kBAAoB,GAI7B,KAAK,IAFD,EAAc,KAAK,QAAQ,eAAe,EAC1C,GAAiB,EAAY,YAAc,EAAY,WAAA,CAAe,OAAS,KAAK,gBAC/E,EAAI,EAAG,EAAI,EAAe,IAC/B,EAAY,KAAK,KAAK,QAAS,EAAI,EAEnC,KAAK,iBACL,KAAK,QAAQ,UAAU,SAAS,KAAK,eAAe,CAHjB,CAI3C,EACO,CACX,EAAE,EACF,EAAI,UAAU,EAAY,UAAW,CAAY,EACjD,EAAQ,YAAc,CAEtB,CAAC,EAED,IAAI,OAAO,iCAAiC,CAAC,UAAU,UAAU,SAAS,gBAAgB,mBAAmB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,IAAI,EAAQ,EAAQ,cAAc,EACjL,EAAY,EAAQ,kBAAkB,EAC1C,SAAS,EAAY,EAAI,EAAI,CACzB,OAAO,EAAG,KAAO,EAAG,KAAO,EAAG,QAAU,EAAG,MAC/C,CACA,SAAS,EAAY,EAAG,CACpB,IAAI,EAAK,EAAE,SACP,EAAM,EAAG,OACT,EAAQ,EAAG,SACX,EAAO,EAAG,QACV,EAAQ,EAAE,YAAY,EACtB,EAAS,EAAE,UAAU,EAGzB,GAFI,GAAQ,EAAU,QAClB,EAAS,EAAG,QACZ,EAAE,OAAO,mBAAqB,GAAU,EAAG,CAC3C,EAAE,OAAO,UAAU,cAAc,EAAE,QAAQ,EAC3C,MACJ,CACA,GAAI,CAAC,GAAQ,CAAC,GAAO,CAAC,EAAO,CACrB,IAAW,GAAK,EAAE,OAAO,mBACzB,EAAE,OAAO,oBAAoB,EACjC,MACJ,CACI,OAAW,EAEf,KAAI,EAAS,EAAE,OACX,EAAY,EAAO,UACnB,EAAgB,EAAO,kBACvB,EAAM,EAAE,oBAAoB,EAC5B,EAAS,EAAU,UAAU,EAC7B,EAAc,EAAE,YAAY,GAAM,EAAU,QAAQ,GAAK,EAAY,EAAK,CAAM,EAChF,EAAS,EAAE,EAAG,EAAS,EAAE,EACzB,EAAmB,SAAU,EAAG,CAChC,EAAS,EAAE,QACX,EAAS,EAAE,OACf,EACI,EAAU,EAAO,QACjB,EAAe,EAAO,SAAS,yBAAyB,EAAQ,CAAM,EACtE,EAAe,EACf,EACJ,GAAI,EAAO,cAAc,iBACjB,GAAQ,GAAO,GAAS,EACxB,EAAgB,EAAQ,QAAU,MAC7B,GAAO,EAAO,sBACnB,EAAgB,cAGpB,GAAI,GAAS,CAAC,EAEV,IADA,EAAgB,MACZ,CAAC,GAAiB,EAClB,MAAA,MAEC,GAAO,EAAO,sBACnB,EAAgB,SAMxB,GAHI,GAAiB,EAAU,OAAS,EAAG,SACvC,EAAO,cAAc,kBAAkB,EAEvC,GAAiB,MAAO,CACxB,GAAI,CAAC,GAAiB,EAClB,OACJ,GAAI,CAAC,EAAe,CAChB,IAAI,EAAQ,EAAU,gBAAgB,EACtC,EAAO,mBAAmB,CAAK,CACnC,CACA,IAAI,EAAW,EAAU,UAAU,aAAa,CAAG,EACnD,EAAO,uBAAyB,GAC5B,IACA,EAAW,KACX,EAAQ,EAAU,OAAO,IAAM,EAC/B,EAAO,sBAAsB,CAAK,GAEtC,EAAO,KAAK,UAAW,UAAY,CAC/B,IAAI,EAAS,EAAU,gBAAgB,EACnC,GAAY,EAAO,QAAQ,GAAK,EAAY,EAAS,OAAQ,EAAO,MAAM,EAC1E,EAAU,eAAe,EAAO,MAAM,GAElC,EACA,EAAU,eAAe,EAAM,MAAM,EAEhC,IACL,EAAO,sBAAsB,CAAK,EAClC,EAAU,SAAS,CAAK,GAE5B,EAAU,SAAS,CAAM,GAE7B,EAAO,uBAAyB,EACpC,CAAC,CACL,MACK,GAAI,GAAiB,QAAS,CAC/B,EAAE,KAAK,EACP,EAAO,uBAAyB,GAChC,IAAI,EACA,EAAU,CAAC,EACX,EAAc,UAAY,CAC1B,IAAI,EAAY,EAAO,SAAS,yBAAyB,EAAQ,CAAM,EACnE,EAAS,EAAQ,yBAAyB,EAAU,IAAK,EAAU,OAAQ,EAAU,OAAO,EAC5F,EAAY,EAAc,CAAS,GAAK,EAAY,EAAQ,EAAU,IAAI,IAE9E,EAAe,EACf,EAAO,UAAU,eAAe,CAAM,EACtC,EAAO,SAAS,qBAAqB,EACrC,EAAO,uBAAuB,CAAO,EACrC,EAAU,EAAU,sBAAsB,EAAc,CAAY,EAChE,EAAO,cAAc,iBAAmB,EAAQ,QAAU,GAAK,EAAQ,EAAE,CAAC,QAAQ,IAClF,EAAQ,GAAK,EAAO,cAAc,gBAAgB,MAAM,GAC5D,EAAQ,QAAQ,EAAO,mBAAoB,CAAM,EACjD,EAAO,uBAAuB,EAClC,EACI,GAAiB,CAAC,EAClB,EAAU,cAAc,EAEnB,CAAC,GAAiB,IACvB,EAAe,EAAU,gBAAgB,EACzC,EAAO,mBAAmB,CAAY,GAEtC,EACA,EAAe,EAAQ,yBAAyB,EAAU,IAAI,EAE9D,EAAU,eAAe,CAAG,EAChC,EAAe,CAAE,IAAK,GAAI,OAAQ,EAAG,EACrC,IAAI,EAAsB,SAAU,EAAG,CACnC,EAAY,EACZ,cAAc,CAAO,EACrB,EAAO,uBAAuB,CAAO,EAChC,EAAQ,SACT,EAAU,CAAC,EAAU,gBAAgB,CAAC,GACtC,IACA,EAAO,sBAAsB,CAAY,EACzC,EAAU,cAAc,CAAY,GAExC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAChC,EAAU,SAAS,EAAQ,EAAE,EACjC,EAAO,uBAAyB,GAChC,EAAO,cAAc,gBAAkB,IAC3C,EACI,EAAsB,EAC1B,EAAM,QAAQ,EAAO,UAAW,EAAkB,CAAmB,EACrE,IAAI,EAAU,YAAY,UAAY,CAAE,EAAoB,CAAG,EAAG,EAAE,EACpE,OAAO,EAAE,eAAe,CAC5B,CApHe,CAqHnB,CACA,EAAQ,YAAc,CAEtB,CAAC,EAED,IAAI,OAAO,qCAAqC,CAAC,UAAU,UAAU,SAAS,2BAA2B,EAAG,SAAS,EAAS,EAAS,EAAO,CAI9I,EAAQ,gBAAkB,CAAC,CACnB,KAAM,iBACN,YAAa,mBACb,KAAM,SAAU,EAAQ,CAAE,EAAO,gBAAgB,EAAE,CAAG,EACtD,QAAS,CAAE,IAAK,cAAe,IAAK,aAAc,EAClD,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,iBACN,YAAa,mBACb,KAAM,SAAU,EAAQ,CAAE,EAAO,gBAAgB,CAAC,CAAG,EACrD,QAAS,CAAE,IAAK,gBAAiB,IAAK,eAAgB,EACtD,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,4BACN,YAAa,kCACb,KAAM,SAAU,EAAQ,CAAE,EAAO,gBAAgB,GAAI,EAAI,CAAG,EAC5D,QAAS,CAAE,IAAK,oBAAqB,IAAK,mBAAoB,EAC9D,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,4BACN,YAAa,kCACb,KAAM,SAAU,EAAQ,CAAE,EAAO,gBAAgB,EAAG,EAAI,CAAG,EAC3D,QAAS,CAAE,IAAK,sBAAuB,IAAK,qBAAsB,EAClE,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,mBACN,YAAa,qBACb,KAAM,SAAU,EAAQ,CAAE,EAAO,WAAW,EAAE,CAAG,EACjD,QAAS,CAAE,IAAK,gBAAiB,IAAK,eAAgB,EACtD,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,oBACb,KAAM,SAAU,EAAQ,CAAE,EAAO,WAAW,CAAC,CAAG,EAChD,QAAS,CAAE,IAAK,iBAAkB,IAAK,gBAAiB,EACxD,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,mBACN,YAAa,qBACb,KAAM,SAAU,EAAQ,CAAE,EAAO,WAAW,GAAI,EAAI,CAAG,EACvD,QAAS,CAAE,IAAK,sBAAuB,IAAK,qBAAsB,EAClE,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,oBACb,KAAM,SAAU,EAAQ,CAAE,EAAO,WAAW,EAAG,EAAI,CAAG,EACtD,QAAS,CAAE,IAAK,uBAAwB,IAAK,sBAAuB,EACpE,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,gCACN,YAAa,6BACb,KAAM,SAAU,EAAQ,CAChB,EAAO,YAAY,WAAa,EAChC,EAAO,YAAY,eAAe,EAElC,EAAO,YAAY,eAAe,CAC1C,EACA,QAAS,CAAE,IAAK,aAAc,IAAK,YAAa,EAChD,SAAU,EACd,EAAG,CACC,KAAM,0BACN,YAAa,mBACb,KAAM,SAAU,EAAQ,CAAE,EAAO,YAAY,eAAe,CAAG,EAC/D,SAAU,EACd,EAAG,CACC,KAAM,eACN,YAAa,gBACb,KAAM,SAAU,EAAQ,CAAE,EAAO,aAAa,CAAG,EACjD,QAAS,CAAE,IAAK,aAAc,IAAK,YAAa,EAChD,eAAgB,QACpB,EAAG,CACC,KAAM,UACN,YAAa,WACb,KAAM,SAAU,EAAQ,CAAE,EAAO,QAAQ,CAAG,EAC5C,QAAS,CAAE,IAAK,aAAc,IAAK,YAAa,EAChD,eAAgB,SAChB,SAAU,EACd,CAAC,EACL,EAAQ,oBAAsB,CAAC,CACvB,KAAM,kBACN,YAAa,mBACb,QAAS,MACT,KAAM,SAAU,EAAQ,CAAE,EAAO,oBAAoB,CAAG,EACxD,eAAgB,SAChB,SAAU,GACV,YAAa,SAAU,EAAQ,CAAE,OAAO,GAAU,EAAO,iBAAmB,CAChF,CAAC,EACL,IAAI,EAAc,EAAQ,0BAA0B,CAAC,CAAC,YACtD,EAAQ,gBAAkB,IAAI,EAAYF,EAAQ,mBAAmB,CAErE,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,iBAAiB,YAAY,gBAAgB,iCAAiC,gBAAgB,eAAe,qCAAqC,aAAa,mBAAmB,aAAa,YAAY,EAAG,SAAS,EAAS,EAAS,EAAO,CAK5S,IAAI,EAAY,EAAQ,cAAc,CAAC,CAAC,UACpC,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAY,EAAQ,aAAa,CAAC,CAAC,UACnC,EAAc,EAAQ,8BAA8B,CAAC,CAAC,YACtD,EAAQ,EAAQ,aAAa,EAC7B,EAAO,EAAQ,YAAY,EAC3B,EAAW,EAAQ,kCAAkC,EACzD,EAAQ,SAAW,EAAS,gBAAgB,OAAO,EAAS,mBAAmB,EAC/E,IAAI,EAAS,EAAQ,UAAU,CAAC,CAAC,OAC7B,EAAS,IAAI,EACjB,SAAS,EAAK,EAAS,EAAQ,EAAK,CAIhC,MAHA,GAAO,SAAS,KAAO,GACvB,EAAO,SAAS,OAAS,EACzB,EAAO,SAAS,UAAY,GAAO,GAC5B,EAAO,KAAK,CAAO,CAC9B,CACA,IAAI,EAAc,EAAQ,gBAAgB,CAAC,CAAC,aAC3C,UAAY,CACT,KAAK,oBAAsB,UAAY,CACnC,OAAO,KAAK,iBAChB,CACJ,EAAA,CAAG,KAAK,EAAY,SAAS,GAC5B,UAAY,CACT,KAAK,OAAS,KACd,KAAK,UAAY,KACjB,KAAK,SAAW,SAAU,EAAO,EAAoB,CAC5C,KAEL,IAAI,CAAC,KAAK,mBAAqB,KAAK,aAAe,EAAG,CAClD,IAAI,EAAW,KAAK,gBAAgB,EAGpC,GAFA,KAAK,UAAU,IAAI,CAAQ,EAC3B,KAAK,UAAU,IAAI,CAAK,EACpB,KAAK,UAAU,OAAO,QAAU,EAEhC,OADA,KAAK,UAAU,UAAU,EAClB,GAAsB,KAAK,kBAAkB,CAAK,EAE7D,KAAK,UAAU,UAAU,EACzB,KAAK,UAAU,IAAI,CAAQ,EAC3B,KAAK,YAAY,CAAQ,CAC7B,CACA,AACI,EAAM,SAAS,EAAM,IACzB,IAAI,EAAU,KAAK,UAAU,IAAI,CAAK,EAUtC,OATA,KAAK,YAAY,CAAK,EAClB,EAAQ,QACR,KAAK,eAAe,CAAO,EAC3B,KAAK,WAAa,GAAK,CAAC,KAAK,oBAC7B,KAAK,QAAQ,aAAa,EAC1B,KAAK,kBAAoB,GACzB,KAAK,QAAQ,YAAc,GAC3B,KAAK,UAAU,OAAO,KAAK,OAAO,GAE/B,GAAsB,KAAK,kBAAkB,CAAK,CAbzD,CAcJ,EACA,KAAK,cAAgB,SAAU,EAAO,CAClC,IAAiB,KAAK,OAAO,GAC7B,IAAI,EAAU,KAAK,UAAU,UAAU,EACnC,EAAQ,QACR,KAAK,eAAe,CAAO,EAC/B,GAAS,KAAK,kBAAkB,CAAK,CACzC,EACA,KAAK,eAAiB,SAAU,EAAK,CACjC,IAAI,EAAU,KAAK,UAAU,eAAe,CAAG,EAC/C,GAAI,EAEA,OADA,KAAK,eAAe,CAAO,EACpB,EAAQ,EAEvB,EACA,KAAK,uBAAyB,UAAY,CACtC,IAAI,EAAU,KAAK,UAAU,MAAM,EAC/B,EAAQ,QACR,KAAK,eAAe,CAAO,CACnC,EACA,KAAK,YAAc,SAAU,EAAO,CAChC,KAAK,WAAa,KAAK,UAAU,OAAO,OACxC,KAAK,OAAO,QAAQ,CAAK,EACzB,KAAK,QAAQ,WAAY,CAAS,OAAM,CAAC,CAC7C,EACA,KAAK,eAAiB,SAAU,EAAS,CAErC,GADA,KAAK,WAAa,KAAK,UAAU,OAAO,OACpC,KAAK,YAAc,GAAK,KAAK,kBAAmB,CAChD,IAAI,EAAY,KAAK,UAAU,OAAO,IAAI,EAC1C,EAAQ,KAAK,CAAS,EACtB,KAAK,WAAa,CACtB,CACA,IAAK,IAAI,EAAI,EAAQ,OAAQ,KAAM,CAC/B,IAAI,EAAQ,KAAK,OAAO,QAAQ,EAAQ,EAAE,EAC1C,KAAK,OAAO,OAAO,EAAO,CAAC,CAC/B,CACA,KAAK,QAAQ,cAAe,CAAE,OAAQ,CAAQ,CAAC,EAC3C,KAAK,aAAe,GAAK,KAAK,oBAC9B,KAAK,kBAAoB,GACzB,KAAK,QAAQ,cAAc,EAC3B,KAAK,QAAQ,YAAc,GAC3B,KAAK,UAAU,OAAO,KAAK,OAAO,GAEtC,IAAyB,KAAK,OAAO,GACjC,GAAa,CAAC,EAAU,QAAQ,KAAK,SAAS,CAAC,GAC/C,KAAK,kBAAkB,CAAS,CACxC,EACA,KAAK,eAAiB,UAAY,CAC1B,KAAK,YAET,KAAK,UAAY,IAAI,EACrB,KAAK,OAAS,CAAC,EACf,KAAK,WAAa,EACtB,EACA,KAAK,aAAe,UAAY,CAC5B,OAAO,KAAK,WAAa,KAAK,UAAU,OAAO,OAAO,EAAI,CAAC,KAAK,SAAS,CAAC,CAC9E,EACA,KAAK,eAAiB,UAAY,CAG9B,IAAK,IAFD,EAAS,KAAK,OAAO,OAAS,KAAK,OAAS,CAAC,KAAK,SAAS,CAAC,EAC5D,EAAY,CAAC,EACR,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAQ,EAAO,GACf,EAAM,EAAM,MAAM,IAClB,EAAS,EAAM,IAAI,IACvB,GAAI,IAAQ,EACR,EAAU,KAAK,EAAM,MAAM,CAAC,MAE3B,CAED,IADA,EAAU,KAAK,IAAI,EAAM,EAAK,EAAM,MAAM,OAAQ,EAAK,KAAK,QAAQ,QAAQ,CAAG,CAAC,CAAC,MAAM,CAAC,EACjF,EAAE,EAAM,GACX,EAAU,KAAK,KAAK,aAAa,EAAK,EAAI,CAAC,EAC/C,EAAU,KAAK,IAAI,EAAM,EAAQ,EAAG,EAAQ,EAAM,IAAI,MAAM,CAAC,CACjE,CACI,GAAK,GAAK,CAAC,KAAK,YAAY,IAC5B,EAAY,EAAU,QAAQ,EACtC,CACA,KAAK,cAAc,EACnB,IAAK,IAAI,EAAI,EAAU,OAAQ,KAC3B,KAAK,SAAS,EAAU,EAAE,CAClC,EACA,KAAK,eAAiB,UAAY,CAC9B,IAAI,EAAS,KAAK,UAAU,OACxB,EAAY,EAAO,EAAO,OAAS,GACnC,EAAQ,EAAM,WAAW,EAAO,EAAE,CAAC,MAAO,EAAU,GAAG,EAC3D,KAAK,cAAc,EACnB,KAAK,kBAAkB,EAAO,EAAU,QAAU,EAAU,KAAK,CACrE,EACA,KAAK,qBAAuB,UAAY,CACpC,GAAI,KAAK,WAAa,EAAG,CACrB,IAAI,EAAS,KAAK,UAAU,OACxB,EAAY,EAAO,EAAO,OAAS,GACnC,EAAQ,EAAM,WAAW,EAAO,EAAE,CAAC,MAAO,EAAU,GAAG,EAC3D,KAAK,cAAc,EACnB,KAAK,kBAAkB,EAAO,EAAU,QAAU,EAAU,KAAK,CACrE,KACK,CACD,IAAI,EAAS,KAAK,QAAQ,yBAAyB,KAAK,MAAM,EAC1D,EAAS,KAAK,QAAQ,yBAAyB,KAAK,MAAM,EAE9D,KADmB,sBAAsB,EAAQ,CAC3C,CAAC,CAAC,QAAQ,KAAK,SAAU,IAAI,CACvC,CACJ,EACA,KAAK,sBAAwB,SAAU,EAAc,EAAc,EAAmB,CAClF,IAAI,EAAU,CAAC,EACX,EAAa,EAAa,OAAS,EAAa,OACpD,GAAI,EACA,IAAI,EAAc,EAAa,OAC3B,EAAY,EAAa,OACzB,EAAe,EAAa,QAC5B,EAAa,EAAa,YAG9B,KAAI,EAAc,EAAa,OAC3B,EAAY,EAAa,OACzB,EAAe,EAAa,QAC5B,EAAa,EAAa,QAElC,IAAI,EAAa,EAAa,IAAM,EAAa,IACjD,GAAI,EACA,IAAI,EAAW,EAAa,IACxB,EAAS,EAAa,QAG1B,KAAI,EAAW,EAAa,IACxB,EAAS,EAAa,IAE1B,EAAc,IACd,EAAc,GACd,EAAW,IACX,EAAW,GACX,GAAY,IACZ,EAAoB,IAExB,IAAK,IADD,EACK,EAAM,EAAU,GAAO,EAAQ,IAAO,CAC3C,IAAI,EAAQ,EAAM,WAAW,KAAK,QAAQ,yBAAyB,EAAK,EAAa,CAAY,EAAG,KAAK,QAAQ,yBAAyB,EAAK,EAAW,CAAU,CAAC,EACrK,GAAI,EAAM,QAAQ,EAAG,CACjB,GAAI,GAAU,EAAY,EAAM,IAAK,CAAM,EACvC,MACJ,EAAS,EAAM,GACnB,CACA,EAAM,OAAS,EAAa,EAAM,MAAQ,EAAM,IAChD,EAAQ,KAAK,CAAK,CACtB,CAGA,GAFI,GACA,EAAQ,QAAQ,EAChB,CAAC,EAAmB,CAEpB,IADA,IAAI,EAAM,EAAQ,OAAS,EACpB,EAAQ,EAAI,CAAC,QAAQ,GAAK,EAAM,GACnC,IACJ,GAAI,EAAM,EAEN,IADA,IAAI,EAAQ,EACL,EAAQ,EAAM,CAAC,QAAQ,GAC1B,IAER,IAAK,IAAI,EAAI,EAAK,GAAK,EAAO,IACtB,EAAQ,EAAE,CAAC,QAAQ,GACnB,EAAQ,OAAO,EAAG,CAAC,CAE/B,CACA,OAAO,CACX,CACJ,EAAA,CAAG,KAAK,EAAU,SAAS,EAC3B,IAAI,EAAS,EAAQ,UAAU,CAAC,CAAC,QAChC,UAAY,CACT,KAAK,uBAAyB,UAAY,CACtC,KAAK,SAAS,aAAa,EAC3B,KAAK,SAAS,kBAAkB,CACpC,EACA,KAAK,mBAAqB,SAAU,EAAe,CAC/C,AACI,EAAc,SAAS,EAAc,IACzC,IAAI,EAAQ,KAAK,kBAAkB,EAInC,MAHA,GAAc,OAAS,KAAK,QAAQ,UAAU,EAAe,gBAAiB,CAAK,EACnF,KAAK,QAAQ,kBAAkB,KAAK,CAAa,EACjD,KAAK,QAAQ,qBAAuB,KAAK,QAAQ,kBAAkB,OAC5D,CACX,EACA,KAAK,sBAAwB,SAAU,EAAO,CACrC,KAAM,OAEX,MAAK,QAAQ,aAAa,EAAM,MAAM,EACtC,IAAI,EAAQ,KAAK,QAAQ,kBAAkB,QAAQ,CAAK,EACpD,GAAS,IACT,KAAK,QAAQ,kBAAkB,OAAO,EAAO,CAAC,EAClD,KAAK,QAAQ,qBAAuB,KAAK,QAAQ,kBAAkB,MAJ7B,CAK1C,EACA,KAAK,uBAAyB,SAAU,EAAQ,CAE5C,IAAK,IADD,EAAa,KAAK,QAAQ,kBACrB,EAAI,EAAO,OAAQ,KAAM,CAC9B,IAAI,EAAQ,EAAO,GACd,KAAM,OAEX,MAAK,QAAQ,aAAa,EAAM,MAAM,EACtC,IAAI,EAAQ,EAAW,QAAQ,CAAK,EAChC,GAAS,IACT,EAAW,OAAO,EAAO,CAAC,CAHQ,CAI1C,CACA,KAAK,QAAQ,qBAAuB,EAAW,MACnD,EACA,KAAK,YAAc,SAAU,EAAG,CAC5B,KAAK,mBAAmB,EAAE,KAAK,EAC/B,KAAK,SAAS,aAAa,EAC3B,KAAK,SAAS,kBAAkB,CACpC,EACA,KAAK,eAAiB,SAAU,EAAG,CAC/B,KAAK,uBAAuB,EAAE,MAAM,EACpC,KAAK,SAAS,aAAa,EAC3B,KAAK,SAAS,kBAAkB,CACpC,EACA,KAAK,eAAiB,SAAU,EAAG,CAC3B,KAAK,oBAET,KAAK,kBAAoB,GACzB,KAAK,SAAS,iBAAiB,EAC/B,KAAK,WAAW,mBAAmB,EAAS,eAAe,EAC3D,KAAK,SAAS,kBAAkB,OAAQ,KAAK,kBAAkB,EAC/D,KAAK,SAAS,aAAa,EAC3B,KAAK,SAAS,kBAAkB,EACpC,EACA,KAAK,gBAAkB,SAAU,EAAG,CAC5B,KAAK,QAAQ,YAAY,gBAE7B,KAAK,kBAAoB,GACzB,KAAK,WAAW,iBAAiB,EACjC,KAAK,WAAW,sBAAsB,EAAS,eAAe,EAC9D,KAAK,SAAS,qBAAqB,OAAQ,KAAK,kBAAkB,EAClE,KAAK,SAAS,aAAa,EAC3B,KAAK,SAAS,kBAAkB,EAChC,KAAK,MAAM,iBAAiB,EAChC,EACA,KAAK,mBAAqB,SAAU,EAAG,CACnC,IAAI,EAAU,EAAE,QACZ,EAAS,EAAE,OACV,KAAO,YAEZ,IAAK,EAAQ,kBAKJ,EAAQ,mBAAqB,UAClC,EAAS,EAAO,iBAAiB,EAAS,EAAE,IAAI,EAE3C,EAAQ,mBAAqB,cAClC,EAAS,EAAO,iBAAiB,EAAS,EAAE,KAAM,EAAI,EAEjD,EAAQ,mBAAqB,UAClC,EAAO,oBAAoB,EAC3B,EAAS,EAAQ,KAAK,EAAQ,EAAE,MAAQ,CAAC,CAAC,GAG1C,EAAS,EAAQ,kBAAkB,EAAQ,EAAE,MAAQ,CAAC,CAAC,MAhB3B,CAC5B,IAAI,EAAS,EAAQ,KAAK,EAAQ,EAAE,MAAQ,CAAC,CAAC,EAC9C,EAAO,YAAY,SAAS,EAAO,YAAY,gBAAgB,CAAC,EAChE,EAAO,YAAY,uBAAuB,CAC9C,CAcA,OAAO,CAFoD,CAG/D,EACA,KAAK,iBAAmB,SAAU,EAAK,EAAM,EAAS,CAC9C,SAAK,uBAET,KAAI,EAAY,GAAW,EAAQ,UAC/B,EAAW,GAAW,GAAQ,GAAW,EAAQ,SACjD,EAAU,KAAK,QACf,EAAY,KAAK,UACjB,EAAY,EAAU,UACtB,GAAU,EAAY,EAAY,EAAA,CAAW,OAC7C,EACJ,GAAI,CAAC,EAAO,OACR,OAAO,EAAI,KAAO,EAAI,KAAK,KAAM,GAAQ,CAAC,CAAC,EAAI,EAAI,KAAM,GAAQ,CAAC,CAAC,EACvE,IAAI,EAAM,EAAU,eACpB,EAAU,eAAiB,CAAC,EAC5B,IAAI,EAAS,IAAI,EAAU,CAAO,EAClC,KAAK,uBAAyB,GAC9B,IAAK,IAAI,EAAI,EAAO,OAAQ,KAAM,CAC9B,GAAI,EACA,KAAO,EAAI,GAAK,EAAO,EAAE,CAAC,MAAM,KAAO,EAAO,EAAI,EAAE,CAAC,IAAI,KACrD,IAER,EAAO,kBAAkB,EAAO,EAAE,EAClC,EAAO,MAAQ,EACf,KAAK,UAAY,EAAQ,UAAY,EACrC,IAAI,EAAY,EAAI,KAAO,EAAI,KAAK,KAAM,GAAQ,CAAC,CAAC,EAAI,EAAI,KAAM,GAAQ,CAAC,CAAC,EACxE,CAAC,GAAU,IAAc,IAAA,KACzB,EAAS,GACb,EAAO,gBAAgB,EAAO,EAAE,CACpC,CACA,EAAO,OAAO,EACd,KAAK,UAAY,EAAQ,UAAY,EACrC,KAAK,uBAAyB,GAC9B,EAAU,eAAiB,EAC3B,EAAU,uBAAuB,EAC7B,EAAU,OAAO,IACjB,EAAU,kBAAkB,EAAU,OAAO,EAAE,EACnD,IAAI,EAAO,KAAK,SAAS,iBAKzB,OAJA,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACnB,GAAQ,EAAK,MAAQ,EAAK,IAC1B,KAAK,SAAS,iBAAiB,EAAK,IAAI,EACrC,CAtC4B,CAuCvC,EACA,KAAK,oBAAsB,UAAY,CAC/B,CAAC,KAAK,mBAAqB,KAAK,wBAEpC,KAAK,YAAY,cAAc,CACnC,EACA,KAAK,gBAAkB,UAAY,CAC/B,IAAI,EAAO,GACX,GAAI,KAAK,mBAAqB,CAAC,KAAK,uBAAwB,CAGxD,IAAK,IAFD,EAAS,KAAK,YAAY,UAAU,OACpC,EAAM,CAAC,EACF,EAAI,EAAG,EAAI,EAAO,OAAQ,IAC/B,EAAI,KAAK,KAAK,QAAQ,aAAa,EAAO,EAAE,CAAC,EAEjD,IAAI,EAAK,KAAK,QAAQ,YAAY,CAAC,CAAC,oBAAoB,EACxD,EAAO,EAAI,KAAK,CAAE,EACd,EAAK,SAAW,EAAI,OAAS,GAAK,EAAG,SACrC,EAAO,GACf,MACU,KAAK,UAAU,QAAQ,IAC7B,EAAO,KAAK,QAAQ,aAAa,KAAK,kBAAkB,CAAC,GAE7D,OAAO,CACX,EACA,KAAK,wBAA0B,SAAU,EAAG,EAAQ,CAChD,GAAI,KAAK,mBAAqB,CAAC,KAAK,uBAAwB,CACxD,IAAI,EAAQ,KAAK,YAAY,OAAO,GACpC,GAAI,KAAK,YAAY,QAAQ,GAAK,GAAU,KAAK,YAAY,OACzD,OACJ,IAAI,EAAM,GAAU,KAAK,YAAY,OAC/B,EAAM,QAAU,EAAM,MAAQ,EAAM,IAAM,EAAM,MAChD,EAAM,OACR,EAAI,KAAO,EAAO,KACf,KAAK,QAAQ,wBAAwB,EAAI,IAAK,EAAI,MAAM,CAAC,CAAC,QAAU,EAAO,OAC9E,KAAK,YAAY,cAAc,KAAK,YAAY,gBAAgB,CAAC,EAEjE,KAAK,YAAY,uBAAuB,CAChD,CACJ,EACA,KAAK,QAAU,SAAU,EAAQ,EAAS,EAAU,CAGhD,GAFA,IAAqB,CAAC,EACtB,EAAQ,OAAS,GAAU,EAAQ,OAC/B,EAAQ,QAAU,KAAW,CAC7B,IAAI,EAAQ,KAAK,UAAU,QAAQ,EAC7B,KAAK,UAAU,aAAa,EAC5B,KAAK,UAAU,SAAS,EAC9B,EAAQ,OAAS,KAAK,QAAQ,aAAa,CAAK,CACpD,CACA,KAAK,QAAQ,IAAI,CAAO,EACxB,IAAI,EAAS,KAAK,QAAQ,QAAQ,KAAK,OAAO,EAC9C,GAAI,CAAC,EAAO,OACR,MAAO,GACX,IAAI,EAAY,KAAK,YAChB,GACD,EAAU,cAAc,EAAO,EAAE,EACrC,IAAK,IAAI,EAAI,EAAO,OAAQ,KACxB,EAAU,SAAS,EAAO,GAAI,EAAI,EAGtC,OAFI,GAAS,EAAU,UAAU,aAAa,EAAM,KAAK,GACrD,EAAU,SAAS,EAAO,EAAI,EAC3B,EAAO,MAClB,EACA,KAAK,gBAAkB,SAAU,EAAK,EAAM,CACxC,IAAI,EAAQ,KAAK,UAAU,gBAAgB,EACvC,EAAc,EAAM,QAAU,EAAM,IACpC,EAAa,KAAK,QAAQ,yBAAyB,EAAM,MAAM,EAC/D,KAAK,UAAU,iBACf,EAAW,OAAS,KAAK,UAAU,gBACvC,IAAI,EAAO,KAAK,QAAQ,yBAAyB,EAAW,IAAM,EAAK,EAAW,MAAM,EACxF,GAAK,EAAM,QAAQ,EAKf,IAAI,EAAS,MAJb,KAAI,EAAe,KAAK,QAAQ,yBAAyB,EAAc,EAAM,IAAM,EAAM,KAAK,EAC1F,EAAS,KAAK,QAAQ,yBAAyB,EAAa,IAAM,EAAK,EAAa,MAAM,EAKlG,GAAI,EAAa,CACb,IAAI,EAAW,EAAM,WAAW,EAAM,CAAM,EAC5C,EAAS,OAAS,EAAS,KAC/B,KACK,CACD,IAAI,EAAW,EAAM,WAAW,EAAQ,CAAI,EAC5C,EAAS,OAAS,EAAS,GAC/B,CAEA,GADA,EAAS,cAAgB,EAAW,OAChC,CAAC,KAAK,UAAU,kBAChB,KAAK,UAAU,SAAS,CAAK,OAG7B,GAAI,EACA,IAAI,EAAW,EAAM,OAE7B,KAAK,UAAU,SAAS,CAAQ,EAC5B,GACA,KAAK,UAAU,eAAe,CAAQ,CAC9C,EACA,KAAK,oBAAsB,SAAU,EAAK,CAItC,IAAK,IAHD,EAAU,KAAK,QACf,EAAM,EAAQ,YACd,EAAM,EAAI,OACL,EAAI,EAAI,OAAQ,KAAM,CAC3B,IAAI,EAAQ,EAAI,GAChB,GAAI,EAAM,QAAQ,EAAG,CACjB,IAAI,EAAQ,EAAQ,aAAa,EAAM,MAAM,IAAK,EAAM,MAAM,MAAM,EACpE,EAAM,MAAM,IAAM,EAAM,MAAM,IAC9B,EAAM,MAAM,OAAS,EAAM,MAAM,OACjC,EAAM,IAAI,IAAM,EAAM,IAAI,IAC1B,EAAM,IAAI,OAAS,EAAM,IAAI,MACjC,CACJ,CACA,EAAI,uBAAuB,EAE3B,IAAK,IADD,EAAQ,CAAC,EACJ,EAAI,EAAI,OAAQ,KAAM,CAC3B,IAAI,EAAQ,EAAI,GAChB,EAAM,QAAQ,EAAQ,aAAa,CAAK,CAAC,CAC7C,CACI,EAAM,EACN,EAAM,QAAQ,EAAM,IAAI,CAAC,EAEzB,EAAM,KAAK,EAAM,MAAM,CAAC,EAC5B,IAAK,IAAI,EAAI,EAAI,OAAQ,KAAM,CAC3B,IAAI,EAAQ,EAAI,GACZ,EAAM,EAAM,MAAM,EACtB,EAAQ,QAAQ,EAAO,EAAM,EAAE,EAC/B,EAAM,MAAM,IAAM,EAAI,MAAM,IAC5B,EAAM,MAAM,OAAS,EAAI,MAAM,MACnC,CACA,EAAI,kBAAkB,EAAI,OAAO,EAAE,CACvC,EACA,KAAK,WAAa,SAAU,EAAK,EAAM,EAAa,CAChD,IAAI,EAAU,KAAK,QAEf,EADM,EAAQ,YACF,gBAAgB,OAC5B,EAAM,QAAQ,IACd,EAAQ,EAAQ,aAAa,EAAM,MAAM,IAAK,EAAM,MAAM,MAAM,EAChE,EAAM,OAAS,GAAO,GAAK,EAAM,MAAQ,EAAM,IAC/C,KAAK,YAAY,SAAS,CAAK,EAC3B,IAIR,KAAI,EAAW,EAAK,EADP,EAAQ,aAAa,CACA,EAAG,CAAG,EACpC,IACA,EAAS,OAAS,GAAO,GAAK,EAAS,MAAQ,EAAS,IACxD,KAAK,QAAQ,OAAO,CAAQ,EAC5B,KAAK,YAAY,SAAS,CAAQ,EAClC,KAAK,SAAS,qBAAqB,KAAM,EAAG,GAE5C,GACA,KAAK,YAAY,eAAe,EAAM,MAAM,CARR,CAS5C,EACA,KAAK,aAAe,UAAY,CAC5B,IAAI,EAAU,KAAK,QACf,EAAM,EAAQ,YACd,EAAS,EAAI,OACb,EAAM,GACN,EAAgB,EAAO,OAAO,SAAU,EAAG,CAC3C,GAAI,EAAE,OAAO,KAAO,EAChB,MAAO,GACX,EAAM,EAAE,OAAO,GACnB,CAAC,EACD,GAAI,CAAC,EAAO,QAAU,EAAc,QAAU,EAAO,OAAS,EAAG,CAC7D,IAAI,EAAQ,KAAK,UAAU,SAAS,EAChC,EAAK,EAAM,MAAM,IAAK,EAAK,EAAM,IAAI,IACrC,EAAa,GAAM,EACvB,GAAI,EAAY,CACZ,IAAI,EAAM,KAAK,QAAQ,UAAU,EAC7B,EACJ,EACI,GAAO,KAAK,QAAQ,QAAQ,CAAE,QACzB,OAAO,KAAK,CAAI,GAAK,EAAE,EAAK,GACrC,EACI,GAAO,KAAK,QAAQ,QAAQ,CAAE,QACzB,OAAO,KAAK,CAAI,GAAK,EAAE,EAAK,GACjC,EAAK,IACL,EAAK,GACL,GAAM,IACN,EAAK,EAAM,EACnB,CACA,IAAI,EAAQ,KAAK,QAAQ,gBAAgB,EAAI,CAAE,EAC/C,EAAQ,KAAK,aAAa,EAAO,CAAU,EAC3C,KAAK,QAAQ,OAAO,CAAE,IAAK,EAAI,OAAQ,CAAE,EAAG,EAAM,KAAK;CAAI,EAAI;CAAI,EAC9D,IACD,EAAM,MAAM,OAAS,EACrB,EAAM,IAAI,OAAS,EAAM,EAAM,OAAS,EAAE,CAAC,QAE/C,KAAK,UAAU,SAAS,CAAK,CACjC,KACK,CACD,EAAc,QAAQ,SAAU,EAAG,CAC/B,EAAI,eAAe,EAAE,MAAM,CAC/B,CAAC,EACD,IAAI,EAAS,EACT,EAAW,IACX,EAAe,EAAO,IAAI,SAAU,EAAG,CACvC,IAAI,EAAI,EAAE,OAEN,EADO,EAAQ,QAAQ,EAAE,GACR,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,KAAK,EAOpD,OANI,GAAe,KACf,EAAc,GACd,EAAE,OAAS,IACX,EAAS,EAAE,QACX,EAAc,IACd,EAAW,GACR,CACX,CAAC,EACD,EAAO,QAAQ,SAAU,EAAG,EAAG,CAC3B,IAAI,EAAI,EAAE,OACN,EAAI,EAAS,EAAE,OACf,EAAI,EAAa,GAAK,EACtB,EAAI,EACJ,EAAQ,OAAO,EAAG,EAAK,aAAa,IAAK,EAAI,CAAC,CAAC,EAE/C,EAAQ,OAAO,IAAI,EAAM,EAAE,IAAK,EAAE,OAAQ,EAAE,IAAK,EAAE,OAAS,EAAI,CAAC,CAAC,EACtE,EAAE,MAAM,OAAS,EAAE,IAAI,OAAS,EAChC,EAAE,MAAM,IAAM,EAAE,IAAI,IAAM,EAAE,IAC5B,EAAE,OAAS,EAAE,GACjB,CAAC,EACD,EAAI,kBAAkB,EAAO,EAAE,EAC/B,KAAK,SAAS,aAAa,EAC3B,KAAK,SAAS,kBAAkB,CACpC,CACJ,EACA,KAAK,aAAe,SAAU,EAAO,EAAW,CAC5C,IAAI,EAAgB,GAAM,EAAiB,GACvC,EAAQ,EAAO,EACnB,OAAO,EAAM,IAAI,SAAU,EAAM,CAC7B,IAAI,EAAI,EAAK,MAAM,yBAAyB,EAmB5C,OAlBK,EAED,GAAU,MACV,EAAS,EAAE,EAAE,CAAC,OACd,EAAQ,EAAE,EAAE,CAAC,OACb,EAAO,EAAE,EAAE,CAAC,OACL,IAEP,EAAS,EAAQ,GAAQ,EAAE,EAAE,CAAC,OAAS,EAAE,EAAE,CAAC,OAAS,EAAE,EAAE,CAAC,SAC1D,EAAiB,IACjB,GAAU,EAAE,EAAE,CAAC,SACf,EAAgB,IAChB,EAAS,EAAE,EAAE,CAAC,SACd,EAAS,EAAE,EAAE,CAAC,QACd,EAAQ,EAAE,EAAE,CAAC,SACb,EAAQ,EAAE,EAAE,CAAC,QACb,EAAO,EAAE,EAAE,CAAC,SACZ,EAAO,EAAE,EAAE,CAAC,QACT,GAjBI,CAAC,CAAI,CAkBpB,CAAC,CAAC,CAAC,IAAI,EAAY,EACf,EAAgB,EAAiB,EAAa,EAAY,CAAO,EACrE,SAAS,EAAO,EAAG,CACf,OAAO,EAAK,aAAa,IAAK,CAAC,CACnC,CACA,SAAS,EAAU,EAAG,CAClB,OAAQ,EAAE,GAAY,EAAO,CAAM,EAAI,EAAE,GACnC,EAAO,EAAQ,EAAE,EAAE,CAAC,OAAS,CAAI,EACjC,EAAE,EAAE,CAAC,QAAQ,aAAc,KAAK,EAFvB,EAAE,EAGrB,CACA,SAAS,EAAW,EAAG,CACnB,OAAQ,EAAE,GAAY,EAAO,EAAS,EAAQ,EAAE,EAAE,CAAC,MAAM,EAAI,EAAE,GACzD,EAAO,CAAI,EACX,EAAE,EAAE,CAAC,QAAQ,aAAc,KAAK,EAFvB,EAAE,EAGrB,CACA,SAAS,EAAQ,EAAG,CAChB,OAAQ,EAAE,GAAY,EAAO,CAAM,EAAI,EAAE,GACnC,EAAO,CAAI,EACX,EAAE,EAAE,CAAC,QAAQ,aAAc,KAAK,EAFvB,EAAE,EAGrB,CACJ,CACJ,EAAA,CAAG,KAAK,EAAO,SAAS,EACxB,SAAS,EAAY,EAAI,EAAI,CACzB,OAAO,EAAG,KAAO,EAAG,KAAO,EAAG,QAAU,EAAG,MAC/C,CACA,EAAQ,gBAAkB,SAAU,EAAG,CACnC,IAAI,EAAU,EAAE,QACZ,GAAW,CAAC,EAAQ,cACpB,EAAQ,kBAAoB,CAAC,EAC7B,EAAQ,UAAU,eAAe,EACjC,EAAQ,YAAc,EAAQ,WAElC,KAAK,YAAc,GAAW,EAAQ,YACtC,IAAI,EAAa,EAAE,WACf,IACA,EAAW,YAAY,IAAI,WAAY,KAAK,WAAW,EACvD,EAAW,YAAY,IAAI,cAAe,KAAK,cAAc,EAC7D,EAAW,YAAY,IAAI,cAAe,KAAK,cAAc,EAC7D,EAAW,YAAY,IAAI,eAAgB,KAAK,eAAe,EAC/D,EAAW,YAAY,KAAK,IAAI,SAAU,KAAK,uBAAuB,EACtE,EAAW,YAAY,OAAO,IAAI,SAAU,KAAK,uBAAuB,GAExE,IACA,EAAQ,YAAY,GAAG,WAAY,KAAK,WAAW,EACnD,EAAQ,YAAY,GAAG,cAAe,KAAK,cAAc,EACzD,EAAQ,YAAY,GAAG,cAAe,KAAK,cAAc,EACzD,EAAQ,YAAY,GAAG,eAAgB,KAAK,eAAe,EAC3D,EAAQ,YAAY,KAAK,GAAG,SAAU,KAAK,uBAAuB,EAClE,EAAQ,YAAY,OAAO,GAAG,SAAU,KAAK,uBAAuB,GAEpE,GAAW,KAAK,mBAAqB,EAAQ,UAAU,oBACnD,EAAQ,UAAU,kBAClB,KAAK,eAAe,EAEpB,KAAK,gBAAgB,EAEjC,EACA,SAAS,EAAY,EAAQ,CACrB,EAAO,8BAEX,EAAO,YAAc,EAAO,YAAY,KAAK,CAAM,EACnD,EAAO,eAAiB,EAAO,eAAe,KAAK,CAAM,EACzD,EAAO,eAAiB,EAAO,eAAe,KAAK,CAAM,EACzD,EAAO,gBAAkB,EAAO,gBAAgB,KAAK,CAAM,EAC3D,EAAO,4BAA8BA,EAAQ,gBAAgB,KAAK,CAAM,EACxE,EAAO,wBAA0B,EAAO,wBAAwB,KAAK,CAAM,EAC3E,EAAO,4BAA4B,CAAM,EACzC,EAAO,GAAG,gBAAiB,EAAO,2BAA2B,EAC7D,EAAO,GAAG,YAAa,CAAW,EAClC,EAAO,SAAS,YAAY,EAAS,eAAe,EACpD,EAAsB,CAAM,EAChC,CACA,SAAS,EAAsB,EAAQ,CACnC,GAAI,CAAC,EAAO,UACR,OACJ,IAAI,EAAK,EAAO,UAAU,WAAW,EACjC,EAAY,GAChB,EAAM,YAAY,EAAI,UAAW,SAAU,EAAG,CAC1C,IAAI,EAAU,EAAE,SAAW,IAAM,EAAE,EAAE,SAAW,EAAE,UAAY,EAAE,SAC5D,EAAO,qBAAuB,EAG1B,KADA,EAAO,SAAS,eAAe,WAAW,EAC9B,IAGX,GACL,EAAM,CAEd,EAAG,CAAM,EACT,EAAM,YAAY,EAAI,QAAS,EAAO,CAAM,EAC5C,EAAM,YAAY,EAAI,OAAQ,EAAO,CAAM,EAC3C,SAAS,EAAM,EAAG,CACd,AAEI,KADA,EAAO,SAAS,eAAe,EAAE,EACrB,GAEpB,CACJ,CACA,EAAQ,YAAc,EACtB,EAAQ,UAAU,CAAC,CAAC,cAAc,EAAO,UAAW,SAAU,CAC1D,kBAAmB,CACf,IAAK,SAAU,EAAK,CAChB,EAAY,IAAI,EACZ,EACA,KAAK,GAAG,YAAa,CAAW,EAGhC,KAAK,IAAI,YAAa,CAAW,CAEzC,EACA,MAAO,EACX,EACA,kBAAmB,CACf,IAAK,SAAU,EAAK,CAChB,KAAK,oBAAsB,CAC/B,EACA,MAAO,EACX,CACJ,CAAC,CAED,CAAC,EAED,IAAI,OAAO,6BAA6B,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACvH,IAAI,EAAQ,EAAQ,aAAa,CAAC,CAAC,MAC/B,EAAW,EAAQ,SAAW,UAAY,CAAE,GAC/C,UAAY,CACT,KAAK,mBAAqB,KAC1B,KAAK,kBAAoB,KACzB,KAAK,cAAgB,SAAU,EAAS,EAAW,EAAK,CACpD,IAAI,EAAO,EAAQ,QAAQ,CAAG,EAO9B,OANI,KAAK,mBAAmB,KAAK,CAAI,EAC1B,QACP,GAAa,gBACV,KAAK,mBACL,KAAK,kBAAkB,KAAK,CAAI,EAC5B,MACJ,EACX,EACA,KAAK,mBAAqB,SAAU,EAAS,EAAW,EAAK,CACzD,OAAO,IACX,EACA,KAAK,iBAAmB,SAAU,EAAS,EAAK,EAAQ,CACpD,IAAI,EAAK,KACL,EAAO,EAAQ,QAAQ,CAAG,EAC1B,EAAa,EAAK,OAAO,CAAE,EAC3B,MAAc,GAMlB,KAJA,IAAI,EAAc,GAAU,EAAK,OAC7B,EAAS,EAAQ,UAAU,EAC3B,EAAW,EACX,EAAS,EACN,EAAE,EAAM,GAAQ,CACnB,IAAI,EAAQ,EAAQ,QAAQ,CAAG,CAAC,CAAC,OAAO,CAAE,EACtC,MAAS,GAEb,IAAI,GAAS,EAAY,CACrB,IAAI,EAAQ,EAAQ,WAAW,EAAK,CAAC,EACrC,GAAI,CAAC,GAAS,EAAM,OAAS,SACzB,KACR,CACA,EAAS,CADT,CAEJ,CACA,GAAI,EAAS,EAAU,CACnB,IAAI,EAAY,EAAQ,QAAQ,CAAM,CAAC,CAAC,OACxC,OAAO,IAAI,EAAM,EAAU,EAAa,EAAQ,CAAS,CAC7D,CAJA,CAKJ,EACA,KAAK,oBAAsB,SAAU,EAAS,EAAS,EAAK,EAAQ,EAAQ,CACxE,IAAI,EAAQ,CAAO,MAAK,OAAQ,EAAS,CAAE,EACvC,EAAM,EAAQ,oBAAoB,EAAS,EAAO,CAAM,EACvD,KAEL,KAAI,EAAK,EAAQ,YAAY,EAAI,KAOjC,MANA,CACI,IAAK,EAAQ,cAAc,EAAI,GAAG,EAClC,GAAM,SAAW,EAAI,IAAM,EAAM,MACjC,EAAI,MACJ,EAAI,OAAS,EAAQ,QAAQ,EAAI,GAAG,CAAC,CAAC,QAEnC,EAAM,WAAW,EAAO,CAAG,CAPD,CAQrC,EACA,KAAK,oBAAsB,SAAU,EAAS,EAAS,EAAK,EAAQ,EAAQ,CACxE,IAAI,EAAM,CAAO,MAAa,QAAO,EACjC,EAAQ,EAAQ,oBAAoB,EAAS,CAAG,EAC/C,KAIL,MAFA,GAAM,SACN,EAAI,SACG,EAAM,WAAW,EAAO,CAAG,CACtC,CACJ,EAAA,CAAG,KAAK,EAAS,SAAS,CAE1B,CAAC,EAED,IAAI,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,cAAc,YAAY,YAAY,EAAG,SAAS,EAAS,EAAS,EAAO,CAS3I,aACA,IAAI,EAAM,EAAQ,YAAY,EAC1B,EAAQ,EAAQ,UAAU,CAAC,CAAC,MAC5B,EAAM,EAAQ,WAAW,CAAC,CAAC,IAC/B,SAAS,EAAa,EAAO,EAAQ,EAAY,CAG7C,IAFA,IAAI,EAAQ,EACR,EAAO,EAAM,OAAS,EACnB,GAAS,GAAM,CAClB,IAAI,EAAO,EAAQ,GAAS,EACxB,EAAI,EAAW,EAAQ,EAAM,EAAI,EACrC,GAAI,EAAI,EACJ,EAAQ,EAAM,OACb,GAAI,EAAI,EACT,EAAO,EAAM,OAEb,OAAO,CACf,CACA,MAAO,EAAE,EAAQ,EACrB,CACA,SAAS,EAAgB,EAAS,EAAK,EAAK,CACxC,IAAI,EAAc,EAAQ,eAAe,CAAC,CAAC,KAAK,EAAM,aAAa,EAC9D,KAAY,OAEjB,KAAI,EAAI,EAAa,EAAa,CAAO,MAAK,OAAQ,EAAG,EAAG,EAAM,aAAa,EAC3E,EAAI,IACJ,EAAI,CAAC,EAAI,GACT,GAAK,EAAY,OACjB,EAAI,EAAM,EAAI,EAAI,EAAY,OAAS,EAClC,IAAM,GAAK,EAAM,IACtB,EAAI,EAAY,OAAS,GAC7B,IAAI,EAAa,EAAY,GACzB,MAAC,GAAc,CAAC,GAEpB,IAAI,EAAW,MAAQ,EAAK,CACxB,EACI,GAAa,EAAY,GAAK,SACzB,GAAc,EAAW,MAAQ,GAC1C,GAAI,CAAC,EACD,OAAO,EAAY,MAAM,CACjC,CACA,IAAI,EAAU,CAAC,EACf,EAAM,EAAW,IACjB,GACI,EAAQ,EAAM,EAAI,UAAY,OAAO,CAAC,CAAU,EAChD,EAAa,EAAY,GAAK,SACzB,GAAc,EAAW,KAAO,GACzC,OAAO,EAAQ,QAAU,CAPzB,CAhB+E,CAwBnF,CACA,EAAQ,gBAAkB,SAAU,EAAQ,EAAK,CAC7C,IAAI,EAAU,EAAO,QACjB,EAAM,EAAO,kBAAkB,EAC/B,EAAM,EAAI,IACV,EAAY,EAAQ,cAAc,gBAAgB,CAAG,CAAC,CAAC,OAAO,SAAU,EAAG,CAC3E,OAAO,EAAE,MAAQ,aACrB,CAAC,CAAC,CAAC,GACC,EACA,EAAU,QAAQ,EAGlB,GAAO,EAEX,IAAI,EAAc,EAAgB,EAAS,EAAK,CAAG,EAC/C,EACJ,GAAI,EAAa,CACb,IAAI,EAAa,EAAY,GAC7B,EAAI,QAAU,EAAW,KAAO,OAAO,EAAW,QAAU,SACtD,EAAW,IAAI,GACf,EAAW,SAAW,EAC5B,EAAI,IAAM,EAAW,IACrB,EAAa,EAAO,SAAS,aAAa,aAAa,EAAI,IAC/D,MACK,GAAI,EACL,WAGA,GAAa,CACT,YAAa,CAAC,EAAI,0BAA2B,aAAa,CAAC,EAC3D,UAAW,QACf,EAEJ,EAAO,QAAQ,OAAO,EAAI,GAAG,EAC7B,EAAO,UAAU,eAAe,CAAG,EACnC,IAAI,EAAI,CACJ,IAAK,EAAI,IACT,WAAY,GACZ,YAAa,GACb,GAAI,EAAI,cAAc,KAAK,EAC3B,KAAM,aACV,EACI,EAAK,EAAE,GAAG,YAAY,EAAI,cAAc,KAAK,CAAC,EAC9C,EAAQ,EAAE,GAAG,YAAY,EAAI,cAAc,KAAK,CAAC,EACrD,EAAM,UAAY,sBAAwB,EAAW,UACrD,IAAI,EAAO,EAAO,SAAS,aACtB,iBAAiB,CAAG,CAAC,CAAC,KAC3B,EAAM,MAAM,KAAO,EAAO,EAAO,SAAS,YAAc,EAAI,KAC5D,EAAE,GAAG,UAAY,uBACjB,EAAG,UAAY,gBAAkB,EAAW,UAC5C,EAAW,YAAY,QAAQ,SAAU,EAAc,EAAG,CACtD,EAAG,YAAY,EAAI,eAAe,CAAY,CAAC,EAC3C,EAAI,EAAW,YAAY,OAAS,GACpC,EAAG,YAAY,EAAI,cAAc,IAAI,CAAC,CAE9C,CAAC,EACD,EAAG,YAAY,EAAI,cAAc,KAAK,CAAC,EACvC,IAAI,EAAK,SAAU,EAAG,EAAQ,EAAW,CACrC,GAAI,IAAW,IAAM,IAAc,OAAS,IAAc,UAEtD,OADA,EAAE,QAAQ,EACH,CAAE,QAAS,MAAO,CAEjC,EACA,EAAE,QAAU,UAAY,CAChB,EAAO,cAAc,iBAEzB,EAAO,WAAW,sBAAsB,CAAE,EAC1C,EAAQ,cAAc,iBAAiB,CAAC,EACxC,EAAO,IAAI,kBAAmB,EAAE,OAAO,EACvC,EAAO,IAAI,gBAAiB,EAAE,OAAO,EACrC,EAAO,IAAI,UAAW,EAAE,OAAO,EAC/B,EAAO,IAAI,SAAU,EAAE,OAAO,EAClC,EACA,EAAO,WAAW,mBAAmB,CAAE,EACvC,EAAO,GAAG,kBAAmB,EAAE,OAAO,EACtC,EAAO,GAAG,gBAAiB,EAAE,OAAO,EACpC,EAAO,GAAG,UAAW,EAAE,OAAO,EAC9B,EAAO,GAAG,SAAU,EAAE,OAAO,EAC7B,EAAO,QAAQ,cAAc,cAAc,CAAC,EAC5C,EAAE,GAAG,YAAc,EAAO,MAAM,KAAK,CAAM,EAC3C,EAAO,SAAS,qBAAqB,KAAM,GAAK,CAAE,OAAQ,EAAE,GAAG,YAAa,CAAC,CACjF,EACA,EAAI,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA07B,mBAAoB,EAAK,CAEv+B,CAAC,EAED,IAAI,OAAO,UAAU,CAAC,UAAU,UAAU,SAAS,cAAc,YAAY,aAAa,mBAAmB,kBAAkB,uBAAuB,2BAA2B,4BAA4B,kBAAkB,mBAAmB,6BAA6B,qBAAqB,uBAAuB,aAAa,kBAAkB,EAAG,SAAS,EAAS,EAAS,EAAO,CAK/X,aACA,EAAQ,gBAAgB,CAAC,CAACA,CAAO,EACjC,IAAI,EAAM,EAAQ,WAAW,EACzB,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAS,EAAQ,UAAU,CAAC,CAAC,OAC7B,EAAc,EAAQ,gBAAgB,CAAC,CAAC,YACxC,EAAc,EAAQ,eAAe,CAAC,CAAC,YACvC,EAAW,EAAQ,oBAAoB,CAAC,CAAC,gBAC7C,EAAQ,wBAAwB,EAChC,EAAQ,yBAAyB,EACjC,EAAQ,eAAe,EACvB,EAAQ,gBAAgB,EACxB,EAAQ,0BAA0B,EAClC,EAAQ,kBAAkB,EAC1B,EAAQ,oBAAoB,EAC5B,EAAQ,OAAS,EAAQ,UAAU,EACnC,EAAQ,KAAO,SAAU,EAAI,EAAS,CAClC,GAAI,OAAO,GAAM,SAAU,CACvB,IAAI,EAAM,EAEV,GADA,EAAK,SAAS,eAAe,CAAG,EAC5B,CAAC,EACD,MAAU,MAAM,4BAA8B,CAAG,CACzD,CACA,GAAI,GAAM,EAAG,KAAO,EAAG,IAAI,kBAAkB,EACzC,OAAO,EAAG,IAAI,OAClB,IAAI,EAAQ,GACZ,GAAI,GAAM,kBAAkB,KAAK,EAAG,OAAO,EAAG,CAC1C,IAAI,EAAU,EACd,EAAQ,EAAQ,MAChB,EAAK,EAAI,cAAc,KAAK,EAC5B,EAAQ,WAAW,aAAa,EAAI,CAAO,CAC/C,MACS,IACL,EAAQ,EAAG,YACX,EAAG,UAAY,IAEnB,IAAI,EAAMA,EAAQ,kBAAkB,CAAK,EACrC,EAAS,IAAI,EAAO,IAAI,EAAS,CAAE,EAAG,EAAK,CAAO,EAClD,EAAM,CACN,SAAU,EACF,SACR,SAAU,EAAO,OAAO,KAAK,EAAQ,IAAI,CAC7C,EAOA,OANI,IACA,EAAI,SAAW,GACnB,EAAO,GAAG,UAAW,UAAY,CAC7B,EAAI,OAAO,UAAU,IAAM,IAC/B,CAAC,EACD,EAAO,UAAU,IAAM,EAAO,IAAM,EAC7B,CACX,EACA,EAAQ,kBAAoB,SAAU,EAAM,EAAM,CAC9C,IAAI,EAAM,IAAI,EAAY,EAAM,CAAI,EAEpC,OADA,EAAI,eAAe,IAAI,CAAa,EAC7B,CACX,EACA,EAAQ,MAAQ,EAChB,EAAQ,OAAS,EACjB,EAAQ,YAAc,EACtB,EAAQ,YAAc,EACtB,EAAQ,gBAAkB,EAE1B,EAAQ,QADMA,EAAQ,OAAO,OAG7B,CAAC,GAAe,UAAW,CACX,IAAI,QAAQ,CAAC,SAAS,EAAG,SAAS,EAAG,CAC7B,IACA,EAAE,OAAO,KAAK,EAAI,EAClB,EAAE,OAAS,IAAI,QAEnB,IAAI,GAAU,UAAY,CACtB,OAAO,IACX,EAAA,CAAG,EAMH,IAAK,IAAI,IALL,CAAC,GAAU,OAAO,OAAU,MAAa,EAAS,QAClD,CAAC,GAAU,OAAO,KAAQ,MAAa,EAAS,MAEpD,AACI,EAAO,MAAM,EACD,EAAO,EAAE,eAAe,CAAG,IACvC,EAAO,IAAI,GAAO,EAAE,IACxB,EAAO,IAAI,QAAa,EAAO,IAClBE,IACT,EAAO,QAAU,EAAO,IAEhC,CAAC,CACL,EAAA,CAAG,CAGT,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEhD,EAAS,EAAoB,IAAIA,CAAM,EAC9D,IAAI,OAAO,eAAe,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,wBAAwB,eAAe,YAAY,iBAAiB,4BAA4B,gBAAgB,gBAAgB,YAAY,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACtQ,IAAI,EAAM,EAAQ,WAAW,EACzB,EAAM,EAAQ,WAAW,EACzB,EAAe,EAAQ,qBAAqB,CAAC,CAAC,aAC9C,EAAO,EAAQ,YAAY,EAC3B,EAAQ,EAAQ,SAAS,CAAC,CAAC,MAC3B,EAAY,EAAQ,cAAc,CAAC,CAAC,UACpC,EAAc,EAAQ,yBAAyB,CAAC,CAAC,YACjD,EAAY,EAAQ,aAAa,CAAC,CAAC,UACnC,EAAY,EAAQ,aAAa,EACjC,EAAY,CACZ,aAAc,SAAU,EAAQ,CAC5B,OAAO,EAAO,QAAQ,aAAa,EAAO,QAAQ,aAAa,CAAC,CACpE,EACA,UAAW,SAAU,EAAQ,EAAM,EAAa,CAC5C,IAAI,EAAO,EAAO,QAAQ,aAAa,EAGvC,OAFI,EACO,EAAK,QAAQ,mBAAoB;EAAO,EAAc,IAAI,EAC9D,CACX,EACA,aAAc,SAAU,EAAQ,CAC5B,OAAO,EAAO,QAAQ,QAAQ,EAAO,kBAAkB,CAAC,CAAC,GAAG,CAChE,EACA,UAAW,SAAU,EAAQ,CACzB,OAAO,EAAO,QAAQ,QAAQ,EAAO,kBAAkB,CAAC,CAAC,IAAM,CAAC,CACpE,EACA,WAAY,SAAU,EAAQ,CAC1B,OAAO,EAAO,kBAAkB,CAAC,CAAC,GACtC,EACA,YAAa,SAAU,EAAQ,CAC3B,OAAO,EAAO,kBAAkB,CAAC,CAAC,IAAM,CAC5C,EACA,UAAW,SAAU,EAAQ,CACzB,OAAO,EAAO,QAAQ,eAAe,EAAI,MAAQ,IACrD,EACA,SAAU,SAAU,EAAQ,CACxB,OAAO,EAAO,QAAQ,WAAW,CACrC,EACA,UAAW,SAAU,EAAQ,CACzB,OAAO,EAAU,SAAW,EAAU,QAAQ,CAClD,EACA,SAAU,SAAU,EAAQ,CACxB,MAAO,WAAW,KAAK,KAAK,SAAS,CAAM,CAAC,CAAC,CAAC,EAClD,EACA,cAAe,SAAU,EAAQ,CAC7B,MAAO,WAAW,KAAK,KAAK,SAAS,CAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,WAAY,EAAE,CAC3E,EACA,UAAW,SAAU,EAAQ,CACzB,OAAO,KAAK,SAAS,CAAM,CAAC,CAAC,QAAQ,WAAY,EAAE,CACvD,EACA,SAAU,SAAU,EAAQ,CAAE,MAAO,sBAAwB,EAC7D,eAAgB,UAAY,CAAE,MAAO,SAAW,EAChD,SAAU,UAAY,CAAE,MAAO,SAAW,EAC1C,oBAAqB,SAAU,EAAQ,CACnC,IAAI,EAAO,EAAO,QAAQ,OAAS,CAAC,EACpC,OAAO,EAAK,cAAgB,EAAK,aAAa,OAAS,EAC3D,EACA,kBAAmB,SAAU,EAAQ,CACjC,IAAI,EAAO,EAAO,QAAQ,OAAS,CAAC,EACpC,OAAO,EAAK,cAAgB,EAAK,aAAa,KAAO,EACzD,EACA,aAAc,SAAU,EAAQ,CAE5B,OADW,EAAO,QAAQ,OAAS,CAAC,EAAA,CACxB,kBAAoB,EACpC,EACA,aAAc,EAAK,KAAK,KAAM,CAAE,KAAM,SAAU,CAAC,EACjD,mBAAoB,EAAK,KAAK,KAAM,CAAE,KAAM,SAAU,CAAC,EACvD,cAAe,EAAK,KAAK,KAAM,CAAE,MAAO,SAAU,CAAC,EACnD,mBAAoB,EAAK,KAAK,KAAM,CAAE,MAAO,MAAO,CAAC,EACrD,yBAA0B,EAAK,KAAK,KAAM,CAAE,MAAO,OAAQ,CAAC,EAC5D,aAAc,EAAK,KAAK,KAAM,CAAE,IAAK,SAAU,CAAC,EAChD,iBAAkB,EAAK,KAAK,KAAM,CAAE,QAAS,MAAO,CAAC,EACrD,uBAAwB,EAAK,KAAK,KAAM,CAAE,QAAS,OAAQ,CAAC,EAC5D,aAAc,EAAK,KAAK,KAAM,CAAE,KAAM,UAAW,OAAQ,EAAM,CAAC,EAChE,eAAgB,EAAK,KAAK,KAAM,CAAE,OAAQ,SAAU,CAAC,EACrD,eAAgB,EAAK,KAAK,KAAM,CAAE,OAAQ,SAAU,CAAC,CACzD,EACA,EAAU,cAAgB,EAAU,UACpC,SAAS,EAAK,EAAY,CACtB,IAAI,EAAM,IAAI,KAAK,CAAA,CAAE,eAAe,QAAS,CAAU,EACvD,OAAO,EAAI,QAAU,EAAI,IAAM,EAAM,CACzC,CACA,IAAI,EAAgC,UAAY,CAC5C,SAAS,GAAiB,CACtB,KAAK,WAAa,CAAC,EACnB,KAAK,eAAiB,CAAC,EACvB,KAAK,UAAY,CACrB,CA4eA,MA3eA,GAAe,UAAU,aAAe,UAAY,CAChD,OAAO,EAAe,YAAiB,KAAK,gBAAgB,CAChE,EACA,EAAe,UAAU,gBAAkB,UAAY,CACnD,SAAS,EAAa,EAAK,CAIvB,MAHA,GAAM,EAAI,OAAO,CAAC,EACd,QAAQ,KAAK,CAAG,EACT,CAAC,CAAE,UAAW,SAAS,EAAK,EAAE,CAAE,CAAC,EACrC,CAAC,CAAE,KAAM,CAAI,CAAC,CACzB,CACA,SAAS,EAAO,EAAI,CAChB,MAAO,YAAc,EAAK,UAC9B,CACA,IAAI,EAAgB,CAChB,MAAO,KAAO,EAAO,GAAG,EAAI,MAC5B,QAAS,SAAU,EAAK,EAAO,EAAO,CAClC,IAAI,EAAK,EAAM,GAIf,MAHA,GAAG,UAAY,GACf,EAAG,MAAQ,EAAI,MAAM,EAAG,EAAE,EAC1B,EAAG,KAAO,GACH,EACX,EACA,KAAM,cACV,EAkGA,MAjGA,GAAe,WAAgB,IAAI,EAAU,CACzC,MAAO,CACH,CAAE,MAAO,MAAO,QAAS,SAAU,EAAK,EAAO,EAAO,CAC9C,IAAI,EAAK,EAAI,GAOb,OANI,GAAM,KAAO,EAAM,QAGd,OAAO,QAAQ,CAAE,GAAK,MAF3B,EAAM,GAKH,CAAC,CAAG,CACf,CAAE,EACN,CAAE,MAAO,IAAK,QAAS,SAAU,EAAK,EAAO,EAAO,CAC5C,MAAO,CAAC,EAAM,OAAS,EAAM,MAAM,EAAI,CAAG,CAC9C,CAAE,EACN,CAAE,MAAO,gBAAiB,QAAS,CAAa,EAChD,CAAE,MAAO,mBAAoB,QAAS,SAAU,EAAK,EAAO,EAAO,CAC3D,IAAI,EAAI,EAAa,EAAI,OAAO,CAAC,CAAC,EAElC,OADA,EAAM,QAAQ,EAAE,EAAE,EACX,CACX,EAAG,KAAM,YAAa,EAC1B,CAAE,MAAO,KAAM,MAAO,UAAW,MAAO,EAAM,CAClD,EACA,WAAY,CACR,CAAE,MAAO,MAAQ,EAAO,KAAK,EAAI,OAAQ,QAAS,SAAU,EAAK,EAAO,EAAO,CACvE,IAAI,EAAU,EAAI,MAAM,EAAG,EAAE,CAAC,CAAC,QAAQ,cAAe,SAAU,EAAU,CACtE,OAAO,EAAS,QAAU,EAAI,EAAS,GAAK,IAChD,CAAC,CAAC,CAAC,MAAM,IAAM,CAAC,CAAC,IAAI,SAAU,EAAO,CAClC,MAAO,CAAS,OAAM,CAC1B,CAAC,EAED,MADA,GAAM,EAAE,CAAC,QAAU,EACZ,CAAC,EAAQ,EAAE,CACtB,EAAG,KAAM,OAAQ,EACrB,EACA,CAAE,MAAO,uBAAwB,MAAO,GAAI,KAAM,OAAQ,CAC9D,EACA,aAAc,CACV,CAAE,MAAO,IAAK,QAAS,SAAU,EAAK,EAAO,EAAO,CAM5C,OALI,EAAM,QAAU,EAAM,EAAE,CAAC,YACzB,EAAM,EAAE,CAAC,WAAa,GACtB,EAAM,EAAE,CAAC,MAAQ,CAAE,QAAS,EAAM,EAAG,EAC9B,CAAC,EAAM,EAAE,CAAC,KAAK,GAEnB,GACX,CAAE,EACN,CAAE,MAAO,MAAO,QAAS,SAAU,EAAK,EAAO,EAAO,CAC9C,IAAI,EAAK,EAAI,GAWb,OAVI,GAAM,KAAO,EAAM,OACnB,EAAM,EACD,OAAO,QAAQ,CAAE,GAAK,GAEtB,GAAM,IACX,EAAM;EACD,GAAM,IACX,EAAM,IACD,QAAQ,QAAQ,CAAE,GAAK,KAC5B,EAAM,CAAE,WAAY,EAAI,MAAO,EAAK,GAAI,GANxC,EAAM,EAOH,CAAC,CAAG,CACf,CAAE,EACN,CAAE,MAAO,SAAU,QAAS,SAAU,EAAK,EAAO,EAAO,CACjD,IAAI,EAAO,EAAM,MAAM,EAIvB,OAHI,IACA,EAAK,KAAO,EAAI,MAAM,EAAG,EAAE,GAC/B,KAAK,KAAO,GAAQ,EAAK,UAAY,QAAU,GACxC,CAAC,GAAQ,CAAG,CACvB,EAAG,KAAM,OAAQ,EACrB,CAAE,MAAO,gBAAiB,QAAS,SAAU,EAAK,EAAO,EAAO,CACxD,MAAO,CAAC,CAAE,KAAM,EAAI,MAAM,CAAC,CAAE,CAAC,CAClC,CAAE,EACN,CAAE,MAAO,SAAU,QAAS,SAAU,EAAK,EAAO,EAAO,CACjD,IAAI,EAAQ,CAAE,KAAM,EAAI,MAAM,CAAC,CAAE,EAEjC,OADA,EAAM,QAAQ,CAAK,EACZ,CAAC,CAAK,CACjB,EAAG,KAAM,iBAAkB,EAC/B,CAAE,MAAO,KAAM,MAAO,UAAW,MAAO,EAAM,EAC9C,CAAE,MAAO,IAAK,QAAS,SAAU,EAAK,EAAO,EAAO,CAC5C,IAAI,EAAO,EAAM,MAAM,EAEvB,MADA,MAAK,KAAO,GAAQ,EAAK,UAAY,QAAU,GACxC,CAAC,GAAQ,CAAG,CACvB,EAAG,KAAM,OAAQ,CACzB,EACA,gBAAiB,CACb,CAAE,MAAO,UAAW,QAAS,SAAU,EAAK,EAAO,EAAO,CAClD,IAAI,EAAK,EAAM,GAEf,MADA,GAAG,eAAiB,EAAI,MAAM,EAAG,EAAE,EAC5B,CAAC,EAAM,MAAM,CAAC,CACzB,EAAG,KAAM,cAAe,EAC5B,EACA,CAAE,MAAO,YAAa,QAAS,SAAU,EAAK,EAAO,EAAO,CAChD,EAAI,IAAM,MACV,EAAM,EAAE,CAAC,MAAQ,EAAM,IACvB,EAAI,IAAM,MACV,EAAM,EAAE,CAAC,WAAa,GAC9B,EAAG,KAAM,cAAe,EAC5B,CAAE,MAAO,uBAAwB,MAAO,GAAI,KAAM,cAAe,CACrE,CACJ,CAAC,EACM,EAAe,UAC1B,EACA,EAAe,UAAU,kBAAoB,SAAU,EAAK,EAAY,CACpE,OAAO,KAAK,aAAa,CAAC,CAAC,cAAc,EAAK,CAAU,CAAC,CAAC,OAAO,IAAI,SAAU,EAAG,CAC9E,OAAO,EAAE,OAAS,CACtB,CAAC,CACL,EACA,EAAe,UAAU,iBAAmB,SAAU,EAAQ,EAAM,EAAa,CAC7E,GAAI,QAAQ,KAAK,CAAI,EACjB,OAAQ,KAAK,UAAU,IAAM,CAAC,EAAA,CAAG,IAAS,GAC9C,GAAI,aAAa,KAAK,CAAI,EACtB,OAAQ,KAAK,UAAU,EAAK,GAAK,OAAS,CAAC,EAAA,CAAG,EAAK,OAAO,CAAC,IAAM,GAErE,GADA,EAAO,EAAK,QAAQ,OAAQ,EAAE,EAC1B,CAAC,KAAK,UAAU,eAAe,CAAI,EACnC,MAAO,GACX,IAAI,EAAQ,KAAK,UAAU,GAG3B,OAFI,OAAO,GAAS,aAChB,EAAQ,KAAK,UAAU,EAAK,CAAC,EAAQ,EAAM,CAAW,GACnD,GAAgB,EAC3B,EACA,EAAe,UAAU,YAAc,SAAU,EAAK,EAAI,EAAQ,CAC9D,GAAI,CAAC,EAAG,IACJ,OAAO,EACX,IAAI,EAAO,EAAG,MAAQ,GAClB,EAAK,EAAG,MACZ,EAAK,IAAI,OAAO,EAAI,EAAK,QAAQ,UAAW,EAAE,CAAC,EAC/C,IAAI,EAAY,OAAO,EAAG,KAAO,SAAW,KAAK,kBAAkB,EAAG,IAAK,cAAc,EAAI,EAAG,IAC5F,EAAQ,KAkCZ,OAjCgB,EAAI,QAAQ,EAAI,UAAY,CACxC,IAAI,EAAU,EAAM,UAAU,GAC9B,EAAM,UAAU,GAAK,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,EAG5C,IAAK,IAFD,EAAW,EAAM,iBAAiB,EAAW,CAAM,EACnD,EAAc,IACT,EAAI,EAAG,EAAI,EAAS,OAAQ,IAAK,CACtC,IAAI,EAAK,EAAS,GAClB,GAAI,OAAO,GAAM,SAEb,GADA,EAAS,GAAK,GACV,EAAG,YAAc,EAAG,MAAO,CAC3B,IAAI,EAAO,EAAS,EAAI,GACpB,GAAQ,OAAO,GAAQ,WACnB,EAAG,YAAc,IACjB,EAAS,GAAK,EAAK,EAAE,CAAC,YAAY,EAElC,EAAS,GAAK,EAAK,EAAE,CAAC,YAAY,EACtC,EAAS,EAAI,GAAK,EAAK,OAAO,CAAC,EAEvC,MACS,EAAG,aACR,EAAc,EAAG,iBAGhB,GAAe,IACpB,EAAS,GAAK,EAAG,YAAY,EAExB,GAAe,MACpB,EAAS,GAAK,EAAG,YAAY,EAErC,CAEA,MADA,GAAM,UAAU,GAAK,EACd,EAAS,KAAK,EAAE,CAC3B,CACe,CACnB,EACA,EAAe,UAAU,iBAAmB,SAAU,EAAK,EAAI,EAAQ,CAKnE,OAJI,EAAG,gBAAkB,SACd,EAAI,YAAY,EACvB,EAAG,gBAAkB,WACd,EAAI,YAAY,EACpB,CACX,EACA,EAAe,UAAU,iBAAmB,SAAU,EAAS,EAAQ,CAInE,IAAK,IAHD,EAAS,CAAC,EACV,EAAc,GACd,EAAe,GACV,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACrC,IAAI,EAAK,EAAQ,GACjB,GAAI,OAAO,GAAM,SAAU,CACvB,EAAO,KAAK,CAAE,EACV,GAAM;GACN,EAAe,GACf,EAAc,IAEb,AAED,KADA,EAAc,OAAO,KAAK,CAAE,CAAC,CAAC,GACf,KAAK,KAAK,CAAE,GAE/B,QACJ,CACK,KAGL,IADA,EAAe,GACX,EAAG,UAAW,CACd,IAAI,EAAI,EAAQ,QAAQ,EAAI,EAAI,CAAC,EAC7B,GAAK,KACL,EAAI,EAAQ,QAChB,EAAG,IAAM,EAAQ,MAAM,EAAI,EAAG,CAAC,EAC/B,EAAI,CACR,CACA,GAAI,EAAG,KAAM,CACT,IAAI,EAAQ,KAAK,iBAAiB,EAAQ,EAAG,KAAM,CAAW,EAAI,GAC9D,EAAG,YACH,EAAQ,KAAK,YAAY,EAAO,EAAI,CAAM,GAC1C,EAAG,iBACH,EAAQ,KAAK,iBAAiB,EAAO,EAAI,CAAM,GAC/C,GAAS,CAAC,EAAG,OACb,EAAO,KAAK,CAAK,EACjB,EAAS,CAAE,GAEN,CAAC,GAAS,EAAG,OAClB,EAAS,EAAG,KAAK,CAEzB,MACS,EAAG,QACR,EAAS,EAAG,OAAO,EAEd,EAAG,WAAa,KAGhB,EAAG,YAAc,MACtB,EAAO,KAAK,CAAE,EAHd,EAAO,KAAK,CAAE,CAnBlB,CAwBJ,CACA,SAAS,EAAS,EAAI,CAClB,IAAI,EAAK,EAAQ,QAAQ,EAAI,EAAI,CAAC,EAC9B,GAAM,KACN,EAAI,EACZ,CACA,OAAO,CACX,EACA,EAAe,UAAU,yBAA2B,SAAU,EAAQ,EAAa,CAE/E,OADuB,EAAmB,KAAK,KAAM,EAAQ,CACvC,CAAC,CAAC,IAC5B,EACA,EAAe,UAAU,0BAA4B,SAAU,EAAQ,EAAa,EAAS,CACrF,IAAY,IAAK,KAAK,EAAU,CAAC,GACrC,IAAI,EAAmB,EAAmB,KAAK,KAAM,EAAQ,EAAa,CAAO,EAC7E,EAAQ,EAAO,kBAAkB,EACjC,EAAM,EAAO,QAAQ,QAAQ,EAAO,EAAiB,IAAI,EACzD,EAAiB,IAAI,EAAe,CAAM,EAC1C,EAAc,EAAO,wBAA0B,EAAO,UAAU,MACpE,EAAe,YAAY,EAAiB,SAAU,EAAM,MAAO,EAAK,CAAW,CACvF,EACA,EAAe,UAAU,cAAgB,SAAU,EAAQ,EAAa,EAAS,CACzE,IAAY,IAAK,KAAK,EAAU,CAAC,GACrC,IAAI,EAAO,KACX,GAAI,EAAO,uBACP,OAAO,EAAK,0BAA0B,EAAQ,EAAa,CAAO,EACtE,EAAO,iBAAiB,UAAY,CAChC,EAAK,0BAA0B,EAAQ,EAAa,CAAO,CAC/D,EAAG,KAAM,CAAE,UAAW,EAAK,CAAC,EACxB,EAAO,gBACP,EAAO,eAAe,QAAQ,CACtC,EACA,EAAe,UAAU,UAAY,SAAU,EAAQ,CACnD,IAAI,EAAQ,EAAO,QAAQ,MAAM,KAAO,GAExC,GADA,EAAQ,EAAM,MAAM,GAAG,CAAC,CAAC,IAAI,EACzB,IAAU,QAAU,IAAU,MAAO,CACjC,IAAU,OAAS,CAAC,EAAO,QAAQ,MAAM,YACzC,EAAQ,QACZ,IAAI,EAAI,EAAO,kBAAkB,EAC7B,EAAQ,EAAO,QAAQ,SAAS,EAAE,GAAG,EACrC,OAAO,GAAU,WACjB,EAAQ,EAAM,IAEd,EAAM,YACF,EAAM,UAAU,EAAG,CAAC,GAAK,MACzB,EAAQ,aACH,EAAM,UAAU,EAAG,CAAC,GAAK,OAC9B,EAAQ,MACH,EAAM,UAAU,EAAG,CAAC,GAAK,SAC9B,EAAQ,OAEpB,CACA,OAAO,CACX,EACA,EAAe,UAAU,gBAAkB,SAAU,EAAQ,CACzD,IAAI,EAAQ,KAAK,UAAU,CAAM,EAC7B,EAAS,CAAC,CAAK,EACf,EAAa,KAAK,WAKtB,OAJI,EAAW,IAAU,EAAW,EAAM,CAAC,eACvC,EAAO,KAAK,MAAM,EAAQ,EAAW,EAAM,CAAC,aAAa,EAE7D,EAAO,KAAK,GAAG,EACR,CACX,EACA,EAAe,UAAU,cAAgB,SAAU,EAAQ,EAAS,CAChE,IAAI,EAAO,KACP,EAAS,EAAO,iBAAiB,UAAY,CAC7C,OAAO,EAAK,0BAA0B,EAAQ,CAAO,CACzD,EAAG,KAAM,CAAE,UAAW,EAAK,CAAC,EAG5B,OAFI,GAAU,EAAO,gBACjB,EAAO,eAAe,QAAQ,EAC3B,CACX,EACA,EAAe,UAAU,0BAA4B,SAAU,EAAQ,EAAS,CAC5E,IAAI,EAAS,EAAO,kBAAkB,EAClC,EAAO,EAAO,QAAQ,QAAQ,EAAO,GAAG,EACxC,EAAS,EAAK,UAAU,EAAG,EAAO,MAAM,EACxC,EAAQ,EAAK,OAAO,EAAO,MAAM,EACjC,EAAa,KAAK,WAClB,EAgBJ,OAfA,KAAK,gBAAgB,CAAM,CAAC,CAAC,KAAK,SAAU,EAAO,CAC/C,IAAI,EAAW,EAAW,GAG1B,OAFI,IACA,EAAU,KAAK,oBAAoB,EAAU,EAAQ,CAAK,GACvD,CAAC,CAAC,CACb,EAAG,IAAI,EACF,EAED,GAAW,EAAQ,OACZ,IACX,EAAO,QAAQ,IAAI,aAAa,EAAO,IAAK,EAAO,OAAS,EAAQ,cAAc,OAAQ,EAAO,OAAS,EAAQ,aAAa,MAAM,EACrI,KAAK,UAAU,IAAM,EAAQ,YAC7B,KAAK,UAAU,IAAM,EAAQ,WAC7B,KAAK,0BAA0B,EAAQ,EAAQ,OAAO,EACtD,KAAK,UAAU,IAAM,KAAK,UAAU,IAAM,KACnC,IARI,EASf,EACA,EAAe,UAAU,oBAAsB,SAAU,EAAa,EAAQ,EAAO,CACjF,IAAK,IAAI,EAAI,EAAY,OAAQ,KAAM,CACnC,IAAI,EAAI,EAAY,GAChB,OAAE,SAAW,CAAC,EAAE,QAAQ,KAAK,CAAM,IAEnC,IAAE,OAAS,CAAC,EAAE,MAAM,KAAK,CAAK,IAE9B,GAAC,EAAE,SAAW,CAAC,EAAE,OAMrB,MAJA,GAAE,YAAc,EAAE,QAAU,EAAE,QAAQ,KAAK,CAAM,EAAI,CAAC,EAAE,EACxD,EAAE,WAAa,EAAE,MAAQ,EAAE,MAAM,KAAK,CAAK,EAAI,CAAC,EAAE,EAClD,EAAE,cAAgB,EAAE,UAAY,EAAE,UAAU,KAAK,CAAM,CAAC,CAAC,GAAK,GAC9D,EAAE,aAAe,EAAE,aAAe,EAAE,aAAa,KAAK,CAAK,CAAC,CAAC,GAAK,GAC3D,CACX,CACJ,EACA,EAAe,UAAU,SAAW,SAAU,EAAU,EAAO,CAC3D,IAAI,EAAa,KAAK,WAClB,EAAiB,KAAK,eACtB,EAAO,KACX,AACI,IAAW,CAAC,EAChB,SAAS,EAAW,EAAK,CAGrB,OAFI,GAAO,CAAC,uBAAuB,KAAK,CAAG,IACvC,EAAM,MAAQ,EAAM,KACjB,GAAO,EAClB,CACA,SAAS,EAAc,EAAI,EAAO,EAAS,CAavC,MAZA,GAAK,EAAW,CAAE,EAClB,EAAQ,EAAW,CAAK,EACpB,GACA,EAAK,EAAQ,EACT,GAAM,EAAG,EAAG,OAAS,IAAM,MAC3B,GAAU,OAGd,GAAU,EACN,GAAM,EAAG,IAAM,MACf,EAAK,IAAM,IAEZ,IAAI,OAAO,CAAE,CACxB,CACA,SAAS,EAAW,EAAG,CACnB,AACI,EAAE,QAAQ,GAAS,IACvB,EAAQ,EAAE,MACL,EAAW,KACZ,EAAW,GAAS,CAAC,EACrB,EAAe,GAAS,CAAC,GAE7B,IAAI,EAAM,EAAe,GACzB,GAAI,EAAE,KAAM,CACR,IAAI,EAAM,EAAI,EAAE,MACZ,GACA,EAAK,WAAW,CAAG,EACvB,EAAI,EAAE,MAAQ,CAClB,CACA,EAAW,EAAM,CAAC,KAAK,CAAC,EACpB,EAAE,SACF,EAAE,WAAa,EAAE,QACjB,CAAC,EAAE,SAAW,EAAE,OAChB,EAAE,QAAU,MAAM,QAAQ,EAAE,IAAI,EAAI,EAAE,KAAK,KAAK;CAAI,EAAI,EAAE,MAC1D,EAAE,YAAc,CAAC,EAAE,UACf,CAAC,EAAE,OAAS,MAAM,KAAK,EAAE,UAAU,IACnC,EAAE,MAAQ,OACd,EAAE,QAAU,EAAK,aAAa,EAAE,UAAU,GAE1C,GAAC,EAAE,SAAW,CAAC,EAAE,OAAS,CAAC,EAAE,YAAc,CAAC,EAAE,YAElD,EAAE,QAAU,EAAc,EAAE,QAAS,EAAE,MAAO,EAAI,EAClD,EAAE,UAAY,IAAI,OAAO,EAAE,OAAO,EAClC,EAAE,MAAQ,EAAc,EAAE,WAAY,EAAE,SAAU,EAAI,EACtD,EAAE,aAAe,IAAI,OAAO,EAAE,UAAU,EAC5C,CACI,MAAM,QAAQ,CAAQ,EACtB,EAAS,QAAQ,CAAU,EAG3B,OAAO,KAAK,CAAQ,CAAC,CAAC,QAAQ,SAAU,EAAK,CACzC,EAAW,EAAS,EAAI,CAC5B,CAAC,EAEL,KAAK,QAAQ,mBAAoB,CAAS,OAAM,CAAC,CACrD,EACA,EAAe,UAAU,WAAa,SAAU,EAAU,EAAO,CAC7D,IAAI,EAAa,KAAK,WAClB,EAAiB,KAAK,eAC1B,SAAS,EAAc,EAAG,CACtB,IAAI,EAAU,EAAe,EAAE,OAAS,GACxC,GAAI,GAAW,EAAQ,EAAE,MAAO,CAC5B,OAAO,EAAQ,EAAE,MACjB,IAAI,EAAM,EAAW,EAAE,OAAS,GAC5B,EAAI,GAAO,EAAI,QAAQ,CAAC,EACxB,GAAK,GACL,EAAI,OAAO,EAAG,CAAC,CACvB,CACJ,CACI,EAAS,QACT,EAAc,CAAQ,EACjB,MAAM,QAAQ,CAAQ,GAC3B,EAAS,QAAQ,CAAa,CACtC,EACA,EAAe,UAAU,iBAAmB,SAAU,EAAK,CACvD,EAAM,EAAI,QAAQ,MAAO,EAAE,EAI3B,IAHA,IAAI,EAAO,CAAC,EAAuB,EAAU,CAAC,EAC1C,EAAK,uDACL,EACG,EAAI,EAAG,KAAK,CAAG,GAAG,CACrB,GAAI,EAAE,GACF,GAAI,CACA,EAAU,KAAK,MAAM,EAAE,EAAE,EACzB,EAAK,KAAK,CAAO,CACrB,MACU,CAAE,CAEhB,GAAI,EAAE,GACF,EAAQ,QAAU,EAAE,EAAE,CAAC,QAAQ,QAAS,EAAE,EAC1C,EAAK,KAAK,CAAO,EACjB,EAAU,CAAC,MAEV,CACD,IAAI,EAAM,EAAE,GAAI,EAAM,EAAE,GACxB,GAAI,GAAO,QAAS,CAChB,IAAI,EAAU,0BACd,EAAQ,MAAQ,EAAQ,KAAK,CAAG,CAAC,CAAC,GAClC,EAAQ,QAAU,EAAQ,KAAK,CAAG,CAAC,CAAC,GACpC,EAAQ,WAAa,EAAQ,KAAK,CAAG,CAAC,CAAC,GACvC,EAAQ,SAAW,EAAQ,KAAK,CAAG,CAAC,CAAC,EACzC,MACS,GAAO,WACZ,EAAQ,WAAa,EAAI,MAAM,MAAM,CAAC,CAAC,GACvC,AACI,EAAQ,OAAO,GAEd,IACL,EAAQ,GAAO,EAEvB,CACJ,CACA,OAAO,CACX,EACA,EAAe,UAAU,iBAAmB,SAAU,EAAM,EAAQ,CAChE,IAAI,EAAa,KAAK,eAClB,EAOJ,OANA,KAAK,gBAAgB,CAAM,CAAC,CAAC,KAAK,SAAU,EAAO,CAC/C,IAAI,EAAW,EAAW,GAG1B,OAFI,IACA,EAAU,EAAS,IAChB,CAAC,CAAC,CACb,EAAG,IAAI,EACA,CACX,EACO,CACX,EAAE,EACF,EAAI,UAAU,EAAe,UAAW,CAAY,EACpD,IAAI,EAAqB,SAAU,EAAQ,EAAa,EAAS,CACzD,IAAY,IAAK,KAAK,EAAU,CAAC,GACrC,IAAI,EAAS,EAAO,kBAAkB,EAClC,EAAO,EAAO,QAAQ,QAAQ,EAAO,GAAG,EACxC,EAAY,EAAO,QAAQ,aAAa,EACxC,EAAe,EAAK,MAAM,MAAM,CAAC,CAAC,GAClC,EAAO,OAAS,EAAa,SAC7B,EAAe,EAAa,MAAM,EAAG,EAAO,MAAM,GACtD,EAAc,EAAY,QAAQ,MAAO,EAAE,EAC3C,IAAI,EAAS,KAAK,kBAAkB,CAAW,EAC/C,EAAS,KAAK,iBAAiB,EAAQ,CAAM,EAC7C,EAAS,EAAO,IAAI,SAAU,EAAG,CAK7B,OAJI,GAAK;GAAQ,CAAC,EAAQ,mBACf,EAAI,EACX,OAAO,GAAK,SACL,EAAE,QAAQ,MAAO,CAAS,EAC9B,CACX,CAAC,EACD,IAAI,EAAW,CAAC,EAChB,EAAO,QAAQ,SAAU,EAAG,EAAG,CACvB,UAAO,GAAK,SAEhB,KAAI,EAAK,EAAE,UACP,EAAK,EAAS,GAClB,GAAK,IACD,EAAK,EAAS,GAAM,CAAC,EACrB,EAAG,MAAQ,EACX,EAAG,MAAQ,GACX,EAAG,QAAU,CAAC,GAEd,EAAG,QAAQ,CAAC,IAAM,GAItB,CAFI,EAAE,SAAW,CAAC,EAAG,UACjB,EAAG,QAAU,EAAE,SACnB,EAAG,KAAK,CAAC,EACT,IAAI,EAAK,EAAO,QAAQ,EAAG,EAAI,CAAC,EAC5B,OAAO,GAEX,KAAI,EAAQ,EAAO,MAAM,EAAI,EAAG,CAAE,EACnB,EAAM,KAAK,SAAU,EAAG,CAAE,OAAO,OAAO,GAAM,QAAU,CAC5D,GAAK,CAAC,EAAG,MAChB,EAAG,MAAQ,EAEN,EAAM,SAAW,CAAC,EAAG,OAAS,OAAO,EAAG,OAAU,YACvD,EAAG,MAAQ,EAAM,KAAK,EAAE,EANM,CAJzB,CAZE,CAwBf,CAAC,EACD,EAAS,QAAQ,SAAU,EAAI,CAAE,EAAG,OAAS,CAAG,CAAC,EACjD,IAAI,EAAY,CAAC,EACjB,SAAS,EAAU,EAAK,CAEpB,IAAK,IADD,EAAO,CAAC,EACH,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACjC,IAAI,EAAI,EAAI,GACZ,GAAI,OAAO,GAAK,SAAU,CACtB,GAAI,EAAU,EAAE,WACZ,SAEJ,EAAI,EADI,EAAI,YAAY,EAAG,EAAI,CACtB,IAAM,CAAE,UAAW,EAAE,SAAU,CAC5C,CACA,EAAK,GAAK,CACd,CACA,OAAO,CACX,CACA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAI,EAAO,GACX,UAAO,GAAK,SAEhB,KAAI,EAAK,EAAE,UACP,EAAK,EAAS,GACd,EAAK,EAAO,QAAQ,EAAG,EAAI,CAAC,EAChC,GAAI,EAAU,GAAK,CACX,EAAU,KAAQ,IAClB,OAAO,EAAU,GACjB,OAAO,KAAK,CAAS,CAAC,CAAC,QAAQ,SAAU,EAAU,CAC/C,EAAG,QAAQ,GAAY,EAC3B,CAAC,GAEL,QACJ,CACA,EAAU,GAAM,EAChB,IAAI,EAAQ,EAAG,MACX,OAAO,GAAU,SAEZ,EAAE,MACP,EAAQ,KAAK,YAAY,EAAO,EAAG,CAAM,GAFzC,EAAQ,EAAU,CAAK,EAG3B,EAAO,OAAO,MAAM,EAAQ,CAAC,EAAI,EAAG,KAAK,IAAI,EAAG,EAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAO,CAAC,CAAC,EACrE,EAAG,QAAQ,CAAC,IAAM,IAClB,EAAG,KAAK,CAAC,CApBF,CAqBf,CACA,IAAI,EAAM,EAAG,EAAS,EAClB,EAAO,GAmBX,OAlBA,EAAO,QAAQ,SAAU,EAAG,CACxB,GAAI,OAAO,GAAM,SAAU,CACvB,IAAI,EAAQ,EAAE,MAAM;CAAI,EACpB,EAAM,OAAS,GACf,EAAS,EAAM,EAAM,OAAS,EAAE,CAAC,OACjC,GAAO,EAAM,OAAS,GAGtB,GAAU,EAAE,OAChB,GAAQ,CACZ,MACS,IACA,EAAE,MAGH,EAAE,IAAM,CAAO,MAAa,QAAO,EAFnC,EAAE,MAAQ,CAAO,MAAa,QAAO,EAIjD,CAAC,EACM,CACG,OACI,WACF,QACZ,CACJ,EACI,EAAgC,UAAY,CAC5C,SAAS,EAAe,EAAQ,CAI5B,GAHA,KAAK,MAAQ,EACb,KAAK,OAAS,CAAC,EACf,KAAK,SAAW,CAAC,EACb,EAAO,eACP,OAAO,EAAO,eAClB,EAAO,eAAiB,KACxB,KAAK,UAAY,KAAK,SAAS,KAAK,IAAI,EACxC,KAAK,mBAAqB,EAAK,YAAY,KAAK,kBAAkB,KAAK,IAAI,CAAC,CAAC,CAAC,SAC9E,KAAK,iBAAmB,KAAK,gBAAgB,KAAK,IAAI,EACtD,KAAK,aAAe,KAAK,YAAY,KAAK,IAAI,EAC9C,KAAK,OAAO,CAAM,CACtB,CAyOA,MAxOA,GAAe,UAAU,OAAS,SAAU,EAAQ,CAChD,KAAK,cAAgB,KACrB,KAAK,gBAAkB,KACvB,KAAK,OAAS,EACd,KAAK,QAAU,EAAO,QACtB,KAAK,OAAO,GAAG,SAAU,KAAK,SAAS,EACvC,KAAK,OAAO,GAAG,kBAAmB,KAAK,kBAAkB,EACzD,KAAK,OAAO,GAAG,gBAAiB,KAAK,gBAAgB,EACrD,KAAK,OAAO,SAAS,GAAG,YAAa,KAAK,YAAY,EACtD,KAAK,OAAO,WAAW,mBAAmB,KAAK,eAAe,CAClE,EACA,EAAe,UAAU,OAAS,UAAY,CAC1C,KAAK,SAAS,QAAQ,KAAK,qBAAsB,IAAI,EACrD,KAAK,OAAO,OAAS,EACrB,KAAK,SAAS,OAAS,EACvB,KAAK,gBAAkB,KACvB,KAAK,OAAO,IAAI,SAAU,KAAK,SAAS,EACxC,KAAK,OAAO,IAAI,kBAAmB,KAAK,kBAAkB,EAC1D,KAAK,OAAO,IAAI,gBAAiB,KAAK,gBAAgB,EACtD,KAAK,OAAO,SAAS,IAAI,YAAa,KAAK,YAAY,EACvD,KAAK,OAAO,WAAW,sBAAsB,KAAK,eAAe,EACjE,KAAK,OAAO,eAAiB,KAC7B,KAAK,QAAU,KACf,KAAK,OAAS,IAClB,EACA,EAAe,UAAU,SAAW,SAAU,EAAO,CAKjD,IAAK,IAJD,EAAW,EAAM,OAAO,IAAM,IAC9B,EAAkB,KAAK,iBAAmB,CAAC,EAC3C,EAAU,EAAgB,SAAW,CAAC,EACtC,EAAW,KAAK,SAAS,MAAM,EAC1B,EAAI,EAAG,EAAI,EAAS,OAAQ,IAAK,CACtC,IAAI,EAAK,EAAS,GACd,EAAS,GAAM,GAAmB,EAAQ,EAAG,OAEjD,GADA,EAAG,UAAU,MAAQ,IACjB,EAAM,QAAU,UAAY,IAAO,EAAiB,CACpD,IAAI,EAAe,EAAG,SAAW,EAAG,QAAQ,EAAgB,OACxD,EAAa,EAAG,UAAU,WAAW,EAAM,MAAO,CAAY,EAClE,EAAa,EAAa,EAAI,CAAC,EAAa,EAAI,EAAa,EAC7D,IAAI,EAAW,EAAG,UAAU,WAAW,EAAM,IAAK,CAAY,EAC9D,EAAW,EAAW,EAAI,CAAC,EAAW,EAAI,EAAW,EAErD,IAAK,IADD,EAAW,EAAG,UAAU,OAAO,MAAM,EAAY,CAAQ,EACpD,EAAI,EAAG,EAAI,EAAS,OAAQ,IACjC,KAAK,YAAY,EAAS,EAAE,CACpC,CACA,EAAG,UAAU,UAAU,CAAK,CAChC,CACA,IAAI,EAAU,KAAK,QACf,CAAC,KAAK,WAAa,GAAY,EAAQ,UAAU,GAAK,GAAK,CAAC,EAAQ,SAAS,GAC7E,KAAK,OAAO,CACpB,EACA,EAAe,UAAU,mBAAqB,UAAY,CACtD,IAAI,EAAK,KAAK,gBACV,MAAC,GAAM,CAAC,EAAG,iBAAmB,CAAC,EAAG,gBAEtC,MAAK,UAAY,GAGjB,IAAK,IAFD,EAAU,KAAK,QACf,EAAO,EAAQ,aAAa,EAAG,cAAc,EACxC,EAAI,EAAG,EAAI,EAAG,OAAQ,IAAK,CAChC,IAAI,EAAQ,EAAG,GACV,KAAM,OAEX,KAAI,EAAW,EAAM,SACjB,EAAMF,EAAQ,eAAe,YAAY,EAAM,EAAU,KAAK,MAAM,EACxE,EAAQ,QAAQ,EAAO,CAAG,CAFL,CAGzB,CACA,KAAK,UAAY,EAXA,CAYrB,EACA,EAAe,UAAU,YAAc,SAAU,EAAG,CAC5C,EAAE,SAAW,CAAC,EAAE,QAAQ,UACxB,KAAK,mBAAmB,CAChC,EACA,EAAe,UAAU,kBAAoB,UAAY,CAChD,QAAK,OAKV,KAAK,IAHD,EAAO,KAAK,OAAO,UAAU,KAC7B,EAAS,KAAK,OAAO,UAAU,OAC/B,EAAU,KAAK,OAAO,UAAU,QAAQ,EACnC,EAAI,EAAG,EAAI,KAAK,OAAO,OAAQ,IAChC,SAAK,OAAO,EAAE,CAAC,OAEnB,KAAI,EAAe,KAAK,OAAO,EAAE,CAAC,SAAS,EAAK,IAAK,EAAK,MAAM,EAC5D,EAAiB,GAAW,KAAK,OAAO,EAAE,CAAC,SAAS,EAAO,IAAK,EAAO,MAAM,EACjF,GAAI,GAAgB,EAChB,MAH4D,CAKpE,KAAK,OAAO,CADZ,CAEJ,EACA,EAAe,UAAU,gBAAkB,UAAY,CACnD,KAAK,OAAO,CAChB,EACA,EAAe,UAAU,QAAU,SAAU,EAAK,CAC9C,IAAI,EAAM,KAAK,SAAS,OACpB,EAAQ,KAAK,OAAS,GAAO,GACjC,EAAQ,KAAK,IAAI,KAAK,IAAI,EAAO,CAAC,EAAG,CAAG,EACpC,GAAS,IACT,EAAQ,GACZ,KAAK,cAAc,CAAK,EACxB,KAAK,qBAAqB,EACtB,IAAU,GACV,KAAK,OAAO,CAEpB,EACA,EAAe,UAAU,cAAgB,SAAU,EAAO,CACtD,KAAK,cAAgB,KACrB,IAAI,EAAK,KAAK,SAAS,KAAK,OAC5B,GAAI,GACA,KAAK,kBAAkB,CAAE,EAC7B,KAAK,MAAQ,EACb,EAAK,KAAK,SAAS,KAAK,OACpB,GAAC,GAAM,CAAC,EAAG,QAEf,MAAK,gBAAkB,EACvB,IAAI,EAAQ,EAAG,gBAAkB,EAGjC,GAFI,EAAG,UACH,EAAM,OAAS,EAAM,OACpB,KAAK,OAAO,uBAUb,KAAK,OAAO,UAAU,kBAAkB,CAAK,MAVR,CACrC,IAAI,EAAM,KAAK,OAAO,YACtB,EAAI,cAAc,CAAK,EACvB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,OAAQ,IACvB,EAAG,iBAAmB,EAAG,EAAE,CAAC,QAEhC,EAAI,SAAS,EAAG,EAAE,CAAC,MAAM,EAAG,EAAI,CAExC,CAIA,KAAK,OAAO,WAAW,mBAAmB,KAAK,eAAe,EAC1D,KAAK,iBAAmB,KAAK,gBAAgB,SAC7C,KAAK,OAAO,YAAY,oBAAqB,CAAE,QAAS,KAAK,gBAAgB,OAAQ,CAAC,CAlBnE,CAmB3B,EACA,EAAe,UAAU,YAAc,SAAU,EAAU,EAAO,EAAK,CACnE,IAAI,EAAU,KAAK,SAAW,CAAC,KAAK,OAAO,UAAU,mBAAmB,EAGxE,GAFA,AACI,KAAK,gBAAgB,CAAC,EACtB,CAAC,EAAS,GAAI,CACd,IAAI,EAAI,EAAM,WAAW,EAAK,CAAG,EACjC,EAAa,EAAE,MAAO,CAAK,EAC3B,EAAa,EAAE,IAAK,CAAK,EACzB,EAAS,GAAK,CAAC,CAAC,EAChB,EAAS,EAAE,CAAC,MAAQ,CACxB,CAEA,IAAI,EAAM,CADF,KAAK,MACE,EAAG,CAAC,EACf,EAAS,KAAK,OACd,EAAY,KAAK,WAAa,KAAK,WAAa,GAAK,EACzD,EAAS,QAAQ,SAAU,EAAI,EAAO,CAClC,IAAI,EAAO,KAAK,cAAc,IAAU,EACxC,EAAK,UAAY,EACjB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,OAAQ,IAAK,CAChC,IAAI,EAAI,EAAG,GACP,EAAQ,EAAM,WAAW,EAAE,MAAO,EAAE,KAAO,EAAE,KAAK,EACtD,EAAU,EAAM,MAAO,CAAK,EAC5B,EAAU,EAAM,IAAK,CAAK,EAC1B,EAAM,SAAW,EACjB,EAAM,QAAU,EAChB,EAAO,KAAK,CAAK,EACb,GAAQ,EAGR,EAAK,GAAK,EAFV,EAAK,QAAQ,CAAK,EAGlB,EAAE,WAAc,EAAK,gBAAkB,GACvC,EAAM,OAAS,GACf,EAAK,gBAAkB,IAEtB,AACD,EAAK,iBAAiB,CAC9B,CACK,EAAK,iBACN,EAAK,gBAAkB,IACvB,IAAS,IACT,EAAI,KAAK,CAAI,EACb,KAAK,cAAc,GAAS,GAEhC,KAAK,kBAAkB,CAAI,EAC3B,EAAK,UAAY,EAAK,WAAa,IAAI,EACvC,EAAK,UAAU,MAAQ,EACvB,EAAK,UAAU,QAAQ,CAAI,CAC/B,EAAG,IAAI,EACH,EAAI,OAAS,IACT,KAAK,SAAS,QACd,EAAI,KAAK,EAAI,OAAO,EAAG,CAAC,CAAC,CAAC,EAAE,EAChC,KAAK,SAAS,OAAO,MAAM,KAAK,SAAU,CAAG,EAErD,EACA,EAAe,UAAU,kBAAoB,SAAU,EAAI,CACvD,IAAI,EAAU,KAAK,QACnB,EAAG,QAAQ,SAAU,EAAO,CACxB,AACI,EAAM,WAAW,EAAQ,UAAU,EAAO,qBAAsB,MAAM,CAC9E,CAAC,CACL,EACA,EAAe,UAAU,qBAAuB,SAAU,EAAI,CAC1D,IAAI,EAAU,KAAK,QACnB,EAAG,QAAQ,SAAU,EAAO,CACxB,EAAQ,aAAa,EAAM,QAAQ,EACnC,EAAM,SAAW,IACrB,CAAC,CACL,EACA,EAAe,UAAU,qBAAuB,UAAY,CACnD,QAAK,gBAEV,KAAI,EAAmB,KAAK,gBAAgB,UACxC,KAAK,gBAAgB,QAAU,GAC/B,IAEJ,KAAK,SAAS,QAAQ,SAAU,EAAI,CAC5B,EAAG,YAAc,EACjB,KAAK,kBAAkB,CAAE,EAEzB,KAAK,qBAAqB,CAAE,CACpC,EAAG,IAAI,CATqC,CAUhD,EACA,EAAe,UAAU,YAAc,SAAU,EAAO,CACpD,IAAI,EAAI,EAAM,QAAQ,QAAQ,CAAK,EAC/B,GAAK,IACL,EAAM,QAAQ,OAAO,EAAG,CAAC,EAC7B,EAAI,KAAK,OAAO,QAAQ,CAAK,EACzB,GAAK,IACL,KAAK,OAAO,OAAO,EAAG,CAAC,EAC3B,EAAI,EAAM,QAAQ,UAAU,OAAO,QAAQ,CAAK,EAC5C,GAAK,IACL,EAAM,QAAQ,OAAO,EAAG,CAAC,EAC7B,KAAK,QAAQ,aAAa,EAAM,QAAQ,EACnC,EAAM,QAAQ,SACf,EAAI,KAAK,SAAS,QAAQ,EAAM,OAAO,EACnC,GAAK,IACL,KAAK,SAAS,OAAO,EAAG,CAAC,EACxB,KAAK,SAAS,QACf,KAAK,OAAO,EAExB,EACO,CACX,EAAE,EACF,EAAe,UAAU,gBAAkB,IAAI,EAC/C,EAAe,UAAU,gBAAgB,SAAS,CAC9C,IAAO,SAAU,EAAQ,CACjBA,EAAQ,gBAAkBA,EAAQ,eAAe,cAAc,CAAM,IAEzE,EAAO,eAAe,QAAQ,CAAC,EAC/B,EAAO,SAAS,qBAAqB,EACzC,EACA,YAAa,SAAU,EAAQ,CAC3B,EAAO,eAAe,QAAQ,EAAE,EAChC,EAAO,SAAS,qBAAqB,CACzC,EACA,IAAO,SAAU,EAAQ,CACrB,EAAO,eAAe,OAAO,CACjC,CACJ,CAAC,EACD,IAAI,EAAY,SAAU,EAAO,EAAM,CAC/B,EAAM,KAAO,IACb,EAAM,QAAU,EAAK,QACzB,EAAM,KAAO,EAAK,GACtB,EACI,EAAe,SAAU,EAAO,EAAO,CACnC,EAAM,KAAO,EAAM,MACnB,EAAM,QAAU,EAAM,QAC1B,EAAM,KAAO,EAAM,GACvB,EACA,EAAI,gBAAgB;;;;;;;GAAqN,eAAgB,EAAK,EAC9P,EAAQ,eAAiB,IAAI,EAC7B,IAAI,EAAS,EAAQ,UAAU,CAAC,CAAC,QAChC,UAAY,CACT,KAAK,cAAgB,SAAU,EAAS,EAAS,CAC7C,OAAOA,EAAQ,eAAe,cAAc,KAAM,EAAS,CAAO,CACtE,EACA,KAAK,cAAgB,SAAU,EAAS,CACpC,OAAOA,EAAQ,eAAe,cAAc,KAAM,CAAO,CAC7D,CACJ,EAAA,CAAG,KAAK,EAAO,SAAS,CAExB,CAAC,EAED,IAAI,OAAO,yBAAyB,CAAC,UAAU,UAAU,SAAS,uBAAuB,aAAa,YAAY,gBAAgB,eAAe,cAAc,aAAa,mBAAmB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACrO,IAAI,EAAW,EAAQ,qBAAqB,CAAC,CAAC,gBAC1C,EAAS,EAAQ,WAAW,CAAC,CAAC,OAC9B,EAAQ,EAAQ,UAAU,CAAC,CAAC,MAC5B,EAAQ,EAAQ,cAAc,EAC9B,EAAO,EAAQ,aAAa,EAC5B,EAAM,EAAQ,YAAY,EAC1B,EAAM,EAAQ,WAAW,CAAC,CAAC,IAC3B,EAAY,EAAQ,oBAAoB,EACxC,EAAY,SAAU,EAAO,CAC7B,MAAO,mBAA0B,GACrC,EACI,EAAgB,EAAU,SAAW,OAAS,UAC9C,EAAiB,EAAU,SAAW,WAAa,SACnD,EAAkB,EAAU,SAAW,eAAiB,gBACxD,EAAoB,SAAU,EAAI,CAClC,IAAI,EAAW,IAAI,EAAS,CAAE,EAC9B,EAAS,UAAY,EACrB,IAAI,EAAS,IAAI,EAAO,CAAQ,EAOhC,OANA,EAAO,uBAAuB,EAAK,EACnC,EAAO,mBAAmB,EAAK,EAC/B,EAAO,SAAS,cAAc,EAAK,EACnC,EAAO,SAAS,uBAAuB,EAAK,EAC5C,EAAO,cAAc,cAAgB,EACrC,EAAO,qBAAuB,GACvB,CACX,EACI,EAA0B,UAAY,CACtC,SAAS,EAAS,EAAY,CAC1B,IAAI,EAAK,EAAI,cAAc,KAAK,EAC5B,EAAQ,EAAkB,CAAE,EAC5B,GACA,EAAW,YAAY,CAAE,EAE7B,EAAG,MAAM,QAAU,OACnB,EAAM,SAAS,QAAQ,MAAM,OAAS,UACtC,EAAM,SAAS,SAAS,kBAAkB,EAC1C,EAAM,SAAS,WAAW,QAAQ,aAAa,OAAQ,CAAa,EACpE,EAAM,SAAS,WAAW,QAAQ,aAAa,uBAAwB,EAAI,0CAA2C,0BAA0B,CAAC,EACjJ,EAAM,SAAS,WAAW,QAAQ,aAAa,aAAc,EAAI,gCAAiC,0BAA0B,CAAC,EAC7H,EAAM,SAAS,SAAS,aAAa,cAAe,MAAM,EAC1D,EAAM,UAAU,sBAAuB,EAAK,EAC5C,EAAM,UAAU,YAAa,GAAG,EAChC,IAAI,EAAO,UAAY,CAAE,EACzB,EAAM,MAAQ,EACd,EAAM,WAAa,GACnB,EAAM,SAAS,aAAa,aAAe,EAC3C,EAAM,SAAS,aAAa,QAAQ,MAAM,QAAU,IACpD,EAAM,SAAS,UAAY,EAC3B,EAAM,SAAS,sBAAwB,GACvC,EAAM,uBAAuB,EAAK,EAClC,EAAM,QAAQ,UAAU,EAAE,EAC1B,EAAM,QAAQ,iBAAiB,MAAQ,uBACvC,EAAM,GAAG,YAAa,SAAU,EAAG,CAC/B,IAAI,EAAM,EAAE,oBAAoB,EAChC,EAAM,UAAU,eAAe,CAAG,EAClC,EAAgB,MAAM,IAAM,EAAgB,IAAI,IAAM,EAAI,IAC1D,EAAE,KAAK,CACX,CAAC,EACD,IAAI,EACA,EAAc,IAAI,EAAM,GAAI,EAAG,GAAI,GAAQ,EAC3C,EAAkB,IAAI,EAAM,GAAI,EAAG,GAAI,GAAQ,EACnD,EAAgB,GAAK,EAAM,QAAQ,UAAU,EAAiB,kBAAmB,UAAU,EAC3F,EAAM,iBAAmB,SAAU,EAAK,CAC/B,EAGA,AAED,EAAY,MADZ,EAAM,QAAQ,aAAa,EAAY,EAAE,EACxB,MAJjB,EAAY,GAAK,EAAM,QAAQ,UAAU,EAAa,iBAAkB,UAAU,CAM1F,EACA,EAAM,iBAAiB,EAAK,EAC5B,EAAM,GAAG,YAAa,SAAU,EAAG,CAC/B,GAAI,CAAC,EAAgB,CACjB,EAAiB,EACjB,MACJ,CACI,OAAe,GAAK,EAAE,GAAK,EAAe,GAAK,EAAE,GAKrD,CAFA,EAAiB,EACjB,EAAe,UAAY,EAAM,SAAS,UAC1C,EAAM,YAAc,GACpB,IAAI,EAAM,EAAe,oBAAoB,CAAC,CAAC,IAC3C,EAAY,MAAM,KAAO,IACpB,EAAY,IACb,EAAM,OAAO,CAAG,EACpB,EAAe,CAAG,EALF,CAOxB,CAAC,EACD,EAAM,SAAS,GAAG,eAAgB,UAAY,CAC1C,GAAI,GAAkB,EAAY,MAAM,KAAO,GAAI,CAC/C,EAAe,KAAO,KACtB,IAAI,EAAM,EAAe,oBAAoB,CAAC,CAAC,IAC1C,EAAY,IACb,EAAM,OAAO,CAAG,EACpB,EAAe,EAAK,EAAI,CAC5B,CACJ,CAAC,EACD,EAAM,SAAS,GAAG,cAAe,UAAY,CAEzC,IAAK,IADD,EAAI,EAAM,SAAS,WACd,EAAM,EAAE,OAAO,SAAU,EAAI,EAAE,OAAO,QAAS,GAAO,EAAG,IAAO,CACrE,IAAI,EAAmD,EAAE,QAAQ,WAAW,EAAM,EAAE,OAAO,UAC3F,EAAgB,aAAa,OAAQ,CAAc,EACnD,EAAgB,aAAa,uBAAwB,EAAI,+CAAgD,MAAM,CAAC,EAChH,EAAgB,aAAa,eAAgB,EAAM,KAAK,MAAM,EAC9D,EAAgB,aAAa,mBAAoB,aAAa,EAC9D,EAAgB,aAAa,gBAAiB,EAAM,CAAC,EACrD,IAAI,EAAU,EAAM,QAAQ,CAAG,EAC/B,GAAI,EAAS,CACT,IAAI,EAAY,GAAU,EAAQ,SAAW,EAAQ,QAAc,EAAQ,KAAO,KAAY,EAAQ,OAAQ,KAC9G,EAAgB,aAAa,aAAc,CAAS,CACxD,CAEA,EADuC,iBAAiB,2BACzC,CAAC,CAAC,QAAQ,SAAU,EAAM,CACrC,EAAK,aAAa,OAAQ,MAAM,CACpC,CAAC,CACL,CACJ,CAAC,EACD,EAAM,SAAS,GAAG,cAAe,UAAY,CACzC,IAAI,EAAM,EAAM,OAAO,EACnB,EAAI,EAAM,SAAS,WACnB,EAA4C,EAAE,QAAQ,WAAW,EAAM,EAAE,OAAO,UAChF,EAAK,SAAS,cAQlB,GAPI,IAAa,EAAM,cAAgB,EAAM,eACzC,EAAI,eAAe,EAAM,aAAc,cAAc,EACrD,EAAM,aAAa,gBAAgB,CAAe,EAClD,EAAM,aAAa,gBAAgB,IAAI,GAE3C,EAAG,gBAAgB,uBAAuB,EAC1C,EAAM,aAAe,EACjB,EAAU,CACV,IAAI,EAAS,EAAU,CAAG,EAC1B,EAAI,YAAY,EAAU,cAAc,EACxC,EAAS,GAAK,EACd,EAAE,QAAQ,aAAa,wBAAyB,CAAM,EACtD,EAAG,aAAa,wBAAyB,CAAM,EAC/C,EAAS,aAAa,EAAiB,MAAM,CACjD,CACJ,CAAC,EACD,IAAI,EAAkB,UAAY,CAAE,EAAe,EAAE,CAAG,EACpD,EAAiB,SAAU,EAAK,EAAgB,CAC5C,IAAQ,EAAY,MAAM,MAC1B,EAAY,MAAM,IAAM,EAAY,IAAI,IAAM,EACzC,GACD,EAAM,QAAQ,MAAM,kBAAkB,EAC1C,EAAM,MAAM,mBAAmB,EAEvC,EACA,EAAM,cAAgB,UAAY,CAC9B,OAAO,EAAY,MAAM,GAC7B,EACA,EAAM,YAAY,EAAM,UAAW,WAAY,UAAY,CACvD,EAAM,YAAc,GACpB,EAAgB,CACpB,CAAC,EACD,EAAM,GAAG,OAAQ,CAAe,EAChC,EAAM,GAAG,kBAAmB,CAAe,EAC3C,EAAM,QAAQ,IAAI,UAAY,UAAY,CACtC,OAAO,EAAM,KAAK,MACtB,EACA,EAAM,QAAQ,IAAI,QAAU,SAAU,EAAG,CACrC,IAAI,EAAO,EAAM,KAAK,GAGtB,OAFI,OAAO,GAAQ,SACR,EACH,GAAQ,EAAK,OAAU,EACnC,EACA,IAAI,EAAc,EAAM,QAAQ,YA0LhC,MAzLA,GAAY,aAAe,SAAU,EAAK,CACtC,IAAI,EAAO,EAAM,KAAK,GAClB,EAAS,CAAC,EACd,GAAI,CAAC,EACD,OAAO,EACP,OAAO,GAAQ,WACf,EAAO,CAAE,MAAO,CAAK,GACzB,IAAI,EAAU,EAAK,SAAW,EAAK,OAAS,EAAK,KACjD,SAAS,EAAS,EAAO,EAAW,CAChC,GAAS,EAAO,KAAK,CACjB,MAAO,EAAK,WAAa,KAAO,GAAa,IACtC,OACX,CAAC,CACL,CAKA,IAAK,IAJD,EAAQ,EAAQ,YAAY,EAC5B,GAAc,EAAM,YAAc,GAAA,CAAI,YAAY,EAClD,EAAY,EACZ,EAAQ,EACH,EAAI,EAAG,GAAK,EAAW,OAAQ,IACpC,GAAI,GAAK,IAAU,EAAK,UAAa,GAAK,GAAM,GAAK,EAAW,QAAS,CACrE,IAAI,EAAM,EAAW,MAAM,EAAO,CAAC,EACnC,EAAQ,EACR,IAAI,EAAQ,EAAM,QAAQ,EAAK,CAAS,EACxC,GAAI,GAAS,GACT,SACJ,EAAS,EAAQ,MAAM,EAAW,CAAK,EAAG,EAAE,EAC5C,EAAY,EAAQ,EAAI,OACxB,EAAS,EAAQ,MAAM,EAAO,CAAS,EAAG,sBAAsB,CACpE,CAQJ,OANA,EAAS,EAAQ,MAAM,EAAW,EAAQ,MAAM,EAAG,EAAE,EACrD,EAAO,KAAK,CAAE,KAAM,oBAAqB,MAAO,GAAI,CAAC,EACjD,EAAK,MACL,EAAO,KAAK,CAAE,KAAM,kBAAmB,MAAO,EAAK,IAAK,CAAC,EACzD,EAAK,SACL,EAAO,KAAK,CAAE,KAAM,qBAAsB,MAAO,EAAK,OAAQ,CAAC,EAC5D,CACX,EACA,EAAY,gBAAkB,EAC9B,EAAY,MAAQ,EACpB,EAAM,QAAQ,cAAgB,UAAY,CACtC,MAAO,MAAK,YAAc,CAC9B,EACA,EAAM,OAAS,GACf,EAAM,UAAY,GAClB,EAAM,WAAa,GACnB,EAAM,WAAa,GACnB,EAAM,YAAc,GACpB,EAAM,KAAO,CAAC,EACd,EAAM,QAAU,SAAU,EAAM,EAAY,CACxC,EAAM,WAAa,GAAc,GACjC,EAAM,SAAS,EAAK,aAAa;EAAM,EAAK,MAAM,EAAG,EAAE,EACvD,EAAM,KAAO,GAAQ,CAAC,EACtB,EAAM,OAAO,CAAC,CAClB,EACA,EAAM,QAAU,SAAU,EAAK,CAC3B,OAAO,EAAM,KAAK,EACtB,EACA,EAAM,OAAS,UAAY,CACvB,OAAO,EAAgB,MAAM,GACjC,EACA,EAAM,OAAS,SAAU,EAAM,CAC3B,EAAO,KAAK,IAAI,KAAK,WAAa,EAAI,GAAI,KAAK,IAAI,KAAK,KAAK,OAAS,EAAG,CAAI,CAAC,EAC1E,EAAgB,MAAM,KAAO,IAC7B,EAAM,UAAU,eAAe,EAC/B,EAAgB,MAAM,IAAM,EAAgB,IAAI,IAAM,GAAQ,EAC9D,EAAM,QAAQ,MAAM,kBAAkB,EACtC,EAAM,aAAa,GAAQ,EAAG,CAAC,EAC3B,EAAM,QACN,EAAM,QAAQ,QAAQ,EAElC,EACA,EAAM,GAAG,kBAAmB,UAAY,CAChC,EAAM,QACN,EAAM,OAAO,EAAM,UAAU,KAAK,GAAG,EACzC,EAAM,SAAS,qBAAqB,CACxC,CAAC,EACD,EAAM,KAAO,UAAY,CACrB,KAAK,UAAU,MAAM,QAAU,OAC/B,EAAM,UAAY,KAClB,EAAM,OAAS,KACX,EAAM,SACN,EAAM,OAAS,GACf,KAAK,QAAQ,MAAM,EAE3B,EACA,EAAM,QAAU,SAAU,EAAK,EAAY,EAAQ,EAAW,CAC1D,GAAI,CAAC,GAAa,EAAM,QAAU,EAAM,WAAa,EAAM,QACvD,EAAM,UAAU,MAAQ,EAAI,KAAO,EAAM,UAAU,OAAS,EAAI,MAChE,EAAM,SAAW,EACjB,MAAO,GAEX,IAAI,EAAK,KAAK,UACV,EAAgB,KAAK,SAAS,UAAU,OAAS,GACjD,EAAe,OAAO,YAAc,EACpC,EAAc,OAAO,WAAa,EAClC,EAAW,KAAK,SAChB,EAAO,EAAS,UAAY,EAAa,IACzC,EAAO,CAAE,IAAK,EAAG,OAAQ,EAAG,KAAM,CAAE,EACpC,EAAa,EAAe,EAAI,IAAM,EAAI,KAAK,YAAc,EAC7D,EAAa,EAAI,IAAM,EAAI,KAAK,YACpC,AAKQ,IAJA,GAAc,GAAc,GAAc,EACjC,SAGA,MAGb,IAAW,OACX,EAAK,OAAS,EAAI,IAAM,KAAK,YAC7B,EAAK,IAAM,EAAK,OAAS,GAEpB,IAAW,WAChB,EAAK,IAAM,EAAI,IAAM,EAAa,KAAK,YACvC,EAAK,OAAS,EAAK,IAAM,GAE7B,IAAI,EAAQ,EAAK,KAAO,GAAK,EAAK,QAAU,EAC5C,GAAI,CAAC,GAAa,CAAC,EACf,MAAO,GAEN,EASD,EAAS,gBAAkB,KARvB,IAAW,MACX,EAAS,gBAAkB,EAG3B,EAAS,gBAAkB,EAM/B,IAAW,OACX,EAAG,MAAM,IAAM,GACf,EAAG,MAAM,OAAU,EAAe,EAAgB,EAAK,OAAU,KACjE,EAAM,UAAY,KAGlB,EAAG,MAAM,IAAM,EAAK,IAAM,KAC1B,EAAG,MAAM,OAAS,GAClB,EAAM,UAAY,IAEtB,EAAG,MAAM,QAAU,GACnB,IAAI,EAAO,EAAI,KAaf,OAZI,EAAO,EAAG,YAAc,IACxB,EAAO,EAAc,EAAG,aAC5B,EAAG,MAAM,KAAO,EAAO,KACvB,EAAG,MAAM,MAAQ,GACjB,EAAI,gBAAgB,CAAE,EACjB,EAAM,SACP,EAAM,OAAS,GACf,KAAK,QAAQ,MAAM,EACnB,EAAiB,MAErB,EAAM,UAAY,EAClB,EAAM,OAAS,EACR,EACX,EACA,EAAM,KAAO,SAAU,EAAK,EAAY,EAAa,CACjD,KAAK,QAAQ,EAAK,EAAY,EAAc,SAAW,IAAA,GAAW,EAAI,CAC1E,EACA,EAAM,KAAO,SAAU,EAAO,CAC1B,IAAI,EAAM,KAAK,OAAO,EAClB,EAAM,KAAK,QAAQ,UAAU,EAAI,EACrC,OAAQ,EAAR,CACI,IAAK,KACD,EAAM,GAAO,EAAI,EAAM,EAAM,EAC7B,MACJ,IAAK,OACD,EAAM,GAAO,EAAM,GAAK,EAAM,EAC9B,MACJ,IAAK,QACD,EAAM,EACN,MACJ,IAAK,MACD,EAAM,EACN,KACR,CACA,KAAK,OAAO,CAAG,CACnB,EACA,EAAM,kBAAoB,UAAY,CAClC,OAAO,KAAK,YAAc,KAAK,SAAS,SAAW,KAAK,UAC5D,EACA,EAAM,WAAa,EACnB,EAAM,YAAc,EACb,CACX,CACA,OAAO,CACX,EAAE,EACF,EAAI,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAi1E,qBAAsB,EAAK,EACh4E,EAAQ,SAAW,EACnB,EAAQ,kBAAoB,EAC5B,EAAQ,UAAY,CAEpB,CAAC,EAED,IAAI,OAAO,uCAAuC,CAAC,UAAU,UAAU,QAAQ,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAgDrH,EAAQ,sBA/CmC,UAAY,CACnD,SAAS,EAAsB,EAAQ,CACnC,KAAK,OAAS,EACd,KAAK,gBAAkB,SAAS,cAAc,KAAK,EACnD,KAAK,gBAAgB,UAAU,IAAI,uBAAuB,EAC1D,KAAK,OAAO,UAAU,YAAY,KAAK,eAAe,CAC1D,CAuCA,MAtCA,GAAsB,UAAU,uBAAyB,SAAU,EAAS,CAgBxE,IAfI,CAAC,KAAK,OAAS,KAAK,OAAO,WAAiE,KAAK,OAAO,UAAW,QACnH,KAAK,MAA4D,KAAK,OAAO,UAAW,MACxF,KAAK,MAAM,SAAS,GAAG,cAAe,UAAY,CAC9C,IAAI,EAAM,KAAK,MAAM,OAAO,EACxB,EAAI,KAAK,MAAM,SAAS,WACxB,EAAW,EAAE,QAAQ,WAAW,EAAM,EAAE,OAAO,UACnD,GAAI,EAAU,CAEV,IAAK,IADD,EAAW,eACN,EAAY,EAAG,EAAY,KAAK,OAAO,OAAQ,IACpD,GAAY,gCAAuC,KAEvD,EAAS,aAAa,mBAAoB,CAAQ,CACtD,CACJ,EAAE,KAAK,IAAI,CAAC,GAET,KAAK,gBAAgB,YACxB,KAAK,gBAAgB,YAAY,KAAK,gBAAgB,UAAU,EAEpE,KAAK,OAAS,EAAQ,MAAM,YAAY,EACxC,IAAI,EAAc,KAAK,gBAAgB,EACvC,KAAK,gBAAgB,YAAY,CAAW,CAChD,EACA,EAAsB,UAAU,QAAU,UAAY,CAClD,KAAK,gBAAgB,OAAO,CAChC,EACA,EAAsB,UAAU,gBAAkB,UAAY,CAC1D,IAAI,EAAY,SAAS,cAAc,KAAK,EAC5C,EAAU,aAAa,KAAM,yBAAyB,EACtD,IAAK,IAAI,EAAY,EAAG,EAAY,KAAK,OAAO,OAAQ,IAAa,CACjE,IAAI,EAAc,SAAS,cAAc,MAAM,EAC/C,EAAY,aAAa,KAAM,gCAAuC,GAAU,EAChF,IAAI,EAAO,SAAS,eAAe,KAAK,OAAO,EAAU,EACzD,EAAY,YAAY,CAAI,EAC5B,EAAU,YAAY,CAAW,CACrC,CACA,OAAO,CACX,EACO,CACX,EACoD,CAEpD,CAAC,EAED,IAAI,OAAO,0BAA0B,CAAC,UAAU,UAAU,SAAS,eAAe,sCAAsC,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC9J,IAAI,EAAiB,EAAQ,aAAa,CAAC,CAAC,eACxC,EAAwB,EAAQ,uBAAuB,CAAC,CAAC,sBAwD7D,EAAQ,UAvDuB,UAAY,CACvC,SAAS,GAAY,CACjB,KAAK,OAAS,IAClB,CAkDA,MAjDA,GAAU,UAAU,KAAO,SAAU,EAAQ,EAAY,EAAQ,CAO7D,GANA,IAAmB,GACf,GAAU,KAAK,QAAU,KAAK,SAAW,IACzC,KAAK,KAAK,EACV,KAAK,OAAS,KACd,KAAK,mBAAqB,MAE1B,CAAC,GAAU,CAAC,EACZ,MAAO,GAEX,AACI,KAAK,qBAAqB,IAAI,EAAsB,CAAM,EAE9D,IAAI,EAAc,EAAW,QAAU,EAAe,yBAAyB,EAAQ,EAAW,OAAO,EAAI,EAAW,MAaxH,OAZI,EAAW,mBAAqB,CAAC,GAAe,CAAC,EAAY,WAAW,CAAM,EACvE,IAEX,KAAK,OAAS,EACd,KAAK,mBAAmB,uBAAuB,CAAW,EAC1D,EAAc,EAAY,MAAM,EAAO,MAAM,EACzC,IAAgB,GAChB,EAAO,gBAAgB,EAGvB,EAAO,aAAa,CAAW,EAE5B,GACX,EACA,EAAU,UAAU,OAAS,UAAY,CAIrC,OAHK,KAAK,OAGH,CAAC,CAAC,KAAK,OAAO,SAAS,WAFnB,EAGf,EACA,EAAU,UAAU,KAAO,UAAY,CAKnC,OAJK,KAAK,QAGV,KAAK,OAAO,gBAAgB,EACrB,IAHI,EAIf,EACA,EAAU,UAAU,QAAU,UAAY,CACtC,KAAK,KAAK,EACV,KAAK,OAAS,KACd,AAEI,KAAK,sBADL,KAAK,mBAAmB,QAAQ,EACN,KAElC,EACO,CACX,EAC4B,CAE5B,CAAC,EAED,IAAI,OAAO,wBAAwB,CAAC,UAAU,UAAU,QAAQ,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACtG,EAAQ,WAAa,SAAU,EAAO,EAAI,EAAU,CAChD,IAAI,EAAY,EACZ,EAAW,EAAM,OACjB,IAAa,GACb,EAAS,EACb,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,IAC1B,EAAG,EAAM,GAAI,SAAU,EAAQ,EAAK,CAChC,IACI,IAAc,GACd,EAAS,EAAQ,CAAG,CAC5B,CAAC,CAET,EACA,IAAI,EAAW,6CACf,EAAQ,4BAA8B,SAAU,EAAM,EAAK,EAAO,CAC9D,IAAiB,EAEjB,IAAK,IADD,EAAM,CAAC,EACF,EAAI,EAAM,EAAG,GAAK,GACnB,EAAM,KAAK,EAAK,EAAE,EADI,IAEtB,EAAI,KAAK,EAAK,EAAE,EAIxB,OAAO,EAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,CAChC,EACA,EAAQ,4BAA8B,SAAU,EAAM,EAAK,EAAO,CAC9D,IAAiB,EAEjB,IAAK,IADD,EAAM,CAAC,EACF,EAAI,EAAK,EAAI,EAAK,QACnB,EAAM,KAAK,EAAK,EAAE,EADS,IAE3B,EAAI,KAAK,EAAK,EAAE,EAIxB,OAAO,CACX,EACA,EAAQ,oBAAsB,SAAU,EAAQ,CAC5C,IAAI,EAAM,EAAO,kBAAkB,EAC/B,EAAO,EAAO,QAAQ,QAAQ,EAAI,GAAG,EACrC,EASJ,OARA,EAAO,WAAW,QAAQ,SAAU,EAAW,CACvC,EAAU,mBACV,EAAU,kBAAkB,QAAQ,SAAU,EAAiB,CACvD,CAAC,GAAU,IACX,EAAS,KAAK,4BAA4B,EAAM,EAAI,OAAQ,CAAe,EACnF,EAAE,KAAK,IAAI,CAAC,CAEpB,EAAE,KAAK,IAAI,CAAC,EACL,GAAU,KAAK,4BAA4B,EAAM,EAAI,MAAM,CACtE,EACA,EAAQ,oBAAsB,SAAU,EAAQ,EAAc,CAC1D,IAAI,EAAe,GACb,EAAO,QAAQ,sBAAsB,EAE3C,OAAO,EAAO,WAAW,KAAK,SAAU,EAAW,CAC/C,GAAI,EAAU,mBAAqB,MAAM,QAAQ,EAAU,iBAAiB,EACxE,OAAO,EAAU,kBAAkB,SAAS,CAAY,CAEhE,CAAC,CACL,CAEA,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,4BAA4B,yBAAyB,0BAA0B,yBAAyB,wBAAwB,eAAe,cAAc,eAAe,aAAa,gBAAgB,gBAAgB,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC3T,IAAI,EAAc,EAAQ,yBAAyB,CAAC,CAAC,YACjD,EAAW,EAAQ,sBAAsB,CAAC,CAAC,SAC3C,EAAY,EAAQ,uBAAuB,CAAC,CAAC,UAC7C,EAAY,EAAQ,sBAAsB,CAAC,CAAC,UAC5C,EAAO,EAAQ,qBAAqB,EACpC,EAAO,EAAQ,YAAY,EAC3B,EAAM,EAAQ,WAAW,EACzB,EAAiB,EAAQ,YAAY,CAAC,CAAC,eACvC,EAAS,EAAQ,UAAU,EAC3B,EAAQ,EAAQ,aAAa,EAC7B,EAAsB,EAAQ,cAAc,CAAC,CAAC,oBAC9C,EAAmB,SAAU,EAAG,EAAQ,CACxC,EAAO,WAAa,EAAO,UAAU,QAAQ,CACjD,EACI,EAA8B,UAAY,CAC1C,SAAS,GAAe,CACpB,KAAK,WAAa,GAClB,KAAK,WAAa,GAClB,KAAK,UAAY,GACjB,KAAK,WAAa,GAClB,KAAK,cAAgB,GACrB,KAAK,gBAAkB,IAAI,EAC3B,KAAK,gBAAgB,SAAS,KAAK,QAAQ,EAC3C,KAAK,WAAa,KAClB,KAAK,iBAAmB,GACxB,KAAK,QAAU,IAAI,IACnB,KAAK,iBAAmB,GACxB,KAAK,qBAAuB,IAC5B,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,YAAc,EAAK,YAAY,UAAY,CAC5C,KAAK,kBAAkB,EAAI,CAC/B,EAAE,KAAK,IAAI,CAAC,EACZ,KAAK,aAAe,EAAK,YAAY,KAAK,iBAAiB,KAAK,IAAI,EAAG,EAAE,EACzE,KAAK,WAAa,EAAK,YAAY,KAAK,qBAAqB,KAAK,IAAI,EAAG,EAAE,EAC3E,KAAK,qBAAuB,EAAK,YAAY,UAAY,CACrD,KAAK,gBAAkB,EAC3B,EAAE,KAAK,IAAI,EAAG,KAAK,oBAAoB,EACvC,KAAK,gBAAkB,EAAK,YAAqC,UAAY,CACzE,IAAI,EAAkB,KAAK,oBAAsB,KAAK,mBAAmB,gBACrE,KAAK,WAAc,KAAK,OAAS,KAAK,MAAM,QAAW,CAAC,GAAmB,KAAK,OAAO,WAAW,SAAW,IAEjH,KAAK,YAAc,IAAI,EAAa,EAAa,qBAAqB,EACtE,KAAK,UAAU,KAAK,OAAQ,EAAgB,OAAQ,EAAK,EACzD,KAAK,MAAM,SAAS,SAAS,cAAe,EAAI,EACpD,EAAE,KAAK,IAAI,EAAG,KAAK,oBAAoB,CAC3C,CA6gBA,OA5gBA,OAAO,eAAe,EAAc,wBAAyB,CACzD,IAAK,UAAY,CACb,MAAO,CAAC,CACA,QAAS,EAAO,IAAI,uBAAwB,YAAY,EACxD,MAAO,EACX,CAAC,CACT,EACA,WAAY,GACZ,aAAc,EAClB,CAAC,EACD,EAAa,UAAU,MAAQ,UAAY,CAavC,MAZA,MAAK,MAAQ,IAAI,EAAS,KAAK,YAAc,SAAS,MAAQ,SAAS,eAAe,EACtF,KAAK,MAAM,GAAG,QAAS,SAAU,EAAG,CAChC,KAAK,YAAY,EACjB,EAAE,KAAK,CACX,EAAE,KAAK,IAAI,CAAC,EACZ,KAAK,MAAM,MAAQ,KAAK,OAAO,MAAM,KAAK,KAAK,MAAM,EACrD,KAAK,MAAM,GAAG,OAAQ,KAAK,aAAa,KAAK,IAAI,CAAC,EAClD,KAAK,MAAM,GAAG,OAAQ,KAAK,aAAa,KAAK,IAAI,CAAC,EAClD,KAAK,MAAM,GAAG,SAAU,KAAK,eAAe,KAAK,IAAI,CAAC,EACtD,EAAM,YAAY,KAAK,MAAM,UAAW,WAAY,KAAK,iBAAiB,KAAK,IAAI,CAAC,EACpF,KAAK,MAAM,GAAG,oBAAqB,KAAK,aAAa,KAAK,KAAM,IAAI,CAAC,EACrE,KAAK,MAAM,SAAS,GAAG,cAAe,KAAK,eAAe,KAAK,IAAI,CAAC,EAC7D,KAAK,KAChB,EACA,EAAa,UAAU,YAAc,UAAY,CACzC,MAAC,KAAK,eAAiB,KAAK,gBAGhC,MADA,MAAK,eAAiB,IAAI,EACnB,KAAK,cAChB,EACA,EAAa,UAAU,SAAW,UAAY,CAC1C,OAAO,KAAK,OAAS,KAAK,MAAM,CACpC,EACA,EAAa,UAAU,aAAe,UAAY,CAC1C,KAAK,gBACL,KAAK,eAAe,KAAK,EAE7B,KAAK,eAAe,EACpB,KAAK,qBAAqB,OAAO,EACjC,KAAK,WAAW,OAAO,EACvB,KAAK,gBAAkB,EAC3B,EACA,EAAa,UAAU,MAAQ,SAAU,EAAY,CAC7C,CAAC,KAAK,QAAQ,IAAI,CAAU,GAAK,GAAc,EAAW,WAAa,EAAW,UAAU,QAAU,OAAO,EAAW,UAAU,QAAW,aAC7I,EAAW,UAAU,OAAO,KAAK,OAAQ,CAAU,EACnD,KAAK,QAAQ,IAAI,CAAU,EAEnC,EACA,EAAa,UAAU,eAAiB,SAAU,EAAM,CACpD,GAAI,KAAK,gBAAkB,KAAK,cAAe,CAC3C,IAAI,EAAa,EAAO,KAAO,KAAK,MAAM,QAAQ,KAAK,MAAM,OAAO,CAAC,EAErE,GADA,KAAK,iBAAiB,CAAU,EAC5B,KAAK,MAAM,aAAe,KAAK,iBAAkB,CACjD,KAAK,aAAa,KAAK,KAAM,IAAI,EACjC,MACJ,CACA,KAAK,WAAW,SAAS,EACzB,KAAK,aAAa,SAAS,CAC/B,MAEI,KAAK,WAAW,KAAK,KAAM,IAAI,EAC/B,KAAK,aAAa,KAAK,KAAM,IAAI,CAEzC,EACA,EAAa,UAAU,iBAAmB,SAAU,EAAY,CAC5D,IAAI,EAAM,KAAK,KAAK,IAChB,EAAS,KAAK,KAAK,OACnB,EAAe,KAAK,OAAO,kBAAkB,CAAC,CAAC,OAC/C,EAAS,KAAK,OAAO,QAAQ,QAAQ,CAAG,CAAC,CAAC,MAAM,EAAQ,CAAY,EACnE,KAAK,eAAe,KAAK,KAAK,OAAQ,EAAY,CAAM,EAIzD,KAAK,MAAM,CAAU,EAHrB,KAAK,eAAe,KAAK,CAKjC,EACA,EAAa,UAAU,eAAiB,UAAY,CAChD,IAAI,EAAgB,KAAK,gBAAkB,KAAK,cAChD,GAAI,KAAK,aAAe,KAAK,YAAY,UAAY,KAAK,YAAY,SAAS,OAAS,EACpF,IAAK,IAAI,EAAI,KAAK,MAAM,mBAAmB,EAAG,GAAK,KAAK,MAAM,kBAAkB,EAAG,IAAK,CACpF,IAAI,EAAa,KAAK,MAAM,QAAQ,CAAC,EACjC,IAAe,CAAC,GAAiB,EAAW,oBAC5C,KAAK,MAAM,CAAU,CAE7B,CAER,EACA,EAAa,UAAU,aAAe,SAAU,EAAM,CAClD,KAAK,eAAe,CAAI,EACxB,KAAK,gBAAkB,GACnB,KAAK,sBAAwB,GAC7B,KAAK,qBAAqB,SAAS,KAAK,oBAAoB,CACpE,EACA,EAAa,UAAU,qBAAuB,UAAY,CAClD,UAAK,WAAa,CAAC,KAAK,QAG5B,CADA,OAAO,iBAAiB,SAAU,KAAK,eAAgB,CAAE,QAAS,EAAK,CAAC,EACxE,OAAO,iBAAiB,QAAS,KAAK,kBAAkB,EAGxD,IAFA,IAAI,EAAK,KAAK,OAAO,UAAU,WAC3B,EAAW,CAAC,EACT,GACH,EAAS,KAAK,CAAE,EAChB,EAAG,iBAAiB,SAAU,KAAK,eAAgB,CAAE,QAAS,EAAK,CAAC,EACpE,EAAK,EAAG,WAEZ,KAAK,UAAY,CARuC,CAS5D,EACA,EAAa,UAAU,uBAAyB,UAAY,CACxD,IAAI,EAAQ,KACZ,OAAO,oBAAoB,SAAU,KAAK,eAAgB,CAAE,QAAS,EAAK,CAAC,EAC3E,OAAO,oBAAoB,QAAS,KAAK,kBAAkB,EAC3D,KAAK,WAAa,KAAK,UAAU,QAAQ,SAAU,EAAI,CACnD,EAAG,oBAAoB,SAAU,EAAM,eAAgB,CAAE,QAAS,EAAK,CAAC,CAC5E,CAAC,EACD,KAAK,UAAY,IACrB,EACA,EAAa,UAAU,eAAiB,UAAY,CAChD,GAAI,CAAC,KAAK,MAAM,OACZ,OAAO,KAAK,uBAAuB,EACvC,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,CAC1B,EACA,EAAa,UAAU,qBAAuB,UAAY,CACtD,IAAI,EAAS,KAAK,OACd,EAAW,EAAO,SAClB,EAAa,EAAS,YAAY,WAClC,EAAM,EAAS,aAAa,iBAAiB,KAAK,KAAM,EAAI,EAChE,EAAI,MAAQ,KAAK,MAAM,kBAAkB,EACzC,IAAI,EAAO,EAAO,UAAU,sBAAsB,EAClD,EAAI,KAAO,EAAK,IAAM,EAAS,YAAY,OAC3C,EAAI,MAAQ,EAAK,KAAO,EAAO,SAAS,WACxC,EAAI,MAAQ,EAAS,YACrB,IAAI,EAAe,CACf,IAAK,EAAI,IACT,KAAM,EAAI,IACd,EACI,EAAS,YAAc,EAAS,kBAC5B,KAAK,KAAK,MAAQ,EAAS,WAAW,SAAS,MAC/C,EAAa,KAAO,EAAS,iBAAiB,GAAG,cAGzD,IAAI,EAAwB,EAAO,UAAU,sBAAsB,CAAC,CAAC,OAAS,EAC1E,EAAiB,EAAwB,EAAa,IACtD,CAAE,IAAK,EAAuB,KAAM,EAAa,IAAK,EACtD,EACA,KAAK,MAAM,QAAQ,EAAgB,EAAY,QAAQ,GAGvD,KAAK,MAAM,QAAQ,EAAK,EAAY,KAAK,GAG7C,KAAK,MAAM,KAAK,EAAK,CAAU,CACnC,EACA,EAAa,UAAU,UAAY,SAAU,EAAQ,EAAQ,EAAmB,CAC5E,KAAK,gBAAgB,OAAO,EACvB,KAAK,OACN,KAAK,MAAM,EACX,KAAK,eAAiB,CAAC,KAAK,gBAC5B,KAAK,YAAY,EACrB,KAAK,MAAM,WAAa,KAAK,WAC7B,KAAK,MAAM,iBAAiB,KAAK,gBAAgB,EACjD,IAAI,EAAS,KAAK,MAAM,OAAO,EAC3B,EAAuB,KAAK,MAAM,KAAK,GAC3C,KAAK,MAAM,QAAQ,KAAK,YAAY,SAAU,KAAK,YAAY,UAAU,EACrE,KAAK,OAAO,UAAU,gBACtB,KAAK,OAAO,UAAU,eAAe,CACjC,iBAAkB,EAAU,KAAK,MAAM,OAAO,CAAC,EAC/C,OAAQ,KAAK,aACjB,CAAC,EAEL,EAAO,WAAW,mBAAmB,KAAK,eAAe,EACzD,IAAI,EACA,KAAK,kBACL,EAAS,KAAK,MAAM,KAAK,QAAQ,CAAoB,IACrD,CAAC,GAAU,IAAW,MACtB,EAAS,GACb,KAAK,MAAM,OAAO,KAAK,WAAa,EAAS,EAAE,EAC3C,IAAW,GAAU,IAAyB,KAAK,YAAY,SAAS,IACxE,KAAK,eAAe,EACxB,IAAI,EAAgB,KAAK,gBAAkB,KAAK,cAChD,GAAI,IAAW,GAAU,EAAe,CACpC,IAAI,EAAa,KAAK,MAAM,QAAQ,KAAK,MAAM,OAAO,CAAC,EACvD,KAAK,iBAAiB,CAAU,CACpC,CACK,IACD,KAAK,MAAM,SAAS,EAAO,SAAS,CAAC,EACrC,KAAK,MAAM,YAAY,EAAO,YAAY,CAAC,EAC3C,KAAK,qBAAqB,EACtB,KAAK,aACL,KAAK,iBAAiB,GAG9B,KAAK,YAAY,OAAO,EACxB,KAAK,qBAAqB,CAC9B,EACA,EAAa,UAAU,OAAS,UAAY,CACpC,KAAK,SACL,KAAK,OAAO,WAAW,sBAAsB,KAAK,eAAe,EACjE,KAAK,OAAO,IAAI,kBAAmB,KAAK,cAAc,EACtD,KAAK,OAAO,IAAI,OAAQ,KAAK,YAAY,EACzC,KAAK,OAAO,IAAI,YAAa,KAAK,iBAAiB,EACnD,KAAK,OAAO,IAAI,aAAc,KAAK,kBAAkB,GAEzD,KAAK,gBAAgB,OAAO,EAC5B,KAAK,YAAY,OAAO,EACxB,KAAK,eAAe,EAChB,KAAK,oBACL,KAAK,mBAAmB,OAAO,EAE/B,KAAK,OAAS,KAAK,MAAM,QACzB,KAAK,MAAM,KAAK,EAChB,KAAK,OAAS,KAAK,MAAM,UACzB,KAAK,MAAM,SAAS,IAAI,cAAe,KAAK,cAAc,EAE1D,KAAK,MACL,KAAK,KAAK,OAAO,EACrB,KAAK,UAAY,GACjB,KAAK,mBAAqB,KAAK,YAAc,KAAK,KAAO,KACzD,KAAK,uBAAuB,CAChC,EACA,EAAa,UAAU,eAAiB,SAAU,EAAG,CACjD,IAAI,EAAS,KAAK,OAAO,UAAU,MAC/B,EAAO,KAAO,KAAK,KAAK,KAAO,EAAO,OAAS,KAAK,KAAK,SACzD,KAAK,OAAO,EAEZ,KAAK,UACL,KAAK,YAAY,SAAS,EAE1B,KAAK,OAAO,CACpB,EACA,EAAa,UAAU,aAAe,SAAU,EAAG,CAC/C,IAAI,EAAK,SAAS,cACd,EAAO,KAAK,OAAO,UAAU,WAAW,EACxC,EAAc,EAAE,eAAiB,KAAK,aAAe,KAAK,YAAY,SAAS,EAAE,aAAa,EAC9F,EAAY,KAAK,OAAS,KAAK,MAAM,UACrC,GAAM,GAAQ,EAAG,YAAc,GAAa,CAAC,GAC1C,GAAM,KAAK,aAAe,EAAE,eAAiB,GAChD,KAAK,OAAO,CAEpB,EACA,EAAa,UAAU,kBAAoB,SAAU,EAAG,CACpD,KAAK,OAAO,CAChB,EACA,EAAa,UAAU,mBAAqB,SAAU,EAAG,CACjD,KAAK,OAAS,CAAC,KAAK,MAAM,aAC1B,KAAK,OAAO,CACpB,EACA,EAAa,UAAU,iBAAmB,SAAU,EAAG,CAC/C,KAAK,MAAM,QACX,KAAK,qBAAqB,CAClC,EACA,EAAa,UAAU,KAAO,SAAU,EAAO,CAC3C,KAAK,MAAM,KAAK,CAAK,CACzB,EACA,EAAa,UAAU,YAAc,SAAU,EAAM,EAAS,CAG1D,GAFA,AACI,IAAO,KAAK,MAAM,QAAQ,KAAK,MAAM,OAAO,CAAC,EAC7C,CAAC,EACD,MAAO,GACX,GAAI,EAAK,QAAU,GACf,OAAO,KAAK,OAAO,EACvB,IAAI,EAAc,KAAK,YACnB,EAAS,KAAK,sBAAsB,CAAC,CAAC,YAAY,KAAK,OAAQ,EAAM,EAAY,WAAY,CAAO,EAGxG,OAFI,KAAK,aAAe,GACpB,KAAK,OAAO,EACT,CACX,EACA,EAAa,UAAU,UAAY,SAAU,EAAQ,EAAS,CACtD,KAAK,QACL,KAAK,OAAO,EAChB,KAAK,UAAY,GACjB,KAAK,OAAS,EACV,EAAO,WAAa,OAChB,EAAO,WACP,EAAO,UAAU,OAAO,EAC5B,EAAO,UAAY,MAEvB,EAAO,GAAG,kBAAmB,KAAK,cAAc,EAChD,EAAO,GAAG,OAAQ,KAAK,YAAY,EACnC,EAAO,GAAG,YAAa,KAAK,iBAAiB,EAC7C,EAAO,GAAG,aAAc,KAAK,kBAAkB,EAC/C,KAAK,kBAAkB,GAAO,CAAO,CACzC,EACA,EAAa,UAAU,sBAAwB,SAAU,EAAiB,CAGtE,MAFA,CACI,KAAK,qBAAqB,IAAI,EAAmB,CAAe,EAC7D,KAAK,kBAChB,EACA,EAAa,UAAU,kBAAoB,SAAU,EAAQ,EAAU,CACnE,OAAO,KAAK,sBAAsB,CAAC,CAAC,kBAAkB,EAAQ,CAAQ,CAC1E,EACA,EAAa,UAAU,kBAAoB,SAAU,EAAmB,EAAS,CAC7E,GAAI,GAAqB,KAAK,MAAQ,KAAK,YAAa,CACpD,IAAI,EAAM,KAAK,OAAO,kBAAkB,EACpC,EAAS,KAAK,OAAO,QAAQ,aAAa,CAAE,MAAO,KAAK,KAAM,IAAK,CAAI,CAAC,EAC5E,GAAI,GAAU,KAAK,YAAY,WAC3B,OAIJ,GAHA,KAAK,YAAY,UAAU,CAAM,EAC7B,CAAC,KAAK,YAAY,SAAS,QAE3B,KAAK,YAAY,SAAS,QAAU,GACjC,KAAK,YAAY,SAAS,EAAE,CAAC,OAAS,GACtC,CAAC,KAAK,YAAY,SAAS,EAAE,CAAC,QACjC,OAAO,KAAK,OAAO,EACvB,KAAK,UAAU,KAAK,OAAQ,EAAQ,CAAiB,EACrD,MACJ,CACA,GAAI,GAAW,EAAQ,QAAS,CAC5B,IAAI,EAAM,KAAK,OAAO,kBAAkB,CAAC,CAAC,MAK1C,MAJA,MAAK,KAAO,KAAK,OAAO,QAAQ,IAAI,aAAa,EAAI,IAAK,EAAI,MAAM,EACpE,KAAK,KAAK,aAAe,GACzB,KAAK,YAAc,IAAI,EAAa,EAAQ,OAAO,EACnD,KAAK,sBAAsB,CAAC,CAAC,YAAc,KAAK,YACzC,KAAK,UAAU,KAAK,OAAQ,GAAI,CAAiB,CAC5D,CACA,IAAI,EAAU,KAAK,OAAO,WAAW,EACjC,EAAM,KAAK,OAAO,kBAAkB,EACpC,EAAS,EAAK,oBAAoB,KAAK,MAAM,EACjD,KAAK,KAAO,EAAQ,IAAI,aAAa,EAAI,IAAK,EAAI,OAAS,EAAO,MAAM,EACxE,KAAK,KAAK,aAAe,GACzB,IAAI,EAAoB,CACpB,WAAY,KAAK,WACjB,cAAe,KAAK,aACxB,EACA,KAAK,sBAAsB,CACf,SACH,KACT,CAAC,CAAC,CAAC,mBAAmB,KAAK,OAAQ,EACnC,SAAU,EAAK,EAAa,EAAU,CAClC,IAAI,EAAW,EAAY,SACvB,EAAS,EAAK,oBAAoB,KAAK,MAAM,EAEjD,GADA,KAAK,gBAAgB,OAAO,EACxB,EAAU,CACV,GAAI,CAAC,EAAS,OAAQ,CAClB,IAAI,EAAe,CAAC,KAAK,WAAa,KAAK,aAG3C,GAFI,OAAO,GAAgB,aACvB,EAAe,KAAK,aAAa,CAAM,GACvC,EAAc,CACd,IAAI,EAAsB,CAAC,CACnB,QAAS,EACT,MAAO,EACX,CACJ,EACA,KAAK,YAAc,IAAI,EAAa,CAAmB,EACvD,KAAK,UAAU,KAAK,OAAQ,EAAQ,CAAiB,EACrD,KAAK,MAAM,SAAS,SAAS,cAAe,EAAK,EACjD,KAAK,MAAM,SAAS,SAAS,oBAAqB,EAAI,EACtD,MACJ,CACA,OAAO,KAAK,OAAO,CACvB,CACA,GAAI,EAAS,QAAU,GAAK,EAAS,EAAE,CAAC,OAAS,GAC1C,CAAC,EAAS,EAAE,CAAC,QAChB,OAAO,KAAK,OAAO,EACvB,GAAI,KAAK,YAAc,CAAC,KAAK,WAAa,EAAS,QAAU,EACzD,OAAO,KAAK,YAAY,EAAS,EAAE,CAC3C,CACA,KAAK,YAAc,CAAC,GAAY,KAAK,iBACjC,IAAI,EAAa,EAAa,sBAAsB,OAAO,CAAQ,EAAG,EAAY,UAAU,EAC5F,EACJ,KAAK,UAAU,KAAK,OAAQ,EAAQ,CAAiB,EACrD,KAAK,MAAM,SAAS,SAAS,oBAAqB,EAAK,EACvD,KAAK,MAAM,SAAS,SAAS,cAAe,CAAC,CAAQ,CACzD,EAAE,KAAK,IAAI,CAAC,EACR,KAAK,kBAAoB,CAAC,KAAK,WAAa,EAAE,KAAK,OAAS,KAAK,MAAM,SACvE,KAAK,gBAAgB,MAAM,KAAK,qBAAuB,CAAC,CAEhE,EACA,EAAa,UAAU,kBAAoB,UAAY,CACnD,KAAK,OAAO,cAAc,kBAAkB,CAChD,EACA,EAAa,UAAU,iBAAmB,UAAY,CAClD,IAAI,EAAQ,KAAK,MACb,EAAM,KAAK,aAAe,KAAK,YAAY,SAC3C,EAAW,IAAQ,EAAI,EAAM,cAAc,IAAM,EAAI,EAAM,OAAO,IAClE,EAAM,KACV,GAAI,CAAC,GAAY,CAAC,KAAK,QAAU,CAAC,KAAK,MAAM,OACzC,OAAO,KAAK,eAAe,EAE/B,IAAK,IADD,EAAmB,KAAK,OAAO,WAAW,OACrC,EAAI,EAAG,EAAI,EAAkB,IAAK,CACvC,IAAI,EAAY,KAAK,OAAO,WAAW,GACvC,GAAI,EAAU,eAAiB,EAAS,cAAgB,EAAU,GAAI,CAClE,EAAM,EAAU,cAAc,CAAQ,EACtC,KACJ,CACJ,CAKA,GAJI,CAAC,GAAO,OAAO,GAAY,WAC3B,EAAM,GACN,OAAO,GAAO,WACd,EAAM,CAAE,QAAS,CAAI,GACrB,CAAC,GAAO,EAAE,EAAI,SAAW,EAAI,SAC7B,OAAO,KAAK,eAAe,EAC/B,KAAK,eAAe,CAAG,CAC3B,EACA,EAAa,UAAU,eAAiB,SAAU,EAAM,CAC/C,KAAK,cACN,KAAK,YAAc,EAAI,cAAc,KAAK,EAC1C,KAAK,YAAY,MAAM,OAAS,IAChC,KAAK,YAAY,MAAM,cAAgB,OACvC,KAAK,YAAY,MAAM,mBAAqB,UAC5C,KAAK,YAAY,SAAW,GAC5B,KAAK,YAAY,OAAS,KAAK,aAAa,KAAK,IAAI,EACrD,KAAK,YAAY,QAAU,KAAK,eAAe,KAAK,IAAI,EACxD,KAAK,YAAY,GAAK,cACtB,KAAK,YAAY,aAAa,OAAQ,SAAS,EAC/C,KAAK,YAAY,iBAAiB,QAAS,CAAmB,GAElE,IAAI,EAAQ,KAAK,OAAO,SAAS,MACjC,KAAK,YAAY,UAAY,gCACxB,EAAM,OAAS,YAAc,KAAO,EAAM,UAAY,IAC3D,IAAI,EAAc,KAAK,YACnB,EAAK,QACL,EAAY,UAAY,EAAK,QAExB,EAAK,UACV,EAAY,YAAc,EAAK,SAE9B,EAAY,YACb,KAAK,MAAM,UAAU,YAAY,KAAK,WAAW,EACrD,IAAI,EAAQ,KAAK,MACb,EAAO,EAAM,UAAU,sBAAsB,EAC7C,EAAc,IACd,EAAe,IACf,EAAgB,EAAM,SAAS,UAAU,OAAS,GAClD,EAAW,EAAK,KAChB,EAAY,OAAO,WAAa,EAAK,MAAQ,EAC7C,EAAU,EAAM,UAAY,OAAO,YAAc,EAAgB,EAAK,OAAS,EAAK,IACpF,EAAS,CACT,KAAK,IAAI,EAAY,EAAa,CAAC,EACnC,KAAK,IAAI,EAAW,EAAa,CAAC,EAClC,KAAK,IAAI,EAAU,EAAc,CAAC,EAAI,EAC1C,EACI,EAAM,KAAK,IAAI,MAAM,KAAM,CAAM,EACjC,EAAe,EAAY,MAC/B,EAAa,QAAU,QACnB,GAAO,EAAO,IAAM,EAAO,IAAM,GACjC,EAAa,KAAQ,EAAK,MAAQ,EAAK,KACvC,EAAa,MAAQ,GACrB,EAAa,SAAW,EAAc,EAAM,KAC5C,EAAa,IAAM,EAAK,IAAM,KAC9B,EAAa,OAAS,GACtB,EAAa,UAAY,KAAK,IAAI,OAAO,YAAc,EAAgB,EAAK,IAAK,CAAY,EAAI,MAE5F,GAAO,EAAO,IAAM,EAAO,IAAM,GACtC,EAAa,MAAQ,OAAO,WAAa,EAAK,KAAO,KACrD,EAAa,KAAO,GACpB,EAAa,SAAW,EAAc,EAAM,KAC5C,EAAa,IAAM,EAAK,IAAM,KAC9B,EAAa,OAAS,GACtB,EAAa,UAAY,KAAK,IAAI,OAAO,YAAc,EAAgB,EAAK,IAAK,CAAY,EAAI,MAE5F,GAAO,EAAO,KACnB,EAAa,KAAO,EAAK,KAAO,KAChC,EAAa,MAAQ,GACrB,EAAa,SAAW,KAAK,IAAI,EAAa,OAAO,WAAa,EAAK,IAAI,EAAI,KAC3E,EAAM,WACN,EAAa,IAAM,EAAK,OAAS,KACjC,EAAa,OAAS,GACtB,EAAa,UAAY,KAAK,IAAI,OAAO,YAAc,EAAgB,EAAK,OAAQ,CAAY,EAAI,OAGpG,EAAa,IAAM,GACnB,EAAa,OAAU,OAAO,YAAc,EAAK,IAAO,KACxD,EAAa,UAAY,KAAK,IAAI,EAAK,IAAK,CAAY,EAAI,OAGpE,EAAI,gBAAgB,CAAW,CACnC,EACA,EAAa,UAAU,eAAiB,UAAY,CAChD,QAAK,aAAa,OAAO,EACpB,KAAK,YAEV,KAAI,EAAK,KAAK,YACV,CAAC,KAAK,OAAO,UAAU,GAAK,SAAS,eAAiB,GACtD,KAAK,OAAO,MAAM,EACtB,KAAK,YAAc,KACf,EAAG,YACH,EAAG,WAAW,YAAY,CAAE,CALlB,CAMlB,EACA,EAAa,UAAU,eAAiB,SAAU,EAAG,CAEjD,IADA,IAAI,EAAI,EAAE,OACH,GAAK,GAAK,KAAK,aAAa,CAC/B,GAAI,EAAE,UAAY,KAAO,EAAE,KAAM,CAC7B,EAAE,IAAM,aACR,EAAE,OAAS,SACX,KACJ,CACA,EAAI,EAAE,UACV,CACJ,EACA,EAAa,UAAU,QAAU,UAAY,CAEzC,GADA,KAAK,OAAO,EACR,KAAK,MAAO,CACZ,KAAK,MAAM,QAAQ,EACnB,IAAI,EAAK,KAAK,MAAM,UAChB,GAAM,EAAG,YACT,EAAG,WAAW,YAAY,CAAE,CACpC,CACI,KAAK,QAAU,KAAK,OAAO,WAAa,OACxC,KAAK,OAAO,IAAI,UAAW,CAAgB,EAC3C,KAAK,OAAO,UAAY,MAE5B,KAAK,eAAiB,KAAK,MAAQ,KAAK,OAAS,IACrD,EACA,EAAa,IAAM,SAAU,EAAQ,CAiBjC,OAhBI,EAAO,qBAAqB,EACrB,EAAO,WAElB,AAEI,EAAO,aADP,EAAO,UAAU,QAAQ,EACN,MAEnB,EAAO,IAAI,cAAc,GACzB,AACI,EAAa,kBAAqB,IAAI,EAC1C,EAAO,UAAY,EAAa,kBAGhC,EAAO,UAAY,IAAI,EACvB,EAAO,KAAK,UAAW,CAAgB,GAEpC,EAAO,UAClB,EACO,CACX,EAAE,EACF,EAAa,UAAU,SAAW,CAC9B,GAAM,SAAU,EAAQ,CAAE,EAAO,UAAU,KAAK,IAAI,CAAG,EACvD,KAAQ,SAAU,EAAQ,CAAE,EAAO,UAAU,KAAK,MAAM,CAAG,EAC3D,oBAAqB,SAAU,EAAQ,CAAE,EAAO,UAAU,KAAK,OAAO,CAAG,EACzE,qBAAsB,SAAU,EAAQ,CAAE,EAAO,UAAU,KAAK,KAAK,CAAG,EACxE,IAAO,SAAU,EAAQ,CAAE,EAAO,UAAU,OAAO,CAAG,EACtD,OAAU,SAAU,EAAQ,CAAE,OAAO,EAAO,UAAU,YAAY,CAAG,EACrE,eAAgB,SAAU,EAAQ,CAAE,EAAO,UAAU,YAAY,KAAM,CAAE,aAAc,EAAK,CAAC,CAAG,EAChG,IAAO,SAAU,EAAQ,CACrB,IAAI,EAAS,EAAO,UAAU,YAAY,EAC1C,GAAI,CAAC,GAAU,CAAC,EAAO,eACnB,EAAO,UAAU,KAAK,MAAM,OAE5B,OAAO,CACf,EACA,UAAa,SAAU,EAAQ,CAC3B,EAAO,YAAY,WAAW,EAE1B,CADS,EAAK,oBAAoB,CAC5B,GAAK,EAAO,WAClB,EAAO,UAAU,OAAO,CAChC,EACA,OAAU,SAAU,EAAQ,CAAE,EAAO,UAAU,MAAM,WAAW,CAAG,EACnE,SAAY,SAAU,EAAQ,CAAE,EAAO,UAAU,MAAM,aAAa,CAAG,CAC3E,EACA,EAAa,aAAe,CACxB,KAAM,oBACN,KAAM,SAAU,EAAQ,EAAS,CAC7B,IAAI,EAAY,EAAa,IAAI,CAAM,EACvC,EAAU,WAAa,GACvB,EAAU,WAAa,GACvB,EAAU,UAAY,GACtB,EAAU,UAAU,EAAQ,CAAO,EACnC,EAAU,kBAAkB,CAChC,EACA,QAAS,uCACb,EACA,IAAI,EAAoC,UAAY,CAChD,SAAS,EAAmB,EAAiB,CACzC,KAAK,gBAAkB,EACvB,KAAK,OAAS,EAClB,CAiIA,MAhIA,GAAmB,UAAU,cAAgB,SAAU,EAAQ,EAAO,EAAS,CAI3E,MAHI,CAAC,KAAK,aAAe,CAAC,KAAK,YAAY,SAChC,GAEJ,KAAK,YAAY,EAAQ,KAAK,YAAY,SAAS,GAAQ,CAAO,CAC7E,EACA,EAAmB,UAAU,YAAc,SAAU,EAAQ,EAAM,EAAS,CACxE,GAAI,CAAC,EACD,MAAO,GAEX,GADA,EAAO,eAAe,CAAE,QAAS,CAAE,KAAM,aAAc,CAAE,CAAC,EACtD,EAAK,WAAa,EAAK,UAAU,YACjC,EAAK,UAAU,YAAY,EAAQ,CAAI,MAEtC,CACD,GAAI,CAAC,KAAK,YACN,MAAO,GACX,IAAI,EAAgB,KAAK,YAAY,WAAW,OAC5C,EAAe,EAMnB,GALI,EAAK,OAAS,EAAK,MAAM,MAAM,MAAQ,EAAK,MAAM,IAAI,MACtD,GAAiB,KAAK,gBAAgB,OAAO,OAC7C,GAAiB,KAAK,gBAAgB,IAAI,OAAS,EAAK,MAAM,MAAM,OACpE,GAAgB,EAAK,MAAM,IAAI,OAAS,KAAK,gBAAgB,IAAI,QAEjE,GAAiB,EAQjB,IAAK,IAPD,EACA,EAAO,UAAU,aACR,EAAO,UAAU,aAAa,EAG9B,CAAC,EAAO,kBAAkB,CAAC,EAE/B,EAAI,EAAG,EAAO,EAAQ,EAAO,GAAI,IACtC,EAAM,MAAM,QAAU,EACtB,EAAM,IAAI,QAAU,EACpB,EAAO,QAAQ,OAAO,CAAK,EAG/B,EAAK,QACL,EAAe,cAAc,EAAQ,EAAK,OAAO,EAGjD,KAAK,cAAc,EAAQ,CAAI,EAE/B,EAAK,WAAa,EAAK,UAAU,UAAY,OAAO,EAAK,UAAU,UAAY,YAC/E,EAAK,UAAU,SAAS,EAAQ,CAAI,EAEpC,EAAK,SAAW,EAAK,UAAY,qBACjC,EAAO,YAAY,EAAK,OAAO,CAEvC,CAEA,OADA,EAAO,aAAa,EACb,EACX,EACA,EAAmB,UAAU,cAAgB,SAAU,EAAQ,EAAM,CACjE,IAAI,EAAO,EAAK,OAAS,EACzB,EAAO,YAAY,eAAgB,CAAI,CAC3C,EACA,EAAmB,UAAU,kBAAoB,SAAU,EAAQ,EAAU,CACzE,IAAI,EAAU,EAAO,WAAW,EAC5B,EAAM,EAAO,kBAAkB,EAC/B,EAAS,EAAK,oBAAoB,CAAM,EACxC,EAAU,CAAC,EACf,KAAK,WAAa,EAAO,WACzB,IAAI,EAAQ,EAAO,WAAW,OAgB9B,OAfA,EAAO,WAAW,QAAQ,SAAU,EAAW,EAAG,CAC9C,EAAU,eAAe,EAAQ,EAAS,EAAK,EAAQ,SAAU,EAAK,EAAS,CACvE,EAAU,oBACV,EAAU,EAAQ,IAAI,SAAU,EAAQ,CACpC,OAAO,OAAO,OAAO,EAAQ,CAAE,kBAAmB,EAAU,iBAAkB,CAAC,CACnF,CAAC,GACD,CAAC,GAAO,IACR,EAAU,EAAQ,OAAO,CAAO,GACpC,EAAS,KAAM,CACX,OAAQ,EAAK,oBAAoB,CAAM,EAC9B,UACT,SAAW,EAAE,IAAU,CAC3B,CAAC,CACL,CAAC,CACL,CAAC,EACM,EACX,EACA,EAAmB,UAAU,mBAAqB,SAAU,EAAQ,EAAS,EAAU,CACnF,IAAI,EAAiB,SAAU,EAAS,CACpC,IAAI,EAAS,EAAQ,OACjB,EAAU,EAAQ,QACtB,KAAK,YAAc,IAAI,EAAa,CAAO,EACvC,EAAQ,aACR,KAAK,YAAY,WAAa,IAC9B,EAAQ,gBACR,KAAK,YAAY,cAAgB,IACrC,KAAK,YAAY,UAAU,CAAM,GAC7B,EAAQ,UAAY,KAAK,YAAY,SAAS,SAC9C,EAAS,KAAM,KAAK,YAAa,EAAQ,QAAQ,CACzD,EAAE,KAAK,IAAI,EACP,EAAc,GACd,EAAmB,KAmBvB,GAlBA,KAAK,kBAAkB,EAAQ,SAAU,EAAK,EAAS,CAC9C,QAAK,SAGN,IACA,EAAS,EAAK,CAAC,EAAG,EAAI,EACtB,KAAK,OAAO,GAEH,EAAQ,OACV,QAAQ,EAAQ,MAAM,IAAM,GAEvC,IAAI,EAAa,CACb,EAAmB,EACnB,MACJ,CACA,EAAe,CAAO,CADtB,CAEJ,EAAE,KAAK,IAAI,CAAC,EACZ,EAAc,GACV,EAAkB,CAClB,IAAI,EAAU,EACd,EAAmB,KACnB,EAAe,CAAO,CAC1B,CACJ,EACA,EAAmB,UAAU,OAAS,UAAY,CAC9C,KAAK,OAAS,GACd,KAAK,YAAc,KAAK,WAAW,QAAQ,SAAU,EAAW,CACxD,OAAO,EAAU,QAAW,YAC5B,EAAU,OAAO,CAEzB,CAAC,CACL,EACO,CACX,EAAE,EACE,EAA8B,UAAY,CAC1C,SAAS,EAAa,EAAO,EAAY,CACrC,KAAK,IAAM,EACX,KAAK,SAAW,EAChB,KAAK,WAAa,GAAc,GAChC,KAAK,WAAa,GAClB,KAAK,cAAgB,EACzB,CAyEA,MAxEA,GAAa,UAAU,UAAY,SAAU,EAAK,CAC9C,GAAI,EAAI,OAAS,KAAK,YAAc,EAAI,YAAY,KAAK,WAAY,CAAC,IAAM,EACxE,IAAI,EAAU,KAAK,aAEnB,KAAI,EAAU,KAAK,IACvB,KAAK,WAAa,EAClB,EAAU,KAAK,kBAAkB,EAAS,KAAK,UAAU,EACzD,EAAU,EAAQ,KAAK,SAAU,EAAG,EAAG,CACnC,OAAO,EAAE,WAAa,EAAE,YAAc,EAAE,OAAS,EAAE,SAC3C,EAAE,SAAW,EAAE,MAAA,CAAO,cAAc,EAAE,SAAW,EAAE,KAAK,CACpE,CAAC,EACD,IAAI,EAAO,KACX,EAAU,EAAQ,OAAO,SAAU,EAAM,CACrC,IAAI,EAAU,EAAK,SAAW,EAAK,SAAW,EAAK,MAInD,OAHI,IAAY,EACL,IACX,EAAO,EACA,GACX,CAAC,EACD,KAAK,SAAW,CACpB,EACA,EAAa,UAAU,kBAAoB,SAAU,EAAO,EAAQ,CAChE,IAAI,EAAU,CAAC,EACX,EAAQ,EAAO,YAAY,EAC3B,EAAQ,EAAO,YAAY,EAC/B,KAAM,IAAK,IAAI,EAAI,EAAG,EAAM,EAAO,EAAM,GAAI,IAAK,CAC9C,GAAI,EAAK,WAAY,CACjB,EAAK,OAAS,EAAK,MACnB,EAAQ,KAAK,CAAI,EACjB,QACJ,CACA,IAAI,EAAW,CAAC,KAAK,eAAiB,EAAK,SAAY,EAAK,OAAS,EAAK,QACrE,KAEL,KAAI,EAAY,GACZ,EAAY,EACZ,EAAU,EACV,EAAO,EACX,GAAI,KAAK,eACD,IAAW,EAAQ,OAAO,EAAG,EAAO,MAAM,EAC1C,SAAS,IAAA,KAEZ,CACD,IAAI,EAAiB,EAAQ,YAAY,CAAC,CAAC,QAAQ,CAAK,EACxD,GAAI,EAAiB,GACjB,EAAU,OAGV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,IAAI,EAAK,EAAQ,QAAQ,EAAM,GAAI,EAAY,CAAC,EAC5C,EAAK,EAAQ,QAAQ,EAAM,GAAI,EAAY,CAAC,EAEhD,GADA,EAAS,GAAM,IAAO,EAAK,GAAK,EAAK,GAAM,EAAK,EAC5C,EAAQ,EACR,SAAS,KACb,EAAW,EAAQ,EAAY,EAC3B,EAAW,IACP,IAAc,KACd,GAAW,IACf,GAAW,EACX,GAAyB,GAAK,GAElC,EAAY,CAChB,CAER,CACA,EAAK,UAAY,EACjB,EAAK,WAAa,IAClB,EAAK,QAAU,EAAK,OAAS,GAAK,EAClC,EAAQ,KAAK,CAAI,CAlCD,CAmCpB,CACA,OAAO,CACX,EACO,CACX,EAAE,EACF,EAAQ,aAAe,EACvB,EAAQ,mBAAqB,EAC7B,EAAQ,aAAe,CAEvB,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,QAAQ,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACjG,IAAI,EAA6B,UAAY,CACzC,SAAS,EAAY,EAAS,EAAS,CAC/B,IACA,KAAK,WAAa,EAAQ,YAC9B,KAAK,QAAU,CAAC,EAChB,KAAK,QAAU,EACf,EAAQ,iBAAiB,IAAI,CACjC,CA+DA,MA9DA,GAAY,UAAU,oBAAsB,SAAU,EAAK,CACvD,OAAO,KAAK,QAAQ,KAAK,SAAU,EAAQ,CACvC,OAAO,EAAO,MAAM,SAAS,EAAI,IAAK,EAAI,MAAM,CACpD,CAAC,CACL,EACA,EAAY,UAAU,kBAAoB,SAAU,EAAG,EAAG,CACtD,OAAO,EAAE,MAAM,MAAM,IAAM,EAAE,MAAM,MAAM,GAC7C,EACA,EAAY,UAAU,WAAa,SAAU,EAAS,CAClD,KAAK,QAAU,EAAQ,KAAK,KAAK,iBAAiB,CAAC,CAAC,MAAM,EAAG,KAAK,WAAW,EAC7E,KAAK,QAAQ,QAAQ,kBAAkB,CAC3C,EACA,EAAY,UAAU,OAAS,SAAU,EAAM,EAAa,EAAS,EAAQ,CACrE,MAAC,KAAK,SAAW,CAAC,KAAK,QAAQ,QAMnC,IAAK,IAJD,EAAuB,EAAO,SAAU,EAAqB,EAAO,QACpE,EACA,EAAmB,EACnB,EAAU,EACL,EAAI,EAAG,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC1C,IAAI,EAAS,KAAK,QAAQ,GACtB,OAAO,MAAM,IAAI,IAAM,IAEvB,IAAO,MAAM,MAAM,IAAM,KAEzB,EAAO,MAAM,MAAM,MAAQ,EAC3B,KAGA,EAAU,EAAO,MAAM,MAAM,IAC7B,EAAmB,GAEnB,IAAmB,MAGvB,KAAI,EAAqB,EAAO,MAAM,SAAS,EAAsB,CAAkB,EACnF,OAAmB,MAAM,MAAQ,EAAmB,IAAI,KACrD,EAAmB,MAAM,SAAW,EAAmB,IAAI,QAGlE,KAAI,EAAc,EAAmB,cAAc,CAAO,EAC1D,GAAI,EAAY,QAAQ,EAAG,CACvB,EAAW,EAAQ,gBAAgB,EAAmB,IAAI,IAAK,CAAQ,EACnE,GAAY,EAAS,IAAI,IAAM,EAAmB,IAAI,MACtD,EAAuB,EAAS,IAAI,KAExC,QACJ,CACI,KAAK,aAAe,WACpB,EAAY,mBAAmB,EAAM,EAAa,EAAO,UAAW,CAAM,EAErE,EAAY,YAAY,EACzB,KAAK,aAAe,OACpB,EAAY,oBAAoB,EAAM,EAAa,EAAO,UAAW,CAAM,EAE3E,EAAY,eAAe,EAAM,EAAa,EAAO,UAAW,CAAM,EAG1E,EAAY,qBAAqB,EAAM,EAAa,EAAO,UAAY,YAAa,CAAM,CAlBpC,CAL6B,CAyB3F,CACJ,EACO,CACX,EAAE,EACF,EAAY,UAAU,YAAc,IACpC,EAAQ,YAAc,CAEtB,CAAC,EAED,IAAI,OAAO,kCAAkC,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,IAAI,EAAQ,EAAQ,UAAU,CAAC,CAAC,MACxJ,EAAa,iDACjB,SAAS,EAAa,EAAK,EAAK,CAK5B,OAJiB,EAAI,aAAa,EAAM,WAAW,CAC/C,IAAK,EACL,OAAQ,CACZ,EAAG,CAAG,CACU,CAAC,CAAC,MAAM,CAAU,CAAC,CAAC,OAAS,CACjD,CACA,SAAS,EAAa,EAAK,EAAK,CAC5B,IAAI,EAAY,EAAa,EAAK,CAAG,EACjC,EAAQ,EAAI,SAAS,CAAC,CAAC,MAAM,CAAU,EACvC,EAAa,OAAO,OAAO,IAAI,EAC/B,EAAc,EAAM,GAaxB,OAZA,EAAM,QAAQ,SAAU,EAAM,EAAK,CAC3B,MAAC,GAAQ,IAAS,GAEtB,KAAI,EAAW,KAAK,IAAI,EAAY,CAAG,EACnC,EAAQ,EAAM,OAAS,EACvB,EAAW,GACX,EAAW,GAAQ,KAAK,IAAI,EAAO,EAAW,EAAK,EAGnD,EAAW,GAAQ,CANgB,CAQ3C,CAAC,EACM,CACX,CACA,EAAQ,GAAK,gBACb,EAAQ,eAAiB,SAAU,EAAQ,EAAS,EAAK,EAAQ,EAAU,CACvE,IAAI,EAAY,EAAa,EAAS,CAAG,EAEzC,EAAS,KADM,OAAO,KAAK,CACL,CAAC,CAAC,IAAI,SAAU,EAAM,CACxC,MAAO,CACH,QAAS,EACT,MAAO,EACP,MAAO,EAAU,GACjB,KAAM,OACV,CACJ,CAAC,CAAC,CACN,CAEA,CAAC,EAED,IAAI,OAAO,yBAAyB,CAAC,UAAU,UAAU,SAAS,eAAe,mBAAmB,aAAa,eAAe,wBAAwB,mBAAmB,kCAAkC,aAAa,YAAY,EAAG,SAAS,EAAS,EAAS,EAAO,CAyB3Q,aACA,IAAI,EAAiB,EAAQ,aAAa,CAAC,CAAC,eACxC,EAAe,EAAQ,iBAAiB,CAAC,CAAC,aAC1C,EAAS,EAAQ,WAAW,EAC5B,EAAO,EAAQ,aAAa,EAC5B,EAAO,EAAQ,sBAAsB,EACrC,EAAc,EAAQ,iBAAiB,CAAC,CAAC,YACzC,EAAgB,EAAQ,gCAAgC,EACxD,EAAmB,CACnB,eAAgB,SAAU,EAAQ,EAAS,EAAK,EAAQ,EAAU,CAC9D,GAAI,EAAQ,MAAM,UACd,OAAO,EAAQ,MAAM,UAAU,eAAe,EAAQ,EAAS,EAAK,EAAQ,CAAQ,EAExF,IAAI,EAAQ,EAAO,QAAQ,SAAS,EAAI,GAAG,EACvC,EAAc,EAAQ,MAAM,eAAe,EAAO,EAAS,EAAK,CAAM,EAC1E,EAAc,EAAY,IAAI,SAAU,EAAI,CAExC,MADA,GAAG,YAAc,EAAiB,GAC3B,CACX,CAAC,EACD,EAAS,KAAM,CAAW,CAC9B,EACA,GAAI,kBACR,EACI,EAA0B,SAAU,EAAK,CACzC,IAAI,EAAS,CAAC,EACd,OAAO,EAAI,QAAQ,sBAAuB,SAAU,EAAG,EAAI,EAAI,EAAI,CAC/D,MAAQ,GAAO,GAAM,GAAM,EAC/B,CAAC,CAAC,CAAC,QAAQ,YAAa,SAAU,EAAG,EAAI,CACrC,OAAO,EAAO,EAClB,CAAC,CACL,EACI,EAAmB,CACnB,eAAgB,SAAU,EAAQ,EAAS,EAAK,EAAQ,EAAU,CAC9D,IAAI,EAAS,CAAC,EACV,EAAQ,EAAQ,WAAW,EAAI,IAAK,EAAI,MAAM,EAC9C,GAAS,EAAM,KAAK,MAAM,yEAAyE,EACnG,EAAO,KAAK,UAAU,EAEtB,EAAS,EAAe,gBAAgB,CAAM,EAClD,IAAI,EAAa,EAAe,WAC5B,EAAc,CAAC,EACnB,EAAO,QAAQ,SAAU,EAAO,CAE5B,IAAK,IADD,EAAW,EAAW,IAAU,CAAC,EAC5B,EAAI,EAAS,OAAQ,KAAM,CAChC,IAAI,EAAI,EAAS,GACb,EAAU,EAAE,MAAQ,EAAE,WACrB,GAEL,EAAY,KAAK,CACJ,UACT,QAAS,EAAE,QACX,KAAM,EAAE,YAAc,CAAC,EAAE,KAAO,EAAE,WAAa,KAAY,UAC3D,YAAa,EAAiB,EAClC,CAAC,CACL,CACJ,EAAG,IAAI,EACP,EAAS,KAAM,CAAW,CAC9B,EACA,cAAe,SAAU,EAAM,CACvB,EAAK,SAAW,CAAC,EAAK,UACtB,EAAK,QAAU,CACX,MAAO,EAAK,WAAW,EAAK,OAAO,EAAG,OAAQ,YAC9C,EAAK,WAAW,EAAwB,EAAK,OAAO,CAAC,CACzD,CAAC,CAAC,KAAK,EAAE,EAEjB,EACA,GAAI,kBACR,EACI,EAAa,CAAC,EAAkB,EAAe,CAAgB,EACnE,EAAQ,cAAgB,SAAU,EAAK,CACnC,EAAW,OAAS,EAChB,GACA,EAAW,KAAK,MAAM,EAAY,CAAG,CAC7C,EACA,EAAQ,aAAe,SAAU,EAAW,CACxC,EAAW,KAAK,CAAS,CAC7B,EACA,EAAQ,cAAgB,EACxB,EAAQ,iBAAmB,EAC3B,EAAQ,iBAAmB,EAC3B,IAAI,EAAgB,CAChB,KAAM,gBACN,KAAM,SAAU,EAAQ,CACpB,OAAO,EAAe,cAAc,CAAM,CAC9C,EACA,QAAS,KACb,EACI,EAAe,SAAU,EAAG,EAAQ,CACpC,EAAoB,EAAO,QAAQ,KAAK,CAC5C,EACI,EAAsB,SAAU,EAAM,CAClC,OAAO,GAAQ,WACf,EAAO,EAAO,OAAO,IACpB,IAEL,AACI,EAAe,QAAQ,CAAC,EAC5B,EAAgB,EAAK,IAAK,EAAK,aAAa,EACxC,EAAK,OACL,EAAK,MAAM,QAAQ,CAAmB,EAC9C,EACI,EAAkB,SAAU,EAAI,EAAiB,CAC7C,CAAC,GAAmB,CAAC,GAAM,EAAe,MAAM,KAEpD,EAAe,MAAM,GAAM,CAAC,EAC5B,EAAO,WAAW,EAAiB,SAAU,EAAG,CACvC,IAEL,EAAe,MAAM,GAAM,EACvB,CAAC,EAAE,UAAY,EAAE,cACjB,EAAE,SAAW,EAAe,iBAAiB,EAAE,WAAW,GAC9D,EAAe,SAAS,EAAE,UAAY,CAAC,EAAG,EAAE,KAAK,EAC7C,EAAE,gBACF,EAAe,WAAW,EAAE,MAAM,CAAC,cAAgB,EAAE,cACrD,EAAE,cAAc,QAAQ,SAAU,EAAG,CACjC,EAAoB,YAAc,CAAC,CACvC,CAAC,GAET,CAAC,EACL,EACI,EAAqB,SAAU,EAAG,CAClC,IAAI,EAAS,EAAE,OACX,EAAe,EAAO,WAAa,EAAO,UAAU,UACxD,GAAI,EAAE,QAAQ,OAAS,YACf,GAAgB,CAAC,EAAK,oBAAoB,CAAM,GAChD,EAAO,UAAU,OAAO,OAE3B,GAAI,EAAE,QAAQ,OAAS,gBAAkB,CAAC,EAAc,CACzD,EAAgB,EAChB,IAAI,EAAQ,EAAE,OAAO,yBACjB,EACA,EAAsB,MAAM,CAAK,EAGjC,EAAqB,CAAC,CAE9B,CACJ,EACI,EACA,EAAwB,EAAK,YAAY,UAAY,CACrD,EAAqB,CAAa,CACtC,EAAG,CAAC,EACA,EAAuB,SAAU,EAAG,CACpC,IAAI,EAAS,EAAE,OACX,EAAS,EAAK,oBAAoB,CAAM,EACxC,EAAe,EAAE,KACjB,EAAsB,EAAK,oBAAoB,EAAQ,CAAY,EACvE,GAAI,GAAU,EAAO,QAAU,EAAO,8BAAgC,EAAqB,CACvF,IAAI,EAAY,EAAa,IAAI,CAAM,EACvC,EAAU,UAAY,GACtB,EAAU,UAAU,CAAM,CAC9B,CACJ,EACI,EAAS,EAAQ,WAAW,CAAC,CAAC,OAClC,EAAQ,WAAW,CAAC,CAAC,cAAc,EAAO,UAAW,SAAU,CAC3D,0BAA2B,CACvB,IAAK,SAAU,EAAK,CACZ,GACA,EAAa,IAAI,IAAI,EACrB,AACI,KAAK,aAAa,MAAM,QAAQ,CAAG,EAAI,EAAM,EACjD,KAAK,SAAS,WAAW,EAAa,YAAY,GAGlD,KAAK,SAAS,cAAc,EAAa,YAAY,CAE7D,EACA,MAAO,EACX,EACA,yBAA0B,CACtB,IAAK,SAAU,EAAK,CACZ,GACA,AACI,KAAK,aAAa,MAAM,QAAQ,CAAG,EAAI,EAAM,EACjD,KAAK,SAAS,GAAG,YAAa,CAAkB,GAGhD,KAAK,SAAS,IAAI,YAAa,CAAkB,CAEzD,EACA,MAAO,EACX,EACA,wBAAyB,CACrB,aAAc,CAClB,EACA,4BAA6B,CACzB,aAAc,CAClB,EACA,eAAgB,CACZ,IAAK,SAAU,EAAK,CACZ,GACA,KAAK,SAAS,WAAW,CAAa,EACtC,KAAK,GAAG,aAAc,CAAY,EAClC,EAAa,KAAM,IAAI,IAGvB,KAAK,SAAS,cAAc,CAAa,EACzC,KAAK,IAAI,aAAc,CAAY,EAE3C,EACA,MAAO,EACX,CACJ,CAAC,EACD,EAAQ,YAAc,CAEtB,CAAC,GAAmB,UAAW,CACX,IAAI,QAAQ,CAAC,wBAAwB,EAAG,SAAS,EAAG,CACnCE,IACT,EAAO,QAAU,EAEzB,CAAC,CACL,EAAA,CAAG,CAGb,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEhD,EAAS,EAAoB,IAAIA,CAAM,EAC9D,IAAI,OAAO,wBAAwB,CAAC,UAAU,UAAU,QAAQ,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,EAAO,QAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEvH,CAAC,EAED,IAAI,OAAO,oBAAoB,CAAC,UAAU,UAAU,SAAS,oBAAoB,oBAAoB,cAAc,eAAe,gBAAgB,wBAAwB,4BAA4B,eAAe,YAAY,EAAG,SAAS,EAAS,EAAS,EAAO,CA0BtQ,aACA,IAAI,EAAM,EAAQ,YAAY,EAC1B,EAAO,EAAQ,aAAa,EAC5B,EAAQ,EAAQ,cAAc,EAC9B,EAAe,EAAQ,iBAAiB,EACxC,EAAc,EAAQ,0BAA0B,CAAC,CAAC,YAClD,EAAU,EAAQ,aAAa,EAC/B,EAAM,EAAQ,WAAW,CAAC,CAAC,IAC3B,EAAY,IAChB,EAAI,gBAAgB,EAAc,gBAAiB,EAAK,EACxD,IAAI,EAA2B,UAAY,CACvC,SAAS,EAAU,EAAQ,EAAO,EAAiB,CAC/C,KAAK,YACL,KAAK,QAAU,EAAI,SAAS,CAAC,MAAO,CAAE,MAAO,kBAAmB,EAC5D,CAAC,OAAQ,CAAE,OAAQ,OAAQ,MAAO,qBAAsB,CAAC,EACzD,CAAC,MAAO,CAAE,MAAO,iBAAkB,EAC/B,CAAC,QAAS,CAAE,MAAO,mBAAoB,YAAa,EAAI,8BAA+B,YAAY,EAAG,WAAY,OAAQ,CAAC,EAC3H,CAAC,OAAQ,CAAE,OAAQ,WAAY,MAAO,oBAAqB,EAAG,GAAQ,EACtE,CAAC,OAAQ,CAAE,OAAQ,WAAY,MAAO,oBAAqB,EAAG,GAAQ,EACtE,CAAC,OAAQ,CAAE,OAAQ,UAAW,MAAO,gBAAiB,MAAO,WAAY,EAAG,EAAI,2BAA4B,KAAK,CAAC,CACtH,EACA,CAAC,MAAO,CAAE,MAAO,kBAAmB,EAChC,CAAC,QAAS,CAAE,MAAO,mBAAoB,YAAa,EAAI,iCAAkC,cAAc,EAAG,WAAY,OAAQ,CAAC,EAChI,CAAC,OAAQ,CAAE,OAAQ,qBAAsB,MAAO,eAAgB,EAAG,EAAI,+BAAgC,SAAS,CAAC,EACjH,CAAC,OAAQ,CAAE,OAAQ,aAAc,MAAO,eAAgB,EAAG,EAAI,8BAA+B,KAAK,CAAC,CACxG,EACA,CAAC,MAAO,CAAE,MAAO,oBAAqB,EAClC,CAAC,OAAQ,CAAE,OAAQ,gBAAiB,MAAO,aAAc,MAAO,EAAI,kCAAmC,qBAAqB,EACpH,MAAO,2CAA4C,EAAG,GAAG,EACjE,CAAC,OAAQ,CAAE,MAAO,oBAAqB,CAAC,EACxC,CAAC,OAAQ,CAAE,OAAQ,mBAAoB,MAAO,aAAc,MAAO,EAAI,iCAAkC,eAAe,CAAE,EAAG,IAAI,EACjI,CAAC,OAAQ,CAAE,OAAQ,sBAAuB,MAAO,aAAc,MAAO,EAAI,+BAAgC,sBAAsB,CAAE,EAAG,IAAI,EACzI,CAAC,OAAQ,CAAE,OAAQ,mBAAoB,MAAO,aAAc,MAAO,EAAI,qCAAsC,mBAAmB,CAAE,EAAG,KAAK,EAC1I,CAAC,OAAQ,CAAE,OAAQ,oBAAqB,MAAO,aAAc,MAAO,EAAI,uCAAwC,qBAAqB,CAAE,EAAG,GAAG,CACjJ,CACJ,CAAC,EACD,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,eAAiB,KAAK,cAAc,KAAK,IAAI,EAClD,KAAK,MAAM,EACX,KAAK,UAAU,CAAM,EACrB,EAAI,gBAAgB,EAAc,gBAAiB,EAAO,SAAS,EACnE,EAAM,YAAY,KAAK,QAAS,aAAc,SAAU,EAAG,CAAE,EAAE,gBAAgB,CAAG,EAAG,CAAM,CAC/F,CA+MA,MA9MA,GAAU,UAAU,UAAY,SAAU,EAAQ,CAC9C,EAAO,UAAY,KACnB,EAAO,SAAS,SAAS,YAAY,KAAK,OAAO,EACjD,KAAK,OAAS,CAClB,EACA,EAAU,UAAU,WAAa,SAAU,EAAG,CAC1C,KAAK,YAAc,KACnB,KAAK,aAAa,EAAI,CAC1B,EACA,EAAU,UAAU,cAAgB,UAAY,CAC5C,KAAK,KAAK,GAAO,GAAO,EAAI,CAChC,EACA,EAAU,UAAU,cAAgB,SAAU,EAAI,CAC9C,KAAK,UAAY,EAAG,cAAc,kBAAkB,EACpD,KAAK,WAAa,EAAG,cAAc,mBAAmB,EACtD,KAAK,aAAe,EAAG,cAAc,4BAA4B,EACjE,KAAK,cAAgB,EAAG,cAAc,wBAAwB,EAC9D,KAAK,aAAe,EAAG,cAAc,2BAA2B,EAChE,KAAK,oBAAsB,EAAG,cAAc,8BAA8B,EAC1E,KAAK,gBAAkB,EAAG,cAAc,2BAA2B,EACnE,KAAK,YAAc,KAAK,UAAU,cAAc,mBAAmB,EACnE,KAAK,aAAe,KAAK,WAAW,cAAc,mBAAmB,EACrE,KAAK,cAAgB,EAAG,cAAc,qBAAqB,CAC/D,EACA,EAAU,UAAU,MAAQ,UAAY,CACpC,IAAI,EAAK,KAAK,QACd,KAAK,cAAc,CAAE,EACrB,IAAI,EAAQ,KACZ,EAAM,YAAY,EAAI,YAAa,SAAU,EAAG,CAC5C,WAAW,UAAY,CACnB,EAAM,YAAY,MAAM,CAC5B,EAAG,CAAC,EACJ,EAAM,gBAAgB,CAAC,CAC3B,CAAC,EACD,EAAM,YAAY,EAAI,QAAS,SAAU,EAAG,CAExC,IAAI,GADI,EAAE,QAAU,EAAE,WAAA,CACP,aAAa,QAAQ,EAChC,GAAU,EAAM,GAChB,EAAM,EAAO,CAAC,EACT,EAAM,aAAa,SAAS,IACjC,EAAM,aAAa,SAAS,EAAO,CAAC,KAAK,CAAK,EAClD,EAAM,gBAAgB,CAAC,CAC3B,CAAC,EACD,EAAM,sBAAsB,EAAI,SAAU,EAAG,EAAQ,EAAS,CAC1D,IAAI,EAAY,EAAQ,gBAAgB,CAAO,EAC3C,EAAU,EAAM,aAAa,eAAe,EAAQ,CAAS,EAC7D,GAAW,EAAQ,OACnB,EAAQ,KAAK,CAAK,EAClB,EAAM,UAAU,CAAC,EAEzB,CAAC,EACD,KAAK,UAAY,EAAK,YAAY,UAAY,CAC1C,EAAM,KAAK,GAAO,EAAK,CAC3B,CAAC,EACD,EAAM,YAAY,KAAK,YAAa,QAAS,UAAY,CACrD,EAAM,UAAU,SAAS,EAAE,CAC/B,CAAC,EACD,EAAM,YAAY,KAAK,YAAa,QAAS,UAAY,CACrD,EAAM,YAAc,EAAM,YAC1B,EAAM,YAAY,OAAS,EAAM,UAAU,CAC/C,CAAC,EACD,EAAM,YAAY,KAAK,aAAc,QAAS,UAAY,CACtD,EAAM,YAAc,EAAM,aAC1B,EAAM,YAAY,OAAS,EAAM,UAAU,CAC/C,CAAC,CACL,EACA,EAAU,UAAU,eAAiB,SAAU,EAAO,CAClD,KAAK,YAAc,EACf,EACA,KAAK,kBAAoB,KAAK,OAAO,QAAQ,UAAU,EAAO,iBAAiB,EAE9E,AAED,KAAK,qBADL,KAAK,OAAO,QAAQ,aAAa,KAAK,iBAAiB,EAC9B,KAEjC,EACA,EAAU,UAAU,aAAe,SAAU,EAAe,CACxD,EAAI,YAAY,KAAK,cAAe,UAAW,KAAK,WAAW,EAC/D,EAAI,YAAY,KAAK,aAAc,UAAW,KAAK,aAAa,OAAO,EACvE,KAAK,cAAc,YAAc,KAAK,cAAc,QAAU,IAAM,IACpE,EAAI,YAAY,KAAK,aAAc,UAAW,KAAK,aAAa,OAAO,EACvE,EAAI,YAAY,KAAK,gBAAiB,UAAW,KAAK,gBAAgB,OAAO,EAC7E,EAAI,YAAY,KAAK,oBAAqB,UAAW,KAAK,oBAAoB,OAAO,EACrF,IAAI,EAAW,KAAK,OAAO,YAAY,EACvC,KAAK,cAAc,MAAM,QAAU,EAAW,OAAS,GACvD,KAAK,WAAW,MAAM,QAAU,KAAK,cAAc,SAAW,CAAC,EAAW,GAAK,OAC/E,KAAK,KAAK,GAAO,GAAO,CAAa,CACzC,EACA,EAAU,UAAU,UAAY,SAAU,EAAI,CAC1C,KAAK,OAAO,QAAQ,UAAU,GAAM,KAAK,OAAO,QAAQ,SAAS,EAAE,EACnE,KAAK,OAAO,SAAS,kBAAkB,CAC3C,EACA,EAAU,UAAU,KAAO,SAAU,EAAa,EAAW,EAAe,CACnE,QAAK,OAAO,QAYjB,KAAI,EAAU,CAVF,KAAK,OAAO,KAAK,KAAK,YAAY,MAAO,CACpC,cACF,YACX,KAAM,GACN,OAAQ,KAAK,aAAa,QAC1B,cAAe,KAAK,oBAAoB,QACxC,UAAW,KAAK,gBAAgB,QACjB,gBACf,MAAO,KAAK,WAChB,CACmB,GAAK,KAAK,YAAY,MACzC,EAAI,YAAY,KAAK,UAAW,cAAe,CAAO,EACtD,KAAK,OAAO,MAAM,gBAAiB,CAAE,MAAO,CAAC,CAAQ,CAAC,EACtD,KAAK,UAAU,EACf,KAAK,cAAc,CAJsB,CAK7C,EACA,EAAU,UAAU,cAAgB,UAAY,CAC5C,IAAI,EAAS,KAAK,OACd,EAAQ,EAAO,QAAQ,SAAS,GAChC,EAAsB,EAAM,QAC5B,EAAM,EACN,EAAS,EACb,GAAI,EAAO,CACP,IAAI,EAAQ,KAAK,YACX,EAAO,QAAQ,aAAa,KAAK,WAAW,EAC5C,EAAO,SAAS,EAClB,EAAO,QAAQ,mBAAmB,EAAO,qBAAqB,CAAC,IAC/D,EAAQ,EAAM,QAAQ,cAAe;CAAI,EACzC,EAAO,QAAQ,IAAI,aAAe;GAEtC,IAAI,EAAS,EAAO,QAAQ,IAAI,gBAAgB,EAAO,UAAU,MAAM,EACnE,KAAK,cACL,GAAU,EAAO,QAAQ,IAAI,gBAAgB,KAAK,YAAY,KAAK,GAGvE,IAFA,IAAI,EAAO,EAAM,UAAY,EACzB,GACI,EAAI,EAAM,KAAK,CAAK,KACxB,IACA,EAAO,EAAE,MACL,GAAQ,GACR,MACA,EAAM,GAEN,CAAC,EAAE,KACH,EAAM,UAAY,GAAQ,EAAK,eAAe,EAAO,EAAM,CAAmB,EAC1E,GAAQ,EAAM,YAI9B,CACA,KAAK,cAAc,YAAc,EAAI,4BAA6B,WAAY,CAAC,EAAS,EAAM,EAAY,EAAY,IAAM,CAAI,CAAC,CACrI,EACA,EAAU,UAAU,SAAW,UAAY,CACvC,KAAK,KAAK,GAAM,EAAK,CACzB,EACA,EAAU,UAAU,SAAW,UAAY,CACvC,KAAK,KAAK,GAAM,EAAI,CACxB,EACA,EAAU,UAAU,QAAU,UAAY,CAMtC,IAAI,EAAU,CALF,KAAK,OAAO,QAAQ,KAAK,YAAY,MAAO,CACpD,OAAQ,KAAK,aAAa,QAC1B,cAAe,KAAK,oBAAoB,QACxC,UAAW,KAAK,gBAAgB,OACpC,CACmB,GAAK,KAAK,YAAY,MACzC,EAAI,YAAY,KAAK,UAAW,cAAe,CAAO,EACtD,KAAK,OAAO,MAAM,gBAAiB,CAAE,MAAO,CAAC,CAAQ,CAAC,EACtD,KAAK,UAAU,EACf,KAAK,KAAK,CACd,EACA,EAAU,UAAU,QAAU,UAAY,CACjC,KAAK,OAAO,YAAY,GACzB,KAAK,OAAO,QAAQ,KAAK,aAAa,KAAK,CACnD,EACA,EAAU,UAAU,mBAAqB,UAAY,CAC5C,KAAK,OAAO,YAAY,IACzB,KAAK,OAAO,QAAQ,KAAK,aAAa,KAAK,EAC3C,KAAK,SAAS,EAEtB,EACA,EAAU,UAAU,WAAa,UAAY,CACpC,KAAK,OAAO,YAAY,GACzB,KAAK,OAAO,WAAW,KAAK,aAAa,KAAK,CACtD,EACA,EAAU,UAAU,KAAO,UAAY,CACnC,KAAK,OAAS,GACd,KAAK,eAAe,IAAI,EACxB,KAAK,OAAO,IAAI,gBAAiB,KAAK,UAAU,EAChD,KAAK,OAAO,IAAI,QAAS,KAAK,cAAc,EAC5C,KAAK,QAAQ,MAAM,QAAU,OAC7B,KAAK,OAAO,WAAW,sBAAsB,KAAK,iBAAiB,EACnE,KAAK,OAAO,MAAM,CACtB,EACA,EAAU,UAAU,KAAO,SAAU,EAAO,EAAW,CACnD,KAAK,OAAS,GACd,KAAK,OAAO,GAAG,gBAAiB,KAAK,UAAU,EAC/C,KAAK,OAAO,GAAG,QAAS,KAAK,cAAc,EAC3C,KAAK,QAAQ,MAAM,QAAU,GAC7B,KAAK,cAAc,QAAU,EACzB,KAAK,OAAO,QAAQ,SAAS,SAC7B,EAAQ,EAAK,aAAa,CAAK,GAC/B,GAAS,OACT,KAAK,YAAY,MAAQ,GAC7B,KAAK,YAAY,MAAM,EACvB,KAAK,YAAY,OAAO,EACxB,KAAK,OAAO,WAAW,mBAAmB,KAAK,iBAAiB,EAChE,KAAK,aAAa,EAAI,CAC1B,EACA,EAAU,UAAU,UAAY,UAAY,CACxC,IAAI,EAAK,SAAS,cAClB,OAAO,GAAM,KAAK,aAAe,GAAM,KAAK,YAChD,EACO,CACX,EAAE,EACE,EAAe,IAAI,EACvB,EAAa,SAAS,CAClB,mBAAoB,SAAU,EAAI,CAC9B,IAAI,EAAY,EAAG,UAAY,CAAC,EAAG,UACnC,EAAG,WAAW,MAAM,QAAU,EAAY,GAAK,OAC/C,EAAG,cAAc,QAAU,GAC3B,EAAG,aAAa,EAChB,EAAG,YAAY,MAAM,CACzB,EACA,0BAA2B,SAAU,EAAI,CACjC,EAAG,OAAO,YAAY,IAE1B,EAAG,cAAc,QAAU,GAC3B,EAAG,aAAa,EAChB,EAAG,aAAa,MAAM,EAC1B,EACA,mBAAoB,SAAU,EAAI,CAC9B,EAAG,SAAS,CAChB,EACA,+BAAgC,SAAU,EAAI,CAC1C,EAAG,SAAS,CAChB,EACA,IAAO,SAAU,EAAI,CACjB,WAAW,UAAY,CAAE,EAAG,KAAK,CAAG,CAAC,CACzC,EACA,OAAU,SAAU,EAAI,CAChB,EAAG,aAAe,EAAG,cACrB,EAAG,QAAQ,EACf,EAAG,SAAS,CAChB,EACA,eAAgB,SAAU,EAAI,CACtB,EAAG,aAAe,EAAG,cACrB,EAAG,QAAQ,EACf,EAAG,SAAS,CAChB,EACA,aAAc,SAAU,EAAI,CACpB,EAAG,aAAe,EAAG,cACrB,EAAG,WAAW,EAClB,EAAG,QAAQ,CACf,EACA,IAAO,SAAU,EAAI,EAChB,EAAG,aAAe,EAAG,aAAe,EAAG,YAAc,EAAG,aAAA,CAAc,MAAM,CACjF,CACJ,CAAC,EACD,EAAa,YAAY,CAAC,CAClB,KAAM,mBACN,QAAS,CAAE,IAAK,cAAe,IAAK,uBAAwB,EAC5D,KAAM,SAAU,EAAI,CAChB,EAAG,aAAa,QAAU,CAAC,EAAG,aAAa,QAC3C,EAAG,aAAa,CACpB,CACJ,EAAG,CACC,KAAM,sBACN,QAAS,CAAE,IAAK,cAAe,IAAK,uBAAwB,EAC5D,KAAM,SAAU,EAAI,CAChB,EAAG,oBAAoB,QAAU,CAAC,EAAG,oBAAoB,QACzD,EAAG,aAAa,CACpB,CACJ,EAAG,CACC,KAAM,mBACN,QAAS,CAAE,IAAK,cAAe,IAAK,uBAAwB,EAC5D,KAAM,SAAU,EAAI,CAChB,EAAG,gBAAgB,QAAU,CAAC,EAAG,gBAAgB,QACjD,EAAG,aAAa,CACpB,CACJ,EAAG,CACC,KAAM,gBACN,KAAM,SAAU,EAAI,CAChB,EAAG,cAAc,QAAU,CAAC,EAAG,cAAc,QAC7C,EAAG,aAAa,CACpB,CACJ,EAAG,CACC,KAAM,oBACN,KAAM,SAAU,EAAI,CAChB,EAAG,aAAa,QAAU,CAAC,EAAG,YAC9B,EAAG,eAAe,EAAG,aAAa,SAAW,EAAG,OAAO,kBAAkB,CAAC,EAC1E,EAAG,aAAa,CACpB,CACJ,CAAC,CAAC,EACN,IAAI,EAAoB,IAAI,EAAY,CAAC,CACjC,QAAS,MACT,KAAM,iBACN,KAAM,SAAU,EAAQ,CACpB,EAAO,UAAU,KAAK,CAC1B,CACJ,CAAC,CAAC,EACN,EAAU,UAAU,aAAe,EACnC,EAAU,UAAU,kBAAoB,EACxC,EAAQ,UAAY,EACpB,EAAQ,OAAS,SAAU,EAAQ,EAAW,CAC1C,IAAI,EAAK,EAAO,WAAa,IAAI,EAAU,CAAM,EAC7C,EAAQ,EAAO,QAAQ,UAAU,SAAS,EAC1C,EAAQ,EAAM,YAAY,EAAI,GAAK,EAAO,QAAQ,aAAa,CAAK,EACxE,EAAG,KAAK,EAAO,CAAS,CAC5B,CAEA,CAAC,GAAmB,UAAW,CACX,IAAI,QAAQ,CAAC,mBAAmB,EAAG,SAAS,EAAG,CAC9BA,IACT,EAAO,QAAU,EAEzB,CAAC,CACL,EAAA,CAAG,CAGb,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEhD,EAAS,EAAoB,IAAIA,CAAM,EAC9D,IAAI,OAAO,gCAAgC,CAAC,UAAU,UAAU,SAAS,cAAc,+BAA+B,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC5J,IAAI,EAAM,EAAQ,YAAY,EAC1B,EAAqB,EAAQ,wBAAwB,CAAC,CAAC,mBACvD,EAAqB,UAAY,CACjC,KAAK,OAAS,CACV,MAAS,CACL,CACI,MAAO,WACP,MAAO,6CACX,EAAG,CACC,MAAO,SACP,MAAO,IACP,KAAM,QACV,EAAG,CACC,MAAO,mBACP,MAAO,sBACX,EAAG,CACC,MAAO,mBACP,MAAO,iDACX,EAAG,CACC,MAAO,4BACP,MAAO,mBACX,EAAG,CACC,MAAO,OACP,MAAO,oCACX,EAAG,CACC,MAAO,UACP,MAAO,WACX,EAAG,CACC,MAAO,gBACP,MAAO,SACP,KAAM,SACV,EAAG,CACC,MAAO,eACP,MAAO,OACX,EAAG,CACC,MAAO,eACP,MAAO,SACX,EAAG,CACC,MAAO,uBACP,MAAO,KACX,EAAG,CACC,MAAO,OACP,MAAO,MACX,CACJ,EACA,OAAU,CACN,CACI,MAAO,2BACP,MAAO,oDACX,EAAG,CACC,MAAO,SACP,MAAO,MACP,KAAM,OACV,EAAG,CACC,aAAc,QAClB,CACJ,EACA,QAAW,CACP,CACI,MAAO,cACP,MAAO,SACP,KAAM,OACV,EAAG,CACC,aAAc,SAClB,CACJ,CACJ,CACJ,EACA,EAAI,SAAS,EAAoB,CAAkB,EACnD,EAAQ,mBAAqB,CAE7B,CAAC,EAED,IAAI,OAAO,kCAAkC,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC5H,IAAI,EAAQ,EAAQ,UAAU,CAAC,CAAC,MAC5B,EAAuB,UAAY,CAAE,GACxC,UAAY,CACT,KAAK,aAAe,SAAU,EAAM,EAAO,CAGvC,MAFK,QAAQ,KAAK,CAAI,EAEf,SAAS,KAAK,CAAK,EADf,EAEf,EACA,KAAK,YAAc,SAAU,EAAK,EAAK,CAEnC,IAAI,EADO,EAAI,QAAQ,CACR,CAAC,CAAC,MAAM,UAAU,EACjC,GAAI,CAAC,EACD,MAAO,GACX,IAAI,EAAS,EAAM,EAAE,CAAC,OAClB,EAAe,EAAI,oBAAoB,CAAO,MAAa,QAAO,CAAC,EACvE,GAAI,CAAC,GAAgB,EAAa,KAAO,EACrC,MAAO,GACX,IAAI,EAAS,KAAK,WAAW,EAAI,QAAQ,EAAa,GAAG,CAAC,EAC1D,EAAI,QAAQ,IAAI,EAAM,EAAK,EAAG,EAAK,EAAS,CAAC,EAAG,CAAM,CAC1D,EACA,KAAK,WAAa,SAAU,EAAM,CAC9B,OAAO,EAAK,MAAM,MAAM,CAAC,CAAC,EAC9B,CACJ,EAAA,CAAG,KAAK,EAAqB,SAAS,EACtC,EAAQ,qBAAuB,CAE/B,CAAC,EAED,IAAI,OAAO,0BAA0B,CAAC,UAAU,UAAU,SAAS,cAAc,YAAY,4BAA4B,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aAC/J,IAAI,EAAM,EAAQ,eAAe,EAC7B,EAAQ,EAAQ,aAAa,CAAC,CAAC,MAC/B,EAAe,EAAQ,aAAa,CAAC,CAAC,SACtC,EAAW,EAAQ,SAAW,SAAU,EAAc,CAClD,IACA,KAAK,mBAAqB,IAAI,OAAO,KAAK,mBAAmB,OAAO,QAAQ,YAAa,IAAM,EAAa,KAAK,CAAC,EAClH,KAAK,kBAAoB,IAAI,OAAO,KAAK,kBAAkB,OAAO,QAAQ,YAAa,IAAM,EAAa,GAAG,CAAC,EAEtH,EACA,EAAI,SAAS,EAAU,CAAY,GAClC,UAAY,CACT,KAAK,mBAAqB,mCAC1B,KAAK,kBAAoB,uCACzB,KAAK,yBAA2B,uBAChC,KAAK,yBAA2B,2BAChC,KAAK,cAAgB,4BACrB,KAAK,mBAAqB,KAAK,cAC/B,KAAK,cAAgB,SAAU,EAAS,EAAW,EAAK,CACpD,IAAI,EAAO,EAAQ,QAAQ,CAAG,EAC9B,GAAI,KAAK,yBAAyB,KAAK,CAAI,GACnC,CAAC,KAAK,cAAc,KAAK,CAAI,GAAK,CAAC,KAAK,yBAAyB,KAAK,CAAI,EAC1E,MAAO,GAEf,IAAI,EAAK,KAAK,mBAAmB,EAAS,EAAW,CAAG,EAGxD,MAFI,CAAC,GAAM,KAAK,cAAc,KAAK,CAAI,EAC5B,QACJ,CACX,EACA,KAAK,mBAAqB,SAAU,EAAS,EAAW,EAAK,EAAgB,CACzE,IAAI,EAAO,EAAQ,QAAQ,CAAG,EAC9B,GAAI,KAAK,cAAc,KAAK,CAAI,EAC5B,OAAO,KAAK,sBAAsB,EAAS,EAAM,CAAG,EACxD,IAAI,EAAQ,EAAK,MAAM,KAAK,kBAAkB,EAC9C,GAAI,EAAO,CACP,IAAI,EAAI,EAAM,MACd,GAAI,EAAM,GACN,OAAO,KAAK,oBAAoB,EAAS,EAAM,GAAI,EAAK,CAAC,EAC7D,IAAI,EAAQ,EAAQ,oBAAoB,EAAK,EAAI,EAAM,EAAE,CAAC,OAAQ,CAAC,EAQnE,OAPI,GAAS,CAAC,EAAM,YAAY,IACxB,EACA,EAAQ,KAAK,gBAAgB,EAAS,CAAG,EAEpC,GAAa,QAClB,EAAQ,OAET,CACX,CACI,OAAc,YAElB,KAAI,EAAQ,EAAK,MAAM,KAAK,iBAAiB,EAC7C,GAAI,EAAO,CACP,IAAI,EAAI,EAAM,MAAQ,EAAM,EAAE,CAAC,OAG/B,OAFI,EAAM,GACC,KAAK,oBAAoB,EAAS,EAAM,GAAI,EAAK,CAAC,EACtD,EAAQ,oBAAoB,EAAK,EAAG,EAAE,CACjD,CAN6C,CAOjD,EACA,KAAK,gBAAkB,SAAU,EAAS,EAAK,CAC3C,IAAI,EAAO,EAAQ,QAAQ,CAAG,EAC1B,EAAc,EAAK,OAAO,IAAI,EAC9B,EAAW,EACX,EAAc,EAAK,OACvB,GAAY,EAGZ,IAFA,IAAI,EAAS,EACT,EAAS,EAAQ,UAAU,EACxB,EAAE,EAAM,GAAQ,CACnB,EAAO,EAAQ,QAAQ,CAAG,EAC1B,IAAI,EAAS,EAAK,OAAO,IAAI,EACzB,OAAW,GAEf,IAAI,EAAc,EACd,MACJ,IAAI,EAAW,KAAK,mBAAmB,EAAS,MAAO,CAAG,EAC1D,GAAI,EACA,IAAI,EAAS,MAAM,KAAO,EACtB,MAEC,GAAI,EAAS,YAAY,EAC1B,EAAM,EAAS,IAAI,SAElB,GAAI,GAAe,EACpB,KACJ,CAEJ,EAAS,CAbL,CAcR,CACA,OAAO,IAAI,EAAM,EAAU,EAAa,EAAQ,EAAQ,QAAQ,CAAM,CAAC,CAAC,MAAM,CAClF,EACA,KAAK,sBAAwB,SAAU,EAAS,EAAM,EAAK,CAMvD,IALA,IAAI,EAAc,EAAK,OAAO,MAAM,EAChC,EAAS,EAAQ,UAAU,EAC3B,EAAW,EACX,EAAK,uCACL,EAAQ,EACL,EAAE,EAAM,GAAQ,CACnB,EAAO,EAAQ,QAAQ,CAAG,EAC1B,IAAI,EAAI,EAAG,KAAK,CAAI,EACf,OAED,EAAE,GACF,IAEA,IACA,CAAC,GACD,KACR,CACA,IAAI,EAAS,EACb,GAAI,EAAS,EACT,OAAO,IAAI,EAAM,EAAU,EAAa,EAAQ,EAAK,MAAM,CAEnE,CACJ,EAAA,CAAG,KAAK,EAAS,SAAS,CAE1B,CAAC,EAED,IAAI,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,cAAc,gBAAgB,gCAAgC,kCAAkC,0BAA0B,0BAA0B,EAAG,SAAS,EAAS,EAAS,EAAO,CAAC,aACnP,IAAI,EAAM,EAAQ,YAAY,EAC1B,EAAW,EAAQ,QAAQ,CAAC,CAAC,KAC7B,EAAiB,EAAQ,wBAAwB,CAAC,CAAC,mBACnD,EAAuB,EAAQ,0BAA0B,CAAC,CAAC,qBAC3D,EAAiB,EAAQ,kBAAkB,CAAC,CAAC,SAC7C,EAAe,EAAQ,yBAAyB,CAAC,CAAC,aAClD,EAAO,UAAY,CACnB,KAAK,eAAiB,EACtB,KAAK,SAAW,IAAI,EACpB,KAAK,WAAa,KAAK,kBACvB,KAAK,aAAe,IAAI,CAC5B,EACA,EAAI,SAAS,EAAM,CAAQ,GAC1B,UAAY,CACT,KAAK,iBAAmB,KACxB,KAAK,aAAe,CAAE,MAAO,KAAM,IAAK,IAAK,EAC7C,KAAK,kBAAoB,SAAU,EAAO,EAAM,EAAK,CACjD,IAAI,EAAS,KAAK,WAAW,CAAI,EAOjC,OANI,GAAS,SACG,EAAK,MAAM,iBACf,IACJ,GAAU,GAGX,CACX,EACA,KAAK,aAAe,SAAU,EAAO,EAAM,EAAO,CAC9C,OAAO,KAAK,SAAS,aAAa,EAAM,CAAK,CACjD,EACA,KAAK,YAAc,SAAU,EAAO,EAAK,EAAK,CAC1C,KAAK,SAAS,YAAY,EAAK,CAAG,CACtC,EACA,KAAK,aAAe,SAAU,EAAS,CACnC,IAAI,EAAS,IAAI,EAAa,CAAC,KAAK,EAAG,uBAAwB,YAAY,EAQ3E,OAPA,EAAO,iBAAiB,EAAQ,YAAY,CAAC,EAC7C,EAAO,GAAG,WAAY,SAAU,EAAG,CAC/B,EAAQ,eAAe,EAAE,IAAI,CACjC,CAAC,EACD,EAAO,GAAG,YAAa,UAAY,CAC/B,EAAQ,iBAAiB,CAC7B,CAAC,EACM,CACX,EACA,KAAK,IAAM,eACf,EAAA,CAAG,KAAK,EAAK,SAAS,EACtB,EAAQ,KAAO,CAEf,CAAC,GAAmB,UAAW,CACX,IAAI,QAAQ,CAAC,eAAe,EAAG,SAAS,EAAG,CAC1BA,IACT,EAAO,QAAU,EAEzB,CAAC,CACL,EAAA,CAAG,CAGb,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAGA,IAAI,EAAgB,EAAoB,IAAI,EACxC,EAAU,EAAoB,IAAI,EAClC,EAAQ,EAAoB,IAAI,EAChC,EAAe,EAAoB,IAAI,EACvC,EAAkB,EAAoB,IAAI,EAC1C,EAAU,EAAoB,IAAI,EAClC,EAAQ,EAAoB,IAAI,EAChC,EAAkB,EAAoB,IAAI,EAC1C,EAAO,EAAoB,IAAI,EAEnC,EAAO,QAAU,EAEjB,EAAI,UAAU,SAAW,EACzB,EAAI,UAAU,QAAU,EACxB,EAAI,UAAU,UAAY,EAC1B,EAAI,UAAU,cAAgB,EAC9B,EAAI,UAAU,eAAiB,EAC/B,EAAI,UAAU,UAAY,EAC1B,EAAI,UAAU,aAAe,EAC7B,EAAI,UAAU,UAAY,EAC1B,EAAI,UAAU,WAAa,EAE3B,EAAI,UAAU,WAAa,EAC3B,EAAI,UAAU,SAAW,EAEzB,EAAI,UAAU,aAAe,EAAoB,GAAG,EACpD,IAAI,EAAgB,EAAoB,GAAG,EAC3C,EAAI,UAAU,WAAa,EAAc,IACzC,EAAI,UAAU,WAAa,EAAc,IACzC,EAAI,UAAU,cAAgB,EAAc,OAC5C,EAAI,UAAU,gBAAkB,EAAc,SAE9C,IAAI,EAAe,EAAoB,IAAI,EAC3C,EAAI,gBAAkB,EAAa,WACnC,EAAI,gBAAkB,EAAa,WACnC,EAAI,gBAAkB,EAEtB,IAAI,EAAiB,yCAEjB,EAAsB,CAAE,mBAAoB,cAAe,cAAe,gBAAiB,EAC3F,EAAoB,CAAC,aAAa,EAQtC,SAAS,EAAI,EAAM,CACjB,GAAI,EAAE,gBAAgB,GAAM,OAAO,IAAI,EAAI,CAAI,EAC/C,EAAO,KAAK,MAAQ,EAAK,KAAK,CAAI,GAAK,CAAC,EACxC,GAAU,IAAI,EACd,KAAK,SAAW,CAAC,EACjB,KAAK,MAAQ,CAAC,EACd,KAAK,WAAa,CAAC,EACnB,KAAK,SAAW,EAAQ,EAAK,MAAM,EAEnC,KAAK,OAAS,EAAK,OAAS,IAAI,EAChC,KAAK,gBAAkB,CAAC,EACxB,KAAK,cAAgB,CAAC,EACtB,KAAK,MAAQ,EAAM,EACnB,KAAK,OAAS,EAAY,CAAI,EAE9B,EAAK,aAAe,EAAK,cAAgB,IACrC,EAAK,eAAiB,aAAY,EAAK,uBAAyB,IAChE,EAAK,YAAc,IAAA,KAAW,EAAK,UAAY,GACnD,KAAK,UAAY,GAAqB,IAAI,EAEtC,EAAK,SAAS,GAAkB,IAAI,EACpC,EAAK,UAAU,GAAmB,IAAI,EAC1C,EAAqB,IAAI,EACrB,OAAO,EAAK,MAAQ,UAAU,KAAK,cAAc,EAAK,IAAI,EAC1D,EAAK,UAAU,KAAK,WAAW,WAAY,CAAC,WAAY,CAAC,KAAM,SAAS,CAAC,CAAC,EAC9E,EAAkB,IAAI,CACxB,CAYA,SAAS,EAAS,EAAc,EAAM,CACpC,IAAI,EACJ,GAAI,OAAO,GAAgB,SAEzB,IADA,EAAI,KAAK,UAAU,CAAY,EAC3B,CAAC,EAAG,MAAU,MAAM,8BAAgC,EAAe,GAAG,CAAA,KACrE,CACL,IAAI,EAAY,KAAK,WAAW,CAAY,EAC5C,EAAI,EAAU,UAAY,KAAK,SAAS,CAAS,CACnD,CAEA,IAAI,EAAQ,EAAE,CAAI,EAElB,OADI,EAAE,SAAW,KAAM,KAAK,OAAS,EAAE,QAChC,CACT,CAUA,SAAS,EAAQ,EAAQ,EAAO,CAC9B,IAAI,EAAY,KAAK,WAAW,EAAQ,IAAA,GAAW,CAAK,EACxD,OAAO,EAAU,UAAY,KAAK,SAAS,CAAS,CACtD,CAYA,SAAS,EAAU,EAAQ,EAAK,EAAiB,EAAO,CACtD,GAAI,MAAM,QAAQ,CAAM,EAAE,CACxB,IAAK,IAAI,EAAE,EAAG,EAAE,EAAO,OAAQ,IAAK,KAAK,UAAU,EAAO,GAAI,IAAA,GAAW,EAAiB,CAAK,EAC/F,OAAO,IACT,CACA,IAAI,EAAK,KAAK,OAAO,CAAM,EAC3B,GAAI,IAAO,IAAA,IAAa,OAAO,GAAM,SACnC,MAAU,MAAM,0BAA0B,EAI5C,MAHA,GAAM,EAAQ,YAAY,GAAO,CAAE,EACnC,GAAY,KAAM,CAAG,EACrB,KAAK,SAAS,GAAO,KAAK,WAAW,EAAQ,EAAiB,EAAO,EAAI,EAClE,IACT,CAYA,SAAS,EAAc,EAAQ,EAAK,EAAgB,CAElD,OADA,KAAK,UAAU,EAAQ,EAAK,EAAgB,EAAI,EACzC,IACT,CAUA,SAAS,EAAe,EAAQ,EAAiB,CAC/C,IAAI,EAAU,EAAO,QACrB,GAAI,IAAY,IAAA,IAAa,OAAO,GAAW,SAC7C,MAAU,MAAM,0BAA0B,EAE5C,GADA,EAAU,GAAW,KAAK,MAAM,aAAe,EAAY,IAAI,EAC3D,CAAC,EAGH,OAFA,KAAK,OAAO,KAAK,2BAA2B,EAC5C,KAAK,OAAS,KACP,GAET,IAAI,EAAQ,KAAK,SAAS,EAAS,CAAM,EACzC,GAAI,CAAC,GAAS,EAAiB,CAC7B,IAAI,EAAU,sBAAwB,KAAK,WAAW,EACtD,GAAI,KAAK,MAAM,gBAAkB,MAAO,KAAK,OAAO,MAAM,CAAO,OAC5D,MAAU,MAAM,CAAO,CAC9B,CACA,OAAO,CACT,CAGA,SAAS,EAAY,EAAM,CACzB,IAAI,EAAO,EAAK,MAAM,KAMtB,MALA,GAAK,MAAM,YAAc,OAAO,GAAQ,SACZ,EAAK,OAAO,CAAI,GAAK,EACrB,EAAK,UAAU,CAAc,EAC3B,EACA,IAAA,GACvB,EAAK,MAAM,WACpB,CASA,SAAS,EAAU,EAAQ,CACzB,IAAI,EAAY,EAAc,KAAM,CAAM,EAC1C,OAAQ,OAAO,EAAf,CACE,IAAK,SAAU,OAAO,EAAU,UAAY,KAAK,SAAS,CAAS,EACnE,IAAK,SAAU,OAAO,KAAK,UAAU,CAAS,EAC9C,IAAK,YAAa,OAAO,EAAmB,KAAM,CAAM,CAC1D,CACF,CAGA,SAAS,EAAmB,EAAM,EAAK,CACrC,IAAI,EAAM,EAAQ,OAAO,KAAK,EAAM,CAAE,OAAQ,CAAC,CAAE,EAAG,CAAG,EACvD,GAAI,EAAK,CACP,IAAI,EAAS,EAAI,OACb,EAAO,EAAI,KACX,EAAS,EAAI,OACb,EAAI,EAAc,KAAK,EAAM,EAAQ,EAAM,IAAA,GAAW,CAAM,EAShE,MARA,GAAK,WAAW,GAAO,IAAI,EAAa,CACjC,MACL,SAAU,GACF,SACF,OACE,SACR,SAAU,CACZ,CAAC,EACM,CACT,CACF,CAGA,SAAS,EAAc,EAAM,EAAQ,CAEnC,MADA,GAAS,EAAQ,YAAY,CAAM,EAC5B,EAAK,SAAS,IAAW,EAAK,MAAM,IAAW,EAAK,WAAW,EACxE,CAYA,SAAS,EAAa,EAAc,CAClC,GAAI,aAAwB,OAG1B,OAFA,EAAkB,KAAM,KAAK,SAAU,CAAY,EACnD,EAAkB,KAAM,KAAK,MAAO,CAAY,EACzC,KAET,OAAQ,OAAO,EAAf,CACE,IAAK,YAIH,OAHA,EAAkB,KAAM,KAAK,QAAQ,EACrC,EAAkB,KAAM,KAAK,KAAK,EAClC,KAAK,OAAO,MAAM,EACX,KACT,IAAK,SACH,IAAI,EAAY,EAAc,KAAM,CAAY,EAIhD,OAHI,GAAW,KAAK,OAAO,IAAI,EAAU,QAAQ,EACjD,OAAO,KAAK,SAAS,GACrB,OAAO,KAAK,MAAM,GACX,KACT,IAAK,SACH,IAAI,EAAY,KAAK,MAAM,UACvB,EAAW,EAAY,EAAU,CAAY,EAAI,EACrD,KAAK,OAAO,IAAI,CAAQ,EACxB,IAAI,EAAK,KAAK,OAAO,CAAY,EAC7B,IACF,EAAK,EAAQ,YAAY,CAAE,EAC3B,OAAO,KAAK,SAAS,GACrB,OAAO,KAAK,MAAM,GAExB,CACA,OAAO,IACT,CAGA,SAAS,EAAkB,EAAM,EAAS,EAAO,CAC/C,IAAK,IAAI,KAAU,EAAS,CAC1B,IAAI,EAAY,EAAQ,GACpB,CAAC,EAAU,OAAS,CAAC,GAAS,EAAM,KAAK,CAAM,KACjD,EAAK,OAAO,IAAI,EAAU,QAAQ,EAClC,OAAO,EAAQ,GAEnB,CACF,CAIA,SAAS,EAAW,EAAQ,EAAgB,EAAM,EAAiB,CACjE,GAAI,OAAO,GAAU,UAAY,OAAO,GAAU,UAChD,MAAU,MAAM,oCAAoC,EACtD,IAAI,EAAY,KAAK,MAAM,UACvB,EAAW,EAAY,EAAU,CAAM,EAAI,EAC3C,EAAS,KAAK,OAAO,IAAI,CAAQ,EACrC,GAAI,EAAQ,OAAO,EAEnB,IAAqC,KAAK,MAAM,gBAAkB,GAElE,IAAI,EAAK,EAAQ,YAAY,KAAK,OAAO,CAAM,CAAC,EAC5C,GAAM,GAAiB,GAAY,KAAM,CAAE,EAE/C,IAAI,EAAe,KAAK,MAAM,iBAAmB,IAAS,CAAC,EACvD,EACA,GAAgB,EAAE,EAAgB,GAAM,GAAM,EAAQ,YAAY,EAAO,OAAO,IAClF,KAAK,eAAe,EAAQ,EAAI,EAIlC,IAAI,EAAY,IAAI,EAAa,CAC3B,KACI,SACR,UALc,EAAQ,IAAI,KAAK,KAAM,CAKlB,EACT,WACJ,MACR,CAAC,EAOD,OALI,EAAG,IAAM,KAAO,IAAiB,KAAK,MAAM,GAAM,GACtD,KAAK,OAAO,IAAI,EAAU,CAAS,EAE/B,GAAgB,GAAe,KAAK,eAAe,EAAQ,EAAI,EAE5D,CACT,CAIA,SAAS,EAAS,EAAW,EAAM,CACjC,GAAI,EAAU,UAOZ,MANA,GAAU,SAAW,EACrB,EAAa,OAAS,EAAU,OAChC,EAAa,OAAS,KACtB,EAAa,KAAO,GAAc,EAC9B,EAAU,OAAO,SAAW,KAC9B,EAAa,OAAS,IACjB,EAET,EAAU,UAAY,GAEtB,IAAI,EACA,EAAU,OACZ,EAAc,KAAK,MACnB,KAAK,MAAQ,KAAK,WAGpB,IAAI,EACJ,GAAI,CAAE,EAAI,EAAc,KAAK,KAAM,EAAU,OAAQ,EAAM,EAAU,SAAS,CAAG,OAC3E,EAAG,CAEP,MADA,OAAO,EAAU,SACX,CACR,QACQ,CACN,EAAU,UAAY,GAClB,EAAU,OAAM,KAAK,MAAQ,EACnC,CAMA,MAJA,GAAU,SAAW,EACrB,EAAU,KAAO,EAAE,KACnB,EAAU,OAAS,EAAE,OACrB,EAAU,KAAO,EAAE,KACZ,EAIP,SAAS,GAAe,CAEtB,IAAI,EAAY,EAAU,SACtB,EAAS,EAAU,MAAM,KAAM,SAAS,EAE5C,MADA,GAAa,OAAS,EAAU,OACzB,CACT,CACF,CAGA,SAAS,EAAY,EAAM,CACzB,OAAQ,EAAK,SAAb,CACE,IAAK,OAAQ,OAAO,EACpB,IAAK,KAAM,OAAO,EAClB,QAAS,OAAO,CAClB,CACF,CAGA,SAAS,EAAO,EAAQ,CAEtB,OADI,EAAO,KAAK,KAAK,OAAO,KAAK,qBAAsB,EAAO,GAAG,EAC1D,EAAO,EAChB,CAGA,SAAS,EAAQ,EAAQ,CAEvB,OADI,EAAO,IAAI,KAAK,OAAO,KAAK,oBAAqB,EAAO,EAAE,EACvD,EAAO,GAChB,CAGA,SAAS,EAAY,EAAQ,CAC3B,GAAI,EAAO,KAAO,EAAO,IAAM,EAAO,KAAO,EAAO,GAClD,MAAU,MAAM,iCAAiC,EACnD,OAAO,EAAO,KAAO,EAAO,EAC9B,CAUA,SAAS,EAAW,EAAQ,EAAS,CAEnC,GADA,IAAmB,KAAK,OACpB,CAAC,EAAQ,MAAO,YACpB,IAAqB,CAAC,EAKtB,IAAK,IAJD,EAAY,EAAQ,YAAc,IAAA,GAAY,KAAO,EAAQ,UAC7D,EAAU,EAAQ,UAAY,IAAA,GAAY,OAAS,EAAQ,QAE3D,EAAO,GACF,EAAE,EAAG,EAAE,EAAO,OAAQ,IAAK,CAClC,IAAI,EAAI,EAAO,GACX,IAAG,GAAQ,EAAU,EAAE,SAAW,IAAM,EAAE,QAAU,EAC1D,CACA,OAAO,EAAK,MAAM,EAAG,CAAC,EAAU,MAAM,CACxC,CAUA,SAAS,EAAU,EAAM,EAAQ,CAG/B,OAFI,OAAO,GAAU,WAAU,EAAS,IAAI,OAAO,CAAM,GACzD,KAAK,SAAS,GAAQ,EACf,IACT,CAGA,SAAS,EAAqB,EAAM,CAClC,IAAI,EACJ,GAAI,EAAK,MAAM,QACb,EAAc,EAAoB,IAAI,EACtC,EAAK,cAAc,EAAa,EAAY,IAAK,EAAI,GAEnD,EAAK,MAAM,OAAS,GACxB,KAAI,EAAa,EAAoB,IAAI,EACrC,EAAK,MAAM,QAAO,EAAa,EAAgB,EAAY,CAAiB,GAChF,EAAK,cAAc,EAAY,EAAgB,EAAI,EACnD,EAAK,MAAM,iCAAmC,CAHL,CAI3C,CAGA,SAAS,EAAkB,EAAM,CAC/B,IAAI,EAAc,EAAK,MAAM,QACxB,KACL,GAAI,MAAM,QAAQ,CAAW,EAAG,EAAK,UAAU,CAAW,OACrD,IAAK,IAAI,KAAO,EAAa,EAAK,UAAU,EAAY,GAAM,CAAG,CACxE,CAGA,SAAS,GAAkB,EAAM,CAC/B,IAAK,IAAI,KAAQ,EAAK,MAAM,QAAS,CACnC,IAAI,EAAS,EAAK,MAAM,QAAQ,GAChC,EAAK,UAAU,EAAM,CAAM,CAC7B,CACF,CAGA,SAAS,GAAmB,EAAM,CAChC,IAAK,IAAI,KAAQ,EAAK,MAAM,SAAU,CACpC,IAAI,EAAU,EAAK,MAAM,SAAS,GAClC,EAAK,WAAW,EAAM,CAAO,CAC/B,CACF,CAGA,SAAS,GAAY,EAAM,EAAI,CAC7B,GAAI,EAAK,SAAS,IAAO,EAAK,MAAM,GAClC,MAAU,MAAM,0BAA4B,EAAK,kBAAkB,CACvE,CAGA,SAAS,GAAqB,EAAM,CAElC,IAAK,IADD,EAAW,EAAK,KAAK,EAAK,KAAK,EAC1B,EAAE,EAAG,EAAE,EAAoB,OAAQ,IAC1C,OAAO,EAAS,EAAoB,IACtC,OAAO,CACT,CAGA,SAAS,GAAU,EAAM,CACvB,IAAI,EAAS,EAAK,MAAM,OACxB,GAAI,IAAW,GACb,EAAK,OAAS,CAAC,IAAK,GAAM,KAAM,GAAM,MAAO,EAAI,MAC5C,CAEL,GADI,IAAW,IAAA,KAAW,EAAS,SAC/B,EAAE,OAAO,GAAU,UAAY,EAAO,KAAO,EAAO,MAAQ,EAAO,OACrE,MAAU,MAAM,mDAAmD,EACrE,EAAK,OAAS,CAChB,CACF,CAGA,SAAS,IAAO,CAAC,CAGX,GAEA,MACC,SAAS,EAAQ,CAExB,aAIA,IAAI,EAAQ,EAAO,QAAU,UAAiB,CAC5C,KAAK,OAAS,CAAC,CACjB,EAGA,EAAM,UAAU,IAAM,SAAmB,EAAK,EAAO,CACnD,KAAK,OAAO,GAAO,CACrB,EAGA,EAAM,UAAU,IAAM,SAAmB,EAAK,CAC5C,OAAO,KAAK,OAAO,EACrB,EAGA,EAAM,UAAU,IAAM,SAAmB,EAAK,CAC5C,OAAO,KAAK,OAAO,EACrB,EAGA,EAAM,UAAU,MAAQ,UAAuB,CAC7C,KAAK,OAAS,CAAC,CACjB,CAGM,GAEA,KACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAGA,IAAI,EAAmB,EAAoB,IAAI,CAAC,CAAC,WAEjD,EAAO,QAAU,EAYjB,SAAS,EAAa,EAAQ,EAAM,EAAU,CAI5C,IAAI,EAAO,KACX,GAAI,OAAO,KAAK,MAAM,YAAc,WAClC,MAAU,MAAM,yCAAyC,EAEvD,OAAO,GAAQ,aACjB,EAAW,EACX,EAAO,IAAA,IAGT,IAAI,EAAI,EAAiB,CAAM,CAAC,CAAC,KAAK,UAAY,CAChD,IAAI,EAAY,EAAK,WAAW,EAAQ,IAAA,GAAW,CAAI,EACvD,OAAO,EAAU,UAAY,EAAc,CAAS,CACtD,CAAC,EASD,OAPI,GACF,EAAE,KACA,SAAS,EAAG,CAAE,EAAS,KAAM,CAAC,CAAG,EACjC,CACF,EAGK,EAGP,SAAS,EAAiB,EAAK,CAC7B,IAAI,EAAU,EAAI,QAClB,OAAO,GAAW,CAAC,EAAK,UAAU,CAAO,EAC/B,EAAa,KAAK,EAAM,CAAE,KAAM,CAAQ,EAAG,EAAI,EAC/C,QAAQ,QAAQ,CAC5B,CAGA,SAAS,EAAc,EAAW,CAChC,GAAI,CAAE,OAAO,EAAK,SAAS,CAAS,CAAG,OACjC,EAAG,CACP,GAAI,aAAa,EAAiB,OAAO,EAAkB,CAAC,EAC5D,MAAM,CACR,CAGA,SAAS,EAAkB,EAAG,CAC5B,IAAI,EAAM,EAAE,cACZ,GAAI,EAAM,CAAG,EAAG,MAAU,MAAM,UAAY,EAAM,kBAAoB,EAAE,WAAa,qBAAqB,EAE1G,IAAI,EAAgB,EAAK,gBAAgB,GAMzC,OALK,IACH,EAAgB,EAAK,gBAAgB,GAAO,EAAK,MAAM,WAAW,CAAG,EACrE,EAAc,KAAK,EAAe,CAAa,GAG1C,EAAc,KAAK,SAAU,EAAK,CACvC,GAAI,CAAC,EAAM,CAAG,EACZ,OAAO,EAAiB,CAAG,CAAC,CAAC,KAAK,UAAY,CACvC,EAAM,CAAG,GAAG,EAAK,UAAU,EAAK,EAAK,IAAA,GAAW,CAAI,CAC3D,CAAC,CAEL,CAAC,CAAC,CAAC,KAAK,UAAW,CACjB,OAAO,EAAc,CAAS,CAChC,CAAC,EAED,SAAS,GAAgB,CACvB,OAAO,EAAK,gBAAgB,EAC9B,CAEA,SAAS,EAAM,EAAK,CAClB,OAAO,EAAK,MAAM,IAAQ,EAAK,SAAS,EAC1C,CACF,CACF,CACF,CAGM,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAGA,IAAI,EAAU,EAAoB,IAAI,EAEtC,EAAO,QAAU,CACf,WAAY,EAAc,CAAe,EACzC,WAAY,EAAc,CAAe,CAC3C,EAGA,SAAS,EAAgB,EAAQ,CAC/B,KAAK,QAAU,oBACf,KAAK,OAAS,EACd,KAAK,IAAM,KAAK,WAAa,EAC/B,CAGA,EAAgB,QAAU,SAAU,EAAQ,EAAK,CAC/C,MAAO,2BAA8B,EAAM,YAAc,CAC3D,EAGA,SAAS,EAAgB,EAAQ,EAAK,EAAS,CAC7C,KAAK,QAAU,GAAW,EAAgB,QAAQ,EAAQ,CAAG,EAC7D,KAAK,WAAa,EAAQ,IAAI,EAAQ,CAAG,EACzC,KAAK,cAAgB,EAAQ,YAAY,EAAQ,SAAS,KAAK,UAAU,CAAC,CAC5E,CAGA,SAAS,EAAc,EAAU,CAG/B,MAFA,GAAS,UAAY,OAAO,OAAO,MAAM,SAAS,EAClD,EAAS,UAAU,YAAc,EAC1B,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAGA,IAAI,EAAO,EAAoB,IAAI,EAE/B,EAAO,6BACP,EAAO,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAC7C,EAAO,0DACP,EAAW,wGACX,EAAM,+nCACN,EAAS,yoCAET,EAAc,oLAKd,EAAM,grDACN,EAAO,+DACP,EAAe,4BACf,EAA4B,+DAC5B,EAAwB,mDAG5B,EAAO,QAAU,EAEjB,SAAS,EAAQ,EAAM,CAErB,MADA,GAAO,GAAQ,OAAS,OAAS,OAC1B,EAAK,KAAK,EAAQ,EAAK,CAChC,CAGA,EAAQ,KAAO,CAEb,KAAM,6BAEN,KAAM,8EACN,YAAa,0GAEb,IAAK,6CACL,gBAAiB,0EACjB,eAAgB,EAChB,IAAK,EAIL,MAAO,mHACP,SAAU,EAEV,KAAM,4EAEN,KAAM,qpCACC,QAEP,KAAM,EAGN,eAAgB,EAChB,4BAA6B,EAE7B,wBAAyB,CAC3B,EAGA,EAAQ,KAAO,CACP,OACA,OACN,YAAa,EACR,MACL,gBAAiB,EACjB,eAAgB,EAChB,IAAK,EACL,MAAO,2IACP,SAAU,EACV,KAAM,4EACN,KAAM,qpCACC,QACP,KAAM,EACN,eAAgB,EAChB,4BAA6B,EAC7B,wBAAyB,CAC3B,EAGA,SAAS,EAAW,EAAM,CAExB,OAAO,EAAO,GAAM,IAAM,EAAO,KAAQ,GAAK,EAAO,KAAQ,EAC/D,CAGA,SAAS,EAAK,EAAK,CAEjB,IAAI,EAAU,EAAI,MAAM,CAAI,EAC5B,GAAI,CAAC,EAAS,MAAO,GAErB,IAAI,EAAO,CAAC,EAAQ,GAChB,EAAQ,CAAC,EAAQ,GACjB,EAAM,CAAC,EAAQ,GAEnB,OAAO,GAAS,GAAK,GAAS,IAAM,GAAO,GACnC,IAAQ,GAAS,GAAK,EAAW,CAAI,EAAI,GAAK,EAAK,GAC7D,CAGA,SAAS,EAAK,EAAK,EAAM,CACvB,IAAI,EAAU,EAAI,MAAM,CAAI,EAC5B,GAAI,CAAC,EAAS,MAAO,GAErB,IAAI,EAAO,EAAQ,GACf,EAAS,EAAQ,GACjB,EAAS,EAAQ,GACjB,EAAW,EAAQ,GACvB,OAAS,GAAQ,IAAM,GAAU,IAAM,GAAU,IACxC,GAAQ,IAAM,GAAU,IAAM,GAAU,MACzC,CAAC,GAAQ,EACnB,CAGA,IAAI,EAAsB,QAC1B,SAAS,EAAU,EAAK,CAEtB,IAAI,EAAW,EAAI,MAAM,CAAmB,EAC5C,OAAO,EAAS,QAAU,GAAK,EAAK,EAAS,EAAE,GAAK,EAAK,EAAS,GAAI,EAAI,CAC5E,CAGA,IAAI,EAAmB,OACvB,SAAS,EAAI,EAAK,CAEhB,OAAO,EAAiB,KAAK,CAAG,GAAK,EAAI,KAAK,CAAG,CACnD,CAGA,IAAI,EAAW,WACf,SAAS,EAAM,EAAK,CAClB,GAAI,EAAS,KAAK,CAAG,EAAG,MAAO,GAC/B,GAAI,CAEF,OADA,IAAI,OAAO,CAAG,EACP,EACT,MAAW,CACT,MAAO,EACT,CACF,CAGM,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAGA,IAAI,EAAU,EAAoB,IAAI,EAClC,EAAO,EAAoB,IAAI,EAC/B,EAAe,EAAoB,IAAI,EACvC,EAAkB,EAAoB,IAAI,EAE1C,EAAoB,EAAoB,IAAI,EAM5C,EAAa,EAAK,WAClB,EAAQ,EAAoB,IAAI,EAGhC,EAAkB,EAAa,WAEnC,EAAO,QAAU,EAYjB,SAAS,EAAQ,EAAQ,EAAM,EAAW,EAAQ,CAGhD,IAAI,EAAO,KACP,EAAO,KAAK,MACZ,EAAS,CAAE,IAAA,EAAU,EACrB,EAAO,CAAC,EACR,EAAW,CAAC,EACZ,EAAe,CAAC,EAChB,EAAW,CAAC,EACZ,EAAe,CAAC,EAChB,EAAc,CAAC,EAEnB,SAAS,EAAY,EAAG,EAAU,CAChC,IAAI,EAAa,EAAK,OAAS,SAAW,aAC1C,MAAO,cAAgB,EAAI,MAAQ,EAAa,IAAM,EAAK,eAAe,EAAS,EAAE,EAAI,IAC3F,CAEA,IAAe,CAAU,SAAgB,SAAc,MAAK,EAE5D,IAAI,EAAI,EAAe,KAAK,KAAM,EAAQ,EAAM,CAAM,EAClD,EAAc,KAAK,cAAc,EAAE,OACvC,GAAI,EAAE,UAAW,MAAQ,GAAY,aAAe,EAEpD,IAAI,EAAU,KAAK,SACf,EAAQ,KAAK,MAEjB,GAAI,CACF,IAAI,EAAI,EAAa,EAAQ,EAAM,EAAW,CAAM,EACpD,EAAY,SAAW,EACvB,IAAI,EAAK,EAAY,aAUrB,OATI,IACF,EAAG,OAAS,EAAE,OACd,EAAG,OAAS,KACZ,EAAG,KAAO,EAAE,KACZ,EAAG,OAAS,EAAE,OACd,EAAG,KAAO,EAAE,KACZ,EAAG,OAAS,EAAE,OACV,EAAK,aAAY,EAAG,OAAS,EAAE,SAE9B,CACT,QAAU,CACR,EAAa,KAAK,KAAM,EAAQ,EAAM,CAAM,CAC9C,CAGA,SAAS,GAAe,CAEtB,IAAI,EAAW,EAAY,SACvB,EAAS,EAAS,MAAM,KAAM,SAAS,EAE3C,MADA,GAAa,OAAS,EAAS,OACxB,CACT,CAEA,SAAS,EAAa,EAAS,EAAO,EAAW,EAAQ,CACvD,IAAI,EAAS,CAAC,GAAU,GAAS,EAAM,QAAU,EACjD,GAAI,EAAM,QAAU,EAAK,OACvB,OAAO,EAAQ,KAAK,EAAM,EAAS,EAAO,EAAW,CAAM,EAE7D,IAAI,EAAS,EAAQ,SAAW,GAE5B,EAAa,EAAkB,CACjC,MAAO,GACP,OAAQ,EACA,SACA,SACR,KAAM,EACN,WAAY,GACZ,cAAe,IACf,UAAW,KACX,gBAAiB,EAAa,WACvB,QACP,SAAU,EACJ,OACG,UACG,aACA,cACA,cACG,iBACT,OACG,UACT,OAAQ,EAAK,OACP,MACR,CAAC,EAED,EAAa,EAAK,EAAQ,CAAU,EAAI,EAAK,EAAU,CAAW,EACjD,EAAK,EAAU,CAAW,EAAI,EAAK,EAAa,CAAc,EAC9D,EAEb,EAAK,cAAa,EAAa,EAAK,YAAY,EAAY,CAAO,GAEvE,IAAI,EACJ,GAAI,CAgBF,EAfuB,SACrB,OACA,QACA,UACA,OACA,SACA,WACA,cACA,QACA,aACA,kBACA,SACA,CAGoB,CAAC,CACrB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAK,MACP,EAEA,EAAO,GAAK,CACd,OAAQ,EAAG,CAET,MADA,EAAK,OAAO,MAAM,yCAA0C,CAAU,EAChE,CACR,CAgBA,MAdA,GAAS,OAAS,EAClB,EAAS,OAAS,KAClB,EAAS,KAAO,EAChB,EAAS,OAAS,EAClB,EAAS,KAAO,EAAS,EAAW,EAChC,IAAQ,EAAS,OAAS,IAC1B,EAAK,aAAe,KACtB,EAAS,OAAS,CAChB,KAAM,EACI,WACA,UACZ,GAGK,CACT,CAEA,SAAS,EAAW,EAAQ,EAAK,EAAQ,CACvC,EAAM,EAAQ,IAAI,EAAQ,CAAG,EAC7B,IAAI,EAAW,EAAK,GAChB,EAAS,EACb,GAAI,IAAa,IAAA,GAGf,MAFA,GAAU,EAAO,GACjB,EAAU,UAAY,EAAW,IAC1B,GAAY,EAAS,CAAO,EAErC,GAAI,CAAC,GAAU,EAAK,KAAM,CACxB,IAAI,EAAY,EAAK,KAAK,GAC1B,GAAI,IAAc,IAAA,GAGhB,MAFA,GAAU,EAAK,OAAO,GACtB,EAAU,EAAY,EAAK,CAAO,EAC3B,GAAY,EAAS,CAAO,CAEvC,CAEA,EAAU,EAAY,CAAG,EACzB,IAAI,EAAI,EAAQ,KAAK,EAAM,EAAc,EAAM,CAAG,EAClD,GAAI,IAAM,IAAA,GAAW,CACnB,IAAI,EAAc,GAAa,EAAU,GACrC,IACF,EAAI,EAAQ,UAAU,EAAa,EAAK,UAAU,EAC5C,EACA,EAAQ,KAAK,EAAM,EAAa,EAAM,EAAW,CAAM,EAEjE,CAEA,GAAI,IAAM,IAAA,GACR,GAAe,CAAG,OAGlB,OADA,GAAgB,EAAK,CAAC,EACf,GAAY,EAAG,CAAO,CAEjC,CAEA,SAAS,EAAY,EAAK,EAAG,CAC3B,IAAI,EAAQ,EAAO,OAGnB,MAFA,GAAO,GAAS,EAChB,EAAK,GAAO,EACL,SAAW,CACpB,CAEA,SAAS,GAAe,EAAK,CAC3B,OAAO,EAAK,EACd,CAEA,SAAS,GAAgB,EAAK,EAAG,CAC/B,IAAI,EAAQ,EAAK,GACjB,EAAO,GAAS,CAClB,CAEA,SAAS,GAAY,EAAQ,EAAM,CACjC,OAAO,OAAO,GAAU,UAAY,OAAO,GAAU,UAC3C,CAAQ,OAAM,OAAQ,EAAQ,OAAQ,EAAK,EAC3C,CAAQ,OAAM,OAAQ,GAAU,CAAC,CAAC,EAAO,MAAO,CAC5D,CAEA,SAAS,GAAW,EAAU,CAC5B,IAAI,EAAQ,EAAa,GAKzB,OAJI,IAAU,IAAA,KACZ,EAAQ,EAAa,GAAY,EAAS,OAC1C,EAAS,GAAS,GAEb,UAAY,CACrB,CAEA,SAAS,GAAW,EAAO,CACzB,OAAQ,OAAO,EAAf,CACE,IAAK,UACL,IAAK,SACH,MAAO,GAAK,EACd,IAAK,SACH,OAAO,EAAK,eAAe,CAAK,EAClC,IAAK,SACH,GAAI,IAAU,KAAM,MAAO,OAC3B,IAAI,EAAW,EAAgB,CAAK,EAChC,EAAQ,EAAa,GAKzB,OAJI,IAAU,IAAA,KACZ,EAAQ,EAAa,GAAY,EAAS,OAC1C,EAAS,GAAS,GAEb,UAAY,CACvB,CACF,CAEA,SAAS,GAAc,EAAM,EAAQ,EAAc,EAAI,CACrD,GAAI,EAAK,MAAM,iBAAmB,GAAO,CACvC,IAAI,EAAO,EAAK,WAAW,aAC3B,GAAI,GAAQ,CAAC,EAAK,MAAM,SAAS,EAAS,CACxC,OAAO,OAAO,UAAU,eAAe,KAAK,EAAc,CAAO,CACnE,CAAC,EACC,MAAU,MAAM,kDAAoD,EAAK,KAAK,GAAG,CAAC,EAEpF,IAAI,EAAiB,EAAK,WAAW,eACrC,GAAI,GAEE,CADQ,EAAe,CAClB,EAAG,CACV,IAAI,EAAU,8BAAgC,EAAK,WAAW,EAAe,MAAM,EACnF,GAAI,EAAK,MAAM,gBAAkB,MAAO,EAAK,OAAO,MAAM,CAAO,OAC5D,MAAU,MAAM,CAAO,CAC9B,CAEJ,CAEA,IAAI,EAAU,EAAK,WAAW,QAC1B,EAAS,EAAK,WAAW,OACzB,EAAQ,EAAK,WAAW,MAExB,EACJ,GAAI,EACF,EAAW,EAAQ,KAAK,EAAM,EAAQ,EAAc,CAAE,OACjD,GAAI,EACT,EAAW,EAAM,KAAK,EAAM,EAAQ,EAAc,CAAE,EAChD,EAAK,iBAAmB,IAAO,EAAK,eAAe,EAAU,EAAI,OAChE,GAAI,EACT,EAAW,EAAO,KAAK,EAAM,EAAI,EAAK,QAAS,EAAQ,CAAY,OAGnE,GADA,EAAW,EAAK,WAAW,SACvB,CAAC,EAAU,OAGjB,GAAI,IAAa,IAAA,GACf,MAAU,MAAM,mBAAqB,EAAK,QAAU,oBAAoB,EAE1E,IAAI,EAAQ,EAAY,OAGxB,MAFA,GAAY,GAAS,EAEd,CACL,KAAM,aAAe,EACX,UACZ,CACF,CACF,CAWA,SAAS,EAAe,EAAQ,EAAM,EAAQ,CAE5C,IAAI,EAAQ,EAAU,KAAK,KAAM,EAAQ,EAAM,CAAM,EAQrD,OAPI,GAAS,EAAU,CAAS,QAAO,UAAW,EAAK,GACvD,EAAQ,KAAK,cAAc,OAC3B,KAAK,cAAc,GAAS,CAClB,SACF,OACE,QACV,EACO,CAAS,QAAO,UAAW,EAAM,EAC1C,CAUA,SAAS,EAAa,EAAQ,EAAM,EAAQ,CAE1C,IAAI,EAAI,EAAU,KAAK,KAAM,EAAQ,EAAM,CAAM,EAC7C,GAAK,GAAG,KAAK,cAAc,OAAO,EAAG,CAAC,CAC5C,CAWA,SAAS,EAAU,EAAQ,EAAM,EAAQ,CAEvC,IAAK,IAAI,EAAE,EAAG,EAAE,KAAK,cAAc,OAAQ,IAAK,CAC9C,IAAI,EAAI,KAAK,cAAc,GAC3B,GAAI,EAAE,QAAU,GAAU,EAAE,MAAQ,GAAQ,EAAE,QAAU,EAAQ,OAAO,CACzE,CACA,MAAO,EACT,CAGA,SAAS,EAAY,EAAG,CACtB,MAAO,cAAgB,EAAI,eAAiB,EAAI,IAClD,CAGA,SAAS,EAAW,EAAG,EAAQ,CAC7B,OAAO,EAAO,KAAO,IAAA,GAAY,GAAK,aAAe,EAAI,aAAe,EAAI,IAC9E,CAGA,SAAS,EAAe,EAAG,CACzB,MAAO,iBAAmB,EAAI,kBAAoB,EAAI,IACxD,CAGA,SAAS,EAAK,EAAK,EAAW,CAC5B,GAAI,CAAC,EAAI,OAAQ,MAAO,GAExB,IAAK,IADD,EAAO,GACF,EAAE,EAAG,EAAE,EAAI,OAAQ,IAC1B,GAAQ,EAAU,EAAG,CAAG,EAC1B,OAAO,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAGA,IAAI,EAAM,EAAoB,IAAI,EAC9B,EAAQ,EAAoB,IAAI,EAChC,EAAO,EAAoB,IAAI,EAC/B,EAAe,EAAoB,IAAI,EACvC,EAAW,EAAoB,IAAI,EAEvC,EAAO,QAAU,EAEjB,EAAQ,YAAc,EACtB,EAAQ,SAAW,EACnB,EAAQ,IAAM,EACd,EAAQ,IAAM,EACd,EAAQ,UAAY,EACpB,EAAQ,OAAS,EAUjB,SAAS,EAAQ,EAAS,EAAM,EAAK,CAEnC,IAAI,EAAS,KAAK,MAAM,GACxB,GAAI,OAAO,GAAU,SACnB,GAAI,KAAK,MAAM,GAAS,EAAS,KAAK,MAAM,QACvC,OAAO,EAAQ,KAAK,KAAM,EAAS,EAAM,CAAM,EAItD,GADA,IAAmB,KAAK,SAAS,GAC7B,aAAkB,EACpB,OAAO,EAAU,EAAO,OAAQ,KAAK,MAAM,UAAU,EAC3C,EAAO,OACP,EAAO,UAAY,KAAK,SAAS,CAAM,EAGnD,IAAI,EAAM,EAAc,KAAK,KAAM,EAAM,CAAG,EACxC,EAAQ,EAAG,EAef,OAdI,IACF,EAAS,EAAI,OACb,EAAO,EAAI,KACX,EAAS,EAAI,QAGX,aAAkB,EACpB,EAAI,EAAO,UAAY,EAAQ,KAAK,KAAM,EAAO,OAAQ,EAAM,IAAA,GAAW,CAAM,EACvE,IAAW,IAAA,KACpB,EAAI,EAAU,EAAQ,KAAK,MAAM,UAAU,EACrC,EACA,EAAQ,KAAK,KAAM,EAAQ,EAAM,IAAA,GAAW,CAAM,GAGnD,CACT,CAUA,SAAS,EAAc,EAAM,EAAK,CAEhC,IAAI,EAAI,EAAI,MAAM,CAAG,EACjB,EAAU,EAAa,CAAC,EACxB,EAAS,EAAY,KAAK,OAAO,EAAK,MAAM,CAAC,EACjD,GAAI,OAAO,KAAK,EAAK,MAAM,CAAC,CAAC,SAAW,GAAK,IAAY,EAAQ,CAC/D,IAAI,EAAK,EAAY,CAAO,EACxB,EAAS,KAAK,MAAM,GACxB,GAAI,OAAO,GAAU,SACnB,OAAO,EAAiB,KAAK,KAAM,EAAM,EAAQ,CAAC,EAC7C,GAAI,aAAkB,EACtB,EAAO,UAAU,KAAK,SAAS,CAAM,EAC1C,EAAO,OAGP,GADA,EAAS,KAAK,SAAS,GACnB,aAAkB,EAAc,CAElC,GADK,EAAO,UAAU,KAAK,SAAS,CAAM,EACtC,GAAM,EAAY,CAAG,EACvB,MAAO,CAAE,OAAQ,EAAc,OAAc,QAAO,EACtD,EAAO,CACT,MACE,OAGJ,GAAI,CAAC,EAAK,OAAQ,OAClB,EAAS,EAAY,KAAK,OAAO,EAAK,MAAM,CAAC,CAC/C,CACA,OAAO,EAAe,KAAK,KAAM,EAAG,EAAQ,EAAK,OAAQ,CAAI,CAC/D,CAIA,SAAS,EAAiB,EAAM,EAAK,EAAW,CAE9C,IAAI,EAAM,EAAc,KAAK,KAAM,EAAM,CAAG,EAC5C,GAAI,EAAK,CACP,IAAI,EAAS,EAAI,OACb,EAAS,EAAI,OACjB,EAAO,EAAI,KACX,IAAI,EAAK,KAAK,OAAO,CAAM,EAE3B,OADI,IAAI,EAAS,EAAW,EAAQ,CAAE,GAC/B,EAAe,KAAK,KAAM,EAAW,EAAQ,EAAQ,CAAI,CAClE,CACF,CAGA,IAAI,EAAuB,EAAK,OAAO,CAAC,aAAc,oBAAqB,OAAQ,eAAgB,aAAa,CAAC,EAEjH,SAAS,EAAe,EAAW,EAAQ,EAAQ,EAAM,CAEvD,KAAU,SAAW,EAAU,UAAY,GACvC,EAAU,SAAS,MAAM,EAAE,CAAC,GAAK,IAGrC,KAAK,IAFD,EAAQ,EAAU,SAAS,MAAM,GAAG,EAE/B,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAI,EAAO,EAAM,GACjB,GAAI,EAAM,CAGR,GAFA,EAAO,EAAK,iBAAiB,CAAI,EACjC,EAAS,EAAO,GACZ,IAAW,IAAA,GAAW,MAC1B,IAAI,EACJ,GAAI,CAAC,EAAqB,KACxB,EAAK,KAAK,OAAO,CAAM,EACnB,IAAI,EAAS,EAAW,EAAQ,CAAE,GAClC,EAAO,MAAM,CACf,IAAI,EAAO,EAAW,EAAQ,EAAO,IAAI,EACrC,EAAM,EAAc,KAAK,KAAM,EAAM,CAAI,EACzC,IACF,EAAS,EAAI,OACb,EAAO,EAAI,KACX,EAAS,EAAI,OAEjB,CAEJ,CACF,CACA,GAAI,IAAW,IAAA,IAAa,IAAW,EAAK,OAC1C,MAAO,CAAU,SAAc,OAAc,QAAO,CAFtD,CAGF,CAGA,IAAI,EAAiB,EAAK,OAAO,CAC/B,OAAQ,SAAU,UAClB,YAAa,YACb,gBAAiB,gBACjB,WAAY,WACZ,UAAW,UACX,cAAe,aACf,WAAY,MACd,CAAC,EACD,SAAS,EAAU,EAAQ,EAAO,CAChC,GAAI,IAAU,GAAO,MAAO,GAC5B,GAAI,IAAU,IAAA,IAAa,IAAU,GAAM,OAAO,EAAW,CAAM,EAC9D,GAAI,EAAO,OAAO,EAAU,CAAM,GAAK,CAC9C,CAGA,SAAS,EAAW,EAAQ,CAC1B,IAAI,EACJ,GAAI,MAAM,QAAQ,CAAM,EACtB,KAAK,IAAI,EAAE,EAAG,EAAE,EAAO,OAAQ,IAE7B,GADA,EAAO,EAAO,GACV,OAAO,GAAQ,UAAY,CAAC,EAAW,CAAI,EAAG,MAAO,EAC3D,MAEA,IAAK,IAAI,KAAO,EAGd,GAFI,GAAO,SACX,EAAO,EAAO,GACV,OAAO,GAAQ,UAAY,CAAC,EAAW,CAAI,GAAG,MAAO,GAG7D,MAAO,EACT,CAGA,SAAS,EAAU,EAAQ,CACzB,IAAI,EAAQ,EAAG,EACf,GAAI,MAAM,QAAQ,CAAM,EACtB,KAAK,IAAI,EAAE,EAAG,EAAE,EAAO,OAAQ,IAG7B,GAFA,EAAO,EAAO,GACV,OAAO,GAAQ,WAAU,GAAS,EAAU,CAAI,GAChD,GAAS,IAAU,MAAO,IAChC,MAEA,IAAK,IAAI,KAAO,EAAQ,CACtB,GAAI,GAAO,OAAQ,MAAO,KAC1B,GAAI,EAAe,GACjB,SAIA,GAFA,EAAO,EAAO,GACV,OAAO,GAAQ,WAAU,GAAS,EAAU,CAAI,EAAI,GACpD,GAAS,IAAU,MAAO,IAElC,CAEF,OAAO,CACT,CAGA,SAAS,EAAY,EAAI,EAAW,CAGlC,OAFI,IAAc,KAAO,EAAK,EAAY,CAAE,GAErC,EADC,EAAI,MAAM,CACE,CAAC,CACvB,CAGA,SAAS,EAAa,EAAG,CACvB,OAAO,EAAI,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAK,GAC1C,CAGA,IAAI,EAAsB,QAC1B,SAAS,EAAY,EAAI,CACvB,OAAO,EAAK,EAAG,QAAQ,EAAqB,EAAE,EAAI,EACpD,CAGA,SAAS,EAAW,EAAQ,EAAI,CAE9B,MADA,GAAK,EAAY,CAAE,EACZ,EAAI,QAAQ,EAAQ,CAAE,CAC/B,CAIA,SAAS,EAAW,EAAQ,CAC1B,IAAI,EAAW,EAAY,KAAK,OAAO,CAAM,CAAC,EAC1C,EAAU,CAAC,GAAI,CAAQ,EACvB,EAAY,CAAC,GAAI,EAAY,EAAU,EAAK,CAAC,EAC7C,EAAY,CAAC,EACb,EAAO,KAgCX,OA9BA,EAAS,EAAQ,CAAC,QAAS,EAAI,EAAG,SAAS,EAAK,EAAS,EAAY,EAAe,EAAe,EAAc,EAAU,CACrH,OAAY,GAChB,KAAI,EAAK,EAAK,OAAO,CAAG,EACpB,EAAS,EAAQ,GACjB,EAAW,EAAU,GAAiB,IAAM,EAIhD,GAHI,IAAa,IAAA,KACf,GAAY,KAAO,OAAO,GAAY,SAAW,EAAW,EAAK,eAAe,CAAQ,IAEtF,OAAO,GAAM,SAAU,CACzB,EAAK,EAAS,EAAY,EAAS,EAAI,QAAQ,EAAQ,CAAE,EAAI,CAAE,EAE/D,IAAI,EAAS,EAAK,MAAM,GAExB,GADI,OAAO,GAAU,WAAU,EAAS,EAAK,MAAM,IAC/C,GAAU,EAAO,WACf,CAAC,EAAM,EAAK,EAAO,MAAM,EAC3B,MAAU,MAAM,OAAS,EAAK,oCAAoC,CAAA,MAC/D,GAAI,GAAM,EAAY,CAAQ,EACnC,GAAI,EAAG,IAAM,IAAK,CAChB,GAAI,EAAU,IAAO,CAAC,EAAM,EAAK,EAAU,EAAG,EAC5C,MAAU,MAAM,OAAS,EAAK,oCAAoC,EACpE,EAAU,GAAM,CAClB,KACE,GAAK,MAAM,GAAM,CAGvB,CACA,EAAQ,GAAW,EACnB,EAAU,GAAW,CAzBG,CA0B1B,CAAC,EAEM,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAGA,IAAI,EAAc,EAAoB,IAAI,EACtC,EAAU,EAAoB,IAAI,CAAC,CAAC,OAExC,EAAO,QAAU,UAAiB,CAChC,IAAI,EAAQ,CACV,CAAE,KAAM,SACN,MAAO,CAAE,CAAE,QAAW,CAAC,kBAAkB,CAAE,EAClC,CAAE,QAAW,CAAC,kBAAkB,CAAE,EAAG,aAAc,QAAQ,CAAE,EACxE,CAAE,KAAM,SACN,MAAO,CAAE,YAAa,YAAa,UAAW,QAAS,CAAE,EAC3D,CAAE,KAAM,QACN,MAAO,CAAE,WAAY,WAAY,QAAS,WAAY,aAAc,CAAE,EACxE,CAAE,KAAM,SACN,MAAO,CAAE,gBAAiB,gBAAiB,WAAY,eAAgB,gBAC9D,CAAE,WAAc,CAAC,uBAAwB,mBAAmB,CAAE,CAAE,CAAE,EAC7E,CAAE,MAAO,CAAE,OAAQ,QAAS,OAAQ,MAAO,QAAS,QAAS,QAAS,IAAK,CAAE,CAC/E,EAEI,EAAM,CAAE,OAAQ,UAAW,EA4C/B,MAnCA,GAAM,IAAM,EAAO,CAAG,EACtB,EAAM,MAAQ,EAAO,CAFP,SAAU,UAAW,SAAU,QAAS,SAAU,UAAW,MAEtD,CAAK,EAE1B,EAAM,QAAQ,SAAU,EAAO,CAC7B,EAAM,MAAQ,EAAM,MAAM,IAAI,SAAU,EAAS,CAC/C,IAAI,EACJ,GAAI,OAAO,GAAW,SAAU,CAC9B,IAAI,EAAM,OAAO,KAAK,CAAO,CAAC,CAAC,GAC/B,EAAe,EAAQ,GACvB,EAAU,EACV,EAAa,QAAQ,SAAU,EAAG,CAChC,EAAI,KAAK,CAAC,EACV,EAAM,IAAI,GAAK,EACjB,CAAC,CACH,CAOA,OANA,EAAI,KAAK,CAAO,EAMT,EALU,IAAI,GAAW,CACrB,UACT,KAAM,EAAY,GAClB,WAAY,CACd,CAEF,CAAC,EAED,EAAM,IAAI,SAAW,CACnB,QAAS,WACT,KAAM,EAAY,QACpB,EAEI,EAAM,OAAM,EAAM,MAAM,EAAM,MAAQ,EAC5C,CAAC,EAED,EAAM,SAAW,EAAO,EAAI,OAAO,CAvCjC,UAAW,MAAO,KAAM,QAAS,SAAU,QAC3C,cAAe,UAAW,cAC1B,WAAY,WAAY,YACxB,mBAAoB,kBACpB,kBAAmB,OAAQ,MAmCM,CAAQ,CAAC,EAC5C,EAAM,OAAS,CAAC,EAET,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAGA,IAAI,EAAO,EAAoB,IAAI,EAEnC,EAAO,QAAU,EAEjB,SAAS,EAAa,EAAK,CACzB,EAAK,KAAK,EAAK,IAAI,CACrB,CAGM,GAEA,KACC,SAAS,EAAQ,CAExB,aAKA,EAAO,QAAU,SAAoB,EAAK,CAKxC,IAJA,IAAI,EAAS,EACT,EAAM,EAAI,OACV,EAAM,EACN,EACG,EAAM,GACX,IACA,EAAQ,EAAI,WAAW,GAAK,EACxB,GAAS,OAAU,GAAS,OAAU,EAAM,IAE9C,EAAQ,EAAI,WAAW,CAAG,GACrB,EAAQ,QAAW,OAAQ,KAGpC,OAAO,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAIA,EAAO,QAAU,CACT,OACS,gBACC,iBACD,gBACP,SACK,cACC,eACd,MAAO,EAAoB,IAAI,EAC/B,WAAY,EAAoB,GAAG,EACpB,gBACH,aACI,iBACM,uBACF,qBACJ,iBACH,cACJ,UACA,UACS,mBACG,sBACL,iBACG,mBACrB,EAGA,SAAS,EAAK,EAAG,EAAI,CAEnB,IAAK,IAAI,IADT,KAAW,CAAC,EACI,EAAG,EAAG,GAAO,EAAE,GAC/B,OAAO,CACT,CAGA,SAAS,EAAc,EAAU,EAAM,EAAe,EAAQ,CAC5D,IAAI,EAAQ,EAAS,QAAU,QAC3B,EAAM,EAAS,OAAS,OACxB,EAAK,EAAS,IAAM,GACpB,EAAM,EAAS,GAAK,IACxB,OAAQ,EAAR,CACE,IAAK,OAAQ,OAAO,EAAO,EAAQ,OACnC,IAAK,QAAS,OAAO,EAAK,iBAAmB,EAAO,IACpD,IAAK,SAAU,MAAO,IAAM,EAAK,EAAO,EAClB,UAAY,EAAO,EAAQ,WAAa,EACxC,EAAM,iBAAmB,EAAO,KACtD,IAAK,UAAW,MAAO,WAAa,EAAO,EAAQ,WAAa,EACzC,EAAM,IAAM,EAAO,QACnB,EAAM,EAAO,EAAQ,GACpB,EAAiB,EAAM,EAAK,YAAc,EAAO,IAAO,IAAM,IACtF,IAAK,SAAU,MAAO,WAAa,EAAO,EAAQ,IAAM,EAAW,KAC5C,EAAiB,EAAM,EAAK,YAAc,EAAO,IAAO,IAAM,IACrF,QAAS,MAAO,UAAY,EAAO,EAAQ,IAAM,EAAW,GAC9D,CACF,CAGA,SAAS,EAAe,EAAW,EAAM,EAAe,CACtD,OAAQ,EAAU,OAAlB,CACE,IAAK,GAAG,OAAO,EAAc,EAAU,GAAI,EAAM,EAAe,EAAI,EACpE,QACE,IAAI,EAAO,GACP,EAAQ,EAAO,CAAS,EAS5B,IAAK,IAAI,KARL,EAAM,OAAS,EAAM,SACvB,EAAO,EAAM,KAAO,IAAK,KAAO,EAAO,OACvC,GAAQ,UAAY,EAAO,iBAC3B,OAAO,EAAM,KACb,OAAO,EAAM,MACb,OAAO,EAAM,QAEX,EAAM,QAAQ,OAAO,EAAM,QACjB,EACZ,IAAS,EAAO,OAAS,IAAO,EAAc,EAAG,EAAM,EAAe,EAAI,EAE5E,OAAO,CACX,CACF,CAGA,IAAI,EAAkB,EAAO,CAAE,SAAU,SAAU,UAAW,UAAW,MAAO,CAAC,EACjF,SAAS,EAAc,EAAmB,EAAW,CACnD,GAAI,MAAM,QAAQ,CAAS,EAAG,CAE5B,IAAK,IADD,EAAQ,CAAC,EACJ,EAAE,EAAG,EAAE,EAAU,OAAQ,IAAK,CACrC,IAAI,EAAI,EAAU,IACd,EAAgB,IACX,IAAsB,SAAW,IAAM,WADxB,EAAM,EAAM,QAAU,EAEhD,CACA,GAAI,EAAM,OAAQ,OAAO,CAC3B,MAAO,GAAI,EAAgB,GACzB,MAAO,CAAC,CAAS,OACZ,GAAI,IAAsB,SAAW,IAAc,QACxD,MAAO,CAAC,OAAO,CAEnB,CAGA,SAAS,EAAO,EAAK,CAEnB,IAAK,IADD,EAAO,CAAC,EACH,EAAE,EAAG,EAAE,EAAI,OAAQ,IAAK,EAAK,EAAI,IAAM,GAChD,OAAO,CACT,CAGA,IAAI,EAAa,wBACb,EAAe,QACnB,SAAS,EAAY,EAAK,CACxB,OAAO,OAAO,GAAO,SACX,IAAM,EAAM,IACZ,EAAW,KAAK,CAAG,EACjB,IAAM,EACN,KAAO,EAAa,CAAG,EAAI,IACzC,CAGA,SAAS,EAAa,EAAK,CACzB,OAAO,EAAI,QAAQ,EAAc,MAAM,CAAC,CAC7B,QAAQ,MAAO,KAAK,CAAC,CACrB,QAAQ,MAAO,KAAK,CAAC,CACrB,QAAQ,MAAO,KAAK,CAAC,CACrB,QAAQ,MAAO,KAAK,CACjC,CAGA,SAAS,EAAc,EAAK,EAAS,CACnC,GAAW,SACX,IAAI,EAAU,EAAI,MAAM,IAAI,OAAO,EAAS,GAAG,CAAC,EAChD,OAAO,EAAU,EAAQ,OAAS,CACpC,CAGA,SAAS,EAAW,EAAK,EAAS,EAAM,CAGtC,MAFA,IAAW,WACX,EAAO,EAAK,QAAQ,MAAO,MAAM,EAC1B,EAAI,QAAQ,IAAI,OAAO,EAAS,GAAG,EAAG,EAAO,IAAI,CAC1D,CAGA,SAAS,EAAe,EAAQ,EAAO,CACrC,GAAI,OAAO,GAAU,UAAW,MAAO,CAAC,EACxC,IAAK,IAAI,KAAO,EAAQ,GAAI,EAAM,GAAM,MAAO,EACjD,CAGA,SAAS,EAAqB,EAAQ,EAAO,EAAe,CAC1D,GAAI,OAAO,GAAU,UAAW,MAAO,CAAC,GAAU,GAAiB,MACnE,IAAK,IAAI,KAAO,EAAQ,GAAI,GAAO,GAAiB,EAAM,GAAM,MAAO,EACzE,CAGA,SAAS,EAAmB,EAAQ,EAAO,CACrC,UAAO,GAAU,UACrB,KAAK,IAAI,KAAO,EAAQ,GAAI,CAAC,EAAM,GAAM,OAAO,CAAA,CAClD,CAGA,SAAS,EAAe,EAAK,CAC3B,MAAO,IAAO,EAAa,CAAG,EAAI,GACpC,CAGA,SAAS,EAAY,EAAa,EAAM,EAAc,EAAU,CAI9D,OAAO,EAAU,EAHN,EACG,SAAa,GAAQ,EAAW,GAAK,8CACpC,EAAW,SAAa,EAAO,SAAa,YAAiB,EAAO,WACjD,CACpC,CAGA,SAAS,EAAQ,EAAa,EAAM,EAAc,CAIhD,OAAO,EAAU,EAFH,EADH,EACkB,IAAM,EAAkB,CAAI,EAC5B,EAAY,CAAI,CAAC,CACZ,CACpC,CAGA,IAAI,EAAe,sBACf,EAAwB,mCAC5B,SAAS,EAAQ,EAAO,EAAK,EAAO,CAClC,IAAI,EAAI,EAAa,EAAM,EAC3B,GAAI,IAAU,GAAI,MAAO,WACzB,GAAI,EAAM,IAAM,IAAK,CACnB,GAAI,CAAC,EAAa,KAAK,CAAK,EAAG,MAAU,MAAM,yBAA2B,CAAK,EAC/E,EAAc,EACd,EAAO,UACT,KAAO,CAEL,GADA,EAAU,EAAM,MAAM,CAAqB,EACvC,CAAC,EAAS,MAAU,MAAM,yBAA2B,CAAK,EAG9D,GAFA,EAAK,CAAC,EAAQ,GACd,EAAc,EAAQ,GAClB,GAAe,IAAK,CACtB,GAAI,GAAM,EAAK,MAAU,MAAM,gCAAkC,EAAK,gCAAkC,CAAG,EAC3G,OAAO,EAAM,EAAM,EACrB,CAEA,GAAI,EAAK,EAAK,MAAU,MAAM,sBAAwB,EAAK,gCAAkC,CAAG,EAEhG,GADA,EAAO,QAAW,EAAM,GAAO,IAC3B,CAAC,EAAa,OAAO,CAC3B,CAIA,IAAK,IAFD,EAAO,EACP,EAAW,EAAY,MAAM,GAAG,EAC3B,EAAE,EAAG,EAAE,EAAS,OAAQ,IAAK,CACpC,IAAI,EAAU,EAAS,GACnB,IACF,GAAQ,EAAY,EAAoB,CAAO,CAAC,EAChD,GAAQ,OAAS,EAErB,CACA,OAAO,CACT,CAGA,SAAS,EAAW,EAAG,EAAG,CAExB,OADI,GAAK,KAAa,GACd,EAAI,MAAQ,EAAA,CAAG,QAAQ,iBAAkB,IAAI,CACvD,CAGA,SAAS,EAAiB,EAAK,CAC7B,OAAO,EAAoB,mBAAmB,CAAG,CAAC,CACpD,CAGA,SAAS,EAAe,EAAK,CAC3B,OAAO,mBAAmB,EAAkB,CAAG,CAAC,CAClD,CAGA,SAAS,EAAkB,EAAK,CAC9B,OAAO,EAAI,QAAQ,KAAM,IAAI,CAAC,CAAC,QAAQ,MAAO,IAAI,CACpD,CAGA,SAAS,EAAoB,EAAK,CAChC,OAAO,EAAI,QAAQ,MAAO,GAAG,CAAC,CAAC,QAAQ,MAAO,GAAG,CACnD,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAGA,IAAI,EAAW,CACb,aACA,UACA,mBACA,UACA,mBACA,YACA,YACA,UACA,kBACA,WACA,WACA,cACA,gBACA,gBACA,WACA,uBACA,OACA,SACA,OACF,EAEA,EAAO,QAAU,SAAU,EAAY,EAAsB,CAC3D,IAAK,IAAI,EAAE,EAAG,EAAE,EAAqB,OAAQ,IAAK,CAChD,EAAa,KAAK,MAAM,KAAK,UAAU,CAAU,CAAC,EAClD,IAAI,EAAW,EAAqB,EAAE,CAAC,MAAM,GAAG,EAC5C,EAAW,EACX,EACJ,IAAK,EAAE,EAAG,EAAE,EAAS,OAAQ,IAC3B,EAAW,EAAS,EAAS,IAE/B,IAAK,EAAE,EAAG,EAAE,EAAS,OAAQ,IAAK,CAChC,IAAI,EAAM,EAAS,GACf,EAAS,EAAS,GAClB,IACF,EAAS,GAAO,CACd,MAAO,CACL,EACA,CAAE,KAAM,gFAAiF,CAC3F,CACF,EAEJ,CACF,CAEA,OAAO,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAGA,IAAI,EAAa,EAAoB,IAAI,EAEzC,EAAO,QAAU,CACf,IAAK,4EACL,YAAa,CACX,YAAa,EAAW,YAAY,WACtC,EACA,KAAM,SACN,aAAc,CACZ,OAAQ,CAAC,UAAU,EACnB,MAAO,CAAC,UAAU,EAClB,WAAY,CAAC,QAAQ,EACrB,MAAO,CAAC,IAAK,CAAC,SAAU,CAAC,OAAO,CAAC,CAAC,CACpC,EACA,WAAY,CACV,KAAM,EAAW,WAAW,KAC5B,OAAQ,CAAC,KAAM,SAAS,EACxB,WAAY,CAAC,KAAM,SAAS,EAC5B,aAAc,CACZ,KAAM,QACN,MAAO,CAAC,KAAM,QAAQ,CACxB,EACA,WAAY,CAAC,KAAM,QAAQ,EAC3B,UAAW,CAAC,KAAM,SAAS,EAC3B,MAAO,CAAC,KAAM,SAAS,EACvB,MAAO,CAAC,KAAM,SAAS,EACvB,MAAO,CAAC,KAAM,SAAS,EACvB,OAAQ,CACN,MAAO,CACL,CAAC,KAAM,SAAS,EAChB,CAAC,MAAO,MAAM,CAChB,CACF,CACF,CACF,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAyB,EAAI,EAAU,EAAW,CACjE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EACA,EAAQ,QAAU,GAAY,IAC9B,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAChD,EACE,GACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,EAAe,SAAW,GAE1B,EAAe,EAEjB,IAAI,EAAS,GAAY,UACvB,EAAoB,EAAS,mBAAqB,mBAClD,EAAc,EAAG,OAAO,GACxB,EAAc,EAAG,KAAK,OAAS,GAAe,EAAY,MAC1D,EAAM,EAAS,IAAM,IACrB,EAAS,EAAS,IAAM,IACxB,EAAgB,IAAA,GAClB,GAAI,EAAE,GAAW,OAAO,GAAW,UAAY,IAAY,IAAA,IACzD,MAAU,MAAM,EAAW,iBAAiB,EAE9C,GAAI,EAAE,GAAe,IAAgB,IAAA,IAAa,OAAO,GAAe,UAAY,OAAO,GAAe,WACxG,MAAU,MAAM,EAAoB,4BAA4B,EAElE,GAAI,EAAa,CACf,IAAI,EAAmB,EAAG,KAAK,QAAQ,EAAY,MAAO,EAAU,EAAG,WAAW,EAChF,EAAa,YAAc,EAC3B,EAAY,WAAa,EACzB,EAAgB,eAAiB,EACjC,EAAU,KAAO,EACjB,EAAS,OAAU,EAAU,OAC/B,GAAO,kBAAqB,EAAQ,MAAS,EAAoB,KACjE,EAAmB,aAAe,EAClC,GAAO,QAAW,EAAc,SAAY,EAAa,aAAgB,EAAoB,SAAY,EAAa,oBAAyB,EAAa,sBAA2B,EAAa,mBACpM,IAAI,EAAgB,EAChB,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,iBAAoB,GAAiB,mBAAqB,oCAA0C,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,iBACtL,EAAG,KAAK,WAAa,KACvB,GAAO,gBAAoB,EAAqB,wBAE9C,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,gBACH,IACF,GAAO,KAAQ,EAAgB,4BAA+B,EAAgB,qBAEhF,GAAO,IAAO,EAAa,qBAA0B,EAAc,MAAS,EAAgB,qBAAwB,EAAoB,IAAO,EAAO,KAAQ,EAAgB,OAAU,EAAS,IAAO,EAAU,KAAQ,EAAoB,MAAS,EAAS,IAAO,EAAU,IAAO,EAAgB,WAAc,EAAc,MAAS,EAAoB,gBAAmB,EAAS,IAAO,EAAU,KAAQ,EAAgB,MAAS,EAAS,IAAO,EAAU,IAAO,EAAgB,SAAY,EAAS,QAAW,EAAS,aAAgB,EAAQ,MAAS,EAAc,OAAW,EAAO,QAAa,EAAO,OAC1lB,IAAY,IAAA,KACd,EAAgB,EAChB,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAe,EACf,EAAU,EAEd,KAAO,CACL,IAAI,EAAgB,OAAO,GAAe,SACxC,EAAS,EACX,GAAI,GAAiB,EAAS,CAC5B,IAAI,EAAU,IAAO,EAAS,IAC9B,GAAO,SACH,IACF,GAAO,KAAQ,EAAgB,4BAA+B,EAAgB,qBAEhF,GAAO,MAAS,EAAgB,qBAAwB,EAAe,IAAO,EAAO,KAAQ,EAAgB,MAAS,EAAS,IAAO,EAAU,KAAQ,EAAe,MAAS,EAAS,IAAO,EAAU,IAAO,EAAgB,SAAY,EAAS,QAAW,EAAS,MAC5Q,KAAO,CACD,GAAiB,IAAY,IAAA,IAC/B,EAAa,GACb,EAAgB,EAChB,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAe,EACf,GAAU,MAEN,IAAe,EAAe,KAAK,EAAS,MAAQ,MAAM,CAAC,EAAa,CAAO,GAC/E,KAAiB,IAAgB,IACnC,EAAa,GACb,EAAgB,EAChB,EAAiB,EAAG,cAAgB,IAAM,EAC1C,GAAU,MAEV,EAAa,GACb,GAAU,MAGd,IAAI,EAAU,IAAO,EAAS,IAC9B,GAAO,SACH,IACF,GAAO,KAAQ,EAAgB,4BAA+B,EAAgB,qBAEhF,GAAO,IAAO,EAAS,IAAO,EAAU,IAAO,EAAgB,OAAU,EAAS,QAAW,EAAS,MACxG,CACF,CACA,IAAiC,EACjC,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAqBtB,GAAO,QApBP,GAAO,iBAAoB,GAAiB,UAAY,oCAA0C,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,4BAA+B,EAAW,YAAe,EAAgB,gBAAmB,EAAc,MACvR,EAAG,KAAK,WAAa,KACvB,GAAO,0BAA8B,EAAU,IAC3C,EACF,GAAO,OAAW,EAElB,GAAO,GAAM,EAAgB,KAG7B,EAAG,KAAK,UACV,GAAO,eACH,EACF,GAAO,kBAAqB,EAE5B,GAAO,GAAM,EAEf,GAAO,2CAA8C,EAAG,WAAc,YAAe,EAAS,KAEhG,GAAO,OAIT,IAAI,EAAQ,EAgBZ,MAfA,GAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,MACH,IACF,GAAO,YAEF,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAA8B,EAAI,EAAU,EAAW,CACtE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EACA,EAAQ,QAAU,GAAY,IAC9B,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAChD,EAOF,GANI,GACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,EAAe,SAAW,GAE1B,EAAe,EAEb,EAAE,GAAW,OAAO,GAAW,UACjC,MAAU,MAAM,EAAW,iBAAiB,EAE9C,IAAI,EAAM,GAAY,WAAa,IAAM,IACzC,GAAO,QACH,IACF,GAAO,KAAQ,EAAgB,4BAA+B,EAAgB,qBAEhF,GAAO,IAAO,EAAS,WAAc,EAAO,IAAO,EAAgB,OACnE,IAAI,EAAgB,EAChB,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GA4BtB,GAAO,QA3BP,GAAO,iBAAoB,GAAiB,eAAiB,oCAA0C,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,uBAA0B,EAAgB,MAC5N,EAAG,KAAK,WAAa,KACvB,GAAO,gCACH,GAAY,WACd,GAAO,OAEP,GAAO,QAET,GAAO,SACH,EACF,GAAO,OAAW,EAAgB,OAElC,GAAO,GAAM,EAEf,GAAO,YAEL,EAAG,KAAK,UACV,GAAO,eACH,EACF,GAAO,kBAAqB,EAE5B,GAAO,GAAM,EAEf,GAAO,2CAA8C,EAAG,WAAc,YAAe,EAAS,KAEhG,GAAO,OAIT,IAAI,EAAQ,EAgBZ,MAfA,GAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,KACH,IACF,GAAO,YAEF,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAA+B,EAAI,EAAU,EAAW,CACvE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EACA,EAAQ,QAAU,GAAY,IAC9B,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAChD,EAOF,GANI,GACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,EAAe,SAAW,GAE1B,EAAe,EAEb,EAAE,GAAW,OAAO,GAAW,UACjC,MAAU,MAAM,EAAW,iBAAiB,EAE9C,IAAI,EAAM,GAAY,YAAc,IAAM,IAC1C,GAAO,QACH,IACF,GAAO,KAAQ,EAAgB,4BAA+B,EAAgB,qBAE5E,EAAG,KAAK,UAAY,GACtB,GAAO,IAAO,EAAS,WAEvB,GAAO,eAAkB,EAAS,KAEpC,GAAO,IAAO,EAAO,IAAO,EAAgB,OAC5C,IAAI,EAAgB,EAChB,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GA4BtB,GAAO,QA3BP,GAAO,iBAAoB,GAAiB,gBAAkB,oCAA0C,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,uBAA0B,EAAgB,MAC7N,EAAG,KAAK,WAAa,KACvB,GAAO,8BACH,GAAY,YACd,GAAO,SAEP,GAAO,UAET,GAAO,SACH,EACF,GAAO,OAAW,EAAgB,OAElC,GAAO,GAAM,EAEf,GAAO,iBAEL,EAAG,KAAK,UACV,GAAO,eACH,EACF,GAAO,kBAAqB,EAE5B,GAAO,GAAM,EAEf,GAAO,2CAA8C,EAAG,WAAc,YAAe,EAAS,KAEhG,GAAO,OAIT,IAAI,EAAQ,EAgBZ,MAfA,GAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,KACH,IACF,GAAO,YAEF,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAmC,EAAI,EAAU,EAAW,CAC3E,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EACA,EAAQ,QAAU,GAAY,IAC9B,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAChD,EAOF,GANI,GACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,EAAe,SAAW,GAE1B,EAAe,EAEb,EAAE,GAAW,OAAO,GAAW,UACjC,MAAU,MAAM,EAAW,iBAAiB,EAE9C,IAAI,EAAM,GAAY,gBAAkB,IAAM,IAC9C,GAAO,QACH,IACF,GAAO,KAAQ,EAAgB,4BAA+B,EAAgB,qBAEhF,GAAO,gBAAmB,EAAS,YAAe,EAAO,IAAO,EAAgB,OAChF,IAAI,EAAgB,EAChB,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GA4BtB,GAAO,QA3BP,GAAO,iBAAoB,GAAiB,oBAAsB,oCAA0C,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,uBAA0B,EAAgB,MACjO,EAAG,KAAK,WAAa,KACvB,GAAO,gCACH,GAAY,gBACd,GAAO,OAEP,GAAO,QAET,GAAO,SACH,EACF,GAAO,OAAW,EAAgB,OAElC,GAAO,GAAM,EAEf,GAAO,iBAEL,EAAG,KAAK,UACV,GAAO,eACH,EACF,GAAO,kBAAqB,EAE5B,GAAO,GAAM,EAEf,GAAO,2CAA8C,EAAG,WAAc,YAAe,EAAS,KAEhG,GAAO,OAIT,IAAI,EAAQ,EAgBZ,MAfA,GAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,KACH,IACF,GAAO,YAEF,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAwB,EAAI,EAAU,EAAW,CAChE,IAAI,EAAM,IACN,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAM,EAAG,KAAK,KAAK,CAAE,EACrB,EAAiB,GACrB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAC3B,EAAiB,EAAI,OACvB,EAAmB,GACjB,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,EAAM,EAAK,GACb,EAAK,EAAK,OAAS,EACd,EAAK,GACV,EAAO,EAAK,GAAM,IACb,EAAG,KAAK,eAAkB,OAAO,GAAQ,UAAY,OAAO,KAAK,CAAI,CAAC,CAAC,OAAS,GAAM,IAAS,GAAQ,EAAG,KAAK,eAAe,EAAM,EAAG,MAAM,GAAG,KACnJ,EAAmB,GACnB,EAAI,OAAS,EACb,EAAI,WAAa,EAAc,IAAM,EAAK,IAC1C,EAAI,cAAgB,EAAiB,IAAM,EAC3C,GAAO,KAAQ,EAAG,SAAS,CAAG,EAAK,IACnC,EAAI,OAAS,EACT,IACF,GAAO,QAAW,EAAc,OAChC,GAAkB,MAY1B,OAPI,IACE,EACF,GAAO,gBAEP,GAAO,IAAO,EAAe,MAAM,EAAG,EAAE,EAAK,KAG1C,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAwB,EAAI,EAAU,EAAW,CAChE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAQ,SAAW,EACnB,EAAM,EAAG,KAAK,KAAK,CAAE,EACrB,EAAiB,GACrB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAI/B,GAHqB,EAAQ,MAAM,SAAS,EAAM,CAChD,OAAQ,EAAG,KAAK,eAAkB,OAAO,GAAQ,UAAY,OAAO,KAAK,CAAI,CAAC,CAAC,OAAS,GAAM,IAAS,GAAQ,EAAG,KAAK,eAAe,EAAM,EAAG,MAAM,GAAG,CAC1J,CACiB,EAAG,CAClB,IAAI,EAAiB,EAAI,OACzB,GAAO,QAAW,EAAS,kBAAqB,EAAU,cAC1D,IAAI,EAAgB,EAAG,cACvB,EAAG,cAAgB,EAAI,cAAgB,GACvC,IAAI,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,EAAM,EAAK,GACb,EAAK,EAAK,OAAS,EACd,EAAK,GACV,EAAO,EAAK,GAAM,GAClB,EAAI,OAAS,EACb,EAAI,WAAa,EAAc,IAAM,EAAK,IAC1C,EAAI,cAAgB,EAAiB,IAAM,EAC3C,GAAO,KAAQ,EAAG,SAAS,CAAG,EAAK,IACnC,EAAI,OAAS,EACb,GAAO,IAAO,EAAU,MAAS,EAAU,OAAU,EAAc,UAAa,EAAU,OAC1F,GAAkB,IAGtB,EAAG,cAAgB,EAAI,cAAgB,EACvC,GAAO,IAAO,EAAkB,SAAY,EAAU,qBAClD,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,sDAAyE,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,iBAC3J,EAAG,KAAK,WAAa,KACvB,GAAO,oDAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,GAAO,+EACH,CAAC,EAAG,eAAiB,IAEnB,EAAG,MACL,GAAO,wCAEP,GAAO,8CAGX,GAAO,uBAA0B,EAAS,iCAAoC,EAAS,sBAAyB,EAAS,4BACrH,EAAG,KAAK,YACV,GAAO,MAEX,MACM,IACF,GAAO,iBAGX,OAAO,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAA0B,EAAI,EAAU,EAAW,CAClE,IAAI,EAAM,IACN,EAAU,EAAG,OAAO,GACpB,EAAiB,EAAG,cAAgB,IAAM,EACzB,EAAG,KAAK,UAC7B,IAAI,EAAW,EAAG,KAAK,eAAe,CAAO,EAM7C,OALI,EAAG,KAAK,WAAa,GACvB,GAAO,gBAAmB,EAAY,KAC7B,OAAO,EAAG,KAAK,UAAY,aACpC,GAAO,wBAA2B,EAAY,KAAQ,EAAG,KAAK,eAAe,CAAc,EAAK,4BAE3F,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAwB,EAAI,EAAU,EAAW,CAChE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAE9C,IACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,GAA0B,GAIvB,IACH,GAAO,cAAiB,EAAQ,qBAAwB,EAAe,KAEzE,GAAO,OAAU,EAAU,YAAe,EAAS,WAAc,EAAQ,WAAc,EAAU,SACjG,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,sDAAyE,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,oCAAuC,EAAQ,MAC1M,EAAG,KAAK,WAAa,KACvB,GAAO,8CAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EAgBZ,MAfA,GAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,KACH,IACF,GAAO,YAEF,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAA2B,EAAI,EAAU,EAAW,CACnE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAQ,SAAW,EACnB,EAAM,EAAG,KAAK,KAAK,CAAE,EACrB,EAAiB,GACrB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAC3B,EAAO,IAAM,EACf,EAAW,EAAI,UAAY,EAAG,UAAY,EAC1C,EAAY,OAAS,EACrB,EAAiB,EAAG,OACpB,EAAmB,EAAG,KAAK,eAAkB,OAAO,GAAW,UAAY,OAAO,KAAK,CAAO,CAAC,CAAC,OAAS,GAAM,IAAY,GAAQ,EAAG,KAAK,eAAe,EAAS,EAAG,MAAM,GAAG,EAEjL,GADA,GAAO,OAAU,EAAS,iBAAoB,EAAU,IACpD,EAAiB,CACnB,IAAI,EAAgB,EAAG,cACvB,EAAG,cAAgB,EAAI,cAAgB,GACvC,EAAI,OAAS,EACb,EAAI,WAAa,EACjB,EAAI,cAAgB,EACpB,GAAO,QAAW,EAAc,sBAAyB,EAAQ,SAAY,EAAQ,MAAS,EAAS,YAAe,EAAQ,SAC9H,EAAI,UAAY,EAAG,KAAK,YAAY,EAAG,UAAW,EAAM,EAAG,KAAK,aAAc,EAAI,EAClF,IAAI,EAAY,EAAQ,IAAM,EAAO,IACrC,EAAI,YAAY,GAAY,EAC5B,IAAI,EAAQ,EAAG,SAAS,CAAG,EAC3B,EAAI,OAAS,EACT,EAAG,KAAK,cAAc,EAAO,CAAS,EAAI,EAC5C,GAAO,IAAO,EAAG,KAAK,WAAW,EAAO,EAAW,CAAS,EAAK,IAEjE,GAAO,QAAW,EAAa,MAAS,EAAa,KAAQ,EAAS,IAExE,GAAO,QAAW,EAAc,eAChC,EAAG,cAAgB,EAAI,cAAgB,EACvC,GAAO,IAAO,EAAkB,SAAY,EAAc,KAC5D,KACE,IAAO,QAAW,EAAS,kBAE7B,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,yDAA4E,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,iBAC9J,EAAG,KAAK,WAAa,KACvB,GAAO,8CAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EAmBZ,MAlBA,GAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,aACH,IACF,GAAO,cAAiB,EAAS,iCAAoC,EAAS,sBAAyB,EAAS,6BAE9G,EAAG,KAAK,YACV,GAAO,OAEF,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAyB,EAAI,EAAU,EAAW,CACjE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EACA,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAQ,SAAW,EACnB,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAChD,EACE,GACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,EAAe,SAAW,GAE1B,EAAe,EAEjB,IAAI,EAAQ,KACV,EAAc,aAAe,EAC7B,EAAQ,EAAM,WACd,EAAiB,GACf,EAAU,EAAS,EAAQ,EAAe,EAC9C,GAAI,GAAW,EAAM,MAAO,CAC1B,EAAgB,kBAAoB,EACpC,IAAI,EAAkB,EAAM,eAC5B,GAAO,QAAW,EAAe,oBAAwB,EAAY,sBAA0B,EAAiB,MAAS,EAAe,YAC1I,KAAO,CAEL,GADA,EAAgB,EAAG,cAAc,EAAO,EAAS,EAAG,OAAQ,CAAE,EAC1D,CAAC,EAAe,OACpB,EAAe,kBAAoB,EACnC,EAAgB,EAAc,KAC9B,EAAW,EAAM,QACjB,EAAU,EAAM,OAChB,EAAS,EAAM,KACjB,CACA,IAAI,EAAY,EAAgB,UAC9B,EAAK,IAAM,EACX,EAAW,UAAY,EACvB,EAAgB,EAAM,MACxB,GAAI,GAAiB,CAAC,EAAG,MAAO,MAAU,MAAM,8BAA8B,EAa9E,GAZM,GAAW,IACf,GAAO,GAAM,EAAa,YAE5B,GAAO,OAAU,EAAS,iBAAoB,EAAU,IACpD,GAAW,EAAM,QACnB,GAAkB,IAClB,GAAO,QAAW,EAAgB,qBAAwB,EAAU,qBAChE,IACF,GAAkB,IAClB,GAAO,IAAO,EAAU,MAAS,EAAe,mBAAsB,EAAgB,UAAa,EAAU,SAG7G,EACE,EAAM,WACR,GAAO,IAAO,EAAc,SAAY,IAExC,GAAO,IAAO,EAAU,MAAS,EAAc,SAAY,UAExD,GAAI,EAAQ,CACjB,IAAI,EAAM,EAAG,KAAK,KAAK,CAAE,EACrB,EAAiB,GACrB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAC/B,EAAI,OAAS,EAAc,SAC3B,EAAI,WAAa,GACjB,IAAI,EAAgB,EAAG,cACvB,EAAG,cAAgB,EAAI,cAAgB,GACvC,IAAI,EAAQ,EAAG,SAAS,CAAG,CAAC,CAAC,QAAQ,oBAAqB,CAAa,EACvE,EAAG,cAAgB,EAAI,cAAgB,EACvC,GAAO,IAAO,CAChB,KAAO,CACL,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACN,GAAO,KAAQ,EAAiB,UAC5B,EAAG,KAAK,YACV,GAAO,OAEP,GAAO,OAEL,GAAY,EAAM,SAAW,GAC/B,GAAO,MAAS,EAAS,IAEzB,GAAO,MAAS,EAAgB,MAAS,EAAS,qBAAwB,EAAG,WAAc,IAE7F,GAAO,sBACH,EAAG,WAAa,OAClB,GAAO,MAAS,EAAG,WAErB,IAAI,EAAc,EAAW,QAAW,EAAW,GAAM,IAAM,aAC7D,EAAsB,EAAW,EAAG,YAAY,GAAY,qBAC9D,GAAO,MAAS,EAAe,MAAS,EAAuB,kBAC/D,IAAI,EAAuB,EAC3B,EAAM,EAAW,IAAI,EACjB,EAAM,SAAW,IACnB,GAAO,IAAO,EAAU,MACpB,IACF,GAAO,UAET,GAAO,GAAM,EAAwB,MAEjC,GACF,EAAY,eAAiB,EAC7B,GAAO,QAAW,EAAa,kBAAqB,EAAU,YAAe,EAAwB,mBAAsB,EAAU,+CAAkD,EAAa,iCAEpM,GAAO,IAAO,EAAa,YAAe,EAAU,MAAS,EAAwB,IAG3F,CAKA,GAJI,EAAM,YACR,GAAO,QAAW,EAAe,KAAQ,EAAS,MAAS,EAAe,IAAO,EAAuB,MAE1G,GAAO,GAAM,EACT,EAAM,MACJ,IACF,GAAO,qBAEJ,CACL,GAAO,SACH,EAAM,QAAU,IAAA,IAClB,GAAO,KACH,EACF,GAAO,GAAM,EAEb,GAAO,GAAM,GAGf,GAAO,IAAO,CAAC,EAAM,MAAS,IAEhC,GAAO,OACP,EAAgB,EAAM,QACtB,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACN,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,iBAAoB,GAAiB,UAAY,oCAA0C,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,0BAA8B,EAAM,QAAW,OAC5N,EAAG,KAAK,WAAa,KACvB,GAAO,6BAAiC,EAAM,QAAW,0BAEvD,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,IAAI,GAAkB,EACtB,EAAM,EAAW,IAAI,EACjB,EACE,EAAM,OACJ,EAAM,QAAU,SAClB,GAAO,cAAiB,EAAM,IAAO,EAAS,KAAQ,EAAM,YAAe,EAAM,aAAgB,EAAY,cAAiB,EAAM,UAAa,EAAY,4BAA+B,EAAY,kCAAuC,EAAG,UAAa,SAAY,EAAY,gCAAmC,EAAY,kBAAqB,EAAkB,QACzW,EAAG,KAAK,UACV,GAAO,IAAO,EAAY,aAAgB,EAAgB,KAAQ,EAAY,WAAc,EAAS,MAEvG,GAAO,OAGL,EAAM,SAAW,GACnB,GAAO,IAAO,GAAmB,KAEjC,GAAO,QAAW,EAAS,iBAAoB,GAAmB,uBAA0B,EAAM,IAAO,EAAS,KAAQ,EAAM,YAAe,EAAM,aAAgB,EAAY,cAAiB,EAAM,UAAa,EAAY,4BAA+B,EAAY,kCAAuC,EAAG,UAAa,SAAY,EAAY,gCAAmC,EAAY,kBAAqB,EAAkB,QAC7a,EAAG,KAAK,UACV,GAAO,IAAO,EAAY,aAAgB,EAAgB,KAAQ,EAAY,WAAc,EAAS,MAEvG,GAAO,SAGF,GACT,GAAO,kBACH,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,iBAAoB,GAAiB,UAAY,oCAA0C,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,0BAA8B,EAAM,QAAW,OAC5N,EAAG,KAAK,WAAa,KACvB,GAAO,6BAAiC,EAAM,QAAW,0BAEvD,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,GAAO,+EACH,CAAC,EAAG,eAAiB,IAEnB,EAAG,MACL,GAAO,wCAEP,GAAO,+CAIP,EAAM,SAAW,GACnB,GAAO,IAAO,GAAmB,KAEjC,GAAO,sBAAyB,EAAa,wCAA2C,EAAa,mCAAsC,EAAa,yCAA4C,EAAM,IAAO,EAAS,KAAQ,EAAM,YAAe,EAAM,aAAgB,EAAY,cAAiB,EAAM,UAAa,EAAY,4BAA+B,EAAY,kCAAuC,EAAG,UAAa,MAAS,EAAY,kBAAqB,EAAkB,OACne,EAAG,KAAK,UACV,GAAO,IAAO,EAAY,aAAgB,EAAgB,KAAQ,EAAY,WAAc,EAAS,MAEvG,GAAO,eAAkB,GAAmB,OAGhD,GAAO,MACH,IACF,GAAO,WAEX,CACA,OAAO,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAA+B,EAAI,EAAU,EAAW,CACvE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAQ,SAAW,EACnB,EAAM,EAAG,KAAK,KAAK,CAAE,EACrB,EAAiB,GACrB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAC3B,EAAc,CAAC,EACjB,EAAgB,CAAC,EACjB,EAAiB,EAAG,KAAK,cAC3B,IAAK,KAAa,EACZ,MAAa,YACjB,KAAI,EAAO,EAAQ,GACf,EAAQ,MAAM,QAAQ,CAAI,EAAI,EAAgB,EAClD,EAAM,GAAa,CAFA,CAIrB,GAAO,OAAU,EAAS,aAC1B,IAAI,EAAoB,EAAG,UAE3B,IAAK,IAAI,IADT,IAAO,cAAiB,EAAQ,IACV,EAEpB,GADA,EAAQ,EAAc,GAClB,EAAM,OAAQ,CAKhB,GAJA,GAAO,SAAY,EAAU,EAAG,KAAK,YAAY,CAAS,EAAK,kBAC3D,IACF,GAAO,4CAA+C,EAAS,MAAU,EAAG,KAAK,aAAa,CAAS,EAAK,OAE1G,EAAe,CACjB,GAAO,SACP,IAAI,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,EAAc,EAAK,GACrB,EAAK,EAAK,OAAS,EACd,EAAK,GAAI,CACd,EAAe,EAAK,GAAM,GACtB,IACF,GAAO,QAET,IAAI,EAAQ,EAAG,KAAK,YAAY,CAAY,EAC1C,EAAW,EAAQ,EACrB,GAAO,QAAW,EAAY,kBAC1B,IACF,GAAO,8CAAiD,EAAS,MAAU,EAAG,KAAK,aAAa,CAAY,EAAK,OAEnH,GAAO,gBAAmB,EAAQ,MAAS,EAAG,KAAK,eAAe,EAAG,KAAK,aAAe,EAAe,CAAK,EAAK,MACpH,CAEF,GAAO,SACP,IAAI,EAAgB,UAAY,EAC9B,EAAmB,OAAU,EAAgB,OAC3C,EAAG,KAAK,yBACV,EAAG,UAAY,EAAG,KAAK,aAAe,EAAG,KAAK,YAAY,EAAmB,EAAe,EAAI,EAAI,EAAoB,MAAQ,GAElI,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAgBtB,GAAO,QAfP,GAAO,6DAAgF,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,2BAA+B,EAAG,KAAK,aAAa,CAAS,EAAK,wBAA6B,EAAoB,iBAAqB,EAAM,OAAU,YAAgB,EAAG,KAAK,aAAa,EAAM,QAAU,EAAI,EAAM,GAAK,EAAM,KAAK,IAAI,CAAC,EAAK,OACnZ,EAAG,KAAK,WAAa,KACvB,GAAO,4BACH,EAAM,QAAU,EAClB,GAAO,YAAe,EAAG,KAAK,aAAa,EAAM,EAAE,EAEnD,GAAO,cAAiB,EAAG,KAAK,aAAa,EAAM,KAAK,IAAI,CAAC,EAE/D,GAAO,kBAAqB,EAAG,KAAK,aAAa,CAAS,EAAK,iBAE7D,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,8EAErC,KAAO,CACL,GAAO,QACP,IAAI,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,EAAc,EAAK,GACrB,EAAK,EAAK,OAAS,EACd,EAAK,GAAI,CACd,EAAe,EAAK,GAAM,GAC1B,IAAI,EAAQ,EAAG,KAAK,YAAY,CAAY,EAC1C,EAAmB,EAAG,KAAK,aAAa,CAAY,EACpD,EAAW,EAAQ,EACjB,EAAG,KAAK,yBACV,EAAG,UAAY,EAAG,KAAK,QAAQ,EAAmB,EAAc,EAAG,KAAK,YAAY,GAEtF,GAAO,SAAY,EAAY,kBAC3B,IACF,GAAO,8CAAiD,EAAS,MAAU,EAAG,KAAK,aAAa,CAAY,EAAK,OAEnH,GAAO,oBACH,EAAG,eAAiB,GAgBtB,GAAO,QAfP,GAAO,6DAAgF,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,2BAA+B,EAAG,KAAK,aAAa,CAAS,EAAK,wBAA6B,EAAoB,iBAAqB,EAAM,OAAU,YAAgB,EAAG,KAAK,aAAa,EAAM,QAAU,EAAI,EAAM,GAAK,EAAM,KAAK,IAAI,CAAC,EAAK,OACnZ,EAAG,KAAK,WAAa,KACvB,GAAO,4BACH,EAAM,QAAU,EAClB,GAAO,YAAe,EAAG,KAAK,aAAa,EAAM,EAAE,EAEnD,GAAO,cAAiB,EAAG,KAAK,aAAa,EAAM,KAAK,IAAI,CAAC,EAE/D,GAAO,kBAAqB,EAAG,KAAK,aAAa,CAAS,EAAK,iBAE7D,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,GAAO,gFACT,CAEJ,CACA,GAAO,QACH,IACF,GAAkB,IAClB,GAAO,WAEX,CAEF,EAAG,UAAY,EACf,IAAI,EAAiB,EAAI,OACzB,IAAK,IAAI,KAAa,EAAa,CACjC,IAAI,EAAO,EAAY,IAClB,EAAG,KAAK,eAAkB,OAAO,GAAQ,UAAY,OAAO,KAAK,CAAI,CAAC,CAAC,OAAS,GAAM,IAAS,GAAQ,EAAG,KAAK,eAAe,EAAM,EAAG,MAAM,GAAG,KACnJ,GAAO,IAAO,EAAc,iBAAoB,EAAU,EAAG,KAAK,YAAY,CAAS,EAAK,kBACxF,IACF,GAAO,4CAA+C,EAAS,MAAU,EAAG,KAAK,aAAa,CAAS,EAAK,OAE9G,GAAO,OACP,EAAI,OAAS,EACb,EAAI,WAAa,EAAc,EAAG,KAAK,YAAY,CAAS,EAC5D,EAAI,cAAgB,EAAiB,IAAM,EAAG,KAAK,eAAe,CAAS,EAC3E,GAAO,KAAQ,EAAG,SAAS,CAAG,EAAK,IACnC,EAAI,OAAS,EACb,GAAO,OACH,IACF,GAAO,QAAW,EAAc,OAChC,GAAkB,KAGxB,CAIA,OAHI,IACF,GAAO,MAAS,EAAkB,QAAW,EAAS,iBAEjD,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAuB,EAAI,EAAU,EAAW,CAC/D,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAE9C,IACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,GAA0B,GAI5B,IAAI,EAAK,IAAM,EACb,EAAW,SAAW,EACnB,IACH,GAAO,QAAW,EAAY,qBAAwB,EAAe,KAEvE,GAAO,OAAU,EAAU,IACvB,IACF,GAAO,cAAiB,EAAQ,mBAAsB,EAAU,0CAA6C,EAAQ,MAAS,EAAU,oBAE1I,GAAO,GAAM,EAAU,qBAAwB,EAAM,OAAU,EAAM,IAAO,EAAY,YAAe,EAAM,iBAAoB,EAAS,KAAQ,EAAY,IAAO,EAAM,SAAY,EAAU,oBAC7L,IACF,GAAO,SAET,GAAO,SAAY,EAAU,SAC7B,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,qDAAwE,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,qCAAwC,EAAQ,MAC1M,EAAG,KAAK,WAAa,KACvB,GAAO,+DAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EAgBZ,MAfA,GAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,KACH,IACF,GAAO,YAEF,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAyB,EAAI,EAAU,EAAW,CACjE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAClC,GAAI,EAAG,KAAK,SAAW,GAIrB,OAHI,IACF,GAAO,iBAEF,EAET,IAAI,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAChD,EACE,GACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,EAAe,SAAW,GAE1B,EAAe,EAEjB,IAAI,EAAkB,EAAG,KAAK,eAC5B,EAAgB,MAAM,QAAQ,CAAe,EAC/C,GAAI,EAAS,CACX,IAAI,EAAU,SAAW,EACvB,EAAY,WAAa,EACzB,EAAc,aAAe,EAC/B,GAAO,QAAW,EAAW,cAAiB,EAAgB,UAAa,EAAa,aAAgB,EAAW,qBAA0B,EAAW,0BAA6B,EAAW,kBAAqB,EAAe,MAAS,EAAa,OAAU,EAAW,0BAA+B,EAAa,OACvT,EAAG,QACL,GAAO,aAAgB,EAAQ,MAAS,EAAW,YAErD,GAAO,IAAO,EAAW,MAAS,EAAW,sBACzC,IACF,GAAO,KAAQ,EAAgB,4BAA+B,EAAgB,qBAEhF,GAAO,KACH,GAAmB,WACrB,GAAO,KAAQ,EAAgB,QAAW,EAAW,IACjD,IACF,GAAO,yCAA4C,EAAgB,YAErE,GAAO,SAET,GAAO,KAAQ,EAAW,OAAU,EAAe,QAAY,EAAa,iBAAqB,EAAW,oBACxG,EAAG,MACL,GAAO,UAAa,EAAQ,YAAe,EAAW,IAAO,EAAS,OAAU,EAAW,IAAO,EAAS,MAE3G,GAAO,IAAO,EAAW,IAAO,EAAS,KAE3C,GAAO,MAAS,EAAW,SAAY,EAAS,SAClD,KAAO,CACL,IAAI,EAAU,EAAG,QAAQ,GACzB,GAAI,CAAC,EACH,IAAI,GAAmB,SAKrB,OAJA,EAAG,OAAO,KAAK,mBAAqB,EAAU,gCAAkC,EAAG,cAAgB,GAAG,EAClG,IACF,GAAO,iBAEF,EACF,GAAI,GAAiB,EAAgB,QAAQ,CAAO,GAAK,EAI9D,OAHI,IACF,GAAO,iBAEF,EAEP,MAAU,MAAM,mBAAqB,EAAU,gCAAkC,EAAG,cAAgB,GAAG,CAAA,CAG3G,IAAI,EAAY,OAAO,GAAW,UAAY,EAAE,aAAmB,SAAW,EAAQ,SAClF,EAAc,GAAa,EAAQ,MAAQ,SAC/C,GAAI,EAAW,CACb,IAAI,EAAS,EAAQ,QAAU,GAC/B,EAAU,EAAQ,QACpB,CACA,GAAI,GAAe,EAIjB,OAHI,IACF,GAAO,iBAEF,EAET,GAAI,EAAQ,CACV,GAAI,CAAC,EAAG,MAAO,MAAU,MAAM,6BAA6B,EAC5D,IAAI,EAAa,UAAY,EAAG,KAAK,YAAY,CAAO,EAAI,YAC5D,GAAO,gBAAmB,EAAc,IAAO,EAAS,QAC1D,KAAO,CACL,GAAO,UACP,IAAI,EAAa,UAAY,EAAG,KAAK,YAAY,CAAO,EACpD,IAAW,GAAc,aACzB,OAAO,GAAW,WACpB,GAAO,IAAO,EAAc,IAAO,EAAS,KAE5C,GAAO,IAAO,EAAc,SAAY,EAAS,KAEnD,GAAO,MACT,CACF,CACA,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GA4BtB,GAAO,QA3BP,GAAO,uDAA0E,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,yBAC5J,EACF,GAAO,GAAM,EAEb,GAAO,GAAM,EAAG,KAAK,eAAe,CAAO,EAE7C,GAAO,OACH,EAAG,KAAK,WAAa,KACvB,GAAO,qCACH,EACF,GAAO,OAAW,EAAgB,OAElC,GAAO,GAAM,EAAG,KAAK,aAAa,CAAO,EAE3C,GAAO,OAEL,EAAG,KAAK,UACV,GAAO,eACH,EACF,GAAO,kBAAqB,EAE5B,GAAO,GAAM,EAAG,KAAK,eAAe,CAAO,EAE7C,GAAO,2CAA8C,EAAG,WAAc,YAAe,EAAS,KAEhG,GAAO,OAIT,IAAI,EAAQ,EAgBZ,MAfA,GAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,MACH,IACF,GAAO,YAEF,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAqB,EAAI,EAAU,EAAW,CAC7D,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAQ,SAAW,EACnB,EAAM,EAAG,KAAK,KAAK,CAAE,EACzB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAC3B,EAAW,EAAG,OAAO,KACvB,EAAW,EAAG,OAAO,KACrB,EAAe,IAAa,IAAA,KAAc,EAAG,KAAK,eAAkB,OAAO,GAAY,UAAY,OAAO,KAAK,CAAQ,CAAC,CAAC,OAAS,GAAM,IAAa,GAAQ,EAAG,KAAK,eAAe,EAAU,EAAG,MAAM,GAAG,GAC1M,EAAe,IAAa,IAAA,KAAc,EAAG,KAAK,eAAkB,OAAO,GAAY,UAAY,OAAO,KAAK,CAAQ,CAAC,CAAC,OAAS,GAAM,IAAa,GAAQ,EAAG,KAAK,eAAe,EAAU,EAAG,MAAM,GAAG,GAC1M,EAAiB,EAAI,OACvB,GAAI,GAAgB,EAAc,CAChC,IAAI,EACJ,EAAI,aAAe,GACnB,EAAI,OAAS,EACb,EAAI,WAAa,EACjB,EAAI,cAAgB,EACpB,GAAO,QAAW,EAAS,kBAAqB,EAAU,aAC1D,IAAI,EAAgB,EAAG,cACvB,EAAG,cAAgB,EAAI,cAAgB,GACvC,GAAO,KAAQ,EAAG,SAAS,CAAG,EAAK,IACnC,EAAI,OAAS,EACb,EAAI,aAAe,GACnB,GAAO,cAAiB,EAAS,iCAAoC,EAAS,sBAAyB,EAAS,6BAChH,EAAG,cAAgB,EAAI,cAAgB,EACnC,GACF,GAAO,QAAW,EAAc,QAChC,EAAI,OAAS,EAAG,OAAO,KACvB,EAAI,WAAa,EAAG,WAAa,QACjC,EAAI,cAAgB,EAAG,cAAgB,QACvC,GAAO,KAAQ,EAAG,SAAS,CAAG,EAAK,IACnC,EAAI,OAAS,EACb,GAAO,IAAO,EAAU,MAAS,EAAc,KAC3C,GAAgB,GAClB,EAAY,WAAa,EACzB,GAAO,QAAW,EAAa,eAE/B,EAAY,SAEd,GAAO,MACH,IACF,GAAO,aAGT,GAAO,SAAY,EAAc,OAE/B,IACF,EAAI,OAAS,EAAG,OAAO,KACvB,EAAI,WAAa,EAAG,WAAa,QACjC,EAAI,cAAgB,EAAG,cAAgB,QACvC,GAAO,KAAQ,EAAG,SAAS,CAAG,EAAK,IACnC,EAAI,OAAS,EACb,GAAO,IAAO,EAAU,MAAS,EAAc,KAC3C,GAAgB,GAClB,EAAY,WAAa,EACzB,GAAO,QAAW,EAAa,eAE/B,EAAY,SAEd,GAAO,OAET,GAAO,SAAY,EAAU,qBACzB,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,mDAAsE,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,gCAAmC,EAAa,MACxM,EAAG,KAAK,WAAa,KACvB,GAAO,kCAAuC,EAAa,kBAEzD,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,GAAO,+EACH,CAAC,EAAG,eAAiB,IAEnB,EAAG,MACL,GAAO,wCAEP,GAAO,8CAGX,GAAO,QACH,IACF,GAAO,WAEX,MACM,IACF,GAAO,iBAGX,OAAO,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAIA,EAAO,QAAU,CACf,KAAQ,EAAoB,IAAI,EAChC,MAAO,EAAoB,IAAI,EAC/B,MAAO,EAAoB,IAAI,EAC/B,SAAY,EAAoB,IAAI,EACpC,MAAO,EAAoB,IAAI,EAC/B,SAAU,EAAoB,IAAI,EAClC,aAAc,EAAoB,IAAI,EACtC,KAAQ,EAAoB,IAAI,EAChC,OAAQ,EAAoB,IAAI,EAChC,GAAM,EAAoB,IAAI,EAC9B,MAAO,EAAoB,IAAI,EAC/B,QAAS,EAAoB,IAAI,EACjC,QAAS,EAAoB,IAAI,EACjC,SAAU,EAAoB,IAAI,EAClC,SAAU,EAAoB,IAAI,EAClC,UAAW,EAAoB,IAAI,EACnC,UAAW,EAAoB,IAAI,EACnC,cAAe,EAAoB,IAAI,EACvC,cAAe,EAAoB,IAAI,EACvC,WAAY,EAAoB,GAAG,EACnC,IAAK,EAAoB,IAAI,EAC7B,MAAO,EAAoB,IAAI,EAC/B,QAAS,EAAoB,IAAI,EACjC,WAAY,EAAoB,IAAI,EACpC,cAAe,EAAoB,IAAI,EACvC,SAAU,EAAoB,GAAI,EAClC,YAAa,EAAoB,IAAI,EACrC,SAAU,EAAoB,IAAI,CACpC,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAwB,EAAI,EAAU,EAAW,CAChE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAQ,SAAW,EACnB,EAAM,EAAG,KAAK,KAAK,CAAE,EACrB,EAAiB,GACrB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAC3B,EAAO,IAAM,EACf,EAAW,EAAI,UAAY,EAAG,UAAY,EAC1C,EAAY,OAAS,EACrB,EAAiB,EAAG,OAEtB,GADA,GAAO,OAAU,EAAS,iBAAoB,EAAU,IACpD,MAAM,QAAQ,CAAO,EAAG,CAC1B,IAAI,EAAmB,EAAG,OAAO,gBACjC,GAAI,IAAqB,GAAO,CAC9B,GAAO,IAAO,EAAU,MAAS,EAAS,cAAiB,EAAQ,OAAU,KAC7E,IAAI,EAAqB,EACzB,EAAiB,EAAG,cAAgB,mBACpC,GAAO,UAAa,EAAU,SAC9B,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,gEAAmF,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,uBAA0B,EAAQ,OAAU,MACjN,EAAG,KAAK,WAAa,KACvB,GAAO,0CAA8C,EAAQ,OAAU,YAErE,EAAG,KAAK,UACV,GAAO,mDAAsD,EAAG,WAAc,YAAe,EAAS,KAExG,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,MACP,EAAiB,EACb,IACF,GAAkB,IAClB,GAAO,WAEX,CACA,IAAI,EAAO,EACX,GAAI,EAGF,KAFA,IAAI,EAAM,EAAK,GACb,EAAK,EAAK,OAAS,EACd,EAAK,GAEV,GADA,EAAO,EAAK,GAAM,GACb,EAAG,KAAK,eAAkB,OAAO,GAAQ,UAAY,OAAO,KAAK,CAAI,CAAC,CAAC,OAAS,GAAM,IAAS,GAAQ,EAAG,KAAK,eAAe,EAAM,EAAG,MAAM,GAAG,EAAI,CACvJ,GAAO,IAAO,EAAc,gBAAmB,EAAS,aAAgB,EAAM,OAC9E,IAAI,EAAY,EAAQ,IAAM,EAAK,IACnC,EAAI,OAAS,EACb,EAAI,WAAa,EAAc,IAAM,EAAK,IAC1C,EAAI,cAAgB,EAAiB,IAAM,EAC3C,EAAI,UAAY,EAAG,KAAK,YAAY,EAAG,UAAW,EAAI,EAAG,KAAK,aAAc,EAAI,EAChF,EAAI,YAAY,GAAY,EAC5B,IAAI,EAAQ,EAAG,SAAS,CAAG,EAC3B,EAAI,OAAS,EACT,EAAG,KAAK,cAAc,EAAO,CAAS,EAAI,EAC5C,GAAO,IAAO,EAAG,KAAK,WAAW,EAAO,EAAW,CAAS,EAAK,IAEjE,GAAO,QAAW,EAAa,MAAS,EAAa,KAAQ,EAAS,IAExE,GAAO,OACH,IACF,GAAO,QAAW,EAAc,OAChC,GAAkB,IAEtB,CACF,CAEF,GAAI,OAAO,GAAoB,WAAa,EAAG,KAAK,eAAkB,OAAO,GAAoB,UAAY,OAAO,KAAK,CAAgB,CAAC,CAAC,OAAS,GAAM,IAAqB,GAAQ,EAAG,KAAK,eAAe,EAAkB,EAAG,MAAM,GAAG,GAAI,CAC9O,EAAI,OAAS,EACb,EAAI,WAAa,EAAG,WAAa,mBACjC,EAAI,cAAgB,EAAG,cAAgB,mBACvC,GAAO,IAAO,EAAc,gBAAmB,EAAS,aAAgB,EAAQ,OAAU,iBAAoB,EAAQ,MAAS,EAAQ,OAAU,KAAQ,EAAQ,MAAS,EAAS,YAAe,EAAQ,SAC1M,EAAI,UAAY,EAAG,KAAK,YAAY,EAAG,UAAW,EAAM,EAAG,KAAK,aAAc,EAAI,EAClF,IAAI,EAAY,EAAQ,IAAM,EAAO,IACrC,EAAI,YAAY,GAAY,EAC5B,IAAI,EAAQ,EAAG,SAAS,CAAG,EAC3B,EAAI,OAAS,EACT,EAAG,KAAK,cAAc,EAAO,CAAS,EAAI,EAC5C,GAAO,IAAO,EAAG,KAAK,WAAW,EAAO,EAAW,CAAS,EAAK,IAEjE,GAAO,QAAW,EAAa,MAAS,EAAa,KAAQ,EAAS,IAEpE,IACF,GAAO,SAAY,EAAc,aAEnC,GAAO,SACH,IACF,GAAO,QAAW,EAAc,OAChC,GAAkB,IAEtB,CACF,MAAO,GAAK,EAAG,KAAK,eAAkB,OAAO,GAAW,UAAY,OAAO,KAAK,CAAO,CAAC,CAAC,OAAS,GAAM,IAAY,GAAQ,EAAG,KAAK,eAAe,EAAS,EAAG,MAAM,GAAG,EAAI,CAC1K,EAAI,OAAS,EACb,EAAI,WAAa,EACjB,EAAI,cAAgB,EACpB,GAAO,cAAiB,EAAQ,SAAsB,EAAQ,MAAS,EAAS,YAAe,EAAQ,SACvG,EAAI,UAAY,EAAG,KAAK,YAAY,EAAG,UAAW,EAAM,EAAG,KAAK,aAAc,EAAI,EAClF,IAAI,EAAY,EAAQ,IAAM,EAAO,IACrC,EAAI,YAAY,GAAY,EAC5B,IAAI,EAAQ,EAAG,SAAS,CAAG,EAC3B,EAAI,OAAS,EACT,EAAG,KAAK,cAAc,EAAO,CAAS,EAAI,EAC5C,GAAO,IAAO,EAAG,KAAK,WAAW,EAAO,EAAW,CAAS,EAAK,IAEjE,GAAO,QAAW,EAAa,MAAS,EAAa,KAAQ,EAAS,IAEpE,IACF,GAAO,SAAY,EAAc,aAEnC,GAAO,IACT,CAIA,OAHI,IACF,GAAO,IAAO,EAAkB,QAAW,EAAS,iBAE/C,CACT,CAGM,GAEA,KACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAA6B,EAAI,EAAU,EAAW,CACrE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAChD,EAOF,GANI,GACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,EAAe,SAAW,GAE1B,EAAe,EAEb,EAAE,GAAW,OAAO,GAAW,UACjC,MAAU,MAAM,EAAW,iBAAiB,EAE9C,GAAO,eAAkB,EAAQ,QAC7B,IACF,GAAO,IAAO,EAAgB,8BAAiC,EAAgB,oBAEjF,GAAO,aAAgB,EAAQ,MAAS,EAAS,MAAS,EAAgB,KACtE,EAAG,KAAK,oBACV,GAAO,gCAAmC,EAAQ,eAAkB,EAAQ,UAAa,EAAG,KAAK,oBAAuB,IAExH,GAAO,YAAe,EAAQ,yBAA4B,EAAQ,KAEpE,GAAO,MACH,IACF,GAAO,SAET,GAAO,UACP,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAqBtB,GAAO,QApBP,GAAO,2DAA8E,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,4BAA+B,EAAgB,MAC/M,EAAG,KAAK,WAAa,KACvB,GAAO,sCACH,EACF,GAAO,OAAW,EAElB,GAAO,GAAM,EAAgB,KAG7B,EAAG,KAAK,UACV,GAAO,eACH,EACF,GAAO,kBAAqB,EAE5B,GAAO,GAAM,EAEf,GAAO,2CAA8C,EAAG,WAAc,YAAe,EAAS,KAEhG,GAAO,OAIT,IAAI,EAAQ,EAgBZ,MAfA,GAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,KACH,IACF,GAAO,YAEF,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAsB,EAAI,EAAU,EAAW,CAC9D,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAQ,SAAW,EACnB,EAAM,EAAG,KAAK,KAAK,CAAE,EACzB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAC/B,GAAK,EAAG,KAAK,eAAkB,OAAO,GAAW,UAAY,OAAO,KAAK,CAAO,CAAC,CAAC,OAAS,GAAM,IAAY,GAAQ,EAAG,KAAK,eAAe,EAAS,EAAG,MAAM,GAAG,EAAI,CACnK,EAAI,OAAS,EACb,EAAI,WAAa,EACjB,EAAI,cAAgB,EACpB,GAAO,QAAW,EAAS,eAC3B,IAAI,EAAgB,EAAG,cACvB,EAAG,cAAgB,EAAI,cAAgB,GACvC,EAAI,aAAe,GACnB,IAAI,EACA,EAAI,KAAK,YACX,EAAmB,EAAI,KAAK,UAC5B,EAAI,KAAK,UAAY,IAEvB,GAAO,IAAO,EAAG,SAAS,CAAG,EAAK,IAClC,EAAI,aAAe,GACf,IAAkB,EAAI,KAAK,UAAY,GAC3C,EAAG,cAAgB,EAAI,cAAgB,EACvC,GAAO,QAAW,EAAc,SAChC,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,oDAAuE,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,iBACzJ,EAAG,KAAK,WAAa,KACvB,GAAO,sCAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,uBAA0B,EAAS,iCAAoC,EAAS,sBAAyB,EAAS,4BACrH,EAAG,KAAK,YACV,GAAO,MAEX,KACE,IAAO,iBACH,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,oDAAuE,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,iBACzJ,EAAG,KAAK,WAAa,KACvB,GAAO,sCAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,GAAO,+EACH,IACF,GAAO,kBAGX,OAAO,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAwB,EAAI,EAAU,EAAW,CAChE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAQ,SAAW,EACnB,EAAM,EAAG,KAAK,KAAK,CAAE,EACrB,EAAiB,GACrB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAC3B,EAAiB,EAAI,OACvB,EAAa,YAAc,EAC3B,EAAkB,iBAAmB,EACvC,GAAO,OAAU,EAAS,eAAkB,EAAc,cAAiB,EAAU,cAAiB,EAAmB,YACzH,IAAI,EAAgB,EAAG,cACvB,EAAG,cAAgB,EAAI,cAAgB,GACvC,IAAI,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,EAAM,EAAK,GACb,EAAK,EAAK,OAAS,EACd,EAAK,GACV,EAAO,EAAK,GAAM,IACb,EAAG,KAAK,eAAkB,OAAO,GAAQ,UAAY,OAAO,KAAK,CAAI,CAAC,CAAC,OAAS,GAAM,IAAS,GAAQ,EAAG,KAAK,eAAe,EAAM,EAAG,MAAM,GAAG,IACnJ,EAAI,OAAS,EACb,EAAI,WAAa,EAAc,IAAM,EAAK,IAC1C,EAAI,cAAgB,EAAiB,IAAM,EAC3C,GAAO,KAAQ,EAAG,SAAS,CAAG,EAAK,IACnC,EAAI,OAAS,GAEb,GAAO,QAAW,EAAc,YAE9B,IACF,GAAO,QAAW,EAAc,OAAU,EAAc,OAAU,EAAU,aAAgB,EAAmB,OAAU,EAAmB,KAAQ,EAAM,eAC1J,GAAkB,KAEpB,GAAO,QAAW,EAAc,OAAU,EAAU,MAAS,EAAc,YAAe,EAAmB,MAAS,EAAM,MA8BhI,MA3BA,GAAG,cAAgB,EAAI,cAAgB,EACvC,GAAO,GAAM,EAAkB,QAAW,EAAU,qBAChD,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,sDAAyE,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,gCAAmC,EAAmB,MACjN,EAAG,KAAK,WAAa,KACvB,GAAO,2DAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,GAAO,+EACH,CAAC,EAAG,eAAiB,IAEnB,EAAG,MACL,GAAO,wCAEP,GAAO,8CAGX,GAAO,sBAAyB,EAAS,iCAAoC,EAAS,sBAAyB,EAAS,2BACpH,EAAG,KAAK,YACV,GAAO,OAEF,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAA0B,EAAI,EAAU,EAAW,CAClE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAChD,EACE,GACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,EAAe,SAAW,GAE1B,EAAe,EAEjB,IAAI,EAAc,EAAG,KAAK,OAAS,SAAW,aAC9C,GAAI,EACF,GAAO,QAAW,EAAU,kBAAqB,EAAU,MAAS,EAAe,IAAO,EAAgB,UAAa,EAAS,mBAAsB,EAAU,oBAC5J,IACF,GAAO,KAAQ,EAAgB,4BAA+B,EAAgB,qBAEhF,GAAO,KAAQ,EAAU,UACpB,CACL,IAAI,EAAU,EAAG,WAAW,CAAO,EACnC,GAAO,SACH,IACF,GAAO,KAAQ,EAAgB,4BAA+B,EAAgB,qBAEhF,GAAO,KAAQ,EAAW,SAAY,EAAS,OACjD,CACA,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GA4BtB,GAAO,QA3BP,GAAO,wDAA2E,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,0BAC7J,EACF,GAAO,GAAM,EAEb,GAAO,GAAM,EAAG,KAAK,eAAe,CAAO,EAE7C,GAAO,OACH,EAAG,KAAK,WAAa,KACvB,GAAO,sCACH,EACF,GAAO,OAAW,EAAgB,OAElC,GAAO,GAAM,EAAG,KAAK,aAAa,CAAO,EAE3C,GAAO,OAEL,EAAG,KAAK,UACV,GAAO,eACH,EACF,GAAO,kBAAqB,EAE5B,GAAO,GAAM,EAAG,KAAK,eAAe,CAAO,EAE7C,GAAO,2CAA8C,EAAG,WAAc,YAAe,EAAS,KAEhG,GAAO,OAIT,IAAI,EAAQ,EAgBZ,MAfA,GAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,KACH,IACF,GAAO,YAEF,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAA6B,EAAI,EAAU,EAAW,CACrE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAQ,SAAW,EACnB,EAAM,EAAG,KAAK,KAAK,CAAE,EACrB,EAAiB,GACrB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAC3B,EAAO,MAAQ,EACjB,EAAO,MAAQ,EACf,EAAW,EAAI,UAAY,EAAG,UAAY,EAC1C,EAAY,OAAS,EACrB,EAAkB,iBAAmB,EACnC,EAAc,OAAO,KAAK,GAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAQ,EAC1D,EAAe,EAAG,OAAO,mBAAqB,CAAC,EAC/C,EAAiB,OAAO,KAAK,CAAY,CAAC,CAAC,OAAO,CAAQ,EAC1D,EAAe,EAAG,OAAO,qBACzB,EAAkB,EAAY,QAAU,EAAe,OACvD,EAAgB,IAAiB,GACjC,EAAsB,OAAO,GAAgB,UAAY,OAAO,KAAK,CAAY,CAAC,CAAC,OACnF,EAAoB,EAAG,KAAK,iBAC5B,EAAmB,GAAiB,GAAuB,EAC3D,EAAiB,EAAG,KAAK,cACzB,EAAiB,EAAG,OAClB,EAAY,EAAG,OAAO,SAC1B,GAAI,GAAa,EAAE,EAAG,KAAK,OAAS,EAAU,QAAU,EAAU,OAAS,EAAG,KAAK,aACjF,IAAI,EAAgB,EAAG,KAAK,OAAO,CAAS,EAG9C,SAAS,EAAS,EAAG,CACnB,OAAO,IAAM,WACf,CAKA,GAJA,GAAO,OAAU,EAAS,iBAAoB,EAAc,WACxD,IACF,GAAO,QAAW,EAAmB,iBAEnC,EAAkB,CAMpB,GALI,EACF,GAAO,IAAO,EAAmB,MAAS,EAAmB,mBAAsB,EAAS,eAAkB,EAAQ,OAAU,EAAQ,IAAO,EAAmB,YAAe,EAAQ,aAAgB,EAAQ,MAAS,EAAmB,IAAO,EAAQ,MAE5P,GAAO,aAAgB,EAAQ,OAAU,EAAS,OAEhD,EAAiB,CAEnB,GADA,GAAO,oBAAuB,EAAQ,cAClC,EAAY,OACd,GAAI,EAAY,OAAS,EACvB,GAAO,sBAAyB,EAAe,mBAAsB,EAAQ,SACxE,CACL,IAAI,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,EAAc,EAAK,GACrB,EAAK,EAAK,OAAS,EACd,EAAK,GACV,EAAe,EAAK,GAAM,GAC1B,GAAO,OAAU,EAAQ,OAAU,EAAG,KAAK,eAAe,CAAY,EAAK,GAGjF,CAEF,GAAI,EAAe,OAAQ,CACzB,IAAI,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,GAAY,GAAK,GACnB,GAAK,EAAK,OAAS,EACd,GAAK,IACV,GAAa,EAAK,IAAM,GACxB,GAAO,OAAU,EAAG,WAAW,EAAU,EAAK,SAAY,EAAQ,IAGxE,CACA,GAAO,uBAA0B,EAAQ,MAC3C,CACA,GAAI,GAAqB,MACvB,GAAO,WAAc,EAAS,IAAO,EAAQ,UACxC,CACL,IAAI,GAAoB,EAAG,UACvB,GAAsB,OAAU,EAAO,OAI3C,GAHI,EAAG,KAAK,yBACV,EAAG,UAAY,EAAG,KAAK,YAAY,EAAG,UAAW,EAAM,EAAG,KAAK,YAAY,GAEzE,EACF,GAAI,EACF,GAAO,WAAc,EAAS,IAAO,EAAQ,UACxC,CACL,GAAO,IAAO,EAAc,aAC5B,IAAI,GAAqB,EACzB,EAAiB,EAAG,cAAgB,wBACpC,IAAI,GAAa,IAAc,CAAC,EAChC,GAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAgBtB,GAAO,QAfP,GAAO,qEAAwF,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,qCAAyC,GAAuB,OAC1O,EAAG,KAAK,WAAa,KACvB,GAAO,gBACH,EAAG,KAAK,uBACV,GAAO,oCAEP,GAAO,wCAET,GAAO,MAEL,EAAG,KAAK,UACV,GAAO,mDAAsD,EAAG,WAAc,YAAe,EAAS,KAExG,GAAO,OAIT,IAAI,GAAQ,EACZ,EAAM,GAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,GAAS,OAElD,GAAO,uBAA0B,GAAS,oBAG5C,GAAO,cAAiB,GAAS,+EAEnC,EAAiB,GACb,IACF,GAAO,WAEX,MACK,GAAI,EACT,GAAI,GAAqB,UAAW,CAClC,GAAO,QAAW,EAAS,eAC3B,IAAI,GAAgB,EAAG,cACvB,EAAG,cAAgB,EAAI,cAAgB,GACvC,EAAI,OAAS,EACb,EAAI,WAAa,EAAG,WAAa,wBACjC,EAAI,cAAgB,EAAG,cAAgB,wBACvC,EAAI,UAAY,EAAG,KAAK,uBAAyB,EAAG,UAAY,EAAG,KAAK,YAAY,EAAG,UAAW,EAAM,EAAG,KAAK,YAAY,EAC5H,IAAI,GAAY,EAAQ,IAAM,EAAO,IACrC,EAAI,YAAY,GAAY,EAC5B,IAAI,GAAQ,EAAG,SAAS,CAAG,EAC3B,EAAI,OAAS,EACT,EAAG,KAAK,cAAc,GAAO,CAAS,EAAI,EAC5C,GAAO,IAAO,EAAG,KAAK,WAAW,GAAO,EAAW,EAAS,EAAK,IAEjE,GAAO,QAAW,EAAa,MAAS,GAAa,KAAQ,GAAS,IAExE,GAAO,SAAY,EAAc,gBAAmB,EAAS,wHAA2H,EAAS,IAAO,EAAQ,SAChN,EAAG,cAAgB,EAAI,cAAgB,EACzC,KAAO,CACL,EAAI,OAAS,EACb,EAAI,WAAa,EAAG,WAAa,wBACjC,EAAI,cAAgB,EAAG,cAAgB,wBACvC,EAAI,UAAY,EAAG,KAAK,uBAAyB,EAAG,UAAY,EAAG,KAAK,YAAY,EAAG,UAAW,EAAM,EAAG,KAAK,YAAY,EAC5H,IAAI,GAAY,EAAQ,IAAM,EAAO,IACrC,EAAI,YAAY,GAAY,EAC5B,IAAI,GAAQ,EAAG,SAAS,CAAG,EAC3B,EAAI,OAAS,EACT,EAAG,KAAK,cAAc,GAAO,CAAS,EAAI,EAC5C,GAAO,IAAO,EAAG,KAAK,WAAW,GAAO,EAAW,EAAS,EAAK,IAEjE,GAAO,QAAW,EAAa,MAAS,GAAa,KAAQ,GAAS,IAEpE,IACF,GAAO,SAAY,EAAc,YAErC,CAEF,EAAG,UAAY,EACjB,CACI,IACF,GAAO,OAET,GAAO,OACH,IACF,GAAO,QAAW,EAAc,OAChC,GAAkB,IAEtB,CACA,IAAI,GAAe,EAAG,KAAK,aAAe,CAAC,EAAG,cAC9C,GAAI,EAAY,OAAQ,CACtB,IAAI,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,EAAc,GAAK,GACrB,GAAK,EAAK,OAAS,EACd,GAAK,IAAI,CACd,EAAe,EAAK,IAAM,GAC1B,IAAI,EAAO,EAAQ,GACnB,GAAK,EAAG,KAAK,eAAkB,OAAO,GAAQ,UAAY,OAAO,KAAK,CAAI,CAAC,CAAC,OAAS,GAAM,IAAS,GAAQ,EAAG,KAAK,eAAe,EAAM,EAAG,MAAM,GAAG,EAAI,CACvJ,IAAI,GAAQ,EAAG,KAAK,YAAY,CAAY,EAC1C,GAAY,EAAQ,GACpB,GAAc,IAAgB,EAAK,UAAY,IAAA,GACjD,EAAI,OAAS,EACb,EAAI,WAAa,EAAc,GAC/B,EAAI,cAAgB,EAAiB,IAAM,EAAG,KAAK,eAAe,CAAY,EAC9E,EAAI,UAAY,EAAG,KAAK,QAAQ,EAAG,UAAW,EAAc,EAAG,KAAK,YAAY,EAChF,EAAI,YAAY,GAAY,EAAG,KAAK,eAAe,CAAY,EAC/D,IAAI,GAAQ,EAAG,SAAS,CAAG,EAE3B,GADA,EAAI,OAAS,EACT,EAAG,KAAK,cAAc,GAAO,CAAS,EAAI,EAAG,CAC/C,GAAQ,EAAG,KAAK,WAAW,GAAO,EAAW,EAAS,EACtD,IAAI,GAAW,EACjB,KAAO,CACL,IAAI,GAAW,EACf,GAAO,QAAW,EAAa,MAAS,GAAa,IACvD,CACA,GAAI,GACF,GAAO,IAAO,GAAS,QAClB,CACL,GAAI,GAAiB,EAAc,GAAe,CAChD,GAAO,SAAY,GAAY,kBAC3B,IACF,GAAO,8CAAiD,EAAS,MAAU,EAAG,KAAK,aAAa,CAAY,EAAK,OAEnH,GAAO,OAAU,EAAc,aAC/B,IAAI,GAAoB,EAAG,UACzB,GAAqB,EACrB,GAAmB,EAAG,KAAK,aAAa,CAAY,EAClD,EAAG,KAAK,yBACV,EAAG,UAAY,EAAG,KAAK,QAAQ,GAAmB,EAAc,EAAG,KAAK,YAAY,GAEtF,EAAiB,EAAG,cAAgB,YACpC,IAAI,GAAa,IAAc,CAAC,EAChC,GAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAgBtB,GAAO,QAfP,GAAO,yDAA4E,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,kCAAsC,GAAoB,OACxN,EAAG,KAAK,WAAa,KACvB,GAAO,gBACH,EAAG,KAAK,uBACV,GAAO,yBAEP,GAAO,oCAAwC,GAAoB,MAErE,GAAO,MAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,GAAQ,EACZ,EAAM,GAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,GAAS,OAElD,GAAO,uBAA0B,GAAS,oBAG5C,GAAO,cAAiB,GAAS,+EAEnC,EAAiB,GACjB,EAAG,UAAY,GACf,GAAO,YACT,MACM,GACF,GAAO,SAAY,GAAY,kBAC3B,IACF,GAAO,8CAAiD,EAAS,MAAU,EAAG,KAAK,aAAa,CAAY,EAAK,OAEnH,GAAO,OAAU,EAAc,uBAE/B,GAAO,QAAW,GAAY,kBAC1B,IACF,GAAO,8CAAiD,EAAS,MAAU,EAAG,KAAK,aAAa,CAAY,EAAK,OAEnH,GAAO,SAGX,GAAO,IAAO,GAAS,KACzB,CACF,CACI,IACF,GAAO,QAAW,EAAc,OAChC,GAAkB,IAEtB,CAEJ,CACA,GAAI,EAAe,OAAQ,CACzB,IAAI,GAAO,EACX,GAAI,GAGF,IAFA,IAAI,GAAY,GAAK,GACnB,GAAK,GAAK,OAAS,EACd,GAAK,IAAI,CACd,GAAa,GAAK,IAAM,GACxB,IAAI,EAAO,EAAa,IACxB,GAAK,EAAG,KAAK,eAAkB,OAAO,GAAQ,UAAY,OAAO,KAAK,CAAI,CAAC,CAAC,OAAS,GAAM,IAAS,GAAQ,EAAG,KAAK,eAAe,EAAM,EAAG,MAAM,GAAG,EAAI,CACvJ,EAAI,OAAS,EACb,EAAI,WAAa,EAAG,WAAa,qBAAuB,EAAG,KAAK,YAAY,EAAU,EACtF,EAAI,cAAgB,EAAG,cAAgB,sBAAwB,EAAG,KAAK,eAAe,EAAU,EAC5F,EACF,GAAO,IAAO,EAAmB,MAAS,EAAmB,mBAAsB,EAAS,eAAkB,EAAQ,OAAU,EAAQ,IAAO,EAAmB,YAAe,EAAQ,aAAgB,EAAQ,MAAS,EAAmB,IAAO,EAAQ,MAE5P,GAAO,aAAgB,EAAQ,OAAU,EAAS,OAEpD,GAAO,QAAW,EAAG,WAAW,EAAU,EAAK,SAAY,EAAQ,QACnE,EAAI,UAAY,EAAG,KAAK,YAAY,EAAG,UAAW,EAAM,EAAG,KAAK,YAAY,EAC5E,IAAI,GAAY,EAAQ,IAAM,EAAO,IACrC,EAAI,YAAY,GAAY,EAC5B,IAAI,GAAQ,EAAG,SAAS,CAAG,EAC3B,EAAI,OAAS,EACT,EAAG,KAAK,cAAc,GAAO,CAAS,EAAI,EAC5C,GAAO,IAAO,EAAG,KAAK,WAAW,GAAO,EAAW,EAAS,EAAK,IAEjE,GAAO,QAAW,EAAa,MAAS,GAAa,KAAQ,GAAS,IAEpE,IACF,GAAO,SAAY,EAAc,aAEnC,GAAO,MACH,IACF,GAAO,SAAY,EAAc,aAEnC,GAAO,OACH,IACF,GAAO,QAAW,EAAc,OAChC,GAAkB,IAEtB,CACF,CAEJ,CAIA,OAHI,IACF,GAAO,IAAO,EAAkB,QAAW,EAAS,iBAE/C,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAgC,EAAI,EAAU,EAAW,CACxE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAQ,SAAW,EACnB,EAAM,EAAG,KAAK,KAAK,CAAE,EACrB,EAAiB,GACrB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAE/B,GADA,GAAO,OAAU,EAAS,aACrB,EAAG,KAAK,eAAkB,OAAO,GAAW,UAAY,OAAO,KAAK,CAAO,CAAC,CAAC,OAAS,GAAM,IAAY,GAAQ,EAAG,KAAK,eAAe,EAAS,EAAG,MAAM,GAAG,EAAI,CACnK,EAAI,OAAS,EACb,EAAI,WAAa,EACjB,EAAI,cAAgB,EACpB,IAAI,EAAO,MAAQ,EACjB,EAAO,MAAQ,EACf,EAAK,IAAM,EACX,EAAe,OAAU,EAAO,OAEhC,EAAY,QAAS,EADN,UAAY,EAAG,UAAY,GAE1C,EAAkB,iBAAmB,EACrC,EAAiB,EAAG,KAAK,cACzB,EAAiB,EAAG,OAClB,IACF,GAAO,QAAW,EAAmB,kBAEnC,EACF,GAAO,IAAO,EAAmB,MAAS,EAAmB,mBAAsB,EAAS,eAAkB,EAAQ,OAAU,EAAQ,IAAO,EAAmB,YAAe,EAAQ,aAAgB,EAAQ,MAAS,EAAmB,IAAO,EAAQ,MAE5P,GAAO,aAAgB,EAAQ,OAAU,EAAS,OAEpD,GAAO,iBAAoB,EAAQ,cACnC,IAAI,EAAY,EACZ,EAAgB,EAAG,cACvB,EAAG,cAAgB,EAAI,cAAgB,GACvC,IAAI,EAAQ,EAAG,SAAS,CAAG,EAC3B,EAAI,OAAS,EACT,EAAG,KAAK,cAAc,EAAO,CAAS,EAAI,EAC5C,GAAO,IAAO,EAAG,KAAK,WAAW,EAAO,EAAW,CAAS,EAAK,IAEjE,GAAO,QAAW,EAAa,MAAS,EAAa,KAAQ,EAAS,IAExE,EAAG,cAAgB,EAAI,cAAgB,EACvC,GAAO,SAAY,EAAc,gBAAmB,EAAM,aAAgB,EAAQ,KAAQ,EAAM,YAAe,EAAM,iBAAoB,EAAM,oBAAuB,EAAQ,qBAC1K,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,8DAAiF,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,+BAAmC,EAAgB,OACtN,EAAG,KAAK,WAAa,KACvB,GAAO,iCAAsC,EAAgB,oBAE3D,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,GAAO,+EACH,CAAC,EAAG,eAAiB,IAEnB,EAAG,MACL,GAAO,wCAEP,GAAO,8CAGP,IACF,GAAO,YAET,GAAO,MACT,CAIA,OAHI,IACF,GAAO,IAAO,EAAkB,QAAW,EAAS,iBAE/C,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAAsB,EAAI,EAAU,EAAW,CAC9D,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAQ,EACZ,GAAI,GAAW,KAAO,GAAW,KAC3B,EAAG,QACL,EAAS,EAAG,MACZ,EAAW,aAEX,EAAS,EAAG,KAAK,OAAO,SAAW,GACnC,EAAW,sBAER,CACL,IAAI,EAAU,EAAG,WAAW,EAAG,OAAQ,EAAS,EAAG,MAAM,EACzD,GAAI,IAAY,IAAA,GAAW,CACzB,IAAI,EAAW,EAAG,gBAAgB,QAAQ,EAAG,OAAQ,CAAO,EAC5D,GAAI,EAAG,KAAK,aAAe,OAAQ,CACjC,EAAG,OAAO,MAAM,CAAQ,EACxB,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,qDAAwE,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,sBAA0B,EAAG,KAAK,aAAa,CAAO,EAAK,OACrN,EAAG,KAAK,WAAa,KACvB,GAAO,0CAA+C,EAAG,KAAK,aAAa,CAAO,EAAK,MAErF,EAAG,KAAK,UACV,GAAO,cAAiB,EAAG,KAAK,eAAe,CAAO,EAAK,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAE5I,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAE/B,IACF,GAAO,iBAEX,MAAO,GAAI,EAAG,KAAK,aAAe,SAChC,EAAG,OAAO,KAAK,CAAQ,EACnB,IACF,GAAO,sBAGT,MAAM,IAAI,EAAG,gBAAgB,EAAG,OAAQ,EAAS,CAAQ,CAE7D,MAAO,GAAI,EAAQ,OAAQ,CACzB,IAAI,EAAM,EAAG,KAAK,KAAK,CAAE,EACzB,EAAI,QACJ,IAAI,EAAa,QAAU,EAAI,MAC/B,EAAI,OAAS,EAAQ,OACrB,EAAI,WAAa,GACjB,EAAI,cAAgB,EACpB,IAAI,EAAQ,EAAG,SAAS,CAAG,CAAC,CAAC,QAAQ,oBAAqB,EAAQ,IAAI,EACtE,GAAO,IAAO,EAAS,IACnB,IACF,GAAO,QAAW,EAAc,OAEpC,KACE,GAAS,EAAQ,SAAW,IAAS,EAAG,OAAS,EAAQ,SAAW,GACpE,EAAW,EAAQ,IAEvB,CACA,GAAI,EAAU,CACZ,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,KAAK,YACV,GAAO,IAAO,EAAY,eAE1B,GAAO,IAAO,EAAY,KAE5B,GAAO,IAAO,EAAS,qBACnB,EAAG,WAAa,OAClB,GAAO,MAAS,EAAG,WAErB,IAAI,EAAc,EAAW,QAAW,EAAW,GAAM,IAAM,aAC7D,EAAsB,EAAW,EAAG,YAAY,GAAY,qBAC9D,GAAO,MAAS,EAAe,MAAS,EAAuB,gBAC/D,IAAI,EAAiB,EAErB,GADA,EAAM,EAAW,IAAI,EACjB,EAAQ,CACV,GAAI,CAAC,EAAG,MAAO,MAAU,MAAM,wCAAwC,EACnE,IACF,GAAO,QAAW,EAAU,MAE9B,GAAO,gBAAmB,EAAkB,KACxC,IACF,GAAO,IAAO,EAAU,aAE1B,GAAO,4KACH,IACF,GAAO,IAAO,EAAU,cAE1B,GAAO,MACH,IACF,GAAO,QAAW,EAAU,OAEhC,KACE,IAAO,SAAY,EAAkB,uCAA0C,EAAY,0CAA6C,EAAY,wCAChJ,IACF,GAAO,WAGb,CACA,OAAO,CACT,CAGM,GAEA,KACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAA2B,EAAI,EAAU,EAAW,CACnE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAE9C,IACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,GAA0B,GAI5B,IAAI,EAAW,SAAW,EAC1B,GAAI,CAAC,EACH,GAAI,EAAQ,OAAS,EAAG,KAAK,cAAgB,EAAG,OAAO,YAAc,OAAO,KAAK,EAAG,OAAO,UAAU,CAAC,CAAC,OAAQ,CAC7G,IAAI,EAAY,CAAC,EACb,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,EAAW,EAAK,GAClB,EAAK,EAAK,OAAS,EACd,EAAK,GAAI,CACd,EAAY,EAAK,GAAM,GACvB,IAAI,EAAe,EAAG,OAAO,WAAW,GAClC,IAAiB,EAAG,KAAK,eAAkB,OAAO,GAAgB,UAAY,OAAO,KAAK,CAAY,CAAC,CAAC,OAAS,GAAM,IAAiB,GAAQ,EAAG,KAAK,eAAe,EAAc,EAAG,MAAM,GAAG,KACrM,EAAU,EAAU,QAAU,EAElC,CAEJ,KACE,KAAI,EAAY,EAGpB,GAAI,GAAW,EAAU,OAAQ,CAC/B,IAAI,EAAoB,EAAG,UACzB,EAAgB,GAAW,EAAU,QAAU,EAAG,KAAK,aACvD,EAAiB,EAAG,KAAK,cAC3B,GAAI,EAEF,GADA,GAAO,eAAkB,EAAQ,KAC7B,EAAe,CACZ,IACH,GAAO,QAAW,EAAY,qBAAwB,EAAe,MAEvE,IAAI,EAAK,IAAM,EACb,EAAgB,SAAW,EAAO,IAAM,EAAK,IAC7C,EAAmB,OAAU,EAAgB,OAC3C,EAAG,KAAK,yBACV,EAAG,UAAY,EAAG,KAAK,YAAY,EAAmB,EAAe,EAAG,KAAK,YAAY,GAE3F,GAAO,QAAW,EAAU,YACxB,IACF,GAAO,cAAiB,EAAQ,mBAAsB,EAAU,0CAA6C,EAAQ,MAAS,EAAU,oBAE1I,GAAO,aAAgB,EAAM,SAAY,EAAM,MAAS,EAAY,YAAe,EAAM,SAAY,EAAU,MAAS,EAAS,IAAO,EAAY,IAAO,EAAM,oBAC7J,IACF,GAAO,8CAAiD,EAAS,KAAQ,EAAY,IAAO,EAAM,OAEpG,GAAO,UAAa,EAAU,cAC1B,IACF,GAAO,SAET,GAAO,UAAa,EAAU,SAC9B,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAgBtB,GAAO,QAfP,GAAO,yDAA4E,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,kCAAsC,EAAoB,OACxN,EAAG,KAAK,WAAa,KACvB,GAAO,gBACH,EAAG,KAAK,uBACV,GAAO,yBAEP,GAAO,oCAAwC,EAAoB,MAErE,GAAO,MAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,YACT,KAAO,CACL,GAAO,SACP,IAAI,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,EAAc,EAAK,GACrB,EAAK,EAAK,OAAS,EACd,EAAK,GAAI,CACd,EAAe,EAAK,GAAM,GACtB,IACF,GAAO,QAET,IAAI,EAAQ,EAAG,KAAK,YAAY,CAAY,EAC1C,EAAW,EAAQ,EACrB,GAAO,QAAW,EAAY,kBAC1B,IACF,GAAO,8CAAiD,EAAS,MAAU,EAAG,KAAK,aAAa,CAAY,EAAK,OAEnH,GAAO,gBAAmB,EAAQ,MAAS,EAAG,KAAK,eAAe,EAAG,KAAK,aAAe,EAAe,CAAK,EAAK,MACpH,CAEF,GAAO,QACP,IAAI,EAAgB,UAAY,EAC9B,EAAmB,OAAU,EAAgB,OAC3C,EAAG,KAAK,yBACV,EAAG,UAAY,EAAG,KAAK,aAAe,EAAG,KAAK,YAAY,EAAmB,EAAe,EAAI,EAAI,EAAoB,MAAQ,GAElI,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAgBtB,GAAO,QAfP,GAAO,yDAA4E,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,kCAAsC,EAAoB,OACxN,EAAG,KAAK,WAAa,KACvB,GAAO,gBACH,EAAG,KAAK,uBACV,GAAO,yBAEP,GAAO,oCAAwC,EAAoB,MAErE,GAAO,MAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,YACT,MAEA,GAAI,EAAe,CACZ,IACH,GAAO,QAAW,EAAY,qBAAwB,EAAe,MAEvE,IAAI,EAAK,IAAM,EACb,EAAgB,SAAW,EAAO,IAAM,EAAK,IAC7C,EAAmB,OAAU,EAAgB,OAC3C,EAAG,KAAK,yBACV,EAAG,UAAY,EAAG,KAAK,YAAY,EAAmB,EAAe,EAAG,KAAK,YAAY,GAEvF,IACF,GAAO,QAAW,EAAY,sBAAyB,EAAY,qBAC/D,EAAG,eAAiB,GAgBtB,GAAO,QAfP,GAAO,yDAA4E,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,kCAAsC,EAAoB,OACxN,EAAG,KAAK,WAAa,KACvB,GAAO,gBACH,EAAG,KAAK,uBACV,GAAO,yBAEP,GAAO,oCAAwC,EAAoB,MAErE,GAAO,MAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,GAAO,0FAA6F,EAAY,sBAElH,GAAO,aAAgB,EAAM,SAAY,EAAM,MAAS,EAAY,YAAe,EAAM,aAAgB,EAAS,IAAO,EAAY,IAAO,EAAM,oBAC9I,IACF,GAAO,8CAAiD,EAAS,KAAQ,EAAY,IAAO,EAAM,OAEpG,GAAO,oBACH,EAAG,eAAiB,GAgBtB,GAAO,QAfP,GAAO,yDAA4E,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,kCAAsC,EAAoB,OACxN,EAAG,KAAK,WAAa,KACvB,GAAO,gBACH,EAAG,KAAK,uBACV,GAAO,yBAEP,GAAO,oCAAwC,EAAoB,MAErE,GAAO,MAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,GAAO,mFACH,IACF,GAAO,QAEX,KAAO,CACL,IAAI,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,EAAc,EAAK,GACrB,EAAK,EAAK,OAAS,EACd,EAAK,GAAI,CACd,EAAe,EAAK,GAAM,GAC1B,IAAI,EAAQ,EAAG,KAAK,YAAY,CAAY,EAC1C,EAAmB,EAAG,KAAK,aAAa,CAAY,EACpD,EAAW,EAAQ,EACjB,EAAG,KAAK,yBACV,EAAG,UAAY,EAAG,KAAK,QAAQ,EAAmB,EAAc,EAAG,KAAK,YAAY,GAEtF,GAAO,SAAY,EAAY,kBAC3B,IACF,GAAO,8CAAiD,EAAS,MAAU,EAAG,KAAK,aAAa,CAAY,EAAK,OAEnH,GAAO,oBACH,EAAG,eAAiB,GAgBtB,GAAO,QAfP,GAAO,yDAA4E,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,kCAAsC,EAAoB,OACxN,EAAG,KAAK,WAAa,KACvB,GAAO,gBACH,EAAG,KAAK,uBACV,GAAO,yBAEP,GAAO,oCAAwC,EAAoB,MAErE,GAAO,MAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,GAAO,gFACT,CAEJ,CAEF,EAAG,UAAY,CACjB,MAAW,IACT,GAAO,gBAET,OAAO,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAA8B,EAAI,EAAU,EAAW,CACtE,IAAI,EAAM,IACN,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACnB,EAAU,EAAG,KAAK,OAAS,GAAW,EAAQ,MAChD,EAOF,GANI,GACF,GAAO,cAAiB,EAAQ,MAAS,EAAG,KAAK,QAAQ,EAAQ,MAAO,EAAU,EAAG,WAAW,EAAK,KACrG,EAAe,SAAW,GAE1B,EAAe,GAEZ,GAAW,IAAY,EAAG,KAAK,cAAgB,GAAO,CACrD,IACF,GAAO,QAAW,EAAU,SAAY,EAAgB,iBAAoB,EAAgB,mBAAsB,EAAU,4BAA+B,EAAgB,kBAAuB,EAAU,qBAE9M,GAAO,YAAe,EAAS,aAAgB,EAAU,6BACzD,IAAI,EAAY,EAAG,OAAO,OAAS,EAAG,OAAO,MAAM,KACjD,EAAe,MAAM,QAAQ,CAAS,EACxC,GAAI,CAAC,GAAa,GAAa,UAAY,GAAa,SAAY,IAAiB,EAAU,QAAQ,QAAQ,GAAK,GAAK,EAAU,QAAQ,OAAO,GAAK,GACrJ,GAAO,uDAA0D,EAAS,QAAW,EAAS,WAAc,EAAU,oCACjH,CACL,GAAO,yDAA4D,EAAS,QAC5E,IAAI,EAAU,iBAAmB,EAAe,IAAM,IACtD,GAAO,QAAW,EAAG,KAAK,EAAQ,CAAC,EAAW,OAAQ,EAAG,KAAK,cAAe,EAAI,EAAK,eAClF,IACF,GAAO,qDAET,GAAO,gDAAqD,EAAU,qEACxE,CACA,GAAO,MACH,IACF,GAAO,SAET,GAAO,SAAY,EAAU,SAC7B,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAgBtB,GAAO,QAfP,GAAO,4DAA+E,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,6BACjK,EAAG,KAAK,WAAa,KACvB,GAAO,mGAEL,EAAG,KAAK,UACV,GAAO,eACH,EACF,GAAO,kBAAqB,EAE5B,GAAO,GAAM,EAEf,GAAO,2CAA8C,EAAG,WAAc,YAAe,EAAS,KAEhG,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,MACH,IACF,GAAO,WAEX,MACM,IACF,GAAO,iBAGX,OAAO,CACT,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAEA,EAAO,QAAU,SAA2B,EAAI,EAAU,EAAW,CACnE,IAAI,EAAM,GACN,EAAS,EAAG,OAAO,SAAW,GAChC,EAAe,EAAG,KAAK,qBAAqB,EAAG,OAAQ,EAAG,MAAM,IAAK,MAAM,EAC3E,EAAM,EAAG,KAAK,OAAO,EAAG,MAAM,EAChC,GAAI,EAAG,KAAK,eAAgB,CAC1B,IAAI,EAAc,EAAG,KAAK,mBAAmB,EAAG,OAAQ,EAAG,MAAM,QAAQ,EACzE,GAAI,EAAa,CACf,IAAI,EAAe,oBAAsB,EACzC,GAAI,EAAG,KAAK,iBAAmB,MAAO,EAAG,OAAO,KAAK,CAAY,OAC5D,MAAU,MAAM,CAAY,CACnC,CACF,CAYA,GAXI,EAAG,QACL,GAAO,mBACH,IACF,EAAG,MAAQ,GACX,GAAO,UAET,GAAO,sFACH,IAAQ,EAAG,KAAK,YAAc,EAAG,KAAK,eACxC,GAAO,KAAO,iBAAoB,EAAM,OAAS,MAGjD,OAAO,EAAG,QAAU,WAAa,EAAE,GAAgB,EAAG,OAAO,MAAO,CACtE,IAAI,EAAW,eACX,EAAO,EAAG,MACV,EAAW,EAAG,UACd,EAAU,EAAG,OAAO,GACpB,EAAc,EAAG,WAAa,EAAG,KAAK,YAAY,CAAQ,EAC1D,EAAiB,EAAG,cAAgB,IAAM,EAC1C,EAAgB,CAAC,EAAG,KAAK,UACzB,EACA,EAAQ,QAAU,GAAY,IAC9B,EAAS,QAAU,EACvB,GAAI,EAAG,SAAW,GAAO,CACnB,EAAG,MACL,EAAgB,GAEhB,GAAO,QAAW,EAAU,aAE9B,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAUtB,GAAO,QATP,GAAO,iBAAoB,GAAiB,gBAAkB,oCAA0C,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,iBACnL,EAAG,KAAK,WAAa,KACvB,GAAO,0CAEL,EAAG,KAAK,UACV,GAAO,mDAAsD,EAAG,WAAc,YAAe,EAAS,KAExG,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,8EAErC,MACM,EAAG,MACD,EACF,GAAO,iBAEP,GAAO,yCAGT,GAAO,QAAW,EAAU,YAMhC,OAHI,EAAG,QACL,GAAO,yBAEF,CACT,CACA,GAAI,EAAG,MAAO,CACZ,IAAI,EAAO,EAAG,MACZ,EAAO,EAAG,MAAQ,EAClB,EAAW,EAAG,UAAY,EAC1B,EAAQ,OAKV,GAJA,EAAG,OAAS,EAAG,QAAQ,SAAS,EAAG,KAAK,OAAO,EAAG,KAAK,MAAM,CAAC,EAC9D,EAAG,OAAS,EAAG,QAAU,EAAG,OAC5B,OAAO,EAAG,MACV,EAAG,YAAc,CAAC,EAAE,EAChB,EAAG,OAAO,UAAY,IAAA,IAAa,EAAG,KAAK,aAAe,EAAG,KAAK,eAAgB,CACpF,IAAI,EAAc,wCAClB,GAAI,EAAG,KAAK,iBAAmB,MAAO,EAAG,OAAO,KAAK,CAAW,OAC3D,MAAU,MAAM,CAAW,CAClC,CACA,GAAO,wBACP,GAAO,wBACP,GAAO,gDACT,KAAO,CACL,IAAI,EAAO,EAAG,MACZ,EAAW,EAAG,UACd,EAAQ,QAAU,GAAY,IAEhC,GADI,IAAK,EAAG,OAAS,EAAG,QAAQ,IAAI,EAAG,OAAQ,CAAG,GAC9C,GAAU,CAAC,EAAG,MAAO,MAAU,MAAM,6BAA6B,EACtE,GAAO,aAAgB,EAAQ,YACjC,CACA,IAAI,EAAS,QAAU,EACrB,EAAgB,CAAC,EAAG,KAAK,UACzB,EAAkB,GAClB,EAAkB,GAChB,EACA,EAAc,EAAG,OAAO,KAC1B,EAAe,MAAM,QAAQ,CAAW,EAa1C,GAZI,GAAe,EAAG,KAAK,UAAY,EAAG,OAAO,WAAa,KACxD,EACE,EAAY,QAAQ,MAAM,GAAK,KAAI,EAAc,EAAY,OAAO,MAAM,GACrE,GAAe,SACxB,EAAc,CAAC,EAAa,MAAM,EAClC,EAAe,KAGf,GAAgB,EAAY,QAAU,IACxC,EAAc,EAAY,GAC1B,EAAe,IAEb,EAAG,OAAO,MAAQ,EACpB,IAAI,EAAG,KAAK,YAAc,OACxB,MAAU,MAAM,qDAAuD,EAAG,cAAgB,2BAA2B,EAC5G,EAAG,KAAK,aAAe,KAChC,EAAe,GACf,EAAG,OAAO,KAAK,6CAA+C,EAAG,cAAgB,GAAG,GAMxF,GAHI,EAAG,OAAO,UAAY,EAAG,KAAK,WAChC,GAAO,IAAO,EAAG,MAAM,IAAI,SAAS,KAAK,EAAI,UAAU,GAErD,EAAa,CACf,GAAI,EAAG,KAAK,YACV,IAAI,EAAiB,EAAG,KAAK,cAAc,EAAG,KAAK,YAAa,CAAW,EAE7E,IAAI,EAAc,EAAG,MAAM,MAAM,GACjC,GAAI,GAAkB,GAAgB,IAAgB,IAAS,GAAe,CAAC,GAAgB,CAAW,EAAI,CAC5G,IAAI,EAAc,EAAG,WAAa,QAChC,EAAiB,EAAG,cAAgB,QAClC,EAAc,EAAG,WAAa,QAChC,EAAiB,EAAG,cAAgB,QACpC,EAAU,EAAe,iBAAmB,gBAE9C,GADA,GAAO,QAAW,EAAG,KAAK,EAAQ,CAAC,EAAa,EAAO,EAAG,KAAK,cAAe,EAAI,EAAK,OACnF,EAAgB,CAClB,IAAI,EAAY,WAAa,EAC3B,EAAW,UAAY,EACzB,GAAO,QAAW,EAAa,aAAgB,EAAS,SAAY,EAAY,iBAC5E,EAAG,KAAK,aAAe,UACzB,GAAO,QAAW,EAAa,iCAAsC,EAAS,QAAW,EAAS,mBAAsB,EAAS,MAAS,EAAS,QAAW,EAAa,aAAgB,EAAS,SAAY,EAAG,KAAK,cAAc,EAAG,OAAO,KAAM,EAAO,EAAG,KAAK,aAAa,EAAK,KAAQ,EAAY,MAAS,EAAS,QAE/T,GAAO,QAAW,EAAY,qBAC9B,IAAI,EAAO,EACX,GAAI,EAGF,IAFA,IAAI,EAAO,EAAK,GACd,EAAK,EAAK,OAAS,EACd,EAAK,GACV,EAAQ,EAAK,GAAM,GACf,GAAS,SACX,GAAO,aAAgB,EAAa,mBAAwB,EAAa,kBAAuB,EAAY,WAAgB,EAAS,cAAiB,EAAS,cAAiB,EAAY,UACnL,GAAS,UAAY,GAAS,WACvC,GAAO,aAAgB,EAAa,oBAAyB,EAAS,iBAAoB,EAAa,mBAAwB,EAAS,OAAU,EAAS,QAAW,EAAS,IAC3K,GAAS,YACX,GAAO,SAAY,EAAS,SAE9B,GAAO,MAAS,EAAY,OAAU,EAAS,MACtC,GAAS,UAClB,GAAO,aAAgB,EAAS,mBAAwB,EAAS,aAAgB,EAAS,cAAiB,EAAY,sBAAyB,EAAS,kBAAuB,EAAS,WAAc,EAAY,YAC1M,GAAS,OAClB,GAAO,aAAgB,EAAS,cAAmB,EAAS,aAAgB,EAAS,eAAkB,EAAY,YAC1G,EAAG,KAAK,aAAe,SAAW,GAAS,UACpD,GAAO,aAAgB,EAAa,mBAAwB,EAAa,mBAAwB,EAAa,oBAAyB,EAAS,aAAgB,EAAY,OAAU,EAAS,OAIrM,GAAO,aACP,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAsBtB,GAAO,QArBP,GAAO,iBAAoB,GAAiB,QAAU,oCAA0C,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,uBAC3K,EACF,GAAO,GAAM,EAAY,KAAK,GAAG,EAEjC,GAAO,GAAM,EAEf,GAAO,OACH,EAAG,KAAK,WAAa,KACvB,GAAO,0BACH,EACF,GAAO,GAAM,EAAY,KAAK,GAAG,EAEjC,GAAO,GAAM,EAEf,GAAO,MAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,UAAa,EAAY,sBAChC,IAAI,EAAc,EAAW,QAAW,EAAW,GAAM,IAAM,aAC7D,EAAsB,EAAW,EAAG,YAAY,GAAY,qBAC9D,GAAO,IAAO,EAAS,MAAS,EAAY,KACvC,IACH,GAAO,OAAU,EAAe,mBAElC,GAAO,IAAO,EAAe,IAAO,EAAuB,OAAU,EAAY,MACnF,KAAO,CACL,IAAI,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAsBtB,GAAO,QArBP,GAAO,iBAAoB,GAAiB,QAAU,oCAA0C,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,uBAC3K,EACF,GAAO,GAAM,EAAY,KAAK,GAAG,EAEjC,GAAO,GAAM,EAEf,GAAO,OACH,EAAG,KAAK,WAAa,KACvB,GAAO,0BACH,EACF,GAAO,GAAM,EAAY,KAAK,GAAG,EAEjC,GAAO,GAAM,EAEf,GAAO,MAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,8EAErC,CACA,GAAO,KACT,CACF,CACA,GAAI,EAAG,OAAO,MAAQ,CAAC,EACrB,GAAO,IAAO,EAAG,MAAM,IAAI,KAAK,KAAK,EAAI,MAAM,EAAK,IAChD,IACF,GAAO,qBACH,EACF,GAAO,IAEP,GAAO,QAAW,EAEpB,GAAO,OACP,GAAmB,SAEhB,CACL,IAAI,EAAO,EAAG,MACd,GAAI,EAGF,KAFA,IAAI,EAAa,EAAK,GACpB,GAAK,EAAK,OAAS,EACd,EAAK,IAEV,GADA,EAAc,EAAK,GAAM,GACrB,GAAgB,CAAW,EAAG,CAIhC,GAHI,EAAY,OACd,GAAO,QAAW,EAAG,KAAK,cAAc,EAAY,KAAM,EAAO,EAAG,KAAK,aAAa,EAAK,QAEzF,EAAG,KAAK,gBACN,EAAY,MAAQ,UAAY,EAAG,OAAO,WAAY,CACxD,IAAI,EAAU,EAAG,OAAO,WAEpB,GADY,OAAO,KAAK,CACP,EACrB,GAAI,GAGF,IAFA,IAAI,GAAc,GAAK,GACrB,GAAK,GAAK,OAAS,EACd,GAAK,IAAI,CACd,GAAe,GAAK,IAAM,GAC1B,IAAI,GAAO,EAAQ,IACnB,GAAI,GAAK,UAAY,IAAA,GAAW,CAC9B,IAAI,GAAY,EAAQ,EAAG,KAAK,YAAY,EAAY,EACxD,GAAI,EAAG,kBACD,EAAG,KAAK,eAAgB,CAC1B,IAAI,EAAc,2BAA6B,GAC/C,GAAI,EAAG,KAAK,iBAAmB,MAAO,EAAG,OAAO,KAAK,CAAW,OAC3D,MAAU,MAAM,CAAW,CAClC,MAEA,IAAO,QAAW,GAAa,kBAC3B,EAAG,KAAK,aAAe,UACzB,GAAO,OAAU,GAAa,gBAAmB,GAAa,YAEhE,GAAO,MAAS,GAAa,MACzB,EAAG,KAAK,aAAe,SACzB,GAAO,IAAO,EAAG,WAAW,GAAK,OAAO,EAAK,IAE7C,GAAO,IAAO,KAAK,UAAU,GAAK,OAAO,EAAK,IAEhD,GAAO,IAEX,CACF,CAEJ,MAAO,GAAI,EAAY,MAAQ,SAAW,MAAM,QAAQ,EAAG,OAAO,KAAK,EAAG,CACxE,IAAI,GAAO,EAAG,OAAO,MACrB,GAAI,GAGF,KAFA,IAAI,GAAM,EAAK,GACb,GAAK,GAAK,OAAS,EACd,EAAK,IAEV,GADA,GAAO,GAAK,GAAM,GACd,GAAK,UAAY,IAAA,GAAW,CAC9B,IAAI,GAAY,EAAQ,IAAM,EAAK,IACnC,GAAI,EAAG,kBACD,EAAG,KAAK,eAAgB,CAC1B,IAAI,EAAc,2BAA6B,GAC/C,GAAI,EAAG,KAAK,iBAAmB,MAAO,EAAG,OAAO,KAAK,CAAW,OAC3D,MAAU,MAAM,CAAW,CAClC,MAEA,IAAO,QAAW,GAAa,kBAC3B,EAAG,KAAK,aAAe,UACzB,GAAO,OAAU,GAAa,gBAAmB,GAAa,YAEhE,GAAO,MAAS,GAAa,MACzB,EAAG,KAAK,aAAe,SACzB,GAAO,IAAO,EAAG,WAAW,GAAK,OAAO,EAAK,IAE7C,GAAO,IAAO,KAAK,UAAU,GAAK,OAAO,EAAK,IAEhD,GAAO,IAEX,CACF,CAEJ,EAEF,IAAI,GAAO,EAAY,MACvB,GAAI,GAGF,KAFA,IAAI,GAAO,GAAK,GACd,EAAK,GAAK,OAAS,EACd,GAAK,GAEV,GADA,GAAQ,GAAK,IAAM,GACf,EAAe,EAAK,EAAG,CACzB,IAAI,GAAQ,GAAM,KAAK,EAAI,GAAM,QAAS,EAAY,IAAI,EACtD,KACF,GAAO,IAAO,GAAS,IACnB,IACF,GAAmB,KAGzB,CACF,CAMF,GAJI,IACF,GAAO,IAAO,EAAmB,IACjC,EAAkB,IAEhB,EAAY,OACd,GAAO,MACH,GAAe,IAAgB,EAAY,MAAQ,CAAC,GAAgB,CACtE,GAAO,WACP,IAAI,EAAc,EAAG,WAAa,QAChC,EAAiB,EAAG,cAAgB,QAClC,EAAa,GAAc,CAAC,EAChC,EAAW,KAAK,CAAG,EACnB,EAAM,GACF,EAAG,eAAiB,GAsBtB,GAAO,QArBP,GAAO,iBAAoB,GAAiB,QAAU,oCAA0C,EAAG,UAAa,kBAAqB,EAAG,KAAK,eAAe,CAAc,EAAK,uBAC3K,EACF,GAAO,GAAM,EAAY,KAAK,GAAG,EAEjC,GAAO,GAAM,EAEf,GAAO,OACH,EAAG,KAAK,WAAa,KACvB,GAAO,0BACH,EACF,GAAO,GAAM,EAAY,KAAK,GAAG,EAEjC,GAAO,GAAM,EAEf,GAAO,MAEL,EAAG,KAAK,UACV,GAAO,6BAAgC,EAAe,mCAAsC,EAAG,WAAc,YAAe,EAAS,KAEvI,GAAO,OAIT,IAAI,EAAQ,EACZ,EAAM,EAAW,IAAI,EACjB,CAAC,EAAG,eAAiB,EAEnB,EAAG,MACL,GAAO,+BAAkC,EAAS,OAElD,GAAO,uBAA0B,EAAS,oBAG5C,GAAO,cAAiB,EAAS,+EAEnC,GAAO,KACT,CAEE,IACF,GAAO,mBACH,EACF,GAAO,IAEP,GAAO,QAAW,EAEpB,GAAO,OACP,GAAmB,IAEvB,CACF,CAEJ,CACI,IACF,GAAO,IAAO,EAAmB,KAE/B,GACE,GACF,GAAO,6CACP,GAAO,+CAEP,GAAO,+BACP,GAAO,gCAET,GAAO,wBAEP,GAAO,QAAW,EAAU,sBAAyB,EAAQ,IAG/D,SAAS,GAAgB,EAAa,CAEpC,IAAK,IADD,EAAQ,EAAY,MACf,EAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,GAAI,EAAe,EAAM,EAAE,EAAG,MAAO,EACzC,CAEA,SAAS,EAAe,EAAO,CAC7B,OAAO,EAAG,OAAO,EAAM,WAAa,IAAA,IAAc,EAAM,YAAc,GAA2B,CAAK,CACxG,CAEA,SAAS,GAA2B,EAAO,CAEzC,IAAK,IADD,EAAO,EAAM,WACR,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,GAAI,EAAG,OAAO,EAAK,MAAQ,IAAA,GAAW,MAAO,EACjD,CACA,OAAO,CACT,CAGM,GAEA,KACC,SAAS,EAAQ,EAA0B,EAAqB,CAEvE,aAGA,IAAI,EAAa,yBACb,EAAiB,EAAoB,IAAI,EACzC,EAAmB,EAAoB,IAAI,EAE/C,EAAO,QAAU,CACf,IAAK,EACL,IAAK,EACL,OAAQ,EACR,SAAU,CACZ,EAUA,SAAS,EAAW,EAAS,EAAY,CAGvC,IAAI,EAAQ,KAAK,MACjB,GAAI,EAAM,SAAS,GACjB,MAAU,MAAM,WAAa,EAAU,qBAAqB,EAE9D,GAAI,CAAC,EAAW,KAAK,CAAO,EAC1B,MAAU,MAAM,WAAa,EAAU,4BAA4B,EAErE,GAAI,EAAY,CACd,KAAK,gBAAgB,EAAY,EAAI,EAErC,IAAI,EAAW,EAAW,KAC1B,GAAI,MAAM,QAAQ,CAAQ,EACxB,IAAK,IAAI,EAAE,EAAG,EAAE,EAAS,OAAQ,IAC/B,EAAS,EAAS,EAAS,GAAI,CAAU,OAE3C,EAAS,EAAS,EAAU,CAAU,EAGxC,IAAI,EAAa,EAAW,WACxB,IACE,EAAW,OAAS,KAAK,MAAM,QACjC,EAAa,CACX,MAAO,CACL,EACA,CAAE,KAAQ,gFAAiF,CAC7F,CACF,GAEF,EAAW,eAAiB,KAAK,QAAQ,EAAY,EAAI,EAE7D,CAEA,EAAM,SAAS,GAAW,EAAM,IAAI,GAAW,GAG/C,SAAS,EAAS,EAAS,EAAU,EAAY,CAE/C,IAAK,IADD,EACK,EAAE,EAAG,EAAE,EAAM,OAAQ,IAAK,CACjC,IAAI,EAAK,EAAM,GACf,GAAI,EAAG,MAAQ,EAAU,CACvB,EAAY,EACZ,KACF,CACF,CAEK,IACH,EAAY,CAAE,KAAM,EAAU,MAAO,CAAC,CAAE,EACxC,EAAM,KAAK,CAAS,GAGtB,IAAI,EAAO,CACA,UACG,aACZ,OAAQ,GACR,KAAM,EACN,WAAY,EAAW,UACzB,EACA,EAAU,MAAM,KAAK,CAAI,EACzB,EAAM,OAAO,GAAW,CAC1B,CAEA,OAAO,IACT,CASA,SAAS,EAAW,EAAS,CAE3B,IAAI,EAAO,KAAK,MAAM,OAAO,GAC7B,OAAO,EAAO,EAAK,WAAa,KAAK,MAAM,SAAS,IAAY,EAClE,CASA,SAAS,EAAc,EAAS,CAE9B,IAAI,EAAQ,KAAK,MACjB,OAAO,EAAM,SAAS,GACtB,OAAO,EAAM,IAAI,GACjB,OAAO,EAAM,OAAO,GACpB,IAAK,IAAI,EAAE,EAAG,EAAE,EAAM,OAAQ,IAE5B,IAAK,IADD,EAAQ,EAAM,EAAE,CAAC,MACZ,EAAE,EAAG,EAAE,EAAM,OAAQ,IAC5B,GAAI,EAAM,EAAE,CAAC,SAAW,EAAS,CAC/B,EAAM,OAAO,EAAG,CAAC,EACjB,KACF,CAGJ,OAAO,IACT,CAUA,SAAS,EAAgB,EAAY,EAAY,CAC/C,EAAgB,OAAS,KACzB,IAAI,EAAI,KAAK,iBAAmB,KAAK,kBACF,KAAK,QAAQ,EAAkB,EAAI,EAEtE,GAAI,EAAE,CAAU,EAAG,MAAO,GAE1B,GADA,EAAgB,OAAS,EAAE,OACvB,EACF,MAAU,MAAM,yCAA4C,KAAK,WAAW,EAAE,MAAM,CAAC,EAErF,MAAO,EACX,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAOA,EAAO,QAAU,SAAS,EAAM,EAAG,EAAG,CACpC,GAAI,IAAM,EAAG,MAAO,GAEpB,GAAI,GAAK,GAAK,OAAO,GAAK,UAAY,OAAO,GAAK,SAAU,CAC1D,GAAI,EAAE,cAAgB,EAAE,YAAa,MAAO,GAE5C,IAAI,EAAQ,EAAG,EACf,GAAI,MAAM,QAAQ,CAAC,EAAG,CAEpB,GADA,EAAS,EAAE,OACP,GAAU,EAAE,OAAQ,MAAO,GAC/B,IAAK,EAAI,EAAQ,MAAQ,GACvB,GAAI,CAAC,EAAM,EAAE,GAAI,EAAE,EAAE,EAAG,MAAO,GACjC,MAAO,EACT,CAIA,GAAI,EAAE,cAAgB,OAAQ,OAAO,EAAE,SAAW,EAAE,QAAU,EAAE,QAAU,EAAE,MAC5E,GAAI,EAAE,UAAY,OAAO,UAAU,QAAS,OAAO,EAAE,QAAQ,IAAM,EAAE,QAAQ,EAC7E,GAAI,EAAE,WAAa,OAAO,UAAU,SAAU,OAAO,EAAE,SAAS,IAAM,EAAE,SAAS,EAIjF,GAFA,EAAO,OAAO,KAAK,CAAC,EACpB,EAAS,EAAK,OACV,IAAW,OAAO,KAAK,CAAC,CAAC,CAAC,OAAQ,MAAO,GAE7C,IAAK,EAAI,EAAQ,MAAQ,GACvB,GAAI,CAAC,OAAO,UAAU,eAAe,KAAK,EAAG,EAAK,EAAE,EAAG,MAAO,GAEhE,IAAK,EAAI,EAAQ,MAAQ,GAAI,CAC3B,IAAI,EAAM,EAAK,GAEf,GAAI,CAAC,EAAM,EAAE,GAAM,EAAE,EAAI,EAAG,MAAO,EACrC,CAEA,MAAO,EACT,CAGA,OAAO,IAAI,GAAK,IAAI,CACtB,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aAGA,EAAO,QAAU,SAAU,EAAM,EAAM,CACnC,AAAW,IAAO,CAAC,EACf,OAAO,GAAS,aAAY,EAAO,CAAE,IAAK,CAAK,GACnD,IAAI,EAAU,OAAO,EAAK,QAAW,WAAa,EAAK,OAEnD,EAAM,EAAK,MAAQ,SAAU,EAAG,CAChC,OAAO,SAAU,EAAM,CACnB,OAAO,SAAU,EAAG,EAAG,CAGnB,OAAO,EAAE,CAFI,IAAK,EAAG,MAAO,EAAK,EAErB,EAAG,CADF,IAAK,EAAG,MAAO,EAAK,EACf,CAAC,CACvB,CACJ,CACJ,EAAA,CAAG,EAAK,GAAG,EAEP,EAAO,CAAC,EACZ,OAAQ,SAAS,EAAW,EAAM,CAC9B,GAAI,GAAQ,EAAK,QAAU,OAAO,EAAK,QAAW,aAC9C,EAAO,EAAK,OAAO,GAGnB,IAAS,IAAA,GACb,IAAI,OAAO,GAAQ,SAAU,OAAO,SAAS,CAAI,EAAI,GAAK,EAAO,OACjE,GAAI,OAAO,GAAS,SAAU,OAAO,KAAK,UAAU,CAAI,EAExD,IAAI,EAAG,EACP,GAAI,MAAM,QAAQ,CAAI,EAAG,CAErB,IADA,EAAM,IACD,EAAI,EAAG,EAAI,EAAK,OAAQ,IACrB,IAAG,GAAO,KACd,GAAO,EAAU,EAAK,EAAE,GAAK,OAEjC,OAAO,EAAM,GACjB,CAEA,GAAI,IAAS,KAAM,MAAO,OAE1B,GAAI,EAAK,QAAQ,CAAI,IAAM,GAAI,CAC3B,GAAI,EAAQ,OAAO,KAAK,UAAU,WAAW,EAC7C,MAAU,UAAU,uCAAuC,CAC/D,CAEA,IAAI,EAAY,EAAK,KAAK,CAAI,EAAI,EAC9B,EAAO,OAAO,KAAK,CAAI,CAAC,CAAC,KAAK,GAAO,EAAI,CAAI,CAAC,EAElD,IADA,EAAM,GACD,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CAC9B,IAAI,EAAM,EAAK,GACX,EAAQ,EAAU,EAAK,EAAI,EAE1B,IACD,IAAK,GAAO,KAChB,GAAO,KAAK,UAAU,CAAG,EAAI,IAAM,EACvC,CAEA,OADA,EAAK,OAAO,EAAW,CAAC,EACjB,IAAM,EAAM,GAhC8C,CAiCrE,EAAA,CAAG,CAAI,CACX,CAGM,GAEA,MACC,SAAS,EAAQ,CAOxB,EAAO,QAAU,SAAS,EAAa,EAAG,EAAG,CAC5C,aACA,IAAI,EAAK,8EACR,EAAM,iBACN,EAAM,iHACN,EAAM,iBACN,EAAM,KACN,EAAI,SAAS,EAAG,CAAE,OAAO,EAAY,cAAgB,GAAK,EAAA,CAAG,YAAY,GAAK,GAAK,CAAG,EAEtF,EAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAK,EAAE,GAAK,GAC7B,EAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAK,EAAE,GAAK,GAE7B,EAAK,EAAE,QAAQ,EAAI,QAAQ,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAC3E,EAAK,EAAE,QAAQ,EAAI,QAAQ,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAE3E,EAAK,SAAS,EAAE,MAAM,CAAG,EAAG,EAAE,GAAM,EAAG,SAAW,GAAK,EAAE,MAAM,CAAG,GAAK,KAAK,MAAM,CAAC,EACnF,EAAK,SAAS,EAAE,MAAM,CAAG,EAAG,EAAE,GAAK,GAAM,EAAE,MAAM,CAAG,GAAK,KAAK,MAAM,CAAC,GAAK,KAC1E,EAAQ,EAET,GAAI,EACH,IAAK,EAAK,EAAO,MAAO,GACnB,GAAK,EAAK,EAAO,MAAO,EAAG,CAGjC,IAAI,IAAI,EAAK,EAAG,EAAK,KAAK,IAAI,EAAG,OAAQ,EAAG,MAAM,EAAG,EAAO,EAAM,IAAQ,CAKzE,GAHA,EAAS,EAAE,EAAG,IAAS,GAAA,CAAI,MAAM,CAAG,GAAK,WAAW,EAAG,EAAK,GAAK,EAAG,IAAS,EAC7E,EAAS,EAAE,EAAG,IAAS,GAAA,CAAI,MAAM,CAAG,GAAK,WAAW,EAAG,EAAK,GAAK,EAAG,IAAS,EAEzE,MAAM,CAAM,IAAM,MAAM,CAAM,EAAK,OAAQ,MAAM,CAAM,EAAK,EAAI,GAMpE,GAJS,OAAO,GAAW,OAAO,IACjC,GAAU,GACV,GAAU,IAEP,EAAS,EAAU,MAAO,GAC9B,GAAI,EAAS,EAAU,MAAO,EAC/B,CACA,MAAO,EACR,CAGM,GAEA,MACC,SAAS,EAAyB,EAAS,EAEjD,SAAS,EAAS,CACjB,aAEA,SAAS,EAAQ,EAAK,CAIlB,OAHE,IAAQ,MACH,OAAO,UAAU,SAAS,KAAK,CAAG,IAAM,gBAInD,CAEA,SAAS,EAAS,EAAK,CAInB,OAHE,IAAQ,MACH,OAAO,UAAU,SAAS,KAAK,CAAG,IAAM,iBAInD,CAEA,SAAS,EAAgB,EAAO,EAAQ,CAEtC,GAAI,IAAU,EACZ,MAAO,GAKT,GADgB,OAAO,UAAU,SAAS,KAAK,CACnC,IAAM,OAAO,UAAU,SAAS,KAAK,CAAM,EACrD,MAAO,GAIT,GAAI,EAAQ,CAAK,IAAM,GAAM,CAE3B,GAAI,EAAM,SAAW,EAAO,OAC1B,MAAO,GAET,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,GAAI,EAAgB,EAAM,GAAI,EAAO,EAAE,IAAM,GAC3C,MAAO,GAGX,MAAO,EACT,CACA,GAAI,EAAS,CAAK,IAAM,GAAM,CAE5B,IAAI,EAAW,CAAC,EAChB,IAAK,IAAI,KAAO,EACd,GAAI,eAAe,KAAK,EAAO,CAAG,EAAG,CACnC,GAAI,EAAgB,EAAM,GAAM,EAAO,EAAI,IAAM,GAC/C,MAAO,GAET,EAAS,GAAO,EAClB,CAIF,IAAK,IAAI,KAAQ,EACf,GAAI,eAAe,KAAK,EAAQ,CAAI,GAC9B,EAAS,KAAU,GACrB,MAAO,GAIb,MAAO,EACT,CACA,MAAO,EACT,CAEA,SAAS,EAAQ,EAAK,CAYb,GAFH,IAAQ,IAAM,IAAQ,IAAS,IAAQ,MAEhC,EAAQ,CAAG,GAAK,EAAI,SAAW,EAEtC,MAAO,GACJ,GAAI,EAAS,CAAG,EAAG,CAEtB,IAAK,IAAI,KAAO,EAIZ,GAAI,EAAI,eAAe,CAAG,EACxB,MAAO,GAGb,MAAO,EACX,MACI,MAAO,EAEb,CAEA,SAAS,EAAU,EAAK,CAGtB,IAAK,IAFD,EAAO,OAAO,KAAK,CAAG,EACtB,EAAS,CAAC,EACL,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,EAAO,KAAK,EAAI,EAAK,GAAG,EAE1B,OAAO,CACT,CAaA,IAAI,EACA,OAAO,OAAO,UAAU,UAAa,WAC5B,SAAS,EAAK,CACvB,OAAO,EAAI,SAAS,CACtB,EAEW,SAAS,EAAK,CACvB,OAAO,EAAI,MAAM,UAAU,CAAC,CAAC,EAC/B,EAIE,EAAc,EACd,EAAW,EACX,EAAc,EACd,EAAa,EACb,EAAc,EACd,EAAe,EACf,EAAc,EACd,EAAY,EACZ,EAAoB,EACpB,EAAoB,EACpB,EAAkB,CACpB,EAAG,SACH,EAAG,MACH,EAAG,SACH,EAAG,QACH,EAAG,SACH,EAAG,UACH,EAAG,aACH,EAAG,OACH,EAAG,gBACH,EAAG,eACL,EAEI,EAAU,MACV,EAAyB,qBACzB,EAAuB,mBACvB,EAAe,WACf,EAAa,SACb,EAAY,QACZ,EAAY,QACZ,EAAa,SACb,EAAa,SACb,EAAc,UACd,EAAa,SACb,EAAW,OACX,EAAS,KACT,EAAU,MACV,EAAS,KACT,EAAS,KACT,EAAS,KACT,EAAU,MACV,EAAU,MACV,EAAS,KACT,EAAc,UACd,GAAW,OACX,GAAa,SACb,GAAU,MACV,GAAU,MACV,GAAa,SACb,GAAe,WACf,GAAY,SACZ,GAAa,UAQb,GAAc,CAChB,IAAK,GACL,IAAK,GACL,IAAK,EACL,IAAK,EACL,IAAK,GACL,IAAK,EACL,IAAK,EACL,IAAK,GACL,IAAK,EACL,IAAK,CACP,EAEI,GAAqB,CACrB,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,EACT,EAEI,GAAY,CACZ,IAAK,GACL,IAAM,GACN,KAAM,EACV,EAGA,SAAS,GAAQ,EAAI,CACjB,OAAQ,GAAM,KAAO,GAAM,KACnB,GAAM,KAAO,GAAM,KACpB,IAAO,GAClB,CAEA,SAAS,EAAM,EAAI,CACf,OAAQ,GAAM,KAAO,GAAM,KACpB,IAAO,GAClB,CACA,SAAS,GAAW,EAAI,CACpB,OAAQ,GAAM,KAAO,GAAM,KACnB,GAAM,KAAO,GAAM,KACnB,GAAM,KAAO,GAAM,KACpB,IAAO,GAClB,CAEA,SAAS,IAAQ,CACjB,CACA,GAAM,UAAY,CACd,SAAU,SAAS,EAAQ,CACvB,IAAI,EAAS,CAAC,EACd,KAAK,SAAW,EAIhB,IAHA,IAAI,EACA,EACA,EACG,KAAK,SAAW,EAAO,QAC1B,GAAI,GAAQ,EAAO,KAAK,SAAS,EAC7B,EAAQ,KAAK,SACb,EAAa,KAAK,2BAA2B,CAAM,EACnD,EAAO,KAAK,CAAC,KAAM,EACN,MAAO,EACA,OAAK,CAAC,OACvB,GAAI,GAAY,EAAO,KAAK,aAAe,IAAA,GAC9C,EAAO,KAAK,CAAC,KAAM,GAAY,EAAO,KAAK,WAC/B,MAAO,EAAO,KAAK,UACnB,MAAO,KAAK,QAAQ,CAAC,EACjC,KAAK,gBACF,GAAI,EAAM,EAAO,KAAK,SAAS,EAClC,EAAQ,KAAK,eAAe,CAAM,EAClC,EAAO,KAAK,CAAK,OACd,GAAI,EAAO,KAAK,YAAc,IAGjC,EAAQ,KAAK,iBAAiB,CAAM,EACpC,EAAO,KAAK,CAAK,OACd,GAAI,EAAO,KAAK,YAAc,IACjC,EAAQ,KAAK,SACb,EAAa,KAAK,yBAAyB,CAAM,EACjD,EAAO,KAAK,CAAC,KAAM,EACN,MAAO,EACA,OAAK,CAAC,OACvB,GAAI,EAAO,KAAK,YAAc,IACjC,EAAQ,KAAK,SACb,EAAa,KAAK,yBAAyB,CAAM,EACjD,EAAO,KAAK,CAAC,KAAM,GACN,MAAO,EACA,OAAK,CAAC,OACvB,GAAI,EAAO,KAAK,YAAc,IAAK,CACtC,EAAQ,KAAK,SACb,IAAI,EAAU,KAAK,gBAAgB,CAAM,EACzC,EAAO,KAAK,CAAC,KAAM,GACN,MAAO,EACA,OAAK,CAAC,CAC9B,MAAO,GAAI,GAAmB,EAAO,KAAK,aAAe,IAAA,GACrD,EAAO,KAAK,KAAK,iBAAiB,CAAM,CAAC,OACtC,GAAI,GAAU,EAAO,KAAK,aAAe,IAAA,GAE5C,KAAK,gBACF,GAAI,EAAO,KAAK,YAAc,IACjC,EAAQ,KAAK,SACb,KAAK,WACD,EAAO,KAAK,YAAc,KAC1B,KAAK,WACL,EAAO,KAAK,CAAC,KAAM,EAAS,MAAO,KAAa,OAAK,CAAC,GAEtD,EAAO,KAAK,CAAC,KAAM,EAAY,MAAO,IAAY,OAAK,CAAC,OAEzD,GAAI,EAAO,KAAK,YAAc,IACjC,EAAQ,KAAK,SACb,KAAK,WACD,EAAO,KAAK,YAAc,KAC1B,KAAK,WACL,EAAO,KAAK,CAAC,KAAM,EAAQ,MAAO,KAAa,OAAK,CAAC,GAErD,EAAO,KAAK,CAAC,KAAM,EAAU,MAAO,IAAY,OAAK,CAAC,MAEvD,CACH,IAAI,EAAY,MAAM,qBAAuB,EAAO,KAAK,SAAS,EAElE,KADA,GAAM,KAAO,aACP,CACV,CAEJ,OAAO,CACX,EAEA,2BAA4B,SAAS,EAAQ,CACzC,IAAI,EAAQ,KAAK,SAEjB,IADA,KAAK,WACE,KAAK,SAAW,EAAO,QAAU,GAAW,EAAO,KAAK,SAAS,GACpE,KAAK,WAET,OAAO,EAAO,MAAM,EAAO,KAAK,QAAQ,CAC5C,EAEA,yBAA0B,SAAS,EAAQ,CACvC,IAAI,EAAQ,KAAK,SACjB,KAAK,WAEL,IADA,IAAI,EAAY,EAAO,OAChB,EAAO,KAAK,YAAc,KAAQ,KAAK,SAAW,GAAW,CAEhE,IAAI,EAAU,KAAK,SACf,EAAO,KAAa,OAAS,EAAO,EAAU,KAAO,MACxB,EAAO,EAAU,KAAO,KACrD,GAAW,EAEX,IAEJ,KAAK,SAAW,CACpB,CAEA,MADA,MAAK,WACE,KAAK,MAAM,EAAO,MAAM,EAAO,KAAK,QAAQ,CAAC,CACxD,EAEA,yBAA0B,SAAS,EAAQ,CACvC,IAAI,EAAQ,KAAK,SACjB,KAAK,WAEL,IADA,IAAI,EAAY,EAAO,OAChB,EAAO,KAAK,YAAc,KAAO,KAAK,SAAW,GAAW,CAE/D,IAAI,EAAU,KAAK,SACf,EAAO,KAAa,OAAS,EAAO,EAAU,KAAO,MACxB,EAAO,EAAU,KAAO,KACrD,GAAW,EAEX,IAEJ,KAAK,SAAW,CACpB,CAGA,MAFA,MAAK,WACS,EAAO,MAAM,EAAQ,EAAG,KAAK,SAAW,CACzC,CAAC,CAAC,QAAQ,MAAO,GAAG,CACrC,EAEA,eAAgB,SAAS,EAAQ,CAC7B,IAAI,EAAQ,KAAK,SACjB,KAAK,WAEL,IADA,IAAI,EAAY,EAAO,OAChB,EAAM,EAAO,KAAK,SAAS,GAAK,KAAK,SAAW,GACnD,KAAK,WAGT,MAAO,CAAC,KAAM,EAAY,MADd,SAAS,EAAO,MAAM,EAAO,KAAK,QAAQ,CACjB,EAAU,OAAK,CACxD,EAEA,iBAAkB,SAAS,EAAQ,CAC/B,IAAI,EAAQ,KAAK,SASb,MARJ,MAAK,WACD,EAAO,KAAK,YAAc,KAC1B,KAAK,WACE,CAAC,KAAM,GAAY,MAAO,KAAa,OAAK,GAC5C,EAAO,KAAK,YAAc,KACjC,KAAK,WACE,CAAC,KAAM,EAAa,MAAO,KAAa,OAAK,GAE7C,CAAC,KAAM,GAAc,MAAO,IAAY,OAAK,CAE5D,EAEA,iBAAkB,SAAS,EAAQ,CAC/B,IAAI,EAAQ,KAAK,SACb,EAAe,EAAO,GAE1B,GADA,KAAK,WACD,IAAiB,IAKf,OAJE,EAAO,KAAK,YAAc,KAC1B,KAAK,WACE,CAAC,KAAM,EAAQ,MAAO,KAAa,OAAK,GAE1C,CAAC,KAAM,GAAS,MAAO,IAAY,OAAK,EAE9C,GAAI,IAAiB,IAKpB,OAJA,EAAO,KAAK,YAAc,KAC1B,KAAK,WACE,CAAC,KAAM,EAAS,MAAO,KAAa,OAAK,GAEzC,CAAC,KAAM,EAAQ,MAAO,IAAY,OAAK,EAE/C,GAAI,IAAiB,IAKpB,OAJA,EAAO,KAAK,YAAc,KAC1B,KAAK,WACE,CAAC,KAAM,EAAS,MAAO,KAAa,OAAK,GAEzC,CAAC,KAAM,EAAQ,MAAO,IAAY,OAAK,EAE/C,GAAI,IAAiB,KACpB,EAAO,KAAK,YAAc,IAE1B,MADA,MAAK,WACE,CAAC,KAAM,EAAQ,MAAO,KAAa,OAAK,CAG3D,EAEA,gBAAiB,SAAS,EAAQ,CAC9B,KAAK,WAIL,IAHA,IAAI,EAAQ,KAAK,SACb,EAAY,EAAO,OACnB,EACE,EAAO,KAAK,YAAc,KAAO,KAAK,SAAW,GAAW,CAE9D,IAAI,EAAU,KAAK,SACf,EAAO,KAAa,OAAS,EAAO,EAAU,KAAO,MACxB,EAAO,EAAU,KAAO,KACrD,GAAW,EAEX,IAEJ,KAAK,SAAW,CACpB,CACA,IAAI,EAAgB,EAAS,EAAO,MAAM,EAAO,KAAK,QAAQ,CAAC,EAU/D,MATA,GAAgB,EAAc,QAAQ,MAAO,GAAG,EAChD,AAII,EAJA,KAAK,eAAe,CAAa,EACvB,KAAK,MAAM,CAAa,EAGxB,KAAK,MAAM,IAAO,EAAgB,GAAI,EAGpD,KAAK,WACE,CACX,EAEA,eAAgB,SAAS,EAAe,CACpC,IAAI,EAAgB,MAChB,EAAe,CAAC,OAAQ,QAAS,MAAM,EACvC,EAAgB,cAEpB,GAAI,IAAkB,GAClB,MAAO,GAGJ,GAFI,EAAc,QAAQ,EAAc,EAAE,GAAK,GAE3C,EAAa,QAAQ,CAAa,GAAK,EAC9C,MAAO,GACJ,GAAI,EAAc,QAAQ,EAAc,EAAE,GAAK,EAClD,GAAI,CAEA,OADA,KAAK,MAAM,CAAa,EACjB,EACX,MAAa,CACT,MAAO,EACX,MAEA,MAAO,EAEf,CACJ,EAEI,IAAI,EAAe,CAAC,EACpB,EAAa,GAAW,EACxB,EAAa,GAA0B,EACvC,EAAa,GAAwB,EACrC,EAAa,GAAgB,EAC7B,EAAa,GAAc,EAC3B,EAAa,GAAa,EAC1B,EAAa,GAAc,EAC3B,EAAa,GAAc,EAC3B,EAAa,GAAe,EAC5B,EAAa,GAAc,EAC3B,EAAa,GAAY,EACzB,EAAa,GAAU,EACvB,EAAa,GAAW,EACxB,EAAa,GAAU,EACvB,EAAa,GAAU,EACvB,EAAa,GAAU,EACvB,EAAa,GAAW,EACxB,EAAa,GAAW,EACxB,EAAa,GAAU,EACvB,EAAa,GAAe,EAC5B,EAAa,IAAY,GACzB,EAAa,IAAc,GAC3B,EAAa,IAAW,GACxB,EAAa,IAAW,GACxB,EAAa,IAAc,GAC3B,EAAa,IAAgB,GAC7B,EAAa,IAAc,GAE/B,SAAS,IAAS,CAClB,CAEA,GAAO,UAAY,CACf,MAAO,SAAS,EAAY,CACxB,KAAK,YAAY,CAAU,EAC3B,KAAK,MAAQ,EACb,IAAI,EAAM,KAAK,WAAW,CAAC,EAC3B,GAAI,KAAK,WAAW,CAAC,IAAM,EAAS,CAChC,IAAI,EAAI,KAAK,gBAAgB,CAAC,EAC1B,EAAY,MACZ,0BAA4B,EAAE,KAAO,YAAc,EAAE,KAAK,EAE9D,KADA,GAAM,KAAO,cACP,CACV,CACA,OAAO,CACX,EAEA,YAAa,SAAS,EAAY,CAE9B,IAAI,EAAS,IADG,GACC,CAAC,CAAC,SAAS,CAAU,EACtC,EAAO,KAAK,CAAC,KAAM,EAAS,MAAO,GAAI,MAAO,EAAW,MAAM,CAAC,EAChE,KAAK,OAAS,CAClB,EAEA,WAAY,SAAS,EAAK,CACtB,IAAI,EAAY,KAAK,gBAAgB,CAAC,EACtC,KAAK,SAAS,EAGd,IAFA,IAAI,EAAO,KAAK,IAAI,CAAS,EACzB,EAAe,KAAK,WAAW,CAAC,EAC7B,EAAM,EAAa,IACtB,KAAK,SAAS,EACd,EAAO,KAAK,IAAI,EAAc,CAAI,EAClC,EAAe,KAAK,WAAW,CAAC,EAEpC,OAAO,CACX,EAEA,WAAY,SAAS,EAAQ,CACzB,OAAO,KAAK,OAAO,KAAK,MAAQ,EAAO,CAAC,IAC5C,EAEA,gBAAiB,SAAS,EAAQ,CAC9B,OAAO,KAAK,OAAO,KAAK,MAAQ,EACpC,EAEA,SAAU,UAAW,CACjB,KAAK,OACT,EAEA,IAAK,SAAS,EAAO,CACnB,IAAI,EACA,EACA,EACJ,OAAQ,EAAM,KAAd,CACE,KAAK,GACH,MAAO,CAAC,KAAM,UAAW,MAAO,EAAM,KAAK,EAC7C,KAAK,EACH,MAAO,CAAC,KAAM,QAAS,KAAM,EAAM,KAAK,EAC1C,KAAK,EACH,IAAI,EAAO,CAAC,KAAM,QAAS,KAAM,EAAM,KAAK,EAC5C,GAAI,KAAK,WAAW,CAAC,IAAM,GACvB,MAAU,MAAM,mDAAmD,EAEvE,OAAO,EACT,KAAK,GAEH,MADA,GAAQ,KAAK,WAAW,EAAa,GAAG,EACjC,CAAC,KAAM,gBAAiB,SAAU,CAAC,CAAK,CAAC,EAClD,KAAK,GAUH,MATA,GAAO,CAAC,KAAM,UAAU,EACxB,EAAQ,KACR,AAKI,EALA,KAAK,WAAW,CAAC,IAAM,EAGf,CAAC,KAAM,UAAU,EAEjB,KAAK,oBAAoB,EAAa,IAAI,EAE/C,CAAC,KAAM,kBAAmB,SAAU,CAAC,EAAM,CAAK,CAAC,EAC1D,KAAK,GACH,OAAO,KAAK,IAAI,EAAM,KAAM,CAAC,KAAM,UAAU,CAAC,EAChD,KAAK,GACH,OAAO,KAAK,sBAAsB,EACpC,KAAK,EAGH,MAFA,GAAO,CAAC,KAAM,EAAa,SAAU,CAAC,CAAC,KAAM,UAAU,CAAC,CAAC,EACzD,EAAQ,KAAK,oBAAoB,EAAa,OAAO,EAC9C,CAAC,KAAM,aAAc,SAAU,CAAC,EAAM,CAAK,CAAC,EACrD,KAAK,GAYH,OAXI,KAAK,WAAW,CAAC,IAAM,GAAc,KAAK,WAAW,CAAC,IAAM,GAC5D,EAAQ,KAAK,sBAAsB,EAC5B,KAAK,gBAAgB,CAAC,KAAM,UAAU,EAAG,CAAK,GAC9C,KAAK,WAAW,CAAC,IAAM,IACvB,KAAK,WAAW,CAAC,IAAM,GAC9B,KAAK,SAAS,EACd,KAAK,SAAS,EACd,EAAQ,KAAK,oBAAoB,EAAa,IAAI,EAC3C,CAAC,KAAM,aACN,SAAU,CAAC,CAAC,KAAM,UAAU,EAAG,CAAK,CAAC,GAE1C,KAAK,sBAAsB,EACpC,KAAK,EACH,MAAO,CAAC,KAAM,CAAW,EAC3B,KAAK,EAEH,MADA,GAAa,KAAK,WAAW,EAAa,MAAM,EACzC,CAAC,KAAM,sBAAuB,SAAU,CAAC,CAAU,CAAC,EAC7D,KAAK,GAEH,IADA,IAAI,EAAO,CAAC,EACL,KAAK,WAAW,CAAC,IAAM,GACxB,KAAK,WAAW,CAAC,IAAM,GACzB,EAAa,CAAC,KAAM,CAAW,EAC/B,KAAK,SAAS,GAEd,EAAa,KAAK,WAAW,CAAC,EAEhC,EAAK,KAAK,CAAU,EAGtB,OADA,KAAK,OAAO,CAAU,EACf,EAAK,GACd,QACE,KAAK,YAAY,CAAK,CAC1B,CACF,EAEA,IAAK,SAAS,EAAW,EAAM,CAC7B,IAAI,EACJ,OAAO,EAAP,CACE,KAAK,GACH,IAAI,EAAM,EAAa,IAQvB,OAPI,KAAK,WAAW,CAAC,IAAM,IAK3B,KAAK,SAAS,EACd,EAAQ,KAAK,oBAAoB,CAAG,EAC7B,CAAC,KAAM,kBAAmB,SAAU,CAAC,EAAM,CAAK,CAAC,IANpD,EAAQ,KAAK,aAAa,CAAG,EACtB,CAAC,KAAM,gBAAiB,SAAU,CAAC,EAAM,CAAK,CAAC,GAM5D,KAAK,EAEH,MADA,GAAQ,KAAK,WAAW,EAAa,IAAI,EAClC,CAAC,KAAM,EAAU,SAAU,CAAC,EAAM,CAAK,CAAC,EACjD,KAAK,EAEH,MADA,GAAQ,KAAK,WAAW,EAAa,EAAE,EAChC,CAAC,KAAM,eAAgB,SAAU,CAAC,EAAM,CAAK,CAAC,EACvD,KAAK,EAEH,MADA,GAAQ,KAAK,WAAW,EAAa,GAAG,EACjC,CAAC,KAAM,gBAAiB,SAAU,CAAC,EAAM,CAAK,CAAC,EACxD,KAAK,GAIH,IAHA,IAAI,EAAO,EAAK,KACZ,EAAO,CAAC,EACR,EAAY,EACT,KAAK,WAAW,CAAC,IAAM,GACxB,KAAK,WAAW,CAAC,IAAM,GACzB,EAAa,CAAC,KAAM,CAAW,EAC/B,KAAK,SAAS,GAEd,EAAa,KAAK,WAAW,CAAC,EAE5B,KAAK,WAAW,CAAC,IAAM,GACzB,KAAK,OAAO,CAAS,EAEvB,EAAK,KAAK,CAAU,EAItB,OAFA,KAAK,OAAO,CAAU,EACtB,EAAO,CAAC,KAAM,WAAkB,OAAM,SAAU,CAAI,EAC7C,EACT,KAAK,GACH,IAAI,EAAY,KAAK,WAAW,CAAC,EAOjC,OANA,KAAK,OAAO,CAAY,EACxB,AAGE,EAHE,KAAK,WAAW,CAAC,IAAM,EACjB,CAAC,KAAM,UAAU,EAEjB,KAAK,oBAAoB,EAAa,MAAM,EAE/C,CAAC,KAAM,mBAAoB,SAAU,CAAC,EAAM,EAAO,CAAS,CAAC,EACtE,KAAK,EAGH,MAAO,CAAC,KAAM,aAAc,SAAU,CAAC,CAFvB,KAAM,EAAa,SAAU,CAAC,CAAI,CAEJ,EAD9B,KAAK,oBAAoB,EAAa,OACG,CAAC,CAAC,EAC7D,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACH,OAAO,KAAK,iBAAiB,EAAM,CAAS,EAC9C,KAAK,GACH,IAAI,EAAQ,KAAK,gBAAgB,CAAC,EAQlC,OAPI,EAAM,OAAS,GAAc,EAAM,OAAS,GAC5C,EAAQ,KAAK,sBAAsB,EAC5B,KAAK,gBAAgB,EAAM,CAAK,IAE3C,KAAK,OAAO,EAAQ,EACpB,KAAK,OAAO,CAAY,EACxB,EAAQ,KAAK,oBAAoB,EAAa,IAAI,EAC3C,CAAC,KAAM,aAAc,SAAU,CAAC,EAAM,CAAK,CAAC,GACrD,QACE,KAAK,YAAY,KAAK,gBAAgB,CAAC,CAAC,CAC5C,CACF,EAEA,OAAQ,SAAS,EAAW,CACxB,GAAI,KAAK,WAAW,CAAC,IAAM,EACvB,KAAK,SAAS,MACX,CACH,IAAI,EAAI,KAAK,gBAAgB,CAAC,EAC1B,EAAY,MAAM,YAAc,EAAY,UAAY,EAAE,IAAI,EAElE,KADA,GAAM,KAAO,cACP,CACV,CACJ,EAEA,YAAa,SAAS,EAAO,CACzB,IAAI,EAAY,MAAM,kBACA,EAAM,KAAO,OACb,EAAM,MAAQ,GAAI,EAExC,KADA,GAAM,KAAO,cACP,CACV,EAGA,sBAAuB,UAAW,CAC9B,GAAI,KAAK,WAAW,CAAC,IAAM,GAAa,KAAK,WAAW,CAAC,IAAM,EAC3D,OAAO,KAAK,sBAAsB,EAElC,IAAI,EAAO,CACP,KAAM,QACN,MAAO,KAAK,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAGxC,OAFA,KAAK,SAAS,EACd,KAAK,OAAO,CAAY,EACjB,CAEf,EAEA,gBAAiB,SAAS,EAAM,EAAO,CACnC,IAAI,EAAY,CAAC,KAAM,kBAAmB,SAAU,CAAC,EAAM,CAAK,CAAC,EAO7D,OANA,EAAM,OAAS,QACR,CACH,KAAM,aACN,SAAU,CAAC,EAAW,KAAK,oBAAoB,EAAa,IAAI,CAAC,CACrE,EAEO,CAEf,EAEA,sBAAuB,UAAW,CAM9B,IAHA,IAAI,EAAQ,CAAC,KAAM,KAAM,IAAI,EACzB,EAAQ,EACR,EAAe,KAAK,WAAW,CAAC,EAC7B,IAAiB,GAAgB,EAAQ,GAAG,CAC/C,GAAI,IAAiB,EACjB,IACA,KAAK,SAAS,OACX,GAAI,IAAiB,EACxB,EAAM,GAAS,KAAK,gBAAgB,CAAC,CAAC,CAAC,MACvC,KAAK,SAAS,MACX,CACH,IAAI,EAAI,KAAK,WAAW,CAAC,EACrB,EAAY,MAAM,mCACA,EAAE,MAAQ,IAAM,EAAE,KAAO,GAAG,EAElD,KADA,GAAM,KAAO,cACP,CACV,CACA,EAAe,KAAK,WAAW,CAAC,CACpC,CAEA,OADA,KAAK,OAAO,CAAY,EACjB,CACH,KAAM,QACN,SAAU,CACd,CACJ,EAEA,iBAAkB,SAAS,EAAM,EAAY,CAE3C,MAAO,CAAC,KAAM,aAAc,KAAM,EAAY,SAAU,CAAC,EAD7C,KAAK,WAAW,EAAa,EAC0B,CAAC,CAAC,CACvE,EAEA,aAAc,SAAS,EAAK,CACxB,IAAI,EAAY,KAAK,WAAW,CAAC,EAEjC,GAAI,CADc,EAAwB,EAAsB,EACnD,CAAC,CAAC,QAAQ,CAAS,GAAK,EACjC,OAAO,KAAK,WAAW,CAAG,EACvB,GAAI,IAAc,GAErB,OADA,KAAK,OAAO,EAAY,EACjB,KAAK,sBAAsB,EAC/B,GAAI,IAAc,GAErB,OADA,KAAK,OAAO,EAAU,EACf,KAAK,sBAAsB,CAE1C,EAEA,oBAAqB,SAAS,EAAK,CAC/B,IAAI,EACJ,GAAI,EAAa,KAAK,WAAW,CAAC,GAAK,GACnC,EAAQ,CAAC,KAAM,UAAU,OACtB,GAAI,KAAK,WAAW,CAAC,IAAM,GAC9B,EAAQ,KAAK,WAAW,CAAG,OACxB,GAAI,KAAK,WAAW,CAAC,IAAM,GAC9B,EAAQ,KAAK,WAAW,CAAG,OACxB,GAAI,KAAK,WAAW,CAAC,IAAM,GAC9B,KAAK,OAAO,EAAO,EACnB,EAAQ,KAAK,aAAa,CAAG,MAC1B,CACH,IAAI,EAAI,KAAK,gBAAgB,CAAC,EAC1B,EAAY,MAAM,mCACA,EAAE,MAAQ,IAAM,EAAE,KAAO,GAAG,EAElD,KADA,GAAM,KAAO,cACP,CACV,CACA,OAAO,CACX,EAEA,sBAAuB,UAAW,CAE9B,IADA,IAAI,EAAc,CAAC,EACZ,KAAK,WAAW,CAAC,IAAM,GAAc,CACxC,IAAI,EAAa,KAAK,WAAW,CAAC,EAElC,GADA,EAAY,KAAK,CAAU,EACvB,KAAK,WAAW,CAAC,IAAM,IACvB,KAAK,OAAO,CAAS,EACjB,KAAK,WAAW,CAAC,IAAM,GACzB,MAAU,MAAM,2BAA2B,CAGrD,CAEA,OADA,KAAK,OAAO,CAAY,EACjB,CAAC,KAAM,kBAAmB,SAAU,CAAW,CAC1D,EAEA,sBAAuB,UAAW,CAIhC,IAHA,IAAI,EAAQ,CAAC,EACT,EAAkB,CAAC,EAAwB,CAAoB,EAC/D,EAAU,EAAS,EAAO,IACrB,CAEP,GADA,EAAW,KAAK,gBAAgB,CAAC,EAC7B,EAAgB,QAAQ,EAAS,IAAI,EAAI,EAC3C,MAAU,MAAM,uCACA,EAAS,IAAI,EAQ/B,GANA,EAAU,EAAS,MACnB,KAAK,SAAS,EACd,KAAK,OAAO,CAAS,EACrB,EAAQ,KAAK,WAAW,CAAC,EACzB,EAAO,CAAC,KAAM,eAAgB,KAAM,EAAgB,OAAK,EACzD,EAAM,KAAK,CAAI,EACX,KAAK,WAAW,CAAC,IAAM,EACzB,KAAK,OAAO,CAAS,OAChB,GAAI,KAAK,WAAW,CAAC,IAAM,EAAY,CAC5C,KAAK,OAAO,CAAU,EACtB,KACF,CACF,CACA,MAAO,CAAC,KAAM,kBAAmB,SAAU,CAAK,CAClD,CACJ,EAGA,SAAS,GAAgB,EAAS,CAChC,KAAK,QAAU,CACjB,CAEA,GAAgB,UAAY,CACxB,OAAQ,SAAS,EAAM,EAAO,CAC1B,OAAO,KAAK,MAAM,EAAM,CAAK,CACjC,EAEA,MAAO,SAAS,EAAM,EAAO,CACzB,IAAI,EAAS,EAAS,EAAQ,EAAO,EAAQ,EAAO,EAAM,EAAO,EAAW,EAC5E,OAAQ,EAAK,KAAb,CACE,IAAK,QASH,OARI,IAAU,MAAQ,EAAS,CAAK,GAChC,EAAQ,EAAM,EAAK,MACf,IAAU,IAAA,GACH,KAEA,GAGR,KACT,IAAK,gBAEH,IADA,EAAS,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EACtC,EAAI,EAAG,EAAI,EAAK,SAAS,OAAQ,IAElC,GADA,EAAS,KAAK,MAAM,EAAK,SAAS,GAAI,CAAM,EACxC,IAAW,KACX,OAAO,KAGf,OAAO,EACT,IAAK,kBAGH,MAFA,GAAO,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EACzC,EAAQ,KAAK,MAAM,EAAK,SAAS,GAAI,CAAI,EAClC,EACT,IAAK,QACH,GAAI,CAAC,EAAQ,CAAK,EAChB,OAAO,KAET,IAAI,EAAQ,EAAK,MAQjB,OAPI,EAAQ,IACV,EAAQ,EAAM,OAAS,GAEzB,EAAS,EAAM,GACX,IAAW,IAAA,KACb,EAAS,MAEJ,EACT,IAAK,QACH,GAAI,CAAC,EAAQ,CAAK,EAChB,OAAO,KAET,IAAI,EAAc,EAAK,SAAS,MAAM,CAAC,EACnC,EAAW,KAAK,mBAAmB,EAAM,OAAQ,CAAW,EAC5D,EAAQ,EAAS,GACjB,EAAO,EAAS,GAChB,EAAO,EAAS,GAEpB,GADA,EAAS,CAAC,EACN,EAAO,EACP,IAAK,EAAI,EAAO,EAAI,EAAM,GAAK,EAC3B,EAAO,KAAK,EAAM,EAAE,OAGxB,IAAK,EAAI,EAAO,EAAI,EAAM,GAAK,EAC3B,EAAO,KAAK,EAAM,EAAE,EAG5B,OAAO,EACT,IAAK,aAEH,IAAI,EAAO,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EAC7C,GAAI,CAAC,EAAQ,CAAI,EACf,OAAO,KAGT,IADA,EAAY,CAAC,EACR,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC3B,EAAU,KAAK,MAAM,EAAK,SAAS,GAAI,EAAK,EAAE,EAC1C,IAAY,MACd,EAAU,KAAK,CAAO,EAG1B,OAAO,EACT,IAAK,kBAGH,GADA,EAAO,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EACrC,CAAC,EAAS,CAAI,EAChB,OAAO,KAET,EAAY,CAAC,EACb,IAAI,EAAS,EAAU,CAAI,EAC3B,IAAK,EAAI,EAAG,EAAI,EAAO,OAAQ,IAC7B,EAAU,KAAK,MAAM,EAAK,SAAS,GAAI,EAAO,EAAE,EAC5C,IAAY,MACd,EAAU,KAAK,CAAO,EAG1B,OAAO,EACT,IAAK,mBAEH,GADA,EAAO,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EACrC,CAAC,EAAQ,CAAI,EACf,OAAO,KAET,IAAI,EAAW,CAAC,EACZ,EAAe,CAAC,EACpB,IAAK,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC3B,EAAU,KAAK,MAAM,EAAK,SAAS,GAAI,EAAK,EAAE,EACzC,EAAQ,CAAO,GAClB,EAAS,KAAK,EAAK,EAAE,EAGzB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,OAAQ,IACnC,EAAU,KAAK,MAAM,EAAK,SAAS,GAAI,EAAS,EAAE,EAC9C,IAAY,MACd,EAAa,KAAK,CAAO,EAG7B,OAAO,EACT,IAAK,aAGH,OAFA,EAAQ,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EAC1C,EAAS,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EACpC,EAAK,KAAZ,CACE,KAAK,EACH,EAAS,EAAgB,EAAO,CAAM,EACtC,MACF,KAAK,EACH,EAAS,CAAC,EAAgB,EAAO,CAAM,EACvC,MACF,KAAK,EACH,EAAS,EAAQ,EACjB,MACF,KAAK,EACH,EAAS,GAAS,EAClB,MACF,KAAK,EACH,EAAS,EAAQ,EACjB,MACF,KAAK,EACH,EAAS,GAAS,EAClB,MACF,QACE,MAAU,MAAM,uBAAyB,EAAK,IAAI,CACtD,CACA,OAAO,EACT,KAAK,EACH,IAAI,EAAW,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EACjD,GAAI,CAAC,EAAQ,CAAQ,EACnB,OAAO,KAET,IAAI,GAAS,CAAC,EACd,IAAK,EAAI,EAAG,EAAI,EAAS,OAAQ,IAC/B,EAAU,EAAS,GACf,EAAQ,CAAO,EACjB,GAAO,KAAK,MAAM,GAAQ,CAAO,EAEjC,GAAO,KAAK,CAAO,EAGvB,OAAO,GACT,IAAK,WACH,OAAO,EACT,IAAK,kBACH,GAAI,IAAU,KACZ,OAAO,KAGT,IADA,EAAY,CAAC,EACR,EAAI,EAAG,EAAI,EAAK,SAAS,OAAQ,IAClC,EAAU,KAAK,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,CAAC,EAEtD,OAAO,EACT,IAAK,kBACH,GAAI,IAAU,KACZ,OAAO,KAET,EAAY,CAAC,EACb,IAAI,GACJ,IAAK,EAAI,EAAG,EAAI,EAAK,SAAS,OAAQ,IACpC,GAAQ,EAAK,SAAS,GACtB,EAAU,GAAM,MAAQ,KAAK,MAAM,GAAM,MAAO,CAAK,EAEvD,OAAO,EACT,IAAK,eAKH,MAJA,GAAU,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EACxC,EAAQ,CAAO,IACf,EAAU,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,GAEzC,EACT,IAAK,gBAMH,MALA,GAAQ,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EAEtC,EAAQ,CAAK,IAAM,GACd,EAEF,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EAC3C,IAAK,gBAEH,MADA,GAAQ,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EACnC,EAAQ,CAAK,EACtB,IAAK,UACH,OAAO,EAAK,MACd,KAAK,EAEH,MADA,GAAO,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,EAClC,KAAK,MAAM,EAAK,SAAS,GAAI,CAAI,EAC1C,KAAK,EACH,OAAO,EACT,IAAK,WACH,IAAI,GAAe,CAAC,EACpB,IAAK,EAAI,EAAG,EAAI,EAAK,SAAS,OAAQ,IAClC,GAAa,KAAK,KAAK,MAAM,EAAK,SAAS,GAAI,CAAK,CAAC,EAEzD,OAAO,KAAK,QAAQ,aAAa,EAAK,KAAM,EAAY,EAC1D,IAAK,sBACH,IAAI,GAAU,EAAK,SAAS,GAI5B,MADA,IAAQ,aAAe,EAChB,GACT,QACE,MAAU,MAAM,sBAAwB,EAAK,IAAI,CACrD,CACJ,EAEA,mBAAoB,SAAS,EAAa,EAAa,CACrD,IAAI,EAAQ,EAAY,GACpB,EAAO,EAAY,GACnB,EAAO,EAAY,GACnB,EAAW,CAAC,KAAM,KAAM,IAAI,EAChC,GAAI,IAAS,KACX,EAAO,OACF,GAAI,IAAS,EAAG,CACrB,IAAI,EAAY,MAAM,iCAAiC,EAEvD,KADA,GAAM,KAAO,eACP,CACR,CACA,IAAI,EAAoB,EAAO,EAgB/B,MAdA,CAGI,EAHA,IAAU,KACF,EAAoB,EAAc,EAAI,EAEtC,KAAK,cAAc,EAAa,EAAO,CAAI,EAGvD,AAGI,EAHA,IAAS,KACF,EAAoB,GAAK,EAEzB,KAAK,cAAc,EAAa,EAAM,CAAI,EAErD,EAAS,GAAK,EACd,EAAS,GAAK,EACd,EAAS,GAAK,EACP,CACT,EAEA,cAAe,SAAS,EAAa,EAAa,EAAM,CASpD,OARI,EAAc,GACd,GAAe,EACX,EAAc,IACd,EAAc,EAAO,EAAI,GAAK,IAE3B,GAAe,IACtB,EAAc,EAAO,EAAI,EAAc,EAAI,GAExC,CACX,CAEJ,EAEA,SAAS,GAAQ,EAAa,CAC5B,KAAK,aAAe,EACpB,KAAK,cAAgB,CAcjB,IAAK,CAAC,MAAO,KAAK,aAAc,WAAY,CAAC,CAAC,MAAO,CAAC,CAAW,CAAC,CAAC,CAAC,EACpE,IAAK,CAAC,MAAO,KAAK,aAAc,WAAY,CAAC,CAAC,MAAO,CAAC,CAAiB,CAAC,CAAC,CAAC,EAC1E,KAAM,CAAC,MAAO,KAAK,cAAe,WAAY,CAAC,CAAC,MAAO,CAAC,CAAW,CAAC,CAAC,CAAC,EACtE,SAAU,CACN,MAAO,KAAK,kBACZ,WAAY,CAAC,CAAC,MAAO,CAAC,EAAa,CAAU,CAAC,EAClC,CAAC,MAAO,CAAC,CAAQ,CAAC,CAAC,CAAC,EACpC,UAAa,CACT,MAAO,KAAK,kBACZ,WAAY,CAAC,CAAC,MAAO,CAAC,CAAW,CAAC,EAAG,CAAC,MAAO,CAAC,CAAW,CAAC,CAAC,CAAC,EAChE,MAAO,CAAC,MAAO,KAAK,eAAgB,WAAY,CAAC,CAAC,MAAO,CAAC,CAAW,CAAC,CAAC,CAAC,EACxE,OAAQ,CACJ,MAAO,KAAK,gBACZ,WAAY,CAAC,CAAC,MAAO,CAAC,EAAa,EAAY,CAAW,CAAC,CAAC,CAAC,EACjE,IAAK,CACD,MAAO,KAAK,aACZ,WAAY,CAAC,CAAC,MAAO,CAAC,CAAW,CAAC,EAAG,CAAC,MAAO,CAAC,CAAU,CAAC,CAAC,CAAC,EAC/D,IAAK,CACD,MAAO,KAAK,aACZ,WAAY,CAAC,CAAC,MAAO,CAAC,EAAmB,CAAiB,CAAC,CAAC,CAAC,EACjE,MAAS,CACL,MAAO,KAAK,eACZ,WAAY,CAAC,CAAC,MAAO,CAAC,CAAW,EAAG,SAAU,EAAI,CAAC,CACvD,EACA,OAAU,CACR,MAAO,KAAK,eACZ,WAAY,CAAC,CAAC,MAAO,CAAC,CAAU,CAAC,EAAG,CAAC,MAAO,CAAC,CAAW,CAAC,CAAC,CAC5D,EACA,IAAK,CAAC,MAAO,KAAK,aAAc,WAAY,CAAC,CAAC,MAAO,CAAC,CAAiB,CAAC,CAAC,CAAC,EAC1E,YAAe,CACX,MAAO,KAAK,oBACZ,WAAY,CAAC,CAAC,MAAO,CAAC,CAAW,CAAC,EAAG,CAAC,MAAO,CAAC,CAAW,CAAC,CAAC,CAAC,EAChE,IAAK,CACD,MAAO,KAAK,aACZ,WAAY,CAAC,CAAC,MAAO,CAAC,EAAmB,CAAiB,CAAC,CAAC,CAAC,EACjE,OAAU,CACR,MAAO,KAAK,eACZ,WAAY,CAAC,CAAC,MAAO,CAAC,CAAU,CAAC,EAAG,CAAC,MAAO,CAAC,CAAW,CAAC,CAAC,CAC5D,EACA,KAAM,CAAC,MAAO,KAAK,cAAe,WAAY,CAAC,CAAC,MAAO,CAAC,CAAQ,CAAC,CAAC,CAAC,EACnE,KAAM,CAAC,MAAO,KAAK,cAAe,WAAY,CAAC,CAAC,MAAO,CAAC,CAAW,CAAC,CAAC,CAAC,EACtE,OAAQ,CAAC,MAAO,KAAK,gBAAiB,WAAY,CAAC,CAAC,MAAO,CAAC,CAAW,CAAC,CAAC,CAAC,EAC1E,KAAM,CAAC,MAAO,KAAK,cAAe,WAAY,CAAC,CAAC,MAAO,CAAC,EAAmB,CAAiB,CAAC,CAAC,CAAC,EAC/F,QAAW,CACT,MAAO,KAAK,gBACZ,WAAY,CAAC,CAAC,MAAO,CAAC,CAAU,CAAC,EAAG,CAAC,MAAO,CAAC,CAAW,CAAC,CAAC,CAC5D,EACA,KAAM,CACF,MAAO,KAAK,cACZ,WAAY,CACR,CAAC,MAAO,CAAC,CAAW,CAAC,EACrB,CAAC,MAAO,CAAC,CAAiB,CAAC,CAC/B,CACJ,EACA,QAAS,CACL,MAAO,KAAK,iBACZ,WAAY,CAAC,CAAC,MAAO,CAAC,EAAa,CAAU,CAAC,CAAC,CAAC,EACpD,SAAY,CAAC,MAAO,KAAK,iBAAkB,WAAY,CAAC,CAAC,MAAO,CAAC,CAAQ,CAAC,CAAC,CAAC,EAC5E,UAAa,CAAC,MAAO,KAAK,kBAAmB,WAAY,CAAC,CAAC,MAAO,CAAC,CAAQ,CAAC,CAAC,CAAC,EAC9E,UAAa,CAAC,MAAO,KAAK,kBAAmB,WAAY,CAAC,CAAC,MAAO,CAAC,CAAQ,CAAC,CAAC,CAAC,EAC9E,SAAY,CACR,MAAO,KAAK,iBACZ,WAAY,CAAC,CAAC,MAAO,CAAC,CAAQ,EAAG,SAAU,EAAI,CAAC,CACpD,CACJ,CACF,CAEA,GAAQ,UAAY,CAClB,aAAc,SAAS,EAAM,EAAc,CACzC,IAAI,EAAgB,KAAK,cAAc,GACvC,GAAI,IAAkB,IAAA,GAClB,MAAU,MAAM,qBAAuB,EAAO,IAAI,EAGtD,OADA,KAAK,cAAc,EAAM,EAAc,EAAc,UAAU,EACxD,EAAc,MAAM,KAAK,KAAM,CAAY,CACpD,EAEA,cAAe,SAAS,EAAM,EAAM,EAAW,CAM3C,IAAI,EACJ,GAAI,EAAU,EAAU,OAAS,EAAE,CAAC,aAC5B,EAAK,OAAS,EAAU,OAExB,KADA,GAAa,EAAU,SAAW,EAAI,YAAc,aAC1C,MAAM,kBAAoB,EAAO,oBACR,EAAU,OAAS,EACtC,iBAAmB,EAAK,MAAM,CAClD,MACG,GAAI,EAAK,SAAW,EAAU,OAEjC,KADA,GAAa,EAAU,SAAW,EAAI,YAAc,aAC1C,MAAM,kBAAoB,EAAO,YAChB,EAAU,OAAS,EAC9B,iBAAmB,EAAK,MAAM,EAKlD,IAAK,IAHD,EACA,EACA,EACK,EAAI,EAAG,EAAI,EAAU,OAAQ,IAAK,CACvC,EAAc,GACd,EAAc,EAAU,EAAE,CAAC,MAC3B,EAAa,KAAK,aAAa,EAAK,EAAE,EACtC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,OAAQ,IACpC,GAAI,KAAK,aAAa,EAAY,EAAY,GAAI,EAAK,EAAE,EAAG,CACxD,EAAc,GACd,KACJ,CAEJ,GAAI,CAAC,EAAa,CACd,IAAI,EAAW,EACV,IAAI,SAAS,EAAgB,CAC1B,OAAO,EAAgB,EAC3B,CAAC,CAAC,CACD,KAAK,GAAG,EACb,MAAU,MAAM,cAAgB,EAAO,yBACC,EAAI,GAC5B,eAAiB,EACjB,sBACA,EAAgB,GAAc,WAAW,CAC7D,CACJ,CACJ,EAEA,aAAc,SAAS,EAAQ,EAAU,EAAU,CAC/C,GAAI,IAAa,EACb,MAAO,GAEX,GAAI,IAAa,GACb,IAAa,GACb,IAAa,EAKb,IAAI,IAAa,EACb,OAAO,IAAW,EACf,GAAI,IAAW,EAAY,CAG9B,IAAI,EACA,IAAa,EACf,EAAU,EACD,IAAa,IACtB,EAAU,GAEZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,OAAQ,IACjC,GAAI,CAAC,KAAK,aACF,KAAK,aAAa,EAAS,EAAE,EAAG,EACf,EAAS,EAAE,EAChC,MAAO,GAGf,MAAO,EACX,OAEA,OAAO,IAAW,CAE1B,EACA,aAAc,SAAS,EAAK,CACxB,OAAQ,OAAO,UAAU,SAAS,KAAK,CAAG,EAA1C,CACI,IAAK,kBACH,OAAO,EACT,IAAK,kBACH,OAAO,EACT,IAAK,iBACH,OAAO,EACT,IAAK,mBACH,OAAO,EACT,IAAK,gBACH,OAAO,EACT,IAAK,kBAMD,OAHE,EAAI,eAAiB,EAChB,EAEA,CAEf,CACJ,EAEA,oBAAqB,SAAS,EAAc,CACxC,OAAO,EAAa,EAAE,CAAC,YAAY,EAAa,EAAE,IAAM,CAC5D,EAEA,kBAAmB,SAAS,EAAc,CACtC,IAAI,EAAY,EAAa,GACzB,EAAS,EAAa,GAC1B,OAAO,EAAU,QAAQ,EAAQ,EAAU,OAAS,EAAO,MAAM,IAAM,EAC3E,EAEA,iBAAkB,SAAS,EAAc,CAErC,GADe,KAAK,aAAa,EAAa,EACnC,IAAM,EAAa,CAG5B,IAAK,IAFD,EAAc,EAAa,GAC3B,EAAc,GACT,EAAI,EAAY,OAAS,EAAG,GAAK,EAAG,IACzC,GAAe,EAAY,GAE/B,OAAO,CACT,KAAO,CACL,IAAI,EAAgB,EAAa,EAAE,CAAC,MAAM,CAAC,EAE3C,OADA,EAAc,QAAQ,EACf,CACT,CACJ,EAEA,aAAc,SAAS,EAAc,CACnC,OAAO,KAAK,IAAI,EAAa,EAAE,CACjC,EAEA,cAAe,SAAS,EAAc,CAClC,OAAO,KAAK,KAAK,EAAa,EAAE,CACpC,EAEA,aAAc,SAAS,EAAc,CAGjC,IAAK,IAFD,EAAM,EACN,EAAa,EAAa,GACrB,EAAI,EAAG,EAAI,EAAW,OAAQ,IACnC,GAAO,EAAW,GAEtB,OAAO,EAAM,EAAW,MAC5B,EAEA,kBAAmB,SAAS,EAAc,CACtC,OAAO,EAAa,EAAE,CAAC,QAAQ,EAAa,EAAE,GAAK,CACvD,EAEA,eAAgB,SAAS,EAAc,CACnC,OAAO,KAAK,MAAM,EAAa,EAAE,CACrC,EAEA,gBAAiB,SAAS,EAAc,CAEnC,OADG,EAAS,EAAa,EAAE,EAKpB,OAAO,KAAK,EAAa,EAAE,CAAC,CAAC,OAJ7B,EAAa,EAAE,CAAC,MAM5B,EAEA,aAAc,SAAS,EAAc,CAKnC,IAAK,IAJD,EAAS,CAAC,EACV,EAAc,KAAK,aACnB,EAAa,EAAa,GAC1B,EAAW,EAAa,GACnB,EAAI,EAAG,EAAI,EAAS,OAAQ,IACjC,EAAO,KAAK,EAAY,MAAM,EAAY,EAAS,EAAE,CAAC,EAE1D,OAAO,CACT,EAEA,eAAgB,SAAS,EAAc,CAErC,IAAK,IADD,EAAS,CAAC,EACL,EAAI,EAAG,EAAI,EAAa,OAAQ,IAAK,CAC5C,IAAI,EAAU,EAAa,GAC3B,IAAK,IAAI,KAAO,EACd,EAAO,GAAO,EAAQ,EAE1B,CACA,OAAO,CACT,EAEA,aAAc,SAAS,EAAc,CACnC,GAAI,EAAa,EAAE,CAAC,OAAS,EAE3B,IADe,KAAK,aAAa,EAAa,EAAE,CAAC,EACtC,IAAM,EACf,OAAO,KAAK,IAAI,MAAM,KAAM,EAAa,EAAE,EAI3C,IAAK,IAFD,EAAW,EAAa,GACxB,EAAa,EAAS,GACjB,EAAI,EAAG,EAAI,EAAS,OAAQ,IAC7B,EAAW,cAAc,EAAS,EAAE,EAAI,IACxC,EAAa,EAAS,IAG9B,OAAO,CACT,MAEE,OAAO,IAEb,EAEA,aAAc,SAAS,EAAc,CACnC,GAAI,EAAa,EAAE,CAAC,OAAS,EAE3B,IADe,KAAK,aAAa,EAAa,EAAE,CAAC,EACtC,IAAM,EACf,OAAO,KAAK,IAAI,MAAM,KAAM,EAAa,EAAE,EAI3C,IAAK,IAFD,EAAW,EAAa,GACxB,EAAa,EAAS,GACjB,EAAI,EAAG,EAAI,EAAS,OAAQ,IAC7B,EAAS,EAAE,CAAC,cAAc,CAAU,EAAI,IACxC,EAAa,EAAS,IAG9B,OAAO,CACT,MAEA,OAAO,IAEX,EAEA,aAAc,SAAS,EAAc,CAGnC,IAAK,IAFD,EAAM,EACN,EAAY,EAAa,GACpB,EAAI,EAAG,EAAI,EAAU,OAAQ,IACpC,GAAO,EAAU,GAEnB,OAAO,CACT,EAEA,cAAe,SAAS,EAAc,CAClC,OAAQ,KAAK,aAAa,EAAa,EAAE,EAAzC,CACE,KAAK,EACH,MAAO,SACT,KAAK,EACH,MAAO,SACT,KAAK,EACH,MAAO,QACT,KAAK,EACH,MAAO,SACT,KAAK,EACH,MAAO,UACT,KAAK,EACH,MAAO,SACT,KAAK,EACH,MAAO,MACX,CACJ,EAEA,cAAe,SAAS,EAAc,CAClC,OAAO,OAAO,KAAK,EAAa,EAAE,CACtC,EAEA,gBAAiB,SAAS,EAAc,CAIpC,IAAK,IAHD,EAAM,EAAa,GACnB,EAAO,OAAO,KAAK,CAAG,EACtB,EAAS,CAAC,EACL,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC7B,EAAO,KAAK,EAAI,EAAK,GAAG,EAE5B,OAAO,CACX,EAEA,cAAe,SAAS,EAAc,CAClC,IAAI,EAAW,EAAa,GAE5B,OADe,EAAa,EACb,CAAC,KAAK,CAAQ,CACjC,EAEA,iBAAkB,SAAS,EAAc,CAIjC,OAHA,KAAK,aAAa,EAAa,EAAE,IAAM,EAChC,EAAa,GAEb,CAAC,EAAa,EAAE,CAE/B,EAEA,kBAAmB,SAAS,EAAc,CAIlC,OAHA,KAAK,aAAa,EAAa,EAAE,IAAM,EAChC,EAAa,GAEb,KAAK,UAAU,EAAa,EAAE,CAE7C,EAEA,kBAAmB,SAAS,EAAc,CACtC,IAAI,EAAW,KAAK,aAAa,EAAa,EAAE,EAC5C,EASJ,OARI,IAAa,EACN,EAAa,GACb,IAAa,IACpB,EAAiB,CAAC,EAAa,GAC3B,CAAC,MAAM,CAAc,GACd,EAGR,IACX,EAEA,iBAAkB,SAAS,EAAc,CACrC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAa,OAAQ,IACrC,GAAI,KAAK,aAAa,EAAa,EAAE,IAAM,EACvC,OAAO,EAAa,GAG5B,OAAO,IACX,EAEA,cAAe,SAAS,EAAc,CAClC,IAAI,EAAc,EAAa,EAAE,CAAC,MAAM,CAAC,EAEzC,OADA,EAAY,KAAK,EACV,CACX,EAEA,gBAAiB,SAAS,EAAc,CACpC,IAAI,EAAc,EAAa,EAAE,CAAC,MAAM,CAAC,EACzC,GAAI,EAAY,SAAW,EACvB,OAAO,EAEX,IAAI,EAAc,KAAK,aACnB,EAAa,EAAa,GAC1B,EAAe,KAAK,aACpB,EAAY,MAAM,EAAY,EAAY,EAAE,CAAC,EACjD,GAAI,CAAC,EAAa,CAAW,CAAC,CAAC,QAAQ,CAAY,EAAI,EACnD,MAAU,MAAM,WAAW,EAW/B,IAAK,IATD,EAAO,KAQP,EAAY,CAAC,EACR,EAAI,EAAG,EAAI,EAAY,OAAQ,IACtC,EAAU,KAAK,CAAC,EAAG,EAAY,EAAE,CAAC,EAEpC,EAAU,KAAK,SAAS,EAAG,EAAG,CAC5B,IAAI,EAAQ,EAAY,MAAM,EAAY,EAAE,EAAE,EAC1C,EAAQ,EAAY,MAAM,EAAY,EAAE,EAAE,EAC9C,GAAI,EAAK,aAAa,CAAK,IAAM,EAC7B,MAAU,MACN,uBAAyB,EAAe,cACxC,EAAK,aAAa,CAAK,CAAC,EACzB,GAAI,EAAK,aAAa,CAAK,IAAM,EACpC,MAAU,MACN,uBAAyB,EAAe,cACxC,EAAK,aAAa,CAAK,CAAC,EAU9B,OARE,EAAQ,EACH,EACE,EAAQ,EACV,GAKA,EAAE,GAAK,EAAE,EAEpB,CAAC,EAED,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,OAAQ,IACpC,EAAY,GAAK,EAAU,EAAE,CAAC,GAEhC,OAAO,CACX,EAEA,eAAgB,SAAS,EAAc,CAOrC,IAAK,IAND,EAAa,EAAa,GAC1B,EAAgB,EAAa,GAC7B,EAAc,KAAK,kBAAkB,EAAY,CAAC,EAAa,CAAW,CAAC,EAC3E,EAAY,KACZ,EACA,EACK,EAAI,EAAG,EAAI,EAAc,OAAQ,IACxC,EAAU,EAAY,EAAc,EAAE,EAClC,EAAU,IACZ,EAAY,EACZ,EAAY,EAAc,IAG9B,OAAO,CACT,EAEA,eAAgB,SAAS,EAAc,CAOrC,IAAK,IAND,EAAa,EAAa,GAC1B,EAAgB,EAAa,GAC7B,EAAc,KAAK,kBAAkB,EAAY,CAAC,EAAa,CAAW,CAAC,EAC3E,EAAY,IACZ,EACA,EACK,EAAI,EAAG,EAAI,EAAc,OAAQ,IACxC,EAAU,EAAY,EAAc,EAAE,EAClC,EAAU,IACZ,EAAY,EACZ,EAAY,EAAc,IAG9B,OAAO,CACT,EAEA,kBAAmB,SAAS,EAAY,EAAc,CACpD,IAAI,EAAO,KACP,EAAc,KAAK,aAUvB,OAAO,SATgB,EAAG,CACxB,IAAI,EAAU,EAAY,MAAM,EAAY,CAAC,EAC7C,GAAI,EAAa,QAAQ,EAAK,aAAa,CAAO,CAAC,EAAI,EAAG,CACxD,IAAI,EAAM,8BAAgC,EAChC,cAAgB,EAAK,aAAa,CAAO,EACnD,MAAU,MAAM,CAAG,CACrB,CACA,OAAO,CACT,CAEF,CAEF,EAEA,SAAS,GAAQ,EAAQ,CAGvB,OADU,IADO,GACF,CAAC,CAAC,MAAM,CACd,CACX,CAEA,SAAS,GAAS,EAAQ,CAEtB,OAAO,IADS,GACL,CAAC,CAAC,SAAS,CAAM,CAChC,CAEA,SAAS,GAAO,EAAM,EAAY,CAC9B,IAAI,EAAS,IAAI,GAIb,EAAU,IAAI,GACd,EAAc,IAAI,GAAgB,CAAO,EAC7C,EAAQ,aAAe,EACvB,IAAI,EAAO,EAAO,MAAM,CAAU,EAClC,OAAO,EAAY,OAAO,EAAM,CAAI,CACxC,CAEA,EAAQ,SAAW,GACnB,EAAQ,QAAU,GAClB,EAAQ,OAAS,GACjB,EAAQ,gBAAkB,CAC5B,EAAA,CAAgBF,CAAO,CAGjB,GAEA,MACC,SAAS,EAAQ,CAExB,aAGA,IAAI,EAAW,EAAO,QAAU,SAAU,EAAQ,EAAM,EAAI,CAEtD,OAAO,GAAQ,aACjB,EAAK,EACL,EAAO,CAAC,GAGV,EAAK,EAAK,IAAM,EAChB,IAAI,EAAO,OAAO,GAAM,WAAc,EAAK,EAAG,KAAO,UAAW,CAAC,EAC7D,EAAO,EAAG,MAAQ,UAAW,CAAC,EAElC,EAAU,EAAM,EAAK,EAAM,EAAQ,GAAI,CAAM,CAC/C,EAGA,EAAS,SAAW,CAClB,gBAAiB,GACjB,MAAO,GACP,SAAU,GACV,qBAAsB,GACtB,cAAe,GACf,IAAK,EACP,EAEA,EAAS,cAAgB,CACvB,MAAO,GACP,MAAO,GACP,MAAO,GACP,MAAO,EACT,EAEA,EAAS,cAAgB,CACvB,YAAa,GACb,WAAY,GACZ,kBAAmB,GACnB,aAAc,EAChB,EAEA,EAAS,aAAe,CACtB,QAAS,GACT,KAAM,GACN,MAAO,GACP,SAAU,GACV,QAAS,GACT,QAAS,GACT,iBAAkB,GAClB,iBAAkB,GAClB,WAAY,GACZ,UAAW,GACX,UAAW,GACX,QAAS,GACT,OAAQ,GACR,SAAU,GACV,SAAU,GACV,YAAa,GACb,cAAe,GACf,cAAe,EACjB,EAGA,SAAS,EAAU,EAAM,EAAK,EAAM,EAAQ,EAAS,EAAY,EAAe,EAAe,EAAc,EAAU,CACrH,GAAI,GAAU,OAAO,GAAU,UAAY,CAAC,MAAM,QAAQ,CAAM,EAAG,CAEjE,IAAK,IAAI,KADT,EAAI,EAAQ,EAAS,EAAY,EAAe,EAAe,EAAc,CAAQ,EACrE,EAAQ,CACtB,IAAI,EAAM,EAAO,GACjB,GAAI,MAAM,QAAQ,CAAG,MACf,KAAO,EAAS,cAClB,IAAK,IAAI,EAAE,EAAG,EAAE,EAAI,OAAQ,IAC1B,EAAU,EAAM,EAAK,EAAM,EAAI,GAAI,EAAU,IAAM,EAAM,IAAM,EAAG,EAAY,EAAS,EAAK,EAAQ,CAAC,CAAA,MAEpG,GAAI,KAAO,EAAS,kBACrB,GAAO,OAAO,GAAO,SACvB,IAAK,IAAI,KAAQ,EACf,EAAU,EAAM,EAAK,EAAM,EAAI,GAAO,EAAU,IAAM,EAAM,IAAM,EAAc,CAAI,EAAG,EAAY,EAAS,EAAK,EAAQ,CAAI,CAAA,MAExH,KAAO,EAAS,UAAa,EAAK,SAAW,EAAE,KAAO,EAAS,gBACxE,EAAU,EAAM,EAAK,EAAM,EAAK,EAAU,IAAM,EAAK,EAAY,EAAS,EAAK,CAAM,CAEzF,CACA,EAAK,EAAQ,EAAS,EAAY,EAAe,EAAe,EAAc,CAAQ,CACxF,CACF,CAGA,SAAS,EAAc,EAAK,CAC1B,OAAO,EAAI,QAAQ,KAAM,IAAI,CAAC,CAAC,QAAQ,MAAO,IAAI,CACpD,CAGM,GAEA,MACC,SAAS,EAAyB,EAAS,CAElD,aAGA,IAAI,EAAe,CACjB,EAAK,KACL,EAAK,KACL,EAAK;EACL,EAAK,KACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACR,EAEI,EAAS,GAGb,EAAQ,MAAQ,SAAU,EAAQ,EAAG,EAAS,CAC5C,IAAI,EAAW,CAAC,EACZ,EAAO,EACP,EAAS,EACT,EAAM,EACN,EAAS,GAAW,EAAQ,QAAU,OAAO,OAAU,IAC3D,MAAO,CACL,KAAM,EAAO,GAAI,EAAI,EACX,UACZ,EAEA,SAAS,EAAO,EAAK,EAAU,CAC7B,EAAW,EACX,IAAI,EACJ,EAAI,EAAK,OAAO,EAChB,IAAI,EAAO,EAAQ,EACnB,OAAQ,EAAR,CACE,IAAK,IAAK,EAAK,KAAK,EAAG,EAAO,GAAM,MACpC,IAAK,IAAK,EAAK,MAAM,EAAG,EAAO,GAAO,MACtC,IAAK,IAAK,EAAK,KAAK,EAAG,EAAO,KAAM,MACpC,IAAK,IAAK,EAAO,EAAY,EAAG,MAChC,IAAK,IAAK,EAAO,EAAW,CAAG,EAAG,MAClC,IAAK,IAAK,EAAO,EAAY,CAAG,EAAG,MACnC,QACE,EAAS,EACL,cAAc,QAAQ,CAAI,GAAK,EACjC,EAAO,EAAY,EAEnB,EAAgB,CACtB,CAIA,OAHA,EAAI,EAAK,UAAU,EACnB,EAAW,EACP,GAAY,EAAM,EAAO,QAAQ,EAAgB,EAC9C,CACT,CAEA,SAAS,GAAa,CACpB,KACE,KAAO,EAAM,EAAO,QAAQ,CAC1B,OAAQ,EAAO,GAAf,CACE,IAAK,IAAK,IAAU,MACpB,IAAK,IAAM,GAAU,EAAG,MACxB,IAAK,KAAM,EAAS,EAAG,MACvB,IAAK;EAAM,EAAS,EAAG,IAAQ,MAC/B,QAAS,MAAM,IACjB,CACA,GACF,CACJ,CAEA,SAAS,GAAc,CAGrB,IAFA,IAAI,EAAM,GACN,EAEF,EAAO,EAAQ,EACX,GAAQ,KAED,GAAQ,MACjB,EAAO,EAAQ,EACX,KAAQ,EACV,GAAO,EAAa,GACb,GAAQ,IACf,GAAO,EAAY,EAEnB,EAAmB,GAErB,GAAO,EAGX,OAAO,CACT,CAEA,SAAS,GAAc,CACrB,IAAI,EAAS,GACT,EAAU,GACV,EAAO,IAAQ,MAAK,GAAU,EAAQ,GAE1C,GAAU,EAAO,IAAQ,IACb,EAAQ,EACR,EAAU,EAElB,EAAO,IAAQ,MACjB,GAAU,EAAQ,EAAI,EAAU,EAChC,EAAU,KAGR,EAAO,IAAQ,KAAO,EAAO,IAAQ,OACvC,GAAU,EAAQ,GACd,EAAO,IAAQ,KAAO,EAAO,IAAQ,OAAK,GAAU,EAAQ,GAChE,GAAU,EAAU,EACpB,EAAU,IAGZ,IAAI,EAAS,CAAC,EACd,OAAO,GAAU,IAAY,WAAoC,EAAS,YAChE,OAAO,CAAM,EACb,CACZ,CAEA,SAAS,EAAW,EAAK,CACvB,EAAW,EACX,IAAI,EAAM,CAAC,EACP,EAAI,EACR,GAAI,EAAQ,GAAK,IAAK,OAAO,EAG7B,IAFA,EAAS,IAEI,CACX,IAAI,EAAU,EAAM,IAAM,EAC1B,EAAI,KAAK,EAAO,CAAO,CAAC,EACxB,EAAW,EACX,IAAI,EAAO,EAAQ,EACnB,GAAI,GAAQ,IAAK,MACb,GAAQ,KAAK,EAAmB,EACpC,EAAW,EACX,GACF,CACA,OAAO,CACT,CAEA,SAAS,EAAY,EAAK,CACxB,EAAW,EACX,IAAI,EAAM,CAAC,EACX,GAAI,EAAQ,GAAK,IAAK,OAAO,EAG7B,IAFA,EAAS,IAEI,CACX,IAAI,EAAM,EAAO,EACb,EAAQ,GAAK,KAAK,EAAmB,EACzC,IAAI,EAAM,EAAY,EAClB,EAAU,EAAM,IAAM,EAAkB,CAAG,EAC/C,EAAO,EAAS,MAAO,CAAG,EAC1B,EAAI,EAAS,QAAQ,EACrB,EAAW,EACP,EAAQ,GAAK,KAAK,EAAmB,EACzC,EAAW,EACX,EAAI,GAAO,EAAO,CAAO,EACzB,EAAW,EACX,IAAI,EAAO,EAAQ,EACnB,GAAI,GAAQ,IAAK,MACb,GAAQ,KAAK,EAAmB,EACpC,EAAW,CACb,CACA,OAAO,CACT,CAEA,SAAS,EAAK,EAAK,CACjB,IAAK,IAAI,EAAE,EAAG,EAAE,EAAI,OAAQ,IACtB,EAAQ,IAAM,EAAI,IAAI,EAAmB,CACjD,CAEA,SAAS,GAAU,CACjB,EAAmB,EACnB,IAAI,EAAO,EAAO,GAGlB,MAFA,KACA,IACO,CACT,CAEA,SAAS,GAAW,CAClB,IACA,GACF,CAEA,SAAS,GAAc,CAGrB,IAFA,IAAI,EAAQ,EACR,EAAO,EACJ,KAAS,CACd,IAAS,EACT,IAAI,EAAO,EAAQ,CAAC,CAAC,YAAY,EAC7B,GAAQ,KAAO,GAAQ,IACzB,GAAQ,EAAK,WAAW,EAAI,EAAS,GAC9B,GAAQ,KAAO,GAAQ,IAC9B,GAAQ,CAAC,EAET,EAAmB,CACvB,CACA,OAAO,OAAO,aAAa,CAAI,CACjC,CAEA,SAAS,GAAY,CAEnB,IADA,IAAI,EAAS,GACN,EAAO,IAAQ,KAAO,EAAO,IAAQ,KAC1C,GAAU,EAAQ,EAEpB,GAAI,EAAO,OAAQ,OAAO,EAC1B,EAAmB,EACnB,EAAgB,CAClB,CAEA,SAAS,EAAI,EAAK,EAAM,CACtB,EAAO,EAAK,EAAM,EAAO,CAAC,CAC5B,CAEA,SAAS,EAAO,EAAK,EAAM,EAAK,CAC9B,EAAS,GAAO,EAAS,IAAQ,CAAC,EAClC,EAAS,EAAI,CAAC,GAAQ,CACxB,CAEA,SAAS,GAAS,CAChB,MAAO,CACC,OACE,SACH,KACP,CACF,CAEA,SAAS,GAAkB,CACzB,MAAU,YAAY,oBAAsB,EAAO,GAAO,wBAA0B,CAAG,CACzF,CAEA,SAAS,GAAqB,CAC5B,EAAS,EACT,EAAgB,CAClB,CAEA,SAAS,GAAqB,CAC5B,GAAI,GAAO,EAAO,OAChB,MAAU,YAAY,8BAA8B,CACxD,CACF,EAGA,EAAQ,UAAY,SAAU,EAAM,EAAG,EAAS,CAC9C,GAAI,CAAC,EAAU,CAAI,EAAG,OACtB,IAAI,EAAS,EACT,EAAO,EACP,EAAa,OAAO,GAAW,SACf,EAAQ,MACR,EACpB,OAAQ,OAAO,EAAf,CACE,IAAK,SACH,IAAI,EAAM,EAAa,GACT,GACA,EAAa,EACX,EACA,KAAK,MAAM,CAAU,EACrC,EAAa,GAAO,EAAO,EAAK,GAAG,EACnC,EAAQ,EACR,EAAW,EACX,MACF,IAAK,SACH,EAAa,EAAW,MAAM,EAAG,EAAE,EACnC,EAAQ,EACR,EAAW,EACX,IAAK,IAAI,EAAE,EAAG,EAAE,EAAW,OAAQ,IAAK,CAEtC,OADW,EAAW,GACtB,CACE,IAAK,IAAK,IAAY,MACtB,IAAK,IAAM,GAAY,EAAG,MAC1B,IAAK,KAAM,EAAW,EAAG,MACzB,IAAK;EAAM,EAAW,EAAG,IAAU,MACnC,QAAS,MAAU,MAAM,2CAA2C,CACtE,CACA,GACF,CACA,MACF,QACE,EAAa,IAAA,EACjB,CAEA,IAAI,EAAO,GACP,EAAW,CAAC,EACZ,EAAO,EACP,EAAS,EACT,EAAM,EACN,EAAM,GAAW,EAAQ,KAAO,OAAO,KAAO,WAElD,OADA,EAAW,EAAM,EAAG,EAAE,EACf,CACC,OACI,UACZ,EAEA,SAAS,EAAW,EAAO,EAAK,EAAK,CAEnC,OADA,EAAI,EAAK,OAAO,EACR,OAAO,EAAf,CACE,IAAK,SACL,IAAK,SACL,IAAK,UACH,EAAI,GAAK,CAAK,EAAG,MACnB,IAAK,SACH,EAAI,EAAO,CAAK,CAAC,EAAG,MACtB,IAAK,SACC,IAAU,KACZ,EAAI,MAAM,EACD,OAAO,EAAM,QAAU,WAChC,EAAI,EAAO,EAAM,OAAO,CAAC,CAAC,EACjB,MAAM,QAAQ,CAAK,EAC5B,EAAe,EACN,EACL,EAAM,YAAY,kBACpB,EAAe,EACR,aAAiB,IACxB,EAAgB,EACT,aAAiB,IACxB,EAAgB,EAAI,EAEpB,EAAgB,EAElB,EAAgB,CAEtB,CACA,EAAI,EAAK,UAAU,EAEnB,SAAS,GAAiB,CACxB,GAAI,EAAM,OAAQ,CAChB,EAAI,GAAG,EAEP,IAAK,IADD,EAAU,EAAM,EACX,EAAE,EAAG,EAAE,EAAM,OAAQ,IACxB,GAAG,EAAI,GAAG,EACd,EAAO,CAAO,EAGd,EAFW,EAAU,EAAM,EAAE,EAAI,EAAM,GAAK,KAE3B,EADH,EAAM,IAAM,CACO,EAEnC,EAAO,CAAG,EACV,EAAI,GAAG,CACT,MACE,EAAI,IAAI,CAEZ,CAEA,SAAS,GAAkB,CACzB,IAAI,EAAO,OAAO,KAAK,CAAK,EAC5B,GAAI,EAAK,OAAQ,CACf,EAAI,GAAG,EAEP,IAAK,IADD,EAAU,EAAM,EACX,EAAE,EAAG,EAAE,EAAK,OAAQ,IAAK,CAChC,IAAI,EAAM,EAAK,GACX,EAAQ,EAAM,GAClB,GAAI,EAAU,CAAK,EAAG,CAChB,GAAG,EAAI,GAAG,EACd,IAAI,EAAU,EAAM,IAAM,EAAkB,CAAG,EAC/C,EAAO,CAAO,EACd,EAAI,EAAS,KAAK,EAClB,EAAI,EAAO,CAAG,CAAC,EACf,EAAI,EAAS,QAAQ,EACrB,EAAI,GAAG,EACH,GAAY,EAAI,GAAG,EACvB,EAAW,EAAO,EAAS,CAAO,CACpC,CACF,CACA,EAAO,CAAG,EACV,EAAI,GAAG,CACT,MACE,EAAI,IAAI,CAEZ,CAEA,SAAS,EAAgB,EAAO,CAC9B,GAAI,EAAM,KAAM,CACd,EAAI,GAAG,EAKP,IAJA,IAAI,EAAU,EAAM,EAChB,EAAQ,GACR,EAAU,EAAM,QAAQ,EACxB,EAAQ,EAAQ,KAAK,EAClB,CAAC,EAAM,MAAM,CAClB,IAAI,EAAO,EAAM,MACb,EAAM,EAAK,GACX,EAAQ,EAAQ,GAAO,EAAK,GAChC,GAAI,EAAU,CAAK,EAAG,CACf,GAAO,EAAI,GAAG,EACnB,EAAQ,GACR,IAAI,EAAU,EAAM,IAAM,EAAkB,CAAG,EAC/C,EAAO,CAAO,EACd,EAAI,EAAS,KAAK,EAClB,EAAI,EAAO,CAAG,CAAC,EACf,EAAI,EAAS,QAAQ,EACrB,EAAI,GAAG,EACH,GAAY,EAAI,GAAG,EACvB,EAAW,EAAO,EAAS,CAAO,CACpC,CACA,EAAQ,EAAQ,KAAK,CACvB,CACA,EAAO,CAAG,EACV,EAAI,GAAG,CACT,MACE,EAAI,IAAI,CAEZ,CACF,CAEA,SAAS,EAAI,EAAK,CAChB,GAAU,EAAI,OACd,GAAO,EAAI,OACX,GAAQ,CACV,CAEA,SAAS,EAAO,EAAK,CACnB,GAAI,EAAY,CAId,IAHA,GAAQ;EAAO,EAAO,EAAK,CAAU,EACrC,IACA,EAAS,EACF,KACD,GACF,GAAQ,EACR,EAAS,GAET,GAAU,EAEZ,GAAO,EAET,GAAO,CACT,CACF,CAEA,SAAS,EAAI,EAAK,EAAM,CACtB,EAAS,GAAO,EAAS,IAAQ,CAAC,EAClC,EAAS,EAAI,CAAC,GAAQ,CACd,OACE,SACH,KACP,CACF,CAEA,SAAS,EAAO,EAAG,EAAK,CACtB,OAAO,MAAM,EAAI,CAAC,CAAC,CAAC,KAAK,CAAG,CAC9B,CACF,EAGA,IAAI,EAAc,CAAC,SAAU,SAAU,UAAW,SAAU,QAAQ,EACpE,SAAS,EAAU,EAAM,CACvB,OAAO,EAAY,QAAQ,OAAO,CAAI,GAAK,CAC7C,CAGA,IAAI,EAAY,QACZ,EAAQ,QACR,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,EAAQ,MACZ,SAAS,EAAO,EAAK,CAOnB,MANA,GAAM,EAAI,QAAQ,EAAW,MAAM,CAAC,CAC1B,QAAQ,EAAO,KAAK,CAAC,CACrB,QAAQ,EAAO,KAAK,CAAC,CACrB,QAAQ,EAAO,KAAK,CAAC,CACrB,QAAQ,EAAO,KAAK,CAAC,CACrB,QAAQ,EAAO,KAAK,EACvB,IAAM,EAAM,GACrB,CAGA,IAAI,EAAQ,KACR,EAAQ,MACZ,SAAS,EAAkB,EAAK,CAC9B,OAAO,EAAI,QAAQ,EAAO,IAAI,CAAC,CACpB,QAAQ,EAAO,IAAI,CAChC,CAGM,GAEA,MACC,SAAS,EAAQ,EAAS,CAEjC,IAAI,EAAgC,EAA8B,GAoBjE,SAAU,EAAM,EAAS,CACtB,aAGI,EAAiC,CAAC,EAAG,EAAkC,EAC7E,EAAiC,OAAO,GAAmC,WAC1E,EAA+B,MAAMA,EAAS,CAA4B,EAAK,EAChF,IAAkC,IAAA,KAAc,EAAO,QAAU,EAInE,EAAA,CAAE,KAAM,UAAY,CAKhB,aAGA,SAAS,EAAO,EAAO,CAKf,OAJC,OAAO,MAAS,SACV,aAAiB,KAGjB,GAAS,OAAO,GAAU,UAAY,OAAO,EAAM,UAAa,QAE/E,CAGA,SAAS,EAAS,EAAO,CACrB,OAAO,OAAO,GAAU,QAC5B,CAKA,SAAS,GAAa,CAClB,IAAI,EAAY,CAAC,EACjB,MAAO,CACH,MAAO,EAAU,KAAK,KAAK,CAAS,EACpC,QAAS,SAAS,EAAS,EAAQ,CAU/B,IAAK,IARD,EAAc,GACd,EAAQ,CACA,SACR,eAAgB,UAA2B,CACvC,EAAc,EAClB,CACJ,EAES,EAAI,EAAG,EAAI,EAAU,OAAQ,IAClC,EAAU,EAAE,CAAC,EAAS,CAAK,EAG/B,OAAO,CACX,CACJ,CACJ,CAIA,SAAS,EAAW,EAAO,CAEvB,OAAO,OAAO,iBAAiB,CAAI,CAAC,CAAC,UAAY,MACrD,CAMA,SAAS,EAAM,EAAO,CAClB,KAAK,KAAO,CAChB,CAGA,EAAK,KAAO,SAAW,EAAQ,EAAM,CAC5B,OAAO,GAAW,WACnB,EAAS,SAAS,cAAc,CAAM,GAE1C,IAAI,EAAO,SAAS,cAAc,GAAO,KAAK,EAE9C,OADC,GAAU,SAAS,KAAA,CAAM,YAAY,CAAI,EACnC,IAAI,EAAK,CAAI,CACxB,EAEA,EAAK,UAAY,CAGb,MAAO,SAAU,EAAK,CAClB,OAAO,EAAK,KAAK,KAAK,KAAM,CAAG,CACnC,EAGA,QAAS,SAAS,EAAQ,CAOtB,IAAK,IAAI,IANT,KAAmB,CAAC,EAER,EAAO,UAAY,SAC3B,EAAO,OAAS,iBAAoB,EAAO,QAAU,IAAO,KAG/C,EACT,EAAO,eAAe,CAAI,IAC1B,KAAK,KAAK,MAAM,GAAQ,EAAO,IAIvC,OAAO,IACX,EAGA,MAAO,SAAU,EAAO,CAEpB,MADA,MAAK,KAAK,WAAa,IAAM,EACtB,IACX,EAGA,KAAM,SAAU,EAAS,CAOrB,OANK,EAAO,CAAO,EACf,KAAK,KAAK,YAAa,CAAQ,EAG/B,KAAK,KAAK,UAAY,EAEnB,IACX,EAGA,QAAS,SAAS,EAAU,CAExB,OADA,KAAK,KAAK,iBAAiB,QAAS,CAAQ,EACrC,IACX,EAGA,QAAS,UAAW,CAChB,KAAK,KAAK,WAAW,YAAY,KAAK,IAAI,CAC9C,EAGA,KAAM,UAAW,CACb,KAAK,KAAK,MAAM,QAAU,MAC9B,EAGA,KAAM,UAAW,CACb,KAAK,KAAK,MAAM,QAAU,OAC9B,EAGA,KAAM,SAAW,EAAM,EAAQ,CAI3B,OAHI,IAAU,IAAA,IACV,KAAK,KAAK,aAAa,EAAM,CAAK,EAE/B,IACX,EAGA,YAAa,SAAW,EAAY,CAEhC,IADA,IAAI,EAAO,KAAK,KACR,GACJ,GAAK,EAAW,IAAI,EAAK,CAAI,CAAE,EAC3B,MAAO,OAGP,GAAO,EAAK,WAGpB,MAAO,EACX,EAGA,UAAW,UAAY,CACnB,MAAO,CAAC,EAAS,KAAK,IAAI,CAC9B,CACJ,EAIA,SAAS,EAAc,EAAW,EAAQ,CACtC,OAAO,EAAK,KAAM,EAAU,QAAQ,CAAE,CAAC,CAClC,MAAM,cAAc,CAAC,CACrB,MAAO,EAAU,eAAgB,EAAE,CAAE,CAAC,CACtC,QAAQ,CACL,QAAS,OACT,SAAU,QACV,IAAK,MACL,KAAM,MACN,OAAQ,OACR,MAAO,OACP,OAAQ,GACZ,CAAC,CAAC,CACD,QAAQ,EAAU,gBAAiB,CAChC,QAAS,GACT,WAAY,MAChB,CAAC,CAAC,CAAC,CACF,QAAQ,UAAY,CACZ,EAAU,eAAgB,EAAI,GAC/B,EAAM,CAEd,CAAC,CACT,CAGA,IAAI,EAAU,EAGd,SAAS,EAAY,EAAW,EAAQ,CACpC,IAAI,EAAQ,EAAU,QAAS,MAAM,EAChC,OAAO,GAAU,WAClB,EAAQ,GAAK,EAAQ,MAGzB,IAAI,EAAK,EAAU,UAAW,QAAU,GAAS,EAwCjD,OAtCW,EAAK,KAAM,EAAU,QAAQ,CAAE,CAAC,CACtC,MAAM,cAAc,CAAC,CACrB,MAAO,EAAU,aAAc,EAAE,CAAE,CAAC,CACpC,QAAQ,CACL,QAAS,OACT,SAAU,QACV,OAAQ,MACR,KAAM,MACN,IAAK,WACL,UAAW,MACX,UAAW,aACJ,QACP,gBAAiB,4BACjB,iBAAkB,4BAClB,oBAAqB,4BACrB,eAAgB,4BAChB,UAAW,2BACf,CAAC,CAAC,CACD,QAAQ,EAAU,cAAe,CAC9B,SAAU,OACV,gBAAiB,QACjB,QAAS,OACT,aAAc,KAClB,CAAC,CAAC,CAAC,CACF,KAAM,EAAU,SAAS,CAAE,CAAC,CAC5B,KAAK,KAAM,CAAE,CAAC,CACd,KAAK,OAAQ,QAAQ,CAAC,CACtB,KAAK,kBAAmB,EAAU,gBAAgB,CAAC,CAAC,CACpD,KAAK,mBAAoB,EAAU,kBAAmB,CAAE,CAAC,CAAC,CAC1D,QAAQ,SAAU,EAAO,CACH,IAAI,EAAK,EAAM,MAAM,CAAC,CAAC,YAAY,SAAU,EAAM,CAClE,MAAO,iBAAiB,KAAK,EAAK,KAAK,SAAS,CACpD,CACgB,GACZ,EAAM,CAEd,CAEM,CACd,CAGA,SAAS,EAAa,EAAM,EAAY,CACpC,GAAK,EAAU,cAAe,EAAI,EAC9B,OAAO,EAAK,MAAM,QAAQ,CAAC,CACtB,KAAM,EAAU,YAAa,QAAQ,CAAE,CAAC,CACxC,MAAM,YAAY,CAAC,CACnB,MAAO,EAAU,aAAc,EAAE,CAAE,CAAC,CACpC,QAAS,EAAU,cAAe,CAC/B,aAAc,MACd,OAAQ,EACR,QAAS,EACT,OAAQ,UACR,OAAQ,OACR,MAAO,OACP,SAAU,WACV,IAAK,MACL,MAAO,MACP,SAAU,OACV,UAAW,SACX,WAAY,OACZ,WAAY,MAChB,CAAC,CAAE,CAAC,CACH,KAAK,aAAc,EAAU,cAAe,OAAO,CAAC,CAEjE,CAGA,SAAS,EAAmB,EAAU,CAClC,OAAO,UAAY,CACf,OAAO,EAAQ,CAAC,CAAC,IACrB,CACJ,CAIA,IAAI,EAAY,EAAW,EAGvB,EAAS,EAAW,EAGxB,SAAS,gBAAgB,iBAAiB,UAAW,SAAqB,EAAO,CAC7E,IAAI,EAAU,EAAM,OAAS,EAAM,QAG9B,IAAY,GACb,EAAU,QAAQ,EAIZ,IAAY,GAClB,EAAO,QAAQ,CAAK,CAE5B,CAAC,EAID,SAAS,EAAc,EAAO,EAAY,CAGtC,SAAS,EAAU,EAAM,EAAW,CAEhC,OADS,EAAK,mBAAqB,EAAK,uBAAyB,EAAK,QAAA,CAC5D,KAAK,EAAM,CAAQ,CACjC,CAMA,SAAS,EAAU,EAAO,CASlB,OAPA,EAAS,CAAI,GACb,EAAQ,EAAM,WAAW,GACzB,EAAK,aAAa,iBAAiB,EAE5B,GAGA,EAAK,aAAa,UAAU,GAC/B,EAAQ,EAAM,wDAAwD,CAElF,CAGA,SAAS,EAAiB,EAAO,CAE7B,IAAK,IADD,EAAQ,EAAK,qBAAqB,GAAG,EAChC,EAAI,EAAG,EAAI,EAAM,OAAQ,IAC9B,GAAK,EAAS,EAAM,EAAE,EAClB,OAAO,EAAM,EAGzB,CAGA,SAAS,EAAgB,EAAO,CAE5B,IAAK,IADD,EAAQ,EAAK,qBAAqB,GAAG,EAChC,EAAI,EAAM,OAAQ,KACvB,GAAK,EAAS,EAAM,EAAE,EAClB,OAAO,EAAM,EAGzB,CAGA,IAAI,EAIJ,EAAM,WAAW,UAA0B,CACvC,EAAU,SAAS,aACvB,CAAC,EAGD,EAAM,UAAU,UAAsB,CAClC,GAAK,EAAU,EAAI,CACf,IAAI,EAAY,EAAe,EAAM,UAAU,CAAC,EAC3C,GACD,EAAU,MAAM,CAExB,CACJ,CAAC,EAGD,EAAM,WAAW,UAAuB,CAC/B,EAAU,GAAK,GAChB,EAAQ,MAAM,EAElB,EAAU,IACd,CAAC,EAGD,EAAO,MAAM,SAAsB,EAAO,CACtC,GAAK,EAAU,GAAK,EAAM,UAAU,EAAI,CACpC,IAAI,EAAQ,EAAe,EAAM,UAAU,CAAC,EACxC,EAAO,EAAc,EAAM,UAAU,CAAC,GAE/B,EAAM,SAAW,EAAQ,KACtB,SAAS,iBAClB,EAAM,SAAW,EAAO,EAAA,CAAO,MAAM,EACtC,EAAM,eAAe,EAE7B,CACJ,CAAC,CACL,CAGA,SAAS,EAAmB,EAAO,EAAW,CAC1C,IAAI,EACA,EAAO,IAAI,EAAK,SAAS,IAAI,EAEjC,EAAM,WAAW,UAAY,CAEzB,EAAe,EAAK,KAAK,MAAM,SAE3B,EAAU,GACV,EAAK,QAAQ,CAAE,SAAU,QAAS,CAAC,CAE3C,CAAC,EAED,EAAM,WAAW,UAAY,CACzB,EAAK,QAAQ,CAAE,SAAU,CAAa,CAAC,CAC3C,CAAC,CACL,CAKA,OAAO,SAAmB,EAAS,EAE1B,EAAS,CAAO,GAAK,EAAO,CAAO,KACpC,EAAU,CAAE,QAAS,CAAQ,GAGjC,IAAI,EAAmB,EAAW,EAC9B,EAAkB,EAAW,EAC7B,EAAiB,EAAW,EAC5B,EAAmB,EAAW,EAC9B,EAAkB,EAAW,EAMjC,SAAS,EAAY,EAAK,EAAe,CACrC,IAAI,EAAQ,EAAQ,GAIpB,OAHK,OAAO,GAAU,aAClB,EAAQ,EAAO,CAAa,GAEzB,IAAU,IAAA,GAAY,EAAe,CAChD,CAIA,IAAI,EAAY,EAAM,KAAK,OAAQ,OAAO,EACtC,EAAa,EAAM,KAAK,OAAQ,SAAS,EACzC,EAAY,EAAM,KAAK,OAAQ,OAAO,EAGtC,EAIJ,SAAS,EAAY,EAAQ,CACzB,EAAW,CAAC,CAAC,KAAK,EAClB,EAAU,CAAC,CAAC,KAAK,EACjB,EAAgB,QAAQ,EAAO,CAAM,CACzC,CAGA,SAAS,EAAO,EAAQ,CACf,EAAiB,QAAQ,EAAO,CAAM,GACvC,EAAW,CAAM,CAEzB,CAGA,SAAS,EAAc,EAAW,CAC9B,OAAO,UAAY,CAEf,OADA,EAAS,MAAM,KAAM,SAAS,EACvB,CACX,CACJ,CAIA,IAAI,EAGJ,SAAS,EAAO,EAAM,EAAQ,CAC1B,GAAK,CAAC,EAAQ,CACV,IAAI,EAAQ,EAAW,EAAW,CAAK,EACvC,EAAQ,CACG,QACP,QAAS,EAAa,EAAW,CAAK,EACtC,MAAO,EAAW,EAAO,CAAS,CACtC,EACA,EAAiB,QAAQ,EAAO,CAAM,CAC1C,CACA,OAAO,EAAM,EACjB,CAsFA,MApFA,GAAQ,CAGJ,UAAW,EAAkB,CAAS,EAGtC,UAAW,EAAkB,CAAS,EAGtC,YAAa,EAAkB,CAAU,EAGzC,SAAU,EAAY,EAAM,KAAK,KAAM,IAAI,CAAC,EAG5C,UAAW,UAAY,CACnB,MAAO,CAAC,EAAE,GAAS,GAAa,EAAU,CAAC,CAAC,UAAU,EAC1D,EAGA,KAAM,SAAU,EAAQ,CAOpB,OANK,EAAgB,QAAQ,EAAO,CAAM,IACtC,EAAW,CAAC,CAAC,KAAK,EAClB,EAAU,EACV,EAAU,CAAC,CAAC,KAAK,EACjB,EAAe,QAAQ,EAAO,CAAM,GAEjC,IACX,EAGA,MAAO,EAAY,CAAK,EAMxB,WAAY,EAAY,CAAU,EAGlC,QAAS,UAAY,CACjB,EAAU,CAAC,CAAC,QAAQ,EACpB,EAAW,CAAC,CAAC,QAAQ,EACrB,EAAa,EAAY,EAAY,IAAA,EACzC,EAOA,QAAS,SAAW,EAAO,CACvB,OAAO,KAAK,CAAI,CAAC,CAAC,IAAI,SAAU,EAAK,CACjC,EAAQ,GAAO,EAAK,EACxB,CAAC,CACL,EAGA,YAAa,EAAY,EAAiB,KAAK,EAG/C,WAAY,EAAY,EAAgB,KAAK,EAG7C,UAAW,EAAY,EAAe,KAAK,EAG3C,YAAa,EAAY,EAAiB,KAAK,EAG/C,WAAY,EAAY,EAAgB,KAAK,CACjD,EAEA,EAAY,EAAO,EAAU,KAAK,KAAM,QAAS,EAAI,CAAC,EAEtD,EAAmB,EAAO,EAAU,KAAK,KAAM,eAAgB,EAAI,CAAC,EAGpE,EAAU,MAAM,UAA2B,CAClC,EAAU,YAAa,EAAI,GAAK,EAAM,UAAU,GACjD,EAAM,MAAM,CAEpB,CAAC,EAEM,CACX,CAEJ,CAAC,CAGK,GAEA,MACC,SAAS,EAAyB,EAAS,EAGjD,SAAU,EAAQ,EAAS,CAC1B,EAAeA,CAAO,CAExB,EAAA,CAAE,MAAO,SAAU,EAAS,CAAE,aAE9B,SAAS,GAAQ,CACR,IAA6B,MACjB,WAGjB,GAAI,EAAK,OAAS,EAAG,CACjB,EAAK,GAAK,EAAK,EAAE,CAAC,MAAM,EAAG,EAAE,EAE7B,IAAK,IADD,EAAK,EAAK,OAAS,EACd,EAAI,EAAG,EAAI,EAAI,EAAE,EACtB,EAAK,GAAK,EAAK,EAAE,CAAC,MAAM,EAAG,EAAE,EAGjC,MADA,GAAK,GAAM,EAAK,EAAG,CAAC,MAAM,CAAC,EACpB,EAAK,KAAK,EAAE,CACvB,MACI,OAAO,EAAK,EAEpB,CACA,SAAS,EAAO,EAAK,CACjB,MAAO,MAAQ,EAAM,GACzB,CACA,SAAS,EAAO,EAAG,CACf,OAAO,IAAM,IAAA,GAAY,YAAc,IAAM,KAAO,OAAS,OAAO,UAAU,SAAS,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,CACnJ,CACA,SAAS,EAAY,EAAK,CACtB,OAAO,EAAI,YAAY,CAC3B,CACA,SAAS,EAAQ,EAAK,CAClB,OAAO,GAA6B,KAA2J,CAAC,EAArJ,aAAe,MAAQ,EAAM,OAAO,EAAI,QAAW,UAAY,EAAI,OAAS,EAAI,aAAe,EAAI,KAAO,CAAC,CAAG,EAAI,MAAM,UAAU,MAAM,KAAK,CAAG,CAC/L,CACA,SAAS,EAAO,EAAQ,EAAQ,CAC5B,IAAI,EAAM,EACV,GAAI,EACA,IAAK,IAAI,KAAO,EACZ,EAAI,GAAO,EAAO,GAG1B,OAAO,CACX,CAEA,SAAS,EAAU,EAAO,CACtB,IAAI,EAAU,WAEV,EAAU,QAEV,EAAW,EAAM,EAAS,UAAU,EAIpC,EAAe,EAAO,EAAO,UAAY,EAAW,IAAM,EAAW,EAAW,IAAM,EAAW,CAAQ,EAAI,IAAM,EAAO,cAAgB,EAAW,IAAM,EAAW,CAAQ,EAAI,IAAM,EAAO,IAAM,EAAW,CAAQ,CAAC,EAE7N,EAAe,0BACX,EAAe,sCACf,EAAa,EAAM,EAAc,CAAY,EAC7C,EAAY,EAAQ,8EAAgF,KAExG,EAAa,EAAQ,oBAAsB,KAE3C,EAAe,EAAM,EAAS,EAAS,iBAAkB,CAAS,EAC9D,EAAU,EAAO,EAAU,EAAM,EAAS,EAAS,aAAa,EAAI,GAAG,EACvE,EAAY,EAAO,EAAO,EAAe,IAAM,EAAM,EAAc,EAAc,OAAO,CAAC,EAAI,GAAG,EACnF,EAAO,EAAO,SAAS,EAAI,IAAM,EAAO,SAAW,CAAO,EAAI,IAAM,EAAO,IAAM,EAAU,CAAO,EAAI,IAAM,EAAO,QAAU,CAAO,EAAI,IAAM,CAAO,EApBtK,IAqBI,EAAqB,EAAO,EAAO,SAAS,EAAI,IAAM,EAAO,SAAW,CAAO,EAAI,IAAM,EAAO,IAAM,EAAU,CAAO,EAAI,IAAM,EAAO,UAAY,CAAO,EAAI,QAAU,CAAO,EAEpL,EAAe,EAAO,EAAqB,MAAQ,EAAqB,MAAQ,EAAqB,MAAQ,CAAkB,EAC3H,EAAO,EAAO,EAAW,OAAO,EAChC,EAAQ,EAAO,EAAO,EAAO,MAAQ,CAAI,EAAI,IAAM,CAAY,EAmBnE,EAAe,EAAO,CAlBF,EAAO,EAAO,EAAO,KAAK,EAAI,MAAQ,CAkBvB,EAhBnB,EAAO,SAAW,EAAO,EAAO,KAAK,EAAI,MAAQ,CAgBf,EAdlC,EAAO,EAAO,CAAI,EAAI,UAAY,EAAO,EAAO,KAAK,EAAI,MAAQ,CAchB,EAZjD,EAAO,EAAO,EAAO,EAAO,KAAK,EAAI,QAAU,CAAI,EAAI,UAAY,EAAO,EAAO,KAAK,EAAI,MAAQ,CAYlC,EAVhE,EAAO,EAAO,EAAO,EAAO,KAAK,EAAI,QAAU,CAAI,EAAI,UAAY,EAAO,EAAO,KAAK,EAAI,MAAQ,CAUnB,EAR/E,EAAO,EAAO,EAAO,EAAO,KAAK,EAAI,QAAU,CAAI,EAAI,UAAY,EAAO,MAAQ,CAQY,EAN9F,EAAO,EAAO,EAAO,EAAO,KAAK,EAAI,QAAU,CAAI,EAAI,UAAY,CAM0C,EAJ7G,EAAO,EAAO,EAAO,EAAO,KAAK,EAAI,QAAU,CAAI,EAAI,UAAY,CAIyD,EAF5H,EAAO,EAAO,EAAO,EAAO,KAAK,EAAI,QAAU,CAAI,EAAI,SAEoF,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EACnK,EAAU,EAAO,EAAO,EAAe,IAAM,CAAY,EAAI,GAAG,EAEvD,EAAO,EAAe,QAAU,CAAO,EA/CpD,IAiDA,EAAqB,EAAO,EAAe,EAAO,eAAiB,EAAW,MAAM,EAAI,CAAO,EAE/F,EAAa,EAAO,OAAS,EAAW,OAAS,EAAM,EAAc,EAAc,OAAO,EAAI,GAAG,EAC7F,EAAc,EAAO,MAAQ,EAAO,EAAqB,IAAM,EAAe,IAAM,CAAU,EAAI,KAAK,EAE3G,EAAY,EAAO,EAAO,EAAe,IAAM,EAAM,EAAc,CAAY,CAAC,EAAI,GAAG,EACnF,EAAQ,EAAO,EAAc,IAAM,EAAe,MAAQ,EAAY,KAAY,CAAS,EAC3F,EAAQ,EAAO,EAAU,GAAG,EAC5B,EAAa,EAAO,EAAO,EAAY,GAAG,EAAI,IAAM,EAAQ,EAAO,MAAQ,CAAK,EAAI,GAAG,EACvF,EAAS,EAAO,EAAe,IAAM,EAAM,EAAc,EAAc,UAAU,CAAC,EAClF,EAAW,EAAO,EAAS,GAAG,EAC9B,EAAc,EAAO,EAAS,GAAG,EACjC,EAAiB,EAAO,EAAO,EAAe,IAAM,EAAM,EAAc,EAAc,OAAO,CAAC,EAAI,GAAG,EACrG,EAAgB,EAAO,EAAO,MAAQ,CAAQ,EAAI,GAAG,EACrD,EAAiB,EAAO,MAAQ,EAAO,EAAc,CAAa,EAAI,GAAG,EAE7E,EAAiB,EAAO,EAAiB,CAAa,EAEtD,EAAiB,EAAO,EAAc,CAAa,EAEnD,EAAc,MAAQ,EAAS,IACnB,EAAO,EAAgB,IAAM,EAAiB,IAAM,EAAiB,IAAM,EAAiB,IAAM,CAAW,EAtEzH,IAuEI,EAAS,EAAO,EAAO,EAAS,IAAM,EAAM,WAAY,CAAU,CAAC,EAAI,GAAG,EAC1E,EAAY,EAAO,EAAO,EAAS,WAAW,EAAI,GAAG,EACrD,GAAa,EAAO,EAAO,SAAW,EAAa,CAAa,EAAI,IAAM,EAAiB,IAAM,EAAiB,IAAM,CAAW,EACnI,GAAO,EAAO,EAAU,MAAQ,GAAa,EAAO,MAAQ,CAAM,EAAI,IAAM,EAAO,MAAQ,CAAS,EAAI,GAAG,EAE3G,GAAY,EADK,EAAO,EAAO,SAAW,EAAa,CAAa,EAAI,IAAM,EAAiB,IAAM,EAAiB,IAAM,CAC5F,EAAI,EAAO,MAAQ,CAAM,EAAI,IAAM,EAAO,MAAQ,CAAS,EAAI,GAAG,EAQtG,OAPqB,EAAO,GAAO,IAAM,EAAS,EAC9B,EAAO,EAAU,MAAQ,GAAa,EAAO,MAAQ,CAAM,EAAI,GAAG,EACnE,GAAO,EAAmB,EAAO,EAAO,UAAY,EAAO,IAAM,EAAY,IAAI,EAAI,KAAO,EAAQ,IAAM,EAAO,OAAS,EAAQ,GAAG,EAAI,IAAI,EAAI,KAAO,EAAgB,IAAM,EAAiB,IAAM,EAAiB,IAAM,EAAc,GAAG,EAAI,EAAO,OAAS,EAAS,GAAG,EAAU,EAAO,OAAS,EAAY,GAAG,EACrT,GAAW,EAAO,EAAO,UAAY,EAAO,IAAM,EAAY,IAAI,EAAI,KAAO,EAAQ,IAAM,EAAO,OAAS,EAAQ,GAAG,EAAI,IAAI,EAAI,KAAO,EAAgB,IAAM,EAAiB,IAAM,EAAiB,IAAM,EAAc,GAAG,EAAI,EAAO,OAAS,EAAS,GAAG,EAAU,EAAO,OAAS,EAAY,GAAG,EACvS,GAAO,EAAmB,EAAO,EAAO,UAAY,EAAO,IAAM,EAAY,IAAI,EAAI,KAAO,EAAQ,IAAM,EAAO,OAAS,EAAQ,GAAG,EAAI,IAAI,EAAI,KAAO,EAAgB,IAAM,EAAiB,IAAM,EAAiB,IAAM,EAAc,GAAG,EAAI,EAAO,OAAS,EAAS,GAAG,EAC9Q,GAAM,EAAO,OAAS,EAAY,GAAG,EACnC,GAAM,EAAO,IAAM,EAAY,IAAI,EAAW,EAAc,EAAO,OAAS,EAAQ,GAAG,EACrG,CACH,WAAY,IAAI,OAAO,EAAM,MAAO,EAAS,EAAS,aAAa,EAAG,GAAG,EACzE,aAAc,IAAI,OAAO,EAAM,YAAa,EAAc,CAAY,EAAG,GAAG,EAC5E,SAAU,IAAI,OAAO,EAAM,kBAAmB,EAAc,CAAY,EAAG,GAAG,EAC9E,SAAU,IAAI,OAAO,EAAM,kBAAmB,EAAc,CAAY,EAAG,GAAG,EAC9E,kBAAmB,IAAI,OAAO,EAAM,eAAgB,EAAc,CAAY,EAAG,GAAG,EACpF,UAAW,IAAI,OAAO,EAAM,SAAU,EAAc,EAAc,iBAAkB,CAAU,EAAG,GAAG,EACpG,aAAc,IAAI,OAAO,EAAM,SAAU,EAAc,EAAc,gBAAgB,EAAG,GAAG,EAC3F,OAAQ,IAAI,OAAO,EAAM,MAAO,EAAc,CAAY,EAAG,GAAG,EAChE,WAAY,IAAI,OAAO,EAAc,GAAG,EACxC,YAAa,IAAI,OAAO,EAAM,SAAU,EAAc,CAAU,EAAG,GAAG,EACtE,YAAa,IAAI,OAAO,EAAc,GAAG,EACzC,YAAiB,OAAO,KAAO,EAAe,IAAI,EAClD,YAAiB,OAAO,SAAW,EAAe,IAAM,EAAO,EAAO,eAAiB,EAAW,MAAM,EAAI,IAAM,EAAU,GAAG,EAAI,QAAQ,CAC/I,CACJ,CACA,IAAI,EAAe,EAAU,EAAK,EAE9B,EAAe,EAAU,EAAI,EAE7B,EAAgB,UAAY,CAC9B,SAAS,EAAc,EAAK,EAAG,CAC7B,IAAI,EAAO,CAAC,EACR,EAAK,GACL,EAAK,GACL,EAAK,IAAA,GAET,GAAI,CACF,IAAK,IAAI,EAAK,EAAI,OAAO,SAAS,CAAC,EAAG,EAAI,EAAE,GAAM,EAAK,EAAG,KAAK,EAAA,CAAG,QAChE,EAAK,KAAK,EAAG,KAAK,EAEd,KAAK,EAAK,SAAW,IAH8C,EAAK,IAKhF,OAAS,EAAK,CACZ,EAAK,GACL,EAAK,CACP,QAAU,CACR,GAAI,CACE,CAAC,GAAM,EAAG,QAAW,EAAG,OAAU,CACxC,QAAU,CACR,GAAI,EAAI,MAAM,CAChB,CACF,CAEA,OAAO,CACT,CAEA,OAAO,SAAU,EAAK,EAAG,CACvB,GAAI,MAAM,QAAQ,CAAG,EACnB,OAAO,EACF,GAAI,OAAO,YAAY,OAAO,CAAG,EACtC,OAAO,EAAc,EAAK,CAAC,EAE3B,MAAU,UAAU,sDAAsD,CAE9E,CACF,EAAE,EAcE,EAAoB,SAAU,EAAK,CACrC,GAAI,MAAM,QAAQ,CAAG,EAAG,CACtB,IAAK,IAAI,EAAI,EAAG,EAAO,MAAM,EAAI,MAAM,EAAG,EAAI,EAAI,OAAQ,IAAK,EAAK,GAAK,EAAI,GAE7E,OAAO,CACT,MACE,OAAO,MAAM,KAAK,CAAG,CAEzB,EAII,EAAS,WAGT,EAAO,GACP,EAAO,EACP,EAAO,GACP,EAAO,GACP,EAAO,IACP,EAAc,GACd,EAAW,IACX,EAAY,IAGZ,EAAgB,QAChB,EAAgB,aAChB,EAAkB,4BAGlB,EAAS,CACZ,SAAY,kDACZ,YAAa,iDACb,gBAAiB,eAClB,EAGI,EAAgB,EAAO,EACvB,EAAQ,KAAK,MACb,EAAqB,OAAO,aAUhC,SAAS,EAAQ,EAAM,CACtB,MAAU,WAAW,EAAO,EAAK,CAClC,CAUA,SAAS,EAAI,EAAO,EAAI,CAGvB,IAFA,IAAI,EAAS,CAAC,EACV,EAAS,EAAM,OACZ,KACN,EAAO,GAAU,EAAG,EAAM,EAAO,EAElC,OAAO,CACR,CAYA,SAAS,EAAU,EAAQ,EAAI,CAC9B,IAAI,EAAQ,EAAO,MAAM,GAAG,EACxB,EAAS,GACT,EAAM,OAAS,IAGlB,EAAS,EAAM,GAAK,IACpB,EAAS,EAAM,IAGhB,EAAS,EAAO,QAAQ,EAAiB,GAAM,EAE/C,IAAI,EAAU,EADD,EAAO,MAAM,GACH,EAAG,CAAE,CAAC,CAAC,KAAK,GAAG,EACtC,OAAO,EAAS,CACjB,CAeA,SAAS,EAAW,EAAQ,CAI3B,IAHA,IAAI,EAAS,CAAC,EACV,EAAU,EACV,EAAS,EAAO,OACb,EAAU,GAAQ,CACxB,IAAI,EAAQ,EAAO,WAAW,GAAS,EACvC,GAAI,GAAS,OAAU,GAAS,OAAU,EAAU,EAAQ,CAE3D,IAAI,EAAQ,EAAO,WAAW,GAAS,GAClC,EAAQ,QAAW,MAEvB,EAAO,OAAO,EAAQ,OAAU,KAAO,EAAQ,MAAS,KAAO,GAI/D,EAAO,KAAK,CAAK,EACjB,IAEF,MACC,EAAO,KAAK,CAAK,CAEnB,CACA,OAAO,CACR,CAUA,IAAI,EAAa,SAAoB,EAAO,CAC3C,OAAO,OAAO,cAAc,MAAM,OAAQ,EAAkB,CAAK,CAAC,CACnE,EAWI,EAAe,SAAsB,EAAW,CAUnD,OATI,EAAY,GAAO,GACf,EAAY,GAEhB,EAAY,GAAO,GACf,EAAY,GAEhB,EAAY,GAAO,GACf,EAAY,GAEb,CACR,EAaI,EAAe,SAAsB,EAAO,EAAM,CAGrD,OAAO,EAAQ,GAAK,IAAM,EAAQ,MAAQ,GAAQ,IAAM,EACzD,EAOI,EAAQ,SAAe,EAAO,EAAW,EAAW,CACvD,IAAI,EAAI,EAGR,IAFA,EAAQ,EAAY,EAAM,EAAQ,CAAI,EAAI,GAAS,EACnD,GAAS,EAAM,EAAQ,CAAS,EACF,EAAQ,EAAgB,GAAQ,EAAG,GAAK,EACrE,EAAQ,EAAM,EAAQ,CAAa,EAEpC,OAAO,EAAM,GAAK,EAAgB,GAAK,GAAS,EAAQ,EAAK,CAC9D,EASI,EAAS,SAAgB,EAAO,CAEnC,IAAI,EAAS,CAAC,EACV,EAAc,EAAM,OACpB,EAAI,EACJ,EAAI,EACJ,EAAO,EAMP,EAAQ,EAAM,YAAY,CAAS,EACnC,EAAQ,IACX,EAAQ,GAGT,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,EAAE,EAExB,EAAM,WAAW,CAAC,GAAK,KAC1B,EAAQ,WAAW,EAEpB,EAAO,KAAK,EAAM,WAAW,CAAC,CAAC,EAMhC,IAAK,IAAI,EAAQ,EAAQ,EAAI,EAAQ,EAAI,EAAG,EAAQ,GAAuC,CAQ1F,IAAK,IADD,EAAO,EACF,EAAI,EAAG,EAAI,GAAyB,GAAK,EAAM,CAEnD,GAAS,GACZ,EAAQ,eAAe,EAGxB,IAAI,EAAQ,EAAa,EAAM,WAAW,GAAO,CAAC,GAE9C,GAAS,GAAQ,EAAQ,GAAO,EAAS,GAAK,CAAC,IAClD,EAAQ,UAAU,EAGnB,GAAK,EAAQ,EACb,IAAI,EAAI,GAAK,EAAO,EAAO,GAAK,EAAO,EAAO,EAAO,EAAI,EAEzD,GAAI,EAAQ,EACX,MAGD,IAAI,EAAa,EAAO,EACpB,EAAI,EAAM,EAAS,CAAU,GAChC,EAAQ,UAAU,EAGnB,GAAK,CACN,CAEA,IAAI,EAAM,EAAO,OAAS,EAC1B,EAAO,EAAM,EAAI,EAAM,EAAK,GAAQ,CAAC,EAIjC,EAAM,EAAI,CAAG,EAAI,EAAS,GAC7B,EAAQ,UAAU,EAGnB,GAAK,EAAM,EAAI,CAAG,EAClB,GAAK,EAGL,EAAO,OAAO,IAAK,EAAG,CAAC,CACxB,CAEA,OAAO,OAAO,cAAc,MAAM,OAAQ,CAAM,CACjD,EASI,EAAS,SAAgB,EAAO,CACnC,IAAI,EAAS,CAAC,EAGd,EAAQ,EAAW,CAAK,EAGxB,IAAI,EAAc,EAAM,OAGpB,EAAI,EACJ,EAAQ,EACR,EAAO,EAGP,EAA4B,GAC5B,EAAoB,GACpB,EAAiB,IAAA,GAErB,GAAI,CACH,IAAK,IAAI,EAAY,EAAM,OAAO,SAAS,CAAC,EAAG,EAAO,EAAE,GAA6B,EAAQ,EAAU,KAAK,EAAA,CAAG,MAAO,EAA4B,GAAM,CACvJ,IAAI,EAAiB,EAAM,MAEvB,EAAiB,KACpB,EAAO,KAAK,EAAmB,CAAc,CAAC,CAEhD,CACD,OAAS,EAAK,CACb,EAAoB,GACpB,EAAiB,CAClB,QAAU,CACT,GAAI,CACC,CAAC,GAA6B,EAAU,QAC3C,EAAU,OAAO,CAEnB,QAAU,CACT,GAAI,EACH,MAAM,CAER,CACD,CAEA,IAAI,EAAc,EAAO,OACrB,EAAiB,EAWrB,IALI,GACH,EAAO,KAAK,CAAS,EAIf,EAAiB,GAAa,CAIpC,IAAI,EAAI,EACJ,EAA6B,GAC7B,EAAqB,GACrB,EAAkB,IAAA,GAEtB,GAAI,CACH,IAAK,IAAI,EAAa,EAAM,OAAO,SAAS,CAAC,EAAG,EAAQ,EAAE,GAA8B,EAAS,EAAW,KAAK,EAAA,CAAG,MAAO,EAA6B,GAAM,CAC7J,IAAI,EAAe,EAAO,MAEtB,GAAgB,GAAK,EAAe,IACvC,EAAI,EAEN,CAID,OAAS,EAAK,CACb,EAAqB,GACrB,EAAkB,CACnB,QAAU,CACT,GAAI,CACC,CAAC,GAA8B,EAAW,QAC7C,EAAW,OAAO,CAEpB,QAAU,CACT,GAAI,EACH,MAAM,CAER,CACD,CAEA,IAAI,EAAwB,EAAiB,EACzC,EAAI,EAAI,GAAO,EAAS,GAAS,CAAqB,GACzD,EAAQ,UAAU,EAGnB,IAAU,EAAI,GAAK,EACnB,EAAI,EAEJ,IAAI,EAA6B,GAC7B,EAAqB,GACrB,EAAkB,IAAA,GAEtB,GAAI,CACH,IAAK,IAAI,EAAa,EAAM,OAAO,SAAS,CAAC,EAAG,GAAQ,EAAE,GAA8B,GAAS,EAAW,KAAK,EAAA,CAAG,MAAO,EAA6B,GAAM,CAC7J,IAAI,GAAgB,GAAO,MAK3B,GAHI,GAAgB,GAAK,EAAE,EAAQ,GAClC,EAAQ,UAAU,EAEf,IAAiB,EAAG,CAGvB,IAAK,IADD,GAAI,EACC,GAAI,GAAyB,IAAK,EAAM,CAChD,IAAI,GAAI,IAAK,EAAO,EAAO,IAAK,EAAO,EAAO,EAAO,GAAI,EACzD,GAAI,GAAI,GACP,MAED,IAAI,GAAU,GAAI,GACd,GAAa,EAAO,GACxB,EAAO,KAAK,EAAmB,EAAa,GAAI,GAAU,GAAY,CAAC,CAAC,CAAC,EACzE,GAAI,EAAM,GAAU,EAAU,CAC/B,CAEA,EAAO,KAAK,EAAmB,EAAa,GAAG,CAAC,CAAC,CAAC,EAClD,EAAO,EAAM,EAAO,EAAuB,GAAkB,CAAW,EACxE,EAAQ,EACR,EAAE,CACH,CACD,CACD,OAAS,EAAK,CACb,EAAqB,GACrB,EAAkB,CACnB,QAAU,CACT,GAAI,CACC,CAAC,GAA8B,EAAW,QAC7C,EAAW,OAAO,CAEpB,QAAU,CACT,GAAI,EACH,MAAM,CAER,CACD,CAEA,EAAE,EACF,EAAE,CACH,CACA,OAAO,EAAO,KAAK,EAAE,CACtB,EAuCI,EAAW,CAMd,QAAW,QAQX,KAAQ,CACP,OAAU,EACV,OAAU,CACX,EACA,OAAU,EACV,OAAU,EACV,QAAW,SA7BmB,EAAO,CACrC,OAAO,EAAU,EAAO,SAAU,EAAQ,CACzC,OAAO,EAAc,KAAK,CAAM,EAAI,OAAS,EAAO,CAAM,EAAI,CAC/D,CAAC,CACF,EA0BC,UAAa,SA/CqB,EAAO,CACzC,OAAO,EAAU,EAAO,SAAU,EAAQ,CACzC,OAAO,EAAc,KAAK,CAAM,EAAI,EAAO,EAAO,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,EAAI,CAC7E,CAAC,CACF,CA4CA,EAoCI,GAAU,CAAC,EACf,SAAS,GAAW,EAAK,CACrB,IAAI,EAAI,EAAI,WAAW,CAAC,EACpB,EAAI,IAAK,GAEb,MADA,CAA2O,EAAvO,EAAI,GAAQ,KAAO,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,EAAW,EAAI,IAAS,IAAM,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,EAAW,EAAI,KAAU,KAAO,GAAK,EAAI,IAAA,CAAK,SAAS,EAAE,CAAC,CAAC,YAAY,EAAI,KAAO,EAAI,GAAK,IAAA,CAAK,SAAS,EAAE,CAAC,CAAC,YAAY,EAAW,KAAO,GAAK,GAAK,IAAA,CAAK,SAAS,EAAE,CAAC,CAAC,YAAY,EAAI,KAAO,GAAK,EAAI,GAAK,IAAA,CAAK,SAAS,EAAE,CAAC,CAAC,YAAY,EAAI,KAAO,EAAI,GAAK,IAAA,CAAK,SAAS,EAAE,CAAC,CAAC,YAAY,EAChY,CACX,CACA,SAAS,GAAY,EAAK,CAItB,IAHA,IAAI,EAAS,GACT,EAAI,EACJ,EAAK,EAAI,OACN,EAAI,GAAI,CACX,IAAI,EAAI,SAAS,EAAI,OAAO,EAAI,EAAG,CAAC,EAAG,EAAE,EACzC,GAAI,EAAI,IACJ,GAAU,OAAO,aAAa,CAAC,EAC/B,GAAK,OACF,GAAI,GAAK,KAAO,EAAI,IAAK,CAC5B,GAAI,EAAK,GAAK,EAAG,CACb,IAAI,EAAK,SAAS,EAAI,OAAO,EAAI,EAAG,CAAC,EAAG,EAAE,EAC1C,GAAU,OAAO,cAAc,EAAI,KAAO,EAAI,EAAK,EAAE,CACzD,KACI,IAAU,EAAI,OAAO,EAAG,CAAC,EAE7B,GAAK,CACT,MAAO,GAAI,GAAK,IAAK,CACjB,GAAI,EAAK,GAAK,EAAG,CACb,IAAI,EAAK,SAAS,EAAI,OAAO,EAAI,EAAG,CAAC,EAAG,EAAE,EACtC,EAAK,SAAS,EAAI,OAAO,EAAI,EAAG,CAAC,EAAG,EAAE,EAC1C,GAAU,OAAO,cAAc,EAAI,KAAO,IAAM,EAAK,KAAO,EAAI,EAAK,EAAE,CAC3E,KACI,IAAU,EAAI,OAAO,EAAG,CAAC,EAE7B,GAAK,CACT,KACI,IAAU,EAAI,OAAO,EAAG,CAAC,EACzB,GAAK,CAEb,CACA,OAAO,CACX,CACA,SAAS,GAA4B,EAAY,EAAU,CACvD,SAAS,EAAiB,EAAK,CAC3B,IAAI,EAAS,GAAY,CAAG,EAC5B,OAAQ,EAAO,MAAM,EAAS,UAAU,EAAU,EAAN,CAChD,CAOA,MANA,CAAuB,EAAW,SAAS,OAAO,EAAW,MAAM,CAAC,CAAC,QAAQ,EAAS,YAAa,CAAgB,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAS,WAAY,EAAE,EAC9J,EAAW,WAAa,IAAA,KAAW,EAAW,SAAW,OAAO,EAAW,QAAQ,CAAC,CAAC,QAAQ,EAAS,YAAa,CAAgB,CAAC,CAAC,QAAQ,EAAS,aAAc,EAAU,CAAC,CAAC,QAAQ,EAAS,YAAa,CAAW,GACzN,EAAW,OAAS,IAAA,KAAW,EAAW,KAAO,OAAO,EAAW,IAAI,CAAC,CAAC,QAAQ,EAAS,YAAa,CAAgB,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAS,SAAU,EAAU,CAAC,CAAC,QAAQ,EAAS,YAAa,CAAW,GACvN,EAAW,OAAS,IAAA,KAAW,EAAW,KAAO,OAAO,EAAW,IAAI,CAAC,CAAC,QAAQ,EAAS,YAAa,CAAgB,CAAC,CAAC,QAAQ,EAAW,OAAS,EAAS,SAAW,EAAS,kBAAmB,EAAU,CAAC,CAAC,QAAQ,EAAS,YAAa,CAAW,GAC1P,EAAW,QAAU,IAAA,KAAW,EAAW,MAAQ,OAAO,EAAW,KAAK,CAAC,CAAC,QAAQ,EAAS,YAAa,CAAgB,CAAC,CAAC,QAAQ,EAAS,UAAW,EAAU,CAAC,CAAC,QAAQ,EAAS,YAAa,CAAW,GAC7M,EAAW,WAAa,IAAA,KAAW,EAAW,SAAW,OAAO,EAAW,QAAQ,CAAC,CAAC,QAAQ,EAAS,YAAa,CAAgB,CAAC,CAAC,QAAQ,EAAS,aAAc,EAAU,CAAC,CAAC,QAAQ,EAAS,YAAa,CAAW,GACtN,CACX,CAEA,SAAS,GAAmB,EAAK,CAC7B,OAAO,EAAI,QAAQ,UAAW,IAAI,GAAK,GAC3C,CACA,SAAS,GAAe,EAAM,EAAU,CAGpC,IACI,EADW,EAFD,EAAK,MAAM,EAAS,WAAW,GAAK,CAAC,EAEb,CACjB,CAAC,CAAC,GAKnB,OAHA,EACO,EAAQ,MAAM,GAAG,CAAC,CAAC,IAAI,EAAkB,CAAC,CAAC,KAAK,GAAG,EAEnD,CAEf,CACA,SAAS,GAAe,EAAM,EAAU,CAGpC,IAAI,EAAY,EAFF,EAAK,MAAM,EAAS,WAAW,GAAK,CAAC,EAEZ,CAAC,EACpC,EAAU,EAAU,GACpB,EAAO,EAAU,GAErB,GAAI,EAAS,CAYT,IAAK,IAVD,EAAyB,EADD,EAAQ,YAAY,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QACC,EAAG,CAAC,EAC/D,EAAO,EAAuB,GAC9B,EAAQ,EAAuB,GAE/B,EAAc,EAAQ,EAAM,MAAM,GAAG,CAAC,CAAC,IAAI,EAAkB,EAAI,CAAC,EAClE,EAAa,EAAK,MAAM,GAAG,CAAC,CAAC,IAAI,EAAkB,EACnD,EAAyB,EAAS,YAAY,KAAK,EAAW,EAAW,OAAS,EAAE,EACpF,EAAa,EAAyB,EAAI,EAC1C,EAAkB,EAAW,OAAS,EACtC,EAAS,MAAM,CAAU,EACpB,EAAI,EAAG,EAAI,EAAY,EAAE,EAC9B,EAAO,GAAK,EAAY,IAAM,EAAW,EAAkB,IAAM,GAEjE,IACA,EAAO,EAAa,GAAK,GAAe,EAAO,EAAa,GAAI,CAAQ,GAa5E,IAAI,EAXgB,EAAO,OAAO,SAAU,EAAK,EAAO,EAAO,CAC3D,GAAI,CAAC,GAAS,IAAU,IAAK,CACzB,IAAI,EAAc,EAAI,EAAI,OAAS,GAC/B,GAAe,EAAY,MAAQ,EAAY,SAAW,EAC1D,EAAY,SAEZ,EAAI,KAAK,CAAS,QAAO,OAAQ,CAAE,CAAC,CAE5C,CACA,OAAO,CACX,EAAG,CAAC,CACgC,CAAC,CAAC,KAAK,SAAU,EAAG,EAAG,CACvD,OAAO,EAAE,OAAS,EAAE,MACxB,CAAC,CAAC,CAAC,GACC,EAAU,IAAK,GACnB,GAAI,GAAqB,EAAkB,OAAS,EAAG,CACnD,IAAI,EAAW,EAAO,MAAM,EAAG,EAAkB,KAAK,EAClD,EAAU,EAAO,MAAM,EAAkB,MAAQ,EAAkB,MAAM,EAC7E,EAAU,EAAS,KAAK,GAAG,EAAI,KAAO,EAAQ,KAAK,GAAG,CAC1D,KACI,GAAU,EAAO,KAAK,GAAG,EAK7B,OAHI,IACA,GAAW,IAAM,GAEd,CACX,MACI,OAAO,CAEf,CACA,IAAI,GAAY,kIACZ,GAAwB,GAAG,MAAM,OAAO,CAAC,CAAC,KAAO,IAAA,GACrD,SAAS,GAAM,EAAW,CACtB,IAAI,EAAU,UAAU,OAAS,GAAK,UAAU,KAAO,IAAA,GAAY,UAAU,GAAK,CAAC,EAE/E,EAAa,CAAC,EACd,EAAW,EAAQ,MAAQ,GAAuB,EAAf,EACnC,EAAQ,YAAc,WAAU,GAAa,EAAQ,OAAS,EAAQ,OAAS,IAAM,IAAM,KAAO,GACtG,IAAI,EAAU,EAAU,MAAM,EAAS,EACvC,GAAI,EAAS,CACL,IAEA,EAAW,OAAS,EAAQ,GAC5B,EAAW,SAAW,EAAQ,GAC9B,EAAW,KAAO,EAAQ,GAC1B,EAAW,KAAO,SAAS,EAAQ,GAAI,EAAE,EACzC,EAAW,KAAO,EAAQ,IAAM,GAChC,EAAW,MAAQ,EAAQ,GAC3B,EAAW,SAAW,EAAQ,GAE1B,MAAM,EAAW,IAAI,IACrB,EAAW,KAAO,EAAQ,MAK9B,EAAW,OAAS,EAAQ,IAAM,IAAA,GAClC,EAAW,SAAW,EAAU,QAAQ,GAAG,IAAM,GAAkB,IAAA,GAAb,EAAQ,GAC9D,EAAW,KAAO,EAAU,QAAQ,IAAI,IAAM,GAAkB,IAAA,GAAb,EAAQ,GAC3D,EAAW,KAAO,SAAS,EAAQ,GAAI,EAAE,EACzC,EAAW,KAAO,EAAQ,IAAM,GAChC,EAAW,MAAQ,EAAU,QAAQ,GAAG,IAAM,GAAkB,IAAA,GAAb,EAAQ,GAC3D,EAAW,SAAW,EAAU,QAAQ,GAAG,IAAM,GAAkB,IAAA,GAAb,EAAQ,GAE1D,MAAM,EAAW,IAAI,IACrB,EAAW,KAAO,EAAU,MAAM,+BAA+B,EAAI,EAAQ,GAAK,IAAA,KAG1F,AAEI,EAAW,OAAO,GAAe,GAAe,EAAW,KAAM,CAAQ,EAAG,CAAQ,EAGpF,EAAW,SAAW,IAAA,IAAa,EAAW,WAAa,IAAA,IAAa,EAAW,OAAS,IAAA,IAAa,EAAW,OAAS,IAAA,IAAa,CAAC,EAAW,MAAQ,EAAW,QAAU,IAAA,GACnL,EAAW,UAAY,gBAChB,EAAW,SAAW,IAAA,GAC7B,EAAW,UAAY,WAChB,EAAW,WAAa,IAAA,GAC/B,EAAW,UAAY,WAEvB,EAAW,UAAY,MAGvB,EAAQ,WAAa,EAAQ,YAAc,UAAY,EAAQ,YAAc,EAAW,YACxF,EAAW,MAAQ,EAAW,OAAS,gBAAkB,EAAQ,UAAY,eAGjF,IAAI,EAAgB,IAAS,EAAQ,QAAU,EAAW,QAAU,GAAA,CAAI,YAAY,GAEpF,GAAI,CAAC,EAAQ,iBAAmB,CAAC,GAAiB,CAAC,EAAc,gBAAiB,CAE9E,GAAI,EAAW,OAAS,EAAQ,YAAc,GAAiB,EAAc,YAEzE,GAAI,CACA,EAAW,KAAO,EAAS,QAAQ,EAAW,KAAK,QAAQ,EAAS,YAAa,EAAW,CAAC,CAAC,YAAY,CAAC,CAC/G,OAAS,EAAG,CACR,EAAW,MAAQ,EAAW,OAAS,kEAAoE,CAC/G,CAGJ,GAA4B,EAAY,CAAY,CACxD,MAEI,GAA4B,EAAY,CAAQ,EAGhD,GAAiB,EAAc,OAC/B,EAAc,MAAM,EAAY,CAAO,CAE/C,KACI,GAAW,MAAQ,EAAW,OAAS,yBAE3C,OAAO,CACX,CAEA,SAAS,GAAoB,EAAY,EAAS,CAC9C,IAAI,EAAW,EAAQ,MAAQ,GAAuB,EAAf,EACnC,EAAY,CAAC,EAejB,OAdI,EAAW,WAAa,IAAA,KACxB,EAAU,KAAK,EAAW,QAAQ,EAClC,EAAU,KAAK,GAAG,GAElB,EAAW,OAAS,IAAA,IAEpB,EAAU,KAAK,GAAe,GAAe,OAAO,EAAW,IAAI,EAAG,CAAQ,EAAG,CAAQ,CAAC,CAAC,QAAQ,EAAS,YAAa,SAAU,EAAG,EAAI,EAAI,CAC1I,MAAO,IAAM,GAAM,EAAK,MAAQ,EAAK,IAAM,GAC/C,CAAC,CAAC,GAEF,OAAO,EAAW,MAAS,UAAY,OAAO,EAAW,MAAS,YAClE,EAAU,KAAK,GAAG,EAClB,EAAU,KAAK,OAAO,EAAW,IAAI,CAAC,GAEnC,EAAU,OAAS,EAAU,KAAK,EAAE,EAAI,IAAA,EACnD,CAEA,IAAI,GAAO,WACP,EAAO,cACP,GAAO,gBACP,GAAO,yBACX,SAAS,EAAkB,EAAO,CAE9B,IADA,IAAI,EAAS,CAAC,EACP,EAAM,QACT,GAAI,EAAM,MAAM,EAAI,EAChB,EAAQ,EAAM,QAAQ,GAAM,EAAE,OAC3B,GAAI,EAAM,MAAM,CAAI,EACvB,EAAQ,EAAM,QAAQ,EAAM,GAAG,OAC5B,GAAI,EAAM,MAAM,EAAI,EACvB,EAAQ,EAAM,QAAQ,GAAM,GAAG,EAC/B,EAAO,IAAI,OACR,GAAI,IAAU,KAAO,IAAU,KAClC,EAAQ,OACL,CACH,IAAI,EAAK,EAAM,MAAM,EAAI,EACzB,GAAI,EAAI,CACJ,IAAI,EAAI,EAAG,GACX,EAAQ,EAAM,MAAM,EAAE,MAAM,EAC5B,EAAO,KAAK,CAAC,CACjB,MACI,MAAU,MAAM,kCAAkC,CAE1D,CAEJ,OAAO,EAAO,KAAK,EAAE,CACzB,CAEA,SAAS,GAAU,EAAY,CAC3B,IAAI,EAAU,UAAU,OAAS,GAAK,UAAU,KAAO,IAAA,GAAY,UAAU,GAAK,CAAC,EAE/E,EAAW,EAAQ,IAAM,EAAe,EACxC,EAAY,CAAC,EAEb,EAAgB,IAAS,EAAQ,QAAU,EAAW,QAAU,GAAA,CAAI,YAAY,GAGpF,GADI,GAAiB,EAAc,WAAW,EAAc,UAAU,EAAY,CAAO,EACrF,EAAW,MAEP,GAAS,YAAY,KAAK,EAAW,IAAI,IAIpC,EAAQ,YAAc,GAAiB,EAAc,YAEtD,GAAI,CACA,EAAW,KAAQ,EAAQ,IAAmG,EAAS,UAAU,EAAW,IAAI,EAA/H,EAAS,QAAQ,EAAW,KAAK,QAAQ,EAAS,YAAa,EAAW,CAAC,CAAC,YAAY,CAAC,CAC9H,OAAS,EAAG,CACR,EAAW,MAAQ,EAAW,OAAS,+CAAkD,EAAQ,IAAgB,UAAV,SAAuB,kBAAoB,CACtJ,CAIZ,GAA4B,EAAY,CAAQ,EAC5C,EAAQ,YAAc,UAAY,EAAW,SAC7C,EAAU,KAAK,EAAW,MAAM,EAChC,EAAU,KAAK,GAAG,GAEtB,IAAI,EAAY,GAAoB,EAAY,CAAO,EAUvD,GATI,IAAc,IAAA,KACV,EAAQ,YAAc,UACtB,EAAU,KAAK,IAAI,EAEvB,EAAU,KAAK,CAAS,EACpB,EAAW,MAAQ,EAAW,KAAK,OAAO,CAAC,IAAM,KACjD,EAAU,KAAK,GAAG,GAGtB,EAAW,OAAS,IAAA,GAAW,CAC/B,IAAI,EAAI,EAAW,KACf,CAAC,EAAQ,eAAiB,CAAC,GAAiB,CAAC,EAAc,gBAC3D,EAAI,EAAkB,CAAC,GAEvB,IAAc,IAAA,KACd,EAAI,EAAE,QAAQ,QAAS,MAAM,GAEjC,EAAU,KAAK,CAAC,CACpB,CASA,OARI,EAAW,QAAU,IAAA,KACrB,EAAU,KAAK,GAAG,EAClB,EAAU,KAAK,EAAW,KAAK,GAE/B,EAAW,WAAa,IAAA,KACxB,EAAU,KAAK,GAAG,EAClB,EAAU,KAAK,EAAW,QAAQ,GAE/B,EAAU,KAAK,EAAE,CAC5B,CAEA,SAAS,GAAkB,EAAM,EAAU,CACvC,IAAI,EAAU,UAAU,OAAS,GAAK,UAAU,KAAO,IAAA,GAAY,UAAU,GAAK,CAAC,EAC/E,EAAoB,UAAU,GAE9B,EAAS,CAAC,EAqDd,OApDK,IACD,EAAO,GAAM,GAAU,EAAM,CAAO,EAAG,CAAO,EAC9C,EAAW,GAAM,GAAU,EAAU,CAAO,EAAG,CAAO,GAE1D,IAAqB,CAAC,EAClB,CAAC,EAAQ,UAAY,EAAS,QAC9B,EAAO,OAAS,EAAS,OAEzB,EAAO,SAAW,EAAS,SAC3B,EAAO,KAAO,EAAS,KACvB,EAAO,KAAO,EAAS,KACvB,EAAO,KAAO,EAAkB,EAAS,MAAQ,EAAE,EACnD,EAAO,MAAQ,EAAS,QAEpB,EAAS,WAAa,IAAA,IAAa,EAAS,OAAS,IAAA,IAAa,EAAS,OAAS,IAAA,IAEpF,EAAO,SAAW,EAAS,SAC3B,EAAO,KAAO,EAAS,KACvB,EAAO,KAAO,EAAS,KACvB,EAAO,KAAO,EAAkB,EAAS,MAAQ,EAAE,EACnD,EAAO,MAAQ,EAAS,QAEnB,EAAS,MAQN,EAAS,KAAK,OAAO,CAAC,IAAM,IAC5B,EAAO,KAAO,EAAkB,EAAS,IAAI,IAExC,EAAK,WAAa,IAAA,IAAa,EAAK,OAAS,IAAA,IAAa,EAAK,OAAS,IAAA,KAAc,CAAC,EAAK,KAC7F,EAAO,KAAO,IAAM,EAAS,KACrB,EAAK,KAGb,EAAO,KAAO,EAAK,KAAK,MAAM,EAAG,EAAK,KAAK,YAAY,GAAG,EAAI,CAAC,EAAI,EAAS,KAF5E,EAAO,KAAO,EAAS,KAI3B,EAAO,KAAO,EAAkB,EAAO,IAAI,GAE/C,EAAO,MAAQ,EAAS,QAnBxB,EAAO,KAAO,EAAK,KACf,EAAS,QAAU,IAAA,GAGnB,EAAO,MAAQ,EAAK,MAFpB,EAAO,MAAQ,EAAS,OAoBhC,EAAO,SAAW,EAAK,SACvB,EAAO,KAAO,EAAK,KACnB,EAAO,KAAO,EAAK,MAEvB,EAAO,OAAS,EAAK,QAEzB,EAAO,SAAW,EAAS,SACpB,CACX,CAEA,SAAS,GAAQ,EAAS,EAAa,EAAS,CAC5C,IAAI,EAAoB,EAAO,CAAE,OAAQ,MAAO,EAAG,CAAO,EAC1D,OAAO,GAAU,GAAkB,GAAM,EAAS,CAAiB,EAAG,GAAM,EAAa,CAAiB,EAAG,EAAmB,EAAI,EAAG,CAAiB,CAC5J,CAEA,SAAS,GAAU,EAAK,EAAS,CAM7B,OALI,OAAO,GAAQ,SACf,EAAM,GAAU,GAAM,EAAK,CAAO,EAAG,CAAO,EACrC,EAAO,CAAG,IAAM,WACvB,EAAM,GAAM,GAAU,EAAK,CAAO,EAAG,CAAO,GAEzC,CACX,CAEA,SAAS,GAAM,EAAM,EAAM,EAAS,CAWhC,OAVI,OAAO,GAAS,SAChB,EAAO,GAAU,GAAM,EAAM,CAAO,EAAG,CAAO,EACvC,EAAO,CAAI,IAAM,WACxB,EAAO,GAAU,EAAM,CAAO,GAE9B,OAAO,GAAS,SAChB,EAAO,GAAU,GAAM,EAAM,CAAO,EAAG,CAAO,EACvC,EAAO,CAAI,IAAM,WACxB,EAAO,GAAU,EAAM,CAAO,GAE3B,IAAS,CACpB,CAEA,SAAS,GAAgB,EAAK,EAAS,CACnC,OAAO,GAAO,EAAI,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAW,CAAC,EAAQ,IAAM,EAAa,OAAS,EAAa,OAAQ,EAAU,CACzH,CAEA,SAAS,GAAkB,EAAK,EAAS,CACrC,OAAO,GAAO,EAAI,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAW,CAAC,EAAQ,IAAM,EAAa,YAAc,EAAa,YAAa,EAAW,CACpI,CAEA,IAAI,GAAU,CACV,OAAQ,OACR,WAAY,GACZ,MAAO,SAAe,EAAY,EAAS,CAKvC,OAHK,EAAW,OACZ,EAAW,MAAQ,EAAW,OAAS,+BAEpC,CACX,EACA,UAAW,SAAmB,EAAY,EAAS,CAC/C,IAAI,EAAS,OAAO,EAAW,MAAM,CAAC,CAAC,YAAY,IAAM,QAYzD,OAVI,EAAW,QAAU,EAAS,IAAM,KAAO,EAAW,OAAS,MAC/D,EAAW,KAAO,IAAA,IAGtB,AACI,EAAW,OAAO,IAKf,CACX,CACJ,EAEI,GAAY,CACZ,OAAQ,QACR,WAAY,GAAQ,WACpB,MAAO,GAAQ,MACf,UAAW,GAAQ,SACvB,EAEA,SAAS,GAAS,EAAc,CAC5B,OAAO,OAAO,EAAa,QAAW,UAAY,EAAa,OAAS,OAAO,EAAa,MAAM,CAAC,CAAC,YAAY,IAAM,KAC1H,CAEA,IAAI,GAAY,CACZ,OAAQ,KACR,WAAY,GACZ,MAAO,SAAe,EAAY,EAAS,CACvC,IAAI,EAAe,EAOnB,MALA,GAAa,OAAS,GAAS,CAAY,EAE3C,EAAa,cAAgB,EAAa,MAAQ,MAAQ,EAAa,MAAQ,IAAM,EAAa,MAAQ,IAC1G,EAAa,KAAO,IAAA,GACpB,EAAa,MAAQ,IAAA,GACd,CACX,EACA,UAAW,SAAmB,EAAc,EAAS,CAWjD,IATI,EAAa,QAAU,GAAS,CAAY,EAAI,IAAM,KAAO,EAAa,OAAS,MACnF,EAAa,KAAO,IAAA,IAGpB,OAAO,EAAa,QAAW,YAC/B,EAAa,OAAS,EAAa,OAAS,MAAQ,KACpD,EAAa,OAAS,IAAA,IAGtB,EAAa,aAAc,CAC3B,IACI,EAAyB,EADD,EAAa,aAAa,MAAM,GACG,EAAG,CAAC,EAC/D,EAAO,EAAuB,GAC9B,EAAQ,EAAuB,GAEnC,EAAa,KAAO,GAAQ,IAAS,IAAM,EAAO,IAAA,GAClD,EAAa,MAAQ,EACrB,EAAa,aAAe,IAAA,EAChC,CAGA,MADA,GAAa,SAAW,IAAA,GACjB,CACX,CACJ,EAEI,GAAY,CACZ,OAAQ,MACR,WAAY,GAAU,WACtB,MAAO,GAAU,MACjB,UAAW,GAAU,SACzB,EAEI,GAAI,CAAC,EAGL,GAAe,mGACf,GAAW,cACX,GAAe,EAAO,EAAO,UAAY,GAAW,IAAM,GAAW,GAAW,IAAM,GAAW,EAAQ,EAAI,IAAM,EAAO,cAAgB,GAAW,IAAM,GAAW,EAAQ,EAAI,IAAM,EAAO,IAAM,GAAW,EAAQ,CAAC,EAYzN,GAAU,wDAEV,GAAU,EAAM,6DAAS,WAAY,EACrC,GAAgB,sCAChB,GAAa,IAAI,OAAO,GAAc,GAAG,EACzC,GAAc,IAAI,OAAO,GAAc,GAAG,EAC1C,GAAiB,IAAI,OAAO,EAAM,MAAO,GAAS,QAAS,QAAS,EAAO,EAAG,GAAG,EACjF,GAAa,IAAI,OAAO,EAAM,MAAO,GAAc,EAAa,EAAG,GAAG,EACtE,GAAc,GAClB,SAAS,GAAiB,EAAK,CAC3B,IAAI,EAAS,GAAY,CAAG,EAC5B,OAAQ,EAAO,MAAM,EAAU,EAAU,EAAN,CACvC,CACA,IAAI,GAAY,CACZ,OAAQ,SACR,MAAO,SAAkB,EAAY,EAAS,CAC1C,IAAI,EAAmB,EACnB,EAAK,EAAiB,GAAK,EAAiB,KAAO,EAAiB,KAAK,MAAM,GAAG,EAAI,CAAC,EAE3F,GADA,EAAiB,KAAO,IAAA,GACpB,EAAiB,MAAO,CAIxB,IAAK,IAHD,EAAiB,GACjB,EAAU,CAAC,EACX,EAAU,EAAiB,MAAM,MAAM,GAAG,EACrC,EAAI,EAAG,EAAK,EAAQ,OAAQ,EAAI,EAAI,EAAE,EAAG,CAC9C,IAAI,EAAS,EAAQ,EAAE,CAAC,MAAM,GAAG,EACjC,OAAQ,EAAO,GAAf,CACI,IAAK,KAED,IAAK,IADD,EAAU,EAAO,EAAE,CAAC,MAAM,GAAG,EACxB,EAAK,EAAG,EAAM,EAAQ,OAAQ,EAAK,EAAK,EAAE,EAC/C,EAAG,KAAK,EAAQ,EAAG,EAEvB,MACJ,IAAK,UACD,EAAiB,QAAU,GAAkB,EAAO,GAAI,CAAO,EAC/D,MACJ,IAAK,OACD,EAAiB,KAAO,GAAkB,EAAO,GAAI,CAAO,EAC5D,MACJ,QACI,EAAiB,GACjB,EAAQ,GAAkB,EAAO,GAAI,CAAO,GAAK,GAAkB,EAAO,GAAI,CAAO,EACrF,KACR,CACJ,CACI,IAAgB,EAAiB,QAAU,EACnD,CACA,EAAiB,MAAQ,IAAA,GACzB,IAAK,IAAI,EAAM,EAAG,EAAO,EAAG,OAAQ,EAAM,EAAM,EAAE,EAAK,CACnD,IAAI,EAAO,EAAG,EAAI,CAAC,MAAM,GAAG,EAE5B,GADA,EAAK,GAAK,GAAkB,EAAK,EAAE,EAC9B,EAAQ,eAQT,EAAK,GAAK,GAAkB,EAAK,GAAI,CAAO,CAAC,CAAC,YAAY,OAN1D,GAAI,CACA,EAAK,GAAK,EAAS,QAAQ,GAAkB,EAAK,GAAI,CAAO,CAAC,CAAC,YAAY,CAAC,CAChF,OAAS,EAAG,CACR,EAAiB,MAAQ,EAAiB,OAAS,2EAA6E,CACpI,CAIJ,EAAG,GAAO,EAAK,KAAK,GAAG,CAC3B,CACA,OAAO,CACX,EACA,UAAW,SAAsB,EAAkB,EAAS,CACxD,IAAI,EAAa,EACb,EAAK,EAAQ,EAAiB,EAAE,EACpC,GAAI,EAAI,CACJ,IAAK,IAAI,EAAI,EAAG,EAAK,EAAG,OAAQ,EAAI,EAAI,EAAE,EAAG,CACzC,IAAI,EAAS,OAAO,EAAG,EAAE,EACrB,EAAQ,EAAO,YAAY,GAAG,EAC9B,EAAY,EAAO,MAAM,EAAG,CAAK,CAAC,CAAC,QAAQ,GAAa,EAAgB,CAAC,CAAC,QAAQ,GAAa,CAAW,CAAC,CAAC,QAAQ,GAAgB,EAAU,EAC9I,EAAS,EAAO,MAAM,EAAQ,CAAC,EAEnC,GAAI,CACA,EAAU,EAAQ,IAA2E,EAAS,UAAU,CAAM,EAA9F,EAAS,QAAQ,GAAkB,EAAQ,CAAO,CAAC,CAAC,YAAY,CAAC,CAC7F,OAAS,EAAG,CACR,EAAW,MAAQ,EAAW,OAAS,wDAA2D,EAAQ,IAAgB,UAAV,SAAuB,kBAAoB,CAC/J,CACA,EAAG,GAAK,EAAY,IAAM,CAC9B,CACA,EAAW,KAAO,EAAG,KAAK,GAAG,CACjC,CACA,IAAI,EAAU,EAAiB,QAAU,EAAiB,SAAW,CAAC,EAClE,EAAiB,UAAS,EAAQ,QAAa,EAAiB,SAChE,EAAiB,OAAM,EAAQ,KAAU,EAAiB,MAC9D,IAAI,EAAS,CAAC,EACd,IAAK,IAAI,KAAQ,EACT,EAAQ,KAAU,GAAE,IACpB,EAAO,KAAK,EAAK,QAAQ,GAAa,EAAgB,CAAC,CAAC,QAAQ,GAAa,CAAW,CAAC,CAAC,QAAQ,GAAY,EAAU,EAAI,IAAM,EAAQ,EAAK,CAAC,QAAQ,GAAa,EAAgB,CAAC,CAAC,QAAQ,GAAa,CAAW,CAAC,CAAC,QAAQ,GAAa,EAAU,CAAC,EAMjQ,OAHI,EAAO,SACP,EAAW,MAAQ,EAAO,KAAK,GAAG,GAE/B,CACX,CACJ,EAEI,GAAY,kBAEZ,GAAY,CACZ,OAAQ,MACR,MAAO,SAAkB,EAAY,EAAS,CAC1C,IAAI,EAAU,EAAW,MAAQ,EAAW,KAAK,MAAM,EAAS,EAC5D,EAAgB,EACpB,GAAI,EAAS,CACT,IAAI,EAAS,EAAQ,QAAU,EAAc,QAAU,MACnD,EAAM,EAAQ,EAAE,CAAC,YAAY,EAC7B,EAAM,EAAQ,GAEd,EAAgB,GADJ,EAAS,KAAO,EAAQ,KAAO,IAE/C,EAAc,IAAM,EACpB,EAAc,IAAM,EACpB,EAAc,KAAO,IAAA,GACjB,IACA,EAAgB,EAAc,MAAM,EAAe,CAAO,EAElE,KACI,GAAc,MAAQ,EAAc,OAAS,yBAEjD,OAAO,CACX,EACA,UAAW,SAAsB,EAAe,EAAS,CACrD,IAAI,EAAS,EAAQ,QAAU,EAAc,QAAU,MACnD,EAAM,EAAc,IAEpB,EAAgB,GADJ,EAAS,KAAO,EAAQ,KAAO,IAE3C,IACA,EAAgB,EAAc,UAAU,EAAe,CAAO,GAElE,IAAI,EAAgB,EAChB,EAAM,EAAc,IAExB,MADA,GAAc,MAAQ,GAAO,EAAQ,KAAO,IAAM,EAC3C,CACX,CACJ,EAEI,GAAO,2DAEP,GAAY,CACZ,OAAQ,WACR,MAAO,SAAe,EAAe,EAAS,CAC1C,IAAI,EAAiB,EAMrB,MALA,GAAe,KAAO,EAAe,IACrC,EAAe,IAAM,IAAA,GACjB,CAAC,EAAQ,WAAa,CAAC,EAAe,MAAQ,CAAC,EAAe,KAAK,MAAM,EAAI,KAC7E,EAAe,MAAQ,EAAe,OAAS,sBAE5C,CACX,EACA,UAAW,SAAmB,EAAgB,EAAS,CACnD,IAAI,EAAgB,EAGpB,MADA,GAAc,KAAO,EAAe,MAAQ,GAAA,CAAI,YAAY,EACrD,CACX,CACJ,EAEA,GAAQ,GAAQ,QAAU,GAC1B,GAAQ,GAAU,QAAU,GAC5B,GAAQ,GAAU,QAAU,GAC5B,GAAQ,GAAU,QAAU,GAC5B,GAAQ,GAAU,QAAU,GAC5B,GAAQ,GAAU,QAAU,GAC5B,GAAQ,GAAU,QAAU,GAE5B,EAAQ,QAAU,GAClB,EAAQ,WAAa,GACrB,EAAQ,YAAc,GACtB,EAAQ,MAAQ,GAChB,EAAQ,kBAAoB,EAC5B,EAAQ,UAAY,GACpB,EAAQ,kBAAoB,GAC5B,EAAQ,QAAU,GAClB,EAAQ,UAAY,GACpB,EAAQ,MAAQ,GAChB,EAAQ,gBAAkB,GAC1B,EAAQ,kBAAoB,GAE5B,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,CAE5D,EAAE,CAGI,GAEA,MACC,SAAS,EAAQ,EASvB,SAAU,EAAQ,EAAS,CACzB,EAAc,QAAU,EAAQ,CAEnC,EAAA,CAAG,MAAO,UAAY,CAAE,aAEtB,IAAI,EAAiB,SAAU,EAAU,EAAa,CACpD,GAAI,EAAE,aAAoB,GACxB,MAAU,UAAU,mCAAmC,CAE3D,EAEI,EAAc,UAAY,CAC5B,SAAS,EAAiB,EAAQ,EAAO,CACvC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAI,EAAa,EAAM,GACvB,EAAW,WAAa,EAAW,YAAc,GACjD,EAAW,aAAe,GACtB,UAAW,IAAY,EAAW,SAAW,IACjD,OAAO,eAAe,EAAQ,EAAW,IAAK,CAAU,CAC1D,CACF,CAEA,OAAO,SAAU,EAAa,EAAY,EAAa,CAGrD,OAFI,GAAY,EAAiB,EAAY,UAAW,CAAU,EAC9D,GAAa,EAAiB,EAAa,CAAW,EACnD,CACT,CACF,EAAE,EAEE,EAAgB,UAAY,CAC9B,SAAS,EAAc,EAAK,EAAG,CAC7B,IAAI,EAAO,CAAC,EACR,EAAK,GACL,EAAK,GACL,EAAK,IAAA,GAET,GAAI,CACF,IAAK,IAAI,EAAK,EAAI,OAAO,SAAS,CAAC,EAAG,EAAI,EAAE,GAAM,EAAK,EAAG,KAAK,EAAA,CAAG,QAChE,EAAK,KAAK,EAAG,KAAK,EAEd,KAAK,EAAK,SAAW,IAH8C,EAAK,IAKhF,OAAS,EAAK,CACZ,EAAK,GACL,EAAK,CACP,QAAU,CACR,GAAI,CACE,CAAC,GAAM,EAAG,QAAW,EAAG,OAAU,CACxC,QAAU,CACR,GAAI,EAAI,MAAM,CAChB,CACF,CAEA,OAAO,CACT,CAEA,OAAO,SAAU,EAAK,EAAG,CACvB,GAAI,MAAM,QAAQ,CAAG,EACnB,OAAO,EACF,GAAI,OAAO,YAAY,OAAO,CAAG,EACtC,OAAO,EAAc,EAAK,CAAC,EAE3B,MAAU,UAAU,sDAAsD,CAE9E,CACF,EAAE,EAEF,OAAO,UAAU,WAAa,OAAO,UAAU,YAAc,SAAU,EAAQ,CAC3E,OAAO,KAAK,QAAQ,CAAM,IAAM,CACpC,EACA,OAAO,UAAU,SAAW,OAAO,UAAU,UAAY,SAAU,EAAK,EAAK,CAC1D,IAAf,IAAI,EAAM,KAAY,EAAI,OAAS,GAC/B,EAAM,EAAM,EACf,OAAO,CACZ,EAEA,IAAI,EAAa,CAAE,GAAI,QAAS,IAAK,QAAS,EAAG,QAAS,KAAM,SAAU,GAAI,QAAS,GAAI,QAAS,IAAK,OAAQ,IAAK,MAAO,IAAK,OAAQ,EAAG,OAAQ,IAAK,SAAU,KAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,QAAS,KAAM,SAAU,GAAI,OAAQ,IAAK,SAAU,KAAM,MAAO,KAAM,SAAU,GAAI,QAAS,GAAI,OAAQ,IAAK,QAAS,KAAM,SAAU,IAAK,SAAU,KAAM,OAAQ,KAAM,SAAU,KAAM,QAAS,KAAM,SAAU,KAAM,MAAO,KAAM,SAAU,GAAI,OAAQ,KAAM,SAAU,KAAM,SAAU,KAAM,SAAU,KAAM,SAAU,KAAM,QAAS,IAAK,QAAS,KAAM,OAAQ,KAAM,QAAS,IAAK,SAAU,IAAK,SAAU,KAAM,SAAU,KAAM,MAAO,IAAK,SAAU,IAAK,MAAO,KAAM,SAAU,GAAI,QAAS,EAAG,MAAO,IAAK,SAAU,GAAI,SAAU,IAAK,OAAQ,KAAM,SAAU,IAAK,QAAS,KAAM,OAAQ,IAAK,SAAU,GAAI,QAAS,GAAI,IAAK,IAAK,QAAS,IAAK,SAAU,IAAK,MAAO,KAAM,QAAS,KAAM,MAAO,GAAI,SAAU,IAAK,QAAS,IAAK,SAAU,KAAM,QAAS,IAAK,SAAU,KAAM,SAAU,KAAM,OAAQ,KAAM,OAAQ,KAAM,SAAU,KAAM,SAAU,KAAM,SAAU,KAAM,SAAU,GAAI,KAAM,EAAG,OAAQ,KAAM,SAAU,GAAI,QAAS,KAAM,MAAO,IAAK,OAAQ,IAAK,SAAU,IAAK,OAAQ,KAAM,SAAU,KAAM,SAAU,IAAK,SAAU,KAAM,SAAU,GAAI,QAAS,IAAK,SAAU,KAAM,SAAU,KAAM,SAAU,IAAK,QAAS,KAAM,OAAQ,KAAM,OAAQ,IAAK,OAAQ,GAAI,OAAQ,EAAG,QAAS,EAAG,QAAS,IAAK,SAAU,IAAK,MAAO,KAAM,MAAO,IAAK,SAAU,KAAM,SAAU,KAAM,SAAU,KAAM,SAAU,KAAM,SAAU,KAAM,OAAQ,KAAM,OAAQ,GAAI,SAAU,IAAK,OAAQ,GAAI,SAAU,KAAM,SAAU,IAAK,QAAS,GAAI,SAAU,EAAG,KAAM,IAAK,SAAU,GAAI,SAAU,KAAM,SAAU,IAAK,QAAS,IAAK,QAAS,KAAM,SAAU,IAAK,MAAO,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,KAAM,SAAU,IAAK,MAAO,EAAG,QAAS,IAAK,SAAU,GAAI,SAAU,EAAG,QAAS,KAAM,SAAU,IAAK,OAAQ,KAAM,SAAU,GAAI,SAAU,IAAK,QAAS,IAAK,GAAI,IAAK,QAAS,EAAG,IAAK,KAAM,QAAS,EAEx9D,SAAS,EAAS,EAAK,CACnB,IAAI,EAAO,UAAU,OAAS,GAAK,UAAU,KAAO,IAAA,GAAY,UAAU,GAAK,EAG/E,OADU,EAAO,EAAI,EAAI,QAAQ,CAAI,CAAC,CAAC,QAAQ,MAAO,EAAE,CAAC,CAAC,QAAQ,MAAO,EAAE,EAAI,EAAI,SAAS,IAC9E,GAClB,CAEA,IAAI,EAAQ,UAAY,CACpB,SAAS,EAAM,EAAG,EAAG,EAAG,EAAG,CACvB,EAAe,KAAM,CAAK,EAG1B,IAAI,EAAO,KACX,SAAS,EAAY,EAAO,CAExB,GAAI,EAAM,WAAW,KAAK,EAAG,CACzB,IACI,EAAoB,EADD,EAAM,MAAM,eAAe,CAAC,CAAC,IAAI,MACH,EAAG,CAAC,EACrD,EAAI,EAAkB,GACtB,EAAI,EAAkB,GACtB,EAAI,EAAkB,GACtB,EAAK,EAAkB,GAEvB,IAAO,IAAA,KACP,EAAK,GAGT,GAAK,IACL,GAAK,IACL,GAAK,IACL,EAAK,KAAO,CAAC,EAAG,EAAG,EAAG,CAAE,CAC5B,MAAO,GAAI,EAAM,WAAW,KAAK,EAAG,CAChC,IACI,EAAoB,EADA,EAAM,MAAM,eAAe,CAAC,CAAC,IAAI,MACH,EAAG,CAAC,EACtD,EAAK,EAAkB,GACvB,EAAK,EAAkB,GACvB,EAAK,EAAkB,GACvB,EAAM,EAAkB,GAExB,IAAQ,IAAA,KACR,EAAM,GAGV,EAAK,KAAO,CAAC,EAAI,EAAI,EAAI,CAAG,CAChC,MACQ,EAAM,WAAW,GAAG,EACpB,EAAK,KAAO,EAAM,SAAS,CAAK,EAEhC,EAAK,KAAO,EAAM,UAAU,CAAK,GAAK,EAAM,SAAS,CAAK,CAGtE,CAEA,GAAI,IAAM,IAAA,GAAkB,GAAI,MAAM,QAAQ,CAAC,EAC3C,KAAK,KAAO,OACT,GAAI,IAAM,IAAA,GAAW,CACxB,IAAI,EAAQ,GAAK,GAAK,EAClB,GACA,EAAY,EAAM,YAAY,CAAC,CAEvC,KACI,MAAK,KAAO,CAAC,EAAG,EAAG,EAAG,IAAM,IAAA,GAAY,EAAI,CAAC,CAErD,CAgNA,OA9MA,EAAY,EAAO,CAAC,CAChB,IAAK,WACL,MAAO,SAAkB,EAAO,CAC5B,IACI,GADM,EAAQ,KAAK,KAAO,KAAK,KAAK,MAAM,EAAG,CAAC,EAAA,CACnC,IAAI,SAAU,EAAG,EAAG,CAC/B,OAAO,EAAS,EAAG,IAAM,EAAI,EAAI,CAAC,CACtC,CAAC,EAED,OAAO,EAAQ,QAAU,EAAO,IAAM,OAAS,EAAO,GAC1D,CACJ,EAAG,CACC,IAAK,WACL,MAAO,SAAkB,EAAO,CAC5B,IAAI,EAAQ,CAAC,IAAK,IAAK,IAAK,CAAC,EACzB,EAAO,CAAC,GAAI,IAAK,IAAK,EAAE,EAGxB,GADM,EAAQ,KAAK,KAAO,KAAK,KAAK,MAAM,EAAG,CAAC,EAAA,CACnC,IAAI,SAAU,EAAG,EAAG,CAC/B,OAAO,EAAS,EAAI,EAAM,GAAI,IAAM,EAAI,EAAI,CAAC,EAAI,EAAK,EAC1D,CAAC,EAED,OAAO,EAAQ,QAAU,EAAO,IAAM,OAAS,EAAO,GAC1D,CACJ,EAAG,CACC,IAAK,WACL,MAAO,SAAkB,EAAO,CAC5B,IAAI,EAAM,KAAK,IACf,OAAO,EAAQ,EAAM,EAAI,UAAU,EAAG,CAAC,CAC3C,CACJ,EAAG,CACC,IAAK,OACL,IAAK,UAAe,CAChB,GAAI,KAAK,MACL,OAAO,KAAK,MAEhB,GAAI,CAAC,KAAK,MACN,MAAU,MAAM,iBAAiB,EAGrC,MAAO,MAAK,MAAQ,EAAM,SAAS,KAAK,KAAK,CACjD,EACA,IAAK,SAAa,EAAK,CACf,EAAI,SAAW,IACf,EAAI,GAAK,GAGb,KAAK,MAAQ,EACb,KAAK,MAAQ,IACjB,CACJ,EAAG,CACC,IAAK,YACL,IAAK,UAAe,CAChB,OAAO,KAAK,SAAS,CACzB,CACJ,EAAG,CACC,IAAK,aACL,IAAK,UAAe,CAChB,OAAO,KAAK,SAAS,EAAI,CAC7B,CACJ,EAAG,CACC,IAAK,OACL,IAAK,UAAe,CAChB,GAAI,KAAK,MACL,OAAO,KAAK,MAEhB,GAAI,CAAC,KAAK,MACN,MAAU,MAAM,iBAAiB,EAGrC,MAAO,MAAK,MAAQ,EAAM,SAAS,KAAK,KAAK,CACjD,EACA,IAAK,SAAa,EAAK,CACf,EAAI,SAAW,IACf,EAAI,GAAK,GAGb,KAAK,MAAQ,EACb,KAAK,MAAQ,IACjB,CACJ,EAAG,CACC,IAAK,YACL,IAAK,UAAe,CAChB,OAAO,KAAK,SAAS,CACzB,CACJ,EAAG,CACC,IAAK,aACL,IAAK,UAAe,CAChB,OAAO,KAAK,SAAS,EAAI,CAC7B,CACJ,EAAG,CACC,IAAK,MACL,IAAK,UAAe,CAMhB,MAAO,IALG,KAAK,KACD,IAAI,SAAU,EAAG,EAAG,CAC9B,OAAO,EAAI,EAAI,EAAE,SAAS,EAAE,EAAI,KAAK,MAAM,EAAI,GAAG,CAAC,CAAC,SAAS,EAAE,CACnE,CAEe,CAAC,CAAC,IAAI,SAAU,EAAG,CAC9B,OAAO,EAAE,SAAS,EAAG,GAAG,CAC5B,CAAC,CAAC,CAAC,KAAK,EAAE,CACd,EACA,IAAK,SAAa,EAAK,CACnB,KAAK,KAAO,EAAM,SAAS,CAAG,CAClC,CACJ,CAAC,EAAG,CAAC,CACD,IAAK,WACL,MAAO,SAAkB,EAAO,CAE5B,IAAI,GAAO,EAAM,WAAW,GAAG,EAAI,EAAM,MAAM,CAAC,EAAI,EAAA,CAAO,QAAQ,YAAa,KAAK,CAAC,CAAC,QAAQ,qBAAsB,kBAAkB,CAAC,CAAC,QAAQ,YAAa,MAAM,EAEpK,GAAI,CAAC,EAAI,MAAM,oBAAoB,EAC/B,MAAU,MAAM,sBAAwB,CAAK,EAGjD,IAAI,EAAO,EAAI,MAAM,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAU,EAAG,CACzE,OAAO,SAAS,EAAG,EAAE,CACzB,CAAC,EAGD,MADA,GAAK,IAAe,IACb,CACX,CACJ,EAAG,CACC,IAAK,YACL,MAAO,SAAmB,EAAO,CAE7B,IACI,EAAM,EADC,EAAM,YAAY,CAAC,CAAC,QAAQ,KAAM,GAAG,CAAC,CAAC,QAAQ,eAAgB,EAAE,CAAC,CAAC,QAAQ,MAAO,GAAG,CAAC,CAAC,QAAQ,KAAM,GAAG,CAAC,CAAC,MAAM,GAAI,CACvG,GACxB,OAAO,IAAQ,IAAA,GAAY,EAAM,EAAM,SAAS,EAAI,QAAQ,MAAO,IAAI,CAAC,CAAC,SAAS,EAAG,GAAG,CAAC,CAC7F,CACJ,EAAG,CACC,IAAK,WACL,MAAO,SAAkB,EAAM,CAC3B,IAAI,EAAQ,EAAc,EAAM,CAAC,EAC7B,EAAI,EAAM,GACV,EAAI,EAAM,GACV,EAAI,EAAM,GACV,EAAI,EAAM,GAEd,GAAK,IACL,GAAK,IACL,GAAK,IAEL,IAAI,EAAM,KAAK,IAAI,EAAG,EAAG,CAAC,EACtB,EAAM,KAAK,IAAI,EAAG,EAAG,CAAC,EACtB,EAAI,IAAK,GACT,EAAI,IAAK,GACT,GAAK,EAAM,GAAO,EAEtB,GAAI,IAAQ,EACR,EAAI,EAAI,MACL,CACH,IAAI,EAAI,EAAM,EAEd,OADA,EAAI,EAAI,GAAM,GAAK,EAAI,EAAM,GAAO,GAAK,EAAM,GACvC,EAAR,CACI,KAAK,EACD,GAAK,EAAI,GAAK,GAAK,EAAI,EAAI,EAAI,GAAG,MACtC,KAAK,EACD,GAAK,EAAI,GAAK,EAAI,EAAE,MACxB,KAAK,EACD,GAAK,EAAI,GAAK,EAAI,EAAE,KAC5B,CAEA,GAAK,CACT,CAEA,MAAO,CAAC,EAAG,EAAG,EAAG,CAAC,CACtB,CACJ,EAAG,CACC,IAAK,WACL,MAAO,SAAkB,EAAO,CAC5B,IAAI,EAAQ,EAAc,EAAO,CAAC,EAC9B,EAAI,EAAM,GACV,EAAI,EAAM,GACV,EAAI,EAAM,GACV,EAAI,EAAM,GAEV,EAAI,IAAK,GACT,EAAI,IAAK,GACT,EAAI,IAAK,GAEb,GAAI,IAAM,EACN,EAAI,EAAI,EAAI,MACT,CACH,IAAI,EAAU,SAAiB,EAAG,EAAG,EAAG,CAMpC,OALI,EAAI,IAAG,GAAK,GACZ,EAAI,GAAG,IACP,EAAI,EAAI,EAAU,GAAK,EAAI,GAAK,EAAI,EACpC,EAAI,EAAI,EAAU,EAClB,EAAI,EAAI,EAAU,GAAK,EAAI,IAAM,EAAI,EAAI,GAAK,EAC3C,CACX,EAEI,EAAI,EAAI,GAAM,GAAK,EAAI,GAAK,EAAI,EAAI,EAAI,EACxC,EAAI,EAAI,EAAI,EAEhB,EAAI,EAAQ,EAAG,EAAG,EAAI,EAAI,CAAC,EAC3B,EAAI,EAAQ,EAAG,EAAG,CAAC,EACnB,EAAI,EAAQ,EAAG,EAAG,EAAI,EAAI,CAAC,CAC/B,CAEA,IAAI,EAAO,CAAC,EAAI,IAAK,EAAI,IAAK,EAAI,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAGrD,MAFA,GAAK,GAAK,EAEH,CACX,CACJ,CAAC,CAAC,EACK,CACX,EAAE,EAEE,EAAc,UAAY,CAC1B,SAAS,GAAc,CACnB,EAAe,KAAM,CAAW,EAEhC,KAAK,QAAU,CAAC,CACpB,CA+CA,OA7CA,EAAY,EAAa,CAAC,CACtB,IAAK,MACL,MAAO,SAAa,EAAQ,EAAM,EAAS,CACvC,EAAO,iBAAiB,EAAM,EAAS,EAAK,EAC5C,KAAK,QAAQ,KAAK,CACN,SACF,OACG,SACb,CAAC,CACL,CACJ,EAAG,CACC,IAAK,SACL,MAAO,SAAgB,EAAQ,EAAM,EAAS,CAC1C,KAAK,QAAU,KAAK,QAAQ,OAAO,SAAU,EAAG,CAC5C,IAAI,EAAU,GAcd,OAbI,GAAU,IAAW,EAAE,SACvB,EAAU,IAEV,GAAQ,IAAS,EAAE,OACnB,EAAU,IAEV,GAAW,IAAY,EAAE,UACzB,EAAU,IAGV,GACA,EAAY,UAAU,EAAE,OAAQ,EAAE,KAAM,EAAE,OAAO,EAE9C,CAAC,CACZ,CAAC,CACL,CACJ,EAAG,CACC,IAAK,UACL,MAAO,UAAmB,CACtB,KAAK,QAAQ,QAAQ,SAAU,EAAG,CAC9B,OAAO,EAAY,UAAU,EAAE,OAAQ,EAAE,KAAM,EAAE,OAAO,CAC5D,CAAC,EACD,KAAK,QAAU,CAAC,CACpB,CACJ,CAAC,EAAG,CAAC,CACD,IAAK,YACL,MAAO,SAAmB,EAAQ,EAAM,EAAS,CAC7C,EAAO,oBAAoB,EAAM,EAAS,EAAK,CACnD,CACJ,CAAC,CAAC,EACK,CACX,EAAE,EAEF,SAAS,EAAU,EAAY,CAE3B,IAAI,EAAM,SAAS,cAAc,KAAK,EAEtC,MADA,GAAI,UAAY,EACT,EAAI,iBACf,CAEA,SAAS,EAAU,EAAa,EAAM,EAAU,CAC5C,IAAI,EAAW,GAEf,SAAS,EAAM,EAAK,EAAK,EAAK,CAC1B,OAAO,KAAK,IAAI,EAAK,KAAK,IAAI,EAAK,CAAG,CAAC,CAC3C,CAEA,SAAS,EAAO,EAAG,EAAM,EAAU,CAC/B,GAAI,IACA,EAAW,IAEV,EAIL,GAAE,eAAe,EAEjB,IAAI,EAAS,EAAK,sBAAsB,EACpC,EAAI,EAAO,MACX,EAAI,EAAO,OACX,EAAI,EAAK,QACT,EAAI,EAAK,QAET,EAAO,EAAM,EAAI,EAAO,KAAM,EAAG,CAAC,EAClC,EAAO,EAAM,EAAI,EAAO,IAAK,EAAG,CAAC,EAErC,EAAS,EAAO,EAAG,EAAO,CAAC,CAXV,CAYrB,CAEA,SAAS,EAAQ,EAAG,EAAU,EACb,EAAE,UAAY,IAAA,GAAY,EAAE,MAAQ,EAAE,WACpC,EACX,EAAO,EAAG,EAAG,CAAQ,EAErB,EAAW,EAEnB,CAEA,SAAS,EAAQ,EAAG,EAAU,CACtB,EAAE,QAAQ,SAAW,EACrB,EAAO,EAAG,EAAE,QAAQ,GAAI,CAAQ,EAEhC,EAAW,EAEnB,CAEA,EAAY,IAAI,EAAM,YAAa,SAAU,EAAG,CAC5C,EAAQ,EAAG,EAAI,CACnB,CAAC,EACD,EAAY,IAAI,EAAM,aAAc,SAAU,EAAG,CAC7C,EAAQ,EAAG,EAAI,CACnB,CAAC,EACD,EAAY,IAAI,OAAQ,YAAa,CAAO,EAC5C,EAAY,IAAI,EAAM,YAAa,CAAO,EAC1C,EAAY,IAAI,OAAQ,UAAW,SAAU,EAAG,CAC5C,EAAW,EACf,CAAC,EACD,EAAY,IAAI,EAAM,WAAY,SAAU,EAAG,CAC3C,EAAW,EACf,CAAC,EACD,EAAY,IAAI,EAAM,cAAe,SAAU,EAAG,CAC9C,EAAW,EACf,CAAC,CACL,CAEA,IAAI,EAAY;6HACZ,EAAO,IAEP,EAAY,UACZ,EAAsB,YACtB,EAAiB,UAErB,SAAS,EAAE,EAAU,EAAS,CAC1B,OAAQ,GAAW,SAAA,CAAU,cAAc,CAAQ,CACvD,CAEA,SAAS,EAAU,EAAG,CAElB,EAAE,eAAe,EACjB,EAAE,gBAAgB,CACtB,CACA,SAAS,EAAM,EAAQ,EAAQ,EAAM,EAAS,EAAM,CAChD,EAAO,IAAI,EAAQ,EAAW,SAAU,EAAG,CACnC,EAAK,QAAQ,EAAE,GAAG,GAAK,IACnB,GACA,EAAU,CAAC,EAEf,EAAQ,CAAC,EAEjB,CAAC,CACL,CAEA,IAAI,EAAS,UAAY,CACrB,SAAS,EAAO,EAAS,CACrB,EAAe,KAAM,CAAM,EAG3B,KAAK,SAAW,CAEZ,MAAO,QACP,OAAQ,UACR,MAAO,GACP,OAAQ,GACR,aAAc,MACd,aAAc,GACd,aAAc,MAClB,EAEA,KAAK,QAAU,IAAI,EAEnB,KAAK,SAAW,KAEhB,KAAK,OAAS,KAEd,KAAK,OAAS,KAEd,KAAK,QAAU,KAEf,KAAK,WAAW,CAAO,CAC3B,CAscA,OApcA,EAAY,EAAQ,CAAC,CACjB,IAAK,aACL,MAAO,SAAoB,EAAS,CAChC,IAAI,EAAQ,KAEZ,GAAI,CAAC,EACD,OAEJ,IAAI,EAAW,KAAK,SAEpB,SAAS,EAAS,EAAQ,EAAQ,EAAU,CACxC,IAAK,IAAI,KAAO,EACR,GAAY,EAAS,QAAQ,CAAG,GAAK,IAIzC,EAAO,GAAO,EAAO,GAE7B,CAEA,GAAI,aAAmB,YACnB,EAAS,OAAS,MACf,CAEC,EAAS,QAAU,EAAQ,QAAU,EAAS,SAAW,EAAQ,SACjE,KAAK,QAAQ,OAAO,EAAS,MAAM,EACnC,KAAK,aAAe,IAGxB,EAAS,EAAS,CAAQ,EAEtB,EAAQ,WACR,KAAK,SAAW,EAAQ,UAExB,EAAQ,SACR,KAAK,OAAS,EAAQ,QAEtB,EAAQ,SACR,KAAK,OAAS,EAAQ,QAEtB,EAAQ,UACR,KAAK,QAAU,EAAQ,SAG3B,IAAI,EAAM,EAAQ,OAAS,EAAQ,OAC/B,GACA,KAAK,UAAU,CAAG,CAE1B,CAEA,IAAI,EAAS,EAAS,OACtB,GAAI,GAAU,EAAS,OAAS,CAAC,KAAK,aAAc,CAEhD,IAAI,EAAY,SAAmB,EAAG,CAClC,OAAO,EAAM,YAAY,CAAC,CAC9B,EAEA,KAAK,QAAQ,IAAI,EAAQ,QAAS,CAAS,EAE3C,EAAM,KAAK,QAAS,EAAQ,CAAC,IAAK,WAAY,OAAO,EAAG,CAAS,EAEjE,KAAK,aAAe,EACxB,MAAW,EAAQ,QAAU,CAAC,EAAS,OACnC,KAAK,KAAK,CAElB,CACJ,EAAG,CACC,IAAK,cACL,MAAO,SAAqB,EAAG,CAC3B,GAAI,KAAK,KAAK,EAAG,CAEb,GAAK,EAAE,eAAe,EAEtB,KAAK,SAAS,OAAO,MAAM,cAAgB,OAE3C,IAAI,EAAU,GAAK,EAAE,OAAS,EAAY,KAAK,SAAW,KAAK,WAC/D,WAAW,UAAY,CACnB,OAAO,EAAQ,MAAM,CACzB,EAAG,GAAG,EAEF,KAAK,QACL,KAAK,OAAO,KAAK,MAAM,CAE/B,CACJ,CACJ,EAAG,CACC,IAAK,eACL,MAAO,SAAsB,EAAG,CAC5B,IAAI,EAAQ,GAAK,EAAE,KACf,EAAS,GAEb,GAAI,CAAC,EACD,EAAS,QACN,GAAI,IAAU,GAAuB,IAAU,EAAgB,CAElE,IAAI,GAAa,KAAK,kBAAoB,GAAK,IAC3C,EAAE,UAAY,IACd,EAAS,GAEjB,MAEI,EAAU,CAAC,EAEX,EAAS,GAGT,GAAU,KAAK,KAAK,IACpB,KAAK,SAAS,OAAO,MAAM,cAAgB,GAEvC,IAAU,GACV,KAAK,SAAS,OAAO,MAAM,EAG3B,KAAK,SACL,KAAK,QAAQ,KAAK,MAAM,EAGpC,CACJ,EAAG,CACC,IAAK,YACL,MAAO,SAAmB,EAAS,EAAM,CAErC,KAAK,aAAa,EAElB,KAAK,WAAW,CAAO,EACnB,GACA,KAAK,YAAY,CAEzB,CACJ,EAAG,CACC,IAAK,WACL,MAAO,SAAkB,EAAO,EAAQ,CACpC,KAAK,UAAU,EAAO,CAAU,QAAO,CAAC,CAC5C,CACJ,EAAG,CACC,IAAK,YACL,MAAO,SAAmB,EAAO,EAAO,CACpC,GAAI,OAAO,GAAU,WACjB,EAAQ,EAAM,KAAK,GAElB,EAIL,KAAiB,CAAC,EAClB,IAAI,EAAI,IAAK,GACb,GAAI,CAEA,EAAI,IAAI,EAAM,CAAK,CACvB,OAAS,EAAI,CACT,GAAI,EAAM,aACN,OAEJ,MAAM,CACV,CAEA,GAAI,CAAC,KAAK,SAAS,MAAO,CACtB,IAAI,EAAO,EAAE,KACb,EAAK,GAAK,EACV,EAAE,KAAO,CACb,CACA,KAAK,OAAS,KAAK,MAAQ,EAC3B,KAAK,SAAS,KAAM,KAAM,KAAM,KAAM,CAAK,CAlBzB,CAmBtB,CACJ,EAAG,CACC,IAAK,YACL,MAAO,SAAmB,EAAQ,EAAQ,CACtC,KAAK,SAAS,EAAQ,CAAM,CAChC,CACJ,EAAG,CACC,IAAK,OACL,MAAO,UAAgB,CAEnB,GAAI,CADS,KAAK,SAAS,OAEvB,MAAO,GAGX,GAAI,KAAK,WAAY,CACjB,IAAI,EAAU,KAAK,WAAW,EAAI,EAIlC,OAFA,KAAK,aAAa,EAEX,CACX,CAGA,IAAI,EAAU,EADH,KAAK,SAAS,UAAY,khBACT,EAkC5B,MAhCA,MAAK,WAAa,EAClB,KAAK,MAAQ,EAAE,cAAe,CAAO,EACrC,KAAK,OAAS,EAAE,aAAc,CAAO,EACrC,KAAK,MAAQ,EAAE,gBAAiB,CAAO,EACvC,KAAK,SAAW,EAAE,uBAAwB,CAAO,EACjD,KAAK,WAAa,EAAE,iBAAkB,CAAO,EAC7C,KAAK,SAAW,EAAE,sBAAuB,CAAO,EAChD,KAAK,WAAa,EAAE,wBAAyB,CAAO,EAEpD,EAAQ,UAAU,IAAI,UAAY,KAAK,SAAS,MAAM,EACjD,KAAK,SAAS,OACf,EAAQ,UAAU,IAAI,UAAU,EAE/B,KAAK,SAAS,QACf,EAAQ,UAAU,IAAI,WAAW,EAEhC,KAAK,SAAS,cACf,EAAQ,UAAU,IAAI,WAAW,EAErC,KAAK,SAAS,UAAY,CACtB,OAAO,EAAQ,UAAU,IAAI,OAAO,CACxC,CAAC,EAED,KAAK,aAAa,EAEd,KAAK,OACL,KAAK,UAAU,EAEf,KAAK,UAAU,KAAK,SAAS,YAAY,EAE7C,KAAK,YAAY,EAEV,EACX,CACJ,EAAG,CACC,IAAK,OACL,MAAO,UAAgB,CACnB,OAAO,KAAK,WAAW,EAAK,CAChC,CACJ,EAAG,CACC,IAAK,UACL,MAAO,UAAmB,CACtB,KAAK,QAAQ,QAAQ,EACjB,KAAK,YACL,KAAK,SAAS,OAAO,YAAY,KAAK,UAAU,CAExD,CACJ,EAAG,CACC,IAAK,cACL,MAAO,UAAuB,CAC1B,IAAI,EAAS,KAET,EAAO,KACP,EAAM,KAAK,WACX,EAAS,KAAK,QAElB,SAAS,EAAS,EAAQ,EAAM,EAAS,CACrC,EAAO,IAAI,EAAQ,EAAM,CAAO,CACpC,CAEA,EAAS,EAAK,QAAS,SAAU,EAAG,CAChC,OAAO,EAAE,eAAe,CAC5B,CAAC,EAED,EAAU,EAAQ,KAAK,MAAO,SAAU,EAAG,EAAG,CAC1C,OAAO,EAAK,SAAS,CAAC,CAC1B,CAAC,EAED,EAAU,EAAQ,KAAK,OAAQ,SAAU,EAAG,EAAG,CAC3C,OAAO,EAAK,SAAS,KAAM,EAAG,EAAI,CAAC,CACvC,CAAC,EAEG,KAAK,SAAS,OACd,EAAU,EAAQ,KAAK,MAAO,SAAU,EAAG,EAAG,CAC1C,OAAO,EAAK,SAAS,KAAM,KAAM,KAAM,EAAI,CAAC,CAChD,CAAC,EAGL,IAAI,EAAY,KAAK,SAEjB,EAAS,EAAW,QAAS,SAAU,EAAG,CACtC,EAAK,UAAU,KAAK,MAAO,CAAE,WAAY,GAAM,aAAc,EAAK,CAAC,CACvE,CAAC,EAED,EAAS,EAAW,QAAS,SAAU,EAAG,CACtC,IAAI,EAAQ,KAER,EAAM,iBAAmB,EAAM,cAC/B,EAAM,OAAO,CAErB,CAAC,EAGL,KAAK,SAAS,UAAY,CAEtB,IAAI,EAAkB,SAAyB,EAAG,CAC9C,OAAO,EAAO,aAAa,CAAC,CAChC,EAEA,EAAS,OAAQ,EAAqB,CAAe,EACrD,EAAS,OAAQ,EAAgB,CAAe,EAChD,EAAM,EAAQ,EAAK,CAAC,MAAO,QAAQ,EAAG,CAAe,EAErD,IAAI,EAAa,SAAoB,EAAG,CACpC,EAAO,iBAAmB,EAAE,SAChC,EACA,EAAS,EAAK,EAAqB,CAAU,EAE7C,EAAS,EAAK,EAAgB,CAAU,EAExC,EAAS,EAAO,WAAY,QAAS,CAAe,CACxD,CAAC,EAED,IAAI,EAAc,SAAqB,EAAG,CACtC,EAAO,SAAS,UAAY,CACxB,OAAO,EAAO,aAAa,CAAC,CAChC,CAAC,EACG,EAAO,QACP,EAAO,OAAO,EAAO,MAAM,CAEnC,EACA,EAAS,KAAK,SAAU,QAAS,CAAW,EAC5C,EAAM,EAAQ,EAAK,CAAC,OAAO,EAAG,CAAW,CAC7C,CACJ,EAAG,CACC,IAAK,eACL,MAAO,UAAwB,CAC3B,IAAI,EAAS,KAAK,SAAS,OACvB,EAAM,KAAK,WAEX,IAAW,EAAI,YACf,EAAO,YAAY,CAAG,EAG1B,KAAK,SAAS,SAAU,EAAO,CAEvB,iBAAiB,CAAM,CAAC,CAAC,WAAa,WACtC,EAAO,MAAM,SAAW,YAG5B,IAAI,EAAW,IAAU,GAAO,cAAgB,SAAW,EAE3D,CAAC,YAAa,eAAgB,aAAc,aAAa,CAAC,CAAC,QAAQ,SAAU,EAAG,CAExE,IAAM,EACN,EAAI,UAAU,IAAI,CAAC,EAEnB,EAAI,UAAU,OAAO,CAAC,CAE9B,CAAC,EAED,EAAI,UAAU,IAAI,CAAQ,CAC9B,CAAC,CACL,CACJ,EAAG,CACC,IAAK,WACL,MAAO,SAAkB,EAAG,EAAG,EAAG,EAAG,EAAO,CACxC,IAAiB,CAAC,EAElB,IAAI,EAAM,KAAK,OACX,EAAO,EAAI,KAEf,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,CAAC,QAAQ,SAAU,EAAG,EAAG,EAC7B,GAAK,IAAM,KACX,EAAK,GAAK,EAElB,CAAC,EACD,EAAI,KAAO,EAEX,KAAK,UAAU,CAAK,EAEhB,KAAK,UAAY,CAAC,EAAM,QACxB,KAAK,SAAS,CAAG,CAEzB,CACJ,EAAG,CACC,IAAK,YACL,MAAO,SAAmB,EAAO,CAC7B,GAAI,CAAC,KAAK,WACN,OAEJ,IAAiB,CAAC,EAElB,IAAI,EAAM,KAAK,OACX,EAAM,EAAI,KACV,EAAS,OAAS,EAAI,GAAK,EAAO,eAClC,EAAS,EAAI,UACb,EAAU,EAAI,WAEd,EAAM,KAAK,MACX,EAAO,KAAK,OACZ,EAAM,KAAK,MACX,EAAS,EAAE,mBAAoB,CAAG,EAClC,EAAU,EAAE,mBAAoB,CAAI,EACpC,EAAS,EAAE,mBAAoB,CAAG,EAEtC,SAAS,EAAK,EAAQ,EAAO,EAAM,CAC/B,EAAM,MAAM,KAAO,EAAO,IAAM,GACpC,CACA,SAAS,EAAK,EAAQ,EAAO,EAAM,CAC/B,EAAM,MAAM,IAAM,EAAO,IAAM,GACnC,CAEA,EAAK,EAAK,EAAQ,EAAI,EAAE,EAExB,KAAK,OAAO,MAAM,gBAAkB,KAAK,MAAM,MAAM,MAAQ,EAE7D,EAAK,EAAM,EAAS,EAAI,EAAE,EAC1B,EAAK,EAAM,EAAS,EAAI,EAAI,EAAE,EAE9B,EAAK,MAAM,MAAQ,EAEnB,EAAK,EAAK,EAAQ,EAAI,EAAI,EAAE,EAE5B,IAAI,EAAS,EAET,EAAK,mBAAqB,CAAC,EADlB,EAAO,QAAQ,MAAO,MAAM,CAAC,CAAC,QAAQ,IAAK,MACZ,CAAC,EAAI,IAIjD,GAFA,KAAK,MAAM,MAAM,WAAa,EAAK,KAAO,EAEtC,CAAC,EAAM,WAAY,CACnB,IAAI,EAAS,KAAK,SAAS,aACvB,EAAQ,KAAK,SAAS,MAEtB,EAAQ,IAAK,GACjB,OAAQ,EAAR,CACI,IAAK,MACD,EAAQ,EAAI,SAAS,CAAK,EAAE,MAChC,IAAK,MACD,EAAQ,EAAI,SAAS,CAAK,EAAE,MAChC,QACI,EAAQ,EAAI,SAAS,CAAK,CAClC,CACA,KAAK,SAAS,MAAQ,CAC1B,CAEA,KAAK,WAAW,MAAM,MAAQ,CAClC,CACJ,EAAG,CACC,IAAK,WACL,MAAO,SAAkB,EAAU,EAAY,CACvC,KAAK,SAAS,QAAU,KAAK,SAAS,MACtC,GAAY,EAAS,KAAK,SAAS,KAAK,EAExC,GAAc,EAAW,CAEjC,CACJ,EAAG,CACC,IAAK,aACL,MAAO,SAAoB,EAAW,CAClC,IAAI,EAAM,KAAK,WACf,GAAI,CAAC,EACD,MAAO,GAGX,IAAI,EAAe,EAAY,GAAK,OAChC,EAAS,EAAI,MAAM,UAAY,EAKnC,OAHI,IACA,EAAI,MAAM,QAAU,GAEjB,CACX,CACJ,CAAC,CAAC,EACK,CACX,EAAE,EAGM,EAAQ,SAAS,cAAc,OAAO,EAO9C,MANI,GAAM,YAAc,kqIACpB,SAAS,gBAAgB,kBAAkB,YAAY,CAAK,EAE5D,EAAO,aAAe,EAGnB,CAET,EAAE,CAGI,GAEA,MACC,SAAS,EAAqC,EAAqB,EAAqB,CAE/F,aAGA,EAAoB,EAAE,EAAqB,CACzC,EAAG,UAAW,CAAE,OAAqB,CAAY,CACnD,CAAC,EAGD,MAAM,UAAwB,KAAM,CAClC,YAAY,EAAS,EAAU,CAC7B,MAAM,GAAG,EAAQ,eAAe,GAAU,EAC1C,KAAK,SAAW,CAClB,CACF,CAiBA,SAAS,EAAM,EAAM,CACnB,MAAO,gBAAgB,KAAK,CAAI,CAClC,CACA,SAAS,EAAQ,EAAM,CACrB,OAAO,GAAQ,KAAO,GAAQ,GAChC,CACA,SAAS,EAAuB,EAAM,CAIpC,OAAO,GAAQ,GACjB,CACA,SAAS,EAAY,EAAM,CACzB,MAAO;GAAe,SAAS,CAAI,CACrC,CACA,SAAS,EAAwB,EAAM,CACrC,OAAO,GAAQ,KAAO,GAAQ,KAAO,GAAQ,KAAO,GAAQ,KAAO,IAAS,KAAO,IAAS,GAC9F,CACA,SAAS,EAAmB,EAAM,CAChC,OAAO,GAAQ,KAAO,GAAQ,KAAO,GAAQ,KAAO,GAAQ,KAAO,IAAS,KAAO,IAAS,KAAO,GAAQ,KAAO,GAAQ,GAC5H,CAGA,IAAM,EAAgB,+CAGhB,EAAe,mCACrB,SAAS,EAA0B,EAAM,CACvC,MAAO;GAAY,SAAS,CAAI,CAClC,CACA,SAAS,EAAe,EAAM,CAC5B,OAAO,EAAQ,CAAI,GAAK,EAAkB,KAAK,CAAI,CACrD,CAGA,IAAM,EAAoB,YAC1B,SAAS,EAAmB,EAAM,CAChC,OAAO,IAAS;GAAQ,IAAS,MAAQ,IAAS,KAAQ,IAAS,MAAQ,IAAS,IACtF,CAKA,SAAS,EAAa,EAAM,EAAO,CACjC,IAAM,EAAO,EAAK,WAAW,CAAK,EAClC,OAAO,IAAS,IAAa,IAAS,IAAe,IAAS,GAAW,IAAS,EACpF,CAMA,SAAS,EAA0B,EAAM,EAAO,CAC9C,IAAM,EAAO,EAAK,WAAW,CAAK,EAClC,OAAO,IAAS,IAAa,IAAS,GAAW,IAAS,EAC5D,CAMA,SAAS,EAAoB,EAAM,EAAO,CACxC,IAAM,EAAO,EAAK,WAAW,CAAK,EAClC,OAAO,IAAS,KAAwB,IAAS,MAA+B,GAAQ,MAAc,GAAQ,MAAsB,IAAS,MAA0B,IAAS,MAA+B,IAAS,OAAwB,IAAS,KAC3P,CAMA,SAAS,EAAQ,EAAM,CAErB,OAAO,EAAkB,CAAI,GAAK,EAAkB,CAAI,CAC1D,CAMA,SAAS,EAAkB,EAAM,CAC/B,OAAO,IAAS,KAAO,IAAS,KAAY,IAAS,GACvD,CAMA,SAAS,EAAc,EAAM,CAC3B,OAAO,IAAS,GAClB,CAMA,SAAS,EAAkB,EAAM,CAC/B,OAAO,IAAS,KAAO,IAAS,KAAY,IAAS,KAAY,IAAS,KAAY,IAAS,GACjG,CAMA,SAAS,EAAc,EAAM,CAC3B,OAAO,IAAS,GAClB,CAKA,SAAS,EAAoB,EAAM,EAAa,CAC9C,IAAI,EAAqB,UAAU,OAAS,GAAK,UAAU,KAAO,IAAA,IAAY,UAAU,GAClF,EAAQ,EAAK,YAAY,CAAW,EAC1C,OAAO,IAAU,GAAwF,EAAnF,EAAK,UAAU,EAAG,CAAK,GAAK,EAAqB,GAAK,EAAK,UAAU,EAAQ,CAAC,EACtG,CACA,SAAS,EAA2B,EAAM,EAAc,CACtD,IAAI,EAAQ,EAAK,OACjB,GAAI,CAAC,EAAa,EAAM,EAAQ,CAAC,EAE/B,OAAO,EAAO,EAEhB,KAAO,EAAa,EAAM,EAAQ,CAAC,GACjC,IAEF,OAAO,EAAK,UAAU,EAAG,CAAK,EAAI,EAAe,EAAK,UAAU,CAAK,CACvE,CACA,SAAS,EAAc,EAAM,EAAO,EAAO,CACzC,OAAO,EAAK,UAAU,EAAG,CAAK,EAAI,EAAK,UAAU,EAAQ,CAAK,CAChE,CAKA,SAAS,EAAuB,EAAM,CACpC,MAAO,iBAAiB,KAAK,CAAI,CACnC,CAKA,IAAM,EAAoB,CACxB,KAAM,MACN,KAAM,MACN,KAAM,MACN,KAAM,MACN,IAAM,KACR,EAGM,EAAmB,CACvB,IAAK,IACL,KAAM,KACN,IAAK,IACL,EAAG,KACH,EAAG,KACH,EAAG;EACH,EAAG,KACH,EAAG,GAEL,EAkBA,SAAS,EAAW,EAAM,CACxB,IAAI,EAAI,EACJ,EAAS,GAEb,EAAuB,CAAC,MAAO,OAAQ,MAAM,CAAC,EAC5B,EACL,GACX,GAAmB,EAErB,EAAuB,CAAC,MAAO,OAAQ,MAAM,CAAC,EAC9C,IAAM,EAAiB,EAAe,GAAG,EAkBzC,IAjBI,GACF,EAA+B,EAE7B,EAAe,EAAK,EAAE,GAAK,EAAuB,CAAM,GAGrD,IAEH,EAAS,EAA2B,EAAQ,GAAG,GAEjD,GAA0B,GACjB,IAET,EAAS,EAAoB,EAAQ,GAAG,GAInC,EAAK,KAAO,KAAO,EAAK,KAAO,KACpC,IACA,EAA+B,EAEjC,GAAI,GAAK,EAAK,OAEZ,OAAO,EAET,GAAyB,EACzB,SAAS,GAAa,CACpB,EAA+B,EAC/B,IAAM,EAAY,GAAY,GAAK,GAAW,GAAK,GAAY,GAAK,GAAY,GAAK,GAAc,GAAK,GAAoB,EAAK,GAAK,GAAW,EAEjJ,OADA,EAA+B,EACxB,CACT,CACA,SAAS,GAAiC,CACxC,IAAI,EAAc,UAAU,OAAS,GAAK,UAAU,KAAO,IAAA,GAAY,UAAU,GAAK,GAChF,EAAQ,EACV,EAAU,EAAgB,CAAW,EACzC,EACE,GAAU,EAAa,EACvB,AACE,IAAU,EAAgB,CAAW,QAEhC,GACT,OAAO,EAAI,CACb,CACA,SAAS,EAAgB,EAAa,CACpC,IAAM,EAAgB,EAAc,EAAe,EAC/C,EAAa,GACjB,OACE,GAAI,EAAc,EAAM,CAAC,EACvB,GAAc,EAAK,GACnB,SACK,GAAI,EAAoB,EAAM,CAAC,EAEpC,GAAc,IACd,SAEA,MAOJ,OAJI,EAAW,OAAS,GACtB,GAAU,EACH,IAEF,EACT,CACA,SAAS,GAAe,CAEtB,GAAI,EAAK,KAAO,KAAO,EAAK,EAAI,KAAO,IAAK,CAE1C,KAAO,EAAI,EAAK,QAAU,CAAC,EAAoB,EAAM,CAAC,GACpD,IAGF,MADA,IAAK,EACE,EACT,CAGA,GAAI,EAAK,KAAO,KAAO,EAAK,EAAI,KAAO,IAAK,CAE1C,KAAO,EAAI,EAAK,QAAU,EAAK,KAAO;GACpC,IAEF,MAAO,EACT,CACA,MAAO,EACT,CACA,SAAS,EAAuB,EAAQ,CAKtC,GAAI,EAAsB,CAAM,EAAG,CACjC,GAAI,EAAwB,EAAK,EAAE,EAEjC,KAAO,EAAI,EAAK,QAAU,EAAmB,EAAK,EAAE,GAClD,IAIJ,OADA,EAA+B,EACxB,EACT,CACA,MAAO,EACT,CACA,SAAS,EAAsB,EAAQ,CACrC,EAAgB,EAAI,EACpB,IAAK,IAAM,KAAS,EAAQ,CAC1B,IAAM,EAAM,EAAI,EAAM,OACtB,GAAI,EAAK,MAAM,EAAG,CAAG,IAAM,EAEzB,MADA,GAAI,EACG,EAEX,CACA,MAAO,EACT,CACA,SAAS,EAAe,EAAM,CAM5B,OALI,EAAK,KAAO,GACd,GAAU,EAAK,GACf,IACO,IAEF,EACT,CACA,SAAS,EAAc,EAAM,CAK3B,OAJI,EAAK,KAAO,GACd,IACO,IAEF,EACT,CACA,SAAS,IAAsB,CAC7B,OAAO,EAAc,IAAI,CAC3B,CAMA,SAAS,IAAe,CAStB,OARA,EAA+B,EAC3B,EAAK,KAAO,KAAO,EAAK,EAAI,KAAO,KAAO,EAAK,EAAI,KAAO,KAE5D,GAAK,EACL,EAA+B,EAC/B,EAAc,GAAG,EACV,IAEF,EACT,CAKA,SAAS,IAAc,CACrB,GAAI,EAAK,KAAO,IAAK,CACnB,GAAU,IACV,IACA,EAA+B,EAG3B,EAAc,GAAG,GACnB,EAA+B,EAEjC,IAAI,EAAU,GACd,KAAO,EAAI,EAAK,QAAU,EAAK,KAAO,KAAK,CACzC,IAAI,EAcJ,GAbK,GAQH,EAAiB,GACjB,EAAU,KARV,EAAiB,EAAe,GAAG,EAC9B,IAEH,EAAS,EAA2B,EAAQ,GAAG,GAEjD,EAA+B,GAKjC,GAAa,EAET,EADiB,GAAY,GAAK,GAAoB,EAAI,GAC3C,CACb,EAAK,KAAO,KAAO,EAAK,KAAO,KAAO,EAAK,KAAO,KAAO,EAAK,KAAO,KAAO,EAAK,KAAO,IAAA,GAE1F,EAAS,EAAoB,EAAQ,GAAG,EAExC,GAAuB,EAEzB,KACF,CACA,EAA+B,EAC/B,IAAM,EAAiB,EAAe,GAAG,EACnC,EAAgB,GAAK,EAAK,OAC3B,IACC,EAAe,EAAK,EAAE,GAAK,EAE7B,EAAS,EAA2B,EAAQ,GAAG,EAE/C,GAAmB,GAGA,EACL,IACZ,GAAkB,EAEpB,GAAU,OAEV,GAAmB,EAGzB,CAQA,OAPI,EAAK,KAAO,KACd,GAAU,IACV,KAGA,EAAS,EAA2B,EAAQ,GAAG,EAE1C,EACT,CACA,MAAO,EACT,CAKA,SAAS,IAAa,CACpB,GAAI,EAAK,KAAO,IAAK,CACnB,GAAU,IACV,IACA,EAA+B,EAG3B,EAAc,GAAG,GACnB,EAA+B,EAEjC,IAAI,EAAU,GACd,KAAO,EAAI,EAAK,QAAU,EAAK,KAAO,KAYpC,GAXK,EAOH,EAAU,GANa,EAAe,GACpB,IAEhB,EAAS,EAA2B,EAAQ,GAAG,GAKnD,GAAa,EAET,CADmB,EACL,EAAG,CAEnB,EAAS,EAAoB,EAAQ,GAAG,EACxC,KACF,CASF,OAPI,EAAK,KAAO,KACd,GAAU,IACV,KAGA,EAAS,EAA2B,EAAQ,GAAG,EAE1C,EACT,CACA,MAAO,EACT,CAMA,SAAS,IAA4B,CAEnC,IAAI,EAAU,GACV,EAAiB,GACrB,KAAO,GACA,EAQH,EAAU,GANa,EAAe,GACpB,IAEhB,EAAS,EAA2B,EAAQ,GAAG,GAKnD,EAAiB,EAAW,EAEzB,IAEH,EAAS,EAAoB,EAAQ,GAAG,GAI1C,EAAS,MAAM,EAAO,IACxB,CAeA,SAAS,IAAc,CACrB,IAAI,EAAkB,UAAU,OAAS,GAAK,UAAU,KAAO,IAAA,IAAY,UAAU,GACjF,EAAc,UAAU,OAAS,GAAK,UAAU,KAAO,IAAA,GAAY,UAAU,GAAK,GAClF,EAAkB,EAAK,KAAO,KAMlC,GALA,AAGE,KADA,IACkB,IAEhB,EAAQ,EAAK,EAAE,EAAG,CAKpB,IAAM,EAAa,EAAc,EAAK,EAAE,EAAI,EAAgB,EAAc,EAAK,EAAE,EAAI,EAAgB,EAAkB,EAAK,EAAE,EAAI,EAAoB,EAChJ,EAAU,EACV,EAAU,EAAO,OACnB,EAAM,IAEV,IADA,MACa,CACX,GAAI,GAAK,EAAK,OAAQ,CAGpB,IAAM,EAAQ,EAAuB,EAAI,CAAC,EAa1C,MAZI,CAAC,GAAmB,EAAY,EAAK,OAAO,CAAK,CAAC,GAIpD,EAAI,EACJ,EAAS,EAAO,UAAU,EAAG,CAAO,EAC7B,GAAY,EAAI,IAIzB,EAAM,EAA2B,EAAK,GAAG,EACzC,GAAU,EACH,GACT,CACA,GAAI,IAAM,EAIR,MAFA,GAAM,EAA2B,EAAK,GAAG,EACzC,GAAU,EACH,GAET,GAAI,EAAW,EAAK,EAAE,EAAG,CAGvB,IAAM,EAAS,EACT,EAAS,EAAI,OAKnB,GAJA,GAAO,IACP,IACA,GAAU,EACV,EAA+B,EAAK,EAChC,GAAmB,GAAK,EAAK,QAAU,EAAY,EAAK,EAAE,GAAK,EAAQ,EAAK,EAAE,GAAK,EAAQ,EAAK,EAAE,EAIpG,OADA,GAAwB,EACjB,GAET,IAAM,EAAY,EAAuB,EAAS,CAAC,EAC7C,EAAW,EAAK,OAAO,CAAS,EACtC,GAAI,IAAa,IAMf,MAFA,GAAI,EACJ,EAAS,EAAO,UAAU,EAAG,CAAO,EAC7B,GAAY,GAAO,CAAS,EAErC,GAAI,EAAY,CAAQ,EAMtB,MAFA,GAAI,EACJ,EAAS,EAAO,UAAU,EAAG,CAAO,EAC7B,GAAY,EAAI,EAIzB,EAAS,EAAO,UAAU,EAAG,CAAO,EACpC,EAAI,EAAS,EAGb,EAAM,GAAG,EAAI,UAAU,EAAG,CAAM,EAAE,IAAI,EAAI,UAAU,CAAM,GAC5D,MAAO,GAAI,GAAmB,EAA0B,EAAK,EAAE,EAAG,CAKhE,GAAI,EAAK,EAAI,KAAO,KAAO,EAAc,KAAK,EAAK,UAAU,EAAU,EAAG,EAAI,CAAC,CAAC,EAC9E,KAAO,EAAI,EAAK,QAAU,EAAa,KAAK,EAAK,EAAE,GACjD,GAAO,EAAK,GACZ,IAQJ,MAHA,GAAM,EAA2B,EAAK,GAAG,EACzC,GAAU,EACV,GAAwB,EACjB,EACT,MAAO,GAAI,EAAK,KAAO,KAAM,CAE3B,IAAM,EAAO,EAAK,OAAO,EAAI,CAAC,EAE9B,GADmB,EAAiB,KACjB,IAAA,GACjB,GAAO,EAAK,MAAM,EAAG,EAAI,CAAC,EAC1B,GAAK,OACA,GAAI,IAAS,IAAK,CACvB,IAAI,EAAI,EACR,KAAO,EAAI,GAAK,EAAM,EAAK,EAAI,EAAE,GAC/B,IAEE,IAAM,GACR,GAAO,EAAK,MAAM,EAAG,EAAI,CAAC,EAC1B,GAAK,GACI,EAAI,GAAK,EAAK,OAGvB,EAAI,EAAK,OAET,GAA6B,CAEjC,KAEE,IAAO,EACP,GAAK,CAET,KAAO,CAEL,IAAM,EAAO,EAAK,OAAO,CAAC,EACtB,IAAS,KAAO,EAAK,EAAI,KAAO,MAElC,GAAO,KAAK,IACZ,KACS,EAAmB,CAAI,GAEhC,GAAO,EAAkB,GACzB,MAEK,EAAuB,CAAI,GAC9B,EAAsB,CAAI,EAE5B,GAAO,EACP,IAEJ,CACI,GAEF,GAAoB,CAExB,CACF,CACA,MAAO,EACT,CAKA,SAAS,IAA0B,CACjC,IAAI,EAAY,GAEhB,IADA,EAA+B,EACxB,EAAK,KAAO,KAAK,CACtB,EAAY,GACZ,IACA,EAA+B,EAG/B,EAAS,EAAoB,EAAQ,IAAK,EAAI,EAC9C,IAAM,EAAQ,EAAO,OAErB,AAKE,EANgB,GACN,EAED,EAAc,EAAQ,EAAO,CAAC,EAG9B,EAA2B,EAAQ,GAAG,CAEnD,CACA,OAAO,CACT,CAKA,SAAS,IAAc,CACrB,IAAM,EAAQ,EACd,GAAI,EAAK,KAAO,IAAK,CAEnB,GADA,IACI,GAAc,EAEhB,OADA,GAAoC,CAAK,EAClC,GAET,GAAI,CAAC,EAAQ,EAAK,EAAE,EAElB,MADA,GAAI,EACG,EAEX,CAMA,KAAO,EAAQ,EAAK,EAAE,GACpB,IAEF,GAAI,EAAK,KAAO,IAAK,CAEnB,GADA,IACI,GAAc,EAEhB,OADA,GAAoC,CAAK,EAClC,GAET,GAAI,CAAC,EAAQ,EAAK,EAAE,EAElB,MADA,GAAI,EACG,GAET,KAAO,EAAQ,EAAK,EAAE,GACpB,GAEJ,CACA,GAAI,EAAK,KAAO,KAAO,EAAK,KAAO,IAAK,CAKtC,GAJA,KACI,EAAK,KAAO,KAAO,EAAK,KAAO,MACjC,IAEE,GAAc,EAEhB,OADA,GAAoC,CAAK,EAClC,GAET,GAAI,CAAC,EAAQ,EAAK,EAAE,EAElB,MADA,GAAI,EACG,GAET,KAAO,EAAQ,EAAK,EAAE,GACpB,GAEJ,CAGA,GAAI,CAAC,GAAc,EAEjB,MADA,GAAI,EACG,GAET,GAAI,EAAI,EAAO,CAEb,IAAM,EAAM,EAAK,MAAM,EAAO,CAAC,EACzB,EAAwB,OAAO,KAAK,CAAG,EAE7C,MADA,IAAU,EAAwB,IAAI,EAAI,GAAK,EACxC,EACT,CACA,MAAO,EACT,CAMA,SAAS,IAAgB,CACvB,OAAO,GAAa,OAAQ,MAAM,GAAK,GAAa,QAAS,OAAO,GAAK,GAAa,OAAQ,MAAM,GAEpG,GAAa,OAAQ,MAAM,GAAK,GAAa,QAAS,OAAO,GAAK,GAAa,OAAQ,MAAM,CAC/F,CACA,SAAS,GAAa,EAAM,EAAO,CAMjC,OALI,EAAK,MAAM,EAAG,EAAI,EAAK,MAAM,IAAM,GACrC,GAAU,EACV,GAAK,EAAK,OACH,IAEF,EACT,CAOA,SAAS,GAAoB,EAAO,CAGlC,IAAM,EAAQ,EACd,GAAI,EAAwB,EAAK,EAAE,EAAG,CACpC,KAAO,EAAI,EAAK,QAAU,EAAmB,EAAK,EAAE,GAClD,IAEF,IAAI,EAAI,EACR,KAAO,EAAa,EAAM,CAAC,GACzB,IAEF,GAAI,EAAK,KAAO,IAad,MAVA,GAAI,EAAI,EACR,EAAW,EACP,EAAK,KAAO,MAEd,IACI,EAAK,KAAO,KAEd,KAGG,EAEX,CACA,KAAO,EAAI,EAAK,QAAU,CAAC,EAA0B,EAAK,EAAE,GAAK,CAAC,EAAQ,EAAK,EAAE,IAAM,CAAC,GAAS,EAAK,KAAO,MAC3G,IAIF,GAAI,EAAK,EAAI,KAAO,KAAO,EAAc,KAAK,EAAK,UAAU,EAAO,EAAI,CAAC,CAAC,EACxE,KAAO,EAAI,EAAK,QAAU,EAAa,KAAK,EAAK,EAAE,GACjD,IAGJ,GAAI,EAAI,EAAO,CAKb,KAAO,EAAa,EAAM,EAAI,CAAC,GAAK,EAAI,GACtC,IAEF,IAAM,EAAS,EAAK,MAAM,EAAO,CAAC,EAMlC,MALA,IAAU,IAAW,YAAc,OAAS,KAAK,UAAU,CAAM,EAC7D,EAAK,KAAO,KAEd,IAEK,EACT,CACF,CACA,SAAS,IAAa,CACpB,GAAI,EAAK,KAAO,IAAK,CACnB,IAAM,EAAQ,EAEd,IADA,IACO,EAAI,EAAK,SAAW,EAAK,KAAO,KAAO,EAAK,EAAI,KAAO,OAC5D,IAIF,MAFA,KACA,GAAU,KAAK,UAAU,EAAK,UAAU,EAAO,CAAC,CAAC,EAC1C,EACT,CACF,CACA,SAAS,EAAuB,EAAO,CACrC,IAAI,EAAO,EACX,KAAO,EAAO,GAAK,EAAa,EAAM,CAAI,GACxC,IAEF,OAAO,CACT,CACA,SAAS,IAAgB,CACvB,OAAO,GAAK,EAAK,QAAU,EAAY,EAAK,EAAE,GAAK,EAAa,EAAM,CAAC,CACzE,CACA,SAAS,GAAoC,EAAO,CAIlD,GAAU,GAAG,EAAK,MAAM,EAAO,CAAC,EAAE,EACpC,CACA,SAAS,EAAsB,EAAM,CACnC,MAAM,IAAI,EAAgB,qBAAqB,KAAK,UAAU,CAAI,IAAK,CAAC,CAC1E,CACA,SAAS,IAA2B,CAClC,MAAM,IAAI,EAAgB,wBAAwB,KAAK,UAAU,EAAK,EAAE,IAAK,CAAC,CAChF,CACA,SAAS,IAAqB,CAC5B,MAAM,IAAI,EAAgB,gCAAiC,EAAK,MAAM,CACxE,CACA,SAAS,IAAyB,CAChC,MAAM,IAAI,EAAgB,sBAAuB,CAAC,CACpD,CACA,SAAS,IAAqB,CAC5B,MAAM,IAAI,EAAgB,iBAAkB,CAAC,CAC/C,CACA,SAAS,IAA+B,CACtC,IAAM,EAAQ,EAAK,MAAM,EAAG,EAAI,CAAC,EACjC,MAAM,IAAI,EAAgB,8BAA8B,EAAM,GAAI,CAAC,CACrE,CACF,CACA,SAAS,EAAoB,EAAM,EAAG,CACpC,OAAO,EAAK,KAAO,KAAO,EAAK,EAAI,KAAO,GAC5C,CAGM,GAEA,MACC,SAAS,EAAQ,CAExB,aACA,EAAO,QAAuB,KAAK,MAAM,iZAAiZ,CAEpb,GAEA,MACC,SAAS,EAAQ,CAExB,aACA,EAAO,QAAuB,KAAK,MAAM,k8EAAk8E,CAEr+E,GAEA,MACC,SAAS,EAAQ,CAExB,aACA,EAAO,QAAuB,KAAK,MAAM,88EAA88E,CAEj/E,GAEA,MACC,SAAS,EAAQ,CAExB,aACA,EAAO,QAAuB,KAAK,MAAM,stFAAstF,CAEzvF,EAEI,EAGI,EAA2B,CAAC,EAGhC,SAAS,EAAoB,EAAU,CAEtC,IAAI,EAAe,EAAyB,GAC5C,GAAI,IAAiB,IAAA,GACpB,OAAO,EAAa,QAGrB,IAAIE,EAAS,EAAyB,GAAY,CACjD,GAAI,EACJ,OAAQ,GACR,QAAS,CAAC,CACX,EASA,OANA,EAAoB,EAAS,CAAC,KAAKA,EAAO,QAASA,EAAQA,EAAO,QAAS,CAAmB,EAG9F,EAAO,OAAS,GAGTA,EAAO,OACf,CAkEA,OA9DC,UAAW,CACX,EAAoB,KAAO,UAAY,CACtC,MAAU,MAAM,gCAAgC,CACjD,CACD,EAAA,CAAE,GAGD,UAAW,CAEX,EAAoB,EAAI,SAAS,EAAQ,CACxC,IAAI,EAASA,GAAUA,EAAO,WAC7B,UAAW,CAAE,OAAOA,EAAO,OAAY,EACvC,UAAW,CAAE,OAAOA,CAAQ,EAE7B,OADA,EAAoB,EAAE,EAAQ,CAAE,EAAG,CAAO,CAAC,EACpC,CACR,CACD,EAAA,CAAE,GAGD,UAAW,CAEX,EAAoB,EAAI,SAAS,EAAS,EAAY,CACrD,IAAI,IAAI,KAAO,EACX,EAAoB,EAAE,EAAY,CAAG,GAAK,CAAC,EAAoB,EAAEF,EAAS,CAAG,GAC/E,OAAO,eAAeA,EAAS,EAAK,CAAE,WAAY,GAAM,IAAK,EAAW,EAAK,CAAC,CAGjF,CACD,EAAA,CAAE,GAGD,UAAW,CACX,EAAoB,EAAI,SAAS,EAAK,EAAM,CAAE,OAAO,OAAO,UAAU,eAAe,KAAK,EAAK,CAAI,CAAG,CACvG,EAAA,CAAE,GAGD,UAAW,CAEX,EAAoB,EAAI,SAAS,EAAS,CACtC,OAAO,OAAW,KAAe,OAAO,aAC1C,OAAO,eAAeA,EAAS,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,EAEvE,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,CAC7D,CACD,EAAA,CAAE,GAGD,UAAW,CACX,EAAoB,IAAM,SAAS,EAAQ,CAG1C,MAFA,GAAO,MAAQ,CAAC,EAChB,AAAsB,EAAO,WAAW,CAAC,EAClCE,CACR,CACD,EAAA,CAAE,EAOwB,EAAoB,IAErB,CAC1B,EAAA,CAAG,CAEZ,CAAC,aE/rsDyB,EAqB1B,IAAI,GAAkB,EAAK,OAAO,CAC9B,UAAW,wBAEX,OAAQ,CACJ,uCAAwC,cAC5C,EAEA,WAAY,SAAU,EAAU,CAC5B,GAAI,CAACC,EAAE,IAAI,KAAK,WAAW,MAAO,EAAS,IAAI,EAC3C,MAAU,MAAM,8BAAgC,EAAS,KAAO,YAAY,EAGhF,KAAK,KAAO,EAAS,KACrB,KAAK,IAAM,EAAS,IACpB,KAAK,MAAQ,EAAS,MACtB,KAAK,YAAc,EAAS,YAC5B,KAAK,WAAa,EAAS,WAC3B,KAAK,UAAY,EAAS,UAC1B,KAAK,QAAU,EAAS,QACxB,KAAK,iBAAmB,EAAS,iBACjC,KAAK,gBAAkB,EAAS,eACpC,EAEA,UAAW,SAAU,EAAM,EAAI,EAAO,CAClC,IAAI,EAAU,KAAK,WAAW,MAAM,GAEpC,GAAIA,EAAE,IAAI,EAAS,YAAY,GAC3BA,EAAE,IAAI,EAAQ,WAAY,MAAM,GAChCA,EAAE,IAAI,EAAQ,WAAW,KAAM,CAAI,EAAG,CACtC,IAAI,EAAW,EAAQ,WAAW,KAAK,EAAK,CAAC,GACzC,EAAM,EAAQ,WAAW,KAAK,EAAK,CAAC,GAExC,GAAI,CAAC,EAAS,CAAK,EAKf,OAJA,EAAO,QAAQ,UAAW,CACtB,KAAM,EACN,KAAM,SACV,CAAC,EACM,EAEf,CAEA,MAAO,EACX,EAGA,aAAc,SAAU,EAAO,EAAe,EAAgB,EAAW,CACrE,IAAI,EAAkB,aAA0B,GAA2B,OAAS,SAChF,GAAY,GAAa,CAAC,EAAA,CAAG,OAAS,EAAe,IAAI,KAAK,SAAS,EACtE,QAAK,UAAU,EAAgB,EAAe,CAAQ,EAI3D,KAAI,EAAM,EAAe,IACzB,EAAe,QAAQ,EACvB,EAAI,SAAS,SAAS,CAAC,CAAC,MAAM,EAE9B,IAAI,EAAOA,EAAE,OAAO,CAChB,GAAI,EACJ,KAAM,KAAK,WAAW,KACtB,IAAK,EAAI,KAAK,OAAO,EACrB,MAAO,EAAI,KAAK,SAAS,EACzB,YAAa,KAAK,YAClB,SAAU,GACV,WAAY,KACZ,UAAW,KAAK,UAChB,QAAS,KAAK,QACd,iBAAkB,KAAK,iBACvB,gBAAiB,KAAK,eAC1B,EAAG,GAAa,CAAC,CAAC,EAElB,KAAK,WAAW,MAAM,EAAc,CAAC,OAAO,CAAI,CAAC,CAAC,OAAO,CAlBhC,CAmB7B,EAEA,aAAc,UAAY,CACtB,KAAK,IAAI,SAAS,SAAS,EAC3B,KAAK,IAAI,MAAM,EAEf,IAAI,EAAO,CACP,KAAM,KAAK,WAAW,KACtB,IAAK,KAAK,IAAI,KAAK,OAAO,EAC1B,MAAO,KAAK,IAAI,KAAK,SAAS,EAC9B,YAAa,KAAK,YAClB,SAAU,GACV,WAAY,KACZ,UAAW,KAAK,UAChB,QAAS,KAAK,QACd,iBAAkB,KAAK,iBACvB,gBAAiB,KAAK,eAC1B,EAGA,GAAI,KAAK,OAAS,OACd,GAAI,CACA,IAAI,EAAY,KAAK,MAAM,KAAK,IAAI,KAAK,SAAS,CAAC,EAE/C,IAAc,IAAA,IAAa,CAACA,EAAE,SAAS,CAAS,IAChD,EAAK,MAAQ,EAErB,MAAY,CAEZ,CAGJ,KAAK,WAAW,MAAM,KAAK,KAAK,CAAC,OAAO,CAAI,CAAC,CACxC,OAAO,CAAC,CACR,IAAI,SAAS,KAAK,GAAG,CAC9B,EAEA,OAAQ,UAAY,CAahB,OAZA,KAAK,IAAI,KAAK,CACV,QAAS,KAAK,IACd,UAAWA,EAAE,KAAK,KAAK,WAAW,MAAM,KAAK,KAAK,CAAC,aAAc,IAAI,CAAC,CAAC,CAC3E,CAAC,CAAC,CAAC,MAAM,EAET,KAAK,IAAI,KAAK,KAAK,WAAW,MAAM,KAAK,KAAK,CAAC,SAAS,CACpD,IAAK,KAAK,IACV,MAAOA,EAAE,KAAK,KAAK,WAAW,MAAM,KAAK,KAAK,CAAC,aAAc,IAAI,CAAC,CAAC,EACnE,YAAa,KAAK,YAClB,WAAYC,EAChB,CAAC,CAAC,EAEK,IACX,CACJ,CAAC,EAEG,GAAsB,EAAK,OAAO,CAClC,OAAQ,CACJ,yCAA0C,aAC1C,uCAAwC,OACxC,yCAA0C,kBAC1C,yCAA0C,SAAU,EAAO,CACvD,IAAI,EAGA,gBAAgB,GACH,SAEA,OAGjB,KAAK,WAAW,aAAa,EAAO,EAAY,KAAM,CAElD,IAAK,KAAK,IAAI,KAAK,8BAA8B,CAAC,CAAC,IAAI,EACvD,MAAO,KAAK,gBAAgB,CAChC,CAAC,CACL,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,KAAO,EAAS,KACrB,KAAK,IAAM,EAAS,KAAO,GAC3B,KAAK,UAAY,EAAS,WAAa,OACvC,KAAK,MAAS,EAAS,QAAU,IAAA,GAA8B,GAAjB,EAAS,MACvD,KAAK,YAAc,EAAS,YAC5B,KAAK,SAAW,EAAS,SACzB,KAAK,UAAY,EAAS,UAC1B,KAAK,QAAU,EAAS,QACxB,KAAK,iBAAmB,EAAS,iBACjC,KAAK,gBAAkB,EAAS,eACpC,EAEA,aAAcC,GAEd,gBAAiB,UAAY,CACzB,OAAO,KAAK,IAAI,KAAK,gCAAgC,CAAC,CAAC,IAAI,CAC/D,EAEA,gBAAiB,SAAU,EAAO,CAC9B,EAAM,yBAAyB,EAE/B,IAAI,GAAA,EAAA,EAAA,QAAA,CADa,EAAM,aACC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAe1C,GAAQ,CAbJ,KAAM,oDACFF,EAAE,OAAO,KAAK,GAAG,EAAI,QACzB,YAAa,GACb,QAAS,SACT,oBAAuB,CACnB,KAAK,KAAK,eAAe,KAAK,IAAK,UAAY,CAC3C,EAAa,OAAO,CACxB,EAAG,KAAM,CACL,MAAO,KAAK,UACZ,KAAM,KAAK,OACf,CAAC,CACL,CAES,CAAC,CAClB,EAEA,WAAY,SAAU,EAAO,CACzB,EAAM,yBAAyB,EAE/B,IAAI,GAAA,EAAA,EAAA,QAAA,CADa,EAAM,aACL,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAChC,KAAK,SACL,EAAO,OAAO,EAEd,KAAK,WAAW,OAAO,CAE/B,EAEA,KAAM,SAAU,EAAO,EAAO,CAC1B,EAAM,yBAAyB,EAE/B,IAAI,GAAA,EAAA,EAAA,QAAA,CADa,EAAM,aACL,CAAC,CAAC,OAAO,EACvB,EAAU,EAAO,KAAK,8BAA8B,CAAC,CAAC,IAAI,EAC1D,EAAa,IAAU,IAAA,GAAqB,EAAO,KAAK,gCAAgC,CAAC,CAAC,IAAI,EAA1D,EAExC,GAAI,KAAK,UAAY,IAAY,GAAI,CACjC,EAAO,QAAQ,UAAW,CACtB,KAAM,sCACN,KAAM,SACV,CAAC,EACD,MACJ,CAEA,IAAI,MAAqB,CACrB,KAAK,IAAM,EACX,KAAK,MAAQ,EAEb,KAAK,WAAW,IAAM,KAAK,IAC3B,KAAK,WAAW,MAAQ,KAAK,MAEzB,gBAAgB,GAChB,KAAK,WAAW,KAAO,OAEvB,KAAK,WAAW,KAAO,SAG3B,KAAK,WAAW,OAAO,EAEvB,KAAK,SAAW,EACpB,EAEI,EAAgB,SAAU,EAAK,CAC/B,EAAO,QAAQ,UAAW,CACtB,KAAM,EAAI,QACV,KAAM,QACV,CAAC,CACL,EAEI,KAAK,SACD,KAAK,gBACL,KAAK,gBAAgB,EAAS,EAAW,EAAc,CAAa,EAEpE,KAAK,KAAK,YAAY,EAAS,EAAW,EAAc,EAAe,CACnE,MAAO,KAAK,UACZ,KAAM,KAAK,OACf,CAAC,EAGD,KAAK,iBACL,KAAK,iBAAiB,EAAS,KAAK,IAAK,EAAW,EAAc,CAAa,EAE/E,KAAK,KAAK,aAAa,EAAS,KAAK,IAAK,EAAW,EAAc,EAAe,CAC9E,MAAO,KAAK,UACZ,KAAM,KAAK,OACf,CAAC,CAGb,EAEA,OAAQ,UAAY,CAWhB,OAVA,KAAK,IAAI,KAAK,KAAK,aAAa,CAC5B,KAAM,KAAK,KACX,IAAK,KAAK,IACV,MAAO,KAAK,MACZ,YAAa,KAAK,YAClB,SAAU,KAAK,SACf,WAAYC,EAChB,CAAC,CAAC,EACF,KAAK,IAAI,KAAK,8BAA8B,CAAC,CAAC,QAAQ,OAAO,EAEtD,IACX,CACJ,CAAC,EAEG,GAA0B,GAAoB,OAAO,CACrD,aAAcE,GAEd,gBAAiB,UAAY,CACzB,OAAO,KAAK,OAAO,QAAQ,CAC/B,EAEA,KAAM,SAAU,EAAO,CACnB,GAAI,CACA,GAAoB,UAAU,KAAK,KAC/B,KAAM,EAAO,KAAK,OAAO,IAAI,CAAC,CACtC,MAAc,CACV,EAAO,QAAQ,UAAW,CACtB,KAAM,wDACN,KAAM,SACV,CAAC,CACL,CACJ,EAEA,OAAQ,UAAY,CAChB,GAAoB,UAAU,OAAO,MAAM,KAAM,SAAS,EAE1D,IAAM,EAAe,KAAK,IAAI,KAAK,gBAAgB,EAiBnD,MAhBA,MAAK,OAAS,IAAIC,GAAAA,QAAW,EAAa,GAAI,CAC1C,KAAM,OACN,MAAO,CAAC,OAAQ,MAAM,EACtB,YAAe,CACX,EAAO,QAAQ,UAAW,CACtB,KAAM,sEACN,KAAM,SACV,CAAC,CACL,CACJ,CAAC,EAEG,KAAK,QAAU,IAAA,KACf,KAAK,OAAO,QAAQ,KAAK,UAAU,KAAK,KAAK,CAAC,EAC9C,KAAK,OAAO,UAAU,GAGnB,IACX,CACJ,CAAC,EAKG,GAAiB,EAAK,OAAO,CAC7B,OAAQ,CACJ,6BAA8B,SAAU,EAAO,CAC3C,KAAK,YAAY,EAAO,MAAM,CAClC,EACA,+BAAgC,SAAU,EAAO,CAC7C,KAAK,YAAY,EAAO,QAAQ,CACpC,CACJ,EAuBA,WAAY,SAAU,EAAU,CAC5B,KAAK,KAAO,EAAS,KACrB,KAAK,UAAY,EAAS,WAAa,OACvC,KAAK,MAAQ,EAAS,OAAS,WAC/B,KAAK,QAAU,EAAS,QACxB,KAAK,YAAc,EAAS,YAC5B,KAAK,iBAAmB,EAAS,iBACjC,KAAK,gBAAkB,EAAS,gBAEhC,KAAK,KAAK,GAAG,YAAa,UAAY,CAClC,KAAK,OAAO,CAChB,EAAG,IAAI,EACP,KAAK,OAAO,CAChB,EAEA,MAAO,CACH,OAAQ,CACJ,OAAQ,SAAU,EAAM,CACpB,OAAO,IAAI,GAAoB,CAAI,CACvC,EACA,aAAc,UAAY,CACtB,OAAO,KAAK,KAChB,EACA,SAAUC,EACd,EACA,KAAM,CACF,OAAQ,SAAU,EAAM,CAIpB,OAHI,EAAK,QAAU,IAAA,KACf,EAAK,MAAQ,KAAK,MAAM,EAAK,KAAK,GAE/B,IAAI,GAAwB,CAAI,CAC3C,EACA,aAAc,UAAY,CACtB,OAAO,KAAK,UAAU,KAAK,MAAO,KAAM,CAAC,CAC7C,EACA,WAAY,CACR,KAAM,CACF,OAAQ,CACJ,SAAU,EAAO,CACb,GAAI,CAEA,OADA,KAAK,MAAM,CAAK,EACT,EACX,MAAY,CAEZ,CAEA,MAAO,EACX,EACA,8DACJ,CACJ,CACJ,EACA,SAAUC,EACd,CACJ,EAEA,QAAS,SAAU,EAAM,CAErB,MADA,MAAK,KAAO,EACL,IACX,EAGA,iBAAkB,SAAU,EAAO,CAC/B,OAAON,EAAE,SAAS,CAAK,EAAI,SAAW,MAC1C,EAEA,YAAa,SAAU,EAAO,EAAM,CAChC,IAAI,EAAa,KAAK,MAAM,EAAK,CAAC,OAC9B,EAAS,IAAS,OAAU,KAAO,GAEnC,EAAS,IAAI,GAAgB,CAC7B,UAAW,gCACL,OACN,IAAK,GACE,QACP,KAAM,KAAK,KACX,UAAW,KAAK,UAChB,QAAS,KAAK,QACd,YAAa,KAAK,YAClB,WAAY,KACZ,iBAAkB,KAAK,iBACvB,gBAAiB,KAAK,eAC1B,CAAC,EACD,EAAO,IAAI,SAAS,KAAK,EAAE,8BAA8B,CAAC,EAE1D,IAAI,EAAW,CACX,KAAM,KAAK,KACX,IAAK,GACE,QACP,UAAW,KAAK,UAChB,QAAS,KAAK,QACd,YAAa,KAAK,YAClB,SAAU,GACV,WAAY,EACZ,iBAAkB,KAAK,iBACvB,gBAAiB,KAAK,eAC1B,CAAC,CAAC,CACG,OAAO,CAAC,CACR,IAAI,SAAS,EAAO,GAAG,CAChC,EAEA,OAAQ,UAAY,CAChB,IAAI,EAAW,KAAK,KAAK,IAAI,KAAK,SAAS,GAAK,CAAC,EAC7C,EAAW,OAAO,KAAK,CAAQ,EA0BnC,OAzBA,EAAS,KAAK,EAAU,EAGxB,KAAK,IAAI,KAAKO,GAAuB,CACjC,KAAM,KAAK,KACX,MAAO,KAAK,MACZ,YAAa,KAAK,YAClB,WAAYN,EAChB,CAAC,CAAC,EAGF,EAAE,KAAK,EAAU,SAAU,EAAS,CAChC,KAAK,IAAI,KAAK,8BAA8B,CAAC,CAAC,OAAO,IAAI,GAAgB,CACrE,KAAM,KAAK,iBAAiB,EAAS,EAAQ,EAC7C,IAAK,EACL,MAAO,EAAS,GAChB,YAAa,KAAK,YAClB,WAAY,KACZ,UAAW,KAAK,UAChB,QAAS,KAAK,QACd,iBAAkB,KAAK,iBACvB,gBAAiB,KAAK,eAC1B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CACnB,EAAG,IAAI,EAEA,IACX,CACJ,CAAC,ECzfD,SAASO,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAAI,EAAa,CAAC,EAChF,EAAmB,GAAU,CAAC,EAsDhC,OApDD,SAAU,EAAY,EAAW,EAAkB,EAAQ,EAAY,EAAO,CAC7E,EAAW,4BAA2C,UAAU,CACzD,MAAQ,KAAK,MAAsB,MAAQ,KAAK,WACzD,GAAU,IACd,GAAsB,kCACjB,IAAe,SACpB,GAAsB,mCAGjB,IAAe,OACpB,GAAsB,oCAGjB,IAAe,SACpB,GAAsB,gCAEtB,EAAW,EAAYF,GAAiC,EAAO,KAAK,GAAK,EAAe,EAAK,SAE7F,EACA,EAAW,kCAAiD,UAAU,CACzD,MAAQ,KAAK,MAAsB,MAAQ,KAAK,WAC7D,EAAW,EAAW,sDAAgGA,GAAiC,GAAc,EAAe,EAAK,6CAA+E,4BAAgCD,GAAS,WAAa,EAAY,WAAa,KAAO,GAAM,EAAK,GAAK,UAC9W,EACA,EAAW,4BAA2C,UAAU,CACnD,MAAQ,KAAK,MAAsB,MAAQ,KAAK,WAC7D,EAAW,EAAW,mOAAqUC,GAAiC,GAAoB,EAAe,EAAK,wNACpa,EACA,EAAW,gCAA+C,UAAU,CACvD,MAAQ,KAAK,MAAsB,MAAQ,KAAK,WAC7D,EAAW,EAAW,WAAkB,2EAAkFD,GAAS,WAAY,GAAM,GAAM,EAAK,GAAK,oDACrK,EACA,EAAW,EAAW,8PAAkWC,GAAiC,GAAS,EAAe,EAAK,QACtb,EAAW,2BAA2B,CAAC,EACvC,GAAsB,iCACtB,EAAW,iCAAiC,CAAC,EAC7C,EAAW,2BAA2B,CAAC,EACvC,GAAsB,sGACtB,EAAW,+BAA+B,CAAC,EAC3C,GAAsB,2BAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,cAAe,EAC3E,EAAgB,UAChB,OAAO,UAAc,IAAc,UAAY,IAAA,GAAW,qBAAsB,EAChF,EAAgB,iBAChB,OAAO,iBAAqB,IAAc,iBAAmB,IAAA,GAAW,WAAY,EACpF,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,GAAW,eAAgB,EACpE,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,UAAW,EACvE,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,EAAS,EAC3C,CAAS,CCzDtB,SAASG,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAAI,EAAa,CAAC,EAChF,EAAmB,GAAU,CAAC,EAwDhC,OAtDD,SAAU,EAAY,EAAW,EAAkB,EAAQ,EAAY,EAAO,CAC7E,EAAW,4BAA2C,UAAU,CACzD,MAAQ,KAAK,MAAsB,MAAQ,KAAK,WACzD,GAAU,IACd,GAAsB,kCACjB,IAAe,SACpB,GAAsB,mCAGjB,IAAe,OACpB,GAAsB,oCAGjB,IAAe,SACpB,GAAsB,gCAEtB,EAAW,EAAYF,GAAiC,EAAO,KAAK,GAAK,EAAe,EAAK,SAE7F,EACA,EAAW,kCAAiD,UAAU,CACzD,MAAQ,KAAK,MAAsB,MAAQ,KAAK,WAC7D,EAAW,EAAW,sDAAgGA,GAAiC,GAAc,EAAe,EAAK,6CAA+E,4BAAgCD,GAAS,WAAa,EAAY,WAAa,KAAO,GAAM,EAAK,GAAK,UAC9W,EACA,EAAW,4BAA2C,UAAU,CACnD,MAAQ,KAAK,MAAsB,MAAQ,KAAK,WAC7D,EAAW,EAAW,mOAAqUC,GAAiC,GAAoB,EAAe,EAAK,wNACpa,EACA,EAAW,gCAA+C,UAAU,CACvD,MAAQ,KAAK,MAAsB,MAAQ,KAAK,WAC7D,EAAW,EAAW,WAAkB,2EAAkFD,GAAS,WAAY,GAAM,GAAM,EAAK,GAAK,oDACrK,EACA,GAAsB,4BAClB,IACJ,EAAW,EAAW,OAAoBC,GAAiC,GAAS,EAAe,EAAK,SAExG,EAAW,2BAA2B,CAAC,EACvC,EAAW,iCAAiC,CAAC,EAC7C,EAAW,2BAA2B,CAAC,EACvC,GAAsB,oDACtB,EAAW,+BAA+B,CAAC,EAC3C,GAAsB,eAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,cAAe,EAC3E,EAAgB,UAChB,OAAO,UAAc,IAAc,UAAY,IAAA,GAAW,qBAAsB,EAChF,EAAgB,iBAChB,OAAO,iBAAqB,IAAc,iBAAmB,IAAA,GAAW,WAAY,EACpF,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,GAAW,eAAgB,EACpE,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,UAAW,EACvE,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,EAAS,EAC3C,CAAS,IC1DI,EAsB1B,IAAI,GAAe,EAAK,OAAO,CAC3B,OAAQ,CACJ,wBAAyB,SAAU,EAAG,CAClC,EAAE,eAAe,EACjB,KAAK,YAAY,CACrB,EACA,yBAA0B,UAAY,CAClC,KAAK,EAAE,yBAAyB,CAAC,CAAC,KAAK,EAAE,EACzC,KAAK,YAAY,aAAa,CAClC,EACA,0BAA2B,UAAY,CACnC,KAAK,EAAE,yBAAyB,CAAC,CAAC,KAAK,EAAE,EACzC,KAAK,eAAe,CACxB,EACA,kBAAmB,UAAY,CAC3B,IAAI,EAAQ,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,MAE9B,EAAM,SACN,KAAK,MAAQ,EACb,KAAK,aAAa,EAE1B,EACA,qBAAsB,UAAY,CAC9B,KAAK,EAAE,UAAU,CAAC,CAAC,QAAQ,OAAO,CACtC,EACA,yBAA0B,SAAU,EAAG,CACnC,EAAE,gBAAgB,EAClB,EAAE,eAAe,EACjB,EAAE,cAAc,aAAa,WAAa,OAC1C,KAAK,EAAE,cAAc,CAAC,CACjB,SAAS,iBAAiB,CAAC,CAC3B,KAAK,4CAA4C,CAC1D,EACA,yBAA0B,SAAU,EAAG,CACnC,EAAE,gBAAgB,EAClB,EAAE,eAAe,EACjB,KAAK,EAAE,cAAc,CAAC,CACjB,YAAY,iBAAiB,CAAC,CAC9B,KAAK,6CAA6C,CAC3D,EACA,wBAAyB,SAAU,EAAG,CAClC,IAAI,EAAe,EAAE,cAAc,aAC9B,KAIL,KAAI,EAAU,EAAa,cAC3B,EAAa,WAAc,IAAY,QAAU,IAAY,WAAc,OAAS,OAEpF,EAAE,eAAe,CAHU,CAI/B,EACA,oBAAqB,cACzB,EAwCA,WAAY,SAAU,EAAU,CACxB,EAAS,UACT,KAAK,OAAS,KACd,KAAK,WAAa,OAElB,KAAK,OAAS,EAAS,QAAU,EAAS,OAC1C,KAAK,WAAa,EAAS,YAAc,UAE7C,KAAK,MAAQ,CAAC,EACd,KAAK,UAAY,EACjB,KAAK,MAAQG,EAAE,IAAI,EAAU,OAAO,EAAI,EAAS,MAAQ,eACzD,KAAK,MAAQA,GAAE,IAAI,EAAU,OAAO,GAAI,EAAS,MACjD,KAAK,UAAYA,EAAE,IAAI,EAAU,WAAW,EAAI,EAAS,UAAY,KAAK,aAAe,OACzF,KAAK,cAAgB,EAAS,eAAiB,GAC/C,KAAK,YAAc,EAAS,aAAe,CAAC,EAE5C,KAAK,YAAc,KAAK,UAAY,4BAA8B,6BAClE,KAAK,kBAAoB,KAAK,UAAY,oBAAsB,kBACpE,EAEA,OAAQ,UAAY,CAChB,IAAI,EAAiB,CACjB,OAAQ,KAAK,OACb,WAAY,KAAK,WACjB,MAAO,KAAK,MACZ,UAAW,KAAK,UAChB,WAAY,KAAK,YACjB,iBAAkB,KAAK,iBAC3B,EAEA,GAAI,KAAK,MAAO,CACZ,KAAK,IAAI,KAAKC,GAAqB,CAAc,CAAC,EAElD,IAAI,EACA,KAAK,aAAe,SACpB,EAAW,KAAK,OAAO,IAAI,KAAK,GAGpC,KAAK,IAAI,YAAY,IAAI,CAAC,CAAC,GAAG,sBAAyB,EAInD,EAAA,EAAA,QAAA,CAAM,kBAAkB,CAAC,CAAC,QAAU,KAAK,aACrC,KAAK,YAAY,YAAY,EAEjC,GAAY,SAAU,IAAA,GAAW,CAAQ,CAC7C,CAAC,EAED,GAAW,SAAU,IAAA,GAAW,CAAQ,CAC5C,MACI,KAAK,IAAI,KAAKC,GAA6B,CAAc,CAAC,EAE9D,OAAO,IACX,EAEA,aAAc,SAAU,EAAG,CACvB,EAAE,gBAAgB,EAClB,EAAE,eAAe,EAEjB,KAAK,EAAE,cAAc,CAAC,CACjB,YAAY,iBAAiB,CAAC,CAC9B,KAAK,0BAA0B,KAAK,aAAa,EAEtD,IAAI,EAAe,EAAE,cAAc,aAGnC,GAAI,CAACF,EAAE,MAAM,EAAa,MAAQ,GAAS,KAAK,QAAQ,CAAI,CAAC,EAAG,CAC5D,KAAK,EAAE,yBAAyB,CAAC,CAAC,KAAK,6BAA6B,EACpE,MACJ,CACA,KAAK,MAAQ,EAAa,MAEtB,CAAC,KAAK,WAAa,KAAK,MAAM,OAAS,IAGvC,KAAK,MAAQ,CAAC,KAAK,MAAM,EAAE,GAG/B,KAAK,aAAa,CACtB,EAEA,aAAc,UAAY,CACtB,GAAI,KAAK,MAAM,SAAW,EACtB,KAAK,EAAE,6BAA6B,CAAC,CAAC,KAAK,KAAK,iBAAiB,EACjE,KAAK,iBAAiB,EAAK,MACxB,CACH,KAAK,UAAY,EACjB,EAAE,KAAK,KAAK,MAAO,SAAU,EAAM,CAC/B,KAAK,WAAa,EAAK,IAC3B,EAAG,IAAI,EAEP,IAAI,EAEA,KAAK,MAAM,OAAS,EACd,YAAc,KAAK,MAAM,OAAS,SAElC,eAAiB,KAAK,MAAM,EAAE,CAAC,KAAO,OAEhD,KAAK,EAAE,6BAA6B,CAAC,CAAC,KAAK,wBACvC,EAAM,MAAQG,GAAW,KAAK,SAAS,EACvC,yBAAyB,EAC7B,KAAK,iBAAiB,EAAI,EAC1B,KAAK,EAAE,yCAAyC,CAAC,CAAC,SAAS,MAAM,EACjE,KAAK,EAAE,6BAA6B,CAAC,CAAC,MAAM,EAC5C,KAAK,EAAE,yBAAyB,CAAC,CAAC,MAAM,CAC5C,CAEA,KAAK,QAAQ,iBAAkB,KAAK,KAAK,CAC7C,EAEA,YAAa,UAAY,CACrB,KAAK,iBAAiB,EAAK,EAC3B,KAAK,EAAE,cAAc,CAAC,CAAC,SAAS,MAAM,EACtC,KAAK,EAAE,qBAAqB,CAAC,CAAC,YAAY,MAAM,EAChD,KAAK,EAAE,yBAAyB,CAAC,CAAC,MAAM,EAEpC,KAAK,WACL,KAAK,EAAE,qBAAqB,CAAC,CAAC,YAAY,MAAM,EAGpD,KAAK,aAAe,EACpB,KAAK,gBAAkB,EACvB,KAAK,QAAQ,iBAAiB,EAEzB,KAAK,eACN,KAAK,eAAe,CAE5B,EAOA,iBAAkB,SAAU,EAAO,CAC/B,KAAK,EAAE,iBAAiB,CAAC,CAAC,aAAa,CAAK,CAChD,EAOA,eAAgB,UAAY,CACxB,GAAI,KAAK,cAAgB,KAAK,MAAM,OAAQ,CAEpC,KAAK,OACL,KAAK,IAAI,MAAM,MAAM,EAEzB,KAAK,QAAQ,mBAAoB,CAC7B,MAAO,KAAK,MACZ,UAAW,KAAK,SACpB,CAAC,EACD,MACJ,CAqCA,GAnCA,KAAK,YAAc,KAAK,aAAe,OAAS,KAAK,OAAS,IAAI,GAElE,KAAK,YAAY,GAAG,oBAAqB,UAAY,CACjD,KAAK,MAAM,KAAK,aAAa,CAAC,GAAK,KAAK,YAAY,GACpD,KAAK,cAAgB,EACrB,KAAK,eAAe,CACxB,EAAG,IAAI,CAAC,CAAC,GAAG,qBAAsB,SAAU,EAAM,CAC9C,KAAK,iBAAmB,EAAK,KACjC,EAAG,IAAI,CAAC,CAAC,GAAG,oBAAqB,SAAU,EAAM,CAC7C,IAAI,EAAkB,EAAK,UAAY,EAAK,OAE5C,KAAK,EAAE,mCAAmC,CAAC,CAAC,IAAI,QAC5C,KAAK,KAAK,IAAM,EAAkB,EAAK,KAAK,EAAI,GAAG,EACvD,KAAK,EAAE,mCAAmC,CAAC,CAAC,IAAI,QAC5C,KAAK,KAAK,KAAO,KAAK,gBAAkB,EAAK,QACnC,KAAK,SAAS,EAAI,GAAG,EACnC,KAAK,EAAE,6BAA6B,CAAC,CAAC,KAClC,8BAAgC,KAAK,aAAe,GAAK,OACrD,KAAK,MAAM,OAAS,SAAW,EAAK,KAAK,KAAO,SAChDA,GAAW,CAAe,EAAI,MAC9BA,GAAW,EAAK,KAAK,CAC7B,EACA,KAAK,EAAE,6BAA6B,CAAC,CAAC,KAAK,qBACvCA,GAAW,KAAK,gBAAkB,EAAK,MAAM,EAAI,MACjDA,GAAW,KAAK,SAAS,CAAC,CAClC,EAAG,IAAI,CAAC,CAAC,GAAG,iBAAkB,SAAU,EAAM,CAC1C,IAAI,EAAO,EAAK,QAAU,0DAE1B,EAAA,EAAA,QAAA,CAAE,yBAAyB,CAAC,CAAC,KAAK,CAAI,CAC1C,EAAG,IAAI,CAAC,CAAC,GAAG,yBAA0B,SAAU,EAAM,CAClD,IAAI,EAAO,EAAK,QAAU,4DAE1B,EAAA,EAAA,QAAA,CAAE,yBAAyB,CAAC,CAAC,KAAK,CAAI,CAC1C,EAAG,IAAI,EAEH,KAAK,aAAe,OACpB,KAAK,YAAY,eAAe,KAAK,MAAM,KAAK,aAAa,MAC1D,CACH,IAAI,EAAc,KAAK,YACnBH,EAAE,WAAW,KAAK,WAAW,IAC7B,EAAc,KAAK,YAAY,IAAI,GAEvC,KAAK,YAAY,OAAO,KAAK,OAAQ,KAAK,MAAM,KAAK,cAAe,KAAM,CAAW,CACzF,CACJ,EASA,QAAS,SAAU,EAAM,CACrB,IAAI,EAAa,EAAK,WAItB,GAHKA,EAAE,WAAW,CAAU,IACxB,EAAa,EAAK,kBAElB,CAACA,EAAE,WAAW,CAAU,EAExB,MAAO,GAGX,IAAI,EAAQ,EAAW,KAAK,CAAI,EAChC,OAAO,GAAS,EAAM,MAC1B,CACJ,CAAC,ECjVD,SAASI,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAwEhC,OAtED,SAAU,EAAS,EAAiB,EAAK,EAAO,CAC/C,IAAI,EAAM,GAEd,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAM,EAAM,GACxB,EAAW,EAAW,UAA2B,6BAA+BH,GAAS,UAAW,EAAK,GAAM,EAAK,GAAK,IACrH,EAAI,eAAiB,OACzB,GAAsB,4BAGlB,EAAI,eAAiB,eACzB,GAAsB,gCAEtB,EAAW,EAAYC,GAAiC,EAAI,KAAK,GAAK,EAAe,EAAK,YAC1F,GAAO,CACD,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAM,EAAM,GACtB,EAAW,EAAW,UAA2B,6BAA+BD,GAAS,UAAW,EAAK,GAAM,EAAK,GAAK,IACrH,EAAI,eAAiB,OACzB,GAAsB,4BAGlB,EAAI,eAAiB,eACzB,GAAsB,gCAEtB,EAAW,EAAYC,GAAiC,EAAI,KAAK,GAAK,EAAe,EAAK,YAC1F,GAAO,CACH,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAER,IACJ,GAAsB,sBAClB,EAAQ,eAAiB,OAC7B,GAAsB,4BAGlB,EAAQ,eAAiB,eAC7B,GAAsB,gCAEtB,EAAW,EAAYA,GAAiC,EAAQ,KAAK,GAAK,EAAe,EAAK,SAE1F,IACJ,EAAW,EAAW,oCAAmDA,GAAiC,GAAmB,EAAe,EAAK,QAEjJ,GAAsB,0MAClB,EAAM,IACV,GAAsB,mIAEtB,GAAsB,SAClB,EAAM,IACV,GAAsB,4IAEtB,GAAsB,QAClB,EAAA,CAAE,KAAK,KAAM,YAAa,EACtB,EAAgB,QAChB,OAAO,QAAY,IAAc,QAAU,IAAA,GAAW,oBAAqB,EAC3E,EAAgB,gBAChB,OAAO,gBAAoB,IAAc,gBAAkB,IAAA,GAAW,QAAS,EAC/E,EAAgB,IAChB,OAAO,IAAQ,IAAc,IAAM,IAAA,GAAW,UAAW,EACzD,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,EAAS,EAC3C,CAAS,CC3EtB,SAASG,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAyBhC,OAvBD,SAAU,EAAa,EAAU,EAAY,CAC5C,GAAsB,6GACvB,EAAa,GAAK,CAAC,EACxB,GAAsB,uEAGtB,GAAsB,gFAEtB,EAAW,EAAW,yBAAoD,+BAAiCH,GAAS,WAAY,EAAU,GAAM,EAAK,EAAE,yBAA6BA,GAAS,MAAO,EAAY,GAAM,EAAK,EAAEA,GAAS,QAAS,EAAa,GAAM,EAAK,GAAK,cAAqCC,GAAiC,GAAc,EAAe,EAAK,sBAC/W,EAAY,GAAG,GAAc,CAAC,EACnC,GAAsB,mEAGtB,GAAsB,4EAEtB,GAAsB,mBAClB,EAAA,CAAE,KAAK,KAAM,gBAAiB,EAC1B,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,aAAc,EAC5E,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,GAAW,eAAgB,EACxE,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,CC5BtB,SAASG,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAuGhC,OArGD,SAAU,EAAY,EAAY,EAAY,EAAY,EAAO,EAAO,EAAgB,EAAa,EAAc,EAAM,CACxH,GAAsB,6GACxB,IACJ,GAAsB,2CAClB,IACJ,GAAsB,iYAEtB,GAAsB,wCACjB,IAAS,UACd,GAAsB,uHACjB,GAAS,EAAW,QACzB,GAAsB,wHAEjB,GAAS,EAAW,QACzB,GAAsB,0IAIjB,IAAS,eACd,GAAsB,+HACjB,GAAS,EAAW,QACzB,GAAsB,mHAGtB,EAAW,EAAW,kCAAqD,iGAAwGH,GAAS,QAAS,GAAG,EAAW,CAAI,EAAE,UAAW,GAAM,EAAK,GAAK,IAChP,IAAS,aACb,GAAsB,+BAGlB,IAAS,OACb,GAAsB,4BAGlB,IAAS,WACb,GAAsB,oCAEtB,GAAsB,gKAClB,IAAS,aACb,GAAsB,+BAGlB,IAAS,OACb,GAAsB,4BAGlB,IAAS,WACb,GAAsB,oCAEtB,EAAW,EAAW,IAAOC,GAAiC,EAAM,KAAK,GAAK,EAAe,EAAK,SAC9F,IAAS,UAAY,IAAS,gBAClC,EAAW,EAAW,8BAAiD,6CAAoDD,GAAS,OAAQ,EAAM,YAAY,EAAG,GAAM,EAAK,GAAK,0CAA6EC,GAAiC,GAAQ,EAAe,EAAK,aAEvT,GAAS,EAAW,QACxB,GAAsB,gIAClB,IAAS,UAAY,IAAS,gBAC9B,IAAS,WACb,GAAsB,sHAEtB,EAAW,EAAW,kGAA0JA,GAAiC,GAAQ,EAAe,EAAK,cAGzO,GAAS,EAAW,QAAU,IAAS,UAAY,IAAS,gBAChE,EAAW,EAAW,yJAA8OA,GAAiC,GAAQ,EAAe,EAAK,aAEjU,GAAsB,4DAElB,IACJ,EAAW,EAAW,8MAA8RA,GAAiC,GAAQ,EAAe,EAAK,4DAEjX,GAAsB,0LAClB,EACJ,GAAsB,sCAGtB,GAAsB,yBAEtB,GAAsB,6DAClB,IACJ,GAAsB,wCAElB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,eAAgB,EAC5E,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,eAAgB,EAC5E,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,eAAgB,EAC5E,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,UAAW,EACvE,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,GAAW,UAAW,EAC7D,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,GAAW,mBAAoB,EACtE,EAAgB,eAChB,OAAO,eAAmB,IAAc,eAAiB,IAAA,GAAW,gBAAiB,EACrF,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,iBAAkB,EAChF,EAAgB,aAChB,OAAO,aAAiB,IAAc,aAAe,IAAA,GAAW,SAAU,EAC1E,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,EAAS,EACzC,CAAS,ICzGI,EA+B1B,IAAI,GAAkB,KAKlB,GAA0B,EAAK,OAAO,CACtC,OAAQ,CACJ,4BAA6B,SAAU,EAAO,CAC1C,IAAI,GAAA,EAAA,EAAA,QAAA,CAAS,EAAM,aAAa,EAChC,KAAK,QAAQ,sBAAuB,SAAS,EAAK,KAAK,SAAS,EAAG,EAAE,CAAC,CAC1E,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,QAAU,EAAS,OAC5B,EAEA,OAAQ,UAAY,CAEhB,IAAI,EAAU,KAAK,QAAQ,MAAM,CAAC,EAI9B,EAAS,EAAQ,IAAI,EAErB,GAAA,EAAA,EAAA,QAAA,CAAoBG,GACpB,EAAO,IAAI,aAAa,GAAK,EAAE,CAAC,CAAC,CAAC,KAAK,EAQ3C,OANA,KAAK,IAAI,KAAKC,GAA4B,CACtC,MAAO,EACP,QAAS,EACQ,iBACrB,CAAC,CAAC,EAEK,IACX,CACJ,CAAC,EAEG,GAAyB,EAAK,OAAO,CACrC,OAAQ,CACJ,iCAAkC,SAAU,EAAO,CAC/C,IAAM,EAAM,OAAO,EAAM,OAAO,KAAK,EACjC,KAAK,gBAAkB,GAAO,KAAK,eAAe,YAAY,GAAK,EAAM,IACzE,KAAK,SAAW,GAChB,KAAK,eAAe,QAAQ,CAAG,CAAC,CAAC,SAAW,CACxC,KAAK,SAAW,GAChB,KAAK,OAAO,CAChB,CAAC,GAEL,KAAK,OAAO,CAChB,EACA,yDAA0D,UAAY,CAClE,KAAK,SAAW,GAChB,KAAK,eAAe,QAAQ,OAAO,KAAK,EAAE,yBAAyB,CAAC,CAAC,IAAI,CAAC,EAAI,CAAC,CAAC,CAAC,SAAW,CACxF,KAAK,SAAW,GAChB,KAAK,OAAO,CAChB,CAAC,EACD,KAAK,OAAO,CAChB,EACA,6DAA8D,UAAY,CACtE,KAAK,SAAW,GAChB,KAAK,eAAe,QAAQ,OAAO,KAAK,EAAE,yBAAyB,CAAC,CAAC,IAAI,CAAC,EAAI,CAAC,CAAC,CAAC,SAAW,CACxF,KAAK,SAAW,GAChB,KAAK,OAAO,CAChB,CAAC,EACD,KAAK,OAAO,CAChB,CACJ,EACA,WAAY,SAAU,EAAU,CAC5B,KAAK,eAAiB,EAAS,eAC/B,KAAK,SAAW,EACpB,EACA,OAAQ,UAAY,CAOhB,OANA,KAAK,IAAI,KAAKC,GAA2B,CACrC,WAAY,KAAK,gBAAkB,KAAK,eAAe,YAAY,EACnE,YAAa,KAAK,gBAAkB,KAAK,eAAe,eAAe,EACvE,SAAU,KAAK,QACnB,CAAC,CAAC,EAEK,IACX,CACJ,CAAC,EAKGC,GAAkB,EAAK,OAAO,CAC9B,OAAQ,CACJ,6BAA8B,qBAC9B,wBAAyB,mBACzB,+BAAgC,eAChC,0BAA2B,qBAC3B,8BAA+B,iBAC/B,kCAAmC,iBACnC,+BAAgC,iBAChC,wBAAyB,mBACzB,8BAA+B,eAC/B,uBAAwB,aACxB,8BAA+B,aAC/B,6BAA8B,kBAC9B,yBAA0B,cAC1B,wBAAyB,sBACzB,wBAAyB,sBACzB,yBAA0B,uBAC1B,2BAA4B,sBAC5B,yBAA0B,mBAC1B,uBAAwB,SAAU,EAAG,CACjC,KAAK,eAAe,SAAS,EAAE,cAAc,OAAO,EAEhD,KAAK,cACL,KAAK,aAAa,SAAS,EAAE,cAAc,OAAO,CAE1D,CACJ,EAmBA,WAAY,SAAU,EAAU,CAC5B,KAAK,YAAc,EAAS,YAC5B,KAAK,OAAS,EAAS,OAEvB,KAAK,aAAeC,GAAE,IAAI,EAAU,aAAa,GAAI,EAAS,YAC9D,KAAK,WAAaA,GAAE,IAAI,EAAU,WAAW,GAAI,EAAS,UAE1D,KAAK,YAAc,EAAS,WAE5B,KAAK,YAAcA,GAAE,IAAI,EAAU,YAAY,GAAI,EAAS,WAC5D,KAAK,eAAiBA,GAAE,IAAI,EAAU,eAAe,GAAI,EAAS,cAClE,KAAK,WAAaA,GAAE,IAAI,EAAU,WAAW,GAAI,EAAS,UAC1D,KAAK,WAAaA,GAAE,IAAI,EAAU,WAAW,GAAI,EAAS,UAC1D,KAAK,cAAgBA,GAAE,IAAI,EAAU,cAAc,GAAI,EAAS,aAChE,KAAK,SAAWA,GAAE,IAAI,EAAU,SAAS,GAAI,EAAS,QACtD,KAAK,aAAeA,EAAE,IAAI,EAAU,aAAa,EAAI,EAAS,YAAc,GAC5E,KAAK,aAAe,EAAS,aAAe,SAAU,EAAM,CACxD,EAAO,SAAS,QAAU,EAAK,IAAI,KAAK,EAAG,CAAE,QAAS,EAAK,CAAC,CAChE,EACA,KAAK,yBAA2B,EAAS,wBACzC,KAAK,eAAiBA,EAAE,IAAI,EAAU,eAAe,EAAI,EAAS,cAAgB,GAClF,KAAK,WAAaA,EAAE,IAAI,EAAU,WAAW,EAAI,EAAS,UAAY,GACtE,KAAK,gBAAkB,EAAS,eAEhC,KAAK,aAAe,EAAS,aAC7B,KAAK,aAAe,EAAS,aAC7B,KAAK,WAAa,EAAS,WAC3B,KAAK,WAAa,EAAS,WAC3B,KAAK,YAAc,CAAC,KAAK,WAAW,EAGpC,KAAK,eAAiB,IAAI,GAAwB,CAC9C,QAAS,KAAK,YACd,WAAY,IAChB,CAAC,EACD,KAAK,eAAe,GAAG,sBAAuB,SAAU,EAAK,CACzD,KAAK,YAAc,KAAK,YAAY,MAAM,EAAG,EAAM,CAAC,EACpD,KAAK,gBAAgB,KAAK,YAAY,EAAI,EAC1C,KAAK,UAAU,CACnB,EAAG,IAAI,EAEP,KAAK,kBAAoB,IAAI,GAAkB,CAC3C,YAAa,KAAK,eAAe,EACjC,kBAAmB,KAAK,qBAAqB,EAC7C,kBAAmB,KAAK,qBAAqB,EAC7C,WAAY,KAAK,qBAAqB,EACtC,WAAY,IAChB,CAAC,EAED,KAAK,eAAiB,IAAI,GAAiB,CACvC,aAAc,KAAK,YACnB,WAAY,KAAK,YAAY,aAC7B,SAAU,KAAK,YAAY,IAAI,KAAK,EACpC,WAAY,KAAK,YACjB,WAAY,IAChB,CAAC,EACD,KAAK,eAAe,GAAG,kBAAmB,SAAU,EAAQ,CACxD,KAAK,QAAQ,CAAM,EAEf,KAAK,eACL,KAAK,aAAa,OAAS,EAEnC,EAAG,IAAI,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAC9B,GAAG,sBAAuB,KAAK,cAAe,IAAI,CAAC,CACnD,IAAI,WAAW,CAAC,CAAC,GAAG,YAAa,UAAY,CAC1C,KAAK,YAAc,KAAK,eAAe,WAAW,OAClD,KAAK,iBAAiB,CAC1B,EAAG,IAAI,EAEP,KAAK,YAAY,eAAiB,SAClC,KAAK,aAAa,KAAK,WAAW,GAElC,KAAK,UAAY,EACjB,KAAK,OAAO,GAEhB,EAAO,GAAG,cAAiB,CACvB,KAAK,YAAY,qBAAqB,CAC1C,EAAG,IAAI,CACX,EAOA,iBAAkB,UAAY,CAC1B,IAAI,EAAY,KAAK,EAAE,yBAAyB,CAAC,CAAC,SAAS,MAAM,EAC7D,KAAK,cAAgB,GAAK,KAAK,YAAc,GAC7C,EAAU,YAAY,MAAM,CAEpC,EAMA,0BAA2B,UAAY,CAC9B,KAAK,eACN,KAAK,aAAe,IAAI,GAAe,CACnC,WAAY,KAAK,YACjB,SAAU,KAAK,YAAY,GAC3B,OAAQ,KAAK,YAAY,IAAI,QAAQ,EACrC,YAAa,KAAK,YAAY,eAAe,EAC7C,WAAY,KAAK,YACjB,cAAe,KAAK,eACpB,UAAW,KAAK,WAChB,UAAW,KAAK,WAChB,aAAc,KAAK,yBACnB,cAAe,KAAK,eACpB,UAAW,KAAK,WAChB,WAAY,IAChB,CAAC,EACD,KAAK,SAAS,KAAK,aAAc,gBAAiB,KAAK,YAAY,EACnE,KAAK,SAAS,KAAK,aAAc,sBAAuB,KAAK,aAAa,EAE1E,KAAK,SAAS,KAAK,aAAc,gBAAmB,CAChD,KAAK,UAAY,KAAK,aAAa,WAAW,OAC9C,KAAK,iBAAiB,EAClB,KAAK,YAAc,KAAK,oBAAsB,KAAK,aAAa,YAAY,EAAI,GAC5E,KAAK,YAAY,eAAiB,cAClC,KAAK,mBAAmB,WAAW,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC,OAAO,EAErF,KAAK,EAAE,6BAA6B,CAAC,CAAC,SAAS,oBAAoB,EACnE,KAAK,EAAE,6BAA6B,CAAC,CAAC,SAAS,oBAAoB,EACnE,KAAK,EAAE,6BAA6B,CAAC,CAAC,IAAI,CAAE,IAAK,CAAE,CAAC,EACpD,KAAK,EAAE,6BAA6B,CAAC,CAAC,IAAI,CAAE,OAAQ,CAAE,CAAC,EACvD,KAAK,EAAE,6BAA6B,CAAC,CAAC,YAAY,QAAQ,GAG1D,KAAK,EAAE,6BAA6B,CAAC,CAAC,SAAS,QAAQ,CAE/D,CAAC,EAED,KAAK,SAAS,KAAK,aAAc,kBAAqB,CAC9C,KAAK,YAAc,CAAC,KAAK,qBACzB,KAAK,mBAAqB,IAAI,GAAuB,CACjD,WAAY,KACZ,eAAgB,KAAK,YACzB,CAAC,EAET,CAAC,GAGL,AACI,KAAK,iBAAiB,IAAI,GAAe,CACrC,KAAM,KAAK,YACX,WAAY,KACZ,YAAa,KAAK,YAAY,eAAe,CACjD,CAAC,CAET,EAEA,UAAW,UAAY,CACnB,GAAI,KAAK,SAAU,CACf,IAAI,EAAQ,KAAK,YAAY,EAAE,CAAC,aAAe,IAC3C,KAAK,YAAY,EAAE,CAAC,IAAI,KAAK,EAC7B,KAAK,YAAY,eAAiB,WAClC,GAAS,WAAa,KAAK,YAAY,IAAI,KAAK,GAEpD,EAAO,SAAS,CAAK,EACrB,EAAO,QAAQ,oBAAqB,CAAS,OAAM,CAAC,CACxD,CACJ,EAEA,aAAc,SAAU,EAAQ,CAC5B,EAAO,YAAY,CAAC,CAAC,KAAM,GAAS,CAChC,IAAM,EAAc,EAAK,IAAK,GAAM,IAAIC,GAAU,GAAoB,EAAE,IAAI,GAAG,EAAE,MAAM,CAAC,EACxF,KAAK,YAAY,QAAQ,GAAG,CAAW,EACvC,KAAK,OAAO,CAChB,CAAC,CACL,EAEA,OAAQ,UAAY,CAkEhB,MAjEA,MAAK,YAAc,KACnB,KAAK,UAAY,KAEjB,KAAK,IAAI,KAAKC,GAAwB,CAClC,KAAM,KAAK,YAAY,aACvB,MAAO,KAAK,YACZ,MAAO,KAAK,YAAY,eAAe,EACvC,WAAYC,GACZ,eAAgB,KAAK,gBACrB,YAAa,KAAK,aAClB,aAAc,KAAK,cACnB,WAAY,KAAK,YACjB,WAAYC,GACZ,WAAY,KAAK,WACrB,CAAC,CAAC,EAEE,KAAK,EAAE,6BAA6B,CAAC,CAAC,SAAW,GAEjD,KAAK,EAAE,0BAA0B,CAAC,CAAC,aAAa,EAAK,EAGzD,KAAK,eAAe,WAAW,KAAK,EAAE,gCAAgC,CAAC,CAAC,CAAC,OAAO,EAChF,KAAK,kBAAkB,eAAiB,KAAK,EAAE,2BAA2B,EAC1E,KAAK,kBAAkB,WAAW,KAAK,EAAE,yBAAyB,CAAC,CAAC,CAAC,OAAO,EAC5E,KAAK,eAAe,WAAW,KAAK,EAAE,0BAA0B,CAAC,CAAC,CAAC,OAAO,EACtE,KAAK,oBAAsB,KAAK,YAAY,eAAiB,cAC7D,KAAK,mBAAmB,WAAW,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC,OAAO,EAEjF,KAAK,YAAY,eAAiB,UAAY,KAAK,aACnD,KAAK,0BAA0B,EAC/B,KAAK,aAAa,WAAW,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,OAAO,EACtE,KAAK,eAAe,QAAQ,KAAK,WAAW,EAC5C,KAAK,eAAe,YAAc,KAAK,YAAY,eAAe,EAC9D,KAAK,eACL,KAAK,eAAe,WAAW,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,OAAO,GAIxE,KAAK,YAAY,eAAiB,cAAgB,KAAK,gBACvD,AACI,KAAK,iBAAiB,IAAI,GAAe,CACrC,KAAM,KAAK,YACX,WAAY,KACZ,YAAa,KAAK,YAAY,eAAe,CACjD,CAAC,EAEL,KAAK,eAAe,QAAQ,KAAK,WAAW,EAC5C,KAAK,eAAe,YAAc,KAAK,YAAY,eAAe,EAClE,KAAK,eAAe,WAAW,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,OAAO,GAGpE,KAAK,OACL,KAAK,aAAa,EACX,KAAK,aACZ,KAAK,WAAW,EACT,KAAK,aACZ,KAAK,mBAAmB,EACjB,KAAK,WACZ,KAAK,iBAAiB,EACf,KAAK,YACZ,KAAK,iBAAiB,EAG1B,KAAK,uBAAuB,EAErB,IACX,EAKA,QAAS,SAAU,EAAQ,CACvB,KAAK,YAAY,KAAK,CAAM,EAC5B,KAAK,gBAAgB,CAAM,CAC/B,EAKA,WAAY,UAAY,CACpB,KAAK,YAAY,IAAI,EACrB,KAAK,gBAAgB,KAAK,YAAY,KAAK,YAAY,OAAS,EAAE,CACtE,EAKA,aAAc,UAAY,CAClBJ,EAAE,WAAW,KAAK,eAAe,GACjC,KAAK,gBAAgB,KAAK,WAAW,CAE7C,EAKA,mBAAoB,UAAY,CAC5B,IAAI,GAAiB,CACjB,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,YAAa,KAAK,YAClB,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,UAAW,SAAU,EAAQ,CAC/B,KAAK,eAAe,aAAa,CAAM,EACnC,KAAK,YAAY,IAAI,UAAU,GAC/B,KAAK,YAAY,UAAU,UAAU,EAEzC,KAAK,cAAc,CACvB,EAAG,IAAI,CAAC,CAAC,OAAO,CACpB,EAKA,iBAAkB,UAAY,CAC1B,IAAI,GAAe,CACf,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,YAAa,KAAK,YAClB,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,UAAW,SAAU,EAAM,CAC7B,KAAK,aAAa,WAAW,CAAI,EAC7B,KAAK,YAAY,IAAI,QAAQ,GAC7B,KAAK,YAAY,UAAU,QAAQ,EAEvC,KAAK,cAAc,CACvB,EAAG,IAAI,CAAC,CAAC,OAAO,CACpB,EAKA,iBAAkB,UAAY,CACtB,KAAK,YAAY,eAAiB,SAClC,IAAI,GAAiB,CACjB,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,YAAa,KAAK,YAClB,OAAQ,KAAK,YACb,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,UAAW,UAAY,CACzB,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,uBACN,KAAM,UACN,QAAS,GACb,CAAC,EACD,KAAK,eAAe,OAAO,CAC/B,EAAG,IAAI,CAAC,CAAC,GAAG,iBAAkB,SAAU,EAAM,CAC1C,IAAI,EAAO,IAAI,GAAU,CACrB,IAAK,EAAK,MAAM,IAAI,QAAQ,CAChC,CAAC,EAED,EAAK,KAAK,YAAa,UAAY,CAC/B,KAAK,aAAa,WAAW,CAAI,EAC7B,KAAK,YAAY,IAAI,QAAQ,GAC7B,KAAK,YAAY,UAAU,QAAQ,EAEvC,KAAK,cAAc,CACvB,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,EAAG,IAAI,CAAC,CAAC,OAAO,EACT,KAAK,YAAY,eAAiB,cACzC,IAAI,GAAqB,CACrB,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,MAAO,KAAK,YACZ,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,UAAW,UAAY,CACzB,KAAK,eAAe,OAAO,EAC3B,KAAK,QAAQ,qBAAqB,CACtC,EAAG,IAAI,CAAC,CAAC,OAAO,CAExB,EAKA,mBAAoB,UAAY,CAC5B,IAAI,EAAO,KAAK,YAAY,aACxB,EAAS,CACT,KAAM,uCAAyC,EAAO,OAChD,KAAK,YAAY,OAAO,MAAM,EAAI,QACxC,YAAa,GACb,QAAS,SACT,oBAAuB,CACnB,KAAK,YAAY,GAAG,YAAa,UAAY,CACrC,IAAS,aACT,EAAO,SAAS,cAAe,CAAE,QAAS,EAAK,CAAC,EACzC,IAAS,WAChB,KAAK,YAAY,IAAI,EACrB,KAAK,gBAAgB,KAAK,YAAY,MAAM,EAAE,CAAC,CAAC,EAAE,EAE1D,EAAG,IAAI,CAAC,CAAC,QAAQ,CACb,WAAY,GACZ,SAAU,EACd,CAAC,CACL,CACJ,EACI,IAAS,eACT,KAAK,YAAY,IAAI,UAAU,IAAM,GAAK,KAAK,YAAY,IAAI,MAAM,IAAM,KAC3E,EAASA,EAAE,OAAO,CACd,KAAM,KAAK,YAAY,OAAO,MAAM,EACpC,eAAgB,MAAQ,KAAK,YAAY,OAAO,MAAM,EAAI,oBACxB,KAAK,YAAY,OAAO,UAAU,EACpD,6BACAK,GAAW,SAAS,KAAK,YAAY,IAAI,MAAM,EAAG,EAAE,CAAC,EAAI,OACzE,gBAAiB,EACrB,EAAG,CAAM,GAEb,GAAQ,CAAM,CAClB,EAEA,eAAgB,UAAY,CACxB,IAAI,EAAO,CACP,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,MAAO,KAAK,YACZ,WAAY,IAChB,EAEI,KAAK,YAAY,eAAiB,aAClC,IAAI,GAAqB,CAAI,CAAC,CAAC,OAAO,EAC/B,KAAK,YAAY,eAAiB,UACzC,IAAI,GAAiB,CAAI,CAAC,CAAC,OAAO,CAE1C,EAEA,uBAAwB,UAAY,CAChC,KAAK,EAAE,0BAA0B,CAAC,CAAC,SAAS,MAAM,EAElD,IAAI,MAAmB,CACnB,IAAM,EAAc,GAAY,KAAK,YAAY,IAAI,UAAU,CAAC,EAChE,KAAK,EAAE,0BAA0B,CAAC,CAAC,YAAY,MAAM,EACrD,KAAK,EAAE,oBAAoB,CAAC,CAAC,KAAK,CAAW,EAC7C,IAAM,EAAgB,IAAgB,EAAI,GAAG,EAAY,eAAiB,GAAG,EAAY,gBAEzF,GADA,KAAK,EAAE,8BAA8B,CAAC,CAAC,KAAK,QAAS,CAAa,EAC9D,KAAK,YAAY,IAAI,QAAQ,EAAG,CAChC,IAAM,EAAY,GAAY,KAAK,YAAY,IAAI,QAAQ,CAAC,EAC5D,KAAK,EAAE,eAAe,CAAC,CAAC,KAAK,CAAS,EACtC,IAAM,EAAc,IAAc,EAAI,GAAG,EAAU,aAAe,GAAG,EAAU,cAC/E,KAAK,EAAE,yBAAyB,CAAC,CAAC,KAAK,QAAS,CAAW,CAC/D,CACJ,EAgBA,OAdI,KAAK,YAAY,IAAI,UAAU,EAC/B,EAAW,GAEX,KAAK,YAAY,IAAI,WAAY,CAAC,EAClC,KAAK,YAAY,KAAK,oBAAqB,UAAY,CACnD,EAAW,CACf,EAAG,IAAI,CAAC,CAAC,MAAM,CAAE,UAAW,SAAU,CAAC,GAG3C,KAAK,YAAY,IAAI,gBAAiB,EAAY,IAAI,CAAC,CAClD,GAAG,gBAAiB,EAAY,IAAI,CAAC,CACrC,IAAI,kBAAmB,EAAY,IAAI,CAAC,CACxC,GAAG,kBAAmB,EAAY,IAAI,EAEpC,IACX,EAOA,gBAAiB,SAAU,EAAQ,EAAM,CACrC,IAAe,CAAC,EAChB,KAAK,YAAc,EAEnB,KAAK,eAAe,QAAU,KAAK,YAEnC,KAAK,eAAe,WAAW,CAC3B,WAAY,EAAO,aACnB,SAAU,EAAO,IAAI,KAAK,EAC1B,WAAY,KAAK,YACjB,aAAc,KAAK,WACvB,CAAC,EAED,KAAK,cAAc,EAEf,EAAO,eAAiB,WACpB,KAAK,cACL,KAAK,aAAa,WAAW,CACzB,SAAU,EAAO,IAAI,KAAK,EAC1B,WAAY,KAAK,YACjB,cAAe,KAAK,eACpB,UAAW,KAAK,WAChB,WAAY,KAAK,YACjB,UAAW,KAAK,WAChB,UAAW,KAAK,WAChB,OAAQ,KAAK,YAAY,IAAI,QAAQ,EACrC,YAAa,KAAK,YAAY,eAAe,CACjD,CAAC,EAEL,KAAK,0BAA0B,GAGnC,KAAK,OAAO,GACR,CAACL,EAAE,IAAI,EAAM,UAAU,GAAK,EAAK,WACjC,KAAK,UAAU,EAEnB,KAAK,QAAQ,mBAAmB,CACpC,EAQA,mBAAoB,SAAU,EAAW,CAMrC,IAAK,IAHD,EAAQ,CAAC,SAAU,MAAM,EAEzB,EAAO,CAAC,EACH,EAAI,EAAG,EAAI,EAAM,OAAQ,GAAK,EAAG,CACtC,IAAI,EAAO,EAAM,GACb,EAAU,IAAS,EAAU,EAAK,CAAC,QACnC,EAAK,KAAK,EAAU,EAAK,CAAC,OAAS,IAAM,GAC9B,EAAU,EAAK,CAAC,SAAW,EAAU,GAAN,IAAS,CAE3D,CACA,OAAQ,EAAK,OAAb,CACI,IAAK,GACD,MAAO,UACX,IAAK,GACD,OAAO,EAAK,GAChB,IAAK,GACD,OAAO,EAAK,GAAK,QAAU,EAAK,EAMxC,CACJ,EAKA,oBAAqB,UAAY,CAC7B,IAAI,EAAU,KAAK,eAAe,QAC9B,EACA,KAAK,cAAgB,KAAK,aAAa,QAAQ,SAC/C,EAAQ,KAAK,aAAa,SAkC9B,GAAQ,CA7BJ,KAAM,0DAHC,KAAK,mBAAmB,CAAE,OAAQ,EAAS,KAAM,CAAM,CAIrD,EAAI,KAEb,QAAS,SACT,oBAAuB,CACnB,IAAI,EAAY,KAAK,yBAAyB,EAC1C,EAAe,KAAK,wBAAwB,EAIhD,GAAY,CACR,IAAK,WACL,OAAQ,OACR,KAAM,CAAa,YAAW,SAAU,EAAK,EAC7C,QAAS,CAAE,yBAA0B,QAAS,CAClD,CAAC,CAAC,CAAC,SAAW,CACN,GAAS,EAAM,QAAU,KAAK,YAAY,IAAI,QAAQ,GACtD,KAAK,YAAY,UAAU,SAAU,CAAC,EAAM,MAAM,EAElD,EAAQ,QAAU,KAAK,YAAY,IAAI,UAAU,GACjD,KAAK,YAAY,UAAU,WAAY,CAAC,EAAQ,MAAM,EAEtD,KAAK,YAAY,IAAI,MAAM,GAAK,EAAa,OAC7C,KAAK,YAAY,UAAU,OAAQ,CAAC,EAAa,KAAK,EAE1D,KAAK,gBAAgB,KAAK,YAAa,CAAE,SAAU,EAAM,CAAC,CAC9D,CAAC,CACL,CAES,CAAC,CAClB,EAKA,aAAc,UAAY,CAGtB,IAAI,GAAa,CACb,IAAA,EAAA,EAAA,QAAA,CAHc,qBAGF,EACZ,OAAQ,KAAK,YACb,WAAY,KAAK,WACjB,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,mBAAoB,SAAU,EAAM,CACtC,GAAY,QAAQ,EACpB,KAAK,OAAS,GACV,KAAK,YAAY,IAAI,QAAQ,GAC7B,KAAK,YAAY,UAAU,SAAU,EAAK,MAAM,MAAM,EAEtD,KAAK,YAAY,IAAI,MAAM,GAC3B,KAAK,YAAY,UAAU,OAAQ,EAAK,SAAS,EAErD,KAAK,gBAAgB,KAAK,YAAa,CAAE,SAAU,EAAM,CAAC,CAC9D,EAAG,IAAI,CAAC,CAAC,OAAO,CACpB,EAMA,cAAe,UAAY,CACvB,IAAI,EAAU,KAAK,eAAe,QAC9B,EAAQ,CAAC,EAIT,EAAiBG,GAAW,MAChC,EAAE,MAAM,EAAS,SAAU,EAAK,CAC5B,IAAI,EAAS,KAAK,eAAe,WAAW,IAAI,CAAG,EAEnD,MADA,GAAiB,KAAK,IAAI,EAAgB,EAAO,eAAe,CAAC,EAC1D,EAAiBA,GAAW,IACvC,EAAG,IAAI,EAEP,IAAI,EAAeA,GAAW,MAC1B,KAAK,eACL,EAAQ,KAAK,aAAa,QACtB,EAAM,SACN,EAAe,KAAK,IAAI,EAAc,KAAK,YAAY,eAAe,CAAC,IAK/E,IAAM,EAAa,EAAQ,OAAS,EAAM,OAAS,EACnD,KAAK,EAAE,0BAA0B,CAAC,CAAC,aAAa,CAAC,CAAU,EAE3D,KAAK,kBAAkB,OAAO,CACV,iBACF,eACd,YAAa,EAAQ,OACrB,UAAW,EAAM,OACjB,YAAa,KAAK,eAAe,EACjC,kBAAmB,KAAK,qBAAqB,EAC7C,kBAAmB,KAAK,qBAAqB,EAC7C,WAAY,KAAK,qBAAqB,CAC1C,CAAC,CACL,EAEA,eAAgB,UAAY,CACxB,IAAI,EAAc,EAMlB,OALI,IAAmB,GAAgB,WACnC,EAAE,KAAK,GAAgB,UAAW,SAAU,EAAM,CAC9C,GAAe,EAAK,MACxB,CAAC,EAEE,CACX,EAEA,qBAAsB,UAAY,CAkB9B,MAHA,EAbI,CAAC,IAKD,KAAK,YAAY,eAAiB,UAC9B,GAAgB,UAAU,MACtB,GAAgB,UAAU,KAAK,QAMvC,KAAK,YAAY,eAAe,EAAIA,GAAW,MAIvD,EAEA,qBAAsB,UAAY,CAc9B,MAHA,EATI,CAAC,KAAK,qBAAqB,GAM3B,GAAgB,eAAiBA,GAAW,OAG5C,GAAgB,aAAeA,GAAW,MAIlD,EAEA,qBAAsB,UAAY,CAI9B,MAHI,CAAC,IAAmB,CAAC,GAAgB,UAC9B,GAEJ,KAAK,mBAAmB,GAAgB,SAAS,CAC5D,EAKA,yBAA0B,SAAU,EAAU,CAC1C,IAAI,EAAY,CAAE,OAAQ,CAAC,EAAG,KAAM,CAAC,CAAE,EACnC,EAAU,KAAK,eAAe,QAKlC,GAJA,EAAE,KAAK,EAAS,SAAU,EAAK,CAC3B,IAAI,EAAS,KAAK,eAAe,WAAW,IAAI,CAAG,EACnD,EAAU,OAAO,KAAK,EAAO,EAAE,CACnC,EAAG,IAAI,EACH,KAAK,aAAc,CACnB,IAAI,EAAQ,KAAK,aAAa,QAC9B,EAAE,KAAK,EAAO,SAAU,EAAK,CACzB,IAAI,EAAO,KAAK,aAAa,WAAW,IAAI,CAAG,EAC/C,EAAU,KAAK,KAAK,EAAK,EAAE,CAC/B,EAAG,IAAI,CACX,CASA,OARA,EAAE,KAAK,EAAW,SAAU,EAAM,EAAK,CAC9B,EAAK,QACN,OAAO,EAAU,EAEzB,CAAC,EACG,EACO,EAEJ,KAAK,UAAU,CAAS,CACnC,EAKA,wBAAyB,UAAY,CACjC,IAAI,EAAY,CAAE,MAAO,EAAG,QAAS,CAAE,EACnC,EAAU,KAAK,eAAe,QAKlC,GAJA,EAAE,KAAK,EAAS,SAAU,EAAK,CAC3B,IAAI,EAAS,KAAK,eAAe,WAAW,IAAI,CAAG,EACnD,EAAU,SAAY,EAAO,IAAI,MAAM,GAAK,CAChD,EAAG,IAAI,EACH,KAAK,aAAc,CACnB,IAAI,EAAQ,KAAK,aAAa,QAC9B,EAAE,KAAK,EAAO,SAAU,EAAK,CACzB,IAAI,EAAO,KAAK,aAAa,WAAW,IAAI,CAAG,EAC/C,EAAU,OAAU,EAAK,IAAI,MAAM,GAAK,CAC5C,EAAG,IAAI,CACX,CACA,OAAO,CACX,EAEA,gBAAiB,UAAY,CACzB,IAAI,EAAM,GAAW,EAAI,qBAErB,EAAO,CAAE,UADG,KAAK,yBACW,CAAE,EAElC,KAAK,gBAAgB,OAAQ,EAAK,CAAI,CAC1C,EAEA,YAAa,UAAY,CACrB,AACI,KAAkB,CACd,UAAW,CAAC,EACZ,aAAcA,GAAW,MACzB,eAAgBA,GAAW,KAC/B,EAIJ,IAAI,EAAU,KAAK,eAAe,QAClC,EAAE,MAAM,EAAS,SAAU,EAAK,CAC5B,IAAI,EAAS,KAAK,eAAe,WAAW,IAAI,CAAG,EAInD,MAHA,IAAgB,eAAiB,KAAK,IAClC,GAAgB,eAChB,EAAO,eAAe,CAAC,EACnB,GAAgB,eAChBA,GAAW,IACvB,EAAG,IAAI,EACH,KAAK,cACO,KAAK,aAAa,QACpB,SACN,GAAgB,aAAe,KAAK,IAChC,GAAgB,aAChB,KAAK,YAAY,eAAe,CAAC,GAG7C,IAAI,EAAY,KAAK,yBAAyB,EAAI,EAC9C,EAAW,KAAK,mBAAmB,CAAS,EAE5C,EAAW,GAAgB,UAC/B,EAAE,KAAK,EAAU,SAAU,EAAM,EAAU,CAClC,EAAU,GAGX,EAAU,GAAYH,EAAE,MAAM,EAAM,EAAU,EAAS,EAFvD,EAAU,GAAY,CAI9B,CAAC,EACD,GAAgB,UAAY,EAC5B,KAAK,cAAc,EACnB,IAAI,EAAgB,KAAK,qBAAqB,EAC1C,EAAO,EAAgB,WACvB,IAAa,IACb,EAAO,EAAW,oCAAsC,GAE5D,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,EACN,KAAM,OACN,QAAS,GACb,CAAC,CACL,EAEA,iBAAkB,SAAU,EAAU,EAAQ,CACtC,KAAK,YAAY,IAAI,QAAQ,GAC7B,KAAK,YAAY,UAAU,SAAU,CAAM,EAE3C,KAAK,YAAY,IAAI,UAAU,GAC/B,KAAK,YAAY,UAAU,WAAY,CAAQ,CAEvD,EAEA,oBAAqB,UAAY,CACxB,QAAK,qBAAqB,EAG/B,KAAI,EAAY,KAAK,UAAU,GAAgB,SAAS,EACpD,GAAY,GAAgB,UAAU,QAAU,CAAC,EAAA,CAAG,OACpD,GAAU,GAAgB,UAAU,MAAQ,CAAC,EAAA,CAAG,OACpD,GAAY,CACR,IAAK,gBACL,OAAQ,MACR,KAAM,CACS,YACX,WAAY,KAAK,YAAY,aAC7B,SAAU,KAAK,YAAY,IAAI,KAAK,EACpC,SAAU,EACd,CACJ,CAAC,CAAC,CAAC,SAAW,CACV,KAAK,iBAAiB,EAAU,CAAM,EACtC,KAAK,gBAAgB,KAAK,YAAa,CAAE,SAAU,EAAM,CAAC,CAC9D,CAAC,EACD,KAAK,qBAAqB,CAhB8B,CAiB5D,EAEA,oBAAqB,UAAY,CACxB,QAAK,qBAAqB,EAG/B,KAAI,EAAY,KAAK,UAAU,GAAgB,SAAS,EACpD,GAAY,GAAgB,UAAU,QAAU,CAAC,EAAA,CAAG,OACpD,GAAU,GAAgB,UAAU,MAAQ,CAAC,EAAA,CAAG,OACpD,GAAY,CACR,IAAK,gBACL,OAAQ,OACR,KAAM,CACS,YACX,WAAY,KAAK,YAAY,aAC7B,SAAU,KAAK,YAAY,IAAI,KAAK,EACpC,SAAU,EACd,CACJ,CAAC,CAAC,CAAC,SAAW,CACV,KAAK,iBAAiB,EAAU,CAAM,EACtC,KAAK,gBAAgB,KAAK,YAAa,CAAE,SAAU,EAAM,CAAC,CAC9D,CAAC,EACD,KAAK,qBAAqB,CAhB8B,CAiB5D,EAEA,qBAAsB,SAAU,EAAO,CACnC,KAAK,YAAY,qBAAqB,EACtC,KAAK,cAAc,EACf,GACA,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,2BACN,KAAM,OACN,QAAS,GACb,CAAC,CAET,EAEA,gBAAiB,SAAU,EAAQ,EAAK,EAAM,CAC1C,IAAI,GAAA,EAAA,EAAA,QAAA,CAAS,SAAS,CAAC,CAAC,KAAK,CAAE,OAAQ,EAAa,QAAO,CAAC,EAC5D,EAAE,KAAK,EAAM,SAAU,EAAO,EAAK,CAC/B,EAAK,QAAA,EAAA,EAAA,QAAA,CAAS,UAAU,CAAC,CAAC,KAAK,CAAE,KAAM,OAAQ,KAAM,EAAY,OAAM,CAAC,CAAC,CAC7E,CAAC,GAED,EAAA,EAAA,QAAA,CAAE,CAAI,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,OAAO,CACtD,EAEA,WAAY,UAAY,CACpB,IAAI,GAAa,CACb,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,UAAW,KAAK,YAAY,aAC5B,MAAO,KAAK,YACZ,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,oBAAqB,SAAU,EAAQ,CACrC,EAAO,SAEP,KAAK,kBAAkB,CAE/B,EAAG,IAAI,CACX,EAKA,kBAAmB,UAAY,CAC3B,KAAK,eAAe,WAAW,MAAM,KAAM,EAAI,CACnD,EAMA,WAAY,SAAU,EAAM,CACxB,KAAK,aAAa,WAAW,CAAI,CACrC,EAKA,gBAAiB,UAAY,CACzB,OAAO,KAAK,aAAa,gBAAgB,CAC7C,EAOA,iBAAkB,SAAU,EAAG,CAC3B,IAAI,GAAA,EAAA,EAAA,QAAA,CAAa,EAAE,aAAa,EAEhC,GAAI,KAAK,eACD,EAAE,SAAU,CACZ,IAAI,EAAa,KAAK,IAAI,KAAK,WAAW,EACtC,EAAO,EAAW,MAAM,KAAK,aAAa,EAC1C,EAAK,EAAW,MAAM,CAAQ,EAElC,EAAW,MAAM,KAAK,IAAI,EAAM,CAAE,EAAG,KAAK,IAAI,EAAM,CAAE,EAAI,CAAC,CAAC,CACvD,KAAK,UAAW,EAAS,KAAK,SAAS,CAAC,EAE7C,KAAK,eAAe,iBAAiB,EAEjC,KAAK,cACL,KAAK,aAAa,iBAAiB,EAGvC,KAAK,cAAc,CACvB,CAEJ,KAAK,cAAgB,CACzB,CACJ,EAAG,CAGC,qBAAsB,SAAU,EAAK,CACjC,GAAkB,GAAO,IAC7B,EACA,mBAAoB,UAAY,CAC5B,OAAO,EACX,CACJ,CAAC,ECtkCD,SAASM,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAkGhC,OAhGD,SAAU,EAAS,EAAQ,EAAQ,EAAM,EAAU,CAClD,IAAuB,CAAC,GAAI,EAAE,EACpC,EAAW,EAAW,WAAkB,6CAAoDH,GAAS,WAAY,GAAM,GAAM,EAAK,GAAK,IAClI,EAAS,KACd,EAAW,EAAW,WAAkB,YAAcA,GAAS,WAAY,GAAM,GAAM,EAAK,EAAEA,GAAS,WAAY,GAAM,GAAM,EAAK,EAAEA,GAAS,SAAU,GAAM,GAAM,EAAK,GAAK,+BAG7K,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAY,EAAM,GAC9B,GAAI,IAAc,QAAU,EAC5B,EAAW,EAAW,WAAkBA,GAAS,QAAS,EAAK,GAAI,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAS,KAAO,EAAK,GAAI,GAAM,EAAK,GAAK,sBAG9I,GAAI,KAAa,EAAQ,CACzB,IAAI,EAAQ,EAAO,GACnB,EAAW,EAAW,YAAoBA,GAAS,QAAS,EAAW,GAAM,EAAK,EAAK,KAErF,UAAU,CACV,IAAI,EAAQ,EAAM,OAClB,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAQ,EAAM,IACtB,CAAC,GAAQ,EAAM,KAAO,EAAK,MAC/B,EAAW,EAAW,WAAkBA,GAAS,QAAS,EAAM,GAAI,GAAM,EAAK,EAAEA,GAAS,aAAc,EAAW,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAM,KAAO,EAAS,GAAI,GAAM,EAAK,GAAK,IAAYC,GAAiC,EAAO,CAAK,GAAK,EAAe,EAAK,YAE3Q,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAQ,EAAM,IACpB,CAAC,GAAQ,EAAM,KAAO,EAAK,MAC/B,EAAW,EAAW,WAAkBD,GAAS,QAAS,EAAM,GAAI,GAAM,EAAK,EAAEA,GAAS,aAAc,EAAW,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAM,KAAO,EAAS,GAAI,GAAM,EAAK,GAAK,IAAYC,GAAiC,EAAO,CAAK,GAAK,EAAe,EAAK,YAE7Q,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEZ,GAAsB,aACtB,CACM,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAY,EAAM,GAC5B,GAAI,IAAc,QAAU,EAC5B,EAAW,EAAW,WAAkBD,GAAS,QAAS,EAAK,GAAI,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAS,KAAO,EAAK,GAAI,GAAM,EAAK,GAAK,sBAG9I,GAAI,KAAa,EAAQ,CACzB,IAAI,EAAQ,EAAO,GACnB,EAAW,EAAW,YAAoBA,GAAS,QAAS,EAAW,GAAM,EAAK,EAAK,KAErF,UAAU,CACV,IAAI,EAAQ,EAAM,OAClB,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAQ,EAAM,IACtB,CAAC,GAAQ,EAAM,KAAO,EAAK,MAC/B,EAAW,EAAW,WAAkBA,GAAS,QAAS,EAAM,GAAI,GAAM,EAAK,EAAEA,GAAS,aAAc,EAAW,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAM,KAAO,EAAS,GAAI,GAAM,EAAK,GAAK,IAAYC,GAAiC,EAAO,CAAK,GAAK,EAAe,EAAK,YAE3Q,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAQ,EAAM,IACpB,CAAC,GAAQ,EAAM,KAAO,EAAK,MAC/B,EAAW,EAAW,WAAkBD,GAAS,QAAS,EAAM,GAAI,GAAM,EAAK,EAAEA,GAAS,aAAc,EAAW,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAM,KAAO,EAAS,GAAI,GAAM,EAAK,GAAK,IAAYC,GAAiC,EAAO,CAAK,GAAK,EAAe,EAAK,YAE7Q,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEZ,GAAsB,aACtB,CACI,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEZ,GAAsB,WAClB,EAAA,CAAE,KAAK,KAAM,YAAa,EACtB,EAAgB,QAChB,OAAO,QAAY,IAAc,QAAU,IAAA,GAAW,WAAY,EAClE,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,GAAW,WAAY,EAChE,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,GAAW,SAAU,EAC9D,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,GAAW,aAAc,EAC9D,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,EAAS,EACjD,CAAS,ICrGI,EAuB1B,IAAI,GAAqB,EAAK,OAAO,CACjC,OAAQ,CACJ,0BAA2B,aAC/B,EA+BA,WAAY,SAAU,EAAU,CAC5B,IAAuB,CAAC,EAExB,KAAK,UAAY,EAAS,WAAa,GAGvC,KAAK,OAAS,CACV,YAAa,IAAI,GACjB,MAAO,IAAI,EACf,EAEA,KAAK,OAAO,YAAY,UAAY,EAAS,UAC7C,KAAK,OAAO,MAAM,UAAY,EAAS,UACvC,KAAK,OAAO,MAAM,UAAY,QAG9B,EAAE,OAAO,KAAK,OAAQ,EAAS,MAAM,EAGrC,EAAE,KAAK,KAAK,OAAS,GAAU,CAC3B,KAAK,SAAS,EAAO,gBAAmB,CACpC,KAAK,aAAa,CAAK,CAC3B,CAAC,CACL,CAAC,EAKD,KAAK,KAAO,EAAS,KAGrB,KAAK,SAASG,EAAQ,UAAW,KAAK,KAAK,EAE3C,KAAK,SAAW,EAAS,SACzB,KAAK,iBAAmB,EAAS,iBACjC,KAAK,QAAU,EAAS,SAAW,CAAC,OAAQ,cAAe,OAAO,EAElE,KAAK,MAAM,CACf,EAEA,OAAQ,UAAY,CAgBhB,MAfA,MAAK,MAAQ,KAAK,MAAQC,GAAe,EAErC,KAAK,kBACL,KAAK,oBAAoB,KAAK,gBAAgB,EAElD,KAAK,IAAI,KACLC,GAA2B,CACvB,KAAM,KAAK,MACX,OAAQ,KAAK,OACb,QAAS,KAAK,QACd,SAAU,KAAK,SACf,OAAQ,KAAK,WACjB,CAAC,CACL,EAEO,IACX,EAEA,oBAAqB,SAAU,EAAc,CAErCC,EAAE,SAAS,CAAY,IAClB,EAAa,YAAc,CAAC,EAAA,CAAG,eAAiB,IAAA,KACjD,EAAe,EAAa,WAAW,cAI3CA,EAAE,SAAS,CAAY,GACvB,EAAE,KAAK,KAAK,OAAS,GAAU,CACvB,EAAM,IAAI,CAAY,IAAM,IAAA,KAC5B,KAAK,SAAW,EAAM,IAAI,CAAY,EAE9C,CAAC,CAET,EAMA,YAAa,UAAY,CACrB,IAAI,EAAM,KAAK,EAAE,WAAW,EACxB,EAAK,EAAI,IAAI,EACb,EAAQ,EAAI,KAAK,OAAO,GAAK,KACjC,KAAK,SAAW,KACZA,EAAE,IAAI,KAAK,OAAQ,CAAK,EACxB,KAAK,SAAW,KAAK,OAAO,EAAM,CAAC,IAAI,CAAE,EAClC,KAAK,OAAS,KAAK,MAAM,KAAO,IACvC,KAAK,SAAW,KAAK,OAEzB,KAAK,QAAQ,aAAc,CACvB,KAAM,KAAK,SACJ,OACX,CAAC,CACL,EAKA,aAAc,SAAU,EAAY,CAChC,KAAK,QAAQ,UAAW,CACR,YAChB,CAAC,EACD,KAAK,OAAO,CAChB,EAKA,YAAa,SAAU,EAAO,CAC1B,IAAI,EAAO,EAAM,GACjB,OAAQ,EAAM,IAAI,YAAY,EAA9B,CACI,IAAK,OACD,EAAO,EAAM,IAAI,OAAO,EACxB,MACJ,IAAK,SACL,IAAK,aACD,EAAO,EAAM,IAAI,MAAM,EACvB,KACR,CACA,OAAO,CACX,EAKA,MAAO,UAAY,CACf,IAAI,EAAQ,KAAK,MACjB,EAAE,KAAK,KAAK,OAAQ,SAAU,EAAY,CACtC,EAAW,MAAM,KAAM,CAAK,CAChC,CAAC,CACL,CACJ,CAAC,EC7LD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EA2BhC,OAzBD,SAAU,EAAyB,EAAM,EAAO,EAAS,EAAY,EAAQ,EAAO,CACnF,EAAW,EAAW,sMAA0RF,GAAiC,GAAS,EAAe,EAAK,kMAChX,IACJ,EAAW,EAAW,8FAA2HA,GAAiC,EAAM,OAAS,EAAe,EAAK,kBAAwC,yDAAkED,GAAS,cAAe,EAAM,YAAa,GAAM,EAAK,EAAEA,GAAS,QAAS,EAAM,QAAS,GAAM,EAAK,GAAK,YAExa,EAAW,EAAW,kDAAiEC,GAAiC,GAAQ,EAAe,EAAK,SAChJ,IACJ,EAAW,EAAW,gIAA6JA,GAAiC,EAAa,OAAS,QAA2B,EAAK,kBAAwC,0DAAmED,GAAS,WAAY,GAAM,GAAM,EAAK,EAAEA,GAAS,QAAS,EAAyB,GAAM,EAAK,GAAK,YAExd,EAAW,EAAW,8PAA6XC,GAAiC,GAAU,EAAe,EAAK,6BAC9c,EAAA,CAAE,KAAK,KAAM,4BAA6B,EACtC,EAAgB,wBAChB,OAAO,wBAA4B,IAAc,wBAA0B,IAAA,GAAW,SAAU,EAChG,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,GAAW,UAAW,EAC3D,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,GAAW,YAAa,EAC/D,EAAgB,QAChB,OAAO,QAAY,IAAc,QAAU,IAAA,GAAW,eAAgB,EACtE,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,WAAY,EACxE,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,GAAW,UAAW,EAC/D,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,EAAS,EAC3C,CAAS,IC7BI,EAmB1B,IAAI,GAAgB,EAAK,OAAO,CAC5B,OAAQ,CACJ,yBAA0B,UAAY,CAClC,KAAK,UAAU,CACnB,CACJ,EAqCA,WAAY,SAAU,EAAU,CAE5B,IAAuB,CAAC,EACxB,KAAK,UAAY,EAAS,WAAa,iBACvC,KAAK,SAAW,EAAS,UAAYG,EAAE,SAASC,EAAAA,QAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAChF,KAAK,SAAW,EAAS,SACzB,KAAK,UAAY,EAAS,UAC1B,KAAK,YAAcD,EAAE,YAAY,EAAS,WAAW,EAAI,GAAO,CAAC,CAAC,EAAS,YAC3E,KAAK,WAAa,EAAS,YAAc,OACzC,KAAK,KAAO,EAAS,KACrB,KAAK,wBAA0B,EAAS,wBACxC,KAAK,MAAQ,EAAS,MACtB,KAAK,WAAa,CAAC,CAAC,EAAS,WAC7B,KAAK,aAAe,CAAC,CAAC,EAAS,aAC/B,KAAK,cAAgB,CAAC,CAAC,EAAS,cAChC,KAAK,UAAY,CAAC,CAAC,EAAS,UAC5B,KAAK,UAAY,KAGb,KAAK,0BACL,AACI,EAAS,uBAAuB,CAAC,EAEhC,EAAS,qBAAqB,mBAC/B,EAAS,qBAAqB,iBAAmB,KAAK,0BAI9D,KAAK,mBAAqB,IAAI,GAAmBA,EAAE,OAAO,CACtD,WAAY,IAChB,EAAG,EAAS,oBAAoB,CAAC,EACjC,KAAK,SAAS,KAAK,mBAAoB,aAAc,SAAU,EAAK,CAChE,KAAK,KAAO,EAAI,KAChB,KAAK,qBAAqB,CAC9B,CAAC,EACG,KAAK,yBAA2B,CAAC,KAAK,MACtC,KAAK,8BAA8B,CAE3C,EAEA,OAAQ,UAAY,CAChB,IAAM,EAAuB,KAAK,yBAA2B,KAAK,wBAAwB,IAAI,MAAM,EAapG,OAZA,KAAK,IAAI,KACLE,GAAsB,CAClB,MAAO,KAAK,UACZ,KAAM,KAAK,SACX,QAAS,KAAK,YACd,OAAQ,KAAK,WACb,MAAO,KAAK,MACZ,WAAY,KAAK,WACjB,wBAAyB,CAC7B,CAAC,CACL,CAAC,CAAC,YAAY,IAAI,EAClB,KAAK,qBAAqB,EACnB,IACX,EAKA,cAAe,UAAY,CACvB,OAAO,KAAK,SAChB,EAEA,qBAAsB,UAAY,CAC9B,KAAK,mBAAmB,WAAW,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC,OAAO,EACjF,KAAK,qBAAqB,CAC9B,EAEA,qBAAsB,UAAY,CAC1B,KAAK,iBACL,KAAK,cAAc,KAAK,cAAc,EACtC,KAAK,eAAe,IAAI,EACxB,KAAK,EAAE,+BAA+B,CAAC,CAAC,MAAM,GAE7C,KAAK,OAGV,KAAK,EAAE,kBAAkB,CAAC,CAAC,YAAY,QAAQ,EAC/C,KAAK,eAAiB,IAAIC,GAAgB,CACtC,GAAI,KAAK,EAAE,+BAA+B,EAC1C,WAAY,KACZ,YAAa,KAAK,KAClB,WAAY,GACZ,QAAS,GACT,YAAa,GACb,UAAW,KAAK,UAChB,YAAaH,EAAE,KAAK,KAAK,YAAa,IAAI,EAC1C,wBAAyB,KAAK,wBAC9B,cAAe,KAAK,cACpB,UAAW,KAAK,UAChB,aAAc,KAAK,YACvB,CAAC,EACD,KAAK,SAAS,KAAK,eAAgB,oBAAqB,KAAK,YAAY,EACzE,KAAK,aAAa,EACtB,EAEA,gBAAiB,SAAU,EAAO,CAC9B,KAAK,UAAY,EACjB,KAAK,EAAE,8BAA8B,CAAC,CAAC,SAAS,QAAQ,EACxD,KAAK,EAAE,mBAAmB,CAAC,CAAC,YAAY,WAAW,EACnD,KAAK,EAAE,kBAAkB,CAAC,CAAC,YAAY,WAAW,EAClD,KAAK,EAAE,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAC9B,KAAK,YACL,KAAK,EAAE,mBAAmB,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,EACtD,KAAK,eAAiB,KAAK,WAC3B,KAAK,eAAe,WAAW,KAAK,SAAS,EAE7C,KAAK,eAAe,aAAa,KAAK,SAAS,EAG3D,EAEA,YAAa,SAAU,EAAM,CACpB,KAAK,YAGV,KAAK,gBAAgB,CAAI,CAC7B,EAEA,aAAc,UAAY,CAClB,KAAK,YAGT,KAAK,gBAAgB,KAAK,eAAe,WAAW,CACxD,EAKA,UAAW,UAAY,CAEnB,IAAI,EACA,KAAK,OAAS,KAAK,MAAM,UACzB,EAAkB,KAAK,MAAM,SAAS,KAAK,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,EAClE,IAAoB,IAAA,IACpB,QAAQ,KAAK,2DAA2D,EACxE,EAAkBC,EAAAA,QAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,GACzCD,EAAE,WAAW,EAAgB,IAAI,IACzC,QAAQ,KAAK,2DAA2D,EACxE,EAAkBC,EAAAA,QAAE,SAAS,CAAC,CAAC,OAAO,CAAe,CAAC,CAAC,QAAQ,IAInE,EAAkBA,EAAAA,QAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAIrD,IAAM,EAAgB,KAAK,cAAc,EACrC,EAAqB,KAAK,SAAS,CAAa,EAChD,IAAuB,IAAA,IACvB,QAAQ,KAAK,2DAA2D,EACxE,EAAqBA,EAAAA,QAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAC5CD,EAAE,WAAW,EAAmB,IAAI,IAC5C,QAAQ,KAAK,2DAA2D,EACxE,EAAqBC,EAAAA,QAAE,SAAS,CAAC,CAAC,OAAO,CAAkB,CAAC,CAAC,QAAQ,GAGzE,IAAI,EAAsB,KACtB,EAAuB,KAI3B,EAAA,QAAE,KACE,EACK,MAAO,GAAgB,CAEpB,EAAsB,CAE1B,CAAC,EACL,EACK,MAAO,GAAgB,CAEpB,EAAuB,CAE3B,CAAC,CACT,CAAC,CACI,SAAW,CAER,KAAK,EAAE,mBAAmB,CAAC,CAAC,YAAY,WAAW,EACnD,KAAK,EAAE,kBAAkB,CAAC,CAAC,YAAY,WAAW,EAClD,KAAK,EAAE,8BAA8B,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,KAAK,EAAE,EAS7D,CAAC,GAAuB,CAAC,GAEzB,KAAK,KAAO,KAAK,eAAe,YAChC,KAAK,IAAI,MAAM,MAAM,EACrB,KAAK,QAAQ,UAAW,EAAe,KAAK,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAChE,CAAC,GAAuB,GAE/B,KAAK,EAAE,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAChD,KAAK,EAAE,8BAA8B,CAAC,CAAC,YAAY,QAAQ,CAAC,CAAC,KAAK,CAAoB,GAC/E,GAAuB,CAAC,GAE/B,KAAK,EAAE,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAC/C,KAAK,EAAE,8BAA8B,CAAC,CAAC,YAAY,QAAQ,CAAC,CAAC,KAAK,CAAmB,GAC9E,GAAuB,IAE9B,KAAK,EAAE,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAChD,KAAK,EAAE,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAC/C,KAAK,EAAE,8BAA8B,CAAC,CAAC,YAAY,QAAQ,CAAC,CAAC,KACzDD,EAAE,OAAO,CAAmB,EAAI,OAASA,EAAE,OAAO,CAAoB,CAAC,EAEnF,CAAC,CACT,EAMA,8BAA+B,UAAY,CAEvC,GAAI,CAAC,KAAK,WAAY,CAClB,KAAK,KAAO,KAAK,wBACjB,MACJ,CAEA,IAAM,EAAa,CACf,OAAQ,GACR,WAAY,GACZ,KAAM,EACV,EACI,EAAY,SACZ,EAAU,KAUd,GARI,KAAK,wBAAwB,IAAI,UAAU,EAC3C,EAAU,KAAK,wBAAwB,IAAI,UAAU,EAC9C,KAAK,wBAAwB,IAAI,kBAAkB,IAG1D,EAAY,KAAK,wBAAwB,IAAI,kBAAkB,EAC/D,EAAU,KAAK,wBAAwB,IAAI,UAAU,GAErD,EAAW,IAAc,EAAS,CAClC,IAAM,EAAc,IAAI,EAAW,GACnC,EAAY,IAAI,CACZ,IAAK,CACT,CAAC,CAAC,CAAC,GAAG,YAAa,UAAY,CAC3B,KAAK,KAAO,EACZ,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,GAAG,UAAW,UAAY,CAC/B,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,CACJ,CACJ,CAAC,EC1TD,SAASI,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAOhC,OALD,SAAU,EAAY,CACrB,EAAW,EAAW,wGAAkJF,GAAiC,EAAW,KAAK,GAAK,EAAe,EAAK;;;;;;;;03CACpP,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,CCAtB,IAAI,GAAuB,EAAK,OAAO,CACnC,OAAQ,CACJ,mCAAoC,SAAU,EAAG,CAC7C,EAAE,eAAe,EAEjB,IAAI,EAAS,KAAK,EAAE,8BAA8B,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GACzE,EAAW,KAAK,EAAE,gCAAgC,CAAC,CAAC,IAAI,EACxD,EAAiB,KAAK,EAAE,iCAAiC,CAAC,CAAC,IAAI,EAEnE,KAAK,EAAE,8BAA8B,CAAC,CAAC,MAAM,EAE7C,KAAK,WAAW,IAAI,YAAY,CAAC,CAAC,GAAG,aAAc,UAAY,CAC3D,EAAO,SAAS,EAAW,IAAM,EAAQ,CAAE,QAAS,EAAK,CAAC,CAC9D,EAAG,IAAI,CAAC,CAAC,GAAG,UAAW,SAAU,EAAM,CACnC,KAAK,EAAE,8BAA8B,CAAC,CAAC,KAAK,EAAK,aAAa,OAAO,CACzE,EAAG,IAAI,CAAC,CAAC,OAAO,CACZ,WAAY,KAAK,EAAE,2BAA2B,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAC3D,mBAAoB,EACpB,cAAe,EACf,gBAAiB,EACjB,SAAU,EACd,CAAC,CACL,EACA,wBAAyB,cAC7B,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,mBAAqB,IAAI,GAAc,CACxC,WAAY,KACZ,UAAW,cACX,SAAU,wDACV,WAAY,qBACZ,SAAU,SAAU,EAAO,CACvB,IAAM,EAAUG,EAAAA,QAAE,SAAS,EAM3B,OALK,EAGD,EAAQ,QAAQ,EAFhB,EAAQ,OAAO,6BAA6B,EAIzC,EAAQ,QAAQ,CAC3B,CACJ,CAAC,EACD,KAAK,SAAS,KAAK,mBAAoB,UAAW,SAAU,EAAK,CAC7D,KAAK,EAAE,8BAA8B,CAAC,CAAC,IAAI,EAAI,EAAE,EACjD,KAAK,EAAE,gCAAgC,CAAC,CAAC,IAAI,EAAI,IAAI,YAAY,CAAC,EAClE,GAAY,CACR,IAAK,YAAY,EAAI,GAAG,OACxB,OAAQ,MACR,KAAM,CAAE,KAAM,EAAI,IAAI,YAAY,CAAE,CACxC,CAAC,CAAC,CAAC,KAAM,GAAW,CAEZ,KAAK,EAAE,8BAA8B,CAAC,CAAC,IAAI,IAAM,EAAI,IACrD,KAAK,EAAE,8BAA8B,CAAC,CAAC,IAAI,GAAG,EAAI,GAAG,IAAI,EAAO,EAAE,CAE1E,CAAC,CACL,CAAC,EACD,KAAK,WAAa,EAAS,WAC3B,KAAK,OAAO,CAChB,EAEA,OAAQ,UAAY,CAKhB,OAJA,KAAK,IAAI,KAAKC,GAAyB,CACnC,WAAY,KAAK,UACrB,CAAC,CAAC,EAEK,IACX,EAEA,aAAc,UAAY,CACtB,KAAK,mBAAmB,YAAA,EAAA,EAAA,QAAA,CAAa,qBAAqB,CAAC,CAAC,CAAC,OAAO,CACxE,CACJ,CAAC,EChFD,SAASC,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAOhC,OALD,SAAU,EAAY,CACrB,EAAW,EAAW,4FAAsIF,GAAiC,EAAW,IAAI,MAAM,GAAK,EAAe,EAAK;MAAwLA,GAAiC,EAAW,IAAI,QAAQ,GAAK,EAAe,EAAK;;;;;;4kCACtf,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,CCAtB,IAAI,GAAe,EAAK,OAAO,CAC3B,OAAQ,CACJ,2BAA4B,SAAU,EAAG,CACrC,EAAE,eAAe,EAEjB,IAAI,EAAS,KAAK,EAAE,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GACjE,EAAW,KAAK,EAAE,wBAAwB,CAAC,CAAC,IAAI,EAEpD,KAAK,EAAE,8BAA8B,CAAC,CAAC,MAAM,EAE7C,KAAK,WAAW,IAAI,YAAY,CAAC,CAAC,GAAG,aAAc,UAAY,CAC3D,EAAO,SAAS,EAAW,IAAM,EAAQ,CAAE,QAAS,EAAK,CAAC,CAC9D,EAAG,IAAI,CAAC,CAAC,GAAG,UAAW,SAAU,EAAM,CACnC,KAAK,EAAE,8BAA8B,CAAC,CAAC,KAAK,EAAK,aAAa,OAAO,CACzE,EAAG,IAAI,CAAC,CAAC,OAAO,CACZ,WAAY,KAAK,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EACnD,cAAe,EACf,gBAAiB,EACjB,SAAU,EACd,CAAC,CACL,EACA,wBAAyB,cAC7B,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,mBAAqB,IAAI,GAAc,CACxC,WAAY,KACZ,UAAW,cACX,SAAU,wDACV,WAAY,qBACZ,SAAU,SAAU,EAAO,CACvB,IAAM,EAAUG,EAAAA,QAAE,SAAS,EAM3B,OALK,EAGD,EAAQ,QAAQ,EAFhB,EAAQ,OAAO,6BAA6B,EAIzC,EAAQ,QAAQ,CAC3B,CACJ,CAAC,EACD,KAAK,SAAS,KAAK,mBAAoB,UAAW,SAAU,EAAK,CAC7D,KAAK,EAAE,sBAAsB,CAAC,CAAC,IAAI,EAAI,EAAE,EACzC,KAAK,EAAE,wBAAwB,CAAC,CAAC,IAAI,EAAI,IAAI,YAAY,CAAC,EAC1D,GAAY,CACR,IAAK,YAAY,EAAI,GAAG,OACxB,OAAQ,MACR,KAAM,CAAE,KAAM,EAAI,IAAI,YAAY,CAAE,CACxC,CAAC,CAAC,CAAC,KAAM,GAAW,CAEZ,KAAK,EAAE,sBAAsB,CAAC,CAAC,IAAI,IAAM,EAAI,IAC7C,KAAK,EAAE,sBAAsB,CAAC,CAAC,IAAI,GAAG,EAAI,GAAG,IAAI,EAAO,EAAE,CAElE,CAAC,CACL,CAAC,EACD,KAAK,WAAa,EAAS,WAC3B,KAAK,OAAO,CAChB,EAEA,OAAQ,UAAY,CAIhB,OAHA,KAAK,IAAI,KAAKC,GAAiB,CAC3B,WAAY,KAAK,UACrB,CAAC,CAAC,EACK,IACX,EAEA,aAAc,UAAY,CACtB,KAAK,mBAAmB,YAAA,EAAA,EAAA,QAAA,CAAa,qBAAqB,CAAC,CAAC,CAAC,OAAO,CACxE,CACJ,CAAC,KC5EyB,EA0B1B,IAAI,GAA0B,CAAC,EAC/B,GAAwB,GAAe,YAAc,GACrD,GAAwB,GAAe,IAAM,GAK7C,IAAI,GAAkB,EAAK,OAAO,CAC9B,OAAQ,CACJ,uBAAwB,uBACxB,6BAA8B,mBAC9B,2BAA4B,gBAChC,EAEA,WAAY,SAAU,EAAU,CAC5B,GAAmB,OAAO,EAC1B,KAAK,MAAQ,CAAC,EACd,KAAK,eAAiB,EAAS,gBAAkB,GACjD,KAAK,gBAAkB,CACnB,GAAe,WACf,GAAe,EACnB,CAAC,CAAC,OAAO,EAAS,iBAAmB,CAAC,CAAC,EAEvC,KAAK,oBAAsB,IAAI,GAAoB,CAC/C,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,YAAa,KAAK,cAAe,IAAI,EAG3C,KAAK,WAAa,IAAI,GACtB,KAAK,WAAW,GAAG,YAAa,UAAY,CACxC,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,EAEA,QAAS,UAAY,CACjB,KAAK,cAAc,EACnB,EAAK,UAAU,QAAQ,KAAK,IAAI,CACpC,EAEA,cAAe,UAAY,CACvB,IAAK,IAAM,KAAQ,KAAK,MACpB,EAAK,QAAQ,EAEjB,KAAK,MAAQ,CAAC,CAClB,EAEA,OAAQ,UAAY,CAChB,GAAI,CAACC,GAAe,GAAK,CAACA,GAAe,CAAC,CAAC,IAAI,OAAO,EAAG,CACrD,KAAK,IAAI,KAAK,+CAA+C,EAC7D,MACJ,CAmBA,OAlBA,KAAK,cAAc,EACnB,KAAK,IAAI,KAAKC,GAAoB,CAC9B,YAAa,KAAK,WAAW,QAAQ,EACrC,MAAO,GACP,gBAAiB,KAAK,gBACtB,yBAA0B,KAAK,wBACnC,CAAC,CAAC,EAEF,KAAK,oBAAoB,WAAW,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC,OAAO,EAElF,EAAE,KAAK,KAAK,EAAE,8BAA8B,EACxC,KAAK,cAAe,IAAI,EAE5B,AAEI,KAAK,kBADL,KAAK,qBAAqB,KAAK,cAAc,EACvB,IAGnB,IACX,EAEA,cAAe,SAAU,EAAY,CACjC,KAAK,WAAW,IAAI,CAAU,EAC9B,KAAK,OAAO,CAChB,EAMA,cAAe,SAAU,EAAI,CAEzB,IAAI,EADa,KAAK,WAAW,KAAA,EAAA,EAAA,QAAA,CAAM,CAAE,CAAC,CAAC,KAAK,KAAK,CAC7B,CAAC,CAAC,IAAI,UAAU,EACpC,EAAO,EAAS,MAAQ,EAAS,KACjC,EAAS,WACT,GAAQ,EAAS,UAErB,IAAI,EAAO,CACP,CAAC,SAAWC,GAAW,CAAI,EAAI,IAAK,CAAI,EACxC,CAAC,SAAWA,GAAW,EAAS,IAAI,EAAI,IAAK,EAAS,IAAI,CAC9D,EACI,EAAS,UACT,EAAK,KAAK,CAAC,aAAeA,GAAW,EAAS,QAAQ,EAAI,IAAK,EAAS,QAAQ,CAAC,EAErF,IAAI,EAAO,IAAI,GAAW,EAAI,CAC1B,OAAQ,EAAK,IAAI,GAAK,EAAE,EAAE,EAC1B,MAAO,CACH,KAAM,MACN,WAAY,CAAE,QAAS,EAAM,CACjC,EACA,OAAQ,EAAK,IAAI,GAAK,EAAE,EAAE,EAC1B,YAAa,CACT,IAAK,CACD,WAAY,IACZ,SAAU,IACV,cAAe,GACf,WAAY,CACR,QAAS,EACb,CACJ,CACJ,EACA,WAAY,CACR,MAAO,CACL,OAAQ,CAAC,OAAQ,OAAQ,MAAM,CACjC,EACA,WAAY,CAAC,QAAS,EAAK,CAC/B,EACA,OAAQ,CAAE,SAAU,OAAQ,CAChC,CAAC,EACD,EAAK,OAAO,EACZ,KAAK,MAAM,KAAK,CAAI,CACxB,EAEA,qBAAsB,SAAU,EAAK,CACjC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAO,EAAI,aAAa,EACxB,EAAa,KAAK,WAAW,IAAI,EAAG,KAAK,KAAK,CAAC,EACnD,EAAW,IAAI,CAAE,QAAS,EAAK,CAAC,EAChC,EAAW,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,UAAY,CAChD,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,8BACN,KAAM,UACN,QAAS,GACb,CAAC,EACD,KAAK,WAAW,MAAM,CAAC,EAAG,EAAI,CAClC,EAAG,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,SAAU,EAAK,CACjD,EAAO,QAAQ,UAAW,CACtB,KAAM,SACN,KAAM,EAAI,aAAa,QACvB,KAAM,QACV,CAAC,CACL,CAAC,CAAC,CAAC,KAAK,CACZ,EAEA,iBAAkB,SAAU,EAAK,CAC7B,IAAI,GAAA,EAAA,EAAA,QAAA,CAAO,EAAI,aAAa,EACxB,EAAa,KAAK,WAAW,IAAI,EAAG,KAAK,KAAK,CAAC,EAEnD,GAAQ,CACJ,KAAM,qDACA,EAAW,OAAO,MAAM,EAAI,oEAElC,YAAa,GACb,QAAS,SACT,oBAAuB,CACnB,EAAW,GAAG,YAAa,UAAY,CACnC,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,sBACN,KAAM,UACN,QAAS,GACb,CAAC,EACD,KAAK,WAAW,MAAM,CAAC,EAAG,EAAI,CAClC,EAAG,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,SAAU,EAAM,CAClD,EAAO,QAAQ,UAAW,CACtB,KAAM,YACN,KAAM,EAAK,aAAa,QACxB,KAAM,SACN,QAAS,GACb,CAAC,CACL,EAAG,IAAI,CAAC,CAAC,QAAQ,CACrB,CACJ,CAAC,CACL,EAEA,eAAgB,SAAU,EAAK,CAC3B,IAAI,GAAA,EAAA,EAAA,QAAA,CAAQ,EAAI,aAAa,CAAC,CAAC,KAAK,KAAK,EACzC,KAAK,qBAAqB,CAAG,CACjC,EAEA,qBAAsB,SAAU,EAAK,CACjC,IAAI,EAAa,KAAK,WAAW,IAAI,CAAG,EAUxC,IAP+B,GAAqB,CAChD,IAAA,EAAA,EAAA,QAAA,CAHc,qBAGF,EACZ,MAAO,EACP,WAAY,IAChB,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,UAAY,CACxC,KAAK,OAAO,CAChB,EAAG,IACgB,CAAC,CAAC,OAAO,CAChC,CACJ,EAAG,CACC,OAAQ,SAAU,EAAc,CAC5B,IAAI,EAAa,IAAI,GAAgB,CAAE,IAAK,CAAa,CAAC,EAC1D,EAAW,KAAK,YAAa,UAAY,CACrC,IAAI,EAAO,GAAwB,EAAW,IAAI,MAAM,GACxD,GAAI,EACA,EAAO,QAAQ,eAAgB,EAAM,CACrB,YAChB,CAAC,OAED,MAAU,MAAM,cAAc,CAEtC,CAAC,CAAC,CAAC,MAAM,CACb,CACJ,CAAC,EC3OD,SAASC,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAOhC,OALD,SAAU,EAAY,CACrB,EAAW,EAAW,kJAA6OF,GAAiC,EAAW,QAAQ,EAAI,GAAK,EAAe,EAAK,yEACtV,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,CCDtB,IAAI,GAAiB,EAAK,OAAO,CAC7B,OAAQ,CACJ,oCAAqC,UAAY,CAC7C,KAAK,WAAW,cAAc,CAClC,EACA,oCAAqC,UAAY,CAC7C,KAAK,WAAW,kBAAkB,CACtC,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,WAAa,EAAS,UAC/B,EAKA,OAAQ,UAAY,CAOhB,OANA,KAAK,IAAI,KAAKG,GAAuB,CACjC,WAAY,KAAK,UACrB,CAAC,CAAC,EAEF,KAAK,EAAE,cAAc,CAAC,CAAC,aAAa,KAAK,WAAW,YAAY,CAAC,EACjE,KAAK,EAAE,cAAc,CAAC,CAAC,aAAa,KAAK,WAAW,gBAAgB,CAAC,EAC9D,IACX,CACJ,CAAC,EClCD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAqEhC,OAnED,SAAU,EAAa,EAAa,EAAa,EAAY,EAAY,EAAgB,CACxF,GAAsB,uNACxB,EAAe,IACnB,GAAsB,kIAEtB,GAAsB,UAEpB,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAa,EAAM,GAC/B,EAAW,EAAW,QAAe,0DAA4DH,GAAS,SAAW,EAAW,IAAI,QAAQ,EAAI,OAAS,QAAU,GAAM,EAAK,GAAK,sLAAyQC,GAAiC,EAAW,EAAW,IAAI,SAAS,EAAG,CAAW,GAAK,EAAe,EAAK,+GAAmMA,GAAiC,EAAW,EAAW,IAAI,SAAS,EAAG,CAAW,GAAK,EAAe,EAAK,sBACj1B,EAAW,IAAI,MAAM,IACzB,EAAW,EAAW,oIAAsMA,GAAiC,EAAW,EAAW,IAAI,MAAM,CAAC,GAAK,EAAe,EAAK,wGAA4LA,GAAiC,EAAW,EAAW,IAAI,MAAM,CAAC,GAAK,EAAe,EAAK,uBAE9kB,GAAsB,gDAClB,EAAW,IAAI,QAAQ,EAC3B,GAAsB,uDAGtB,GAAsB,uDAEtB,EAAW,EAAW,0FAAwI,6BAA+BD,GAAS,mBAAoB,EAAW,IAAK,GAAM,EAAK,GAAK,OAAyBC,GAAiC,EAAW,KAAK,GAAK,EAAe,EAAK,iBAAsD,uBAAyBD,GAAS,SAAW,EAAW,IAAI,QAAQ,EAAI,OAAS,QAAU,GAAM,EAAK,GAAK,iBAC1f,EAAW,IAAI,aAAa,IAChC,EAAW,EAAW,yCAA4D,6CAAoDA,GAAS,MAAO,EAAW,IAAK,GAAM,EAAK,GAAK,yEAEtL,EAAW,EAAW,+CAAgG,yCAA2CA,GAAS,MAAO,EAAW,IAAK,GAAM,EAAK,GAAK,eAC3M,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAa,EAAM,GAC7B,EAAW,EAAW,QAAe,0DAA4DA,GAAS,SAAW,EAAW,IAAI,QAAQ,EAAI,OAAS,QAAU,GAAM,EAAK,GAAK,sLAAyQC,GAAiC,EAAW,EAAW,IAAI,SAAS,EAAG,CAAW,GAAK,EAAe,EAAK,+GAAmMA,GAAiC,EAAW,EAAW,IAAI,SAAS,EAAG,CAAW,GAAK,EAAe,EAAK,sBACj1B,EAAW,IAAI,MAAM,IACzB,EAAW,EAAW,oIAAsMA,GAAiC,EAAW,EAAW,IAAI,MAAM,CAAC,GAAK,EAAe,EAAK,wGAA4LA,GAAiC,EAAW,EAAW,IAAI,MAAM,CAAC,GAAK,EAAe,EAAK,uBAE9kB,GAAsB,gDAClB,EAAW,IAAI,QAAQ,EAC3B,GAAsB,uDAGtB,GAAsB,uDAEtB,EAAW,EAAW,0FAAwI,6BAA+BD,GAAS,mBAAoB,EAAW,IAAK,GAAM,EAAK,GAAK,OAAyBC,GAAiC,EAAW,KAAK,GAAK,EAAe,EAAK,iBAAsD,uBAAyBD,GAAS,SAAW,EAAW,IAAI,QAAQ,EAAI,OAAS,QAAU,GAAM,EAAK,GAAK,iBAC1f,EAAW,IAAI,aAAa,IAChC,EAAW,EAAW,yCAA4D,6CAAoDA,GAAS,MAAO,EAAW,IAAK,GAAM,EAAK,GAAK,yEAEtL,EAAW,EAAW,+CAAgG,yCAA2CA,GAAS,MAAO,EAAW,IAAK,GAAM,EAAK,GAAK,eAC7M,CACF,CACF,EAAA,CAAG,KAAK,IAAI,CAER,EAAA,CAAE,KAAK,KAAM,gBAAiB,EAC1B,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,gBAAiB,EAC/E,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,gBAAiB,EAC/E,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,eAAgB,EAC9E,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,eAAgB,EAC5E,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,mBAAoB,EAChF,EAAgB,eAChB,OAAO,eAAmB,IAAc,eAAiB,IAAA,EAAS,EAC7D,CAAS,CCpDtB,IAAI,GAAkB,EAAK,OAAO,CAC9B,OAAQ,CACJ,4BAA6B,SAAU,EAAO,CAC1C,IAAI,GAAA,EAAA,EAAA,QAAA,CAAQ,EAAM,aAAa,CAAC,CAAC,KAAK,kBAAkB,EACxD,EAAO,SAAS,cAAgB,KAAK,WAAW,IAAI,CAAG,CAAC,CAAC,GAAI,CAAE,QAAS,EAAK,CAAC,CAClF,EACA,0CAA2C,yBAC3C,oCAAqC,SAAU,EAAO,CAClD,EAAM,eAAe,CACzB,EACA,4BAA6B,oBACjC,EAEA,WAAY,SAAU,EAAU,CAC5B,GAAmB,OAAO,EAC1B,KAAK,WAAa,IAAI,GACtB,KAAK,WAAW,GAAG,YAAa,UAAY,CACxC,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,MAAM,EAEf,KAAK,eAAiB,IAAI,GAAe,CACrC,WAAY,KAAK,WACjB,WAAY,IAChB,CAAC,EAED,KAAK,aAAe,IAAI,GAAkB,CACtC,YAAa,wBACb,MAAO,CAAC,YAAY,EACpB,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,kBAAmB,KAAK,gBAAiB,IAAI,EAEnD,KAAK,OAAS,EAAS,SAAW,QACtC,EAKA,uBAAwB,UAAY,CAGhC,IAAI,GAAqB,CACrB,IAAA,EAAA,EAAA,QAAA,CAHc,qBAGF,EACZ,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,UAAW,SAAU,EAAY,CACnC,EAAO,SAAS,cAAgB,EAAW,IAAI,KAAK,EAChD,CAAE,QAAS,EAAK,CAAC,CACzB,EAAG,IAAI,CAAC,CAAC,OAAO,CACpB,EAEA,OAAQ,UAAY,CAiBhB,OAhBA,KAAK,IAAI,KAAKI,GAAuB,CACjC,YAAa,KAAK,WAAW,QAAQ,EACrC,eAAgBC,GAChB,WAAYC,GACZ,YAAA,EACA,YAAA,GACA,WAAYC,EAChB,CAAC,CAAC,EAEF,KAAK,eAAe,WAAW,KAAK,EAAE,0BAA0B,CAAC,CAAC,CAAC,OAAO,EAC1E,KAAK,aAAa,WAAW,KAAK,EAAE,iCAAiC,CAAC,CAAC,CAAC,OAAO,EAE3E,KAAK,QACL,KAAK,uBAAuB,EAGzB,IACX,EAMA,gBAAiB,SAAU,EAAQ,CAC/B,IAAI,EAAa,IAAI,GACrB,EAAW,IAAI,MAAO,EAAO,EAAE,CAAC,CAAC,GAAG,YAAa,UAAY,CACzD,EAAO,SAAS,eAAiB,EAAW,IAAI,KAAK,EAAG,CAAE,QAAS,EAAK,CAAC,CAC7E,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,EAEA,mBAAoB,SAAU,EAAG,CAC7B,IAAM,GAAA,EAAA,EAAA,QAAA,CAAS,EAAE,aAAa,EACxB,EAAM,EAAK,KAAK,KAAK,EACrB,EAAO,KAAK,EAAE,kCAAkC,EAAI,GAAG,EAEzD,EAAK,KAAK,OAAO,IAAM,UACvB,GAAe,KAAK,WAAW,IAAI,CAAG,CAAC,CAAC,IAAI,aAAa,EAAG,CAAI,EAChE,EAAK,YAAY,MAAM,EACvB,EAAK,KAAK,QAAS,SAAS,EAC5B,EAAK,KAAK,GAAG,CAAC,CAAC,YAAY,eAAe,CAAC,CAAC,SAAS,aAAa,EAClE,EAAK,KAAK,MAAM,CAAC,CAAC,KAAK,kBAAkB,IAEzC,EAAK,SAAS,MAAM,EACpB,EAAK,KAAK,QAAS,QAAQ,EAC3B,EAAK,KAAK,GAAG,CAAC,CAAC,YAAY,aAAa,CAAC,CAAC,SAAS,eAAe,EAClE,EAAK,KAAK,MAAM,CAAC,CAAC,KAAK,kBAAkB,EAEjD,CACJ,CAAC,ECtHD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAsBhC,OApBD,SAAU,EAAY,EAAY,EAAgB,CACjD,EAAW,EAAW,oXAAkgB,iDAAwDH,GAAS,OAAQ,EAAW,YAAY,EAAG,GAAM,EAAK,GAAK,6DAC5oB,EAAW,eAAe,GAAK,EAAW,QAC/C,GAAsB,uKAEjB,EAAW,eAAe,GAAK,EAAW,QAC/C,GAAsB,2SAEtB,EAAW,EAAW,0DAAuGC,GAAiC,EAAW,KAAK,GAAK,EAAe,EAAK,SACnM,EAAW,IAAI,aAAa,IAChC,EAAW,EAAW,0CAA8E,EAAe,EAAW,IAAI,aAAa,CAAC,GAAK,IAAmB,UAExK,GAAsB,6FAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,eAAgB,EAC5E,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,mBAAoB,EAChF,EAAgB,eAChB,OAAO,eAAmB,IAAc,eAAiB,IAAA,EAAS,EAC7D,CAAS,ICxBI,EAwB1B,IAAI,GAAiB,EAAK,OAAO,CAC7B,OAAQ,CACJ,2BAA4B,iBAC5B,qCAAsC,aACtC,6BAA8B,oBAClC,EAEA,WAAY,SAAU,EAAU,CAC5B,GAAmB,OAAO,EAE1B,KAAK,OAAS,EAAS,QAAU,GACjC,KAAK,OAAS,EAAS,QAAU,GACjC,KAAK,KAAO,EAAS,MAAQ,GAC7B,KAAK,aAAe,EAAS,cAAgB,GAC7C,KAAK,aAAe,EAAS,cAAgB,GAC7C,KAAK,WAAa,EAAS,YAAc,GACzC,KAAK,WAAa,EAAS,YAAc,GAGrC,EAAS,YACT,KAAK,MAAQ,EAAS,WAElB,EAAS,UACT,KAAK,OAAS,IAAI,GAClB,KAAK,OAAO,IAAI,CACZ,IAAK,EAAS,QAClB,CAAC,CAAC,CAAC,GAAG,YAAa,UAAY,CAC3B,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,GAAG,UAAW,UAAY,CAC/B,KAAK,OAAS,KACd,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,MAAM,GAEf,KAAK,OAAO,GAET,EAAS,KAChB,KAAK,MAAQ,IAAI,GACjB,KAAK,MAAM,IAAI,MAAO,EAAS,EAAE,EAEjC,KAAK,MAAM,GAAG,YAAa,UAAY,CACnC,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,MAAM,EAEvB,EAEA,eAAgB,UAAY,CACxB,IAAI,GAAA,EAAA,EAAA,QAAA,CAAc,qBAAqB,EAEvC,AACI,KAAK,uBAAuB,IAAI,GAAqB,CACjD,GAAI,EACJ,MAAO,KAAK,MACZ,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,UAAW,UAAY,CACzB,KAAK,OAAO,CAChB,EAAG,IAAI,EAEX,KAAK,qBAAqB,OAAO,CACrC,EAEA,OAAQ,UAAY,CAyChB,OAxCA,KAAK,IAAI,KAAKG,GAAuB,CACjC,WAAY,KAAK,MACjB,WAAYC,GACZ,eAAgBC,EACpB,CAAC,CAAC,EAEG,KAAK,gBAiBN,KAAK,gBACA,WAAW,KAAK,EAAE,mCAAmC,CAAC,CAAC,CACvD,OAAO,EAjBZ,KAAK,gBAAkB,IAAIC,GAAgB,CACvC,GAAI,KAAK,EAAE,mCAAmC,EAC9C,YAAa,KAAK,QAAU,KAAK,MACjC,OAAQ,KAAK,OACb,aAAc,KAAK,aACnB,WAAY,KAAK,WACjB,aAAc,KAAK,aACnB,WAAY,KAAK,WACjB,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,wBAA2B,CAG7B,KAAK,EAAE,mDAAmD,CAAC,CAAC,KAAK,CACrE,CAAC,EAOL,KAAK,OAAS,GACd,KAAK,aAAe,GACpB,KAAK,WAAa,GAClB,KAAK,aAAe,GACpB,KAAK,WAAa,GAEd,KAAK,KACL,KAAK,eAAe,EACb,KAAK,QACZ,KAAK,WAAW,EAGb,IACX,EAEA,WAAY,UAAY,CACpB,IAAI,GAAa,CACb,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,UAAW,aACX,MAAO,KAAK,MACZ,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,oBAAqB,SAAU,EAAQ,CACrC,EAAO,SACP,KAAK,gBAAgB,kBAAkB,CAE/C,EAAG,IAAI,CACX,EAEA,mBAAoB,UAAY,CAC5B,IAAI,EAAS,CACT,KAAM,qDACA,KAAK,MAAM,OAAO,MAAM,EAAI,KAAK,MAAM,OAAO,UAAU,EAAI,QAClE,QAAS,SACT,YAAa,GACb,oBAAuB,CACnB,KAAK,MAAM,GAAG,YAAa,UAAY,CACnC,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,sBACN,KAAM,UACN,QAAS,GACb,CAAC,EACD,EAAO,SAAS,cAAe,CAAE,QAAS,EAAK,CAAC,CACpD,CAAC,CAAC,CAAC,QAAQ,CACf,CACJ,GACI,KAAK,MAAM,IAAI,UAAU,IAAM,GAAK,KAAK,MAAM,IAAI,MAAM,IAAM,KAC/D,EAASC,EAAE,OAAO,CACd,eAAgB,MAAQ,KAAK,MAAM,OAAO,MAAM,EAAI,oBAClB,KAAK,MAAM,OAAO,UAAU,EAC9C,6BACAC,GAAW,SAAS,KAAK,MAAM,IAAI,MAAM,EAAG,EAAE,CAAC,EAAI,OACnE,gBAAiB,GACjB,KAAM,KAAK,MAAM,OAAO,MAAM,CAClC,EAAG,CAAM,GAEb,GAAQ,CAAM,CAClB,CACJ,EAAG,CAKC,aAAc,SAAU,EAAK,EAAQ,CACjC,IAAI,EAAa,IAAI,GACrB,EAAW,IAAI,CAAE,IAAK,CAAI,CAAC,CAAC,CAAC,GAAG,YAAa,UAAY,CACrD,EAAO,QAAQ,eAAgB,GAAgBD,EAAE,OAAO,CACxC,YAChB,EAAG,GAAU,CAAC,CAAC,CAAC,CACpB,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,CACJ,CAAC,KCzLyB,EAW1B,IAAI,GAAa,EAAK,OAAO,CACzB,WAAY,SAAU,EAAU,CAC5B,GAAmB,OAAO,EAC1B,KAAK,OAAS,EAAS,OACvB,KAAK,OAAS,EAAS,QAAU,GACjC,KAAK,aAAe,EAAS,cAAgB,GAC7C,KAAK,aAAe,EAAS,cAAgB,GAC7C,KAAK,WAAa,EAAS,YAAc,GACzC,KAAK,WAAa,EAAS,YAAc,GAEzC,KAAK,OAAO,CAChB,EAEA,OAAQ,UAAY,CAYhB,MAXA,MAAK,gBAAkB,IAAIE,GAAgB,CACvC,GAAI,KAAK,IACT,YAAa,KAAK,OAClB,OAAQ,KAAK,OACb,aAAc,KAAK,aACnB,WAAY,KAAK,WACjB,aAAc,KAAK,aACnB,WAAY,KAAK,WACjB,WAAY,IAChB,CAAC,EAEM,IACX,CACJ,EAAG,CAIC,aAAc,SAAU,EAAI,EAAQ,CAChC,IAAI,EAAS,IAAI,GACjB,EAAO,IAAI,CAAE,IAAK,CAAG,CAAC,CAAC,CAAC,GAAG,YAAa,UAAY,CAChD,EAAO,QAAQ,eAAgB,GAAYC,EAAE,OAAO,CACxC,QACZ,EAAG,GAAU,CAAC,CAAC,CAAC,CACpB,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,CAEJ,CAAC,ECnDD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EA+BhC,OA7BD,SAAU,EAAS,EAAW,EAAa,EAAS,CACnD,EAAW,EAAW,8MAAmSF,GAAiC,GAAa,EAAe,EAAK,mPAA8WA,GAAiC,GAAa,EAAe,EAAK,kBAC5yB,EAIL,EAAW,EAAW,yCAAgEA,GAAiC,EAAY,IAAI,OAAO,GAAK,EAAe,EAAK,6LAA6R,6BAA+BD,GAAS,OAAQ,SAAS,EAAY,KAAM,GAAM,EAAK,GAAK,uCAAkE,6BAA+BA,GAAS,OAAQ,gBAAgB,EAAY,GAAG,OAAQ,GAAM,EAAK,GAAK,0CAHxsB,GAAsB,+aAKtB,GAAsB,OAClB,IAAc,SAClB,GAAsB,YAGtB,EAAW,EAAYC,GAAiC,GAAa,EAAe,EAAK,yBAEzF,EAAW,EAAW;;;maAAkqCD,GAAS,OAAQ,EAAS,GAAM,EAAK,EAAK,uCAC9tC,IACJ,EAAW,EAAW,wBAAqCC,GAAiC,GAAa,EAAe,EAAK,kDAAiEA,GAAiC,GAAW,EAAe,EAAK,iBAE9P,GAAsB,mBAClB,EAAA,CAAE,KAAK,KAAM,YAAa,EACtB,EAAgB,QAChB,OAAO,QAAY,IAAc,QAAU,IAAA,GAAW,cAAe,EACrE,EAAgB,UAChB,OAAO,UAAc,IAAc,UAAY,IAAA,GAAW,gBAAiB,EAC3E,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,YAAa,EAC3E,EAAgB,QAChB,OAAO,QAAY,IAAc,QAAU,IAAA,EAAS,EAC/C,CAAS,CCnBtB,IAAI,GAAgB,EAAK,OAAO,CAC5B,OAAQ,CACJ,yBAA0B,UAAY,CAClC,EAAO,QAAQ,cAAc,CACjC,EACA,sBAAuB,UAAY,CAC/B,EAAO,QAAQ,WAAW,CAC9B,EACA,4BAA6B,UAAY,EACrC,EAAA,EAAA,QAAA,CAAE,2CAA2C,CAAC,CAAC,QAAQ,OAAO,CAClE,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,GAAmB,OAAO,EAC1B,KAAK,UAAY,EAAS,WAAa,SACvC,KAAK,OAAO,CAChB,EAEA,OAAQ,UAAY,CAQhB,OAPA,KAAK,IAAI,KAAKG,GAAkB,CAC5B,QAAS,GAAW,EACpB,YAAaC,GAAe,EAC5B,QAAA,KACA,UAAW,KAAK,SACpB,CAAC,CAAC,EAEK,IACX,CACJ,CAAC,EC5CD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAgDhC,OA9CD,SAAU,EAAY,EAAkB,EAAO,EAAiB,EAAY,CAC3E,GAAsB,kQACvB,EACL,GAAsB,aAGtB,GAAsB,eAEtB,EAAW,EAAW,uGAA0L,qDAA2DH,GAAS,UAAY,EAAa,IAAA,GAAY,UAAY,GAAM,EAAK,GAAK,4HAA4N,oDAA0DA,GAAS,UAAY,EAAa,UAAY,IAAA,GAAY,GAAM,EAAK,GAAK,qeACjrB,IACJ,GAAsB,+LACtB,AAQA,EARI,IAAqB,WACd,EAAW,WAAkB,mBAAqBA,GAAS,WAAa,IAAe,UAAY,GAAM,EAAK,GAAK,qEAG1H,IAAqB,SACd,EAAW,WAAkB,mBAAqBA,GAAS,WAAa,IAAe,UAAY,GAAM,EAAK,GAAK,oFAGnH,EAAW,WAAkB,mBAAqBA,GAAS,WAAa,IAAe,UAAY,GAAM,EAAK,GAAK,yBAE9H,EAAW,EAAW,WAAkB,cAAgBA,GAAS,WAAa,IAAe,KAAO,GAAM,EAAK,GAAK,gEAChH,IAAoB,QACxB,EAAW,EAAW,WAAkB,kBAAoBA,GAAS,WAAa,IAAe,SAAW,GAAM,EAAK,GAAK,qFAE5H,EAAW,EAAW,WAAkB,oBAAsBA,GAAS,WAAa,IAAe,WAAa,GAAM,EAAK,GAAK,qFAEhI,GAAsB,2NACjB,EACL,GAAsB,gCAGtB,GAAsB,0CAEtB,GAAsB,oCAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,qBAAsB,EAClF,EAAgB,iBAChB,OAAO,iBAAqB,IAAc,iBAAmB,IAAA,GAAW,UAAW,EACnF,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,GAAW,oBAAqB,EACvE,EAAgB,gBAChB,OAAO,gBAAoB,IAAc,gBAAkB,IAAA,GAAW,eAAgB,EACtF,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,CCrCtB,IAAI,GAAkB,EAAK,OAAO,CAC9B,OAAQ,CACJ,4BAA6B,SAAU,EAAG,CACtC,EAAE,eAAe,EAEjB,IAAI,EAAS,CACT,KAAM,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,EAC5B,YAAa,KAAK,EAAE,gBAAgB,CAAC,CAAC,IAAI,EAC1C,OAAQ,KAAK,EAAE,kBAAkB,CAAC,CAAC,GAAG,UAAU,CACpD,EACI,KAAK,EAAE,iBAAiB,CAAC,CAAC,SAC1B,EAAO,WAAa,KAAK,EAAE,iBAAiB,CAAC,CAAC,IAAI,GAGlD,KAAK,MACL,KAAK,YAAY,CAAM,EAEvB,KAAK,YAAY,CAAM,EAG3B,KAAK,EAAE,qBAAqB,CAAC,CAAC,aAAa,EAAK,EAChD,KAAK,EAAE,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAClD,EAEA,0CAA2C,gBAC/C,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,MAAQ,EAAS,OAAS,IACnC,EAEA,OAAQ,UAAY,CAChB,IAAI,EAAM,KAAK,MAAQ,KAAK,MAAM,IAAI,QAAQ,EAAI,GAC9C,EACA,EAAmB,KAAK,MAAQ,KAAK,MAAM,IAAI,mBAAmB,EAAI,KACtEI,GAAe,CAAC,CAAC,IAAI,OAAO,IACxB,IAAqB,SAAW,IAAqB,SACrD,EAAkB,OACX,IAAqB,WAAa,IAAqB,cAC9D,EAAkB,UAG1B,IAAI,EAAQ,KAAK,IAAI,KAAKC,GAAwB,CAC9C,MAAO,KAAK,MACZ,WAAY,EACM,mBACD,kBACjB,WAAY,KAAK,MAAQ,KAAK,MAAM,IAAI,YAAY,EAAI,EAC5D,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,qBAAwB,CAC7C,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,OAAO,EAC7B,KAAK,MACL,GAAW,MAAM,EAEjB,GAAW,QAAQ,CAE3B,CAAC,CAAC,CAAC,GAAG,sBAAyB,CACvB,KAAK,OACL,GAAY,QAAQ,EAEpB,GAAY,MAAM,CAE1B,CAAC,CAAC,CAAC,GAAG,yBAA4B,CAC1B,KAAK,OACL,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,EAC5C,KAAK,EAAE,gBAAgB,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,aAAa,CAAC,EAC1D,KAAK,OAAS,IAEd,KAAK,OAAS,EAEtB,CAAC,EAMD,OALA,EAAM,QAAQC,EAAAA,QAAE,MAAM,qBAAsB,CAAE,cAAe,CAAM,CAAC,CAAC,EACrE,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,OAAO,EAEjC,KAAK,eAAe,EAEb,IACX,EAEA,YAAa,SAAU,EAAQ,CAC3B,IAAI,EAAQ,IAAI,GAChB,EAAM,IAAI,CAAM,EAChB,EAAM,GAAG,UAAW,UAAY,CAC5B,KAAK,IAAI,MAAM,MAAM,EACrB,KAAK,QAAQ,UAAW,CAAK,CACjC,EAAG,IAAI,CAAC,CAAC,GAAG,UAAW,SAAU,EAAK,CAClC,KAAK,EAAE,8BAA8B,CAAC,CAAC,KAAK,EAAI,aAAa,OAAO,EACpE,KAAK,EAAE,qBAAqB,CAAC,CAAC,aAAa,EAAI,EAC/C,KAAK,EAAE,MAAQ,EAAI,aAAa,KAAK,CAAC,CAAC,QAAQ,OAAO,CAC1D,EAAG,IAAI,CAAC,CAAC,KAAK,CAClB,EAEA,YAAa,SAAU,EAAQ,CAC3B,KAAK,MAAM,IAAI,CAAM,EACrB,KAAK,MAAM,IAAI,CAAC,CAAC,GAAG,UAAW,UAAY,CACvC,KAAK,IAAI,MAAM,MAAM,EACrB,KAAK,QAAQ,UAAW,KAAK,KAAK,CACtC,EAAG,IAAI,CAAC,CAAC,GAAG,UAAW,SAAU,EAAK,CAClC,KAAK,EAAE,8BAA8B,CAAC,CAAC,KAAK,EAAI,aAAa,OAAO,EACpE,KAAK,EAAE,qBAAqB,CAAC,CAAC,aAAa,EAAI,EAC/C,KAAK,EAAE,MAAQ,EAAI,aAAa,KAAK,CAAC,CAAC,QAAQ,OAAO,CAC1D,EAAG,IAAI,CAAC,CAAC,KAAK,CAClB,EAEA,eAAgB,UAAY,CACxB,KAAK,EAAE,4BAA4B,CAAC,CAAC,YAAY,YAAY,EAE7D,KADoB,EAAE,0CACf,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,SAAS,YAAY,CACpD,CACJ,CAAC,EC1HD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAmDhC,OAjDD,SAAU,EAAU,EAAa,EAAY,EAAgB,EAAQ,CACpE,GAAsB,oMACxB,EAAe,IACnB,GAAsB,wHAEtB,GAAsB,UAEpB,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAQ,EAAM,GAC1B,EAAW,EAAW,QAAe,qDAAuDH,GAAS,SAAW,EAAM,IAAI,QAAQ,EAAI,OAAS,QAAU,GAAM,EAAK,GAAK,uKAA0PC,GAAiC,EAAW,EAAM,IAAI,SAAS,EAAG,CAAQ,GAAK,EAAe,EAAK,0GAA8LA,GAAiC,EAAW,EAAM,IAAI,SAAS,EAAG,CAAW,GAAK,EAAe,EAAK,mEACtyB,EAAM,IAAI,QAAQ,EACtB,GAAsB,kDAGtB,GAAsB,kDAEtB,EAAW,EAAW,qFAAmI,wBAA0BD,GAAS,cAAe,EAAM,IAAK,GAAM,EAAK,GAAK,OAAyBC,GAAiC,EAAM,KAAK,GAAK,EAAe,EAAK,iBAAsD,uBAAyBD,GAAS,SAAW,EAAM,IAAI,QAAQ,EAAI,OAAS,QAAU,GAAM,EAAK,GAAK,iFAA+IC,GAAiC,EAAM,IAAI,aAAa,GAAK,EAAe,EAAK,gBAAsC,uBAAyBD,GAAS,SAAW,EAAM,IAAI,QAAQ,EAAI,OAAS,QAAU,GAAM,EAAK,GAAK,6DACt0B,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAQ,EAAM,GACxB,EAAW,EAAW,QAAe,qDAAuDA,GAAS,SAAW,EAAM,IAAI,QAAQ,EAAI,OAAS,QAAU,GAAM,EAAK,GAAK,uKAA0PC,GAAiC,EAAW,EAAM,IAAI,SAAS,EAAG,CAAQ,GAAK,EAAe,EAAK,0GAA8LA,GAAiC,EAAW,EAAM,IAAI,SAAS,EAAG,CAAW,GAAK,EAAe,EAAK,mEACtyB,EAAM,IAAI,QAAQ,EACtB,GAAsB,kDAGtB,GAAsB,kDAEtB,EAAW,EAAW,qFAAmI,wBAA0BD,GAAS,cAAe,EAAM,IAAK,GAAM,EAAK,GAAK,OAAyBC,GAAiC,EAAM,KAAK,GAAK,EAAe,EAAK,iBAAsD,uBAAyBD,GAAS,SAAW,EAAM,IAAI,QAAQ,EAAI,OAAS,QAAU,GAAM,EAAK,GAAK,iFAA+IC,GAAiC,EAAM,IAAI,aAAa,GAAK,EAAe,EAAK,gBAAsC,uBAAyBD,GAAS,SAAW,EAAM,IAAI,QAAQ,EAAI,OAAS,QAAU,GAAM,EAAK,GAAK,6DACx0B,CACF,CACF,EAAA,CAAG,KAAK,IAAI,CAER,EAAA,CAAE,KAAK,KAAM,aAAc,EACvB,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,GAAW,gBAAiB,EACzE,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,eAAgB,EAC9E,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,mBAAoB,EAChF,EAAgB,eAChB,OAAO,eAAmB,IAAc,eAAiB,IAAA,GAAW,WAAY,EAChF,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,EAAS,EAC7C,CAAS,CClCtB,IAAI,GAAa,EAAK,OAAO,CACzB,OAAQ,CACJ,uBAAwB,SAAU,EAAO,CACrC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAQ,EAAM,aAAa,CAAC,CAAC,KAAK,aAAa,EACnD,EAAO,SAAS,SAAW,KAAK,WAAW,IAAI,CAAG,CAAC,CAAC,GAAI,CAAE,QAAS,EAAK,CAAC,CAC7E,EACA,8BAA+B,SAAU,EAAO,CAC5C,EAAM,eAAe,CACzB,EACA,+BAAgC,UAAY,CACxC,KAAK,kBAAkB,CAC3B,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,GAAmB,OAAO,EAC1B,KAAK,WAAa,IAAI,GACtB,KAAK,WAAW,GAAG,YAAa,UAAY,CACxC,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,MAAM,EAEf,KAAK,eAAiB,IAAI,GAAe,CACrC,WAAY,KAAK,WACjB,WAAY,IAChB,CAAC,EAED,KAAK,aAAe,IAAI,GAAkB,CACtC,YAAa,mBACb,MAAO,CAAC,OAAO,EACf,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,kBAAmB,KAAK,WAAY,IAAI,EAE9C,KAAK,OAAS,EAAS,SAAW,QACtC,EAEA,OAAQ,UAAY,CAiBhB,OAhBA,KAAK,IAAI,KAAKI,GAAkB,CAC5B,OAAQ,KAAK,WAAW,QAAQ,EAChC,eAAgBC,GAChB,WAAYC,GACZ,SAAA,EACA,YAAA,EACJ,CAAC,CAAC,EAEF,KAAK,eAAe,WAAW,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,OAAO,EACrE,KAAK,aAAa,WAAW,KAAK,EAAE,4BAA4B,CAAC,CAAC,CAAC,OAAO,EAE1E,AAEI,KAAK,UADL,KAAK,kBAAkB,EACT,IAGX,IACX,EAKA,kBAAmB,UAAY,CAC3B,IAAI,GAAgB,CAChB,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,WAAY,IAChB,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,SAAU,EAAO,CAG7C,IAAI,EAAaD,GAAe,CAAC,CAAC,IAAI,QAAQ,GAAK,CAAC,EACpD,EAAW,KAAK,EAAM,IAAI,KAAK,CAAC,EAChC,GAAe,CAAC,CAAC,IAAI,SAAU,CAAU,EAEzC,EAAO,SAAS,SAAW,EAAM,IAAI,KAAK,EAAG,CAAE,QAAS,EAAK,CAAC,CAClE,EAAG,IAAI,CAAC,CAAC,OAAO,CACpB,EAMA,WAAY,SAAU,EAAQ,CAC1B,IAAI,EAAQ,IAAI,GAChB,EAAM,IAAI,MAAO,EAAO,EAAE,CAAC,CAAC,GAAG,YAAa,UAAY,CACpD,EAAO,SAAS,SAAW,EAAM,IAAI,KAAK,EAAG,CAAE,QAAS,EAAK,CAAC,CAClE,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,CAEJ,CAAC,ECxGD,SAASE,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EA0BhC,OAxBD,SAAU,EAAQ,CACjB,GAAsB,qdAE1B,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAQ,EAAG,EAAM,EAAM,OAAQ,EAAQ,EAAK,IAAS,CAC5D,IAAI,EAAY,EAAM,GAC9B,EAAW,EAAW,8BAAiD,kDAAyDH,GAAS,SAAU,EAAO,GAAM,EAAK,GAAK,IAAYC,GAAiC,GAAa,EAAe,EAAK,WAClP,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAS,EAAO,CACvB,IACA,IAAI,EAAY,EAAM,GAC5B,EAAW,EAAW,8BAAiD,kDAAyDD,GAAS,SAAU,EAAO,GAAM,EAAK,GAAK,IAAYC,GAAiC,GAAa,EAAe,EAAK,WACpP,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEZ,GAAsB,aAClB,EAAA,CAAE,KAAK,KAAM,WAAY,EACrB,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,EAAS,EAC7C,CAAS,CChBtB,IAAI,GAAuB,EAAK,OAAO,CACnC,OAAQ,CACJ,iCAAkC,SAAU,EAAO,CAC/C,IAAI,GAAA,EAAA,EAAA,QAAA,CAAc,EAAM,aAAa,CAAC,CAAC,KAAK,QAAQ,EACpD,KAAK,WAAW,UAAY,EAC5B,KAAK,WAAW,MAAM,CAAC,EAAG,EAAI,CAClC,EACA,8BAA+B,UAAY,CACnC,KAAK,WAAW,UAAA,EAChB,KAAK,WAAW,QAAA,GAEhB,KAAK,WAAW,QAAA,EAEpB,KAAK,WAAW,MAAM,CAAC,EAAG,EAAI,CAClC,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,WAAa,EAAS,WAC3B,KAAK,OAAS,EAAS,MAC3B,EAKA,OAAQ,UAAY,CAUhB,OATA,KAAK,IAAI,KAAKG,GAA6B,CACvC,WAAY,KAAK,WACjB,OAAQ,KAAK,MACjB,CAAC,CAAC,EACE,KAAK,WAAW,UAAA,EAChB,KAAK,EAAE,SAAS,CAAC,CAAC,SAAS,MAAM,EAEjC,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,MAAM,EAE5B,IACX,CACJ,CAAC,EClDD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAmEhC,OAjED,SAAU,EAAU,EAAa,EAAY,EAAY,EAAO,EAAY,CAC3E,IAAM,EAAU,GAAe,EAAY,IAAI,OAAO,EACtD,EAAc,IAAe,EAAI,GAAG,EAAW,aAAe,GAAG,EAAW,cAClF,GAAsB,wEAClB,IACJ,EAAW,EAAW,QAAe,kCAAoCH,GAAS,QAAS,EAAa,GAAM,EAAK,GAAK,wDAAuGC,GAAiC,GAAc,EAAe,EAAK,iBAElS,GAAsB,yJAClB,IACJ,GAAsB,sHAEtB,GAAsB,UAEpB,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAO,EAAM,GACzB,EAAW,EAAW,mKAAiPA,GAAiC,EAAW,EAAK,IAAI,SAAS,EAAG,CAAQ,GAAK,EAAe,EAAK,gBACrW,EAAK,IAAI,MAAM,IAAM,IAAA,KACzB,EAAW,EAAW,wGAA8JA,GAAiC,EAAW,EAAK,IAAI,MAAM,CAAC,GAAK,EAAe,EAAK,iBAErQ,EAAK,IAAI,QAAQ,IAAM,WAC3B,GAAsB,uFAGlB,EAAK,IAAI,QAAQ,IAAM,YAC3B,GAAsB,mGAEtB,EAAW,EAAW,sCAAwE,uBAAyBD,GAAS,aAAc,EAAK,IAAK,GAAM,EAAK,GAAK,OAAyBC,GAAiC,EAAK,KAAK,GAAK,EAAe,EAAK,0EAAkJA,GAAiC,EAAK,IAAI,OAAO,GAAK,EAAe,EAAK,sDAC3d,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAO,EAAM,GACvB,EAAW,EAAW,mKAAiPA,GAAiC,EAAW,EAAK,IAAI,SAAS,EAAG,CAAQ,GAAK,EAAe,EAAK,gBACrW,EAAK,IAAI,MAAM,IAAM,IAAA,KACzB,EAAW,EAAW,wGAA8JA,GAAiC,EAAW,EAAK,IAAI,MAAM,CAAC,GAAK,EAAe,EAAK,iBAErQ,EAAK,IAAI,QAAQ,IAAM,WAC3B,GAAsB,uFAGlB,EAAK,IAAI,QAAQ,IAAM,YAC3B,GAAsB,mGAEtB,EAAW,EAAW,sCAAwE,uBAAyBD,GAAS,aAAc,EAAK,IAAK,GAAM,EAAK,GAAK,OAAyBC,GAAiC,EAAK,KAAK,GAAK,EAAe,EAAK,0EAAkJA,GAAiC,EAAK,IAAI,OAAO,GAAK,EAAe,EAAK,sDAC7d,CACF,CACF,EAAA,CAAG,KAAK,IAAI,CAER,EAAA,CAAE,KAAK,KAAM,aAAc,EACvB,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,GAAW,gBAAiB,EACzE,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,eAAgB,EAC9E,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,eAAgB,EAC5E,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,UAAW,EACvE,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,GAAW,eAAgB,EAClE,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,CCjDtB,IAAI,GAAY,EAAK,OAAO,CACxB,OAAQ,CACJ,sBAAuB,SAAU,EAAO,CACpC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAQ,EAAM,aAAa,CAAC,CAAC,KAAK,YAAY,EAClD,EAAO,SAAS,QAAU,KAAK,WAAW,IAAI,CAAG,CAAC,CAAC,GAAI,CAAE,QAAS,EAAK,CAAC,CAC5E,EACA,oCAAqC,mBACrC,6BAA8B,SAAU,EAAO,CAC3C,EAAM,eAAe,CACzB,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,GAAmB,OAAO,EAC1B,KAAK,WAAa,IAAI,GAEtB,IAAM,EAAe,CAAC,EAyBtB,GAxBA,EAAa,KAAK,KAAK,WAAW,MAAM,CAAC,EAEzC,KAAK,eAAiB,IAAI,GAAe,CACrC,WAAY,KAAK,WACjB,WAAY,IAChB,CAAC,EAED,KAAK,qBAAuB,IAAI,GAAqB,CACjD,WAAY,KAAK,WACjB,WAAY,KACZ,OAAQ,CACJ,SAAU,YACV,QAAS,gBACT,KAAM,YACV,CACJ,CAAC,EAED,KAAK,aAAe,IAAI,GAAkB,CACtC,YAAa,kBACb,MAAO,CAAC,MAAM,EACd,MAAO,SACP,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,kBAAmB,KAAK,UAAW,IAAI,EAEzCG,GAAe,EAAG,CAClB,IAAM,EAAmB,GAAe,cAAc,CAAC,CAClD,KAAM,GAAU,CACb,KAAK,WAAa,CACtB,CAAC,EACL,EAAa,KAAK,CAAgB,CACtC,CACA,KAAK,SAAW,EAAS,SAAW,YAAcA,GAAe,GACjDA,GAAe,CAAC,CAAC,IAAI,OAAO,EAE5C,EAAA,QAAE,KAAK,GAAG,CAAY,CAAC,CAClB,SAAW,CACR,KAAK,SAAS,KAAK,WAAY,YAAa,KAAK,MAAM,EACvD,KAAK,OAAO,CAChB,CAAC,CACT,EAEA,OAAQ,UAAY,CAkBhB,OAjBA,KAAK,IAAI,KAAKC,GAAiB,CAC3B,MAAO,KAAK,WAAW,QAAQ,EAC/B,YAAaD,GAAe,EAC5B,WAAY,KAAK,WACjB,WAAYE,GACZ,WAAYC,GACZ,SAAA,CACJ,CAAC,CAAC,EAEF,KAAK,eAAe,WAAW,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,OAAO,EACpE,KAAK,qBAAqB,WAAW,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,EACpE,KAAK,aAAa,WAAW,KAAK,EAAE,2BAA2B,CAAC,CAAC,CAAC,OAAO,EAErE,KAAK,UACL,KAAK,iBAAiB,EAGnB,IACX,EAMA,UAAW,SAAU,EAAQ,CACzB,IAAI,EAAO,IAAI,GACf,EAAK,IAAI,MAAO,EAAO,EAAE,CAAC,CAAC,GAAG,YAAa,UAAY,CACnD,EAAO,SAAS,QAAU,EAAK,IAAI,KAAK,EAAG,CAAE,QAAS,EAAK,CAAC,CAChE,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,EAEA,iBAAkB,UAAY,CAG1B,IAAI,GAAa,CACb,IAAA,EAAA,EAAA,QAAA,CAHc,qBAGF,EACZ,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,gBAAiB,SAAU,EAAM,CACnC,EAAO,SAAS,QAAU,EAAK,KAAK,GAAI,CAAE,QAAS,EAAK,CAAC,CAC7D,EAAG,IAAI,CAAC,CAAC,OAAO,CACpB,CACJ,CAAC,ECzHD,SAASC,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EA6BhC,OA3BD,SAAU,EAAY,EAAM,CAC3B,GAAsB,8BACxB,EAAK,eAAe,GAAK,EAAW,QACxC,GAAsB,6YAClB,EAAK,eAAe,GAAK,EAAW,QACxC,GAAsB,gDAClB,EAAK,IAAI,QAAQ,IAAM,UAC3B,GAAsB,4HAGlB,EAAK,IAAI,QAAQ,IAAM,UAC3B,GAAsB,wHAGlB,EAAK,IAAI,QAAQ,IAAM,aAC3B,GAAsB,mHAEtB,GAAsB,mHAEtB,GAAsB,eAEtB,EAAW,EAAW,yCAAwDF,GAAiC,EAAK,IAAI,WAAW,GAAK,EAAe,EAAK,IAAOA,GAAiC,EAAK,IAAI,UAAU,GAAK,EAAe,EAAK,mDAAiFA,GAAiC,EAAK,IAAI,OAAO,GAAK,EAAe,EAAK,4DACvY,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,SAAU,EACtE,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,EAAS,EACzC,CAAS,IC/BI,EAsB1B,IAAI,GAAW,EAAK,OAAO,CACvB,OAAQ,CACJ,sBAAuB,UAAY,CAC/B,IAAI,EAAU,eAAiB,KAAK,MAAM,IAAI,KAAK,EAAI,QACvD,EAAO,SAAS,EAAS,CAAE,QAAS,EAAK,CAAC,CAC9C,EAEA,wBAAyB,UAAY,CACjC,GAAQ,CACJ,KAAM,+CACA,KAAK,MAAM,OAAO,OAAO,EAAI,QACnC,QAAS,SACT,YAAa,GACb,oBAAuB,CACnB,KAAK,MAAM,GAAG,YAAa,UAAY,CACnC,EAAO,SAAS,GAAI,CAAE,QAAS,EAAK,CAAC,CACzC,CAAC,CAAC,CAAC,QAAQ,CACf,CACJ,CAAC,CACL,EAEA,yBAA0B,UAAY,CAClC,KAAK,YACD,CAAE,OAAQ,SAAU,EAAG,wBAAwB,CACvD,EAEA,yBAA0B,UAAY,CAClC,KAAK,YACD,CAAE,OAAQ,UAAW,EAAG,wBAAwB,CACxD,EAEA,wBAAyB,UAAY,CACjC,KAAK,YACD,CAAE,OAAQ,SAAU,EAAG,uBAAuB,CACtD,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,GAAmB,OAAO,EAC1B,KAAK,SAAW,EAAS,UAAY,KACrC,KAAK,OAAS,EAAS,QAAU,GACjC,KAAK,aAAe,EAAS,cAAgB,GAC7C,KAAK,aAAe,EAAS,cAAgB,GAC7C,KAAK,WAAa,EAAS,YAAc,GACzC,KAAK,WAAa,EAAS,YAAc,GAErC,EAAS,MACT,KAAK,MAAQ,EAAS,KAElB,EAAS,UACT,KAAK,OAAS,IAAI,GAClB,KAAK,OAAO,IAAI,CACZ,IAAK,EAAS,QAClB,CAAC,CAAC,CAAC,GAAG,YAAa,UAAY,CAC3B,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,GAAG,UAAW,UAAY,CAC/B,KAAK,OAAS,KACd,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,MAAM,GAEf,KAAK,OAAO,GAET,EAAS,KAChB,KAAK,MAAQ,IAAI,GACjB,KAAK,MAAM,IAAI,MAAO,EAAS,EAAE,EAEjC,KAAK,MAAM,GAAG,YAAa,UAAY,CACnC,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,MAAM,EAEvB,EAEA,OAAQ,UAAY,CA8BhB,OA7BA,KAAK,IAAI,KAAKG,GAAiB,CAC3B,KAAM,KAAK,MACX,WAAYC,EAChB,CAAC,CAAC,EAEG,KAAK,gBAaN,KAAK,gBACA,WAAW,KAAK,EAAE,6BAA6B,CAAC,CAAC,CACjD,OAAO,EAbZ,KAAK,gBAAkB,IAAIC,GAAgB,CACvC,GAAI,KAAK,EAAE,6BAA6B,EACxC,YAAa,KAAK,QAAU,KAAK,MACjC,OAAQ,KAAK,OACb,aAAc,KAAK,aACnB,WAAY,KAAK,WACjB,aAAc,KAAK,aACnB,WAAY,KAAK,WACjB,WAAY,IAChB,CAAC,EAOL,KAAK,OAAS,GACd,KAAK,aAAe,GACpB,KAAK,WAAa,GAClB,KAAK,aAAe,GACpB,KAAK,WAAa,GAEX,IACX,EAEA,YAAa,SAAU,EAAM,EAAS,CAClC,KAAK,MAAM,IAAI,CAAI,EACnB,KAAK,MAAM,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,UAAY,CAChD,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,EACN,KAAM,UACN,QAAS,GACb,CAAC,EACD,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,SAAU,EAAK,CACjD,EAAO,QAAQ,UAAW,CACtB,KAAM,SACN,KAAM,EAAI,aAAa,QACvB,KAAM,QACV,CAAC,CACL,CAAC,CAAC,CAAC,KAAK,CACZ,CACJ,EAAG,CAKC,aAAc,SAAU,EAAQ,EAAQ,CACpC,IAAI,EAAO,IAAI,GACf,EAAK,IAAI,CACL,IAAK,CACT,CAAC,CAAC,CAAC,GAAG,YAAa,UAAY,CAC3B,EAAO,QAAQ,eAAgB,GAAUC,EAAE,OAAO,CACxC,MACV,EAAG,GAAU,CAAC,CAAC,CAAC,CACpB,EAAG,IAAI,CAAC,CAAC,GAAG,UAAW,UAAY,CAC/B,EAAO,QAAQ,eAAgB,EAAS,CAC5C,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,CACJ,CAAC,EClKD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAyChC,OAvCD,SAAU,EAAY,EAAQ,EAAO,CACpC,GAAsB,uTAE1B,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAa,EAAM,GAC/B,EAAW,EAAW,OAAcH,GAAS,SAAU,EAAW,GAAI,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAW,KAAM,GAAM,EAAK,GAAK,4DAAqHC,GAAiC,EAAW,MAAQ,EAAe,EAAK,KAAQA,GAAiC,EAAW,OAAS,EAAe,EAAK,+DACnZ,GAAS,EAAW,QACxB,GAAsB,8lBAEtB,GAAsB,aAChB,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAa,EAAM,GAC7B,EAAW,EAAW,OAAcD,GAAS,SAAU,EAAW,GAAI,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAW,KAAM,GAAM,EAAK,GAAK,4DAAqHC,GAAiC,EAAW,MAAQ,EAAe,EAAK,KAAQA,GAAiC,EAAW,OAAS,EAAe,EAAK,+DACnZ,GAAS,EAAW,QACxB,GAAsB,8lBAEtB,GAAsB,aAClB,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEN,EAAO,SACb,GAAsB,mIAEtB,GAAsB,aAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,WAAY,EACxE,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,GAAW,UAAW,EAC/D,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,EAAS,EAC3C,CAAS,IC3CI,EAgB1B,IAAI,GAAoB,EAAK,OAAO,CAChC,OAAQ,CACJ,4BAA6B,SAAU,EAAG,CACtC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,oBAAoB,EACpD,EAAS,EAAG,KAAK,QAAQ,EAE7B,GAAQ,CACJ,KAAM,sCACFG,EAAE,OAAO,EAAG,KAAK,UAAU,CAAC,EAAI,uBACpC,YAAa,GACb,oBAAuB,CACnB,IAAI,EAAO,IAAI,GAAU,CAAE,IAAK,CAAO,CAAC,EACxC,KAAK,MAAM,IAAI,YAAY,CAAC,CAAC,GAAG,iBAAoB,CAChD,KAAK,QAAQ,kBAAkB,CACnC,EAAG,IAAI,CAAC,CAAC,YAAY,EAAMC,GAAW,KAAK,CAC/C,CACJ,CAAC,CACL,EAEA,yBAA0B,SAAU,EAAG,CACnC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,oBAAoB,EAExD,GAAQ,CACJ,KAAM,4DACWD,EAAE,OAAO,EAAG,KAAK,UAAU,CAAC,EAAI,QACjD,YAAa,GACb,oBAAuB,CACnB,KAAK,QAAQ,eAAgB,EAAG,KAAK,QAAQ,CAAC,CAClD,CACJ,CAAC,CACL,EAEA,+BAAgC,SAAU,EAAG,CACzC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,EAExC,GAAQ,CACJ,KAAM,uCACFA,EAAE,OAAO,EAAG,KAAK,UAAU,CAAC,EAC5B,wBACJ,YAAa,GACb,oBAAuB,CACnB,KAAK,QAAQ,iBAAkB,EAAG,KAAK,QAAQ,CAAC,CACpD,CACJ,CAAC,CACL,EAEA,wBAAyB,SAAU,EAAG,CAClC,EAAO,QAAQ,eAAgB,GAAU,CACrC,IAAA,EAAA,EAAA,QAAA,CAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,QAAQ,CACtD,CAAC,CACL,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,MAAQ,EAAS,MACtB,KAAK,OAAS,EAAS,MAC3B,EAEA,OAAQ,UAAY,CAQhB,OAPA,KAAK,IAAI,KAAKE,GAAuB,CACjC,MAAO,KAAK,MACZ,MAAO,KAAK,MAAM,IAAI,cAAc,EACpC,OAAQ,KAAK,OACb,WAAYD,EAChB,CAAC,CAAC,EAEK,IACX,CACJ,CAAC,ECrFD,SAASE,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAyChC,OAvCD,SAAU,EAAY,EAAU,EAAO,CACtC,GAAsB,gCAE1B,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAO,EAAM,GACzB,EAAW,EAAW,OAAcH,GAAS,MAAO,EAAK,IAAK,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAK,KAAK,EAAG,GAAM,EAAK,GAAK,4DAAqHC,GAAiC,EAAK,KAAK,GAAK,EAAe,EAAK,KAAQA,GAAiC,EAAK,IAAI,OAAO,GAAK,EAAe,EAAK,+DACpY,GAAS,EAAW,QACxB,GAAsB,yFAEtB,GAAsB,aAChB,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAO,EAAM,GACvB,EAAW,EAAW,OAAcD,GAAS,MAAO,EAAK,IAAK,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAK,KAAK,EAAG,GAAM,EAAK,GAAK,4DAAqHC,GAAiC,EAAK,KAAK,GAAK,EAAe,EAAK,KAAQA,GAAiC,EAAK,IAAI,OAAO,GAAK,EAAe,EAAK,+DACpY,GAAS,EAAW,QACxB,GAAsB,yFAEtB,GAAsB,aAClB,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEN,EAAS,SACf,GAAsB,wIAEtB,GAAsB,OAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,aAAc,EAC1E,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,GAAW,UAAW,EACnE,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,EAAS,EAC3C,CAAS,IC3CI,EAY1B,IAAI,GAAqB,EAAK,OAAO,CACjC,OAAQ,CACJ,0BAA2B,SAAU,EAAG,CACpC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,EAExC,GAAQ,CACJ,KAAM,yDACUG,EAAE,OAAO,EAAG,KAAK,UAAU,CAAC,EAAI,QAChD,YAAa,GACb,oBAAuB,CACnB,IAAI,EAAO,KAAK,WAAW,IAAI,EAAG,KAAK,KAAK,CAAC,EAC7C,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC,GAAG,gBAAmB,CAC9C,KAAK,WAAW,OAAO,CAAI,EAC3B,KAAK,OAAO,EACZ,KAAK,WAAW,OAAO,CAC3B,CAAC,CAAC,CAAC,aAAa,EAAK,IAAI,KAAK,CAAC,CACnC,CACJ,CAAC,CACL,EAEA,wBAAyB,SAAU,EAAG,CAClC,IAAI,EAAO,KAAK,WAAW,KAAA,EAAA,EAAA,QAAA,CAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAC3E,EAAO,SAAS,QAAU,EAAK,IAAI,KAAK,EAAG,CAAE,QAAS,EAAK,CAAC,CAChE,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,WAAa,EAAS,SAC3B,KAAK,MAAQ,EAAS,KAC1B,EAEA,OAAQ,UAAY,CAOhB,OANA,KAAK,IAAI,KAAKC,GAAwB,CAClC,MAAO,KAAK,MAAM,IAAI,cAAc,EACpC,SAAU,KAAK,WAAW,QAAQ,EAClC,WAAYC,EAChB,CAAC,CAAC,EAEK,IACX,CACJ,CAAC,ECrDD,SAASC,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAgChC,OA9BD,SAAU,EAAY,EAAO,EAAQ,EAAM,CAC1C,EAAW,EAAW,6RAAibF,GAAiC,EAAK,MAAQ,EAAe,EAAK;;oKAC3gB,IACJ,GAAsB,4HAEtB,GAAsB,qBACjB,GAAS,EAAW,QACzB,GAAsB;iLAClB,IACJ,GAAsB,kIAEtB,GAAsB,sBAEjB,GAAS,EAAW,QACzB,GAAsB;;;uIAClB,IACJ,GAAsB,kIAEtB,GAAsB,sBAEtB,GAAsB,6KAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,UAAW,EACvE,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,GAAW,WAAY,EAC9D,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,GAAW,SAAU,EAC9D,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,EAAS,EACzC,CAAS,CClCtB,SAASG,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAmDhC,OAjDD,SAAU,EAAY,EAAO,EAAS,CACrC,GAAsB,yGACxB,GAAS,EAAW,QACxB,GAAsB,sKAEtB,GAAsB,+GAEpB,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAS,EAAM,GAC3B,EAAW,EAAW,MAAcH,GAAS,MAAO,EAAO,IAAK,GAAM,EAAK,EAAK,4DAAqHC,GAAiC,EAAO,KAAK,GAAK,EAAe,EAAK,KAAQA,GAAiC,EAAO,IAAI,OAAO,GAAK,EAAe,EAAK,+DAC3V,GAAS,EAAW,QACxB,GAAsB,sgBAElB,GAAS,EAAW,QACxB,GAAsB,sGAEtB,GAAsB,aAChB,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAS,EAAM,GACzB,EAAW,EAAW,MAAcD,GAAS,MAAO,EAAO,IAAK,GAAM,EAAK,EAAK,4DAAqHC,GAAiC,EAAO,KAAK,GAAK,EAAe,EAAK,KAAQA,GAAiC,EAAO,IAAI,OAAO,GAAK,EAAe,EAAK,+DAC3V,GAAS,EAAW,QACxB,GAAsB,sgBAElB,GAAS,EAAW,QACxB,GAAsB,sGAEtB,GAAsB,aAClB,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEN,EAAQ,SACd,GAAsB,4HAEtB,GAAsB,aAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,UAAW,EACvE,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,GAAW,YAAa,EAC/D,EAAgB,QAChB,OAAO,QAAY,IAAc,QAAU,IAAA,EAAS,EAC/C,CAAS,ICrDI,EAmB1B,IAAI,GAAmB,EAAK,OAAO,CAC/B,OAAQ,CACJ,4BAA6B,UAAY,CACrC,KAAK,gBAAgBG,GAAW,IAAI,CACxC,EAEA,+BAAgC,UAAY,CACxC,KAAK,gBAAgBA,GAAW,KAAK,CACzC,EAEA,2BAA4B,UAAY,CACpC,KAAK,gBAAgBA,GAAW,KAAK,CACzC,EAEA,yBAA0B,UAAY,CAClC,KAAK,gBAAgBA,GAAW,KAAM,EAAI,CAC9C,EAEA,4BAA6B,UAAY,CACrC,KAAK,gBAAgBA,GAAW,MAAO,EAAI,CAC/C,EAEA,wBAAyB,UAAY,CACjC,KAAK,gBAAgBA,GAAW,MAAO,EAAI,CAC/C,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,MAAQ,EAAS,MACtB,KAAK,KAAO,EAAS,IACzB,EAEA,OAAQ,UAAY,CAShB,OARA,KAAK,IAAI,KAAKC,GAA0B,CACpC,MAAO,KAAK,MACZ,KAAM,KAAK,KACX,MAAO,KAAK,MAAM,IAAI,cAAc,EACpC,WAAYD,GACZ,OAAQ,KAAK,MAAM,cAAc,CACrC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,EAEb,IACX,EAEA,gBAAiB,SAAU,EAAO,EAAO,CACrC,KAAK,IAAI,MAAM,MAAM,EACrB,KAAK,QAAQ,eAAgB,CACzB,KAAM,KAAK,KACX,MAAO,KAAK,MACL,QACA,OACX,CAAC,CACL,CACJ,CAAC,EAKG,GAAqB,EAAK,OAAO,CACjC,OAAQ,CACJ,wBAAyB,SAAU,EAAG,CAClC,IAAI,EAAQ,KAAK,YAAY,KAAA,EAAA,EAAA,QAAA,CACvB,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,CAC/C,EACA,EAAO,SAAS,QAAU,EAAM,IAAI,KAAK,EAAG,CAAE,QAAS,EAAK,CAAC,CACjE,EAEA,gCAAiC,SAAU,EAAG,CAC1C,IAAI,EAAO,KAAK,YAAY,KAAA,EAAA,EAAA,QAAA,CACtB,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,CAC/C,EAEA,GAAQ,CACJ,KAAM,uCAAyCE,EAAE,OAAO,EAAK,KAAK,CAAC,EAC/D,wBACJ,YAAa,GACb,oBAAuB,CACnB,KAAK,QAAQ,iBAAkB,CAAI,CACvC,CACJ,CAAC,CACL,EAEA,6BAA8B,SAAU,EAAG,CACvC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAQ,EAAE,aAAa,CAAC,CAAC,QAAQ,qBAAqB,CAAC,CACtD,KAAK,KAAK,EACX,EAAO,KAAK,YAAY,IAAI,CAAG,EACnC,KAAK,MAAM,IAAI,YAAY,CAAC,CAAC,GAAG,aAAc,UAAY,CACtD,KAAK,QAAQ,kBAAkB,CACnC,EAAG,IAAI,CAAC,CAAC,YAAY,EAAMF,GAAW,KAAK,CAC/C,EAEA,yBAA0B,SAAU,EAAG,CACnC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAQ,EAAE,aAAa,CAAC,CAAC,QAAQ,qBAAqB,CAAC,CACtD,KAAK,KAAK,EACX,EAAO,KAAK,YAAY,IAAI,CAAG,EACnC,KAAK,MAAM,IAAI,YAAY,CAAC,CAAC,GAAG,aAAc,UAAY,CACtD,KAAK,QAAQ,cAAc,CAC/B,EAAG,IAAI,CAAC,CAAC,YAAY,EAAMA,GAAW,KAAK,CAC/C,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,MAAQ,EAAS,MACtB,KAAK,cAAgBE,EAAE,MACnBA,EAAE,MAAM,EAAS,OAAQ,IAAI,EAC7BA,EAAE,MAAM,EAAS,WAAY,IAAI,CACrC,EACA,KAAK,YAAc,IAAI,GACvB,KAAK,YAAY,OACb,SAAW,KAAK,MAAM,IAAI,KAAK,EAAI,UACvC,KAAK,YAAY,GAAG,YAAa,UAAY,CACzC,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,EAEA,OAAQ,UAAY,CAEhB,IAAK,IADD,EAAU,CAAC,EACN,EAAI,EAAG,EAAI,KAAK,YAAY,OAAO,OAAQ,GAAK,EAAG,CACxD,IAAI,EAAS,KAAK,YAAY,OAAO,GACjCC,EAAAA,QAAE,QAAQ,EAAO,GAAI,KAAK,aAAa,EAAI,GAC3C,EAAQ,KAAK,CAAM,CAE3B,CAqBA,OApBA,KAAK,IAAI,KAAKC,GAAwB,CAClC,MAAO,KAAK,MACH,UACT,MAAO,KAAK,MAAM,IAAI,cAAc,EACpC,WAAYJ,EAChB,CAAC,CAAC,EAEF,IAAI,GAAe,CACf,GAAI,KAAK,EAAE,sBAAsB,EACjC,WAAY,KAAK,YACjB,WAAY,IAChB,CAAC,CAAC,CAAC,OAAO,EAEV,KAAK,WAAa,IAAI,GAAkB,CACpC,GAAI,KAAK,EAAE,2BAA2B,EACtC,YAAa,2BACb,MAAO,CAAC,MAAM,EACd,WAAY,IAChB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,kBAAmB,KAAK,YAAa,IAAI,CAAC,CAAC,OAAO,EAEvD,IACX,EAMA,YAAa,SAAU,EAAM,CACzB,KAAK,WAAW,WAAW,EAE3B,IAAI,GAAiB,CACjB,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,MAAO,KAAK,MACN,OACN,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,eAAgB,SAAU,EAAQ,CACpC,KAAK,QAAQ,eAAgB,CAAM,CACvC,EAAG,IAAI,CAAC,CAAC,OAAO,CACpB,CACJ,CAAC,ECtLD,SAASK,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAyChC,OAvCD,SAAU,EAAY,EAAO,EAAY,CACxC,GAAsB,wOAE1B,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAa,EAAM,GAC/B,EAAW,EAAW,OAAcH,GAAS,SAAU,EAAW,GAAI,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAW,KAAM,GAAM,EAAK,GAAK,4DAAqHC,GAAiC,EAAW,MAAQ,EAAe,EAAK,KAAQA,GAAiC,EAAW,OAAS,EAAe,EAAK,+DACnZ,GAAS,EAAW,QACxB,GAAsB,0RAEtB,GAAsB,aAChB,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAa,EAAM,GAC7B,EAAW,EAAW,OAAcD,GAAS,SAAU,EAAW,GAAI,GAAM,EAAK,EAAEA,GAAS,WAAY,EAAW,KAAM,GAAM,EAAK,GAAK,4DAAqHC,GAAiC,EAAW,MAAQ,EAAe,EAAK,KAAQA,GAAiC,EAAW,OAAS,EAAe,EAAK,+DACnZ,GAAS,EAAW,QACxB,GAAsB,0RAEtB,GAAsB,aAClB,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEN,EAAW,SACjB,GAAsB,+HAEtB,GAAsB,aAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,UAAW,EACvE,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,GAAW,eAAgB,EAClE,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,IC3CI,EAc1B,IAAI,GAAkB,EAAK,OAAO,CAC9B,OAAQ,CACJ,6BAA8B,SAAU,EAAG,CAEvC,IAAI,EAAO,IAAI,GAAU,CAAE,KAAA,EAAA,EAAA,QAAA,CADZ,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,QACd,CAAE,CAAC,EACxC,KAAK,MAAM,IAAI,YAAY,CAAC,CAAC,GAAG,aAAc,UAAY,CACtD,KAAK,QAAQ,cAAc,CAC/B,EAAG,IAAI,CAAC,CAAC,YAAY,EAAMG,GAAW,KAAK,CAC/C,EAEA,4BAA6B,SAAU,EAAG,CACtC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,EAExC,GAAQ,CACJ,KAAM,gEACWC,EAAE,OAAO,EAAG,KAAK,UAAU,CAAC,EAAI,QACjD,YAAa,GACb,oBAAuB,CACnB,KAAK,QAAQ,eAAgB,EAAG,KAAK,QAAQ,CAAC,CAClD,CACJ,CAAC,CACL,EAEA,6BAA8B,SAAU,EAAG,CACvC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,EAExC,GAAQ,CACJ,KAAM,uCACFA,EAAE,OAAO,EAAG,KAAK,UAAU,CAAC,EAC5B,wBACJ,YAAa,GACb,oBAAuB,CACnB,KAAK,QAAQ,iBAAkB,EAAG,KAAK,QAAQ,CAAC,CACpD,CACJ,CAAC,CACL,EAEA,wBAAyB,SAAU,EAAG,CAClC,EAAO,QAAQ,eAAgB,GAAU,CACrC,IAAA,EAAA,EAAA,QAAA,CAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,QAAQ,CACtD,CAAC,CACL,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,MAAQ,EAAS,MACtB,KAAK,WAAa,EAAS,UAC/B,EAEA,OAAQ,UAAY,CAQhB,OAPA,KAAK,IAAI,KAAKC,GAAqB,CAC/B,MAAO,KAAK,MACZ,MAAO,KAAK,MAAM,IAAI,cAAc,EACpC,WAAY,KAAK,WACjB,WAAYF,EAChB,CAAC,CAAC,EAEK,IACX,CACJ,CAAC,EC1ED,SAASG,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAwGhC,OAtGD,SAAU,EAAY,EAAgB,EAAO,EAAS,EAAW,EAAU,EAAa,EAAa,CACpG,GAAsB,kEACvB,GAAY,GAAa,EAAe,GAAK,EAAM,IAAI,cAAc,GAAK,EAAW,SAC1F,GAAsB,qQACjB,EACL,GAAsB,kHAGjB,EACL,GAAsB,gHAGjB,EAAe,IACpB,GAAsB,oIAEjB,EAAM,IAAI,cAAc,GAAK,EAAW,QAC7C,GAAsB,6JAEjB,EAAM,IAAI,cAAc,GAAK,EAAW,QAC7C,GAAsB,kKAEtB,GAAsB,SAEtB,EAAW,EAAW,gDAA8EF,GAAiC,EAAM,KAAK,GAAK,EAAe,EAAK,0DAAwFA,GAAiC,EAAM,IAAI,aAAa,GAAK,EAAe,EAAK,gDAC7U,EAAe,IACf,GACL,GAAsB,yEACjB,EACL,GAAsB,kDAGjB,EACL,GAAsB,6CAGtB,GAAsB,0CAEtB,GAAsB,UAGjB,EACL,GAAsB,kKAGjB,EACL,GAAsB,qIAGtB,GAAsB,0LAEjB,EAAM,IAAI,cAAc,GAAK,EAAW,OAAS,CAAC,IACvD,GAAsB,4HAGtB,GAAsB,kyBAEpB,UAAU,CACV,IAAI,EAAQ,EAAM,IAAI,UAAU,EAChC,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAO,EAAM,GACzB,EAAW,EAAW,MAAcD,GAAS,SAAU,EAAK,GAAI,GAAM,EAAK,EAAK,uDAAsGC,GAAiC,EAAK,MAAQ,EAAe,EAAK,KAAQA,GAAiC,EAAK,OAAS,EAAe,EAAK,wDAC/T,EAAM,IAAI,cAAc,GAAK,EAAW,QAC5C,GAAsB,sLAEtB,GAAsB,aAChB,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAO,EAAM,GACvB,EAAW,EAAW,MAAcD,GAAS,SAAU,EAAK,GAAI,GAAM,EAAK,EAAK,uDAAsGC,GAAiC,EAAK,MAAQ,EAAe,EAAK,KAAQA,GAAiC,EAAK,OAAS,EAAe,EAAK,wDAC/T,EAAM,IAAI,cAAc,GAAK,EAAW,QAC5C,GAAsB,sLAEtB,GAAsB,aAClB,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEN,EAAM,IAAI,UAAU,CAAC,CAAC,SAC5B,GAAsB,yIAEtB,GAAsB,gOAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,mBAAoB,EAChF,EAAgB,eAChB,OAAO,eAAmB,IAAc,eAAiB,IAAA,GAAW,UAAW,EAC/E,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,GAAW,YAAa,EAC/D,EAAgB,QAChB,OAAO,QAAY,IAAc,QAAU,IAAA,GAAW,cAAe,EACrE,EAAgB,UAChB,OAAO,UAAc,IAAc,UAAY,IAAA,GAAW,aAAc,EACxE,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,GAAW,gBAAiB,EACzE,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,gBAAiB,EAC/E,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,EAAS,EACvD,CAAS,IC1GI,EA4B1B,IAAI,GAAY,EAAK,OAAO,CACxB,OAAQ,CACJ,sBAAuB,YACvB,sBAAuB,YACvB,uBAAwB,aACxB,wBAAyB,cACzB,gCAAiC,oBACjC,gCAAiC,0BACjC,8BAA+B,wBAE/B,6CAA8C,SAAU,EAAG,CACvD,IAAI,GAAA,EAAA,EAAA,QAAA,CAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,QAAQ,EAC3D,EAAO,SAAS,QAAU,EAAQ,CAAE,QAAS,EAAK,CAAC,CACvD,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,GAAmB,OAAO,EAC1B,KAAK,IAAM,EAAS,KAAO,QAC3B,KAAK,KAAO,EAAS,MAAQ,GAGzB,EAAS,OACT,KAAK,MAAQ,EAAS,MACtB,KAAK,MAAM,GAAG,kBAAmB,UAAY,CACzC,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,YAAY,GACd,EAAS,KAChB,KAAK,MAAQ,IAAI,GACjB,KAAK,MAAM,IAAI,MAAO,EAAS,EAAE,EAEjC,KAAK,MAAM,GAAG,YAAa,UAAY,CACnC,KAAK,MAAM,GAAG,kBAAmB,UAAY,CACzC,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,YAAY,CACzB,EAAG,IAAI,CAAC,CAAC,MAAM,EAEvB,EAEA,UAAW,UAAY,CACnB,IAAI,GAAA,EAAA,EAAA,QAAA,CAAc,qBAAqB,EAEvC,AACI,KAAK,kBAAkB,IAAI,GAAgB,CACvC,GAAI,EACJ,MAAO,KAAK,MACZ,WAAY,IAChB,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,UAAY,CACxC,KAAK,OAAO,CAChB,EAAG,IAAI,EAEX,KAAK,gBAAgB,OAAO,CAChC,EAEA,YAAa,UAAY,CACrB,GAAQ,CACJ,KAAM,gDACF,KAAK,MAAM,OAAO,MAAM,EAAI,QAChC,YAAa,GACb,oBAAuB,CACnB,KAAK,MAAM,GAAG,YAAa,UAAY,CACnC,EAAO,SAAS,SAAU,CAAE,QAAS,EAAK,CAAC,CAC/C,CAAC,CAAC,CAAC,QAAQ,CACf,CACJ,CAAC,CACL,EAEA,OAAQ,UAAY,CAmGhB,MAlGA,MAAK,SAAW,GAChB,KAAK,UAAY,GACjB,KAAK,YAAc,GACnB,KAAK,YAAc,GACnB,KAAK,QAAU,GAEXG,GAAe,IACf,EAAE,MAAMA,GAAe,CAAC,CAAC,IAAI,QAAQ,EAAG,SAAU,EAAS,CAKvD,OAJI,IAAY,KAAK,MAAM,IAAI,KAAK,GAChC,KAAK,SAAW,GACT,IAEJ,EACX,EAAG,IAAI,EAEP,EAAE,MAAMA,GAAe,CAAC,CAAC,IAAI,cAAc,EAAG,SAAU,EAAK,CAKzD,OAJI,EAAI,UAAY,KAAK,MAAM,IAAI,KAAK,GACpC,KAAK,UAAY,GACV,IAEJ,EACX,EAAG,IAAI,EAEP,EAAE,MAAM,KAAK,MAAM,IAAI,UAAU,GAAK,CAAC,EAAG,SAAU,EAAM,CAKtD,OAJI,EAAK,KAAOA,GAAe,CAAC,CAAC,IAAI,KAAK,GACtC,KAAK,YAAc,GACZ,IAEJ,EACX,EAAG,IAAI,GAGP,KAAK,UACL,EAAE,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,CAAC,OAAS,CAAC,EAAG,SAAU,EAAQ,CAS5D,OARI,EAAO,KAAOA,GAAe,CAAC,CAAC,IAAI,KAAK,GACpC,EAAO,QAAUC,GAAW,MAC5B,KAAK,YAAc,GACZ,EAAO,QAAUA,GAAW,QACnC,KAAK,QAAU,IAEZ,IAEJ,EACX,EAAG,IAAI,EAEX,KAAK,IAAI,KAAKC,GAAkB,CAC5B,MAAO,KAAK,MACZ,eAAgBF,GAChB,WAAYC,GACZ,UAAW,KAAK,UAChB,YAAa,KAAK,YAClB,SAAU,KAAK,SACf,YAAa,KAAK,YAClB,QAAS,KAAK,OAClB,CAAC,CAAC,EAEE,KAAK,SACL,KAAK,qBAAqB,GAG1B,IAAI,GAAiB,CACjB,GAFY,KAAK,EAAE,uBAEP,EACZ,WAAY,IAChB,CAAC,CAAC,CAAC,OAAO,EAEV,KAAK,SAAW,IAAI,GACpB,KAAK,SAAS,OACV,SAAW,KAAK,MAAM,IAAI,KAAK,EAAI,cACvC,KAAK,SAAS,GAAG,gBAAmB,CAChC,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,CAC7B,EAAG,IAAI,CAAC,CAAC,MAAM,GAGnB,KAAK,kBAAkB,EAEvB,EAAO,SAAS,SAAW,KAAK,MAAM,IAAI,KAAK,EAAI,IAC5B,KAAK,IAAK,CAAE,QAAS,EAAK,CAAC,EAElD,AAII,KAAK,QAHD,KAAK,MAAM,IAAI,cAAc,GAAKA,GAAW,OAC7C,KAAK,UAAU,EAEP,IAGhB,EAAE,MAAA,EAAA,EAAA,QAAA,CAAO,oBAAoB,EAAI,GAAO,CACpC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAY,CAAE,EAClB,EAAQ,IAAI,CAAC,CAAC,GAAG,eAAiB,GAAM,CACpC,KAAK,KAAA,EAAA,EAAA,QAAA,CAAQ,EAAE,aAAa,CAAC,CAAC,KAAK,MAAM,EACzC,EAAO,SAAS,SAAW,KAAK,MAAM,IAAI,KAAK,EAAI,IAAM,KAAK,GAAG,CACrE,CAAC,EAEG,EAAQ,KAAK,MAAM,IAAM,KAAK,KAC9B,EAAQ,IAAI,MAAM,CAE1B,CAAC,EAEM,IACX,EAEA,qBAAsB,UAAY,CAC9B,IAAI,GAAmB,CACnB,GAAI,KAAK,EAAE,uBAAuB,EAClC,SAAU,KAAK,SACf,MAAO,KAAK,MACZ,WAAY,IAChB,CAAC,CAAC,CAAC,OAAO,EACV,KAAK,oBAAoB,CAC7B,EAEA,oBAAqB,UAAY,CAC7B,IAAI,EAAQ,KAAK,SAAS,OACtB,KAAK,MAAM,IAAI,UAAU,CAAC,CAAC,QAC/B,EAAA,EAAA,QAAA,CAAE,6BAA6B,CAAC,CAAC,KAAK,KAAO,EAAQ,GAAG,CAC5D,EAEA,UAAW,UAAY,CACnB,KAAK,MAAM,IAAI,UAAU,CAAC,CAAC,GAAG,WAAY,UAAY,CAClD,KAAK,SAAS,MAAM,KAAM,EAAI,CAClC,EAAG,IAAI,CAAC,CAAC,UAAU,CACvB,EAEA,WAAY,UAAY,CACpB,GAAQ,CACJ,KAAM,6CACN,oBAAuB,CACnB,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC,GAAG,gBAAmB,CAC9C,KAAK,OAAO,CAChB,CAAC,CAAC,CAAC,aAAaD,GAAe,CAAC,CAAC,IAAI,KAAK,CAAC,CAC/C,CACJ,CAAC,CACL,EAEA,aAAc,SAAU,EAAM,CAC1B,IAAI,EAAK,EACLG,EAAAA,QAAE,KAAK,CAAI,IAAM,WACjB,EAAK,EAAK,IAAI,KAAK,GAEvB,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC,GAAG,YAAa,UAAY,CACpD,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,aAAa,CAAE,CAC5B,EAEA,kBAAmB,UAAY,CAC3B,KAAK,MAAM,IAAI,mBAAmB,CAAC,CAAC,GAAG,oBAAqB,UAAY,CACpE,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,kBAAkB,CAC/B,EAEA,wBAAyB,SAAU,EAAG,CAClC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,QAAQ,EAC3D,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC,GAAG,YAAa,KAAK,OAAQ,IAAI,CAAC,CACzD,eAAe,EAAQF,GAAW,KAAM,EAAI,CACrD,EAEA,sBAAuB,SAAU,EAAG,CAChC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,QAAQ,EAC3D,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC,GAAG,YAAa,KAAK,OAAQ,IAAI,CAAC,CACzD,aAAa,CAAM,CAC5B,EAEA,kBAAmB,UAAY,CAC3B,IAAI,EAAO,CAAC,EACR,EAAS,CAAC,EAEd,EAAE,KAAK,KAAK,MAAM,IAAI,QAAQ,CAAC,CAAC,MAAO,SAAU,EAAY,CACrD,EAAW,QAAUA,GAAW,MAChC,EAAK,KAAK,CAAU,EACb,EAAW,QAAUA,GAAW,OACvC,EAAO,KAAK,CAAU,CAE9B,EAAG,IAAI,EAEP,KAAK,aAAe,IAAI,GAAkB,CACtC,GAAI,KAAK,EAAE,2BAA2B,EACtC,MAAO,KAAK,MACJ,SACR,WAAY,IAChB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,eAAgB,SAAU,EAAQ,CAC1C,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC,GAAG,YAAa,KAAK,OAAQ,IAAI,CAAC,CACzD,WAAW,EAAQA,GAAW,KAAK,CAC5C,EAAG,IAAI,CAAC,CAAC,GAAG,iBAAkB,KAAK,aAAc,IAAI,CAAC,CACjD,GAAG,mBAAoB,KAAK,OAAQ,IAAI,CAAC,CACzC,OAAO,EAEZ,KAAK,WAAa,IAAI,GAAgB,CAClC,GAAI,KAAK,EAAE,yBAAyB,EACpC,MAAO,KAAK,MACZ,WAAY,EACZ,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,eAAgB,SAAU,EAAQ,CACpC,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC,GAAG,YAAa,KAAK,OAAQ,IAAI,CAAC,CACzD,WAAW,EAAQA,GAAW,KAAK,CAC5C,EAAG,IAAI,CAAC,CAAC,GAAG,iBAAkB,KAAK,aAAc,IAAI,CAAC,CACjD,GAAG,eAAgB,KAAK,OAAQ,IAAI,CAAC,CACrC,OAAO,EAEZ,KAAK,cAAgB,IAAI,GAAmB,CACxC,GAAI,KAAK,EAAE,4BAA4B,EACvC,MAAO,KAAK,MACJ,SACR,WAAY,EACZ,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,eAAgB,SAAU,EAAQ,CACpC,IAAI,EAAO,CACP,MAAO,EAAO,OAAS,EAC3B,EACA,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC,GAAG,YAAa,UAAY,CACpD,KAAK,SAAS,MAAM,KAAM,EAAI,EAC1B,EAAO,OACP,KAAK,MAAM,YAAY,CAE/B,EAAG,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,SAAU,EAAK,CACjD,EAAO,QAAQ,UAAW,CACtB,KAAM,EAAI,aAAa,QACvB,KAAM,SACV,CAAC,CACL,EAAG,IAAI,CAAC,CAAC,eAAe,EAAO,KAAK,GAAI,EAAO,MAAO,GAAO,CAAI,CACrE,EAAG,IAAI,CAAC,CAAC,GAAG,iBAAkB,KAAK,aAAc,IAAI,CAAC,CACjD,GAAG,mBAAoB,KAAK,OAAQ,IAAI,CAAC,CACzC,GAAG,eAAgB,KAAK,OAAQ,IAAI,CAC7C,CACJ,EAAG,CAKC,aAAc,SAAU,EAAS,EAAQ,CACrC,IAAI,EAAQ,IAAI,GAChB,EAAM,IAAI,CAAE,IAAK,CAAQ,CAAC,CAAC,CAAC,KAAK,YAAa,UAAY,CACtD,EAAO,QAAQ,eAAgB,GAAWG,EAAE,OAAO,CACxC,OACX,EAAG,GAAU,CAAC,CAAC,CAAC,CACpB,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,CACJ,CAAC,EC7UD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAOhC,OALD,SAAU,EAAM,CACf,EAAW,EAAW,kYAA6jB,uFAAkGH,GAAS,QAAS,EAAK,KAAK,EAAG,GAAM,EAAK,GAAK,yGAAkL,2FAAsGA,GAAS,QAAS,EAAK,IAAI,UAAU,EAAG,GAAM,EAAK,GAAK,gSACtjC,EAAA,CAAE,KAAK,KAAM,SAAU,EACnB,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,EAAS,EACzC,CAAS,CCCtB,IAAI,GAAiB,EAAK,OAAO,CAC7B,OAAQ,CACJ,2BAA4B,UAAY,CACpC,IAAI,EAAS,CACT,KAAM,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,EAC5B,SAAU,KAAK,EAAE,aAAa,CAAC,CAAC,IAAI,CACxC,EAeA,OAbA,KAAK,KAAK,IAAI,CAAM,EACpB,KAAK,KAAK,IAAI,KAAM,KAAM,IAAI,CAAC,CAAC,GAAG,UAAW,UAAY,CACtD,KAAK,IAAI,MAAM,MAAM,EACrB,KAAK,QAAQ,UAAW,KAAK,IAAI,CACrC,EAAG,IAAI,CAAC,CAAC,GAAG,UAAW,SAAU,EAAK,CAClC,KAAK,EAAE,8BAA8B,CAAC,CAAC,KAAK,EAAI,aAAa,OAAO,EACpE,KAAK,EAAE,oBAAoB,CAAC,CAAC,aAAa,EAAI,EAC9C,KAAK,EAAE,MAAQ,EAAI,aAAa,KAAK,CAAC,CAAC,QAAQ,OAAO,CAC1D,EAAG,IAAI,CAAC,CAAC,KAAK,EAEd,KAAK,EAAE,oBAAoB,CAAC,CAAC,aAAa,EAAK,EAC/C,KAAK,EAAE,8BAA8B,CAAC,CAAC,MAAM,EAEtC,EACX,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,KAAO,EAAS,MAAQ,IACjC,EAEA,OAAQ,UAAY,CAWhB,OAVI,KAAK,KAAK,IAAI,UAAU,IAAM,IAAA,IAC9B,KAAK,KAAK,IAAI,WAAY,EAAE,EAEhC,KAAK,IAAI,KAAKI,GAAuB,CAAE,KAAM,KAAK,IAAK,CAAC,CAAC,CAAC,CACrD,YAAY,IAAI,CAAC,CAAC,GAAG,qBAAwB,CAC1C,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,QAAQ,OAAO,CACvD,CAAC,CAAC,CAAC,GAAG,sBAAyB,CAC3B,GAAY,WAAY,IAAA,GAAW,KAAK,KAAK,IAAI,KAAK,CAAC,CAC3D,CAAC,EACL,GAAW,WAAY,IAAA,GAAW,KAAK,KAAK,IAAI,KAAK,CAAC,EAC/C,IACX,CACJ,CAAC,ECrDD,SAASC,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAehC,OAbD,SAAU,EAAa,EAAM,EAAY,CACxC,EAAW,EAAW,8QAAgaF,GAAiC,EAAK,KAAK,GAAK,EAAe,EAAK,8JAAyRA,GAAiC,UAA6B,EAAK,oCAAkEA,GAAiC,EAAW,EAAK,IAAI,SAAS,EAAG,CAAW,GAAK,EAAe,EAAK,6IAA4PA,IAAiC,EAAK,IAAI,UAAU,GAAK,YAAa,EAAe,EAAK,gBACr1C,EAAK,IAAI,MAAM,IACnB,EAAW,EAAW,sHAAuMA,GAAiC,EAAK,IAAI,MAAM,GAAK,EAAe,EAAK,uBAEtS,EAAW,EAAW,2HAA4MA,GAAiC,EAAK,IAAM,EAAe,EAAK,0IAC9R,EAAA,CAAE,KAAK,KAAM,gBAAiB,EAC1B,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,SAAU,EACxE,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,GAAW,eAAgB,EAChE,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,CCPtB,IAAI,GAAiB,EAAK,OAAO,CAC7B,WAAY,SAAU,EAAU,CAC5B,KAAK,WAAa,EAAS,UAC/B,EAEA,OAAQ,UAAY,CAMhB,OALA,KAAK,IAAI,KAAKG,GAAuB,CACjC,KAAM,KAAK,MACX,WAAYC,GACZ,YAAA,CACJ,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,EACb,IACX,CACJ,CAAC,ECvBD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAmEhC,OAjED,SAAU,EAAY,EAAO,EAAY,EAAS,EAAY,CAC7D,GAAsB,4BAE1B,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAO,EAAM,GACzB,EAAW,EAAW,oCAAuD,4BAA8BH,GAAS,MAAO,EAAK,IAAK,GAAM,EAAK,EAAE,yBAA2BA,GAAS,SAAU,EAAK,IAAI,SAAS,EAAI,SAAW,QAAS,GAAM,EAAK,EAAEA,GAAS,OAAQ,EAAK,YAAY,EAAG,GAAM,EAAK,EAAE,8BAAkC,IACvU,EAAK,IAAI,SAAS,EACtB,EAAW,EAAW,sDAAgGC,GAAiC,EAAK,KAAK,GAAK,EAAe,EAAK,uCAG1L,GAAuB,+BAA6DA,GAAiC,EAAK,KAAK,GAAK,EAAe,EAEnJ,EAAW,EAAW,UAAgC,2FAAsGD,GAAS,OAAQ,EAAK,YAAY,CAAC,mBAAoB,QAAQ,CAAC,EAAG,GAAM,EAAK,GAAK,mCAAyF,uBAAyBA,GAAS,WAAY,EAAK,IAAK,GAAM,EAAK,EAAE,sBAA0B,iCACna,EAAK,IAAI,MAAM,IACnB,EAAW,EAAW,4BAA2CC,GAAiC,EAAW,EAAK,IAAI,MAAM,CAAC,GAAK,EAAe,EAAK,UAEtJ,EAAW,EAAW,QAAe,oCAAsCD,GAAS,WAAY,EAAK,IAAK,GAAM,EAAK,GAAK,IACtH,GAAc,EAAW,IAAI,cAAc,GAAK,EAAW,QAC/D,GAAsB,uPAEtB,GAAsB,aAChB,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAO,EAAM,GACvB,EAAW,EAAW,oCAAuD,4BAA8BA,GAAS,MAAO,EAAK,IAAK,GAAM,EAAK,EAAE,yBAA2BA,GAAS,SAAU,EAAK,IAAI,SAAS,EAAI,SAAW,QAAS,GAAM,EAAK,EAAEA,GAAS,OAAQ,EAAK,YAAY,EAAG,GAAM,EAAK,EAAE,8BAAkC,IACvU,EAAK,IAAI,SAAS,EACtB,EAAW,EAAW,sDAAgGC,GAAiC,EAAK,KAAK,GAAK,EAAe,EAAK,uCAG1L,GAAuB,+BAA6DA,GAAiC,EAAK,KAAK,GAAK,EAAe,EAEnJ,EAAW,EAAW,UAAgC,2FAAsGD,GAAS,OAAQ,EAAK,YAAY,CAAC,mBAAoB,QAAQ,CAAC,EAAG,GAAM,EAAK,GAAK,mCAAyF,uBAAyBA,GAAS,WAAY,EAAK,IAAK,GAAM,EAAK,EAAE,sBAA0B,iCACna,EAAK,IAAI,MAAM,IACnB,EAAW,EAAW,4BAA2CC,GAAiC,EAAW,EAAK,IAAI,MAAM,CAAC,GAAK,EAAe,EAAK,UAEtJ,EAAW,EAAW,QAAe,oCAAsCD,GAAS,WAAY,EAAK,IAAK,GAAM,EAAK,GAAK,IACtH,GAAc,EAAW,IAAI,cAAc,GAAK,EAAW,QAC/D,GAAsB,uPAEtB,GAAsB,aAClB,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAER,IACJ,GAAsB,mHAEtB,GAAsB,OAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,UAAW,EACvE,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,GAAW,eAAgB,EAClE,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,YAAa,EACzE,EAAgB,QAChB,OAAO,QAAY,IAAc,QAAU,IAAA,GAAW,eAAgB,EACtE,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,CCrDtB,IAAI,GAAiB,EAAK,OAAO,CAC7B,OAAQ,CACJ,4BAA6B,UAAY,CACrC,KAAK,WAAW,cAAc,CAClC,EAEA,sBAAuB,SAAU,EAAG,CAChC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAQ,EAAE,aAAa,CAAC,CAAC,KAAK,UAAU,EAC5C,IAAI,GAAe,CACf,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,MAAO,KAAK,WAAW,IAAI,CAAG,EAC9B,WAAY,KAAK,WACjB,WAAY,IAChB,CAAC,CAAC,CAAC,OAAO,CACd,EAEA,4BAA6B,SAAU,EAAG,CACtC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAQ,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,UAAU,EACrD,KAAK,aAAa,CAAG,CACzB,EAEA,wBAAyB,SAAU,EAAG,CAClC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAQ,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,UAAU,EACrD,KAAK,eAAe,CAAG,CAC3B,EAEA,wBAAyB,SAAU,EAAG,CAClC,IAAI,GAAA,EAAA,EAAA,QAAA,CAAQ,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,UAAU,EACjD,EAAO,KAAK,WAAW,IAAI,CAAG,EAElC,GAAQ,CACJ,KAAM,+CACA,EAAK,OAAO,MAAM,EAAI,QAC5B,QAAS,SACT,YAAa,GACb,oBAAuB,CACnB,EAAK,KAAK,YAAa,UAAY,CAC/B,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,UACN,KAAM,gBACN,QAAS,GACb,CAAC,EAED,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,KAAK,UAAW,UAAY,CACjC,EAAO,QAAQ,UAAW,CACtB,KAAM,SACN,KAAM,yBACN,KAAM,SACN,QAAS,GACb,CAAC,CACL,CAAC,CAAC,CAAC,QAAQ,CACf,CACJ,CAAC,CACL,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,OAAS,EAAS,OACvB,KAAK,SAAW,EAAS,SACzB,KAAK,QAAU,CAAC,EAChB,KAAK,WAAa,IAAI,GACtB,KAAK,WAAW,OAAS,SACpB,EAAS,QAAU,EAAS,KAAK,IAAI,KAAK,GAAK,SACpD,KAAK,WAAW,OAAS,GACzB,KAAK,WAAW,GAAG,YAAa,UAAY,CACxC,KAAK,OAAO,EACZ,KAAK,QAAQ,WAAW,CAC5B,EAAG,IAAI,CAAC,CAAC,MAAM,EAEf,KAAK,WAAa,EAAS,IAC/B,EAEA,eAAgB,SAAU,EAAK,CAC3B,KAAK,eAAiB,IAAI,GAAe,CACrC,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,KAAM,KAAK,WAAW,IAAI,CAAG,EAC7B,WAAY,IAChB,CAAC,CAAC,CAAC,IAAI,UAAW,KAAM,IAAI,CAAC,CAAC,GAAG,UAAW,UAAY,CACpD,KAAK,OAAO,CAChB,EAAG,IAAI,EACP,KAAK,eAAe,OAAO,CAC/B,EAEA,aAAc,SAAU,EAAK,CACzB,IAAI,GAAa,CACb,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,MAAO,wBACP,OAAQ,KAAK,WAAW,IAAI,CAAG,EAC/B,WAAY,OACZ,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,mBAAoB,UAAY,CAClC,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,yBACN,KAAM,UACN,QAAS,GACb,CAAC,CACL,EAAG,IAAI,CAAC,CAAC,OAAO,CACpB,EAEA,OAAQ,UAAY,CAkBhB,MAjBA,MAAK,QAAU,CAAC,EAChB,KAAK,IAAI,KAAKI,GAAiB,CAC3B,MAAO,KAAK,WAAW,QAAQ,EAC/B,QAAS,KAAK,WAAW,YAAY,EACrC,WAAYC,GACZ,WAAYC,GACZ,WAAY,KAAK,UACrB,CAAC,CAAC,EAEE,KAAK,UACL,KAAK,eAAe,KAAK,QAAQ,EACjC,KAAK,SAAW,IACb,AAEH,KAAK,UADL,KAAK,aAAa,KAAK,MAAM,EACf,IAGX,IACX,EAKA,WAAY,SAAU,EAAM,CACxB,KAAK,WAAW,IAAI,CAAI,EACxB,KAAK,OAAO,EACZ,KAAK,QAAQ,WAAW,CAC5B,CACJ,CAAC,ECpJD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAgDhC,OA9CD,SAAU,EAAa,CACtB,GAAsB,2BAE1B,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAS,EAAM,GAC3B,EAAW,EAAW,UAA2B,kCAAoCH,GAAS,UAAW,EAAO,OAAO,IAAK,GAAM,EAAK,EAAEA,GAAS,YAAa,EAAO,KAAM,GAAM,EAAK,GAAK,IACvL,EAAO,OAAS,OACrB,GAAuB,4BAA0DC,GAAiC,EAAO,OAAO,OAAS,EAAe,EAGnJ,EAAO,OAAS,aACrB,GAAuB,+BAA6DA,GAAiC,EAAO,OAAO,MAAQ,EAAe,EAG1J,GAAuBA,GAAiC,EAAO,OAAO,MAAQ,EAAe,EAE7F,GAAsB,WAChB,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAS,EAAM,GACzB,EAAW,EAAW,UAA2B,kCAAoCD,GAAS,UAAW,EAAO,OAAO,IAAK,GAAM,EAAK,EAAEA,GAAS,YAAa,EAAO,KAAM,GAAM,EAAK,GAAK,IACvL,EAAO,OAAS,OACrB,GAAuB,4BAA0DC,GAAiC,EAAO,OAAO,OAAS,EAAe,EAGnJ,EAAO,OAAS,aACrB,GAAuB,+BAA6DA,GAAiC,EAAO,OAAO,MAAQ,EAAe,EAG1J,GAAuBA,GAAiC,EAAO,OAAO,MAAQ,EAAe,EAE7F,GAAsB,WAClB,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEZ,GAAsB,kIAClB,EAAA,CAAE,KAAK,KAAM,gBAAiB,EAC1B,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,EAAS,EACvD,CAAS,CCzCtB,IAAI,GAAuB,EAAK,OAAO,CACnC,OAAQ,CACJ,iCAAkC,SAAU,EAAO,CAC/C,IAAI,GAAA,EAAA,EAAA,QAAA,CAAS,EAAM,aAAa,EAChC,EAAO,SAAS,EAAK,KAAK,MAAM,EAAI,IAAM,EAAK,KAAK,IAAI,EACpD,CAAE,QAAS,EAAK,CAAC,CACzB,EACA,+BAAgC,UAAY,CACxC,IAAI,EAAS,KAAK,YAAY,IAAI,CAAC,CAAC,OACpC,EAAO,SAAS,UAAY,EAAO,IAAK,CAAE,QAAS,EAAK,CAAC,CAC7D,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,YAAc,EAAS,YAC5B,KAAK,OAAO,CAChB,EAEA,OAAQ,UAAY,CAKhB,OAJA,KAAK,IAAI,KAAKG,GAAuB,CACjC,YAAa,KAAK,WACtB,CAAC,CAAC,EAEK,IACX,CACJ,CAAC,ECnCD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAkChC,OAhCD,SAAU,EAAY,EAAa,EAAa,EAAY,EAAY,EAAM,EAAgB,CAC7F,GAAsB,qGACvB,GAAe,EAAW,QAC/B,GAAsB,iIAEtB,EAAW,EAAW,kUAAoc,2CAAkDH,GAAS,OAAQ,EAAK,YAAY,EAAG,GAAM,EAAK,GAAK,uDAC5jB,GAAe,EAAW,QAC/B,GAAsB,uTAEtB,EAAW,EAAW,0DAAsHC,GAAiC,EAAK,KAAK,GAAK,EAAe,EAAK,gDAAkH,EAAe,EAAK,IAAI,aAAa,CAAC,GAAK,IAAmB,wKAChY,AAIA,EAJI,EAAK,IAAI,MAAM,EAAI,KACZ,EAAYA,GAAiC,EAAK,IAAI,MAAM,GAAK,EAAe,EAAK,SAGrF,EAAYA,GAAiC,EAAW,EAAK,IAAI,MAAM,CAAC,GAAK,EAAe,EAAK,KAAQA,GAAiC,EAAK,IAAI,MAAM,GAAK,EAAe,EAAK,UAE7L,EAAW,EAAW,4FAAqJA,GAAiC,EAAW,EAAK,IAAI,SAAS,EAAG,CAAW,GAAK,EAAe,EAAK,4FAAqJA,GAAiC,EAAW,EAAK,IAAI,SAAS,EAAG,CAAW,GAAK,EAAe,EAAK,uFAAgJA,GAAiC,EAAK,IAAM,EAAe,EAAK,6MACttB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,gBAAiB,EAC7E,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,gBAAiB,EAC/E,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,GAAW,eAAgB,EAC9E,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,eAAgB,EAC5E,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,GAAW,SAAU,EACtE,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,GAAW,mBAAoB,EACpE,EAAgB,eAChB,OAAO,eAAmB,IAAc,eAAiB,IAAA,EAAS,EAC7D,CAAS,ICpCI,EAyB1B,IAAI,GAAW,EAAK,OAAO,CACvB,OAAQ,CACJ,qBAAsB,WACtB,uBAAwB,aACxB,4BAA6B,gBACjC,EAEA,WAAY,SAAU,EAAU,CAC5B,GAAmB,OAAO,EAC1B,KAAK,KAAO,EAAS,MAAQ,GAC7B,KAAK,SAAW,EAAS,UAAY,GACrC,KAAK,OAAS,EAAS,QAAU,GAG7B,EAAS,MACT,KAAK,MAAQ,EAAS,KACtB,KAAK,OAAO,GAEZ,QAAQ,MAAM,kCAAkC,CAExD,EAEA,eAAgB,UAAY,CACxB,IAAI,GAAa,CACb,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,OAAQ,KAAK,MACb,WAAY,OACZ,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,mBAAoB,UAAY,CAClC,GAAY,QAAQ,EACpB,KAAK,OAAS,GAEd,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,eACN,KAAM,UACN,QAAS,GACb,CAAC,EAED,KAAK,eAAe,WAAW,MAAM,KAAM,EAAI,CACnD,EAAG,IAAI,CAAC,CAAC,OAAO,CACpB,EAEA,SAAU,UAAY,CAClB,IAAI,GAAA,EAAA,EAAA,QAAA,CAAc,qBAAqB,EAEvC,AACI,KAAK,iBAAiB,IAAI,GAAe,CACrC,GAAI,EACJ,KAAM,KAAK,MACX,WAAY,IAChB,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,UAAY,CACxC,KAAK,OAAO,CAChB,EAAG,IAAI,EAEX,KAAK,eAAe,OAAO,CAC/B,EAEA,WAAY,UAAY,CACpB,IAAI,EAAW,KAAK,MAAM,IAAI,UAAU,EACpC,EAAc,KAAK,MAAM,IAAI,gBAAgB,EAAI,IACjD,KAAK,MAAM,IAAI,cAAc,EAAI,WAAa,EAClD,GAAQ,CACJ,KAAM,sCAAwC,KAAK,MAAM,OAAO,MAAM,EAAI,QAC1E,QAAS,SACT,YAAa,GACb,oBAAuB,CACnB,KAAK,MAAM,GAAG,gBAAmB,CAC7B,EAAO,SAAS,EAAa,CAAE,QAAS,EAAK,CAAC,CAClD,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,cAAiB,CAClC,KAAK,OAAO,EACZ,EAAO,QAAQ,UAAW,CACtB,KAAM,SACN,KAAM,yBACN,KAAM,SACN,QAAS,GACb,CAAC,CACL,EAAG,IAAI,CAAC,CAAC,QAAQ,CACrB,CACJ,CAAC,CACL,EAEA,OAAQ,UAAY,CAmDhB,OA/CA,KAAK,MAAM,eAAgB,GAAgB,CACvC,KAAK,YAAc,EACnB,KAAK,IAAI,KAAKG,GAAiB,CAC3B,KAAM,KAAK,MACE,cACb,WAAYC,GACZ,WAAYC,GACZ,WAAYC,GACZ,eAAgBC,GAChB,YAAA,CACJ,CAAC,CAAC,EAEF,KAAK,eAAiB,IAAI,GAAe,CACrC,GAAI,KAAK,EAAE,yBAAyB,EACpC,KAAM,KAAK,MACX,SAAU,KAAK,SACf,OAAQ,KAAK,OACb,WAAY,IAChB,CAAC,EACD,KAAK,eAAe,KAAK,YAAa,UAAY,CAC9C,KAAK,QAAQ,YAAY,CAC7B,EAAG,IAAI,EAEP,KAAK,SAAW,GAChB,KAAK,OAAS,GAEd,KAAK,eAAiB,IAAI,GAAe,CACrC,GAAI,KAAK,EAAE,kBAAkB,EAC7B,KAAM,KAAK,MACE,cACb,WAAY,IAChB,CAAC,EAED,KAAK,MAAM,YAAa,GAAS,CAC7B,KAAK,iBAAmB,IAAI,GAAqB,CAC7C,GAAI,KAAK,EAAE,8BAA8B,EACzC,YAAa,EACb,WAAY,IAChB,CAAC,CACL,CAAC,EAED,AAEI,KAAK,QADL,KAAK,SAAS,EACF,GAEpB,CAAC,EAEM,IACX,CACJ,EAAG,CAKC,aAAc,SAAU,EAAQ,EAAQ,CACpC,IAAI,EAAO,IAAI,GACf,EAAK,IAAI,CAAE,IAAK,CAAO,CAAC,CAAC,CAAC,GAAG,YAAa,UAAY,CAClD,EAAO,QAAQ,eAAgB,GAAUC,EAAE,OAAO,CACxC,MACV,EAAG,GAAU,CAAC,CAAC,CAAC,CACpB,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,CACJ,CAAC,EC9KD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EA4DhC,OA1DD,SAAU,EAAY,CACrB,GAAsB,gFAE1B,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAS,EAAM,GACvB,EAAe,GAAO,MAAM,SAAU,EAAO,MAAM,QAAQ,QAAQ,IAAI,IAAM,EACjF,EAAW,EAAW,QAAe,8BAAgCH,GAAS,YAAa,EAAO,IAAK,GAAM,EAAK,GAAK,+BACvH,AAIA,EAJI,EAAO,MAAM,IACN,EAAW,MAAaA,GAAS,OAAQ,EAAO,MAAM,IAAK,GAAM,EAAK,EAAE,oBAAwB,IAAYC,GAAiC,EAAO,MAAM,MAAQ,EAAe,EAAK,OAGtL,EAAW,SAAsBA,GAAiC,EAAO,MAAM,MAAQ,EAAe,EAAK,UAElH,EAAO,MAAM,UACjB,EAAW,EAAW,0CAAyDA,GAAiC,EAAO,MAAM,SAAW,EAAe,EAAK,WAExJ,IACJ,GAAsB,iNAElB,EAAO,MAAM,cACjB,EAAW,EAAW,MAAa,gCAAkCD,GAAS,UAAW,EAAO,MAAM,YAAa,GAAM,EAAK,EAAE,6BAAiC,iCAEjK,EAAW,EAAW,2CAAyEC,GAAiC,EAAO,MAAM,aAAe,EAAe,EAAK,cAC1K,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAS,EAAM,GACrB,EAAe,GAAO,MAAM,SAAU,EAAO,MAAM,QAAQ,QAAQ,IAAI,IAAM,EACjF,EAAW,EAAW,QAAe,8BAAgCD,GAAS,YAAa,EAAO,IAAK,GAAM,EAAK,GAAK,+BACvH,AAIA,EAJI,EAAO,MAAM,IACN,EAAW,MAAaA,GAAS,OAAQ,EAAO,MAAM,IAAK,GAAM,EAAK,EAAE,oBAAwB,IAAYC,GAAiC,EAAO,MAAM,MAAQ,EAAe,EAAK,OAGtL,EAAW,SAAsBA,GAAiC,EAAO,MAAM,MAAQ,EAAe,EAAK,UAElH,EAAO,MAAM,UACjB,EAAW,EAAW,0CAAyDA,GAAiC,EAAO,MAAM,SAAW,EAAe,EAAK,WAExJ,IACJ,GAAsB,iNAElB,EAAO,MAAM,cACjB,EAAW,EAAW,MAAa,gCAAkCD,GAAS,UAAW,EAAO,MAAM,YAAa,GAAM,EAAK,EAAE,6BAAiC,iCAEjK,EAAW,EAAW,2CAAyEC,GAAiC,EAAO,MAAM,aAAe,EAAe,EAAK,cAC5K,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEZ,GAAsB,QAClB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,IC9DI,EAc1B,IAAI,GAAc,EAAK,OAAO,CAC1B,OAAQ,CACJ,+BAAgC,SAAU,EAAK,CAC3C,IAAI,GAAA,EAAA,EAAA,QAAA,CAAU,EAAI,aAAa,CAAC,CAAC,KAAK,SAAS,EAC/C,EAAO,SAAS,EAAO,CAAE,QAAS,EAAK,CAAC,CAC5C,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,GAAmB,OAAO,EACtB,EAAS,KACT,KAAK,WAAa,EAAS,IAC3B,KAAK,OAAO,GAGZ,GAAY,CACR,IAAK,iBACL,OAAQ,KACZ,CAAC,CAAC,CACG,KAAM,GAAS,CACZ,KAAK,WAAa,EAAK,IACvB,KAAK,OAAO,CAChB,CAAC,CAAC,CAAC,SAAW,CACV,EAAO,SAAS,IAAK,CAAE,QAAS,EAAK,CAAC,CAC1C,CAAC,CAEb,EAEA,OAAQ,UAAY,CAShB,OARA,EAAE,KAAK,KAAK,WAAY,SAAU,EAAM,EAAM,CAC1C,EAAK,YAAc,GAAqB,CAAI,CAChD,EAAG,IAAI,EAEP,KAAK,IAAI,KAAKG,GAAgB,CAC1B,WAAY,KAAK,aAAa,KAAK,UAAU,CACjD,CAAC,CAAC,EAEK,IACX,EAEA,aAAc,SAAU,EAAS,CAO7B,IAAI,EAAgBC,EAAE,IAAI,EAAS,SAAU,EAAO,EAAK,CACrD,MAAO,CAAO,MAAY,OAAM,CACpC,CAAC,EAID,OAHA,EAAc,KAAK,SAAU,EAAG,EAAG,CAC/B,OAAO,EAAE,MAAM,KAAK,cAAc,EAAE,MAAM,IAAI,CAClD,CAAC,EACM,CACX,CACJ,CAAC,ECnEG,GAAgC,GAAsB,OAAO,CAC7D,aAAc,4CACd,YAAa,UAAY,CACrB,OAAO,GAAY,CACf,IAAK,GAAG,KAAK,aAAa,SAC1B,OAAQ,KACZ,CAAC,CAAC,CAAC,KAAM,IACL,KAAK,IAAI,SAAU,CAAI,EACvB,KAAK,QAAQ,iBAAiB,EACvB,EACV,CAAC,CAAC,KAAM,GAAQ,CACb,KAAK,QAAQ,UAAW,CAAG,CAC/B,CAAC,CACL,CACJ,CAAC,ECjBD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAShC,OAPD,SAAU,EAAM,EAAU,CACzB,EAAW,EAAW;0PAAslB,wFAAmGH,GAAS,QAAS,EAAS,oBAAsB,GAAI,GAAM,EAAK,EAAE,+CAAmD,iHAAwL,mGAA8GA,GAAS,QAAS,EAAS,+BAAiC,GAAI,GAAM,EAAK,EAAE,sFAA0F,uIAA0N,2FAAsGA,GAAS,QAAS,EAAS,qBAAsB,GAAM,EAAK,EAAE,iDAAqD,oHAAyN,4FAAuGA,GAAS,QAAS,EAAS,wBAA0B,GAAI,GAAM,EAAK,EAAE,qCAAyC,4GAAmL,6FAAwGA,GAAS,QAAS,EAAS,yBAA2B,GAAI,GAAM,EAAK,EAAE,gDAAoD,6QAAyY,gBAAkBA,GAAS,WAAa,EAAS,8BAAgC,OAAS,GAAM,EAAK,GAAK,sCAAiE,kBAAoBA,GAAS,WAAa,EAAS,8BAAgC,SAAW,GAAM,EAAK,GAAK,wCAAmE,mBAAqBA,GAAS,WAAa,EAAS,8BAAgC,UAAY,GAAM,EAAK,GAAK,6OAA6V,oBAAsBA,GAAS,WAAa,EAAS,6BAA+B,WAAa,GAAM,EAAK,GAAK,6BAAwD,oBAAsBA,GAAS,WAAa,EAAS,6BAA+B,WAAa,GAAM,EAAK,GAAK,6BAAwD,oBAAsBA,GAAS,WAAa,EAAS,6BAA+B,WAAa,GAAM,EAAK,GAAK,0PAA0W,iBAAmBA,GAAS,WAAa,EAAS,8BAAgC,QAAU,GAAM,EAAK,GAAK,uEAAkG,mBAAqBA,GAAS,WAAa,EAAS,8BAAgC,UAAY,GAAM,EAAK,GAAK,+EAA0G,iBAAmBA,GAAS,WAAa,EAAS,8BAAgC,QAAU,GAAM,EAAK,GAAK,8FAAyH,oBAAsBA,GAAS,WAAa,EAAS,8BAAgC,WAAa,GAAM,EAAK,GAAK,2EAAsG,kBAAoBA,GAAS,WAAa,EAAS,8BAAgC,SAAW,GAAM,EAAK,GAAK,8cAAmoBC,GAAiC,EAAK,UAAU,EAAS,gCAAgC,GAAK,EAAe,EAAK,oOAAgU,gBAAkBD,GAAS,WAAa,EAAS,+BAAiC,OAAS,GAAM,EAAK,GAAK,uBAAkD,0BAA4BA,GAAS,WAAa,EAAS,+BAAiC,iBAAmB,GAAM,EAAK,GAAK,yIAA0O,wCAA4CA,GAAS,UAAW,EAAS,iBAAkB,GAAM,EAAK,EAAE,wBAA4B,uIAAyO,qDAAyDA,GAAS,UAAW,EAAS,8BAA+B,GAAM,EAAK,EAAE,wBAA4B,kNAA2W,gGAA2GA,GAAS,QAAS,EAAS,4BAA8B,GAAI,GAAM,EAAK,EAAE,uEAA2E,2FAAkK,wFAAmGA,GAAS,QAAS,EAAS,oBAAsB,GAAI,GAAM,EAAK,EAAE,mFAAuF,6JAAwR,uFAAkGA,GAAS,QAAS,EAAS,mBAAqB,GAAI,GAAM,EAAK,EAAE,iEAAqE,yFAAgK,uFAAkGA,GAAS,QAAS,EAAS,mBAAqB,GAAI,GAAM,EAAK,EAAE,oEAAwE,4LAAmR,gBAAkBA,GAAS,WAAa,EAAS,0BAA4B,OAAS,GAAM,EAAK,GAAK,yBAAoD,oBAAsBA,GAAS,WAAa,EAAS,0BAA4B,WAAa,GAAM,EAAK,GAAK,iCAA4D,eAAiBA,GAAS,WAAa,EAAS,0BAA4B,MAAQ,GAAM,EAAK,GAAK,6HAAkO,2FAAsGA,GAAS,QAAS,EAAS,uBAAyB,GAAI,GAAM,EAAK,EAAE,+FAAmG,iGAAwK,+FAA0GA,GAAS,QAAS,EAAS,uBAAyB,GAAI,GAAM,EAAK,EAAE,+FAAmG,sjBAAu0B,yFAAoGA,GAAS,QAAS,EAAS,qBAAuB,GAAI,GAAM,EAAK,EAAE,uCAA2C,0LAAyS,uGAAkHA,GAAS,QAAS,EAAS,mCAAqC,GAAI,GAAM,EAAK,EAAE,yEAA6E;;0OAA+kB,+FAA0GA,GAAS,QAAS,EAAS,2BAA6B,GAAI,GAAM,EAAK,EAAE,+GAAmH,6GAAoL,gGAA2GA,GAAS,QAAS,EAAS,4BAA8B,GAAI,GAAM,EAAK,EAAE,+FAAqG,6GAAoL,gGAA2GA,GAAS,QAAS,EAAS,4BAA8B,GAAI,GAAM,EAAK,EAAE,uDAA2D,gQACrzc,EAAA,CAAE,KAAK,KAAM,SAAU,EACnB,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,GAAW,aAAc,EAC9D,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,EAAS,EACjD,CAAS,SCHrB,SAAU,EAAQ,EAAS,CACtB,OAAO,QAAW,YAAc,OAAO,IACzC,OAAO,CAAC,QAAQ,EAAG,CAAO,EACV,IAAY,QAM5B,EAAQ,EAAO,MAAM,EACrB,EAAO,gBAAkB,CAHvB,QAAS,CAAC,CAGa,EAAI,SAN7B,EAAA,EAAA,CAAyB,CAQ7B,EAAA,CAAC,EAAQ,SAAU,EAAS,CAC1B,aAEA,IAAI,EAAW,EAAuB,CAAO,EAE7C,SAAS,EAAuB,EAAK,CACnC,OAAO,GAAO,EAAI,WAAa,EAAM,CACnC,QAAS,CACX,CACF,CAEA,IAAI,EAAW,OAAO,QAAU,SAAU,EAAQ,CAChD,IAAK,IAAI,EAAI,EAAG,EAAI,UAAU,OAAQ,IAAK,CACzC,IAAI,EAAS,UAAU,GAEvB,IAAK,IAAI,KAAO,EACV,OAAO,UAAU,eAAe,KAAK,EAAQ,CAAG,IAClD,EAAO,GAAO,EAAO,GAG3B,CAEA,OAAO,CACT,EAEA,SAAS,EAAgB,EAAU,EAAa,CAC9C,GAAI,EAAE,aAAoB,GACxB,MAAU,UAAU,mCAAmC,CAE3D,CAEA,IAAI,EAAe,UAAY,CAC7B,SAAS,EAAiB,EAAQ,EAAO,CACvC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAI,EAAa,EAAM,GACvB,EAAW,WAAa,EAAW,YAAc,GACjD,EAAW,aAAe,GACtB,UAAW,IAAY,EAAW,SAAW,IACjD,OAAO,eAAe,EAAQ,EAAW,IAAK,CAAU,CAC1D,CACF,CAEA,OAAO,SAAU,EAAa,EAAY,EAAa,CAGrD,OAFI,GAAY,EAAiB,EAAY,UAAW,CAAU,EAC9D,GAAa,EAAiB,EAAa,CAAW,EACnD,CACT,CACF,EAAE,EAEE,EAAI,EAAS,SAAW,OAAO,QAAU,OAAO,EAEpD,SAAS,EAAW,EAAS,EAAI,CAC/B,IAAI,EAAQ,EAAQ,MAChB,EAAO,EAAQ,KACf,EAAW,EAAQ,SACnB,EAAW,EAAQ,SACnB,EAAgB,EAAQ,cACxB,EAAU,EAAQ,QAEtB,MAAO,CAAC,EAAQ,KAAO,MAAO,EAAM,EAAW,WAAa,IAAA,GAAW,EAAW,WAAa,IAAA,GAAW,EAAgB,gBAAkB,IAAA,GAAW,EAAU,UAAY,IAAA,GAAW,EAAK,MAAQ,EAAK,IAAA,EAAS,CAAC,CAAC,OAAO,SAAU,EAAG,CACvO,OAAO,GAAK,IACd,CAAC,CACH,CAEA,SAAS,GAAuB,CAC9B,MAAO,CACL,MAAO,KAAK,SAAS,GAAG,UAAU,EAClC,KAAM,KAAK,SAAS,KAAK,MAAM,EAC/B,QAAS,KAAK,SAAS,KAAK,SAAS,EACrC,SAAU,KAAK,SAAS,GAAG,WAAW,EACtC,SAAU,KAAK,SAAS,GAAG,YAAY,EACvC,cAAe,KAAK,SAAS,KAAK,eAAe,EACjD,QAAS,KAAK,SAAS,KAAK,SAAS,EACrC,YAAa,KAAK,SAAS,KAAK,eAAe,EAC/C,QAAS,KAAK,SAAS,KAAK,UAAU,EACtC,SAAU,KAAK,SAAS,KAAK,WAAW,EACxC,OAAQ,KAAK,SAAS,KAAK,SAAS,EACpC,QAAS,KAAK,SAAS,KAAK,UAAU,EACtC,UAAW,KAAK,SAAS,KAAK,YAAY,EAC1C,YAAa,KAAK,SAAS,KAAK,cAAc,EAC9C,WAAY,KAAK,SAAS,KAAK,aAAa,EAC5C,UAAW,KAAK,SAAS,KAAK,YAAY,EAC1C,aAAc,KAAK,SAAS,KAAK,eAAe,CAClD,CACF,CAEA,SAAS,GAAW,CAClB,IAAI,EAAQ,KAER,EAAW,KAAK,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,IAAI,QAAS,EAAE,EACnE,EAAc,KAAK,QAAQ,cAAgB,OAAS,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,MAAM,EAAG,KAAK,KAAK,MAAM,CAAC,CAAC,EAAI,KAAK,QAAQ,YAcjI,OAbA,EAAS,MAAM,CAAW,EAC1B,KAAK,OAAO,MAAM,SAAU,EAAO,EAAO,CAOxC,OANI,EAAM,QAAQ,aAAe,OAG7B,EAAQ,EACH,EAEF,EALE,EAAM,QAAQ,UAMzB,CAAC,EACD,KAAK,mBAAqB,KAAK,IAAI,WAAW,EAC9C,KAAK,kBAAoB,KAAK,OAAO,WAAW,EAChD,KAAK,WAAW,MAAM,KAAK,mBAAqB,EAAI,KAAK,iBAAiB,EACnE,KAAK,SAAS,MAAM,KAAK,mBAAqB,KAAK,iBAAiB,CAC7E,CAEA,SAAS,GAAuB,CAC9B,IAAI,EAAS,KAET,EAAQ,UAAU,OAAS,GAAK,UAAU,KAAO,IAAA,GAAY,UAAU,GAAK,KAAK,IAErF,KAAK,WAAW,IAAI,cAAe,UAAY,CAC7C,IAAI,EAAS,CAAC,EAAG,IAAM,EAAO,mBAAqB,IAAI,EAavD,OAZI,EAAO,QAAQ,cACV,IAAM,EAAO,mBAAqB,EAAI,KAE3C,EACE,EAAO,QAAQ,QACV,EAAO,GAET,EAAO,GAEZ,EAAO,QAAQ,QACV,EAAO,GAET,EAAO,EAChB,CAAC,CACH,CAEA,SAAS,EAAY,EAAM,CACzB,OAAO,KAAK,QAAQ,UAAY,IAAM,CACxC,CAEA,SAAS,GAAU,CACjB,IAAI,EAAS,KAET,EAAO,UAAgB,CACzB,EAAO,eAAe,EACtB,EAAS,KAAK,CAAM,EACpB,EAAqB,KAAK,CAAM,EAChC,WAAW,UAAY,CACrB,OAAO,EAAO,QAAQ,SAAW,EAAO,SAAS,SAAS,EAAY,KAAK,EAAQ,SAAS,CAAC,CAC/F,EAAG,EAAE,CACP,EACA,GAAI,KAAK,SAAS,GAAG,UAAU,EAAG,CAChC,EAAK,EACL,MACF,CACA,IAAI,EAAe,OAAO,YAAY,UAAY,CAChD,OAAO,EAAO,SAAS,GAAG,UAAU,IAAM,EAAK,GAAK,KAAS,OAAO,cAAc,CAAY,CAChG,EAAG,EAAE,CACP,CAEA,SAAS,GAAqB,CAC5B,IAAI,EAAS,KAEb,OAAO,KAAK,SAAS,GAAG,CACtB,qCAAsC,UAA6C,CACjF,OAAO,EAAO,eAAe,CAC/B,EAEA,gCAAiC,UAAwC,CACvE,EAAO,QAAU,EAAO,YACpB,EAAO,QAAQ,eACjB,EAAO,SAAS,SAAS,EAAY,KAAK,EAAQ,eAAe,CAAC,EAEpE,EAAO,SAAS,KAAK,UAAW,EAAO,QAAQ,KAAK,CAAC,CAAC,QAAQ,yBAA0B,EAAI,CAC9F,EAEA,yBAA0B,SAA+B,EAAO,EAAM,CACpE,EAAM,eAAe,EACrB,EAAM,yBAAyB,EAC/B,IAAI,EAAQ,EAAO,SAAS,GAAG,UAAU,EACzC,EAAqB,KAAK,EAAQ,CAAK,EACnC,IAAU,EAAO,QAAQ,QAG7B,EAAO,QAAQ,MAAQ,EACvB,EAAO,SAAS,YAAY,EAAY,KAAK,EAAQ,KAAK,CAAC,CAAC,CAAC,YAAY,EAAY,KAAK,EAAQ,IAAI,CAAC,EAClG,IACC,EAAO,SAAS,GAAG,QAAQ,GAC7B,EAAE,UAAY,EAAO,SAAS,KAAK,MAAM,EAAI,IAAI,CAAC,CAAC,IAAI,EAAO,QAAQ,CAAC,CAAC,KAAK,UAAW,EAAK,CAAC,CAAC,QAAQ,yBAA0B,EAAI,EAEvI,EAAO,SAAS,QAAQ,+BAAgC,CAAC,CAAK,CAAC,GAEnE,EAEA,wBAAyB,SAA8B,EAAO,CAC5D,EAAM,eAAe,EACrB,EAAO,SAAS,SAAS,EAAY,KAAK,EAAQ,SAAS,CAAC,CAC9D,EAEA,uBAAwB,SAA6B,EAAO,CAC1D,EAAM,eAAe,EACrB,EAAO,SAAS,YAAY,EAAY,KAAK,EAAQ,SAAS,CAAC,CACjE,EAEA,0BAA2B,SAAgC,EAAO,CAC5D,CAAC,EAAM,OAAS,EAAO,QAAQ,UAAY,EAAO,QAAQ,WAG1D,EAAM,QAAU,IAAM,EAAM,QAAU,MACxC,EAAM,eAAe,EACrB,EAAM,yBAAyB,EAC/B,EAAO,MAAM,EAAM,QAAU,EAAE,EAEnC,CACF,CAAC,CACH,CAEA,SAAS,GAAoB,CAC3B,IAAI,EAAS,KAQb,OANA,KAAK,IAAI,GAAG,wBAAyB,SAAU,EAAO,CAIpD,OAHA,EAAM,eAAe,EACrB,EAAM,gBAAgB,EACtB,EAAO,MAAM,EAAK,EACX,EAAO,SAAS,QAAQ,uBAAuB,CACxD,CAAC,EACM,KAAK,KAAK,GAAG,wBAAyB,SAAU,EAAO,CAI5D,OAHA,EAAM,eAAe,EACrB,EAAM,gBAAgB,EACtB,EAAO,MAAM,EAAI,EACV,EAAO,SAAS,QAAQ,uBAAuB,CACxD,CAAC,CACH,CAEA,SAAS,GAAmB,CAC1B,IAAI,EAAS,KAET,EAAY,IAAK,GACjB,EAAU,IAAK,GAuDnB,KAAK,OAAO,GAAG,CArDb,MAAO,SAAe,EAAO,CAC3B,EAAM,gBAAgB,CACxB,EAGA,uDAAwD,SAA2D,EAAO,CACpH,GAAa,EAAO,QAAQ,UAAY,EAAO,QAAQ,WAG3D,EAAM,eAAe,EACrB,EAAM,gBAAgB,EACtB,GAAa,EAAM,OAAS,EAAM,cAAc,QAAQ,EAAE,CAAC,OAAS,SAAS,EAAO,WAAW,IAAI,aAAa,EAAG,EAAE,EACjH,EAAO,QAAQ,SACjB,EAAO,SAAS,YAAY,EAAY,KAAK,EAAQ,SAAS,CAAC,EAEjE,EAAO,SAAS,QAAQ,uBAAuB,EACjD,EAEA,sDAAuD,SAA0D,EAAO,CAClH,MAAa,KAGjB,KAAI,GAAc,EAAM,OAAS,EAAM,cAAc,QAAQ,EAAE,CAAC,OAAS,EACzE,EAAM,eAAe,EACjB,IAAa,CAAC,EAAO,oBAAsB,EAAa,KAG5D,EAAU,EACV,EAAO,WAAW,IAAI,cAAe,EAAU,IAAI,EANsB,CAO3E,EAEA,mDAAoD,SAAuD,EAAO,CAC3G,KAOL,IAJA,EAAM,eAAe,EACjB,EAAO,QAAQ,SACjB,EAAO,SAAS,SAAS,EAAY,KAAK,EAAQ,SAAS,CAAC,EAE1D,EAAS,CACX,IAAI,EAAQ,EAAU,EAAE,EAAO,mBAAqB,GACpD,EAAU,GACV,EAAO,MAAM,EAAO,QAAQ,QAAU,CAAC,EAAQ,CAAK,CACtD,MACE,EAAO,MAAM,CAAC,EAAO,QAAQ,KAAK,EAEpC,EAAY,EAFwB,CAGtC,EAEA,6BAA8B,UAAqC,CACjE,EAAO,OAAO,QAAQ,yBAAyB,CACjD,CAEoB,CAAC,CACzB,CAEA,SAAS,GAA0B,CACjC,IAAI,EAAS,KAET,EAAiB,KAAK,SAAS,QAAQ,OAAO,EAClD,EAAe,GAAG,QAAS,SAAU,EAAO,CAC1C,EAAM,eAAe,EACrB,EAAM,yBAAyB,EAC3B,EAAM,SAAW,EAAe,IAClC,EAAO,YAAY,CAEvB,CAAC,CACH,CAEA,SAAS,GAAiB,CACxB,SAAS,GAAoB,CAC3B,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,kBAAkB,CACxC,CAEA,SAAS,GAAe,CACtB,OAAO,EAAE,IAAI,CAAC,CAAC,gBAAgB,QAAS,KAAK,OAAO,CACtD,CAEA,IAAI,EAAQ,KAAK,SAAS,QAAQ,MAAM,EACpC,EAAM,KAAK,kBAAkB,GAGjC,EAAM,GAAG,wBAAyB,UAAY,CAC5C,OAAO,WAAW,UAAY,CAC5B,EAAM,KAAK,OAAO,CAAC,CAAC,OAAO,CAAiB,CAAC,CAAC,KAAK,CAAY,CACjE,EAAG,CAAC,CACN,CAAC,CAAC,CAAC,KAAK,mBAAoB,EAAI,CAClC,CAEA,SAAS,EAAc,EAAS,CAC9B,IAAI,EAAS,KAKb,OAHK,EAAE,QAAQ,CAAO,EAGf,EAAQ,IAAI,SAAU,EAAG,CAC9B,OAAO,EAAY,KAAK,EAAQ,CAAC,CACnC,CAAC,EAJQ,CAAC,EAAY,KAAK,KAAM,CAAO,CAAC,CAK3C,CAEA,IAAI,EAAkB,UAAY,CAChC,SAAS,EAAgB,EAAS,CAChC,IAAI,EAAS,KAET,EAAU,UAAU,OAAS,GAAK,UAAU,KAAO,IAAA,GAAY,UAAU,GAAK,CAAC,EAEnF,EAAgB,KAAM,CAAe,EAErC,KAAK,SAAW,EAAE,CAAO,EACzB,KAAK,QAAU,EAAE,OAAO,CAAC,EAAG,EAAE,GAAG,gBAAgB,SAAU,EAAqB,KAAK,IAAI,EAAG,CAAO,EACnG,KAAK,YAAc,CAAC,EACpB,KAAK,SAAW,EAAE,QAAS,CACzB,MAAO,UAAkB,CACvB,OAAO,EAAW,EAAO,QAAS,EAAO,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,SAAU,EAAG,CAC7E,OAAO,EAAY,KAAK,EAAQ,CAAC,CACnC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAO,QAAQ,SAAS,EAAG,EAAc,KAAK,EAAQ,EAAO,QAAQ,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CACzG,CACF,CAAC,EACD,KAAK,WAAa,EAAE,QAAS,CAAE,MAAO,EAAY,KAAK,KAAM,WAAW,CAAE,CAAC,EAC3E,KAAK,IAAM,EAAE,SAAU,CACrB,KAAM,KAAK,QAAQ,OACnB,MAAO,EAAY,KAAK,KAAM,WAAW,EAAI,IAAM,EAAY,KAAK,KAAM,KAAK,QAAQ,OAAO,CAChG,CAAC,EACD,KAAK,KAAO,EAAE,SAAU,CACtB,KAAM,KAAK,QAAQ,QACnB,MAAO,EAAY,KAAK,KAAM,YAAY,EAAI,IAAM,EAAY,KAAK,KAAM,KAAK,QAAQ,QAAQ,CAClG,CAAC,EACD,KAAK,OAAS,EAAE,SAAU,CACxB,KAAM,KAAK,QAAQ,UACnB,MAAO,EAAY,KAAK,KAAM,OAAO,CACvC,CAAC,EAED,KAAK,SAAS,GAAG,uBAAwB,UAAY,CACnD,OAAO,EAAO,QAAQ,OAAO,CAAO,CACtC,CAAC,EACD,KAAK,SAAS,GAAG,+BAAgC,UAAY,CACtD,IAA6B,MACnB,WAGG,EAAO,QAAQ,eAAe,MAAM,EAAS,CACjD,IAAM,KACd,EAAO,SAAS,GAAG,QAAQ,EAC7B,EAAE,UAAY,EAAO,SAAS,KAAK,MAAM,EAAI,IAAI,CAAC,CAAC,QAAQ,gCAAiC,EAAI,EAEhG,EAAO,SAAS,QAAQ,gCAAiC,EAAI,EAGnE,CAAC,EAED,KAAK,WAAa,KAAK,SAAS,KAAK,KAAK,UAAU,CAAC,CAAC,OAAO,EAC7D,KAAK,SAAW,KAAK,WAAW,KAAK,KAAK,QAAQ,CAAC,CAAC,OAAO,EAC3D,KAAK,SAAS,OAAO,KAAK,QAAQ,QAAU,KAAK,KAAO,KAAK,GAAG,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,OAAO,KAAK,QAAQ,QAAU,KAAK,IAAM,KAAK,IAAI,EAEpI,KAAK,QAAQ,eACf,KAAK,SAAS,KAAK,gBAAiB,EAAI,EAG1C,EAAQ,KAAK,IAAI,EACjB,EAAmB,KAAK,IAAI,EAC5B,EAAkB,KAAK,IAAI,EAC3B,EAAiB,KAAK,IAAI,EAC1B,EAAe,KAAK,IAAI,EACxB,EAAwB,KAAK,IAAI,EACjC,KAAK,SAAS,QAAQ,uBAAwB,KAAK,QAAQ,KAAK,CAClE,CA4SA,OA1SA,EAAa,EAAiB,CAAC,CAC7B,IAAK,iBACL,MAAO,UAA0B,CAC/B,KAAK,YAAc,EAAS,CAAC,EAAG,KAAK,OAAO,CAC9C,CACF,EAAG,CACD,IAAK,QACL,MAAO,SAAe,EAAO,EAAM,CAgBjC,OAfW,IAAU,OACZ,KAAK,QAAQ,MAElB,KAAK,QAAQ,UAAY,KAAK,QAAQ,UAAY,KAAK,QAAQ,OAAS,CAAC,KAAK,QAAQ,aAAe,KAAK,SAAS,GAAG,QAAQ,EACzH,KAAK,UAEV,KAAK,SAAS,GAAG,QAAQ,EAC3B,EAAE,UAAY,KAAK,SAAS,KAAK,MAAM,EAAI,IAAI,CAAC,CAAC,QAAQ,oCAAoC,EAE7F,KAAK,SAAS,QAAQ,oCAAoC,EAExD,KAAK,QAAQ,eACf,KAAK,cAAc,EAAK,EAE1B,KAAK,SAAS,KAAK,UAAW,EAAQ,CAAM,CAAC,CAAC,QAAQ,yBAA0B,CAAI,EAC7E,KAAK,SACd,CACF,EAAG,CACD,IAAK,cACL,MAAO,SAAqB,EAAM,CAQhC,OAPI,KAAK,QAAQ,UAAY,KAAK,QAAQ,SACjC,KAAK,SAEV,KAAK,QAAQ,eACf,KAAK,cAAc,EAAK,EACjB,KAAK,MAAM,EAAI,GAEjB,KAAK,SAAS,KAAK,UAAW,CAAC,KAAK,QAAQ,KAAK,CAAC,CAAC,QAAQ,yBAA0B,CAAI,CAClG,CACF,EAAG,CACD,IAAK,OACL,MAAO,SAAc,EAAO,CAa1B,OAZW,IAAU,OACZ,KAAK,QAAQ,MAElB,KAAK,QAAQ,MAAQ,MACvB,KAAK,SAAS,YAAY,EAAY,KAAK,KAAM,KAAK,QAAQ,IAAI,CAAC,EAEjE,GACF,KAAK,SAAS,SAAS,EAAY,KAAK,KAAM,CAAK,CAAC,EAEtD,EAAS,KAAK,IAAI,EAClB,EAAqB,KAAK,IAAI,EAC9B,KAAK,QAAQ,KAAO,EACb,KAAK,SACd,CACF,EAAG,CACD,IAAK,UACL,MAAO,SAAiB,EAAO,CAO7B,OANW,IAAU,OACZ,KAAK,QAAQ,QAElB,KAAK,QAAQ,UAAY,EAAQ,EAC5B,KAAK,SAEP,KAAK,cAAc,CAC5B,CACF,EAAG,CACD,IAAK,gBACL,MAAO,UAAyB,CAG9B,MAFA,MAAK,QAAQ,QAAU,CAAC,KAAK,QAAQ,QACrC,KAAK,SAAS,YAAY,EAAY,KAAK,KAAM,SAAS,CAAC,EACpD,KAAK,QACd,CACF,EAAG,CACD,IAAK,WACL,MAAO,SAAkB,EAAO,CAO9B,OANW,IAAU,OACZ,KAAK,QAAQ,SAElB,KAAK,QAAQ,WAAa,EAAQ,EAC7B,KAAK,SAEP,KAAK,eAAe,CAC7B,CACF,EAAG,CACD,IAAK,iBACL,MAAO,UAA0B,CAI/B,MAHA,MAAK,QAAQ,SAAW,CAAC,KAAK,QAAQ,SACtC,KAAK,SAAS,KAAK,WAAY,KAAK,QAAQ,QAAQ,EACpD,KAAK,SAAS,YAAY,EAAY,KAAK,KAAM,UAAU,CAAC,EACrD,KAAK,QACd,CACF,EAAG,CACD,IAAK,WACL,MAAO,SAAkB,EAAO,CAO9B,OANW,IAAU,OACZ,KAAK,QAAQ,SAElB,KAAK,QAAQ,WAAa,EAAQ,EAC7B,KAAK,SAEP,KAAK,eAAe,CAC7B,CACF,EAAG,CACD,IAAK,iBACL,MAAO,UAA0B,CAI/B,MAHA,MAAK,QAAQ,SAAW,CAAC,KAAK,QAAQ,SACtC,KAAK,SAAS,KAAK,WAAY,KAAK,QAAQ,QAAQ,EACpD,KAAK,SAAS,YAAY,EAAY,KAAK,KAAM,UAAU,CAAC,EACrD,KAAK,QACd,CACF,EAAG,CACD,IAAK,gBACL,MAAO,SAAuB,EAAO,CAOnC,OANW,IAAU,OACZ,KAAK,QAAQ,cAElB,KAAK,QAAQ,gBAAkB,EAAQ,EAClC,KAAK,SAEP,KAAK,oBAAoB,CAClC,CACF,EAAG,CACD,IAAK,sBACL,MAAO,UAA+B,CAKpC,MAJA,MAAK,QAAQ,cAAgB,CAAC,KAAK,QAAQ,cAC3C,KAAK,SAAS,KAAK,gBAAiB,KAAK,QAAQ,aAAa,EAC9D,KAAK,SAAS,YAAY,EAAY,KAAK,KAAM,eAAe,CAAC,EACjE,EAAqB,KAAK,IAAI,EACvB,KAAK,QACd,CACF,EAAG,CACD,IAAK,UACL,MAAO,SAAiB,EAAO,CAO7B,OANW,IAAU,OACZ,KAAK,QAAQ,QAElB,KAAK,QAAQ,UAAY,EAAQ,EAC5B,KAAK,SAEP,KAAK,cAAc,CAC5B,CACF,EAAG,CACD,IAAK,gBACL,MAAO,UAAyB,CAC9B,KAAK,SAAS,YAAY,EAAY,KAAK,KAAM,SAAS,CAAC,EAC3D,IAAI,EAAM,KAAK,IAAI,MAAM,EAAI,EACzB,EAAO,KAAK,KAAK,MAAM,EAAI,EAM/B,OALA,KAAK,IAAI,YAAY,CAAI,EACzB,KAAK,KAAK,YAAY,CAAG,EACzB,KAAK,IAAM,EACX,KAAK,KAAO,EACZ,KAAK,QAAQ,QAAU,CAAC,KAAK,QAAQ,QAC9B,KAAK,QACd,CACF,EAAG,CACD,IAAK,UACL,MAAO,SAAiB,EAAO,CAS7B,OARW,IAAU,OACZ,KAAK,QAAQ,SAElB,KAAK,QAAQ,SACf,KAAK,IAAI,YAAY,EAAY,KAAK,KAAM,KAAK,QAAQ,OAAO,CAAC,EAEnE,KAAK,IAAI,SAAS,EAAY,KAAK,KAAM,CAAK,CAAC,EAC/C,KAAK,QAAQ,QAAU,EAChB,KAAK,SACd,CACF,EAAG,CACD,IAAK,WACL,MAAO,SAAkB,EAAO,CAS9B,OARW,IAAU,OACZ,KAAK,QAAQ,UAElB,KAAK,QAAQ,UACf,KAAK,KAAK,YAAY,EAAY,KAAK,KAAM,KAAK,QAAQ,QAAQ,CAAC,EAErE,KAAK,KAAK,SAAS,EAAY,KAAK,KAAM,CAAK,CAAC,EAChD,KAAK,QAAQ,SAAW,EACjB,KAAK,SACd,CACF,EAAG,CACD,IAAK,SACL,MAAO,SAAgB,EAAO,CAQ5B,OAPW,IAAU,OACZ,KAAK,QAAQ,QAEtB,KAAK,IAAI,KAAK,CAAK,EACnB,EAAS,KAAK,IAAI,EAClB,EAAqB,KAAK,IAAI,EAC9B,KAAK,QAAQ,OAAS,EACf,KAAK,SACd,CACF,EAAG,CACD,IAAK,UACL,MAAO,SAAiB,EAAO,CAQ7B,OAPW,IAAU,OACZ,KAAK,QAAQ,SAEtB,KAAK,KAAK,KAAK,CAAK,EACpB,EAAS,KAAK,IAAI,EAClB,EAAqB,KAAK,IAAI,EAC9B,KAAK,QAAQ,QAAU,EAChB,KAAK,SACd,CACF,EAAG,CACD,IAAK,YACL,MAAO,SAAmB,EAAO,CAO/B,OANW,IAAU,OACZ,KAAK,QAAQ,WAEtB,KAAK,OAAO,KAAK,CAAK,EACtB,EAAS,KAAK,IAAI,EAClB,KAAK,QAAQ,UAAY,EAClB,KAAK,SACd,CACF,EAAG,CACD,IAAK,cACL,MAAO,SAAqB,EAAO,CAOjC,OANW,IAAU,OACZ,KAAK,QAAQ,aAEtB,KAAK,QAAQ,YAAc,EAC3B,EAAS,KAAK,IAAI,EAClB,EAAqB,KAAK,IAAI,EACvB,KAAK,SACd,CACF,EAAG,CACD,IAAK,aACL,MAAO,SAAoB,EAAO,CAOhC,OANW,IAAU,OACZ,KAAK,QAAQ,YAEtB,KAAK,QAAQ,WAAa,EAC1B,EAAS,KAAK,IAAI,EAClB,EAAqB,KAAK,IAAI,EACvB,KAAK,SACd,CACF,EAAG,CACD,IAAK,YACL,MAAO,UAAqB,CAC1B,OAAO,KAAK,QAAQ,SACtB,CACF,EAAG,CACD,IAAK,eACL,MAAO,SAAsB,EAAO,CAClC,GAAW,IAAU,OACnB,OAAO,KAAK,QAAQ,aAEtB,IAAI,EAAe,GAAS,EAAE,GAAG,gBAAgB,SAAS,aAI1D,OAHA,KAAK,SAAS,YAAY,EAAc,KAAK,KAAM,KAAK,QAAQ,YAAY,CAAC,CAAC,KAAK,GAAG,CAAC,EACvF,KAAK,SAAS,SAAS,EAAc,KAAK,KAAM,CAAY,CAAC,CAAC,KAAK,GAAG,CAAC,EACvE,KAAK,QAAQ,aAAe,EACrB,KAAK,QACd,CACF,EAAG,CACD,IAAK,cACL,MAAO,SAAqB,EAAO,CACjC,GAAW,IAAU,OACnB,OAAO,KAAK,QAAQ,YAEtB,IAAI,EAAM,EAAQ,EAKlB,OAJI,KAAK,QAAQ,cAAgB,IAGjC,KAAK,QAAQ,YAAc,GAFlB,KAAK,QAIhB,CACF,EAAG,CACD,IAAK,SACL,MAAO,SAAgB,EAAO,CAK5B,OAJW,IAAU,OACZ,KAAK,QAAQ,QAEtB,KAAK,QAAQ,OAAS,GAAS,EAAE,GAAG,gBAAgB,SAAS,OACtD,KAAK,SACd,CACF,EAAG,CACD,IAAK,iBACL,MAAO,SAAwB,EAAO,CAKpC,OAJW,IAAU,OACZ,KAAK,QAAQ,gBAEtB,KAAK,QAAQ,eAAiB,GAAS,EAAE,GAAG,gBAAgB,SAAS,eAC9D,KAAK,SACd,CACF,EAAG,CACD,IAAK,UACL,MAAO,UAAmB,CACxB,IAAI,EAAQ,KAAK,SAAS,QAAQ,MAAM,EAMxC,OALI,EAAM,QACR,EAAM,IAAI,uBAAuB,CAAC,CAAC,WAAW,kBAAkB,EAElE,KAAK,WAAW,SAAS,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,OAAO,EACrD,KAAK,SAAS,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,WAAW,kBAAkB,EAC9E,KAAK,QACd,CACF,CAAC,CAAC,EAEK,CACT,EAAE,EAEF,SAAS,EAAgB,EAAQ,CAC1B,IAA8B,MACf,oBAGpB,SAAS,EAAQ,EAAK,EAAM,CAC1B,IAAI,EAAQ,EAAE,CAAI,EACd,EAAe,EAAM,KAAK,kBAAkB,EAC5C,EAAO,GAAgB,IAAI,EAAgB,EAAM,CAAM,EAO3D,OANK,GACH,EAAM,KAAK,mBAAoB,CAAI,EAEjC,OAAO,GAAW,SACb,EAAK,EAAO,CAAC,MAAM,EAAM,CAAI,EAE/B,CACT,CACA,OAAO,MAAM,UAAU,OAAO,KAAK,KAAM,EAAS,IAAI,CACxD,CAEA,EAAE,GAAG,gBAAkB,EACvB,EAAE,GAAG,gBAAgB,YAAc,EACnC,EAAE,GAAG,gBAAgB,SAAW,CAC9B,MAAO,GACP,KAAM,KACN,QAAS,GACT,SAAU,GACV,SAAU,GACV,cAAe,GACf,QAAS,GACT,YAAa,GACb,QAAS,UACT,SAAU,UACV,OAAQ,KACR,QAAS,MACT,UAAW,QACX,YAAa,OACb,WAAY,OACZ,UAAW,mBACX,aAAc,UACd,OAAQ,UAAkB,CAAC,EAC3B,eAAgB,UAA0B,CAAC,CAC7C,CACF,CAAC,UE9vByB,EAoB1B,IAAI,GAA0B,EAAK,OAAO,CACtC,OAAQ,CACJ,0BAA2B,SAAU,EAAO,CACxC,EAAM,eAAe,EACrB,KAAK,EAAE,oBAAoB,CAAC,CAAC,aAAa,EAAK,EAC/C,KAAK,EAAE,2BAA2B,CAAC,CAAC,MAAM,EAE1C,KAAK,EAAE,kCAAkC,CAAC,CAAC,IAAI,KAAK,UAAU,KAAK,gCAAgC,CAAC,CAAC,EACrG,IAAI,EAAWI,EAAE,IAAI,KAAK,aAAe,GAAQ,CAC7C,IAAM,EAAU,KAAK,EAAE,MAAQ,EAAI,QAAQ,QAAS,GAAG,CAAC,EAcpD,OAZAA,EAAE,SACF,CACI,gBACA,4BACJ,EACA,CACJ,EACW,CACH,MACA,MAAO,EAAQ,GAAG,UAAU,CAChC,EAEO,CACH,MACA,MAAO,EAAQ,IAAI,GAAK,IAC5B,CAER,CAAC,EAED,GAAY,CACR,OAAQ,MACR,IAAK,iBACL,KAAM,CACF,KAAM,KAAK,UAAU,CAAQ,CACjC,EACA,MAAO,IACX,CAAC,CAAC,CAAC,SAAW,CACV,KAAK,EAAE,oBAAoB,CAAC,CAAC,aAAa,EAAI,EAC9C,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,kBACN,KAAM,UACN,QAAS,GACb,CAAC,CACL,CAAC,CAAC,CAAC,KAAM,GAAS,CACd,KAAK,EAAE,oBAAoB,CAAC,CAAC,aAAa,EAAI,EAC9C,KAAK,EAAE,2BAA2B,CAAC,CAAC,KAAK,EAAK,aAAa,OAAO,CACtE,CAAC,CACL,CACJ,EAEA,WAAY,UAAY,CACpB,GAAmB,OAAO,EAE1B,IAAI,EAAO,CACP,gBACA,6BACA,kBACA,oBACA,sBACA,uBACA,6BACA,0BACA,kBACA,2BACA,0BACA,mBACA,iBACA,iBACA,uBACA,qBACA,qBACA,iCACA,yBACA,0BACA,0BACA,2BACA,gCACA,2BACJ,EACA,KAAK,aAAe,EACpB,GAAY,CACR,IAAK,iBACL,OAAQ,MACR,KAAM,CACF,KAAM,KAAK,UAAU,CAAI,CAC7B,CACJ,CAAC,CAAC,CAAC,KAAM,GAAS,CACd,KAAK,SAAW,EAChB,KAAK,OAAO,CAChB,CAAC,CACL,EAEA,OAAQ,UAAY,CAChB,KAAK,IAAI,KAAKC,GAA4B,CACtC,SAAU,KAAK,SACf,KAAM,OAAO,IACjB,CAAC,CAAC,EAEF,IAAI,EAAiC,KAAK,SAAS,iCAAmC,KAAK,SAAS,gCAAgC,CAAC,KAAO,GAmB5I,OAjBA,KAAK,EAAE,mBAAmB,CAAC,CACtB,gBAAgB,CAAC,CACjB,gBAAgB,QAAS,CAA8B,CAAC,CACxD,IAAI,8BAA8B,CAAC,CACnC,GAAG,gCAAiC,EAAO,IAAU,CAC9C,EACA,KAAK,4CAA4C,GAEjD,KAAK,aAAa,QAAQ,EAC1B,KAAK,aAAe,KAE5B,CAAC,EAED,GACA,KAAK,4CAA4C,EAG9C,IACX,EAEA,4CAA6C,UAAY,CACrD,IAAI,EAAgC,IAAI,GAExC,KAAK,aAAe,IAAI,GAAa,CACjC,GAAI,KAAK,EAAE,gEAAgE,EAC3E,UAAW,6BACX,MAAO,EACP,WAAY,KACZ,MAAO,GACP,kBAAmB,GACnB,eAAgB,GAChB,kBAAmB,GACnB,eAAgB,GAChB,aAAc,EAClB,CAAC,CACL,EAEA,gCAAiC,UAAY,CAEzC,IAAI,EAAe,KACnB,GAAI,KAAK,EAAE,mBAAmB,CAAC,CAAC,gBAAgB,OAAO,GAAK,KAAK,aAAc,CAC3E,EAAe,CAAE,KAAM,KAAK,EAAE,mBAAmB,CAAC,CAAC,gBAAgB,OAAO,CAAE,EAC5E,IAAI,EAAa,KAAK,aAAa,cAAc,EACjD,EAAE,KAAKD,EAAE,KAAK,CAAU,EAAI,GAAQ,CAChC,EAAa,GAAOA,EAAE,MAAM,EAAW,GAAM,IAAI,CACrD,CAAC,CACL,KACI,GAAe,KAAK,SAAS,iCAC7B,EAAa,KAAO,GAExB,OAAO,CACX,CACJ,CAAC,EC9KD,SAASE,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EA0ChC,OAxCD,SAAU,EAAQ,EAAa,CAC9B,GAAsB,oQACxB,EACJ,GAAsB,eAGtB,GAAsB,qBAEtB,EAAW,EAAW,0mBAAo3B,qEAA6EH,GAAS,UAAW,GAAM,GAAM,EAAK,GAAK,6NAE//B,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAa,EAAM,GAC/B,EAAW,EAAW,yCAA4D,sCAAwCA,GAAS,QAAS,EAAW,YAAa,GAAM,EAAK,GAAK,WAAuB,mDAA0DA,GAAS,QAAS,EAAW,GAAI,GAAM,EAAK,EAAEA,GAAS,WAAY,GAAM,GAAM,EAAK,GAAK,WAAkCC,GAAiC,EAAW,MAAQ,EAAe,EAAK,uBAClc,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAa,EAAM,GAC7B,EAAW,EAAW,yCAA4D,sCAAwCD,GAAS,QAAS,EAAW,YAAa,GAAM,EAAK,GAAK,WAAuB,mDAA0DA,GAAS,QAAS,EAAW,GAAI,GAAM,EAAK,EAAEA,GAAS,WAAY,GAAM,GAAM,EAAK,GAAK,WAAkCC,GAAiC,EAAW,MAAQ,EAAe,EAAK,uBACpc,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEZ,GAAsB,mOAClB,EACJ,GAAsB,iCAGtB,GAAsB,2CAEtB,GAAsB,oCAClB,EAAA,CAAE,KAAK,KAAM,WAAY,EACrB,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,GAAW,gBAAiB,EACrE,EAAgB,YAChB,OAAO,YAAgB,IAAc,YAAc,IAAA,EAAS,EACvD,CAAS,IC5CI,EAe1B,IAAI,GAAmB,EAAK,OAAO,CAC/B,OAAQ,CACJ,8BAA+B,SAAU,EAAG,CACxC,EAAE,eAAe,EAEjB,IAAI,EAAS,CACT,KAAM,KAAK,EAAE,iBAAiB,CAAC,CAAC,IAAI,EACpC,cAAe,KAAK,EAAE,2BAA2B,CAAC,CAAC,IAAI,EACvD,MAAO,KACP,aAAc,KAAK,YACvB,EAEI,KAAK,sBAAsB,IAAM,WACjC,EAAO,MAAQG,EAAE,IAAI,KAAK,EAAE,kCAAkC,EAAG,SAAU,EAAI,CAC3E,OAAA,EAAA,EAAA,QAAA,CAAS,CAAE,CAAC,CAAC,IAAI,CACrB,CAAC,GAGL,KAAK,UAAU,KAAK,MAAO,CAAM,EAEjC,KAAK,EAAE,uBAAuB,CAAC,CAAC,aAAa,EAAK,EAClD,KAAK,EAAE,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAClD,EAEA,mDAAoD,UAAY,CAC5D,IAAI,EAAO,KAAK,sBAAsB,EAClC,IAAS,OACT,KAAK,EAAE,0BAA0B,CAAC,CAAC,aAAa,EAAK,CAAC,CACjD,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAK,EAClC,IAAS,UAChB,KAAK,EAAE,0BAA0B,CAAC,CAAC,aAAa,EAAI,CAAC,CAChD,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAI,CAEhD,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,MAAQ,EAAS,OAAS,KAC/B,KAAK,UAAY,KACjB,KAAK,aAAe,EAAS,WAAW,MAAM,GAC9C,KAAK,cAAgB,GAErB,GAAY,CACR,IAAK,cACT,CAAC,CAAC,CAAC,KAAM,GAAS,CACd,KAAK,UAAY,EACb,KAAK,gBACL,KAAK,cAAgB,GACrB,KAAK,OAAO,EAEpB,CAAC,CACL,EAEA,OAAQ,UAAY,CAChB,GAAI,CAAC,KAAK,UAAW,CACjB,KAAK,cAAgB,GACrB,MACJ,CAEA,IAAI,EAAc,KAAK,UAAU,OAC7BC,GAAe,CAAC,CAAC,IAAI,OAAO,IAC5B,EAAc,EAAY,OAAO,KAAK,UAAU,WAAW,GAG/D,IAAI,EAAQ,KAAK,IAAI,KAAKC,GAAyB,CAC/C,OAAQ,KAAK,MACA,aACjB,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,qBAAwB,CAC7C,KAAK,EAAE,iBAAiB,CAAC,CAAC,QAAQ,OAAO,CAC7C,CAAC,CAAC,CAAC,GAAG,yBAA4B,CAC1B,KAAK,QACL,KAAK,EAAE,iBAAiB,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,EACpD,KAAK,EAAE,2BAA2B,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,eAAe,GAAK,EAAE,EACzE,KAAK,MAAM,IAAI,OAAO,IACtB,KAAK,EAAE,sBAAsB,CAAC,CAAC,KAAK,UAAW,SAAS,CAAC,CAAC,QAAQ,QAAQ,EAC1E,KAAK,EAAE,0BAA0B,CAAC,CAAC,aAAa,EAAI,EACpD,EAAE,KAAK,KAAK,MAAM,IAAI,OAAO,EAAG,SAAU,EAAO,CAC7C,KAAK,EAAE,mCAAqC,EAAQ,IAAI,CAAC,CAAC,KAAK,UAAW,SAAS,CACvF,EAAG,IAAI,GAGnB,CAAC,EAKD,OAJA,EAAM,QAAQC,EAAAA,QAAE,MAAM,qBAAsB,CAAE,cAAe,CAAM,CAAC,CAAC,EAErE,KAAK,EAAE,iBAAiB,CAAC,CAAC,QAAQ,OAAO,EAElC,IACX,EAEA,UAAW,SAAU,EAAO,EAAQ,CAChC,IAAiB,IAAI,GAErB,EAAM,IAAI,CAAM,EAChB,EAAM,KAAK,UAAW,UAAY,CAC9B,KAAK,IAAI,MAAM,MAAM,EACrB,KAAK,QAAQ,UAAW,CAAK,CACjC,EAAG,IAAI,CAAC,CAAC,IAAI,UAAW,KAAM,IAAI,CAAC,CAAC,GAAG,UAAW,SAAU,EAAK,CAC7D,KAAK,EAAE,8BAA8B,CAAC,CAAC,KAAK,EAAI,aAAa,OAAO,EACpE,KAAK,EAAE,uBAAuB,CAAC,CAAC,aAAa,EAAI,CACrD,EAAG,IAAI,CAAC,CAAC,KAAK,CAClB,EAEA,sBAAuB,UAAY,CAC/B,OAAO,KAAK,EAAE,mDAAmD,CAAC,CAAC,KAAK,OAAO,CACnF,CACJ,CAAC,ECzHD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EA4FhC,OA1FD,SAAU,EAAS,EAAQ,CACtB,EAAQ,SAAW,EAC7B,GAAsB,oHAGtB,GAAsB,qUAEpB,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAS,EAAM,GAgB3B,GAfA,EAAW,EAAW,OAAc,+BAAiCH,GAAS,aAAc,EAAO,GAAI,GAAM,EAAK,EAAEA,GAAS,MAAO,EAAO,IAAK,GAAM,EAAK,GAAK,mBAAuCC,GAAiC,EAAO,IAAI,MAAM,GAAK,EAAe,EAAK,yBAA2D,gDAAuDD,GAAS,eAAgB,EAAO,IAAI,KAAK,EAAG,GAAM,EAAK,GAAK,iCAC5b,EAAO,IAAI,OAAO,EACtB,GAAsB,6BAGtB,GAAsB,2BAEtB,EAAW,EAAW,yBAAuDC,GAAiC,EAAO,IAAI,QAAQ,EAAI,MAAQ,IAAuB,EAAK,gCACrK,EAAO,IAAI,eAAe,EAC9B,EAAW,EAAW,SAAsBA,GAAiC,EAAO,IAAI,eAAe,GAAK,EAAe,EAAK,eAGhI,GAAsB,uBAEtB,GAAsB,0BAClB,EAAO,IAAI,SAAS,EAAG,CAC3B,IAAI,EAAU,EAAO,EAAO,IAAI,SAAS,CAAC,EAC1C,EAAW,EAAW,QAAgBD,GAAS,QAAS,EAAS,GAAM,EAAK,EAAK,IAAYC,GAAiC,EAAQ,QAAQ,GAAK,EAAe,EAAK,SACvK,KAEA,IAAsB,qBAEtB,GAAsB,+HAClB,EAAO,IAAI,QAAQ,EACvB,GAAsB,gIAGtB,GAAsB,6HAEtB,GAAsB,0HAChB,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAS,EAAM,GAgBzB,GAfA,EAAW,EAAW,OAAc,+BAAiCD,GAAS,aAAc,EAAO,GAAI,GAAM,EAAK,EAAEA,GAAS,MAAO,EAAO,IAAK,GAAM,EAAK,GAAK,mBAAuCC,GAAiC,EAAO,IAAI,MAAM,GAAK,EAAe,EAAK,yBAA2D,gDAAuDD,GAAS,eAAgB,EAAO,IAAI,KAAK,EAAG,GAAM,EAAK,GAAK,iCAC5b,EAAO,IAAI,OAAO,EACtB,GAAsB,6BAGtB,GAAsB,2BAEtB,EAAW,EAAW,yBAAuDC,GAAiC,EAAO,IAAI,QAAQ,EAAI,MAAQ,IAAuB,EAAK,gCACrK,EAAO,IAAI,eAAe,EAC9B,EAAW,EAAW,SAAsBA,GAAiC,EAAO,IAAI,eAAe,GAAK,EAAe,EAAK,eAGhI,GAAsB,uBAEtB,GAAsB,0BAClB,EAAO,IAAI,SAAS,EAAG,CAC3B,IAAI,EAAU,EAAO,EAAO,IAAI,SAAS,CAAC,EAC1C,EAAW,EAAW,QAAgBD,GAAS,QAAS,EAAS,GAAM,EAAK,EAAK,IAAYC,GAAiC,EAAQ,QAAQ,GAAK,EAAe,EAAK,SACvK,KAEA,IAAsB,qBAEtB,GAAsB,+HAClB,EAAO,IAAI,QAAQ,EACvB,GAAsB,gIAGtB,GAAsB,6HAEtB,GAAsB,0HAClB,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEZ,GAAsB,oBAEtB,GAAsB,gKAClB,EAAA,CAAE,KAAK,KAAM,YAAa,EACtB,EAAgB,QAChB,OAAO,QAAY,IAAc,QAAU,IAAA,GAAW,WAAY,EAClE,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,EAAS,EAC7C,CAAS,CChFtB,IAAI,GAAmB,EAAK,OAAO,CAC/B,OAAQ,CACJ,iCAAkC,SAAU,EAAG,CAC3C,IAAI,EAAS,KAAK,mBAAmB,CAAC,EAClC,MAAqB,CACrB,EAAO,KAAK,cAAe,UAAY,CACnC,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,UAAU,CAAC,EAAO,IAAI,QAAQ,CAAC,CAC5C,EAEI,EAAO,IAAI,QAAQ,EACnB,GAAQ,CACJ,KAAM,yKAGN,QAAS,MACT,SAAU,cACV,YAAa,GACb,gBAAiB,CACrB,CAAC,EAED,EAAa,CAErB,EAEA,uBAAwB,UAAY,CAChC,KAAK,kBAAkB,CAC3B,EAEA,wBAAyB,SAAU,EAAG,CAClC,IAAI,EAAS,KAAK,mBAAmB,CAAC,EACtC,KAAK,kBAAkB,CAAM,CACjC,EAEA,0BAA2B,SAAU,EAAG,CACpC,IAAI,EAAS,KAAK,mBAAmB,CAAC,EAEtC,GAAQ,CACJ,KAAM,kDACA,EAAO,OAAO,MAAM,EAAI,uFAE9B,QAAS,SACT,YAAa,GACb,oBAAuB,CACnB,EAAO,GAAG,YAAa,UAAY,CAC/B,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,mBACN,KAAM,UACN,QAAS,GACb,CAAC,EACD,KAAK,OAAO,CAChB,EAAG,IAAI,CAAC,CAAC,QAAQ,CACrB,CACJ,CAAC,CACL,CACJ,EAOA,WAAY,SAAU,EAAU,CAC5B,KAAK,MAAQ,EAAS,KACtB,KAAK,QAAU,GAEf,KAAK,WAAa,IAAI,GACtB,KAAK,WAAW,GAAG,YAAa,UAAY,CACxC,KAAK,QAAU,GACf,KAAK,OAAO,EACZ,KAAK,QAAQ,WAAW,CAC5B,EAAG,IAAI,CAAC,CAAC,MAAM,CACX,OAAQ,KAAK,MAAM,EACvB,CAAC,EAED,KAAK,eAAiB,IAAI,GAAe,CACrC,WAAY,KAAK,WACjB,WAAY,IAChB,CAAC,CACL,EAEA,OAAQ,UAAY,CACX,QAAK,QAgBV,OAZA,KAAK,IAAI,KAAKG,GAAmB,CAC7B,QAAS,KAAK,WAAW,QAAQ,EACjC,OAAQC,CACZ,CAAC,CAAC,EAEF,KAAK,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAC9B,UAAW,KAAK,EAAE,kBAAkB,EACpC,UAAW,KACf,CAAC,EAED,KAAK,eAAe,WAAW,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,OAAO,EAEhE,IACX,EAEA,mBAAoB,SAAU,EAAG,CAC7B,IAAI,GAAA,EAAA,EAAA,QAAA,CAAQ,EAAE,aAAa,CAAC,CAAC,QAAQ,sBAAsB,CAAC,CAAC,KAAK,KAAK,EACvE,OAAO,KAAK,WAAW,IAAI,CAAG,CAClC,EAEA,kBAAmB,SAAU,EAAQ,CACjC,AACI,KAAK,mBAAmB,IAAI,GAAiB,CACzC,IAAA,EAAA,EAAA,QAAA,CAAM,qBAAqB,EAC3B,WAAY,IAChB,CAAC,CAAC,CAAC,GAAG,UAAW,SAAU,EAAO,CACzB,KAAK,WAAW,IAAI,EAAM,GAAG,GAC9B,KAAK,WAAW,IAAI,CAAK,EAE7B,KAAK,OAAO,CAChB,EAAG,IAAI,EAEX,KAAK,iBAAiB,MAAQ,GAAU,KACxC,KAAK,iBAAiB,OAAO,CACjC,CACJ,CAAC,gBCrID,EAAO,QAAU,UAAY,CAC3B,OAAO,OAAO,SAAY,YAAc,QAAQ,WAAa,QAAQ,UAAU,IACjF,eCNA,IAAI,EACE,EAAkB,CACtB,EACA,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC1C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC7C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACtD,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IACxD,EAQA,EAAQ,cAAgB,SAAwB,EAAS,CACvD,GAAI,CAAC,EAAS,MAAU,MAAM,uCAAuC,EACrE,GAAI,EAAU,GAAK,EAAU,GAAI,MAAU,MAAM,2CAA2C,EAC5F,OAAO,EAAU,EAAI,EACvB,EAQA,EAAQ,wBAA0B,SAAkC,EAAS,CAC3E,OAAO,EAAgB,EACzB,EAQA,EAAQ,YAAc,SAAU,EAAM,CACpC,IAAI,EAAQ,EAEZ,KAAO,IAAS,GACd,IACA,KAAU,EAGZ,OAAO,CACT,EAEA,EAAQ,kBAAoB,SAA4B,EAAG,CACzD,GAAI,OAAO,GAAM,WACf,MAAU,MAAM,uCAAuC,EAGzD,EAAiB,CACnB,EAEA,EAAQ,mBAAqB,UAAY,CACvC,OAAc,IAAmB,MACnC,EAEA,EAAQ,OAAS,SAAiB,EAAO,CACvC,OAAO,EAAe,CAAK,CAC7B,eC9DA,EAAQ,EAAI,CAAE,IAAK,CAAE,EACrB,EAAQ,EAAI,CAAE,IAAK,CAAE,EACrB,EAAQ,EAAI,CAAE,IAAK,CAAE,EACrB,EAAQ,EAAI,CAAE,IAAK,CAAE,EAErB,SAAS,EAAY,EAAQ,CAC3B,GAAI,OAAO,GAAW,SACpB,MAAU,MAAM,uBAAuB,EAKzC,OAFc,EAAO,YAET,EAAZ,CACE,IAAK,IACL,IAAK,MACH,OAAO,EAAQ,EAEjB,IAAK,IACL,IAAK,SACH,OAAO,EAAQ,EAEjB,IAAK,IACL,IAAK,WACH,OAAO,EAAQ,EAEjB,IAAK,IACL,IAAK,OACH,OAAO,EAAQ,EAEjB,QACE,MAAU,MAAM,qBAAuB,CAAM,CACjD,CACF,CAEA,EAAQ,QAAU,SAAkB,EAAO,CACzC,OAAO,GAAgB,EAAM,MAAQ,QACnC,EAAM,KAAO,GAAK,EAAM,IAAM,CAClC,EAEA,EAAQ,KAAO,SAAe,EAAO,EAAc,CACjD,GAAI,EAAQ,QAAQ,CAAK,EACvB,OAAO,EAGT,GAAI,CACF,OAAO,EAAW,CAAK,CACzB,MAAY,CACV,OAAO,CACT,CACF,mBCjDA,SAAS,GAAa,CACpB,KAAK,OAAS,CAAC,EACf,KAAK,OAAS,CAChB,CAEA,EAAU,UAAY,CAEpB,IAAK,SAAU,EAAO,CACpB,IAAM,EAAW,KAAK,MAAM,EAAQ,CAAC,EACrC,OAAS,KAAK,OAAO,KAAe,EAAI,EAAQ,EAAM,IAAO,CAC/D,EAEA,IAAK,SAAU,EAAK,EAAQ,CAC1B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IAC1B,KAAK,QAAS,IAAS,EAAS,EAAI,EAAM,IAAO,CAAC,CAEtD,EAEA,gBAAiB,UAAY,CAC3B,OAAO,KAAK,MACd,EAEA,OAAQ,SAAU,EAAK,CACrB,IAAM,EAAW,KAAK,MAAM,KAAK,OAAS,CAAC,EACvC,KAAK,OAAO,QAAU,GACxB,KAAK,OAAO,KAAK,CAAC,EAGhB,IACF,KAAK,OAAO,IAAc,MAAU,KAAK,OAAS,GAGpD,KAAK,QACP,CACF,EAEA,EAAO,QAAU,mBC/BjB,SAAS,EAAW,EAAM,CACxB,GAAI,CAAC,GAAQ,EAAO,EAClB,MAAU,MAAM,mDAAmD,EAGrE,KAAK,KAAO,EACZ,KAAK,KAAO,IAAI,WAAW,EAAO,CAAI,EACtC,KAAK,YAAc,IAAI,WAAW,EAAO,CAAI,CAC/C,CAWA,EAAU,UAAU,IAAM,SAAU,EAAK,EAAK,EAAO,EAAU,CAC7D,IAAM,EAAQ,EAAM,KAAK,KAAO,EAChC,KAAK,KAAK,GAAS,EACf,IAAU,KAAK,YAAY,GAAS,GAC1C,EASA,EAAU,UAAU,IAAM,SAAU,EAAK,EAAK,CAC5C,OAAO,KAAK,KAAK,EAAM,KAAK,KAAO,EACrC,EAUA,EAAU,UAAU,IAAM,SAAU,EAAK,EAAK,EAAO,CACnD,KAAK,KAAK,EAAM,KAAK,KAAO,IAAQ,CACtC,EASA,EAAU,UAAU,WAAa,SAAU,EAAK,EAAK,CACnD,OAAO,KAAK,YAAY,EAAM,KAAK,KAAO,EAC5C,EAEA,EAAO,QAAU,eCtDjB,IAAM,EAAA,GAAA,CAAA,CAAmC,cAgBzC,EAAQ,gBAAkB,SAA0B,EAAS,CAC3D,GAAI,IAAY,EAAG,MAAO,CAAC,EAE3B,IAAM,EAAW,KAAK,MAAM,EAAU,CAAC,EAAI,EACrC,EAAO,EAAc,CAAO,EAC5B,EAAY,IAAS,IAAM,GAAK,KAAK,MAAM,EAAO,KAAO,EAAI,EAAW,EAAE,EAAI,EAC9E,EAAY,CAAC,EAAO,CAAC,EAE3B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,EAAG,IAChC,EAAU,GAAK,EAAU,EAAI,GAAK,EAKpC,OAFA,EAAU,KAAK,CAAC,EAET,EAAU,QAAQ,CAC3B,EAsBA,EAAQ,aAAe,SAAuB,EAAS,CACrD,IAAM,EAAS,CAAC,EACV,EAAM,EAAQ,gBAAgB,CAAO,EACrC,EAAY,EAAI,OAEtB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,IAC7B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,IAExB,IAAM,GAAK,IAAM,GACjB,IAAM,GAAK,IAAM,EAAY,GAC7B,IAAM,EAAY,GAAK,IAAM,GAIlC,EAAO,KAAK,CAAC,EAAI,GAAI,EAAI,EAAE,CAAC,EAIhC,OAAO,CACT,eClFA,IAAM,EAAA,GAAA,CAAA,CAAmC,cACnC,EAAsB,EAS5B,EAAQ,aAAe,SAAuB,EAAS,CACrD,IAAM,EAAO,EAAc,CAAO,EAElC,MAAO,CAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAO,EAAqB,CAAC,EAE9B,CAAC,EAAG,EAAO,CAAmB,CAChC,CACF,eCjBA,EAAQ,SAAW,CACjB,WAAY,EACZ,WAAY,EACZ,WAAY,EACZ,WAAY,EACZ,WAAY,EACZ,WAAY,EACZ,WAAY,EACZ,WAAY,CACd,EAMA,IAAM,EAAgB,CACpB,GAAI,EACJ,GAAI,EACJ,GAAI,GACJ,GAAI,EACN,EAQA,EAAQ,QAAU,SAAkB,EAAM,CACxC,OAAO,GAAQ,MAAQ,IAAS,IAAM,CAAC,MAAM,CAAI,GAAK,GAAQ,GAAK,GAAQ,CAC7E,EASA,EAAQ,KAAO,SAAe,EAAO,CACnC,OAAO,EAAQ,QAAQ,CAAK,EAAI,SAAS,EAAO,EAAE,EAAI,IAAA,EACxD,EASA,EAAQ,aAAe,SAAuB,EAAM,CAClD,IAAM,EAAO,EAAK,KACd,EAAS,EACT,EAAe,EACf,EAAe,EACf,EAAU,KACV,EAAU,KAEd,IAAK,IAAI,EAAM,EAAG,EAAM,EAAM,IAAO,CACnC,EAAe,EAAe,EAC9B,EAAU,EAAU,KAEpB,IAAK,IAAI,EAAM,EAAG,EAAM,EAAM,IAAO,CACnC,IAAIC,EAAS,EAAK,IAAI,EAAK,CAAG,EAC1BA,IAAW,EACb,KAEI,GAAgB,IAAG,GAAU,EAAc,IAAM,EAAe,IACpE,EAAUA,EACV,EAAe,GAGjB,EAAS,EAAK,IAAI,EAAK,CAAG,EACtBA,IAAW,EACb,KAEI,GAAgB,IAAG,GAAU,EAAc,IAAM,EAAe,IACpE,EAAUA,EACV,EAAe,EAEnB,CAEI,GAAgB,IAAG,GAAU,EAAc,IAAM,EAAe,IAChE,GAAgB,IAAG,GAAU,EAAc,IAAM,EAAe,GACtE,CAEA,OAAO,CACT,EAOA,EAAQ,aAAe,SAAuB,EAAM,CAClD,IAAM,EAAO,EAAK,KACd,EAAS,EAEb,IAAK,IAAI,EAAM,EAAG,EAAM,EAAO,EAAG,IAChC,IAAK,IAAI,EAAM,EAAG,EAAM,EAAO,EAAG,IAAO,CACvC,IAAM,EAAO,EAAK,IAAI,EAAK,CAAG,EAC5B,EAAK,IAAI,EAAK,EAAM,CAAC,EACrB,EAAK,IAAI,EAAM,EAAG,CAAG,EACrB,EAAK,IAAI,EAAM,EAAG,EAAM,CAAC,GAEvB,IAAS,GAAK,IAAS,IAAG,GAChC,CAGF,OAAO,EAAS,EAAc,EAChC,EAQA,EAAQ,aAAe,SAAuB,EAAM,CAClD,IAAM,EAAO,EAAK,KACd,EAAS,EACT,EAAU,EACV,EAAU,EAEd,IAAK,IAAI,EAAM,EAAG,EAAM,EAAM,IAAO,CACnC,EAAU,EAAU,EACpB,IAAK,IAAI,EAAM,EAAG,EAAM,EAAM,IAC5B,EAAY,GAAW,EAAK,KAAS,EAAK,IAAI,EAAK,CAAG,EAClD,GAAO,KAAO,IAAY,MAAS,IAAY,KAAQ,IAE3D,EAAY,GAAW,EAAK,KAAS,EAAK,IAAI,EAAK,CAAG,EAClD,GAAO,KAAO,IAAY,MAAS,IAAY,KAAQ,GAE/D,CAEA,OAAO,EAAS,EAAc,EAChC,EAUA,EAAQ,aAAe,SAAuB,EAAM,CAClD,IAAI,EAAY,EACV,EAAe,EAAK,KAAK,OAE/B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAc,IAAK,GAAa,EAAK,KAAK,GAI9D,OAFU,KAAK,IAAI,KAAK,KAAM,EAAY,IAAM,EAAgB,CAAC,EAAI,EAE9D,EAAI,EAAc,EAC3B,EAUA,SAAS,EAAW,EAAa,EAAG,EAAG,CACrC,OAAQ,EAAR,CACE,KAAK,EAAQ,SAAS,WAAY,OAAQ,EAAI,GAAK,GAAM,EACzD,KAAK,EAAQ,SAAS,WAAY,OAAO,EAAI,GAAM,EACnD,KAAK,EAAQ,SAAS,WAAY,OAAO,EAAI,GAAM,EACnD,KAAK,EAAQ,SAAS,WAAY,OAAQ,EAAI,GAAK,GAAM,EACzD,KAAK,EAAQ,SAAS,WAAY,OAAQ,KAAK,MAAM,EAAI,CAAC,EAAI,KAAK,MAAM,EAAI,CAAC,GAAK,GAAM,EACzF,KAAK,EAAQ,SAAS,WAAY,OAAQ,EAAI,EAAK,EAAK,EAAI,EAAK,GAAM,EACvE,KAAK,EAAQ,SAAS,WAAY,OAAS,EAAI,EAAK,EAAK,EAAI,EAAK,GAAK,GAAM,EAC7E,KAAK,EAAQ,SAAS,WAAY,OAAS,EAAI,EAAK,GAAK,EAAI,GAAK,GAAK,GAAM,EAE7E,QAAS,MAAU,MAAM,mBAAqB,CAAW,CAC3D,CACF,CAQA,EAAQ,UAAY,SAAoB,EAAS,EAAM,CACrD,IAAM,EAAO,EAAK,KAElB,IAAK,IAAI,EAAM,EAAG,EAAM,EAAM,IAC5B,IAAK,IAAI,EAAM,EAAG,EAAM,EAAM,IACxB,EAAK,WAAW,EAAK,CAAG,GAC5B,EAAK,IAAI,EAAK,EAAK,EAAU,EAAS,EAAK,CAAG,CAAC,CAGrD,EAQA,EAAQ,YAAc,SAAsB,EAAM,EAAiB,CACjE,IAAM,EAAc,OAAO,KAAK,EAAQ,QAAQ,CAAC,CAAC,OAC9C,EAAc,EACd,EAAe,IAEnB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAa,IAAK,CACpC,EAAgB,CAAC,EACjB,EAAQ,UAAU,EAAG,CAAI,EAGzB,IAAM,EACJ,EAAQ,aAAa,CAAI,EACzB,EAAQ,aAAa,CAAI,EACzB,EAAQ,aAAa,CAAI,EACzB,EAAQ,aAAa,CAAI,EAG3B,EAAQ,UAAU,EAAG,CAAI,EAErB,EAAU,IACZ,EAAe,EACf,EAAc,EAElB,CAEA,OAAO,CACT,eCzOA,IAAM,EAAA,GAAA,EAEA,EAAkB,CAEtB,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GACT,EAAG,EAAG,GAAI,GACV,EAAG,EAAG,GAAI,GACV,EAAG,EAAG,GAAI,GACV,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,EACd,EAEM,EAAqB,CAEzB,EAAG,GAAI,GAAI,GACX,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,IACZ,GAAI,GAAI,IAAK,IACb,GAAI,GAAI,IAAK,IACb,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,KACf,IAAK,IAAK,IAAK,KACf,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,IACnB,EAUA,EAAQ,eAAiB,SAAyB,EAAS,EAAsB,CAC/E,OAAQ,EAAR,CACE,KAAK,EAAQ,EACX,OAAO,GAAiB,EAAU,GAAK,EAAI,GAC7C,KAAK,EAAQ,EACX,OAAO,GAAiB,EAAU,GAAK,EAAI,GAC7C,KAAK,EAAQ,EACX,OAAO,GAAiB,EAAU,GAAK,EAAI,GAC7C,KAAK,EAAQ,EACX,OAAO,GAAiB,EAAU,GAAK,EAAI,GAC7C,QACE,MACJ,CACF,EAUA,EAAQ,uBAAyB,SAAiC,EAAS,EAAsB,CAC/F,OAAQ,EAAR,CACE,KAAK,EAAQ,EACX,OAAO,GAAoB,EAAU,GAAK,EAAI,GAChD,KAAK,EAAQ,EACX,OAAO,GAAoB,EAAU,GAAK,EAAI,GAChD,KAAK,EAAQ,EACX,OAAO,GAAoB,EAAU,GAAK,EAAI,GAChD,KAAK,EAAQ,EACX,OAAO,GAAoB,EAAU,GAAK,EAAI,GAChD,QACE,MACJ,CACF,eCtIA,IAAM,EAAY,IAAI,WAAW,GAAG,EAC9B,EAAY,IAAI,WAAW,GAAG,GASlC,UAAuB,CACvB,IAAI,EAAI,EACR,IAAK,IAAI,EAAI,EAAG,EAAI,IAAK,IACvB,EAAU,GAAK,EACf,EAAU,GAAK,EAEf,IAAM,EAIF,EAAI,MACN,GAAK,KAQT,IAAK,IAAI,EAAI,IAAK,EAAI,IAAK,IACzB,EAAU,GAAK,EAAU,EAAI,IAEjC,EAAA,CAAE,EAQF,EAAQ,IAAM,SAAc,EAAG,CAC7B,GAAI,EAAI,EAAG,MAAU,MAAM,OAAS,EAAI,GAAG,EAC3C,OAAO,EAAU,EACnB,EAQA,EAAQ,IAAM,SAAc,EAAG,CAC7B,OAAO,EAAU,EACnB,EASA,EAAQ,IAAM,SAAc,EAAG,EAAG,CAKhC,OAJI,IAAM,GAAK,IAAM,EAAU,EAIxB,EAAU,EAAU,GAAK,EAAU,GAC5C,eCpEA,IAAM,EAAA,GAAA,EASN,EAAQ,IAAM,SAAc,EAAI,EAAI,CAClC,IAAM,EAAQ,IAAI,WAAW,EAAG,OAAS,EAAG,OAAS,CAAC,EAEtD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,OAAQ,IAC7B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,OAAQ,IAC7B,EAAM,EAAI,IAAM,EAAG,IAAI,EAAG,GAAI,EAAG,EAAE,EAIvC,OAAO,CACT,EASA,EAAQ,IAAM,SAAc,EAAU,EAAS,CAC7C,IAAI,EAAS,IAAI,WAAW,CAAQ,EAEpC,KAAQ,EAAO,OAAS,EAAQ,QAAW,GAAG,CAC5C,IAAM,EAAQ,EAAO,GAErB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAClC,EAAO,IAAM,EAAG,IAAI,EAAQ,GAAI,CAAK,EAIvC,IAAI,EAAS,EACb,KAAO,EAAS,EAAO,QAAU,EAAO,KAAY,GAAG,IACvD,EAAS,EAAO,MAAM,CAAM,CAC9B,CAEA,OAAO,CACT,EASA,EAAQ,qBAAuB,SAA+B,EAAQ,CACpE,IAAI,EAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EAC7B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IAC1B,EAAO,EAAQ,IAAI,EAAM,IAAI,WAAW,CAAC,EAAG,EAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAGzD,OAAO,CACT,mBC7DA,IAAM,EAAA,GAAA,EAEN,SAAS,EAAoB,EAAQ,CACnC,KAAK,QAAU,IAAA,GACf,KAAK,OAAS,EAEV,KAAK,QAAQ,KAAK,WAAW,KAAK,MAAM,CAC9C,CAQA,EAAmB,UAAU,WAAa,SAAqB,EAAQ,CAErE,KAAK,OAAS,EACd,KAAK,QAAU,EAAW,qBAAqB,KAAK,MAAM,CAC5D,EAQA,EAAmB,UAAU,OAAS,SAAiB,EAAM,CAC3D,GAAI,CAAC,KAAK,QACR,MAAU,MAAM,yBAAyB,EAK3C,IAAM,EAAa,IAAI,WAAW,EAAK,OAAS,KAAK,MAAM,EAC3D,EAAW,IAAI,CAAI,EAInB,IAAM,EAAY,EAAW,IAAI,EAAY,KAAK,OAAO,EAKnD,EAAQ,KAAK,OAAS,EAAU,OACtC,GAAI,EAAQ,EAAG,CACb,IAAM,EAAO,IAAI,WAAW,KAAK,MAAM,EAGvC,OAFA,EAAK,IAAI,EAAW,CAAK,EAElB,CACT,CAEA,OAAO,CACT,EAEA,EAAO,QAAU,eCjDjB,EAAQ,QAAU,SAAkB,EAAS,CAC3C,MAAO,CAAC,MAAM,CAAO,GAAK,GAAW,GAAK,GAAW,EACvD,eCRA,IAAM,EAAU,SACV,EAAe,oBACjB,EAAQ,mNAIZ,EAAQ,EAAM,QAAQ,KAAM,KAAK,EAEjC,IAAM,EAAO,6BAA+B,EAAQ;MAEpD,EAAQ,MAAQ,IAAI,OAAO,EAAO,GAAG,EACrC,EAAQ,WAAiB,OAAO,wBAAyB,GAAG,EAC5D,EAAQ,KAAO,IAAI,OAAO,EAAM,GAAG,EACnC,EAAQ,QAAU,IAAI,OAAO,EAAS,GAAG,EACzC,EAAQ,aAAe,IAAI,OAAO,EAAc,GAAG,EAEnD,IAAM,EAAiB,OAAO,IAAM,EAAQ,GAAG,EACzC,EAAmB,OAAO,UAAmB,EAC7C,EAAwB,OAAO,wBAAwB,EAE7D,EAAQ,UAAY,SAAoB,EAAK,CAC3C,OAAO,EAAW,KAAK,CAAG,CAC5B,EAEA,EAAQ,YAAc,SAAsB,EAAK,CAC/C,OAAO,EAAa,KAAK,CAAG,CAC9B,EAEA,EAAQ,iBAAmB,SAA2B,EAAK,CACzD,OAAO,EAAkB,KAAK,CAAG,CACnC,eC9BA,IAAM,EAAA,GAAA,EACA,EAAA,GAAA,EASN,EAAQ,QAAU,CAChB,GAAI,UACJ,IAAK,EACL,OAAQ,CAAC,GAAI,GAAI,EAAE,CACrB,EAWA,EAAQ,aAAe,CACrB,GAAI,eACJ,IAAK,EACL,OAAQ,CAAC,EAAG,GAAI,EAAE,CACpB,EAOA,EAAQ,KAAO,CACb,GAAI,OACJ,IAAK,EACL,OAAQ,CAAC,EAAG,GAAI,EAAE,CACpB,EAWA,EAAQ,MAAQ,CACd,GAAI,QACJ,IAAK,EACL,OAAQ,CAAC,EAAG,GAAI,EAAE,CACpB,EAQA,EAAQ,MAAQ,CACd,IAAK,EACP,EAUA,EAAQ,sBAAwB,SAAgC,EAAM,EAAS,CAC7E,GAAI,CAAC,EAAK,OAAQ,MAAU,MAAM,iBAAmB,CAAI,EAEzD,GAAI,CAAC,EAAa,QAAQ,CAAO,EAC/B,MAAU,MAAM,oBAAsB,CAAO,EAK/C,OAFI,GAAW,GAAK,EAAU,GAAW,EAAK,OAAO,GAC5C,EAAU,GAAW,EAAK,OAAO,GACnC,EAAK,OAAO,EACrB,EAQA,EAAQ,mBAAqB,SAA6B,EAAS,CAI5D,OAHD,EAAM,YAAY,CAAO,EAAU,EAAQ,QACtC,EAAM,iBAAiB,CAAO,EAAU,EAAQ,aAChD,EAAM,UAAU,CAAO,EAAU,EAAQ,MACtC,EAAQ,IACtB,EAQA,EAAQ,SAAW,SAAmB,EAAM,CAC1C,GAAI,GAAQ,EAAK,GAAI,OAAO,EAAK,GACjC,MAAU,MAAM,cAAc,CAChC,EAQA,EAAQ,QAAU,SAAkB,EAAM,CACxC,OAAO,GAAQ,EAAK,KAAO,EAAK,MAClC,EAQA,SAAS,EAAY,EAAQ,CAC3B,GAAI,OAAO,GAAW,SACpB,MAAU,MAAM,uBAAuB,EAKzC,OAFc,EAAO,YAET,EAAZ,CACE,IAAK,UACH,OAAO,EAAQ,QACjB,IAAK,eACH,OAAO,EAAQ,aACjB,IAAK,QACH,OAAO,EAAQ,MACjB,IAAK,OACH,OAAO,EAAQ,KACjB,QACE,MAAU,MAAM,iBAAmB,CAAM,CAC7C,CACF,CAUA,EAAQ,KAAO,SAAe,EAAO,EAAc,CACjD,GAAI,EAAQ,QAAQ,CAAK,EACvB,OAAO,EAGT,GAAI,CACF,OAAO,EAAW,CAAK,CACzB,MAAY,CACV,OAAO,CACT,CACF,eCtKA,IAAM,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EAGA,EAAM,KACN,EAAU,EAAM,YAAY,CAAG,EAErC,SAAS,EAA6B,EAAM,EAAQ,EAAsB,CACxE,IAAK,IAAI,EAAiB,EAAG,GAAkB,GAAI,IACjD,GAAI,GAAU,EAAQ,YAAY,EAAgB,EAAsB,CAAI,EAC1E,OAAO,CAKb,CAEA,SAAS,EAAsB,EAAM,EAAS,CAE5C,OAAO,EAAK,sBAAsB,EAAM,CAAO,EAAI,CACrD,CAEA,SAAS,EAA2B,EAAU,EAAS,CACrD,IAAI,EAAY,EAOhB,OALA,EAAS,QAAQ,SAAU,EAAM,CAC/B,IAAM,EAAe,EAAqB,EAAK,KAAM,CAAO,EAC5D,GAAa,EAAe,EAAK,cAAc,CACjD,CAAC,EAEM,CACT,CAEA,SAAS,EAA4B,EAAU,EAAsB,CACnE,IAAK,IAAI,EAAiB,EAAG,GAAkB,GAAI,IAEjD,GADe,EAA0B,EAAU,CAC1C,GAAK,EAAQ,YAAY,EAAgB,EAAsB,EAAK,KAAK,EAChF,OAAO,CAKb,CAUA,EAAQ,KAAO,SAAe,EAAO,EAAc,CAKjD,OAJI,EAAa,QAAQ,CAAK,EACrB,SAAS,EAAO,EAAE,EAGpB,CACT,EAWA,EAAQ,YAAc,SAAsB,EAAS,EAAsB,EAAM,CAC/E,GAAI,CAAC,EAAa,QAAQ,CAAO,EAC/B,MAAU,MAAM,yBAAyB,EAIhC,IAAS,SAAa,EAAO,EAAK,MAS7C,IAAM,GANiB,EAAM,wBAAwB,CAMR,EAHpB,EAAO,uBAAuB,EAAS,CAGA,GAAK,EAErE,GAAI,IAAS,EAAK,MAAO,OAAO,EAEhC,IAAM,EAAa,EAAyB,EAAqB,EAAM,CAAO,EAG9E,OAAQ,EAAR,CACE,KAAK,EAAK,QACR,OAAO,KAAK,MAAO,EAAa,GAAM,CAAC,EAEzC,KAAK,EAAK,aACR,OAAO,KAAK,MAAO,EAAa,GAAM,CAAC,EAEzC,KAAK,EAAK,MACR,OAAO,KAAK,MAAM,EAAa,EAAE,EAEnC,KAAK,EAAK,KACV,QACE,OAAO,KAAK,MAAM,EAAa,CAAC,CACpC,CACF,EAUA,EAAQ,sBAAwB,SAAgC,EAAM,EAAsB,CAC1F,IAAI,EAEE,EAAM,EAAQ,KAAK,EAAsB,EAAQ,CAAC,EAExD,GAAI,MAAM,QAAQ,CAAI,EAAG,CACvB,GAAI,EAAK,OAAS,EAChB,OAAO,EAA2B,EAAM,CAAG,EAG7C,GAAI,EAAK,SAAW,EAClB,MAAO,GAGT,EAAM,EAAK,EACb,KACE,GAAM,EAGR,OAAO,EAA4B,EAAI,KAAM,EAAI,UAAU,EAAG,CAAG,CACnE,EAYA,EAAQ,eAAiB,SAAyB,EAAS,CACzD,GAAI,CAAC,EAAa,QAAQ,CAAO,GAAK,EAAU,EAC9C,MAAU,MAAM,yBAAyB,EAG3C,IAAI,EAAI,GAAW,GAEnB,KAAO,EAAM,YAAY,CAAC,EAAI,GAAW,GACvC,GAAM,GAAQ,EAAM,YAAY,CAAC,EAAI,EAGvC,OAAQ,GAAW,GAAM,CAC3B,eClKA,IAAM,EAAA,GAAA,EAEA,EAAM,KACN,EAAW,MACX,EAAU,EAAM,YAAY,CAAG,EAYrC,EAAQ,eAAiB,SAAyB,EAAsB,EAAM,CAC5E,IAAM,EAAS,EAAqB,KAAO,EAAK,EAC5C,EAAI,GAAQ,GAEhB,KAAO,EAAM,YAAY,CAAC,EAAI,GAAW,GACvC,GAAM,GAAQ,EAAM,YAAY,CAAC,EAAI,EAMvC,OAAS,GAAQ,GAAM,GAAK,CAC9B,mBC5BA,IAAM,EAAA,GAAA,EAEN,SAAS,EAAa,EAAM,CAC1B,KAAK,KAAO,EAAK,QACjB,KAAK,KAAO,EAAK,SAAS,CAC5B,CAEA,EAAY,cAAgB,SAAwB,EAAQ,CAC1D,MAAO,IAAK,KAAK,MAAM,EAAS,CAAC,GAAM,EAAS,EAAO,EAAS,EAAK,EAAI,EAAK,EAChF,EAEA,EAAY,UAAU,UAAY,UAAsB,CACtD,OAAO,KAAK,KAAK,MACnB,EAEA,EAAY,UAAU,cAAgB,UAA0B,CAC9D,OAAO,EAAY,cAAc,KAAK,KAAK,MAAM,CACnD,EAEA,EAAY,UAAU,MAAQ,SAAgB,EAAW,CACvD,IAAI,EAAG,EAAO,EAId,IAAK,EAAI,EAAG,EAAI,GAAK,KAAK,KAAK,OAAQ,GAAK,EAC1C,EAAQ,KAAK,KAAK,OAAO,EAAG,CAAC,EAC7B,EAAQ,SAAS,EAAO,EAAE,EAE1B,EAAU,IAAI,EAAO,EAAE,EAKzB,IAAM,EAAe,KAAK,KAAK,OAAS,EACpC,EAAe,IACjB,EAAQ,KAAK,KAAK,OAAO,CAAC,EAC1B,EAAQ,SAAS,EAAO,EAAE,EAE1B,EAAU,IAAI,EAAO,EAAe,EAAI,CAAC,EAE7C,EAEA,EAAO,QAAU,mBC1CjB,IAAM,EAAA,GAAA,EAWA,EAAkB,wDAKxB,EAEA,SAAS,EAAkB,EAAM,CAC/B,KAAK,KAAO,EAAK,aACjB,KAAK,KAAO,CACd,CAEA,EAAiB,cAAgB,SAAwB,EAAQ,CAC/D,MAAO,IAAK,KAAK,MAAM,EAAS,CAAC,EAAS,EAAS,EAAd,CACvC,EAEA,EAAiB,UAAU,UAAY,UAAsB,CAC3D,OAAO,KAAK,KAAK,MACnB,EAEA,EAAiB,UAAU,cAAgB,UAA0B,CACnE,OAAO,EAAiB,cAAc,KAAK,KAAK,MAAM,CACxD,EAEA,EAAiB,UAAU,MAAQ,SAAgB,EAAW,CAC5D,IAAI,EAIJ,IAAK,EAAI,EAAG,EAAI,GAAK,KAAK,KAAK,OAAQ,GAAK,EAAG,CAE7C,IAAI,EAAQ,EAAgB,QAAQ,KAAK,KAAK,EAAE,EAAI,GAGpD,GAAS,EAAgB,QAAQ,KAAK,KAAK,EAAI,EAAE,EAGjD,EAAU,IAAI,EAAO,EAAE,CACzB,CAII,KAAK,KAAK,OAAS,GACrB,EAAU,IAAI,EAAgB,QAAQ,KAAK,KAAK,EAAE,EAAG,CAAC,CAE1D,EAEA,EAAO,QAAU,mBC1DjB,IAAM,EAAA,GAAA,EAEN,SAAS,EAAU,EAAM,CACvB,KAAK,KAAO,EAAK,KACb,OAAQ,GAAU,SACpB,KAAK,KAAO,IAAI,YAAY,CAAC,CAAC,OAAO,CAAI,EAEzC,KAAK,KAAO,IAAI,WAAW,CAAI,CAEnC,CAEA,EAAS,cAAgB,SAAwB,EAAQ,CACvD,OAAO,EAAS,CAClB,EAEA,EAAS,UAAU,UAAY,UAAsB,CACnD,OAAO,KAAK,KAAK,MACnB,EAEA,EAAS,UAAU,cAAgB,UAA0B,CAC3D,OAAO,EAAS,cAAc,KAAK,KAAK,MAAM,CAChD,EAEA,EAAS,UAAU,MAAQ,SAAU,EAAW,CAC9C,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,KAAK,OAAQ,EAAI,EAAG,IAC3C,EAAU,IAAI,KAAK,KAAK,GAAI,CAAC,CAEjC,EAEA,EAAO,QAAU,mBC7BjB,IAAM,EAAA,GAAA,EACA,EAAA,GAAA,EAEN,SAAS,EAAW,EAAM,CACxB,KAAK,KAAO,EAAK,MACjB,KAAK,KAAO,CACd,CAEA,EAAU,cAAgB,SAAwB,EAAQ,CACxD,OAAO,EAAS,EAClB,EAEA,EAAU,UAAU,UAAY,UAAsB,CACpD,OAAO,KAAK,KAAK,MACnB,EAEA,EAAU,UAAU,cAAgB,UAA0B,CAC5D,OAAO,EAAU,cAAc,KAAK,KAAK,MAAM,CACjD,EAEA,EAAU,UAAU,MAAQ,SAAU,EAAW,CAC/C,IAAI,EAKJ,IAAK,EAAI,EAAG,EAAI,KAAK,KAAK,OAAQ,IAAK,CACrC,IAAI,EAAQ,EAAM,OAAO,KAAK,KAAK,EAAE,EAGrC,GAAI,GAAS,OAAU,GAAS,MAE9B,GAAS,WAGJ,GAAI,GAAS,OAAU,GAAS,MAErC,GAAS,WAET,MAAU,MACR,2BAA6B,KAAK,KAAK,GAAK;gCACX,EAKrC,GAAW,IAAU,EAAK,KAAQ,KAAS,EAAQ,KAGnD,EAAU,IAAI,EAAO,EAAE,CACzB,CACF,EAEA,EAAO,QAAU,mBC9BjB,IAAI,EAAW,CACb,6BAA8B,SAAS,EAAO,EAAG,EAAG,CAGlD,IAAI,EAAe,CAAC,EAIhB,EAAQ,CAAC,EACb,EAAM,GAAK,EAMX,IAAI,EAAO,EAAS,cAAc,KAAK,EACvC,EAAK,KAAK,EAAG,CAAC,EAUd,IARA,IAAI,EACA,EAAG,EACH,EACA,EACA,EACA,EACA,EACA,EACG,CAAC,EAAK,MAAM,GAajB,IAAK,IAVL,GAAU,EAAK,IAAI,EACnB,EAAI,EAAQ,MACZ,EAAiB,EAAQ,KAGzB,EAAiB,EAAM,IAAM,CAAC,EAKpB,EACJ,EAAe,eAAe,CAAC,IAEjC,EAAY,EAAe,GAK3B,EAAgC,EAAiB,EAMjD,EAAiB,EAAM,GACvB,EAAsB,EAAM,KAAO,QAC/B,GAAe,EAAiB,KAClC,EAAM,GAAK,EACX,EAAK,KAAK,EAAG,CAA6B,EAC1C,EAAa,GAAK,IAM1B,GAAW,IAAM,QAAsB,EAAM,KAAO,OAAa,CAC/D,IAAI,EAAM,CAAC,8BAA+B,EAAG,OAAQ,EAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EACpE,MAAU,MAAM,CAAG,CACrB,CAEA,OAAO,CACT,EAEA,4CAA6C,SAAS,EAAc,EAAG,CAIrE,IAHA,IAAI,EAAQ,CAAC,EACT,EAAI,EAED,GACL,EAAM,KAAK,CAAC,EACZ,EAA2B,GAC3B,EAAI,EAAa,GAGnB,OADA,EAAM,QAAQ,EACP,CACT,EAEA,UAAW,SAAS,EAAO,EAAG,EAAG,CAC/B,IAAI,EAAe,EAAS,6BAA6B,EAAO,EAAG,CAAC,EACpE,OAAO,EAAS,4CACd,EAAc,CAAC,CACnB,EAKA,cAAe,CACb,KAAM,SAAU,EAAM,CACpB,IAAI,EAAI,EAAS,cACb,EAAI,CAAC,EACL,EAEJ,IAAK,IADL,KAAe,CAAC,EACJ,EACN,EAAE,eAAe,CAAG,IACtB,EAAE,GAAO,EAAE,IAKf,MAFA,GAAE,MAAQ,CAAC,EACX,EAAE,OAAS,EAAK,QAAU,EAAE,eACrB,CACT,EAEA,eAAgB,SAAU,EAAG,EAAG,CAC9B,OAAO,EAAE,KAAO,EAAE,IACpB,EAMA,KAAM,SAAU,EAAO,EAAM,CAC3B,IAAI,EAAO,CAAQ,QAAa,MAAI,EACpC,KAAK,MAAM,KAAK,CAAI,EACpB,KAAK,MAAM,KAAK,KAAK,MAAM,CAC7B,EAKA,IAAK,UAAY,CACf,OAAO,KAAK,MAAM,MAAM,CAC1B,EAEA,MAAO,UAAY,CACjB,OAAO,KAAK,MAAM,SAAW,CAC/B,CACF,CACF,EAIW,IAAW,SACpB,EAAO,QAAU,gBCnKnB,IAAM,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EAQN,SAAS,EAAqB,EAAK,CACjC,OAAO,SAAS,mBAAmB,CAAG,CAAC,CAAC,CAAC,MAC3C,CAUA,SAAS,EAAa,EAAO,EAAM,EAAK,CACtC,IAAM,EAAW,CAAC,EACd,EAEJ,MAAQ,EAAS,EAAM,KAAK,CAAG,KAAO,MACpC,EAAS,KAAK,CACZ,KAAM,EAAO,GACb,MAAO,EAAO,MACR,OACN,OAAQ,EAAO,EAAE,CAAC,MACpB,CAAC,EAGH,OAAO,CACT,CASA,SAAS,EAAuB,EAAS,CACvC,IAAM,EAAU,EAAY,EAAM,QAAS,EAAK,QAAS,CAAO,EAC1D,EAAe,EAAY,EAAM,aAAc,EAAK,aAAc,CAAO,EAC3E,EACA,EAYJ,OAVI,EAAM,mBAAmB,GAC3B,EAAW,EAAY,EAAM,KAAM,EAAK,KAAM,CAAO,EACrD,EAAY,EAAY,EAAM,MAAO,EAAK,MAAO,CAAO,IAExD,EAAW,EAAY,EAAM,WAAY,EAAK,KAAM,CAAO,EAC3D,EAAY,CAAC,GAGF,EAAQ,OAAO,EAAc,EAAU,CAE1C,CAAC,CACR,KAAK,SAAU,EAAI,EAAI,CACtB,OAAO,EAAG,MAAQ,EAAG,KACvB,CAAC,CAAC,CACD,IAAI,SAAU,EAAK,CAClB,MAAO,CACL,KAAM,EAAI,KACV,KAAM,EAAI,KACV,OAAQ,EAAI,MACd,CACF,CAAC,CACL,CAUA,SAAS,EAAsB,EAAQ,EAAM,CAC3C,OAAQ,EAAR,CACE,KAAK,EAAK,QACR,OAAO,EAAY,cAAc,CAAM,EACzC,KAAK,EAAK,aACR,OAAO,EAAiB,cAAc,CAAM,EAC9C,KAAK,EAAK,MACR,OAAO,EAAU,cAAc,CAAM,EACvC,KAAK,EAAK,KACR,OAAO,EAAS,cAAc,CAAM,CACxC,CACF,CAQA,SAAS,EAAe,EAAM,CAC5B,OAAO,EAAK,OAAO,SAAU,EAAK,EAAM,CACtC,IAAM,EAAU,EAAI,OAAS,GAAK,EAAI,EAAI,EAAI,OAAS,GAAK,KAO5D,OANI,GAAW,EAAQ,OAAS,EAAK,MACnC,EAAI,EAAI,OAAS,EAAE,CAAC,MAAQ,EAAK,KAC1B,IAGT,EAAI,KAAK,CAAI,EACN,EACT,EAAG,CAAC,CAAC,CACP,CAkBA,SAAS,EAAY,EAAM,CACzB,IAAM,EAAQ,CAAC,EACf,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,IAAM,EAAM,EAAK,GAEjB,OAAQ,EAAI,KAAZ,CACE,KAAK,EAAK,QACR,EAAM,KAAK,CAAC,EACV,CAAE,KAAM,EAAI,KAAM,KAAM,EAAK,aAAc,OAAQ,EAAI,MAAO,EAC9D,CAAE,KAAM,EAAI,KAAM,KAAM,EAAK,KAAM,OAAQ,EAAI,MAAO,CACxD,CAAC,EACD,MACF,KAAK,EAAK,aACR,EAAM,KAAK,CAAC,EACV,CAAE,KAAM,EAAI,KAAM,KAAM,EAAK,KAAM,OAAQ,EAAI,MAAO,CACxD,CAAC,EACD,MACF,KAAK,EAAK,MACR,EAAM,KAAK,CAAC,EACV,CAAE,KAAM,EAAI,KAAM,KAAM,EAAK,KAAM,OAAQ,EAAoB,EAAI,IAAI,CAAE,CAC3E,CAAC,EACD,MACF,KAAK,EAAK,KACR,EAAM,KAAK,CACT,CAAE,KAAM,EAAI,KAAM,KAAM,EAAK,KAAM,OAAQ,EAAoB,EAAI,IAAI,CAAE,CAC3E,CAAC,CACL,CACF,CAEA,OAAO,CACT,CAcA,SAAS,EAAY,EAAO,EAAS,CACnC,IAAM,EAAQ,CAAC,EACT,EAAQ,CAAE,MAAO,CAAC,CAAE,EACtB,EAAc,CAAC,OAAO,EAE1B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,EAAY,EAAM,GAClB,EAAiB,CAAC,EAExB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,OAAQ,IAAK,CACzC,IAAM,EAAO,EAAU,GACjB,EAAM,GAAK,EAAI,EAErB,EAAe,KAAK,CAAG,EACvB,EAAM,GAAO,CAAQ,OAAM,UAAW,CAAE,EACxC,EAAM,GAAO,CAAC,EAEd,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,OAAQ,IAAK,CAC3C,IAAM,EAAa,EAAY,GAE3B,EAAM,IAAe,EAAM,EAAW,CAAC,KAAK,OAAS,EAAK,MAC5D,EAAM,EAAW,CAAC,GAChB,EAAqB,EAAM,EAAW,CAAC,UAAY,EAAK,OAAQ,EAAK,IAAI,EACzE,EAAqB,EAAM,EAAW,CAAC,UAAW,EAAK,IAAI,EAE7D,EAAM,EAAW,CAAC,WAAa,EAAK,SAEhC,EAAM,KAAa,EAAM,EAAW,CAAC,UAAY,EAAK,QAE1D,EAAM,EAAW,CAAC,GAAO,EAAqB,EAAK,OAAQ,EAAK,IAAI,EAClE,EAAI,EAAK,sBAAsB,EAAK,KAAM,CAAO,EAEvD,CACF,CAEA,EAAc,CAChB,CAEA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,OAAQ,IACtC,EAAM,EAAY,GAAG,CAAC,IAAM,EAG9B,MAAO,CAAE,IAAK,EAAc,OAAM,CACpC,CAUA,SAAS,EAAoB,EAAM,EAAW,CAC5C,IAAI,EACE,EAAW,EAAK,mBAAmB,CAAI,EAK7C,GAHA,EAAO,EAAK,KAAK,EAAW,CAAQ,EAGhC,IAAS,EAAK,MAAQ,EAAK,IAAM,EAAS,IAC5C,MAAU,MAAM,IAAM,EAAO,iCACO,EAAK,SAAS,CAAI,EACpD;sBAA4B,EAAK,SAAS,CAAQ,CAAC,EAQvD,OAJI,IAAS,EAAK,OAAS,CAAC,EAAM,mBAAmB,IACnD,EAAO,EAAK,MAGN,EAAR,CACE,KAAK,EAAK,QACR,OAAO,IAAI,EAAY,CAAI,EAE7B,KAAK,EAAK,aACR,OAAO,IAAI,EAAiB,CAAI,EAElC,KAAK,EAAK,MACR,OAAO,IAAI,EAAU,CAAI,EAE3B,KAAK,EAAK,KACR,OAAO,IAAI,EAAS,CAAI,CAC5B,CACF,CAiBA,EAAQ,UAAY,SAAoB,EAAO,CAC7C,OAAO,EAAM,OAAO,SAAU,EAAK,EAAK,CAOtC,OANI,OAAO,GAAQ,SACjB,EAAI,KAAK,EAAmB,EAAK,IAAI,CAAC,EAC7B,EAAI,MACb,EAAI,KAAK,EAAmB,EAAI,KAAM,EAAI,IAAI,CAAC,EAG1C,CACT,EAAG,CAAC,CAAC,CACP,EAUA,EAAQ,WAAa,SAAqB,EAAM,EAAS,CAIvD,IAAM,EAAQ,EADA,EAFD,EAAsB,EAAM,EAAM,mBAAmB,CAEtC,CACC,EAAG,CAAO,EACjC,EAAO,EAAS,UAAU,EAAM,IAAK,QAAS,KAAK,EAEnD,EAAgB,CAAC,EACvB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAS,EAAG,IACnC,EAAc,KAAK,EAAM,MAAM,EAAK,GAAG,CAAC,IAAI,EAG9C,OAAO,EAAQ,UAAU,EAAc,CAAa,CAAC,CACvD,EAYA,EAAQ,SAAW,SAAmB,EAAM,CAC1C,OAAO,EAAQ,UACb,EAAsB,EAAM,EAAM,mBAAmB,CAAC,CACxD,CACF,eCzUA,IAAM,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EAkCN,SAAS,EAAoB,EAAQ,EAAS,CAC5C,IAAM,EAAO,EAAO,KACd,EAAM,EAAc,aAAa,CAAO,EAE9C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,IAAM,EAAM,EAAI,EAAE,CAAC,GACb,EAAM,EAAI,EAAE,CAAC,GAEnB,IAAK,IAAI,EAAI,GAAI,GAAK,EAAG,IACnB,OAAM,GAAK,IAAM,GAAQ,EAAM,GAEnC,IAAK,IAAI,EAAI,GAAI,GAAK,EAAG,IACnB,EAAM,GAAK,IAAM,GAAQ,EAAM,IAE9B,GAAK,GAAK,GAAK,IAAM,IAAM,GAAK,IAAM,IACxC,GAAK,GAAK,GAAK,IAAM,IAAM,GAAK,IAAM,IACtC,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACpC,EAAO,IAAI,EAAM,EAAG,EAAM,EAAG,GAAM,EAAI,EAEvC,EAAO,IAAI,EAAM,EAAG,EAAM,EAAG,GAAO,EAAI,EAIhD,CACF,CASA,SAAS,EAAoB,EAAQ,CACnC,IAAM,EAAO,EAAO,KAEpB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,EAAG,IAAK,CACjC,IAAM,EAAQ,EAAI,GAAM,EACxB,EAAO,IAAI,EAAG,EAAG,EAAO,EAAI,EAC5B,EAAO,IAAI,EAAG,EAAG,EAAO,EAAI,CAC9B,CACF,CAUA,SAAS,EAAuB,EAAQ,EAAS,CAC/C,IAAM,EAAM,EAAiB,aAAa,CAAO,EAEjD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,IAAM,EAAM,EAAI,EAAE,CAAC,GACb,EAAM,EAAI,EAAE,CAAC,GAEnB,IAAK,IAAI,EAAI,GAAI,GAAK,EAAG,IACvB,IAAK,IAAI,EAAI,GAAI,GAAK,EAAG,IACnB,IAAM,IAAM,IAAM,GAAK,IAAM,IAAM,IAAM,GAC1C,IAAM,GAAK,IAAM,EAClB,EAAO,IAAI,EAAM,EAAG,EAAM,EAAG,GAAM,EAAI,EAEvC,EAAO,IAAI,EAAM,EAAG,EAAM,EAAG,GAAO,EAAI,CAIhD,CACF,CAQA,SAAS,EAAkB,EAAQ,EAAS,CAC1C,IAAM,EAAO,EAAO,KACd,EAAO,EAAQ,eAAe,CAAO,EACvC,EAAK,EAAK,EAEd,IAAK,IAAI,EAAI,EAAG,EAAI,GAAI,IACtB,EAAM,KAAK,MAAM,EAAI,CAAC,EACtB,EAAM,EAAI,EAAI,EAAO,EAAI,EACzB,GAAQ,GAAQ,EAAK,IAAO,EAE5B,EAAO,IAAI,EAAK,EAAK,EAAK,EAAI,EAC9B,EAAO,IAAI,EAAK,EAAK,EAAK,EAAI,CAElC,CASA,SAAS,EAAiB,EAAQ,EAAsB,EAAa,CACnE,IAAM,EAAO,EAAO,KACd,EAAO,EAAW,eAAe,EAAsB,CAAW,EACpE,EAAG,EAEP,IAAK,EAAI,EAAG,EAAI,GAAI,IAClB,GAAQ,GAAQ,EAAK,IAAO,EAGxB,EAAI,EACN,EAAO,IAAI,EAAG,EAAG,EAAK,EAAI,EACjB,EAAI,EACb,EAAO,IAAI,EAAI,EAAG,EAAG,EAAK,EAAI,EAE9B,EAAO,IAAI,EAAO,GAAK,EAAG,EAAG,EAAK,EAAI,EAIpC,EAAI,EACN,EAAO,IAAI,EAAG,EAAO,EAAI,EAAG,EAAK,EAAI,EAC5B,EAAI,EACb,EAAO,IAAI,EAAG,GAAK,EAAI,EAAI,EAAG,EAAK,EAAI,EAEvC,EAAO,IAAI,EAAG,GAAK,EAAI,EAAG,EAAK,EAAI,EAKvC,EAAO,IAAI,EAAO,EAAG,EAAG,EAAG,EAAI,CACjC,CAQA,SAAS,EAAW,EAAQ,EAAM,CAChC,IAAM,EAAO,EAAO,KAChB,EAAM,GACN,EAAM,EAAO,EACb,EAAW,EACX,EAAY,EAEhB,IAAK,IAAI,EAAM,EAAO,EAAG,EAAM,EAAG,GAAO,EAGvC,IAFI,IAAQ,GAAG,MAEF,CACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IACrB,GAAI,CAAC,EAAO,WAAW,EAAK,EAAM,CAAC,EAAG,CACpC,IAAI,EAAO,GAEP,EAAY,EAAK,SACnB,GAAU,EAAK,KAAe,EAAY,IAAO,GAGnD,EAAO,IAAI,EAAK,EAAM,EAAG,CAAI,EAC7B,IAEI,IAAa,KACf,IACA,EAAW,EAEf,CAKF,GAFA,GAAO,EAEH,EAAM,GAAK,GAAQ,EAAK,CAC1B,GAAO,EACP,EAAM,CAAC,EACP,KACF,CACF,CAEJ,CAUA,SAAS,EAAY,EAAS,EAAsB,EAAU,CAE5D,IAAM,EAAS,IAAI,EAEnB,EAAS,QAAQ,SAAU,EAAM,CAE/B,EAAO,IAAI,EAAK,KAAK,IAAK,CAAC,EAS3B,EAAO,IAAI,EAAK,UAAU,EAAG,EAAK,sBAAsB,EAAK,KAAM,CAAO,CAAC,EAG3E,EAAK,MAAM,CAAM,CACnB,CAAC,EAKD,IAAM,GAFiB,EAAM,wBAAwB,CAER,EADpB,EAAO,uBAAuB,EAAS,CACA,GAAK,EAgBrE,IATI,EAAO,gBAAgB,EAAI,GAAK,GAClC,EAAO,IAAI,EAAG,CAAC,EAQV,EAAO,gBAAgB,EAAI,GAAM,GACtC,EAAO,OAAO,CAAC,EAOjB,IAAM,GAAiB,EAAyB,EAAO,gBAAgB,GAAK,EAC5E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAe,IACjC,EAAO,IAAI,EAAI,EAAI,GAAO,IAAM,CAAC,EAGnC,OAAO,EAAgB,EAAQ,EAAS,CAAoB,CAC9D,CAWA,SAAS,EAAiB,EAAW,EAAS,EAAsB,CAElE,IAAM,EAAiB,EAAM,wBAAwB,CAAO,EAMtD,EAAqB,EAHF,EAAO,uBAAuB,EAAS,CAGL,EAGrD,EAAgB,EAAO,eAAe,EAAS,CAAoB,EAInE,EAAiB,EADA,EAAiB,EAGlC,EAAyB,KAAK,MAAM,EAAiB,CAAa,EAElE,EAAwB,KAAK,MAAM,EAAqB,CAAa,EACrE,EAAwB,EAAwB,EAGhD,EAAU,EAAyB,EAGnC,EAAK,IAAI,EAAmB,CAAO,EAErC,EAAS,EACP,EAAa,MAAM,CAAa,EAChC,EAAa,MAAM,CAAa,EAClC,EAAc,EACZ,EAAS,IAAI,WAAW,EAAU,MAAM,EAG9C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAe,IAAK,CACtC,IAAM,EAAW,EAAI,EAAiB,EAAwB,EAG9D,EAAO,GAAK,EAAO,MAAM,EAAQ,EAAS,CAAQ,EAGlD,EAAO,GAAK,EAAG,OAAO,EAAO,EAAE,EAE/B,GAAU,EACV,EAAc,KAAK,IAAI,EAAa,CAAQ,CAC9C,CAIA,IAAM,EAAO,IAAI,WAAW,CAAc,EACtC,EAAQ,EACR,EAAG,EAGP,IAAK,EAAI,EAAG,EAAI,EAAa,IAC3B,IAAK,EAAI,EAAG,EAAI,EAAe,IACzB,EAAI,EAAO,EAAE,CAAC,SAChB,EAAK,KAAW,EAAO,EAAE,CAAC,IAMhC,IAAK,EAAI,EAAG,EAAI,EAAS,IACvB,IAAK,EAAI,EAAG,EAAI,EAAe,IAC7B,EAAK,KAAW,EAAO,EAAE,CAAC,GAI9B,OAAO,CACT,CAWA,SAAS,EAAc,EAAM,EAAS,EAAsB,EAAa,CACvE,IAAI,EAEJ,GAAI,MAAM,QAAQ,CAAI,EACpB,EAAW,EAAS,UAAU,CAAI,OAC7B,GAAI,OAAO,GAAS,SAAU,CACnC,IAAI,EAAmB,EAEvB,GAAI,CAAC,EAAkB,CACrB,IAAM,EAAc,EAAS,SAAS,CAAI,EAG1C,EAAmB,EAAQ,sBAAsB,EAAa,CAAoB,CACpF,CAIA,EAAW,EAAS,WAAW,EAAM,GAAoB,EAAE,CAC7D,MACE,MAAU,MAAM,cAAc,EAIhC,IAAM,EAAc,EAAQ,sBAAsB,EAAU,CAAoB,EAGhF,GAAI,CAAC,EACH,MAAU,MAAM,yDAAyD,EAI3E,GAAI,CAAC,EACH,EAAU,OAGL,GAAI,EAAU,EACnB,MAAU,MAAM;;qDAE0C,EAAc;CACxE,EAGF,IAAM,EAAW,EAAW,EAAS,EAAsB,CAAQ,EAI7D,EAAU,IAAI,EADA,EAAM,cAAc,CACV,CAAW,EAgCzC,OA7BA,EAAmB,EAAS,CAAO,EACnC,EAAmB,CAAO,EAC1B,EAAsB,EAAS,CAAO,EAMtC,EAAgB,EAAS,EAAsB,CAAC,EAE5C,GAAW,GACb,EAAiB,EAAS,CAAO,EAInC,EAAU,EAAS,CAAQ,EAEvB,MAAM,CAAW,IAEnB,EAAc,EAAY,YAAY,EACpC,EAAgB,KAAK,KAAM,EAAS,CAAoB,CAAC,GAI7D,EAAY,UAAU,EAAa,CAAO,EAG1C,EAAgB,EAAS,EAAsB,CAAW,EAEnD,CACI,UACA,UACa,uBACT,cACH,UACZ,CACF,CAWA,EAAQ,OAAS,SAAiB,EAAM,EAAS,CAC/C,GAAW,IAAS,QAAe,IAAS,GAC1C,MAAU,MAAM,eAAe,EAGjC,IAAI,EAAuB,EAAQ,EAC/B,EACA,EAaJ,OAXW,IAAY,SAErB,EAAuB,EAAQ,KAAK,EAAQ,qBAAsB,EAAQ,CAAC,EAC3E,EAAU,EAAQ,KAAK,EAAQ,OAAO,EACtC,EAAO,EAAY,KAAK,EAAQ,WAAW,EAEvC,EAAQ,YACV,EAAM,kBAAkB,EAAQ,UAAU,GAIvC,EAAa,EAAM,EAAS,EAAsB,CAAI,CAC/D,eC9eA,SAAS,EAAU,EAAK,CAKtB,GAJI,OAAO,GAAQ,WACjB,EAAM,EAAI,SAAS,GAGjB,OAAO,GAAQ,SACjB,MAAU,MAAM,uCAAuC,EAGzD,IAAI,EAAU,EAAI,MAAM,CAAC,CAAC,QAAQ,IAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EACnD,GAAI,EAAQ,OAAS,GAAK,EAAQ,SAAW,GAAK,EAAQ,OAAS,EACjE,MAAU,MAAM,sBAAwB,CAAG,GAIzC,EAAQ,SAAW,GAAK,EAAQ,SAAW,KAC7C,EAAU,MAAM,UAAU,OAAO,MAAM,CAAC,EAAG,EAAQ,IAAI,SAAU,EAAG,CAClE,MAAO,CAAC,EAAG,CAAC,CACd,CAAC,CAAC,GAIA,EAAQ,SAAW,GAAG,EAAQ,KAAK,IAAK,GAAG,EAE/C,IAAM,EAAW,SAAS,EAAQ,KAAK,EAAE,EAAG,EAAE,EAE9C,MAAO,CACL,EAAI,GAAY,GAAM,IACtB,EAAI,GAAY,GAAM,IACtB,EAAI,GAAY,EAAK,IACrB,EAAG,EAAW,IACd,IAAK,IAAM,EAAQ,MAAM,EAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CACxC,CACF,CAEA,EAAQ,WAAa,SAAqB,EAAS,CACjD,AAAc,IAAU,CAAC,EACzB,AAAoB,EAAQ,QAAQ,CAAC,EAErC,IAAM,EAAgB,EAAQ,SAAW,QACvC,EAAQ,SAAW,MACnB,EAAQ,OAAS,EACf,EACA,EAAQ,OAEN,EAAQ,EAAQ,OAAS,EAAQ,OAAS,GAAK,EAAQ,MAAQ,IAAA,GAC/D,EAAQ,EAAQ,OAAS,EAE/B,MAAO,CACE,QACP,MAAO,EAAQ,EAAI,EACX,SACR,MAAO,CACL,KAAM,EAAS,EAAQ,MAAM,MAAQ,WAAW,EAChD,MAAO,EAAS,EAAQ,MAAM,OAAS,WAAW,CACpD,EACA,KAAM,EAAQ,KACd,aAAc,EAAQ,cAAgB,CAAC,CACzC,CACF,EAEA,EAAQ,SAAW,SAAmB,EAAQ,EAAM,CAClD,OAAO,EAAK,OAAS,EAAK,OAAS,EAAS,EAAK,OAAS,EACtD,EAAK,OAAS,EAAS,EAAK,OAAS,GACrC,EAAK,KACX,EAEA,EAAQ,cAAgB,SAAwB,EAAQ,EAAM,CAC5D,IAAM,EAAQ,EAAQ,SAAS,EAAQ,CAAI,EAC3C,OAAO,KAAK,OAAO,EAAS,EAAK,OAAS,GAAK,CAAK,CACtD,EAEA,EAAQ,cAAgB,SAAwB,EAAS,EAAI,EAAM,CACjE,IAAM,EAAO,EAAG,QAAQ,KAClB,EAAO,EAAG,QAAQ,KAClB,EAAQ,EAAQ,SAAS,EAAM,CAAI,EACnC,EAAa,KAAK,OAAO,EAAO,EAAK,OAAS,GAAK,CAAK,EACxD,EAAe,EAAK,OAAS,EAC7B,EAAU,CAAC,EAAK,MAAM,MAAO,EAAK,MAAM,IAAI,EAElD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,IAC9B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,IAAK,CACnC,IAAI,GAAU,EAAI,EAAa,GAAK,EAChC,EAAU,EAAK,MAAM,MAEzB,GAAI,GAAK,GAAgB,GAAK,GAC5B,EAAI,EAAa,GAAgB,EAAI,EAAa,EAAc,CAChE,IAAM,EAAO,KAAK,OAAO,EAAI,GAAgB,CAAK,EAC5C,EAAO,KAAK,OAAO,EAAI,GAAgB,CAAK,EAClD,EAAU,EAAQ,KAAK,EAAO,EAAO,GACvC,CAEA,EAAQ,KAAY,EAAQ,EAC5B,EAAQ,KAAY,EAAQ,EAC5B,EAAQ,KAAY,EAAQ,EAC5B,EAAQ,GAAU,EAAQ,CAC5B,CAEJ,eClGA,IAAM,EAAA,GAAA,EAEN,SAAS,EAAa,EAAK,EAAQ,EAAM,CACvC,EAAI,UAAU,EAAG,EAAG,EAAO,MAAO,EAAO,MAAM,EAE/C,AAAmB,EAAO,QAAQ,CAAC,EACnC,EAAO,OAAS,EAChB,EAAO,MAAQ,EACf,EAAO,MAAM,OAAS,EAAO,KAC7B,EAAO,MAAM,MAAQ,EAAO,IAC9B,CAEA,SAAS,GAAoB,CAC3B,GAAI,CACF,OAAO,SAAS,cAAc,QAAQ,CACxC,MAAY,CACV,MAAU,MAAM,sCAAsC,CACxD,CACF,CAEA,EAAQ,OAAS,SAAiB,EAAQ,EAAQ,EAAS,CACzD,IAAI,EAAO,EACP,EAAW,EAEJ,IAAS,SAAgB,CAAC,GAAU,CAAC,EAAO,cACrD,EAAO,EACP,EAAS,IAAA,IAGN,IACH,EAAW,EAAiB,GAG9B,EAAO,EAAM,WAAW,CAAI,EAC5B,IAAM,EAAO,EAAM,cAAc,EAAO,QAAQ,KAAM,CAAI,EAEpD,EAAM,EAAS,WAAW,IAAI,EAC9B,EAAQ,EAAI,gBAAgB,EAAM,CAAI,EAM5C,OALA,EAAM,cAAc,EAAM,KAAM,EAAQ,CAAI,EAE5C,EAAY,EAAK,EAAU,CAAI,EAC/B,EAAI,aAAa,EAAO,EAAG,CAAC,EAErB,CACT,EAEA,EAAQ,gBAAkB,SAA0B,EAAQ,EAAQ,EAAS,CAC3E,IAAI,EAAO,EAEA,IAAS,SAAgB,CAAC,GAAU,CAAC,EAAO,cACrD,EAAO,EACP,EAAS,IAAA,IAGX,AAAW,IAAO,CAAC,EAEnB,IAAM,EAAW,EAAQ,OAAO,EAAQ,EAAQ,CAAI,EAE9C,EAAO,EAAK,MAAQ,YACpB,EAAe,EAAK,cAAgB,CAAC,EAE3C,OAAO,EAAS,UAAU,EAAM,EAAa,OAAO,CACtD,eC9DA,IAAM,EAAA,GAAA,EAEN,SAAS,EAAgB,EAAO,EAAQ,CACtC,IAAM,EAAQ,EAAM,EAAI,IAClB,EAAM,EAAS,KAAO,EAAM,IAAM,IAExC,OAAO,EAAQ,EACX,EAAM,IAAM,EAAS,aAAe,EAAM,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAI,IAChE,CACN,CAEA,SAAS,EAAQ,EAAK,EAAG,EAAG,CAC1B,IAAI,EAAM,EAAM,EAGhB,OAFW,IAAM,SAAa,GAAO,IAAM,GAEpC,CACT,CAEA,SAAS,EAAU,EAAM,EAAM,EAAQ,CACrC,IAAI,EAAO,GACP,EAAS,EACT,EAAS,GACT,EAAa,EAEjB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,IAAM,EAAM,KAAK,MAAM,EAAI,CAAI,EACzB,EAAM,KAAK,MAAM,EAAI,CAAI,EAE3B,CAAC,GAAO,CAAC,IAAQ,EAAS,IAE1B,EAAK,IACP,IAEM,EAAI,GAAK,EAAM,GAAK,EAAK,EAAI,KACjC,GAAQ,EACJ,EAAO,IAAK,EAAM,EAAQ,GAAM,EAAM,CAAM,EAC5C,EAAO,IAAK,EAAQ,CAAC,EAEzB,EAAS,EACT,EAAS,IAGL,EAAM,EAAI,GAAQ,EAAK,EAAI,KAC/B,GAAQ,EAAO,IAAK,CAAU,EAC9B,EAAa,IAGf,GAEJ,CAEA,OAAO,CACT,CAEA,EAAQ,OAAS,SAAiB,EAAQ,EAAS,EAAI,CACrD,IAAM,EAAO,EAAM,WAAW,CAAO,EAC/B,EAAO,EAAO,QAAQ,KACtB,EAAO,EAAO,QAAQ,KACtB,EAAa,EAAO,EAAK,OAAS,EAElC,EAAM,EAAK,MAAM,MAAM,EAEzB,SAAW,EAAe,EAAK,MAAM,MAAO,MAAM,EAClD,YAAc,EAAa,IAAM,EAAa,SAF9C,GAIE,EACJ,SAAW,EAAe,EAAK,MAAM,KAAM,QAAQ,EACnD,OAAS,EAAS,EAAM,EAAM,EAAK,MAAM,EAAI,MAEzC,EAAU,gBAAuB,EAAa,IAAM,EAAa,IAIjE,EAAS,4CAFA,EAAK,MAAa,UAAY,EAAK,MAAQ,aAAe,EAAK,MAAQ,KAA1D,IAEwC,EAAU,iCAAmC,EAAK,EAAO;EAM7H,OAJI,OAAO,GAAO,YAChB,EAAG,KAAM,CAAM,EAGV,CACT,eC/EA,IAAM,EAAA,GAAA,EAEA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EAEN,SAAS,EAAc,EAAY,EAAQ,EAAM,EAAM,EAAI,CACzD,IAAM,EAAO,CAAC,CAAC,CAAC,MAAM,KAAK,UAAW,CAAC,EACjC,EAAU,EAAK,OACf,EAAc,OAAO,EAAK,EAAU,IAAO,WAEjD,GAAI,CAAC,GAAe,CAAC,EAAW,EAC9B,MAAU,MAAM,oCAAoC,EAGtD,GAAI,EAAa,CACf,GAAI,EAAU,EACZ,MAAU,MAAM,4BAA4B,EAG1C,IAAY,GACd,EAAK,EACL,EAAO,EACP,EAAS,EAAO,IAAA,IACP,IAAY,IACjB,EAAO,YAAqB,IAAO,QACrC,EAAK,EACL,EAAO,IAAA,KAEP,EAAK,EACL,EAAO,EACP,EAAO,EACP,EAAS,IAAA,IAGf,KAAO,CACL,GAAI,EAAU,EACZ,MAAU,MAAM,4BAA4B,EAY9C,OATI,IAAY,GACd,EAAO,EACP,EAAS,EAAO,IAAA,IACP,IAAY,GAAK,CAAC,EAAO,aAClC,EAAO,EACP,EAAO,EACP,EAAS,IAAA,IAGJ,IAAI,QAAQ,SAAU,EAAS,EAAQ,CAC5C,GAAI,CAEF,EAAQ,EADK,EAAO,OAAO,EAAM,CACX,EAAG,EAAQ,CAAI,CAAC,CACxC,OAAS,EAAG,CACV,EAAO,CAAC,CACV,CACF,CAAC,CACH,CAEA,GAAI,CACF,IAAM,EAAO,EAAO,OAAO,EAAM,CAAI,EACrC,EAAG,KAAM,EAAW,EAAM,EAAQ,CAAI,CAAC,CACzC,OAAS,EAAG,CACV,EAAG,CAAC,CACN,CACF,CAEA,EAAQ,OAAS,EAAO,OACxB,EAAQ,SAAW,EAAa,KAAK,KAAM,EAAe,MAAM,EAChE,EAAQ,UAAY,EAAa,KAAK,KAAM,EAAe,eAAe,EAG1E,EAAQ,SAAW,EAAa,KAAK,KAAM,SAAU,EAAM,EAAG,EAAM,CAClE,OAAO,EAAY,OAAO,EAAM,CAAI,CACtC,CAAC,oBC1EC,SAAS,EAAM,CAGhB,IAAI,EAAc,OAAO,GAAW,UAAY,GAC/C,CAAC,EAAQ,UAAY,EAClB,EAAa,OAAO,GAAU,UAAY,GAC7C,CAAC,EAAO,UAAY,EACjB,EAAa,OAAO,QAAU,UAAY,QAE7C,EAAW,SAAW,GACtB,EAAW,SAAW,GACtB,EAAW,OAAS,KAEpB,EAAO,GAQR,IAAI,EAGJ,EAAS,WAGT,EAAO,GACP,EAAO,EACP,EAAO,GACP,EAAO,GACP,EAAO,IACP,EAAc,GACd,EAAW,IACX,EAAY,IAGZ,EAAgB,QAChB,EAAgB,eAChB,EAAkB,4BAGlB,EAAS,CACR,SAAY,kDACZ,YAAa,iDACb,gBAAiB,eAClB,EAGA,EAAgB,EAAO,EACvB,EAAQ,KAAK,MACb,EAAqB,OAAO,aAG5B,EAUA,SAAS,EAAM,EAAM,CACpB,MAAU,WAAW,EAAO,EAAK,CAClC,CAUA,SAAS,EAAI,EAAO,EAAI,CAGvB,IAFA,IAAI,EAAS,EAAM,OACf,EAAS,CAAC,EACP,KACN,EAAO,GAAU,EAAG,EAAM,EAAO,EAElC,OAAO,CACR,CAYA,SAAS,EAAU,EAAQ,EAAI,CAC9B,IAAI,EAAQ,EAAO,MAAM,GAAG,EACxB,EAAS,GACT,EAAM,OAAS,IAGlB,EAAS,EAAM,GAAK,IACpB,EAAS,EAAM,IAGhB,EAAS,EAAO,QAAQ,EAAiB,GAAM,EAE/C,IAAI,EAAU,EADD,EAAO,MAAM,GACH,EAAG,CAAE,CAAC,CAAC,KAAK,GAAG,EACtC,OAAO,EAAS,CACjB,CAeA,SAAS,EAAW,EAAQ,CAM3B,IALA,IAAI,EAAS,CAAC,EACV,EAAU,EACV,EAAS,EAAO,OAChB,EACA,EACG,EAAU,GAChB,EAAQ,EAAO,WAAW,GAAS,EAC/B,GAAS,OAAU,GAAS,OAAU,EAAU,GAEnD,EAAQ,EAAO,WAAW,GAAS,GAC9B,EAAQ,QAAW,MACvB,EAAO,OAAO,EAAQ,OAAU,KAAO,EAAQ,MAAS,KAAO,GAI/D,EAAO,KAAK,CAAK,EACjB,MAGD,EAAO,KAAK,CAAK,EAGnB,OAAO,CACR,CAUA,SAAS,EAAW,EAAO,CAC1B,OAAO,EAAI,EAAO,SAAS,EAAO,CACjC,IAAI,EAAS,GAOb,OANI,EAAQ,QACX,GAAS,MACT,GAAU,EAAmB,IAAU,GAAK,KAAQ,KAAM,EAC1D,EAAQ,MAAS,EAAQ,MAE1B,GAAU,EAAmB,CAAK,EAC3B,CACR,CAAC,CAAC,CAAC,KAAK,EAAE,CACX,CAWA,SAAS,EAAa,EAAW,CAUhC,OATI,EAAY,GAAK,GACb,EAAY,GAEhB,EAAY,GAAK,GACb,EAAY,GAEhB,EAAY,GAAK,GACb,EAAY,GAEb,CACR,CAaA,SAAS,EAAa,EAAO,EAAM,CAGlC,OAAO,EAAQ,GAAK,IAAM,EAAQ,MAAQ,GAAQ,IAAM,EACzD,CAOA,SAAS,EAAM,EAAO,EAAW,EAAW,CAC3C,IAAI,EAAI,EAGR,IAFA,EAAQ,EAAY,EAAM,EAAQ,CAAI,EAAI,GAAS,EACnD,GAAS,EAAM,EAAQ,CAAS,EACF,EAAQ,EAAgB,GAAQ,EAAG,GAAK,EACrE,EAAQ,EAAM,EAAQ,CAAa,EAEpC,OAAO,EAAM,GAAK,EAAgB,GAAK,GAAS,EAAQ,EAAK,CAC9D,CASA,SAAS,EAAO,EAAO,CAEtB,IAAI,EAAS,CAAC,EACV,EAAc,EAAM,OACpB,EACA,EAAI,EACJ,EAAI,EACJ,EAAO,EACP,EAeI,EAAM,YAAY,CAAS,EAd/B,EACA,EACA,EACA,EACA,EACA,EACA,EAEA,EAWJ,IAJI,EAAQ,IACX,EAAQ,GAGJ,EAAI,EAAG,EAAI,EAAO,EAAE,EAEpB,EAAM,WAAW,CAAC,GAAK,KAC1B,EAAM,WAAW,EAElB,EAAO,KAAK,EAAM,WAAW,CAAC,CAAC,EAMhC,IAAK,EAAQ,EAAQ,EAAI,EAAQ,EAAI,EAAG,EAAQ,GAAwC,CAOvF,IAAK,EAAO,EAAG,EAAI,EAAG,EAAI,EAErB,GAAS,GACZ,EAAM,eAAe,EAGtB,EAAQ,EAAa,EAAM,WAAW,GAAO,CAAC,GAE1C,GAAS,GAAQ,EAAQ,GAAO,EAAS,GAAK,CAAC,IAClD,EAAM,UAAU,EAGjB,GAAK,EAAQ,EACb,EAAI,GAAK,EAAO,EAAQ,GAAK,EAAO,EAAO,EAAO,EAAI,EAElD,IAAQ,GAfuC,GAAK,EAmBxD,EAAa,EAAO,EAChB,EAAI,EAAM,EAAS,CAAU,GAChC,EAAM,UAAU,EAGjB,GAAK,EAIN,EAAM,EAAO,OAAS,EACtB,EAAO,EAAM,EAAI,EAAM,EAAK,GAAQ,CAAC,EAIjC,EAAM,EAAI,CAAG,EAAI,EAAS,GAC7B,EAAM,UAAU,EAGjB,GAAK,EAAM,EAAI,CAAG,EAClB,GAAK,EAGL,EAAO,OAAO,IAAK,EAAG,CAAC,CAExB,CAEA,OAAO,EAAW,CAAM,CACzB,CASA,SAAS,EAAO,EAAO,CACtB,IAAI,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAS,CAAC,EAEV,EAEA,EACA,EACA,EAcJ,IAXA,EAAQ,EAAW,CAAK,EAGxB,EAAc,EAAM,OAGpB,EAAI,EACJ,EAAQ,EACR,EAAO,EAGF,EAAI,EAAG,EAAI,EAAa,EAAE,EAC9B,EAAe,EAAM,GACjB,EAAe,KAClB,EAAO,KAAK,EAAmB,CAAY,CAAC,EAe9C,IAXA,EAAiB,EAAc,EAAO,OAMlC,GACH,EAAO,KAAK,CAAS,EAIf,EAAiB,GAAa,CAIpC,IAAK,EAAI,EAAQ,EAAI,EAAG,EAAI,EAAa,EAAE,EAC1C,EAAe,EAAM,GACjB,GAAgB,GAAK,EAAe,IACvC,EAAI,GAcN,IARA,EAAwB,EAAiB,EACrC,EAAI,EAAI,GAAO,EAAS,GAAS,CAAqB,GACzD,EAAM,UAAU,EAGjB,IAAU,EAAI,GAAK,EACnB,EAAI,EAEC,EAAI,EAAG,EAAI,EAAa,EAAE,EAO9B,GANA,EAAe,EAAM,GAEjB,EAAe,GAAK,EAAE,EAAQ,GACjC,EAAM,UAAU,EAGb,GAAgB,EAAG,CAEtB,IAAK,EAAI,EAAO,EAAI,EACnB,EAAI,GAAK,EAAO,EAAQ,GAAK,EAAO,EAAO,EAAO,EAAI,EAClD,IAAI,GAFqC,GAAK,EAKlD,EAAU,EAAI,EACd,EAAa,EAAO,EACpB,EAAO,KACN,EAAmB,EAAa,EAAI,EAAU,EAAY,CAAC,CAAC,CAC7D,EACA,EAAI,EAAM,EAAU,CAAU,EAG/B,EAAO,KAAK,EAAmB,EAAa,EAAG,CAAC,CAAC,CAAC,EAClD,EAAO,EAAM,EAAO,EAAuB,GAAkB,CAAW,EACxE,EAAQ,EACR,EAAE,CACH,CAGD,EAAE,EACF,EAAE,CAEH,CACA,OAAO,EAAO,KAAK,EAAE,CACtB,CAaA,SAAS,EAAU,EAAO,CACzB,OAAO,EAAU,EAAO,SAAS,EAAQ,CACxC,OAAO,EAAc,KAAK,CAAM,EAC7B,EAAO,EAAO,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,EACpC,CACJ,CAAC,CACF,CAaA,SAAS,EAAQ,EAAO,CACvB,OAAO,EAAU,EAAO,SAAS,EAAQ,CACxC,OAAO,EAAc,KAAK,CAAM,EAC7B,OAAS,EAAO,CAAM,EACtB,CACJ,CAAC,CACF,CAgCA,GA3BA,EAAW,CAMV,QAAW,QAQX,KAAQ,CACP,OAAU,EACV,OAAU,CACX,EACA,OAAU,EACV,OAAU,EACV,QAAW,EACX,UAAa,CACd,EAMC,OAAO,QAAU,YACjB,OAAO,OAAO,KAAO,UACrB,OAAO,IAEP,OAAO,WAAY,UAAW,CAC7B,OAAO,CACR,CAAC,OACK,GAAI,GAAe,EACzB,GAAI,EAAO,SAAW,EAErB,EAAW,QAAU,OAGrB,IAAK,KAAO,EACX,EAAS,eAAe,CAAG,IAAM,EAAY,GAAO,EAAS,QAK/D,GAAK,SAAW,CAGlB,EAAA,CAAC,CAAK,mBCjhBN,EAAO,QAAU,2BCHjB,EAAO,QAAU,CAAC,mBCAlB,IAAI,EAAS,OAAO,KAAQ,YAAc,IAAI,UAC1C,EAAoB,OAAO,0BAA4B,EAAS,OAAO,yBAAyB,IAAI,UAAW,MAAM,EAAI,KACzH,EAAU,GAAU,GAAqB,OAAO,EAAkB,KAAQ,WAAa,EAAkB,IAAM,KAC/G,EAAa,GAAU,IAAI,UAAU,QACrC,EAAS,OAAO,KAAQ,YAAc,IAAI,UAC1C,EAAoB,OAAO,0BAA4B,EAAS,OAAO,yBAAyB,IAAI,UAAW,MAAM,EAAI,KACzH,EAAU,GAAU,GAAqB,OAAO,EAAkB,KAAQ,WAAa,EAAkB,IAAM,KAC/G,EAAa,GAAU,IAAI,UAAU,QAErC,EADa,OAAO,SAAY,YAAc,QAAQ,UAC5B,QAAQ,UAAU,IAAM,KAElD,EADa,OAAO,SAAY,YAAc,QAAQ,UAC5B,QAAQ,UAAU,IAAM,KAElD,EADa,OAAO,SAAY,YAAc,QAAQ,UAC1B,QAAQ,UAAU,MAAQ,KACtD,EAAiB,QAAQ,UAAU,QACnC,EAAiB,OAAO,UAAU,SAClC,EAAmB,SAAS,UAAU,SACtC,EAAS,OAAO,UAAU,MAC1B,EAAS,OAAO,UAAU,MAC1B,EAAW,OAAO,UAAU,QAC5B,EAAe,OAAO,UAAU,YAChC,EAAe,OAAO,UAAU,YAChC,EAAQ,OAAO,UAAU,KACzB,EAAU,MAAM,UAAU,OAC1B,EAAQ,MAAM,UAAU,KACxB,EAAY,MAAM,UAAU,MAC5B,EAAS,KAAK,MACd,EAAgB,OAAO,QAAW,WAAa,OAAO,UAAU,QAAU,KAC1E,EAAO,OAAO,sBACd,EAAc,OAAO,QAAW,YAAc,OAAO,OAAO,UAAa,SAAW,OAAO,UAAU,SAAW,KAChH,EAAoB,OAAO,QAAW,YAAc,OAAO,OAAO,UAAa,SAE/E,EAAc,OAAO,QAAW,YAAc,OAAO,YACnD,OAAO,YACP,KACF,EAAe,OAAO,UAAU,qBAEhC,GAAO,OAAO,SAAY,WAAa,QAAQ,eAAiB,OAAO,kBACvE,CAAC,CAAC,CAAC,YAAc,MAAM,UACjB,SAAU,EAAG,CACX,OAAO,EAAE,SACb,EACE,MAGV,SAAS,EAAoB,EAAK,EAAK,CACnC,GACI,IAAQ,KACL,IAAQ,MACR,IAAQ,GACP,GAAO,EAAM,MAAS,EAAM,KAC7B,EAAM,KAAK,IAAK,CAAG,EAEtB,OAAO,EAEX,IAAI,EAAW,mCACf,GAAI,OAAO,GAAQ,SAAU,CACzB,IAAI,EAAM,EAAM,EAAI,CAAC,EAAO,CAAC,CAAG,EAAI,EAAO,CAAG,EAC9C,GAAI,IAAQ,EAAK,CACb,IAAI,EAAS,OAAO,CAAG,EACnB,EAAM,EAAO,KAAK,EAAK,EAAO,OAAS,CAAC,EAC5C,OAAO,EAAS,KAAK,EAAQ,EAAU,KAAK,EAAI,IAAM,EAAS,KAAK,EAAS,KAAK,EAAK,cAAe,KAAK,EAAG,KAAM,EAAE,CAC1H,CACJ,CACA,OAAO,EAAS,KAAK,EAAK,EAAU,KAAK,CAC7C,CAEA,IAAI,EAAA,GAAA,EACA,EAAgB,EAAY,OAC5B,EAAgB,GAAS,CAAa,EAAI,EAAgB,KAE1D,EAAS,CACT,UAAW,KACX,OAAU,IACV,OAAQ,GACZ,EACI,EAAW,CACX,UAAW,KACX,OAAU,WACV,OAAQ,UACZ,EAEA,EAAO,QAAU,SAAS,EAAS,EAAK,EAAS,EAAO,EAAM,CAC1D,IAAI,EAAO,GAAW,CAAC,EAEvB,GAAI,GAAI,EAAM,YAAY,GAAK,CAAC,GAAI,EAAQ,EAAK,UAAU,EACvD,MAAU,UAAU,kDAAkD,EAE1E,GACI,GAAI,EAAM,iBAAiB,IAAM,OAAO,EAAK,iBAAoB,SAC3D,EAAK,gBAAkB,GAAK,EAAK,kBAAoB,IACrD,EAAK,kBAAoB,MAG/B,MAAU,UAAU,wFAAwF,EAEhH,IAAI,EAAgB,IAAI,EAAM,eAAe,GAAI,EAAK,cACtD,GAAI,OAAO,GAAkB,WAAa,IAAkB,SACxD,MAAU,UAAU,+EAA+E,EAGvG,GACI,GAAI,EAAM,QAAQ,GACf,EAAK,SAAW,MAChB,EAAK,SAAW,KAChB,EAAE,SAAS,EAAK,OAAQ,EAAE,IAAM,EAAK,QAAU,EAAK,OAAS,GAEhE,MAAU,UAAU,0DAA0D,EAElF,GAAI,GAAI,EAAM,kBAAkB,GAAK,OAAO,EAAK,kBAAqB,UAClE,MAAU,UAAU,mEAAmE,EAE3F,IAAI,EAAmB,EAAK,iBAE5B,GAAW,IAAQ,OACf,MAAO,YAEX,GAAI,IAAQ,KACR,MAAO,OAEX,GAAI,OAAO,GAAQ,UACf,OAAO,EAAM,OAAS,QAG1B,GAAI,OAAO,GAAQ,SACf,OAAO,GAAc,EAAK,CAAI,EAElC,GAAI,OAAO,GAAQ,SAAU,CACzB,GAAI,IAAQ,EACR,MAAO,KAAW,EAAM,EAAI,IAAM,KAEtC,IAAI,EAAM,OAAO,CAAG,EACpB,OAAO,EAAmB,EAAoB,EAAK,CAAG,EAAI,CAC9D,CACA,GAAI,OAAO,GAAQ,SAAU,CACzB,IAAI,EAAY,OAAO,CAAG,EAAI,IAC9B,OAAO,EAAmB,EAAoB,EAAK,CAAS,EAAI,CACpE,CAEA,IAAI,EAAkB,EAAK,QAAU,OAAc,EAAI,EAAK,MAE5D,GADW,IAAU,SAAe,EAAQ,GACxC,GAAS,GAAY,EAAW,GAAK,OAAO,GAAQ,SACpD,OAAO,GAAQ,CAAG,EAAI,UAAY,WAGtC,IAAI,EAAS,GAAU,EAAM,CAAK,EAElC,GAAW,IAAS,OAChB,EAAO,CAAC,OACL,GAAI,GAAQ,EAAM,CAAG,GAAK,EAC7B,MAAO,aAGX,SAAS,EAAQ,EAAO,EAAM,EAAU,CAKpC,GAJI,IACA,EAAO,EAAU,KAAK,CAAI,EAC1B,EAAK,KAAK,CAAI,GAEd,EAAU,CACV,IAAI,EAAU,CACV,MAAO,EAAK,KAChB,EAIA,OAHI,GAAI,EAAM,YAAY,IACtB,EAAQ,WAAa,EAAK,YAEvB,EAAS,EAAO,EAAS,EAAQ,EAAG,CAAI,CACnD,CACA,OAAO,EAAS,EAAO,EAAM,EAAQ,EAAG,CAAI,CAChD,CAEA,GAAI,OAAO,GAAQ,YAAc,CAAC,GAAS,CAAG,EAAG,CAC7C,IAAI,EAAO,EAAO,CAAG,EACjB,EAAO,GAAW,EAAK,CAAO,EAClC,MAAO,aAAe,EAAO,KAAO,EAAO,gBAAkB,KAAO,EAAK,OAAS,EAAI,MAAQ,EAAM,KAAK,EAAM,IAAI,EAAI,KAAO,GAClI,CACA,GAAI,GAAS,CAAG,EAAG,CACf,IAAI,EAAY,EAAoB,EAAS,KAAK,OAAO,CAAG,EAAG,yBAA0B,IAAI,EAAI,EAAY,KAAK,CAAG,EACrH,OAAO,OAAO,GAAQ,UAAY,CAAC,EAAoB,GAAU,CAAS,EAAI,CAClF,CACA,GAAI,GAAU,CAAG,EAAG,CAGhB,IAAK,IAFD,EAAI,IAAM,EAAa,KAAK,OAAO,EAAI,QAAQ,CAAC,EAChD,EAAQ,EAAI,YAAc,CAAC,EACtB,GAAI,EAAG,GAAI,EAAM,OAAQ,KAC9B,GAAK,IAAM,EAAM,GAAE,CAAC,KAAO,IAAM,GAAW,GAAM,EAAM,GAAE,CAAC,KAAK,EAAG,SAAU,CAAI,EAKrF,MAHA,IAAK,IACD,EAAI,YAAc,EAAI,WAAW,SAAU,GAAK,OACpD,GAAK,KAAO,EAAa,KAAK,OAAO,EAAI,QAAQ,CAAC,EAAI,IAC/C,CACX,CACA,GAAI,GAAQ,CAAG,EAAG,CACd,GAAI,EAAI,SAAW,EAAK,MAAO,KAC/B,IAAI,EAAK,GAAW,EAAK,CAAO,EAIhC,OAHI,GAAU,CAAC,GAAiB,CAAE,EACvB,IAAM,GAAa,EAAI,CAAM,EAAI,IAErC,KAAO,EAAM,KAAK,EAAI,IAAI,EAAI,IACzC,CACA,GAAI,GAAQ,CAAG,EAAG,CACd,IAAI,GAAQ,GAAW,EAAK,CAAO,EAKnC,MAJI,EAAE,UAAW,MAAM,YAAc,UAAW,GAAO,CAAC,EAAa,KAAK,EAAK,OAAO,EAC3E,MAAQ,OAAO,CAAG,EAAI,KAAO,EAAM,KAAK,EAAQ,KAAK,YAAc,EAAQ,EAAI,KAAK,EAAG,EAAK,EAAG,IAAI,EAAI,KAE9G,GAAM,SAAW,EAAY,IAAM,OAAO,CAAG,EAAI,IAC9C,MAAQ,OAAO,CAAG,EAAI,KAAO,EAAM,KAAK,GAAO,IAAI,EAAI,IAClE,CACA,GAAI,OAAO,GAAQ,UAAY,EAC3B,IAAI,GAAiB,OAAO,EAAI,IAAmB,YAAc,EAC7D,OAAO,EAAY,EAAK,CAAE,MAAO,EAAW,CAAM,CAAC,EAChD,GAAI,IAAkB,UAAY,OAAO,EAAI,SAAY,WAC5D,OAAO,EAAI,QAAQ,CACvB,CAEJ,GAAI,GAAM,CAAG,EAAG,CACZ,IAAI,GAAW,CAAC,EAMhB,OALI,GACA,EAAW,KAAK,EAAK,SAAU,EAAO,EAAK,CACvC,GAAS,KAAK,EAAQ,EAAK,EAAK,EAAI,EAAI,OAAS,EAAQ,EAAO,CAAG,CAAC,CACxE,CAAC,EAEE,GAAa,MAAO,EAAQ,KAAK,CAAG,EAAG,GAAU,CAAM,CAClE,CACA,GAAI,GAAM,CAAG,EAAG,CACZ,IAAI,GAAW,CAAC,EAMhB,OALI,GACA,EAAW,KAAK,EAAK,SAAU,EAAO,CAClC,GAAS,KAAK,EAAQ,EAAO,CAAG,CAAC,CACrC,CAAC,EAEE,GAAa,MAAO,EAAQ,KAAK,CAAG,EAAG,GAAU,CAAM,CAClE,CACA,GAAI,GAAU,CAAG,EACb,OAAO,GAAiB,SAAS,EAErC,GAAI,GAAU,CAAG,EACb,OAAO,GAAiB,SAAS,EAErC,GAAI,GAAU,CAAG,EACb,OAAO,GAAiB,SAAS,EAErC,GAAI,GAAS,CAAG,EACZ,OAAO,GAAU,EAAQ,OAAO,CAAG,CAAC,CAAC,EAEzC,GAAI,GAAS,CAAG,EACZ,OAAO,GAAU,EAAQ,EAAc,KAAK,CAAG,CAAC,CAAC,EAErD,GAAI,GAAU,CAAG,EACb,OAAO,GAAU,EAAe,KAAK,CAAG,CAAC,EAE7C,GAAI,GAAS,CAAG,EACZ,OAAO,GAAU,EAAQ,OAAO,CAAG,CAAC,CAAC,EAIzC,GAAI,OAAO,OAAW,KAAe,IAAQ,OACzC,MAAO,sBAEX,GACK,OAAO,WAAe,KAAe,IAAQ,YAC1C,OAAO,OAAW,KAAe,IAAQ,OAE7C,MAAO,0BAEX,GAAI,CAAC,GAAO,CAAG,GAAK,CAAC,GAAS,CAAG,EAAG,CAChC,IAAI,GAAK,GAAW,EAAK,CAAO,EAC5B,GAAgB,EAAM,EAAI,CAAG,IAAM,OAAO,UAAY,aAAe,QAAU,EAAI,cAAgB,OACnG,GAAW,aAAe,OAAS,GAAK,iBACxC,GAAY,CAAC,IAAiB,GAAe,OAAO,CAAG,IAAM,GAAO,KAAe,EAAM,EAAO,KAAK,GAAM,CAAG,EAAG,EAAG,EAAE,EAAI,GAAW,SAAW,GAEhJ,IADiB,IAAiB,OAAO,EAAI,aAAgB,WAAa,GAAK,EAAI,YAAY,KAAO,EAAI,YAAY,KAAO,IAAM,KAC3G,IAAa,GAAW,IAAM,EAAM,KAAK,EAAQ,KAAK,CAAC,EAAG,IAAa,CAAC,EAAG,IAAY,CAAC,CAAC,EAAG,IAAI,EAAI,KAAO,IAKvI,OAJI,GAAG,SAAW,EAAY,GAAM,KAChC,EACO,GAAM,IAAM,GAAa,GAAI,CAAM,EAAI,IAE3C,GAAM,KAAO,EAAM,KAAK,GAAI,IAAI,EAAI,IAC/C,CACA,OAAO,OAAO,CAAG,CACrB,EAEA,SAAS,GAAW,EAAG,EAAc,EAAM,CAEvC,IAAI,EAAY,EADJ,EAAK,YAAc,GAE/B,OAAO,EAAY,EAAI,CAC3B,CAEA,SAAS,GAAM,EAAG,CACd,OAAO,EAAS,KAAK,OAAO,CAAC,EAAG,KAAM,QAAQ,CAClD,CAEA,SAAS,GAAiB,EAAK,CAC3B,MAAO,CAAC,GAAe,EAAE,OAAO,GAAQ,WAAa,KAAe,GAAc,EAAI,KAAiB,QAC3G,CACA,SAAS,GAAQ,EAAK,CAAE,OAAO,GAAM,CAAG,IAAM,kBAAoB,GAAiB,CAAG,CAAG,CACzF,SAAS,GAAO,EAAK,CAAE,OAAO,GAAM,CAAG,IAAM,iBAAmB,GAAiB,CAAG,CAAG,CACvF,SAAS,GAAS,EAAK,CAAE,OAAO,GAAM,CAAG,IAAM,mBAAqB,GAAiB,CAAG,CAAG,CAC3F,SAAS,GAAQ,EAAK,CAAE,OAAO,GAAM,CAAG,IAAM,kBAAoB,GAAiB,CAAG,CAAG,CACzF,SAAS,GAAS,EAAK,CAAE,OAAO,GAAM,CAAG,IAAM,mBAAqB,GAAiB,CAAG,CAAG,CAC3F,SAAS,GAAS,EAAK,CAAE,OAAO,GAAM,CAAG,IAAM,mBAAqB,GAAiB,CAAG,CAAG,CAC3F,SAAS,GAAU,EAAK,CAAE,OAAO,GAAM,CAAG,IAAM,oBAAsB,GAAiB,CAAG,CAAG,CAG7F,SAAS,GAAS,EAAK,CACnB,GAAI,EACA,OAAO,GAAO,OAAO,GAAQ,UAAY,aAAe,OAE5D,GAAI,OAAO,GAAQ,SACf,MAAO,GAEX,GAAI,CAAC,GAAO,OAAO,GAAQ,UAAY,CAAC,EACpC,MAAO,GAEX,GAAI,CAEA,OADA,EAAY,KAAK,CAAG,EACb,EACX,MAAY,CAAC,CACb,MAAO,EACX,CAEA,SAAS,GAAS,EAAK,CACnB,GAAI,CAAC,GAAO,OAAO,GAAQ,UAAY,CAAC,EACpC,MAAO,GAEX,GAAI,CAEA,OADA,EAAc,KAAK,CAAG,EACf,EACX,MAAY,CAAC,CACb,MAAO,EACX,CAEA,IAAI,EAAS,OAAO,UAAU,gBAAkB,SAAU,EAAK,CAAE,OAAO,KAAO,IAAM,EACrF,SAAS,GAAI,EAAK,EAAK,CACnB,OAAO,EAAO,KAAK,EAAK,CAAG,CAC/B,CAEA,SAAS,GAAM,EAAK,CAChB,OAAO,EAAe,KAAK,CAAG,CAClC,CAEA,SAAS,EAAO,EAAG,CACf,GAAI,EAAE,KAAQ,OAAO,EAAE,KACvB,IAAI,EAAI,EAAO,KAAK,EAAiB,KAAK,CAAC,EAAG,sBAAsB,EAEpE,OADI,EAAY,EAAE,GACX,IACX,CAEA,SAAS,GAAQ,EAAI,EAAG,CACpB,GAAI,EAAG,QAAW,OAAO,EAAG,QAAQ,CAAC,EACrC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,OAAQ,EAAI,EAAG,IAClC,GAAI,EAAG,KAAO,EAAK,OAAO,EAE9B,MAAO,EACX,CAEA,SAAS,GAAM,EAAG,CACd,GAAI,CAAC,GAAW,CAAC,GAAK,OAAO,GAAM,SAC/B,MAAO,GAEX,GAAI,CACA,EAAQ,KAAK,CAAC,EACd,GAAI,CACA,EAAQ,KAAK,CAAC,CAClB,MAAY,CACR,MAAO,EACX,CACA,OAAO,aAAa,GACxB,MAAY,CAAC,CACb,MAAO,EACX,CAEA,SAAS,GAAU,EAAG,CAClB,GAAI,CAAC,GAAc,CAAC,GAAK,OAAO,GAAM,SAClC,MAAO,GAEX,GAAI,CACA,EAAW,KAAK,EAAG,CAAU,EAC7B,GAAI,CACA,EAAW,KAAK,EAAG,CAAU,CACjC,MAAY,CACR,MAAO,EACX,CACA,OAAO,aAAa,OACxB,MAAY,CAAC,CACb,MAAO,EACX,CAEA,SAAS,GAAU,EAAG,CAClB,GAAI,CAAC,GAAgB,CAAC,GAAK,OAAO,GAAM,SACpC,MAAO,GAEX,GAAI,CAEA,OADA,EAAa,KAAK,CAAC,EACZ,EACX,MAAY,CAAC,CACb,MAAO,EACX,CAEA,SAAS,GAAM,EAAG,CACd,GAAI,CAAC,GAAW,CAAC,GAAK,OAAO,GAAM,SAC/B,MAAO,GAEX,GAAI,CACA,EAAQ,KAAK,CAAC,EACd,GAAI,CACA,EAAQ,KAAK,CAAC,CAClB,MAAY,CACR,MAAO,EACX,CACA,OAAO,aAAa,GACxB,MAAY,CAAC,CACb,MAAO,EACX,CAEA,SAAS,GAAU,EAAG,CAClB,GAAI,CAAC,GAAc,CAAC,GAAK,OAAO,GAAM,SAClC,MAAO,GAEX,GAAI,CACA,EAAW,KAAK,EAAG,CAAU,EAC7B,GAAI,CACA,EAAW,KAAK,EAAG,CAAU,CACjC,MAAY,CACR,MAAO,EACX,CACA,OAAO,aAAa,OACxB,MAAY,CAAC,CACb,MAAO,EACX,CAEA,SAAS,GAAU,EAAG,CAKlB,MAJI,CAAC,GAAK,OAAO,GAAM,SAAmB,GACtC,OAAO,YAAgB,KAAe,aAAa,aAGhD,OAAO,EAAE,UAAa,UAAY,OAAO,EAAE,cAAiB,UACvE,CAEA,SAAS,GAAc,EAAK,EAAM,CAC9B,GAAI,EAAI,OAAS,EAAK,gBAAiB,CACnC,IAAI,EAAY,EAAI,OAAS,EAAK,gBAC9B,EAAU,OAAS,EAAY,mBAAqB,EAAY,EAAI,IAAM,IAC9E,OAAO,GAAc,EAAO,KAAK,EAAK,EAAG,EAAK,eAAe,EAAG,CAAI,EAAI,CAC5E,CACA,IAAI,EAAU,EAAS,EAAK,YAAc,UAI1C,MAHA,GAAQ,UAAY,EAGb,GADC,EAAS,KAAK,EAAS,KAAK,EAAK,EAAS,MAAM,EAAG,eAAgB,EACzD,EAAG,SAAU,CAAI,CACvC,CAEA,SAAS,GAAQ,EAAG,CAChB,IAAI,EAAI,EAAE,WAAW,CAAC,EAClB,EAAI,CACJ,EAAG,IACH,EAAG,IACH,GAAI,IACJ,GAAI,IACJ,GAAI,GACR,EAAE,GAEF,OADI,EAAY,KAAO,EAChB,OAAS,EAAI,GAAO,IAAM,IAAM,EAAa,KAAK,EAAE,SAAS,EAAE,CAAC,CAC3E,CAEA,SAAS,GAAU,EAAK,CACpB,MAAO,UAAY,EAAM,GAC7B,CAEA,SAAS,GAAiB,EAAM,CAC5B,OAAO,EAAO,QAClB,CAEA,SAAS,GAAa,EAAM,EAAM,EAAS,EAAQ,CAC/C,IAAI,EAAgB,EAAS,GAAa,EAAS,CAAM,EAAI,EAAM,KAAK,EAAS,IAAI,EACrF,OAAO,EAAO,KAAO,EAAO,MAAQ,EAAgB,GACxD,CAEA,SAAS,GAAiB,EAAI,CAC1B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,OAAQ,IAC3B,GAAI,GAAQ,EAAG,GAAI;CAAI,GAAK,EACxB,MAAO,GAGf,MAAO,EACX,CAEA,SAAS,GAAU,EAAM,EAAO,CAC5B,IAAI,EACJ,GAAI,EAAK,SAAW,IAChB,EAAa,SACV,GAAI,OAAO,EAAK,QAAW,UAAY,EAAK,OAAS,EACxD,EAAa,EAAM,KAAK,MAAM,EAAK,OAAS,CAAC,EAAG,GAAG,OAEnD,OAAO,KAEX,MAAO,CACH,KAAM,EACN,KAAM,EAAM,KAAK,MAAM,EAAQ,CAAC,EAAG,CAAU,CACjD,CACJ,CAEA,SAAS,GAAa,EAAI,EAAQ,CAC9B,GAAI,EAAG,SAAW,EAAK,MAAO,GAC9B,IAAI,EAAa;EAAO,EAAO,KAAO,EAAO,KAC7C,OAAO,EAAa,EAAM,KAAK,EAAI,IAAM,CAAU,EAAI;EAAO,EAAO,IACzE,CAEA,SAAS,GAAW,EAAK,EAAS,CAC9B,IAAI,EAAQ,GAAQ,CAAG,EACnB,EAAK,CAAC,EACV,GAAI,EAAO,CACP,EAAG,OAAS,EAAI,OAChB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC5B,EAAG,GAAK,GAAI,EAAK,CAAC,EAAI,EAAQ,EAAI,GAAI,CAAG,EAAI,EAErD,CACA,IAAI,EAAO,OAAO,GAAS,WAAa,EAAK,CAAG,EAAI,CAAC,EACjD,EACJ,GAAI,EAAmB,CACnB,EAAS,CAAC,EACV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC7B,EAAO,IAAM,EAAK,IAAM,EAAK,EAErC,CAEA,IAAK,IAAI,KAAO,EACP,GAAI,EAAK,CAAG,IACb,GAAS,OAAO,OAAO,CAAG,CAAC,IAAM,GAAO,EAAM,EAAI,QAClD,GAAqB,EAAO,IAAM,aAAgB,SAG3C,EAAM,KAAK,SAAU,CAAG,EAC/B,EAAG,KAAK,EAAQ,EAAK,CAAG,EAAI,KAAO,EAAQ,EAAI,GAAM,CAAG,CAAC,EAEzD,EAAG,KAAK,EAAM,KAAO,EAAQ,EAAI,GAAM,CAAG,CAAC,IAGnD,GAAI,OAAO,GAAS,eACX,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IACzB,EAAa,KAAK,EAAK,EAAK,EAAE,GAC9B,EAAG,KAAK,IAAM,EAAQ,EAAK,EAAE,EAAI,MAAQ,EAAQ,EAAI,EAAK,IAAK,CAAG,CAAC,EAI/E,OAAO,CACX,mBC7hBA,IAAI,EAAA,GAAA,EAEA,EAAA,GAAA,EAUA,EAAc,SAAU,EAAM,EAAK,EAAU,CAMhD,IAJA,IAAI,EAAO,EAEP,GAEI,EAAO,EAAK,OAAS,KAAM,EAAO,EACzC,GAAI,EAAK,MAAQ,EAOhB,MANA,GAAK,KAAO,EAAK,KACZ,IAEJ,EAAK,KAAqD,EAAK,KAC/D,EAAK,KAAO,GAEN,CAGV,EAGI,EAAU,SAAU,EAAS,EAAK,CAChC,KAGL,KAAI,EAAO,EAAY,EAAS,CAAG,EACnC,OAAO,GAAQ,EAAK,KADe,CAEpC,EAEI,EAAU,SAAU,EAAS,EAAK,EAAO,CAC5C,IAAI,EAAO,EAAY,EAAS,CAAG,EAC/B,EACH,EAAK,MAAQ,EAGb,EAAQ,KAAgF,CAClF,MACL,KAAM,EAAQ,KACP,OACR,CAEF,EAEI,EAAU,SAAU,EAAS,EAAK,CAIrC,OAHK,EAGE,CAAC,CAAC,EAAY,EAAS,CAAG,EAFzB,EAGT,EAGI,EAAa,SAAU,EAAS,EAAK,CACxC,GAAI,EACH,OAAO,EAAY,EAAS,EAAK,EAAI,CAEvC,EAGA,EAAO,QAAU,UAA8B,CAKkB,IAAI,EAGhE,EAAU,CACb,OAAQ,SAAU,EAAK,CACtB,GAAI,CAAC,EAAQ,IAAI,CAAG,EACnB,MAAM,IAAI,EAAW,iCAAmC,EAAQ,CAAG,CAAC,CAEtE,EACA,OAAU,SAAU,EAAK,CACxB,IAAI,EAAc,EAAW,EAAI,CAAG,EAIpC,OAHI,GAAe,GAAM,CAAC,EAAG,OAC5B,EAAK,IAAA,IAEC,CAAC,CAAC,CACV,EACA,IAAK,SAAU,EAAK,CACnB,OAAO,EAAQ,EAAI,CAAG,CACvB,EACA,IAAK,SAAU,EAAK,CACnB,OAAO,EAAQ,EAAI,CAAG,CACvB,EACA,IAAK,SAAU,EAAK,EAAO,CAC1B,AAEC,IAAK,CACJ,KAAM,IAAA,EACP,EAGD,EAA+C,EAAK,EAAK,CAAK,CAC/D,CACD,EACA,OAAO,CACR,mBC3GA,EAAO,QAAU,wBCAjB,EAAO,QAAU,uBCAjB,EAAO,QAAU,2BCAjB,EAAO,QAAU,4BCAjB,EAAO,QAAU,gCCAjB,EAAO,QAAU,6BCAjB,EAAO,QAAU,0BCAjB,EAAO,QAAU,KAAK,qBCAtB,EAAO,QAAU,KAAK,uBCAtB,EAAO,QAAU,KAAK,qBCAtB,EAAO,QAAU,KAAK,qBCAtB,EAAO,QAAU,KAAK,qBCAtB,EAAO,QAAU,KAAK,uBCAtB,EAAO,QAAU,OAAO,OAAS,SAAe,EAAG,CAClD,OAAO,IAAM,CACd,mBCHA,IAAI,EAAA,GAAA,EAGJ,EAAO,QAAU,SAAc,EAAQ,CAItC,OAHI,EAAO,CAAM,GAAK,IAAW,EACzB,EAED,EAAS,EAAI,GAAK,CAC1B,mBCPA,EAAO,QAAU,OAAO,0CCAxB,IAAI,EAAA,GAAA,EAEJ,GAAI,EACH,GAAI,CACH,EAAM,CAAC,EAAG,QAAQ,CACnB,MAAY,CAEX,EAAQ,IACT,CAGD,EAAO,QAAU,mBCXjB,IAAI,EAAkB,OAAO,gBAAkB,GAC/C,GAAI,EACH,GAAI,CACH,EAAgB,CAAC,EAAG,IAAK,CAAE,MAAO,CAAE,CAAC,CACtC,MAAY,CAEX,EAAkB,EACnB,CAGD,EAAO,QAAU,mBCTjB,EAAO,QAAU,UAAsB,CACtC,GAAI,OAAO,QAAW,YAAc,OAAO,OAAO,uBAA0B,WAAc,MAAO,GACjG,GAAI,OAAO,OAAO,UAAa,SAAY,MAAO,GAGlD,IAAI,EAAM,CAAC,EACP,EAAM,OAAO,MAAM,EACnB,EAAS,OAAO,CAAG,EAIvB,GAHI,OAAO,GAAQ,UAEf,OAAO,UAAU,SAAS,KAAK,CAAG,IAAM,mBACxC,OAAO,UAAU,SAAS,KAAK,CAAM,IAAM,kBAAqB,MAAO,GAU3E,IAAI,EAAS,GAEb,IAAK,IAAI,IADT,GAAI,GAAO,EACG,EAAO,MAAO,GAG5B,GAFI,OAAO,OAAO,MAAS,YAAc,OAAO,KAAK,CAAG,CAAC,CAAC,SAAW,GAEjE,OAAO,OAAO,qBAAwB,YAAc,OAAO,oBAAoB,CAAG,CAAC,CAAC,SAAW,EAAK,MAAO,GAE/G,IAAI,EAAO,OAAO,sBAAsB,CAAG,EAG3C,GAFI,EAAK,SAAW,GAAK,EAAK,KAAO,GAEjC,CAAC,OAAO,UAAU,qBAAqB,KAAK,EAAK,CAAG,EAAK,MAAO,GAEpE,GAAI,OAAO,OAAO,0BAA6B,WAAY,CAE1D,IAAI,EAAgD,OAAO,yBAAyB,EAAK,CAAG,EAC5F,GAAI,EAAW,QAAU,GAAU,EAAW,aAAe,GAAQ,MAAO,EAC7E,CAEA,MAAO,EACR,mBC1CA,IAAI,EAAa,OAAO,OAAW,KAAe,OAC9C,EAAA,GAAA,EAGJ,EAAO,QAAU,UAA4B,CAM5C,OALI,OAAO,GAAe,YACtB,OAAO,QAAW,YAClB,OAAO,EAAW,KAAK,GAAM,UAC7B,OAAO,OAAO,KAAK,GAAM,SAAmB,GAEzC,EAAc,CACtB,mBCVA,EAAO,QAAW,OAAO,QAAY,KAAe,QAAQ,gBAAmB,sBCE/E,EAAO,QAHH,GAGa,CAAA,CAAQ,gBAAkB,sBCD3C,IACI,EAAQ,OAAO,UAAU,SACzB,EAAM,KAAK,IACX,EAAW,oBAEX,EAAW,SAAkB,EAAG,EAAG,CAGnC,IAAK,IAFD,EAAM,CAAC,EAEF,EAAI,EAAG,EAAI,EAAE,OAAQ,GAAK,EAC/B,EAAI,GAAK,EAAE,GAEf,IAAK,IAAI,EAAI,EAAG,EAAI,EAAE,OAAQ,GAAK,EAC/B,EAAI,EAAI,EAAE,QAAU,EAAE,GAG1B,OAAO,CACX,EAEI,EAAQ,SAAe,EAAS,EAAQ,CAExC,IAAK,IADD,EAAM,CAAC,EACF,EAAI,GAAU,EAAG,EAAI,EAAG,EAAI,EAAQ,OAAQ,GAAK,EAAG,GAAK,EAC9D,EAAI,GAAK,EAAQ,GAErB,OAAO,CACX,EAEI,EAAQ,SAAU,EAAK,EAAQ,CAE/B,IAAK,IADD,EAAM,GACD,EAAI,EAAG,EAAI,EAAI,OAAQ,GAAK,EACjC,GAAO,EAAI,GACP,EAAI,EAAI,EAAI,SACZ,GAAO,GAGf,OAAO,CACX,EAEA,EAAO,QAAU,SAAc,EAAM,CACjC,IAAI,EAAS,KACb,GAAI,OAAO,GAAW,YAAc,EAAM,MAAM,CAAM,IAAM,EACxD,MAAU,UAAU,kDAAgB,CAAM,EAyB9C,IAAK,IAvBD,EAAO,EAAM,UAAW,CAAC,EAEzB,EACA,EAAS,UAAY,CACrB,GAAI,gBAAgB,EAAO,CACvB,IAAI,EAAS,EAAO,MAChB,KACA,EAAS,EAAM,SAAS,CAC5B,EAIA,OAHI,OAAO,CAAM,IAAM,EACZ,EAEJ,IACX,CACA,OAAO,EAAO,MACV,EACA,EAAS,EAAM,SAAS,CAC5B,CAEJ,EAEI,EAAc,EAAI,EAAG,EAAO,OAAS,EAAK,MAAM,EAChD,EAAY,CAAC,EACR,EAAI,EAAG,EAAI,EAAa,IAC7B,EAAU,GAAK,IAAM,EAKzB,GAFA,EAAQ,SAAS,SAAU,oBAAsB,EAAM,EAAW,GAAG,EAAI,2CAA2C,CAAC,CAAC,CAAM,EAExH,EAAO,UAAW,CAClB,IAAI,EAAQ,UAAiB,CAAC,EAC9B,EAAM,UAAY,EAAO,UACzB,EAAM,UAAY,IAAI,EACtB,EAAM,UAAY,IACtB,CAEA,OAAO,CACX,mBCjFA,IAAI,EAAA,GAAA,EAEJ,EAAO,QAAU,SAAS,UAAU,MAAQ,mBCD5C,EAAO,QAAU,SAAS,UAAU,sBCApC,EAAO,QAAU,SAAS,UAAU,uBCApC,EAAO,QAAU,OAAO,QAAY,KAAe,SAAW,QAAQ,uBCDtE,IAAI,EAAA,GAAA,EAEA,EAAA,GAAA,EACA,EAAA,GAAA,EAIJ,EAAO,QAHH,GAGa,GAAiB,EAAK,KAAK,EAAO,CAAM,mBCPzD,IAAI,EAAA,GAAA,EACA,EAAA,GAAA,EAEA,EAAA,GAAA,EACA,EAAA,GAAA,EAGJ,EAAO,QAAU,SAAuB,EAAM,CAC7C,GAAI,EAAK,OAAS,GAAK,OAAO,EAAK,IAAO,WACzC,MAAM,IAAI,EAAW,wBAAwB,EAE9C,OAAO,EAAa,EAAM,EAAO,CAAI,CACtC,mBCZA,IAAI,EAAA,GAAA,EACA,EAAA,GAAA,EAEA,EACJ,GAAI,CAEH,EAA0E,CAAC,CAAC,CAAE,YAAc,MAAM,SACnG,OAAS,EAAG,CACX,GAAI,CAAC,GAAK,OAAO,GAAM,UAAY,EAAE,SAAU,IAAM,EAAE,OAAS,mBAC/D,MAAM,CAER,CAGA,IAAI,EAAO,CAAC,CAAC,GAAoB,GAAQ,EAAK,OAAO,UAAyD,WAAY,EAEtH,EAAU,OACV,EAAkB,EAAQ,eAG9B,EAAO,QAAU,GAAQ,OAAO,EAAK,KAAQ,WAC1C,EAAS,CAAC,EAAK,GAAG,CAAC,EACnB,OAAO,GAAoB,YACK,SAAmB,EAAO,CAE1D,OAAO,EAAgB,GAAS,KAAO,EAAQ,EAAQ,CAAK,CAAC,CAC9D,mBC1BF,IAAI,EAAA,GAAA,EACA,EAAA,GAAA,EAEA,EAAA,GAAA,EAGJ,EAAO,QAAU,EACd,SAAkB,EAAG,CAEtB,OAAO,EAAgB,CAAC,CACzB,EACE,EACC,SAAkB,EAAG,CACtB,GAAI,CAAC,GAAM,OAAO,GAAM,UAAY,OAAO,GAAM,WAChD,MAAU,UAAU,yBAAyB,EAG9C,OAAO,EAAiB,CAAC,CAC1B,EACE,EACC,SAAkB,EAAG,CAEtB,OAAO,EAAe,CAAC,CACxB,EACE,sBCxBL,IAAI,EAAO,SAAS,UAAU,KAC1B,EAAU,OAAO,UAAU,eAI/B,EAAO,QAHH,GAGa,CAAA,CAAK,KAAK,EAAM,CAAO,mBCLxC,IAAI,EAEA,EAAA,GAAA,EAEA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EAEA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EAEA,EAAY,SAGZ,EAAwB,SAAU,EAAkB,CACvD,GAAI,CACH,OAAO,EAAU,yBAA2B,EAAmB,gBAAgB,CAAC,CAAC,CAClF,MAAY,CAAC,CACd,EAEI,EAAA,GAAA,EACA,EAAA,GAAA,EAEA,EAAiB,UAAY,CAChC,MAAM,IAAI,CACX,EACI,EAAiB,EACjB,UAAY,CACd,GAAI,CAGH,OADA,UAAU,OACH,CACR,MAAuB,CACtB,GAAI,CAEH,OAAO,EAAM,UAAW,QAAQ,CAAC,CAAC,GACnC,MAAqB,CACpB,OAAO,CACR,CACD,CACD,EAAE,EACA,EAEC,EAAA,GAAA,CAAA,CAAoC,EAEpC,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EAEA,EAAA,GAAA,EACA,EAAA,GAAA,EAEA,EAAY,CAAC,EAEb,EAAa,OAAO,WAAe,KAAe,CAAC,EAAW,EAAY,EAAS,UAAU,EAE7F,EAAa,CAChB,UAAW,KACX,mBAAoB,OAAO,eAAmB,IAAc,EAAY,eACxE,UAAW,MACX,gBAAiB,OAAO,YAAgB,IAAc,EAAY,YAClE,2BAA4B,GAAc,EAAW,EAAS,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,EAAI,EACvF,mCAAoC,EACpC,kBAAmB,EACnB,mBAAoB,EACpB,2BAA4B,EAC5B,2BAA4B,EAC5B,YAAa,OAAO,QAAY,IAAc,EAAY,QAC1D,WAAY,OAAO,OAAW,IAAc,EAAY,OACxD,kBAAmB,OAAO,cAAkB,IAAc,EAAY,cACtE,mBAAoB,OAAO,eAAmB,IAAc,EAAY,eACxE,YAAa,QACb,aAAc,OAAO,SAAa,IAAc,EAAY,SAC5D,SAAU,KACV,cAAe,UACf,uBAAwB,mBACxB,cAAe,UACf,uBAAwB,mBACxB,UAAW,EACX,SAAU,KACV,cAAe,EACf,iBAAkB,OAAO,aAAiB,IAAc,EAAY,aACpE,iBAAkB,OAAO,aAAiB,IAAc,EAAY,aACpE,iBAAkB,OAAO,aAAiB,IAAc,EAAY,aACpE,yBAA0B,OAAO,qBAAyB,IAAc,EAAY,qBACpF,aAAc,EACd,sBAAuB,EACvB,cAAe,OAAO,UAAc,IAAc,EAAY,UAC9D,eAAgB,OAAO,WAAe,IAAc,EAAY,WAChE,eAAgB,OAAO,WAAe,IAAc,EAAY,WAChE,aAAc,SACd,UAAW,MACX,sBAAuB,GAAc,EAAW,EAAS,EAAS,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,EAAI,EAC5F,SAAU,OAAO,MAAS,SAAW,KAAO,EAC5C,QAAS,OAAO,IAAQ,IAAc,EAAY,IAClD,yBAA0B,OAAO,IAAQ,KAAe,CAAC,GAAc,CAAC,EAAW,EAAY,EAAS,IAAI,IAAI,CAAA,CAAE,OAAO,SAAS,CAAC,CAAC,EACpI,SAAU,KACV,WAAY,OACZ,WAAY,EACZ,oCAAqC,EACrC,eAAgB,WAChB,aAAc,SACd,YAAa,OAAO,QAAY,IAAc,EAAY,QAC1D,UAAW,OAAO,MAAU,IAAc,EAAY,MACtD,eAAgB,EAChB,mBAAoB,EACpB,YAAa,OAAO,QAAY,IAAc,EAAY,QAC1D,WAAY,OACZ,QAAS,OAAO,IAAQ,IAAc,EAAY,IAClD,yBAA0B,OAAO,IAAQ,KAAe,CAAC,GAAc,CAAC,EAAW,EAAY,EAAS,IAAI,IAAI,CAAA,CAAE,OAAO,SAAS,CAAC,CAAC,EACpI,sBAAuB,OAAO,kBAAsB,IAAc,EAAY,kBAC9E,WAAY,OACZ,4BAA6B,GAAc,EAAW,EAAS,GAAG,OAAO,SAAS,CAAC,CAAC,EAAI,EACxF,WAAY,EAAa,OAAS,EAClC,gBAAiB,EACjB,mBAAoB,EACpB,eAAgB,EAChB,cAAe,EACf,eAAgB,OAAO,WAAe,IAAc,EAAY,WAChE,sBAAuB,OAAO,kBAAsB,IAAc,EAAY,kBAC9E,gBAAiB,OAAO,YAAgB,IAAc,EAAY,YAClE,gBAAiB,OAAO,YAAgB,IAAc,EAAY,YAClE,aAAc,EACd,YAAa,OAAO,QAAY,IAAc,EAAY,QAC1D,YAAa,OAAO,QAAY,IAAc,EAAY,QAC1D,YAAa,OAAO,QAAY,IAAc,EAAY,QAE1D,4BAA6B,EAC7B,6BAA8B,EAC9B,0BAA2B,EAC3B,0BAA2B,EAC3B,aAAc,EACd,eAAgB,EAChB,aAAc,EACd,aAAc,EACd,aAAc,EACd,eAAgB,EAChB,cAAe,EACf,2BAA4B,CAC7B,EAEA,GAAI,EACH,GAAI,CACH,KAAK,KACN,OAAS,EAAG,CAGX,EAAW,qBADM,EAAS,EAAS,CAAC,CACO,CAC5C,CAGD,IAAI,EAAS,SAAS,EAAO,EAAM,CAClC,IAAI,EACJ,GAAI,IAAS,kBACZ,EAAQ,EAAsB,sBAAsB,OAC9C,GAAI,IAAS,sBACnB,EAAQ,EAAsB,iBAAiB,OACzC,GAAI,IAAS,2BACnB,EAAQ,EAAsB,uBAAuB,OAC/C,GAAI,IAAS,mBAAoB,CACvC,IAAI,EAAK,EAAO,0BAA0B,EACtC,IACH,EAAQ,EAAG,UAEb,MAAO,GAAI,IAAS,2BAA4B,CAC/C,IAAI,EAAM,EAAO,kBAAkB,EAC/B,GAAO,IACV,EAAQ,EAAS,EAAI,SAAS,EAEhC,CAIA,MAFA,GAAW,GAAQ,EAEZ,CACR,EAEI,EAAiB,CACpB,UAAW,KACX,yBAA0B,CAAC,cAAe,WAAW,EACrD,mBAAoB,CAAC,QAAS,WAAW,EACzC,uBAAwB,CAAC,QAAS,YAAa,SAAS,EACxD,uBAAwB,CAAC,QAAS,YAAa,SAAS,EACxD,oBAAqB,CAAC,QAAS,YAAa,MAAM,EAClD,sBAAuB,CAAC,QAAS,YAAa,QAAQ,EACtD,2BAA4B,CAAC,gBAAiB,WAAW,EACzD,mBAAoB,CAAC,yBAA0B,WAAW,EAC1D,4BAA6B,CAAC,yBAA0B,YAAa,WAAW,EAChF,qBAAsB,CAAC,UAAW,WAAW,EAC7C,sBAAuB,CAAC,WAAY,WAAW,EAC/C,kBAAmB,CAAC,OAAQ,WAAW,EACvC,mBAAoB,CAAC,QAAS,WAAW,EACzC,uBAAwB,CAAC,YAAa,WAAW,EACjD,0BAA2B,CAAC,eAAgB,WAAW,EACvD,0BAA2B,CAAC,eAAgB,WAAW,EACvD,sBAAuB,CAAC,WAAY,WAAW,EAC/C,cAAe,CAAC,oBAAqB,WAAW,EAChD,uBAAwB,CAAC,oBAAqB,YAAa,WAAW,EACtE,uBAAwB,CAAC,YAAa,WAAW,EACjD,wBAAyB,CAAC,aAAc,WAAW,EACnD,wBAAyB,CAAC,aAAc,WAAW,EACnD,cAAe,CAAC,OAAQ,OAAO,EAC/B,kBAAmB,CAAC,OAAQ,WAAW,EACvC,iBAAkB,CAAC,MAAO,WAAW,EACrC,oBAAqB,CAAC,SAAU,WAAW,EAC3C,oBAAqB,CAAC,SAAU,WAAW,EAC3C,sBAAuB,CAAC,SAAU,YAAa,UAAU,EACzD,qBAAsB,CAAC,SAAU,YAAa,SAAS,EACvD,qBAAsB,CAAC,UAAW,WAAW,EAC7C,sBAAuB,CAAC,UAAW,YAAa,MAAM,EACtD,gBAAiB,CAAC,UAAW,KAAK,EAClC,mBAAoB,CAAC,UAAW,QAAQ,EACxC,oBAAqB,CAAC,UAAW,SAAS,EAC1C,wBAAyB,CAAC,aAAc,WAAW,EACnD,4BAA6B,CAAC,iBAAkB,WAAW,EAC3D,oBAAqB,CAAC,SAAU,WAAW,EAC3C,iBAAkB,CAAC,MAAO,WAAW,EACrC,+BAAgC,CAAC,oBAAqB,WAAW,EACjE,oBAAqB,CAAC,SAAU,WAAW,EAC3C,oBAAqB,CAAC,SAAU,WAAW,EAC3C,yBAA0B,CAAC,cAAe,WAAW,EACrD,wBAAyB,CAAC,aAAc,WAAW,EACnD,uBAAwB,CAAC,YAAa,WAAW,EACjD,wBAAyB,CAAC,aAAc,WAAW,EACnD,+BAAgC,CAAC,oBAAqB,WAAW,EACjE,yBAA0B,CAAC,cAAe,WAAW,EACrD,yBAA0B,CAAC,cAAe,WAAW,EACrD,sBAAuB,CAAC,WAAY,WAAW,EAC/C,qBAAsB,CAAC,UAAW,WAAW,EAC7C,qBAAsB,CAAC,UAAW,WAAW,CAC9C,EAEI,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAU,EAAK,KAAK,EAAO,MAAM,UAAU,MAAM,EACjD,EAAe,EAAK,KAAK,EAAQ,MAAM,UAAU,MAAM,EACvD,GAAW,EAAK,KAAK,EAAO,OAAO,UAAU,OAAO,EACpD,GAAY,EAAK,KAAK,EAAO,OAAO,UAAU,KAAK,EACnD,GAAQ,EAAK,KAAK,EAAO,OAAO,UAAU,IAAI,EAG9C,GAAa,qGACb,GAAe,WACf,GAAe,SAAsB,EAAQ,CAChD,IAAI,EAAQ,GAAU,EAAQ,EAAG,CAAC,EAC9B,EAAO,GAAU,EAAQ,EAAE,EAC/B,GAAI,IAAU,KAAO,IAAS,IAC7B,MAAM,IAAI,EAAa,gDAAgD,EACjE,GAAI,IAAS,KAAO,IAAU,IACpC,MAAM,IAAI,EAAa,gDAAgD,EAExE,IAAI,EAAS,CAAC,EAId,OAHA,GAAS,EAAQ,GAAY,SAAU,EAAO,EAAQ,EAAO,EAAW,CACvE,EAAO,EAAO,QAAU,EAAQ,GAAS,EAAW,GAAc,IAAI,EAAI,GAAU,CACrF,CAAC,EACM,CACR,EAGI,GAAmB,SAA0B,EAAM,EAAc,CACpE,IAAI,EAAgB,EAChB,EAMJ,GALI,EAAO,EAAgB,CAAa,IACvC,EAAQ,EAAe,GACvB,EAAgB,IAAM,EAAM,GAAK,KAG9B,EAAO,EAAY,CAAa,EAAG,CACtC,IAAI,EAAQ,EAAW,GAIvB,GAHI,IAAU,IACb,EAAQ,EAAO,CAAa,GAElB,IAAU,QAAe,CAAC,EACpC,MAAM,IAAI,EAAW,aAAe,EAAO,sDAAsD,EAGlG,MAAO,CACC,QACP,KAAM,EACC,OACR,CACD,CAEA,MAAM,IAAI,EAAa,aAAe,EAAO,kBAAkB,CAChE,EAEA,EAAO,QAAU,SAAsB,EAAM,EAAc,CAC1D,GAAI,OAAO,GAAS,UAAY,EAAK,SAAW,EAC/C,MAAM,IAAI,EAAW,2CAA2C,EAEjE,GAAI,UAAU,OAAS,GAAK,OAAO,GAAiB,UACnD,MAAM,IAAI,EAAW,2CAA2C,EAGjE,GAAI,GAAM,cAAe,CAAI,IAAM,KAClC,MAAM,IAAI,EAAa,oFAAoF,EAE5G,IAAI,EAAQ,GAAa,CAAI,EACzB,EAAoB,EAAM,OAAS,EAAI,EAAM,GAAK,GAElD,EAAY,GAAiB,IAAM,EAAoB,IAAK,CAAY,EACxE,EAAoB,EAAU,KAC9B,EAAQ,EAAU,MAClB,EAAqB,GAErB,EAAQ,EAAU,MAClB,IACH,EAAoB,EAAM,GAC1B,EAAa,EAAO,EAAQ,CAAC,EAAG,CAAC,EAAG,CAAK,CAAC,GAG3C,IAAK,IAAI,EAAI,EAAG,EAAQ,GAAM,EAAI,EAAM,OAAQ,GAAK,EAAG,CACvD,IAAI,EAAO,EAAM,GACb,EAAQ,GAAU,EAAM,EAAG,CAAC,EAC5B,EAAO,GAAU,EAAM,EAAE,EAC7B,IAEG,IAAU,KAAO,IAAU,KAAO,IAAU,KACzC,IAAS,KAAO,IAAS,KAAO,IAAS,MAE3C,IAAU,EAEb,MAAM,IAAI,EAAa,sDAAsD,EAS9E,IAPI,IAAS,eAAiB,CAAC,KAC9B,EAAqB,IAGtB,GAAqB,IAAM,EAC3B,EAAoB,IAAM,EAAoB,IAE1C,EAAO,EAAY,CAAiB,EACvC,EAAQ,EAAW,QACb,GAAI,GAAS,KAAM,CACzB,GAAI,EAAE,KAAQ,GAAQ,CACrB,GAAI,CAAC,EACJ,MAAM,IAAI,EAAW,sBAAwB,EAAO,6CAA6C,EAElG,MACD,CACA,GAAI,GAAU,EAAI,GAAM,EAAM,OAAQ,CACrC,IAAI,EAAO,EAAM,EAAO,CAAI,EAC5B,EAAQ,CAAC,CAAC,EASV,AAGC,EAHG,GAAS,QAAS,GAAQ,EAAE,kBAAmB,EAAK,KAC/C,EAAK,IAEL,EAAM,EAEhB,KACC,GAAQ,EAAO,EAAO,CAAI,EAC1B,EAAQ,EAAM,GAGX,GAAS,CAAC,IACb,EAAW,GAAqB,EAElC,CACD,CACA,OAAO,CACR,mBCvXA,IAAI,EAAA,GAAA,EAEA,EAAA,GAAA,EAGA,EAAW,EAAc,CAAC,EAAa,4BAA4B,CAAC,CAAC,EAGzE,EAAO,QAAU,SAA4B,EAAM,EAAc,CAGhE,IAAI,EAA2E,EAAa,EAAM,CAAC,CAAC,CAAY,EAIhH,OAHI,OAAO,GAAc,YAAc,EAAS,EAAM,aAAa,EAAI,GAC/D,EAAoC,CAAC,CAAS,CAAE,EAEjD,CACR,mBChBA,IAAI,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EAEA,EAAA,GAAA,EACA,EAAO,EAAa,QAAS,EAAI,EAGjC,EAAU,EAAU,oBAAqB,EAAI,EAE7C,EAAU,EAAU,oBAAqB,EAAI,EAE7C,EAAU,EAAU,oBAAqB,EAAI,EAE7C,EAAa,EAAU,uBAAwB,EAAI,EAEnD,EAAW,EAAU,qBAAsB,EAAI,EAGnD,EAAO,QAAU,CAAC,CAAC,GAAmD,UAA6B,CAK7D,IAAI,EAGrC,EAAU,CACb,OAAQ,SAAU,EAAK,CACtB,GAAI,CAAC,EAAQ,IAAI,CAAG,EACnB,MAAM,IAAI,EAAW,iCAAmC,EAAQ,CAAG,CAAC,CAEtE,EACA,OAAU,SAAU,EAAK,CACxB,GAAI,EAAI,CACP,IAAI,EAAS,EAAW,EAAI,CAAG,EAI/B,OAHI,EAAS,CAAE,IAAM,IACpB,EAAK,IAAA,IAEC,CACR,CACA,MAAO,EACR,EACA,IAAK,SAAU,EAAK,CACnB,GAAI,EACH,OAAO,EAAQ,EAAI,CAAG,CAExB,EACA,IAAK,SAAU,EAAK,CAInB,OAHI,EACI,EAAQ,EAAI,CAAG,EAEhB,EACR,EACA,IAAK,SAAU,EAAK,EAAO,CAC1B,AAEC,IAAK,IAAI,EAEV,EAAQ,EAAI,EAAK,CAAK,CACvB,CACD,EAGA,OAAO,CACR,mBCjEA,IAAI,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EAEA,EAAA,GAAA,EACA,EAAW,EAAa,YAAa,EAAI,EAGzC,EAAc,EAAU,wBAAyB,EAAI,EAErD,EAAc,EAAU,wBAAyB,EAAI,EAErD,EAAc,EAAU,wBAAyB,EAAI,EAErD,EAAiB,EAAU,2BAA4B,EAAI,EAG/D,EAAO,QAAU,EAC6B,UAAiC,CAK3B,IAAI,EACf,EAGnC,EAAU,CACb,OAAQ,SAAU,EAAK,CACtB,GAAI,CAAC,EAAQ,IAAI,CAAG,EACnB,MAAM,IAAI,EAAW,iCAAmC,EAAQ,CAAG,CAAC,CAEtE,EACA,OAAU,SAAU,EAAK,CACxB,GAAI,GAAY,IAAQ,OAAO,GAAQ,UAAY,OAAO,GAAQ,gBAC7D,EACH,OAAO,EAAe,EAAK,CAAG,CAAA,MAEzB,GAAI,GACN,EACH,OAAO,EAAG,OAAU,CAAG,EAGzB,MAAO,EACR,EACA,IAAK,SAAU,EAAK,CAMnB,OALI,GAAY,IAAQ,OAAO,GAAQ,UAAY,OAAO,GAAQ,aAC7D,EACI,EAAY,EAAK,CAAG,EAGtB,GAAM,EAAG,IAAI,CAAG,CACxB,EACA,IAAK,SAAU,EAAK,CAMnB,OALI,GAAY,IAAQ,OAAO,GAAQ,UAAY,OAAO,GAAQ,aAC7D,EACI,EAAY,EAAK,CAAG,EAGtB,CAAC,CAAC,GAAM,EAAG,IAAI,CAAG,CAC1B,EACA,IAAK,SAAU,EAAK,EAAO,CACtB,GAAY,IAAQ,OAAO,GAAQ,UAAY,OAAO,GAAQ,aACjE,AACC,IAAM,IAAI,EAEX,EAAY,EAAK,EAAK,CAAK,GACjB,IACV,AACC,IAAK,EAAkB,EAGc,EAAK,IAAI,EAAK,CAAK,EAE3D,CACD,EAGA,OAAO,CACR,EACE,mBCjFH,IAAI,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EAGA,EAAA,GAAA,GAAuC,GAAqB,EAGhE,EAAO,QAAU,UAA0B,CAGP,IAAI,EAGnC,EAAU,CACb,OAAQ,SAAU,EAAK,CACtB,GAAI,CAAC,EAAQ,IAAI,CAAG,EAInB,MAAM,IAAI,EAAW,kCAHP,GAAO,OAAO,CAAG,IAAM,EAClC,uBACA,EAAQ,CAAG,EACiD,CAEjE,EACA,OAAU,SAAU,EAAK,CACxB,MAAO,CAAC,CAAC,GAAgB,EAAa,OAAU,CAAG,CACpD,EACA,IAAK,SAAU,EAAK,CACnB,OAAO,GAAgB,EAAa,IAAI,CAAG,CAC5C,EACA,IAAK,SAAU,EAAK,CACnB,MAAO,CAAC,CAAC,GAAgB,EAAa,IAAI,CAAG,CAC9C,EACA,IAAK,SAAU,EAAK,EAAO,CAC1B,AACC,IAAe,EAAY,EAG5B,EAAa,IAAI,EAAK,CAAK,CAC5B,CACD,EAEA,OAAO,CACR,mBC3CA,IAAI,EAAU,OAAO,UAAU,QAC3B,EAAkB,OAElB,EAAS,CACT,QAAS,UACT,QAAS,SACb,EAEA,EAAO,QAAU,CACb,QAAW,EAAO,QAClB,WAAY,CACR,QAAS,SAAU,EAAO,CACtB,OAAO,EAAQ,KAAK,EAAO,EAAiB,GAAG,CACnD,EACA,QAAS,SAAU,EAAO,CACtB,OAAO,OAAO,CAAK,CACvB,CACJ,EACA,QAAS,EAAO,QAChB,QAAS,EAAO,OACpB,mBCpBA,IAAI,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EAEA,EAAM,OAAO,UAAU,eACvB,EAAU,MAAM,QAIhB,EAAkB,EAAe,EAEjC,EAAe,SAAsB,EAAK,EAAU,CAEpD,OADA,EAAgB,IAAI,EAAK,CAAQ,EAC1B,CACX,EAEI,EAAa,SAAoB,EAAK,CACtC,OAAO,EAAgB,IAAI,CAAG,CAClC,EAEI,EAAc,SAAqB,EAAK,CACxC,OAAO,EAAgB,IAAI,CAAG,CAClC,EAEI,EAAc,SAAqB,EAAK,EAAU,CAClD,EAAgB,IAAI,EAAK,CAAQ,CACrC,EAEI,EAAY,UAAY,CAExB,IAAK,IADD,EAAQ,CAAC,EACJ,EAAI,EAAG,EAAI,IAAK,EAAE,EACvB,EAAM,EAAM,QAAU,MAAQ,EAAI,GAAK,IAAM,IAAM,EAAE,SAAS,EAAE,EAAA,CAAG,YAAY,EAGnF,OAAO,CACX,EAAE,EAEE,EAAe,SAAsB,EAAO,CAC5C,KAAO,EAAM,OAAS,GAAG,CACrB,IAAI,EAAO,EAAM,IAAI,EACjB,EAAM,EAAK,IAAI,EAAK,MAExB,GAAI,EAAQ,CAAG,EAAG,CAGd,IAAK,IAFD,EAAY,CAAC,EAER,EAAI,EAAG,EAAI,EAAI,OAAQ,EAAE,EACnB,EAAI,KAAO,SAClB,EAAU,EAAU,QAAU,EAAI,IAI1C,EAAK,IAAI,EAAK,MAAQ,CAC1B,CACJ,CACJ,EAEI,EAAgB,SAAuB,EAAQ,EAAS,CAExD,IAAK,IADD,EAAM,GAAW,EAAQ,aAAe,CAAE,UAAW,IAAK,EAAI,CAAC,EAC1D,EAAI,EAAG,EAAI,EAAO,OAAQ,EAAE,EACtB,EAAO,KAAO,SACrB,EAAI,GAAK,EAAO,IAIxB,OAAO,CACX,EAEI,EAAc,SAAqB,EAAK,EAAK,EAAO,CAChD,IAAQ,aAAe,EACvB,EAAe,EAAK,EAAK,CACrB,aAAc,GACd,WAAY,GACL,QACP,SAAU,EACd,CAAC,EAED,EAAI,GAAO,CAEnB,EAEI,EAAQ,SAAS,EAAM,EAAQ,EAAQ,EAAS,CAEhD,GAAI,CAAC,EACD,OAAO,EAGX,GAAI,OAAO,GAAW,UAAY,OAAO,GAAW,WAAY,CAC5D,GAAI,EAAQ,CAAM,EAAG,CACjB,IAAI,EAAY,EAAO,OACvB,GAAI,GAAW,OAAO,EAAQ,YAAe,UAAY,GAAa,EAAQ,WAAY,CACtF,GAAI,EAAQ,qBACR,MAAU,WAAW,8BAAgC,EAAQ,WAAa,YAAc,EAAQ,aAAe,EAAI,GAAK,KAAO,uBAAuB,EAE1J,OAAO,EAAa,EAAc,EAAO,OAAO,CAAM,EAAG,CAAO,EAAG,CAAS,CAChF,CACA,EAAO,GAAa,CACxB,MAAO,GAAI,GAAU,OAAO,GAAW,YAC/B,EAAW,CAAM,EAAG,CAEpB,IAAI,EAAW,EAAY,CAAM,EAAI,EACrC,EAAO,GAAY,EACnB,EAAY,EAAQ,CAAQ,CAChC,MAAO,GAAI,GAAW,EAAQ,YAC1B,MAAO,CAAC,EAAQ,CAAM,OAErB,IAAY,EAAQ,cAAgB,EAAQ,kBAC1C,CAAC,EAAI,KAAK,OAAO,UAAW,CAAM,KAErC,EAAO,GAAU,SAGrB,MAAO,CAAC,EAAQ,CAAM,EAG1B,OAAO,CACX,CAEA,GAAI,CAAC,GAAU,OAAO,GAAW,SAAU,CACvC,GAAI,EAAW,CAAM,EAAG,CAMpB,IAAK,IAJD,EAAa,OAAO,KAAK,CAAM,EAC/B,EAAS,GAAW,EAAQ,aAC1B,CAAE,UAAW,KAAM,EAAG,CAAO,EAC7B,CAAE,EAAG,CAAO,EACT,EAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CACxC,IAAI,EAAS,SAAS,EAAW,GAAI,EAAE,EACvC,EAAO,EAAS,GAAK,EAAO,EAAW,GAC3C,CACA,OAAO,EAAa,EAAQ,EAAY,CAAM,EAAI,CAAC,CACvD,CACA,IAAI,EAAW,CAAC,CAAM,CAAC,CAAC,OAAO,CAAM,EACrC,GAAI,GAAW,OAAO,EAAQ,YAAe,UAAY,EAAS,OAAS,EAAQ,WAAY,CAC3F,GAAI,EAAQ,qBACR,MAAU,WAAW,8BAAgC,EAAQ,WAAa,YAAc,EAAQ,aAAe,EAAI,GAAK,KAAO,uBAAuB,EAE1J,OAAO,EAAa,EAAc,EAAU,CAAO,EAAG,EAAS,OAAS,CAAC,CAC7E,CACA,OAAO,CACX,CAEA,IAAI,EAAc,EAKlB,GAJI,EAAQ,CAAM,GAAK,CAAC,EAAQ,CAAM,IAClC,EAAc,EAAc,EAAQ,CAAO,GAG3C,EAAQ,CAAM,GAAK,EAAQ,CAAM,EAAG,CAapC,GAZA,EAAO,QAAQ,SAAU,EAAM,EAAG,CAC9B,GAAI,EAAI,KAAK,EAAQ,CAAC,EAAG,CACrB,IAAI,EAAa,EAAO,GACpB,GAAc,OAAO,GAAe,UAAY,GAAQ,OAAO,GAAS,SACxE,EAAO,GAAK,EAAM,EAAY,EAAM,CAAO,EAE3C,EAAO,EAAO,QAAU,CAEhC,KACI,GAAO,GAAK,CAEpB,CAAC,EACG,GAAW,OAAO,EAAQ,YAAe,UAAY,EAAO,OAAS,EAAQ,WAAY,CACzF,GAAI,EAAQ,qBACR,MAAU,WAAW,8BAAgC,EAAQ,WAAa,YAAc,EAAQ,aAAe,EAAI,GAAK,KAAO,uBAAuB,EAE1J,OAAO,EAAa,EAAc,EAAQ,CAAO,EAAG,EAAO,OAAS,CAAC,CACzE,CACA,OAAO,CACX,CAEA,OAAO,OAAO,KAAK,CAAM,CAAC,CAAC,OAAO,SAAU,EAAK,EAAK,CAClD,IAAI,EAAQ,EAAO,GAWnB,GATI,EAAI,KAAK,EAAK,CAAG,EACjB,EAAY,EAAK,EAAK,EAAM,EAAI,GAAM,EAAO,CAAO,CAAC,EAErD,EAAY,EAAK,EAAK,CAAK,EAG3B,EAAW,CAAM,GAAK,CAAC,EAAW,CAAG,GACrC,EAAa,EAAK,EAAY,CAAM,CAAC,EAErC,EAAW,CAAG,EAAG,CACjB,IAAI,EAAS,SAAS,EAAK,EAAE,EACzB,OAAO,CAAM,IAAM,GAAO,GAAU,GAAK,EAAS,EAAY,CAAG,GACjE,EAAY,EAAK,CAAM,CAE/B,CAEA,OAAO,CACX,EAAG,CAAW,CAClB,EAEI,EAAS,SAA4B,EAAQ,EAAQ,CACrD,OAAO,OAAO,KAAK,CAAM,CAAC,CAAC,OAAO,SAAU,EAAK,EAAK,CAElD,OADA,EAAY,EAAK,EAAK,EAAO,EAAI,EAC1B,CACX,EAAG,CAAM,CACb,EAEI,EAAS,SAAU,EAAK,EAAgB,EAAS,CACjD,IAAI,EAAiB,EAAI,QAAQ,MAAO,GAAG,EAC3C,GAAI,IAAY,aAEZ,OAAO,EAAe,QAAQ,iBAAkB,QAAQ,EAG5D,GAAI,CACA,OAAO,mBAAmB,CAAc,CAC5C,MAAY,CACR,OAAO,CACX,CACJ,EAEI,EAAQ,KA0JZ,EAAO,QAAU,CACE,gBACP,SACC,iBApCkB,EAAG,EAAG,EAAY,EAAc,EAAsB,CAEjF,GAAI,EAAW,CAAC,EAAG,CACf,GAAI,EACA,MAAU,WAAW,8BAAgC,EAAa,YAAc,IAAe,EAAI,GAAK,KAAO,uBAAuB,EAE1I,IAAI,EAAW,EAAY,CAAC,EAAI,EAGhC,MAFA,GAAE,GAAY,EACd,EAAY,EAAG,CAAQ,EAChB,CACX,CAEA,IAAI,EAAS,CAAC,CAAC,CAAC,OAAO,EAAG,CAAC,EAC3B,GAAI,EAAO,OAAS,EAAY,CAC5B,GAAI,EACA,MAAU,WAAW,8BAAgC,EAAa,YAAc,IAAe,EAAI,GAAK,KAAO,uBAAuB,EAE1I,OAAO,EAAa,EAAc,EAAQ,CAAgB,cAAa,CAAC,EAAG,EAAO,OAAS,CAAC,CAChG,CACA,OAAO,CACX,EAiBa,iBAzEkB,EAAO,CAIlC,IAAK,IAHD,EAAQ,CAAC,CAAE,IAAK,CAAE,EAAG,CAAM,EAAG,KAAM,GAAI,CAAC,EACzC,EAAO,EAAe,EAEjB,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAKhC,IAAK,IAJD,EAAO,EAAM,GACb,EAAM,EAAK,IAAI,EAAK,MAEpB,EAAO,OAAO,KAAK,CAAG,EACjB,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAAG,CAClC,IAAI,EAAM,EAAK,GACX,EAAM,EAAI,GACV,OAAO,GAAQ,UAAY,GAAgB,CAAC,EAAK,IAAI,CAAG,IACxD,EAAM,EAAM,QAAU,CAAO,MAAK,KAAM,CAAI,EAC5C,EAAK,IAAI,EAAK,EAAI,EAE1B,CAKJ,OAFA,EAAa,CAAK,EAEX,CACX,EAoDY,SACA,gBA5JiB,EAAK,EAAgB,EAAS,EAAM,EAAQ,CAGrE,GAAI,EAAI,SAAW,EACf,OAAO,EAGX,IAAI,EAAS,EAOb,GANI,OAAO,GAAQ,SACf,EAAS,OAAO,UAAU,SAAS,KAAK,CAAG,EACpC,OAAO,GAAQ,WACtB,EAAS,OAAO,CAAG,GAGnB,IAAY,aACZ,OAAO,OAAO,CAAM,CAAC,CAAC,QAAQ,kBAAmB,SAAU,EAAI,CAC3D,MAAO,SAAW,SAAS,EAAG,MAAM,CAAC,EAAG,EAAE,EAAI,KAClD,CAAC,EAIL,IAAK,IADD,EAAM,GACD,EAAI,EAAG,EAAI,EAAO,OAAQ,GAAK,EAAO,CAC3C,IAAI,EAAU,EAAO,QAAU,EAAQ,EAAO,MAAM,EAAG,EAAI,CAAK,EAAI,EACpE,GAAI,EAAI,EAAQ,EAAO,OAAQ,CAC3B,IAAI,EAAO,EAAQ,WAAW,EAAQ,OAAS,CAAC,EAC5C,GAAQ,OAAU,GAAQ,QAC1B,EAAU,EAAQ,MAAM,EAAG,EAAE,EAC7B,IAER,CAGA,IAAK,IAFD,EAAM,CAAC,EAEF,EAAI,EAAG,EAAI,EAAQ,OAAQ,EAAE,EAAG,CACrC,IAAI,EAAI,EAAQ,WAAW,CAAC,EAC5B,GACI,IAAM,IACH,IAAM,IACN,IAAM,IACN,IAAM,KACL,GAAK,IAAQ,GAAK,IAClB,GAAK,IAAQ,GAAK,IAClB,GAAK,IAAQ,GAAK,KAClB,IAAW,EAAQ,UAAY,IAAM,IAAQ,IAAM,IACzD,CACE,EAAI,EAAI,QAAU,EAAQ,OAAO,CAAC,EAClC,QACJ,CAEA,GAAI,EAAI,IAAM,CACV,EAAI,EAAI,QAAU,EAAS,GAC3B,QACJ,CAEA,GAAI,EAAI,KAAO,CACX,EAAI,EAAI,QAAU,EAAS,IAAQ,GAAK,GAClC,EAAS,IAAQ,EAAI,IAC3B,QACJ,CAEA,GAAI,EAAI,OAAU,GAAK,MAAQ,CAC3B,EAAI,EAAI,QAAU,EAAS,IAAQ,GAAK,IAClC,EAAS,IAAS,GAAK,EAAK,IAC5B,EAAS,IAAQ,EAAI,IAC3B,QACJ,CAEA,GAAK,EACL,EAAI,QAAa,EAAI,OAAU,GAAO,EAAQ,WAAW,CAAC,EAAI,MAE9D,EAAI,EAAI,QAAU,EAAS,IAAQ,GAAK,IAClC,EAAS,IAAS,GAAK,GAAM,IAC7B,EAAS,IAAS,GAAK,EAAK,IAC5B,EAAS,IAAQ,EAAI,GAC/B,CAEA,GAAO,EAAI,KAAK,EAAE,CACtB,CAEA,OAAO,CACX,EA8Ec,kBAhDmB,EAAK,CAKlC,MAJI,CAAC,GAAO,OAAO,GAAQ,SAChB,GAGJ,CAAC,EAAE,EAAI,aAAe,EAAI,YAAY,UAAY,EAAI,YAAY,SAAS,CAAG,EACzF,EA2CgB,aACF,kBAtDmB,EAAK,CAClC,OAAO,OAAO,UAAU,SAAS,KAAK,CAAG,IAAM,iBACnD,EAqDkB,eACJ,kBAtBmB,EAAK,EAAI,CACtC,GAAI,EAAQ,CAAG,EAAG,CAEd,IAAK,IADD,EAAS,CAAC,EACL,EAAI,EAAG,EAAI,EAAI,OAAQ,GAAK,EACjC,EAAO,EAAO,QAAU,EAAG,EAAI,EAAE,EAErC,OAAO,CACX,CACA,OAAO,EAAG,CAAG,CACjB,EAcW,OACX,mBC1XA,IAAI,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAA,GAAA,EACA,EAAM,OAAO,UAAU,eAEvB,EAAwB,CACxB,SAAU,SAAkB,EAAQ,CAChC,OAAO,EAAS,IACpB,EACA,MAAO,QACP,QAAS,SAAiB,EAAQ,EAAK,CACnC,OAAO,EAAS,IAAM,EAAM,GAChC,EACA,OAAQ,SAAgB,EAAQ,CAC5B,OAAO,CACX,CACJ,EAEI,EAAU,MAAM,QAChB,EAAO,MAAM,UAAU,KACvB,EAAc,SAAU,EAAK,EAAc,CAC3C,EAAK,MAAM,EAAK,EAAQ,CAAY,EAAI,EAAe,CAAC,CAAY,CAAC,CACzE,EAEI,EAAQ,KAAK,UAAU,YAEvB,EAAgB,EAAQ,QACxB,EAAW,CACX,eAAgB,GAChB,UAAW,GACX,iBAAkB,GAClB,YAAa,UACb,QAAS,QACT,gBAAiB,GACjB,eAAgB,GAChB,UAAW,IACX,OAAQ,GACR,gBAAiB,GACjB,QAAS,EAAM,OACf,iBAAkB,GAClB,OAAQ,IAAA,GACR,OAAQ,EACR,UAAW,EAAQ,WAAW,GAE9B,QAAS,GACT,cAAe,SAAuB,EAAM,CACxC,OAAO,EAAM,KAAK,CAAI,CAC1B,EACA,UAAW,GACX,mBAAoB,EACxB,EAEI,EAAwB,SAA+B,EAAG,CAC1D,OAAO,OAAO,GAAM,UACb,OAAO,GAAM,UACb,OAAO,GAAM,WACb,OAAO,GAAM,UACb,OAAO,GAAM,QACxB,EAEI,EAAW,CAAC,EAEZ,EAAY,SAAS,EACrB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACF,CAME,IALA,IAAI,EAAM,EAEN,EAAQ,EACR,EAAO,EACP,EAAW,IACP,EAAQ,EAAM,IAAI,CAAQ,KAAO,IAAA,IAAkB,CAAC,GAAU,CAElE,IAAI,EAAM,EAAM,IAAI,CAAM,EAE1B,GADA,GAAQ,EACG,IAAQ,OACf,IAAI,IAAQ,EACR,MAAU,WAAW,qBAAqB,EAE1C,EAAW,EAAA,CAGR,EAAM,IAAI,CAAQ,IAAM,SAC/B,EAAO,EAEf,CAeA,GAbI,OAAO,GAAW,WAClB,EAAM,EAAO,EAAQ,CAAG,EACjB,aAAe,KACtB,EAAM,EAAc,CAAG,EAChB,IAAwB,SAAW,EAAQ,CAAG,IACrD,EAAM,EAAM,SAAS,EAAK,SAAU,EAAO,CAIvC,OAHI,aAAiB,KACV,EAAc,CAAK,EAEvB,CACX,CAAC,GAGD,IAAQ,KAAM,CACd,GAAI,EACA,OAAO,EAAU,GAAW,CAAC,EAAmB,EAAQ,EAAQ,EAAS,QAAS,EAAS,MAAO,CAAM,EAAI,CAAM,EAGtH,EAAM,EACV,CAEA,GAAI,EAAsB,CAAG,GAAK,EAAM,SAAS,CAAG,EAKhD,OAJI,EAEO,CAAC,EADO,EAAmB,EAAS,EAAQ,EAAQ,EAAS,QAAS,EAAS,MAAO,CAAM,CACzE,EAAI,IAAM,EAAU,EAAQ,EAAK,EAAS,QAAS,EAAS,QAAS,CAAM,CAAC,CAAC,EAEpG,CAAC,EAAU,CAAM,EAAI,IAAM,EAAU,OAAO,CAAG,CAAC,CAAC,EAG5D,IAAI,EAAS,CAAC,EAEd,GAAW,IAAQ,OACf,OAAO,EAGX,IAAI,EACJ,GAAI,IAAwB,SAAW,EAAQ,CAAG,EAE1C,GAAoB,IACpB,EAAM,EAAM,SAAS,EAAK,SAAU,EAAG,CACnC,OAAO,GAAK,KAAO,EAAI,EAAQ,CAAC,CACpC,CAAC,GAEL,EAAU,CAAC,CAAE,MAAO,EAAI,OAAS,EAAI,EAAI,KAAK,GAAG,GAAK,KAAO,IAAA,EAAe,CAAC,OAC1E,GAAI,EAAQ,CAAM,EACrB,EAAU,MACP,CACH,IAAI,EAAO,OAAO,KAAK,CAAG,EAC1B,EAAU,EAAO,EAAK,KAAK,CAAI,EAAI,CACvC,CAEA,IAAI,EAAgB,EAAkB,OAAO,CAAM,CAAC,CAAC,QAAQ,MAAO,KAAK,EAAI,OAAO,CAAM,EAEtF,EAAiB,GAAkB,EAAQ,CAAG,GAAK,EAAI,SAAW,EAAI,EAAgB,KAAO,EAEjG,GAAI,GAAoB,EAAQ,CAAG,GAAK,EAAI,SAAW,EACnD,OAAO,EAAiB,KAG5B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,OAAQ,EAAE,EAAG,CACrC,IAAI,EAAM,EAAQ,GACd,EAAQ,OAAO,GAAQ,UAAY,GAAc,EAAI,QAAU,OAC7D,EAAI,MACJ,EAAI,GAEN,QAAa,IAAU,MAI3B,KAAI,GAAa,GAAa,EAAkB,OAAO,CAAG,CAAC,CAAC,QAAQ,MAAO,KAAK,EAAI,OAAO,CAAG,EAC1F,GAAY,EAAQ,CAAG,EACrB,OAAO,GAAwB,WAAa,EAAoB,EAAgB,EAAU,EAAI,EAC9F,GAAkB,EAAY,IAAM,GAAa,IAAM,GAAa,KAE1E,EAAY,IAAI,EAAQ,CAAI,EAC5B,IAAI,GAAmB,EAAe,EACtC,GAAiB,IAAI,EAAU,CAAW,EAC1C,EAAY,EAAQ,EAChB,EACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,IAAwB,SAAW,GAAoB,EAAQ,CAAG,EAAI,KAAO,EAC7E,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACJ,CAAC,CA3B6F,CA4BlG,CAEA,OAAO,CACX,EAEI,EAA4B,SAAmC,EAAM,CACrE,GAAI,CAAC,EACD,OAAO,EAGX,GAAW,EAAK,mBAAqB,QAAe,OAAO,EAAK,kBAAqB,UACjF,MAAU,UAAU,wEAAwE,EAGhG,GAAW,EAAK,kBAAoB,QAAe,OAAO,EAAK,iBAAoB,UAC/E,MAAU,UAAU,uEAAuE,EAG/F,GAAI,EAAK,UAAY,MAAe,EAAK,UAAY,QAAe,OAAO,EAAK,SAAY,WACxF,MAAU,UAAU,+BAA+B,EAGvD,IAAI,EAAU,EAAK,SAAW,EAAS,QACvC,GAAW,EAAK,UAAY,QAAe,EAAK,UAAY,SAAW,EAAK,UAAY,aACpF,MAAU,UAAU,mEAAmE,EAG3F,IAAI,EAAS,EAAQ,QACrB,GAAW,EAAK,SAAW,OAAa,CACpC,GAAI,CAAC,EAAI,KAAK,EAAQ,WAAY,EAAK,MAAM,EACzC,MAAU,UAAU,iCAAiC,EAEzD,EAAS,EAAK,MAClB,CACA,IAAI,EAAY,EAAQ,WAAW,GAE/B,EAAS,EAAS,QAClB,OAAO,EAAK,QAAW,YAAc,EAAQ,EAAK,MAAM,KACxD,EAAS,EAAK,QAGlB,IAAI,EACA,EAAK,eAAe,EACN,EAAK,YACZ,YAAa,EACN,EAAK,QAAU,UAAY,SAE3B,EAAS,YAG3B,GAAI,mBAAoB,GAAQ,OAAO,EAAK,gBAAmB,UAC3D,MAAU,UAAU,+CAA+C,EAGvE,IAAI,EAAmB,EAAK,YAAc,OAAc,EAAK,kBAAoB,IAAc,EAAS,UAAY,CAAC,CAAC,EAAK,UAE3H,MAAO,CACH,eAAgB,OAAO,EAAK,gBAAmB,UAAY,EAAK,eAAiB,EAAS,eAC/E,YACX,iBAAkB,OAAO,EAAK,kBAAqB,UAAY,CAAC,CAAC,EAAK,iBAAmB,EAAS,iBACrF,cACJ,UACT,gBAAiB,OAAO,EAAK,iBAAoB,UAAY,EAAK,gBAAkB,EAAS,gBAC7F,eAAgB,CAAC,CAAC,EAAK,eACvB,UAAkB,EAAK,YAAc,OAAc,EAAS,UAAY,EAAK,UAC7E,OAAQ,OAAO,EAAK,QAAW,UAAY,EAAK,OAAS,EAAS,OAClE,gBAAiB,OAAO,EAAK,iBAAoB,UAAY,EAAK,gBAAkB,EAAS,gBAC7F,QAAS,OAAO,EAAK,SAAY,WAAa,EAAK,QAAU,EAAS,QACtE,iBAAkB,OAAO,EAAK,kBAAqB,UAAY,EAAK,iBAAmB,EAAS,iBACxF,SACA,SACG,YACX,cAAe,OAAO,EAAK,eAAkB,WAAa,EAAK,cAAgB,EAAS,cACxF,UAAW,OAAO,EAAK,WAAc,UAAY,EAAK,UAAY,EAAS,UAC3E,KAAM,OAAO,EAAK,MAAS,WAAa,EAAK,KAAO,KACpD,mBAAoB,OAAO,EAAK,oBAAuB,UAAY,EAAK,mBAAqB,EAAS,kBAC1G,CACJ,EAEA,EAAO,QAAU,SAAU,EAAQ,EAAM,CACrC,IAAI,EAAM,EACN,EAAU,EAA0B,CAAI,EAExC,EACA,EAEA,OAAO,EAAQ,QAAW,YAC1B,EAAS,EAAQ,OACjB,EAAM,EAAO,GAAI,CAAG,GACb,EAAQ,EAAQ,MAAM,IAC7B,EAAS,EAAQ,OACjB,EAAU,GAGd,IAAI,EAAO,CAAC,EAEZ,GAAI,OAAO,GAAQ,WAAY,EAC3B,MAAO,GAGX,IAAI,EAAsB,EAAsB,EAAQ,aACpD,EAAiB,IAAwB,SAAW,EAAQ,eAEhE,AACI,IAAU,OAAO,KAAK,CAAG,EAGzB,EAAQ,MACR,EAAQ,KAAK,EAAQ,IAAI,EAI7B,IAAK,IADD,EAAc,EAAe,EACxB,EAAI,EAAG,EAAI,EAAQ,OAAQ,EAAE,EAAG,CACrC,IAAI,EAAM,EAAQ,GAEd,GAAO,GAA+B,KAI1C,KAAI,EAAQ,EAAI,GAEZ,EAAQ,WAAa,IAAU,MAGnC,EAAY,EAAM,EACd,EACA,EACA,EACA,EACA,EAAQ,iBACR,EAAQ,mBACR,EAAQ,UACR,EAAQ,gBACR,EAAQ,OAAS,EAAQ,QAAU,KACnC,EAAQ,OACR,EAAQ,KACR,EAAQ,UACR,EAAQ,cACR,EAAQ,OACR,EAAQ,UACR,EAAQ,iBACR,EAAQ,QACR,CACJ,CAAC,CAxBe,CAyBpB,CAEA,IAAI,EAAS,EAAK,KAAK,EAAQ,SAAS,EACpC,EAAS,EAAQ,iBAAmB,GAAO,IAAM,GAYrD,OAVI,EAAQ,kBACJ,EAAQ,UAAY,aAEpB,GAAU,sBAAwB,EAAQ,UAG1C,GAAU,iBAAmB,EAAQ,WAItC,EAAO,OAAS,EAAI,EAAS,EAAS,EACjD,mBCxWA,IAAI,EAAA,GAAA,EAEA,EAAM,OAAO,UAAU,eACvB,EAAU,MAAM,QAEhB,EAAW,CACX,UAAW,GACX,iBAAkB,GAClB,gBAAiB,GACjB,YAAa,GACb,WAAY,GACZ,QAAS,QACT,gBAAiB,GACjB,MAAO,GACP,gBAAiB,GACjB,QAAS,EAAM,OACf,UAAW,IACX,MAAO,EACP,WAAY,UACZ,kBAAmB,GACnB,yBAA0B,GAC1B,eAAgB,IAChB,YAAa,GACb,aAAc,GACd,YAAa,GACb,YAAa,GACb,mBAAoB,GACpB,qBAAsB,EAC1B,EAEI,EAA2B,SAAU,EAAK,CAC1C,OAAO,EAAI,QAAQ,YAAa,SAAU,EAAI,EAAW,CACrD,OAAO,OAAO,aAAa,SAAS,EAAW,EAAE,CAAC,CACtD,CAAC,CACL,EAEI,EAAkB,SAAU,EAAK,EAAS,EAAoB,EAAkB,CAChF,GAAI,GAAO,OAAO,GAAQ,UAAY,EAAQ,OAAS,EAAI,QAAQ,GAAG,EAAI,GAAI,CAC1E,GAAI,GAAoB,EAAQ,qBAG5B,IAFA,IAAI,EAAa,EACb,EAAa,EAAI,QAAQ,GAAG,EACzB,EAAa,IAAI,CAEpB,GADA,GAAc,EACV,GAAc,EAAQ,WACtB,MAAU,WAAW,8BAAgC,EAAQ,WAAa,YAAc,EAAQ,aAAe,EAAI,GAAK,KAAO,uBAAuB,EAE1J,EAAa,EAAI,QAAQ,IAAK,EAAa,CAAC,CAChD,CAEJ,OAAO,EAAI,MAAM,GAAG,CACxB,CAEA,GAAI,EAAQ,sBAAwB,GAAsB,EAAQ,WAC9D,MAAU,WAAW,8BAAgC,EAAQ,WAAa,YAAc,EAAQ,aAAe,EAAI,GAAK,KAAO,uBAAuB,EAG1J,OAAO,CACX,EAOI,EAAc,sBAGd,EAAkB,iBAElB,EAAc,SAAgC,EAAK,EAAS,CAC5D,IAAI,EAAM,CAAE,UAAW,IAAK,EAExB,EAAW,EAAQ,kBAAoB,EAAI,QAAQ,MAAO,EAAE,EAAI,EACpE,EAAW,EAAS,QAAQ,QAAS,GAAG,CAAC,CAAC,QAAQ,QAAS,GAAG,EAE9D,IAAI,EAAQ,EAAQ,iBAAmB,IAAW,IAAA,GAAiB,EAAQ,eACvE,EAAQ,EAAS,MACjB,EAAQ,UACR,EAAQ,sBAA+B,IAAU,OAAc,EAAQ,EAAI,CAC/E,EAEA,GAAI,EAAQ,sBAA+B,IAAU,QAAe,EAAM,OAAS,EAC/E,MAAU,WAAW,kCAAoC,EAAQ,cAAgB,IAAU,EAAI,GAAK,KAAO,WAAW,EAG1H,IAAI,EAAY,GACZ,EAEA,EAAU,EAAQ,QACtB,GAAI,EAAQ,oBACH,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EACxB,EAAM,EAAE,CAAC,QAAQ,OAAO,IAAM,IAC1B,EAAM,KAAO,EACb,EAAU,QACH,EAAM,KAAO,IACpB,EAAU,cAEd,EAAY,EACZ,EAAI,EAAM,QAKtB,IAAK,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EACxB,OAAM,EAGV,KAAI,EAAO,EAAM,GAEb,EAAmB,EAAK,QAAQ,IAAI,EACpC,EAAM,IAAqB,GAAK,EAAK,QAAQ,GAAG,EAAI,EAAmB,EAEvE,EACA,EAkCJ,GAjCI,IAAQ,IACR,EAAM,EAAQ,QAAQ,EAAM,EAAS,QAAS,EAAS,KAAK,EAC5D,EAAM,EAAQ,mBAAqB,KAAO,KAE1C,EAAM,EAAQ,QAAQ,EAAK,MAAM,EAAG,CAAG,EAAG,EAAS,QAAS,EAAS,KAAK,EAEtE,IAAQ,OACR,EAAM,EAAM,SACR,EACI,EAAK,MAAM,EAAM,CAAC,EAClB,EACA,EAAQ,EAAI,EAAI,EAAI,EAAI,EAAI,CAAC,OAAS,EACtC,EAAK,QAAQ,KAAK,IAAM,EAC5B,EACA,SAAU,EAAY,CAClB,OAAO,EAAQ,QAAQ,EAAY,EAAS,QAAS,EAAS,OAAO,CACzE,CACJ,IAIJ,GAAO,EAAQ,0BAA4B,IAAY,eACvD,EAAM,EAAyB,OAAO,CAAG,CAAC,GAG1C,EAAK,QAAQ,KAAK,EAAI,KACtB,EAAM,EAAQ,CAAG,EAAI,CAAC,CAAG,EAAI,GAG7B,EAAQ,OAAS,EAAQ,CAAG,GAAK,EAAI,OAAS,EAAQ,aACtD,EAAM,EAAM,QAAQ,CAAC,EAAG,EAAK,EAAQ,WAAY,EAAQ,aAAc,EAAQ,oBAAoB,GAGnG,IAAQ,KAAM,CACd,IAAI,EAAW,EAAI,KAAK,EAAK,CAAG,EAC5B,IAAa,EAAQ,aAAe,WAAa,EAAK,QAAQ,KAAK,EAAI,IACvE,EAAI,GAAO,EAAM,QACb,EAAI,GACJ,EACA,EAAQ,WACR,EAAQ,aACR,EAAQ,oBACZ,GACO,CAAC,GAAY,EAAQ,aAAe,UAC3C,EAAI,GAAO,EAEnB,CArDiB,CAwDrB,OAAO,CACX,EAEI,EAAc,SAAU,EAAO,EAAK,EAAS,EAAc,CAC3D,IAAI,EAAqB,EACzB,GAAI,EAAM,OAAS,GAAK,EAAM,EAAM,OAAS,KAAO,KAAM,CACtD,IAAI,EAAY,EAAM,MAAM,EAAG,EAAE,CAAC,CAAC,KAAK,EAAE,EAC1C,EAAqB,MAAM,QAAQ,CAAG,GAAK,EAAI,GAAa,EAAI,EAAU,CAAC,OAAS,CACxF,CAIA,IAAK,IAFD,EAAO,EAAe,EAAM,EAAgB,EAAK,EAAS,CAAkB,EAEvE,EAAI,EAAM,OAAS,EAAG,GAAK,EAAG,EAAE,EAAG,CACxC,IAAI,EACA,EAAO,EAAM,GAEjB,GAAI,IAAS,MAAQ,EAAQ,YACzB,AAII,EAJA,EAAM,WAAW,CAAI,EAEf,EAEA,EAAQ,mBAAqB,IAAS,IAAO,EAAQ,oBAAsB,IAAS,MACpF,CAAC,EACD,EAAM,QACJ,CAAC,EACD,EACA,EAAQ,WACR,EAAQ,aACR,EAAQ,oBACZ,MAEL,CACH,EAAM,EAAQ,aAAe,CAAE,UAAW,IAAK,EAAI,CAAC,EACpD,IAAI,EAAY,EAAK,OAAO,CAAC,IAAM,KAAO,EAAK,OAAO,EAAK,OAAS,CAAC,IAAM,IAAM,EAAK,MAAM,EAAG,EAAE,EAAI,EACjG,EAAc,EAAQ,gBAAkB,EAAU,QAAQ,OAAQ,GAAG,EAAI,EACzE,EAAQ,SAAS,EAAa,EAAE,EAChC,EAAoB,CAAC,MAAM,CAAK,GAC7B,IAAS,GACT,OAAO,CAAK,IAAM,GAClB,GAAS,GACT,EAAQ,YACf,GAAI,CAAC,EAAQ,aAAe,IAAgB,GACxC,EAAM,CAAE,EAAG,CAAK,OACb,GAAI,GAAqB,EAAQ,EAAQ,WAC5C,EAAM,CAAC,EACP,EAAI,GAAS,OACV,GAAI,GAAqB,EAAQ,qBACpC,MAAU,WAAW,8BAAgC,EAAQ,WAAa,YAAc,EAAQ,aAAe,EAAI,GAAK,KAAO,uBAAuB,OAC/I,GACP,EAAI,GAAS,EACb,EAAM,aAAa,EAAK,CAAK,GACtB,IAAgB,cACvB,EAAI,GAAe,EAE3B,CAEA,EAAO,CACX,CAEA,OAAO,CACX,EAII,EAAuB,SAA8B,EAAa,EAAS,CAC3E,IAAI,EAAM,EAAQ,UAAY,EAAY,QAAQ,cAAe,MAAM,EAAI,EAG3E,GAAI,EAAQ,OAAS,EAOjB,MANI,CAAC,EAAQ,cAAgB,EAAI,KAAK,OAAO,UAAW,CAAG,GACnD,CAAC,EAAQ,gBACT,OAID,CAAC,CAAG,EAGf,IAAI,EAAW,CAAC,EAGZ,EAAQ,EAAI,QAAQ,GAAG,EACvB,EAAS,GAAS,EAAI,EAAI,MAAM,EAAG,CAAK,EAAI,EAChD,GAAI,EAAQ,CACR,GAAI,CAAC,EAAQ,cAAgB,EAAI,KAAK,OAAO,UAAW,CAAM,GACtD,CAAC,EAAQ,gBACT,OAIR,EAAS,EAAS,QAAU,CAChC,CAMA,IAJA,IAAI,EAAI,EAAI,OACR,EAAO,EACP,EAAY,EAET,GAAQ,GAAK,EAAY,EAAQ,OAAO,CAM3C,IALA,IAAI,EAAQ,EACR,EAAI,EAAO,EACX,EAAQ,GAGL,EAAI,GAAK,EAAQ,GAAG,CACvB,IAAI,EAAK,EAAI,WAAW,CAAC,EACrB,IAAO,GACP,GAAS,EACF,IAAO,KACd,IACI,IAAU,IACV,EAAQ,IAGhB,GAAK,CACT,CAEA,GAAI,EAAQ,EAIR,MADA,GAAS,EAAS,QAAU,IAAM,EAAI,MAAM,CAAI,EAAI,IAC7C,EAGX,IAAI,EAAM,EAAI,MAAM,EAAM,EAAQ,CAAC,EAE/B,EAAU,EAAI,MAAM,EAAG,EAAE,EAC7B,GAAI,CAAC,EAAQ,cAAgB,EAAI,KAAK,OAAO,UAAW,CAAO,GAAK,CAAC,EAAQ,gBACzE,OAGJ,EAAS,EAAS,QAAU,EAC5B,GAAa,EAGb,EAAO,EAAI,QAAQ,IAAK,EAAQ,CAAC,CACrC,CAEA,GAAI,GAAQ,EAAG,CACX,GAAI,EAAQ,cAAgB,GACxB,MAAU,WAAW,wCAA0C,EAAQ,MAAQ,0BAA0B,EAG7G,EAAS,EAAS,QAAU,IAAM,EAAI,MAAM,CAAI,EAAI,GACxD,CAEA,OAAO,CACX,EAEI,EAAY,SAA8B,EAAU,EAAK,EAAS,EAAc,CAC3E,KAIL,KAAI,EAAO,EAAqB,EAAU,CAAO,EAE5C,KAIL,OAAO,EAAY,EAAM,EAAK,EAAS,CAAY,CANF,CAOrD,EAEI,EAAwB,SAA+B,EAAM,CAC7D,GAAI,CAAC,EACD,OAAO,EAGX,GAAW,EAAK,mBAAqB,QAAe,OAAO,EAAK,kBAAqB,UACjF,MAAU,UAAU,wEAAwE,EAGhG,GAAW,EAAK,kBAAoB,QAAe,OAAO,EAAK,iBAAoB,UAC/E,MAAU,UAAU,uEAAuE,EAG/F,GAAI,EAAK,UAAY,MAAe,EAAK,UAAY,QAAe,OAAO,EAAK,SAAY,WACxF,MAAU,UAAU,+BAA+B,EAGvD,GAAW,EAAK,UAAY,QAAe,EAAK,UAAY,SAAW,EAAK,UAAY,aACpF,MAAU,UAAU,mEAAmE,EAG3F,GAAW,EAAK,uBAAyB,QAAe,OAAO,EAAK,sBAAyB,UACzF,MAAU,UAAU,iDAAiD,EAGzE,IAAI,EAAiB,EAAK,UAAY,OAAc,EAAS,QAAU,EAAK,QAExE,EAAoB,EAAK,aAAe,OAAc,EAAS,WAAa,EAAK,WAErF,GAAI,IAAe,WAAa,IAAe,SAAW,IAAe,OACrE,MAAU,UAAU,8DAA8D,EAKtF,MAAO,CACH,UAHmB,EAAK,YAAc,OAAc,EAAK,kBAAoB,IAAc,EAAS,UAAY,CAAC,CAAC,EAAK,UAIvH,iBAAkB,OAAO,EAAK,kBAAqB,UAAY,CAAC,CAAC,EAAK,iBAAmB,EAAS,iBAClG,gBAAiB,OAAO,EAAK,iBAAoB,UAAY,EAAK,gBAAkB,EAAS,gBAC7F,YAAa,OAAO,EAAK,aAAgB,UAAY,EAAK,YAAc,EAAS,YACjF,WAAY,OAAO,EAAK,YAAe,SAAW,EAAK,WAAa,EAAS,WACpE,UACT,gBAAiB,OAAO,EAAK,iBAAoB,UAAY,EAAK,gBAAkB,EAAS,gBAC7F,MAAO,OAAO,EAAK,OAAU,UAAY,EAAK,MAAQ,EAAS,MAC/D,gBAAiB,OAAO,EAAK,iBAAoB,UAAY,EAAK,gBAAkB,EAAS,gBAC7F,QAAS,OAAO,EAAK,SAAY,WAAa,EAAK,QAAU,EAAS,QACtE,UAAW,OAAO,EAAK,WAAc,UAAY,EAAM,SAAS,EAAK,SAAS,EAAI,EAAK,UAAY,EAAS,UAE5G,MAAQ,OAAO,EAAK,OAAU,UAAY,EAAK,QAAU,GAAS,CAAC,EAAK,MAAQ,EAAS,MAC7E,aACZ,kBAAmB,EAAK,oBAAsB,GAC9C,yBAA0B,OAAO,EAAK,0BAA6B,UAAY,EAAK,yBAA2B,EAAS,yBACxH,eAAgB,OAAO,EAAK,gBAAmB,SAAW,EAAK,eAAiB,EAAS,eACzF,YAAa,EAAK,cAAgB,GAClC,aAAc,OAAO,EAAK,cAAiB,UAAY,EAAK,aAAe,EAAS,aACpF,YAAa,OAAO,EAAK,aAAgB,UAAY,CAAC,CAAC,EAAK,YAAc,EAAS,YACnF,YAAa,OAAO,EAAK,aAAgB,UAAY,CAAC,CAAC,EAAK,YAAc,EAAS,YACnF,mBAAoB,OAAO,EAAK,oBAAuB,UAAY,EAAK,mBAAqB,EAAS,mBACtG,qBAAsB,OAAO,EAAK,sBAAyB,WAAY,EAAK,oBAChF,CACJ,EAEA,EAAO,QAAU,SAAU,EAAK,EAAM,CAClC,IAAI,EAAU,EAAsB,CAAI,EAExC,GAAI,IAAQ,IAAM,GAAQ,KACtB,OAAO,EAAQ,aAAe,CAAE,UAAW,IAAK,EAAI,CAAC,EASzD,IAAK,IAND,EAAU,OAAO,GAAQ,SAAW,EAAY,EAAK,CAAO,EAAI,EAChE,EAAM,EAAQ,aAAe,CAAE,UAAW,IAAK,EAAI,CAAC,EAIpD,EAAO,OAAO,KAAK,CAAO,EACrB,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAAG,CAClC,IAAI,EAAM,EAAK,GACX,EAAS,EAAU,EAAK,EAAQ,GAAM,EAAS,OAAO,GAAQ,QAAQ,EAC1E,EAAM,EAAM,MAAM,EAAK,EAAQ,CAAO,CAC1C,CAMA,OAJI,EAAQ,cAAgB,GACjB,EAGJ,EAAM,QAAQ,CAAG,CAC5B,mBC3ZA,IAAI,EAAA,GAAA,EACA,EAAA,GAAA,EAGJ,EAAO,QAAU,CACJ,QAHT,GAGS,EACF,QACI,WACf,eCeA,IAAI,EAAA,GAAA,EAEJ,SAAS,GAAM,CACb,KAAK,SAAW,KAChB,KAAK,QAAU,KACf,KAAK,KAAO,KACZ,KAAK,KAAO,KACZ,KAAK,KAAO,KACZ,KAAK,SAAW,KAChB,KAAK,KAAO,KACZ,KAAK,OAAS,KACd,KAAK,MAAQ,KACb,KAAK,SAAW,KAChB,KAAK,KAAO,KACZ,KAAK,KAAO,IACd,CAQA,IAAI,EAAkB,oBACpB,EAAc,WAGd,EAAoB,oCAgBpB,EAAa,CAAC,IAJZ,IAAK,IAAK,IAAK,KAAM,IAAK,IAL1B,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM;EAAM,GASrB,EAOlB,EAAe,CACb,IAAK,IAAK,IAAK,IAAK,GACtB,CAAC,CAAC,OAAO,CAAU,EACnB,EAAkB,CAChB,IAAK,IAAK,GACZ,EACA,EAAiB,IACjB,EAAsB,yBACtB,EAAoB,+BAEpB,EAAiB,CACf,WAAY,GACZ,cAAe,EACjB,EAEA,EAAmB,CACjB,WAAY,GACZ,cAAe,EACjB,EAEA,EAAkB,CAChB,KAAM,GACN,MAAO,GACP,IAAK,GACL,OAAQ,GACR,KAAM,GACN,QAAS,GACT,SAAU,GACV,OAAQ,GACR,UAAW,GACX,QAAS,EACX,EACA,EAAA,GAAA,EAEF,SAAS,EAAS,EAAK,EAAkB,EAAmB,CAC1D,GAAI,GAAO,OAAO,GAAQ,UAAY,aAAe,EAAO,OAAO,EAEnE,IAAI,EAAI,IAAI,EAEZ,OADA,EAAE,MAAM,EAAK,EAAkB,CAAiB,EACzC,CACT,CAEA,EAAI,UAAU,MAAQ,SAAU,EAAK,EAAkB,EAAmB,CACxE,GAAI,OAAO,GAAQ,SACjB,MAAU,UAAU,yCAA2C,OAAO,CAAG,EAQ3E,IAAI,EAAa,EAAI,QAAQ,GAAG,EAC9B,EAAW,IAAe,IAAM,EAAa,EAAI,QAAQ,GAAG,EAAI,IAAM,IACtE,EAAS,EAAI,MAAM,CAAQ,EAE7B,EAAO,GAAK,EAAO,EAAE,CAAC,QAAQ,MAAY,GAAG,EAC7C,EAAM,EAAO,KAAK,CAAQ,EAE1B,IAAI,EAAO,EAQX,GAFA,EAAO,EAAK,KAAK,EAEb,CAAC,GAAqB,EAAI,MAAM,GAAG,CAAC,CAAC,SAAW,EAAG,CAErD,IAAI,EAAa,EAAkB,KAAK,CAAI,EAC5C,GAAI,EAeF,MAdA,MAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,SAAW,EAAW,GACvB,EAAW,IACb,KAAK,OAAS,EAAW,GACrB,EACF,KAAK,MAAQ,EAAY,MAAM,KAAK,OAAO,OAAO,CAAC,CAAC,EAEpD,KAAK,MAAQ,KAAK,OAAO,OAAO,CAAC,GAE1B,IACT,KAAK,OAAS,GACd,KAAK,MAAQ,CAAC,GAET,IAEX,CAEA,IAAI,EAAQ,EAAgB,KAAK,CAAI,EACrC,GAAI,EAAO,CACT,EAAQ,EAAM,GACd,IAAI,EAAa,EAAM,YAAY,EACnC,KAAK,SAAW,EAChB,EAAO,EAAK,OAAO,EAAM,MAAM,CACjC,CAQA,GAAI,GAAqB,GAAS,EAAK,MAAM,oBAAoB,EAAG,CAClE,IAAI,EAAU,EAAK,OAAO,EAAG,CAAC,IAAM,KAChC,GAAW,EAAE,GAAS,EAAiB,MACzC,EAAO,EAAK,OAAO,CAAC,EACpB,KAAK,QAAU,GAEnB,CAEA,GAAI,CAAC,EAAiB,KAAW,GAAY,GAAS,CAAC,EAAgB,IAAU,CAuB/E,IAAK,IADD,EAAU,GACL,EAAI,EAAG,EAAI,EAAgB,OAAQ,IAAK,CAC/C,IAAI,EAAM,EAAK,QAAQ,EAAgB,EAAE,EACrC,IAAQ,KAAO,IAAY,IAAM,EAAM,KAAY,EAAU,EACnE,CAMA,IAAI,EAAM,EACN,IAAY,GAEL,EAAK,YAAY,GAAG,EAMpB,EAAK,YAAY,IAAK,CAAO,EAOpC,IAAW,KACb,EAAO,EAAK,MAAM,EAAG,CAAM,EAC3B,EAAO,EAAK,MAAM,EAAS,CAAC,EAC5B,KAAK,KAAO,mBAAmB,CAAI,GAIrC,EAAU,GACV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAa,OAAQ,IAAK,CAC5C,IAAI,EAAM,EAAK,QAAQ,EAAa,EAAE,EAClC,IAAQ,KAAO,IAAY,IAAM,EAAM,KAAY,EAAU,EACnE,CAEI,IAAY,KAAM,EAAU,EAAK,QAErC,KAAK,KAAO,EAAK,MAAM,EAAG,CAAO,EACjC,EAAO,EAAK,MAAM,CAAO,EAGzB,KAAK,UAAU,EAMf,KAAK,SAAW,KAAK,UAAY,GAMjC,IAAI,EAAe,KAAK,SAAS,KAAO,KAAO,KAAK,SAAS,KAAK,SAAS,OAAS,KAAO,IAG3F,GAAI,CAAC,EAEH,IAAK,IADD,EAAY,KAAK,SAAS,MAAM,IAAI,EAC/B,EAAI,EAAG,EAAI,EAAU,OAAQ,EAAI,EAAG,IAAK,CAChD,IAAI,EAAO,EAAU,GAChB,MACD,CAAC,EAAK,MAAM,CAAmB,EAAG,CAEpC,IAAK,IADD,EAAU,GACL,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAI,EAAG,IAClC,EAAK,WAAW,CAAC,EAAI,IAMvB,GAAW,IAEX,GAAW,EAAK,GAIpB,GAAI,CAAC,EAAQ,MAAM,CAAmB,EAAG,CACvC,IAAI,EAAa,EAAU,MAAM,EAAG,CAAC,EACjC,EAAU,EAAU,MAAM,EAAI,CAAC,EAC/B,EAAM,EAAK,MAAM,CAAiB,EAClC,IACF,EAAW,KAAK,EAAI,EAAE,EACtB,EAAQ,QAAQ,EAAI,EAAE,GAEpB,EAAQ,SACV,EAAO,IAAM,EAAQ,KAAK,GAAG,EAAI,GAEnC,KAAK,SAAW,EAAW,KAAK,GAAG,EACnC,KACF,CACF,CACF,CAGE,KAAK,SAAS,OAAS,EACzB,KAAK,SAAW,GAGhB,KAAK,SAAW,KAAK,SAAS,YAAY,EAGvC,IAOH,KAAK,SAAW,EAAS,QAAQ,KAAK,QAAQ,GAGhD,IAAI,GAAI,KAAK,KAAO,IAAM,KAAK,KAAO,GAClC,GAAI,KAAK,UAAY,GACzB,KAAK,KAAO,GAAI,GAChB,KAAK,MAAQ,KAAK,KAMd,IACF,KAAK,SAAW,KAAK,SAAS,OAAO,EAAG,KAAK,SAAS,OAAS,CAAC,EAC5D,EAAK,KAAO,MACd,EAAO,IAAM,GAGnB,CAMA,GAAI,CAAC,EAAe,GAOlB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,EAAI,EAAG,IAAK,CACjD,IAAI,GAAK,EAAW,GAChB,KAAK,QAAQ,EAAE,IAAM,GACzB,KAAI,GAAM,mBAAmB,EAAE,EAC3B,KAAQ,KACV,GAAM,OAAO,EAAE,GAEjB,EAAO,EAAK,MAAM,EAAE,CAAC,CAAC,KAAK,EAAG,CAJC,CAKjC,CAIF,IAAI,GAAO,EAAK,QAAQ,GAAG,EACvB,KAAS,KAEX,KAAK,KAAO,EAAK,OAAO,EAAI,EAC5B,EAAO,EAAK,MAAM,EAAG,EAAI,GAE3B,IAAI,GAAK,EAAK,QAAQ,GAAG,EAmBzB,GAlBI,KAAO,GAOA,IAET,KAAK,OAAS,GACd,KAAK,MAAQ,CAAC,IATd,KAAK,OAAS,EAAK,OAAO,EAAE,EAC5B,KAAK,MAAQ,EAAK,OAAO,GAAK,CAAC,EAC3B,IACF,KAAK,MAAQ,EAAY,MAAM,KAAK,KAAK,GAE3C,EAAO,EAAK,MAAM,EAAG,EAAE,GAMrB,IAAQ,KAAK,SAAW,GACxB,EAAgB,IAAe,KAAK,UAAY,CAAC,KAAK,WACxD,KAAK,SAAW,KAId,KAAK,UAAY,KAAK,OAAQ,CAChC,IAAI,GAAI,KAAK,UAAY,GACrB,GAAI,KAAK,QAAU,GACvB,KAAK,KAAO,GAAI,EAClB,CAIA,MADA,MAAK,KAAO,KAAK,OAAO,EACjB,IACT,EAGA,SAAS,EAAU,EAAK,CAStB,OAFI,OAAO,GAAQ,WAAY,EAAM,EAAS,CAAG,GAC3C,aAAe,EACd,EAAI,OAAO,EADkB,EAAI,UAAU,OAAO,KAAK,CAAG,CAEnE,CAEA,EAAI,UAAU,OAAS,UAAY,CACjC,IAAI,EAAO,KAAK,MAAQ,GACpB,IACF,EAAO,mBAAmB,CAAI,EAC9B,EAAO,EAAK,QAAQ,OAAQ,GAAG,EAC/B,GAAQ,KAGV,IAAI,EAAW,KAAK,UAAY,GAC9B,EAAW,KAAK,UAAY,GAC5B,EAAO,KAAK,MAAQ,GACpB,EAAO,GACP,EAAQ,GAEN,KAAK,KACP,EAAO,EAAO,KAAK,KACV,KAAK,WACd,EAAO,GAAQ,KAAK,SAAS,QAAQ,GAAG,IAAM,GAAK,KAAK,SAAW,IAAM,KAAK,SAAW,KACrF,KAAK,OACP,GAAQ,IAAM,KAAK,OAInB,KAAK,OAAS,OAAO,KAAK,OAAU,UAAY,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,SAC1E,EAAQ,EAAY,UAAU,KAAK,MAAO,CACxC,YAAa,SACb,eAAgB,EAClB,CAAC,GAGH,IAAI,EAAS,KAAK,QAAW,GAAU,IAAM,GAAW,GAuBxD,OArBI,GAAY,EAAS,OAAO,EAAE,IAAM,MAAO,GAAY,KAMvD,KAAK,UAAY,CAAC,GAAY,EAAgB,KAAc,IAAS,IACvE,EAAO,MAAQ,GAAQ,IACnB,GAAY,EAAS,OAAO,CAAC,IAAM,MAAO,EAAW,IAAM,IAC1D,AACL,IAAO,GAGL,GAAQ,EAAK,OAAO,CAAC,IAAM,MAAO,EAAO,IAAM,GAC/C,GAAU,EAAO,OAAO,CAAC,IAAM,MAAO,EAAS,IAAM,GAEzD,EAAW,EAAS,QAAQ,QAAS,SAAU,EAAO,CACpD,OAAO,mBAAmB,CAAK,CACjC,CAAC,EACD,EAAS,EAAO,QAAQ,IAAK,KAAK,EAE3B,EAAW,EAAO,EAAW,EAAS,CAC/C,EAEA,SAAS,EAAW,EAAQ,EAAU,CACpC,OAAO,EAAS,EAAQ,GAAO,EAAI,CAAC,CAAC,QAAQ,CAAQ,CACvD,CAEA,EAAI,UAAU,QAAU,SAAU,EAAU,CAC1C,OAAO,KAAK,cAAc,EAAS,EAAU,GAAO,EAAI,CAAC,CAAC,CAAC,OAAO,CACpE,EAEA,SAAS,EAAiB,EAAQ,EAAU,CAE1C,OADK,EACE,EAAS,EAAQ,GAAO,EAAI,CAAC,CAAC,cAAc,CAAQ,EADrC,CAExB,CAEA,EAAI,UAAU,cAAgB,SAAU,EAAU,CAChD,GAAI,OAAO,GAAa,SAAU,CAChC,IAAI,EAAM,IAAI,EACd,EAAI,MAAM,EAAU,GAAO,EAAI,EAC/B,EAAW,CACb,CAIA,IAAK,IAFD,EAAS,IAAI,EACb,EAAQ,OAAO,KAAK,IAAI,EACnB,EAAK,EAAG,EAAK,EAAM,OAAQ,IAAM,CACxC,IAAI,EAAO,EAAM,GACjB,EAAO,GAAQ,KAAK,EACtB,CASA,GAHA,EAAO,KAAO,EAAS,KAGnB,EAAS,OAAS,GAEpB,MADA,GAAO,KAAO,EAAO,OAAO,EACrB,EAIT,GAAI,EAAS,SAAW,CAAC,EAAS,SAAU,CAG1C,IAAK,IADD,EAAQ,OAAO,KAAK,CAAQ,EACvB,EAAK,EAAG,EAAK,EAAM,OAAQ,IAAM,CACxC,IAAI,EAAO,EAAM,GACb,IAAS,aAAc,EAAO,GAAQ,EAAS,GACrD,CASA,OANI,EAAgB,EAAO,WAAa,EAAO,UAAY,CAAC,EAAO,WACjE,EAAO,SAAW,IAClB,EAAO,KAAO,EAAO,UAGvB,EAAO,KAAO,EAAO,OAAO,EACrB,CACT,CAEA,GAAI,EAAS,UAAY,EAAS,WAAa,EAAO,SAAU,CAW9D,GAAI,CAAC,EAAgB,EAAS,UAAW,CAEvC,IAAK,IADD,EAAO,OAAO,KAAK,CAAQ,EACtB,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,IAAI,EAAI,EAAK,GACb,EAAO,GAAK,EAAS,EACvB,CAEA,MADA,GAAO,KAAO,EAAO,OAAO,EACrB,CACT,CAGA,GADA,EAAO,SAAW,EAAS,SACvB,CAAC,EAAS,MAAQ,CAAC,EAAiB,EAAS,UAAW,CAE1D,IADA,IAAI,GAAW,EAAS,UAAY,GAAA,CAAI,MAAM,GAAG,EAC1C,EAAQ,QAAU,EAAE,EAAS,KAAO,EAAQ,MAAM,KACzD,AAAsB,EAAS,OAAO,GACtC,AAA0B,EAAS,WAAW,GAC1C,EAAQ,KAAO,IAAM,EAAQ,QAAQ,EAAE,EACvC,EAAQ,OAAS,GAAK,EAAQ,QAAQ,EAAE,EAC5C,EAAO,SAAW,EAAQ,KAAK,GAAG,CACpC,KACE,GAAO,SAAW,EAAS,SAgB7B,MAdA,GAAO,OAAS,EAAS,OACzB,EAAO,MAAQ,EAAS,MACxB,EAAO,KAAO,EAAS,MAAQ,GAC/B,EAAO,KAAO,EAAS,KACvB,EAAO,SAAW,EAAS,UAAY,EAAS,KAChD,EAAO,KAAO,EAAS,MAEnB,EAAO,UAAY,EAAO,UAG5B,EAAO,MAFC,EAAO,UAAY,KACnB,EAAO,QAAU,KAG3B,EAAO,QAAU,EAAO,SAAW,EAAS,QAC5C,EAAO,KAAO,EAAO,OAAO,EACrB,CACT,CAEA,IAAI,EAAc,EAAO,UAAY,EAAO,SAAS,OAAO,CAAC,IAAM,IACjE,EAAW,EAAS,MAAQ,EAAS,UAAY,EAAS,SAAS,OAAO,CAAC,IAAM,IACjF,EAAa,GAAY,GAAgB,EAAO,MAAQ,EAAS,SACjE,EAAgB,EAChB,EAAU,EAAO,UAAY,EAAO,SAAS,MAAM,GAAG,GAAK,CAAC,EAC5D,EAAU,EAAS,UAAY,EAAS,SAAS,MAAM,GAAG,GAAK,CAAC,EAChE,EAAY,EAAO,UAAY,CAAC,EAAgB,EAAO,UA2BzD,GAlBI,IACF,EAAO,SAAW,GAClB,EAAO,KAAO,KACV,EAAO,OACL,EAAQ,KAAO,GAAM,EAAQ,GAAK,EAAO,KAAe,EAAQ,QAAQ,EAAO,IAAI,GAEzF,EAAO,KAAO,GACV,EAAS,WACX,EAAS,SAAW,KACpB,EAAS,KAAO,KACZ,EAAS,OACP,EAAQ,KAAO,GAAM,EAAQ,GAAK,EAAS,KAAe,EAAQ,QAAQ,EAAS,IAAI,GAE7F,EAAS,KAAO,MAElB,IAA4B,EAAQ,KAAO,IAAM,EAAQ,KAAO,IAG9D,EAEF,EAAO,KAAO,EAAS,MAAQ,EAAS,OAAS,GAAK,EAAS,KAAO,EAAO,KAC7E,EAAO,SAAW,EAAS,UAAY,EAAS,WAAa,GAAK,EAAS,SAAW,EAAO,SAC7F,EAAO,OAAS,EAAS,OACzB,EAAO,MAAQ,EAAS,MACxB,EAAU,OAEL,GAAI,EAAQ,OAKjB,AAAgB,IAAU,CAAC,EAC3B,EAAQ,IAAI,EACZ,EAAU,EAAQ,OAAO,CAAO,EAChC,EAAO,OAAS,EAAS,OACzB,EAAO,MAAQ,EAAS,WACnB,GAAI,EAAS,QAAU,KAAM,CAMlC,GAAI,EAAW,CACb,EAAO,KAAO,EAAQ,MAAM,EAC5B,EAAO,SAAW,EAAO,KAMzB,IAAI,EAAa,EAAO,MAAQ,EAAO,KAAK,QAAQ,GAAG,EAAI,EAAI,EAAO,KAAK,MAAM,GAAG,EAAI,GACpF,IACF,EAAO,KAAO,EAAW,MAAM,EAC/B,EAAO,SAAW,EAAW,MAAM,EACnC,EAAO,KAAO,EAAO,SAEzB,CAQA,MAPA,GAAO,OAAS,EAAS,OACzB,EAAO,MAAQ,EAAS,OAEpB,EAAO,WAAa,MAAQ,EAAO,SAAW,QAChD,EAAO,MAAQ,EAAO,SAAW,EAAO,SAAW,KAAO,EAAO,OAAS,EAAO,OAAS,KAE5F,EAAO,KAAO,EAAO,OAAO,EACrB,CACT,CAEA,GAAI,CAAC,EAAQ,OAaX,MARA,GAAO,SAAW,KAEd,EAAO,OACT,EAAO,KAAO,IAAM,EAAO,OAE3B,EAAO,KAAO,KAEhB,EAAO,KAAO,EAAO,OAAO,EACrB,EAgBT,IAAK,IARD,EAAO,EAAQ,MAAM,EAAE,CAAC,CAAC,GACzB,GAAoB,EAAO,MAAQ,EAAS,MAAQ,EAAQ,OAAS,KAAO,IAAS,KAAO,IAAS,OAAS,IAAS,GAMvH,EAAK,EACA,EAAI,EAAQ,OAAQ,GAAK,EAAG,IACnC,EAAO,EAAQ,GACX,IAAS,IACX,EAAQ,OAAO,EAAG,CAAC,EACV,IAAS,MAClB,EAAQ,OAAO,EAAG,CAAC,EACnB,KACS,IACT,EAAQ,OAAO,EAAG,CAAC,EACnB,KAKJ,GAAI,CAAC,GAAc,CAAC,EAClB,KAAO,KACL,EAAQ,QAAQ,IAAI,EAIpB,GAAc,EAAQ,KAAO,KAAO,CAAC,EAAQ,IAAM,EAAQ,EAAE,CAAC,OAAO,CAAC,IAAM,MAC9E,EAAQ,QAAQ,EAAE,EAGhB,GAAqB,EAAQ,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,IAAM,KACxD,EAAQ,KAAK,EAAE,EAGjB,IAAI,EAAa,EAAQ,KAAO,IAAO,EAAQ,IAAM,EAAQ,EAAE,CAAC,OAAO,CAAC,IAAM,IAG9E,GAAI,EAAW,CACb,EAAO,SAAW,EAAa,GAAK,EAAQ,OAAS,EAAQ,MAAM,EAAI,GACvE,EAAO,KAAO,EAAO,SAMrB,IAAI,EAAa,EAAO,MAAQ,EAAO,KAAK,QAAQ,GAAG,EAAI,EAAI,EAAO,KAAK,MAAM,GAAG,EAAI,GACpF,IACF,EAAO,KAAO,EAAW,MAAM,EAC/B,EAAO,SAAW,EAAW,MAAM,EACnC,EAAO,KAAO,EAAO,SAEzB,CAsBA,MApBA,KAA4B,EAAO,MAAQ,EAAQ,OAE/C,GAAc,CAAC,GACjB,EAAQ,QAAQ,EAAE,EAGhB,EAAQ,OAAS,EACnB,EAAO,SAAW,EAAQ,KAAK,GAAG,GAElC,EAAO,SAAW,KAClB,EAAO,KAAO,OAIZ,EAAO,WAAa,MAAQ,EAAO,SAAW,QAChD,EAAO,MAAQ,EAAO,SAAW,EAAO,SAAW,KAAO,EAAO,OAAS,EAAO,OAAS,KAE5F,EAAO,KAAO,EAAS,MAAQ,EAAO,KACtC,EAAO,QAAU,EAAO,SAAW,EAAS,QAC5C,EAAO,KAAO,EAAO,OAAO,EACrB,CACT,EAEA,EAAI,UAAU,UAAY,UAAY,CACpC,IAAI,EAAO,KAAK,KACZ,EAAO,EAAY,KAAK,CAAI,EAC5B,IACF,EAAO,EAAK,GACR,IAAS,MACX,KAAK,KAAO,EAAK,OAAO,CAAC,GAE3B,EAAO,EAAK,OAAO,EAAG,EAAK,OAAS,EAAK,MAAM,GAE7C,IAAQ,KAAK,SAAW,EAC9B,EAEA,EAAQ,MAAQ,EAChB,EAAQ,QAAU,EAClB,EAAQ,cAAgB,EACxB,EAAQ,OAAS,EAEjB,EAAQ,IAAM,mBC7uBd,IAAI,EAAA,GAAA,EAMA,EAAY,CACZ,eAAgB,EAChB,cAAe,EACf,iBAAkB,EAClB,qBAAsB,EACtB,gBAAiB,EACjB,eAAgB,EAChB,mBAAoB,EACpB,YAAa,EACb,eAAgB,EAChB,kBAAmB,CACvB,EAEI,EAAiB,CAAC,EAAG,CAAC,EAEtB,EAAqB,CAAC,OAAQ,SAAU,SAAU,KAAK,EAE3D,SAAS,EAAkB,EAAW,CAClC,KAAK,KAAO,oBACZ,KAAK,QAAU,2CAA6C,EAAY,IACxE,KAAK,UAAY,CACrB,CAEA,EAAkB,UAAgB,MAAM,EACxC,EAAkB,UAAU,YAAc,EAM1C,EAAO,QAAU,CAqBb,MAAO,SAAe,EAAQ,CAC1B,IAAI,EAAM,CAAC,EAMP,EAAS,EAAI,MAAM,EAAQ,EAAI,EAEnC,GAAI,EAAO,WAAa,WACpB,MAAM,IAAI,EAAkB,EAAU,gBAAgB,EAO1D,IAAI,EAAU,mBAAmB,EAAO,IAAI,EAE5C,GAAI,IAAY,QAAU,IAAY,OAClC,MAAM,IAAI,EAAkB,EAAU,WAAW,EAGrD,EAAI,KAAO,EAOX,IAAI,EADQ,mBAAmB,EAAO,SAAS,UAAU,CAAC,CAChC,CAAC,CAAC,MAAM,GAAG,EACjC,EAAS,GACT,EAAU,GAEd,GAAI,EAAgB,SAAW,EAC3B,EAAU,EAAgB,QACvB,GAAI,EAAgB,SAAW,EAClC,EAAS,EAAgB,GACzB,EAAU,EAAgB,QAE1B,MAAM,IAAI,EAAkB,EAAU,aAAa,EAGvD,GAAI,EAAQ,OAAS,EACjB,MAAM,IAAI,EAAkB,EAAU,oBAAoB,EAG9D,GAAK,EAAgB,SAAW,GAAO,EAAO,OAAS,EACnD,MAAM,IAAI,EAAkB,EAAU,cAAc,EAGxD,EAAI,QAAU,EAMd,IAAI,EAAa,EAAO,MAGxB,GAAI,CAAC,EAAW,OACZ,MAAM,IAAI,EAAkB,EAAU,kBAAkB,EAM5D,GAHA,EAAI,IAAM,EAAW,OAGjB,EAAW,QAAU,GAAW,EAAW,SAAW,EAEtD,MAAM,IAAI,EAAkB,EAAU,cAAc,EAQxD,GALA,EAAI,OAAS,GAAU,EAAW,QAAU,GAG5C,EAAI,OAAS,EAET,EAAW,OAAQ,CACnB,IAAI,EAAe,SAAS,EAAW,OAAQ,EAAE,EACjD,GAAI,EAAe,QAAQ,CAAY,GAAK,GACxC,MAAM,IAAI,EAAkB,EAAU,cAAc,EAEpD,EAAI,OAAS,CAErB,CAGA,GAAI,EAAW,UACX,IAAI,EAAmB,QAAQ,EAAW,SAAS,GAAK,GACpD,MAAM,IAAI,EAAkB,EAAU,iBAAiB,EAGvD,EAAI,UAAY,EAAW,SAAA,CAanC,GARI,IAAY,QAER,EAAW,SACX,EAAI,OAAS,WAAW,EAAW,MAAM,GAK7C,IAAY,OACZ,GAAK,EAAW,QAIZ,EAAI,QAAU,SAAS,EAAW,QAAS,EAAE,OAF7C,MAAM,IAAI,EAAkB,EAAU,eAAe,EAM7D,OAAO,CACX,EAKW,YAQQ,mBACvB,+BCpNA,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAA0P,MAA1N,IAAsB,2IAA2M,CAAS,CCApT,SAASC,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAOhC,OALD,SAAU,EAAU,CACnB,EAAW,EAAW;;;6cAAw5CF,GAAiC,EAAS,QAAU,EAAe,EAAK,kDAAyJA,GAAiC,EAAS,SAAW,EAAe,EAAK,yGAA0NA,GAAiC,EAAS,IAAI,MAAM,SAAS,CAAC,CAAC,KAAK,GAAG,GAAK,EAAe,EAAK,inBACphE,EAAA,CAAE,KAAK,KAAM,aAAc,EACvB,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,EAAS,EACjD,CAAS,CCTtB,SAASG,GAAS,EAAQ,CAAC,IAAI,EAAW,GAA4Y,MAA5W,IAAsB,gQAA6V,CAAS,CCUtc,IAAM,GAA0B,EAAK,OAAO,CACxC,OAAQ,CACJ,sCAAuC,UAAY,CAC/C,KAAK,MAAM,oBAAoB,CAAC,CAC3B,KAAM,GAAY,CACf,KAAK,QAAU,EACf,KAAK,OAAO,CAChB,CAAC,CACT,EACA,oCAAqC,UAAY,CAC7C,IAAM,EAAW,KAAK,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAExD,GAAI,EAAS,SAAW,EAAG,CACvB,KAAK,EAAE,sBAAsB,CAAC,CAAC,KAAK,wBAAwB,EAC5D,MACJ,MACI,KAAK,EAAE,sBAAsB,CAAC,CAAC,KAAK,EAAE,EAG1C,KAAK,MAAM,mBAAmB,CAAQ,CAAC,CAClC,SAAW,CACR,KAAK,QAAU,IAAA,GACf,KAAK,OAAO,CAChB,CAAC,CAAC,CACD,KAAM,GAAQ,CACX,KAAK,EAAE,sBAAsB,CAAC,CAAC,KAAK,EAAI,aAAa,OAAO,CAChE,CAAC,CACT,EACA,kCAAmC,UAAY,CAC3C,KAAK,QAAU,IAAA,GACf,KAAK,OAAO,CAChB,EACA,4BAA6B,UAAY,CACrC,KAAK,MAAM,WAAW,CAAC,CAClB,SAAW,CACR,KAAK,OAAO,CAChB,CAAC,CACT,CACJ,EAOA,WAAY,SAAU,EAAU,CAC5B,KAAK,MAAQ,EAAS,IAC1B,EAEA,OAAQ,UAAY,CAehB,OAdK,KAAK,MAAM,IAAI,KAAK,EAWrB,KAAK,eAAe,EATf,KAAK,QAKN,KAAK,oBAAoB,EAHzB,KAAK,aAAa,EAUnB,IACX,EAEA,aAAc,UAAY,CACtB,KAAK,IAAI,KAAKC,GAAqB,CAAC,CACxC,EAEA,oBAAqB,UAAY,CAE7B,IAAM,EAAWC,GAAAA,QAAQ,MAAM,KAAK,OAAO,EAE3C,KAAK,IAAI,KAAKC,GAAsB,CACtB,UACd,CAAC,CAAC,EAGF,GAAO,SACH,KAAK,EAAE,gBAAgB,CAAC,CAAC,GACzB,KAAK,QACL,CACI,qBAAsB,GAC1B,CACJ,CACJ,EAEA,eAAgB,UAAY,CACxB,KAAK,IAAI,KAAKC,GAAuB,CAAC,CAC1C,CACJ,CAAC,ECtGD,SAASC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASA,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAyBhC,OAvBD,SAAU,EAAgB,EAAe,EAAgB,EAAM,CAC9D,EAAW,EAAW,uEAAkGF,GAAiC,EAAK,KAAK,GAAK,EAAe,EAAK,yDAAuFA,GAAiC,EAAK,IAAI,OAAO,GAAK,EAAe,EAAK,0yBAA2xCA,GAAiC,EAAK,IAAI,OAAO,GAAK,EAAe,EAAK,8EAA0J,0DAAmED,GAAS,QAAS,EAAK,IAAI,OAAO,EAAG,GAAM,EAAK,GAAK,qFAA4J,8DAAuEA,GAAS,QAAS,EAAK,IAAI,WAAW,EAAG,GAAM,EAAK,GAAK,mFAA0J,6DAAsEA,GAAS,QAAS,EAAK,IAAI,UAAU,EAAG,GAAM,EAAK,GAAK,WAC1gF,EAAe,CAAC,CAAC,IAAI,OAAO,IAChC,EAAW,EAAW,iFAA+H,8DAAuEA,GAAS,UAAW,EAAK,IAAI,OAAO,EAAG,GAAM,EAAK,GAAK,YAEnR,GAAsB,8VAClB,EACJ,EAAW,EAAW,UAAiB,mEAA4EA,GAAS,QAAS,EAAgB,GAAM,EAAK,GAAK,KAGjK,IACJ,GAAsB,qMAEtB,GAAsB;;;;;;;oEAClB,EAAA,CAAE,KAAK,KAAM,mBAAoB,EAC7B,EAAgB,eAChB,OAAO,eAAmB,IAAc,eAAiB,IAAA,GAAW,kBAAmB,EACvF,EAAgB,cAChB,OAAO,cAAkB,IAAc,cAAgB,IAAA,GAAW,mBAAoB,EACtF,EAAgB,eAChB,OAAO,eAAmB,IAAc,eAAiB,IAAA,GAAW,SAAU,EAC9E,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,EAAS,EACzC,CAAS,IC3BI,EAqB1B,IAAI,GAAkB,EAAK,OAAO,CAC9B,OAAQ,CACJ,2BAA4B,SAAU,EAAO,CACzC,EAAM,eAAe,EACrB,KAAK,EAAE,wBAAwB,CAAC,CAAC,MAAM,EAEvC,IAAI,EAAS,CACT,MAAO,KAAK,EAAE,UAAU,CAAC,CAAC,IAAI,EAC9B,UAAW,KAAK,EAAE,cAAc,CAAC,CAAC,IAAI,EACtC,SAAU,KAAK,EAAE,aAAa,CAAC,CAAC,IAAI,CACxC,EAEI,KAAK,EAAE,UAAU,CAAC,CAAC,OAAS,IAC5B,EAAO,MAAQ,KAAK,EAAE,UAAU,CAAC,CAAC,GAAG,UAAU,GAGnD,KAAK,KAAK,IAAI,CAAM,EAEpB,KAAK,KAAK,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,SAAU,EAAK,CAClD,IAAI,EAAM,EAAI,aAAa,QAC3B,KAAK,EAAE,MAAQ,EAAI,aAAa,KAAK,CAAC,CAAC,QAAQ,OAAO,EACtD,KAAK,EAAE,wBAAwB,CAAC,CAAC,KAAK,CAAG,CAC7C,EAAG,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAClB,GAAG,UAAW,UAAY,CACvB,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,cACN,KAAM,UACN,QAAS,GACb,CAAC,CACL,EAAG,IAAI,CAAC,CAAC,KAAK,CACtB,EACA,iCAAkC,SAAU,EAAO,CAI/C,GAHA,EAAM,eAAe,EACrB,KAAK,EAAE,8BAA8B,CAAC,CAAC,MAAM,EAEzC,KAAK,EAAE,iBAAiB,CAAC,CAAC,IAAI,IAC1B,KAAK,EAAE,oBAAoB,CAAC,CAAC,IAAI,EAAG,CACxC,KAAK,EAAE,8BAA8B,CAAC,CAAC,KACnC,oCACJ,EACA,KAAK,EAAE,oCAAoC,CAAC,CAAC,IAAI,EAAE,EACnD,KAAK,EAAE,iBAAiB,CAAC,CAAC,QAAQ,OAAO,EACzC,MACJ,CAEA,KAAK,KAAK,IAAI,SAAS,CAAC,CAAC,GAAG,UAAW,SAAU,EAAK,CAClD,IAAI,EAAM,EAAI,aAAa,QAC3B,KAAK,EAAE,8BAA8B,CAAC,CAAC,KAAK,CAAG,CACnD,EAAG,IAAI,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAC5B,GAAG,oBAAqB,UAAY,CACjC,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,oBACN,KAAM,UACN,QAAS,GACb,CAAC,EACD,KAAK,EAAE,oDAAoD,CAAC,CAAC,IAAI,EAAE,CACvE,EAAG,IAAI,EAKP,KAAK,cACL,KAAK,KAAK,eACN,KAAK,EAAE,iBAAiB,CAAC,CAAC,IAAI,EAC9B,KAAK,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAClC,EAEA,KAAK,KAAK,oBAAoB,KAAK,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAErE,CACJ,EAEA,WAAY,SAAU,EAAU,CAS5B,GARA,KAAK,IAAM,EAAS,KAAO,OAC3B,KAAK,KAAO,EAAS,MAAQI,GAAe,EAC5C,KAAK,cAAgBA,GAAe,GAChC,EAAS,KAAK,KAAOA,GAAe,CAAC,CAAC,GAE1C,KAAK,MAAQ,KAAK,KAClB,KAAK,UAAY,EAAS,UAEtB,CAAC,KAAK,MAAQ,KAAK,KAAK,eAAe,EAAIC,GAAW,MAAO,CAC7D,EAAO,SAAS,GAAI,CAAE,QAAS,EAAK,CAAC,EACrC,MACJ,CAEA,GAAmB,OAAO,EAE1B,KAAK,iBAAmB,IAAI,GAAiB,CACzC,KAAM,KAAK,KACX,WAAY,IAChB,CAAC,EAED,KAAK,wBAA0B,IAAI,GAAwB,CACvD,KAAM,KAAK,KACX,WAAY,IAChB,CAAC,EAED,KAAK,OAAO,CAChB,EAEA,OAAQ,UAAY,CAChB,GAAID,GAAe,IAAM,KAAM,CAC3B,EAAO,SAAS,GAAI,CAAE,QAAS,EAAK,CAAC,EACrC,MACJ,CA8BA,OA5BA,KAAK,IAAI,KAAKE,GAAoB,CAC9B,KAAM,KAAK,MACX,cAAe,KAAK,cACpB,eAAgBF,GAChB,eAAgB,KAAK,SACzB,CAAC,CAAC,EAEF,EAAE,MAAA,EAAA,EAAA,QAAA,CAAO,sBAAsB,EAAG,SAAU,EAAI,CAC5C,IAAI,GAAA,EAAA,EAAA,QAAA,CAAY,CAAE,EAClB,EAAQ,IAAI,CAAC,CAAC,GAAG,eAAiB,GAAM,CACpC,KAAK,KAAA,EAAA,EAAA,QAAA,CAAQ,EAAE,aAAa,CAAC,CAAC,KAAK,MAAM,EACzC,EAAO,SAAS,eAAiB,KAAK,MAAM,GAAK,IAAM,KAAK,GAAG,EAE3D,KAAK,MAAQ,UACb,KAAK,iBAAiB,WAClB,KAAK,EAAE,4BAA4B,CAAC,CAAC,CAAC,OAAO,EAC1C,KAAK,MAAQ,OACpB,KAAK,wBACA,WAAW,KAAK,EAAE,0BAA0B,CAAC,CAAC,CAC9C,OAAO,CAEpB,CAAC,EAEG,EAAQ,KAAK,MAAM,IAAM,KAAK,KAC9B,EAAQ,IAAI,MAAM,CAE1B,EAAG,IAAI,EAEA,IACX,CACJ,EAAG,CAIC,aAAc,SAAU,EAAI,EAAK,CAC7B,IAAI,EAAO,IAAI,GACf,EAAK,IAAI,CAAE,IAAK,CAAG,CAAC,CAAC,CAAC,GAAG,YAAa,UAAY,CAC9C,EAAO,QAAQ,eAAgB,GAAiB,CACtC,OACD,KACT,CAAC,CACL,EAAG,IAAI,CAAC,CAAC,GAAG,UAAW,UAAY,CAC/B,EAAO,SAAS,GAAI,CAAE,QAAS,EAAK,CAAC,CACzC,EAAG,IAAI,CAAC,CAAC,MAAM,CACnB,CACJ,CAAC,KChLyB,EAa1B,IAAI,GAAuB,EAAK,OAAO,CACnC,OAAQ,CACJ,oCAAqC,UAAY,CAC7C,KAAK,mBAAmB,EAAI,CAChC,EACA,oCAAqC,UAAY,CAC7C,KAAK,uBAAuB,EAAI,CACpC,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,MAAQ,EAAS,KACtB,KAAK,OAAS,EAAS,MACvB,KAAK,MAAQ,EAAS,KACtB,KAAK,OAAS,EAAS,MAEvB,KAAK,QAAU,EACf,KAAK,aAAe,EACpB,KAAK,aAAe,GACpB,KAAK,iBAAmB,GAExB,KAAK,QAAU,KAEf,KAAK,mBAAmB,CAC5B,EAEA,OAAQ,UAAY,CAchB,OAbA,KAAK,IAAI,KAAKG,GAAuB,CACjC,WAAY,IAChB,CAAC,CAAC,EAEF,KAAK,EAAE,cAAc,CAAC,CAAC,aAAa,KAAK,YAAY,EACrD,KAAK,EAAE,cAAc,CAAC,CAAC,aAAa,KAAK,gBAAgB,EAErD,CAAC,KAAK,cAAgB,CAAC,KAAK,iBAC5B,KAAK,IAAI,KAAK,EAEd,KAAK,IAAI,KAAK,EAGX,IACX,EAEA,QAAS,UAAY,CACjB,OAAO,KAAK,YAChB,EAEA,uBAAwB,SAAU,EAAS,GAAO,CAW1C,OAVA,KAAK,cACD,EACO,KAAK,mBAAmB,CAAM,CAAC,CACjC,SACU,KAAK,mBAAmB,CAClC,EAEE,KAAK,mBAAmB,CAK3C,EAEA,mBAAoB,SAAU,EAAS,GAAO,CAOtC,OANA,EACO,KAAK,eAAe,CAAM,CAAC,CAC7B,SACU,KAAK,eAAe,CAC9B,EAEE,KAAK,eAAe,CAEnC,EAEA,mBAAoB,SAAU,EAAS,GAAO,CAC1C,IAAI,EAAS,KAAK,QAAU,KAAK,aAAe,GAChD,GAAI,EAAS,EACT,KAAK,iBAAmB,GACxB,KAAK,OAAO,OAEZ,OAAO,KAAK,OAAO,CAAM,CAAC,CACrB,KAAM,GAAY,CACf,IAAI,EAAS,EAAQ,KAAK,OACtB,EAAO,QACP,KAAK,iBAAmB,GACpB,IACA,KAAK,QAAU,EACf,KAAK,QAAQ,WAAW,EACxB,KAAK,eACL,KAAK,mBAAmB,IAG5B,KAAK,iBAAmB,GAE5B,KAAK,OAAO,CAChB,CAAC,CAEb,EAEA,eAAgB,SAAU,EAAS,GAAO,CACtC,IAAI,EAAS,KAAK,QAAU,KAAK,aAAe,GAChD,OAAO,KAAK,OAAO,CAAM,CAAC,CACrB,KAAM,GAAY,CACf,IAAI,EAAS,EAAQ,KAAK,OACtB,EAAO,QACP,KAAK,aAAe,GAChB,IACA,KAAK,QAAU,EACf,KAAK,QAAQ,WAAW,EACxB,KAAK,eACL,KAAK,uBAAuB,IAGhC,KAAK,aAAe,GAExB,KAAK,OAAO,CAChB,CAAC,CACT,EAEA,OAAQ,SAAU,EAAQ,CACtB,OAAO,GAAY,CACf,IAAK,kBACL,KAAM,CACF,EAAG,KAAK,OACR,KAAM,KAAK,MACX,MAAO,KAAK,UAAUC,EAAE,aACpB,CAAC,KAAK,KAAK,EACX,GAAkB,aAAa,KAAK,KAAK,CAAC,CAC9C,EACA,MAAO,KAAK,OACJ,QACZ,CACJ,CAAC,CACL,CACJ,CAAC,EClJD,SAASC,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAOhC,OALD,SAAU,EAAO,CAChB,EAAW,EAAW,wOAA0SF,GAAiC,GAAS,EAAe,EAAK,qVAChY,EAAA,CAAE,KAAK,KAAM,UAAW,EACpB,EAAgB,MAChB,OAAO,MAAU,IAAc,MAAQ,IAAA,EAAS,EAC3C,CAAS,CCTtB,SAASG,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAEC,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAASC,GAAY,EAAE,EAAE,CAAC,OAAO,MAAM,QAAQ,CAAC,EAAEC,GAAkB,EAAE,CAAC,EAAE,GAAa,OAAO,GAAjB,SAAmBC,GAAmB,CAAC,EAAE,GAAG,EAAE,CAC1H,SAASD,GAAkB,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,KAAK,EAAED,GAAY,EAAE,EAAE,KAAK,GAAG,EAAE,KAAK,EAAED,GAAW,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CACpK,SAASG,GAAmB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,GAAG,EAAE,IAAIC,GAAqB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAC7H,SAASJ,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEK,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAID,GAAqB,OAAO,UAAU,eACtCC,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EA8ChC,OA5CD,SAAU,EAAgB,EAAM,EAAS,EAAM,CAC9C,EAAW,EAAW,wDAA4EP,GAAS,QAASE,GAAY,CAAC,8BAA8B,4BAA4B,QAAQ,GAAM,EAAG,CAAC,GAAM,GAAM,EAAI,CAAC,EAAG,GAAO,EAAK,EAAK,6EAAgHD,GAAiC,GAAkB,EAAe,EAAK,kDAE7a,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAU,EAAM,GAC5B,EAAW,EAAW,iCAAqDD,GAAS,OAAQ,IAAI,EAAK,GAAG,EAAQ,MAAO,GAAM,EAAK,EAAK,IACnI,IAAS,OACb,EAAW,EAAYC,GAAiC,EAAQ,WAAa,EAAe,EAAK,IAAOA,GAAiC,EAAQ,UAAY,EAAe,EAAK,KAAQA,GAAiC,EAAQ,OAAS,EAAe,EAAK,IAG/P,GAAuBA,GAAiC,EAAQ,MAAQ,EAAe,EAEvF,GAAsB,WAChB,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAU,EAAM,GAC1B,EAAW,EAAW,iCAAqDD,GAAS,OAAQ,IAAI,EAAK,GAAG,EAAQ,MAAO,GAAM,EAAK,EAAK,IACnI,IAAS,OACb,EAAW,EAAYC,GAAiC,EAAQ,WAAa,EAAe,EAAK,IAAOA,GAAiC,EAAQ,UAAY,EAAe,EAAK,KAAQA,GAAiC,EAAQ,OAAS,EAAe,EAAK,IAG/P,GAAuBA,GAAiC,EAAQ,MAAQ,EAAe,EAEvF,GAAsB,WAClB,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEZ,EAAW,EAAW,aAAmC,qCAAuCD,GAAS,KAAM,GAAG,EAAK,UAAW,GAAM,EAAK,GAAK,SAC9I,EAAA,CAAE,KAAK,KAAM,mBAAoB,EAC7B,EAAgB,eAChB,OAAO,eAAmB,IAAc,eAAiB,IAAA,GAAW,SAAU,EAC9E,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,GAAW,YAAa,EAC7D,EAAgB,QAChB,OAAO,QAAY,IAAc,QAAU,IAAA,GAAW,SAAU,EAChE,EAAgB,KAChB,OAAO,KAAS,IAAc,KAAO,IAAA,EAAS,EACzC,CAAS,ICrDI,EAe1B,IAAI,GAAoB,EAAK,OAAO,CAChC,WAAY,SAAU,EAAU,CAC5B,KAAK,OAAS,EAAS,OAAS,GAChC,KAAK,MAAQ,EAAS,MAAQ,OAE9B,KAAK,gBAAkB,GACvB,KAAK,UAAY,GAEjB,KAAK,SAAW,GAAY,CACxB,IAAK,kBACL,KAAM,CACF,EAAG,KAAK,OACR,KAAM,KAAK,MACX,MAAO,KAAK,UAAU,GAAkB,aAAa,KAAK,KAAK,CAAC,EAChE,MAAO,KAAK,SAChB,CACJ,CAAC,EACD,KAAK,OAAO,CAChB,EAKA,iBAAkB,SAAU,EAAa,CAErC,IAAM,EAAkB,CAAC,aAAc,SAAU,OAAQ,QAAS,MAAM,EAGlE,EAAoBQ,EAAE,aAAa,EAAiB,CAAW,EAC/D,EAAuBA,EAAE,WAAW,EAAa,CAAe,CAAC,CAAC,KAAK,EAE7E,OAAO,EAAkB,OAAO,CAAmB,CACvD,EAEA,OAAQ,UAAY,CAkChB,OAjCA,KAAK,IAAI,KAAKC,GAAsB,CAChC,MAAO,KAAK,MAChB,CAAC,CAAC,EACF,KAAK,UAAY,CAAC,EAElB,KAAK,SACA,KAAM,GAAY,CACf,KAAK,EAAE,mBAAmB,CAAC,CAAC,KAAK,EAEjC,IAAM,EAAeD,EAAE,KAAK,CAAO,EAC7B,EAAe,KAAK,iBAAiB,CAAW,EACtD,EAAE,KAAK,EAAe,GAAS,CACvB,EAAQ,EAAK,CAAC,SACd,KAAK,UAAU,GAAQ,IAAI,GAAsB,CAC7C,WAAY,KACZ,MAAO,KAAK,OACZ,KAAM,KAAK,MACL,OACN,MAAO,KAAK,UACZ,YAAa,EAAQ,GACrB,eAAgB,KAAK,eACzB,CAAC,CAAC,CACG,OAAO,EACZ,KAAK,UAAU,EAAK,CAAC,IAChB,SAAS,KAAK,EAAE,6BAA6B,CAAC,EAE3D,CAAC,EAEGA,EAAE,QAAQ,KAAK,SAAS,GACxB,KAAK,EAAE,sBAAsB,CAAC,CAAC,KAAK,CAE5C,CAAC,EAEE,IACX,CACJ,CAAC,EAOG,GAAwB,EAAK,OAAO,CACpC,UAAW,kCAEX,WAAY,SAAU,EAAU,CAC5B,KAAK,OAAS,EAAS,MACvB,KAAK,MAAQ,EAAS,KACtB,KAAK,MAAQ,EAAS,KACtB,KAAK,aAAe,EAAS,aAAe,CAAC,EAC7C,KAAK,WAAa,EAAS,OAAS,GACpC,KAAK,gBAAkB,EAAS,gBAAkB,GAElD,KAAK,gBAAkB,IAAI,GAAqB,CAC5C,WAAY,KACZ,KAAM,KAAK,MACX,MAAO,KAAK,OACZ,KAAM,KAAK,MACX,MAAO,KAAK,UAChB,CAAC,CAAC,CACG,GAAG,gBAAmB,CACnB,KAAK,SAAW,KAAK,gBAAgB,QACrC,KAAK,OAAO,CAChB,CAAC,EAEL,KAAK,SAAW,KAAK,YACzB,EAEA,aAAc,SAAU,EAAM,CAQ1B,MAAO,CANH,WAAY,cACZ,MAAO,SACP,KAAM,QACN,OAAQ,UACR,KAAM,OAEC,EAAE,IAAS,CAC1B,EAEA,aAAc,SAAU,EAAM,CAQ1B,MAAO,CANH,KAAM,OACN,MAAO,QACP,WAAY,UACZ,OAAQ,SACR,KAAM,cAEC,EAAE,IAAS,oBAC1B,EAEA,OAAQ,UAAY,CAiBhB,OAhBA,KAAK,IAAI,KAAKE,GAA0B,CACpC,QAAS,KAAK,SACd,eAAgB,KAAK,aAAa,KAAK,KAAK,EAC5C,KAAM,KAAK,MACX,KAAM,KAAK,aAAa,KAAK,KAAK,CACtC,CAAC,CAAC,EAMF,KAAK,EAAE,wBAAwB,CAAC,CAAC,IAAI,aAAc,GAAG,KAAK,aAAa,OAAS,KAAK,gBAAgB,GAAG,EACzG,KAAK,gBACA,WAAW,KAAK,EAAE,IAAI,KAAK,MAAM,SAAS,CAAC,CAAC,CAC5C,OAAO,EAEL,IACX,CACJ,CAAC,EClFD,EAAO,MAAM,QAAS,QAAS,UAAY,CACvC,EAAO,QAAQ,eAAgB,EAAS,CAC5C,CAAC,EACD,EAAO,MAAM,cAAe,cAAe,SAAU,EAAQ,CACzD,EAAO,QAAQ,eAAgB,GAAiB,CAC5C,eAAgB,EAAO,SAAW,kBAAmB,EAAO,QAChE,CAAC,CACL,CAAC,EACD,EAAO,MAAM,wBAAyB,mBAAoB,SAAU,EAAc,CAC9E,GAAgB,OAAO,CAAY,CACvC,CAAC,EACD,EAAO,MAAM,cAAe,cAAe,SAAU,EAAQ,CACzD,EAAO,QAAQ,eAAgB,GAAiB,GAAU,CAAC,CAAC,EAC5D,EAAO,QAAQ,kBAAmB,iBAAiB,CACvD,CAAC,EACD,EAAO,MAAM,iBAAkB,mBAAoB,SAAU,EAAK,EAAQ,CACtE,GAAe,aAAa,EAAK,CAC7B,OAAQ,EAAO,SAAW,SAC1B,KAAM,EAAO,SAAW,OACxB,aAAc,EAAO,SAAW,eAChC,OAAQ,EAAO,MACnB,CAAC,CACL,CAAC,EACD,EAAO,MAAM,4BAA6B,mBAAoB,SAAU,EAAK,EAAU,EAAQ,CAC3F,GAAe,aAAa,EAAK,CACnB,WACV,OAAQ,EAAO,SAAW,SAC1B,OAAQ,EAAO,SAAW,SAC1B,KAAM,EAAO,SAAW,OACxB,aAAc,EAAO,SAAW,eAChC,aAAc,EAAO,SAAW,eAChC,WAAY,EAAO,SAAW,aAC9B,WAAY,EAAO,SAAW,YAClC,CAAC,CACL,CAAC,EACD,EAAO,MAAM,aAAc,SAAU,SAAU,EAAI,EAAQ,CACvD,GAAW,aAAa,EAAI,CACxB,OAAQ,EAAO,SAAW,SAC1B,aAAc,EAAO,SAAW,eAChC,aAAc,EAAO,SAAW,eAChC,WAAY,EAAO,SAAW,aAC9B,WAAY,EAAO,SAAW,YAClC,CAAC,CACL,CAAC,EACD,EAAO,MAAM,GAAI,QAAS,UAAY,CAClC,EAAO,QAAQ,eAAgB,EAAa,CAChD,CAAC,EACD,EAAO,MAAM,SAAU,SAAU,SAAU,EAAQ,CAC/C,EAAO,QAAQ,eAAgB,GAAY,GAAU,CAAC,CAAC,EACvD,EAAO,QAAQ,kBAAmB,YAAY,CAClD,CAAC,EACD,EAAO,MAAM,YAAa,YAAa,SAAU,EAAS,EAAQ,CAC9D,GAAU,aAAa,EAAS,CAC5B,KAAM,EAAO,SAAW,MAC5B,CAAC,CACL,CAAC,EACD,EAAO,MAAM,iBAAkB,YAAa,SAAU,EAAS,EAAK,EAAQ,CACxE,GAAU,aAAa,EAAS,CAC5B,KAAM,EAAO,SAAW,OACnB,KACT,CAAC,CACL,CAAC,EACD,EAAO,MAAM,WAAY,OAAQ,SAAU,EAAQ,EAAQ,CACvD,GAAS,aAAa,EAAQ,CAC1B,KAAM,EAAO,SAAW,WACxB,SAAU,EAAO,SAAW,YAAa,EAAO,SAChD,OAAQ,EAAO,SAAW,UAAW,EAAO,QAChD,CAAC,CACL,CAAC,EACD,EAAO,MAAM,UAAW,UAAW,UAAY,CAC3C,EAAO,QAAQ,eAAgB,EAAW,CAC9C,CAAC,EACD,EAAO,MAAM,WAAY,WAAY,UAAY,CAC7C,EAAO,QAAQ,eAAgB,EAAuB,CAC1D,CAAC,EACD,EAAO,MAAM,uBAAwB,aAAc,SAAU,EAAI,EAAK,CAClE,GAAgB,aAAa,EAAI,CAAG,CACxC,CAAC,EACD,EAAO,MAAM,+BAAgC,eAAgB,SAAU,EAAI,EAAO,CAC9E,GAAU,mBAAmB,EAAI,CAAK,CAAC,CAClC,SAAW,CACR,EAAO,QAAQ,eAAgB,GAAiB,CAC5C,KAAMC,GAAe,EACrB,IAAK,WACL,UAAW,CACf,CAAC,CACL,CAAC,CAAC,CAAC,SAAW,CACV,EAAO,SAAS,GAAI,CAAE,QAAS,EAAK,CAAC,CACzC,CAAC,CACT,CAAC,EAED,EAAO,MAAM,sCAAuC,gBAAiB,SAAU,EAAI,EAAO,CACtF,GAAY,CACR,IAAK,QAAQ,EAAG,eAChB,OAAQ,MACR,KAAM,CAAS,OAAM,EACrB,MAAO,IACX,CAAC,CAAC,CAAC,KAAM,GAAS,CACV,EAAK,YACL,EAAK,KAAK,MAAQ,EAAK,UAAU,MACjC,GAAY,MAAM,EAClB,GAAe,IAAI,GAAU,EAAK,IAAI,CAAC,EACvC,GAAY,KAAK,EACjB,EAAO,QAAQ,iBAAiB,GAEpC,EAAO,QAAQ,eAAgB,EAAa,EAC5C,EAAO,QAAQ,UAAW,CACtB,KAAM,KACN,KAAM,kBACN,KAAM,UACN,QAAS,GACb,CAAC,CACL,CAAC,CAAC,CAAC,SAAW,CACV,EAAO,QAAQ,eAAgB,EAAa,EAC5C,EAAO,QAAQ,UAAW,CACtB,KAAM,SACN,KAAM,0BACN,KAAM,SACN,QAAS,GACb,CAAC,CACL,CAAC,CACL,CAAC,EAKD,EAAO,MAAM,QAAS,QAAS,SAAU,EAAQ,CAC7C,EAAO,QAAQ,eAAgB,GAAW,GAAU,CAAC,CAAC,EACtD,EAAO,QAAQ,kBAAmB,WAAW,CACjD,CAAC,EACD,EAAO,MAAM,WAAY,OAAQ,SAAU,EAAQ,EAAQ,CACvD,GAAS,aAAa,EAAQ,CAC1B,aAAc,EAAO,SAAW,eAChC,OAAQ,EAAO,MACnB,CAAC,CACL,CAAC,EACD,EAAO,MAAM,sBAAuB,aAAc,SAAU,EAAQ,EAAU,EAAQ,CAClF,GAAS,aAAa,EAAQ,CAChB,WACV,OAAQ,EAAO,SAAW,SAC1B,aAAc,EAAO,SAAW,eAChC,aAAc,EAAO,SAAW,eAChC,WAAY,EAAO,SAAW,aAC9B,WAAY,EAAO,SAAW,YAClC,CAAC,CACL,CAAC,EACD,EAAO,MAAM,iBAAkB,gBAAiB,SAAU,EAAQ,CAC9D,EAAO,QAAQ,eAAgB,GAAmB,CAC9C,MAAO,EAAO,MACd,KAAM,EAAO,IACjB,CAAC,CACL,CAAC,KCnOyB,EAkC1B,IAAI,GAAM,EAAK,OAAO,CAKlB,WAAY,SAAU,EAAU,CAC5B,KAAK,SAAW,GAChB,IAAuB,CAAC,EACxB,KAAK,aAAe,EAAS,cAAgB,KAC7C,KAAK,kBAAoB,EAAS,mBAAqB,KACvD,KAAK,UAAY,EAAS,WAAa,KACvC,KAAK,YAAc,EAAS,aAAe,KAC3C,KAAK,mBAAqB,EAAS,oBAAsB,KACzD,KAAK,oBAAsBC,GAAE,IAAI,EAAU,qBAAqB,GAAI,EAAS,qBAEzE,EAAS,QAAU,IAAA,IAAa,EAAS,QACzC,KAAK,MAAM,CAEnB,EAUA,MAAO,SAAU,EAAU,CAEvB,IAAI,EAAU,IAAIC,EAAAA,QAAE,SAAS,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,EACrD,GAAI,KAAK,SACL,OAAO,EAIX,EAAWD,EAAE,SAAS,GAAY,CAAC,EAAG,CAClC,MAAO,GACP,OAAQ,GACR,QAAS,EACb,CAAC,EAGD,IAAI,EAAc,GAAS,CACvB,KAAK,cAAc,EAEf,IACA,GAAe,IAAI,GAAU,CAAI,CAAC,EAClC,GAAY,KAAK,GAGrB,KAAK,SAAW,GAEZ,EAAS,QACT,KAAK,OAAO,EAGZ,EAAS,UACT,GAAA,QAAS,QAAQ,KAAK,EACtB,GAAA,QAAS,QAAQ,MAAM,CACnB,UAAW,EACf,CAAC,EAET,EAYA,OARI,EAAS,MACT,EAAU,GAAiB,CAAC,CACvB,KAAK,CAAU,EAEpB,EAAW,IAAI,EAGnB,KAAK,iBAAiB,EACf,CACX,EAKA,iBAAkB,UAAY,CAE1B,EAAO,IAAI,KAAM,KAAM,IAAI,EAE3B,EAAO,GAAG,eAAgB,KAAK,WAAY,IAAI,EAC/C,EAAO,GAAG,YAAa,KAAK,YAAa,IAAI,EAC7C,EAAO,GAAG,eAAgB,KAAK,eAAgB,IAAI,EACnD,EAAO,GAAG,oBAAqB,KAAK,oBAAqB,IAAI,EAC7D,EAAO,GAAG,UAAW,KAAK,MAAO,IAAI,EACrC,EAAO,GAAG,UAAW,KAAK,MAAO,IAAI,CACzC,EAMA,cAAe,UAAY,CACvB,KAAK,WAAa,IAAI,GAAiB,CACnC,WAAY,KACZ,UAAW,KAAK,UAChB,YAAa,KAAK,YAClB,mBAAoB,KAAK,kBAC7B,CAAC,EAED,KAAK,cAAgB,IAAI,GAAoB,CACzC,WAAY,IAChB,CAAC,EAED,KAAK,WAAa,IAAI,GAAiB,CACnC,WAAY,KACZ,aAAc,KAAK,aACnB,kBAAmB,KAAK,iBAC5B,CAAC,EAED,KAAK,iBAAmB,IAAI,GAAiB,CAC5B,eACb,WAAY,IAChB,CAAC,EAED,KAAK,gBAAkB,CAAC,EACxB,KAAK,gBAAgB,GAAO,SAAW,KAAK,eAC5C,KAAK,gBAAgB,GAAO,OAAS,KAAK,YAC9C,EAEA,QAAS,UAET,eAAgB,CACZ,KAAM,UAAY,CACd,KAAK,EAAE,yEAAyE,CAAC,CAAC,KAAK,EACvF,KAAK,EAAE,uBAAuB,CAAC,CAAC,SAAS,kBAAkB,CAC/D,EAEA,KAAM,UAAY,CACd,KAAK,EAAE,yEAAyE,CAAC,CAAC,KAAK,EACvF,KAAK,EAAE,uBAAuB,CAAC,CAAC,YAAY,kBAAkB,CAClE,CACJ,EAEA,aAAc,CACV,KAAM,UAAY,CACd,KAAK,EAAE,uBAAuB,CAAC,CAAC,SAAS,gBAAgB,CAC7D,EAEA,KAAM,UAAY,CACd,KAAK,EAAE,uBAAuB,CAAC,CAAC,YAAY,gBAAgB,CAChE,CACJ,EAEA,OAAQ,UAAY,CACX,QAAK,SAUV,OAPA,KAAK,IAAI,KAAKE,GAAe,CAAC,EAE9B,KAAK,cAAc,WAAW,KAAK,EAAE,yBAAyB,CAAC,CAAC,CAAC,OAAO,EACxE,KAAK,WAAW,WAAW,KAAK,EAAE,yBAAyB,CAAC,CAAC,CAAC,OAAO,EACrE,KAAK,WAAW,WAAW,KAAK,EAAE,yBAAyB,CAAC,CAAC,CAAC,OAAO,EACrE,KAAK,iBAAiB,WAAW,KAAK,EAAE,2BAA2B,CAAC,CAAC,CAAC,OAAO,EAEtE,IACX,EAQA,WAAY,SAAU,EAAM,EAAU,EAAM,CA8CxC,OA7CA,KAAK,cAAc,cAAc,EAEjC,IAAuB,CAAC,EACxB,IAAe,CAAC,EAEZ,EAAK,OACD,KAAK,UAAY,EAAK,SAClBF,EAAE,IAAI,KAAK,gBAAiB,EAAK,MAAM,GAEvC,KAAK,gBAAgB,KAAK,QAAQ,CAAC,KAAK,KAAK,KAAM,CAAI,EACvD,KAAK,QAAU,EAAK,OACpB,KAAK,gBAAgB,KAAK,QAAQ,CAAC,KAAK,KAAK,KAAM,CAAI,GAEvD,QAAQ,MAAM,0CAA4C,EAAK,MAAM,GAGtE,KAAK,UAAY,GAAO,UAE/B,KAAK,gBAAgB,KAAK,QAAQ,CAAC,KAAK,KAAK,KAAM,CAAI,EACvD,KAAK,QAAU,GAAO,QACtB,KAAK,gBAAgB,KAAK,QAAQ,CAAC,KAAK,KAAK,KAAM,CAAI,GAGvD,GACI,KAAK,UACL,KAAK,SAAS,QAAQ,EAG1B,EAAWA,EAAE,OAAO,EAAU,CAC1B,GAAI,KAAK,EAAE,uBAAuB,EAClC,WAAY,KACZ,UAAW,KAAK,SACpB,CAAC,EAKD,KAAK,SAAW,IAAI,EAAK,CAAQ,EAE7B,EAAK,WACL,KAAK,SAAS,OAAO,GAGzB,QAAQ,MAAM,iBAAiB,EAE5B,IACX,EAMA,kBAAmB,UAAY,CAK3B,OAJIG,GAAe,IACf,EAAA,EAAA,QAAA,CAAE,QAAQ,CAAC,CAAC,YAAY,OAAO,EACxB,IAEJ,EACX,EAKA,YAAa,UAAY,CACjB,KAAK,kBAAkB,IAG3B,AACI,KAAK,YAAY,IAAI,GAAU,CAC3B,GAAI,KAAK,EAAE,qBAAqB,EAChC,WAAY,KACZ,mBAAoB,KAAK,mBACzB,oBAAqB,KAAK,mBAC9B,CAAC,EAEL,KAAK,UAAU,OAAO,EAC1B,EAEA,eAAgB,UAAY,CACpB,KAAK,kBAAkB,IAG3B,AACI,KAAK,eAAe,IAAI,GAAa,CACjC,GAAI,KAAK,EAAE,qBAAqB,EAChC,WAAY,IAChB,CAAC,EAEL,KAAK,aAAa,OAAO,EAC7B,EAEA,oBAAqB,UAAY,CACzB,KAAK,kBAAkB,IAG3B,AACI,KAAK,oBAAoB,IAAI,GAAkB,CAC3C,GAAI,KAAK,EAAE,qBAAqB,EAChC,WAAY,KACZ,mBAAoB,KAAK,kBAC7B,CAAC,EAEL,KAAK,kBAAkB,OAAO,EAClC,EAWA,MAAO,SAAU,EAAS,CACtB,IAAI,GAAA,EAAA,EAAA,QAAA,CAAOC,GAAc,CACrB,KAAM,EAAQ,KACd,KAAM,EAAQ,MAAQ,OACtB,KAAM,EAAQ,IAClB,CAAC,CAAC,GACF,EAAA,EAAA,QAAA,CAAE,qBAAqB,CAAC,CAAC,OAAO,CAAE,EAClC,EAAG,OAAO,GAAG,EAET,EAAQ,UAAY,IAAA,KACpB,EAAQ,QAAU,KAElB,EAAQ,QAAU,GAClB,OAAO,WAAW,UAAY,CAC1B,EAAG,QAAQ,IAAK,UAAY,EACxB,EAAA,EAAA,QAAA,CAAE,IAAI,CAAC,CAAC,OAAO,CACnB,CAAC,CACL,EAAG,EAAQ,OAAO,CAE1B,EAMA,MAAO,UAAY,CACf,IAAI,EAAQ,GAAWC,GAAAA,QAAS,QAAQ,QAAQ,CAAC,CAAC,KAClD,GAAA,QAAS,QAAQ,SAAW,KAC5B,GAAY,MAAM,EAEdF,GAAe,GACf,GAAY,KAAK,EACjB,EAAO,SAAS,EAAO,CAAE,QAAS,EAAK,CAAC,GAExC,EAAO,SAAS,IAAK,CAAE,QAAS,EAAK,CAAC,CAE9C,CACJ,CAAC,wjBGpWD,SAASG,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAyBhC,OAvBD,SAAU,EAAW,EAAU,EAAS,CACvC,EAAW,EAAW,wDAAmFF,GAAiC,GAAa,EAAe,EAAK,WAC7K,EACJ,GAAsB,wLAGtB,GAAsB,gHAEtB,EAAW,EAAW,8DAAwGA,GAAiC,GAAW,EAAe,EAAK,WAC1L,EACJ,GAAsB,sLAGtB,GAAsB,8GAEtB,GAAsB,QAClB,EAAA,CAAE,KAAK,KAAM,cAAe,EACxB,EAAgB,UAChB,OAAO,UAAc,IAAc,UAAY,IAAA,GAAW,aAAc,EACxE,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,GAAW,YAAa,EACrE,EAAgB,QAChB,OAAO,QAAY,IAAc,QAAU,IAAA,EAAS,EAC/C,CAAS,IC3BI,EAgB1B,IAAI,GAAsB,EAAK,OAAO,CAelC,WAAY,SAAU,EAAU,CAC5B,KAAK,gBAAkB,EAAS,iBAAmB,GACnD,KAAK,cAAgB,EAAS,eAAiB,GAC/C,KAAK,SAAWG,GAAE,IAAI,EAAU,UAAU,GAAI,EAAS,SACvD,KAAK,UAAY,EAAS,WAAa,aACvC,KAAK,QAAU,EAAS,SAAW,UACvC,EAEA,OAAQ,UAAY,CAChB,KAAK,IAAI,KAAKC,GAA4B,CACtC,SAAU,KAAK,SACf,UAAW,KAAK,UAChB,QAAS,KAAK,OAClB,CAAC,CAAC,EAKF,IAAI,EAAU,CACV,UAAW,GACX,gBAAiB,GACjB,MAAO,CACH,KAAM,aACN,KAAM,gBACN,GAAI,eACJ,KAAM,iBACN,SAAU,iBACV,KAAM,kBACN,MAAO,aACP,MAAO,cACP,MAAO,aACX,CACJ,EAkBA,MAjBA,GAAQ,WAAa,MACrB,EAAQ,YAAc,KAAK,gBAC3B,KAAK,EAAE,yBAAyB,CAAC,CAAC,eAAe,CAAO,EAExD,EAAQ,WAAa,GACrB,EAAQ,YAAc,KAAK,cAC3B,KAAK,EAAE,uBAAuB,CAAC,CAAC,eAAe,CAAO,EAEtD,KAAK,EAAE,yBAAyB,CAAC,CAAC,GAAG,YAAc,GAAM,CAErD,KADkB,QAAQ,uBACrB,CAAC,CAAC,QAAQ,EAAE,IAAI,CACzB,CAAC,EACD,KAAK,EAAE,uBAAuB,CAAC,CAAC,GAAG,YAAc,GAAM,CAEnD,KADkB,QAAQ,yBACrB,CAAC,CAAC,QAAQ,EAAE,IAAI,CACzB,CAAC,EAEM,IACX,EASA,YAAa,SAAU,EAAM,CACzB,KAAK,SAAS,0BAA2B,CAAI,CACjD,EASA,UAAW,SAAU,EAAM,CACvB,KAAK,SAAS,wBAAyB,CAAI,CAC/C,EAOA,SAAU,SAAU,EAAI,EAAM,CAC1B,IAAI,EAAS,KAAK,QAAQ,CAAE,EAC5B,GAAID,EAAE,QAAQ,CAAI,EACd,EAAO,MAAM,OACV,GAAIA,EAAE,SAAS,CAAI,EAAG,CACzB,IAAI,EAAYE,EAAO,IAAI,CAAI,CAAC,CAAC,MAAM,EACvC,EAAO,KAAK,CAAS,CACzB,MACI,EAAO,KAAK,CAAI,CAExB,EAMA,SAAU,UAAY,CAClB,OAAO,KAAK,MAAM,yBAAyB,CAC/C,EAMA,OAAQ,UAAY,CAChB,OAAO,KAAK,MAAM,uBAAuB,CAC7C,EAMA,eAAgB,UAAY,CACxB,OAAO,KAAK,YAAY,yBAAyB,CACrD,EAMA,aAAc,UAAY,CACtB,OAAO,KAAK,YAAY,uBAAuB,CACnD,EAEA,QAAS,SAAU,EAAI,CAEnB,OADa,KAAK,EAAE,CAAE,CAAC,CAAC,KAAK,gBACjB,CAChB,EAEA,MAAO,SAAU,EAAI,CAEjB,IAAI,EADS,KAAK,QAAQ,CACV,CAAC,CAAC,KAAK,EAKvB,OAJI,IAAS,OACT,EAAOA,EAAO,CAAI,EAClB,EAAK,IAAI,GAEN,CACX,EAEA,YAAa,SAAU,EAAI,CACvB,IAAI,EAAO,KAAK,MAAM,CAAE,EAIxB,OAHI,IAAS,KACF,GAEJ,EAAK,OAAO,CACvB,CACJ,CAAC,ECjLD,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAClC,EAAmB,GAAU,CAAC,EAYhC,OAVD,SAAU,EAAU,CACf,EACV,GAAsB,qLAGtB,GAAsB,qGAElB,EAAA,CAAE,KAAK,KAAM,aAAc,EACvB,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,EAAS,EACjD,CAAS,ICbI,EAe1B,IAAI,GAAiB,EAAK,OAAO,CAS7B,WAAY,SAAU,EAAU,CAC5B,KAAK,YAAc,EAAS,aAAe,GAC3C,KAAK,SAAWC,GAAE,IAAI,EAAU,UAAU,GAAI,EAAS,QAC3D,EAEA,OAAQ,UAAY,CAuBhB,OAtBA,KAAK,IAAI,KAAKC,GAAuB,CACjC,SAAU,KAAK,QACnB,CAAC,CAAC,EAEF,KAAK,EAAE,oBAAoB,CAAC,CAAC,eAAe,CACxC,UAAW,GACX,gBAAiB,GACjB,WAAY,MACZ,MAAO,CACH,KAAM,aACN,KAAM,gBACN,GAAI,eACJ,KAAM,iBACN,SAAU,iBACV,KAAM,kBACN,MAAO,aACP,MAAO,cACP,MAAO,aACX,EACA,YAAa,KAAK,WACtB,CAAC,EAEM,IACX,EASA,QAAS,SAAU,EAAM,CACrB,IAAI,EAAS,KAAK,QAAQ,EAC1B,GAAID,EAAE,QAAQ,CAAI,EACd,EAAO,MAAM,OACV,GAAIA,EAAE,SAAS,CAAI,EAAG,CACzB,IAAI,EAAYE,EAAO,IAAI,CAAI,CAAC,CAAC,MAAM,EACvC,EAAO,KAAK,CAAS,CACzB,MACI,EAAO,KAAK,CAAI,CAExB,EAMA,KAAM,UAAY,CAEd,IAAI,EADS,KAAK,QACF,CAAC,CAAC,KAAK,EAKvB,OAJI,IAAS,OACT,EAAOA,EAAO,CAAI,EAClB,EAAK,IAAI,GAEN,CACX,EAMA,WAAY,UAAY,CACpB,IAAI,EAAO,KAAK,KAAK,EAIrB,OAHI,IAAS,KACF,GAEJ,EAAK,OAAO,CACvB,EAKA,QAAS,UAAY,CAEjB,OADa,KAAK,EAAE,oBAAoB,CAAC,CAAC,KAAK,gBACnC,CAChB,CACJ,CAAC,EC3GD,SAASC,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAEC,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAIA,GAAe,SAAS,SAASC,GAAS,EAAQ,CAAC,IAAI,EAAW,GAC9D,EAAmB,GAAU,CAAC,EAOhC,OALD,SAAU,EAAY,CACrB,EAAW,EAAW,4QAA4eF,GAAiC,GAAc,EAAe,EAAK,kBACvkB,EAAA,CAAE,KAAK,KAAM,eAAgB,EACzB,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,CCAtB,IAAI,GAA+B,EAAK,OAAO,CAC3C,OAAQ,CACJ,+BAAgC,UAAY,CACxC,EAAO,SAAS,QAAS,CAAE,QAAS,EAAK,CAAC,CAC9C,EACA,yBAA0B,UAAY,CAClC,EAAO,SAAS,UAAW,CAAE,QAAS,EAAK,CAAC,CAChD,CACJ,EAEA,WAAY,SAAU,EAAU,CAC5B,KAAK,WAAa,EAAS,UAC/B,EAEA,OAAQ,UAAY,CAKhB,OAJA,KAAK,IAAI,KAAKG,GAA+B,CACzC,WAAY,KAAK,UACrB,CAAC,CAAC,EAEK,IACX,CACJ,CAAC,EC9BD,SAAS,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAS,GAAN,MAAS,CAAC,IAAc,IAAV,SAAuB,IAAV,SAAa,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAiB,IAAX,UAA2B,IAAb,YAA4B,OAAO,EAAE,QAArB,aAA8B,EAAE,EAAE,OAAO,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,UAAU,CAAC,EAAE,GAAQ,EAAE,QAAQ,GAAG,IAAlB,KAAsB,IAAI,EAAE,GAAW,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAC5W,SAAS,GAAY,EAAE,EAAE,CAAC,OAAO,MAAM,QAAQ,CAAC,EAAE,GAAkB,EAAE,CAAC,EAAE,GAAa,OAAO,GAAjB,SAAmB,GAAmB,CAAC,EAAE,GAAG,EAAE,CAC1H,SAAS,GAAkB,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,KAAK,EAAE,GAAY,EAAE,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,GAAW,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CACpK,SAAS,GAAmB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,GAAG,EAAE,IAAI,GAAqB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAC7H,SAAS,GAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAe,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAArB,CAAwB,IAAK,IAAG,EAAE,SAAS,MAAM,IAAK,IAAG,EAAE,QAAQ,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,IAAK,IAAG,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAqB,EAAnB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAG,CAC5U,IAAI,GAAqB,OAAO,UAAU,eACtC,GAAe,SACnB,SAAS,GAAU,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,GAAa,OAAO,GAAjB,SAAmB,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,GAAqB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,GAAS,EAAQ,CAAC,IAAI,EAAW,GAChM,EAAmB,GAAU,CAAC,EA6DhC,OA3DD,SAAU,EAAU,EAAQ,EAAU,EAAY,CACjD,GAAsB,6EAE1B,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAU,EAAM,GAC5B,EAAW,EAAW,QAAe,GAAS,QAAS,GAAY,CAAC,qBAAqB,EAAQ,KAAK,EAAG,CAAC,GAAM,EAAI,CAAC,EAAG,GAAO,EAAK,EAAE,GAAS,QAAS,EAAQ,QAAS,GAAM,EAAK,EAAE,GAAS,QAAS,GAAU,SAAS,EAAQ,KAAK,WAAW,EAAQ,MAAM,IAAI,EAAQ,OAAO,EAAG,GAAM,EAAK,GAAK,SACjS,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAU,EAAM,GAC1B,EAAW,EAAW,QAAe,GAAS,QAAS,GAAY,CAAC,qBAAqB,EAAQ,KAAK,EAAG,CAAC,GAAM,EAAI,CAAC,EAAG,GAAO,EAAK,EAAE,GAAS,QAAS,EAAQ,QAAS,GAAM,EAAK,EAAE,GAAS,QAAS,GAAU,SAAS,EAAQ,KAAK,WAAW,EAAQ,MAAM,IAAI,EAAQ,OAAO,EAAG,GAAM,EAAK,GAAK,SACnS,CACF,CACF,EAAA,CAAG,KAAK,IAAI,GAGV,UAAU,CACV,IAAI,EAAQ,EACZ,GAAgB,OAAO,EAAM,QAAzB,SACA,IAAK,IAAI,EAAa,EAAG,EAAM,EAAM,OAAQ,EAAa,EAAK,IAAc,CAC3E,IAAI,EAAQ,EAAM,GAC1B,EAAW,EAAW,QAAe,GAAS,QAAS,GAAY,CAAC,mBAAmB,EAAM,KAAK,EAAG,CAAC,GAAM,EAAI,CAAC,EAAG,GAAO,EAAK,EAAE,GAAS,QAAS,EAAM,QAAS,GAAM,EAAK,EAAE,GAAS,QAAS,GAAU,cAAc,EAAM,KAAK,YAAY,EAAM,OAAO,EAAG,GAAM,EAAK,GAAK,SAC3Q,KACG,CACL,IAAI,EAAM,EACV,IAAK,IAAI,KAAc,EAAO,CAC5B,IACA,IAAI,EAAQ,EAAM,GACxB,EAAW,EAAW,QAAe,GAAS,QAAS,GAAY,CAAC,mBAAmB,EAAM,KAAK,EAAG,CAAC,GAAM,EAAI,CAAC,EAAG,GAAO,EAAK,EAAE,GAAS,QAAS,EAAM,QAAS,GAAM,EAAK,EAAE,GAAS,QAAS,GAAU,cAAc,EAAM,KAAK,YAAY,EAAM,OAAO,EAAG,GAAM,EAAK,GAAK,SAC7Q,CACF,CACF,EAAA,CAAG,KAAK,IAAI,EAEZ,GAAsB,UAClB,IAAe,IAAA,IAAa,IAAa,IAAA,MAC7C,GAAsB,4CAClB,IAAe,IAAA,KACnB,EAAW,EAAW,uCAAsD,GAAiC,GAAc,EAAe,EAAK,UAE3I,IAAa,IAAA,KACjB,EAAW,EAAW,qCAAoD,GAAiC,GAAY,EAAe,EAAK,UAE3I,GAAsB,UAEtB,GAAsB,QAClB,EAAA,CAAE,KAAK,KAAM,aAAc,EACvB,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,GAAW,WAAY,EACpE,EAAgB,OAChB,OAAO,OAAW,IAAc,OAAS,IAAA,GAAW,aAAc,EAClE,EAAgB,SAChB,OAAO,SAAa,IAAc,SAAW,IAAA,GAAW,eAAgB,EACxE,EAAgB,WAChB,OAAO,WAAe,IAAc,WAAa,IAAA,EAAS,EACrD,CAAS,ICrEI,EAuB1B,IAAI,GAAiB,EAAK,OAAO,CAoC7B,WAAY,SAAU,EAAU,CAC5B,KAAK,UAAY,EAAS,UAC1B,KAAK,QAAU,EAAS,QACxB,KAAK,SAAW,EAAS,UAAY,CAAC,EACtC,KAAK,OAAS,EAAS,QAAU,CAAC,EAClC,KAAK,QAAU,CAAC,CAAC,EAAS,QAC1B,KAAK,WAAa,EAAS,WAC3B,KAAK,SAAW,EAAS,SACzB,KAAK,oBAAsB,EAAS,qBAAuB,oBAC3D,KAAK,kBAAoB,EAAS,mBAAqB,kBAEvD,KAAK,aAAa,CACtB,EAGA,aAAc,UAAY,CAMtB,GALK,KAAK,UACN,KAAK,UAAY,IAAI,KAAK,KAAK,SAAS,EACxC,KAAK,QAAU,IAAI,KAAK,KAAK,OAAO,GAGpC,KAAK,SAAW,KAAK,UAAW,CAChC,QAAQ,MAAM,qDAAqD,EACnE,KAAK,mBAAqB,CAAC,EAC3B,KAAK,iBAAmB,CAAC,EACzB,MACJ,CAEA,IAAI,EAAQ,KAAK,QAAU,KAAK,UAEhC,KAAK,mBAAqBC,EAAE,IAAI,KAAK,SAAU,SAAU,EAAS,CAC9D,IAAI,EAAQ,KAAK,QAAU,EAAQ,MAAQ,IAAI,KAAK,EAAQ,KAAK,EAC7D,EAAM,KAAK,QAAU,EAAQ,IAAM,IAAI,KAAK,EAAQ,GAAG,EACvD,EAAU,EAAQ,MAAQ,CAAC,EAAQ,KAAK,EAAI,CAAC,KAAK,mBAAmB,EACrE,EAAQ,EAAQ,MAAQ,qBAAqB,EAAQ,QAAU,GAEnE,MAAO,CACH,MAAO,EAAQ,KAAK,GAAG,EACvB,MAAO,KAAO,EAAQ,KAAK,WAAa,EAAA,CAAO,QAAQ,CAAC,EAAI,IAC5D,OAAQ,KAAO,EAAM,GAAS,EAAA,CAAO,QAAQ,CAAC,EAAI,IAClD,QAAS,KAAK,gBAAgB,EAAS,CACnC,MAAO,KAAK,QAAU,EAAM,GAAS,EAAM,GAAS,GACxD,CAAC,EACD,OACJ,CACJ,EAAG,IAAI,EAEP,KAAK,iBAAmBA,EAAE,IAAI,KAAK,OAAQ,SAAU,EAAO,CACxD,IAAI,EAAO,KAAK,QAAU,EAAM,KAAO,IAAI,KAAK,EAAM,IAAI,EACtD,EAAU,EAAM,MAAQ,CAAC,EAAM,KAAK,EAAI,CAAC,KAAK,iBAAiB,EAC/D,EAAQ,EAAM,MAAQ,qBAAqB,EAAM,QAAU,GAE/D,MAAO,CACH,MAAO,EAAQ,KAAK,GAAG,EACvB,MAAO,KAAO,EAAO,KAAK,WAAa,EAAA,CAAO,QAAQ,CAAC,EAAI,IAC3D,QAAS,KAAK,cAAc,EAAO,CACzB,MACV,CAAC,EACD,OACJ,CACJ,EAAG,IAAI,CACX,EAEA,gBAAiB,SAAU,EAAS,EAAM,CAKtC,OAJK,EAAQ,QAIN,EAAQ,QAAQ,QAAQ,KAAM,EAAK,KAAK,EAHpC,IAIf,EAEA,cAAe,SAAU,EAAO,EAAM,CAQ9B,OAPC,EAAM,QAIP,KAAK,QACE,EAAM,QAAQ,QAAQ,KAAM,EAAK,IAAI,EAErC,EAAM,QAAQ,QAAQ,KAAM,EAAK,KAAK,YAAY,CAAC,EANnD,IAQf,EAEA,OAAQ,UAAY,CAQhB,OAPA,KAAK,IAAI,KAAKC,GAAiB,CAC3B,SAAU,KAAK,mBACf,OAAQ,KAAK,iBACb,WAAY,KAAK,WACjB,SAAU,KAAK,QACnB,CAAC,CAAC,EAEK,IACX,CACJ,CAAC,shCGtJa,YAqDV,EAAA,EAAA,QACA,EAAA,EACA,SAAA,GAAA,QACA,OAAA,EACA,2BArCgC,EAAiB,EAA2B,SACrE,IAAI,SAAS,EAAS,IAAW,EACpC,EAAA,EAAA,QAAA,KAAQ,CACJ,GAAgB,CAAO,EACvB,EAAO,QAAQ,kBAAkB,EACjC,GAAiB,CACb,IAAK,yBACL,OAAQ,KACZ,CAAC,CAAC,CAAC,KAAM,GAAc,CACnB,GAAuB,CAAI,EAC3B,IAAM,EAAM,IAAI,GAAU,CACtB,KACA,WAAY,KACZ,aAAc,EAAK,8BACnB,kBAAmB,EAAK,uBACxB,UAAW,EAAK,mBAChB,YAAa,EAAK,qBAClB,mBAAoB,EAAK,4BACzB,oBAAqB,EAAK,6BAC9B,CAAC,EACD,EAAI,OAAO,EACX,SAAS,MAAQ,EAAK,mBACtB,EAAO,QAAQ,kBAAmB,CAAG,EACrC,EAAQ,CAAG,CACf,CAAC,CAAC,CAAC,KAAM,GAAc,CACnB,EAAO,QAAQ,UAAW,CAAI,EAC9B,EAAW,MAAM,iDAAiD,CAAC,CACvE,CAAC,CACL,CAAC,CACL,CAAC,EASD,KAAA,GACA,YAAA,GACA,UAAA,GACA,OAAA,GACA,OAAA,EACA,KAAA,GACA,OAAA,GACA,QAAS,CAAC,EACV,YAAA,GACA,KAAA,GACA,SACA,UAAA,GACA,QAAA,KACA,MAAA"}