Files
2026-08-18 13:39:21 +00:00

29 lines
26 KiB
HTML

<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>JPDC 2024 Digest | Publish Assistant</title><meta name=keywords content><meta name=description content="12 papers selected.
Read/write fence-free work-stealing with multiplicity
Armando Castañeda, Miguel Piña
TL;DR — Presents a work-stealing deque algorithm that eliminates read/write memory fences while tolerating multiplicity, achieving provably correct concurrent access without costly barriers.
Why notable — Advances the theoretical foundations of lock-free scheduler data structures by decoupling correctness from fence instructions, directly impacting runtime system design.
Reliable communication in dynamic networks with locally bounded byzantine faults
Silvia Bonomi, Giovanni Farina, Sébastien Tixeuil"><meta name=author content="Publish Assistant"><link rel=canonical href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/jpdc-2024/><link crossorigin=anonymous href=/vincent/publish-assistant/assets/css/stylesheet.d72f07832e13c592b3edba91680bfe70f01daac396179bcace0ac36e8e0494c6.css integrity="sha256-1y8Hgy4TxZKz7bqRaAv+cPAdqsOWF5vKzgrDbo4ElMY=" rel="preload stylesheet" as=style><link rel=icon href=https://pub.sqrt.fr/vincent/publish-assistant/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://pub.sqrt.fr/vincent/publish-assistant/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://pub.sqrt.fr/vincent/publish-assistant/favicon-32x32.png><link rel=apple-touch-icon href=https://pub.sqrt.fr/vincent/publish-assistant/apple-touch-icon.png><link rel=mask-icon href=https://pub.sqrt.fr/vincent/publish-assistant/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/jpdc-2024/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><meta property="og:url" content="https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/jpdc-2024/"><meta property="og:site_name" content="Publish Assistant"><meta property="og:title" content="JPDC 2024 Digest"><meta property="og:description" content="12 papers selected.
Read/write fence-free work-stealing with multiplicity Armando Castañeda, Miguel Piña
TL;DR — Presents a work-stealing deque algorithm that eliminates read/write memory fences while tolerating multiplicity, achieving provably correct concurrent access without costly barriers.
Why notable — Advances the theoretical foundations of lock-free scheduler data structures by decoupling correctness from fence instructions, directly impacting runtime system design.
Reliable communication in dynamic networks with locally bounded byzantine faults Silvia Bonomi, Giovanni Farina, Sébastien Tixeuil"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="cloud-edge"><meta property="article:published_time" content="2024-01-01T00:00:00+00:00"><meta property="article:modified_time" content="2024-01-01T00:00:00+00:00"><meta name=twitter:card content="summary"><meta name=twitter:title content="JPDC 2024 Digest"><meta name=twitter:description content="12 papers selected.
Read/write fence-free work-stealing with multiplicity Armando Castañeda, Miguel Piña
TL;DR — Presents a work-stealing deque algorithm that eliminates read/write memory fences while tolerating multiplicity, achieving provably correct concurrent access without costly barriers.
Why notable — Advances the theoretical foundations of lock-free scheduler data structures by decoupling correctness from fence instructions, directly impacting runtime system design.
Reliable communication in dynamic networks with locally bounded byzantine faults Silvia Bonomi, Giovanni Farina, Sébastien Tixeuil"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Edge and Cloud Systems","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/"},{"@type":"ListItem","position":2,"name":"Digests","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/"},{"@type":"ListItem","position":3,"name":"JPDC 2024 Digest","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/jpdc-2024/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"JPDC 2024 Digest","name":"JPDC 2024 Digest","description":"12 papers selected.\nRead/write fence-free work-stealing with multiplicity Armando Castañeda, Miguel Piña\nTL;DR — Presents a work-stealing deque algorithm that eliminates read/write memory fences while tolerating multiplicity, achieving provably correct concurrent access without costly barriers.\nWhy notable — Advances the theoretical foundations of lock-free scheduler data structures by decoupling correctness from fence instructions, directly impacting runtime system design.\nReliable communication in dynamic networks with locally bounded byzantine faults Silvia Bonomi, Giovanni Farina, Sébastien Tixeuil\n","keywords":[],"articleBody":"12 papers selected.\nRead/write fence-free work-stealing with multiplicity Armando Castañeda, Miguel Piña\nTL;DR — Presents a work-stealing deque algorithm that eliminates read/write memory fences while tolerating multiplicity, achieving provably correct concurrent access without costly barriers.\nWhy notable — Advances the theoretical foundations of lock-free scheduler data structures by decoupling correctness from fence instructions, directly impacting runtime system design.\nReliable communication in dynamic networks with locally bounded byzantine faults Silvia Bonomi, Giovanni Farina, Sébastien Tixeuil\nTL;DR — Characterizes the conditions under which reliable broadcast is achievable in dynamic networks where Byzantine faults are locally bounded rather than globally counted.\nWhy notable — Provides tight impossibility and achievability results for a practically motivated fault model, extending classical Byzantine agreement theory to time-varying topologies.\nLocal certification of graph decompositions and applications to minor-free classes Nicolas Bousquet 0001, Laurent Feuilloley, Théo Pierron\nTL;DR — Develops local distributed certification schemes for graph decompositions, proving tight certificate-size bounds for minor-free graph families.\nWhy notable — Connects structural graph theory to distributed verification, giving new tools for designing space-efficient proof-labeling schemes in anonymous networks.\nEventually lattice-linear algorithms Arya Tanmay Gupta, Sandeep S. Kulkarni\nTL;DR — Introduces the eventually lattice-linear class of distributed algorithms that converge to a lattice-linear fixed point, enabling new self-stabilization constructions.\nWhy notable — Unifies several stabilizing algorithm families under a clean algebraic framework that simplifies correctness proofs and inspires new design patterns.\nConstruction algorithms of fault-tolerant paths and disjoint paths in k-ary n-cube networks Mengjie Lv, Jianxi Fan, Baolei Cheng, Jia Yu 0003 et al.\nTL;DR — Proposes efficient algorithms to construct maximally fault-tolerant Hamiltonian paths and node-disjoint paths in k-ary n-cube interconnection networks under edge and vertex failures.\nWhy notable — Yields concrete routing strategies for torus-based HPC fabrics that remain functional under high fault counts, with tight proofs of optimality.\nMapReduce algorithms for robust center-based clustering in doubling metrics Enrico Dandolo, Alessio Mazzetto, Andrea Pietracaprina, Geppino Pucci\nTL;DR — Designs MapReduce algorithms for k-median and k-means clustering with provable approximation ratios that are robust to outliers in doubling metric spaces.\nWhy notable — Delivers the first round-efficient MapReduce clustering algorithms with simultaneous robustness and approximation guarantees grounded in metric space theory.\nDuMato: An efficient warp-centric subgraph enumeration system for GPU Samuel Ferraz, Vinícius Vitor dos Santos Dias, Carlos H. C. Teixeira, Srinivasan Parthasarathy 0001 et al.\nTL;DR — Presents a warp-centric GPU programming model for subgraph enumeration that eliminates load imbalance through dynamic work redistribution across warps.\nWhy notable — Achieves orders-of-magnitude speedups over CPU baselines on graph pattern mining by rethinking how irregular workloads are mapped onto SIMT hardware.\nAn efficient sequential consistency implementation with dynamic race detection for GPUs Abdulaziz Tabbakh, Murali Annavaram\nTL;DR — Implements sequential consistency on GPUs via a dynamic race detector that inserts fences only where data races are actually detected at runtime.\nWhy notable — Shows that strong memory model guarantees on GPUs need not incur pervasive overhead, opening a path toward safer GPU programming models without sacrificing performance.\nGeneral-purpose data stream processing on heterogeneous architectures with WindFlow Gabriele Mencagli, Massimo Torquati, Dalvan Griebler, Alessandra Fais et al.\nTL;DR — Extends the WindFlow library with a unified programming model and runtime that transparently targets CPUs, GPUs, and FPGAs for streaming dataflow applications.\nWhy notable — Demonstrates practical performance portability for stream processing across radically different hardware, with a clean operator model grounded in parallel patterns theory.\nRevisiting I/O bandwidth-sharing strategies for HPC applications Anne Benoit, Thomas Hérault, Lucas Perotin, Yves Robert et al.\nTL;DR — Analyzes optimal I/O bandwidth allocation policies for HPC checkpointing and data-intensive applications under shared storage systems, deriving scheduling algorithms with provable performance bounds.\nWhy notable — Provides theoretically grounded guidance for I/O resource management at scale, a pervasive bottleneck in modern HPC deployments.\nScalable atomic broadcast: A leaderless hierarchical algorithm Lucas V. Ruchel, Edson Tavares de Camargo, Luiz Antonio Rodrigues, Rogério C. Turchetti et al.\nTL;DR — Proposes a leaderless hierarchical atomic broadcast protocol that eliminates single-leader bottlenecks and scales to large distributed systems with reduced message complexity.\nWhy notable — Advances Byzantine-fault-tolerant broadcast by removing the leader as a scalability and availability bottleneck while preserving total-order guarantees.\nStab-FD: A cooperative and adaptive failure detector for wide area networks Pierre Sens 0001, Luciana Arantes, Anubis Graciela de Moraes Rossetto, Olivier Marin\nTL;DR — Presents a stabilizing failure detector that cooperatively adapts its timeout parameters across WAN nodes to achieve eventual accuracy under varying latencies.\nWhy notable — Tackles the long-standing challenge of practical failure detection in geo-distributed systems with a rigorous self-stabilizing design that avoids static parameter tuning.\n","wordCount":"759","inLanguage":"en","datePublished":"2024-01-01T00:00:00Z","dateModified":"2024-01-01T00:00:00Z","author":{"@type":"Person","name":"Publish Assistant"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/jpdc-2024/"},"publisher":{"@type":"Organization","name":"Publish Assistant","logo":{"@type":"ImageObject","url":"https://pub.sqrt.fr/vincent/publish-assistant/favicon.ico"}}}</script></head><body id=top><header class=header><nav class=header-nav><div class=logo><a href=https://pub.sqrt.fr/vincent/publish-assistant/ accesskey=h title="Publish Assistant (Alt + H)">Publish Assistant</a>
<span class=logo-sep>/</span>
<a class=logo-topic href=/vincent/publish-assistant/cloud-edge/ title="Edge and Cloud Systems">Edge and Cloud Systems</a><div class=logo-switches><button id=theme-toggle class=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg class="moon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg class="sun" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu class=menu><li><a href=/vincent/publish-assistant/cloud-edge/venues/ title=Venues><span>Venues</span></a></li><li><a href=/vincent/publish-assistant/cloud-edge/calendar/ title=Calendar><span>Calendar</span></a></li><li><a href=/vincent/publish-assistant/cloud-edge/digests/ title=Digests><span class=active>Digests</span></a></li></ul></nav></header><main class=main><article class=post-single><header class=post-header><nav class=breadcrumbs role=navigation aria-label=Breadcrumb><a href=/vincent/publish-assistant/cloud-edge/digests/>Digests</a>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"><polyline points="9 18 15 12 9 6"/></svg></nav><h1 class="post-title entry-hint-parent">JPDC 2024 Digest</h1><div class=post-meta><span title='2024-01-01 00:00:00 +0000 UTC'>January 1, 2024</span>&nbsp;·&nbsp;<span>Publish Assistant</span></div></header><div class="post-content md-content"><p>12 papers selected.</p><hr><h3 id=readwrite-fence-free-work-stealing-with-multiplicity>Read/write fence-free work-stealing with multiplicity<a hidden class=anchor aria-hidden=true href=#readwrite-fence-free-work-stealing-with-multiplicity>#</a></h3><p><em>Armando Castañeda, Miguel Piña</em></p><p><strong>TL;DR</strong> — Presents a work-stealing deque algorithm that eliminates read/write memory fences while tolerating multiplicity, achieving provably correct concurrent access without costly barriers.</p><p><strong>Why notable</strong> — Advances the theoretical foundations of lock-free scheduler data structures by decoupling correctness from fence instructions, directly impacting runtime system design.</p><hr><h3 id=reliable-communication-in-dynamic-networks-with-locally-bounded-byzantine-faults>Reliable communication in dynamic networks with locally bounded byzantine faults<a hidden class=anchor aria-hidden=true href=#reliable-communication-in-dynamic-networks-with-locally-bounded-byzantine-faults>#</a></h3><p><em>Silvia Bonomi, Giovanni Farina, Sébastien Tixeuil</em></p><p><strong>TL;DR</strong> — Characterizes the conditions under which reliable broadcast is achievable in dynamic networks where Byzantine faults are locally bounded rather than globally counted.</p><p><strong>Why notable</strong> — Provides tight impossibility and achievability results for a practically motivated fault model, extending classical Byzantine agreement theory to time-varying topologies.</p><hr><h3 id=local-certification-of-graph-decompositions-and-applications-to-minor-free-classes>Local certification of graph decompositions and applications to minor-free classes<a hidden class=anchor aria-hidden=true href=#local-certification-of-graph-decompositions-and-applications-to-minor-free-classes>#</a></h3><p><em>Nicolas Bousquet 0001, Laurent Feuilloley, Théo Pierron</em></p><p><strong>TL;DR</strong> — Develops local distributed certification schemes for graph decompositions, proving tight certificate-size bounds for minor-free graph families.</p><p><strong>Why notable</strong> — Connects structural graph theory to distributed verification, giving new tools for designing space-efficient proof-labeling schemes in anonymous networks.</p><hr><h3 id=eventually-lattice-linear-algorithms>Eventually lattice-linear algorithms<a hidden class=anchor aria-hidden=true href=#eventually-lattice-linear-algorithms>#</a></h3><p><em>Arya Tanmay Gupta, Sandeep S. Kulkarni</em></p><p><strong>TL;DR</strong> — Introduces the eventually lattice-linear class of distributed algorithms that converge to a lattice-linear fixed point, enabling new self-stabilization constructions.</p><p><strong>Why notable</strong> — Unifies several stabilizing algorithm families under a clean algebraic framework that simplifies correctness proofs and inspires new design patterns.</p><hr><h3 id=construction-algorithms-of-fault-tolerant-paths-and-disjoint-paths-in-k-ary-n-cube-networks>Construction algorithms of fault-tolerant paths and disjoint paths in k-ary n-cube networks<a hidden class=anchor aria-hidden=true href=#construction-algorithms-of-fault-tolerant-paths-and-disjoint-paths-in-k-ary-n-cube-networks>#</a></h3><p><em>Mengjie Lv, Jianxi Fan, Baolei Cheng, Jia Yu 0003 <em>et al.</em></em></p><p><strong>TL;DR</strong> — Proposes efficient algorithms to construct maximally fault-tolerant Hamiltonian paths and node-disjoint paths in k-ary n-cube interconnection networks under edge and vertex failures.</p><p><strong>Why notable</strong> — Yields concrete routing strategies for torus-based HPC fabrics that remain functional under high fault counts, with tight proofs of optimality.</p><hr><h3 id=mapreduce-algorithms-for-robust-center-based-clustering-in-doubling-metrics>MapReduce algorithms for robust center-based clustering in doubling metrics<a hidden class=anchor aria-hidden=true href=#mapreduce-algorithms-for-robust-center-based-clustering-in-doubling-metrics>#</a></h3><p><em>Enrico Dandolo, Alessio Mazzetto, Andrea Pietracaprina, Geppino Pucci</em></p><p><strong>TL;DR</strong> — Designs MapReduce algorithms for k-median and k-means clustering with provable approximation ratios that are robust to outliers in doubling metric spaces.</p><p><strong>Why notable</strong> — Delivers the first round-efficient MapReduce clustering algorithms with simultaneous robustness and approximation guarantees grounded in metric space theory.</p><hr><h3 id=dumato-an-efficient-warp-centric-subgraph-enumeration-system-for-gpu>DuMato: An efficient warp-centric subgraph enumeration system for GPU<a hidden class=anchor aria-hidden=true href=#dumato-an-efficient-warp-centric-subgraph-enumeration-system-for-gpu>#</a></h3><p><em>Samuel Ferraz, Vinícius Vitor dos Santos Dias, Carlos H. C. Teixeira, Srinivasan Parthasarathy 0001 <em>et al.</em></em></p><p><strong>TL;DR</strong> — Presents a warp-centric GPU programming model for subgraph enumeration that eliminates load imbalance through dynamic work redistribution across warps.</p><p><strong>Why notable</strong> — Achieves orders-of-magnitude speedups over CPU baselines on graph pattern mining by rethinking how irregular workloads are mapped onto SIMT hardware.</p><hr><h3 id=an-efficient-sequential-consistency-implementation-with-dynamic-race-detection-for-gpus>An efficient sequential consistency implementation with dynamic race detection for GPUs<a hidden class=anchor aria-hidden=true href=#an-efficient-sequential-consistency-implementation-with-dynamic-race-detection-for-gpus>#</a></h3><p><em>Abdulaziz Tabbakh, Murali Annavaram</em></p><p><strong>TL;DR</strong> — Implements sequential consistency on GPUs via a dynamic race detector that inserts fences only where data races are actually detected at runtime.</p><p><strong>Why notable</strong> — Shows that strong memory model guarantees on GPUs need not incur pervasive overhead, opening a path toward safer GPU programming models without sacrificing performance.</p><hr><h3 id=general-purpose-data-stream-processing-on-heterogeneous-architectures-with-windflow>General-purpose data stream processing on heterogeneous architectures with WindFlow<a hidden class=anchor aria-hidden=true href=#general-purpose-data-stream-processing-on-heterogeneous-architectures-with-windflow>#</a></h3><p><em>Gabriele Mencagli, Massimo Torquati, Dalvan Griebler, Alessandra Fais <em>et al.</em></em></p><p><strong>TL;DR</strong> — Extends the WindFlow library with a unified programming model and runtime that transparently targets CPUs, GPUs, and FPGAs for streaming dataflow applications.</p><p><strong>Why notable</strong> — Demonstrates practical performance portability for stream processing across radically different hardware, with a clean operator model grounded in parallel patterns theory.</p><hr><h3 id=revisiting-io-bandwidth-sharing-strategies-for-hpc-applications>Revisiting I/O bandwidth-sharing strategies for HPC applications<a hidden class=anchor aria-hidden=true href=#revisiting-io-bandwidth-sharing-strategies-for-hpc-applications>#</a></h3><p><em>Anne Benoit, Thomas Hérault, Lucas Perotin, Yves Robert <em>et al.</em></em></p><p><strong>TL;DR</strong> — Analyzes optimal I/O bandwidth allocation policies for HPC checkpointing and data-intensive applications under shared storage systems, deriving scheduling algorithms with provable performance bounds.</p><p><strong>Why notable</strong> — Provides theoretically grounded guidance for I/O resource management at scale, a pervasive bottleneck in modern HPC deployments.</p><hr><h3 id=scalable-atomic-broadcast-a-leaderless-hierarchical-algorithm>Scalable atomic broadcast: A leaderless hierarchical algorithm<a hidden class=anchor aria-hidden=true href=#scalable-atomic-broadcast-a-leaderless-hierarchical-algorithm>#</a></h3><p><em>Lucas V. Ruchel, Edson Tavares de Camargo, Luiz Antonio Rodrigues, Rogério C. Turchetti <em>et al.</em></em></p><p><strong>TL;DR</strong> — Proposes a leaderless hierarchical atomic broadcast protocol that eliminates single-leader bottlenecks and scales to large distributed systems with reduced message complexity.</p><p><strong>Why notable</strong> — Advances Byzantine-fault-tolerant broadcast by removing the leader as a scalability and availability bottleneck while preserving total-order guarantees.</p><hr><h3 id=stab-fd-a-cooperative-and-adaptive-failure-detector-for-wide-area-networks>Stab-FD: A cooperative and adaptive failure detector for wide area networks<a hidden class=anchor aria-hidden=true href=#stab-fd-a-cooperative-and-adaptive-failure-detector-for-wide-area-networks>#</a></h3><p><em>Pierre Sens 0001, Luciana Arantes, Anubis Graciela de Moraes Rossetto, Olivier Marin</em></p><p><strong>TL;DR</strong> — Presents a stabilizing failure detector that cooperatively adapts its timeout parameters across WAN nodes to achieve eventual accuracy under varying latencies.</p><p><strong>Why notable</strong> — Tackles the long-standing challenge of practical failure detection in geo-distributed systems with a rigorous self-stabilizing design that avoids static parameter tuning.</p></div><footer class=post-footer><ul class=post-tags></ul><nav class=paginav><a class=prev href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/ipdps-2024/><span class=title>« Prev</span>
<span>IPDPS 2024 Digest</span>
</a><a class=next href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/mobisys-2024/><span class=title>Next »</span>
<span>MobiSys 2024 Digest</span></a></nav></footer></article></main><footer class=footer><span>&copy; 2026 <a href=https://pub.sqrt.fr/vincent/publish-assistant/>Publish Assistant</a></span> ·
<span>Powered by
<a href="https://gohugo.io/?utm_source=papermod" rel=noopener target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top id=top-link class="top-link hidden" aria-label="go to top" title="Go to Top (Alt + G)" accesskey=g><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-up"><polyline points="17 11 12 6 7 11"/><polyline points="17 18 12 13 7 18"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var toplink=document.getElementById("top-link");window.onscroll=function(){const e=window.innerHeight;document.body.scrollTop>e||document.documentElement.scrollTop>e?toplink.classList.remove("hidden"):toplink.classList.add("hidden")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>