PageSourceSearch

https://www.neeldhara.com/contact

html neeldhara.com collected 2026-09-24 11:15:59 UTC 27,151 bytes, 764 lines download raw bytes

1<!DOCTYPE html>
2<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
3
4<meta charset="utf-8">
5<meta name="generator" content="quarto-1.6.40">
6
7<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
8
9
10<title>Contact – Neeldhara</title>
11<style>
12code{white-space: pre-wrap;}
13span.smallcaps{font-variant: small-caps;}
14div.columns{display: flex; gap: min(4vw, 1.5em);}
15div.column{flex: auto; overflow-x: auto;}
16div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
17ul.task-list{list-style: none;}
18ul.task-list li input[type="checkbox"] {
19  width: 0.8em;
20  margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 
21  vertical-align: middle;
22}
23</style>
24
25
26<script src="site_libs/quarto-nav/quarto-nav.js"></script>
vendor: 1 bytes, line 26
26
27<script src="site_libs/quarto-nav/headroom.min.js"></script>
vendor: 1 bytes, line 27
27
28<script src="site_libs/clipboard/clipboard.min.js"></script>
vendor: 1 bytes, line 28
28
29<script src="site_libs/quarto-search/autocomplete.umd.js"></script>
vendor: 1 bytes, line 29
29
30<script src="site_libs/quarto-search/fuse.min.js"></script>
vendor: 1 bytes, line 30
30
31<script src="site_libs/quarto-search/quarto-search.js"></script>
31
32<meta name="quarto:offset" content="./">
33<script src="site_libs/quarto-html/quarto.js"></script>
vendor: 1 bytes, line 33
33
34<script src="site_libs/quarto-html/popper.min.js"></script>
vendor: 1 bytes, line 34
34
35<script src="site_libs/quarto-html/tippy.umd.min.js"></script>
vendor: 1 bytes, line 35
35
36<script src="site_libs/quarto-html/anchor.min.js"></script>
36
37<link href="site_libs/quarto-html/tippy.css" rel="stylesheet">
38<link href="site_libs/quarto-html/quarto-syntax-highlighting-549806ee2085284f45b00abea8c6df48.css" rel="stylesheet" id="quarto-text-highlighting-styles">
39<script src="site_libs/bootstrap/bootstrap.min.js"></script>
39
40<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
41<link href="site_libs/bootstrap/bootstrap-53d508deb6da4ff595675ebf964bed0d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
42<script id="quarto-search-options" type="application/json">{
43  "location": "navbar",
44  "copy-button": false,
45  "collapse-after": 3,
46  "panel-placement": "end",
47  "type": "overlay",
48  "limit": 50,
49  "keyboard-shortcut": [
50    "f",
51    "/",
52    "s"
53  ],
54  "show-item-context": false,
55  "language": {
56    "search-no-results-text": "No results",
57    "search-matching-documents-text": "matching documents",
58    "search-copy-link-title": "Copy link to search",
59    "search-hide-matches-text": "Hide additional matches",
60    "search-more-match-text": "more match in this document",
61    "search-more-matches-text": "more matches in this document",
62    "search-clear-button-title": "Clear",
63    "search-text-placeholder": "",
64    "search-detached-cancel-button-title": "Cancel",
65    "search-submit-button-title": "Submit",
66    "search-label": "Search"
67  }
68}</script>
68
69<style>html{ scroll-behavior: smooth; }</style>
70<script src="https://analytics.neeldhara.website/api/script.js" data-site-id="a31a3a742777" defer=""></script>
70
71
72
73<link rel="stylesheet" href="css/styles.css">
74<link rel="stylesheet" href="./css/contact.css">
75</head>
76
77<body class="nav-fixed">
78
79<div id="quarto-search-results"></div>
80  <header id="quarto-header" class="headroom fixed-top">
81    <nav class="navbar navbar-expand-lg " data-bs-theme="dark">
82      <div class="navbar-container container-fluid">
83      <div class="navbar-brand-container mx-auto">
84    <a class='navbar-brand' href='/'>
85    <span class="navbar-title">Neeldhara</span>
86    </a>
87  </div>
88            <div id="quarto-search" class="" title="Search"></div>
89          <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
90  <span class="navbar-toggler-icon"></span>
91</button>
92          <div class="collapse navbar-collapse" id="navbarCollapse">
93            <ul class="navbar-nav navbar-nav-scroll me-auto">
94  <li class="nav-item">
95    <a class='nav-link' href='/about'> 
96<span class="menu-text">About</span></a>
97  </li>  
98  <li class="nav-item dropdown ">
99    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-research" role="link" data-bs-toggle="dropdown" aria-expanded="false">
100 <span class="menu-text">Research</span>
101    </a>
102    <ul class="dropdown-menu" aria-labelledby="nav-menu-research">    
103        <li>
104    <a class='dropdown-item' href='/research/overview'>
105 <span class="dropdown-text">Overview</span></a>
106  </li>  
107        <li>
108    <a class='dropdown-item' href='/research/people'>
109 <span class="dropdown-text">People</span></a>
110  </li>  
111        <li>
112    <a class='dropdown-item' href='/research/publications'>
113 <span class="dropdown-text">Publications</span></a>
114  </li>  
115        <li>
116    <a class="dropdown-item" href="./research/surveys">
117 <span class="dropdown-text">Surveys</span></a>
118  </li>  
119    </ul>
120  </li>
121  <li class="nav-item dropdown ">
122    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-teaching" role="link" data-bs-toggle="dropdown" aria-expanded="false">
123 <span class="menu-text">Teaching</span>
124    </a>
125    <ul class="dropdown-menu" aria-labelledby="nav-menu-teaching">    
126        <li>
127    <a class='dropdown-item' href='/courses/'>
128 <span class="dropdown-text">Courses</span></a>
129  </li>  
130        <li>
131    <a class='dropdown-item' href='/materials/'>
132 <span class="dropdown-text">Materials</span></a>
133  </li>  
134    </ul>
135  </li>
136  <li class="nav-item dropdown ">
137    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-lists" role="link" data-bs-toggle="dropdown" aria-expanded="false">
138 <span class="menu-text">Lists</span>
139    </a>
140    <ul class="dropdown-menu" aria-labelledby="nav-menu-lists">    
141        <li>
142    <a class="dropdown-item" href="./tgif/">
143 <span class="dropdown-text">Puzzles</span></a>
144  </li>  
145        <li>
146    <a class="dropdown-item" href="./bookmarks/">
147 <span class="dropdown-text">Bookmarks</span></a>
148  </li>  
149    </ul>
150  </li>
151  <li class="nav-item dropdown ">
152    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-exposition" role="link" data-bs-toggle="dropdown" aria-expanded="false">
153 <span class="menu-text">Exposition</span>
154    </a>
155    <ul class="dropdown-menu" aria-labelledby="nav-menu-exposition">    
156        <li>
157    <a class="dropdown-item" href="./talks/">
158 <span class="dropdown-text">Talks</span></a>
159  </li>  
160        <li>
161    <a class="dropdown-item" href="./videos/">
162 <span class="dropdown-text">Videos</span></a>
163  </li>  
164    </ul>
165  </li>
166  <li class="nav-item">
167    <a class="nav-link" href="./events/"> 
168<span class="menu-text">Events</span></a>
169  </li>  
170  <li class="nav-item">
171    <a class='nav-link' href='/blog'> 
172<span class="menu-text">Blog</span></a>
173  </li>  
174</ul>
175            <ul class="navbar-nav navbar-nav-scroll ms-auto">
176  <li class="nav-item compact">
177    <a class="nav-link" href="https://www.youtube.com/c/NeeldharaMisra42"> <i class="bi bi-youtube" role="img">
178</i> 
179<span class="menu-text"></span></a>
180  </li>  
181  <li class="nav-item compact">
182    <a class="nav-link" href="https://www.linkedin.com/in/neeldhara-misra-a54b6920/"> <i class="bi bi-linkedin" role="img">
183</i> 
184<span class="menu-text"></span></a>
185  </li>  
186  <li class="nav-item compact">
187    <a class="nav-link" href="https://github.com/neeldhara"> <i class="bi bi-github" role="img">
188</i> 
189<span class="menu-text"></span></a>
190  </li>  
191  <li class="nav-item compact">
192    <a class="nav-link" href="https://mathstodon.xyz/@neeldhara"> <i class="bi bi-mastodon" role="img">
193</i> 
194<span class="menu-text"></span></a>
195  </li>  
196  <li class="nav-item compact">
197    <a class="nav-link" href="./blog.xml"> <i class="bi bi-rss" role="img">
198</i> 
199<span class="menu-text"></span></a>
200  </li>  
201</ul>
202          </div> <!-- /navcollapse -->
203            <div class="quarto-navbar-tools">
204</div>
205      </div> <!-- /container-fluid -->
206    </nav>
207</header>
208<!-- content -->
209<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-full page-navbar">
210<!-- sidebar -->
211<!-- margin-sidebar -->
212    
213<!-- main -->
214<main class="content column-body" id="quarto-document-content">
215
216<header id="title-block-header" class="quarto-title-block default">
217<div class="quarto-title">
218<h1 class="title">Contact</h1>
219</div>
220
221
222
223<div class="quarto-title-meta column-body">
224
225    
226  
227    
228  </div>
229  
230
231
232</header>
233
234
235<section id="contact" class="level1 {column-page-inset}">
236<h1>Contact</h1>
237<hr>
238<h3 class="anchored" data-anchor-id="contact">
239Address
240</h3>
241<p>Neeldhara Misra AB 4/305, <br> IIT Gandhinagar Palaj, <br> Gandhinagar 382055 <br> India</p>
242<h3 class="anchored">
243Email
244</h3>
245<p><code>[email protected]</code> • <code>[email protected]</code></p>
246<p>
247In case you have emailed me and have not heard back: it is typically my bad!
248</p>
249<p>
250I tend to respond either immediately or eventually, so don’t hesitate to send a (n|gr)udging reminder if I have not responded to your email and your context is time-sensitive. My apologies!
251</p>
252<h3 class="anchored">
253Phone
254</h3>
255+91 79 2395 2490 (Off)
256</section></main></div>
257
258
259
260
261 <!-- /main -->
262<script type="text/javascript" src="https://sdk.userbase.com/2/userbase.js"></script>
262
263
264<script src="https://cdn.usefathom.com/script.js" data-site="INVUSZCW" defer=""></script>
264
265
266<script async="" src="https://tally.so/widgets/embed.js"></script>
266
267
268<script type="text/javascript">
269    var HYVOR_TALK_WEBSITE = 6210;
270        var HYVOR_TALK_CONFIG = {
271            url: false,
272            id: false
273        };
274    var script = document.createElement("script");
275    script.type = "text/javascript";
276    script.src = "https://talk.hyvor.com/web-api/embed.js";
277    document.body.appendChild(script);
278</script>
278
279<div id="hyvor-talk-view"></div>
280
281<div class="column-screen-inset">
282    <hr class="about-sep">
283    <div class="quarto-about-jolla column-body" style="margin-top:52px;">
284        <p> © 2022 • Neeldhara Misra • <a href='/credits'>Credits</a> • <i data-target="calvinmodal" data-toggle="modal" class="bi bi-emoji-smile-upside-down"></i>
285            </p>
286            <div class="collcontent">
287                <img src="./images/calvin.webp" style="border-radius:25px;">
288                <p>&nbsp;</p>
289            </div>
290    
291        <p> Corrections? Please leave a comment here or a PR <a href="https://github.com/neeldhara/quartosite">in this repository</a>, thanks!</p>
292    
293
294        <div class="slideshow-container">
295
296            <div class="mySlides">
297              <q>I’d rather be a failure at something I love than a success at something I hate.</q>
298              <p class="author">George Burns</p>
299            </div>
300            
301            <div class="mySlides">
302              <q>You live and you learn — at any rate, you live.</q>
303              <p class="author">Douglas Adams</p>
304            </div>
305            
306            <div class="mySlides">
307              <q>A problem worthy of attack proves its worth by fighting back.</q>
308              <p class="author">Paul Erdos</p>
309            </div>
310                        
311        </div>
312
313
314    
315        <div class="about-links">
316            <a rel="me" href="https://mathstodon.xyz/@neeldhara" class="about-link">
317                <i class="bi bi-mastodon"></i>
318            </a>
319            <a href="https://www.isibang.ac.in/~gm/" class="about-link">
320                <i class="bi bi-heart-fill" style="color:red;"></i>
321            </a>
322            <a href="https://github.com/neeldhara" class="about-link">
323                <i class="bi bi-github"></i>
324            </a>
325        </div> 
326 </div>
327</div>
328
329
330
331
332<!-- The Modal -->
333<div id="calvinmodal" class="modal">
334    <!-- Modal content -->
335    <div class="modal-content" style="width: 460px !important;">
336    <span class="close" data-dismiss="modal">×</span>
337    <img src="./images/calvin.jpg" style="border-radius:25px;" width="420">
338</div>
339
340<script type="text/javascript" src="./scripts.js"></script>
vendor: 1 bytes, line 340
340
341<script id="quarto-html-after-body" type="application/javascript">
342window.document.addEventListener("DOMContentLoaded", function (event) {
343  const toggleBodyColorMode = (bsSheetEl) => {
344    const mode = bsSheetEl.getAttribute("data-mode");
345    const bodyEl = window.document.querySelector("body");
346    if (mode === "dark") {
347      bodyEl.classList.add("quarto-dark");
348      bodyEl.classList.remove("quarto-light");
349    } else {
350      bodyEl.classList.add("quarto-light");
351      bodyEl.classList.remove("quarto-dark");
352    }
353  }
354  const toggleBodyColorPrimary = () => {
355    const bsSheetEl = window.document.querySelector("link#quarto-bootstrap");
356    if (bsSheetEl) {
357      toggleBodyColorMode(bsSheetEl);
358    }
359  }
360  toggleBodyColorPrimary();  
361  const icon = "";
362  const anchorJS = new window.AnchorJS();
363  anchorJS.options = {
364    placement: 'right',
365    icon: icon
366  };
367  anchorJS.add('.anchored');
368  const isCodeAnnotation = (el) => {
369    for (const clz of el.classList) {
370      if (clz.startsWith('code-annotation-')) {                     
371        return true;
372      }
373    }
374    return false;
375  }
376  const onCopySuccess = function(e) {
377    // button target
378    const button = e.trigger;
379    // don't keep focus
380    button.blur();
381    // flash "checked"
382    button.classList.add('code-copy-button-checked');
383    var currentTitle = button.getAttribute("title");
384    button.setAttribute("title", "Copied!");
385    let tooltip;
386    if (window.bootstrap) {
387      button.setAttribute("data-bs-toggle", "tooltip");
388      button.setAttribute("data-bs-placement", "left");
389      button.setAttribute("data-bs-title", "Copied!");
390      tooltip = new bootstrap.Tooltip(button, 
391        { trigger: "manual", 
392          customClass: "code-copy-button-tooltip",
393          offset: [0, -8]});
394      tooltip.show();    
395    }
396    setTimeout(function() {
397      if (tooltip) {
398        tooltip.hide();
399        button.removeAttribute("data-bs-title");
400        button.removeAttribute("data-bs-toggle");
401        button.removeAttribute("data-bs-placement");
402      }
403      button.setAttribute("title", currentTitle);
404      button.classList.remove('code-copy-button-checked');
405    }, 1000);
406    // clear code selection
407    e.clearSelection();
408  }
409  const getTextToCopy = function(trigger) {
410      const codeEl = trigger.previousElementSibling.cloneNode(true);
411      for (const childEl of codeEl.children) {
412        if (isCodeAnnotation(childEl)) {
413          childEl.remove();
414        }
415      }
416      return codeEl.innerText;
417  }
418  const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
419    text: getTextToCopy
420  });
421  clipboard.on('success', onCopySuccess);
422  if (window.document.getElementById('quarto-embedded-source-code-modal')) {
423    const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
424      text: getTextToCopy,
425      container: window.document.getElementById('quarto-embedded-source-code-modal')
426    });
427    clipboardModal.on('success', onCopySuccess);
428  }
429    var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
430    var mailtoRegex = new RegExp(/^mailto:/);
431      var filterRegex = new RegExp("https:\/\/www\.neeldhara\.com");
432    var isInternal = (href) => {
433        return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
434    }
435    // Inspect non-navigation links and adorn them if external
436 	var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
437    for (var i=0; i<links.length; i++) {
438      const link = links[i];
439      if (!isInternal(link.href)) {
440        // undo the damage that might have been done by quarto-nav.js in the case of
441        // links that we want to consider external
442        if (link.dataset.originalHref !== undefined) {
443          link.href = link.dataset.originalHref;
444        }
445      }
446    }
447  function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
448    const config = {
449      allowHTML: true,
450      maxWidth: 500,
451      delay: 100,
452      arrow: false,
453      appendTo: function(el) {
454          return el.parentElement;
455      },
456      interactive: true,
457      interactiveBorder: 10,
458      theme: 'quarto',
459      placement: 'bottom-start',
460    };
461    if (contentFn) {
462      config.content = contentFn;
463    }
464    if (onTriggerFn) {
465      config.onTrigger = onTriggerFn;
466    }
467    if (onUntriggerFn) {
468      config.onUntrigger = onUntriggerFn;
469    }
470    window.tippy(el, config); 
471  }
472  const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
473  for (var i=0; i<noterefs.length; i++) {
474    const ref = noterefs[i];
475    tippyHover(ref, function() {
476      // use id or data attribute instead here
477      let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
478      try { href = new URL(href).hash; } catch {}
479      const id = href.replace(/^#\/?/, "");
480      const note = window.document.getElementById(id);
481      if (note) {
482        return note.innerHTML;
483      } else {
484        return "";
485      }
486    });
487  }
488  const xrefs = window.document.querySelectorAll('a.quarto-xref');
489  const processXRef = (id, note) => {
490    // Strip column container classes
491    const stripColumnClz = (el) => {
492      el.classList.remove("page-full", "page-columns");
493      if (el.children) {
494        for (const child of el.children) {
495          stripColumnClz(child);
496        }
497      }
498    }
499    stripColumnClz(note)
500    if (id === null || id.startsWith('sec-')) {
501      // Special case sections, only their first couple elements
502      const container = document.createElement("div");
503      if (note.children && note.children.length > 2) {
504        container.appendChild(note.children[0].cloneNode(true));
505        for (let i = 1; i < note.children.length; i++) {
506          const child = note.children[i];
507          if (child.tagName === "P" && child.innerText === "") {
508            continue;
509          } else {
510            container.appendChild(child.cloneNode(true));
511            break;
512          }
513        }
514        if (window.Quarto?.typesetMath) {
515          window.Quarto.typesetMath(container);
516        }
517        return container.innerHTML
518      } else {
519        if (window.Quarto?.typesetMath) {
520          window.Quarto.typesetMath(note);
521        }
522        return note.innerHTML;
523      }
524    } else {
525      // Remove any anchor links if they are present
526      const anchorLink = note.querySelector('a.anchorjs-link');
527      if (anchorLink) {
528        anchorLink.remove();
529      }
530      if (window.Quarto?.typesetMath) {
531        window.Quarto.typesetMath(note);
532      }
533      if (note.classList.contains("callout")) {
534        return note.outerHTML;
535      } else {
536        return note.innerHTML;
537      }
538    }
539  }
540  for (var i=0; i<xrefs.length; i++) {
541    const xref = xrefs[i];
542    tippyHover(xref, undefined, function(instance) {
543      instance.disable();
544      let url = xref.getAttribute('href');
545      let hash = undefined; 
546      if (url.startsWith('#')) {
547        hash = url;
548      } else {
549        try { hash = new URL(url).hash; } catch {}
550      }
551      if (hash) {
552        const id = hash.replace(/^#\/?/, "");
553        const note = window.document.getElementById(id);
554        if (note !== null) {
555          try {
556            const html = processXRef(id, note.cloneNode(true));
557            instance.setContent(html);
558          } finally {
559            instance.enable();
560            instance.show();
561          }
562        } else {
563          // See if we can fetch this
564          fetch(url.split('#')[0])
565          .then(res => res.text())
566          .then(html => {
567            const parser = new DOMParser();
568            const htmlDoc = parser.parseFromString(html, "text/html");
569            const note = htmlDoc.getElementById(id);
570            if (note !== null) {
571              const html = processXRef(id, note);
572              instance.setContent(html);
573            } 
574          }).finally(() => {
575            instance.enable();
576            instance.show();
577          });
578        }
579      } else {
580        // See if we can fetch a full url (with no hash to target)
581        // This is a special case and we should probably do some content thinning / targeting
582        fetch(url)
583        .then(res => res.text())
584        .then(html => {
585          const parser = new DOMParser();
586          const htmlDoc = parser.parseFromString(html, "text/html");
587          const note = htmlDoc.querySelector('main.content');
588          if (note !== null) {
589            // This should only happen for chapter cross references
590            // (since there is no id in the URL)
591            // remove the first header
592            if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
593              note.children[0].remove();
594            }
595            const html = processXRef(null, note);
596            instance.setContent(html);
597          } 
598        }).finally(() => {
599          instance.enable();
600          instance.show();
601        });
602      }
603    }, function(instance) {
604    });
605  }
606      let selectedAnnoteEl;
607      const selectorForAnnotation = ( cell, annotation) => {
608        let cellAttr = 'data-code-cell="' + cell + '"';
609        let lineAttr = 'data-code-annotation="' +  annotation + '"';
610        const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
611        return selector;
612      }
613      const selectCodeLines = (annoteEl) => {
614        const doc = window.document;
615        const targetCell = annoteEl.getAttribute("data-target-cell");
616        const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
617        const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
618        const lines = annoteSpan.getAttribute("data-code-lines").split(",");
619        const lineIds = lines.map((line) => {
620          return targetCell + "-" + line;
621        })
622        let top = null;
623        let height = null;
624        let parent = null;
625        if (lineIds.length > 0) {
626            //compute the position of the single el (top and bottom and make a div)
627            const el = window.document.getElementById(lineIds[0]);
628            top = el.offsetTop;
629            height = el.offsetHeight;
630            parent = el.parentElement.parentElement;
631          if (lineIds.length > 1) {
632            const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
633            const bottom = lastEl.offsetTop + lastEl.offsetHeight;
634            height = bottom - top;
635          }
636          if (top !== null && height !== null && parent !== null) {
637            // cook up a div (if necessary) and position it 
638            let div = window.document.getElementById("code-annotation-line-highlight");
639            if (div === null) {
640              div = window.document.createElement("div");
641              div.setAttribute("id", "code-annotation-line-highlight");
642              div.style.position = 'absolute';
643              parent.appendChild(div);
644            }
645            div.style.top = top - 2 + "px";
646            div.style.height = height + 4 + "px";
647            div.style.left = 0;
648            let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
649            if (gutterDiv === null) {
650              gutterDiv = window.document.createElement("div");
651              gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
652              gutterDiv.style.position = 'absolute';
653              const codeCell = window.document.getElementById(targetCell);
654              const gutter = codeCell.querySelector('.code-annotation-gutter');
655              gutter.appendChild(gutterDiv);
656            }
657            gutterDiv.style.top = top - 2 + "px";
658            gutterDiv.style.height = height + 4 + "px";
659          }
660          selectedAnnoteEl = annoteEl;
661        }
662      };
663      const unselectCodeLines = () => {
664        const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
665        elementsIds.forEach((elId) => {
666          const div = window.document.getElementById(elId);
667          if (div) {
668            div.remove();
669          }
670        });
671        selectedAnnoteEl = undefined;
672      };
673        // Handle positioning of the toggle
674    window.addEventListener(
675      "resize",
676      throttle(() => {
677        elRect = undefined;
678        if (selectedAnnoteEl) {
679          selectCodeLines(selectedAnnoteEl);
680        }
681      }, 10)
682    );
683    function throttle(fn, ms) {
684    let throttle = false;
685    let timer;
686      return (...args) => {
687        if(!throttle) { // first call gets through
688            fn.apply(this, args);
689            throttle = true;
690        } else { // all the others get throttled
691            if(timer) clearTimeout(timer); // cancel #2
692            timer = setTimeout(() => {
693              fn.apply(this, args);
694              timer = throttle = false;
695            }, ms);
696        }
697      };
698    }
699      // Attach click handler to the DT
700      const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
701      for (const annoteDlNode of annoteDls) {
702        annoteDlNode.addEventListener('click', (event) => {
703          const clickedEl = event.target;
704          if (clickedEl !== selectedAnnoteEl) {
705            unselectCodeLines();
706            const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
707            if (activeEl) {
708              activeEl.classList.remove('code-annotation-active');
709            }
710            selectCodeLines(clickedEl);
711            clickedEl.classList.add('code-annotation-active');
712          } else {
713            // Unselect the line
714            unselectCodeLines();
715            clickedEl.classList.remove('code-annotation-active');
716          }
717        });
718      }
719  const findCites = (el) => {
720    const parentEl = el.parentElement;
721    if (parentEl) {
722      const cites = parentEl.dataset.cites;
723      if (cites) {
724        return {
725          el,
726          cites: cites.split(' ')
727        };
728      } else {
729        return findCites(el.parentElement)
730      }
731    } else {
732      return undefined;
733    }
734  };
735  var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
736  for (var i=0; i<bibliorefs.length; i++) {
737    const ref = bibliorefs[i];
738    const citeInfo = findCites(ref);
739    if (citeInfo) {
740      tippyHover(citeInfo.el, function() {
741        var popup = window.document.createElement('div');
742        citeInfo.cites.forEach(function(cite) {
743          var citeDiv = window.document.createElement('div');
744          citeDiv.classList.add('hanging-indent');
745          citeDiv.classList.add('csl-entry');
746          var biblioDiv = window.document.getElementById('ref-' + cite);
747          if (biblioDiv) {
748            citeDiv.innerHTML = biblioDiv.innerHTML;
749          }
750          popup.appendChild(citeDiv);
751        });
752        return popup.innerHTML;
753      });
754    }
755  }
756});
757</script>
757
758</div> <!-- /content -->
759
760
761
762
763<script src="site_libs/quarto-html/zenscroll-min.js"></script>
763
764</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.