- 扫描 ID:
- deb1a814-59c5-4182-ab20-418da25a6e05已完成
- 提交的 URL:
- https://hackmd.io/oS1FK1ZcTWew96eMsmAWFw
- 报告完成时间:
链接 · 找到 0 个
从页面中识别出的传出链接
JavaScript 变量 · 找到 38 个
在页面窗口对象上加载的全局 JavaScript 变量是在函数外部声明的变量,可以从当前范围内的代码中的任何位置访问
名称 | 类型 |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
dataLayer | object |
getTaggedEventAttributes | function |
isLocal | function |
isAutomation | function |
shouldIgnore | function |
handler | function |
logDebugEventMsg | function |
控制台日志消息 · 找到 1 条
记录到 Web 控制台的消息
类型 | 类别 | 记录 |
---|---|---|
error | network |
|
HTML
页面的原始 HTML 正文
<!DOCTYPE html><html lang="en-US"><head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="mobile-web-app-capable" content="yes">
<meta property="og:image" content="https://hackmd.io/images/media/HackMD-og.jpg">
<meta property="og:image:alt" content="HackMD - Collaborative Markdown Knowledge Base">
<meta property="fb:app_id" content="1436904003272070">
<meta name="csrf-token" content="KWZrxGTC-9mX87DhCR3zQ-4im3XiiK6tc3QI">
<title>403 Forbidden - HackMD</title>
<link rel="icon" type="image/png" href="https://hackmd.io/favicon.png">
<link rel="apple-touch-icon" href="https://hackmd.io/apple-touch-icon.png">
<!-- Google Tag Manager -->
<script async="" src="https://www.googletagmanager.com/gtm.js?id=GTM-KLW9Z3"></script><script nonce="">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-KLW9Z3');</script>
<!-- End Google Tag Manager -->
<link href="https://assets.hackmd.io/build/font-vendor.ea8218d7d4f468b2c430.css" rel="stylesheet"><link href="https://assets.hackmd.io/build/common-vendor.0a08ae20e14fefe857eb.css" rel="stylesheet"><link href="https://assets.hackmd.io/build/error-vendor.d05131935c3a4ffdf614.css" rel="stylesheet"><link href="https://assets.hackmd.io/build/error.8f1df91cd9c3cd4f0739.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js" integrity="sha256-3Jy/GbSLrg0o9y5Z5n1uw0qxZECH7C6OQpVBgNFYa0g=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js" integrity="sha256-g6iAfvZp+nDQ2TdTR/VVKJf3bGro4ub5fvWSWVRi2NE=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.9/es5-shim.min.js" integrity="sha256-8E4Is26QH0bD52WoQpcB+R/tcWQtpzlCojrybUd7Mxo=" crossorigin="anonymous"></script>
<![endif]-->
<script defer="" data-domain="hackmd.io" src="https://plausible.io/js/script.js"></script>
<script nonce="">
window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments); }
const keyboardWhiteList = ['a', 'span', 'button']
function getTaggedEventAttributes (e) {
const eventAttrs = { name: null, props: {} }
if (!e || !e.classList) return eventAttrs
const psEvent = /plausible-event-(.+)(=|--)(.+)/
for (const className of [...e.classList]) {
const [, key, , val] = className.match(psEvent) || []
if (!key || !val) continue
const value = val.replace(/\+/g, ' ')
switch (key.toLowerCase()) {
case 'name':
eventAttrs.name = value
break
default:
eventAttrs.props[key] = value
break
}
}
return eventAttrs
}
function isLocal () {
return /^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(location.hostname) || location.protocol === 'file:'
}
function isAutomation () {
return Boolean(window._phantom || window.__nightmare || window.navigator.webdriver || window.Cypress)
}
function shouldIgnore () {
return isLocal() ||
isAutomation() ||
window.localStorage.getItem('plausible_ignore') === 'true'
}
function handler (e) {
if (!window.plausible) return
if (!e.target || !('className' in e.target)) return
const ele = e.target
const eventAttrs = getTaggedEventAttributes(ele)
if (!eventAttrs.name) return
if (ele?.href) eventAttrs.props.url = ele.href
if (shouldIgnore()) {
if (window.debug) logDebugEventMsg(eventAttrs)
return
}
window.plausible(eventAttrs.name, { props: eventAttrs.props })
}
function logDebugEventMsg (eventAttrs) {
console.warn(
`Ignoring Event: "${eventAttrs.name}"`,
eventAttrs,
)
}
function keydownHandler (e) {
if (e.key !== 'Enter') return
if (e.target.nodeName.toLowerCase() === 'input') {
switch (e.target.type.toLowerCase()) {
case 'submit':
case 'button':
case 'reset':
case 'checkbox':
case 'radio':
case 'file':
case 'image':
case 'color':
break
default:
return
}
} else if (!keyboardWhiteList.includes(e.target.nodeName.toLowerCase())) {
return
}
handler(e)
}
document.addEventListener('mousedown', handler)
document.addEventListener('keydown', keydownHandler)
</script>
<style id="googleidentityservice_button_styles" nonce="">.qJTHM{-moz-user-select:none;color:#202124;direction:ltr;font-family:"Roboto-Regular",arial,sans-serif;font-weight:400;margin:0;overflow:hidden}.ynRLnc{left:-9999px;position:absolute;top:-9999px}.L6cTce{display:none}.bltWBb{word-break:break-all}.hSRGPd{color:#1a73e8;cursor:pointer;font-weight:500;text-decoration:none}.Bz112c-W3lGp{height:16px;width:16px}.Bz112c-E3DyYd{height:20px;width:20px}.Bz112c-r9oPif{height:24px;width:24px}.Bz112c-uaxL4e{-moz-border-radius:10px;border-radius:10px}.LgbsSe-Bz112c{display:block}.S9gUrf-YoZ4jf,.S9gUrf-YoZ4jf *{border:none;margin:0;padding:0}.fFW7wc-ibnC6b>.aZ2wEe>div{border-color:#4285f4}.P1ekSe-ZMv3u>div:nth-child(1){background-color:#1a73e8!important}.P1ekSe-ZMv3u>div:nth-child(2),.P1ekSe-ZMv3u>div:nth-child(3){background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,#1a73e8,#1a73e8)!important}.haAclf{display:inline-block}.nsm7Bb-HzV7m-LgbsSe{border-radius:4px;box-sizing:border-box;transition:background-color .218s,border-color .218s;-moz-user-select:none;background-color:#fff;background-image:none;border:1px solid #dadce0;color:#3c4043;cursor:pointer;font-family:"Google Sans",arial,sans-serif;font-size:14px;height:40px;letter-spacing:0.25px;outline:none;overflow:hidden;padding:0 12px;position:relative;text-align:center;vertical-align:middle;white-space:nowrap;width:auto}@media screen and (-ms-high-contrast:active){.nsm7Bb-HzV7m-LgbsSe{border:2px solid windowText;color:windowText}}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe{font-size:14px;height:32px;letter-spacing:0.25px;padding:0 10px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe{font-size:11px;height:20px;letter-spacing:0.3px;padding:0 8px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe{padding:0;width:40px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.pSzOP-SxQuSe{width:32px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.purZT-SxQuSe{width:20px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK{border-radius:20px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK.pSzOP-SxQuSe{border-radius:16px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK.purZT-SxQuSe{border-radius:10px}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc{border:none;color:#fff}.nsm7Bb-HzV7m-LgbsSe.MFS4be-v3pZbf-Ia7Qfc{background-color:#1a73e8}.nsm7Bb-HzV7m-LgbsSe.MFS4be-JaPV2b-Ia7Qfc{background-color:#202124;color:#e8eaed}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:18px;margin-right:8px;min-width:18px;width:18px}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:14px;min-width:14px;width:14px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:10px;min-width:10px;width:10px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin-left:8px;margin-right:-4px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin:0;padding:10px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{padding:8px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{padding:4px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-top-left-radius:3px;border-bottom-left-radius:3px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;justify-content:center;align-items:center;background-color:#fff;height:36px;margin-left:-10px;margin-right:12px;min-width:36px;width:36px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf .nsm7Bb-HzV7m-LgbsSe-Bz112c,.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin:0;padding:0}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{height:28px;margin-left:-8px;margin-right:10px;min-width:28px;width:28px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{height:16px;margin-left:-6px;margin-right:8px;min-width:16px;width:16px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:3px;margin-left:2px;margin-right:0;padding:0}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:18px}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:14px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:8px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-bN97Pc-sM5MNb{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;align-items:center;flex-direction:row;justify-content:space-between;flex-wrap:nowrap;height:100%;position:relative;width:100%}.nsm7Bb-HzV7m-LgbsSe .oXtfBe-l4eHX{justify-content:center}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-BPrWId{flex-grow:1;font-family:"Google Sans",arial,sans-serif;font-weight:500;overflow:hidden;text-overflow:ellipsis;vertical-align:top}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-BPrWId{font-weight:300}.nsm7Bb-HzV7m-LgbsSe .oXtfBe-l4eHX .nsm7Bb-HzV7m-LgbsSe-BPrWId{flex-grow:0}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-MJoBVe{transition:background-color .218s;bottom:0;left:0;position:absolute;right:0;top:0}.nsm7Bb-HzV7m-LgbsSe:hover,.nsm7Bb-HzV7m-LgbsSe:focus{box-shadow:none;border-color:#d2e3fc;outline:none}.nsm7Bb-HzV7m-LgbsSe:hover .nsm7Bb-HzV7m-LgbsSe-MJoBVe,.nsm7Bb-HzV7m-LgbsSe:focus .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(66,133,244,.04)}.nsm7Bb-HzV7m-LgbsSe:active .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(66,133,244,.1)}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:hover .nsm7Bb-HzV7m-LgbsSe-MJoBVe,.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:focus .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(255,255,255,.24)}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:active .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(255,255,255,.32)}.nsm7Bb-HzV7m-LgbsSe .n1UuX-DkfjY{border-radius:50%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;height:20px;margin-left:-4px;margin-right:8px;min-width:20px;width:20px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId{font-family:"Roboto";font-size:12px;text-align:left}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .ssJRIf,.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff .fmcmS{overflow:hidden;text-overflow:ellipsis}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;align-items:center;color:#5f6368;fill:#5f6368;font-size:11px;font-weight:400}.nsm7Bb-HzV7m-LgbsSe.jVeSEe.MFS4be-Ia7Qfc .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff{color:#e8eaed;fill:#e8eaed}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff .Bz112c{height:18px;margin:-3px -3px -3px 2px;min-width:18px;width:18px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:3px;border-bottom-right-radius:3px;margin-left:12px;margin-right:-10px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:18px}.L5Fo6c-sM5MNb{border:0;display:block;left:0;position:relative;top:0}.L5Fo6c-bF1uUb{-moz-border-radius:4px;border-radius:4px;bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0}.L5Fo6c-bF1uUb:focus{border:none;outline:none}sentinel{}</style><link id="googleidentityservice" type="text/css" media="all" href="https://accounts.google.com/gsi/style" rel="stylesheet"></head>
<body>
<nav class="navbar navbar-default navbar-fixed-top unselectable hidden-print font-brand-headline">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<a class="navbar-brand pull-left !text-icon-emphasize" style="float: left;" href="https://hackmd.io/">
<img class="w-6.5 h-auto !inline-block" src="https://hackmd.io/Logo.svg">
HackMD
</a>
</div>
</nav>
<div class="container-fluid hmd-text-center">
<div class="vertical-center-row">
<h1>403 Forbidden</h1>
<div class="blue-icon">
<img src="https://hackmd.io/forbidden.svg">
</div>
<p>
You don't have permission to access this resource.
<br>
Sign in or head back to home.
</p>
<div class="action">
<a type="button" class="btn btn-lg btn-primary ui-home" href="https://hackmd.io/">Home</a>
<a type="button" class="btn btn-lg btn-success ui-signin" data-toggle="modal" data-target=".signin-modal">Sign in</a>
</div>
</div>
</div>
<!-- signin modal -->
<div class="modal fade signin-modal" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<button type="button" class="close" data-dismiss="modal" aria-label="Close" style="margin-top: 10px; right: 20px; position: absolute;"><span aria-hidden="true">×</span></button>
<h3>Sign in</h3>
<form data-toggle="validator" role="form" class="form-horizontal" method="post" enctype="application/x-www-form-urlencoded" id="signin-form">
<div class="hmd-dn"><input type="hidden" name="_csrf" value="KWZrxGTC-9mX87DhCR3zQ-4im3XiiK6tc3QI"></div>
<div class="hmd-dn"><input type="hidden" name="create_team" value="false"></div>
<div class="hmd-dn"><input type="hidden" name="create_paid_team" value="false"></div>
<div class="form-group ">
<label for="email" class="control-label">Email</label>
<label for="inputEmail" class="control-label pull-right errors">
</label>
<span class="help-block control-label with-errors pull-right" style="margin-top: 14px"></span>
<div class="input-block">
<input type="email" class="form-control" name="email" placeholder="Your email" required="" autocomplete="email">
<span class="error-sign"></span>
</div>
</div>
<div class="form-group ">
<label for="password" class="control-label">Password</label>
<label for="inputPassword" class="control-label pull-right errors">
</label>
<span class="help-block control-label with-errors pull-right" style="margin-top: 14px"></span>
<div class="input-block">
<input type="password" class="form-control" name="password" placeholder="Your password" required="" autocomplete="current-password" maxlength="128">
<span class="error-sign"></span>
<span class="control-label pull-right !text-normal !leading-normal !font-normal !mt-1.5"><a href="https://hackmd.io/settings/forgotPassword" style="text-decoration: underline;">Forgot password</a></span>
</div>
</div>
<div style="text-align: center; padding-top: 15px; margin-bottom: 0px;">
<div hidden="" id="hmd-captcha" data-provider="" data-captcha-data="" class="flex justify-center"></div>
<input type="submit" class="neo-btn neo-btn-primary !justify-center !py-3.5 !mx-auto" formaction="https://hackmd.io/login" value="Sign in">
</div>
</form>
<p class="separator">or</p>
<p>By clicking below, you agree to our <a href="https://hackmd.io/s/terms" target="_blank">terms of service</a>.</p>
<script id="gsi-client" src="https://accounts.google.com/gsi/client" async="" defer="" nonce=""></script>
<script nonce="">
function handleCredentialResponse(response) {
const form = document.getElementById('sign-in-with-google-form')
form.children.credential.value = response.credential
form.children.method.value = location.href.toLowerCase() === 'https://hackmd.io/settings#general' ? 'merge' : 'login'
form.submit()
}
var GSI_READY = new Promise(function (resolve) {
function initialize () {
google.accounts.id.initialize({
client_id: '911617723593-drikdibvvn63slfd6kbqigo8ql1no55s.apps.googleusercontent.com',
callback: handleCredentialResponse
})
const loginPath = '/login'
const joinPath = '/join'
const renderButton = function () {
google.accounts.id.renderButton(
document.getElementById('sign-in-with-google-button'),
{ type: 'standard', width: 250 }
)
}
if (location.pathname.toLowerCase() === loginPath || location.pathname.toLowerCase() === joinPath) {
renderButton()
} else {
$('.signin-modal').one('shown.bs.modal', function () {
renderButton()
})
}
resolve()
}
window.addEventListener('load', function () { initialize() })
})
</script>
<form class="hidden" id="sign-in-with-google-form" action="/auth/google" method="post">
<input type="hidden" name="credential">
<input type="hidden" name="method">
</form>
<div class="social-buttons-container">
<div id="sign-in-with-google-button"></div>
<a href="https://hackmd.io/auth/facebook" class="btn btn-lg btn-block btn-social btn-facebook">
<i class="fa fa-facebook"></i> Sign in via Facebook
</a>
<a href="https://hackmd.io/auth/twitter" class="btn btn-lg btn-block btn-social btn-twitter">
<i class="fa fa-twitter"></i> Sign in via Twitter
</a>
<a href="https://hackmd.io/auth/github" class="btn btn-lg btn-block btn-social btn-github">
<i class="fa fa-github"></i> Sign in via GitHub
</a>
<a href="https://hackmd.io/auth/dropbox" class="btn btn-lg btn-block btn-social btn-dropbox">
<i class="fa fa-dropbox"></i> Sign in via Dropbox
</a>
<a href="#" class="bg-white btn btn-block btn-social btn-web3 bg-gray-800 hocus:bg-[#2b2b2b] text-white hocus:text-white">
<img src="https://hackmd.io/images/wallet.svg" style="max-height: 20px; margin-top: 8px; margin-left: 6px; border: none;">
<span class="sign-in-wallet-text">
Sign in with Wallet
</span>
<div class="inline-flex items-center justify-between w-full hidden web3-wallet-info">
<span>
Wallet
(
<span class="web3-wallet-address"></span>
)
</span>
<i class="fa fa-arrow-right" aria-hidden="true"></i>
</div>
</a>
<small class="web3-wallet-info hidden text-left hocus:text-white underline hocus:underline block pt-2 ui-disconnect-connected-wallets text-gray-600 cursor-pointer">
Connect another wallet
</small>
</div>
<div>
<p>New to HackMD? <a href="https://hackmd.io/join" class="plausible-event-name=LoginModalSignUp">Sign up</a></p>
</div>
</div>
</div>
</div>
<script src="https://www.googletagmanager.com/gtag/js?id=G-NGVZMM6DR6"></script><script id="" text="" charset="" type="text/javascript" src="https://tracks.hackmd.io/js/script.manual.js" nonce=""></script>
<script nonce="">
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
let userid = (document.cookie.match('(^|; )userid=([^;]*)')||0)[2];
gtag('config', 'G-NGVZMM6DR6', {'user_id': userid});
</script>
<script src="https://browser.sentry-cdn.com/5.15.5/bundle.min.js" crossorigin="anonymous"></script>
<script nonce="">Sentry.init({ dsn: 'https://[email protected]/4', environment: 'production', integrations: function (intrus) { return intrus.filter(function (itr) { return itr.name !== 'TryCatch' }) } });</script>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KLW9Z3"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<script src="https://assets.hackmd.io/build/font-vendor.eaa8dd82d4e056021b8c.js" defer="defer"></script><script src="https://assets.hackmd.io/build/common-vendor.04da453a2a68f624f4d4.js" defer="defer"></script><script src="https://assets.hackmd.io/build/error-vendor.2fad652e8402ec5b4206.js" defer="defer"></script><script src="https://assets.hackmd.io/build/error-common.e3d428be7fbfc9757d80.js" defer="defer"></script><script src="https://assets.hackmd.io/build/error.c1835d3e9fe33adbc404.js" defer="defer"></script>
<script id="" text="" charset="" type="text/javascript" src="https://tracks.hackmd.io/tracks.js" nonce=""></script>
</body></html>