{"id":25517702,"url":"https://github.com/manuel-lohmus/ws13","last_synced_at":"2025-10-28T20:49:05.361Z","repository":{"id":269486534,"uuid":"907544137","full_name":"manuel-lohmus/ws13","owner":"manuel-lohmus","description":"A simple and easy-to-use WebSocket protocol implementation","archived":false,"fork":false,"pushed_at":"2025-02-27T20:45:01.000Z","size":313,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T19:39:29.665Z","etag":null,"topics":["communication","real-time","websocket","websockets-server","ws","ws13"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/manuel-lohmus.png","metadata":{"files":{"readme":"README.html","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-23T20:42:17.000Z","updated_at":"2025-02-27T20:45:04.000Z","dependencies_parsed_at":"2025-02-19T15:49:55.539Z","dependency_job_id":null,"html_url":"https://github.com/manuel-lohmus/ws13","commit_stats":null,"previous_names":["manuel-lohmus/ws13"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuel-lohmus%2Fws13","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuel-lohmus%2Fws13/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuel-lohmus%2Fws13/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuel-lohmus%2Fws13/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manuel-lohmus","download_url":"https://codeload.github.com/manuel-lohmus/ws13/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248312208,"owners_count":21082638,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["communication","real-time","websocket","websockets-server","ws","ws13"],"created_at":"2025-02-19T15:37:15.520Z","updated_at":"2025-10-28T20:49:05.349Z","avatar_url":"https://github.com/manuel-lohmus.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\n\u003chead\u003e\n    \u003cmeta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\"\u003e\n    \u003ctitle\u003eREADME\u003c/title\u003e\n    \u003cstyle\u003e\n        :root {\n            --markdown-font-family: -apple-system, BlinkMacSystemFont, \"Segoe WPC\", \"Segoe UI\", system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif;\n            --markdown-font-size: 14px;\n            --markdown-line-height: 1.6;\n            --vscode-font-family: \"Segoe WPC\", \"Segoe UI\", sans-serif;\n            --vscode-font-weight: normal;\n            --vscode-font-size: 13px;\n            --vscode-editor-font-family: Consolas, \"Courier New\", monospace;\n            --vscode-editor-font-weight: normal;\n            --vscode-editor-font-size: 14px;\n            --vscode-foreground: #616161;\n            --vscode-errorForeground: #a1260d;\n            --vscode-descriptionForeground: #717171;\n            --vscode-icon-foreground: #424242;\n            --vscode-focusBorder: #0090f1;\n            --vscode-textSeparator-foreground: rgba(0, 0, 0, 0.18);\n            --vscode-textLink-foreground: #006ab1;\n            --vscode-textLink-activeForeground: #006ab1;\n            --vscode-textPreformat-foreground: #a31515;\n            --vscode-textBlockQuote-background: rgba(127, 127, 127, 0.1);\n            --vscode-textBlockQuote-border: rgba(0, 122, 204, 0.5);\n            --vscode-textCodeBlock-background: rgba(220, 220, 220, 0.4);\n            --vscode-widget-shadow: #a8a8a8;\n            --vscode-input-background: #ffffff;\n            --vscode-input-foreground: #616161;\n            --vscode-inputOption-activeBorder: rgba(0, 122, 204, 0);\n            --vscode-inputOption-activeBackground: rgba(0, 144, 241, 0.2);\n            --vscode-inputOption-activeForeground: #000000;\n            --vscode-input-placeholderForeground: #767676;\n            --vscode-inputValidation-infoBackground: #d6ecf2;\n            --vscode-inputValidation-infoBorder: #007acc;\n            --vscode-inputValidation-warningBackground: #f6f5d2;\n            --vscode-inputValidation-warningBorder: #b89500;\n            --vscode-inputValidation-errorBackground: #f2dede;\n            --vscode-inputValidation-errorBorder: #be1100;\n            --vscode-dropdown-background: #ffffff;\n            --vscode-dropdown-border: #cecece;\n            --vscode-checkbox-background: #ffffff;\n            --vscode-checkbox-border: #cecece;\n            --vscode-button-foreground: #ffffff;\n            --vscode-button-background: #007acc;\n            --vscode-button-hoverBackground: #0062a3;\n            --vscode-button-secondaryForeground: #ffffff;\n            --vscode-button-secondaryBackground: #5f6a79;\n            --vscode-button-secondaryHoverBackground: #4c5561;\n            --vscode-badge-background: #c4c4c4;\n            --vscode-badge-foreground: #333333;\n            --vscode-scrollbar-shadow: #dddddd;\n            --vscode-scrollbarSlider-background: rgba(100, 100, 100, 0.4);\n            --vscode-scrollbarSlider-hoverBackground: rgba(100, 100, 100, 0.7);\n            --vscode-scrollbarSlider-activeBackground: rgba(0, 0, 0, 0.6);\n            --vscode-progressBar-background: #0e70c0;\n            --vscode-editorError-foreground: #e51400;\n            --vscode-editorWarning-foreground: #e9a700;\n            --vscode-editorInfo-foreground: #75beff;\n            --vscode-editorHint-foreground: #6c6c6c;\n            --vscode-editor-background: #ffffff;\n            --vscode-editor-foreground: #000000;\n            --vscode-editorWidget-background: #f3f3f3;\n            --vscode-editorWidget-foreground: #616161;\n            --vscode-editorWidget-border: #c8c8c8;\n            --vscode-quickInput-background: #f3f3f3;\n            --vscode-quickInput-foreground: #616161;\n            --vscode-quickInputTitle-background: rgba(0, 0, 0, 0.06);\n            --vscode-pickerGroup-foreground: #0066bf;\n            --vscode-pickerGroup-border: #cccedb;\n            --vscode-editor-selectionBackground: #add6ff;\n            --vscode-editor-inactiveSelectionBackground: #e5ebf1;\n            --vscode-editor-selectionHighlightBackground: rgba(173, 214, 255, 0.5);\n            --vscode-editor-findMatchBackground: #a8ac94;\n            --vscode-editor-findMatchHighlightBackground: rgba(234, 92, 0, 0.33);\n            --vscode-editor-findRangeHighlightBackground: rgba(180, 180, 180, 0.3);\n            --vscode-searchEditor-findMatchBackground: rgba(234, 92, 0, 0.22);\n            --vscode-editor-hoverHighlightBackground: rgba(173, 214, 255, 0.15);\n            --vscode-editorHoverWidget-background: #f3f3f3;\n            --vscode-editorHoverWidget-foreground: #616161;\n            --vscode-editorHoverWidget-border: #c8c8c8;\n            --vscode-editorHoverWidget-statusBarBackground: #e7e7e7;\n            --vscode-editorLink-activeForeground: #0000ff;\n            --vscode-editorLightBulb-foreground: #ddb100;\n            --vscode-editorLightBulbAutoFix-foreground: #007acc;\n            --vscode-diffEditor-insertedTextBackground: rgba(155, 185, 85, 0.2);\n            --vscode-diffEditor-removedTextBackground: rgba(255, 0, 0, 0.2);\n            --vscode-diffEditor-diagonalFill: rgba(34, 34, 34, 0.2);\n            --vscode-list-focusBackground: #d6ebff;\n            --vscode-list-activeSelectionBackground: #0074e8;\n            --vscode-list-activeSelectionForeground: #ffffff;\n            --vscode-list-inactiveSelectionBackground: #e4e6f1;\n            --vscode-list-hoverBackground: #e8e8e8;\n            --vscode-list-dropBackground: #d6ebff;\n            --vscode-list-highlightForeground: #0066bf;\n            --vscode-list-invalidItemForeground: #b89500;\n            --vscode-list-errorForeground: #b01011;\n            --vscode-list-warningForeground: #855f00;\n            --vscode-listFilterWidget-background: #efc1ad;\n            --vscode-listFilterWidget-outline: rgba(0, 0, 0, 0);\n            --vscode-listFilterWidget-noMatchesOutline: #be1100;\n            --vscode-list-filterMatchBackground: rgba(234, 92, 0, 0.33);\n            --vscode-tree-indentGuidesStroke: #a9a9a9;\n            --vscode-list-deemphasizedForeground: #8e8e90;\n            --vscode-menu-foreground: #616161;\n            --vscode-menu-background: #ffffff;\n            --vscode-menu-selectionForeground: #ffffff;\n            --vscode-menu-selectionBackground: #0074e8;\n            --vscode-menu-separatorBackground: #888888;\n            --vscode-editor-snippetTabstopHighlightBackground: rgba(10, 50, 100, 0.2);\n            --vscode-editor-snippetFinalTabstopHighlightBorder: rgba(10, 50, 100, 0.5);\n            --vscode-breadcrumb-foreground: rgba(97, 97, 97, 0.8);\n            --vscode-breadcrumb-background: #ffffff;\n            --vscode-breadcrumb-focusForeground: #4e4e4e;\n            --vscode-breadcrumb-activeSelectionForeground: #4e4e4e;\n            --vscode-breadcrumbPicker-background: #f3f3f3;\n            --vscode-merge-currentHeaderBackground: rgba(64, 200, 174, 0.5);\n            --vscode-merge-currentContentBackground: rgba(64, 200, 174, 0.2);\n            --vscode-merge-incomingHeaderBackground: rgba(64, 166, 255, 0.5);\n            --vscode-merge-incomingContentBackground: rgba(64, 166, 255, 0.2);\n            --vscode-merge-commonHeaderBackground: rgba(96, 96, 96, 0.4);\n            --vscode-merge-commonContentBackground: rgba(96, 96, 96, 0.16);\n            --vscode-editorOverviewRuler-currentContentForeground: rgba(64, 200, 174, 0.5);\n            --vscode-editorOverviewRuler-incomingContentForeground: rgba(64, 166, 255, 0.5);\n            --vscode-editorOverviewRuler-commonContentForeground: rgba(96, 96, 96, 0.4);\n            --vscode-editorOverviewRuler-findMatchForeground: rgba(209, 134, 22, 0.49);\n            --vscode-editorOverviewRuler-selectionHighlightForeground: rgba(160, 160, 160, 0.8);\n            --vscode-minimap-findMatchHighlight: #d18616;\n            --vscode-minimap-selectionHighlight: #add6ff;\n            --vscode-minimap-errorHighlight: rgba(255, 18, 18, 0.7);\n            --vscode-minimap-warningHighlight: #e9a700;\n            --vscode-minimapSlider-background: rgba(100, 100, 100, 0.2);\n            --vscode-minimapSlider-hoverBackground: rgba(100, 100, 100, 0.35);\n            --vscode-minimapSlider-activeBackground: rgba(0, 0, 0, 0.3);\n            --vscode-problemsErrorIcon-foreground: #e51400;\n            --vscode-problemsWarningIcon-foreground: #e9a700;\n            --vscode-problemsInfoIcon-foreground: #75beff;\n            --vscode-editor-lineHighlightBorder: #eeeeee;\n            --vscode-editor-rangeHighlightBackground: rgba(253, 255, 0, 0.2);\n            --vscode-editor-symbolHighlightBackground: rgba(234, 92, 0, 0.33);\n            --vscode-editorCursor-foreground: #000000;\n            --vscode-editorWhitespace-foreground: rgba(51, 51, 51, 0.2);\n            --vscode-editorIndentGuide-background: #d3d3d3;\n            --vscode-editorIndentGuide-activeBackground: #939393;\n            --vscode-editorLineNumber-foreground: #237893;\n            --vscode-editorActiveLineNumber-foreground: #0b216f;\n            --vscode-editorLineNumber-activeForeground: #0b216f;\n            --vscode-editorRuler-foreground: #d3d3d3;\n            --vscode-editorCodeLens-foreground: #999999;\n            --vscode-editorBracketMatch-background: rgba(0, 100, 0, 0.1);\n            --vscode-editorBracketMatch-border: #b9b9b9;\n            --vscode-editorOverviewRuler-border: rgba(127, 127, 127, 0.3);\n            --vscode-editorGutter-background: #ffffff;\n            --vscode-editorUnnecessaryCode-opacity: rgba(0, 0, 0, 0.47);\n            --vscode-editorOverviewRuler-rangeHighlightForeground: rgba(0, 122, 204, 0.6);\n            --vscode-editorOverviewRuler-errorForeground: rgba(255, 18, 18, 0.7);\n            --vscode-editorOverviewRuler-warningForeground: #e9a700;\n            --vscode-editorOverviewRuler-infoForeground: #75beff;\n            --vscode-editorOverviewRuler-bracketMatchForeground: #a0a0a0;\n            --vscode-symbolIcon-arrayForeground: #616161;\n            --vscode-symbolIcon-booleanForeground: #616161;\n            --vscode-symbolIcon-classForeground: #d67e00;\n            --vscode-symbolIcon-colorForeground: #616161;\n            --vscode-symbolIcon-constantForeground: #616161;\n            --vscode-symbolIcon-constructorForeground: #652d90;\n            --vscode-symbolIcon-enumeratorForeground: #d67e00;\n            --vscode-symbolIcon-enumeratorMemberForeground: #007acc;\n            --vscode-symbolIcon-eventForeground: #d67e00;\n            --vscode-symbolIcon-fieldForeground: #007acc;\n            --vscode-symbolIcon-fileForeground: #616161;\n            --vscode-symbolIcon-folderForeground: #616161;\n            --vscode-symbolIcon-functionForeground: #652d90;\n            --vscode-symbolIcon-interfaceForeground: #007acc;\n            --vscode-symbolIcon-keyForeground: #616161;\n            --vscode-symbolIcon-keywordForeground: #616161;\n            --vscode-symbolIcon-methodForeground: #652d90;\n            --vscode-symbolIcon-moduleForeground: #616161;\n            --vscode-symbolIcon-namespaceForeground: #616161;\n            --vscode-symbolIcon-nullForeground: #616161;\n            --vscode-symbolIcon-numberForeground: #616161;\n            --vscode-symbolIcon-objectForeground: #616161;\n            --vscode-symbolIcon-operatorForeground: #616161;\n            --vscode-symbolIcon-packageForeground: #616161;\n            --vscode-symbolIcon-propertyForeground: #616161;\n            --vscode-symbolIcon-referenceForeground: #616161;\n            --vscode-symbolIcon-snippetForeground: #616161;\n            --vscode-symbolIcon-stringForeground: #616161;\n            --vscode-symbolIcon-structForeground: #616161;\n            --vscode-symbolIcon-textForeground: #616161;\n            --vscode-symbolIcon-typeParameterForeground: #616161;\n            --vscode-symbolIcon-unitForeground: #616161;\n            --vscode-symbolIcon-variableForeground: #007acc;\n            --vscode-editor-foldBackground: rgba(173, 214, 255, 0.3);\n            --vscode-editorGutter-foldingControlForeground: #424242;\n            --vscode-editor-onTypeRenameBackground: rgba(255, 0, 0, 0.3);\n            --vscode-editorSuggestWidget-background: #f3f3f3;\n            --vscode-editorSuggestWidget-border: #c8c8c8;\n            --vscode-editorSuggestWidget-foreground: #000000;\n            --vscode-editorSuggestWidget-selectedBackground: #d6ebff;\n            --vscode-editorSuggestWidget-highlightForeground: #0066bf;\n            --vscode-editor-wordHighlightBackground: rgba(87, 87, 87, 0.25);\n            --vscode-editor-wordHighlightStrongBackground: rgba(14, 99, 156, 0.25);\n            --vscode-editorOverviewRuler-wordHighlightForeground: rgba(160, 160, 160, 0.8);\n            --vscode-editorOverviewRuler-wordHighlightStrongForeground: rgba(192, 160, 192, 0.8);\n            --vscode-peekViewTitle-background: #ffffff;\n            --vscode-peekViewTitleLabel-foreground: #333333;\n            --vscode-peekViewTitleDescription-foreground: rgba(97, 97, 97, 0.9);\n            --vscode-peekView-border: #007acc;\n            --vscode-peekViewResult-background: #f3f3f3;\n            --vscode-peekViewResult-lineForeground: #646465;\n            --vscode-peekViewResult-fileForeground: #1e1e1e;\n            --vscode-peekViewResult-selectionBackground: rgba(51, 153, 255, 0.2);\n            --vscode-peekViewResult-selectionForeground: #6c6c6c;\n            --vscode-peekViewEditor-background: #f2f8fc;\n            --vscode-peekViewEditorGutter-background: #f2f8fc;\n            --vscode-peekViewResult-matchHighlightBackground: rgba(234, 92, 0, 0.3);\n            --vscode-peekViewEditor-matchHighlightBackground: rgba(245, 216, 2, 0.87);\n            --vscode-editorMarkerNavigationError-background: #e51400;\n            --vscode-editorMarkerNavigationWarning-background: #e9a700;\n            --vscode-editorMarkerNavigationInfo-background: #75beff;\n            --vscode-editorMarkerNavigation-background: #ffffff;\n            --vscode-tab-activeBackground: #ffffff;\n            --vscode-tab-unfocusedActiveBackground: #ffffff;\n            --vscode-tab-inactiveBackground: #ececec;\n            --vscode-tab-unfocusedInactiveBackground: #ececec;\n            --vscode-tab-activeForeground: #333333;\n            --vscode-tab-inactiveForeground: rgba(51, 51, 51, 0.7);\n            --vscode-tab-unfocusedActiveForeground: rgba(51, 51, 51, 0.7);\n            --vscode-tab-unfocusedInactiveForeground: rgba(51, 51, 51, 0.35);\n            --vscode-tab-activeModifiedBorder: #33aaee;\n            --vscode-tab-inactiveModifiedBorder: rgba(51, 170, 238, 0.5);\n            --vscode-tab-unfocusedActiveModifiedBorder: rgba(51, 170, 238, 0.7);\n            --vscode-tab-unfocusedInactiveModifiedBorder: rgba(51, 170, 238, 0.25);\n            --vscode-tab-border: #f3f3f3;\n            --vscode-editorPane-background: #ffffff;\n            --vscode-editorGroupHeader-tabsBackground: #f3f3f3;\n            --vscode-editorGroupHeader-noTabsBackground: #ffffff;\n            --vscode-editorGroup-border: #e7e7e7;\n            --vscode-editorGroup-dropBackground: rgba(38, 119, 203, 0.18);\n            --vscode-imagePreview-border: rgba(128, 128, 128, 0.35);\n            --vscode-panel-background: #ffffff;\n            --vscode-panel-border: rgba(128, 128, 128, 0.35);\n            --vscode-panelTitle-activeForeground: #424242;\n            --vscode-panelTitle-inactiveForeground: rgba(66, 66, 66, 0.75);\n            --vscode-panelTitle-activeBorder: #424242;\n            --vscode-panelInput-border: #dddddd;\n            --vscode-panel-dropBorder: #424242;\n            --vscode-panelSection-dropBackground: rgba(38, 119, 203, 0.18);\n            --vscode-panelSectionHeader-background: rgba(128, 128, 128, 0.2);\n            --vscode-panelSection-border: rgba(128, 128, 128, 0.35);\n            --vscode-statusBar-foreground: #ffffff;\n            --vscode-statusBar-noFolderForeground: #ffffff;\n            --vscode-statusBar-background: #007acc;\n            --vscode-statusBar-noFolderBackground: #68217a;\n            --vscode-statusBarItem-activeBackground: rgba(255, 255, 255, 0.18);\n            --vscode-statusBarItem-hoverBackground: rgba(255, 255, 255, 0.12);\n            --vscode-statusBarItem-prominentForeground: #ffffff;\n            --vscode-statusBarItem-prominentBackground: rgba(0, 0, 0, 0.5);\n            --vscode-statusBarItem-prominentHoverBackground: rgba(0, 0, 0, 0.3);\n            --vscode-activityBar-background: #2c2c2c;\n            --vscode-activityBar-foreground: #ffffff;\n            --vscode-activityBar-inactiveForeground: rgba(255, 255, 255, 0.4);\n            --vscode-activityBar-activeBorder: #ffffff;\n            --vscode-activityBar-dropBorder: #ffffff;\n            --vscode-activityBarBadge-background: #007acc;\n            --vscode-activityBarBadge-foreground: #ffffff;\n            --vscode-statusBarItem-remoteBackground: #16825d;\n            --vscode-statusBarItem-remoteForeground: #ffffff;\n            --vscode-extensionBadge-remoteBackground: #007acc;\n            --vscode-extensionBadge-remoteForeground: #ffffff;\n            --vscode-sideBar-background: #f3f3f3;\n            --vscode-sideBarTitle-foreground: #6f6f6f;\n            --vscode-sideBar-dropBackground: rgba(38, 119, 203, 0.18);\n            --vscode-sideBarSectionHeader-background: rgba(0, 0, 0, 0);\n            --vscode-sideBarSectionHeader-border: rgba(97, 97, 97, 0.19);\n            --vscode-titleBar-activeForeground: #333333;\n            --vscode-titleBar-inactiveForeground: rgba(51, 51, 51, 0.6);\n            --vscode-titleBar-activeBackground: #dddddd;\n            --vscode-titleBar-inactiveBackground: rgba(221, 221, 221, 0.6);\n            --vscode-menubar-selectionForeground: #333333;\n            --vscode-menubar-selectionBackground: rgba(0, 0, 0, 0.1);\n            --vscode-notifications-foreground: #616161;\n            --vscode-notifications-background: #f3f3f3;\n            --vscode-notificationLink-foreground: #006ab1;\n            --vscode-notificationCenterHeader-background: #e7e7e7;\n            --vscode-notifications-border: #e7e7e7;\n            --vscode-notificationsErrorIcon-foreground: #e51400;\n            --vscode-notificationsWarningIcon-foreground: #e9a700;\n            --vscode-notificationsInfoIcon-foreground: #75beff;\n            --vscode-editorGutter-commentRangeForeground: #c5c5c5;\n            --vscode-editor-stackFrameHighlightBackground: rgba(255, 255, 102, 0.45);\n            --vscode-editor-focusedStackFrameHighlightBackground: rgba(206, 231, 206, 0.45);\n            --vscode-terminal-foreground: #333333;\n            --vscode-terminal-selectionBackground: rgba(0, 0, 0, 0.25);\n            --vscode-terminal-border: rgba(128, 128, 128, 0.35);\n            --vscode-statusBar-debuggingBackground: #cc6633;\n            --vscode-statusBar-debuggingForeground: #ffffff;\n            --vscode-settings-headerForeground: #444444;\n            --vscode-settings-modifiedItemIndicator: #66afe0;\n            --vscode-settings-dropdownBackground: #ffffff;\n            --vscode-settings-dropdownBorder: #cecece;\n            --vscode-settings-dropdownListBorder: #c8c8c8;\n            --vscode-settings-checkboxBackground: #ffffff;\n            --vscode-settings-checkboxBorder: #cecece;\n            --vscode-settings-textInputBackground: #ffffff;\n            --vscode-settings-textInputForeground: #616161;\n            --vscode-settings-textInputBorder: #cecece;\n            --vscode-settings-numberInputBackground: #ffffff;\n            --vscode-settings-numberInputForeground: #616161;\n            --vscode-settings-numberInputBorder: #cecece;\n            --vscode-debugExceptionWidget-border: #a31515;\n            --vscode-debugExceptionWidget-background: #f1dfde;\n            --vscode-editorGutter-modifiedBackground: #66afe0;\n            --vscode-editorGutter-addedBackground: #81b88b;\n            --vscode-editorGutter-deletedBackground: #ca4b51;\n            --vscode-minimapGutter-modifiedBackground: #66afe0;\n            --vscode-minimapGutter-addedBackground: #81b88b;\n            --vscode-minimapGutter-deletedBackground: #ca4b51;\n            --vscode-editorOverviewRuler-modifiedForeground: rgba(102, 175, 224, 0.6);\n            --vscode-editorOverviewRuler-addedForeground: rgba(129, 184, 139, 0.6);\n            --vscode-editorOverviewRuler-deletedForeground: rgba(202, 75, 81, 0.6);\n            --vscode-searchEditor-textInputBorder: #cecece;\n            --vscode-debugIcon-breakpointForeground: #e51400;\n            --vscode-debugIcon-breakpointDisabledForeground: #848484;\n            --vscode-debugIcon-breakpointUnverifiedForeground: #848484;\n            --vscode-debugIcon-breakpointCurrentStackframeForeground: #ffcc00;\n            --vscode-debugIcon-breakpointStackframeForeground: #89d185;\n            --vscode-debugToolBar-background: #f3f3f3;\n            --vscode-debugIcon-startForeground: #388a34;\n            --vscode-debugIcon-pauseForeground: #007acc;\n            --vscode-debugIcon-stopForeground: #a1260d;\n            --vscode-debugIcon-disconnectForeground: #a1260d;\n            --vscode-debugIcon-restartForeground: #388a34;\n            --vscode-debugIcon-stepOverForeground: #007acc;\n            --vscode-debugIcon-stepIntoForeground: #007acc;\n            --vscode-debugIcon-stepOutForeground: #007acc;\n            --vscode-debugIcon-continueForeground: #007acc;\n            --vscode-debugIcon-stepBackForeground: #007acc;\n            --vscode-debugTokenExpression-name: #9b46b0;\n            --vscode-debugTokenExpression-value: rgba(108, 108, 108, 0.8);\n            --vscode-debugTokenExpression-string: #a31515;\n            --vscode-debugTokenExpression-boolean: #0000ff;\n            --vscode-debugTokenExpression-number: #098658;\n            --vscode-debugTokenExpression-error: #e51400;\n            --vscode-debugView-exceptionLabelForeground: #ffffff;\n            --vscode-debugView-exceptionLabelBackground: #a31515;\n            --vscode-debugView-stateLabelForeground: #616161;\n            --vscode-debugView-stateLabelBackground: rgba(136, 136, 136, 0.27);\n            --vscode-debugView-valueChangedHighlight: #569cd6;\n            --vscode-debugConsole-infoForeground: #75beff;\n            --vscode-debugConsole-warningForeground: #e9a700;\n            --vscode-debugConsole-errorForeground: #a1260d;\n            --vscode-debugConsole-sourceForeground: #616161;\n            --vscode-debugConsoleInputIcon-foreground: #616161;\n            --vscode-extensionButton-prominentBackground: #327e36;\n            --vscode-extensionButton-prominentForeground: #ffffff;\n            --vscode-extensionButton-prominentHoverBackground: #28632b;\n            --vscode-notebook-cellBorderColor: #dae3e9;\n            --vscode-notebook-focusedEditorBorder: #0090f1;\n            --vscode-notebookStatusSuccessIcon-foreground: #388a34;\n            --vscode-notebookStatusErrorIcon-foreground: #a1260d;\n            --vscode-notebookStatusRunningIcon-foreground: #616161;\n            --vscode-notebook-outputContainerBackgroundColor: rgba(200, 221, 241, 0.31);\n            --vscode-notebook-cellToolbarSeparator: rgba(128, 128, 128, 0.35);\n            --vscode-notebook-focusedCellBackground: rgba(200, 221, 241, 0.31);\n            --vscode-notebook-cellHoverBackground: rgba(200, 221, 241, 0.22);\n            --vscode-notebook-focusedCellBorder: rgba(0, 0, 0, 0.12);\n            --vscode-notebook-cellStatusBarItemHoverBackground: rgba(0, 0, 0, 0.08);\n            --vscode-notebook-cellInsertionIndicator: #0090f1;\n            --vscode-notebookScrollbarSlider-background: rgba(100, 100, 100, 0.4);\n            --vscode-notebookScrollbarSlider-hoverBackground: rgba(100, 100, 100, 0.7);\n            --vscode-notebookScrollbarSlider-activeBackground: rgba(0, 0, 0, 0.6);\n            --vscode-notebook-symbolHighlightBackground: rgba(253, 255, 0, 0.2);\n            --vscode-scm-providerBorder: #c8c8c8;\n            --vscode-terminal-ansiBlack: #000000;\n            --vscode-terminal-ansiRed: #cd3131;\n            --vscode-terminal-ansiGreen: #00bc00;\n            --vscode-terminal-ansiYellow: #949800;\n            --vscode-terminal-ansiBlue: #0451a5;\n            --vscode-terminal-ansiMagenta: #bc05bc;\n            --vscode-terminal-ansiCyan: #0598bc;\n            --vscode-terminal-ansiWhite: #555555;\n            --vscode-terminal-ansiBrightBlack: #666666;\n            --vscode-terminal-ansiBrightRed: #cd3131;\n            --vscode-terminal-ansiBrightGreen: #14ce14;\n            --vscode-terminal-ansiBrightYellow: #b5ba00;\n            --vscode-terminal-ansiBrightBlue: #0451a5;\n            --vscode-terminal-ansiBrightMagenta: #bc05bc;\n            --vscode-terminal-ansiBrightCyan: #0598bc;\n            --vscode-terminal-ansiBrightWhite: #a5a5a5;\n            --vscode-gitDecoration-addedResourceForeground: #587c0c;\n            --vscode-gitDecoration-modifiedResourceForeground: #895503;\n            --vscode-gitDecoration-deletedResourceForeground: #ad0707;\n            --vscode-gitDecoration-untrackedResourceForeground: #007100;\n            --vscode-gitDecoration-ignoredResourceForeground: #8e8e90;\n            --vscode-gitDecoration-conflictingResourceForeground: #6c6cc4;\n            --vscode-gitDecoration-submoduleResourceForeground: #1258a7;\n            --vscode-gitlens-gutterBackgroundColor: rgba(0, 0, 0, 0.05);\n            --vscode-gitlens-gutterForegroundColor: #747474;\n            --vscode-gitlens-gutterUncommittedForegroundColor: rgba(0, 188, 242, 0.6);\n            --vscode-gitlens-trailingLineBackgroundColor: rgba(0, 0, 0, 0);\n            --vscode-gitlens-trailingLineForegroundColor: rgba(153, 153, 153, 0.35);\n            --vscode-gitlens-lineHighlightBackgroundColor: rgba(0, 188, 242, 0.2);\n            --vscode-gitlens-lineHighlightOverviewRulerColor: rgba(0, 188, 242, 0.6);\n            --vscode-issues-newIssueDecoration: rgba(0, 0, 0, 0.28);\n        }\n\n        body {\n            background-color: var(--vscode-editor-background);\n            color: var(--vscode-editor-foreground);\n            font-family: var(--vscode-font-family);\n            font-weight: var(--vscode-font-weight);\n            font-size: var(--vscode-font-size);\n            margin: 0;\n            padding: 0 20px;\n        }\n\n        img {\n            max-width: 100%;\n            max-height: 100%;\n        }\n\n        a {\n            color: var(--vscode-textLink-foreground);\n        }\n\n        a:hover {\n            color: var(--vscode-textLink-activeForeground);\n        }\n\n        a:focus,\n        input:focus,\n        select:focus,\n        textarea:focus {\n            outline: 1px solid -webkit-focus-ring-color;\n            outline-offset: -1px;\n        }\n\n        code {\n            color: var(--vscode-textPreformat-foreground);\n        }\n\n        blockquote {\n            background: var(--vscode-textBlockQuote-background);\n            border-color: var(--vscode-textBlockQuote-border);\n        }\n\n        kbd {\n            color: var(--vscode-editor-foreground);\n            border-radius: 3px;\n            vertical-align: middle;\n            padding: 1px 3px;\n\n            background-color: hsla(0, 0%, 50%, .17);\n            border: 1px solid rgba(71, 71, 71, .4);\n            border-bottom-color: rgba(88, 88, 88, .4);\n            box-shadow: inset 0 -1px 0 rgba(88, 88, 88, .4);\n        }\n\n        .vscode-light kbd {\n            background-color: hsla(0, 0%, 87%, .5);\n            border: 1px solid hsla(0, 0%, 80%, .7);\n            border-bottom-color: hsla(0, 0%, 73%, .7);\n            box-shadow: inset 0 -1px 0 hsla(0, 0%, 73%, .7);\n        }\n\n        ::-webkit-scrollbar {\n            width: 10px;\n            height: 10px;\n        }\n\n        ::-webkit-scrollbar-corner {\n            background-color: var(--vscode-editor-background);\n        }\n\n        ::-webkit-scrollbar-thumb {\n            background-color: var(--vscode-scrollbarSlider-background);\n        }\n\n        ::-webkit-scrollbar-thumb:hover {\n            background-color: var(--vscode-scrollbarSlider-hoverBackground);\n        }\n\n        ::-webkit-scrollbar-thumb:active {\n            background-color: var(--vscode-scrollbarSlider-activeBackground);\n        }\n\n        .emoji {\n            height: 20px;\n        }\n\n        pre {\n            white-space: pre-wrap;\n        }\n\n        .page-break {\n            display: block;\n            page-break-after: always;\n        }\n\n        .no-page-break {\n            page-break-inside: avoid;\n        }\n    \u003c/style\u003e\n    \u003cstyle\u003e\n        /*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n        .vscode-dark img[src$=\\#gh-light-mode-only],\n        .vscode-light img[src$=\\#gh-dark-mode-only],\n        .vscode-high-contrast:not(.vscode-high-contrast-light) img[src$=\\#gh-light-mode-only],\n        .vscode-high-contrast-light img[src$=\\#gh-dark-mode-only] {\n            display: none;\n        }\n    \u003c/style\u003e\n    \u003cstyle\u003e\n        /*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n        html,\n        body {\n            font-family: var(--markdown-font-family, -apple-system, BlinkMacSystemFont, \"Segoe WPC\", \"Segoe UI\", system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif);\n            font-size: var(--markdown-font-size, 14px);\n            padding: 0 26px;\n            line-height: var(--markdown-line-height, 22px);\n            word-wrap: break-word;\n        }\n\n        body {\n            padding-top: 1em;\n        }\n\n        /* Reset margin top for elements */\n        h1,\n        h2,\n        h3,\n        h4,\n        h5,\n        h6,\n        p,\n        ol,\n        ul,\n        pre {\n            margin-top: 0;\n        }\n\n        h1,\n        h2,\n        h3,\n        h4,\n        h5,\n        h6 {\n            font-weight: 600;\n            margin-top: 24px;\n            margin-bottom: 16px;\n            line-height: 1.25;\n        }\n\n        #code-csp-warning {\n            position: fixed;\n            top: 0;\n            right: 0;\n            color: white;\n            margin: 16px;\n            text-align: center;\n            font-size: 12px;\n            font-family: sans-serif;\n            background-color: #444444;\n            cursor: pointer;\n            padding: 6px;\n            box-shadow: 1px 1px 1px rgba(0, 0, 0, .25);\n        }\n\n        #code-csp-warning:hover {\n            text-decoration: none;\n            background-color: #007acc;\n            box-shadow: 2px 2px 2px rgba(0, 0, 0, .25);\n        }\n\n        body.scrollBeyondLastLine {\n            margin-bottom: calc(100vh - 22px);\n        }\n\n        body.showEditorSelection .code-line {\n            position: relative;\n        }\n\n        body.showEditorSelection :not(tr, ul, ol).code-active-line:before,\n        body.showEditorSelection :not(tr, ul, ol).code-line:hover:before {\n            content: \"\";\n            display: block;\n            position: absolute;\n            top: 0;\n            left: -12px;\n            height: 100%;\n        }\n\n        .vscode-high-contrast.showEditorSelection :not(tr, ul, ol).code-line .code-line:hover:before {\n            border-left: none;\n        }\n\n        body.showEditorSelection li.code-active-line:before,\n        body.showEditorSelection li.code-line:hover:before {\n            left: -30px;\n        }\n\n        .vscode-light.showEditorSelection .code-active-line:before {\n            border-left: 3px solid rgba(0, 0, 0, 0.15);\n        }\n\n        .vscode-light.showEditorSelection .code-line:hover:before {\n            border-left: 3px solid rgba(0, 0, 0, 0.40);\n        }\n\n        .vscode-dark.showEditorSelection .code-active-line:before {\n            border-left: 3px solid rgba(255, 255, 255, 0.4);\n        }\n\n        .vscode-dark.showEditorSelection .code-line:hover:before {\n            border-left: 3px solid rgba(255, 255, 255, 0.60);\n        }\n\n        .vscode-high-contrast.showEditorSelection .code-active-line:before {\n            border-left: 3px solid rgba(255, 160, 0, 0.7);\n        }\n\n        .vscode-high-contrast.showEditorSelection .code-line:hover:before {\n            border-left: 3px solid rgba(255, 160, 0, 1);\n        }\n\n        /* Prevent `sub` and `sup` elements from affecting line height */\n        sub,\n        sup {\n            line-height: 0;\n        }\n\n        ul ul:first-child,\n        ul ol:first-child,\n        ol ul:first-child,\n        ol ol:first-child {\n            margin-bottom: 0;\n        }\n\n        img,\n        video {\n            max-width: 100%;\n            max-height: 100%;\n        }\n\n        a {\n            text-decoration: none;\n        }\n\n        a:hover {\n            text-decoration: underline;\n        }\n\n        a:focus,\n        input:focus,\n        select:focus,\n        textarea:focus {\n            outline: 1px solid -webkit-focus-ring-color;\n            outline-offset: -1px;\n        }\n\n        p {\n            margin-bottom: 16px;\n        }\n\n        li p {\n            margin-bottom: 0.7em;\n        }\n\n        ul,\n        ol {\n            margin-bottom: 0.7em;\n        }\n\n        hr {\n            border: 0;\n            height: 1px;\n            border-bottom: 1px solid;\n        }\n\n        h1 {\n            font-size: 2em;\n            margin-top: 0;\n            padding-bottom: 0.3em;\n            border-bottom-width: 1px;\n            border-bottom-style: solid;\n        }\n\n        h2 {\n            font-size: 1.5em;\n            padding-bottom: 0.3em;\n            border-bottom-width: 1px;\n            border-bottom-style: solid;\n        }\n\n        h3 {\n            font-size: 1.25em;\n        }\n\n        h4 {\n            font-size: 1em;\n        }\n\n        h5 {\n            font-size: 0.875em;\n        }\n\n        h6 {\n            font-size: 0.85em;\n        }\n\n        table {\n            border-collapse: collapse;\n            margin-bottom: 0.7em;\n        }\n\n        th {\n            text-align: left;\n            border-bottom: 1px solid;\n        }\n\n        th,\n        td {\n            padding: 5px 10px;\n        }\n\n        table\u003etbody\u003etr+tr\u003etd {\n            border-top: 1px solid;\n        }\n\n        blockquote {\n            margin: 0;\n            padding: 0px 16px 0 10px;\n            border-left-width: 5px;\n            border-left-style: solid;\n            border-radius: 2px;\n        }\n\n        code {\n            font-family: var(--vscode-editor-font-family, \"SF Mono\", Monaco, Menlo, Consolas, \"Ubuntu Mono\", \"Liberation Mono\", \"DejaVu Sans Mono\", \"Courier New\", monospace);\n            font-size: 1em;\n            line-height: 1.357em;\n        }\n\n        body.wordWrap pre {\n            white-space: pre-wrap;\n        }\n\n        pre:not(.hljs),\n        pre.hljs code\u003ediv {\n            padding: 16px;\n            border-radius: 3px;\n            overflow: auto;\n        }\n\n        pre code {\n            display: inline-block;\n            color: var(--vscode-editor-foreground);\n            tab-size: 4;\n            background: none;\n        }\n\n        /** Theming */\n\n        pre {\n            background-color: var(--vscode-textCodeBlock-background);\n            border: 1px solid var(--vscode-widget-border);\n        }\n\n        .vscode-high-contrast h1 {\n            border-color: rgb(0, 0, 0);\n        }\n\n        .vscode-light th {\n            border-color: rgba(0, 0, 0, 0.69);\n        }\n\n        .vscode-dark th {\n            border-color: rgba(255, 255, 255, 0.69);\n        }\n\n        .vscode-light h1,\n        .vscode-light h2,\n        .vscode-light hr,\n        .vscode-light td {\n            border-color: rgba(0, 0, 0, 0.18);\n        }\n\n        .vscode-dark h1,\n        .vscode-dark h2,\n        .vscode-dark hr,\n        .vscode-dark td {\n            border-color: rgba(255, 255, 255, 0.18);\n        }\n    \u003c/style\u003e\n    \u003cstyle\u003e\n        /*\nhttps://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/vs2015.css\n*/\n        /*\n * Visual Studio 2015 dark style\n * Author: Nicolas LLOBERA \u003cnllobera@gmail.com\u003e\n */\n\n\n        .hljs-keyword,\n        .hljs-literal,\n        .hljs-symbol,\n        .hljs-name {\n            color: #569CD6;\n        }\n\n        .hljs-link {\n            color: #569CD6;\n            text-decoration: underline;\n        }\n\n        .hljs-built_in,\n        .hljs-type {\n            color: #4EC9B0;\n        }\n\n        .hljs-number,\n        .hljs-class {\n            color: #B8D7A3;\n        }\n\n        .hljs-string,\n        .hljs-meta-string {\n            color: #D69D85;\n        }\n\n        .hljs-regexp,\n        .hljs-template-tag {\n            color: #9A5334;\n        }\n\n        .hljs-subst,\n        .hljs-function,\n        .hljs-title,\n        .hljs-params,\n        .hljs-formula {\n            color: #DCDCDC;\n        }\n\n        .hljs-comment,\n        .hljs-quote {\n            color: #57A64A;\n            font-style: italic;\n        }\n\n        .hljs-doctag {\n            color: #608B4E;\n        }\n\n        .hljs-meta,\n        .hljs-meta-keyword,\n        .hljs-tag {\n            color: #9B9B9B;\n        }\n\n        .hljs-variable,\n        .hljs-template-variable {\n            color: #BD63C5;\n        }\n\n        .hljs-attr,\n        .hljs-attribute,\n        .hljs-builtin-name {\n            color: #9CDCFE;\n        }\n\n        .hljs-section {\n            color: gold;\n        }\n\n        .hljs-emphasis {\n            font-style: italic;\n        }\n\n        .hljs-strong {\n            font-weight: bold;\n        }\n\n        /*.hljs-code {\n\tfont-family:'Monospace';\n}*/\n\n        .hljs-bullet,\n        .hljs-selector-tag,\n        .hljs-selector-id,\n        .hljs-selector-class,\n        .hljs-selector-attr,\n        .hljs-selector-pseudo {\n            color: #D7BA7D;\n        }\n\n        .hljs-addition {\n            background-color: var(--vscode-diffEditor-insertedTextBackground, rgba(155, 185, 85, 0.2));\n            color: rgb(155, 185, 85);\n            display: inline-block;\n            width: 100%;\n        }\n\n        .hljs-deletion {\n            background: var(--vscode-diffEditor-removedTextBackground, rgba(255, 0, 0, 0.2));\n            color: rgb(255, 0, 0);\n            display: inline-block;\n            width: 100%;\n        }\n\n\n        /*\nFrom https://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/vs.css\n*/\n        /*\n\nVisual Studio-like style based on original C# coloring by Jason Diamond \u003cjason@diamond.name\u003e\n\n*/\n\n        .vscode-light .hljs-function,\n        .vscode-light .hljs-params,\n        .vscode-light .hljs-number,\n        .vscode-light .hljs-class {\n            color: inherit;\n        }\n\n        .vscode-light .hljs-comment,\n        .vscode-light .hljs-quote,\n        .vscode-light .hljs-number,\n        .vscode-light .hljs-class,\n        .vscode-light .hljs-variable {\n            color: #008000;\n        }\n\n        .vscode-light .hljs-keyword,\n        .vscode-light .hljs-selector-tag,\n        .vscode-light .hljs-name,\n        .vscode-light .hljs-tag {\n            color: #00f;\n        }\n\n        .vscode-light .hljs-built_in,\n        .vscode-light .hljs-builtin-name {\n            color: #007acc;\n        }\n\n        .vscode-light .hljs-string,\n        .vscode-light .hljs-section,\n        .vscode-light .hljs-attribute,\n        .vscode-light .hljs-literal,\n        .vscode-light .hljs-template-tag,\n        .vscode-light .hljs-template-variable,\n        .vscode-light .hljs-type {\n            color: #a31515;\n        }\n\n        .vscode-light .hljs-subst,\n        .vscode-light .hljs-selector-attr,\n        .vscode-light .hljs-selector-pseudo,\n        .vscode-light .hljs-meta,\n        .vscode-light .hljs-meta-keyword {\n            color: #2b91af;\n        }\n\n        .vscode-light .hljs-title,\n        .vscode-light .hljs-doctag {\n            color: #808080;\n        }\n\n        .vscode-light .hljs-attr {\n            color: #f00;\n        }\n\n        .vscode-light .hljs-symbol,\n        .vscode-light .hljs-bullet,\n        .vscode-light .hljs-link {\n            color: #00b0e8;\n        }\n\n\n        .vscode-light .hljs-emphasis {\n            font-style: italic;\n        }\n\n        .vscode-light .hljs-strong {\n            font-weight: bold;\n        }\n    \u003c/style\u003e\n    \u003cstyle\u003e\n        @font-face {\n            font-family: KaTeX_AMS;\n            font-style: normal;\n            font-weight: 400;\n            src: url(fonts/KaTeX_AMS-Regular.woff2) format(\"woff2\"), url(fonts/KaTeX_AMS-Regular.woff) format(\"woff\"), url(fonts/KaTeX_AMS-Regular.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Caligraphic;\n            font-style: normal;\n            font-weight: 700;\n            src: url(fonts/KaTeX_Caligraphic-Bold.woff2) format(\"woff2\"), url(fonts/KaTeX_Caligraphic-Bold.woff) format(\"woff\"), url(fonts/KaTeX_Caligraphic-Bold.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Caligraphic;\n            font-style: normal;\n            font-weight: 400;\n            src: url(fonts/KaTeX_Caligraphic-Regular.woff2) format(\"woff2\"), url(fonts/KaTeX_Caligraphic-Regular.woff) format(\"woff\"), url(fonts/KaTeX_Caligraphic-Regular.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Fraktur;\n            font-style: normal;\n            font-weight: 700;\n            src: url(fonts/KaTeX_Fraktur-Bold.woff2) format(\"woff2\"), url(fonts/KaTeX_Fraktur-Bold.woff) format(\"woff\"), url(fonts/KaTeX_Fraktur-Bold.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Fraktur;\n            font-style: normal;\n            font-weight: 400;\n            src: url(fonts/KaTeX_Fraktur-Regular.woff2) format(\"woff2\"), url(fonts/KaTeX_Fraktur-Regular.woff) format(\"woff\"), url(fonts/KaTeX_Fraktur-Regular.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Main;\n            font-style: normal;\n            font-weight: 700;\n            src: url(fonts/KaTeX_Main-Bold.woff2) format(\"woff2\"), url(fonts/KaTeX_Main-Bold.woff) format(\"woff\"), url(fonts/KaTeX_Main-Bold.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Main;\n            font-style: italic;\n            font-weight: 700;\n            src: url(fonts/KaTeX_Main-BoldItalic.woff2) format(\"woff2\"), url(fonts/KaTeX_Main-BoldItalic.woff) format(\"woff\"), url(fonts/KaTeX_Main-BoldItalic.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Main;\n            font-style: italic;\n            font-weight: 400;\n            src: url(fonts/KaTeX_Main-Italic.woff2) format(\"woff2\"), url(fonts/KaTeX_Main-Italic.woff) format(\"woff\"), url(fonts/KaTeX_Main-Italic.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Main;\n            font-style: normal;\n            font-weight: 400;\n            src: url(fonts/KaTeX_Main-Regular.woff2) format(\"woff2\"), url(fonts/KaTeX_Main-Regular.woff) format(\"woff\"), url(fonts/KaTeX_Main-Regular.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Math;\n            font-style: italic;\n            font-weight: 700;\n            src: url(fonts/KaTeX_Math-BoldItalic.woff2) format(\"woff2\"), url(fonts/KaTeX_Math-BoldItalic.woff) format(\"woff\"), url(fonts/KaTeX_Math-BoldItalic.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Math;\n            font-style: italic;\n            font-weight: 400;\n            src: url(fonts/KaTeX_Math-Italic.woff2) format(\"woff2\"), url(fonts/KaTeX_Math-Italic.woff) format(\"woff\"), url(fonts/KaTeX_Math-Italic.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: \"KaTeX_SansSerif\";\n            font-style: normal;\n            font-weight: 700;\n            src: url(fonts/KaTeX_SansSerif-Bold.woff2) format(\"woff2\"), url(fonts/KaTeX_SansSerif-Bold.woff) format(\"woff\"), url(fonts/KaTeX_SansSerif-Bold.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: \"KaTeX_SansSerif\";\n            font-style: italic;\n            font-weight: 400;\n            src: url(fonts/KaTeX_SansSerif-Italic.woff2) format(\"woff2\"), url(fonts/KaTeX_SansSerif-Italic.woff) format(\"woff\"), url(fonts/KaTeX_SansSerif-Italic.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: \"KaTeX_SansSerif\";\n            font-style: normal;\n            font-weight: 400;\n            src: url(fonts/KaTeX_SansSerif-Regular.woff2) format(\"woff2\"), url(fonts/KaTeX_SansSerif-Regular.woff) format(\"woff\"), url(fonts/KaTeX_SansSerif-Regular.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Script;\n            font-style: normal;\n            font-weight: 400;\n            src: url(fonts/KaTeX_Script-Regular.woff2) format(\"woff2\"), url(fonts/KaTeX_Script-Regular.woff) format(\"woff\"), url(fonts/KaTeX_Script-Regular.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Size1;\n            font-style: normal;\n            font-weight: 400;\n            src: url(fonts/KaTeX_Size1-Regular.woff2) format(\"woff2\"), url(fonts/KaTeX_Size1-Regular.woff) format(\"woff\"), url(fonts/KaTeX_Size1-Regular.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Size2;\n            font-style: normal;\n            font-weight: 400;\n            src: url(fonts/KaTeX_Size2-Regular.woff2) format(\"woff2\"), url(fonts/KaTeX_Size2-Regular.woff) format(\"woff\"), url(fonts/KaTeX_Size2-Regular.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Size3;\n            font-style: normal;\n            font-weight: 400;\n            src: url(fonts/KaTeX_Size3-Regular.woff2) format(\"woff2\"), url(fonts/KaTeX_Size3-Regular.woff) format(\"woff\"), url(fonts/KaTeX_Size3-Regular.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Size4;\n            font-style: normal;\n            font-weight: 400;\n            src: url(fonts/KaTeX_Size4-Regular.woff2) format(\"woff2\"), url(fonts/KaTeX_Size4-Regular.woff) format(\"woff\"), url(fonts/KaTeX_Size4-Regular.ttf) format(\"truetype\")\n        }\n\n        @font-face {\n            font-family: KaTeX_Typewriter;\n            font-style: normal;\n            font-weight: 400;\n            src: url(fonts/KaTeX_Typewriter-Regular.woff2) format(\"woff2\"), url(fonts/KaTeX_Typewriter-Regular.woff) format(\"woff\"), url(fonts/KaTeX_Typewriter-Regular.ttf) format(\"truetype\")\n        }\n\n        .katex {\n            font: normal 1.21em KaTeX_Main, Times New Roman, serif;\n            line-height: 1.2;\n            text-indent: 0;\n            text-rendering: auto\n        }\n\n        .katex * {\n            -ms-high-contrast-adjust: none !important;\n            border-color: currentColor\n        }\n\n        .katex .katex-version:after {\n            content: \"0.16.21\"\n        }\n\n        .katex .katex-mathml {\n            clip: rect(1px, 1px, 1px, 1px);\n            border: 0;\n            height: 1px;\n            overflow: hidden;\n            padding: 0;\n            position: absolute;\n            width: 1px\n        }\n\n        .katex .katex-html\u003e.newline {\n            display: block\n        }\n\n        .katex .base {\n            position: relative;\n            white-space: nowrap;\n            width: -webkit-min-content;\n            width: -moz-min-content;\n            width: min-content\n        }\n\n        .katex .base,\n        .katex .strut {\n            display: inline-block\n        }\n\n        .katex .textbf {\n            font-weight: 700\n        }\n\n        .katex .textit {\n            font-style: italic\n        }\n\n        .katex .textrm {\n            font-family: KaTeX_Main\n        }\n\n        .katex .textsf {\n            font-family: KaTeX_SansSerif\n        }\n\n        .katex .texttt {\n            font-family: KaTeX_Typewriter\n        }\n\n        .katex .mathnormal {\n            font-family: KaTeX_Math;\n            font-style: italic\n        }\n\n        .katex .mathit {\n            font-family: KaTeX_Main;\n            font-style: italic\n        }\n\n        .katex .mathrm {\n            font-style: normal\n        }\n\n        .katex .mathbf {\n            font-family: KaTeX_Main;\n            font-weight: 700\n        }\n\n        .katex .boldsymbol {\n            font-family: KaTeX_Math;\n            font-style: italic;\n            font-weight: 700\n        }\n\n        .katex .amsrm,\n        .katex .mathbb,\n        .katex .textbb {\n            font-family: KaTeX_AMS\n        }\n\n        .katex .mathcal {\n            font-family: KaTeX_Caligraphic\n        }\n\n        .katex .mathfrak,\n        .katex .textfrak {\n            font-family: KaTeX_Fraktur\n        }\n\n        .katex .mathboldfrak,\n        .katex .textboldfrak {\n            font-family: KaTeX_Fraktur;\n            font-weight: 700\n        }\n\n        .katex .mathtt {\n            font-family: KaTeX_Typewriter\n        }\n\n        .katex .mathscr,\n        .katex .textscr {\n            font-family: KaTeX_Script\n        }\n\n        .katex .mathsf,\n        .katex .textsf {\n            font-family: KaTeX_SansSerif\n        }\n\n        .katex .mathboldsf,\n        .katex .textboldsf {\n            font-family: KaTeX_SansSerif;\n            font-weight: 700\n        }\n\n        .katex .mathitsf,\n        .katex .mathsfit,\n        .katex .textitsf {\n            font-family: KaTeX_SansSerif;\n            font-style: italic\n        }\n\n        .katex .mainrm {\n            font-family: KaTeX_Main;\n            font-style: normal\n        }\n\n        .katex .vlist-t {\n            border-collapse: collapse;\n            display: inline-table;\n            table-layout: fixed\n        }\n\n        .katex .vlist-r {\n            display: table-row\n        }\n\n        .katex .vlist {\n            display: table-cell;\n            position: relative;\n            vertical-align: bottom\n        }\n\n        .katex .vlist\u003espan {\n            display: block;\n            height: 0;\n            position: relative\n        }\n\n        .katex .vlist\u003espan\u003espan {\n            display: inline-block\n        }\n\n        .katex .vlist\u003espan\u003e.pstrut {\n            overflow: hidden;\n            width: 0\n        }\n\n        .katex .vlist-t2 {\n            margin-right: -2px\n        }\n\n        .katex .vlist-s {\n            display: table-cell;\n            font-size: 1px;\n            min-width: 2px;\n            vertical-align: bottom;\n            width: 2px\n        }\n\n        .katex .vbox {\n            align-items: baseline;\n            display: inline-flex;\n            flex-direction: column\n        }\n\n        .katex .hbox {\n            width: 100%\n        }\n\n        .katex .hbox,\n        .katex .thinbox {\n            display: inline-flex;\n            flex-direction: row\n        }\n\n        .katex .thinbox {\n            max-width: 0;\n            width: 0\n        }\n\n        .katex .msupsub {\n            text-align: left\n        }\n\n        .katex .mfrac\u003espan\u003espan {\n            text-align: center\n        }\n\n        .katex .mfrac .frac-line {\n            border-bottom-style: solid;\n            display: inline-block;\n            width: 100%\n        }\n\n        .katex .hdashline,\n        .katex .hline,\n        .katex .mfrac .frac-line,\n        .katex .overline .overline-line,\n        .katex .rule,\n        .katex .underline .underline-line {\n            min-height: 1px\n        }\n\n        .katex .mspace {\n            display: inline-block\n        }\n\n        .katex .clap,\n        .katex .llap,\n        .katex .rlap {\n            position: relative;\n            width: 0\n        }\n\n        .katex .clap\u003e.inner,\n        .katex .llap\u003e.inner,\n        .katex .rlap\u003e.inner {\n            position: absolute\n        }\n\n        .katex .clap\u003e.fix,\n        .katex .llap\u003e.fix,\n        .katex .rlap\u003e.fix {\n            display: inline-block\n        }\n\n        .katex .llap\u003e.inner {\n            right: 0\n        }\n\n        .katex .clap\u003e.inner,\n        .katex .rlap\u003e.inner {\n            left: 0\n        }\n\n        .katex .clap\u003e.inner\u003espan {\n            margin-left: -50%;\n            margin-right: 50%\n        }\n\n        .katex .rule {\n            border: 0 solid;\n            display: inline-block;\n            position: relative\n        }\n\n        .katex .hline,\n        .katex .overline .overline-line,\n        .katex .underline .underline-line {\n            border-bottom-style: solid;\n            display: inline-block;\n            width: 100%\n        }\n\n        .katex .hdashline {\n            border-bottom-style: dashed;\n            display: inline-block;\n            width: 100%\n        }\n\n        .katex .sqrt\u003e.root {\n            margin-left: .2777777778em;\n            margin-right: -.5555555556em\n        }\n\n        .katex .fontsize-ensurer.reset-size1.size1,\n        .katex .sizing.reset-size1.size1 {\n            font-size: 1em\n        }\n\n        .katex .fontsize-ensurer.reset-size1.size2,\n        .katex .sizing.reset-size1.size2 {\n            font-size: 1.2em\n        }\n\n        .katex .fontsize-ensurer.reset-size1.size3,\n        .katex .sizing.reset-size1.size3 {\n            font-size: 1.4em\n        }\n\n        .katex .fontsize-ensurer.reset-size1.size4,\n        .katex .sizing.reset-size1.size4 {\n            font-size: 1.6em\n        }\n\n        .katex .fontsize-ensurer.reset-size1.size5,\n        .katex .sizing.reset-size1.size5 {\n            font-size: 1.8em\n        }\n\n        .katex .fontsize-ensurer.reset-size1.size6,\n        .katex .sizing.reset-size1.size6 {\n            font-size: 2em\n        }\n\n        .katex .fontsize-ensurer.reset-size1.size7,\n        .katex .sizing.reset-size1.size7 {\n            font-size: 2.4em\n        }\n\n        .katex .fontsize-ensurer.reset-size1.size8,\n        .katex .sizing.reset-size1.size8 {\n            font-size: 2.88em\n        }\n\n        .katex .fontsize-ensurer.reset-size1.size9,\n        .katex .sizing.reset-size1.size9 {\n            font-size: 3.456em\n        }\n\n        .katex .fontsize-ensurer.reset-size1.size10,\n        .katex .sizing.reset-size1.size10 {\n            font-size: 4.148em\n        }\n\n        .katex .fontsize-ensurer.reset-size1.size11,\n        .katex .sizing.reset-size1.size11 {\n            font-size: 4.976em\n        }\n\n        .katex .fontsize-ensurer.reset-size2.size1,\n        .katex .sizing.reset-size2.size1 {\n            font-size: .8333333333em\n        }\n\n        .katex .fontsize-ensurer.reset-size2.size2,\n        .katex .sizing.reset-size2.size2 {\n            font-size: 1em\n        }\n\n        .katex .fontsize-ensurer.reset-size2.size3,\n        .katex .sizing.reset-size2.size3 {\n            font-size: 1.1666666667em\n        }\n\n        .katex .fontsize-ensurer.reset-size2.size4,\n        .katex .sizing.reset-size2.size4 {\n            font-size: 1.3333333333em\n        }\n\n        .katex .fontsize-ensurer.reset-size2.size5,\n        .katex .sizing.reset-size2.size5 {\n            font-size: 1.5em\n        }\n\n        .katex .fontsize-ensurer.reset-size2.size6,\n        .katex .sizing.reset-size2.size6 {\n            font-size: 1.6666666667em\n        }\n\n        .katex .fontsize-ensurer.reset-size2.size7,\n        .katex .sizing.reset-size2.size7 {\n            font-size: 2em\n        }\n\n        .katex .fontsize-ensurer.reset-size2.size8,\n        .katex .sizing.reset-size2.size8 {\n            font-size: 2.4em\n        }\n\n        .katex .fontsize-ensurer.reset-size2.size9,\n        .katex .sizing.reset-size2.size9 {\n            font-size: 2.88em\n        }\n\n        .katex .fontsize-ensurer.reset-size2.size10,\n        .katex .sizing.reset-size2.size10 {\n            font-size: 3.4566666667em\n        }\n\n        .katex .fontsize-ensurer.reset-size2.size11,\n        .katex .sizing.reset-size2.size11 {\n            font-size: 4.1466666667em\n        }\n\n        .katex .fontsize-ensurer.reset-size3.size1,\n        .katex .sizing.reset-size3.size1 {\n            font-size: .7142857143em\n        }\n\n        .katex .fontsize-ensurer.reset-size3.size2,\n        .katex .sizing.reset-size3.size2 {\n            font-size: .8571428571em\n        }\n\n        .katex .fontsize-ensurer.reset-size3.size3,\n        .katex .sizing.reset-size3.size3 {\n            font-size: 1em\n        }\n\n        .katex .fontsize-ensurer.reset-size3.size4,\n        .katex .sizing.reset-size3.size4 {\n            font-size: 1.1428571429em\n        }\n\n        .katex .fontsize-ensurer.reset-size3.size5,\n        .katex .sizing.reset-size3.size5 {\n            font-size: 1.2857142857em\n        }\n\n        .katex .fontsize-ensurer.reset-size3.size6,\n        .katex .sizing.reset-size3.size6 {\n            font-size: 1.4285714286em\n        }\n\n        .katex .fontsize-ensurer.reset-size3.size7,\n        .katex .sizing.reset-size3.size7 {\n            font-size: 1.7142857143em\n        }\n\n        .katex .fontsize-ensurer.reset-size3.size8,\n        .katex .sizing.reset-size3.size8 {\n            font-size: 2.0571428571em\n        }\n\n        .katex .fontsize-ensurer.reset-size3.size9,\n        .katex .sizing.reset-size3.size9 {\n            font-size: 2.4685714286em\n        }\n\n        .katex .fontsize-ensurer.reset-size3.size10,\n        .katex .sizing.reset-size3.size10 {\n            font-size: 2.9628571429em\n        }\n\n        .katex .fontsize-ensurer.reset-size3.size11,\n        .katex .sizing.reset-size3.size11 {\n            font-size: 3.5542857143em\n        }\n\n        .katex .fontsize-ensurer.reset-size4.size1,\n        .katex .sizing.reset-size4.size1 {\n            font-size: .625em\n        }\n\n        .katex .fontsize-ensurer.reset-size4.size2,\n        .katex .sizing.reset-size4.size2 {\n            font-size: .75em\n        }\n\n        .katex .fontsize-ensurer.reset-size4.size3,\n        .katex .sizing.reset-size4.size3 {\n            font-size: .875em\n        }\n\n        .katex .fontsize-ensurer.reset-size4.size4,\n        .katex .sizing.reset-size4.size4 {\n            font-size: 1em\n        }\n\n        .katex .fontsize-ensurer.reset-size4.size5,\n        .katex .sizing.reset-size4.size5 {\n            font-size: 1.125em\n        }\n\n        .katex .fontsize-ensurer.reset-size4.size6,\n        .katex .sizing.reset-size4.size6 {\n            font-size: 1.25em\n        }\n\n        .katex .fontsize-ensurer.reset-size4.size7,\n        .katex .sizing.reset-size4.size7 {\n            font-size: 1.5em\n        }\n\n        .katex .fontsize-ensurer.reset-size4.size8,\n        .katex .sizing.reset-size4.size8 {\n            font-size: 1.8em\n        }\n\n        .katex .fontsize-ensurer.reset-size4.size9,\n        .katex .sizing.reset-size4.size9 {\n            font-size: 2.16em\n        }\n\n        .katex .fontsize-ensurer.reset-size4.size10,\n        .katex .sizing.reset-size4.size10 {\n            font-size: 2.5925em\n        }\n\n        .katex .fontsize-ensurer.reset-size4.size11,\n        .katex .sizing.reset-size4.size11 {\n            font-size: 3.11em\n        }\n\n        .katex .fontsize-ensurer.reset-size5.size1,\n        .katex .sizing.reset-size5.size1 {\n            font-size: .5555555556em\n        }\n\n        .katex .fontsize-ensurer.reset-size5.size2,\n        .katex .sizing.reset-size5.size2 {\n            font-size: .6666666667em\n        }\n\n        .katex .fontsize-ensurer.reset-size5.size3,\n        .katex .sizing.reset-size5.size3 {\n            font-size: .7777777778em\n        }\n\n        .katex .fontsize-ensurer.reset-size5.size4,\n        .katex .sizing.reset-size5.size4 {\n            font-size: .8888888889em\n        }\n\n        .katex .fontsize-ensurer.reset-size5.size5,\n        .katex .sizing.reset-size5.size5 {\n            font-size: 1em\n        }\n\n        .katex .fontsize-ensurer.reset-size5.size6,\n        .katex .sizing.reset-size5.size6 {\n            font-size: 1.1111111111em\n        }\n\n        .katex .fontsize-ensurer.reset-size5.size7,\n        .katex .sizing.reset-size5.size7 {\n            font-size: 1.3333333333em\n        }\n\n        .katex .fontsize-ensurer.reset-size5.size8,\n        .katex .sizing.reset-size5.size8 {\n            font-size: 1.6em\n        }\n\n        .katex .fontsize-ensurer.reset-size5.size9,\n        .katex .sizing.reset-size5.size9 {\n            font-size: 1.92em\n        }\n\n        .katex .fontsize-ensurer.reset-size5.size10,\n        .katex .sizing.reset-size5.size10 {\n            font-size: 2.3044444444em\n        }\n\n        .katex .fontsize-ensurer.reset-size5.size11,\n        .katex .sizing.reset-size5.size11 {\n            font-size: 2.7644444444em\n        }\n\n        .katex .fontsize-ensurer.reset-size6.size1,\n        .katex .sizing.reset-size6.size1 {\n            font-size: .5em\n        }\n\n        .katex .fontsize-ensurer.reset-size6.size2,\n        .katex .sizing.reset-size6.size2 {\n            font-size: .6em\n        }\n\n        .katex .fontsize-ensurer.reset-size6.size3,\n        .katex .sizing.reset-size6.size3 {\n            font-size: .7em\n        }\n\n        .katex .fontsize-ensurer.reset-size6.size4,\n        .katex .sizing.reset-size6.size4 {\n            font-size: .8em\n        }\n\n        .katex .fontsize-ensurer.reset-size6.size5,\n        .katex .sizing.reset-size6.size5 {\n            font-size: .9em\n        }\n\n        .katex .fontsize-ensurer.reset-size6.size6,\n        .katex .sizing.reset-size6.size6 {\n            font-size: 1em\n        }\n\n        .katex .fontsize-ensurer.reset-size6.size7,\n        .katex .sizing.reset-size6.size7 {\n            font-size: 1.2em\n        }\n\n        .katex .fontsize-ensurer.reset-size6.size8,\n        .katex .sizing.reset-size6.size8 {\n            font-size: 1.44em\n        }\n\n        .katex .fontsize-ensurer.reset-size6.size9,\n        .katex .sizing.reset-size6.size9 {\n            font-size: 1.728em\n        }\n\n        .katex .fontsize-ensurer.reset-size6.size10,\n        .katex .sizing.reset-size6.size10 {\n            font-size: 2.074em\n        }\n\n        .katex .fontsize-ensurer.reset-size6.size11,\n        .katex .sizing.reset-size6.size11 {\n            font-size: 2.488em\n        }\n\n        .katex .fontsize-ensurer.reset-size7.size1,\n        .katex .sizing.reset-size7.size1 {\n            font-size: .4166666667em\n        }\n\n        .katex .fontsize-ensurer.reset-size7.size2,\n        .katex .sizing.reset-size7.size2 {\n            font-size: .5em\n        }\n\n        .katex .fontsize-ensurer.reset-size7.size3,\n        .katex .sizing.reset-size7.size3 {\n            font-size: .5833333333em\n        }\n\n        .katex .fontsize-ensurer.reset-size7.size4,\n        .katex .sizing.reset-size7.size4 {\n            font-size: .6666666667em\n        }\n\n        .katex .fontsize-ensurer.reset-size7.size5,\n        .katex .sizing.reset-size7.size5 {\n            font-size: .75em\n        }\n\n        .katex .fontsize-ensurer.reset-size7.size6,\n        .katex .sizing.reset-size7.size6 {\n            font-size: .8333333333em\n        }\n\n        .katex .fontsize-ensurer.reset-size7.size7,\n        .katex .sizing.reset-size7.size7 {\n            font-size: 1em\n        }\n\n        .katex .fontsize-ensurer.reset-size7.size8,\n        .katex .sizing.reset-size7.size8 {\n            font-size: 1.2em\n        }\n\n        .katex .fontsize-ensurer.reset-size7.size9,\n        .katex .sizing.reset-size7.size9 {\n            font-size: 1.44em\n        }\n\n        .katex .fontsize-ensurer.reset-size7.size10,\n        .katex .sizing.reset-size7.size10 {\n            font-size: 1.7283333333em\n        }\n\n        .katex .fontsize-ensurer.reset-size7.size11,\n        .katex .sizing.reset-size7.size11 {\n            font-size: 2.0733333333em\n        }\n\n        .katex .fontsize-ensurer.reset-size8.size1,\n        .katex .sizing.reset-size8.size1 {\n            font-size: .3472222222em\n        }\n\n        .katex .fontsize-ensurer.reset-size8.size2,\n        .katex .sizing.reset-size8.size2 {\n            font-size: .4166666667em\n        }\n\n        .katex .fontsize-ensurer.reset-size8.size3,\n        .katex .sizing.reset-size8.size3 {\n            font-size: .4861111111em\n        }\n\n        .katex .fontsize-ensurer.reset-size8.size4,\n        .katex .sizing.reset-size8.size4 {\n            font-size: .5555555556em\n        }\n\n        .katex .fontsize-ensurer.reset-size8.size5,\n        .katex .sizing.reset-size8.size5 {\n            font-size: .625em\n        }\n\n        .katex .fontsize-ensurer.reset-size8.size6,\n        .katex .sizing.reset-size8.size6 {\n            font-size: .6944444444em\n        }\n\n        .katex .fontsize-ensurer.reset-size8.size7,\n        .katex .sizing.reset-size8.size7 {\n            font-size: .8333333333em\n        }\n\n        .katex .fontsize-ensurer.reset-size8.size8,\n        .katex .sizing.reset-size8.size8 {\n            font-size: 1em\n        }\n\n        .katex .fontsize-ensurer.reset-size8.size9,\n        .katex .sizing.reset-size8.size9 {\n            font-size: 1.2em\n        }\n\n        .katex .fontsize-ensurer.reset-size8.size10,\n        .katex .sizing.reset-size8.size10 {\n            font-size: 1.4402777778em\n        }\n\n        .katex .fontsize-ensurer.reset-size8.size11,\n        .katex .sizing.reset-size8.size11 {\n            font-size: 1.7277777778em\n        }\n\n        .katex .fontsize-ensurer.reset-size9.size1,\n        .katex .sizing.reset-size9.size1 {\n            font-size: .2893518519em\n        }\n\n        .katex .fontsize-ensurer.reset-size9.size2,\n        .katex .sizing.reset-size9.size2 {\n            font-size: .3472222222em\n        }\n\n        .katex .fontsize-ensurer.reset-size9.size3,\n        .katex .sizing.reset-size9.size3 {\n            font-size: .4050925926em\n        }\n\n        .katex .fontsize-ensurer.reset-size9.size4,\n        .katex .sizing.reset-size9.size4 {\n            font-size: .462962963em\n        }\n\n        .katex .fontsize-ensurer.reset-size9.size5,\n        .katex .sizing.reset-size9.size5 {\n            font-size: .5208333333em\n        }\n\n        .katex .fontsize-ensurer.reset-size9.size6,\n        .katex .sizing.reset-size9.size6 {\n            font-size: .5787037037em\n        }\n\n        .katex .fontsize-ensurer.reset-size9.size7,\n        .katex .sizing.reset-size9.size7 {\n            font-size: .6944444444em\n        }\n\n        .katex .fontsize-ensurer.reset-size9.size8,\n        .katex .sizing.reset-size9.size8 {\n            font-size: .8333333333em\n        }\n\n        .katex .fontsize-ensurer.reset-size9.size9,\n        .katex .sizing.reset-size9.size9 {\n            font-size: 1em\n        }\n\n        .katex .fontsize-ensurer.reset-size9.size10,\n        .katex .sizing.reset-size9.size10 {\n            font-size: 1.2002314815em\n        }\n\n        .katex .fontsize-ensurer.reset-size9.size11,\n        .katex .sizing.reset-size9.size11 {\n            font-size: 1.4398148148em\n        }\n\n        .katex .fontsize-ensurer.reset-size10.size1,\n        .katex .sizing.reset-size10.size1 {\n            font-size: .2410800386em\n        }\n\n        .katex .fontsize-ensurer.reset-size10.size2,\n        .katex .sizing.reset-size10.size2 {\n            font-size: .2892960463em\n        }\n\n        .katex .fontsize-ensurer.reset-size10.size3,\n        .katex .sizing.reset-size10.size3 {\n            font-size: .337512054em\n        }\n\n        .katex .fontsize-ensurer.reset-size10.size4,\n        .katex .sizing.reset-size10.size4 {\n            font-size: .3857280617em\n        }\n\n        .katex .fontsize-ensurer.reset-size10.size5,\n        .katex .sizing.reset-size10.size5 {\n            font-size: .4339440694em\n        }\n\n        .katex .fontsize-ensurer.reset-size10.size6,\n        .katex .sizing.reset-size10.size6 {\n            font-size: .4821600771em\n        }\n\n        .katex .fontsize-ensurer.reset-size10.size7,\n        .katex .sizing.reset-size10.size7 {\n            font-size: .5785920926em\n        }\n\n        .katex .fontsize-ensurer.reset-size10.size8,\n        .katex .sizing.reset-size10.size8 {\n            font-size: .6943105111em\n        }\n\n        .katex .fontsize-ensurer.reset-size10.size9,\n        .katex .sizing.reset-size10.size9 {\n            font-size: .8331726133em\n        }\n\n        .katex .fontsize-ensurer.reset-size10.size10,\n        .katex .sizing.reset-size10.size10 {\n            font-size: 1em\n        }\n\n        .katex .fontsize-ensurer.reset-size10.size11,\n        .katex .sizing.reset-size10.size11 {\n            font-size: 1.1996142719em\n        }\n\n        .katex .fontsize-ensurer.reset-size11.size1,\n        .katex .sizing.reset-size11.size1 {\n            font-size: .2009646302em\n        }\n\n        .katex .fontsize-ensurer.reset-size11.size2,\n        .katex .sizing.reset-size11.size2 {\n            font-size: .2411575563em\n        }\n\n        .katex .fontsize-ensurer.reset-size11.size3,\n        .katex .sizing.reset-size11.size3 {\n            font-size: .2813504823em\n        }\n\n        .katex .fontsize-ensurer.reset-size11.size4,\n        .katex .sizing.reset-size11.size4 {\n            font-size: .3215434084em\n        }\n\n        .katex .fontsize-ensurer.reset-size11.size5,\n        .katex .sizing.reset-size11.size5 {\n            font-size: .3617363344em\n        }\n\n        .katex .fontsize-ensurer.reset-size11.size6,\n        .katex .sizing.reset-size11.size6 {\n            font-size: .4019292605em\n        }\n\n        .katex .fontsize-ensurer.reset-size11.size7,\n        .katex .sizing.reset-size11.size7 {\n            font-size: .4823151125em\n        }\n\n        .katex .fontsize-ensurer.reset-size11.size8,\n        .katex .sizing.reset-size11.size8 {\n            font-size: .578778135em\n        }\n\n        .katex .fontsize-ensurer.reset-size11.size9,\n        .katex .sizing.reset-size11.size9 {\n            font-size: .6945337621em\n        }\n\n        .katex .fontsize-ensurer.reset-size11.size10,\n        .katex .sizing.reset-size11.size10 {\n            font-size: .8336012862em\n        }\n\n        .katex .fontsize-ensurer.reset-size11.size11,\n        .katex .sizing.reset-size11.size11 {\n            font-size: 1em\n        }\n\n        .katex .delimsizing.size1 {\n            font-family: KaTeX_Size1\n        }\n\n        .katex .delimsizing.size2 {\n            font-family: KaTeX_Size2\n        }\n\n        .katex .delimsizing.size3 {\n            font-family: KaTeX_Size3\n        }\n\n        .katex .delimsizing.size4 {\n            font-family: KaTeX_Size4\n        }\n\n        .katex .delimsizing.mult .delim-size1\u003espan {\n            font-family: KaTeX_Size1\n        }\n\n        .katex .delimsizing.mult .delim-size4\u003espan {\n            font-family: KaTeX_Size4\n        }\n\n        .katex .nulldelimiter {\n            display: inline-block;\n            width: .12em\n        }\n\n        .katex .delimcenter,\n        .katex .op-symbol {\n            position: relative\n        }\n\n        .katex .op-symbol.small-op {\n            font-family: KaTeX_Size1\n        }\n\n        .katex .op-symbol.large-op {\n            font-family: KaTeX_Size2\n        }\n\n        .katex .accent\u003e.vlist-t,\n        .katex .op-limits\u003e.vlist-t {\n            text-align: center\n        }\n\n        .katex .accent .accent-body {\n            position: relative\n        }\n\n        .katex .accent .accent-body:not(.accent-full) {\n            width: 0\n        }\n\n        .katex .overlay {\n            display: block\n        }\n\n        .katex .mtable .vertical-separator {\n            display: inline-block;\n            min-width: 1px\n        }\n\n        .katex .mtable .arraycolsep {\n            display: inline-block\n        }\n\n        .katex .mtable .col-align-c\u003e.vlist-t {\n            text-align: center\n        }\n\n        .katex .mtable .col-align-l\u003e.vlist-t {\n            text-align: left\n        }\n\n        .katex .mtable .col-align-r\u003e.vlist-t {\n            text-align: right\n        }\n\n        .katex .svg-align {\n            text-align: left\n        }\n\n        .katex svg {\n            fill: currentColor;\n            stroke: currentColor;\n            fill-rule: nonzero;\n            fill-opacity: 1;\n            stroke-width: 1;\n            stroke-linecap: butt;\n            stroke-linejoin: miter;\n            stroke-miterlimit: 4;\n            stroke-dasharray: none;\n            stroke-dashoffset: 0;\n            stroke-opacity: 1;\n            display: block;\n            height: inherit;\n            position: absolute;\n            width: 100%\n        }\n\n        .katex svg path {\n            stroke: none\n        }\n\n        .katex img {\n            border-style: none;\n            max-height: none;\n            max-width: none;\n            min-height: 0;\n            min-width: 0\n        }\n\n        .katex .stretchy {\n            display: block;\n            overflow: hidden;\n            position: relative;\n            width: 100%\n        }\n\n        .katex .stretchy:after,\n        .katex .stretchy:before {\n            content: \"\"\n        }\n\n        .katex .hide-tail {\n            overflow: hidden;\n            position: relative;\n            width: 100%\n        }\n\n        .katex .halfarrow-left {\n            left: 0;\n            overflow: hidden;\n            position: absolute;\n            width: 50.2%\n        }\n\n        .katex .halfarrow-right {\n            overflow: hidden;\n            position: absolute;\n            right: 0;\n            width: 50.2%\n        }\n\n        .katex .brace-left {\n            left: 0;\n            overflow: hidden;\n            position: absolute;\n            width: 25.1%\n        }\n\n        .katex .brace-center {\n            left: 25%;\n            overflow: hidden;\n            position: absolute;\n            width: 50%\n        }\n\n        .katex .brace-right {\n            overflow: hidden;\n            position: absolute;\n            right: 0;\n            width: 25.1%\n        }\n\n        .katex .x-arrow-pad {\n            padding: 0 .5em\n        }\n\n        .katex .cd-arrow-pad {\n            padding: 0 .55556em 0 .27778em\n        }\n\n        .katex .mover,\n        .katex .munder,\n        .katex .x-arrow {\n            text-align: center\n        }\n\n        .katex .boxpad {\n            padding: 0 .3em\n        }\n\n        .katex .fbox,\n        .katex .fcolorbox {\n            border: .04em solid;\n            box-sizing: border-box\n        }\n\n        .katex .cancel-pad {\n            padding: 0 .2em\n        }\n\n        .katex .cancel-lap {\n            margin-left: -.2em;\n            margin-right: -.2em\n        }\n\n        .katex .sout {\n            border-bottom-style: solid;\n            border-bottom-width: .08em\n        }\n\n        .katex .angl {\n            border-right: .049em solid;\n            border-top: .049em solid;\n            box-sizing: border-box;\n            margin-right: .03889em\n        }\n\n        .katex .anglpad {\n            padding: 0 .03889em\n        }\n\n        .katex .eqn-num:before {\n            content: \"(\" counter(katexEqnNo) \")\";\n            counter-increment: katexEqnNo\n        }\n\n        .katex .mml-eqn-num:before {\n            content: \"(\" counter(mmlEqnNo) \")\";\n            counter-increment: mmlEqnNo\n        }\n\n        .katex .mtr-glue {\n            width: 50%\n        }\n\n        .katex .cd-vert-arrow {\n            display: inline-block;\n            position: relative\n        }\n\n        .katex .cd-label-left {\n            display: inline-block;\n            position: absolute;\n            right: calc(50% + .3em);\n            text-align: left\n        }\n\n        .katex .cd-label-right {\n            display: inline-block;\n            left: calc(50% + .3em);\n            position: absolute;\n            text-align: right\n        }\n\n        .katex-display {\n            display: block;\n            margin: 1em 0;\n            text-align: center\n        }\n\n        .katex-display\u003e.katex {\n            display: block;\n            text-align: center;\n            white-space: nowrap\n        }\n\n        .katex-display\u003e.katex\u003e.katex-html {\n            display: block;\n            position: relative\n        }\n\n        .katex-display\u003e.katex\u003e.katex-html\u003e.tag {\n            position: absolute;\n            right: 0\n        }\n\n        .katex-display.leqno\u003e.katex\u003e.katex-html\u003e.tag {\n            left: 0;\n            right: auto\n        }\n\n        .katex-display.fleqn\u003e.katex {\n            padding-left: 2em;\n            text-align: left\n        }\n\n        body {\n            counter-reset: katexEqnNo mmlEqnNo\n        }\n    \u003c/style\u003e\n    \u003cstyle\u003e\n        /*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n        .katex-error {\n            color: var(--vscode-editorError-foreground);\n        }\n    \u003c/style\u003e\n\n\u003c/head\u003e\n\n\u003cbody class=\"vscode-body vscode-light\"\u003e\n    \u003cdiv data-line=\"0\" class=\"code-line\" dir=\"auto\"\u003e\u003c/div\u003e\n    \u003cp id=\"ws13-logo\"\u003e\n        \u003cimg src=\"logo/logo-ws13.png\" alt=\"ws13 logo\" width=\"200\"\u003e\n    \u003c/p\u003e\n    \u003ch1 data-line=\"5\" class=\"code-line\" dir=\"auto\" id=\"ws13--websocket-api-v110\" tabindex=\"-1\"\u003ews13 — WebSocket API\n        v1.1.0\u003c/h1\u003e\n    \u003cp data-line=\"7\" class=\"code-line\" dir=\"auto\"\u003eModular, extensible and operations-friendly WebSocket framework for\n        Node.js. This release focuses on a small, stable core so dependent projects can proceed; extensions (\u003ca\n            href=\"./extensions/channels/README.md\"\n            data-href=\"./extensions/channels/README.md\"\u003e\u003ccode\u003echannels\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"./extensions/auth/README.md\"\n            data-href=\"./extensions/auth/README.md\"\u003e\u003ccode\u003eauth\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"./extensions/history/README.md\"\n            data-href=\"./extensions/history/README.md\"\u003e\u003ccode\u003ehistory\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"./extensions/events/README.md\"\n            data-href=\"./extensions/events/README.md\"\u003e\u003ccode\u003eevents\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"./extensions/admin/README.md\"\n            data-href=\"./extensions/admin/README.md\"\u003e\u003ccode\u003eadmin\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"./extensions/routing/README.md\"\n            data-href=\"./extensions/routing/README.md\"\u003e\u003ccode\u003erouting\u003c/code\u003e\u003c/a\u003e, \u003ca\n            href=\"./extensions/heartbeat/README.md\"\n            data-href=\"./extensions/heartbeat/README.md\"\u003e\u003ccode\u003eheartbeat\u003c/code\u003e\u003c/a\u003e, \u003ca\n            href=\"./extensions/message-meta/README.md\"\n            data-href=\"./extensions/message-meta/README.md\"\u003e\u003ccode\u003emessage-meta\u003c/code\u003e\u003c/a\u003e,\n        \u003ccode\u003epermessage-deflate\u003c/code\u003e) exist as planned work and will be completed and documented in follow-up\n        releases.\u003c/p\u003e\n    \u003cp data-line=\"9\" class=\"code-line\" dir=\"auto\"\u003eStatus: core stable and testable — extensions work in progress (APIs\n        present in repository; integration examples available in examples/).\u003c/p\u003e\n    \u003ch2 data-line=\"11\" class=\"code-line\" dir=\"auto\" id=\"-table-of-contents\" tabindex=\"-1\"\u003e📚 Table of Contents\u003c/h2\u003e\n    \u003cul data-line=\"13\" class=\"code-line\" dir=\"auto\"\u003e\n        \u003cli data-line=\"13\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"#-highlights-v110\" data-href=\"#-highlights-v110\"\u003e✨\n                Highlights\u003c/a\u003e\u003c/li\u003e\n        \u003cli data-line=\"14\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"#-installation\" data-href=\"#-installation\"\u003e📦\n                Installation\u003c/a\u003e\u003c/li\u003e\n        \u003cli data-line=\"15\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"#-quick-start--minimal-server\"\n                data-href=\"#-quick-start--minimal-server\"\u003e🚀 Quick start\u003c/a\u003e\u003c/li\u003e\n        \u003cli data-line=\"16\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"#-core-api-summary\" data-href=\"#-core-api-summary\"\u003e🧩\n                Core API\u003c/a\u003e\u003c/li\u003e\n        \u003cli data-line=\"17\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"#-tests\" data-href=\"#-tests\"\u003e🧪 Tests\u003c/a\u003e\u003c/li\u003e\n        \u003cli data-line=\"18\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"#-extension-roadmap-short\"\n                data-href=\"#-extension-roadmap-short\"\u003e🧩 Extension roadmap\u003c/a\u003e\u003c/li\u003e\n        \u003cli data-line=\"19\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"#-operational-notes\" data-href=\"#-operational-notes\"\u003e🛠\n                Operational notes\u003c/a\u003e\u003c/li\u003e\n        \u003cli data-line=\"20\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"#-project-structure\" data-href=\"#-project-structure\"\u003e📁\n                Project Structure\u003c/a\u003e\u003c/li\u003e\n        \u003cli data-line=\"21\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"#-license\" data-href=\"#-license\"\u003e📜 License - MIT\u003c/a\u003e\n        \u003c/li\u003e\n    \u003c/ul\u003e\n    \u003chr data-line=\"23\" class=\"code-line\" dir=\"auto\"\u003e\n    \u003ch2 data-line=\"25\" class=\"code-line\" dir=\"auto\" id=\"-highlights-v110\" tabindex=\"-1\"\u003e✨ Highlights (v1.1.0)\u003c/h2\u003e\n    \u003cul data-line=\"27\" class=\"code-line\" dir=\"auto\"\u003e\n        \u003cli data-line=\"27\" class=\"code-line\" dir=\"auto\"\u003eSmall, well-tested core for WebSocket handshake, frame\n            parsing/serialisation and basic client/server modes.\u003c/li\u003e\n        \u003cli data-line=\"28\" class=\"code-line\" dir=\"auto\"\u003e\u003ccode\u003ecreateRegistry()\u003c/code\u003e — lightweight connection registry\n            with broadcast and auto-clean.\u003c/li\u003e\n        \u003cli data-line=\"29\" class=\"code-line\" dir=\"auto\"\u003e\u003ccode\u003eattachServer(server, opts)\u003c/code\u003e — simple HTTP upgrade\n            wiring.\u003c/li\u003e\n        \u003cli data-line=\"30\" class=\"code-line\" dir=\"auto\"\u003eBuilt-in support for \u003ccode\u003epermessage-deflate\u003c/code\u003e (RFC 7692)\n            provided as an optional extension instance.\u003c/li\u003e\n        \u003cli data-line=\"31\" class=\"code-line\" dir=\"auto\"\u003eClient-side reconnect helpers (configurable) and heartbeat\n            primitives in core.\u003c/li\u003e\n        \u003cli data-line=\"32\" class=\"code-line\" dir=\"auto\"\u003eTypeScript definitions included ('index.d.ts') for IDE support.\n        \u003c/li\u003e\n        \u003cli data-line=\"33\" class=\"code-line\" dir=\"auto\"\u003eTests included for core registry and basic behaviour (see\n            'index.test.js').\u003c/li\u003e\n    \u003c/ul\u003e\n    \u003cp data-line=\"35\" class=\"code-line\" dir=\"auto\"\u003eExtensions (\u003ca href=\"./extensions/channels/README.md\"\n            data-href=\"./extensions/channels/README.md\"\u003e\u003ccode\u003echannels\u003c/code\u003e\u003c/a\u003e, \u003ca\n            href=\"./extensions/events/README.md\" data-href=\"./extensions/events/README.md\"\u003e\u003ccode\u003eevents\u003c/code\u003e\u003c/a\u003e, \u003ca\n            href=\"./extensions/history/README.md\" data-href=\"./extensions/history/README.md\"\u003e\u003ccode\u003ehistory\u003c/code\u003e\u003c/a\u003e,\n        \u003ca href=\"./extensions/admin/README.md\" data-href=\"./extensions/admin/README.md\"\u003e\u003ccode\u003eadmin\u003c/code\u003e\u003c/a\u003e, \u003ca\n            href=\"./extensions/routing/README.md\" data-href=\"./extensions/routing/README.md\"\u003e\u003ccode\u003erouting\u003c/code\u003e\u003c/a\u003e,\n        \u003ca href=\"./extensions/message-meta/README.md\"\n            data-href=\"./extensions/message-meta/README.md\"\u003e\u003ccode\u003emessage-meta\u003c/code\u003e\u003c/a\u003e, \u003ca\n            href=\"./extensions/heartbeat/README.md\"\n            data-href=\"./extensions/heartbeat/README.md\"\u003e\u003ccode\u003eheartbeat\u003c/code\u003e\u003c/a\u003e) are available as separate modules\n        in the repo but marked WIP — README below points to that.\u003c/p\u003e\n    \u003cdiv data-line=\"37\" class=\"code-line\" dir=\"auto\"\u003e\u003c/div\u003e\n    \u003cp align=\"right\"\u003e\u003ca href=\"#ws13-logo\"\u003eBack to top ↑\u003c/a\u003e\u003c/p\u003e\n    \u003chr data-line=\"39\" class=\"code-line\" dir=\"auto\"\u003e\n    \u003ch2 data-line=\"41\" class=\"code-line\" dir=\"auto\" id=\"-installation\" tabindex=\"-1\"\u003e📦 Installation\u003c/h2\u003e\n    \u003cp data-line=\"43\" class=\"code-line\" dir=\"auto\"\u003enpm:\u003c/p\u003e\n    \u003cpre\u003e\u003ccode data-line=\"45\" class=\"code-line language-bash\" dir=\"auto\"\u003enpm install ws13\n\u003c/code\u003e\u003c/pre\u003e\n    \u003cp data-line=\"49\" class=\"code-line\" dir=\"auto\"\u003eyarn:\u003c/p\u003e\n    \u003cpre\u003e\u003ccode data-line=\"51\" class=\"code-line language-bash\" dir=\"auto\"\u003eyarn add ws13\n\u003c/code\u003e\u003c/pre\u003e\n    \u003cdiv data-line=\"55\" class=\"code-line\" dir=\"auto\"\u003e\u003c/div\u003e\n    \u003cp align=\"right\"\u003e\u003ca href=\"#ws13-logo\"\u003eBack to top ↑\u003c/a\u003e\u003c/p\u003e\n    \u003chr data-line=\"57\" class=\"code-line\" dir=\"auto\"\u003e\n    \u003ch2 data-line=\"59\" class=\"code-line\" dir=\"auto\" id=\"-quick-start--minimal-server\" tabindex=\"-1\"\u003e🚀 Quick start —\n        minimal server\u003c/h2\u003e\n    \u003cp data-line=\"61\" class=\"code-line\" dir=\"auto\"\u003eThis example uses the core createWebSocket exported from the package.\n    \u003c/p\u003e\n    \u003cpre\u003e\u003ccode data-line=\"63\" class=\"code-line language-js\" dir=\"auto\"\u003e\u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e http = \u003cspan class=\"hljs-built_in\"\u003erequire\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e'http'\u003c/span\u003e);\n\u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e createWebSocket = \u003cspan class=\"hljs-built_in\"\u003erequire\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e'ws13'\u003c/span\u003e);\n\n\u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e server = http.\u003cspan class=\"hljs-title function_\"\u003ecreateServer\u003c/span\u003e();\n\n\u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e { registry } = createWebSocket.\u003cspan class=\"hljs-title function_\"\u003eattachServer\u003c/span\u003e(server, {\n  \u003cspan class=\"hljs-title function_\"\u003eonConnect\u003c/span\u003e(\u003cspan class=\"hljs-params\"\u003ews, req\u003c/span\u003e) {\n    ws.\u003cspan class=\"hljs-title function_\"\u003esend\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e'Welcome'\u003c/span\u003e);\n    ws.\u003cspan class=\"hljs-title function_\"\u003eon\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e'message'\u003c/span\u003e, \u003cspan class=\"hljs-function\"\u003e(\u003cspan class=\"hljs-params\"\u003eevt\u003c/span\u003e) =\u0026gt;\u003c/span\u003e {\n      \u003cspan class=\"hljs-comment\"\u003e// simple echo\u003c/span\u003e\n      ws.\u003cspan class=\"hljs-title function_\"\u003esend\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e`Echo: \u003cspan class=\"hljs-subst\"\u003e${evt.data}\u003c/span\u003e`\u003c/span\u003e);\n    });\n  }\n});\n\nserver.\u003cspan class=\"hljs-title function_\"\u003elisten\u003c/span\u003e(\u003cspan class=\"hljs-number\"\u003e8080\u003c/span\u003e);\n\u003c/code\u003e\u003c/pre\u003e\n    \u003cp data-line=\"82\" class=\"code-line\" dir=\"auto\"\u003eClient (Node.js reusing createWebSocket in client mode):\u003c/p\u003e\n    \u003cpre\u003e\u003ccode data-line=\"84\" class=\"code-line language-js\" dir=\"auto\"\u003e\u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e http = \u003cspan class=\"hljs-built_in\"\u003erequire\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e'http'\u003c/span\u003e);\n\u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e createWebSocket = \u003cspan class=\"hljs-built_in\"\u003erequire\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e'ws13'\u003c/span\u003e);\n\n\u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e req = http.\u003cspan class=\"hljs-title function_\"\u003erequest\u003c/span\u003e({ \u003cspan class=\"hljs-attr\"\u003ehost\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e'127.0.0.1'\u003c/span\u003e, \u003cspan class=\"hljs-attr\"\u003eport\u003c/span\u003e: \u003cspan class=\"hljs-number\"\u003e8080\u003c/span\u003e, \u003cspan class=\"hljs-attr\"\u003epath\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e'/'\u003c/span\u003e });\n\u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e ws = \u003cspan class=\"hljs-title function_\"\u003ecreateWebSocket\u003c/span\u003e({ \u003cspan class=\"hljs-attr\"\u003erequest\u003c/span\u003e: req });\n\nws.\u003cspan class=\"hljs-title function_\"\u003eon\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e'open'\u003c/span\u003e, \u003cspan class=\"hljs-function\"\u003e() =\u0026gt;\u003c/span\u003e ws.\u003cspan class=\"hljs-title function_\"\u003esend\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e'hello'\u003c/span\u003e));\nws.\u003cspan class=\"hljs-title function_\"\u003eon\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e'message'\u003c/span\u003e, \u003cspan class=\"hljs-function\"\u003e(\u003cspan class=\"hljs-params\"\u003eevt\u003c/span\u003e) =\u0026gt;\u003c/span\u003e \u003cspan class=\"hljs-variable language_\"\u003econsole\u003c/span\u003e.\u003cspan class=\"hljs-title function_\"\u003elog\u003c/span\u003e(evt.\u003cspan class=\"hljs-property\"\u003edata\u003c/span\u003e));\n\u003c/code\u003e\u003c/pre\u003e\n    \u003cp data-line=\"95\" class=\"code-line\" dir=\"auto\"\u003eBrowser clients should use the native WebSocket API (wss:// for TLS).\n    \u003c/p\u003e\n    \u003cdiv data-line=\"97\" class=\"code-line\" dir=\"auto\"\u003e\u003c/div\u003e\n    \u003cp align=\"right\"\u003e\u003ca href=\"#ws13-logo\"\u003eBack to top ↑\u003c/a\u003e\u003c/p\u003e\n    \u003chr data-line=\"99\" class=\"code-line\" dir=\"auto\"\u003e\n    \u003ch2 data-line=\"101\" class=\"code-line\" dir=\"auto\" id=\"-core-api-summary\" tabindex=\"-1\"\u003e🧩 Core API (summary)\u003c/h2\u003e\n    \u003cul data-line=\"103\" class=\"code-line\" dir=\"auto\"\u003e\n        \u003cli data-line=\"103\" class=\"code-line\" dir=\"auto\"\u003e\u003ccode\u003ecreateWebSocket(options)\u003c/code\u003e: create client or server\n            WebSocket-like instance\u003c/li\u003e\n        \u003cli data-line=\"104\" class=\"code-line\" dir=\"auto\"\u003eoptions highlights: \u003ccode\u003erequest\u003c/code\u003e (IncomingMessage |\n            ClientRequest), \u003ccode\u003esocket\u003c/code\u003e, \u003ccode\u003eprotocol\u003c/code\u003e, \u003ccode\u003eorigin\u003c/code\u003e,\n            \u003ccode\u003eheartbeatInterval_ms\u003c/code\u003e, \u003ccode\u003eextension\u003c/code\u003e (or null), \u003ccode\u003eautoReconnect\u003c/code\u003e,\n            \u003ccode\u003erequestFactory\u003c/code\u003e, \u003ccode\u003eshouldReconnect\u003c/code\u003e, \u003ccode\u003eisDebug\u003c/code\u003e.\u003c/li\u003e\n        \u003cli data-line=\"105\" class=\"code-line\" dir=\"auto\"\u003ereturned object is EventEmitter-like and supports:\n            \u003ccode\u003esend(data)\u003c/code\u003e, \u003ccode\u003esendPing(data)\u003c/code\u003e, \u003ccode\u003esendPong(data)\u003c/code\u003e,\n            \u003ccode\u003eheartbeat(cb)\u003c/code\u003e, \u003ccode\u003eclose(code, reason)\u003c/code\u003e. Properties: \u003ccode\u003ereadyState\u003c/code\u003e,\n            \u003ccode\u003eip\u003c/code\u003e, \u003ccode\u003eport\u003c/code\u003e, \u003ccode\u003elatency_ms\u003c/code\u003e, \u003ccode\u003ebufferedAmount\u003c/code\u003e,\n            \u003ccode\u003eprotocol\u003c/code\u003e, \u003ccode\u003eextensions\u003c/code\u003e, \u003ccode\u003eurl\u003c/code\u003e.\u003c/li\u003e\n        \u003cli data-line=\"106\" class=\"code-line\" dir=\"auto\"\u003e\u003ccode\u003ecreateRegistry()\u003c/code\u003e: returns\n            \u003ccode\u003e{ add(ws), delete(ws), broadcast(data), size(), clients:Set }\u003c/code\u003e\u003c/li\u003e\n        \u003cli data-line=\"107\" class=\"code-line\" dir=\"auto\"\u003e\u003ccode\u003eregistry\u003c/code\u003e auto-cleans clients on\n            \u003ccode\u003eclose\u003c/code\u003e/\u003ccode\u003eerror\u003c/code\u003e.\u003c/li\u003e\n        \u003cli data-line=\"108\" class=\"code-line\" dir=\"auto\"\u003e\u003ccode\u003eattachServer(server, { registry?, onConnect? })\u003c/code\u003e:\n            attaches upgrade handler and returns \u003ccode\u003e{ registry }\u003c/code\u003e.\u003c/li\u003e\n        \u003cli data-line=\"109\" class=\"code-line\" dir=\"auto\"\u003eDefault \u003ccode\u003epermessage-deflate\u003c/code\u003e extension is provided\n            in core (createPermessageDeflate) and can be disabled via \u003ccode\u003ecreateWebSocket({ extension: null })\u003c/code\u003e.\n        \u003c/li\u003e\n    \u003c/ul\u003e\n    \u003cp data-line=\"111\" class=\"code-line\" dir=\"auto\"\u003eTypeScript definitions are available at 'index.d.ts' for full shapes\n        and options.\u003c/p\u003e\n    \u003cdiv data-line=\"113\" class=\"code-line\" dir=\"auto\"\u003e\u003c/div\u003e\n    \u003cp align=\"right\"\u003e\u003ca href=\"#ws13-logo\"\u003eBack to top ↑\u003c/a\u003e\u003c/p\u003e\n    \u003chr data-line=\"115\" class=\"code-line\" dir=\"auto\"\u003e\n    \u003ch2 data-line=\"117\" class=\"code-line\" dir=\"auto\" id=\"-tests\" tabindex=\"-1\"\u003e🧪 Tests\u003c/h2\u003e\n    \u003cp data-line=\"119\" class=\"code-line\" dir=\"auto\"\u003eProject ships basic tests for the core. Use test-runner-lite (or\n        Node directly) to run tests.\u003c/p\u003e\n    \u003cp data-line=\"121\" class=\"code-line\" dir=\"auto\"\u003eRun all tests:\u003c/p\u003e\n    \u003cpre\u003e\u003ccode data-line=\"123\" class=\"code-line language-bash\" dir=\"auto\"\u003enpm \u003cspan class=\"hljs-built_in\"\u003etest\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\n    \u003cp data-line=\"127\" class=\"code-line\" dir=\"auto\"\u003eRun the core test directly:\u003c/p\u003e\n    \u003cpre\u003e\u003ccode data-line=\"129\" class=\"code-line language-bash\" dir=\"auto\"\u003enode ./index.test.js\n\u003c/code\u003e\u003c/pre\u003e\n    \u003cp data-line=\"133\" class=\"code-line\" dir=\"auto\"\u003eExample core tests included:\u003c/p\u003e\n    \u003cul data-line=\"134\" class=\"code-line\" dir=\"auto\"\u003e\n        \u003cli data-line=\"134\" class=\"code-line\" dir=\"auto\"\u003eregistry add/delete and automatic cleanup on close/error\u003c/li\u003e\n        \u003cli data-line=\"135\" class=\"code-line\" dir=\"auto\"\u003eattachServer integration behaviour\u003c/li\u003e\n        \u003cli data-line=\"136\" class=\"code-line\" dir=\"auto\"\u003ebasic createWebSocket attachment helpers\u003c/li\u003e\n    \u003c/ul\u003e\n    \u003cp data-line=\"138\" class=\"code-line\" dir=\"auto\"\u003eAdd more tests as needed; tests live next to core and in each\n        extension folder when implemented.\u003c/p\u003e\n    \u003cdiv data-line=\"140\" class=\"code-line\" dir=\"auto\"\u003e\u003c/div\u003e\n    \u003cp align=\"right\"\u003e\u003ca href=\"#ws13-logo\"\u003eBack to top ↑\u003c/a\u003e\u003c/p\u003e\n    \u003chr data-line=\"142\" class=\"code-line\" dir=\"auto\"\u003e\n    \u003ch2 data-line=\"144\" class=\"code-line\" dir=\"auto\" id=\"-extension-roadmap-short\" tabindex=\"-1\"\u003e🧩 Extension roadmap\n        (short)\u003c/h2\u003e\n    \u003cp data-line=\"146\" class=\"code-line\" dir=\"auto\"\u003eThe following extensions exist as separate modules and will be fully\n        documented and stabilised in subsequent releases.\n        Current status: prototype/partial implementations present in repo.\u003c/p\u003e\n    \u003cul data-line=\"149\" class=\"code-line\" dir=\"auto\"\u003e\n        \u003cli data-line=\"149\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"./extensions/channels/README.md\"\n                data-href=\"./extensions/channels/README.md\"\u003e\u003ccode\u003echannels\u003c/code\u003e\u003c/a\u003e — channel-based pub/sub\u003c/li\u003e\n        \u003cli data-line=\"150\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"./extensions/message-meta/README.md\"\n                data-href=\"./extensions/message-meta/README.md\"\u003e\u003ccode\u003emessage-meta\u003c/code\u003e\u003c/a\u003e — typed messages with meta\n            (wrap/unwrap)\u003c/li\u003e\n        \u003cli data-line=\"151\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"./extensions/heartbeat/README.md\"\n                data-href=\"./extensions/heartbeat/README.md\"\u003e\u003ccode\u003eheartbeat\u003c/code\u003e\u003c/a\u003e — idle/timeout hooks and monitor\n        \u003c/li\u003e\n        \u003cli data-line=\"152\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"./extensions/history/README.md\"\n                data-href=\"./extensions/history/README.md\"\u003e\u003ccode\u003ehistory\u003c/code\u003e\u003c/a\u003e — per-channel replay buffer (last N\n            messages)\u003c/li\u003e\n        \u003cli data-line=\"153\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"./extensions/events/README.md\"\n                data-href=\"./extensions/events/README.md\"\u003e\u003ccode\u003eevents\u003c/code\u003e\u003c/a\u003e — JSON-RPC style event emitter\n            (ws.onEvent / ws.emitEvent)\u003c/li\u003e\n        \u003cli data-line=\"154\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"./extensions/admin/README.md\"\n                data-href=\"./extensions/admin/README.md\"\u003e\u003ccode\u003eadmin\u003c/code\u003e\u003c/a\u003e — HTTP + WebSocket admin API, CSV/JSON\n            export, disconnect/latency endpoints, live dashboard\u003c/li\u003e\n        \u003cli data-line=\"155\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"./extensions/routing/README.md\"\n                data-href=\"./extensions/routing/README.md\"\u003e\u003ccode\u003erouting\u003c/code\u003e\u003c/a\u003e — targeted delivery (sendToUser,\n            sendToRole, sendToIp)\u003c/li\u003e\n        \u003cli data-line=\"156\" class=\"code-line\" dir=\"auto\"\u003e\u003ca href=\"./extensions/auth/README.md\"\n                data-href=\"./extensions/auth/README.md\"\u003e\u003ccode\u003eauth\u003c/code\u003e\u003c/a\u003e — authentication and role-based\n            authorization\u003c/li\u003e\n    \u003c/ul\u003e\n    \u003cp data-line=\"158\" class=\"code-line\" dir=\"auto\"\u003eIf your project relies on a specific extension, tell me which one\n        and I will prioritise finishing it and publishing a stable interface.\u003c/p\u003e\n    \u003cdiv data-line=\"160\" class=\"code-line\" dir=\"auto\"\u003e\u003c/div\u003e\n    \u003cp align=\"right\"\u003e\u003ca href=\"#ws13-logo\"\u003eBack to top ↑\u003c/a\u003e\u003c/p\u003e\n    \u003chr data-line=\"162\" class=\"code-line\" dir=\"auto\"\u003e\n    \u003ch2 data-line=\"164\" class=\"code-line\" dir=\"auto\" id=\"-operational-notes\" tabindex=\"-1\"\u003e🛠 Operational notes\u003c/h2\u003e\n    \u003cul data-line=\"166\" class=\"code-line\" dir=\"auto\"\u003e\n        \u003cli data-line=\"166\" class=\"code-line\" dir=\"auto\"\u003eDefault \u003ccode\u003eheartbeatInterval_ms\u003c/code\u003e in core is 30s (can\n            be changed per socket).\u003c/li\u003e\n        \u003cli data-line=\"167\" class=\"code-line\" dir=\"auto\"\u003eWhen enabling compression, configure\n            \u003ccode\u003emaxDecompressSize\u003c/code\u003e to protect against decompression attacks.\u003c/li\u003e\n        \u003cli data-line=\"168\" class=\"code-line\" dir=\"auto\"\u003eRegistry clients are a Set; if you need ordered lists or\n            sharding, wrap registry accordingly.\u003c/li\u003e\n        \u003cli data-line=\"169\" class=\"code-line\" dir=\"auto\"\u003eThe core focuses on correctness of handshake and frame handling\n            — if you need production tuning (backpressure handling, batching or socket pooling) we can add recommended\n            patterns.\u003c/li\u003e\n    \u003c/ul\u003e\n    \u003cdiv data-line=\"171\" class=\"code-line\" dir=\"auto\"\u003e\u003c/div\u003e\n    \u003cp align=\"right\"\u003e\u003ca href=\"#ws13-logo\"\u003eBack to top ↑\u003c/a\u003e\u003c/p\u003e\n    \u003chr data-line=\"173\" class=\"code-line\" dir=\"auto\"\u003e\n    \u003ch2 data-line=\"175\" class=\"code-line\" dir=\"auto\" id=\"-project-structure\" tabindex=\"-1\"\u003e📁 Project Structure\u003c/h2\u003e\n    \u003cpre\u003e\u003ccode data-line=\"177\" class=\"code-line\" dir=\"auto\"\u003ews13/\n    core/\n        index.d.ts\n        index.js\n        index.test.js\n        permessage-deflate.js\n        README.md\n    extensions/\n        admin/\n            index.d.ts\n            index.js\n            index.test.js\n            README.md\n            express-middleware.d.ts\n            express-middleware.js\n            examples/\n                admin-api/\n                    server.js\n                admin-dashboard/\n                    admin-dashboard.html\n                admin-express-integration/\n                    index.js\n                    README.md\n        auth/\n            index.d.ts\n            index.js\n            index.test.js\n            README.md\n            examples/\n                auth-channels-client.js\n                auth-channels-server.js\n                server-with-admin.js\n        channels/\n            index.d.ts\n            index.js\n            index.test.js\n            README.md\n            examples/\n                channels/\n                    client.js\n                    server.js\n        events/\n            index.d.ts\n            index.js\n            index.test.js\n            README.md\n            examples/\n                events/\n                    client.js\n                    server.js\n        heartbeat/\n            index.d.ts\n            index.js\n            index.test.js\n            README.md\n            examples/\n                heartbeat/\n                    client.js\n        history/\n            index.d.ts\n            index.js\n            index.test.js\n            README.md\n            sqlite-adapter.js\n            sqlite-adapter.test.js\n            examples/\n                history/\n                    client.js\n                    server.js\n        message-meta/\n            index.d.ts\n            index.js\n            index.test.js\n            README.md\n            examples/\n                message-meta/\n                    client.js\n                    server.js\n                    routing-server.js\n        routing/\n            index.d.ts\n            index.js\n            index.test.js\n            README.md\n            examples/\n                routing/\n                    client.js\n                    server.js\n    logo/\n        logo-ws13.png\n    browser.js\n    index.d.ts\n    index.js\n    LICENSE\n    package.json\n    README.md\n    testRunner.js\n    wrapper.mjs\n\u003c/code\u003e\u003c/pre\u003e\n    \u003cdiv data-line=\"278\" class=\"code-line\" dir=\"auto\"\u003e\u003c/div\u003e\n    \u003cp align=\"right\"\u003e\u003ca href=\"#ws13-logo\"\u003eBack to top ↑\u003c/a\u003e\u003c/p\u003e\n    \u003chr data-line=\"280\" class=\"code-line\" dir=\"auto\"\u003e\n    \u003ch2 data-line=\"282\" class=\"code-line\" dir=\"auto\" id=\"-contributing--development\" tabindex=\"-1\"\u003e📌 Contributing \u0026amp;\n        development\u003c/h2\u003e\n    \u003cul data-line=\"284\" class=\"code-line\" dir=\"auto\"\u003e\n        \u003cli data-line=\"284\" class=\"code-line\" dir=\"auto\"\u003eIf you need only the core to unblock dependent projects, use\n            the provided core export and tests. Extensions will follow; they are useful but not required for core\n            adoption.\u003c/li\u003e\n        \u003cli data-line=\"285\" class=\"code-line\" dir=\"auto\"\u003eTell me which extension to stabilise first (\u003ca\n                href=\"./extensions/channels/README.md\"\n                data-href=\"./extensions/channels/README.md\"\u003e\u003ccode\u003echannels\u003c/code\u003e\u003c/a\u003e, \u003ca\n                href=\"./extensions/history/README.md\"\n                data-href=\"./extensions/history/README.md\"\u003e\u003ccode\u003ehistory\u003c/code\u003e\u003c/a\u003e, \u003ca\n                href=\"./extensions/events/README.md\" data-href=\"./extensions/events/README.md\"\u003e\u003ccode\u003eevents\u003c/code\u003e\u003c/a\u003e,\n            \u003ca href=\"./extensions/auth/README.md\" data-href=\"./extensions/auth/README.md\"\u003e\u003ccode\u003eauth\u003c/code\u003e\u003c/a\u003e, \u003ca\n                href=\"./extensions/admin/README.md\" data-href=\"./extensions/admin/README.md\"\u003e\u003ccode\u003eadmin\u003c/code\u003e\u003c/a\u003e or\n            \u003ca href=\"./extensions/routing/README.md\"\n                data-href=\"./extensions/routing/README.md\"\u003e\u003ccode\u003erouting\u003c/code\u003e\u003c/a\u003e) and I’ll prepare stable API docs,\n            tests, and examples.\u003c/li\u003e\n    \u003c/ul\u003e\n    \u003cdiv data-line=\"287\" class=\"code-line\" dir=\"auto\"\u003e\u003c/div\u003e\n    \u003cp align=\"right\"\u003e\u003ca href=\"#ws13-logo\"\u003eBack to top ↑\u003c/a\u003e\u003c/p\u003e\n    \u003chr data-line=\"289\" class=\"code-line\" dir=\"auto\"\u003e\n    \u003ch2 data-line=\"291\" class=\"code-line\" dir=\"auto\" id=\"-license\" tabindex=\"-1\"\u003e📜 License\u003c/h2\u003e\n    \u003cp data-line=\"293\" class=\"code-line\" dir=\"auto\"\u003eThis project is licensed under the MIT License.\u003cbr\u003e\n        Copyright © Manuel Lõhmus\u003c/p\u003e\n    \u003cdiv data-line=\"296\" class=\"code-line\" dir=\"auto\"\u003e\u003c/div\u003e\n    \u003cp align=\"right\"\u003e\u003ca href=\"#ws13-logo\"\u003eBack to top ↑\u003c/a\u003e\u003c/p\u003e\n    \u003chr data-line=\"298\" class=\"code-line\" dir=\"auto\"\u003e\n\n    \u003c!-- \u003cscript\u003evar qe=(e,t)=\u003e()=\u003e(t||e((t={exports:{}}).exports,t),t.exports);var He=qe((It,Ie)=\u003e{var ke=\"Expected a function\",Oe=NaN,ot=\"[object Symbol]\",st=/^\\s+|\\s+$/g,lt=/^[-+]0x[0-9a-f]+$/i,ct=/^0b[01]+$/i,dt=/^0o[0-7]+$/i,ut=parseInt,ft=typeof global==\"object\"\u0026\u0026global\u0026\u0026global.Object===Object\u0026\u0026global,mt=typeof self==\"object\"\u0026\u0026self\u0026\u0026self.Object===Object\u0026\u0026self,gt=ft||mt||Function(\"return this\")(),pt=Object.prototype,vt=pt.toString,ht=Math.max,bt=Math.min,pe=function(){return gt.Date.now()};function yt(e,t,n){var r,i,a,s,o,d,m=0,y=!1,T=!1,S=!0;if(typeof e!=\"function\")throw new TypeError(ke);t=De(t)||0,ne(n)\u0026\u0026(y=!!n.leading,T=\"maxWait\"in n,a=T?ht(De(n.maxWait)||0,t):a,S=\"trailing\"in n?!!n.trailing:S);function N(g){var w=r,k=i;return r=i=void 0,m=g,s=e.apply(k,w),s}function re(g){return m=g,o=setTimeout(E,t),y?N(g):s}function X(g){var w=g-d,k=g-m,I=t-w","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuel-lohmus%2Fws13","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanuel-lohmus%2Fws13","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuel-lohmus%2Fws13/lists"}