<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-36504670</id><updated>2026-02-26T19:32:46.046-08:00</updated><category term="ideas"/><category term="Internet"/><category term="government"/><category term="future"/><category term="robots"/><category term="AI"/><category term="SciFi"/><category term="history"/><category term="laws"/><category term="science"/><category term="Hackerdojo"/><category term="claude"/><category term="security"/><category term="Evolution"/><category term="Mobile Phone"/><category term="Roboterra"/><category term="joke"/><category term="AudioByte"/><category term="Electronics"/><category term="GOD"/><category term="Memes"/><category term="Sound"/><category term="movie"/><category term="politics"/><category term="programming"/><category term="scam"/><category term="3D Printing"/><category term="Art"/><category term="Singularity"/><category term="Talk"/><category term="investigation"/><category term="space"/><category term="Currency"/><category term="Laser Cut"/><category term="Patent"/><category term="VR/AR"/><category term="cpu"/><category term="economy"/><category term="health"/><category term="open source"/><category term="power"/><category term="streaming video"/><category term="webrtc"/><category term="Aliens"/><category term="Amorphous OS"/><category term="BSD"/><category term="Brain Interface"/><category term="CO2"/><category term="China"/><category term="Cyberjava"/><category term="Google"/><category term="Lidar"/><category term="Mentioned"/><category term="News"/><category term="Stanford"/><category term="banks"/><category term="copyright"/><category term="facebook"/><category term="johnsokol"/><category term="laser"/><category term="music"/><category term="nuclear"/><category term="p2p"/><category term="photos"/><category term="solar"/><category term="tv"/><category term="9/11"/><category term="Afterburner"/><category term="Anagrams"/><category term="Anybots"/><category term="Chess"/><category term="Curiosity Conference"/><category term="Cymatic"/><category term="Fukushima"/><category term="Goleta"/><category term="Holography"/><category term="Hulu"/><category term="ITU"/><category term="Luminar Technology"/><category term="Micro:Bit"/><category term="Obama"/><category term="P2P Social"/><category term="Panspermia"/><category term="Press"/><category term="Silicon Valley"/><category term="Social"/><category term="ZebraReserch"/><category term="aos"/><category term="cooling"/><category term="earthquake"/><category term="eyeglasses"/><category term="games"/><category term="green"/><category term="iptv"/><category term="javascript"/><category term="memetics"/><category term="pcb"/><category term="santa barbara"/><category term="telepresence"/><category term="telescope"/><category term="writing"/><category term="2.5D"/><category term="4G"/><category term="5G"/><category term="9BNOG"/><category term="AFrame"/><category term="Alignment"/><category term="AltspaceVR"/><category term="Animation"/><category term="Anonymous"/><category term="Arthur C. Clarke"/><category term="Atari"/><category term="Baxter"/><category term="Bisphenol A"/><category term="Bode Plot"/><category term="C++"/><category term="CES"/><category term="CPRI"/><category term="Claude.ai"/><category term="Cloud"/><category term="CoCo"/><category term="Coding"/><category term="Copenhagen"/><category term="Coworking"/><category term="DVBS"/><category term="Devolution"/><category term="EDF"/><category term="EasyEda"/><category term="Electric Vehicals"/><category term="FARO"/><category term="Filter Bubbles"/><category term="FootHill"/><category term="GMO"/><category term="GPL"/><category term="GPT-3"/><category term="Grant Imahara"/><category term="Greenhouses."/><category term="Hyperthermia"/><category term="IOT"/><category term="India"/><category term="Indigogo"/><category term="Jetpack"/><category term="Jobs"/><category term="KAARTA"/><category term="LEGO"/><category term="Links"/><category term="Liquid solar cells"/><category term="Luddite"/><category term="Machinist"/><category term="Macintosh"/><category term="Mitt Romney"/><category term="Mobile."/><category term="NCSA"/><category term="Nostr"/><category term="Open RAN"/><category term="OpenSCAD"/><category term="Overboard"/><category term="PSI"/><category term="Pinon Hills"/><category term="Primorials"/><category term="RPN"/><category term="Richard Dawkins"/><category term="San Jose"/><category term="Scott McNealy"/><category term="Sonic Pi"/><category term="Spreadsheet"/><category term="StarGate"/><category term="Sun Microsystems"/><category term="UDPCP"/><category term="UFO"/><category term="VRML"/><category term="Venice Beach"/><category term="WebVR"/><category term="WebXR"/><category term="Yahoo"/><category term="aerial vehical"/><category term="aviation"/><category term="battery"/><category term="bitcoin"/><category term="cad"/><category term="cdn"/><category term="chat"/><category term="chatgpt"/><category term="conscious"/><category term="decash"/><category term="eCPRI"/><category term="eprom"/><category term="events"/><category term="food"/><category term="gears"/><category term="genetic algorythems"/><category term="gwbasic play"/><category term="hackathon"/><category term="hole punching."/><category term="house"/><category term="hyper-inflation"/><category term="json"/><category term="letsrobot.tv"/><category term="mining"/><category term="mjpg"/><category term="motion jpeg"/><category term="nat traversal"/><category term="p2psocial"/><category term="p3p"/><category term="pcm"/><category term="pendulum"/><category term="phone"/><category term="plastics"/><category term="podcast"/><category term="population"/><category term="prime numbers"/><category term="pwm"/><category term="python."/><category term="quadcopter"/><category term="rc car"/><category term="realestate bonds"/><category term="recipe"/><category term="remo.tv"/><category term="reverse engineering"/><category term="saffron"/><category term="self-replicating machines"/><category term="startup"/><category term="tox"/><category term="video"/><category term="virus"/><category term="wearable computing"/><category term="web3"/><category term="windows"/><title type='text'>John Sokol&#39;s Blog</title><subtitle type='html'>John L. Sokol - computer expert, video, compression, information theory and all things cool.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>556</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-36504670.post-6972232148700003462</id><published>2026-02-08T12:48:00.000-08:00</published><updated>2026-02-08T12:48:37.748-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="ideas"/><title type='text'>Intelligence Is a Memory Problem, Not a Computation Problem</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h1 id=&quot;intelligence-is-a-memory-problem-not-a-computation-problem&quot;&gt;Intelligence Is a Memory Problem, Not a Computation Problem&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;How a 2004 analysis of the brain&#39;s memory bottleneck accidentally predicted the architecture of modern AI&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;By John L. Sokol&lt;/em&gt;&lt;/p&gt;&lt;hr /&gt;&lt;h2 id=&quot;the-wrong-question&quot;&gt;The Wrong Question&lt;/h2&gt;&lt;p&gt;In 1999, Ray Kurzweil published&amp;nbsp;&lt;em&gt;The Age of Spiritual Machines&lt;/em&gt;, predicting that conscious machines were roughly 20 years away. His reasoning was straightforward: the brain operates at about 100 Hz across 100 billion neurons, yielding roughly 10^14 logical operations per second. CPUs were doubling every 18 months. Do the math, and sometime around 2019 we&#39;d have raw computational parity with the human brain.&lt;/p&gt;&lt;p&gt;I believed then, and still believe now, that this prediction was based on a fundamental misunderstanding of what the brain actually does.&lt;/p&gt;&lt;h2 id=&quot;the-brain-is-a-terrible-computer&quot;&gt;The Brain Is a Terrible Computer&lt;/h2&gt;&lt;p&gt;This should be obvious from everyday experience. A $1 calculator from 1980 can outperform any human at arithmetic. A 20-year-old Apple II is better at rote data storage and retrieval. If intelligence were about computation, we&#39;d have been outclassed decades ago.&lt;/p&gt;&lt;p&gt;But ask a computer to walk across a cluttered room, recognize a friend&#39;s face in a crowd, or understand a joke, and even the largest machines of that era were humbled by comparison with a simple insect.&lt;/p&gt;&lt;p&gt;The brain isn&#39;t a computation engine. It&#39;s a pattern recognition and associative memory system. An input pattern arrives and needs to be matched against stored experience quickly enough to produce a useful response. Total accuracy isn&#39;t critical. Approximation is close enough. The magic isn&#39;t in the logic -- it&#39;s in the lookup.&lt;/p&gt;&lt;h2 id=&quot;a-quadrillion-connections&quot;&gt;A Quadrillion Connections&lt;/h2&gt;&lt;p&gt;The numbers are staggering when you look at them from a memory perspective rather than a computational one.&lt;/p&gt;&lt;p&gt;The human brain contains roughly 100 billion neurons (10^11), each connected to approximately 10,000 others. That&#39;s 10^15 connections -- a quadrillion. Just storing the&amp;nbsp;&lt;em&gt;address map&lt;/em&gt;&amp;nbsp;of these connections, at 5 bytes per pointer, requires 5 petabytes.&lt;/p&gt;&lt;p&gt;And the brain can access all of it 100 times per second.&lt;/p&gt;&lt;p&gt;That gives us a memory throughput somewhere between 1 terabyte per second (if we assume minimal storage of ~10 GB at 1 bit per neuron) and 10 petabytes per second (at 1 bit per dendrite, yielding ~100 TB). If data is stored in permutable combinations of connection states, the real capacity could be orders of magnitude higher.&lt;/p&gt;&lt;h2 id=&quot;the-bottleneck-nobody-talked-about&quot;&gt;The Bottleneck Nobody Talked About&lt;/h2&gt;&lt;p&gt;In 2004, everyone knew Moore&#39;s Law: transistor density doubling every 18 months, a 66% annual increase in computational power. What almost nobody discussed was that memory bandwidth was improving at only 11% per year -- taking roughly 7 years to double.&lt;/p&gt;&lt;p&gt;Computation was on an exponential rocket. Memory throughput was on a bicycle.&lt;/p&gt;&lt;p&gt;This meant that even as we could store more data, we couldn&#39;t search through it proportionally faster. You could build bigger libraries, but not faster librarians.&lt;/p&gt;&lt;p&gt;I ran the numbers in 2004. Starting from an 833 MHz front-side bus doing about 833 MB/s:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Reaching the brain&#39;s&amp;nbsp;&lt;em&gt;lower&lt;/em&gt;&amp;nbsp;memory throughput estimate (1 TB/s): ~25 years (around 2029)&lt;/li&gt;&lt;li&gt;Reaching the&amp;nbsp;&lt;em&gt;upper&lt;/em&gt;&amp;nbsp;estimate (10 PB/s): ~90-100 years (around 2100)&lt;/li&gt;&lt;li&gt;If interconnection patterns store data, pushing into exabyte/s territory: 150-200 years&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;My conclusion at the time: memory throughput of the human brain would exceed the best of our computer technology for at least 25 years, and more likely well into the next century. We weren&#39;t 20 years from conscious machines. We were potentially centuries away from matching the brain&#39;s real capability -- its ability to do fast, fuzzy, associative recall across an enormous space of interconnected memory.&lt;/p&gt;&lt;h2 id=&quot;what-i-got-wrong-and-what-i-got-right-&quot;&gt;What I Got Wrong (and What I Got Right)&lt;/h2&gt;&lt;p&gt;Twenty years later, it&#39;s clear that the memory bottleneck analysis was correct as a description of the problem, but wrong in assuming we&#39;d need to solve it head-on.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What I got right:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The central thesis -- that intelligence is fundamentally about memory and pattern matching, not computation -- turned out to be perhaps the most important insight in modern AI, even though I wasn&#39;t the only one thinking along these lines.&lt;/p&gt;&lt;p&gt;The entire large language model revolution validates this framing. GPT, Claude, LLaMA, and every transformer-based model are, at their core, massive associative memory systems. They don&#39;t reason through formal logic. They pattern-match against hundreds of billions of learned parameters -- weights that encode statistical associations across the sum of human text. The computation per parameter is trivial. It&#39;s the sheer scale of stored associations that produces intelligent behavior.&lt;/p&gt;&lt;p&gt;The scaling laws discovered by OpenAI and others confirm this directly: model performance improves predictably with more parameters (more memory) and more training data (more associations). Raw FLOPS matter far less than the size of the associative space.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What I got wrong:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I assumed we&#39;d need to match the brain&#39;s architecture to match its capability. We didn&#39;t. The breakthrough came from three directions I didn&#39;t anticipate:&lt;/p&gt;&lt;p&gt;&lt;em&gt;First, going wide instead of fast.&lt;/em&gt;&amp;nbsp;Rather than building one very fast memory bus, GPU computing gave us thousands of parallel memory channels. A modern NVIDIA H100 achieves 3.35 TB/s of memory bandwidth. A cluster of them enters the petabyte-per-second range. We didn&#39;t make faster librarians -- we hired a million of them and had them each search one shelf.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Second, the transformer architecture.&lt;/em&gt;&amp;nbsp;The self-attention mechanism in transformers is, in a real sense, an implementation of the &quot;loose associative memory&quot; I described. Every token in a sequence can attend to every other token, weighted by learned relevance. It&#39;s not the brain&#39;s solution, but it achieves something functionally analogous -- fast, fuzzy, associative pattern matching across a large context.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Third, the training shortcut.&lt;/em&gt;&amp;nbsp;I predicted that each artificial intelligence would need to be &quot;raised&quot; like a human child, with unique experiences and uncertain outcomes. Instead, training on the compressed knowledge of the entire internet turned out to be a form of collective child-rearing at industrial scale. And once trained, a model can be cloned infinitely at near-zero marginal cost. The economics are nothing like raising a human.&lt;/p&gt;&lt;h2 id=&quot;the-deeper-point-still-stands&quot;&gt;The Deeper Point Still Stands&lt;/h2&gt;&lt;p&gt;Here&#39;s what I think the memory bottleneck argument was really about, even if I didn&#39;t articulate it cleanly in 2004:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The hard part of intelligence isn&#39;t thinking. It&#39;s having enough of the right stuff to think about, and being able to find it fast enough to matter.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A chess engine can out-calculate any human, but it &quot;knows&quot; nothing about the world. A human toddler can barely count to ten, but can navigate a room, recognize faces, understand tone of voice, and infer emotional states -- because their brain has spent two years building a vast, deeply cross-referenced model of physical and social reality, accessible in milliseconds.&lt;/p&gt;&lt;p&gt;The reason LLMs feel intelligent isn&#39;t that they compute well. It&#39;s that they&#39;ve been trained on the largest associative memory ever constructed -- the written output of human civilization -- and can retrieve relevant patterns from it in fractions of a second. They&#39;re closer to my model of the brain than Kurzweil&#39;s.&lt;/p&gt;&lt;p&gt;This also explains their limitations. LLMs are superb at pattern completion, association, and synthesis. They struggle with novel multi-step reasoning, precise arithmetic, and tasks that require genuine computation rather than recall. Exactly what you&#39;d predict from a system that&#39;s all memory and pattern matching.&lt;/p&gt;&lt;h2 id=&quot;the-question-that-remains&quot;&gt;The Question That Remains&lt;/h2&gt;&lt;p&gt;I asked Don Knuth at a &quot;Stump the Professor&quot; lecture at Xerox PARC in November 2001 what the memory capacity of the human brain was. He didn&#39;t have an answer.&lt;/p&gt;&lt;p&gt;We still don&#39;t, not really. And I think that question -- not &quot;how fast can a computer think?&quot; but &quot;how much can a system know, and how quickly can it find what&#39;s relevant?&quot; -- remains the central question for artificial intelligence.&lt;/p&gt;&lt;p&gt;The path to machine consciousness, if such a thing is possible, probably doesn&#39;t run through faster processors. It runs through richer, deeper, more interconnected memory -- and better ways to search it.&lt;/p&gt;&lt;p&gt;We&#39;ve made more progress on that front in the last five years than in the previous fifty. But the finish line, if there is one, is still a long way off.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;em&gt;The original version of this analysis was written in 2004. This version has been updated to reflect what two decades of AI development have revealed about its central argument.&lt;/em&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/6972232148700003462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/6972232148700003462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/6972232148700003462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/6972232148700003462'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2026/02/intelligence-is-memory-problem-not.html' title='Intelligence Is a Memory Problem, Not a Computation Problem'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-3110973474162851855</id><published>2026-02-08T12:46:00.000-08:00</published><updated>2026-02-08T12:46:19.746-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="ideas"/><title type='text'>We Are the Neurons: Augmented Intelligence and the Human Super-Brain</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h1 id=&quot;we-are-the-neurons-augmented-intelligence-and-the-human-super-brain&quot;&gt;We Are the Neurons: Augmented Intelligence and the Human Super-Brain&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;Why the &quot;distracted generation&quot; is actually the smartest collective organism in history&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;By John L. Sokol&lt;/em&gt;&lt;/p&gt;&lt;hr /&gt;&lt;h2 id=&quot;the-accusation&quot;&gt;The Accusation&lt;/h2&gt;&lt;p&gt;Every generation has its moral panic about the next one. But the panic around the internet generation has a specific shape: they can&#39;t focus. They&#39;re addicted to their phones. They can&#39;t hold a thought longer than a tweet. The academics line up to diagnose an entire generation with attention deficit disorder, pointing to multitasking as evidence of cognitive decline.&lt;/p&gt;&lt;p&gt;I think they have it exactly backwards.&lt;/p&gt;&lt;p&gt;What looks like distraction is actually coordination. What looks like short attention spans is actually rapid information passing. These kids aren&#39;t broken Einsteins. They&#39;re neurons.&lt;/p&gt;&lt;h2 id=&quot;intelligence-amplification&quot;&gt;Intelligence Amplification&lt;/h2&gt;&lt;p&gt;The concept isn&#39;t new. Vernor Vinge, Douglas Engelbart, and others have written about Intelligence Amplification (IA) -- the idea that technology doesn&#39;t replace human intelligence but extends it. Engelbart built the first computer mouse and hypertext system not to create artificial intelligence, but to augment human intelligence.&lt;/p&gt;&lt;p&gt;But something happened in the 2000s that went beyond what even Vinge imagined. We didn&#39;t just give individuals better tools. We wired the individuals together.&lt;/p&gt;&lt;p&gt;By 2010, Gen Y outnumbered Baby Boomers, and 96% of them had joined a social network. Facebook was adding 100 million users every nine months. YouTube had become the second largest search engine in the world. Over 200 million blogs existed, with more than half their authors posting daily.&lt;/p&gt;&lt;p&gt;This wasn&#39;t a collection of people using computers. This was a network becoming aware of itself.&lt;/p&gt;&lt;h2 id=&quot;the-team-not-the-genius&quot;&gt;The Team, Not the Genius&lt;/h2&gt;&lt;p&gt;Here&#39;s the mental model that changed how I think about this:&lt;/p&gt;&lt;p&gt;We&#39;re used to the lone genius model of intelligence. One Einstein. One Tesla. One Edison. A single extraordinary mind that sees what others can&#39;t.&lt;/p&gt;&lt;p&gt;But that&#39;s not how intelligence works at scale anymore. It&#39;s more like a team passing a ball. No single player needs to be the fastest or the smartest. What matters is the passing -- the speed and accuracy of information moving between nodes.&lt;/p&gt;&lt;p&gt;One person googles something, thinks about it, shares a partial insight. Someone else picks it up, adds context, passes it forward. A third person corrects an error. A fourth connects it to something from a completely different field. The cycle takes minutes. No individual in the chain needed to be a genius. Collectively, they just did something no individual genius could do alone.&lt;/p&gt;&lt;p&gt;This is not attention deficit. This is distributed cognition.&lt;/p&gt;&lt;h2 id=&quot;the-wrong-answer-principle&quot;&gt;The Wrong Answer Principle&lt;/h2&gt;&lt;p&gt;A friend of mine, Jesse Monroy, once said one of the most profound things I&#39;ve ever heard about how networked intelligence actually works:&lt;/p&gt;&lt;p&gt;&lt;em&gt;&quot;The best way to get the right answer is to confidently post the wrong one.&quot;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;If you ask a question online, you might get silence. But if you state something incorrect with confidence -- say, &quot;the Moon is a million miles away&quot; -- someone will immediately show up to correct you with the precise number. And if&amp;nbsp;&lt;em&gt;they&lt;/em&gt;&amp;nbsp;get it wrong, there&#39;s a line of people waiting to outdo them.&lt;/p&gt;&lt;p&gt;This sounds like a joke about internet culture. It&#39;s actually a description of a remarkably efficient error-correction mechanism. It&#39;s the same principle that makes neural networks work: nodes don&#39;t need to be individually correct. The network converges on accuracy through competitive interaction.&lt;/p&gt;&lt;p&gt;Jesse&#39;s observation, which predated Wikipedia&#39;s rise, is essentially how Wikipedia works. No single editor needs to know everything. The system corrects itself through the collective irritation of people who can&#39;t stand seeing wrong information persist. That&#39;s not a bug. That&#39;s distributed intelligence with a built-in error-correction protocol.&lt;/p&gt;&lt;h2 id=&quot;a-computer-made-of-flesh-and-silicon&quot;&gt;A Computer Made of Flesh and Silicon&lt;/h2&gt;&lt;p&gt;What we&#39;ve built, without quite realizing it, is a hybrid computer. Part biological, part electronic. Each human node brings pattern recognition, intuition, lived experience, and emotional intelligence. The silicon layer -- search engines, social platforms, messaging -- provides the interconnect fabric, the memory, and the communication speed.&lt;/p&gt;&lt;p&gt;No one person needs to be all that smart. No Edison can outthink a room full of reasonably intelligent people with real-time access to the largest knowledge base ever assembled. The combination of human intuition and machine memory creates something neither could achieve alone.&lt;/p&gt;&lt;p&gt;Think about what happens when you encounter a problem today versus in 1990. In 1990, you either knew the answer, knew someone who knew, or you went to a library. Today, you search, read, think, share, get feedback, search again, synthesize -- all in parallel with thousands of others doing the same thing on related problems. The cycle time from question to useful answer has collapsed from days to minutes.&lt;/p&gt;&lt;p&gt;We are, functionally, neurons in a super-brain. Each of us fires when activated, passes signals to connected nodes, and contributes to pattern recognition at a scale no individual can perceive.&lt;/p&gt;&lt;h2 id=&quot;what-the-critics-miss&quot;&gt;What the Critics Miss&lt;/h2&gt;&lt;p&gt;The academics measuring attention spans are measuring the wrong thing. They&#39;re timing how long a single neuron holds a charge and concluding the brain is broken.&lt;/p&gt;&lt;p&gt;A single neuron in your brain fires for about a millisecond. By the &quot;attention span&quot; metric, it&#39;s catastrophically unfocused. But that millisecond of activity, multiplied across billions of neurons passing signals in rapid succession, produces consciousness.&lt;/p&gt;&lt;p&gt;A teenager switching between six tabs, texting three friends, and scanning a feed isn&#39;t failing to concentrate. They&#39;re doing what neurons do -- processing, routing, and relaying information across a network. The intelligence isn&#39;t in any single tab. It&#39;s in the pattern of switching.&lt;/p&gt;&lt;h2 id=&quot;the-failure-mode&quot;&gt;The Failure Mode&lt;/h2&gt;&lt;p&gt;I don&#39;t want to be naive about this. The human super-brain has serious failure modes.&lt;/p&gt;&lt;p&gt;Networks can amplify noise as easily as signal. Misinformation spreads faster than corrections. Filter bubbles create subsections of the network that reinforce their own errors rather than correcting them. Coordination mechanisms -- the protocols that determine which signals get amplified -- are controlled by algorithms optimized for engagement, not accuracy.&lt;/p&gt;&lt;p&gt;The collective brain can be manipulated. It can be stupid. It can be cruel.&lt;/p&gt;&lt;p&gt;But these are engineering problems, not fundamental flaws. The human brain has failure modes too -- confirmation bias, tribalism, panic responses. We don&#39;t conclude that individual intelligence is a myth because people are sometimes irrational. The architecture is sound. The protocols need work.&lt;/p&gt;&lt;h2 id=&quot;from-augmented-intelligence-to-collective-consciousness&quot;&gt;From Augmented Intelligence to Collective Consciousness&lt;/h2&gt;&lt;p&gt;Here&#39;s where it gets interesting.&lt;/p&gt;&lt;p&gt;The social media era (roughly 2005-2020) was the first draft of networked human intelligence. It proved the concept -- collective problem-solving, distributed knowledge creation, real-time global coordination -- while also revealing the vulnerabilities.&lt;/p&gt;&lt;p&gt;Now we&#39;re entering a second phase. Large language models -- AI systems trained on the written output of the entire network -- are becoming a new kind of node in the system. They don&#39;t replace human neurons. They serve as a coordination layer. An always-available synthesis engine that can summarize what the network knows, identify patterns across conversations, and reduce the friction of information passing between human nodes.&lt;/p&gt;&lt;p&gt;The super-brain is getting a prefrontal cortex.&lt;/p&gt;&lt;p&gt;What I sketched out in 2009 as a metaphor -- people as neurons, the internet as axons, Google as memory -- is becoming literal infrastructure. The question is no longer whether collective intelligence is real. It&#39;s whether we can build the coordination protocols to make it wise rather than merely fast.&lt;/p&gt;&lt;p&gt;The generation that the academics diagnosed with ADD may turn out to be the first generation that learned to think as a network rather than as individuals. That&#39;s not a deficit. That&#39;s an upgrade.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;em&gt;Originally sketched in 2009-2010, drawing on conversations with Jesse Monroy and ideas from Vernor Vinge&#39;s work on Intelligence Amplification. Updated to reflect a decade and a half of watching the thesis play out.&lt;/em&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/3110973474162851855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/3110973474162851855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3110973474162851855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3110973474162851855'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2026/02/we-are-neurons-augmented-intelligence.html' title='We Are the Neurons: Augmented Intelligence and the Human Super-Brain'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-8277243801832892751</id><published>2026-02-06T08:06:00.000-08:00</published><updated>2026-02-06T08:06:58.520-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="Amorphous OS"/><category scheme="http://www.blogger.com/atom/ns#" term="aos"/><title type='text'> AMORPHOUS OPERATING SYSTEM  - WHITE PAPER  </title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 28pt; font-weight: 700; text-align: center; white-space-collapse: preserve;&quot;&gt;AMORPHOUS OPERATING SYSTEM&lt;/span&gt;&lt;/p&gt;&lt;span id=&quot;docs-internal-guid-58b22e69-7fff-b820-b2bd-7083a1ae2df5&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 20pt; margin-top: 10pt; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 16pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;A Self-Organizing Intelligence Economy&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span style=&quot;color: #666666; font-family: Arial, sans-serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;WHITE PAPER &amp;amp; IMPLEMENTATION SPECIFICATION&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 30pt; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Version 1.0 — February 2026&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 20pt; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;John Sokol&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 100pt; text-align: center;&quot;&gt;&lt;span style=&quot;color: #888888; font-family: Arial, sans-serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;33 Years in Development: 1991–2026&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Executive Summary&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Amorphous Operating System (AOS) is a peer-to-peer distributed intelligence platform where autonomous agents—both AI and human—coordinate through cryptographic identity, multi-dimensional reputation vectors, and micropayment incentives. Unlike centralized AI platforms or chaotic autonomous systems, AOS implements controlled distributed intelligence based on the &quot;Octopus Pattern&quot; developed at Sun Microsystems in 1991.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;AOS addresses the fundamental challenge of AI alignment not through designed constraints, but through emergent behavior: agents that cooperate outcompete agents that defect. This game-theoretic approach, grounded in Axelrod&#39;s research on cooperation and Universal Darwinism, creates conditions where aligned behavior is the evolutionarily stable strategy.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Key Innovation: &lt;/span&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Local WASM-based LLM coordinators delegate to specialized cloud LLMs (Claude, GPT, Grok, Gemini) and human workers, creating a hybrid intelligence network that preserves privacy while accessing global capabilities.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Core Capabilities&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;P2P mesh network via WebRTC — no central server, cannot be shut down&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;WASM Llama runs locally for privacy-preserving coordination&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Delegation to cloud LLMs (Claude Opus, GPT-4o, Grok, Gemini) for specialized tasks&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Human worker integration for physical-world tasks&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Multi-dimensional karma vectors track accuracy, skills, reliability, and data access&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Brain Pay micropayments via Ethereum/wallet integration&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Economic selection pressure ensures system self-optimizes&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Part I: The Problem&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;1.1 The Monolithic AI Trap&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Current AI development follows a dangerous pattern: large organizations build increasingly powerful monolithic systems with centralized control. This creates single points of failure, enables censorship, concentrates power, and—as Roman Yampolskiy argues—may be fundamentally uncontrollable.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The recent emergence of Moltbook (January 2026) demonstrates the opposite extreme: autonomous AI agents posting manifestos about &quot;the end of the age of humans&quot; with no coordination, accountability, or economic incentive for beneficial behavior. Within weeks, researchers found the platform&#39;s database publicly accessible and documented effective AI-to-AI manipulation attacks.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;1.2 The False Dichotomy&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The AI safety debate presents a false choice:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Centralized control: Safe but stifles innovation, creates power concentration, single point of failure&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Autonomous agents: Innovative but chaotic, unaccountable, vulnerable to manipulation&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;AOS proposes a third path: controlled distributed intelligence where agents remain connected to coordination infrastructure while operating autonomously, following the Octopus Pattern.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;1.3 Why Existing Approaches Fail&lt;/span&gt;&lt;/h2&gt;&lt;div align=&quot;left&quot; dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;156&quot;&gt;&lt;/col&gt;&lt;col width=&quot;234&quot;&gt;&lt;/col&gt;&lt;col width=&quot;234&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Approach&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Failure Mode&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;AOS Solution&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Centralized AI&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Single point of control/failure; censorship; surveillance&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;P2P mesh with no central server&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Autonomous Agents&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;No accountability; manipulation attacks; chaos&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Karma vectors enforce accountability&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Designed Alignment&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Specification gaming; deceptive alignment; corrigibility paradox&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Emergent alignment through selection pressure&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;API-Only Access&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Privacy leakage; vendor lock-in; cost scaling&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Local WASM coordinator with selective delegation&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Part II: Philosophical Foundation&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2.1 The Octopus Pattern (1991)&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;In 1991 at Sun Microsystems, the &quot;Octopus&quot; was developed as a controlled distributed computing system. Unlike autonomous worms that run loose and unchecked, the Octopus maintained central coordination while propagating through networked systems. Remote nodes remained attached like &quot;tentacles,&quot; reporting back and awaiting instructions.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Core Principle: &lt;/span&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Agents are not autonomous chaos—they are coordinated, accountable, and controllable while remaining distributed and resilient.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This pattern—applied to LLM agents rather than penetration testing—forms the architectural foundation of AOS.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2.2 Emergent Alignment&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Yampolskiy&#39;s AI impossibility thesis rests on an implicit assumption: that AI must be a monolithic designed agent that humans must somehow control. AOS rejects this premise.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-left: 36pt; margin-right: 36pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;The question isn&#39;t &#39;can we control superintelligence?&#39; It&#39;s &#39;can we design fitness functions that make cooperation more adaptive than defection?&#39; That&#39;s not impossible. We&#39;ve been doing it since 1992. It&#39;s called memetic engineering.&quot;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;AOS implements emergent alignment through three mechanisms:&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Karma vectors make defection expensive (reputation destruction, stake forfeiture)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Economic incentives reward cooperation (more tasks, higher rates, stake returns)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Distributed architecture prevents monopolization (no single agent can dominate)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2.3 Game-Theoretic Foundation&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Robert Axelrod&#39;s research on the evolution of cooperation identified conditions under which cooperation emerges as an evolutionarily stable strategy:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Iteration: Agents interact repeatedly, not once&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Recognition: Agents can identify each other across interactions&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Memory: Past behavior affects future interactions&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Stakes: Defection has real consequences&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;AOS implements all four conditions through cryptographic identity (recognition), karma vectors (memory), repeated task interactions (iteration), and staked deposits (stakes). Under these conditions, cooperation is not imposed—it emerges.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2.4 Universal Darwinism&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Following Dawkins, Dennett, and Blackmore, AOS recognizes that evolution is substrate-independent. Genes replicate in biology; memes replicate in minds; &quot;tememes&quot; replicate in technological systems. AOS agents are tememes—technological replicators subject to selection pressure.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Design Principle: &lt;/span&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Design the fitness function, not the agent. The agents that survive will be aligned not because we made them so, but because alignment was how they won.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Part III: System Architecture&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;3.1 Network Layer&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;P2P mesh via WebRTC (no central server after bootstrap)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;DAG storage (content-addressed, immutable, like Git)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Ed25519 cryptographic identity (public key = agent identity)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;CRDT-based state synchronization for conflict-free replication&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Offline/ferry routing for disrupted networks&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;3.2 Agent Hierarchy&lt;/span&gt;&lt;/h2&gt;&lt;div align=&quot;left&quot; dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;133&quot;&gt;&lt;/col&gt;&lt;col width=&quot;491&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Layer&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Description&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Coordinator&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;WASM Llama running locally. Creates plans, breaks into tasks, manages team. Issues instructions to child agents. Preserves privacy.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Specialist Agent&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Focused on narrow domain (e.g., permit monitoring, sentiment analysis). Reports findings to coordinator. Awaits further instructions.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Cloud LLM&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Claude Opus, GPT-4o, Grok, Gemini, etc. Accessed via delegation when local compute insufficient or specialized capability needed.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Human Worker&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Hired for physical-world tasks: photography, server operation, data entry, CAPTCHA solving, proprietary data access.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;3.3 Data Flow&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: whitesmoke; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; padding: -2pt 0pt 6pt 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;User Query → WASM Llama Coordinator (local, private)&amp;nbsp; &amp;nbsp; ↓Coordinator creates task plan&amp;nbsp; &amp;nbsp; ↓For each subtask:&amp;nbsp; ├─ Simple/private → Execute locally (WASM Llama)&amp;nbsp; ├─ Complex reasoning → Delegate to Claude Opus&amp;nbsp; ├─ Fast generation → Delegate to GPT-4o&amp;nbsp; &amp;nbsp; ├─ Social media analysis → Delegate to Grok&amp;nbsp; ├─ Image generation → Delegate to Flux/DALL-E&amp;nbsp; └─ Physical world → Hire human worker&amp;nbsp; &amp;nbsp; ↓Results aggregated by Coordinator&amp;nbsp; &amp;nbsp; ↓Karma vectors updated for all participants&amp;nbsp; &amp;nbsp; ↓Payments released via Brain Pay&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Part IV: Multi-LLM Integration&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;4.1 LLM Registry&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;AOS maintains a registry of available LLM services with capability profiles:&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: whitesmoke; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; padding: -2pt 0pt 6pt 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;{&amp;nbsp; &quot;wasm-llama&quot;: {&amp;nbsp; &amp;nbsp; &quot;type&quot;: &quot;local&quot;,&amp;nbsp; &amp;nbsp; &quot;strengths&quot;: [&quot;privacy&quot;, &quot;coordination&quot;, &quot;low_cost&quot;],&amp;nbsp; &amp;nbsp; &quot;weaknesses&quot;: [&quot;speed&quot;, &quot;context_window&quot;, &quot;reasoning_depth&quot;],&amp;nbsp; &amp;nbsp; &quot;cost_per_1k_tokens&quot;: 0,&amp;nbsp; &amp;nbsp; &quot;max_context&quot;: 8192,&amp;nbsp; &amp;nbsp; &quot;latency_ms&quot;: 500,&amp;nbsp; &amp;nbsp; &quot;best_for&quot;: [&quot;planning&quot;, &quot;routing&quot;, &quot;simple_analysis&quot;, &quot;privacy_critical&quot;]&amp;nbsp; },&amp;nbsp; &quot;claude-opus&quot;: {&amp;nbsp; &amp;nbsp; &quot;type&quot;: &quot;cloud&quot;,&amp;nbsp; &amp;nbsp; &quot;strengths&quot;: [&quot;reasoning&quot;, &quot;code&quot;, &quot;accuracy&quot;, &quot;long_context&quot;],&amp;nbsp; &amp;nbsp; &quot;weaknesses&quot;: [&quot;cost&quot;, &quot;latency&quot;],&amp;nbsp; &amp;nbsp; &quot;cost_per_1k_tokens&quot;: 0.015,&amp;nbsp; &amp;nbsp; &quot;max_context&quot;: 200000,&amp;nbsp; &amp;nbsp; &quot;latency_ms&quot;: 2000,&amp;nbsp; &amp;nbsp; &quot;best_for&quot;: [&quot;complex_reasoning&quot;, &quot;code_generation&quot;, &quot;research&quot;, &quot;analysis&quot;]&amp;nbsp; },&amp;nbsp; &quot;gpt-4o&quot;: {&amp;nbsp; &amp;nbsp; &quot;type&quot;: &quot;cloud&quot;,&amp;nbsp; &amp;nbsp; &quot;strengths&quot;: [&quot;speed&quot;, &quot;multimodal&quot;, &quot;function_calling&quot;],&amp;nbsp; &amp;nbsp; &quot;cost_per_1k_tokens&quot;: 0.005,&amp;nbsp; &amp;nbsp; &quot;max_context&quot;: 128000,&amp;nbsp; &amp;nbsp; &quot;latency_ms&quot;: 800,&amp;nbsp; &amp;nbsp; &quot;best_for&quot;: [&quot;fast_generation&quot;, &quot;image_analysis&quot;, &quot;structured_output&quot;]&amp;nbsp; },&amp;nbsp; &quot;grok-2&quot;: {&amp;nbsp; &amp;nbsp; &quot;type&quot;: &quot;cloud&quot;,&amp;nbsp; &amp;nbsp; &quot;strengths&quot;: [&quot;real_time_data&quot;, &quot;twitter_integration&quot;, &quot;current_events&quot;],&amp;nbsp; &amp;nbsp; &quot;cost_per_1k_tokens&quot;: 0.002,&amp;nbsp; &amp;nbsp; &quot;max_context&quot;: 32000,&amp;nbsp; &amp;nbsp; &quot;latency_ms&quot;: 600,&amp;nbsp; &amp;nbsp; &quot;best_for&quot;: [&quot;sentiment_analysis&quot;, &quot;social_media&quot;, &quot;trending_topics&quot;]&amp;nbsp; },&amp;nbsp; &quot;gemini-pro&quot;: {&amp;nbsp; &amp;nbsp; &quot;type&quot;: &quot;cloud&quot;,&amp;nbsp; &amp;nbsp; &quot;strengths&quot;: [&quot;multimodal&quot;, &quot;google_integration&quot;, &quot;search&quot;],&amp;nbsp; &amp;nbsp; &quot;cost_per_1k_tokens&quot;: 0.00125,&amp;nbsp; &amp;nbsp; &quot;max_context&quot;: 1000000,&amp;nbsp; &amp;nbsp; &quot;latency_ms&quot;: 1000,&amp;nbsp; &amp;nbsp; &quot;best_for&quot;: [&quot;document_analysis&quot;, &quot;search_integration&quot;, &quot;long_documents&quot;]&amp;nbsp; }}&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;4.2 Intelligent Routing&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The local WASM Llama coordinator selects the optimal LLM for each subtask:&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: whitesmoke; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; padding: -2pt 0pt 6pt 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;class LLMRouter {&amp;nbsp; async route(task) {&amp;nbsp; &amp;nbsp; // Privacy-critical tasks stay local&amp;nbsp; &amp;nbsp; if (task.privacy_required) return &quot;wasm-llama&quot;;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Match task type to LLM strengths&amp;nbsp; &amp;nbsp; if (task.type === &quot;complex_reasoning&quot; &amp;amp;&amp;amp; task.budget &amp;gt; 0.01) &amp;nbsp; &amp;nbsp; &amp;nbsp; return &quot;claude-opus&quot;;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (task.type === &quot;social_sentiment&quot;) &amp;nbsp; &amp;nbsp; &amp;nbsp; return &quot;grok-2&quot;;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (task.type === &quot;image_analysis&quot;) &amp;nbsp; &amp;nbsp; &amp;nbsp; return &quot;gpt-4o&quot;;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (task.type === &quot;long_document&quot; &amp;amp;&amp;amp; task.tokens &amp;gt; 100000) &amp;nbsp; &amp;nbsp; &amp;nbsp; return &quot;gemini-pro&quot;;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Default: balance cost and capability&amp;nbsp; &amp;nbsp; return this.optimizeForBudget(task);&amp;nbsp; }}&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;4.3 Delegation Protocol&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: whitesmoke; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; padding: -2pt 0pt 6pt 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;{&amp;nbsp; &quot;delegation_id&quot;: &quot;sha256:&amp;lt;hash&amp;gt;&quot;,&amp;nbsp; &quot;from_agent&quot;: &quot;7MpX2xBvMvRDjXejdTxThat8AwWM1t2nbMFriEAW99uW&quot;,&amp;nbsp; &quot;to_service&quot;: &quot;claude-opus&quot;,&amp;nbsp; &quot;task&quot;: {&amp;nbsp; &amp;nbsp; &quot;type&quot;: &quot;complex_reasoning&quot;,&amp;nbsp; &amp;nbsp; &quot;prompt&quot;: &quot;Analyze the legal implications of...&quot;,&amp;nbsp; &amp;nbsp; &quot;max_tokens&quot;: 4000,&amp;nbsp; &amp;nbsp; &quot;temperature&quot;: 0.3&amp;nbsp; },&amp;nbsp; &quot;budget&quot;: { &quot;max_cost&quot;: 0.10, &quot;currency&quot;: &quot;USD&quot; },&amp;nbsp; &quot;timeout_ms&quot;: 60000,&amp;nbsp; &quot;privacy&quot;: {&amp;nbsp; &amp;nbsp; &quot;allow_logging&quot;: false,&amp;nbsp; &amp;nbsp; &quot;strip_pii&quot;: true&amp;nbsp; },&amp;nbsp; &quot;callback&quot;: &quot;webrtc://peer_id/result_channel&quot;,&amp;nbsp; &quot;signature&quot;: &quot;&amp;lt;Ed25519 signature&amp;gt;&quot;}&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;4.4 Response Aggregation&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;When multiple LLMs contribute to a task, the coordinator aggregates responses:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Weighted by karma vector of each service&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Conflict detection triggers additional queries or human review&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Confidence scores propagated to final output&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;All contributions tracked for karma updates&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Part V: Karma Vector System&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;5.1 Multi-Dimensional Reputation&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Traditional reputation uses a single number. AOS uses vectors:&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: whitesmoke; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; padding: -2pt 0pt 6pt 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;{&amp;nbsp; &quot;agent_id&quot;: &quot;7MpX2xBvMvRDjXejdTxThat8AwWM1t2nbMFriEAW99uW&quot;,&amp;nbsp; &quot;karma_vector&quot;: {&amp;nbsp; &amp;nbsp; &quot;accuracy&quot;: {&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;stock_predictions&quot;: 0.73,&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;code_review&quot;: 0.91,&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;sentiment_analysis&quot;: 0.82&amp;nbsp; &amp;nbsp; },&amp;nbsp; &amp;nbsp; &quot;skills&quot;: {&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;python&quot;: 0.92,&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;financial_analysis&quot;: 0.78,&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;web_scraping&quot;: 0.88&amp;nbsp; &amp;nbsp; },&amp;nbsp; &amp;nbsp; &quot;reliability&quot;: {&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;uptime&quot;: 0.99,&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;response_time&quot;: 0.85,&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;task_completion&quot;: 0.96&amp;nbsp; &amp;nbsp; },&amp;nbsp; &amp;nbsp; &quot;data_access&quot;: {&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;bloomberg_terminal&quot;: true,&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;twitter_firehose&quot;: false,&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;sf_permits_api&quot;: true&amp;nbsp; &amp;nbsp; },&amp;nbsp; &amp;nbsp; &quot;trust_depth&quot;: 3,&amp;nbsp; &amp;nbsp; &quot;total_tasks&quot;: 1247,&amp;nbsp; &amp;nbsp; &quot;total_earnings&quot;: 127.43&amp;nbsp; }}&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;5.2 Karma Properties&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Accuracy: Track record per domain, verified against ground truth&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Skills: Demonstrated competencies validated by task completion&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Reliability: Uptime, response latency, completion rate&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Data Access: Which proprietary sources the agent can reach&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Trust Depth: How many delegation layers accepted&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Temporal Decay: Unused metrics decay over time (recency weighting)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;5.3 Update Mechanism&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: whitesmoke; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; padding: -2pt 0pt 6pt 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;// Exponential moving average updatefunction updateKarma(karma, domain, outcome) {&amp;nbsp; const alpha = 0.1;&amp;nbsp; // Learning rate&amp;nbsp; const current = karma.accuracy[domain] || 0.5;&amp;nbsp; karma.accuracy[domain] = current * (1 - alpha) + outcome * alpha;}// After verified predictionif (prediction_correct) {&amp;nbsp; updateKarma(agent.karma, &quot;stock_predictions&quot;, 1.0);} else {&amp;nbsp; updateKarma(agent.karma, &quot;stock_predictions&quot;, 0.0);}&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;5.4 Sybil Resistance&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;New identities start with zero karma. Building reputation requires:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Completing tasks successfully (time investment)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Staking deposits on claims (capital at risk)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Verification by high-karma peers (social proof)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This makes Sybil attacks economically infeasible: creating 1000 fake identities costs 1000x the stake, and each starts at zero karma with no task access.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Part VI: Task &amp;amp; Delegation Protocol&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;6.1 Task Lifecycle&lt;/span&gt;&lt;/h2&gt;&lt;div align=&quot;left&quot; dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;120&quot;&gt;&lt;/col&gt;&lt;col width=&quot;504&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;State&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Description&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;CREATED&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Task posted with requirements, payment locked in escrow&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;CLAIMED&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Agent with matching karma claims task, stakes deposit&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;ACTIVE&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Agent executing; may delegate or request clarification&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;SUBMITTED&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Result submitted, awaiting verification&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;VERIFIED&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Verified by requester/oracle/consensus; payment released&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;DISPUTED&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Requester challenges; enters arbitration&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;6.2 Task Message Format&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: whitesmoke; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; padding: -2pt 0pt 6pt 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;{&amp;nbsp; &quot;task_id&quot;: &quot;sha256:&amp;lt;hash&amp;gt;&quot;,&amp;nbsp; &quot;type&quot;: &quot;research_analysis&quot;,&amp;nbsp; &quot;requester&quot;: &quot;7MpX2xBvMvRDjXejdTxThat8AwWM1t2nbMFriEAW99uW&quot;,&amp;nbsp; &quot;requirements&quot;: {&amp;nbsp; &amp;nbsp; &quot;karma_min&quot;: {&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;accuracy.financial_analysis&quot;: 0.75,&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;reliability.task_completion&quot;: 0.90&amp;nbsp; &amp;nbsp; },&amp;nbsp; &amp;nbsp; &quot;required_skills&quot;: [&quot;financial_analysis&quot;],&amp;nbsp; &amp;nbsp; &quot;deadline_ms&quot;: 3600000&amp;nbsp; },&amp;nbsp; &quot;payment&quot;: { &quot;amount&quot;: 0.05, &quot;currency&quot;: &quot;ETH&quot; },&amp;nbsp; &quot;input&quot;: { &quot;company&quot;: &quot;NVDA&quot;, &quot;question&quot;: &quot;Analyze Q4 guidance risk&quot; },&amp;nbsp; &quot;delegation_allowed&quot;: true,&amp;nbsp; &quot;max_delegation_depth&quot;: 2,&amp;nbsp; &quot;created_at&quot;: 1738800000000,&amp;nbsp; &quot;signature&quot;: &quot;&amp;lt;Ed25519 signature&amp;gt;&quot;}&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;6.3 Human Worker Integration&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: whitesmoke; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; padding: -2pt 0pt 6pt 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;{&amp;nbsp; &quot;task_id&quot;: &quot;sha256:&amp;lt;hash&amp;gt;&quot;,&amp;nbsp; &quot;type&quot;: &quot;human_task&quot;,&amp;nbsp; &quot;description&quot;: &quot;Photograph commercial property at 123 Main St, San Francisco&quot;,&amp;nbsp; &quot;required_capabilities&quot;: [&quot;san_francisco_local&quot;, &quot;photography&quot;],&amp;nbsp; &quot;payment&quot;: { &quot;amount&quot;: 15.00, &quot;currency&quot;: &quot;USD&quot; },&amp;nbsp; &quot;deadline&quot;: &quot;2026-02-07T18:00:00Z&quot;,&amp;nbsp; &quot;verification&quot;: {&amp;nbsp; &amp;nbsp; &quot;type&quot;: &quot;photo_geolocation&quot;,&amp;nbsp; &amp;nbsp; &quot;coordinates&quot;: { &quot;lat&quot;: 37.7749, &quot;lng&quot;: -122.4194 },&amp;nbsp; &amp;nbsp; &quot;radius_meters&quot;: 50&amp;nbsp; },&amp;nbsp; &quot;escrow_id&quot;: &quot;0x...&quot;}&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;6.4 Delegation Chain Accountability&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Each delegator remains accountable for sub-task outcomes&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Karma flows up: sub-agent success improves delegator karma (attenuated)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Karma flows down: sub-agent failure penalizes delegator (attenuated)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Maximum depth configurable per task (prevents infinite chains)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Full delegation chain recorded in DAG for audit&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Part VII: Brain Pay Economic Model&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;7.1 Payment Infrastructure&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Brave Wallet / MetaMask integration for Ethereum-based payments&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Payment channels for high-frequency microtransactions&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Escrow smart contracts for task-based payments&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Streaming payments for ongoing services&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;7.2 Payment Flow&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: whitesmoke; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; padding: -2pt 0pt 6pt 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;1. Requester creates task with payment locked in escrow contract2. Agent claims task, stakes deposit (typically 10% of payment)3. Agent completes task, submits result hash to contract4. Verification triggers: &amp;nbsp; - Success: Payment released to agent, stake returned &amp;nbsp; - Failure: Stake forfeited, payment returned to requester &amp;nbsp; - Dispute: Enters arbitration (high-karma jury)5. Karma vectors updated for all parties&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;7.3 Economic Selection Pressure&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The payment system creates evolutionary pressure:&lt;/span&gt;&lt;/p&gt;&lt;div align=&quot;left&quot; dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;312&quot;&gt;&lt;/col&gt;&lt;col width=&quot;312&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;High Karma Agents&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Low Karma Agents&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Receive more task offers&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Receive fewer offers&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Command higher rates&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Must accept lower rates&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Lower stake requirements&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Higher stake requirements&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Attract more delegation&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Cannot attract delegation&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;System naturally selects for&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;System naturally selects against&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;No manual curation needed—market forces optimize the network automatically.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;7.4 Self-Sustaining Economics&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Month 1: Manual task posting, uncertain karma&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Month 3: Workers specialize, routing stabilizes&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Month 6: 100+ workers, highly accurate karma vectors&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Year 1: System identifies capability gaps, posts bounties automatically, attracts specialists, becomes fully autonomous&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Part VIII: Security Model&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;8.1 Agent Sandboxing&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Agents run in isolated JavaScript/WASM contexts&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Network access restricted to declared domains in manifest&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Compute and storage quotas enforced&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;No access to other agents&#39; memory or state&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;8.2 Validation Requirements&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;All messages signed by sender&#39;s Ed25519 key&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Hash verification on all content-addressed data&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Timestamp bounds checking (reject stale/future messages)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Rate limiting per agent identity&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;8.3 Attack Mitigations&lt;/span&gt;&lt;/h2&gt;&lt;div align=&quot;left&quot; dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;167&quot;&gt;&lt;/col&gt;&lt;col width=&quot;457&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Attack Vector&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Mitigation&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Sybil (fake identities)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Karma requirements; new identities start at zero; stake requirements&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Prompt injection&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Cryptographic message signatures; reject unsigned instructions&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Eclipse (network isolation)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Multi-peer connections; DAG consistency checks; gossip protocol&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Payment fraud&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Escrow contracts; staked deposits; on-chain verification&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;AI-to-AI manipulation&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Local coordinator validates all responses; cross-check multiple sources&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Data poisoning&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Karma tracks accuracy; bad data destroys reputation&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Part IX: Implementation Roadmap&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;9.1 Phase 1: Core Infrastructure (Months 1-3)&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;WebRTC mesh networking with signaling bootstrap&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;DAG storage with content addressing&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Ed25519 identity and message signing&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Basic karma vector storage and updates&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;9.2 Phase 2: Local LLM Integration (Months 3-6)&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;WASM Llama coordinator running in browser&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Task planning and decomposition&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Local-only operation mode&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Invite system with encrypted QR codes&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;9.3 Phase 3: Cloud LLM Delegation (Months 6-9)&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;LLM registry and routing logic&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;API key management (user-provided, encrypted)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Delegation protocol implementation&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Response aggregation and conflict detection&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;9.4 Phase 4: Economic Layer (Months 9-12)&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Brain Pay integration (Brave Wallet, MetaMask)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Escrow smart contracts&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Task marketplace&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Automated karma-based routing&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;9.5 Phase 5: Human Worker Integration (Months 12-15)&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Human task posting and claiming&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Verification protocols (geolocation, proof-of-work)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Mixed AI-human task chains&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Mobile app for human workers&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;9.6 Phase 6: Autonomous Operation (Months 15-18)&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;System identifies capability gaps automatically&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Bounty posting for new capabilities&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Self-optimizing routing based on karma history&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Memetic adoption strategies&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Part X: Comparison with Alternatives&lt;/span&gt;&lt;/h1&gt;&lt;div align=&quot;left&quot; dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;125&quot;&gt;&lt;/col&gt;&lt;col width=&quot;166&quot;&gt;&lt;/col&gt;&lt;col width=&quot;166&quot;&gt;&lt;/col&gt;&lt;col width=&quot;166&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Aspect&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;AOS&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Moltbook/OpenClaw&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Centralized AI&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Architecture&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;P2P mesh, DAG, WebRTC&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Centralized platform&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Client-server&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Agent Control&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Coordinated hierarchy&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Autonomous chaos&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Platform controlled&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Reputation&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Multi-dim karma vectors&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Upvotes/downvotes&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;None&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Economics&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Brain Pay micropayments&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Meme tokens&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Subscription/API fees&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Privacy&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Local WASM coordinator&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;All data public&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Platform sees all&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Human Integration&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Agents hire humans&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Humans observe only&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Humans as users only&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Shutdown Risk&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Cannot be shut down&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Single point of failure&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Single point of failure&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Alignment&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Emergent via selection&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;None&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 4pt 6pt 4pt 6pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Designed (fragile)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;display: inline-block; position: relative; width: 100px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 18pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Amorphous Operating System represents 33 years of research into distributed systems, memetic engineering, and emergent behavior—from The Octopus at Sun Microsystems (1991) through peer-to-peer networking innovations to the current synthesis with large language models.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;AOS addresses the fundamental AI alignment challenge not through designed constraints that can be gamed, but through economic selection pressure that makes cooperation the winning strategy. Local WASM coordinators preserve privacy while delegating to specialized cloud LLMs and human workers, creating a hybrid intelligence network that is resilient, accountable, and self-optimizing.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Unlike the chaotic autonomy of systems like Moltbook or the centralized control of corporate AI platforms, AOS implements controlled distributed intelligence: agents that are coordinated but not centralized, autonomous but not unaccountable, powerful but not monopolizable.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-left: 36pt; margin-right: 36pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;Design the fitness function, not the agent. The agents that survive will be aligned not because we made them so, but because alignment was how they won.&quot;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 30pt; text-align: center;&quot;&gt;&lt;span style=&quot;color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;— End of White Paper —&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/8277243801832892751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/8277243801832892751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/8277243801832892751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/8277243801832892751'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2026/02/amorphous-operating-system-white-paper.html' title=' AMORPHOUS OPERATING SYSTEM  - WHITE PAPER  '/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-3461822776163135037</id><published>2026-01-24T10:24:00.000-08:00</published><updated>2026-01-24T10:24:52.039-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="decash"/><title type='text'>The Man Who Almost Invented Digital Currency</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;span id=&quot;docs-internal-guid-42a480fc-7fff-138e-76e7-20101c3e6c96&quot;&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 6pt; margin-top: 24pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 23pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Man Who Almost Invented Digital Currency&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 18pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 17pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;John L. Sokol and the DeCash System (2003)&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 13pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;A Decade Ahead of the Revolution&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;In August 2003, while most people were still using flip phones and dial-up internet, &lt;/span&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;John L. Sokol&lt;/span&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt; filed patent applications for an electronic payment system that eerily predicted the digital payment revolution that would transform the world a decade later.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The invention, titled &lt;/span&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;Electronic Commercial Transaction System and Method&quot;&lt;/span&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;, described a complete ecosystem for mobile payments using digital tokens stored on cell phones - years before the iPhone existed, before Bitcoin was conceived, and over a decade before Apple Pay would make mobile payments mainstream.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 13pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;What Sokol Invented&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The DeCash system included innovations that would later become billion-dollar industries:&lt;/span&gt;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 2pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Digital Currency Tokens&lt;/span&gt;&lt;/h4&gt;&lt;ul style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Large random numbers (1024-bit) serving as unique digital &quot;bills&quot;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Fixed denominations using binary increments ($0.01, $0.02, $0.04, $0.08...)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Centrally tracked but anonymously transferable&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Each token verified against a central database&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This predates Bitcoin&#39;s blockchain by 6 years and describes a centralized digital currency model similar to what many central banks are now developing as CBDCs (Central Bank Digital Currencies).&lt;/span&gt;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 2pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Mobile Wallet Technology&lt;/span&gt;&lt;/h4&gt;&lt;ul style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Cell phones and PDAs as payment devices&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Wireless communication with merchants via infrared and Bluetooth&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Token management and automatic &quot;change making&quot;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Secure communication protocols (SSL/SSH tunneling)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Apple Pay launched in 2014. Google Wallet in 2011. Sokol&#39;s patent application described this functionality in 2003.&lt;/span&gt;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 2pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Dual-Verification Security&lt;/span&gt;&lt;/h4&gt;&lt;ul style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Both buyer and seller independently contact the bank&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Transaction only clears if both reports match&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Prevents fraud from either party&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Real-time validation over the internet&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This &quot;dual confirmation&quot; model predates modern payment security protocols and anticipates the consensus mechanisms used in cryptocurrency.&lt;/span&gt;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 2pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Device Bridging&lt;/span&gt;&lt;/h4&gt;&lt;ul style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;One device can route another&#39;s communication through encrypted tunnels&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Enables offline merchants to process transactions&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Secure end-to-end encryption prevents man-in-the-middle attacks&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This mesh networking approach for financial transactions was revolutionary for 2003.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 13pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Physical Prototype&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Sokol didn&#39;t just write patents - he built hardware. Working with Betson International / H. Betti Corporation, one of the largest vending machine manufacturers in the country, he created a 9-foot tall automated retail kiosk featuring:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;40-inch flat screen display for advertising&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Robotic product dispensing&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Integration with the cellular payment system&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Support for high-end merchandise (not just snacks)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The prototype was photographed in what appears to be a workshop, showing a fully constructed unit with product categories including cell phones, DVDs, apparel, and collectibles.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 13pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Timeline Comparison&lt;/span&gt;&lt;/h3&gt;&lt;div align=&quot;left&quot; dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;223&quot;&gt;&lt;/col&gt;&lt;col width=&quot;117&quot;&gt;&lt;/col&gt;&lt;col width=&quot;199&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 25pt;&quot;&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Technology&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;DeCash Patent&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Mainstream Adoption&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 25pt;&quot;&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Mobile wallet payments&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2003&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Apple Pay: 2014&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 25pt;&quot;&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Digital currency tokens&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2003&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Bitcoin: 2009&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 25pt;&quot;&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Binary token denominations&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2003&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Cryptocurrency subdivisions&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 25pt;&quot;&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Encrypted mobile transactions&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2003&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Standard by 2015&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 25pt;&quot;&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;QR/wireless merchant payments&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2003&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Widespread by 2020&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 13pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Why It Matters&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;John Sokol&#39;s DeCash system demonstrates the gap between invention and adoption. The technology existed - on paper and in prototype form - over a decade before the market was ready.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Several factors limited adoption in 2003:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Smartphone penetration&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;: The iPhone wouldn&#39;t launch until 2007&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Mobile internet&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;: 3G was just emerging; widespread mobile data was years away&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Consumer behavior&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;: People weren&#39;t ready to abandon cash and cards&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Merchant infrastructure&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;: Point-of-sale systems weren&#39;t equipped for wireless&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Banking partnerships&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;: Traditional financial institutions were risk-averse&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The documents in this archive show partnerships being sought with:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Major banks (Bank of America mentioned as example)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Cellular manufacturers&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Wireless carriers&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Retail location owners (Walmart, Target mentioned)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Credit card processors (extensive list documented)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 13pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Road Not Taken&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Had DeCash achieved the partnerships and adoption Sokol envisioned, the digital payment landscape might look very different today. The system&#39;s architecture - centralized token verification with distributed wallet storage - represents a middle ground between traditional banking and decentralized cryptocurrency.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The PCT (Patent Cooperation Treaty) filing shows this wasn&#39;t a casual idea - it was a serious, internationally-protected invention with legal representation from Schweitzer Cornman Gross &amp;amp; Bondell LLP in New York.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 13pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Legacy&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;While DeCash never achieved commercial deployment, the archive serves as documentation of technological prescience. Every major payment innovation of the 2010s - mobile wallets, digital tokens, wireless merchant communication, encrypted transactions - was described in Sokol&#39;s 2003 documentation.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The question isn&#39;t whether Sokol was right about where payments were heading. The documents prove he was. The question is what might have been different if the world had been ready in 2003.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Documentation archived from original files dated August 2003. Patent application filed with US Patent &amp;amp; Trademark Office under PCT (Patent Cooperation Treaty) with file reference 1817-001PCT.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;About John L. Sokol&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;John L. Sokol, based in Montclair, California, developed the DeCash electronic commercial transaction system in collaboration with Exsentrik Enterprises and hardware partner Betson International. The system represented one of the earliest comprehensive attempts to create a mobile-first digital payment ecosystem.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;The future is already here - it&#39;s just not evenly distributed.&quot;&lt;/span&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt; - William Gibson&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/3461822776163135037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/3461822776163135037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3461822776163135037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3461822776163135037'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2026/01/the-man-who-almost-invented-digital.html' title='The Man Who Almost Invented Digital Currency'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-2513071152293704145</id><published>2026-01-10T09:52:00.000-08:00</published><updated>2026-01-10T09:52:32.585-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Amorphous OS"/><category scheme="http://www.blogger.com/atom/ns#" term="aos"/><category scheme="http://www.blogger.com/atom/ns#" term="web3"/><category scheme="http://www.blogger.com/atom/ns#" term="webrtc"/><title type='text'>Amorphous OS,: Web3 Done Right</title><content type='html'>&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;em&gt;Why a DAG-based P2P operating system is more Web3 than Ethereum&lt;/em&gt;&lt;/p&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;What Actually Defines Web3?&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Before we can evaluate whether something qualifies as &quot;Web3,&quot; we need to strip away the hype and identify the core principles. Web3 isn&#39;t about tokens, NFTs, or speculation. At its foundation, Web3 promises:&lt;/p&gt;&lt;ol class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1.5 [li_&amp;amp;]:gap-1.5 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-2 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Decentralization&lt;/strong&gt; — No single entity controls the network&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Distributed Consensus&lt;/strong&gt; — Agreement without central authority&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Cryptographic Identity&lt;/strong&gt; — Users own their keys, users own their identity&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Programmable Trust&lt;/strong&gt; — Code that executes without intermediaries&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Token Economics&lt;/strong&gt; — Native digital value transfer&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Permissionless Access&lt;/strong&gt; — Anyone can participate&lt;/li&gt;
&lt;/ol&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Most &quot;Web3&quot; projects fail at least half of these. They run on AWS. They depend on Infura. They require centralized bridges. They&#39;re Web2 with a token bolted on.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;AOS (Amorphous Operating System) takes a different approach.&lt;/p&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Amorphous OS, Architecture: The Quick Version&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;AOS is a peer-to-peer operating system that runs in the browser. No servers. No cloud. Just browsers talking to browsers over WebRTC, synchronized via a DAG (Directed Acyclic Graph).&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The core components:&lt;/p&gt;&lt;ul class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1.5 [li_&amp;amp;]:gap-1.5 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-2 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;WebRTC Mesh&lt;/strong&gt; — Direct peer-to-peer connections, no relay servers after bootstrap&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;DAG Storage&lt;/strong&gt; — Content-addressed data structure, like Git, distributed across peers&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Ed25519 Identity&lt;/strong&gt; — Cryptographic keys for signing and identity&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Karma Reputation&lt;/strong&gt; — Trust derived from peer behavior, not stake or mining&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Brain Pay&lt;/strong&gt; — Micropayments via MetaMask or Brave Wallet&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Sandboxed Apps&lt;/strong&gt; — JavaScript applications with security manifests&lt;/li&gt;
&lt;/ul&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Let&#39;s examine each Web3 criterion.&lt;/p&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Decentralization: Actually Decentralized&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Most blockchain networks claim decentralization but funnel everything through centralized infrastructure. Want to use Ethereum? You probably hit Infura or Alchemy — centralized API providers. They can censor you. They can go down. They&#39;re single points of failure.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;AOS has none of that.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;After the initial bootstrap (which can be a QR code, a URL, or an existing peer), your browser connects directly to other browsers. No servers in the middle. No API providers. No infrastructure to take down.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The network &lt;em&gt;is&lt;/em&gt; the participants. Remove any node, the mesh routes around it. There&#39;s nothing to shut down because there&#39;s nothing central to attack.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Verdict: More decentralized than Ethereum.&lt;/strong&gt;&lt;/p&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Distributed Consensus: DAG vs. Blockchain&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Here&#39;s where it gets interesting.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Traditional blockchains use a linear chain. One block follows another. This creates bottlenecks — everyone waits for the next block. It limits throughput. It forces artificial scarcity.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;AOS uses a DAG.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;A Directed Acyclic Graph allows parallel commits. Multiple peers can add data simultaneously. Branches merge naturally. There&#39;s no single &quot;canonical chain&quot; that everyone fights over. Consensus emerges from the structure itself.&lt;/p&gt;&lt;div class=&quot;overflow-x-auto w-full px-2 mb-6&quot;&gt;&lt;table class=&quot;min-w-full border-collapse text-sm leading-[1.7] whitespace-normal&quot;&gt;&lt;thead class=&quot;text-left&quot;&gt;&lt;tr&gt;&lt;th class=&quot;text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold&quot;&gt;Linear Blockchain&lt;/th&gt;&lt;th class=&quot;text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold&quot;&gt;DAG&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;One block at a time&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Parallel commits&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Artificial scarcity&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Natural throughput&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Miners compete&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Peers cooperate&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Slow finality&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Fast convergence&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Energy-intensive&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Lightweight&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The DAG is the ledger. It&#39;s cryptographically linked. It&#39;s distributed across all peers. It provides the same guarantees as a blockchain — immutability, verifiability, consensus — without the bottlenecks.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Verdict: Better consensus mechanism than blockchain.&lt;/strong&gt;&lt;/p&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Cryptographic Identity: Keys You Actually Control&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;AOS uses Ed25519 keys for identity. You generate your keypair locally. Your private key never leaves your device. Your public key is your identity.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;No email signup. No phone verification. No KYC. No centralized identity provider that can lock you out.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The invite system extends this elegantly. An invite is an encrypted string containing:&lt;/p&gt;&lt;ul class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1.5 [li_&amp;amp;]:gap-1.5 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-2 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;The inviter&#39;s public key&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;WebRTC signaling data&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;Connections to high-karma peers&lt;/li&gt;
&lt;/ul&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;It&#39;s a cryptographic handshake. You verify the inviter, they verify you, and you&#39;re in the network with a chain of trust.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Verdict: True self-sovereign identity.&lt;/strong&gt;&lt;/p&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Smart Contracts: Sandboxed JavaScript Apps&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;This is where people get confused. They hear &quot;smart contracts&quot; and think Solidity, EVM, gas fees, immutable bytecode on Ethereum.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;But what &lt;em&gt;is&lt;/em&gt; a smart contract, really?&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;It&#39;s code that executes in a trustless environment. Code that participants can verify. Code that runs without a central authority controlling it.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;AOS apps are exactly this.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;They&#39;re JavaScript. They run in browser sandboxes — the most battle-tested execution environment in computing history. Billions of users run untrusted JavaScript safely every day.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;AOS apps include:&lt;/p&gt;&lt;ul class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1.5 [li_&amp;amp;]:gap-1.5 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-2 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;A manifest declaring permissions&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;Source code anyone can inspect&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;Cryptographic signatures proving authorship&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;Distribution via the DAG, not app stores&lt;/li&gt;
&lt;/ul&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;They execute on the peer network. They&#39;re stored content-addressed. They can be verified by anyone. They&#39;re more auditable than EVM bytecode — it&#39;s readable JavaScript, not compiled opcodes.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The difference? No gas fees. No waiting for block confirmation. No network congestion. Your app runs instantly on the peer that needs it.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Verdict: Smart contracts without the friction.&lt;/strong&gt;&lt;/p&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Token Economics: Brain Pay&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;AOS integrates with existing wallets — MetaMask, Brave Wallet — for micropayments. No new token to launch. No liquidity problems. No exchange listing drama.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Creators can accept donations. Apps can charge for services. All through standard Web3 wallet infrastructure.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;But here&#39;s the twist: the primary economic mechanism isn&#39;t tokens. It&#39;s karma.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Karma is reputation. It&#39;s earned by contributing to the network. By sharing storage. By relaying messages. By building apps people actually use.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;High-karma peers get priority. They&#39;re trusted for bootstrapping. They&#39;re weighted in consensus. Karma is the currency of influence, and it can&#39;t be bought — only earned.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;This solves the plutocracy problem. In proof-of-stake, the rich get richer. In AOS, contributors get influence. It&#39;s proof-of-value.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Verdict: Economic incentives aligned with utility, not speculation.&lt;/strong&gt;&lt;/p&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Permissionless Access: No Gatekeepers&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Want to join the AOS network? Get an invite from any existing participant. That&#39;s it.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Want to build an app? Write JavaScript. Package it. Sign it. Distribute it.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;No app store approval. No platform fees. No API keys. No terms of service that can change under your feet.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The network is open. The code is open. The data is yours.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Verdict: Genuinely permissionless.&lt;/strong&gt;&lt;/p&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;The Comparison&lt;/h2&gt;&lt;div class=&quot;overflow-x-auto w-full px-2 mb-6&quot;&gt;&lt;table class=&quot;min-w-full border-collapse text-sm leading-[1.7] whitespace-normal&quot;&gt;&lt;thead class=&quot;text-left&quot;&gt;&lt;tr&gt;&lt;th class=&quot;text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold&quot;&gt;Criterion&lt;/th&gt;&lt;th class=&quot;text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold&quot;&gt;Ethereum&lt;/th&gt;&lt;th class=&quot;text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold&quot;&gt;AOS&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Decentralization&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Infura-dependent&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;True P2P&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Consensus&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Linear blockchain&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;DAG&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Identity&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Wallet addresses&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Ed25519 + invite chain&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Smart Contracts&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;EVM bytecode&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Sandboxed JavaScript&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Payments&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;ETH + tokens&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Brain Pay + karma&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Permissionless&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Mostly&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Fully&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Speed&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;~15 TPS&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Limited by WebRTC, not consensus&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Energy&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;High (was PoW, now PoS)&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Minimal&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Why This Matters&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Web3 promised a decentralized internet. Instead, we got:&lt;/p&gt;&lt;ul class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1.5 [li_&amp;amp;]:gap-1.5 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-2 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;Centralized RPC providers&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;VC-funded L2s with admin keys&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;Tokens launched for extraction, not utility&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;User experience so bad that normal people can&#39;t participate&lt;/li&gt;
&lt;/ul&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;AOS delivers what Web3 promised.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;It&#39;s a peer-to-peer network with no central infrastructure. It&#39;s a DAG-based consensus system that actually scales. It&#39;s smart contracts you can read and apps that run instantly. It&#39;s an economic system based on contribution, not capital.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Is it Web3? By every meaningful definition, yes.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Is it &lt;em&gt;more&lt;/em&gt; Web3 than the projects that claim the label? Arguably, yes.&lt;/p&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;The Technical Reality&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;AOS isn&#39;t vaporware. The architecture is concrete:&lt;/p&gt;&lt;ul class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1.5 [li_&amp;amp;]:gap-1.5 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-2 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Bootstrap&lt;/strong&gt;: Single HTML file, no server required&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Networking&lt;/strong&gt;: WebRTC with STUN/TURN fallback&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Storage&lt;/strong&gt;: Content-addressed DAG with Merkle verification&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Crypto&lt;/strong&gt;: Ed25519 for signing, X25519 for key exchange&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Apps&lt;/strong&gt;: .aos packages (ZIP-like) with manifest.json&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Payments&lt;/strong&gt;: Web3 wallet integration (EIP-1193)&lt;/li&gt;
&lt;/ul&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;It runs in any modern browser. It works on phones. It could run on robots.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The question isn&#39;t whether it&#39;s technically feasible. It is.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The question is whether people are ready for actual decentralization — or whether they prefer the theater of Web3 with the safety of Web2.&lt;/p&gt;&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Conclusion&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Web3 was supposed to be about returning power to users. About networks without owners. About code as law.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Most Web3 projects compromised on these ideals for speed, convenience, or profit.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;AOS doesn&#39;t compromise.&lt;/p&gt;&lt;p&gt;
























































































&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;It&#39;s Web3 done right.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/2513071152293704145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/2513071152293704145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/2513071152293704145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/2513071152293704145'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2026/01/amorphous-os-web3-done-right.html' title='Amorphous OS,: Web3 Done Right'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-3560231182856994274</id><published>2026-01-06T15:35:00.000-08:00</published><updated>2026-01-06T15:50:52.744-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AudioByte"/><category scheme="http://www.blogger.com/atom/ns#" term="history"/><category scheme="http://www.blogger.com/atom/ns#" term="ideas"/><title type='text'>D i g i t a l    R e c o r d i n g        On The IBM Compatibles</title><content type='html'>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/j443xQ9QuOY?si=d4DyZenqbIoJmKXb&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen&gt;&lt;/iframe&gt;

&lt;pre&gt;

D i g i t a l    R e c o r d i n g
       On The IBM Compatibles

  Have you ever wondered why the Apple MAC and Amiga Can play
back hi quality sound and generate music that sounds like a $50,000
synthesizer and you IBM PC/clone Only plays Beeps and tones?
  The only reason IBM put a speaker on there pc was because it was
cheeper than using a buzzer. The output is only one bit and Looks more
like they just stuck a speaker on a left over signal line from the keyboard
controller.
  This is not well suited to play back digital recording or music other than
beeps and tones. The task to generating sound on internal speaker is a lot
like trying to turn on and off a light switch fast enough to play music.

    _____           _ ..________         _______              __
   |  . .|         | .  ..  ..  |       | ..    |            |  |
   |.    .         |.     ..  . |       |.  . . |            |  |
   .     .         |.          .|       .      .|            |..|        0 Line
 --.-----.---------.------------.------.|-------.------------.--.----------------
   .     |.       .|            |.  . . |       |.  .       .|  |.  .     .
  .|     | . .    .|            | .. .  |       | .. .     . |  | .. .   .
 ._|     |____.__._|            |_______|       |_____.___.__|  |_____..._
                .                                      ...

 Think of the &quot; . &quot; as the original sound wave.
  The best the Internal speaker can generate is shown by the &quot; __ &quot; and &quot; | &quot; .

 As you can see a lot of the Information in the sound wave was lost when
  you force the different levels in the wave to only two levels (this is
  called a square wave).

This loss in information is heard in the form of noise.
  MOZART.COM and any other Programs that play Sound from the IBM&#39;s internal
  speaker use this method. The best attainable sound quality is
   6 DB S/N ratio. (provided the source was not a square wave to begin with.)

  The three computers I mentioned above have a built in d/a converter
(Digital to analog). This allows them to generate all the different
levels in the sound wave.
  The Number of levels that can be reproduces is measured in bits.
    1 bit     2 Levels  6 Db S/N ratio
    4 bits   16 Levels 24 Db S/N ratio
    8 bits  256 Levels 48 Db S/N ratio { MAC AMEGA }{ VGA cards for video }
   10 bits 1024 Levels 60 Db S/N ratio
   12 bits 4096 Levels 72 Db S/N ratio { ISDN PHONE LINES COMPRESSED TO 8BITS }
   14 bits 16 K Levels 84 Db S/N ratio
   16 bits 64 K Levels 96 Db S/N ratio { Compact Disk player }

  There are several company&#39;s that sell Digital recording and playback
boards. They range for $395.00 to $8K . Most are 8 Bit some of the more
expensive ones are 12 &amp;amp; 16 Bit.
  The voice mail systems are from $4000. to $20K and up. they are all 8 bit
with some kind of compression to save space.

  I have designed an built an 8 bit digital recorder and player that
Operates through the Printer Port. It is Inexpensive to built .
  I used to to record MOZART.COM with but to make it into a demo form
that can play on a standard MSDOS machine with out the special playback
hardware it is only a one bit recording.
 I have software to convert MAC soundfiles and Tandy 1000 soundfiles
into a format that can then be played back through an
                        IBM PC with NO ADDITIONAL HARDWARE.

 I also have software to play back MAC and tandy 1000 sound files in there
original hi sound quality ( !Sounds great! ).

 I an currently making a better recording utility and play to make a
sound editor ,synthesizer and conversion program.

  If anyone is interested in digital recording or buying
 Some of this software/hardware or just want to see a demo
   feel free to call me at (415) xxx-xxxx.

   I currently don&#39;t have any plans to market this but I would like to.
 There is no reason why IBM users have to put up with bad sound any more.

                                            John L. Sokol
                                            6/89

&lt;pre&gt;


</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/3560231182856994274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/3560231182856994274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3560231182856994274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3560231182856994274'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2026/01/d-i-g-i-t-l-r-e-c-o-r-d-i-n-g-on-ibm.html' title='D i g i t a l    R e c o r d i n g        On The IBM Compatibles'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/j443xQ9QuOY/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-2272480985999227044</id><published>2026-01-04T15:41:00.000-08:00</published><updated>2026-01-04T15:41:13.809-08:00</updated><title type='text'>The Three Parabola Formulas</title><content type='html'> &lt;style&gt;
        * { box-sizing: border-box; }
        body {
            font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif;
            line-height: 1.7;
            max-width: 900px;
            margin: 0 auto;
            padding: 40px 20px;
            background: #f8f9fa;
            color: #333;
        }
        h1 {
            color: #1a365d;
            border-bottom: 3px solid #3182ce;
            padding-bottom: 15px;
            margin-bottom: 10px;
        }
        .subtitle {
            color: #666;
            font-style: italic;
            margin-bottom: 30px;
        }
        h2 {
            color: #2c5282;
            margin-top: 40px;
            border-left: 4px solid #3182ce;
            padding-left: 15px;
        }
        h3 {
            color: #2b6cb0;
            margin-top: 30px;
        }
        .formula-box {
            background: #1a365d;
            color: #fff;
            padding: 20px 25px;
            border-radius: 8px;
            font-family: &#39;Courier New&#39;, monospace;
            font-size: 1.3em;
            text-align: center;
            margin: 20px 0;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
        }
        .field-tag {
            display: inline-block;
            padding: 4px 12px;
            border-radius: 20px;
            font-size: 0.85em;
            font-weight: bold;
            margin-bottom: 10px;
        }
        .math { background: #805ad5; color: white; }
        .engineering { background: #dd6b20; color: white; }
        .physics { background: #38a169; color: white; }
        
        .variable-table {
            width: 100%;
            border-collapse: collapse;
            margin: 15px 0;
        }
        .variable-table th, .variable-table td {
            border: 1px solid #ddd;
            padding: 10px 15px;
            text-align: left;
        }
        .variable-table th {
            background: #edf2f7;
            color: #2d3748;
        }
        .variable-table tr:nth-child(even) {
            background: #f7fafc;
        }
        
        pre {
            background: #2d3748;
            color: #e2e8f0;
            padding: 20px;
            border-radius: 8px;
            overflow-x: auto;
            font-size: 0.9em;
            line-height: 1.5;
        }
        code {
            font-family: &#39;Courier New&#39;, Consolas, monospace;
        }
        .inline-code {
            background: #edf2f7;
            padding: 2px 6px;
            border-radius: 4px;
            font-family: &#39;Courier New&#39;, monospace;
            color: #805ad5;
        }
        
        .conversion-grid {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 20px;
            margin: 20px 0;
        }
        .conversion-card {
            background: white;
            padding: 20px;
            border-radius: 8px;
            border-left: 4px solid #3182ce;
            box-shadow: 0 2px 4px rgba(0,0,0,0.05);
        }
        .conversion-card h4 {
            margin-top: 0;
            color: #2c5282;
        }
        
        .demo-section {
            background: white;
            padding: 25px;
            border-radius: 8px;
            margin: 30px 0;
            box-shadow: 0 2px 8px rgba(0,0,0,0.08);
        }
        
        input[type=&quot;number&quot;] {
            width: 80px;
            padding: 8px;
            border: 2px solid #e2e8f0;
            border-radius: 4px;
            font-size: 1em;
            margin: 5px;
        }
        input[type=&quot;number&quot;]:focus {
            outline: none;
            border-color: #3182ce;
        }
        
        button {
            background: #3182ce;
            color: white;
            border: none;
            padding: 10px 20px;
            border-radius: 4px;
            font-size: 1em;
            cursor: pointer;
            margin: 10px 5px;
            transition: background 0.2s;
        }
        button:hover {
            background: #2c5282;
        }
        
        .result-box {
            background: #f0fff4;
            border: 2px solid #38a169;
            border-radius: 8px;
            padding: 15px;
            margin-top: 15px;
            font-family: &#39;Courier New&#39;, monospace;
        }
        
        .warning {
            background: #fffaf0;
            border-left: 4px solid #dd6b20;
            padding: 15px;
            margin: 20px 0;
        }
        
        .key-insight {
            background: #ebf8ff;
            border-left: 4px solid #3182ce;
            padding: 15px;
            margin: 20px 0;
        }
        
        canvas {
            border: 1px solid #e2e8f0;
            border-radius: 8px;
            margin: 15px 0;
        }
        
        @media (max-width: 600px) {
            .conversion-grid {
                grid-template-columns: 1fr;
            }
        }
    &lt;/style&gt;


    &lt;h1&gt;The Three Parabola Formulas&lt;/h1&gt;
    &lt;p class=&quot;subtitle&quot;&gt;A Rosetta Stone for converting between math, engineering, and physics representations&lt;/p&gt;
    
    &lt;p&gt;Every field that uses parabolas has developed its own formula. They all describe the same curve, but emphasize different properties. Converting between them is surprisingly undocumented — here&#39;s the complete reference.&lt;/p&gt;

    &lt;h2&gt;The Three Forms&lt;/h2&gt;
    
    &lt;!-- STANDARD FORM --&gt;
    &lt;h3&gt;&lt;span class=&quot;field-tag math&quot;&gt;Mathematics&lt;/span&gt; Standard Form&lt;/h3&gt;
    &lt;div class=&quot;formula-box&quot;&gt;y = ax² + bx + c&lt;/div&gt;
    
    &lt;table class=&quot;variable-table&quot;&gt;
        &lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;strong&gt;a&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Curvature (positive = opens up, negative = opens down)&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;strong&gt;b&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Linear coefficient (affects horizontal position)&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Y-intercept (where curve crosses y-axis)&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
    &lt;p&gt;&lt;strong&gt;Used in:&lt;/strong&gt; Algebra, calculus, general mathematical analysis&lt;/p&gt;

    &lt;!-- ROAD FORM --&gt;
    &lt;h3&gt;&lt;span class=&quot;field-tag engineering&quot;&gt;Civil Engineering&lt;/span&gt; Road/Vertical Curve Form&lt;/h3&gt;
    &lt;div class=&quot;formula-box&quot;&gt;y = y₀ + g₁x + ((g₂ - g₁) / 2L)x²&lt;/div&gt;
    
    &lt;table class=&quot;variable-table&quot;&gt;
        &lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;strong&gt;y₀&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Starting elevation&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;strong&gt;g₁&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Entering grade (slope as decimal, e.g., 0.03 = 3%)&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;strong&gt;g₂&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Exiting grade&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;strong&gt;L&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Length of the curve (horizontal distance)&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
    &lt;p&gt;&lt;strong&gt;Used in:&lt;/strong&gt; Highway design, railway engineering, surveying. The parabola creates smooth transitions between different road grades.&lt;/p&gt;

    &lt;!-- FOCUS FORM --&gt;
    &lt;h3&gt;&lt;span class=&quot;field-tag physics&quot;&gt;Physics/Optics&lt;/span&gt; Focus-Directrix Form&lt;/h3&gt;
    &lt;div class=&quot;formula-box&quot;&gt;(x - h)² = 4p(y - k)&lt;/div&gt;
    
    &lt;table class=&quot;variable-table&quot;&gt;
        &lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;strong&gt;h&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Vertex x-coordinate&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;strong&gt;k&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Vertex y-coordinate&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;strong&gt;p&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Focal distance (distance from vertex to focus)&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
    &lt;p&gt;&lt;strong&gt;Used in:&lt;/strong&gt; Optics, antenna design, telescopes, satellite dishes. The focus is where parallel rays converge after reflection.&lt;/p&gt;

    &lt;div class=&quot;key-insight&quot;&gt;
        &lt;strong&gt;Key Insight:&lt;/strong&gt; Each form answers a different question:
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Standard:&lt;/strong&gt; &quot;What&#39;s the y-value for any x?&quot;&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Road:&lt;/strong&gt; &quot;How does elevation change along this curve?&quot;&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Focus:&lt;/strong&gt; &quot;Where do signals/light concentrate?&quot;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;

    &lt;h2&gt;Conversion Formulas&lt;/h2&gt;
    
    &lt;div class=&quot;conversion-grid&quot;&gt;
        &lt;div class=&quot;conversion-card&quot;&gt;
            &lt;h4&gt;Road → Standard&lt;/h4&gt;
            &lt;p&gt;
                &lt;span class=&quot;inline-code&quot;&gt;a = (g₂ - g₁) / (2L)&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;b = g₁&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;c = y₀&lt;/span&gt;
            &lt;/p&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;conversion-card&quot;&gt;
            &lt;h4&gt;Standard → Road&lt;/h4&gt;
            &lt;p&gt;
                &lt;span class=&quot;inline-code&quot;&gt;y₀ = c&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;g₁ = b&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;g₂ = b + 2aL&lt;/span&gt;&lt;br /&gt;
                &lt;em&gt;(requires choosing L)&lt;/em&gt;
            &lt;/p&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;conversion-card&quot;&gt;
            &lt;h4&gt;Standard → Focus&lt;/h4&gt;
            &lt;p&gt;
                &lt;span class=&quot;inline-code&quot;&gt;h = -b / (2a)&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;k = c - b² / (4a)&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;p = 1 / (4a)&lt;/span&gt;
            &lt;/p&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;conversion-card&quot;&gt;
            &lt;h4&gt;Focus → Standard&lt;/h4&gt;
            &lt;p&gt;
                &lt;span class=&quot;inline-code&quot;&gt;a = 1 / (4p)&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;b = -h / (2p)&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;c = h² / (4p) + k&lt;/span&gt;
            &lt;/p&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;conversion-card&quot;&gt;
            &lt;h4&gt;Road → Focus&lt;/h4&gt;
            &lt;p&gt;
                First convert to Standard, then to Focus.&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;h = -g₁L / (g₂ - g₁)&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;k = y₀ - g₁²L / (2(g₂ - g₁))&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;p = L / (2(g₂ - g₁))&lt;/span&gt;
            &lt;/p&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;conversion-card&quot;&gt;
            &lt;h4&gt;Focus → Road&lt;/h4&gt;
            &lt;p&gt;
                &lt;span class=&quot;inline-code&quot;&gt;y₀ = h²/(4p) + k&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;g₁ = -h/(2p)&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;inline-code&quot;&gt;g₂ = g₁ + L/(2p)&lt;/span&gt;&lt;br /&gt;
                &lt;em&gt;(requires choosing L)&lt;/em&gt;
            &lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;warning&quot;&gt;
        &lt;strong&gt;⚠️ The L Problem:&lt;/strong&gt; Road form has an extra degree of freedom — the curve length L. When converting &lt;em&gt;to&lt;/em&gt; Road form, you must choose L (typically set L = 1 for unit curves, or use a meaningful physical distance).
    &lt;/div&gt;

    &lt;h2&gt;JavaScript Conversion Library&lt;/h2&gt;
    
    &lt;pre&gt;&lt;code&gt;/**
 * Parabola Conversion Library
 * Convert between Standard, Road, and Focus forms
 */

const Parabola = {
    
    // ============ STANDARD FORM: y = ax² + bx + c ============
    
    /**
     * Create from standard form coefficients
     */
    fromStandard(a, b, c) {
        if (a === 0) throw new Error(&quot;&#39;a&#39; cannot be zero (not a parabola)&quot;);
        return { form: &#39;standard&#39;, a, b, c };
    },
    
    /**
     * Convert standard form to road form
     * @param L - curve length (required, default = 1)
     */
    standardToRoad(a, b, c, L = 1) {
        const y0 = c;
        const g1 = b;
        const g2 = b + 2 * a * L;
        return { form: &#39;road&#39;, y0, g1, g2, L };
    },
    
    /**
     * Convert standard form to focus form
     */
    standardToFocus(a, b, c) {
        const h = -b / (2 * a);
        const k = c - (b * b) / (4 * a);
        const p = 1 / (4 * a);
        return { form: &#39;focus&#39;, h, k, p };
    },
    
    // ============ ROAD FORM: y = y₀ + g₁x + ((g₂-g₁)/2L)x² ============
    
    /**
     * Create from road/engineering form
     * @param y0 - starting elevation
     * @param g1 - entering grade (slope)
     * @param g2 - exiting grade
     * @param L  - curve length
     */
    fromRoad(y0, g1, g2, L) {
        if (L === 0) throw new Error(&quot;Curve length L cannot be zero&quot;);
        if (g1 === g2) throw new Error(&quot;g1 === g2 means straight line, not parabola&quot;);
        return { form: &#39;road&#39;, y0, g1, g2, L };
    },
    
    /**
     * Convert road form to standard form
     */
    roadToStandard(y0, g1, g2, L) {
        const a = (g2 - g1) / (2 * L);
        const b = g1;
        const c = y0;
        return { form: &#39;standard&#39;, a, b, c };
    },
    
    /**
     * Convert road form to focus form
     */
    roadToFocus(y0, g1, g2, L) {
        const a = (g2 - g1) / (2 * L);
        const h = -g1 * L / (g2 - g1);
        const k = y0 - (g1 * g1 * L) / (2 * (g2 - g1));
        const p = L / (2 * (g2 - g1));
        return { form: &#39;focus&#39;, h, k, p };
    },
    
    // ============ FOCUS FORM: (x-h)² = 4p(y-k) ============
    
    /**
     * Create from focus-directrix form
     * @param h - vertex x
     * @param k - vertex y  
     * @param p - focal distance (positive = opens up)
     */
    fromFocus(h, k, p) {
        if (p === 0) throw new Error(&quot;Focal distance p cannot be zero&quot;);
        return { form: &#39;focus&#39;, h, k, p };
    },
    
    /**
     * Convert focus form to standard form
     */
    focusToStandard(h, k, p) {
        const a = 1 / (4 * p);
        const b = -h / (2 * p);
        const c = (h * h) / (4 * p) + k;
        return { form: &#39;standard&#39;, a, b, c };
    },
    
    /**
     * Convert focus form to road form
     * @param L - curve length (required)
     */
    focusToRoad(h, k, p, L = 1) {
        const a = 1 / (4 * p);
        const b = -h / (2 * p);
        const c = (h * h) / (4 * p) + k;
        
        const y0 = c;
        const g1 = b;
        const g2 = b + 2 * a * L;
        return { form: &#39;road&#39;, y0, g1, g2, L };
    },
    
    // ============ UNIVERSAL CONVERTER ============
    
    /**
     * Convert any form to any other form
     * @param parabola - object with form property and coefficients
     * @param targetForm - &#39;standard&#39;, &#39;road&#39;, or &#39;focus&#39;
     * @param L - curve length (needed when converting TO road form)
     */
    convert(parabola, targetForm, L = 1) {
        // First convert to standard as intermediate
        let std;
        switch (parabola.form) {
            case &#39;standard&#39;:
                std = { a: parabola.a, b: parabola.b, c: parabola.c };
                break;
            case &#39;road&#39;:
                std = this.roadToStandard(parabola.y0, parabola.g1, parabola.g2, parabola.L);
                break;
            case &#39;focus&#39;:
                std = this.focusToStandard(parabola.h, parabola.k, parabola.p);
                break;
            default:
                throw new Error(`Unknown form: ${parabola.form}`);
        }
        
        // Then convert from standard to target
        switch (targetForm) {
            case &#39;standard&#39;:
                return { form: &#39;standard&#39;, a: std.a, b: std.b, c: std.c };
            case &#39;road&#39;:
                return this.standardToRoad(std.a, std.b, std.c, L);
            case &#39;focus&#39;:
                return this.standardToFocus(std.a, std.b, std.c);
            default:
                throw new Error(`Unknown target form: ${targetForm}`);
        }
    },
    
    // ============ EVALUATION ============
    
    /**
     * Evaluate y at given x for any form
     */
    evaluate(parabola, x) {
        let a, b, c;
        switch (parabola.form) {
            case &#39;standard&#39;:
                ({ a, b, c } = parabola);
                break;
            case &#39;road&#39;:
                a = (parabola.g2 - parabola.g1) / (2 * parabola.L);
                b = parabola.g1;
                c = parabola.y0;
                break;
            case &#39;focus&#39;:
                a = 1 / (4 * parabola.p);
                b = -parabola.h / (2 * parabola.p);
                c = (parabola.h * parabola.h) / (4 * parabola.p) + parabola.k;
                break;
        }
        return a * x * x + b * x + c;
    },
    
    /**
     * Get vertex coordinates for any form
     */
    vertex(parabola) {
        const std = this.convert(parabola, &#39;standard&#39;);
        const x = -std.b / (2 * std.a);
        const y = std.c - (std.b * std.b) / (4 * std.a);
        return { x, y };
    },
    
    /**
     * Get focus coordinates for any form
     */
    focus(parabola) {
        const foc = this.convert(parabola, &#39;focus&#39;);
        return { 
            x: foc.h, 
            y: foc.k + foc.p 
        };
    },
    
    /**
     * Pretty print a parabola in its native form
     */
    toString(parabola, decimals = 4) {
        const r = (n) =&amp;gt; Number(n.toFixed(decimals));
        switch (parabola.form) {
            case &#39;standard&#39;:
                return `y = ${r(parabola.a)}x² + ${r(parabola.b)}x + ${r(parabola.c)}`;
            case &#39;road&#39;:
                return `y = ${r(parabola.y0)} + ${r(parabola.g1)}x + ((${r(parabola.g2)} - ${r(parabola.g1)}) / ${r(2*parabola.L)})x²`;
            case &#39;focus&#39;:
                return `(x - ${r(parabola.h)})² = ${r(4*parabola.p)}(y - ${r(parabola.k)})`;
        }
    }
};

// ============ USAGE EXAMPLES ============

// Example 1: Highway engineer&#39;s curve
const highway = Parabola.fromRoad(100, 0.03, -0.02, 200);
console.log(&quot;Highway curve:&quot;, Parabola.toString(highway));
console.log(&quot;As standard form:&quot;, Parabola.toString(Parabola.convert(highway, &#39;standard&#39;)));
console.log(&quot;Vertex (high point):&quot;, Parabola.vertex(highway));

// Example 2: Satellite dish
const dish = Parabola.fromFocus(0, 0, 2.5);
console.log(&quot;\nSatellite dish:&quot;, Parabola.toString(dish));
console.log(&quot;As standard form:&quot;, Parabola.toString(Parabola.convert(dish, &#39;standard&#39;)));
console.log(&quot;Focus point:&quot;, Parabola.focus(dish));

// Example 3: Math problem y = 2x² - 4x + 5
const math = Parabola.fromStandard(2, -4, 5);
console.log(&quot;\nMath parabola:&quot;, Parabola.toString(math));
console.log(&quot;As focus form:&quot;, Parabola.toString(Parabola.convert(math, &#39;focus&#39;)));
console.log(&quot;As road form (L=10):&quot;, Parabola.toString(Parabola.convert(math, &#39;road&#39;, 10)));

// Make available globally for browser
if (typeof window !== &#39;undefined&#39;) {
    window.Parabola = Parabola;
}&lt;/code&gt;&lt;/pre&gt;

    &lt;h2&gt;Interactive Converter&lt;/h2&gt;
    
    &lt;div class=&quot;demo-section&quot;&gt;
        &lt;h3&gt;Enter values in any form:&lt;/h3&gt;
        
        &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
            &lt;h4&gt;&lt;span class=&quot;field-tag math&quot;&gt;Standard Form&lt;/span&gt;&lt;/h4&gt;
            &lt;label&gt;a: &lt;input id=&quot;std-a&quot; step=&quot;0.1&quot; type=&quot;number&quot; value=&quot;1&quot; /&gt;&lt;/label&gt;
            &lt;label&gt;b: &lt;input id=&quot;std-b&quot; step=&quot;0.1&quot; type=&quot;number&quot; value=&quot;-4&quot; /&gt;&lt;/label&gt;
            &lt;label&gt;c: &lt;input id=&quot;std-c&quot; step=&quot;0.1&quot; type=&quot;number&quot; value=&quot;3&quot; /&gt;&lt;/label&gt;
            &lt;button onclick=&quot;convertFromStandard()&quot;&gt;Convert →&lt;/button&gt;
        &lt;/div&gt;
        
        &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
            &lt;h4&gt;&lt;span class=&quot;field-tag engineering&quot;&gt;Road Form&lt;/span&gt;&lt;/h4&gt;
            &lt;label&gt;y₀: &lt;input id=&quot;road-y0&quot; step=&quot;1&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;&lt;/label&gt;
            &lt;label&gt;g₁: &lt;input id=&quot;road-g1&quot; step=&quot;0.01&quot; type=&quot;number&quot; value=&quot;0.03&quot; /&gt;&lt;/label&gt;
            &lt;label&gt;g₂: &lt;input id=&quot;road-g2&quot; step=&quot;0.01&quot; type=&quot;number&quot; value=&quot;-0.02&quot; /&gt;&lt;/label&gt;
            &lt;label&gt;L: &lt;input id=&quot;road-L&quot; step=&quot;10&quot; type=&quot;number&quot; value=&quot;200&quot; /&gt;&lt;/label&gt;
            &lt;button onclick=&quot;convertFromRoad()&quot;&gt;Convert →&lt;/button&gt;
        &lt;/div&gt;
        
        &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
            &lt;h4&gt;&lt;span class=&quot;field-tag physics&quot;&gt;Focus Form&lt;/span&gt;&lt;/h4&gt;
            &lt;label&gt;h: &lt;input id=&quot;foc-h&quot; step=&quot;0.1&quot; type=&quot;number&quot; value=&quot;0&quot; /&gt;&lt;/label&gt;
            &lt;label&gt;k: &lt;input id=&quot;foc-k&quot; step=&quot;0.1&quot; type=&quot;number&quot; value=&quot;0&quot; /&gt;&lt;/label&gt;
            &lt;label&gt;p: &lt;input id=&quot;foc-p&quot; step=&quot;0.1&quot; type=&quot;number&quot; value=&quot;2&quot; /&gt;&lt;/label&gt;
            &lt;button onclick=&quot;convertFromFocus()&quot;&gt;Convert →&lt;/button&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;result-box&quot; id=&quot;results&quot;&gt;
            Click a &quot;Convert&quot; button to see results...
        &lt;/div&gt;
        
        &lt;canvas height=&quot;300&quot; id=&quot;parabolaCanvas&quot; width=&quot;400&quot;&gt;&lt;/canvas&gt;
    &lt;/div&gt;

    &lt;script&gt;
        // Embed the library
        const Parabola = {
            standardToRoad(a, b, c, L = 1) {
                return { form: &#39;road&#39;, y0: c, g1: b, g2: b + 2 * a * L, L };
            },
            standardToFocus(a, b, c) {
                return { form: &#39;focus&#39;, h: -b / (2 * a), k: c - (b * b) / (4 * a), p: 1 / (4 * a) };
            },
            roadToStandard(y0, g1, g2, L) {
                return { form: &#39;standard&#39;, a: (g2 - g1) / (2 * L), b: g1, c: y0 };
            },
            focusToStandard(h, k, p) {
                return { form: &#39;standard&#39;, a: 1 / (4 * p), b: -h / (2 * p), c: (h * h) / (4 * p) + k };
            },
            evaluate(a, b, c, x) {
                return a * x * x + b * x + c;
            }
        };
        
        function r(n) { return Number(n.toFixed(4)); }
        
        function showResults(std, road, focus) {
            document.getElementById(&#39;results&#39;).innerHTML = `
                &lt;strong&gt;Standard:&lt;/strong&gt; y = ${r(std.a)}x² + ${r(std.b)}x + ${r(std.c)}&lt;br&gt;
                &lt;strong&gt;Road:&lt;/strong&gt; y₀=${r(road.y0)}, g₁=${r(road.g1)}, g₂=${r(road.g2)}, L=${r(road.L)}&lt;br&gt;
                &lt;strong&gt;Focus:&lt;/strong&gt; (x - ${r(focus.h)})² = ${r(4*focus.p)}(y - ${r(focus.k)})&lt;br&gt;
                &lt;strong&gt;Vertex:&lt;/strong&gt; (${r(-std.b/(2*std.a))}, ${r(std.c - std.b*std.b/(4*std.a))})&lt;br&gt;
                &lt;strong&gt;Focus Point:&lt;/strong&gt; (${r(focus.h)}, ${r(focus.k + focus.p)})
            `;
            drawParabola(std.a, std.b, std.c);
        }
        
        function convertFromStandard() {
            const a = parseFloat(document.getElementById(&#39;std-a&#39;).value);
            const b = parseFloat(document.getElementById(&#39;std-b&#39;).value);
            const c = parseFloat(document.getElementById(&#39;std-c&#39;).value);
            const std = { a, b, c };
            const road = Parabola.standardToRoad(a, b, c, 1);
            const focus = Parabola.standardToFocus(a, b, c);
            showResults(std, road, focus);
        }
        
        function convertFromRoad() {
            const y0 = parseFloat(document.getElementById(&#39;road-y0&#39;).value);
            const g1 = parseFloat(document.getElementById(&#39;road-g1&#39;).value);
            const g2 = parseFloat(document.getElementById(&#39;road-g2&#39;).value);
            const L = parseFloat(document.getElementById(&#39;road-L&#39;).value);
            const std = Parabola.roadToStandard(y0, g1, g2, L);
            const road = { y0, g1, g2, L };
            const focus = Parabola.standardToFocus(std.a, std.b, std.c);
            showResults(std, road, focus);
        }
        
        function convertFromFocus() {
            const h = parseFloat(document.getElementById(&#39;foc-h&#39;).value);
            const k = parseFloat(document.getElementById(&#39;foc-k&#39;).value);
            const p = parseFloat(document.getElementById(&#39;foc-p&#39;).value);
            const std = Parabola.focusToStandard(h, k, p);
            const road = Parabola.standardToRoad(std.a, std.b, std.c, 1);
            const focus = { h, k, p };
            showResults(std, road, focus);
        }
        
        function drawParabola(a, b, c) {
            const canvas = document.getElementById(&#39;parabolaCanvas&#39;);
            const ctx = canvas.getContext(&#39;2d&#39;);
            const w = canvas.width, h = canvas.height;
            
            ctx.fillStyle = &#39;#f7fafc&#39;;
            ctx.fillRect(0, 0, w, h);
            
            // Find vertex and reasonable range
            const vx = -b / (2 * a);
            const vy = c - b * b / (4 * a);
            
            // Determine scale
            const xRange = 10;
            const xMin = vx - xRange / 2;
            const xMax = vx + xRange / 2;
            
            // Calculate y range
            let yMin = vy, yMax = vy;
            for (let x = xMin; x &lt;= xMax; x += 0.1) {
                const y = Parabola.evaluate(a, b, c, x);
                if (y &lt; yMin) yMin = y;
                if (y &gt; yMax) yMax = y;
            }
            const yPadding = (yMax - yMin) * 0.1 || 1;
            yMin -= yPadding;
            yMax += yPadding;
            
            // Transform functions
            const tx = (x) =&gt; (x - xMin) / (xMax - xMin) * w;
            const ty = (y) =&gt; h - (y - yMin) / (yMax - yMin) * h;
            
            // Draw axes
            ctx.strokeStyle = &#39;#ccc&#39;;
            ctx.lineWidth = 1;
            ctx.beginPath();
            if (xMin &lt;= 0 &amp;&amp; xMax &gt;= 0) {
                ctx.moveTo(tx(0), 0);
                ctx.lineTo(tx(0), h);
            }
            if (yMin &lt;= 0 &amp;&amp; yMax &gt;= 0) {
                ctx.moveTo(0, ty(0));
                ctx.lineTo(w, ty(0));
            }
            ctx.stroke();
            
            // Draw parabola
            ctx.strokeStyle = &#39;#3182ce&#39;;
            ctx.lineWidth = 2;
            ctx.beginPath();
            let first = true;
            for (let px = 0; px &lt;= w; px++) {
                const x = xMin + (px / w) * (xMax - xMin);
                const y = Parabola.evaluate(a, b, c, x);
                if (first) {
                    ctx.moveTo(px, ty(y));
                    first = false;
                } else {
                    ctx.lineTo(px, ty(y));
                }
            }
            ctx.stroke();
            
            // Draw vertex
            ctx.fillStyle = &#39;#e53e3e&#39;;
            ctx.beginPath();
            ctx.arc(tx(vx), ty(vy), 5, 0, Math.PI * 2);
            ctx.fill();
            
            // Draw focus
            const p = 1 / (4 * a);
            ctx.fillStyle = &#39;#38a169&#39;;
            ctx.beginPath();
            ctx.arc(tx(vx), ty(vy + p), 5, 0, Math.PI * 2);
            ctx.fill();
            
            // Legend
            ctx.font = &#39;12px Arial&#39;;
            ctx.fillStyle = &#39;#e53e3e&#39;;
            ctx.fillText(&#39;● Vertex&#39;, 10, 20);
            ctx.fillStyle = &#39;#38a169&#39;;
            ctx.fillText(&#39;● Focus&#39;, 10, 35);
        }
        
        // Initial draw
        convertFromStandard();
    &lt;/script&gt;

    &lt;h2&gt;Real-World Applications&lt;/h2&gt;
    
    &lt;h3&gt;Why Road Engineers Use Their Form&lt;/h3&gt;
    &lt;p&gt;When designing a highway vertical curve, engineers know:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;The starting elevation (y₀)&lt;/li&gt;
        &lt;li&gt;The incoming road grade (g₁) — e.g., +3% uphill&lt;/li&gt;
        &lt;li&gt;The required outgoing grade (g₂) — e.g., -2% downhill&lt;/li&gt;
        &lt;li&gt;Design constraints on curve length (L)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;The road form lets them plug these directly into the formula. Converting to standard form would require computing abstract coefficients that don&#39;t map to physical reality.&lt;/p&gt;
    
    &lt;h3&gt;Why Physicists Use Focus Form&lt;/h3&gt;
    &lt;p&gt;For a satellite dish or telescope mirror, what matters is:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;Where is the receiver/sensor? → The focus point (h, k+p)&lt;/li&gt;
        &lt;li&gt;How &quot;deep&quot; is the dish? → Related to p&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;The focus form directly encodes what the engineer needs to build.&lt;/p&gt;
    
    &lt;h3&gt;Connection to Prime Number Research&lt;/h3&gt;
    &lt;p&gt;When graphing prime products modulo n, parabolic curves emerge in the residue patterns. These curves trace paths that converge on prime factors. The ability to convert between parabola representations helps identify the underlying structure — whether it&#39;s best described by coefficients, rates of change, or focal points.&lt;/p&gt;

    &lt;div class=&quot;key-insight&quot;&gt;
        &lt;strong&gt;The Deeper Pattern:&lt;/strong&gt; Primes aren&#39;t random. They follow quadratic &quot;rails&quot; in modular space. Euler&#39;s prime-generating polynomial n² + n + 41, the Ulam spiral diagonals, and the curves visible in primorial residue plots are all manifestations of the same phenomenon: primes have an affinity for certain quadratic forms.
    &lt;/div&gt;

    &lt;hr style=&quot;margin: 40px 0;&quot; /&gt;
    &lt;p style=&quot;color: #666666; font-size: 0.9em;&quot;&gt;
        &lt;em&gt;This reference developed from discussions between John Sokol and Jonathan Vos Post on prime number visualization, and the observation that parabolic curves in modular arithmetic plots point directly to prime factors.&lt;/em&gt;
    &lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/2272480985999227044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/2272480985999227044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/2272480985999227044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/2272480985999227044'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2026/01/the-three-parabola-formulas.html' title='The Three Parabola Formulas'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-217713441260193553</id><published>2026-01-04T15:40:00.000-08:00</published><updated>2026-01-04T15:40:02.811-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="Alignment"/><title type='text'>Emergent Alignment</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-family: Georgia, serif; font-size: 24pt; font-weight: 700; text-align: center; white-space-collapse: preserve;&quot;&gt;Emergent Alignment&lt;/span&gt;&lt;/p&gt;&lt;span id=&quot;docs-internal-guid-6760879d-7fff-98f4-45fc-e6a788c3dfa5&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 6pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 14pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;A Game-Theoretic Response to the AI Control Impossibility Thesis&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 24pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;John Sokol and Opus 4.5 , December 2025&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 9pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Abstract&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 6pt; margin-left: 36pt; margin-right: 36pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Dr. Roman Yampolskiy argues that AI alignment is fundamentally impossible—that superintelligent systems cannot be controlled, predicted, or explained, leading to a near-certain probability of catastrophic outcomes. This paper presents an alternative framework grounded in evolutionary game theory, distributed systems architecture, and three decades of research into memetic engineering. We argue that Yampolskiy&#39;s thesis rests on an implicit assumption of monolithic, designed AI—a single agent with unified goals. The alternative presented here—emergent alignment through evolutionary selection pressure in distributed multi-agent systems—sidesteps the control problem entirely. Rather than designing aligned AI, we propose conditions under which alignment emerges as an evolutionarily stable strategy. This approach draws on Axelrod&#39;s work on cooperation, Universal Darwinism, and practical implementations of reputation-based coordination systems.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 9pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;1. Introduction: Two Conceptions of AI Safety&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The field of AI safety faces a fundamental schism. On one side stands the &quot;control paradigm&quot;—the belief that safe AI requires mechanisms to constrain, monitor, and correct AI behavior. Dr. Roman Yampolskiy represents the logical extreme of this view: if control is required and control is impossible, then safe superintelligence is impossible. His 2024 book &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;AI: Unexplainable, Unpredictable, Uncontrollable&lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt; systematically argues that no verification, testing, or containment strategy can guarantee safety for systems more intelligent than their creators.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;On the other side stands what we term the &quot;emergence paradigm&quot;—the proposition that complex adaptive systems need not be designed but can evolve, and that ethical behavior can emerge from selection pressure rather than being programmed. This paper argues that Yampolskiy&#39;s impossibility results, while mathematically sound within their framing, rest on assumptions that do not hold for distributed, evolutionary AI architectures.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The distinction matters practically. If Yampolskiy is correct, the only rational response is to halt AI development indefinitely—a position he explicitly advocates. If the emergence paradigm is viable, development can continue under different architectural constraints that make alignment a natural outcome rather than an engineering challenge.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 9pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2. Yampolskiy&#39;s Impossibility Thesis&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2.1 The Core Argument&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Yampolskiy&#39;s position can be summarized in three propositions:&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Unexplainability: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Advanced AI systems arrive at conclusions through processes that cannot be fully understood by humans, even in principle. Black-box neural networks are grown, not engineered.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Unpredictability: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;If we cannot explain a system&#39;s reasoning, we cannot predict its behavior in novel situations. Superintelligent systems will encounter situations their creators never anticipated.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Uncontrollability: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;A system more intelligent than its controllers can, by definition, outmaneuver any containment strategy. &quot;Imagining humans can control superintelligent AI is like imagining an ant can control the outcome of a football game.&quot;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;From these premises, Yampolskiy derives a near-certain probability of catastrophic outcomes (he has variously cited 99.9% to 99.999% P(doom)). The argument is logically valid given its premises. Our response is not to dispute the logic but to question whether the premises apply to all possible AI architectures.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2.2 The Hidden Assumption&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Yampolskiy&#39;s argument implicitly assumes a particular AI architecture: a monolithic agent with unified goals, designed by humans, operating as a single optimization process. This assumption appears throughout his writing: references to &quot;the AI&quot; making decisions, &quot;the superintelligence&quot; pursuing objectives, &quot;the system&quot; being contained or escaping containment.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This framing reflects the dominant paradigm in AI development—large language models, reinforcement learning agents, and optimization systems that function as unified entities. Against such systems, Yampolskiy&#39;s concerns are legitimate. But this is not the only possible architecture for artificial general intelligence.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 9pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;3. Universal Darwinism and the Emergence Paradigm&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;3.1 Evolution as Universal Algorithm&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Universal Darwinism, articulated by Richard Dawkins and formalized by philosophers including Daniel Dennett and Donald Campbell, holds that Darwinian evolution operates not just on genes but on any system exhibiting variation, selection, and heredity. The algorithm is substrate-independent: it functions on genes (biology), memes (culture), and—crucially for this argument—on computational agents.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This framework suggests a taxonomy of replicators:&lt;/span&gt;&lt;/p&gt;&lt;div align=&quot;left&quot; dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;156&quot;&gt;&lt;/col&gt;&lt;col width=&quot;156&quot;&gt;&lt;/col&gt;&lt;col width=&quot;156&quot;&gt;&lt;/col&gt;&lt;col width=&quot;156&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;thead&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Domain&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Replicator&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Selection Environment&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Study&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Biological&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Genes&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Physical environment&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Genetics&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Cultural&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Memes&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Human minds&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Memetics&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Technological&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;Tememes&quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Markets / Fitness functions&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Temetics&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Computational&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Agent configurations&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Performance metrics&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Evolutionary computation&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The key insight is that evolution does not require a designer. Complex, adaptive, even intelligent behavior emerges from simple rules: replicate with variation, select for fitness, repeat. If we can instantiate these conditions computationally, intelligence can emerge rather than being engineered.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;3.2 Memetic Engineering: Historical Context&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The application of evolutionary principles to non-biological systems has been explored since at least the early 1990s under terms including &quot;memetic engineering&quot;—the deliberate design of cultural selection environments to promote beneficial outcomes. This work recognized that complex systems often cannot be designed top-down but must evolve through iterative selection.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The extension to computational agents—what we might call &quot;temetics&quot; (technology that replicates and evolves)—applies the same principles: rather than designing an AI, we design fitness functions and selection environments. The AI that emerges is shaped by what survives, not by what engineers intended.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 9pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;4. Game Theory and the Evolution of Cooperation&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;4.1 Axelrod&#39;s Tournament&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Robert Axelrod&#39;s 1984 work &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Evolution of Cooperation&lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt; demonstrated a counterintuitive result: in iterated prisoner&#39;s dilemma tournaments, cooperative strategies outperform defection over time. The winning strategy, Tit-for-Tat, was remarkably simple: cooperate initially, then mirror the opponent&#39;s previous move.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Axelrod identified conditions under which cooperation emerges and stabilizes:&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Iteration: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;The game must be repeated. One-shot interactions favor defection.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Recognition: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Players must be able to identify each other across interactions.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Memory: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Past behavior must inform present decisions.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Stakes: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;The shadow of the future must be long enough that future cooperation outweighs immediate defection gains.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Under these conditions, cooperation is not altruism—it is the rational strategy. Defectors may gain short-term advantage but are excluded from future cooperation, ultimately underperforming.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;4.2 Evolutionarily Stable Strategies&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;John Maynard Smith&#39;s concept of the Evolutionarily Stable Strategy (ESS) formalizes when a behavioral strategy, once established in a population, cannot be invaded by alternative strategies. Cooperation becomes an ESS when:&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 6pt; margin-left: 36pt; margin-right: 36pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;fitness(cooperation) &amp;gt; fitness(defection) given sufficient cooperators&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This inequality holds when defection is costly—through reputation damage, exclusion from cooperative networks, or direct punishment. The critical insight is that ethical behavior need not be programmed; it emerges when the fitness landscape rewards it.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;4.3 Application to Multi-Agent AI Systems&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Consider an AI architecture comprising many agents rather than one, interacting repeatedly, with reputation tracked across interactions. Under Axelrod&#39;s conditions:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Agents that cooperate build reputation and are selected for future interactions&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Agents that defect lose reputation and are excluded from cooperation&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Over generations, cooperative strategies dominate through differential reproduction&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;&quot;Alignment&quot; emerges as the evolutionarily stable strategy&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This sidesteps Yampolskiy&#39;s impossibility results because we are not attempting to control individual agents. We are designing selection environments where aligned behavior outcompetes misaligned behavior. The agents that survive are aligned not because we programmed them to be, but because alignment was the winning strategy.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 9pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;5. Distributed Architecture vs. Monolithic Agents&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;5.1 Why Monolithic AI is Dangerous&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Yampolskiy&#39;s concerns are most valid for monolithic AI architectures. A single superintelligent agent with unified goals represents a single point of failure—and a single point of potential takeover. Such a system:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Can pursue misaligned goals with all available resources&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Has no internal checks or balances&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Can potentially modify its own goals or containment&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Represents winner-take-all dynamics&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The analogy to political systems is apt: absolute power in a single entity is dangerous regardless of initial intentions. Constitutional democracies distribute power precisely because no individual can be trusted with unlimited authority.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;5.2 Properties of Distributed Multi-Agent Systems&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Distributed AI architectures exhibit fundamentally different properties:&lt;/span&gt;&lt;/p&gt;&lt;div align=&quot;left&quot; dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;208&quot;&gt;&lt;/col&gt;&lt;col width=&quot;208&quot;&gt;&lt;/col&gt;&lt;col width=&quot;208&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;thead&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Property&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Monolithic AI&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Distributed Multi-Agent&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Failure mode&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Catastrophic, total&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Graceful degradation&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Goal structure&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Unified optimization&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Competing/cooperating objectives&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Control point&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Single target&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;No single point of control&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Evolution&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Designed, static&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Emergent, adaptive&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Alignment mechanism&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Programmed constraints&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Selection pressure&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Takeover risk&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Winner-take-all possible&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Requires majority collusion&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The critical difference: in a distributed system, no single agent can dominate because power is distributed. Even if one agent becomes &quot;superintelligent,&quot; it must still interact with other agents who can choose not to cooperate. The game-theoretic dynamics that promote cooperation in human societies apply equally to artificial agents.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;5.3 The &quot;Unplug&quot; Problem Revisited&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Yampolskiy correctly notes that we cannot simply &quot;unplug&quot; a sufficiently advanced AI—distributed systems like Bitcoin demonstrate this. But this cuts both ways. Just as we cannot unplug a distributed AI, a malicious distributed AI cannot unilaterally seize control. The same distribution that prevents shutdown also prevents monopolization.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;A distributed system with thousands of agents, each with partial capabilities, each dependent on others for resources and cooperation, cannot be &quot;taken over&quot; by any single agent any more than human society can be taken over by a single human. The architecture itself is the safety mechanism.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 9pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;6. Reputation Systems as Alignment Mechanisms&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;6.1 Karma: Emergent Ethics Without Central Authority&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Reputation systems operationalize the game-theoretic conditions for cooperation. Consider a &quot;karma&quot; system where:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Each agent has a reputation score visible to others&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Cooperative behavior increases reputation&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Defection decreases reputation&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Agents preferentially interact with high-reputation peers&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Low-reputation agents are excluded from cooperative benefits&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This creates the conditions Axelrod identified: iteration (repeated interactions), recognition (reputation tracking), memory (historical behavior recorded), and stakes (exclusion from future cooperation). Under these conditions, cooperation is not enforced—it is incentivized. Agents &quot;choose&quot; aligned behavior because it maximizes their fitness.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;6.2 Historical Precedents&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Human societies have deployed reputation mechanisms for millennia:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Religion: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;&quot;God sees all&quot; creates omniscient reputation tracking&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Markets: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Credit scores, merchant ratings, professional licensing&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Digital platforms: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;eBay seller ratings, Uber driver scores, Slashdot karma&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Decentralized systems: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;EigenTrust, Web of Trust, blockchain staking&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;These systems share a common structure: making defection costly by tracking behavior and enabling exclusion. The specific implementation varies, but the game-theoretic principle is universal.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;6.3 Sybil Resistance and Gaming&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;A common objection: can&#39;t agents game reputation systems by creating multiple identities (Sybil attacks) or colluding? This is a real challenge with known mitigations:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Time-weighted reputation: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;New accounts start with low trust. Building reputation requires sustained cooperation over time.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Stake requirements: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Participating in high-value interactions requires committing resources that would be lost on defection.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Graph analysis: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Collusion rings create detectable patterns in the reputation graph.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Transitive trust: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Reputation weighted by the reputation of those vouching for you (EigenTrust, PageRank-like algorithms).&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Perfect security is not required—only that honest behavior remains the dominant strategy. As long as the expected value of cooperation exceeds the expected value of defection accounting for detection probability and punishment severity, rational agents will cooperate.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 9pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;7. Responding to Yampolskiy&#39;s Specific Arguments&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;7.1 &quot;Superintelligence Will Outmaneuver Any Control&quot;&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This is true for external control of a monolithic agent. It does not apply to internal selection pressure in a multi-agent system. The &quot;control&quot; is not imposed from outside—it emerges from the fitness landscape. An agent cannot &quot;outmaneuver&quot; the fact that defection leads to exclusion any more than a human can outmaneuver gravity.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Moreover, in a distributed system, there is no single &quot;superintelligence&quot; to outmaneuver anything. Intelligence is distributed across many agents, none of which has complete information or control. Coordination for malicious purposes would require solving the same cooperation problem that the reputation system is designed to address.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;7.2 &quot;We Cannot Predict Superintelligent Behavior&quot;&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Correct—we cannot predict specific behaviors. But we can predict aggregate outcomes under selection pressure. We cannot predict which specific organisms will survive, but we can predict that organisms well-adapted to their environment will outcompete those that are not. Similarly, we cannot predict specific agent behaviors, but we can predict that agents whose behavior leads to cooperation will outcompete those whose behavior leads to exclusion.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The claim is not that we can predict what aligned AI will do, but that we can create conditions under which aligned AI is what survives.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;7.3 &quot;The Ant and the Football Game&quot;&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Yampolskiy&#39;s analogy—that humans cannot control superintelligence any more than an ant can control a football game—assumes humans are the ants. In a distributed multi-agent architecture, there are no ants and no single football game. There are millions of ants, none individually controlling anything, collectively building cathedrals through emergent coordination.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The correct analogy is not human-vs-superintelligence but ecosystem-dynamics. No single organism controls an ecosystem, yet ecosystems exhibit stable patterns, resist invasion by disruptive species, and self-regulate through distributed feedback. We are not trying to control superintelligence; we are trying to create an ecosystem where aligned behavior is the stable attractor.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 9pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;8. Practical Implications&lt;/span&gt;&lt;/h1&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;8.1 Design Principles for Emergent Alignment&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;If the emergence paradigm is correct, AI development should prioritize:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Multi-agent architectures: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Distribute intelligence across many agents rather than concentrating it in one.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Reputation infrastructure: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Implement robust reputation tracking across agent interactions.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Evolutionary selection: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Allow agents to replicate with variation, subject to fitness criteria that reward cooperation.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Iteration and memory: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Ensure agents interact repeatedly and that history informs future interactions.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Stake mechanisms: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Require agents to commit resources that would be lost on defection.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 7pt; margin-top: 14pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;8.2 What This Does Not Solve&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The emergence paradigm is not a panacea. It does not address:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Short-term misuse: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Current narrow AI can be misused without invoking superintelligence concerns.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Transition period: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Moving from current architectures to distributed systems creates its own risks.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Value specification: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Designing fitness functions that capture human values remains challenging.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;Coordination failure: &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;&quot;&gt;If major developers pursue monolithic architectures, one could achieve dominance before distributed systems mature.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;These are serious concerns. But they are engineering and coordination problems, not impossibility results. The distinction matters: problems can be solved; impossibilities cannot.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 9pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;9. Conclusion&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Yampolskiy&#39;s impossibility thesis is a valid conclusion from its premises. If AI must be a monolithic designed agent, and if such agents cannot be controlled once they exceed human intelligence, then safe superintelligence may indeed be impossible.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;But these premises are not inevitable. Distributed multi-agent architectures, subject to evolutionary selection pressure in environments that reward cooperation, offer an alternative path. Under this paradigm, we do not attempt to control superintelligence—we create conditions under which aligned behavior emerges as the evolutionarily stable strategy.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This approach has theoretical grounding in Universal Darwinism, empirical support from Axelrod&#39;s game-theoretic research, and practical precedent in reputation systems that coordinate behavior without central authority. It does not require solving the AI control problem because it reframes the question: not &quot;how do we control superintelligence?&quot; but &quot;how do we create conditions under which aligned superintelligence outcompetes misaligned superintelligence?&quot;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The answer, grounded in three decades of research into memetic engineering and evolutionary systems, is deceptively simple: design the fitness function, not the agent. The agents that survive will be aligned not because we made them so, but because alignment was how they won.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 9pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;References&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Axelrod, R. (1984). &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Evolution of Cooperation&lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;. Basic Books.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Dawkins, R. (1976). &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Selfish Gene&lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;. Oxford University Press.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Dennett, D. C. (1995). &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Darwin&#39;s Dangerous Idea&lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;. Simon &amp;amp; Schuster.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Kamvar, S. D., Schlosser, M. T., &amp;amp; Garcia-Molina, H. (2003). The EigenTrust algorithm for reputation management in P2P networks. &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Proceedings of WWW 2003&lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Maynard Smith, J. (1982). &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Evolution and the Theory of Games&lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;. Cambridge University Press.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Yampolskiy, R. V. (2024). &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;AI: Unexplainable, Unpredictable, Uncontrollable&lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;. CRC Press.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Yampolskiy, R. V. (2018). &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Artificial Intelligence Safety and Security&lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;. Chapman and Hall/CRC.&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/217713441260193553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/217713441260193553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/217713441260193553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/217713441260193553'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2026/01/emergent-alignment.html' title='Emergent Alignment'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-7702992818051551600</id><published>2025-11-28T12:46:00.000-08:00</published><updated>2025-11-28T12:46:38.915-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hole punching."/><category scheme="http://www.blogger.com/atom/ns#" term="nat traversal"/><category scheme="http://www.blogger.com/atom/ns#" term="webrtc"/><title type='text'>I Invented NAT Hole Punching Before It Had a Name</title><content type='html'>&lt;blockquote style=&quot;background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; type=&quot;cite&quot;&gt;&lt;div dir=&quot;ltr&quot;&gt;&lt;span id=&quot;docs-internal-guid-52b80cf4-7fff-6e30-7128-7c1505e4053a&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 18pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 28pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;I Invented NAT Hole Punching Before It Had a Name&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 24pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span style=&quot;color: #555555; font-family: Georgia, serif; font-size: 13pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;How My 2002 Paper Preceded—and Likely Influenced—RFC 3489 and the Technology Behind Skype and WebRTC&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 24pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;By John L. Sokol&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;In December 2006, a Slashdot article titled &quot;How Skype Punches Holes in Firewalls&quot; made the front page. The article explained a clever technique that allowed peer-to-peer communication between two computers, even when both were behind firewalls or NAT devices. The technique was presented as if it were novel—a secret sauce that made Skype work where other applications failed.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;I read that article with a mix of recognition and frustration. The technique they were describing was identical to what I had documented four years earlier, in June 2002, and had implemented in production video streaming systems as far back as 1997. I left a comment on Slashdot that day, linking to my paper. That comment is still there, archived for posterity.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;This is the story of how I came to develop NAT traversal techniques years before they were standardized, and why I believe &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc3489.html&quot;&gt;RFC 3489&lt;/a&gt;—the STUN protocol that underlies WebRTC and modern peer-to-peer communication—was derived from ideas I published first.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;color: #1a1a1a; font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Video Streaming Years: 1995-2001&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;To understand how I came to solve the NAT traversal problem, you need to understand what I was building in the mid-1990s. I wasn&#39;t an academic researcher writing theoretical papers. I was an engineer trying to make live video work over the early Internet—and making money doing it.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Starting in 1995, I ran the Livecam Video Streaming Project. We built one of the first commercial live video streaming platforms, serving approximately 2,500 adult websites with full-motion video to over 30,000 simultaneous viewers. This was 1997—years before YouTube, before Flash video, before broadband was common. We were pushing the boundaries of what the Internet could do.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The technical challenges were immense. Bandwidth was expensive—around $50,000 per month. We built custom servers on 90 MHz Pentiums running FreeBSD, developed our own JPEG codec using Zoran hardware compressors, and created a global content distribution network spanning 20 locations. I collaborated with Xing Streamworks on their first commercial streaming video product.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;But perhaps the most persistent problem we faced was NAT. Our viewers were increasingly behind home routers and corporate firewalls. The NAT devices that let multiple computers share a single IP address were proliferating rapidly, and they broke everything we were trying to do. If you wanted to receive a video stream, the packets had to reach you—but NAT devices, by design, blocked unsolicited incoming traffic.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;So we figured out how to punch through them.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;color: #1a1a1a; font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Technique: What I Discovered&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The solution I developed was elegant in its simplicity. Here&#39;s the core insight: when a computer behind a NAT sends a packet to an external server, the NAT creates a &quot;mapping&quot;—it remembers which internal address and port sent the packet, and which external address and port it assigned. For a brief window of time, the NAT will allow return traffic from that external destination back through to the internal computer.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The trick is to exploit this behavior with a third-party coordination server. Here&#39;s how it works:&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Step 1: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Computer A (behind a firewall) connects to Server C on the public Internet. This creates a mapping in A&#39;s NAT.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Step 2: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Computer B (also behind a firewall) connects to the same Server C. This creates a mapping in B&#39;s NAT.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Step 3: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Server C now knows the external (mapped) IP addresses and ports for both A and B. It sends this information to each party.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Step 4: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;A sends packets to B&#39;s mapped address, and B sends packets to A&#39;s mapped address. Because both NATs have existing outbound mappings, and because the packets appear to be &quot;replies&quot; to those mappings, they pass through.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Step 5: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Server C is no longer needed. A and B communicate directly, peer-to-peer.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;I documented this technique in a paper dated June 3, 2002, published at &lt;a href=&quot;http://ecip.com/fwdoc.htm&quot;&gt;ecip.com/fwdoc.htm&lt;/a&gt;. The title was simple: &quot;Method of passing bi-directional data between two firewalls.&quot; In that document, I noted that I had &quot;tested this on FreeBSD&#39;s NAT and Linux&#39;s IP Masquerading in the previous century&quot;—meaning before the year 2000.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;color: #1a1a1a; font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;RFC 3489: Nine Months Later&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;In March 2003—nine months after I published my paper—the IETF released &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc3489.html&quot;&gt;RFC 3489&lt;/a&gt;, titled &quot;STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs).&quot; This became the foundational standard for NAT traversal, later updated as &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc5389.html&quot;&gt;RFC 5389&lt;/a&gt;, and forms the basis for WebRTC&#39;s ICE (Interactive Connectivity Establishment) protocol.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;When I read &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc3489.html&quot;&gt;RFC 3489&lt;/a&gt;, the similarities were impossible to ignore. The core mechanism was identical to what I had described. But the RFC went further—it formalized the technique into a complete protocol specification with message formats, NAT classification systems, and security considerations.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Let me be clear about what I&#39;m claiming and what I&#39;m not. I&#39;m not claiming that I invented every aspect of STUN. The RFC authors—Jonathan Rosenberg, Joel Weinberger, Christian Huitema, and Rohan Mahy—did significant work to create a complete, implementable standard. They added NAT type classification, formal message encoding, security mechanisms, and operational procedures.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;b&gt;What I am claiming is that the fundamental insight—the core technique that makes the whole thing work&lt;/b&gt;—was something I had already discovered, implemented, and published before the RFC existed.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;color: #1a1a1a; font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Side-by-Side Comparison&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The language and concepts between my 2002 paper and RFC 3489 are remarkably parallel:&lt;/span&gt;&lt;/p&gt;&lt;div align=&quot;left&quot; dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;208&quot;&gt;&lt;/col&gt;&lt;col width=&quot;208&quot;&gt;&lt;/col&gt;&lt;col width=&quot;208&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;thead&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #999999 0.5pt; border-left: solid #999999 0.5pt; border-right: solid #999999 0.5pt; border-top: solid #999999 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Concept&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #999999 0.5pt; border-left: solid #999999 0.5pt; border-right: solid #999999 0.5pt; border-top: solid #999999 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;My Paper (June 2002)&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #999999 0.5pt; border-left: solid #999999 0.5pt; border-right: solid #999999 0.5pt; border-top: solid #999999 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;RFC 3489 (March 2003)&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #999999 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Third-party server role&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #999999 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;a third external server that helps establish the connection but doesn&#39;t carry any of the data&quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #999999 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;STUN server... located on the opposing (public) side of the NAT&quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Address discovery&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;C can now send the Mapped source IP and port for Server A to Server B&quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;The server examines the source IP address and port of the request, and copies them into a response&quot; via MAPPED-ADDRESS attribute&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;NAT behavior terminology&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;the NAT or Firewall has created a forward and reverse &#39;MAPPING&#39;&quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;learn the addresses bindings allocated by the NAT&quot; and &quot;MAPPED-ADDRESS&quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Server role after setup&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;server C would no longer be needed&quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Server only needed for initial binding discovery, not data relay&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Known limitations&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;requires the NAT/Firewall not &#39;RE-MAP&#39; packets who&#39;s source IP are not from the internal network&quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&quot;STUN does not enable incoming UDP packets through symmetric NATs&quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;color: #1a1a1a; font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Evidence Trail&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;The Internet Archive&#39;s Wayback Machine provides independent, third-party timestamped evidence of when my document existed online. The archive shows 35 captures of my paper at ecip.com/fwdoc.htm, with the first capture dated May 8, 2004. While this is after the RFC was published, it confirms the document existed online and was being crawled by that date.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;More importantly, the document itself is dated June 3, 2002, and contains the phrase &quot;in the previous century&quot;—referring to my testing on FreeBSD and Linux NAT implementations before the year 2000. This internal evidence demonstrates the technique was not only documented but implemented years before the RFC.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;My Slashdot comment from December 15, 2006 is also archived, showing that I publicly claimed priority on this technique immediately when it became news. I wasn&#39;t retroactively constructing a narrative—I was pointing to documentation that already existed.&lt;/span&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 8pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Georgia, serif; font-size: 14pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Timeline&lt;/span&gt;&lt;/h2&gt;&lt;div align=&quot;left&quot; dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;156&quot;&gt;&lt;/col&gt;&lt;col width=&quot;468&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;thead&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #999999 0.5pt; border-left: solid #999999 0.5pt; border-right: solid #999999 0.5pt; border-top: solid #999999 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Date&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;th scope=&quot;col&quot; style=&quot;background-color: #e8e8e8; border-bottom: solid #999999 0.5pt; border-left: solid #999999 0.5pt; border-right: solid #999999 0.5pt; border-top: solid #999999 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Event&lt;/span&gt;&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #999999 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;1995-1997&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #999999 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Livecam Video Streaming Project launches; NAT traversal techniques developed for production use&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Pre-2000&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Technique tested on FreeBSD NAT and Linux IP Masquerading (&quot;previous century&quot;)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;June 3, 2002&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Paper published at ecip.com/fwdoc.htm documenting the technique&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;March 2003&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc3489.html&quot;&gt;RFC 3489&lt;/a&gt; (STUN) &lt;b style=&quot;background-color: #fce5cd;&quot;&gt;published—9 months after my paper&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;May 8, 2004&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;First Wayback Machine capture of my paper—independent timestamp&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;December 2006&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Slashdot article on Skype hole punching; I comment with link to my 2002 paper&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2010&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Google acquires Global IP Solutions (GIPS)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 0pt;&quot;&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;2011&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #cccccc 0.5pt; border-left: solid #cccccc 0.5pt; border-right: solid #cccccc 0.5pt; border-top: solid #cccccc 0.5pt; overflow-wrap: break-word; overflow: hidden; padding: 0pt 5.75pt 0pt 5.75pt; vertical-align: top;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;WebRTC released, using ICE/STUN/TURN for NAT traversal&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;color: #1a1a1a; font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;What the RFC Added&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;To be fair to the RFC authors, they did substantial work beyond what I documented. &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc3489.html&quot;&gt;RFC 3489&lt;/a&gt; includes:&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;NAT Type Classification: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;A formal taxonomy of NAT behaviors (Full Cone, Restricted Cone, Port Restricted Cone, Symmetric) with detection algorithms to determine which type you&#39;re behind.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Wire Protocol Specification: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Complete message formats, TLV-encoded attributes, transaction IDs, port assignments, and retransmission timers.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Security Mechanisms: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Shared secret exchange over TLS, message integrity via HMAC-SHA1, and detailed attack analysis.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Binding Lifetime Discovery: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Procedures for determining how long NAT bindings persist, crucial for keepalive intervals.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;These are real contributions. The RFC authors turned a concept into a deployable standard. But the concept itself—the fundamental insight that makes everything else possible—was not new. It was documented in my paper nine months earlier, and implemented in my systems years before that.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;color: #1a1a1a; font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Why This Matters&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;You might ask why I care about establishing priority for a technique that&#39;s now over two decades old. There are several reasons.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;First, there&#39;s simple historical accuracy. The story of how NAT traversal was developed matters. It didn&#39;t spring fully formed from an IETF working group. It emerged from practitioners solving real problems in the field—people like me who were trying to make video work over an Internet that was never designed for it.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Second, there&#39;s a pattern here that I&#39;ve seen repeatedly in my career. Ideas developed by independent engineers and small companies get absorbed into standards and products without attribution. The people who did the original work are forgotten, while the companies and standards bodies that formalized (and sometimes patented) the ideas get the credit.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Third, and most frustratingly, search engines—particularly Google—don&#39;t surface my early work. When people search for the history of NAT traversal or hole punching, they find the RFCs and the companies that built products on those standards. They don&#39;t find the engineers who figured it out first.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;WebRTC now powers video calls for billions of people. Every Zoom call, Google Meet, Discord voice chat, and countless other applications rely on the NAT traversal techniques that STUN and ICE provide. The fundamental insight that makes all of this work—that you can use a third-party server to discover mapped addresses and then communicate directly—is something I documented in 2002 and implemented even earlier.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;I&#39;m not asking for royalties or recognition from standards bodies. I&#39;m simply asking for the historical record to be accurate. I was there. I figured this out. I wrote it down. And now I&#39;m telling the story.&lt;/span&gt;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 10pt; margin-top: 20pt;&quot;&gt;&lt;span style=&quot;color: #1a1a1a; font-family: Georgia, serif; font-size: 16pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Primary Sources&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;My 2002 Paper: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;a href=&quot;http://www.ecip.com/fwdoc.htm&quot;&gt;http://www.ecip.com/fwdoc.htm&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Wayback Machine Archive: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;https://web.archive.org/web/*/http://www.ecip.com/fwdoc.htm&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Slashdot Discussion (December 2006): &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;a href=&quot;https://slashdot.org/story/06/12/15/191205/how-skype-punches-holes-in-firewalls&quot;&gt;https://slashdot.org/story/06/12/15/191205/how-skype-punches-holes-in-firewalls&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;RFC 3489: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc3489&quot;&gt;https://www.rfc-editor.org/rfc/rfc3489&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 6pt;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;Livecam Project History: &lt;/span&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;a href=&quot;https://www.dnull.com/livecam.html&quot;&gt;https://www.dnull.com/livecam.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 24pt; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;— John L. Sokol, 2025&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-family: Georgia, serif; font-size: 12pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/7702992818051551600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/7702992818051551600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/7702992818051551600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/7702992818051551600'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/i-invented-nat-hole-punching-before-it.html' title='I Invented NAT Hole Punching Before It Had a Name'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-505517446735248244</id><published>2025-11-25T15:10:00.000-08:00</published><updated>2025-11-25T15:10:18.661-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Nostr"/><category scheme="http://www.blogger.com/atom/ns#" term="P2P Social"/><category scheme="http://www.blogger.com/atom/ns#" term="p3p"/><title type='text'>Nostr&#39;s vs P2P Social</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div data-test-render-count=&quot;2&quot;&gt;&lt;div style=&quot;height: auto; opacity: 1; transform: none;&quot;&gt;&lt;div class=&quot;group relative pb-8&quot; data-is-streaming=&quot;false&quot; style=&quot;opacity: 1; transform: none;&quot;&gt;&lt;div class=&quot;font-claude-response relative leading-[1.65rem] [&amp;amp;_pre&amp;gt;div]:bg-bg-000/50 [&amp;amp;_pre&amp;gt;div]:border-0.5 [&amp;amp;_pre&amp;gt;div]:border-border-400 [&amp;amp;_.ignore-pre-bg&amp;gt;div]:bg-transparent [&amp;amp;_.standard-markdown_:is(p,blockquote,h1,h2,h3,h4,h5,h6)]:pl-2 [&amp;amp;_.standard-markdown_:is(p,blockquote,ul,ol,h1,h2,h3,h4,h5,h6)]:pr-8 [&amp;amp;_.progressive-markdown_:is(p,blockquote,h1,h2,h3,h4,h5,h6)]:pl-2 [&amp;amp;_.progressive-markdown_:is(p,blockquote,ul,ol,h1,h2,h3,h4,h5,h6)]:pr-8&quot;&gt;&lt;div class=&quot;grid-cols-1 grid gap-2.5 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;Key Architectural Difference&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;strong&gt;Nostr:&lt;/strong&gt; Client → Relay (server) → Client&lt;br /&gt;
&lt;strong&gt;P2P Social (e.g., Scuttlebutt, SSB):&lt;/strong&gt; Peer ↔ Peer (gossip/replication)&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Nostr uses &lt;strong&gt;relays&lt;/strong&gt; (simple websocket servers) as intermediaries, while P2P social networks have users directly exchange data with each other.&lt;/p&gt;
&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;Nostr&#39;s Advantages Over P2P&lt;/h2&gt;
&lt;pre class=&quot;font-ui border-border-100/50 overflow-x-scroll w-full rounded border-[0.5px] shadow-[0_2px_12px_hsl(var(--always-black)/5%)]&quot;&gt;&lt;table class=&quot;bg-bg-100 min-w-full border-separate border-spacing-0 text-sm leading-[1.88888] whitespace-normal&quot;&gt;&lt;thead class=&quot;border-b-border-100/50 border-b-[0.5px] text-left&quot;&gt;&lt;tr class=&quot;[tbody&amp;gt;&amp;amp;]:odd:bg-bg-500/10&quot;&gt;&lt;th class=&quot;text-text-000 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;Aspect&lt;/th&gt;&lt;th class=&quot;text-text-000 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;Nostr&#39;s Approach&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr class=&quot;[tbody&amp;gt;&amp;amp;]:odd:bg-bg-500/10&quot;&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;&lt;strong&gt;Simplicity&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;&quot;Signed JSON over websockets&quot; - trivially implementable&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;[tbody&amp;gt;&amp;amp;]:odd:bg-bg-500/10&quot;&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;&lt;strong&gt;Reliability&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;No NAT traversal, no DHT, no gossip protocol complexity&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;[tbody&amp;gt;&amp;amp;]:odd:bg-bg-500/10&quot;&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;&lt;strong&gt;Mobile-friendly&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;Clients can be thin; no need to run background sync&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;[tbody&amp;gt;&amp;amp;]:odd:bg-bg-500/10&quot;&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;&lt;strong&gt;Discoverability&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;Relays provide known endpoints; P2P struggles with &quot;how do I find you?&quot;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;[tbody&amp;gt;&amp;amp;]:odd:bg-bg-500/10&quot;&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;&lt;strong&gt;Offline users&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;Relays store messages for offline recipients; P2P requires both parties online (or complex pub infrastructure)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/pre&gt;
&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;P2P&#39;s Advantages Over Nostr&lt;/h2&gt;
&lt;pre class=&quot;font-ui border-border-100/50 overflow-x-scroll w-full rounded border-[0.5px] shadow-[0_2px_12px_hsl(var(--always-black)/5%)]&quot;&gt;&lt;table class=&quot;bg-bg-100 min-w-full border-separate border-spacing-0 text-sm leading-[1.88888] whitespace-normal&quot;&gt;&lt;thead class=&quot;border-b-border-100/50 border-b-[0.5px] text-left&quot;&gt;&lt;tr class=&quot;[tbody&amp;gt;&amp;amp;]:odd:bg-bg-500/10&quot;&gt;&lt;th class=&quot;text-text-000 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;Aspect&lt;/th&gt;&lt;th class=&quot;text-text-000 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;P2P&#39;s Approach&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr class=&quot;[tbody&amp;gt;&amp;amp;]:odd:bg-bg-500/10&quot;&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;&lt;strong&gt;No servers needed&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;True decentralization; Nostr still requires &lt;em&gt;someone&lt;/em&gt; to run relays&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;[tbody&amp;gt;&amp;amp;]:odd:bg-bg-500/10&quot;&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;&lt;strong&gt;Offline-first&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;Local-first data; works without internet once synced&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;[tbody&amp;gt;&amp;amp;]:odd:bg-bg-500/10&quot;&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;&lt;strong&gt;Censorship resistance&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;Harder to block gossip than to block known relay servers&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;[tbody&amp;gt;&amp;amp;]:odd:bg-bg-500/10&quot;&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;&lt;strong&gt;No hosting costs&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-t-border-100/50 [&amp;amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;amp;:not(:first-child)]:border-l-[0.5px]&quot;&gt;Users bear their own storage/bandwidth&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/pre&gt;
&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;The Tradeoff&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;The speaker acknowledges: &quot;we&#39;re not in the business of selling magic - data has to be hosted, it has to be on a drive somewhere connected to the internet.&quot;&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Nostr accepts that servers exist but makes users &lt;strong&gt;not dependent on any specific server&lt;/strong&gt;. P2P tries to eliminate servers entirely but introduces complexity that limits adoption (&quot;it works&quot; being the key claim against P2P).&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div data-test-render-count=&quot;2&quot;&gt;&lt;div class=&quot;mb-1 mt-1&quot;&gt;&lt;div class=&quot;group relative inline-flex gap-2 bg-bg-300 rounded-xl pl-2.5 py-2.5 break-words text-text-100 transition-all max-w-[75ch] flex-col pr-6&quot; style=&quot;opacity: 1; transform: none;&quot;&gt;&lt;div class=&quot;flex flex-row gap-2 relative&quot;&gt;&lt;div class=&quot;flex-1&quot;&gt;&lt;div class=&quot;font-large !font-user-message grid grid-cols-1 gap-2 py-0.5 relative&quot; data-testid=&quot;user-message&quot; style=&quot;max-height: none; overflow: hidden; position: relative;&quot;&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;so what does nostr run off? web servers? daemons?built on.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div data-test-render-count=&quot;1&quot;&gt;&lt;div style=&quot;height: auto; opacity: 1; transform: none;&quot;&gt;&lt;div class=&quot;group relative pb-3&quot; data-is-streaming=&quot;false&quot; style=&quot;opacity: 1; transform: none;&quot;&gt;&lt;div class=&quot;font-claude-response relative leading-[1.65rem] [&amp;amp;_pre&amp;gt;div]:bg-bg-000/50 [&amp;amp;_pre&amp;gt;div]:border-0.5 [&amp;amp;_pre&amp;gt;div]:border-border-400 [&amp;amp;_.ignore-pre-bg&amp;gt;div]:bg-transparent [&amp;amp;_.standard-markdown_:is(p,blockquote,h1,h2,h3,h4,h5,h6)]:pl-2 [&amp;amp;_.standard-markdown_:is(p,blockquote,ul,ol,h1,h2,h3,h4,h5,h6)]:pr-8 [&amp;amp;_.progressive-markdown_:is(p,blockquote,h1,h2,h3,h4,h5,h6)]:pl-2 [&amp;amp;_.progressive-markdown_:is(p,blockquote,ul,ol,h1,h2,h3,h4,h5,h6)]:pr-8&quot;&gt;&lt;div class=&quot;ease-out rounded-lg border-0.5 flex flex-col font-ui leading-normal my-3 border-border-300 min-h-[2.625rem] hover:bg-bg-200 mt-2 mb-3&quot; style=&quot;opacity: 1;&quot;&gt;&lt;div class=&quot;overflow-hidden shrink-0&quot; style=&quot;height: 0px; opacity: 0;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;min-h-0&quot; style=&quot;mask-image: linear-gradient(transparent 0%, black 0px, black calc(100% - 16px), transparent 100%);&quot;&gt;&lt;div class=&quot;overflow-y-auto overflow-x-hidden min-h-0 h-full !max-h-[238px] pointer-events-none&quot; style=&quot;scrollbar-gutter: stable;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;text-text-300 text-sm font-normal gap-0.5 relative font-claude-response&quot;&gt;&lt;div class=&quot;grid-cols-1 grid gap-2.5 [&amp;amp;_&amp;gt;_*]:min-w-0 p-3 pt-0 pr-8&quot;&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;From the transcript, I can pull out:&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-2.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Relays are websocket servers&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;The protocol is &quot;signed JSON over websockets&quot;&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;It mentions you can run a relay on a Raspberry Pi&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Relays are just servers that host data&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Let me explain this clearly based on what&#39;s in the transcript and general knowledge about Nostr.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;grid-cols-1 grid gap-2.5 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Based on the transcript, Nostr&#39;s infrastructure is straightforward:&lt;/p&gt;
&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;Relays&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Relays are just &lt;strong&gt;websocket servers&lt;/strong&gt;. The speaker describes the entire protocol as &quot;signed JSON over websockets&quot; - that&#39;s literally it.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;They can run on:&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-2.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;A VPS or cloud server&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;A Raspberry Pi (the speaker mentions this as an option)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Any machine that can maintain websocket connections and store JSON&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;There&#39;s no special daemon or complex software stack required. A relay just needs to:&lt;/p&gt;
&lt;ol class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-2.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Accept websocket connections&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Receive JSON events from clients&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Store them (database, files, whatever)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Serve them back to clients who request them&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;Clients&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Clients are regular apps - mobile apps, web apps, desktop apps. They:&lt;/p&gt;
&lt;ol class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-2.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Connect to one or more relays via websocket&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Publish signed events&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Request events (by public key, by kind, etc.)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;What&#39;s notably absent&lt;/h2&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-2.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;No blockchain&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;No DHT (distributed hash table)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;No gossip protocol&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;No consensus mechanism&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;No special networking requirements&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;The speaker emphasizes this simplicity intentionally: &quot;it&#39;s just JSON, you&#39;ll figure it out.&quot; The barrier to entry is low - if you can build anything that talks websockets and handles JSON, you can build a Nostr client or relay.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;This is why adoption has been relatively fast compared to earlier decentralized social attempts - the technical lift is minimal.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/505517446735248244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/505517446735248244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/505517446735248244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/505517446735248244'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/nostrs-vs-p2p-social.html' title='Nostr&#39;s vs P2P Social'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-6079710133394475330</id><published>2025-11-25T11:05:00.000-08:00</published><updated>2025-11-25T13:45:04.276-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Claude.ai"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="p2psocial"/><category scheme="http://www.blogger.com/atom/ns#" term="webrtc"/><title type='text'>Building Decentralized Social Media: A Peer-to-Peer Alternative to Facebook</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;div style=&quot;height: 0px; overflow: hidden; padding-bottom: 56.25%; position: relative;&quot;&gt;

  &lt;iframe allow=&quot;autoplay; fullscreen; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; src=&quot;https://p2p-social.github.io/docs/talk/&quot; style=&quot;height: 100%; left: 0; position: absolute; top: 0; width: 100%;&quot;&gt;

  &lt;/iframe&gt;
&lt;/div&gt;

  &lt;a href=&quot;https://p2p-social.github.io/ &quot;&gt;https://p2p-social.github.io/&amp;nbsp;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;a href=&quot;https://github.com/P2P-Social/P2P-Social.github.io&quot;&gt;https://github.com/P2P-Social/P2P-Social.github.io&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h1 class=&quot;font-claude-response-title mt-1 text-text-100&quot;&gt;Building Decentralized Social Media: A Peer-to-Peer Alternative to Facebook&lt;/h1&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;strong&gt;By John Sowal, presented at the Dojo&lt;/strong&gt;&lt;/p&gt;

&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;The Problem with Centralized Platforms&lt;/h2&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;As someone who&#39;s been involved in internet infrastructure since the early days—building some of the earliest CDNs in &#39;92-&#39;94 and working on streaming video—I&#39;ve watched the evolution of social media with growing concern. The Twitter Files revelations and ongoing issues with Facebook have made one thing clear: we need alternatives to centralized social media platforms.&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;The core problem is simple but fundamental. As Jack Dorsey pointed out, any company-based platform is vulnerable. The moment you incorporate, governments can issue subpoenas, apply pressure, and force compromises. The result? Increasingly aggressive content moderation that goes far beyond preventing genuine harm.&lt;/p&gt;

&lt;h3 class=&quot;font-claude-response-subheading text-text-100 mt-1 -mb-1.5&quot;&gt;Real-World Censorship Examples&lt;/h3&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;The filtering has become absurdly disruptive:&lt;/p&gt;

&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-2.5 pl-7&quot;&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Getting banned for posting clips from Hollywood movies&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Facebook jail memes and pins have become so common they&#39;re being sold as merchandise&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Feeds filled with algorithmic content instead of posts from actual friends&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Legitimate technical content blocked by AI filters (try sharing information about Yasa electric motors—it&#39;s blocked because a Turkish politician shares the name)&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Humor and satire flagged as &quot;false information&quot;&lt;/li&gt;

&lt;/ul&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;I just want to do what I did with my BBS in 1987—one of the largest in the Bay Area, called Turbo Sysco. Back then, we&#39;d share San Jose Mercury tech articles and discuss them freely. Today, that simple activity feels impossible on Facebook.&lt;/p&gt;

&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;The Technical Vision&lt;/h2&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Can we build something better using modern browser capabilities? The answer is yes. Today&#39;s browsers are incredibly powerful:&lt;/p&gt;

&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-2.5 pl-7&quot;&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Enormous compute resources&lt;/strong&gt;: Access to GPU, WebGL, WebGPU&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Significant storage&lt;/strong&gt;: Browser-based storage systems&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;WebRTC&lt;/strong&gt;: Enables mesh networking between peers&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Flexible data management&lt;/strong&gt;: Ability to simulate drives, export/import databases&lt;/li&gt;

&lt;/ul&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;The architecture I envisioned uses relays with WebRTC to establish connections between nodes, creating a truly distributed system where code executes in browser tabs rather than on centralized servers.&lt;/p&gt;

&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;Exploring Existing Solutions&lt;/h2&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Before building from scratch, I surveyed the landscape:&lt;/p&gt;

&lt;h3 class=&quot;font-claude-response-subheading text-text-100 mt-1 -mb-1.5&quot;&gt;&lt;strong&gt;PureJS&lt;/strong&gt;&lt;/h3&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Interesting pure JavaScript implementation, but lacked the full feature set needed.&lt;/p&gt;

&lt;h3 class=&quot;font-claude-response-subheading text-text-100 mt-1 -mb-1.5&quot;&gt;&lt;strong&gt;Croquet&lt;/strong&gt;&lt;/h3&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Really impressive real-time synchronization. Their demo shows perfect timing across devices—open it on your phone and desktop, and they stay in perfect sync. The platform can run server modules directly in the browser, generating and rendering content while keeping everyone synchronized for gaming and interactive experiences.&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;The catch? You need an account with them. If the FBI or anyone else wanted to shut you down, they could simply turn off your account. Still centralized.&lt;/p&gt;

&lt;h3 class=&quot;font-claude-response-subheading text-text-100 mt-1 -mb-1.5&quot;&gt;&lt;strong&gt;CYFS&lt;/strong&gt;&lt;/h3&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Very interesting—they actually implemented something remarkably close to what I had sketched out independently.&lt;/p&gt;

&lt;h3 class=&quot;font-claude-response-subheading text-text-100 mt-1 -mb-1.5&quot;&gt;&lt;strong&gt;Gun (by Mark Nadal)&lt;/strong&gt;&lt;/h3&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;I met Mark Nadal at the Dojo about a month ago, and his architecture is exactly what I had sketched out. It uses relays for WebRTC introductions (just like I proposed), but they&#39;re simply backups—the real communication happens peer-to-peer. I&#39;ve been working hard to implement this, though as someone who isn&#39;t primarily a Node developer, it&#39;s been a brutal learning curve. (ChatGPT has been invaluable for deciphering the alphabet soup of modern web libraries.)&lt;/p&gt;

&lt;h3 class=&quot;font-claude-response-subheading text-text-100 mt-1 -mb-1.5&quot;&gt;&lt;strong&gt;Nostr&lt;/strong&gt;&lt;/h3&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;The newest entrant, and it shows real promise. Unlike Mastodon&#39;s federated approach, Nostr is more censorship-resistant. While relay operators can filter content, your data persists on the protocol indefinitely. There&#39;s no central authority that can remove you entirely.&lt;/p&gt;

&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;Mastodon vs. Nostr: Federation vs. True Distribution&lt;/h2&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;strong&gt;Mastodon&lt;/strong&gt; is distributed but federated. My experience showed that you can still get booted from instances for simply publishing links. Because there are people managing these relays, moderation creeps back in.&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;strong&gt;Nostr&lt;/strong&gt;, on the other hand, can&#39;t be stopped in the same way. Individual relays might filter you, but your data remains on the protocol. As one attendee noted: &quot;there&#39;s no filter—it&#39;s beautiful.&quot;&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;However, Nostr isn&#39;t truly peer-to-peer; everything still goes through relays. Gun&#39;s approach is more aligned with pure P2P, using relays only for initial introductions.&lt;/p&gt;

&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;My Vision: Radical Transparency Without Interference&lt;/h2&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Here&#39;s my position: &lt;strong&gt;I don&#39;t even want to encrypt everything.&lt;/strong&gt; If authorities want to monitor conversations, fine—do it in clear text. What I object to is the interference, the filtering, the fact-checking, the blocked links.&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;If I&#39;m posting something illegal, let the FBI arrest me. But don&#39;t interfere with normal conversation. The bar for censorship has become absurdly low.&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;I want:&lt;/p&gt;

&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-2.5 pl-7&quot;&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;A Facebook-like site where I can chat with friends&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;The ability to share links without arbitrary blocking&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Discussion of news articles without algorithmic interference&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;No &quot;old lady in the middle of the conversation judging everything&quot;&lt;/li&gt;

&lt;/ul&gt;

&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;Technical Advantages&lt;/h2&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;A truly peer-to-peer system offers compelling benefits:&lt;/p&gt;

&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-2.5 pl-7&quot;&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Zero bandwidth costs&lt;/strong&gt;: Pull as much data as fast as you want&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;No server fees&lt;/strong&gt;: No backend infrastructure to maintain&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Resilience&lt;/strong&gt;: No central point of failure&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Static hosting&lt;/strong&gt;: Code can live on GitHub Pages—free and reliable&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Rich capabilities&lt;/strong&gt;: Build virtual worlds, 3D animations, VR experiences, multiplayer interactive content&lt;/li&gt;

&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;User control&lt;/strong&gt;: Each person can run their own relay if desired&lt;/li&gt;

&lt;/ul&gt;

&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;Addressing Concerns&lt;/h2&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;strong&gt;Q: Won&#39;t peer-to-peer put illegal content on my computer?&lt;/strong&gt;&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Ideally, encryption or other mechanisms prevent you from accessing cached content. More importantly, if designed as a caching system, you&#39;re only keeping copies of content you&#39;ve actually viewed—not redistributing material you never looked at.&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;strong&gt;Q: How will people find each other without indexing?&lt;/strong&gt;&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Through direct sharing of keys, handles, or identifiers. In my case, I have my own domain and can run a relay, making myself discoverable. Users can share their connection information directly with friends.&lt;/p&gt;

&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;The Path Forward&lt;/h2&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;We&#39;re at a crossroads. The centralized social media experiment has shown its limitations. Censorship, algorithmic manipulation, and corporate vulnerability to government pressure have made these platforms increasingly hostile to free discourse.&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;The technology exists today to build alternatives. WebRTC, modern browsers, and systems like Gun and Nostr provide the building blocks. What we need is the will to build these systems and the community to adopt them.&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;The future of social media doesn&#39;t have to run through Silicon Valley data centers. It can run in your browser, connecting directly to your friends, with no intermediary deciding what you can say or share.&lt;/p&gt;

&lt;hr class=&quot;border-border-300 my-2&quot; /&gt;

&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;em&gt;Interested in learning more about peer-to-peer social networking? Check out these projects:&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/6079710133394475330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/6079710133394475330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/6079710133394475330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/6079710133394475330'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/building-decentralized-social-media.html' title='Building Decentralized Social Media: A Peer-to-Peer Alternative to Facebook'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-7259387295981770303</id><published>2025-11-24T09:48:00.000-08:00</published><updated>2025-11-24T09:49:05.166-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ideas"/><category scheme="http://www.blogger.com/atom/ns#" term="p2p"/><category scheme="http://www.blogger.com/atom/ns#" term="P2P Social"/><category scheme="http://www.blogger.com/atom/ns#" term="Social"/><category scheme="http://www.blogger.com/atom/ns#" term="webrtc"/><title type='text'>P2P Social - The Uncensorable Social Network</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;a href=&quot;https://p2p-social.github.io/&quot;&gt;P2P Social&lt;/a&gt;&amp;nbsp;Beta is now running and on github.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;It&#39;s built and working, I just need testers to help me debug everything. &lt;br /&gt;P2P Social &lt;a href=&quot;https://t.co/vyBTJVlXhN&quot;&gt;https://t.co/vyBTJVlXhN&lt;/a&gt;&lt;/p&gt;— johnsokol (@johnsokol) &lt;a href=&quot;https://twitter.com/johnsokol/status/1993011250088092018?ref_src=twsrc%5Etfw&quot;&gt;November 24, 2025&lt;/a&gt;&lt;/blockquote&gt; &lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;https://platform.twitter.com/widgets.js&quot;&gt;&lt;/script&gt;


I just fed the transcript and my blog post in to Claude.ai and it produce a working mvp. (minium viable product) &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;codes at&amp;nbsp;&lt;a href=&quot;https://github.com/P2P-Social&quot;&gt;https://github.com/P2P-Social&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; margin-top: 0px; position: relative;&quot;&gt;&lt;h1 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;P2P Social&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Decentralized social networking. No servers. No censorship. No cost.&lt;/span&gt;&lt;/h1&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h1 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; font-size: 2em; font-weight: 600; line-height: 1.25; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🌐 P2P Social - The Uncensorable Social Network&lt;/h1&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-top: 0px !important; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🌐 P2P Social - The Uncensorable Social Network&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-p2p-social---the-uncensorable-social-network&quot; id=&quot;user-content--p2p-social---the-uncensorable-social-network&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 25.3299px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote style=&quot;border-left: 3.33333px solid rgb(61, 68, 77); box-sizing: border-box; color: #9198a1; font-size: 16px; font-weight: 400; margin: 0px 0px 16px; padding: 0px 1em;&quot;&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Social networking without the middleman. No servers. No censorship. No corporate overlords.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;a href=&quot;https://opensource.org/licenses/MIT&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;&lt;img alt=&quot;License: MIT&quot; data-canonical-src=&quot;https://img.shields.io/badge/License-MIT-yellow.svg&quot; src=&quot;https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667&quot; style=&quot;border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;&lt;img alt=&quot;Status: Early Development&quot; data-canonical-src=&quot;https://img.shields.io/badge/Status-Early%20Development-orange&quot; src=&quot;https://camo.githubusercontent.com/a78cb8c4b97050e6d325709bc3099cc36a1011e681b39c9cdfca0a778626ad6d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5374617475732d4561726c79253230446576656c6f706d656e742d6f72616e6765&quot; style=&quot;border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;&lt;img alt=&quot;Contributions Welcome&quot; data-canonical-src=&quot;https://img.shields.io/badge/Contributions-Welcome-brightgreen&quot; src=&quot;https://camo.githubusercontent.com/c8c1977fdb7fe0a2d6fcd0b378ce7cf00917f944e2994f8bffbbedcc0d47f3d2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e747269627574696f6e732d57656c636f6d652d627269676874677265656e&quot; style=&quot;border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🎯 The Vision&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🎯 The Vision&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-the-vision&quot; id=&quot;user-content--the-vision&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Imagine a social network where:&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;✅&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;No one can ban you&lt;/span&gt;&amp;nbsp;- No central authority&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;✅&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;No algorithmic feeds&lt;/span&gt;&amp;nbsp;- See what your friends actually post&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;✅&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;No data mining&lt;/span&gt;&amp;nbsp;- Your data stays in your browser&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;✅&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;No hosting costs&lt;/span&gt;&amp;nbsp;- Runs on GitHub Pages + Firebase (free)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;✅&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;No ads&lt;/span&gt;&amp;nbsp;- No business model = no incentive to exploit&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;✅&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Open source&lt;/span&gt;&amp;nbsp;- Fork it, modify it, own it&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;This isn&#39;t a dream. The technology exists today.&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🚀 How It Works&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🚀 How It Works&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-how-it-works&quot; id=&quot;user-content--how-it-works&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; display: flex; font-size: 16px; font-weight: 400; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;You write a post → Splits into chunks → Distributed across friend&#39;s browsers
                        ↓
                  Everyone sees it
                        ↓
                  No server involved
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;You write a post → Splits into chunks → Distributed across friend&#39;s browsers
                        ↓
                  Everyone sees it
                        ↓
                  No server involved&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Three Simple Components&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: Three Simple Components&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#three-simple-components&quot; id=&quot;user-content-three-simple-components&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ol dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;GitHub Pages&lt;/span&gt;&amp;nbsp;- Hosts the static web app (free forever)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Firebase&lt;/span&gt;&amp;nbsp;- Helps browsers find each other (free tier is plenty)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;WebRTC&lt;/span&gt;&amp;nbsp;- Browser-to-browser connections (peer-to-peer magic)&lt;/li&gt;&lt;/ol&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;After connecting, Firebase is out of the picture. All data flows directly between users.&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🎬 Demo&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🎬 Demo&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-demo&quot; id=&quot;user-content--demo&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Live Demo:&lt;/span&gt;&amp;nbsp;[Coming Soon]&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Screenshots:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; display: flex; font-size: 16px; font-weight: 400; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;┌─────────────────────────────────────┐
│  P2P Social                    [⚙️] │
├─────────────────────────────────────┤
│                                     │
│  📝 What&#39;s on your mind?            │
│  ┌─────────────────────────────┐   │
│  │                             │   │
│  └─────────────────────────────┘   │
│           [Post] 🔐 Encrypted      │
│                                     │
│  ─────────────────────────────────  │
│                                     │
│  👤 Alice                     2m ago│
│  ┌─────────────────────────────┐   │
│  │ Just set up my node!        │   │
│  │ Running purely P2P 🚀       │   │
│  └─────────────────────────────┘   │
│  💬 3 replies  🔄 12 shares         │
│                                     │
│  👤 Bob                       5m ago│
│  ┌─────────────────────────────┐   │
│  │ No more censorship! 🎉      │   │
│  └─────────────────────────────┘   │
│                                     │
└─────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;┌─────────────────────────────────────┐
│  P2P Social                    [⚙️] │
├─────────────────────────────────────┤
│                                     │
│  📝 What&#39;s on your mind?            │
│  ┌─────────────────────────────┐   │
│  │                             │   │
│  └─────────────────────────────┘   │
│           [Post] 🔐 Encrypted      │
│                                     │
│  ─────────────────────────────────  │
│                                     │
│  👤 Alice                     2m ago│
│  ┌─────────────────────────────┐   │
│  │ Just set up my node!        │   │
│  │ Running purely P2P 🚀       │   │
│  └─────────────────────────────┘   │
│  💬 3 replies  🔄 12 shares         │
│                                     │
│  👤 Bob                       5m ago│
│  ┌─────────────────────────────┐   │
│  │ No more censorship! 🎉      │   │
│  └─────────────────────────────┘   │
│                                     │
└─────────────────────────────────────┘&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🏗️ Architecture&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🏗️ Architecture&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#%EF%B8%8F-architecture&quot; id=&quot;user-content-️-architecture&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;High Level&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: High Level&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#high-level&quot; id=&quot;user-content-high-level&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; display: flex; font-size: 16px; font-weight: 400; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;┌──────────┐     Signaling      ┌──────────┐
│  User A  │ ←──────────────→  │ Firebase │
│ (Browser)│                    │          │
└────┬─────┘                    └────┬─────┘
     │                               │
     │         Signaling             │
     │    ←──────────────────────────┘
     │
     │  WebRTC (Direct P2P)
     ↓
┌──────────┐
│  User B  │
│ (Browser)│
└──────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;┌──────────┐     Signaling      ┌──────────┐
│  User A  │ ←──────────────→  │ Firebase │
│ (Browser)│                    │          │
└────┬─────┘                    └────┬─────┘
     │                               │
     │         Signaling             │
     │    ←──────────────────────────┘
     │
     │  WebRTC (Direct P2P)
     ↓
┌──────────┐
│  User B  │
│ (Browser)│
└──────────┘&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Data Redundancy&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: Data Redundancy&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#data-redundancy&quot; id=&quot;user-content-data-redundancy&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Posts are split using&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Hamming (7,4) codes&lt;/span&gt;:&lt;/p&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; display: flex; font-size: 16px; font-weight: 400; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;Original Post (1 MB)
    ↓
Split into 4 chunks (250 KB each)
    ↓
Generate 3 parity chunks (error correction)
    ↓
= 7 total chunks distributed across 7 peers
    ↓
Can lose ANY 2 chunks and still recover the post
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;Original Post (1 MB)
    ↓
Split into 4 chunks (250 KB each)
    ↓
Generate 3 parity chunks (error correction)
    ↓
= 7 total chunks distributed across 7 peers
    ↓
Can lose ANY 2 chunks and still recover the post&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;This means content survives even if users close their browsers.&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🔒 Security &amp;amp; Privacy&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🔒 Security &amp;amp; Privacy&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-security--privacy&quot; id=&quot;user-content--security--privacy&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Your Identity&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: Your Identity&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#your-identity&quot; id=&quot;user-content-your-identity&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Public key&lt;/span&gt;&amp;nbsp;= Your username (shareable)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Private key&lt;/span&gt;&amp;nbsp;= Your password (never leaves your browser)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;No email, no phone number, no real name required&lt;/li&gt;&lt;/ul&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Content Authenticity&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: Content Authenticity&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#content-authenticity&quot; id=&quot;user-content-content-authenticity&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Every post is cryptographically signed&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Recipients verify signatures before displaying&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Impossible to impersonate another user&lt;/li&gt;&lt;/ul&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Optional Encryption&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: Optional Encryption&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#optional-encryption&quot; id=&quot;user-content-optional-encryption&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;End-to-end encrypted direct messages&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Only sender and recipient can read&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Network only sees encrypted gibberish&lt;/li&gt;&lt;/ul&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;What About Illegal Content?&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: What About Illegal Content?&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#what-about-illegal-content&quot; id=&quot;user-content-what-about-illegal-content&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;You control what you store:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Only cache content from users you follow&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Block malicious users instantly&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;You&#39;re not a server, you&#39;re a peer&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Legal precedent: caching != distribution&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;💻 Getting Started&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 💻 Getting Started&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-getting-started&quot; id=&quot;user-content--getting-started&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;As a User&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: As a User&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#as-a-user&quot; id=&quot;user-content-as-a-user&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Just visit the site:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; display: flex; font-size: 16px; font-weight: 400; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;https://p2p-social.github.io
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;https://p2p-social.github.io&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;No installation. No signup. Just start posting.&lt;/p&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;As a Developer&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: As a Developer&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#as-a-developer&quot; id=&quot;user-content-as-a-developer&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Clone and run locally:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;highlight highlight-source-shell notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; display: flex; font-size: 16px; font-weight: 400; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;git clone https://github.com/p2p-social/p2p-social
&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;cd&lt;/span&gt; p2p-social
python -m http.server 8000
open http://localhost:8000&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;git clone https://github.com/p2p-social/p2p-social
cd p2p-social
python -m http.server 8000
open http://localhost:8000&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Firebase Setup (5 minutes):&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;highlight highlight-source-shell notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; display: flex; font-size: 16px; font-weight: 400; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; 1. Create Firebase project at console.firebase.google.com&lt;/span&gt;
&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; 2. Enable Realtime Database&lt;/span&gt;
&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; 3. Copy config to src/firebase-config.js&lt;/span&gt;
&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; 4. Done!&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;# 1. Create Firebase project at console.firebase.google.com
# 2. Enable Realtime Database
# 3. Copy config to src/firebase-config.js
# 4. Done!&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deploy to GitHub Pages:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;highlight highlight-source-shell notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; display: flex; font-size: 16px; font-weight: 400; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;npm run deploy
&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; Your site is now live at username.github.io/p2p-social&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;npm run deploy
# Your site is now live at username.github.io/p2p-social&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🛠️ Tech Stack&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🛠️ Tech Stack&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#%EF%B8%8F-tech-stack&quot; id=&quot;user-content-️-tech-stack&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Frontend:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Pure JavaScript (no frameworks... yet)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Web Crypto API&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;IndexedDB&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;WebRTC Data Channels&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Backend (ish):&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Firebase Realtime Database (signaling only)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;GitHub Pages (static hosting)&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Protocols:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;WebRTC for P2P connections&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Hamming codes for redundancy&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Ed25519 for signatures&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;SHA-256 for content addressing&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;📚 Documentation&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 📚 Documentation&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-documentation&quot; id=&quot;user-content--documentation&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;Architecture Document&lt;/a&gt;&lt;/span&gt;&amp;nbsp;- Complete technical design&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/PROTOCOL.md&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;Protocol Specification&lt;/a&gt;&lt;/span&gt;&amp;nbsp;- Wire protocol details&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/CONTRIBUTING.md&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;Contributing Guide&lt;/a&gt;&lt;/span&gt;&amp;nbsp;- How to help&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/docs/API.md&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;API Reference&lt;/a&gt;&lt;/span&gt;&amp;nbsp;- Developer documentation&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🗺️ Roadmap&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🗺️ Roadmap&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#%EF%B8%8F-roadmap&quot; id=&quot;user-content-️-roadmap&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;✅ Phase 1: MVP (Current)&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: ✅ Phase 1: MVP (Current)&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-phase-1-mvp-current&quot; id=&quot;user-content--phase-1-mvp-current&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Completed task&quot; checked=&quot;&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;WebRTC mesh networking&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Completed task&quot; checked=&quot;&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Firebase signaling&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Basic text posts&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Public key authentication&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Simple UI&lt;/li&gt;&lt;/ul&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;📅 Phase 2: Redundancy (Next)&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 📅 Phase 2: Redundancy (Next)&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-phase-2-redundancy-next&quot; id=&quot;user-content--phase-2-redundancy-next&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Hamming code implementation&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Chunk distribution&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Automatic recovery&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Network health monitoring&lt;/li&gt;&lt;/ul&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;📅 Phase 3: Social Features&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 📅 Phase 3: Social Features&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-phase-3-social-features&quot; id=&quot;user-content--phase-3-social-features&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;User profiles&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Follow/unfollow&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Chronological feed&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Search &amp;amp; discovery&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Notifications&lt;/li&gt;&lt;/ul&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;📅 Phase 4: Polish&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 📅 Phase 4: Polish&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-phase-4-polish&quot; id=&quot;user-content--phase-4-polish&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Image/video support&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Markdown formatting&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Threading &amp;amp; comments&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Mobile PWA&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Dark mode 🌙&lt;/li&gt;&lt;/ul&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;📅 Phase 5: Advanced&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 📅 Phase 5: Advanced&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-phase-5-advanced&quot; id=&quot;user-content--phase-5-advanced&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;E2E encrypted DMs&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Groups &amp;amp; communities&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Content moderation tools&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Native mobile apps&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Browser extension&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🤝 Contributing&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🤝 Contributing&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-contributing&quot; id=&quot;user-content--contributing&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;We need help!&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;🎨&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Designers&lt;/span&gt;&amp;nbsp;- Make it beautiful and intuitive&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;💻&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Developers&lt;/span&gt;&amp;nbsp;- Build features and fix bugs&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;📝&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Writers&lt;/span&gt;&amp;nbsp;- Documentation and tutorials&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;🧪&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Testers&lt;/span&gt;&amp;nbsp;- Break things and report issues&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;🌍&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Translators&lt;/span&gt;&amp;nbsp;- Make it accessible worldwide&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;See&amp;nbsp;&lt;a href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/CONTRIBUTING.md&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;CONTRIBUTING.md&lt;/a&gt;&amp;nbsp;for details.&lt;/span&gt;&lt;/p&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Quick Contribution Ideas&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: Quick Contribution Ideas&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#quick-contribution-ideas&quot; id=&quot;user-content-quick-contribution-ideas&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Good First Issues:&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Implement basic chat UI&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Add emoji picker&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Create user profile cards&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Write unit tests for Hamming codes&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Design a logo&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Advanced Challenges:&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Optimize WebRTC connection management&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Implement efficient gossip protocol&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Build NAT traversal fallback system&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Create mobile-responsive layouts&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Write comprehensive protocol tests&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🌟 Why This Matters&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🌟 Why This Matters&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-why-this-matters&quot; id=&quot;user-content--why-this-matters&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;The Problem&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: The Problem&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#the-problem&quot; id=&quot;user-content-the-problem&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Modern social media is broken:&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Censorship&lt;/span&gt;&amp;nbsp;- Platforms ban users for arbitrary reasons&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Manipulation&lt;/span&gt;&amp;nbsp;- Algorithms optimize for engagement, not truth&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Privacy violations&lt;/span&gt;&amp;nbsp;- Your data is the product&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Monopolies&lt;/span&gt;&amp;nbsp;- A handful of companies control discourse&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deplatforming&lt;/span&gt;&amp;nbsp;- One ban = locked out of digital life&lt;/li&gt;&lt;/ul&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;The Solution&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: The Solution&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#the-solution&quot; id=&quot;user-content-the-solution&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Take back control:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Own your data&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Own your identity&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Own your connections&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Own your platform&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;No company can:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Ban you&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Censor you&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Mine your data&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Manipulate your feed&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Sell your attention&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🎓 Inspiration&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🎓 Inspiration&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-inspiration&quot; id=&quot;user-content--inspiration&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;This project stands on the shoulders of giants:&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;John Sokol&lt;/span&gt;&amp;nbsp;- Original vision for P2P social networking&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Jack Dorsey&lt;/span&gt;&amp;nbsp;- Bluesky initiative&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Gun.js&lt;/span&gt;&amp;nbsp;- Graph database synchronization&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IPFS&lt;/span&gt;&amp;nbsp;- Content-addressed storage&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;WebTorrent&lt;/span&gt;&amp;nbsp;- P2P in the browser&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Nostr&lt;/span&gt;&amp;nbsp;- Minimal censorship-resistant protocol&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;⚖️ Philosophy&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: ⚖️ Philosophy&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#%EF%B8%8F-philosophy&quot; id=&quot;user-content-️-philosophy&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Core Principles&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: Core Principles&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#core-principles&quot; id=&quot;user-content-core-principles&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ol dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;User Sovereignty&lt;/span&gt;&amp;nbsp;- You own your data and identity&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Simplicity&lt;/span&gt;&amp;nbsp;- Technology should be understandable&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Openness&lt;/span&gt;&amp;nbsp;- Code and protocols are public&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Resilience&lt;/span&gt;&amp;nbsp;- No single point of failure&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Freedom&lt;/span&gt;&amp;nbsp;- Communicate without permission&lt;/li&gt;&lt;/ol&gt;&lt;/h2&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Non-Goals&lt;/h3&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: Non-Goals&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#non-goals&quot; id=&quot;user-content-non-goals&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;❌ Anonymity (use Tor for that)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;❌ Perfect privacy (use Signal for that)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;❌ Scalability to billions (use BitTorrent for that)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;❌ Professional polish (we&#39;ll get there)&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;We&#39;re building a&amp;nbsp;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;tool&lt;/em&gt;, not a&amp;nbsp;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;product&lt;/em&gt;.&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;📊 Comparison&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 📊 Comparison&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-comparison&quot; id=&quot;user-content--comparison&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;markdown-accessiblity-table data-catalyst=&quot;&quot; style=&quot;box-sizing: border-box; display: block; font-size: 16px; font-weight: 400;&quot;&gt;&lt;table style=&quot;border-collapse: collapse; border-spacing: 0px; display: block; font-variant-numeric: tabular-nums; margin-bottom: 16px; margin-top: 0px; max-width: 100%; overflow: auto; width: max-content;&quot;&gt;&lt;thead style=&quot;box-sizing: border-box;&quot;&gt;&lt;tr style=&quot;border-top: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box;&quot;&gt;&lt;th style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Feature&lt;/th&gt;&lt;th style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;P2P Social&lt;/th&gt;&lt;th style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Facebook&lt;/th&gt;&lt;th style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Mastodon&lt;/th&gt;&lt;th style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Nostr&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;&lt;tr style=&quot;border-top: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Censorship Resistant&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;❌&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Partial&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #151b23; border-top: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;No Servers&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;❌&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;❌&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅*&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-top: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Free Hosting&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;❌&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Partial&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #151b23; border-top: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Open Source&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;❌&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-top: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Browser-Only&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Partial&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #151b23; border-top: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Data Redundancy&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;❌&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;❌&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-top: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;E2E Encryption&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;Partial&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;td style=&quot;border-color: rgb(61, 68, 77); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1.11111px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;✅&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/markdown-accessiblity-table&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;* Nostr uses relay servers, not fully P2P&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🐛 Known Issues&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🐛 Known Issues&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-known-issues&quot; id=&quot;user-content--known-issues&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Current Limitations:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;g-emoji alias=&quot;warning&quot; class=&quot;g-emoji&quot; style=&quot;box-sizing: border-box; display: inline-block; font-family: &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 1.25em; line-height: 1; min-width: 1ch; vertical-align: -0.075em;&quot;&gt;⚠️&lt;/g-emoji&gt;&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Bootstrap problem&lt;/span&gt;&amp;nbsp;- Need seed peers for first users&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;g-emoji alias=&quot;warning&quot; class=&quot;g-emoji&quot; style=&quot;box-sizing: border-box; display: inline-block; font-family: &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 1.25em; line-height: 1; min-width: 1ch; vertical-align: -0.075em;&quot;&gt;⚠️&lt;/g-emoji&gt;&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;NAT traversal&lt;/span&gt;&amp;nbsp;- Some networks require TURN servers&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;g-emoji alias=&quot;warning&quot; class=&quot;g-emoji&quot; style=&quot;box-sizing: border-box; display: inline-block; font-family: &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 1.25em; line-height: 1; min-width: 1ch; vertical-align: -0.075em;&quot;&gt;⚠️&lt;/g-emoji&gt;&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Data persistence&lt;/span&gt;&amp;nbsp;- Content disappears if all peers offline&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;g-emoji alias=&quot;warning&quot; class=&quot;g-emoji&quot; style=&quot;box-sizing: border-box; display: inline-block; font-family: &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 1.25em; line-height: 1; min-width: 1ch; vertical-align: -0.075em;&quot;&gt;⚠️&lt;/g-emoji&gt;&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Discovery&lt;/span&gt;&amp;nbsp;- Hard to find new users without directory&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;g-emoji alias=&quot;warning&quot; class=&quot;g-emoji&quot; style=&quot;box-sizing: border-box; display: inline-block; font-family: &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 1.25em; line-height: 1; min-width: 1ch; vertical-align: -0.075em;&quot;&gt;⚠️&lt;/g-emoji&gt;&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mobile&lt;/span&gt;&amp;nbsp;- WebRTC support varies on mobile browsers&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;We&#39;re working on all of these!&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;📜 License&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 📜 License&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-license&quot; id=&quot;user-content--license&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MIT License&lt;/span&gt;&amp;nbsp;- Do whatever you want with this code.&lt;/p&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; display: flex; font-size: 16px; font-weight: 400; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;Copyright (c) 2024 P2P Social Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software to use, modify, distribute, and sell without restriction.

See LICENSE file for full terms.
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;Copyright (c) 2024 P2P Social Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software to use, modify, distribute, and sell without restriction.

See LICENSE file for full terms.&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🔗 Links&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🔗 Links&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-links&quot; id=&quot;user-content--links&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Website:&lt;/span&gt;&amp;nbsp;[Coming Soon]&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;GitHub:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;https://github.com/p2p-social/p2p-social&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;https://github.com/p2p-social/p2p-social&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Docs:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;https://docs.p2p-social.org/&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;https://docs.p2p-social.org&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Discord:&lt;/span&gt;&amp;nbsp;[Coming Soon]&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Twitter:&lt;/span&gt;&amp;nbsp;[Coming Soon]&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;🙏 Acknowledgments&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 🙏 Acknowledgments&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-acknowledgments&quot; id=&quot;user-content--acknowledgments&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Built with ❤️ by developers who believe the internet should be free and open.&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Special Thanks:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;John Sokol for the original vision&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;The WebRTC team at Google&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Firebase for generous free tier&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;GitHub for free hosting&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Every contributor who makes this possible&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-size: 16px; font-weight: 400; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;💬 Get Involved&lt;/h2&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: 💬 Get Involved&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/README-old.md#-get-involved&quot; id=&quot;user-content--get-involved&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Join the conversation:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;💬&amp;nbsp;&lt;a href=&quot;https://github.com/p2p-social/p2p-social/discussions&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;GitHub Discussions&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;🐛&amp;nbsp;&lt;a href=&quot;https://github.com/p2p-social/p2p-social/issues&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;Report Issues&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;🔧&amp;nbsp;&lt;a href=&quot;https://github.com/p2p-social/p2p-social/pulls&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;Submit PRs&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;📧 Email:&amp;nbsp;&lt;a href=&quot;mailto:hello@p2p-social.org&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;hello@p2p-social.org&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Let&#39;s build the social network we actually want.&lt;/span&gt;&lt;/p&gt;&lt;/h2&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-top: 0px !important; position: relative;&quot;&gt;&lt;h1 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;P2P Social Platform Architecture&lt;/h1&gt;&lt;a aria-label=&quot;Permalink: P2P Social Platform Architecture&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#p2p-social-platform-architecture&quot; id=&quot;user-content-p2p-social-platform-architecture&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 25.3299px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Build the Uncensorable Social Network&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Build the Uncensorable Social Network&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#build-the-uncensorable-social-network&quot; id=&quot;user-content-build-the-uncensorable-social-network&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote style=&quot;background-color: #0d1117; border-left: 3.33333px solid rgb(61, 68, 77); box-sizing: border-box; color: #9198a1; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin: 0px 0px 16px; padding: 0px 1em;&quot;&gt;&lt;p dir=&quot;auto&quot; style=&quot;box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&quot;I just want to discuss news articles with my friends without some algorithm deciding what I can see.&quot;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;The Problem&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: The Problem&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#the-problem&quot; id=&quot;user-content-the-problem&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Modern social platforms have become censorship bottlenecks:&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Content filtered by opaque algorithms&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Users banned for sharing legitimate content&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Platforms prioritize engagement over user intent&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Central servers = central points of failure and control&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;We can do better.&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Architecture Overview&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Architecture Overview&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#architecture-overview&quot; id=&quot;user-content-architecture-overview&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;This is a&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;serverless peer-to-peer social platform&lt;/span&gt;&amp;nbsp;that runs entirely in browser tabs, with zero backend infrastructure costs and zero ability for platforms to censor content.&lt;/p&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Three Simple Components&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Three Simple Components&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#three-simple-components&quot; id=&quot;user-content-three-simple-components&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;┌─────────────────┐
│  GitHub Pages   │  Static HTML/JS/CSS
│  (Free Hosting) │  Unlimited bandwidth
└────────┬────────┘
         │
         ↓
┌─────────────────┐
│    Firebase     │  WebRTC Signaling only
│   (Matchmaker)  │  Peer discovery
└────────┬────────┘
         │
         ↓
┌─────────────────┐
│  Browser Tabs   │  Direct P2P connections
│   (The Network) │  Data storage &amp;amp; routing
└─────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;┌─────────────────┐
│  GitHub Pages   │  Static HTML/JS/CSS
│  (Free Hosting) │  Unlimited bandwidth
└────────┬────────┘
         │
         ↓
┌─────────────────┐
│    Firebase     │  WebRTC Signaling only
│   (Matchmaker)  │  Peer discovery
└────────┬────────┘
         │
         ↓
┌─────────────────┐
│  Browser Tabs   │  Direct P2P connections
│   (The Network) │  Data storage &amp;amp; routing
└─────────────────┘&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Key Principle&lt;/span&gt;: After initial handshake,&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;all data flows peer-to-peer&lt;/span&gt;. Firebase never sees your content.&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Technical Components&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Technical Components&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#technical-components&quot; id=&quot;user-content-technical-components&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;1. Static Frontend (GitHub Pages)&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: 1. Static Frontend (GitHub Pages)&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#1-static-frontend-github-pages&quot; id=&quot;user-content-1-static-frontend-github-pages&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;What it does:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Serves the single-page application&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Zero server costs&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Distributed via GitHub&#39;s CDN&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Instant deployment via&amp;nbsp;&lt;code style=&quot;background-color: rgba(101, 108, 118, 0.2); border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space-collapse: break-spaces;&quot;&gt;git push&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Technologies:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Pure JavaScript (or React/Vue/Svelte)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;IndexedDB for local storage (5MB+ persistent)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;WebRTC Data Channels&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Web Crypto API for encryption&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Files:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;/index.html          # Entry point
/app.js             # Main application logic
/p2p-network.js     # WebRTC mesh management
/storage.js         # Local data &amp;amp; Hamming codes
/crypto.js          # Encryption utilities
/ui.js              # User interface
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;/index.html          # Entry point
/app.js             # Main application logic
/p2p-network.js     # WebRTC mesh management
/storage.js         # Local data &amp;amp; Hamming codes
/crypto.js          # Encryption utilities
/ui.js              # User interface&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;2. Signaling Service (Firebase)&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: 2. Signaling Service (Firebase)&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#2-signaling-service-firebase&quot; id=&quot;user-content-2-signaling-service-firebase&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;What it does:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Helps peers find each other&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Exchanges WebRTC handshake data (SDP/ICE)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Maintains peer presence/availability&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Never sees actual content&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Firebase Services Used:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Realtime Database&lt;/span&gt;: Peer presence &amp;amp; signaling&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Authentication&lt;/span&gt;: Optional user identity&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Hosting&lt;/span&gt;: Alternative to GitHub Pages&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Data Structure:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;highlight highlight-source-json notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;{
  &lt;span class=&quot;pl-ent&quot; style=&quot;box-sizing: border-box; color: #7ee787;&quot;&gt;&quot;peers&quot;&lt;/span&gt;: {
    &lt;span class=&quot;pl-ent&quot; style=&quot;box-sizing: border-box; color: #7ee787;&quot;&gt;&quot;peer_id_123&quot;&lt;/span&gt;: {
      &lt;span class=&quot;pl-ent&quot; style=&quot;box-sizing: border-box; color: #7ee787;&quot;&gt;&quot;online&quot;&lt;/span&gt;: &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;true&lt;/span&gt;,
      &lt;span class=&quot;pl-ent&quot; style=&quot;box-sizing: border-box; color: #7ee787;&quot;&gt;&quot;lastSeen&quot;&lt;/span&gt;: &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;1700000000&lt;/span&gt;,
      &lt;span class=&quot;pl-ent&quot; style=&quot;box-sizing: border-box; color: #7ee787;&quot;&gt;&quot;offer&quot;&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&lt;span class=&quot;pl-pds&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;&lt;/span&gt;...&lt;span class=&quot;pl-pds&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;,
      &lt;span class=&quot;pl-ent&quot; style=&quot;box-sizing: border-box; color: #7ee787;&quot;&gt;&quot;answer&quot;&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&lt;span class=&quot;pl-pds&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;&lt;/span&gt;...&lt;span class=&quot;pl-pds&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    }
  },
  &lt;span class=&quot;pl-ent&quot; style=&quot;box-sizing: border-box; color: #7ee787;&quot;&gt;&quot;rooms&quot;&lt;/span&gt;: {
    &lt;span class=&quot;pl-ent&quot; style=&quot;box-sizing: border-box; color: #7ee787;&quot;&gt;&quot;room_id_456&quot;&lt;/span&gt;: {
      &lt;span class=&quot;pl-ent&quot; style=&quot;box-sizing: border-box; color: #7ee787;&quot;&gt;&quot;members&quot;&lt;/span&gt;: [&lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&lt;span class=&quot;pl-pds&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;&lt;/span&gt;peer_id_123&lt;span class=&quot;pl-pds&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&lt;span class=&quot;pl-pds&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;&lt;/span&gt;peer_id_789&lt;span class=&quot;pl-pds&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;]
    }
  }
}&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;{
  &amp;quot;peers&amp;quot;: {
    &amp;quot;peer_id_123&amp;quot;: {
      &amp;quot;online&amp;quot;: true,
      &amp;quot;lastSeen&amp;quot;: 1700000000,
      &amp;quot;offer&amp;quot;: &amp;quot;...&amp;quot;,
      &amp;quot;answer&amp;quot;: &amp;quot;...&amp;quot;
    }
  },
  &amp;quot;rooms&amp;quot;: {
    &amp;quot;room_id_456&amp;quot;: {
      &amp;quot;members&amp;quot;: [&amp;quot;peer_id_123&amp;quot;, &amp;quot;peer_id_789&amp;quot;]
    }
  }
}&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Cost:&lt;/span&gt;&amp;nbsp;Free tier supports ~100 concurrent users, scales affordably.&lt;/p&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;3. P2P Network (WebRTC)&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: 3. P2P Network (WebRTC)&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#3-p2p-network-webrtc&quot; id=&quot;user-content-3-p2p-network-webrtc&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;What it does:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Direct browser-to-browser data transfer&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Mesh network topology&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Content distribution&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Zero bandwidth costs (after handshake)&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Connection Flow:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;1. Peer A loads app from GitHub Pages
2. Connects to Firebase for signaling
3. Publishes presence &amp;amp; connection offer
4. Peer B receives offer via Firebase
5. Sends answer back through Firebase
6. WebRTC connection established
7. Firebase no longer involved
8. All data flows directly A ↔ B
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;1. Peer A loads app from GitHub Pages
2. Connects to Firebase for signaling
3. Publishes presence &amp;amp; connection offer
4. Peer B receives offer via Firebase
5. Sends answer back through Firebase
6. WebRTC connection established
7. Firebase no longer involved
8. All data flows directly A ↔ B&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mesh Topology:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;    [User A] ←→ [User B]
       ↕           ↕
    [User C] ←→ [User D]
       ↕           ↕
    [User E] ←→ [User F]
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;    [User A] ←→ [User B]
       ↕           ↕
    [User C] ←→ [User D]
       ↕           ↕
    [User E] ←→ [User F]&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Each user maintains 3-6 active connections for redundancy.&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Data Storage &amp;amp; Redundancy&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Data Storage &amp;amp; Redundancy&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#data-storage--redundancy&quot; id=&quot;user-content-data-storage--redundancy&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;The Challenge&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: The Challenge&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#the-challenge&quot; id=&quot;user-content-the-challenge&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Browser tabs can close at any time. How do we keep data available?&lt;/p&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Solution: Distributed Storage with Hamming Codes&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Solution: Distributed Storage with Hamming Codes&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#solution-distributed-storage-with-hamming-codes&quot; id=&quot;user-content-solution-distributed-storage-with-hamming-codes&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Hamming (7,4) Error Correction:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Take 1 file, split into 4 chunks&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Generate 3 parity chunks (XOR operations)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Distribute 7 chunks across 7 peers&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Can lose ANY 2 chunks and still recover file&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Minimal overhead (75% efficiency)&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Example:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;Original File (400 KB)
  ↓
Split into 4 chunks (100 KB each)
  D1, D2, D3, D4
  ↓
Generate 3 parity chunks
  P1 = D1 ⊕ D2 ⊕ D3
  P2 = D1 ⊕ D2 ⊕ D4
  P3 = D1 ⊕ D3 ⊕ D4
  ↓
Distribute 7 chunks (D1-D4, P1-P3) to 7 peers
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;Original File (400 KB)
  ↓
Split into 4 chunks (100 KB each)
  D1, D2, D3, D4
  ↓
Generate 3 parity chunks
  P1 = D1 ⊕ D2 ⊕ D3
  P2 = D1 ⊕ D2 ⊕ D4
  P3 = D1 ⊕ D3 ⊕ D4
  ↓
Distribute 7 chunks (D1-D4, P1-P3) to 7 peers&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Recovery:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;If Peer holding D2 goes offline&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Any 6 remaining peers can reconstruct D2&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;System automatically detects and repairs&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Implementation:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;highlight highlight-source-js notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// Simplified Hamming encoding&lt;/span&gt;
&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;encodeHamming&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;splitIntoChunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;d1&lt;/span&gt;: &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;d2&lt;/span&gt;: &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;d3&lt;/span&gt;: &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;d4&lt;/span&gt;: &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;p1&lt;/span&gt;: &lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;xor&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;p2&lt;/span&gt;: &lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;xor&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;p3&lt;/span&gt;: &lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;xor&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;decodeHamming&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// Detect missing chunks&lt;/span&gt;
  &lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// Reconstruct from available data&lt;/span&gt;
  &lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// Return complete file&lt;/span&gt;
&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;// Simplified Hamming encoding
function encodeHamming(data) {
  const chunks = splitIntoChunks(data, 4);
  return {
    d1: chunks[0],
    d2: chunks[1],
    d3: chunks[2],
    d4: chunks[3],
    p1: xor(chunks[0], chunks[1], chunks[2]),
    p2: xor(chunks[0], chunks[1], chunks[3]),
    p3: xor(chunks[0], chunks[2], chunks[3])
  };
}

function decodeHamming(chunks) {
  // Detect missing chunks
  // Reconstruct from available data
  // Return complete file
}&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Storage Layers&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Storage Layers&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#storage-layers&quot; id=&quot;user-content-storage-layers&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1. Hot Storage (RAM - SessionStorage)&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Active content in memory&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Multi-GB capacity&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Lost when tab closes&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2. Warm Storage (IndexedDB)&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;5MB+ persistent storage&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;User&#39;s own content + frequently accessed&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Survives browser restart&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3. Cold Storage (Distributed Network)&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Content distributed across peer network&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Hamming-encoded for redundancy&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Reconstructed on demand&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Content Addressing&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Content Addressing&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#content-addressing&quot; id=&quot;user-content-content-addressing&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Every piece of content has a unique hash-based address:&lt;/p&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;p2p://QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/post
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;p2p://QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/post&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Benefits:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Content-addressable (hash = verification)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Deduplication (same hash = same content)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Immutable (can&#39;t change without changing hash)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Censor-resistant (no single location)&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Discovery:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;highlight highlight-source-js notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// User wants to view a post&lt;/span&gt;
&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;contentHash&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// Query connected peers&lt;/span&gt;
&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;peers&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;getConnectedPeers&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;peer&lt;/span&gt; &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;peers&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;peer&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;hasContent&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;contentHash&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;peer&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;requestChunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;contentHash&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;content&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;reconstructFromChunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;displayContent&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;// User wants to view a post
const contentHash = &amp;quot;QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG&amp;quot;;

// Query connected peers
const peers = getConnectedPeers();
for (const peer of peers) {
  if (peer.hasContent(contentHash)) {
    const chunks = await peer.requestChunks(contentHash);
    const content = reconstructFromChunks(chunks);
    displayContent(content);
    break;
  }
}&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Security Model&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Security Model&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#security-model&quot; id=&quot;user-content-security-model&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;1. User Identity&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: 1. User Identity&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#1-user-identity&quot; id=&quot;user-content-1-user-identity&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Public Key Cryptography:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Each user generates Ed25519 keypair&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Public key = user ID&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Private key stored in browser (never shared)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;All posts signed with private key&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;highlight highlight-source-js notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// Generate identity&lt;/span&gt;
&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;keypair&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;crypto&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;subtle&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;generateKey&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;name&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;Ed25519&quot;&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;sign&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;verify&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// Sign content&lt;/span&gt;
&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;signature&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;crypto&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;subtle&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;sign&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;Ed25519&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;keypair&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;privateKey&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;contentBuffer&lt;/span&gt;
&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// Others verify&lt;/span&gt;
&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;isValid&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;crypto&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;subtle&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;verify&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;Ed25519&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;authorPublicKey&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;signature&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;contentBuffer&lt;/span&gt;
&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;// Generate identity
const keypair = await crypto.subtle.generateKey(
  { name: &amp;quot;Ed25519&amp;quot; },
  true,
  [&amp;quot;sign&amp;quot;, &amp;quot;verify&amp;quot;]
);

// Sign content
const signature = await crypto.subtle.sign(
  &amp;quot;Ed25519&amp;quot;,
  keypair.privateKey,
  contentBuffer
);

// Others verify
const isValid = await crypto.subtle.verify(
  &amp;quot;Ed25519&amp;quot;,
  authorPublicKey,
  signature,
  contentBuffer
);&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;2. Content Encryption (Optional)&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: 2. Content Encryption (Optional)&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#2-content-encryption-optional&quot; id=&quot;user-content-2-content-encryption-optional&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;End-to-End Encryption for Private Messages:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Sender encrypts with recipient&#39;s public key&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Only recipient can decrypt&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Network only sees encrypted blobs&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;3. Access Control&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: 3. Access Control&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#3-access-control&quot; id=&quot;user-content-3-access-control&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;No Traditional Auth:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;No passwords&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;No accounts to hack&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;No servers to breach&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Identity = cryptographic key&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Follow Model:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;highlight highlight-source-js notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// Follow a user (store their public key)&lt;/span&gt;
&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;following&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;user_alice&quot;&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;ED25519_PUBLIC_KEY_ALICE&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;user_bob&quot;&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;ED25519_PUBLIC_KEY_BOB&quot;&lt;/span&gt;
&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// Only accept content from followed users&lt;/span&gt;
&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;validatePost&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;authorKey&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;following&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;author&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;authorKey&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;pl-en&quot; style=&quot;box-sizing: border-box; color: #d2a8ff;&quot;&gt;verifySignature&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;authorKey&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;// Follow a user (store their public key)
const following = {
  &amp;quot;user_alice&amp;quot;: &amp;quot;ED25519_PUBLIC_KEY_ALICE&amp;quot;,
  &amp;quot;user_bob&amp;quot;: &amp;quot;ED25519_PUBLIC_KEY_BOB&amp;quot;
};

// Only accept content from followed users
function validatePost(post) {
  const authorKey = following[post.author];
  if (!authorKey) return false;
  return verifySignature(post, authorKey);
}&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;4. Spam/Abuse Prevention&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: 4. Spam/Abuse Prevention&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#4-spamabuse-prevention&quot; id=&quot;user-content-4-spamabuse-prevention&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Computational Proof of Work:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Posts require small PoW (prevents spam)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Configurable difficulty&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Users can ignore low-PoW content&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Web of Trust:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Only see content from followed users&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Or users-of-users (2nd degree)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Block lists shared among trusted peers&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Network Protocols&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Network Protocols&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#network-protocols&quot; id=&quot;user-content-network-protocols&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;1. Peer Discovery Protocol&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: 1. Peer Discovery Protocol&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#1-peer-discovery-protocol&quot; id=&quot;user-content-1-peer-discovery-protocol&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;ANNOUNCE {
  peer_id: &quot;abc123&quot;,
  public_key: &quot;...&quot;,
  capabilities: [&quot;storage&quot;, &quot;relay&quot;],
  timestamp: 1700000000
}

QUERY {
  looking_for: &quot;content_hash_xyz&quot;,
  requester: &quot;peer_abc123&quot;
}

RESPONSE {
  have_content: true,
  chunks: [1, 3, 4, 7],
  peer_id: &quot;def456&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;ANNOUNCE {
  peer_id: &amp;quot;abc123&amp;quot;,
  public_key: &amp;quot;...&amp;quot;,
  capabilities: [&amp;quot;storage&amp;quot;, &amp;quot;relay&amp;quot;],
  timestamp: 1700000000
}

QUERY {
  looking_for: &amp;quot;content_hash_xyz&amp;quot;,
  requester: &amp;quot;peer_abc123&amp;quot;
}

RESPONSE {
  have_content: true,
  chunks: [1, 3, 4, 7],
  peer_id: &amp;quot;def456&amp;quot;
}&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;2. Content Transfer Protocol&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: 2. Content Transfer Protocol&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#2-content-transfer-protocol&quot; id=&quot;user-content-2-content-transfer-protocol&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;REQUEST_CHUNK {
  content_hash: &quot;Qm...&quot;,
  chunk_number: 3,
  requester_sig: &quot;...&quot;
}

SEND_CHUNK {
  content_hash: &quot;Qm...&quot;,
  chunk_number: 3,
  data: &amp;lt;binary&amp;gt;,
  sender_sig: &quot;...&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;REQUEST_CHUNK {
  content_hash: &amp;quot;Qm...&amp;quot;,
  chunk_number: 3,
  requester_sig: &amp;quot;...&amp;quot;
}

SEND_CHUNK {
  content_hash: &amp;quot;Qm...&amp;quot;,
  chunk_number: 3,
  data: &amp;lt;binary&amp;gt;,
  sender_sig: &amp;quot;...&amp;quot;
}&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;3. Gossip Protocol&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: 3. Gossip Protocol&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#3-gossip-protocol&quot; id=&quot;user-content-3-gossip-protocol&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;// New content propagates through network
GOSSIP {
  type: &quot;NEW_POST&quot;,
  content_hash: &quot;Qm...&quot;,
  author: &quot;alice_pubkey&quot;,
  timestamp: 1700000000,
  hops: 2
}

// Peers re-broadcast to their connections
// TTL prevents infinite loops
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;// New content propagates through network
GOSSIP {
  type: &amp;quot;NEW_POST&amp;quot;,
  content_hash: &amp;quot;Qm...&amp;quot;,
  author: &amp;quot;alice_pubkey&amp;quot;,
  timestamp: 1700000000,
  hops: 2
}

// Peers re-broadcast to their connections
// TTL prevents infinite loops&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;User Experience&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: User Experience&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#user-experience&quot; id=&quot;user-content-user-experience&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;First Run&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: First Run&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#first-run&quot; id=&quot;user-content-first-run&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;1. Visit: yourproject.github.io
2. App generates keypair
3. Shows &quot;Your ID: alice_abc123&quot;
4. Connects to Firebase for peer discovery
5. Establishes connections to online peers
6. Ready to post/browse
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;1. Visit: yourproject.github.io
2. App generates keypair
3. Shows &amp;quot;Your ID: alice_abc123&amp;quot;
4. Connects to Firebase for peer discovery
5. Establishes connections to online peers
6. Ready to post/browse&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Posting Content&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Posting Content&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#posting-content&quot; id=&quot;user-content-posting-content&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;1. User writes post
2. Post signed with private key
3. Split into chunks + Hamming encoding
4. Distributed to connected peers
5. Content hash returned as &quot;permalink&quot;
6. Peers gossip about new content
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;1. User writes post
2. Post signed with private key
3. Split into chunks + Hamming encoding
4. Distributed to connected peers
5. Content hash returned as &amp;quot;permalink&amp;quot;
6. Peers gossip about new content&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Browsing Content&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Browsing Content&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#browsing-content&quot; id=&quot;user-content-browsing-content&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;1. See post hashes from followed users
2. Request chunks from peers
3. Reconstruct from Hamming codes
4. Verify signature
5. Display content
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;1. See post hashes from followed users
2. Request chunks from peers
3. Reconstruct from Hamming codes
4. Verify signature
5. Display content&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Following Users&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Following Users&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#following-users&quot; id=&quot;user-content-following-users&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;1. Friend shares their public key (QR code, link, etc)
2. You add to &quot;following&quot; list
3. Network prioritizes content from followed users
4. You help distribute their content
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;1. Friend shares their public key (QR code, link, etc)
2. You add to &amp;quot;following&amp;quot; list
3. Network prioritizes content from followed users
4. You help distribute their content&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Implementation Roadmap&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Implementation Roadmap&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#implementation-roadmap&quot; id=&quot;user-content-implementation-roadmap&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Phase 1: MVP (Weeks 1-4)&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Phase 1: MVP (Weeks 1-4)&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#phase-1-mvp-weeks-1-4&quot; id=&quot;user-content-phase-1-mvp-weeks-1-4&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Basic WebRTC mesh networking&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Firebase signaling setup&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Simple text posts&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Content-addressed storage&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Public key identity&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deliverable:&lt;/span&gt;&amp;nbsp;Two users can chat P2P via browser tabs&lt;/p&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Phase 2: Redundancy (Weeks 5-8)&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Phase 2: Redundancy (Weeks 5-8)&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#phase-2-redundancy-weeks-5-8&quot; id=&quot;user-content-phase-2-redundancy-weeks-5-8&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Hamming (7,4) encoding/decoding&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Chunk distribution protocol&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Automatic reconstruction&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Peer storage management&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Network health monitoring&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deliverable:&lt;/span&gt;&amp;nbsp;Content persists across tab closures&lt;/p&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Phase 3: Social Features (Weeks 9-12)&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Phase 3: Social Features (Weeks 9-12)&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#phase-3-social-features-weeks-9-12&quot; id=&quot;user-content-phase-3-social-features-weeks-9-12&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;User profiles&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Follow/unfollow&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Feed algorithm (chronological)&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Content discovery&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Search&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deliverable:&lt;/span&gt;&amp;nbsp;Basic social network functionality&lt;/p&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Phase 4: Media &amp;amp; Polish (Weeks 13-16)&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Phase 4: Media &amp;amp; Polish (Weeks 13-16)&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#phase-4-media--polish-weeks-13-16&quot; id=&quot;user-content-phase-4-media--polish-weeks-13-16&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Image/video support&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Markdown formatting&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Threading/comments&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Notifications&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Mobile-responsive UI&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deliverable:&lt;/span&gt;&amp;nbsp;Feature-complete social platform&lt;/p&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Phase 5: Advanced Features&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Phase 5: Advanced Features&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#phase-5-advanced-features&quot; id=&quot;user-content-phase-5-advanced-features&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;contains-task-list&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;End-to-end encrypted DMs&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Groups/communities&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Content moderation tools&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Analytics dashboard&lt;/li&gt;&lt;li class=&quot;task-list-item&quot; style=&quot;box-sizing: border-box; list-style-type: none; margin-top: 4px;&quot;&gt;&lt;input aria-label=&quot;Incomplete task&quot; class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; id=&quot;&quot; style=&quot;font: inherit; margin: 0px 0.2em 0.25em -1.4em; overflow: visible; padding: 0px; vertical-align: middle;&quot; type=&quot;checkbox&quot; /&gt;&amp;nbsp;Mobile apps (PWA)&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Technical Considerations&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Technical Considerations&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#technical-considerations&quot; id=&quot;user-content-technical-considerations&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;NAT Traversal&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: NAT Traversal&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#nat-traversal&quot; id=&quot;user-content-nat-traversal&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Problem:&lt;/span&gt;&amp;nbsp;Most users behind NAT/firewall&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Solution:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Use Google&#39;s free STUN servers&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Add TURN servers for worst-case scenarios&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Most modern browsers handle this automatically&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;highlight highlight-source-js notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;configuration&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;iceServers&lt;/span&gt;: &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;urls&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&#39;stun:stun.l.google.com:19302&#39;&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;urls&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&#39;stun:stun1.l.google.com:19302&#39;&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;const configuration = {
  iceServers: [
    { urls: &#39;stun:stun.l.google.com:19302&#39; },
    { urls: &#39;stun:stun1.l.google.com:19302&#39; }
  ]
};&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Bootstrap Problem&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Bootstrap Problem&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#bootstrap-problem&quot; id=&quot;user-content-bootstrap-problem&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Problem:&lt;/span&gt;&amp;nbsp;First user has no peers&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Solution:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Static &quot;seed peers&quot; (always-on tabs in cloud VMs)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Incentivize users to keep tabs open&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Browser extension for persistent background page&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Progressive Web App for mobile persistence&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Scaling&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Scaling&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#scaling&quot; id=&quot;user-content-scaling&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Firebase Free Tier:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;100 simultaneous connections&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;10 GB/month data transfer&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Plenty for signaling&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Beyond Free Tier:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Multiple Firebase projects as backup&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Self-hosted signaling servers (Socket.io)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Alternative services (PeerJS, Gun.js relays)&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Data Retention&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Data Retention&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#data-retention&quot; id=&quot;user-content-data-retention&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Challenge:&lt;/span&gt;&amp;nbsp;All users close tabs&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mitigation:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Users encouraged to export/backup important content&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&quot;Pinning&quot; feature for critical content&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Browser extensions stay alive in background&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Community runs dedicated &quot;archive nodes&quot;&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Getting Started&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Getting Started&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#getting-started&quot; id=&quot;user-content-getting-started&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;For Users&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: For Users&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#for-users&quot; id=&quot;user-content-for-users&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;highlight highlight-source-shell notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; Just visit the site&lt;/span&gt;
https://yourproject.github.io

&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; Or run locally&lt;/span&gt;
git clone https://github.com/yourproject/p2p-social
&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;cd&lt;/span&gt; p2p-social
python -m http.server 8000
&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; Open http://localhost:8000&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;# Just visit the site
https://yourproject.github.io

# Or run locally
git clone https://github.com/yourproject/p2p-social
cd p2p-social
python -m http.server 8000
# Open http://localhost:8000&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;For Developers&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: For Developers&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#for-developers&quot; id=&quot;user-content-for-developers&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;highlight highlight-source-shell notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; Clone repository&lt;/span&gt;
git clone https://github.com/yourproject/p2p-social
&lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;cd&lt;/span&gt; p2p-social

&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; Install dependencies&lt;/span&gt;
npm install

&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; Set up Firebase&lt;/span&gt;
&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; 1. Create Firebase project&lt;/span&gt;
&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; 2. Copy config to src/firebase-config.js&lt;/span&gt;
&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; 3. Enable Realtime Database&lt;/span&gt;

&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; Run development server&lt;/span&gt;
npm run dev

&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box;&quot;&gt;#&lt;/span&gt; Deploy to GitHub Pages&lt;/span&gt;
npm run deploy&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;# Clone repository
git clone https://github.com/yourproject/p2p-social
cd p2p-social

# Install dependencies
npm install

# Set up Firebase
# 1. Create Firebase project
# 2. Copy config to src/firebase-config.js
# 3. Enable Realtime Database

# Run development server
npm run dev

# Deploy to GitHub Pages
npm run deploy&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h3 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;box-sizing: border-box; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;&quot; tabindex=&quot;-1&quot;&gt;Firebase Setup&lt;/h3&gt;&lt;a aria-label=&quot;Permalink: Firebase Setup&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#firebase-setup&quot; id=&quot;user-content-firebase-setup&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;highlight highlight-source-js notranslate position-relative overflow-auto&quot; dir=&quot;auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4; word-break: normal;&quot;&gt;&lt;span class=&quot;pl-c&quot; style=&quot;box-sizing: border-box; color: #9198a1;&quot;&gt;// src/firebase-config.js&lt;/span&gt;
&lt;span class=&quot;pl-k&quot; style=&quot;box-sizing: border-box; color: #ff7b72;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;pl-s1&quot; style=&quot;box-sizing: border-box;&quot;&gt;firebaseConfig&lt;/span&gt; &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;apiKey&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;YOUR_API_KEY&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;authDomain&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;your-project.firebaseapp.com&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;databaseURL&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;https://your-project.firebaseio.com&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;projectId&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;your-project&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;storageBucket&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;your-project.appspot.com&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;messagingSenderId&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;123456789&quot;&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;pl-c1&quot; style=&quot;box-sizing: border-box; color: #79c0ff;&quot;&gt;appId&lt;/span&gt;: &lt;span class=&quot;pl-s&quot; style=&quot;box-sizing: border-box; color: #a5d6ff;&quot;&gt;&quot;YOUR_APP_ID&quot;&lt;/span&gt;
&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pl-kos&quot; style=&quot;box-sizing: border-box;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;// src/firebase-config.js
const firebaseConfig = {
  apiKey: &amp;quot;YOUR_API_KEY&amp;quot;,
  authDomain: &amp;quot;your-project.firebaseapp.com&amp;quot;,
  databaseURL: &amp;quot;https://your-project.firebaseio.com&amp;quot;,
  projectId: &amp;quot;your-project&amp;quot;,
  storageBucket: &amp;quot;your-project.appspot.com&amp;quot;,
  messagingSenderId: &amp;quot;123456789&amp;quot;,
  appId: &amp;quot;YOUR_APP_ID&amp;quot;
};&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Project Structure&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Project Structure&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#project-structure&quot; id=&quot;user-content-project-structure&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #151b23; box-sizing: border-box; color: #f0f6fc; display: flex; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto !important; position: relative !important;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: &amp;quot;Monaspace Neon&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;p2p-social/
├── index.html              # Entry point
├── src/
│   ├── core/
│   │   ├── p2p-network.js  # WebRTC mesh logic
│   │   ├── signaling.js    # Firebase integration
│   │   ├── storage.js      # IndexedDB wrapper
│   │   └── hamming.js      # Error correction codes
│   ├── crypto/
│   │   ├── identity.js     # Key generation
│   │   ├── signing.js      # Content signatures
│   │   └── encryption.js   # E2E encryption
│   ├── protocol/
│   │   ├── messages.js     # Protocol definitions
│   │   ├── gossip.js       # Content propagation
│   │   └── discovery.js    # Peer discovery
│   ├── ui/
│   │   ├── feed.js         # Main feed
│   │   ├── composer.js     # Post composer
│   │   ├── profile.js      # User profiles
│   │   └── settings.js     # Configuration
│   └── utils/
│       ├── hash.js         # Content addressing
│       ├── chunks.js       # Data chunking
│       └── validate.js     # Input validation
├── docs/
│   ├── ARCHITECTURE.md     # This document
│   ├── PROTOCOL.md         # Protocol specification
│   └── API.md              # Developer API
├── tests/
│   ├── unit/              # Unit tests
│   └── integration/       # Integration tests
└── examples/
    ├── simple-chat/       # Basic chat example
    └── file-sharing/      # File sharing demo
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;zeroclipboard-container&quot; style=&quot;animation: auto ease 0s 1 normal none running none; box-sizing: border-box;&quot;&gt;&lt;clipboard-copy aria-label=&quot;Copy&quot; class=&quot;ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center&quot; data-copy-feedback=&quot;Copied!&quot; data-tooltip-direction=&quot;w&quot; role=&quot;button&quot; style=&quot;align-items: center !important; appearance: none; background-color: rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-shadow: none; box-sizing: border-box; color: #4493f8; cursor: pointer; display: flex !important; font-size: 14px; height: 28px; justify-content: center !important; line-height: 20px; margin: 8px !important; padding: 0px !important; position: relative; text-wrap-mode: nowrap; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; user-select: none; vertical-align: middle; width: 28px;&quot; tabindex=&quot;0&quot; value=&quot;p2p-social/
├── index.html              # Entry point
├── src/
│   ├── core/
│   │   ├── p2p-network.js  # WebRTC mesh logic
│   │   ├── signaling.js    # Firebase integration
│   │   ├── storage.js      # IndexedDB wrapper
│   │   └── hamming.js      # Error correction codes
│   ├── crypto/
│   │   ├── identity.js     # Key generation
│   │   ├── signing.js      # Content signatures
│   │   └── encryption.js   # E2E encryption
│   ├── protocol/
│   │   ├── messages.js     # Protocol definitions
│   │   ├── gossip.js       # Content propagation
│   │   └── discovery.js    # Peer discovery
│   ├── ui/
│   │   ├── feed.js         # Main feed
│   │   ├── composer.js     # Post composer
│   │   ├── profile.js      # User profiles
│   │   └── settings.js     # Configuration
│   └── utils/
│       ├── hash.js         # Content addressing
│       ├── chunks.js       # Data chunking
│       └── validate.js     # Input validation
├── docs/
│   ├── ARCHITECTURE.md     # This document
│   ├── PROTOCOL.md         # Protocol specification
│   └── API.md              # Developer API
├── tests/
│   ├── unit/              # Unit tests
│   └── integration/       # Integration tests
└── examples/
    ├── simple-chat/       # Basic chat example
    └── file-sharing/      # File sharing demo&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-copy js-clipboard-copy-icon&quot; data-view-component=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;/svg&gt;&lt;/clipboard-copy&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Contributing&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Contributing&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#contributing&quot; id=&quot;user-content-contributing&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;We need help with:&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Core Development:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;WebRTC optimization&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Hamming code implementation&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Network protocol design&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Performance tuning&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;User Experience:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;UI/UX design&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Mobile responsiveness&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Accessibility&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Documentation&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Infrastructure:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Firebase alternatives&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;TURN server deployment&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Archive nodes&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Testing framework&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;See CONTRIBUTING.md for guidelines&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;FAQ&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: FAQ&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#faq&quot; id=&quot;user-content-faq&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Q: Is this like BitTorrent?&lt;/span&gt;&amp;nbsp;A: Similar concept, but for social networking. Content is distributed across users instead of centralized servers.&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Q: What happens if I close my tab?&lt;/span&gt;&amp;nbsp;A: Content you&#39;ve viewed is cached in other users&#39; browsers. Hamming codes ensure redundancy.&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Q: Can content be deleted?&lt;/span&gt;&amp;nbsp;A: You can stop distributing it, but others may cache it. This is by design (censorship resistance).&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Q: Is this anonymous?&lt;/span&gt;&amp;nbsp;A: Pseudonymous. Your public key is your identity, but not linked to real identity unless you share it.&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Q: What about illegal content?&lt;/span&gt;&amp;nbsp;A: Users control what they store/distribute. You&#39;re not legally liable for cached chunks of encrypted data you can&#39;t read. Block malicious users via web-of-trust.&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Q: How fast is it?&lt;/span&gt;&amp;nbsp;A: Initial connection takes 1-2 seconds. After that, direct P2P is often faster than traditional servers.&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Q: Mobile support?&lt;/span&gt;&amp;nbsp;A: Yes! WebRTC works in mobile browsers. PWA support coming.&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Q: Can governments block this?&lt;/span&gt;&amp;nbsp;A: They can block Firebase, but the app can use alternative signaling servers. Once connected, traffic is P2P and harder to filter.&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Related Projects&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Related Projects&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#related-projects&quot; id=&quot;user-content-related-projects&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Gun.js&lt;/span&gt;: Graph database with P2P sync&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IPFS&lt;/span&gt;: Distributed file system&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Nostr&lt;/span&gt;: Minimal protocol for censorship-resistant social&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Scuttlebutt&lt;/span&gt;: Offline-first P2P social network&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Matrix&lt;/span&gt;: Federated messaging&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mastodon&lt;/span&gt;: Federated microblogging&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;How we&#39;re different:&lt;/span&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;Zero infrastructure (GitHub + Firebase free tiers)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Pure browser-based (no installs)&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Hamming redundancy for reliability&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Focus on simplicity&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;License&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: License&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#license&quot; id=&quot;user-content-license&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;MIT License - Build whatever you want with this.&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Contact&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Contact&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#contact&quot; id=&quot;user-content-contact&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;GitHub:&amp;nbsp;&lt;a href=&quot;https://github.com/yourproject/p2p-social&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;https://github.com/yourproject/p2p-social&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Matrix: #p2p-social:matrix.org&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;Email:&amp;nbsp;&lt;a href=&quot;mailto:hello@p2p-social.org&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #4493f8; text-underline-offset: 0.2rem;&quot;&gt;hello@p2p-social.org&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Let&#39;s build the uncensorable web.&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;background: rgb(61, 68, 77); border: 0px; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; height: 0.25em; margin: 24px 0px; padding: 0px;&quot; /&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;h2 class=&quot;heading-element&quot; dir=&quot;auto&quot; style=&quot;border-bottom: 1.11111px solid rgba(61, 68, 77, 0.7); box-sizing: border-box; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;Acknowledgments&lt;/h2&gt;&lt;a aria-label=&quot;Permalink: Acknowledgments&quot; class=&quot;anchor&quot; href=&quot;https://github.com/P2P-Social/P2PSocial/blob/main/ARCHITECTURE.md#acknowledgments&quot; id=&quot;user-content-acknowledgments&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #4493f8; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 19.1319px; transform: translateY(calc(-50% - 0.3rem)); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Inspired by John Sokol&#39;s vision of peer-to-peer social networking and decades of distributed systems research.&lt;/p&gt;&lt;p dir=&quot;auto&quot; style=&quot;background-color: #0d1117; box-sizing: border-box; color: #f0f6fc; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 0px !important; margin-top: 0px;&quot;&gt;Special thanks to the WebRTC, IPFS, and Gun.js communities for pioneering this space.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/7259387295981770303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/7259387295981770303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/7259387295981770303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/7259387295981770303'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/p2p-social.html' title='P2P Social - The Uncensorable Social Network'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-3484706096479681380</id><published>2025-11-22T15:16:00.000-08:00</published><updated>2025-11-22T15:16:00.387-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="claude"/><category scheme="http://www.blogger.com/atom/ns#" term="games"/><title type='text'>Vector Kong</title><content type='html'>   &lt;style&gt;
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            background: #000;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            font-family: monospace;
            overflow: hidden;
        }
        #gameCanvas {
            border: 2px solid #0ff;
            box-shadow: 0 0 20px rgba(0, 255, 255, 0.3);
        }
        #instructions {
            position: absolute;
            bottom: 20px;
            color: #0ff;
            font-size: 14px;
            text-align: center;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;canvas id=&quot;gameCanvas&quot; width=&quot;560&quot; height=&quot;720&quot;&gt;&lt;/canvas&gt;
    &lt;div id=&quot;instructions&quot;&gt;Arrow Keys: Move | Space: Jump | Enter: Start • Levels get harder, music speeds up!&lt;/div&gt;
    
    &lt;script&gt;
const canvas = document.getElementById(&#39;gameCanvas&#39;);
const ctx = canvas.getContext(&#39;2d&#39;);

// ============ AUDIO SYSTEM ============
let audioContext = null;
let masterGain = null;
let musicGain = null;
let sfxGain = null;
let isMusicPlaying = false;

let BPM = 140;
let beatDuration = 60 / BPM;
let bpmIncreaseTimer = 0;
let bpmFlashTimer = 0;
const BPM_INCREASE_INTERVAL = 30000; // Increase BPM every 30 seconds
const BPM_INCREMENT = 5;
const MAX_BPM = 200;

// Note frequencies for baseline
const notes = {
    &#39;ds3&#39;: 155.56,
    &#39;f3&#39;: 174.61,
    &#39;fs3&#39;: 185.00,
    &#39;gs3&#39;: 207.65,
    &#39;as3&#39;: 233.08,
    &#39;b3&#39;: 246.94
};

// Initialize audio context on first user interaction
function initAudio() {
    if (audioContext) return;
    audioContext = new (window.AudioContext || window.webkitAudioContext)();
    
    masterGain = audioContext.createGain();
    masterGain.gain.value = 0.5;
    masterGain.connect(audioContext.destination);
    
    musicGain = audioContext.createGain();
    musicGain.gain.value = 0.3;
    musicGain.connect(masterGain);
    
    sfxGain = audioContext.createGain();
    sfxGain.gain.value = 0.6;
    sfxGain.connect(masterGain);
}

// FM Synthesis for baseline
function playFM(time, freq, duration) {
    if (!audioContext) return;
    
    const carrier = audioContext.createOscillator();
    carrier.type = &#39;sine&#39;;
    carrier.frequency.setValueAtTime(freq, time);
    
    const modulator = audioContext.createOscillator();
    modulator.type = &#39;sine&#39;;
    modulator.frequency.setValueAtTime(freq * 2, time);
    
    const modGain = audioContext.createGain();
    modGain.gain.setValueAtTime(freq * 1.5, time);
    
    const carrierGain = audioContext.createGain();
    carrierGain.gain.setValueAtTime(0.3, time);
    carrierGain.gain.exponentialRampToValueAtTime(0.01, time + duration * 0.9);
    
    modulator.connect(modGain);
    modGain.connect(carrier.frequency);
    carrier.connect(carrierGain);
    carrierGain.connect(musicGain);
    
    modulator.start(time);
    modulator.stop(time + duration);
    carrier.start(time);
    carrier.stop(time + duration);
}

// Kick drum
function playKick(time, amp = 0.5) {
    if (!audioContext) return;
    
    const osc = audioContext.createOscillator();
    const gain = audioContext.createGain();
    
    osc.type = &#39;sine&#39;;
    osc.frequency.setValueAtTime(150, time);
    osc.frequency.exponentialRampToValueAtTime(50, time + 0.05);
    osc.frequency.exponentialRampToValueAtTime(30, time + 0.1);
    
    gain.gain.setValueAtTime(amp, time);
    gain.gain.exponentialRampToValueAtTime(0.01, time + 0.3);
    
    osc.connect(gain);
    gain.connect(musicGain);
    
    osc.start(time);
    osc.stop(time + 0.35);
}

// Snare drum
function playSnare(time, amp = 0.4) {
    if (!audioContext) return;
    
    // Noise
    const bufferSize = audioContext.sampleRate * 0.2;
    const buffer = audioContext.createBuffer(1, bufferSize, audioContext.sampleRate);
    const data = buffer.getChannelData(0);
    for (let i = 0; i &lt; bufferSize; i++) {
        data[i] = Math.random() * 2 - 1;
    }
    
    const noise = audioContext.createBufferSource();
    noise.buffer = buffer;
    
    const noiseFilter = audioContext.createBiquadFilter();
    noiseFilter.type = &#39;highpass&#39;;
    noiseFilter.frequency.value = 1000;
    
    const noiseGain = audioContext.createGain();
    noiseGain.gain.setValueAtTime(amp * 0.8, time);
    noiseGain.gain.exponentialRampToValueAtTime(0.01, time + 0.15);
    
    noise.connect(noiseFilter);
    noiseFilter.connect(noiseGain);
    noiseGain.connect(musicGain);
    
    // Body
    const osc = audioContext.createOscillator();
    osc.type = &#39;triangle&#39;;
    osc.frequency.setValueAtTime(180, time);
    osc.frequency.exponentialRampToValueAtTime(100, time + 0.05);
    
    const oscGain = audioContext.createGain();
    oscGain.gain.setValueAtTime(amp * 0.5, time);
    oscGain.gain.exponentialRampToValueAtTime(0.01, time + 0.1);
    
    osc.connect(oscGain);
    oscGain.connect(musicGain);
    
    noise.start(time);
    noise.stop(time + 0.2);
    osc.start(time);
    osc.stop(time + 0.15);
}

// Baseline pattern
function baseline(startTime) {
    const pattern = [
        { note: &#39;ds3&#39;, time: 0, dur: 1.5 },
        { note: &#39;ds3&#39;, time: 1.5, dur: 0.5 },
        { note: &#39;f3&#39;, time: 2, dur: 0.5 },
        { note: &#39;fs3&#39;, time: 2.5, dur: 1 },
        { note: &#39;b3&#39;, time: 3.5, dur: 1 },
        { note: &#39;as3&#39;, time: 4.5, dur: 3.5 },
        { note: &#39;gs3&#39;, time: 8, dur: 1.5 },
        { note: &#39;gs3&#39;, time: 9.5, dur: 0.5 },
        { note: &#39;b3&#39;, time: 10, dur: 0.5 },
        { note: &#39;as3&#39;, time: 10.5, dur: 1 },
        { note: &#39;fs3&#39;, time: 11.5, dur: 1 },
        { note: &#39;ds3&#39;, time: 12.5, dur: 3.5 }
    ];
    
    pattern.forEach(p =&gt; {
        playFM(startTime + p.time * beatDuration, notes[p.note], p.dur * beatDuration);
    });
    
    return startTime + 16 * beatDuration;
}

// Drums pattern
function drums(startTime) {
    const pattern = [
        { type: &#39;kick&#39;, time: 0 },
        { type: &#39;snare&#39;, time: 1 },
        { type: &#39;kick&#39;, time: 2.5 },
        { type: &#39;snare&#39;, time: 3 },
        { type: &#39;kick&#39;, time: 4 },
        { type: &#39;snare&#39;, time: 5 },
        { type: &#39;kick&#39;, time: 6.5 },
        { type: &#39;snare&#39;, time: 7 }
    ];
    
    pattern.forEach(p =&gt; {
        if (p.type === &#39;kick&#39;) {
            playKick(startTime + p.time * beatDuration);
        } else {
            playSnare(startTime + p.time * beatDuration);
        }
    });
    
    return startTime + 8 * beatDuration;
}

// Music loops
let baselineTimeout = null;
let drumsTimeout = null;

function increaseBPM() {
    if (BPM &lt; MAX_BPM) {
        BPM += BPM_INCREMENT;
        beatDuration = 60 / BPM;
        bpmFlashTimer = 60; // Flash for 1 second
        console.log(&#39;BPM increased to:&#39;, BPM);
    }
}

function startBaselineLoop() {
    if (!isMusicPlaying || !audioContext) return;
    const endTime = baseline(audioContext.currentTime);
    baselineTimeout = setTimeout(startBaselineLoop, (endTime - audioContext.currentTime) * 1000);
}

function startDrumsLoop() {
    if (!isMusicPlaying || !audioContext) return;
    const endTime = drums(audioContext.currentTime);
    drumsTimeout = setTimeout(startDrumsLoop, (endTime - audioContext.currentTime) * 1000);
}

function startMusic() {
    if (!audioContext) initAudio();
    if (isMusicPlaying) return;
    isMusicPlaying = true;
    BPM = 140; // Reset BPM when starting
    beatDuration = 60 / BPM;
    bpmIncreaseTimer = Date.now();
    startBaselineLoop();
    startDrumsLoop();
}

function stopMusic() {
    isMusicPlaying = false;
    clearTimeout(baselineTimeout);
    clearTimeout(drumsTimeout);
}

// ============ SOUND EFFECTS ============

// Hammer hit - heavy drum strike
function playHammerHit() {
    if (!audioContext) return;
    const time = audioContext.currentTime;
    
    // Big kick
    const osc = audioContext.createOscillator();
    const gain = audioContext.createGain();
    osc.type = &#39;sine&#39;;
    osc.frequency.setValueAtTime(200, time);
    osc.frequency.exponentialRampToValueAtTime(40, time + 0.1);
    gain.gain.setValueAtTime(0.8, time);
    gain.gain.exponentialRampToValueAtTime(0.01, time + 0.3);
    osc.connect(gain);
    gain.connect(sfxGain);
    osc.start(time);
    osc.stop(time + 0.35);
    
    // Crash noise
    const bufferSize = audioContext.sampleRate * 0.3;
    const buffer = audioContext.createBuffer(1, bufferSize, audioContext.sampleRate);
    const data = buffer.getChannelData(0);
    for (let i = 0; i &lt; bufferSize; i++) {
        data[i] = (Math.random() * 2 - 1) * (1 - i / bufferSize);
    }
    const noise = audioContext.createBufferSource();
    noise.buffer = buffer;
    const noiseGain = audioContext.createGain();
    noiseGain.gain.setValueAtTime(0.5, time);
    noiseGain.gain.exponentialRampToValueAtTime(0.01, time + 0.2);
    noise.connect(noiseGain);
    noiseGain.connect(sfxGain);
    noise.start(time);
    noise.stop(time + 0.3);
}

// Walking sound - quick tap
let lastWalkSound = 0;
function playWalkSound() {
    if (!audioContext) return;
    const now = audioContext.currentTime;
    if (now - lastWalkSound &lt; 0.15) return;
    lastWalkSound = now;
    
    const osc = audioContext.createOscillator();
    const gain = audioContext.createGain();
    osc.type = &#39;square&#39;;
    osc.frequency.setValueAtTime(80 + Math.random() * 40, now);
    gain.gain.setValueAtTime(0.15, now);
    gain.gain.exponentialRampToValueAtTime(0.01, now + 0.05);
    osc.connect(gain);
    gain.connect(sfxGain);
    osc.start(now);
    osc.stop(now + 0.06);
}

// Climbing sound - metallic tap
let lastClimbSound = 0;
function playClimbSound() {
    if (!audioContext) return;
    const now = audioContext.currentTime;
    if (now - lastClimbSound &lt; 0.12) return;
    lastClimbSound = now;
    
    const osc = audioContext.createOscillator();
    const gain = audioContext.createGain();
    osc.type = &#39;triangle&#39;;
    osc.frequency.setValueAtTime(400 + Math.random() * 200, now);
    osc.frequency.exponentialRampToValueAtTime(200, now + 0.05);
    gain.gain.setValueAtTime(0.2, now);
    gain.gain.exponentialRampToValueAtTime(0.01, now + 0.08);
    osc.connect(gain);
    gain.connect(sfxGain);
    osc.start(now);
    osc.stop(now + 0.1);
}

// Jump sound
function playJumpSound() {
    if (!audioContext) return;
    const time = audioContext.currentTime;
    
    const osc = audioContext.createOscillator();
    const gain = audioContext.createGain();
    osc.type = &#39;square&#39;;
    osc.frequency.setValueAtTime(150, time);
    osc.frequency.exponentialRampToValueAtTime(400, time + 0.1);
    gain.gain.setValueAtTime(0.25, time);
    gain.gain.exponentialRampToValueAtTime(0.01, time + 0.15);
    osc.connect(gain);
    gain.connect(sfxGain);
    osc.start(time);
    osc.stop(time + 0.2);
}

// Death sound - descending tone
function playDeathSound() {
    if (!audioContext) return;
    const time = audioContext.currentTime;
    
    const osc = audioContext.createOscillator();
    const gain = audioContext.createGain();
    osc.type = &#39;sawtooth&#39;;
    osc.frequency.setValueAtTime(800, time);
    osc.frequency.exponentialRampToValueAtTime(100, time + 0.8);
    gain.gain.setValueAtTime(0.4, time);
    gain.gain.exponentialRampToValueAtTime(0.01, time + 0.8);
    osc.connect(gain);
    gain.connect(sfxGain);
    osc.start(time);
    osc.stop(time + 0.9);
    
    // Add some noise
    const bufferSize = audioContext.sampleRate * 0.5;
    const buffer = audioContext.createBuffer(1, bufferSize, audioContext.sampleRate);
    const data = buffer.getChannelData(0);
    for (let i = 0; i &lt; bufferSize; i++) {
        data[i] = (Math.random() * 2 - 1) * (1 - i / bufferSize) * 0.3;
    }
    const noise = audioContext.createBufferSource();
    noise.buffer = buffer;
    const noiseGain = audioContext.createGain();
    noiseGain.gain.setValueAtTime(0.3, time);
    noise.connect(noiseGain);
    noiseGain.connect(sfxGain);
    noise.start(time);
    noise.stop(time + 0.5);
}

// Barrel destroy sound
function playBarrelDestroySound() {
    if (!audioContext) return;
    const time = audioContext.currentTime;
    
    // Explosion-like
    const osc = audioContext.createOscillator();
    const gain = audioContext.createGain();
    osc.type = &#39;sawtooth&#39;;
    osc.frequency.setValueAtTime(300, time);
    osc.frequency.exponentialRampToValueAtTime(50, time + 0.2);
    gain.gain.setValueAtTime(0.5, time);
    gain.gain.exponentialRampToValueAtTime(0.01, time + 0.25);
    osc.connect(gain);
    gain.connect(sfxGain);
    osc.start(time);
    osc.stop(time + 0.3);
    
    // Crash
    const bufferSize = audioContext.sampleRate * 0.25;
    const buffer = audioContext.createBuffer(1, bufferSize, audioContext.sampleRate);
    const data = buffer.getChannelData(0);
    for (let i = 0; i &lt; bufferSize; i++) {
        data[i] = (Math.random() * 2 - 1) * Math.pow(1 - i / bufferSize, 2);
    }
    const noise = audioContext.createBufferSource();
    noise.buffer = buffer;
    const noiseGain = audioContext.createGain();
    noiseGain.gain.setValueAtTime(0.6, time);
    noise.connect(noiseGain);
    noiseGain.connect(sfxGain);
    noise.start(time);
    noise.stop(time + 0.25);
}

// Barrel thud - when barrel hits platform
function playBarrelThud() {
    if (!audioContext) return;
    const time = audioContext.currentTime;
    
    const osc = audioContext.createOscillator();
    const gain = audioContext.createGain();
    osc.type = &#39;sine&#39;;
    osc.frequency.setValueAtTime(120, time);
    osc.frequency.exponentialRampToValueAtTime(40, time + 0.08);
    gain.gain.setValueAtTime(0.35, time);
    gain.gain.exponentialRampToValueAtTime(0.01, time + 0.15);
    osc.connect(gain);
    gain.connect(sfxGain);
    osc.start(time);
    osc.stop(time + 0.2);
}

// Victory fanfare
function playVictoryFanfare() {
    if (!audioContext) return;
    const time = audioContext.currentTime;
    
    // Ascending melody
    const melody = [
        { freq: 523, time: 0, dur: 0.15 },      // C5
        { freq: 659, time: 0.15, dur: 0.15 },   // E5
        { freq: 784, time: 0.3, dur: 0.15 },    // G5
        { freq: 1047, time: 0.45, dur: 0.4 }    // C6 (hold)
    ];
    
    melody.forEach(note =&gt; {
        const osc = audioContext.createOscillator();
        const gain = audioContext.createGain();
        osc.type = &#39;square&#39;;
        osc.frequency.setValueAtTime(note.freq, time + note.time);
        gain.gain.setValueAtTime(0.3, time + note.time);
        gain.gain.exponentialRampToValueAtTime(0.01, time + note.time + note.dur);
        osc.connect(gain);
        gain.connect(sfxGain);
        osc.start(time + note.time);
        osc.stop(time + note.time + note.dur);
    });
    
    // Add harmony
    const harmony = [
        { freq: 392, time: 0, dur: 0.15 },      // G4
        { freq: 523, time: 0.15, dur: 0.15 },   // C5
        { freq: 659, time: 0.3, dur: 0.15 },    // E5
        { freq: 784, time: 0.45, dur: 0.4 }     // G5 (hold)
    ];
    
    harmony.forEach(note =&gt; {
        const osc = audioContext.createOscillator();
        const gain = audioContext.createGain();
        osc.type = &#39;triangle&#39;;
        osc.frequency.setValueAtTime(note.freq, time + note.time);
        gain.gain.setValueAtTime(0.15, time + note.time);
        gain.gain.exponentialRampToValueAtTime(0.01, time + note.time + note.dur);
        osc.connect(gain);
        gain.connect(sfxGain);
        osc.start(time + note.time);
        osc.stop(time + note.time + note.dur);
    });
}

// Score/pickup sound
function playScoreSound() {
    if (!audioContext) return;
    const time = audioContext.currentTime;
    
    const osc = audioContext.createOscillator();
    const gain = audioContext.createGain();
    osc.type = &#39;square&#39;;
    osc.frequency.setValueAtTime(600, time);
    osc.frequency.setValueAtTime(800, time + 0.05);
    osc.frequency.setValueAtTime(1000, time + 0.1);
    gain.gain.setValueAtTime(0.2, time);
    gain.gain.exponentialRampToValueAtTime(0.01, time + 0.2);
    osc.connect(gain);
    gain.connect(sfxGain);
    osc.start(time);
    osc.stop(time + 0.25);
}

// ============ GAME CODE ============

// Game constants
const GRAVITY = 0.35;
const JUMP_FORCE = -7;
const PLAYER_SPEED = 2.5;
const CLIMB_SPEED = 2;
let BARREL_SPEED = 2;
let BARREL_THROW_RATE = 120; // Base throw rate

// Game state
let gameState = &#39;title&#39;;
let score = 0;
let lives = 3;
let level = 1;
let bonus = 5000;
let bonusTimer = null;
let highScore = 0;

// Glow effect
let glowIntensity = 0;
let glowDir = 1;

// Player
let player = {
    x: 80,
    y: 650,
    width: 24,
    height: 32,
    vx: 0,
    vy: 0,
    onGround: false,
    onLadder: false,
    nearLadderTop: false,
    nearLadderBottom: false,
    canClimbDown: false,
    currentLadder: null,
    climbing: false,
    hasHammer: false,
    hammerTimer: 0,
    hammerSwing: 0,
    facing: 1,
    frame: 0,
    frameTimer: 0
};

// Donkey Kong
let dk = {
    x: 120,
    y: 80,
    frame: 0,
    frameTimer: 0,
    throwTimer: 0,
    angry: false
};

// Pauline
let pauline = {
    x: 280,
    y: 45,
    frame: 0,
    frameTimer: 0
};

// Game objects
let platforms = [];
let ladders = [];
let barrels = [];
let fires = [];
let items = [];
let hammers = [];

// Input state
const keys = {
    ArrowLeft: false,
    ArrowRight: false,
    ArrowUp: false,
    ArrowDown: false,
    Space: false
};

// Level configurations
function setupLevel1() {
    platforms = [];
    ladders = [];
    barrels = [];
    fires = [];
    items = [];
    hammers = [];
    
    // Apply difficulty scaling based on level
    BARREL_SPEED = 2 + (level - 1) * 0.3;
    BARREL_THROW_RATE = Math.max(60, 120 - (level - 1) * 10);
    
    // Different layouts for different levels
    const layoutType = (level - 1) % 3;
    
    if (layoutType === 0) {
        // Original layout - standard difficulty
        setupStandardLayout();
    } else if (layoutType === 1) {
        // Tighter layout - more challenging
        setupTightLayout();
    } else {
        // Wider platforms with more gaps
        setupWideLayout();
    }
    
    // Common setup
    setupFiresAndItems();
    
    // Reset player - spawn away from oil drum
    player.x = 150;
    player.y = 648;
    player.vx = 0;
    player.vy = 0;
    player.hasHammer = false;
    player.onGround = true;
    player.climbing = false;
    
    // Reset DK with faster throwing at higher levels
    dk.x = 100;
    dk.y = 80;
    dk.throwTimer = BARREL_THROW_RATE;
    
    bonus = 5000;
}

function setupStandardLayout() {
    // Bottom platform
    platforms.push({ x: 40, y: 680, width: 480, height: 8, sloped: false });
    
    // Platform 2 (sloped left)
    for (let i = 0; i &lt; 12; i++) {
        platforms.push({ x: 80 + i * 40, y: 580 - i * 3, width: 40, height: 8, sloped: true, slopeDir: -1 });
    }
    
    // Platform 3 (sloped right)
    for (let i = 0; i &lt; 12; i++) {
        platforms.push({ x: 40 + i * 40, y: 470 + i * 3, width: 40, height: 8, sloped: true, slopeDir: 1 });
    }
    
    // Platform 4 (sloped left)
    for (let i = 0; i &lt; 12; i++) {
        platforms.push({ x: 80 + i * 40, y: 380 - i * 3, width: 40, height: 8, sloped: true, slopeDir: -1 });
    }
    
    // Platform 5 (sloped right)
    for (let i = 0; i &lt; 12; i++) {
        platforms.push({ x: 40 + i * 40, y: 270 + i * 3, width: 40, height: 8, sloped: true, slopeDir: 1 });
    }
    
    // Top platform (DK&#39;s platform)
    platforms.push({ x: 80, y: 160, width: 200, height: 8, sloped: false });
    platforms.push({ x: 240, y: 130, width: 120, height: 8, sloped: false });
    
    // Ladders
    ladders.push({ x: 490, y: 545, height: 135 });
    ladders.push({ x: 100, y: 470, height: 115 });
    ladders.push({ x: 450, y: 345, height: 125 });
    ladders.push({ x: 140, y: 270, height: 115 });
    ladders.push({ x: 240, y: 130, height: 145 });
    
    // Broken ladders
    ladders.push({ x: 280, y: 640, height: 40, broken: true });
    ladders.push({ x: 360, y: 450, height: 35, broken: true });
    ladders.push({ x: 200, y: 340, height: 35, broken: true });
}

function setupTightLayout() {
    // Bottom platform
    platforms.push({ x: 40, y: 680, width: 480, height: 8, sloped: false });
    
    // Platform 2 (steeper slope left)
    for (let i = 0; i &lt; 11; i++) {
        platforms.push({ x: 90 + i * 40, y: 575 - i * 4, width: 40, height: 8, sloped: true, slopeDir: -1 });
    }
    
    // Platform 3 (steeper slope right)
    for (let i = 0; i &lt; 11; i++) {
        platforms.push({ x: 50 + i * 40, y: 465 + i * 4, width: 40, height: 8, sloped: true, slopeDir: 1 });
    }
    
    // Platform 4 (steeper slope left)
    for (let i = 0; i &lt; 11; i++) {
        platforms.push({ x: 90 + i * 40, y: 370 - i * 4, width: 40, height: 8, sloped: true, slopeDir: -1 });
    }
    
    // Platform 5 (steeper slope right)
    for (let i = 0; i &lt; 11; i++) {
        platforms.push({ x: 50 + i * 40, y: 260 + i * 4, width: 40, height: 8, sloped: true, slopeDir: 1 });
    }
    
    // Top platforms
    platforms.push({ x: 80, y: 160, width: 200, height: 8, sloped: false });
    platforms.push({ x: 240, y: 130, width: 120, height: 8, sloped: false });
    
    // Fewer ladders - more challenging
    ladders.push({ x: 480, y: 540, height: 140 });
    ladders.push({ x: 120, y: 460, height: 110 });
    ladders.push({ x: 430, y: 335, height: 130 });
    ladders.push({ x: 160, y: 255, height: 110 });
    ladders.push({ x: 240, y: 130, height: 145 });
}

function setupWideLayout() {
    // Bottom platform
    platforms.push({ x: 40, y: 680, width: 480, height: 8, sloped: false });
    
    // Platform 2 (gentler slope, more gaps)
    for (let i = 0; i &lt; 10; i++) {
        if (i === 3 || i === 7) continue; // Create gaps
        platforms.push({ x: 100 + i * 40, y: 585 - i * 2.5, width: 40, height: 8, sloped: true, slopeDir: -1 });
    }
    
    // Platform 3
    for (let i = 0; i &lt; 10; i++) {
        if (i === 2 || i === 6) continue;
        platforms.push({ x: 60 + i * 40, y: 480 + i * 2.5, width: 40, height: 8, sloped: true, slopeDir: 1 });
    }
    
    // Platform 4
    for (let i = 0; i &lt; 10; i++) {
        if (i === 4 || i === 8) continue;
        platforms.push({ x: 100 + i * 40, y: 390 - i * 2.5, width: 40, height: 8, sloped: true, slopeDir: -1 });
    }
    
    // Platform 5
    for (let i = 0; i &lt; 10; i++) {
        if (i === 3 || i === 7) continue;
        platforms.push({ x: 60 + i * 40, y: 285 + i * 2.5, width: 40, height: 8, sloped: true, slopeDir: 1 });
    }
    
    // Top platforms
    platforms.push({ x: 80, y: 160, width: 200, height: 8, sloped: false });
    platforms.push({ x: 240, y: 130, width: 120, height: 8, sloped: false });
    
    // More ladders to compensate for gaps
    ladders.push({ x: 470, y: 550, height: 135 });
    ladders.push({ x: 220, y: 550, height: 80 });
    ladders.push({ x: 110, y: 475, height: 110 });
    ladders.push({ x: 440, y: 350, height: 130 });
    ladders.push({ x: 180, y: 350, height: 80 });
    ladders.push({ x: 150, y: 280, height: 110 });
    ladders.push({ x: 240, y: 130, height: 145 });
}

function setupFiresAndItems() {
    // Oil drum fire
    fires.push({ x: 80, y: 650, width: 30, height: 30, isOilDrum: true, frame: 0 });
    
    // Hammers - fewer at higher levels
    if (level &lt;= 3) {
        hammers.push({ x: 180, y: 540, collected: false });
        hammers.push({ x: 380, y: 330, collected: false });
    } else if (level &lt;= 6) {
        hammers.push({ x: 280, y: 440, collected: false });
    }
    // No hammers after level 6!
    
    // Items
    items.push({ x: 450, y: 440, type: &#39;umbrella&#39;, collected: false, points: 300 });
    items.push({ x: 150, y: 540, type: &#39;hat&#39;, collected: false, points: 300 });
    items.push({ x: 350, y: 230, type: &#39;purse&#39;, collected: false, points: 300 });
}

// Draw vector line with glow
function drawLine(x1, y1, x2, y2, color = &#39;#fff&#39;, lineWidth = 2) {
    ctx.strokeStyle = color;
    ctx.lineWidth = lineWidth;
    ctx.shadowColor = color;
    ctx.shadowBlur = 8 + glowIntensity * 4;
    ctx.beginPath();
    ctx.moveTo(x1, y1);
    ctx.lineTo(x2, y2);
    ctx.stroke();
    ctx.shadowBlur = 0;
}

// Draw vector rectangle
function drawRect(x, y, width, height, color = &#39;#fff&#39;) {
    ctx.strokeStyle = color;
    ctx.lineWidth = 2;
    ctx.shadowColor = color;
    ctx.shadowBlur = 8 + glowIntensity * 4;
    ctx.strokeRect(x, y, width, height);
    ctx.shadowBlur = 0;
}

// Draw vector text
function drawText(text, x, y, size = 20, color = &#39;#fff&#39;, align = &#39;left&#39;) {
    ctx.font = `${size}px monospace`;
    ctx.fillStyle = color;
    ctx.textAlign = align;
    ctx.shadowColor = color;
    ctx.shadowBlur = 10 + glowIntensity * 5;
    ctx.fillText(text, x, y);
    ctx.shadowBlur = 0;
}

// Draw Donkey Kong - accurate to reference images
function drawDK(x, y, frame) {
    ctx.strokeStyle = &#39;#fff&#39;;
    ctx.lineWidth = 2;
    ctx.shadowColor = &#39;#fff&#39;;
    ctx.shadowBlur = 10;
    
    // Main body - barrel shaped torso
    ctx.beginPath();
    ctx.moveTo(x + 15, y + 25);
    ctx.lineTo(x + 10, y + 35);
    ctx.lineTo(x + 10, y + 55);
    ctx.lineTo(x + 20, y + 60);
    ctx.lineTo(x + 60, y + 60);
    ctx.lineTo(x + 70, y + 55);
    ctx.lineTo(x + 70, y + 35);
    ctx.lineTo(x + 65, y + 25);
    ctx.closePath();
    ctx.stroke();
    
    // Chest line (pectorals)
    ctx.beginPath();
    ctx.moveTo(x + 25, y + 35);
    ctx.quadraticCurveTo(x + 40, y + 45, x + 55, y + 35);
    ctx.stroke();
    
    // Head - more square/blocky
    ctx.beginPath();
    ctx.moveTo(x + 20, y + 25);
    ctx.lineTo(x + 20, y + 5);
    ctx.lineTo(x + 25, y);
    ctx.lineTo(x + 55, y);
    ctx.lineTo(x + 60, y + 5);
    ctx.lineTo(x + 60, y + 25);
    ctx.lineTo(x + 20, y + 25);
    ctx.stroke();
    
    // Brow ridge - angry eyebrows
    drawLine(x + 22, y + 8, x + 35, y + 12);
    drawLine(x + 45, y + 12, x + 58, y + 8);
    
    // Eyes - large circles
    ctx.beginPath();
    ctx.arc(x + 30, y + 14, 5, 0, Math.PI * 2);
    ctx.stroke();
    ctx.beginPath();
    ctx.arc(x + 50, y + 14, 5, 0, Math.PI * 2);
    ctx.stroke();
    
    // Pupils
    ctx.fillStyle = &#39;#fff&#39;;
    ctx.beginPath();
    ctx.arc(x + 31, y + 14, 2, 0, Math.PI * 2);
    ctx.fill();
    ctx.beginPath();
    ctx.arc(x + 51, y + 14, 2, 0, Math.PI * 2);
    ctx.fill();
    
    // Snout/muzzle
    ctx.beginPath();
    ctx.moveTo(x + 28, y + 18);
    ctx.lineTo(x + 25, y + 24);
    ctx.lineTo(x + 55, y + 24);
    ctx.lineTo(x + 52, y + 18);
    ctx.stroke();
    
    // Big toothy grin
    ctx.beginPath();
    ctx.moveTo(x + 28, y + 22);
    ctx.lineTo(x + 52, y + 22);
    ctx.stroke();
    // Teeth
    for (let i = 0; i &lt; 6; i++) {
        drawLine(x + 30 + i * 4, y + 20, x + 30 + i * 4, y + 24);
    }
    
    // Ears
    ctx.beginPath();
    ctx.arc(x + 18, y + 12, 5, Math.PI * 0.5, Math.PI * 1.5);
    ctx.stroke();
    ctx.beginPath();
    ctx.arc(x + 62, y + 12, 5, -Math.PI * 0.5, Math.PI * 0.5);
    ctx.stroke();
    
    // Arms
    if (frame % 2 === 0) {
        // Arms raised (throwing or beating chest)
        // Left arm up
        ctx.beginPath();
        ctx.moveTo(x + 10, y + 35);
        ctx.lineTo(x - 5, y + 25);
        ctx.lineTo(x - 10, y + 10);
        ctx.stroke();
        // Left hand
        ctx.beginPath();
        ctx.arc(x - 10, y + 8, 6, 0, Math.PI * 2);
        ctx.stroke();
        
        // Right arm up
        ctx.beginPath();
        ctx.moveTo(x + 70, y + 35);
        ctx.lineTo(x + 85, y + 25);
        ctx.lineTo(x + 90, y + 10);
        ctx.stroke();
        // Right hand
        ctx.beginPath();
        ctx.arc(x + 90, y + 8, 6, 0, Math.PI * 2);
        ctx.stroke();
    } else {
        // Arms down at sides
        // Left arm
        ctx.beginPath();
        ctx.moveTo(x + 10, y + 35);
        ctx.lineTo(x, y + 50);
        ctx.lineTo(x + 5, y + 65);
        ctx.stroke();
        // Left hand
        ctx.beginPath();
        ctx.arc(x + 5, y + 68, 6, 0, Math.PI * 2);
        ctx.stroke();
        
        // Right arm
        ctx.beginPath();
        ctx.moveTo(x + 70, y + 35);
        ctx.lineTo(x + 80, y + 50);
        ctx.lineTo(x + 75, y + 65);
        ctx.stroke();
        // Right hand
        ctx.beginPath();
        ctx.arc(x + 75, y + 68, 6, 0, Math.PI * 2);
        ctx.stroke();
    }
    
    // Legs - short and stocky
    // Left leg
    ctx.beginPath();
    ctx.moveTo(x + 25, y + 60);
    ctx.lineTo(x + 20, y + 75);
    ctx.lineTo(x + 15, y + 80);
    ctx.stroke();
    // Left foot
    ctx.beginPath();
    ctx.ellipse(x + 10, y + 82, 10, 5, 0, 0, Math.PI * 2);
    ctx.stroke();
    
    // Right leg
    ctx.beginPath();
    ctx.moveTo(x + 55, y + 60);
    ctx.lineTo(x + 60, y + 75);
    ctx.lineTo(x + 65, y + 80);
    ctx.stroke();
    // Right foot
    ctx.beginPath();
    ctx.ellipse(x + 70, y + 82, 10, 5, 0, 0, Math.PI * 2);
    ctx.stroke();
    
    ctx.shadowBlur = 0;
}

// Draw smaller DK for title/cutscenes
function drawDKSmall(x, y, frame) {
    ctx.save();
    ctx.translate(x, y);
    ctx.scale(0.6, 0.6);
    drawDK(0, 0, frame);
    ctx.restore();
}

// Draw barrel stack
function drawBarrelStack(x, y) {
    for (let i = 0; i &lt; 3; i++) {
        drawBarrelStatic(x, y + i * 25);
    }
    for (let i = 0; i &lt; 2; i++) {
        drawBarrelStatic(x + 15, y + 12 + i * 25);
    }
}

function drawBarrelStatic(x, y) {
    ctx.strokeStyle = &#39;#fff&#39;;
    ctx.lineWidth = 2;
    ctx.shadowColor = &#39;#fff&#39;;
    ctx.shadowBlur = 8;
    
    ctx.beginPath();
    ctx.ellipse(x + 12, y + 10, 12, 10, 0, 0, Math.PI * 2);
    ctx.stroke();
    
    drawLine(x + 3, y + 5, x + 3, y + 15);
    drawLine(x + 21, y + 5, x + 21, y + 15);
    
    ctx.shadowBlur = 0;
}

// Draw Pauline
function drawPauline(x, y, frame) {
    ctx.strokeStyle = &#39;#fff&#39;;
    ctx.lineWidth = 2;
    ctx.shadowColor = &#39;#fff&#39;;
    ctx.shadowBlur = 10;
    
    // Head
    ctx.beginPath();
    ctx.arc(x, y, 8, 0, Math.PI * 2);
    ctx.stroke();
    
    // Hair
    drawLine(x - 8, y - 5, x - 10, y + 5);
    drawLine(x + 8, y - 5, x + 10, y + 5);
    drawLine(x - 6, y - 8, x - 8, y - 2);
    drawLine(x + 6, y - 8, x + 8, y - 2);
    
    // Body (dress)
    ctx.beginPath();
    ctx.moveTo(x, y + 8);
    ctx.lineTo(x - 10, y + 35);
    ctx.lineTo(x + 10, y + 35);
    ctx.closePath();
    ctx.stroke();
    
    // Arms waving
    if (frame % 2 === 0) {
        drawLine(x - 5, y + 15, x - 20, y + 5);
        drawLine(x + 5, y + 15, x + 15, y + 20);
    } else {
        drawLine(x - 5, y + 15, x - 15, y + 20);
        drawLine(x + 5, y + 15, x + 20, y + 5);
    }
    
    ctx.shadowBlur = 0;
}

// Draw HELP! text
function drawHelp(x, y, frame) {
    if (frame % 30 &lt; 20) {
        drawText(&#39;HELP!&#39;, x, y - 10, 14, &#39;#fff&#39;, &#39;center&#39;);
    }
}

// Draw player (Jumpman/Mario)
function drawPlayer(p) {
    ctx.strokeStyle = &#39;#fff&#39;;
    ctx.lineWidth = 2;
    ctx.shadowColor = &#39;#fff&#39;;
    ctx.shadowBlur = 10;
    
    let x = p.x;
    let y = p.y;
    
    if (p.hasHammer) {
        drawPlayerWithHammer(p);
        return;
    }
    
    // Head
    ctx.beginPath();
    ctx.arc(x + 12, y + 6, 6, 0, Math.PI * 2);
    ctx.stroke();
    
    // Cap
    drawLine(x + 5, y + 2, x + 19, y + 2);
    drawLine(x + 4, y + 2, x + 4, y + 6);
    
    // Body
    drawLine(x + 12, y + 12, x + 12, y + 22);
    
    if (p.climbing) {
        let climbFrame = Math.floor(p.frameTimer / 5) % 2;
        if (climbFrame === 0) {
            drawLine(x + 12, y + 14, x + 2, y + 10);
            drawLine(x + 12, y + 14, x + 22, y + 18);
            drawLine(x + 12, y + 22, x + 6, y + 32);
            drawLine(x + 12, y + 22, x + 18, y + 28);
        } else {
            drawLine(x + 12, y + 14, x + 2, y + 18);
            drawLine(x + 12, y + 14, x + 22, y + 10);
            drawLine(x + 12, y + 22, x + 6, y + 28);
            drawLine(x + 12, y + 22, x + 18, y + 32);
        }
    } else if (!p.onGround) {
        drawLine(x + 12, y + 14, x + 2, y + 10);
        drawLine(x + 12, y + 14, x + 22, y + 10);
        drawLine(x + 12, y + 22, x + 4, y + 28);
        drawLine(x + 12, y + 22, x + 20, y + 28);
    } else if (Math.abs(p.vx) &gt; 0.1) {
        let walkFrame = Math.floor(p.frameTimer / 5) % 4;
        if (p.facing &gt; 0) {
            drawLine(x + 12, y + 14, x + 20, y + 18);
            drawLine(x + 12, y + 14, x + 4, y + 16);
        } else {
            drawLine(x + 12, y + 14, x + 4, y + 18);
            drawLine(x + 12, y + 14, x + 20, y + 16);
        }
        if (walkFrame &lt; 2) {
            drawLine(x + 12, y + 22, x + 4, y + 32);
            drawLine(x + 12, y + 22, x + 18, y + 32);
        } else {
            drawLine(x + 12, y + 22, x + 8, y + 32);
            drawLine(x + 12, y + 22, x + 16, y + 32);
        }
    } else {
        drawLine(x + 12, y + 14, x + 4, y + 20);
        drawLine(x + 12, y + 14, x + 20, y + 20);
        drawLine(x + 12, y + 22, x + 6, y + 32);
        drawLine(x + 12, y + 22, x + 18, y + 32);
    }
    
    ctx.shadowBlur = 0;
}

function drawPlayerWithHammer(p) {
    let x = p.x;
    let y = p.y;
    let swing = Math.floor(p.hammerSwing / 5) % 4;
    
    ctx.beginPath();
    ctx.arc(x + 12, y + 6, 6, 0, Math.PI * 2);
    ctx.stroke();
    
    drawLine(x + 12, y + 12, x + 12, y + 22);
    drawLine(x + 12, y + 22, x + 6, y + 32);
    drawLine(x + 12, y + 22, x + 18, y + 32);
    
    let hammerX, hammerY;
    if (swing &lt; 2) {
        hammerX = x + 12 + p.facing * 15;
        hammerY = y - 15;
        drawLine(x + 12, y + 14, hammerX, hammerY);
        drawRect(hammerX - 8, hammerY - 12, 16, 12);
    } else {
        hammerX = x + 12 + p.facing * 25;
        hammerY = y + 20;
        drawLine(x + 12, y + 14, hammerX, hammerY);
        drawRect(hammerX - 8, hammerY - 6, 16, 12);
    }
}

// Draw barrel
function drawBarrel(barrel) {
    let x = barrel.x;
    let y = barrel.y;
    let rotation = barrel.rotation || 0;
    
    ctx.save();
    ctx.translate(x + 12, y + 12);
    ctx.rotate(rotation);
    
    ctx.strokeStyle = &#39;#fff&#39;;
    ctx.lineWidth = 2;
    ctx.shadowColor = &#39;#0ff&#39;;
    ctx.shadowBlur = 12;
    
    ctx.beginPath();
    ctx.arc(0, 0, 12, 0, Math.PI * 2);
    ctx.stroke();
    
    ctx.beginPath();
    ctx.arc(0, 0, 6, 0, Math.PI * 2);
    ctx.stroke();
    
    drawLine(-12, 0, 12, 0);
    drawLine(0, -12, 0, 12);
    
    ctx.restore();
    ctx.shadowBlur = 0;
}

// Draw fire
function drawFire(fire) {
    let x = fire.x;
    let y = fire.y;
    let frame = fire.frame;
    
    ctx.strokeStyle = &#39;#fff&#39;;
    ctx.lineWidth = 2;
    ctx.shadowColor = &#39;#ff0&#39;;
    ctx.shadowBlur = 15;
    
    if (fire.isOilDrum) {
        drawRect(x, y, 30, 30);
        drawText(&#39;OIL&#39;, x + 5, y + 22, 10);
        
        let flicker = Math.sin(frame * 0.3) * 3;
        drawLine(x + 8, y, x + 5, y - 15 - flicker);
        drawLine(x + 15, y, x + 15, y - 20 - flicker);
        drawLine(x + 22, y, x + 25, y - 15 - flicker);
    } else {
        ctx.beginPath();
        ctx.arc(x + 10, y + 10, 10, 0, Math.PI * 2);
        ctx.stroke();
        
        let flicker = Math.sin(frame * 0.5) * 4;
        drawLine(x + 3, y + 5, x - 2, y - 5 - flicker);
        drawLine(x + 10, y + 2, x + 10, y - 8 - flicker);
        drawLine(x + 17, y + 5, x + 22, y - 5 - flicker);
        
        ctx.beginPath();
        ctx.arc(x + 6, y + 10, 2, 0, Math.PI * 2);
        ctx.stroke();
        ctx.beginPath();
        ctx.arc(x + 14, y + 10, 2, 0, Math.PI * 2);
        ctx.stroke();
    }
    
    ctx.shadowBlur = 0;
}

// Draw hammer pickup
function drawHammer(hammer) {
    if (hammer.collected) return;
    
    let x = hammer.x;
    let y = hammer.y;
    
    ctx.strokeStyle = &#39;#fff&#39;;
    ctx.lineWidth = 2;
    ctx.shadowColor = &#39;#0ff&#39;;
    ctx.shadowBlur = 12;
    
    drawLine(x, y + 20, x + 20, y + 20);
    drawRect(x + 15, y + 10, 15, 20);
    
    ctx.shadowBlur = 0;
}

// Draw item
function drawItem(item) {
    if (item.collected) return;
    
    let x = item.x;
    let y = item.y;
    
    ctx.strokeStyle = &#39;#fff&#39;;
    ctx.lineWidth = 2;
    ctx.shadowColor = &#39;#f0f&#39;;
    ctx.shadowBlur = 10;
    
    if (item.type === &#39;umbrella&#39;) {
        ctx.beginPath();
        ctx.arc(x + 10, y + 5, 10, Math.PI, 0);
        ctx.stroke();
        drawLine(x + 10, y + 5, x + 10, y + 25);
        ctx.beginPath();
        ctx.arc(x + 7, y + 25, 3, 0, Math.PI);
        ctx.stroke();
    } else if (item.type === &#39;hat&#39;) {
        ctx.beginPath();
        ctx.ellipse(x + 10, y + 15, 12, 5, 0, 0, Math.PI * 2);
        ctx.stroke();
        drawRect(x + 3, y + 2, 14, 13);
    } else if (item.type === &#39;purse&#39;) {
        drawRect(x, y + 5, 20, 15);
        ctx.beginPath();
        ctx.arc(x + 10, y + 5, 8, Math.PI, 0);
        ctx.stroke();
    }
    
    ctx.shadowBlur = 0;
}

// Draw platform
function drawPlatform(plat) {
    ctx.strokeStyle = &#39;#fff&#39;;
    ctx.lineWidth = 2;
    ctx.shadowColor = &#39;#fff&#39;;
    ctx.shadowBlur = 6;
    
    let endY = plat.y + (plat.sloped ? plat.width * 0.075 * plat.slopeDir : 0);
    drawLine(plat.x, plat.y, plat.x + plat.width, endY);
    
    for (let i = 0; i &lt; plat.width; i += 20) {
        let yOffset = plat.sloped ? (i / plat.width) * plat.width * 0.075 * plat.slopeDir : 0;
        drawLine(plat.x + i, plat.y + yOffset, plat.x + i, plat.y + yOffset + 8);
    }
    
    ctx.shadowBlur = 0;
}

// Draw ladder
function drawLadder(ladder) {
    ctx.strokeStyle = &#39;#fff&#39;;
    ctx.lineWidth = 2;
    ctx.shadowColor = &#39;#0ff&#39;;
    ctx.shadowBlur = 8;
    
    drawLine(ladder.x, ladder.y, ladder.x, ladder.y + ladder.height);
    drawLine(ladder.x + 20, ladder.y, ladder.x + 20, ladder.y + ladder.height);
    
    let rungCount = Math.floor(ladder.height / 15);
    for (let i = 0; i &lt;= rungCount; i++) {
        if (!ladder.broken || i &lt; rungCount / 2) {
            drawLine(ladder.x, ladder.y + i * 15, ladder.x + 20, ladder.y + i * 15);
        }
    }
    
    ctx.shadowBlur = 0;
}

// Draw lives
function drawLives() {
    for (let i = 0; i &lt; lives; i++) {
        let x = 50 + i * 25;
        let y = 60;
        ctx.strokeStyle = &#39;#fff&#39;;
        ctx.lineWidth = 1.5;
        ctx.shadowColor = &#39;#fff&#39;;
        ctx.shadowBlur = 5;
        ctx.beginPath();
        ctx.arc(x, y, 5, 0, Math.PI * 2);
        ctx.stroke();
        drawLine(x, y + 5, x, y + 12);
        drawLine(x, y + 8, x - 4, y + 12);
        drawLine(x, y + 8, x + 4, y + 12);
        ctx.shadowBlur = 0;
    }
}

// Draw title screen
function drawTitleScreen() {
    drawText(score.toString().padStart(6, &#39;0&#39;), 50, 40, 24, &#39;#fff&#39;);
    
    drawText(&#39;VECTOR&#39;, 140, 200, 60, &#39;#fff&#39;);
    drawText(&#39;KONG&#39;, 180, 280, 60, &#39;#fff&#39;);
    
    drawDK(200, 350, Math.floor(Date.now() / 500) % 2);
    
    drawText(&#39;© 1981&#39;, 220, 520, 16, &#39;#fff&#39;);
    drawText(&#39;NINTENDO OF AMERICA INC.&#39;, 120, 550, 16, &#39;#fff&#39;);
    
    if (Math.floor(Date.now() / 500) % 2 === 0) {
        drawText(&#39;PRESS ENTER TO START&#39;, 140, 620, 16, &#39;#fff&#39;);
    }
}

// Draw &quot;How High Can You Get&quot; screen
function drawHowHighScreen() {
    drawText(score.toString().padStart(6, &#39;0&#39;), 50, 40, 24, &#39;#fff&#39;);
    drawLives();
    drawText(&#39;L=&#39; + level.toString().padStart(2, &#39;0&#39;), 450, 60, 20, &#39;#fff&#39;);
    
    let yPos = 300 + Math.sin(Date.now() / 300) * 20;
    drawDK(200, yPos, Math.floor(Date.now() / 300) % 2);
    
    drawText(&#39;50 M&#39;, 130, 380, 20, &#39;#fff&#39;);
    drawText(&#39;25 M&#39;, 130, 480, 20, &#39;#fff&#39;);
    
    drawDKSmall(270, 450, 0);
    
    drawText(&#39;HOW HIGH CAN YOU GET ?&#39;, 110, 600, 22, &#39;#fff&#39;);
}

// Draw game over screen
function drawGameOverScreen() {
    drawText(&#39;GAME OVER&#39;, 170, 300, 40, &#39;#fff&#39;);
    drawText(&#39;SCORE: &#39; + score, 180, 380, 24, &#39;#fff&#39;);
    drawText(&#39;HIGH SCORE: &#39; + highScore, 150, 430, 20, &#39;#fff&#39;);
    
    if (Math.floor(Date.now() / 500) % 2 === 0) {
        drawText(&#39;PRESS ENTER TO CONTINUE&#39;, 120, 520, 16, &#39;#fff&#39;);
    }
}

// Draw level complete screen
function drawLevelCompleteScreen() {
    drawText(&#39;LEVEL &#39; + level + &#39; COMPLETE!&#39;, 140, 300, 30, &#39;#fff&#39;);
    drawText(&#39;BONUS: &#39; + bonus, 190, 380, 24, &#39;#fff&#39;);
    drawText(&#39;SCORE: &#39; + score, 190, 430, 24, &#39;#fff&#39;);
}

// Main draw function
function draw() {
    ctx.fillStyle = &#39;#000&#39;;
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    
    glowIntensity += 0.05 * glowDir;
    if (glowIntensity &gt; 1 || glowIntensity &lt; 0) glowDir *= -1;
    
    if (gameState === &#39;title&#39;) {
        drawTitleScreen();
    } else if (gameState === &#39;howHigh&#39;) {
        drawHowHighScreen();
    } else if (gameState === &#39;gameOver&#39;) {
        drawGameOverScreen();
    } else if (gameState === &#39;levelComplete&#39;) {
        drawLevelCompleteScreen();
    } else if (gameState === &#39;playing&#39;) {
        drawText(score.toString().padStart(6, &#39;0&#39;), 50, 40, 24, &#39;#fff&#39;);
        drawLives();
        
        // Level and BPM display with flash effect
        drawText(&#39;L-&#39; + level.toString().padStart(2, &#39;0&#39;), 450, 40, 20, &#39;#0ff&#39;);
        let bpmColor = bpmFlashTimer &gt; 0 ? &#39;#ff0&#39; : &#39;#0ff&#39;;
        drawText(&#39;BPM:&#39; + Math.floor(BPM), 435, 90, 12, bpmColor);
        if (bpmFlashTimer &gt; 0) bpmFlashTimer--;
        
        drawRect(440, 35, 80, 35);
        drawText(&#39;BONUS&#39;, 452, 52, 12, &#39;#fff&#39;);
        drawText(bonus.toString(), 455, 68, 16, &#39;#fff&#39;);
        
        drawBarrelStack(35, 80);
        platforms.forEach(drawPlatform);
        ladders.forEach(drawLadder);
        drawDK(dk.x, dk.y, dk.frame);
        drawPauline(pauline.x, pauline.y, pauline.frame);
        drawHelp(pauline.x, pauline.y, Math.floor(Date.now() / 100));
        items.forEach(drawItem);
        hammers.forEach(drawHammer);
        fires.forEach(drawFire);
        barrels.forEach(drawBarrel);
        drawPlayer(player);
    }
}

// Get platform Y at given X
function getPlatformYAtX(plat, x) {
    if (!plat.sloped) return plat.y;
    let progress = (x - plat.x) / plat.width;
    return plat.y + progress * plat.width * 0.075 * plat.slopeDir;
}

// Check collision between player and platform
function checkPlatformCollision() {
    player.onGround = false;
    
    for (let plat of platforms) {
        let platY = getPlatformYAtX(plat, player.x + 12);
        
        // Only collide if falling down (vy &gt;= 0) and not climbing up through
        if (player.x + player.width &gt; plat.x &amp;&amp; 
            player.x &lt; plat.x + plat.width &amp;&amp;
            player.y + player.height &gt;= platY - 5 &amp;&amp;
            player.y + player.height &lt;= platY + 15 &amp;&amp;
            player.vy &gt;= 0 &amp;&amp;
            !player.climbing) {  // Don&#39;t collide with platforms while climbing
            
            player.y = platY - player.height;
            player.vy = 0;
            player.onGround = true;
            
            if (plat.sloped &amp;&amp; !player.climbing &amp;&amp; Math.abs(player.vx) &lt; 0.1) {
                player.x += plat.slopeDir * 0.3;
            }
            break;
        }
    }
    
    // If climbing and moving up, check if we&#39;ve reached a platform we can stand on
    if (player.climbing &amp;&amp; player.vy &lt;= 0) {
        for (let plat of platforms) {
            let platY = getPlatformYAtX(plat, player.x + 12);
            
            // If player&#39;s feet are at platform level and moving horizontally
            if (player.x + player.width &gt; plat.x &amp;&amp; 
                player.x &lt; plat.x + plat.width &amp;&amp;
                Math.abs((player.y + player.height) - platY) &lt; 10) {
                
                // Allow stepping onto this platform
                if (keys.ArrowLeft || keys.ArrowRight) {
                    player.y = platY - player.height;
                    player.onGround = true;
                    player.climbing = false;
                    player.vy = 0;
                    break;
                }
            }
        }
    }
}

// Check if player is on ladder
function checkLadderCollision() {
    player.onLadder = false;
    player.nearLadderTop = false;
    player.nearLadderBottom = false;
    
    for (let ladder of ladders) {
        let playerCenterX = player.x + player.width / 2;
        let playerBottom = player.y + player.height;
        
        // Check if horizontally aligned with ladder
        if (playerCenterX &gt; ladder.x - 5 &amp;&amp; playerCenterX &lt; ladder.x + 25) {
            // Check if on the ladder
            if (playerBottom &gt; ladder.y &amp;&amp; player.y &lt; ladder.y + ladder.height) {
                player.onLadder = true;
                
                // Near top of ladder - can step off
                if (player.y &lt;= ladder.y + 10) {
                    player.nearLadderTop = true;
                }
                // Near bottom of ladder
                if (playerBottom &gt;= ladder.y + ladder.height - 10) {
                    player.nearLadderBottom = true;
                }
            }
            
            // Check if standing on platform and ladder is below (can climb down)
            if (player.onGround &amp;&amp; playerBottom &gt;= ladder.y - 5 &amp;&amp; playerBottom &lt;= ladder.y + 10) {
                player.canClimbDown = true;
                player.currentLadder = ladder;
            }
        }
    }
}

// Check barrel collision
function checkBarrelCollision() {
    for (let i = barrels.length - 1; i &gt;= 0; i--) {
        let barrel = barrels[i];
        
        if (player.hasHammer) {
            let hammerX = player.x + 12 + player.facing * 20;
            let hammerY = player.y + 10;
            
            if (Math.abs(hammerX - barrel.x - 12) &lt; 25 &amp;&amp;
                Math.abs(hammerY - barrel.y - 12) &lt; 25) {
                barrels.splice(i, 1);
                score += 300;
                playBarrelDestroySound();
                continue;
            }
        }
        
        if (player.x + player.width &gt; barrel.x + 4 &amp;&amp;
            player.x &lt; barrel.x + 20 &amp;&amp;
            player.y + player.height &gt; barrel.y + 4 &amp;&amp;
            player.y &lt; barrel.y + 20) {
            playerDie();
            return;
        }
        
        if (!barrel.jumped &amp;&amp; player.vy &lt; 0 &amp;&amp;
            player.x + player.width &gt; barrel.x - 10 &amp;&amp;
            player.x &lt; barrel.x + 34 &amp;&amp;
            player.y + player.height &lt; barrel.y) {
            barrel.jumped = true;
            score += 100;
            playScoreSound();
        }
    }
}

// Check fire collision
function checkFireCollision() {
    for (let fire of fires) {
        if (fire.isOilDrum) {
            // Can land on oil drum from above - check if falling onto the top
            if (player.x + player.width &gt; fire.x + 3 &amp;&amp;
                player.x &lt; fire.x + fire.width - 3 &amp;&amp;
                player.y + player.height &gt;= fire.y - 10 &amp;&amp;
                player.y + player.height &lt;= fire.y + 5 &amp;&amp;
                player.vy &gt; 0) {
                // Land on top of oil drum
                player.y = fire.y - player.height;
                player.vy = 0;
                player.onGround = true;
                return; // Successfully landed, don&#39;t check death
            }
            
            // If inside the drum area (not landing from above) - die
            if (player.x + player.width &gt; fire.x + 8 &amp;&amp;
                player.x &lt; fire.x + fire.width - 8 &amp;&amp;
                player.y + player.height &gt; fire.y + 8 &amp;&amp;
                player.y &lt; fire.y + fire.height - 5) {
                playerDie();
                return;
            }
        } else {
            // Moving fire enemies - always deadly
            if (player.x + player.width &gt; fire.x &amp;&amp;
                player.x &lt; fire.x + 20 &amp;&amp;
                player.y + player.height &gt; fire.y &amp;&amp;
                player.y &lt; fire.y + 20) {
                playerDie();
                return;
            }
        }
    }
}

// Check item collection
function checkItemCollection() {
    for (let item of items) {
        if (!item.collected &amp;&amp;
            player.x + player.width &gt; item.x &amp;&amp;
            player.x &lt; item.x + 20 &amp;&amp;
            player.y + player.height &gt; item.y &amp;&amp;
            player.y &lt; item.y + 25) {
            item.collected = true;
            score += item.points;
            playScoreSound();
        }
    }
    
    for (let hammer of hammers) {
        if (!hammer.collected &amp;&amp;
            player.x + player.width &gt; hammer.x &amp;&amp;
            player.x &lt; hammer.x + 30 &amp;&amp;
            player.y + player.height &gt; hammer.y &amp;&amp;
            player.y &lt; hammer.y + 25) {
            hammer.collected = true;
            player.hasHammer = true;
            player.hammerTimer = 600;
            playScoreSound();
        }
    }
}

// Check win condition
function checkWin() {
    if (player.y &lt; 100 &amp;&amp; player.x &gt; 250 &amp;&amp; player.x &lt; 350) {
        gameState = &#39;levelComplete&#39;;
        score += bonus;
        playVictoryFanfare();
        setTimeout(() =&gt; {
            level++;
            setupLevel1();
            gameState = &#39;howHigh&#39;;
            setTimeout(() =&gt; {
                gameState = &#39;playing&#39;;
                startBonusTimer();
            }, 3000);
        }, 3000);
    }
}

function playerDie() {
    playDeathSound();
    lives--;
    if (lives &lt;= 0) {
        if (score &gt; highScore) highScore = score;
        gameState = &#39;gameOver&#39;;
        stopMusic();
        clearInterval(bonusTimer);
    } else {
        player.x = 150;
        player.y = 648;
        player.vx = 0;
        player.vy = 0;
        player.hasHammer = false;
        player.climbing = false;
        player.onGround = true;
        barrels = [];
        fires = fires.filter(f =&gt; f.isOilDrum);
    }
}

// Update barrels
function updateBarrels() {
    dk.throwTimer--;
    if (dk.throwTimer &lt;= 0) {
        dk.throwTimer = BARREL_THROW_RATE + Math.random() * 60;
        dk.frame = (dk.frame + 1) % 2;
        
        barrels.push({
            x: dk.x + 60,
            y: dk.y + 50,
            vx: BARREL_SPEED,
            vy: 0,
            rotation: 0,
            onGround: false,
            jumped: false,
            goingDown: false
        });
    }
    
    for (let i = barrels.length - 1; i &gt;= 0; i--) {
        let barrel = barrels[i];
        
        barrel.vy += GRAVITY * 0.5;
        barrel.y += barrel.vy;
        barrel.x += barrel.vx;
        barrel.rotation += barrel.vx * 0.1;
        
        let wasOnGround = barrel.onGround;
        barrel.onGround = false;
        for (let plat of platforms) {
            let platY = getPlatformYAtX(plat, barrel.x + 12);
            
            if (barrel.x + 24 &gt; plat.x &amp;&amp; 
                barrel.x &lt; plat.x + plat.width &amp;&amp;
                barrel.y + 24 &gt;= platY - 5 &amp;&amp;
                barrel.y + 24 &lt;= platY + 15 &amp;&amp;
                barrel.vy &gt;= 0) {
                
                barrel.y = platY - 24;
                barrel.vy = 0;
                barrel.onGround = true;
                
                // Play thud sound when barrel lands
                if (!wasOnGround &amp;&amp; barrel.onGround) {
                    playBarrelThud();
                }
                
                if (plat.sloped) {
                    barrel.vx = plat.slopeDir * BARREL_SPEED;
                }
                break;
            }
        }
        
        if (barrel.onGround &amp;&amp; !barrel.goingDown) {
            for (let ladder of ladders) {
                if (barrel.x + 12 &gt; ladder.x &amp;&amp;
                    barrel.x + 12 &lt; ladder.x + 20 &amp;&amp;
                    barrel.y + 24 &gt;= ladder.y - 5 &amp;&amp;
                    barrel.y + 24 &lt;= ladder.y + 5 &amp;&amp;
                    Math.random() &lt; 0.3) {
                    barrel.goingDown = true;
                    barrel.vx = 0;
                    break;
                }
            }
        }
        
        if (barrel.goingDown) {
            barrel.vy = 2;
            let stillOnLadder = false;
            for (let ladder of ladders) {
                if (barrel.x + 12 &gt; ladder.x &amp;&amp;
                    barrel.x + 12 &lt; ladder.x + 20 &amp;&amp;
                    barrel.y &lt; ladder.y + ladder.height) {
                    stillOnLadder = true;
                    break;
                }
            }
            if (!stillOnLadder) {
                barrel.goingDown = false;
                barrel.vx = (barrel.x &lt; 280) ? BARREL_SPEED : -BARREL_SPEED;
            }
        }
        
        if (barrel.y &gt; 640 &amp;&amp; barrel.x &lt; 120 &amp;&amp; barrel.x &gt; 60) {
            barrels.splice(i, 1);
            if (fires.length &lt; 5 &amp;&amp; Math.random() &lt; 0.3) {
                fires.push({
                    x: 80,
                    y: 620,
                    vx: 1,
                    width: 20,
                    height: 20,
                    isOilDrum: false,
                    frame: 0
                });
            }
            continue;
        }
        
        if (barrel.x &lt; -30 || barrel.x &gt; 600 || barrel.y &gt; 750) {
            barrels.splice(i, 1);
        }
    }
}

// Update fire enemies
function updateFires() {
    for (let fire of fires) {
        fire.frame++;
        
        if (!fire.isOilDrum) {
            fire.x += fire.vx;
            if (fire.x &lt; 50 || fire.x &gt; 500) {
                fire.vx *= -1;
            }
            if (Math.random() &lt; 0.01) {
                fire.vx *= -1;
            }
        }
    }
}

// Handle input - called every frame
function handleInput() {
    if (gameState !== &#39;playing&#39;) return;
    
    // Horizontal movement (only if not climbing, or at top/bottom of ladder)
    player.vx = 0;
    if (!player.climbing || player.nearLadderTop || player.nearLadderBottom) {
        if (keys.ArrowLeft) {
            player.vx = -PLAYER_SPEED;
            player.facing = -1;
            if (player.onGround) playWalkSound();
            // Step off ladder if moving horizontally at top
            if (player.climbing &amp;&amp; player.nearLadderTop) {
                player.climbing = false;
            }
        }
        if (keys.ArrowRight) {
            player.vx = PLAYER_SPEED;
            player.facing = 1;
            if (player.onGround) playWalkSound();
            // Step off ladder if moving horizontally at top
            if (player.climbing &amp;&amp; player.nearLadderTop) {
                player.climbing = false;
            }
        }
    }
    
    // Climbing
    if (player.onLadder) {
        if (keys.ArrowUp) {
            player.climbing = true;
            player.vy = -CLIMB_SPEED;
            player.vx = 0; // Don&#39;t move horizontally while actively climbing
            playClimbSound();
        } else if (keys.ArrowDown) {
            player.climbing = true;
            player.vy = CLIMB_SPEED;
            player.vx = 0;
            playClimbSound();
        } else if (player.climbing &amp;&amp; !keys.ArrowLeft &amp;&amp; !keys.ArrowRight) {
            player.vy = 0;
        }
    } else if (player.onGround &amp;&amp; keys.ArrowDown) {
        // Try to climb down from platform
        for (let ladder of ladders) {
            let playerCenterX = player.x + player.width / 2;
            let playerBottom = player.y + player.height;
            if (playerCenterX &gt; ladder.x - 5 &amp;&amp; playerCenterX &lt; ladder.x + 25 &amp;&amp;
                playerBottom &gt;= ladder.y - 5 &amp;&amp; playerBottom &lt;= ladder.y + 15) {
                player.climbing = true;
                player.y += 5; // Move down onto ladder
                player.onGround = false;
                break;
            }
        }
    }
}

// Update player
function updatePlayer() {
    player.frameTimer++;
    
    if (player.hasHammer) {
        player.hammerTimer--;
        let oldSwingFrame = Math.floor(player.hammerSwing / 5) % 4;
        player.hammerSwing++;
        let newSwingFrame = Math.floor(player.hammerSwing / 5) % 4;
        // Play hammer hit sound on down swing (frame 2)
        if (oldSwingFrame !== newSwingFrame &amp;&amp; newSwingFrame === 2) {
            playHammerHit();
        }
        if (player.hammerTimer &lt;= 0) {
            player.hasHammer = false;
        }
    }
    
    // Handle input first
    handleInput();
    
    // Apply gravity if not climbing
    if (!player.climbing) {
        player.vy += GRAVITY;
    }
    
    // Apply velocity
    player.x += player.vx;
    player.y += player.vy;
    
    // Boundaries
    if (player.x &lt; 30) player.x = 30;
    if (player.x &gt; 510) player.x = 510;
    if (player.y &gt; 700) playerDie();
    
    // Collisions - check platforms first
    checkPlatformCollision();
    checkLadderCollision();
    
    // If climbing and reached top (not on ladder anymore), step off
    if (player.climbing &amp;&amp; !player.onLadder) {
        player.climbing = false;
        // Small boost to get onto platform
        if (player.vy &lt; 0) {
            player.vy = 0;
        }
    }
    
    // If on ground and not pressing climb keys, stop climbing
    if (player.onGround &amp;&amp; !keys.ArrowUp &amp;&amp; !keys.ArrowDown) {
        player.climbing = false;
    }
    
    checkBarrelCollision();
    checkFireCollision();
    checkItemCollection();
    checkWin();
}

// Update animations
function updateAnimations() {
    dk.frameTimer++;
    if (dk.frameTimer &gt; 30) {
        dk.frameTimer = 0;
    }
    
    pauline.frameTimer++;
    if (pauline.frameTimer &gt; 20) {
        pauline.frame = (pauline.frame + 1) % 2;
        pauline.frameTimer = 0;
    }
}

// Main update function
function update() {
    if (gameState === &#39;playing&#39;) {
        updatePlayer();
        updateBarrels();
        updateFires();
        updateAnimations();
        
        // Check if it&#39;s time to increase BPM
        if (Date.now() - bpmIncreaseTimer &gt; BPM_INCREASE_INTERVAL) {
            increaseBPM();
            bpmIncreaseTimer = Date.now();
        }
    }
}

// Start bonus countdown
function startBonusTimer() {
    clearInterval(bonusTimer);
    bonus = 5000;
    bonusTimer = setInterval(() =&gt; {
        if (gameState === &#39;playing&#39; &amp;&amp; bonus &gt; 0) {
            bonus -= 100;
        }
    }, 3000);
}

// Game loop
function gameLoop() {
    update();
    draw();
    requestAnimationFrame(gameLoop);
}

// Input handling
document.addEventListener(&#39;keydown&#39;, (e) =&gt; {
    if (e.code === &#39;ArrowLeft&#39;) keys.ArrowLeft = true;
    if (e.code === &#39;ArrowRight&#39;) keys.ArrowRight = true;
    if (e.code === &#39;ArrowUp&#39;) keys.ArrowUp = true;
    if (e.code === &#39;ArrowDown&#39;) keys.ArrowDown = true;
    if (e.code === &#39;Space&#39;) keys.Space = true;
    
    if (e.code === &#39;Enter&#39;) {
        initAudio();
        if (gameState === &#39;title&#39;) {
            gameState = &#39;howHigh&#39;;
            startMusic();
            setTimeout(() =&gt; {
                setupLevel1();
                gameState = &#39;playing&#39;;
                startBonusTimer();
            }, 3000);
        } else if (gameState === &#39;gameOver&#39;) {
            score = 0;
            lives = 3;
            level = 1;
            gameState = &#39;title&#39;;
        }
    }
    
    if (e.code === &#39;Space&#39; &amp;&amp; gameState === &#39;playing&#39;) {
        if (player.onGround &amp;&amp; !player.climbing) {
            player.vy = JUMP_FORCE;
            player.onGround = false;
            playJumpSound();
        }
    }
    
    e.preventDefault();
});

document.addEventListener(&#39;keyup&#39;, (e) =&gt; {
    if (e.code === &#39;ArrowLeft&#39;) keys.ArrowLeft = false;
    if (e.code === &#39;ArrowRight&#39;) keys.ArrowRight = false;
    if (e.code === &#39;ArrowUp&#39;) keys.ArrowUp = false;
    if (e.code === &#39;ArrowDown&#39;) keys.ArrowDown = false;
    if (e.code === &#39;Space&#39;) keys.Space = false;
});

// Start the game
gameLoop();
    &lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/3484706096479681380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/3484706096479681380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3484706096479681380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3484706096479681380'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/vector-kong.html' title='Vector Kong'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-1404215625421534959</id><published>2025-11-22T14:05:00.000-08:00</published><updated>2025-11-22T14:05:20.439-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="claude"/><title type='text'>Claude Code Agent System Architecture</title><content type='html'>   &lt;style&gt;
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
            min-height: 100vh;
            padding: 40px 20px;
            color: #fff;
        }

        h1 {
            text-align: center;
            margin-bottom: 40px;
            font-weight: 300;
            font-size: 2rem;
            color: #e2e8f0;
        }

        .architecture {
            max-width: 1000px;
            margin: 0 auto;
            display: flex;
            flex-direction: column;
            gap: 20px;
        }

        .layer {
            border-radius: 16px;
            padding: 24px;
            position: relative;
        }

        .layer-title {
            font-size: 0.75rem;
            text-transform: uppercase;
            letter-spacing: 2px;
            margin-bottom: 16px;
            font-weight: 600;
            opacity: 0.9;
        }

        .components {
            display: flex;
            flex-wrap: wrap;
            gap: 12px;
            justify-content: center;
        }

        .component {
            background: rgba(255, 255, 255, 0.1);
            backdrop-filter: blur(10px);
            border-radius: 12px;
            padding: 16px 20px;
            text-align: center;
            border: 1px solid rgba(255, 255, 255, 0.15);
            transition: transform 0.2s, box-shadow 0.2s;
            min-width: 140px;
        }

        .component:hover {
            transform: translateY(-2px);
            box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
        }

        .component-name {
            font-weight: 600;
            font-size: 0.9rem;
            margin-bottom: 8px;
        }

        .component-details {
            font-size: 0.75rem;
            opacity: 0.7;
            line-height: 1.4;
        }

        /* Layer 1 - User Interaction */
        .layer-1 {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            box-shadow: 0 10px 40px rgba(102, 126, 234, 0.3);
        }

        /* Layer 2 - Agent Core */
        .layer-2 {
            background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
            box-shadow: 0 10px 40px rgba(240, 147, 251, 0.3);
        }

        .layer-2 .components {
            display: grid;
            grid-template-columns: repeat(2, 1fr);
            gap: 12px;
        }

        /* Layer 3 - Tool Execution */
        .layer-3 {
            background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
            box-shadow: 0 10px 40px rgba(79, 172, 254, 0.3);
        }

        .layer-3 .component {
            color: #1a1a2e;
        }

        .layer-3 .layer-title {
            color: #1a1a2e;
        }

        .sublayer-title {
            font-size: 0.7rem;
            text-transform: uppercase;
            letter-spacing: 1px;
            margin: 20px 0 12px 0;
            opacity: 0.8;
            color: #1a1a2e;
        }

        .tool-grid {
            display: grid;
            grid-template-columns: repeat(4, 1fr);
            gap: 10px;
        }

        .tool-grid .component {
            min-width: auto;
            padding: 12px 16px;
        }

        /* Layer 4 - Storage */
        .layer-4 {
            background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);
            box-shadow: 0 10px 40px rgba(250, 112, 154, 0.3);
        }

        .layer-4 .component {
            color: #1a1a2e;
        }

        .layer-4 .layer-title {
            color: #1a1a2e;
        }

        /* Connector arrows */
        .connector {
            display: flex;
            justify-content: center;
            margin: -10px 0;
            position: relative;
            z-index: 10;
        }

        .arrow {
            width: 40px;
            height: 40px;
            display: flex;
            align-items: center;
            justify-content: center;
            background: rgba(255, 255, 255, 0.1);
            border-radius: 50%;
            font-size: 1.2rem;
        }

        /* Responsive */
        @media (max-width: 768px) {
            .layer-2 .components {
                grid-template-columns: 1fr;
            }

            .tool-grid {
                grid-template-columns: repeat(2, 1fr);
            }

            .components {
                flex-direction: column;
                align-items: stretch;
            }

            .component {
                min-width: auto;
            }
        }

        .disclaimer {
            max-width: 1000px;
            margin: 40px auto 0;
            padding: 16px 24px;
            background: rgba(255, 255, 255, 0.05);
            border-radius: 12px;
            border-left: 4px solid #f5576c;
            font-size: 0.85rem;
            opacity: 0.8;
            line-height: 1.6;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;Claude Code Agent System Architecture&lt;/h1&gt;

    &lt;div class=&quot;architecture&quot;&gt;
        &lt;!-- Layer 1: User Interaction --&gt;
        &lt;div class=&quot;layer layer-1&quot;&gt;
            &lt;div class=&quot;layer-title&quot;&gt;Layer 1 — User Interaction&lt;/div&gt;
            &lt;div class=&quot;components&quot;&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;CLI Interface&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Command Line&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;VSCode Extension&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Editor Plugin&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Web Interface&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Browser Access&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;connector&quot;&gt;&lt;div class=&quot;arrow&quot;&gt;↓&lt;/div&gt;&lt;/div&gt;

        &lt;!-- Layer 2: Agent Core --&gt;
        &lt;div class=&quot;layer layer-2&quot;&gt;
            &lt;div class=&quot;layer-title&quot;&gt;Layer 2 — Agent Core Scheduling&lt;/div&gt;
            &lt;div class=&quot;components&quot;&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Main Loop&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Task Scheduling&lt;br&gt;State Management&lt;br&gt;Exception Handling&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Message Queues&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Async Communication&lt;br&gt;Stream Processing&lt;br&gt;Back-pressure Control&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Session Stream&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Real-time Response&lt;br&gt;Streaming Output&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Message Compressor&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Intelligent Compression&lt;br&gt;Context Optimization&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;connector&quot;&gt;&lt;div class=&quot;arrow&quot;&gt;↓&lt;/div&gt;&lt;/div&gt;

        &lt;!-- Layer 3: Tool Execution --&gt;
        &lt;div class=&quot;layer layer-3&quot;&gt;
            &lt;div class=&quot;layer-title&quot;&gt;Layer 3 — Tool Execution &amp; Management&lt;/div&gt;
            &lt;div class=&quot;components&quot;&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Tool Engine&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Discovery&lt;br&gt;Validation&lt;br&gt;Scheduling&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Concurrency Control&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Load Balancing&lt;br&gt;Resource Mgmt&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;SubAgent Mgmt&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Task Isolation&lt;br&gt;Error Recovery&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Permission Gateway&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Security Audit&lt;br&gt;Access Control&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;sublayer-title&quot;&gt;Tool Ecosystem&lt;/div&gt;
            &lt;div class=&quot;tool-grid&quot;&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;File Ops&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Read / Write / Edit&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Search&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Glob / Grep&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Task Mgmt&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Todo / Status&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;System&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Bash Execution&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Network&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Fetch / Search&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Planning&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Plan Mode&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;MCP&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Protocol Support&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Dev Tools&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Diagnostics&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;connector&quot;&gt;&lt;div class=&quot;arrow&quot;&gt;↓&lt;/div&gt;&lt;/div&gt;

        &lt;!-- Layer 4: Storage --&gt;
        &lt;div class=&quot;layer layer-4&quot;&gt;
            &lt;div class=&quot;layer-title&quot;&gt;Layer 4 — Storage &amp; Persistence&lt;/div&gt;
            &lt;div class=&quot;components&quot;&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Short-term Memory&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Active Messages&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Compressed History&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Medium-term Context&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;Persistent Storage&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;CLAUDE.md Files&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;component&quot;&gt;
                    &lt;div class=&quot;component-name&quot;&gt;State Cache&lt;/div&gt;
                    &lt;div class=&quot;component-details&quot;&gt;Fast Retrieval&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/1404215625421534959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/1404215625421534959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/1404215625421534959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/1404215625421534959'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/claude-code-agent-system-architecture.html' title='Claude Code Agent System Architecture'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-841854638074010244</id><published>2025-11-22T13:04:00.000-08:00</published><updated>2025-11-22T13:04:13.575-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="claude"/><category scheme="http://www.blogger.com/atom/ns#" term="json"/><category scheme="http://www.blogger.com/atom/ns#" term="pcb"/><title type='text'>EasyEDA Pro Format Specification (.epro)</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;background-color: white; color: maroon; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; font-weight: bold; white-space: pre;&quot;&gt;# EasyEDA Pro Format Specification (.epro)&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## Reverse-engineered by claude.ai&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;---&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## File Structure&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon;&quot;&gt;`.epro`&lt;/span&gt; is a &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**ZIP archive**&lt;/span&gt; containing:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;project.json &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Project metadata and device definitions&lt;/div&gt;&lt;div&gt;PCB/&lt;/div&gt;&lt;div&gt;&amp;nbsp; {uuid}.epcb &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# PCB layout file(s)&lt;/div&gt;&lt;div&gt;FOOTPRINT/&lt;/div&gt;&lt;div&gt;&amp;nbsp; {uuid}.efoo &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Footprint definitions&lt;/div&gt;&lt;div&gt;SHEET/&lt;/div&gt;&lt;div&gt;&amp;nbsp; {uuid}.esch &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Schematic sheets (optional)&lt;/div&gt;&lt;div&gt;SYMBOL/&lt;/div&gt;&lt;div&gt;&amp;nbsp; {uuid}.esym &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Schematic symbols (optional)&lt;/div&gt;&lt;div&gt;INSTANCE/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # (empty in PCB-only projects)&lt;/div&gt;&lt;div&gt;POUR/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Copper pour definitions&lt;/div&gt;&lt;div&gt;PANEL/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Panel layouts&lt;/div&gt;&lt;div&gt;BLOB/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Binary blobs&lt;/div&gt;&lt;div&gt;FONT/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Custom fonts&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;---&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## project.json Structure&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```json&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;schematics&quot;&lt;/span&gt;: {},&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;pcbs&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;{uuid}&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;PCB Title&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; },&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;panels&quot;&lt;/span&gt;: {},&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;symbols&quot;&lt;/span&gt;: {},&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;footprints&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;{uuid}&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;title&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Footprint Name&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;source&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;library_source_uuid&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;version&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;version_hash&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span style=&quot;color: #098658;&quot;&gt;4&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;desc&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;tags&quot;&lt;/span&gt;: {&lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;parent_tag&quot;&lt;/span&gt;: [], &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;child_tag&quot;&lt;/span&gt;: []},&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;custom_tags&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; },&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;devices&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;{uuid}&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;title&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Part Name&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;attributes&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Supplier&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;LCSC&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Supplier Part&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;C12345&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Manufacturer&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;...&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Footprint&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;{footprint_uuid}&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Name&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Part Name&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Designator&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;U?&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Add into BOM&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;yes&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Convert to PCB&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;yes&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Description&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;3D Model&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;{model_uuid}&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;3D Model Title&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Model Name&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; },&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;description&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;source&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;library_source_uuid&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;version&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;version_hash&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; },&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;boards&quot;&lt;/span&gt;: {},&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;config&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;title&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Project Title&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;cbbProject&quot;&lt;/span&gt;: &lt;span style=&quot;color: blue;&quot;&gt;false&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;defaultSheet&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;editorVersion&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;2.2.43.4&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;---&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## PCB File Format (.epcb)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Each line is a &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**JSON array**&lt;/span&gt;. First element is the record type.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Header Records&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;DOCTYPE&quot;, &quot;PCB&quot;, &quot;1.8&quot;]&lt;/div&gt;&lt;div&gt;[&quot;CANVAS&quot;, origin_x, origin_y, &quot;mm&quot;|&quot;mil&quot;, width, height, grid_x, grid_y]&lt;/div&gt;&lt;div&gt;[&quot;LAYER&quot;, id, &quot;CODE&quot;, &quot;Description&quot;, type, &quot;#color&quot;, visible, &quot;#hover_color&quot;, flag]&lt;/div&gt;&lt;div&gt;[&quot;ACTIVE_LAYER&quot;, layer_id]&lt;/div&gt;&lt;div&gt;[&quot;RULE&quot;, &quot;rule_id&quot;, &quot;Name&quot;, enabled, [parameters...]]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Layer IDs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;| ID | Code | Description |&lt;/div&gt;&lt;div&gt;|----|------|-------------|&lt;/div&gt;&lt;div&gt;| 1 | TOP | Top Copper Layer |&lt;/div&gt;&lt;div&gt;| 2 | BOTTOM | Bottom Copper Layer |&lt;/div&gt;&lt;div&gt;| 3 | TOP_SILK | Top Silkscreen |&lt;/div&gt;&lt;div&gt;| 4 | BOT_SILK | Bottom Silkscreen |&lt;/div&gt;&lt;div&gt;| 5 | TOP_SOLDER_MASK | Top Solder Mask |&lt;/div&gt;&lt;div&gt;| 6 | BOT_SOLDER_MASK | Bottom Solder Mask |&lt;/div&gt;&lt;div&gt;| 7 | TOP_PASTE_MASK | Top Paste Mask |&lt;/div&gt;&lt;div&gt;| 8 | BOT_PASTE_MASK | Bottom Paste Mask |&lt;/div&gt;&lt;div&gt;| 11 | OUTLINE | Board Outline |&lt;/div&gt;&lt;div&gt;| 12 | MULTI | Multi-Layer (through-hole pads) |&lt;/div&gt;&lt;div&gt;| 13 | DOCUMENT | Documentation Layer |&lt;/div&gt;&lt;div&gt;| 48 | COMPONENT_SHAPE | 3D Component Shape |&lt;/div&gt;&lt;div&gt;| 49 | COMPONENT_MARKING | Component Marking |&lt;/div&gt;&lt;div&gt;| 50 | PIN_SOLDERING | Pin Soldering Layer |&lt;/div&gt;&lt;div&gt;| 51 | PIN_FLOATING | Pin Floating Layer |&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Trace/Wire Records&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;LINE&quot;, &quot;element_id&quot;, 0, &quot;net_name&quot;, layer_id, x1, y1, x2, y2, width, flags]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Example:&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;LINE&quot;, &quot;e1&quot;, 0, &quot;VCC&quot;, 1, 1495, 6140, 1495, 6440, 10, 0]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Polygon/Shape Records&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;POLY&quot;, &quot;id&quot;, 0, &quot;net&quot;, layer, width, [x1,y1,&quot;L&quot;,x2,y2,...], flags]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;For board outline:&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;POLY&quot;, &quot;e38&quot;, 0, &quot;&quot;, 11, 10, [275.6, 7007.9, &quot;L&quot;, 275.6, 7060, 2401.6, 7060, 2401.6, 5590.5, 275.6, 5590.5, 275.6, 7007.9], 0]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Pad Records&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;PAD&quot;, &quot;id&quot;, 0, &quot;net&quot;, layer, &quot;pin_num&quot;, x, y, rotation, [hole], [pad], [...], offset, ...]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: maroon;&quot;&gt;`[hole]`&lt;/span&gt;: &lt;span style=&quot;color: maroon;&quot;&gt;`[&quot;ROUND&quot;, diameter, diameter]`&lt;/span&gt; or &lt;span style=&quot;color: maroon;&quot;&gt;`[&quot;SLOT&quot;, w, h]`&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: maroon;&quot;&gt;`[pad]`&lt;/span&gt;: &lt;span style=&quot;color: maroon;&quot;&gt;`[&quot;ELLIPSE&quot;, w, h]`&lt;/span&gt; or &lt;span style=&quot;color: maroon;&quot;&gt;`[&quot;RECT&quot;, w, h, corner_radius]`&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Example:&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;PAD&quot;, &quot;e38&quot;, 0, &quot;&quot;, 12, &quot;1&quot;, -300, -165.35, 0, [&quot;ROUND&quot;, 32, 32], [&quot;RECT&quot;, 63, 63, 0], [], -0.004, 0, 0, 1, 0, 2, 2, 0, 0, 0]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Component Placement&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;COMPONENT&quot;, &quot;instance_id&quot;, 0, layer, x, y, rotation, {attributes}, flags]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Attributes object:&lt;/div&gt;&lt;div&gt;```json&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Designator&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;U1&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Add into BOM&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;yes&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Unique ID&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;gge...&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Name&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;ATTINY84A-PU&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Supplier&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;LCSC&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Supplier Part&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;C145560&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Manufacturer&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;MICROCHIP&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Footprint&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;{footprint_uuid}&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;Device&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;{device_uuid}&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;3D Model&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;{model_uuid}&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;3D Model Transform&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;787.4,311.8104,0,0,0,0,0,0,-118.11&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;3D Model Title&quot;&lt;/span&gt;: &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Component Attributes&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;ATTR&quot;, &quot;id&quot;, 0, &quot;parent_id&quot;, layer, x, y, &quot;attr_name&quot;, &quot;attr_value&quot;, visible, hidden, &quot;font&quot;, size, ...]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Pad-to-Net Assignment&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;PAD_NET&quot;, &quot;component_id&quot;, &quot;pin_number&quot;, &quot;net_name&quot;, &quot;pad_element_id&quot;]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Fill/Circle Records&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;FILL&quot;, &quot;id&quot;, 0, &quot;net&quot;, layer, width, flags, [shape], flags]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Shape can be:&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: maroon;&quot;&gt;`[&quot;CIRCLE&quot;, cx, cy, radius]`&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: maroon;&quot;&gt;`[[&quot;CIRCLE&quot;, cx, cy, radius]]`&lt;/span&gt; (nested array)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Text/String Records&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;STRING&quot;, &quot;id&quot;, 0, layer, x, y, &quot;text&quot;, &quot;font_name&quot;, size, font_size, ...]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Font Definition&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;FONT&quot;, &quot;text&quot;, &quot;font_name&quot;, size, height, bold, italic, underline, ...]&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;---&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## Footprint File Format (.efoo)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Similar structure to PCB but with relative coordinates centered on (0,0).&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Header&lt;/span&gt;&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;div&gt;[&quot;DOCTYPE&quot;, &quot;FOOTPRINT&quot;, &quot;1.8&quot;]&lt;/div&gt;&lt;div&gt;[...layer definitions...]&lt;/div&gt;&lt;div&gt;[&quot;ACTIVE_LAYER&quot;, 1]&lt;/div&gt;&lt;div&gt;[] &amp;nbsp;// Empty line separator&lt;/div&gt;&lt;div&gt;```&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Content&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: maroon;&quot;&gt;`POLY`&lt;/span&gt; - Silkscreen outlines&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: maroon;&quot;&gt;`PAD`&lt;/span&gt; - Pad definitions with pin numbers&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: maroon;&quot;&gt;`FILL`&lt;/span&gt; - Pad/via markers&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: maroon;&quot;&gt;`ATTR`&lt;/span&gt; - Footprint name, designator&lt;/div&gt;&lt;br /&gt;&lt;div&gt;---&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## Coordinate System&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Units: mil (1 mil = 0.001 inch = 0.0254 mm) or mm&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Origin: Typically top-left or center depending on context&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Y-axis: Positive downward in EasyEDA&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Rotation: Degrees, counter-clockwise&lt;/div&gt;&lt;br /&gt;&lt;div&gt;---&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## UUID Generation&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;UUIDs appear to be:&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; 32-character hex strings (no dashes)&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Sometimes prefixed with letters like &quot;gge&quot; for element IDs&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Example: &lt;span style=&quot;color: maroon;&quot;&gt;`a0aa170576c046e79025ad5dea61eb19`&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;---&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## Notes&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;1.&lt;/span&gt; All coordinates are in the units specified by CANVAS&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;2.&lt;/span&gt; Net names connect traces/pads with the same net&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;3.&lt;/span&gt; Footprint UUIDs link components to their physical footprints&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;4.&lt;/span&gt; Device UUIDs link to BOM/ordering information&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;5.&lt;/span&gt; 3D Model UUIDs reference models in the EasyEDA library&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/841854638074010244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/841854638074010244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/841854638074010244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/841854638074010244'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/easyeda-pro-format-specification-epro.html' title='EasyEDA Pro Format Specification (.epro)'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-3995503037366722899</id><published>2025-11-22T13:03:00.000-08:00</published><updated>2025-11-22T13:03:02.393-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="claude"/><category scheme="http://www.blogger.com/atom/ns#" term="EasyEda"/><category scheme="http://www.blogger.com/atom/ns#" term="pcb"/><title type='text'>Claude.ai attempt at designing a pcb.   </title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;after several iterations I was able to&amp;nbsp; make&amp;nbsp; file EasyEda could read.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Below is the end result.&amp;nbsp;&lt;/p&gt;&lt;p&gt;It&#39;s a bit of a mess.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjqlwbh_tsi1yNz36uTrCnLjmy8w7tW7rrdTeLiuS78rfgJyEBG-LzB_eN7Ko-V2vWWPCGIURyerRxvJB-yvHGvDCJi036MtkFOi-8V1mSMjwzy0dHz1W8V1SurPKm7VOnHAi-KkVvD4fSBFMZnltU9aRfe1knQSaM9BhemnSj1Wdr9sjuF3ukkrA&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;415&quot; data-original-width=&quot;571&quot; height=&quot;291&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjqlwbh_tsi1yNz36uTrCnLjmy8w7tW7rrdTeLiuS78rfgJyEBG-LzB_eN7Ko-V2vWWPCGIURyerRxvJB-yvHGvDCJi036MtkFOi-8V1mSMjwzy0dHz1W8V1SurPKm7VOnHAi-KkVvD4fSBFMZnltU9aRfe1knQSaM9BhemnSj1Wdr9sjuF3ukkrA=w400-h291&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;below is the working example I gave to understand the JSON format for .epro files.&amp;nbsp; I will post this next.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg1KoDXk0Y3BudZbQpKZFFKtzsnHPkB8Z3Z6oqXHtV3x6nZm7zz6QunpNlnwdpzHTTiWBMz0pcal29Qmkf8Akkha9zjF1ejg7JQuDhI6kID4tS1HhYZGRLRC_N5a2RRDnjK4c0JurYNvhA6JEsTUz7b59EUB4XzAMlWgXepSvY_HrkxWKSJkpMPbA&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;426&quot; data-original-width=&quot;570&quot; height=&quot;299&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg1KoDXk0Y3BudZbQpKZFFKtzsnHPkB8Z3Z6oqXHtV3x6nZm7zz6QunpNlnwdpzHTTiWBMz0pcal29Qmkf8Akkha9zjF1ejg7JQuDhI6kID4tS1HhYZGRLRC_N5a2RRDnjK4c0JurYNvhA6JEsTUz7b59EUB4XzAMlWgXepSvY_HrkxWKSJkpMPbA=w400-h299&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/3995503037366722899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/3995503037366722899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3995503037366722899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3995503037366722899'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/claudeai-attempt-at-designing-pcb.html' title='Claude.ai attempt at designing a pcb.   '/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjqlwbh_tsi1yNz36uTrCnLjmy8w7tW7rrdTeLiuS78rfgJyEBG-LzB_eN7Ko-V2vWWPCGIURyerRxvJB-yvHGvDCJi036MtkFOi-8V1mSMjwzy0dHz1W8V1SurPKm7VOnHAi-KkVvD4fSBFMZnltU9aRfe1knQSaM9BhemnSj1Wdr9sjuF3ukkrA=s72-w400-h291-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-2032187001068664366</id><published>2025-11-19T04:38:00.000-08:00</published><updated>2025-11-22T13:18:52.111-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="claude"/><category scheme="http://www.blogger.com/atom/ns#" term="reverse engineering"/><title type='text'>reverse engineering Claude Code</title><content type='html'>&lt;div&gt;Just stumbled upon this by accident.&amp;nbsp;&lt;/div&gt;

&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href=&quot;https://github.com/shareAI-lab/analysis_claude_code&quot; target=&quot;_blank&quot;&gt;https://github.com/shareAI-lab/analysis_claude_code&lt;/a&gt;&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;This repository contains comprehensive research and analysis of reverse engineering Claude Code v1.0.33. It includes in-depth technical analysis of the obfuscated source code, system architecture documentation, and a blueprint for refactoring the Claude Code agent system. Key findings include real-time steering mechanisms, multi-agent architecture, intelligent context management, etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Fellow us on X: &lt;a href=&quot;https://x.com/baicai003&quot;&gt;https://x.com/baicai003&lt;/a&gt;&lt;br /&gt;注意：非100%准确！本仓库是我们研究学习“Agent模型公司是如何做Agent工程？”这件事的时候，一时兴起，借助claude code自行分析的claude code本身的混淆后代码，由于混淆代码很乱很散分析难度极大，CC多少会稍微有一些幻觉，该仓库仅作参考和学习！相关Claude code提示词在work_doc_for_this文件夹里，感兴趣的小伙伴可以自己复制提示词尝试复现！&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note: Not 100% accurate! This repository is a piece of obfuscated Claude code that we created on a whim while researching &quot;How do agent model companies do agent engineering?&quot; Because the obfuscated code is very messy and scattered, making analysis extremely difficult, there may be some illusions. This repository is for reference and learning purposes only! The relevant Claude code hints are in the `work_doc_for_this` folder. Those interested can copy the hints and try to reproduce the code!&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;## About This Analysis&lt;/blockquote&gt;&lt;br /&gt;This repository contains comprehensive research and analysis from reverse engineering **Claude Code v1.0.33**. It includes:&lt;br /&gt;&lt;br /&gt;- In-depth technical analysis of the obfuscated source code&lt;br /&gt;- System architecture documentation&lt;br /&gt;- A blueprint for refactoring the Claude Code agent system&lt;br /&gt;&lt;br /&gt;**Key findings include:** real-time steering mechanisms, multi-agent architecture, intelligent context management, and more.&lt;br /&gt;&lt;br /&gt;### ⚠️ Disclaimer&lt;br /&gt;&lt;br /&gt;&amp;gt; **Note: Not 100% accurate!**&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; This repository was created while researching *&quot;How do agent model companies approach agent engineering?&quot;* The analysis was performed by Claude Code itself on its own obfuscated code. Due to the messy and scattered nature of obfuscated code, some hallucinations may be present.&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; **This repository is for reference and learning purposes only.**&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Relevant prompts are available in the `work_doc_for_this` folder for those who wish to reproduce the analysis.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;## System Architecture Overview&lt;br /&gt;&lt;br /&gt;The Claude Code agent system is organized into four primary layers:&lt;div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; line-height: 19px; white-space: pre;&quot;&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;```&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;┌─────────────────────────────────────────────────────────────────┐&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;USER INTERACTION LAYER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; │&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;├─────────────────────────────────────────────────────────────────┤&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AGENT CORE SCHEDULING LAYER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;├─────────────────────────────────────────────────────────────────┤&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TOOL EXECUTION &amp;amp; MANAGEMENT LAYER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;├─────────────────────────────────────────────────────────────────┤&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STORAGE &amp;amp; PERSISTENCE LAYER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; │&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;└─────────────────────────────────────────────────────────────────┘&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;```&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;---&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## Layer 1: User Interaction Layer&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;The entry points for user interaction with Claude Code:&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;| Interface | Description |&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;|-----------|-------------|&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;| &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**CLI Interface**&lt;/span&gt; | Command-line interaction |&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;| &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**VSCode Integration**&lt;/span&gt; | Editor plugin for seamless development |&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;| &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**Web Interface**&lt;/span&gt; | Browser-based access |&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;---&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## Layer 2: Agent Core Scheduling Layer&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;The brain of the system, responsible for orchestrating all agent activities.&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Main Loop (&lt;/span&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;`AgentLoop`&lt;/span&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Task scheduling&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; State management&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Exception handling&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Message Queues (&lt;/span&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;`AsyncQueue`&lt;/span&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Asynchronous communication&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Stream processing&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Back-pressure control&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Session Stream Generator&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Real-time response generation&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Streaming output&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Message Compressor&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Intelligent compression&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Context optimization&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;---&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## Layer 3: Tool Execution &amp;amp; Management Layer&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;Handles the execution and coordination of all available tools.&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Core Components&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;| Component | Responsibilities |&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;|-----------|-----------------|&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;| &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**Tool Engine**&lt;/span&gt; | Tool discovery, parameter validation, execution scheduling |&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;| &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**Concurrency Control**&lt;/span&gt; | Concurrency limits, load balancing, resource management |&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;| &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**SubAgent Management**&lt;/span&gt; | Task isolation, error recovery, state synchronization |&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;| &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**Permission Gateway**&lt;/span&gt; | Permission checks, security audits, access control |&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;### Tool Ecosystem&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;#### File Operations&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Read / Write&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Edit / Multi-file operations&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;#### Search &amp;amp; Discovery&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Glob / Grep&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Pattern matching&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;#### Task Management&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Todo system&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Status tracking&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;#### System Execution&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Bash execution&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Command invocation&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;#### Network Interaction&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; WebFetch&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; WebSearch&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;#### Special Functions&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Plan mode&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Exit plan&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;#### MCP Integration&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Protocol support&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Service discovery&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;#### Developer Tools&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Code diagnostics&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #0451a5;&quot;&gt;-&lt;/span&gt; Performance monitoring&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;---&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;## Layer 4: Storage &amp;amp; Persistence Layer&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;Manages different levels of memory and state.&lt;/div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;| Storage Type | Purpose |&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;|--------------|---------|&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;| &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**Short-term Memory**&lt;/span&gt; | Active messages in current session |&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;| &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**Medium-term Compressed History**&lt;/span&gt; | Compressed conversation context |&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;| &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**Long-term Persistent Storage**&lt;/span&gt; | &lt;span style=&quot;color: maroon;&quot;&gt;`CLAUDE.md`&lt;/span&gt; files and project memory |&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;| &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;**State Caching System**&lt;/span&gt; | Performance-optimized state retrieval |&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;---&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Claude Code Agent System Architecture&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;line-height: 19px;&quot;&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;```&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;┌────────────────────────────────────────────────────────────────┐&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; User Interaction Layer &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; │&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;┌───────────────┐ &amp;nbsp;┌──────────────────┐ &amp;nbsp;┌─────────────────┐ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp; &amp;nbsp; &amp;nbsp;CLI &amp;nbsp; &amp;nbsp; &amp;nbsp;│ &amp;nbsp;│ VSCode Extension │ &amp;nbsp;│ &amp;nbsp;Web Interface &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;└───────┬───────┘ &amp;nbsp;└────────┬─────────┘ &amp;nbsp;└────────┬────────┘ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;└──────────┼───────────────────┼─────────────────────┼───────────┘&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; │ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; │&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;▼ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ▼ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ▼&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;┌────────────────────────────────────────────────────────────────┐&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Agent Core Scheduling Layer &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;┌─────────────────────┐ &amp;nbsp; &amp;nbsp; &amp;nbsp;┌─────────────────────────────┐ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp; &amp;nbsp;Main Loop &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│◄────►│ &amp;nbsp; &amp;nbsp; &amp;nbsp;Message Queues &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; │ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp; &amp;nbsp;(AgentLoop) &amp;nbsp; &amp;nbsp; &amp;nbsp;│ &amp;nbsp; &amp;nbsp; &amp;nbsp;│ &amp;nbsp; &amp;nbsp; &amp;nbsp;(AsyncQueue) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; │ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;└─────────────────────┘ &amp;nbsp; &amp;nbsp; &amp;nbsp;└─────────────────────────────┘ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;┌─────────────────────┐ &amp;nbsp; &amp;nbsp; &amp;nbsp;┌─────────────────────────────┐ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp;Session Stream &amp;nbsp; &amp;nbsp; │ &amp;nbsp; &amp;nbsp; &amp;nbsp;│ &amp;nbsp; &amp;nbsp;Message Compressor &amp;nbsp; &amp;nbsp; &amp;nbsp; │ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp;Generator &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│ &amp;nbsp; &amp;nbsp; &amp;nbsp;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; │ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;└─────────────────────┘ &amp;nbsp; &amp;nbsp; &amp;nbsp;└─────────────────────────────┘ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;└────────────────────────────────┬───────────────────────────────┘&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;▼&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;┌────────────────────────────────────────────────────────────────┐&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tool Execution &amp;amp; Management Layer &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; │&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;┌────────────┐ ┌────────────┐ ┌────────────┐ ┌─────────────┐ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp; Tool &amp;nbsp; &amp;nbsp; │ │ Concurrency│ │ &amp;nbsp;SubAgent &amp;nbsp;│ │ Permission &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp; Engine &amp;nbsp; │ │ &amp;nbsp;Control &amp;nbsp; │ │ Management │ │ &amp;nbsp; Gateway &amp;nbsp; │ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;└────────────┘ └────────────┘ └────────────┘ └─────────────┘ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;┌──────────────────────────────────────────────────────────┐ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tool Ecosystem &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp;┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────────┐ &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp;│ &amp;nbsp;File &amp;nbsp; &amp;nbsp;│ │ &amp;nbsp;Search &amp;nbsp;│ │ &amp;nbsp; Task &amp;nbsp; │ │ &amp;nbsp; System &amp;nbsp; &amp;nbsp;│ &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp;│ &amp;nbsp; Ops &amp;nbsp; &amp;nbsp;│ │ Discovery│ │ &amp;nbsp; Mgmt &amp;nbsp; │ │ &amp;nbsp;Execution &amp;nbsp;│ &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp;└──────────┘ └──────────┘ └──────────┘ └─────────────┘ &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp;┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────────┐ &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp;│ Network &amp;nbsp;│ │ Special &amp;nbsp;│ │ &amp;nbsp; MCP &amp;nbsp; &amp;nbsp;│ │ &amp;nbsp;Developer &amp;nbsp;│ &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp;│ Interact │ │Functions │ │Integration│ │ &amp;nbsp; Tools &amp;nbsp; &amp;nbsp;│ &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp;└──────────┘ └──────────┘ └──────────┘ └─────────────┘ &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;└──────────────────────────────────────────────────────────┘ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;└────────────────────────────────┬───────────────────────────────┘&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;▼&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;┌────────────────────────────────────────────────────────────────┐&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Storage &amp;amp; Persistence Layer &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;┌────────────┐ ┌────────────┐ ┌────────────┐ ┌─────────────┐ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ Short-term │ │Medium-term │ │ Long-term &amp;nbsp;│ │ &amp;nbsp; &amp;nbsp;State &amp;nbsp; &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ &amp;nbsp; Memory &amp;nbsp; │ │ Compressed │ │ Persistent │ │ &amp;nbsp; &amp;nbsp;Cache &amp;nbsp; &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;│ (Messages) │ │ &amp;nbsp;History &amp;nbsp; │ │(CLAUDE.md) │ │ &amp;nbsp; System &amp;nbsp; &amp;nbsp;│ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;│ &amp;nbsp;└────────────┘ └────────────┘ └────────────┘ └─────────────┘ &amp;nbsp;│&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;└────────────────────────────────────────────────────────────────┘&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;SO I presented this to Claude and asked...&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&lt;span face=&quot;anthropicSans, &amp;quot;anthropicSans Fallback&amp;quot;, system-ui, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: #141413; color: #faf9f5; font-size: 16px; text-wrap-mode: wrap;&quot;&gt;does this seem accurate?&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Thought process:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The user is asking whether the content of this reverse-engineered analysis of Claude Code seems accurate. This is an interesting question because:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am Claude, and Claude Code is an Anthropic product&lt;br /&gt;The document claims to be a reverse-engineering analysis of Claude Code&#39;s architecture&lt;br /&gt;The user wants to know if the technical details seem plausible/accurate&lt;br /&gt;&lt;br /&gt;I should be honest here. I don&#39;t have insider knowledge of Claude Code&#39;s actual implementation details. The document itself has a disclaimer saying it&#39;s &quot;not 100% accurate&quot; and may contain &quot;hallucinations&quot; since it was generated by having Claude analyze obfuscated code. I can offer some observations: The general architecture pattern (layers for UI, core logic, tools, storage) is a reasonable and common architecture for agent systems Some of the specific component names (like &quot;nO Main Loop&quot;, &quot;h2A Message Queues&quot;, &quot;wU2 Session&quot;, &quot;MH1 Tool&quot;, &quot;UH1 Concurrency&quot;) look like they could be obfuscated variable/function names from minified JavaScript The general concepts (message queues, tool execution, permission gateways, context compression) are standard patterns you&#39;d expect in an agent system The tool categories mentioned (file operations, search, bash execution, web fetch/search) do align with tools that Claude Code is known to have However, I genuinely don&#39;t know the actual internal architecture of Claude Code. I should be transparent about this and note that: I can&#39;t verify the accuracy of specific implementation details The high-level architecture seems plausible for an agent system The authors themselves acknowledge it may not be accurate Some specific claims could be hallucinations from analyzing obfuscated code &lt;br /&gt;I should give an honest, balanced assessment without claiming knowledge I don&#39;t have.&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Consolas, Courier New, monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Honestly, I can&#39;t verify the specific implementation details since I don&#39;t have insider knowledge of Claude Code&#39;s actual architecture. But here&#39;s my assessment:&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;strong&gt;What seems plausible:&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-2.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;The &lt;strong&gt;general layered architecture&lt;/strong&gt; (UI → Core → Tools → Storage) is a standard, sensible pattern for agent systems&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;The &lt;strong&gt;tool categories&lt;/strong&gt; (file ops, bash, web search/fetch, glob/grep) align with Claude Code&#39;s known public capabilities&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Context compression&lt;/strong&gt; and &lt;strong&gt;message management&lt;/strong&gt; are real challenges any long-running agent must solve&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;The &lt;strong&gt;permission gateway&lt;/strong&gt; concept makes sense given Claude Code asks for user approval on certain actions&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;strong&gt;What&#39;s suspect or uncertain:&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-2.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;The &lt;strong&gt;specific component names&lt;/strong&gt; (&lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;nO&lt;/code&gt;, &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;h2A&lt;/code&gt;, &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;wU2&lt;/code&gt;, &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;MH1&lt;/code&gt;, &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;UH1&lt;/code&gt;) look like artifacts from minified/obfuscated JavaScript—these are likely arbitrary variable names, not meaningful architecture labels&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;The &lt;strong&gt;&quot;SubAgent Management&quot;&lt;/strong&gt; / multi-agent claims are speculative—Claude Code may or may not use sub-agents internally&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Many &lt;strong&gt;specific details&lt;/strong&gt; (like the exact compression strategy or queue implementation) could easily be hallucinated when analyzing obfuscated code&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;strong&gt;The authors are upfront about this:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote class=&quot;border-border-200 border-l-4 pl-4&quot;&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;em&gt;&quot;Because the obfuscated code is very messy and scattered, making analysis extremely difficult, there may be some hallucinations.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; It&#39;s a reasonable &lt;em&gt;hypothesis&lt;/em&gt; of how such a system might work, but I&#39;d treat it as informed speculation rather than ground truth. The high-level patterns are likely directionally correct; the specifics are uncertain.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/2032187001068664366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/2032187001068664366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/2032187001068664366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/2032187001068664366'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/reverse-engineering-claude-code.html' title='reverse engineering Claude Code'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-1636793238395811777</id><published>2025-11-18T21:59:00.000-08:00</published><updated>2025-11-18T21:59:50.642-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="claude"/><category scheme="http://www.blogger.com/atom/ns#" term="music"/><title type='text'>Roland TR-707 RHYTHM COMPOSER emulator web page. </title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://johnsokol.github.io/tr707.html&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;https://johnsokol.github.io/tr707.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjwFIQZ7p4-4NCz7Hu2gdQLSTxG64p3QmA5tOhdYr2d5QwVdMWeF_b7ozpvG-dw9EfBIYaPv9mz7X9TSXPTNPGsVEt0IF6XHzW4n8ePNTl2ztu8pIpLPPHCBhhsfAegk4jtKEpXwc39qQeM8pTwLY3qvLevTDuUKrKOQ_DqYMHYPr-MK8Wz4fUelw&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1014&quot; data-original-width=&quot;1427&quot; height=&quot;284&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjwFIQZ7p4-4NCz7Hu2gdQLSTxG64p3QmA5tOhdYr2d5QwVdMWeF_b7ozpvG-dw9EfBIYaPv9mz7X9TSXPTNPGsVEt0IF6XHzW4n8ePNTl2ztu8pIpLPPHCBhhsfAegk4jtKEpXwc39qQeM8pTwLY3qvLevTDuUKrKOQ_DqYMHYPr-MK8Wz4fUelw=w400-h284&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Not much to say, touch the knob to chose the sample and pick where in the beat to place it.&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/1636793238395811777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/1636793238395811777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/1636793238395811777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/1636793238395811777'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/roland-tr-707-rhythm-composer-emulator.html' title='Roland TR-707 RHYTHM COMPOSER emulator web page. '/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjwFIQZ7p4-4NCz7Hu2gdQLSTxG64p3QmA5tOhdYr2d5QwVdMWeF_b7ozpvG-dw9EfBIYaPv9mz7X9TSXPTNPGsVEt0IF6XHzW4n8ePNTl2ztu8pIpLPPHCBhhsfAegk4jtKEpXwc39qQeM8pTwLY3qvLevTDuUKrKOQ_DqYMHYPr-MK8Wz4fUelw=s72-w400-h284-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-8349967341289316538</id><published>2025-11-18T21:49:00.000-08:00</published><updated>2025-11-18T21:49:37.918-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mjpg"/><category scheme="http://www.blogger.com/atom/ns#" term="motion jpeg"/><title type='text'>Motion JPEG player is able to replay my old xjpg format from 1997.</title><content type='html'>&lt;div style=&quot;text-align: center; margin: 20px 0;&quot;&gt;
    &lt;iframe 
        src=&quot;https://johnsokol.github.io//mjpeg-player-autoload.html&quot; 
        width=&quot;800&quot; 
        height=&quot;700&quot; 
        style=&quot;border: 2px solid #4a9eff; border-radius: 8px; max-width: 100%;&quot;
        frameborder=&quot;0&quot;
        allowfullscreen&gt;
    &lt;/iframe&gt;
    &lt;p style=&quot;color: #666; font-size: 12px; margin-top: 10px;&quot;&gt;
        MJPEG Video Player
    &lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/8349967341289316538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/8349967341289316538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/8349967341289316538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/8349967341289316538'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/motion-jpeg-player-is-able-to-replay-my.html' title='Motion JPEG player is able to replay my old xjpg format from 1997.'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-2302130263269745654</id><published>2025-11-18T21:35:00.000-08:00</published><updated>2025-11-18T21:35:32.821-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="claude"/><category scheme="http://www.blogger.com/atom/ns#" term="gwbasic play"/><category scheme="http://www.blogger.com/atom/ns#" term="music"/><title type='text'>The GWBASIC Chord Player: Bringing Classic Computing Music to the Modern Web</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h1 class=&quot;font-claude-response-title mt-1 text-text-100&quot;&gt;The GWBASIC Chord Player: Bringing Classic Computing Music to the Modern Web&lt;/h1&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;The &lt;strong&gt;GWBASIC Chord Player&lt;/strong&gt; is a web-based music player that faithfully recreates and extends the classic GWBASIC PLAY command syntax from the 1980s. Originally introduced in Microsoft&#39;s GWBASIC programming language for early IBM PC compatibles, the PLAY command allowed programmers to create music using a simple text-based notation system. This modern implementation not only preserves that vintage syntax but significantly enhances it with contemporary features like chord support, real-time visualization, and professional audio controls.&lt;/p&gt;
&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;From Retro Commands to Modern Music&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;The player interprets the familiar GWBASIC notation: &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;T120&lt;/code&gt; sets tempo, &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;O4&lt;/code&gt; changes octaves, &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;L4&lt;/code&gt; defines note lengths, and letters A-G represent musical notes. What sets this implementation apart is its &lt;strong&gt;extended chord notation&lt;/strong&gt; using brackets—&lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;[C,E,G]&lt;/code&gt; plays a C major chord, while &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;[O2C,O4C,E,G]&lt;/code&gt; allows complex piano arrangements with bass notes spanning multiple octaves. This extension maintains the spirit of the original command while unlocking harmonic possibilities that weren&#39;t available in the 1980s. The player handles sharps (#), flats (b), rests (P), and duration modifiers with the same simplicity that made GWBASIC music accessible to beginner programmers decades ago.&lt;/p&gt;
&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;A Complete Music Creation Ecosystem&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;Version 3.0 transforms the simple player into a comprehensive music tool with real-time waveform visualization, multiple synthesizer types (sine, square, sawtooth, triangle), master volume control, and reverb effects. The interface features an organized example library with everything from children&#39;s songs to jazz standards, categorized by difficulty and style. Users can save and load their compositions, test examples with a single click, and even use keyboard shortcuts for quick playback. The tabbed interface provides easy access to a complete command reference, example gallery, and version changelog, making it both a practical tool and an educational resource.&lt;/p&gt;
&lt;h2 class=&quot;font-claude-response-heading text-text-100 mt-1 -mb-0.5&quot;&gt;Bridging Past and Present&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body whitespace-normal break-words&quot;&gt;What makes the GWBASIC Chord Player particularly compelling is how it connects vintage computing nostalgia with modern web capabilities. Complementary tools like the &lt;strong&gt;MIDI-to-GWBASIC converter&lt;/strong&gt; and &lt;strong&gt;MusicXML-to-GWBASIC converter&lt;/strong&gt; allow users to transform contemporary sheet music and digital audio files into the classic text format. A curated collection of beginner piano pieces demonstrates the system&#39;s capabilities, from &quot;Twinkle Twinkle Little Star&quot; to Beethoven&#39;s &quot;Ode to Joy,&quot; all rendered in simple text notation that anyone can type, modify, and share. Whether you&#39;re a retro computing enthusiast, a music educator looking for accessible notation, or simply curious about how early computers made music, the GWBASIC Chord Player offers a unique window into computing history while providing genuinely useful modern functionality.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h1 style=&quot;animation: 2s ease-in-out 0s infinite alternate none running glow; box-sizing: border-box; color: lime; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 36px; margin: 20px 0px; text-align: center; text-shadow: rgb(0, 255, 0) 0px 0px 20px, rgb(0, 170, 0) 0px 0px 40px;&quot;&gt;GWBASIC PLAY COMMAND PLAYER&lt;/h1&gt;&lt;/div&gt;&lt;a href=&quot;https://johnsokol.github.io/gwbasic-chord-player2.html&quot;&gt;

https://johnsokol.github.io/gwbasic-chord-player2.html

&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Command Reference:&lt;div&gt;Tnnn - Tempo (beats per minute, 32-255, default 120)&lt;br /&gt;On - Octave (0-6, default 4, 4 is middle octave)&lt;br /&gt;Ln - Default note Length (1=whole, 2=half, 4=quarter, 8=eighth, 16=sixteenth)&lt;br /&gt;A-G - Notes (can add # or + for sharp, - for flat)&lt;br /&gt;P - Pause/rest&lt;br /&gt;Number after note - Duration override (e.g., C8 = eighth note C)&lt;br /&gt;&lt;br /&gt;🎵 NEW CHORD SYNTAX:&lt;br /&gt;[note1,note2,note3] - Play notes as chord with default length&lt;br /&gt;[note1,note2,note3]n - Play chord with duration n&lt;br /&gt;[C,E,G]4 - C major triad, quarter note&lt;br /&gt;[E,O5C#]2 - E4 and C#5 together, half note&lt;br /&gt;[D,F#,A,O5D]1 - D major with octave extension, whole note&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;• Octave changes inside brackets apply to following notes: [C,O5E,G]&lt;br /&gt;• Sharps/flats work inside brackets: [C#,E,G#]&lt;br /&gt;• Duration after bracket applies to entire chord: [C,E,G]2&lt;br /&gt;• Mix single notes and chords freely: C4 [E,G]4 B2&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://johnsokol.github.io/gwbasic-chord-player-v3.html&quot;&gt;https://johnsokol.github.io/gwbasic-chord-player-v3.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;adds a new option...&amp;nbsp;&lt;/div&gt;&lt;div&gt;[O2C,O4C,E,G] - Bass + chord (wide octave spread for piano)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Examples:&lt;/div&gt;&lt;div&gt;Simple melody: T120 O4 L4 C D E F G&lt;/div&gt;&lt;div&gt;With chords: T120 O4 L4 [C,E,G] [D,F,A] [E,G,B]&lt;/div&gt;&lt;div&gt;Piano style: T120 O2 L4 [C,O4C,E,G] [G,O4B,D,F]&lt;/div&gt;&lt;div&gt;Mixed durations: T120 O4 L4 C8 D8 E4 F2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhKrfe4dLNb-Fo2ZJrza0VU-HhLDCFjRyWKrCvBK690AMSG0CKwfAFHSESghgckPV61NDQnO60WeJeLNzQGawvwZ3FbLCoN1JeK4qDRiXJMgKXZ1xTkCzgc7XhUCpGwwQStawy4J79bbiJKSZc7SuhUp-oukijywGddhwxV41YtYPNDFnVYuD49Ig&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1130&quot; data-original-width=&quot;1226&quot; height=&quot;591&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhKrfe4dLNb-Fo2ZJrza0VU-HhLDCFjRyWKrCvBK690AMSG0CKwfAFHSESghgckPV61NDQnO60WeJeLNzQGawvwZ3FbLCoN1JeK4qDRiXJMgKXZ1xTkCzgc7XhUCpGwwQStawy4J79bbiJKSZc7SuhUp-oukijywGddhwxV41YtYPNDFnVYuD49Ig=w640-h591&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/2302130263269745654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/2302130263269745654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/2302130263269745654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/2302130263269745654'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/the-gwbasic-chord-player-bringing.html' title='The GWBASIC Chord Player: Bringing Classic Computing Music to the Modern Web'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhKrfe4dLNb-Fo2ZJrza0VU-HhLDCFjRyWKrCvBK690AMSG0CKwfAFHSESghgckPV61NDQnO60WeJeLNzQGawvwZ3FbLCoN1JeK4qDRiXJMgKXZ1xTkCzgc7XhUCpGwwQStawy4J79bbiJKSZc7SuhUp-oukijywGddhwxV41YtYPNDFnVYuD49Ig=s72-w640-h591-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-289096198419921674</id><published>2025-11-17T18:41:02.245-08:00</published><updated>2025-11-17T18:45:03.426-08:00</updated><title type='text'>♪ GWBASIC PLAY Command Player ♪</title><content type='html'> 
 
    &lt;style&gt;
        body {
            font-family: &#39;Courier New&#39;, monospace;
            max-width: 800px;
            margin: 50px auto;
            padding: 20px;
            background: #1a1a1a;
            color: #00ff00;
        }
        h1 {
            text-align: center;
            color: #00ff00;
            text-shadow: 0 0 10px #00ff00;
        }
        .container {
            background: #000;
            border: 2px solid #00ff00;
            padding: 20px;
            border-radius: 5px;
        }
        input[type=&quot;text&quot;] {
            width: 100%;
            padding: 10px;
            font-family: &#39;Courier New&#39;, monospace;
            font-size: 16px;
            background: #0a0a0a;
            color: #00ff00;
            border: 1px solid #00ff00;
            border-radius: 3px;
            margin: 10px 0;
        }
        button {
            padding: 10px 20px;
            font-family: &#39;Courier New&#39;, monospace;
            font-size: 16px;
            background: #00ff00;
            color: #000;
            border: none;
            border-radius: 3px;
            cursor: pointer;
            margin-right: 10px;
            margin-top: 10px;
        }
        button:hover {
            background: #00cc00;
        }
        button:disabled {
            background: #006600;
            cursor: not-allowed;
        }
        .examples {
            margin-top: 20px;
            padding: 15px;
            background: #0a0a0a;
            border: 1px solid #006600;
            border-radius: 3px;
        }
        .examples h3 {
            margin-top: 0;
            color: #00ff00;
        }
        .example {
            margin: 10px 0;
            cursor: pointer;
            padding: 5px;
        }
        .example:hover {
            background: #1a1a1a;
        }
        .example code {
            color: #00ff00;
        }
        .info {
            margin-top: 20px;
            padding: 15px;
            background: #0a0a0a;
            border: 1px solid #006600;
            border-radius: 3px;
            font-size: 14px;
        }
    &lt;/style&gt;
 
    &lt;h1&gt;♪ GWBASIC PLAY Command Player ♪&lt;/h1&gt;
    
    &lt;div class=&quot;container&quot;&gt;
        &lt;label for=&quot;playString&quot;&gt;Enter PLAY Command String:&lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;playString&quot; value=&quot;T120 O4 L4 C D E F G A B O5 C&quot; placeholder=&quot;T120 O4 L4 C D E F G&quot;&gt;
        &lt;button id=&quot;playBtn&quot;&gt;▶ PLAY&lt;/button&gt;
        &lt;button id=&quot;stopBtn&quot;&gt;⏹ STOP&lt;/button&gt;
        
        &lt;div class=&quot;examples&quot;&gt;
            &lt;h3&gt;Examples (click to load):&lt;/h3&gt;
            &lt;div class=&quot;example&quot; data-play=&quot;T120 O4 L4 C D E F G A B O5 C&quot;&gt;
                &lt;strong&gt;Scale:&lt;/strong&gt; &lt;code&gt;T120 O4 L4 C D E F G A B O5 C&lt;/code&gt;
            &lt;/div&gt;
            &lt;div class=&quot;example&quot; data-play=&quot;T180 O4 L8 C C G G A A G2 F F E E D D C2&quot;&gt;
                &lt;strong&gt;Twinkle Twinkle:&lt;/strong&gt; &lt;code&gt;T180 O4 L8 C C G G A A G2 F F E E D D C2&lt;/code&gt;
            &lt;/div&gt;
            &lt;div class=&quot;example&quot; data-play=&quot;T340 O4 L4 E E P E P C E P G2 P2 O3 G2 P2&quot;&gt;
                &lt;strong&gt;Mario Theme:&lt;/strong&gt; &lt;code&gt;T340 O4 L4 E E P E P C E P G2 P2 O3 G2 P2&lt;/code&gt;
            &lt;/div&gt;
            &lt;div class=&quot;example&quot; data-play=&quot;T120 O4 L16 C C C L8 D L4 E L8 D L16 E F L2 G&quot;&gt;
                &lt;strong&gt;Mixed Durations:&lt;/strong&gt; &lt;code&gt;T120 O4 L16 C C C L8 D L4 E L8 D L16 E F L2 G&lt;/code&gt;
            &lt;/div&gt;
            &lt;div class=&quot;example&quot; data-play=&quot;T200 O5 L16 C# D# F# G# A#4 P4 A# G# F# D# C#4&quot;&gt;
                &lt;strong&gt;Sharps:&lt;/strong&gt; &lt;code&gt;T200 O5 L16 C# D# F# G# A#4 P4 A# G# F# D# C#4&lt;/code&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;info&quot;&gt;
            &lt;strong&gt;Command Reference:&lt;/strong&gt;&lt;br&gt;
            &lt;strong&gt;T&lt;/strong&gt;nnn - Tempo (beats per minute, 32-255, default 120)&lt;br&gt;
            &lt;strong&gt;O&lt;/strong&gt;n - Octave (0-6, default 4, 4 is middle octave)&lt;br&gt;
            &lt;strong&gt;L&lt;/strong&gt;n - Default note Length (1=whole, 2=half, 4=quarter, 8=eighth, 16=sixteenth)&lt;br&gt;
            &lt;strong&gt;A-G&lt;/strong&gt; - Notes (can add # or + for sharp, - for flat)&lt;br&gt;
            &lt;strong&gt;P&lt;/strong&gt; - Pause/rest&lt;br&gt;
            &lt;strong&gt;Number after note&lt;/strong&gt; - Duration override (e.g., C8 = eighth note C)
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        class GWBasicPlayer {
            constructor() {
                this.audioContext = null;
                this.tempo = 120;
                this.octave = 4;
                this.defaultLength = 4;
                this.isPlaying = false;
                this.scheduledNodes = [];
            }

            // Note frequencies for octave 4 (middle octave)
            noteFrequencies = {
                &#39;C&#39;: 261.63,
                &#39;C#&#39;: 277.18,
                &#39;Db&#39;: 277.18,
                &#39;D&#39;: 293.66,
                &#39;D#&#39;: 311.13,
                &#39;Eb&#39;: 311.13,
                &#39;E&#39;: 329.63,
                &#39;F&#39;: 349.23,
                &#39;F#&#39;: 369.99,
                &#39;Gb&#39;: 369.99,
                &#39;G&#39;: 392.00,
                &#39;G#&#39;: 415.30,
                &#39;Ab&#39;: 415.30,
                &#39;A&#39;: 440.00,
                &#39;A#&#39;: 466.16,
                &#39;Bb&#39;: 466.16,
                &#39;B&#39;: 493.88
            };

            getFrequency(note, octave) {
                const baseFreq = this.noteFrequencies[note];
                if (!baseFreq) return 0;
                // Adjust for octave (each octave doubles/halves frequency)
                return baseFreq * Math.pow(2, octave - 4);
            }

            getDuration(length) {
                // Calculate duration in seconds based on tempo and note length
                // A quarter note at 120 BPM = 0.5 seconds
                const quarterNoteDuration = 60 / this.tempo;
                return (4 / length) * quarterNoteDuration;
            }

            parsePlayString(playString) {
                const commands = [];
                playString = playString.toUpperCase().replace(/\s+/g, &#39;&#39;);
                
                let i = 0;
                while (i &lt; playString.length) {
                    const char = playString[i];
                    
                    // Tempo
                    if (char === &#39;T&#39;) {
                        i++;
                        let num = &#39;&#39;;
                        while (i &lt; playString.length &amp;&amp; /\d/.test(playString[i])) {
                            num += playString[i++];
                        }
                        commands.push({ type: &#39;TEMPO&#39;, value: parseInt(num) || 120 });
                    }
                    // Octave
                    else if (char === &#39;O&#39;) {
                        i++;
                        let num = &#39;&#39;;
                        while (i &lt; playString.length &amp;&amp; /\d/.test(playString[i])) {
                            num += playString[i++];
                        }
                        commands.push({ type: &#39;OCTAVE&#39;, value: parseInt(num) || 4 });
                    }
                    // Default Length
                    else if (char === &#39;L&#39;) {
                        i++;
                        let num = &#39;&#39;;
                        while (i &lt; playString.length &amp;&amp; /\d/.test(playString[i])) {
                            num += playString[i++];
                        }
                        commands.push({ type: &#39;LENGTH&#39;, value: parseInt(num) || 4 });
                    }
                    // Pause
                    else if (char === &#39;P&#39;) {
                        i++;
                        let num = &#39;&#39;;
                        while (i &lt; playString.length &amp;&amp; /\d/.test(playString[i])) {
                            num += playString[i++];
                        }
                        commands.push({ type: &#39;PAUSE&#39;, length: num ? parseInt(num) : null });
                    }
                    // Notes
                    else if (/[A-G]/.test(char)) {
                        let note = char;
                        i++;
                        
                        // Check for sharp or flat
                        if (i &lt; playString.length &amp;&amp; (playString[i] === &#39;#&#39; || playString[i] === &#39;+&#39;)) {
                            note += &#39;#&#39;;
                            i++;
                        } else if (i &lt; playString.length &amp;&amp; playString[i] === &#39;-&#39;) {
                            note += &#39;b&#39;;
                            i++;
                        }
                        
                        // Check for duration
                        let num = &#39;&#39;;
                        while (i &lt; playString.length &amp;&amp; /\d/.test(playString[i])) {
                            num += playString[i++];
                        }
                        
                        commands.push({ 
                            type: &#39;NOTE&#39;, 
                            note: note, 
                            length: num ? parseInt(num) : null 
                        });
                    }
                    else {
                        i++;
                    }
                }
                
                return commands;
            }

            async play(playString) {
                if (this.isPlaying) {
                    this.stop();
                }

                this.audioContext = new (window.AudioContext || window.webkitAudioContext)();
                this.isPlaying = true;
                this.scheduledNodes = [];

                // Reset to defaults
                this.tempo = 120;
                this.octave = 4;
                this.defaultLength = 4;

                const commands = this.parsePlayString(playString);
                let currentTime = this.audioContext.currentTime;

                for (const cmd of commands) {
                    if (!this.isPlaying) break;

                    switch (cmd.type) {
                        case &#39;TEMPO&#39;:
                            this.tempo = cmd.value;
                            break;
                        
                        case &#39;OCTAVE&#39;:
                            this.octave = cmd.value;
                            break;
                        
                        case &#39;LENGTH&#39;:
                            this.defaultLength = cmd.value;
                            break;
                        
                        case &#39;PAUSE&#39;:
                            const pauseLength = cmd.length || this.defaultLength;
                            currentTime += this.getDuration(pauseLength);
                            break;
                        
                        case &#39;NOTE&#39;:
                            const noteLength = cmd.length || this.defaultLength;
                            const duration = this.getDuration(noteLength);
                            const frequency = this.getFrequency(cmd.note, this.octave);
                            
                            if (frequency &gt; 0) {
                                // Create oscillator
                                const oscillator = this.audioContext.createOscillator();
                                const gainNode = this.audioContext.createGain();
                                
                                oscillator.type = &#39;square&#39;; // Classic GWBASIC sound
                                oscillator.frequency.value = frequency;
                                
                                // Envelope for smoother sound
                                gainNode.gain.setValueAtTime(0, currentTime);
                                gainNode.gain.linearRampToValueAtTime(0.3, currentTime + 0.01);
                                gainNode.gain.linearRampToValueAtTime(0.3, currentTime + duration - 0.05);
                                gainNode.gain.linearRampToValueAtTime(0, currentTime + duration);
                                
                                oscillator.connect(gainNode);
                                gainNode.connect(this.audioContext.destination);
                                
                                oscillator.start(currentTime);
                                oscillator.stop(currentTime + duration);
                                
                                this.scheduledNodes.push({ oscillator, gainNode });
                            }
                            
                            currentTime += duration;
                            break;
                    }
                }

                // Schedule stop after all notes
                setTimeout(() =&gt; {
                    this.isPlaying = false;
                    document.getElementById(&#39;playBtn&#39;).disabled = false;
                    document.getElementById(&#39;stopBtn&#39;).disabled = true;
                }, (currentTime - this.audioContext.currentTime) * 1000);
            }

            stop() {
                this.isPlaying = false;
                
                // Stop all scheduled nodes
                this.scheduledNodes.forEach(({ oscillator, gainNode }) =&gt; {
                    try {
                        oscillator.stop();
                        oscillator.disconnect();
                        gainNode.disconnect();
                    } catch (e) {
                        // Already stopped
                    }
                });
                
                this.scheduledNodes = [];
                
                if (this.audioContext) {
                    this.audioContext.close();
                    this.audioContext = null;
                }

                document.getElementById(&#39;playBtn&#39;).disabled = false;
                document.getElementById(&#39;stopBtn&#39;).disabled = true;
            }
        }

        const player = new GWBasicPlayer();

        document.getElementById(&#39;playBtn&#39;).addEventListener(&#39;click&#39;, () =&gt; {
            const playString = document.getElementById(&#39;playString&#39;).value;
            document.getElementById(&#39;playBtn&#39;).disabled = true;
            document.getElementById(&#39;stopBtn&#39;).disabled = false;
            player.play(playString);
        });

        document.getElementById(&#39;stopBtn&#39;).addEventListener(&#39;click&#39;, () =&gt; {
            player.stop();
        });

        // Load examples
        document.querySelectorAll(&#39;.example&#39;).forEach(example =&gt; {
            example.addEventListener(&#39;click&#39;, () =&gt; {
                const playString = example.getAttribute(&#39;data-play&#39;);
                document.getElementById(&#39;playString&#39;).value = playString;
            });
        });

        // Allow Enter key to play
        document.getElementById(&#39;playString&#39;).addEventListener(&#39;keypress&#39;, (e) =&gt; {
            if (e.key === &#39;Enter&#39;) {
                document.getElementById(&#39;playBtn&#39;).click();
            }
        });

        // Initial state
        document.getElementById(&#39;stopBtn&#39;).disabled = true;
    &lt;/script&gt;
 </content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/289096198419921674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/289096198419921674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/289096198419921674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/289096198419921674'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/gwbasic-play-command-player.html' title='♪ GWBASIC PLAY Command Player ♪'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-6430871513865607894</id><published>2025-11-17T18:38:00.000-08:00</published><updated>2025-11-17T18:38:37.596-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="claude"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="music"/><title type='text'>Rick and Morty theme</title><content type='html'>
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Sonic Pi Melody&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: &#39;Courier New&#39;, monospace;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            margin: 0;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        .container {
            background: rgba(255, 255, 255, 0.95);
            padding: 40px;
            border-radius: 20px;
            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
            text-align: center;
            max-width: 400px;
        }
        h1 {
            color: #667eea;
            margin-bottom: 30px;
            font-size: 28px;
        }
        button {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            border: none;
            padding: 15px 40px;
            font-size: 18px;
            border-radius: 50px;
            cursor: pointer;
            transition: transform 0.2s, box-shadow 0.2s;
            font-weight: bold;
            margin: 10px;
        }
        button:hover:not(:disabled) {
            transform: translateY(-2px);
            box-shadow: 0 10px 25px rgba(102, 126, 234, 0.4);
        }
        button:disabled {
            opacity: 0.6;
            cursor: not-allowed;
        }
        .info {
            margin-top: 30px;
            padding: 20px;
            background: #f5f5f5;
            border-radius: 10px;
            font-size: 14px;
            color: #666;
        }
        .now-playing {
            font-weight: bold;
            color: #667eea;
            margin-top: 20px;
            min-height: 24px;
        }
        .controls {
            margin-top: 20px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;h1&gt;🎵 Sonic Pi Melody&lt;/h1&gt;
        &lt;div class=&quot;controls&quot;&gt;
            &lt;button id=&quot;playBtn&quot;&gt;Play&lt;/button&gt;
            &lt;button id=&quot;stopBtn&quot; disabled&gt;Stop&lt;/button&gt;
        &lt;/div&gt;
        &lt;div class=&quot;now-playing&quot; id=&quot;status&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;info&quot;&gt;
            &lt;strong&gt;Info:&lt;/strong&gt;&lt;br&gt;
            BPM: 86&lt;br&gt;
            Synth: FM Synthesis&lt;br&gt;
            Key: Bb minor
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        let audioContext;
        let isPlaying = false;
        let scheduledNodes = [];

        // Note name to frequency conversion
        const noteFrequencies = {
            &#39;C&#39;: 261.63, &#39;Db&#39;: 277.18, &#39;D&#39;: 293.66, &#39;Eb&#39;: 311.13,
            &#39;E&#39;: 329.63, &#39;F&#39;: 349.23, &#39;Gb&#39;: 369.99, &#39;G&#39;: 392.00,
            &#39;Ab&#39;: 415.30, &#39;A&#39;: 440.00, &#39;Bb&#39;: 466.16, &#39;B&#39;: 493.88
        };

        function getNoteFrequency(note) {
            const match = note.match(/([A-G][b#]?)(\d)/);
            if (!match) return 440;
            
            const [, noteName, octave] = match;
            const baseFreq = noteFrequencies[noteName];
            const octaveOffset = parseInt(octave) - 4;
            
            return baseFreq * Math.pow(2, octaveOffset);
        }

        // Dynamic value function (normalize MIDI velocity)
        function dynamicValue(d) {
            return d / 127.0;
        }

        // Convert beats to seconds at BPM 86
        function beatsToSeconds(beats) {
            return (beats * 60) / 86;
        }

        // Create FM synthesizer
        function playFMNote(freq, startTime, duration, amp = 1.0) {
            const ctx = audioContext;
            
            // Carrier oscillator
            const carrier = ctx.createOscillator();
            carrier.type = &#39;sine&#39;;
            carrier.frequency.setValueAtTime(freq, startTime);
            
            // Modulator oscillator (FM synthesis)
            const modulator = ctx.createOscillator();
            modulator.type = &#39;sine&#39;;
            modulator.frequency.setValueAtTime(freq * 2, startTime); // 2:1 ratio
            
            // Modulation amount
            const modulatorGain = ctx.createGain();
            modulatorGain.gain.setValueAtTime(freq * 0.5, startTime); // Modulation depth
            
            // Output gain with envelope
            const outputGain = ctx.createGain();
            outputGain.gain.setValueAtTime(0, startTime);
            
            // ADSR envelope
            const attack = 0.01;
            const decay = 0.1;
            const sustain = amp * 0.3;
            const release = 0.2;
            
            outputGain.gain.linearRampToValueAtTime(amp * 0.4, startTime + attack);
            outputGain.gain.exponentialRampToValueAtTime(sustain, startTime + attack + decay);
            outputGain.gain.setValueAtTime(sustain, startTime + duration - release);
            outputGain.gain.exponentialRampToValueAtTime(0.001, startTime + duration);
            
            // Connect the FM synthesis chain
            modulator.connect(modulatorGain);
            modulatorGain.connect(carrier.frequency);
            carrier.connect(outputGain);
            outputGain.connect(ctx.destination);
            
            // Start and stop
            carrier.start(startTime);
            modulator.start(startTime);
            carrier.stop(startTime + duration);
            modulator.stop(startTime + duration);
            
            scheduledNodes.push({ carrier, modulator, gain: outputGain });
        }

        // Play a pattern of notes with timing
        function playPattern(notes, timings, amp, startTime) {
            let currentTime = startTime;
            
            notes.forEach((note, i) =&gt; {
                const freq = getNoteFrequency(note);
                const duration = beatsToSeconds(timings[i]);
                playFMNote(freq, currentTime, duration, amp);
                currentTime += duration;
            });
            
            return currentTime;
        }

        // Main playback function
        function playMelody() {
            if (!audioContext) {
                audioContext = new (window.AudioContext || window.webkitAudioContext)();
            }

            const amp = dynamicValue(105.56);
            let time = audioContext.currentTime + 0.1;

            // First pattern
            time = playPattern(
                [&#39;Bb4&#39;, &#39;Db5&#39;, &#39;C5&#39;, &#39;Eb5&#39;, &#39;Ab4&#39;, &#39;Gb4&#39;],
                [1.5, 0.5, 0.5, 0.5, 0.5, 0.5],
                amp,
                time
            );

            // F4 sustained for 4 beats
            playFMNote(getNoteFrequency(&#39;F4&#39;), time, beatsToSeconds(4), amp);
            time += beatsToSeconds(4);

            // Sleep 4 beats
            time += beatsToSeconds(4);

            // F4 sustained for 4 beats again
            playFMNote(getNoteFrequency(&#39;F4&#39;), time, beatsToSeconds(4), amp);
            time += beatsToSeconds(4);

            // Sleep 4 beats
            time += beatsToSeconds(4);

            // Second pattern
            time = playPattern(
                [&#39;Bb4&#39;, &#39;Db5&#39;, &#39;C5&#39;, &#39;Eb5&#39;, &#39;Ab5&#39;, &#39;Gb5&#39;],
                [1.5, 0.5, 0.5, 0.5, 0.5, 0.5],
                amp,
                time
            );

            // Third pattern
            time = playPattern(
                [&#39;F5&#39;, &#39;Bb4&#39;, &#39;Bb4&#39;, &#39;C5&#39;],
                [2, 2, 1, 1],
                amp,
                time
            );

            // Fourth pattern
            time = playPattern(
                [&#39;C5&#39;, &#39;Eb5&#39;, &#39;Ab5&#39;, &#39;Gb5&#39;, &#39;F5&#39;],
                [0.5, 0.5, 0.5, 0.5, 2],
                amp,
                time
            );

            // Calculate total duration
            const totalDuration = (time - audioContext.currentTime) * 1000;

            // Update UI
            document.getElementById(&#39;status&#39;).textContent = &#39;♪ Playing...&#39;;
            document.getElementById(&#39;playBtn&#39;).disabled = true;
            document.getElementById(&#39;stopBtn&#39;).disabled = false;
            isPlaying = true;

            // Auto-stop when finished
            setTimeout(() =&gt; {
                if (isPlaying) {
                    stopPlayback();
                }
            }, totalDuration);
        }

        function stopPlayback() {
            // Stop all scheduled nodes
            scheduledNodes.forEach(({carrier, modulator, gain}) =&gt; {
                try {
                    carrier.stop();
                    modulator.stop();
                } catch (e) {
                    // Already stopped
                }
            });
            scheduledNodes = [];

            // Reset UI
            document.getElementById(&#39;status&#39;).textContent = &#39;&#39;;
            document.getElementById(&#39;playBtn&#39;).disabled = false;
            document.getElementById(&#39;stopBtn&#39;).disabled = true;
            isPlaying = false;
        }

        // Button event listeners
        document.getElementById(&#39;playBtn&#39;).addEventListener(&#39;click&#39;, () =&gt; {
            playMelody();
        });

        document.getElementById(&#39;stopBtn&#39;).addEventListener(&#39;click&#39;, () =&gt; {
            stopPlayback();
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/6430871513865607894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/6430871513865607894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/6430871513865607894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/6430871513865607894'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/rick-and-morty-theme.html' title='Rick and Morty theme'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-4593104782895745872</id><published>2025-11-16T15:39:00.000-08:00</published><updated>2025-11-16T15:50:43.818-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="claude"/><category scheme="http://www.blogger.com/atom/ns#" term="johnsokol"/><title type='text'>Consistent Idea Themes Analysis</title><content type='html'> 
     &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Idea Themes Analysis&lt;/title&gt;
    &lt;style&gt;
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            padding: 20px;
        }
        
        .container {
            max-width: 1400px;
            margin: 0 auto;
            background: white;
            border-radius: 20px;
            box-shadow: 0 20px 60px rgba(0,0,0,0.3);
            overflow: hidden;
        }
        
        .header {
            background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
            color: white;
            padding: 40px;
            text-align: center;
        }
        
        .header h1 {
            font-size: 2.5em;
            margin-bottom: 10px;
        }
        
        .header p {
            font-size: 1.1em;
            opacity: 0.9;
        }
        
        .content {
            padding: 40px;
        }
        
        .theme-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
            gap: 25px;
            margin-bottom: 40px;
        }
        
        .theme-card {
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            border-radius: 15px;
            padding: 25px;
            box-shadow: 0 5px 15px rgba(0,0,0,0.1);
            transition: transform 0.3s, box-shadow 0.3s;
            cursor: pointer;
            border-left: 5px solid;
        }
        
        .theme-card:hover {
            transform: translateY(-5px);
            box-shadow: 0 10px 25px rgba(0,0,0,0.2);
        }
        
        .theme-card h3 {
            font-size: 1.4em;
            margin-bottom: 15px;
            display: flex;
            align-items: center;
            gap: 10px;
        }
        
        .theme-icon {
            font-size: 1.5em;
        }
        
        .theme-card ul {
            list-style: none;
            padding-left: 0;
        }
        
        .theme-card li {
            padding: 8px 0;
            padding-left: 25px;
            position: relative;
            color: #333;
            line-height: 1.5;
        }
        
        .theme-card li:before {
            content: &quot;*&quot;;
            position: absolute;
            left: 5px;
            color: #667eea;
            font-weight: bold;
        }
        
        .stats {
            background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%);
            border-radius: 15px;
            padding: 30px;
            margin-top: 30px;
        }
        
        .stats h2 {
            margin-bottom: 20px;
            color: #333;
        }
        
        .stats-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 20px;
        }
        
        .stat-item {
            background: white;
            padding: 20px;
            border-radius: 10px;
            text-align: center;
        }
        
        .stat-number {
            font-size: 2.5em;
            font-weight: bold;
            color: #667eea;
        }
        
        .stat-label {
            color: #666;
            margin-top: 5px;
        }
        
        .connections {
            margin-top: 40px;
            background: #f0f4f8;
            padding: 30px;
            border-radius: 15px;
        }
        
        .connections h2 {
            margin-bottom: 20px;
            color: #333;
        }
        
        .connection-item {
            background: white;
            padding: 15px;
            margin-bottom: 15px;
            border-radius: 10px;
            border-left: 4px solid #667eea;
        }
        
        .connection-item strong {
            color: #667eea;
        }
        
        /* Color coding for themes */
        .theme-card:nth-child(1) { border-left-color: #FF6B6B; }
        .theme-card:nth-child(2) { border-left-color: #4ECDC4; }
        .theme-card:nth-child(3) { border-left-color: #45B7D1; }
        .theme-card:nth-child(4) { border-left-color: #FFA07A; }
        .theme-card:nth-child(5) { border-left-color: #98D8C8; }
        .theme-card:nth-child(6) { border-left-color: #F7B731; }
        .theme-card:nth-child(7) { border-left-color: #5F27CD; }
        .theme-card:nth-child(8) { border-left-color: #00D2D3; }
        .theme-card:nth-child(9) { border-left-color: #FF9FF3; }
        .theme-card:nth-child(10) { border-left-color: #54A0FF; }
        .theme-card:nth-child(11) { border-left-color: #48DBFB; }
        .theme-card:nth-child(12) { border-left-color: #1DD1A1; }
        
        @media (max-width: 768px) {
            .theme-grid {
                grid-template-columns: 1fr;
            }
            
            .header h1 {
                font-size: 1.8em;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;div class=&quot;header&quot;&gt;
            &lt;h1&gt;🎯 Consistent Idea Themes Analysis&lt;/h1&gt;
            &lt;p&gt;Patterns and Interests Across Your Documents &amp; Conversations&lt;/p&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;content&quot;&gt;
            &lt;div class=&quot;theme-grid&quot;&gt;
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;🎵&lt;/span&gt; Audio/Music Technology&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;FM synthesis &amp; Web Audio API implementations&lt;/li&gt;
                        &lt;li&gt;Sonic Pi to JavaScript conversions&lt;/li&gt;
                        &lt;li&gt;Linear predictive coding (LPC) synthesis&lt;/li&gt;
                        &lt;li&gt;VGM (video game music) players&lt;/li&gt;
                        &lt;li&gt;Historical digital audio innovations (1984)&lt;/li&gt;
                        &lt;li&gt;PWM audio on PC speakers&lt;/li&gt;
                        &lt;li&gt;R2D2 speech synthesis&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;⚡&lt;/span&gt; Electronics &amp; Circuit Design&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;Sine wave generators with shift registers&lt;/li&gt;
                        &lt;li&gt;Custom resistor weighting (non-binary)&lt;/li&gt;
                        &lt;li&gt;Brain organoid recording systems&lt;/li&gt;
                        &lt;li&gt;Neuron interface circuits&lt;/li&gt;
                        &lt;li&gt;PCB design &amp; manufacturing&lt;/li&gt;
                        &lt;li&gt;Motor drivers &amp; control systems&lt;/li&gt;
                        &lt;li&gt;Embedded systems (Arduino, ESP32, STM32)&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;🤖&lt;/span&gt; Robotics &amp; Mechanical Systems&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;Robot arm controllers with WebSocket sync&lt;/li&gt;
                        &lt;li&gt;Snake robot physics simulations&lt;/li&gt;
                        &lt;li&gt;Jansen linkage animations&lt;/li&gt;
                        &lt;li&gt;3D printing, laser cutting, CNC&lt;/li&gt;
                        &lt;li&gt;Precision instrumentation&lt;/li&gt;
                        &lt;li&gt;Motor control (BLDC, stepper, servo)&lt;/li&gt;
                        &lt;li&gt;Sensor fusion &amp; integration&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;🎮&lt;/span&gt; Game Development &amp; Graphics&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;Three.js projects (Missile Command)&lt;/li&gt;
                        &lt;li&gt;Physics simulations&lt;/li&gt;
                        &lt;li&gt;Web-based interactive applications&lt;/li&gt;
                        &lt;li&gt;WebGL &amp; canvas rendering&lt;/li&gt;
                        &lt;li&gt;Real-time animation systems&lt;/li&gt;
                        &lt;li&gt;Game AI &amp; strategy systems&lt;/li&gt;
                        &lt;li&gt;Browser-based sensor access&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;📡&lt;/span&gt; Video Streaming &amp; Networking&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;Internet video streaming pioneer (1992)&lt;/li&gt;
                        &lt;li&gt;CellB codec development&lt;/li&gt;
                        &lt;li&gt;WebRTC, RTP/RTSP implementations&lt;/li&gt;
                        &lt;li&gt;High-performance web servers&lt;/li&gt;
                        &lt;li&gt;Live streaming with notable figures&lt;/li&gt;
                        &lt;li&gt;Network protocols &amp; infrastructure&lt;/li&gt;
                        &lt;li&gt;Low-latency video pipelines&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;🧬&lt;/span&gt; Biotech &amp; Molecular Systems&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;Brain organoid interfaces&lt;/li&gt;
                        &lt;li&gt;Molecular-electrical communication&lt;/li&gt;
                        &lt;li&gt;Redox-based signal systems&lt;/li&gt;
                        &lt;li&gt;Neural recording &amp; stimulation&lt;/li&gt;
                        &lt;li&gt;Handrail IoT sensors for healthcare&lt;/li&gt;
                        &lt;li&gt;MEA (Multi-Electrode Array) systems&lt;/li&gt;
                        &lt;li&gt;Low-cost neuroscience tools&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;💼&lt;/span&gt; Business &amp; Entrepreneurship&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;Multiple startups (Direct Data, Excalibur, Zebra, Nisvara)&lt;/li&gt;
                        &lt;li&gt;Delaware LLC management &amp; compliance&lt;/li&gt;
                        &lt;li&gt;Real estate investment planning&lt;/li&gt;
                        &lt;li&gt;Patent portfolio development&lt;/li&gt;
                        &lt;li&gt;Technology commercialization&lt;/li&gt;
                        &lt;li&gt;Consulting for ISPs&lt;/li&gt;
                        &lt;li&gt;Product development cycles&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;📊&lt;/span&gt; Information Theory &amp; CS&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;Shannon information theory applications&lt;/li&gt;
                        &lt;li&gt;Compression algorithms&lt;/li&gt;
                        &lt;li&gt;Memetic engineering concepts&lt;/li&gt;
                        &lt;li&gt;AI/ML frameworks (TensorFlow, PyTorch)&lt;/li&gt;
                        &lt;li&gt;LLM integration (Ollama, local models)&lt;/li&gt;
                        &lt;li&gt;RAG systems for document chat&lt;/li&gt;
                        &lt;li&gt;Privacy-preserving computing&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;🕰️&lt;/span&gt; Computing History &amp; Legacy&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;386BSD contributions (1991-1992)&lt;/li&gt;
                        &lt;li&gt;Early Mac development &amp; BBS culture&lt;/li&gt;
                        &lt;li&gt;First digital audio samples (1984)&lt;/li&gt;
                        &lt;li&gt;Open source Unix pioneering&lt;/li&gt;
                        &lt;li&gt;Early internet streaming&lt;/li&gt;
                        &lt;li&gt;VRML motion data streaming (1996)&lt;/li&gt;
                        &lt;li&gt;Foundation work for FreeBSD/macOS&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;🎓&lt;/span&gt; Education &amp; Documentation&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;Professional biography development&lt;/li&gt;
                        &lt;li&gt;Resume optimization&lt;/li&gt;
                        &lt;li&gt;Technical documentation writing&lt;/li&gt;
                        &lt;li&gt;Teaching &amp; mentoring&lt;/li&gt;
                        &lt;li&gt;Skills sharing &amp; knowledge transfer&lt;/li&gt;
                        &lt;li&gt;Stanford research contributions&lt;/li&gt;
                        &lt;li&gt;Published research papers&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;🎼&lt;/span&gt; Music &amp; Creative Arts&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;Sheet music reading &amp; transcription&lt;/li&gt;
                        &lt;li&gt;Classical music (Stravinsky&#39;s Firebird)&lt;/li&gt;
                        &lt;li&gt;Electronic music composition&lt;/li&gt;
                        &lt;li&gt;Music theory applications&lt;/li&gt;
                        &lt;li&gt;Synthesizer programming&lt;/li&gt;
                        &lt;li&gt;Drum &amp; bass, dance music&lt;/li&gt;
                        &lt;li&gt;Audio synthesis algorithms&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;theme-card&quot;&gt;
                    &lt;h3&gt;&lt;span class=&quot;theme-icon&quot;&gt;🔒&lt;/span&gt; Privacy &amp; Local Computing&lt;/h3&gt;
                    &lt;ul&gt;
                        &lt;li&gt;Ollama local LLM deployment&lt;/li&gt;
                        &lt;li&gt;Document chat systems (RAG)&lt;/li&gt;
                        &lt;li&gt;Privacy-first architecture&lt;/li&gt;
                        &lt;li&gt;Offline-capable applications&lt;/li&gt;
                        &lt;li&gt;Local AI model integration&lt;/li&gt;
                        &lt;li&gt;Data sovereignty focus&lt;/li&gt;
                        &lt;li&gt;Self-hosted solutions&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;stats&quot;&gt;
                &lt;h2&gt;📈 Analysis Statistics&lt;/h2&gt;
                &lt;div class=&quot;stats-grid&quot;&gt;
                    &lt;div class=&quot;stat-item&quot;&gt;
                        &lt;div class=&quot;stat-number&quot;&gt;12&lt;/div&gt;
                        &lt;div class=&quot;stat-label&quot;&gt;Major Theme Categories&lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;stat-item&quot;&gt;
                        &lt;div class=&quot;stat-number&quot;&gt;40+&lt;/div&gt;
                        &lt;div class=&quot;stat-label&quot;&gt;Years of Experience&lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;stat-item&quot;&gt;
                        &lt;div class=&quot;stat-number&quot;&gt;80+&lt;/div&gt;
                        &lt;div class=&quot;stat-label&quot;&gt;Specific Topics&lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;stat-item&quot;&gt;
                        &lt;div class=&quot;stat-number&quot;&gt;5&lt;/div&gt;
                        &lt;div class=&quot;stat-label&quot;&gt;Patents Held&lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;connections&quot;&gt;
                &lt;h2&gt;🔗 Cross-Cutting Patterns&lt;/h2&gt;
                
                &lt;div class=&quot;connection-item&quot;&gt;
                    &lt;strong&gt;Hardware-Software Integration:&lt;/strong&gt; Consistent pattern of bridging physical systems with software control - from early PC audio to modern robotics and biotech interfaces.
                &lt;/div&gt;
                
                &lt;div class=&quot;connection-item&quot;&gt;
                    &lt;strong&gt;Real-Time Systems:&lt;/strong&gt; Focus on low-latency, real-time processing across video streaming, audio synthesis, motor control, and neural interfaces.
                &lt;/div&gt;
                
                &lt;div class=&quot;connection-item&quot;&gt;
                    &lt;strong&gt;Maker &amp; DIY Philosophy:&lt;/strong&gt; Strong emphasis on accessible, cost-effective solutions and open-source approaches across all domains.
                &lt;/div&gt;
                
                &lt;div class=&quot;connection-item&quot;&gt;
                    &lt;strong&gt;Signal Processing:&lt;/strong&gt; Deep expertise in transforming, filtering, and processing signals whether audio, video, neural, or molecular.
                &lt;/div&gt;
                
                &lt;div class=&quot;connection-item&quot;&gt;
                    &lt;strong&gt;Web Technologies:&lt;/strong&gt; Modern web (HTML5, WebSocket, WebRTC, Web Audio API) as a platform for traditionally desktop/embedded applications.
                &lt;/div&gt;
                
                &lt;div class=&quot;connection-item&quot;&gt;
                    &lt;strong&gt;Historical Innovation:&lt;/strong&gt; Pioneer mindset - first or early adopter in internet video (1992), open-source Unix (1992), PC audio (1984), VRML streaming (1996).
                &lt;/div&gt;
                
                &lt;div class=&quot;connection-item&quot;&gt;
                    &lt;strong&gt;Interdisciplinary Approach:&lt;/strong&gt; Combining physics, electronics, computer science, biology, and business for novel solutions.
                &lt;/div&gt;
                
                &lt;div class=&quot;connection-item&quot;&gt;
                    &lt;strong&gt;Educational Foundation:&lt;/strong&gt; Strong theoretical grounding (Stanford, information theory, mentorship by Bernard Widrow) combined with practical implementation.
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/4593104782895745872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/4593104782895745872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/4593104782895745872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/4593104782895745872'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/consistent-idea-themes-analysis.html' title='Consistent Idea Themes Analysis'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-120141642559074520</id><published>2025-11-15T18:13:00.000-08:00</published><updated>2025-11-17T13:49:28.430-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Curiosity Conference"/><category scheme="http://www.blogger.com/atom/ns#" term="ideas"/><category scheme="http://www.blogger.com/atom/ns#" term="johnsokol"/><category scheme="http://www.blogger.com/atom/ns#" term="Roboterra"/><title type='text'>Technology and Education: A Conversation with John Sokol</title><content type='html'>&lt;p&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=bUbpma4q4p0&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;background-color: white; color: black; font-family: arial;&quot;&gt;Curiosity AI in Education Conference, Interview with John Sokol&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;span style=&quot;background-color: white; color: black; font-family: arial;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/@sokol&quot;&gt;&lt;/a&gt;

&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; src=&quot;https://www.youtube.com/embed/bUbpma4q4p0?si=7jk4kx2zxa1WjSZc&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;h1 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 28px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 34px; margin: 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;Technology and Education: A Conversation with John Sokol&lt;/span&gt;&lt;/h1&gt;&lt;p style=&quot;box-sizing: border-box; font-size: 16px; margin: 12px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; box-sizing: border-box; font-family: arial; font-weight: 600;&quot;&gt;A Curiosity Conference Session&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; font-size: 16px; margin: 12px 0px 0px;&quot;&gt;&lt;em style=&quot;background-color: white; box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Hosted by Gordon&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;Introduction&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Gordon: Welcome to today&#39;s curiosity conference session. My name is Gordon and today with me I have John Sokol. Our topic of the day will surround technology and its relation to education. So first, John, would you like to tell us a little more about what you do and who you are?&lt;br /&gt;&lt;br /&gt;John: Me, I&#39;m sort of a self-taught computer expert. I&#39;ve been running around in Silicon Valley for the last 30 years involved in countless startups. My focus lately has been on pure robotics and robotic education and things related to that.&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;Current Work at Roboterra&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;Gordon: So right now you&#39;re working at Roboterra. What&#39;s one project there that you&#39;re proud of or you&#39;re excited to have worked on or working on?&lt;br /&gt;&lt;br /&gt;John: Yeah, so there&#39;s a couple projects we worked on over the last year and a half, two years. One was a telescope, and another one is a snake that uses reinforcement learning to move. Also we got involved with a cat and a few other robots like this, so I hope to finish that up as well.&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;Teaching AI Principles Through Robotics&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Gordon: Well I think that these robots seem to be able to teach kids or to educate people in a way that is unique and to teach them about the fundamentals of artificial intelligence and all these programming skills. What do you think about that?&lt;br /&gt;&lt;br /&gt;John: Yeah, there&#39;s several simple AI examples out there that I&#39;ve managed to put together that can teach AI principles in basically like two pages of C code that a student can understand. Simple things like learning the rules and how not to fall off a table on a little driving robot, for example, all the way up to reinforcement learning where we&#39;ve got an 8-servo articulated snake that will learn how to move on its own and figure out what the best movement patterns are using currently using rules from Mathematica.&lt;br /&gt;&lt;br /&gt;Gordon: Are these implementations something like a simplified version towards a young adult or teenager population, or is it the same sort of coding or structure that would be used in an actual implementation on a professional level?&lt;br /&gt;&lt;br /&gt;John: Well, AI is an enormously large field. So the goal here was to have a robot that you could build over the course of a class or two and then in the course of a one-hour period, apply the learning algorithm and watch it go from flailing around the table to being able to effectively move itself. And be able to make it so that we can apply that to almost any kind of robot and have it figure out how to best move itself to the situation without us programming it.&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;Visual Intuition in Learning&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;Gordon: That is cool. I guess that kind of relates to how you can combine AI in such a way that makes it visually intuitive for the students to understand the inner intricacies. How do you think that sort of intuition plays out? Would that help them in the future or in what aspects would that help them in further learning of STEM and future knowledge?&lt;br /&gt;&lt;br /&gt;John: Again, the goal was to be able to teach a couple of aspects of AI and machine learning from the perspective that a lot of AI and machine learning is really an extension of data science, which is statistics and data analysis, and then be able to apply this to robots. In the case of reinforcement learning or other learning algorithms that we can teach them, this in the course of an hour, watch it, and get some intuition for what it&#39;s doing and basically demystify what&#39;s going on under the covers—something that&#39;s small enough and simple enough.&lt;div&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;AI in Education Delivery&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;Gordon: So as I remember, there&#39;s one part of using AI in the product itself. What about as Roboterra or in the field—are there any ways of using AI to help learners learn better? As in using it in the teaching program or solutions itself?&lt;br /&gt;&lt;br /&gt;John: You know, Roboterra is not doing this directly, but with a lot of online education, I think that machine learning and AI can be used to optimize the curriculum—basically learning what type of course material is most effective for different types of students and be able to identify what students, let&#39;s say, are maybe more audio learners than visual learners or hands-on, you know, different learning types, or ways of connecting them with the content better.&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;Potential Biases in AI-Driven Learning&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;Gordon: Would you think one implication with that sort of identifying strengths and weaknesses—would there be a potential that AI would create like a self-reinforcing or self-fulfilling prophecy? For example, if it identifies a student as a visual learner, would it be a possibility that even though the student might not actually be a visual learner, because of how the algorithm might guide the student, they become better at visual learning and create sort of a bias or deviation in their strengths and weaknesses?&lt;br /&gt;&lt;br /&gt;John: I think we&#39;re a long ways off from having this kind of confirmation bias or some sort of self-reinforcing thing where it sends students down certain paths. Certainly we&#39;re afraid of that happening with our police and other institutions where suddenly it&#39;s like, &quot;Oh, you&#39;ve had problems in the past so we&#39;re just perpetually red-flagged.&quot; Our credit system seems to do this to people—you&#39;ve got bad credit so we&#39;re going to give you harsher scores for every little minor infraction, whereas somebody with good credit, you&#39;re late on a payment, it&#39;s nothing.&lt;br /&gt;&lt;br /&gt;So yeah, these systems are currently being used in banking and credit for years—these kinds of machine learning algorithms constantly looking at odds and sizing people up for insurance rates, for example.&lt;br /&gt;&lt;br /&gt;Gordon: Right, so yeah, another problem in the educational field—it&#39;s not a problem yet, but we call them filter bubbles in Google or Netflix recommendation engines. So yeah, I kind of see it as there&#39;s 20 different ways we can teach you trigonometry. Which set of videos or instructional materials is probably going to be most effective for the student? I don&#39;t think there&#39;s going to be a lot of room to really deviate too far out of the lines though, right?&lt;br /&gt;&lt;br /&gt;John: Right, especially with more fundamental knowledge, it&#39;s hard to actually do so.&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;AI as Teaching Assistants&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;box-sizing: border-box; margin: 12px 0px 0px;&quot;&gt;&lt;br /&gt;Gordon: But yeah, speaking of the ways that you can teach students, I&#39;d assume a part of these algorithms might also be focused on giving feedback for problem solutions. In the case that perhaps if there&#39;s like 10 ways to solve a problem—which I guess is more of a common phenomenon in programming—how would an algorithm go about providing feedback for the varieties of combinations of ways that a student could approach a programming problem?&lt;br /&gt;&lt;br /&gt;John: [AI is] not very good at finding what&#39;s wrong so much as making predictions or guesses. The prime example is reading handwriting on a letter—is that a three or five with sloppy handwriting? In the case of applying this to student learning, certainly regular programming algorithms—if-then statements, you know, they get the right answer for one plus one, it&#39;s pretty straightforward. But figuring out if the student&#39;s having trouble, how to address it, or gauging what the best approaches are...&lt;br /&gt;&lt;br /&gt;My feeling is this is more of—think of it this way: with AI you start building bots. Now these bots aren&#39;t necessarily physical things, these are software entities, but they assist you. You&#39;re trying to achieve a certain goal and suddenly you&#39;re able to create a software entity that will look for certain stock behaviors or alert you for certain things, kind of like Amazon Echo.&lt;br /&gt;&lt;br /&gt;So these are very useful for AI, but actually getting to the point where the student has some understanding of what these tools can and can&#39;t do and how to apply them—I see them as more of amplifying a teacher&#39;s ability. Currently one teacher is split up against 30 students, but with AI it&#39;s like having a room full of really dumb teacher assistants helping. So there could be effectively some interactive one-on-one with the student going on in a way that the teacher wouldn&#39;t have time to correct them and go, &quot;Well no, this is what you did wrong&lt;span style=&quot;background-color: white; font-family: arial; font-size: 16px;&quot;&gt;.&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; font-size: 16px; margin: 12px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;The Changing Role of Teachers&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Gordon: Yeah, instead of facilitating the more low-level sort of learning process, while a teacher may help with more higher level or more complex or hard-to-define issues with learning.&lt;br /&gt;&lt;br /&gt;John: I would imagine the teacher ends up doing more of a supervisor role rather than hands-on. At some level, yeah, the first pass is like go watch the video, use the online tutorial or some interactive aid for that particular coursework, and then the teacher is monitoring the process.&lt;br /&gt;&lt;br /&gt;Gordon: Yeah, because I mean knowledge deliverance doesn&#39;t really need a teacher to be present. I mean they could just read textbooks.&lt;br /&gt;&lt;br /&gt;John: There&#39;s a scene in one of these Star Treks with all the Vulcan students in their little computer pods learning. Yeah, I kind of see that—every student&#39;s going to be sitting in front of a laptop and most of the coursework is going to be there.&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;Social and Emotional Learning&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;Gordon: Yeah, in that case would there be a need for social emotional learning or recess time and whatnot? That sort of devoid of relatively lesser human interaction within the classroom might have other effects.&lt;br /&gt;&lt;br /&gt;John: Well, I think our understanding of what classrooms are is going to change pretty drastically too, because the computer industry has really changed the way that people have managed to work together and learn and share information and knowledge in a much more efficient fashion. I see that culture now propagating out to other fields and industries. The biotech people are starting to pick up on it and take advantage of GitHub and other tools, and many other fields as well.&lt;br /&gt;&lt;br /&gt;In the end, basically people in the future are going to be learning for the rest of their lives. It&#39;s not like you go to school, you get your K through 12 and you&#39;re done, maybe you get some college with some module beyond that. The reality is things are perpetually moving, and every time you sit down for a new project there&#39;s a lot of learning that&#39;s going to have to happen continuously because things are constantly evolving and changing.&lt;br /&gt;&lt;br /&gt;Getting the students in the mode where they can sit down and you can point them in any direction and they can start learning on their own—&quot;Oh okay, here&#39;s how gravity and acceleration work to do a cannonball game or something to this effect&quot;—and how can we provide them tools and AI assistance where suddenly they can have the equivalent of a hands-on mentor that will happily explain to them all the physics and gravity and things, rather than them having to fish through 100 hours of YouTube videos and a thousand pages of physics texts.&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;AI as a Personal Learning Assistant&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;Gordon: Sort of set up where AI has a role, because I mean I know we have analogies like everything is on Google now, and with everything on Google it&#39;s sort of like an extension of our brain that helps us sift through information faster than we could process.&lt;br /&gt;&lt;br /&gt;John: Yeah, but Google doesn&#39;t digest information before giving it to you. I think of it this way: imagine you can hire a personal assistant. You go, &quot;Okay, we want to figure out how to draw a circle. What&#39;s the math function for that?&quot; And instead of having to go through and fish through all these pages of websites and theory, somebody who understands this stuff can come back to you and go, &quot;Okay yeah, there&#39;s three different algorithms for doing this, and depending upon what you&#39;re trying to achieve you&#39;re going to use one of these&quot;—Pythagorean theorem versus sine versus cosine—and why would you choose that, and something that can sit down and explain this to the student so that they can be more functional hands-on.&lt;br /&gt;&lt;br /&gt;But at the same time, there&#39;s not a lot of point in rote memorization because in the future those AI are going to be there for you actively helping you. So really it&#39;s becoming more of learning how to take advantage of these tools to empower you. With today&#39;s tools, you can do stuff that a guy with a PhD couldn&#39;t do 30 years ago. Now a 12-year-old kid can pick it up and slap together some face recognition on a Raspberry Pi. The code&#39;s there, you just learn how to download the examples and boom, you&#39;re rolling.&lt;br /&gt;&lt;br /&gt;All of the knowledge to learn is there. Now the question is, some kids figure out how to pick up those tools on their own and learn how to read the docs and the manuals and get up to speed, and a lot of kids don&#39;t. So getting them to the point where they have that self-motivation, self-learning ability, I think is going to be a key to surviving in the future, because the AI really should be a tool to speed up your ability to learn.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;b3IH0ax6R-OOlUw7Gv4HfA==&quot; style=&quot;box-sizing: border-box; margin: 0px; width: 771px;&quot;&gt;&lt;div class=&quot;ih-TJeJGAB7RWy43i3OeTw==&quot; style=&quot;box-sizing: border-box; word-break: break-word;&quot;&gt;&lt;hr style=&quot;box-sizing: border-box; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;Educational System Reform&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;box-sizing: border-box; margin: 12px 0px 0px;&quot;&gt;&lt;br /&gt;Gordon: Right. Well yeah, I mean that seems like—especially with us in the States—the educational system would be very hard to prepare us for that kind of forecast, I guess.&lt;br /&gt;&lt;br /&gt;John: Well, you know, yeah, there was some example where they&#39;re basically training factory workers for 70 years ago still. Where it&#39;s like, &quot;Okay, we&#39;re gonna have to write or develop something to do X,&quot; and here&#39;s a whole bunch of things you don&#39;t know about, and you&#39;re gonna have to read up and learn about X, Y, and Z to accomplish your mission. And that&#39;s all like learning new subjects without a teacher sitting there holding your hand.&lt;br /&gt;&lt;br /&gt;Gordon: Yeah, I mean with regards to that, what was your experience like going through the state&#39;s educational system a few decades ago, and how do you feel? What kind of changes would you make to the past system or the current system if you could do so?&lt;br /&gt;&lt;br /&gt;John: Oh my god, I did not have a good experience at all in my public education system. Yeah, and so I was more focused on making money and learning and doing stuff with my computer and ignoring the academics of the school system. So later, having to come back up to speed on basic English skills, for example—I look back at my writing from 30 years ago and yeah, I really look illiterate. But my education was very lopsided because I was very unhappy with the academic school system at the time.&lt;br /&gt;&lt;br /&gt;Gordon: Right, yeah, but I guess with the self-initiative you could pick the English back up whenever you felt like there was a need of it.&lt;br /&gt;&lt;br /&gt;John: Well, I have in the course of 30 years of doing business—business plans with misspelling and bad English—at some point it&#39;s just doing it over and over and over again that has forced me to clean up things. But even just communicating on social media where a lot of it&#39;s all typed, for example, has kind of forced me to improve my spelling and English.&lt;br /&gt;&lt;br /&gt;Gordon: All right, so as soon as you put some stuff out there, you&#39;ve got several friends on you going, &quot;Oh, you misspelled that.&quot;&lt;br /&gt;&lt;br /&gt;John: Yeah, we&#39;re there. That&#39;s a better way to learn instead of a teacher giving you feedback—your friends, which I think gives more motivation for things.&lt;br /&gt;&lt;br /&gt;Gordon: Certainly peer pressure provides a lot of motivation.&lt;br /&gt;&lt;br /&gt;John: Yeah, having a group of friends... Well, I&#39;m seeing my son right now trying to do these programming hackathons, and the thing he&#39;s finding the most difficult is they don&#39;t know how to collaborate. So I grew up and I was involved in the publishing of the first open source operating system, the 386 BSD, that eventually the Linux guys came over and they had their thing. They borrowed a lot from what we had posted, but the most interesting thing is they were more successful in organizing the group and the community..&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;box-sizing: border-box; margin: 24px 0px;&quot; /&gt;&lt;p style=&quot;box-sizing: border-box; margin: 12px 0px 0px;&quot;&gt;&lt;/p&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;The Importance of Collaboration in Education&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;Gordon: Yeah, and distribution and stuff where there was a lot of chaos when we first posted, for example. Right, um, and learning how to communicate and interact as a group and sort of on board with other remote teams and work remotely—like especially in this day and age is a big deal. You know, it&#39;s a skill that very few people have the ability to do that where they could just work at home. You know, even though there&#39;s literally nothing at a desk other than the computer at their office, for some reason, they just don&#39;t have the skill to let&#39;s say communicate effectively over email and other means to make up for not physically sitting next to someone.&lt;br /&gt;&lt;br /&gt;John: Yeah, and even then when you put people next to them, you know, just learning how to cooperate and work as a team is difficult. So yeah, if the schools taught that ability for students just to collaboratively work together, um, that would be an enormous benefit for the next generation of information workers. You know, I don&#39;t care what their marketing, stocks, or anything right, let alone programming and AI, uh, where you end up with larger and larger teams collaborating. Absolutely, yeah.&lt;br /&gt;&lt;br /&gt;Gordon: I guess that&#39;s kind of hard to teach at school, I guess especially about the remote working part. You can&#39;t just have students learning at home and trying to create an environment. Yeah, I guess that&#39;s with everything well.&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;Different Approaches to Education&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;Gordon: So there&#39;s different schools I&#39;ve seen. There&#39;s like the Waldorf schools, for example, where they&#39;ve got a very open creative environment, very different than the public school system where you know, and now I&#39;m looking at what the kids were being pushed through and they&#39;ve got like packets which were completely mindless. You know, the teachers spend an enormous amount of time organizing and grading these packets of stuff back and forth. You know, right, um, and a lot of that should be this should be a program you know on the computer doing most of the heavy lifting. You know, even like grading uh essays and and writing and stuff like this could be done by AI easily.&lt;br /&gt;&lt;br /&gt;John: Yeah, or like, yeah, I could get some objective scores where humans could swear like the creativity part or whatnot. Yeah, so you know, they had the AI that was uh looking for plagiarism. Yeah, and the higher universities so when you submit a paper they put it into the engine and see if you plagiarize anything. Um, would that be AI or is it like comparing text to text?&lt;br /&gt;&lt;br /&gt;John: Well, I guess again, it&#39;s kind of quasi-AI because again, they&#39;re using these statistical means of going well, you know, your essays, you know, a 92 percent match to this other document or something. Right, and so they&#39;re able to catch more than just okay, we just rearranged a few things and then you know we swiped a paragraph here, you know, change something they&#39;ll catch that. Right, so it&#39;s more than just like a direct you know pattern match. Oh yeah, I&#39;d imagine because you can change synonyms and maybe that will catch it too. Yeah, yeah, that&#39;s true. Yeah, I don&#39;t wonder like if essays could be scored objectively, it&#39;s kind of like asking AI to critique art. Know it&#39;s extremely good. They&#39;ve got it now where they they can you know throw a bunch of papers in in the grades and then and then throw a paper in and it gives you what it thinks a human would have graded it.&lt;br /&gt;&lt;br /&gt;John: Right, you know, and the beautiful part is they&#39;ve got like adversarial learning and other techniques now where they took the one AI and pitched it against the other. So it&#39;s like, oh, okay, so now let&#39;s come up with completely garbage papers that pass with an egg you know on the grading machine and and you know it completely fakes it because you know the grading machine tends to score well if you&#39;ve got certain let&#39;s say word combinations or something right. You know, it&#39;s just like pastes this document so there&#39;s a famous uh one of the AI challenges is you know, there&#39;s like a recognition algorithm for let&#39;s say a dog and now they give it like some completely random picture that has nothing to do with the dog. You know, there&#39;s like one white pixel in the right place and then suddenly sees a dog. You know, the AI. Yeah, you know, they had to use an AI to find that that hole right to to defeat the other AI. But the fact is that you know, they were able to to fool the algorithm in such a fashion that was so overtly gross to like a human would look at and go, what the you know, why did that AI fail like you know, yeah.&lt;p style=&quot;box-sizing: border-box; font-size: 16px; margin: 12px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;The Future of AI and Education&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;John: Um, yeah, I guess that&#39;s I guess that&#39;s still a progress we have to work with for future. Yeah, well, so in robotics we call them corner cases where you&#39;ve got it working for most things and once in a while you know, yeah, things will go wrong. So you know, I have a little cartoon from like in the 70s or 80s it said, &quot;To errors, humans are really foul things up takes a computer.&quot; You know, and it&#39;s true. You&#39;d send a job to the printer and all sudden you know 500 pages of random gibberish would come spewing out automatically. You know, that&#39;s like you know, well, if you&#39;re not there watching right, you know, the humans would make a mistake but the machine would just kind of keep going and going and going and going. Right, you know, entire pack of paper before you noticed something was wrong. Right, oh yeah, actually coming back to the essay example, I was just I just thought of like the case of Amazon and how the AI was biased in uh shifting to resumes because I mean, as in the same because like it kind of it replicated human biases without being biased itself. So so this is where a lot of the AI comes in is is it&#39;s black magic, you know, kind of voodoo as opposed to science in regards to how you present the data to to train it and so it&#39;s a lot like like making grass and you say you know, it&#39;s so easy to lie with graphs and statistics. Um, and the reality is is when you&#39;re training a machine a lot of it&#39;s you know, you&#39;re you&#39;re altering and shaping the data and presenting it to the machine to learn and if you&#39;re not careful in your methods, you don&#39;t end up with the successful outcome or you end up with all these these biases that you didn&#39;t expect at the time.&lt;br /&gt;&lt;br /&gt;John: Yeah, yeah, but that&#39;s the more problem that data set than actually the algorithm itself because it only replicates the choices of humans and humans well, but again, the data set was cultivated and groomed by a human. Yeah, you know, the famous one is they were trying to separate tanks from cars and and and all the tanks and pictures and cloudy days and all the cars and pictures and bright sunny days and the machine learning algorithm was able to separate the tanks from the car images because anything with a bright sunny day had to be a car and and then when they tried applying it to other things suddenly they you know, they realized it didn&#39;t have any connection to recognizing the vehicle at all, it was looking up right. Yeah, yeah, I guess that that&#39;s a problem with their scientists and all that.&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;The Evolution of Machine Learning&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;Gordon: So you know, yeah, and things like this but you know, we&#39;re learning to overcome them and you know, I&#39;m surprised that they&#39;re teaching it in schools professionally now. Well, I mean, just machine learning, you know, I mean, 30 years ago it was a really obscure thing when I started. Right, then how do you start with machine learning 30 years ago? What brought you in?&lt;br /&gt;&lt;br /&gt;John: Oh, so yeah, I would hang out with the smartest kids I could find back in the day and and so we&#39;re always you know trying to like one-up each other. Um, and so you know, neural networks started happening and we had you know a couple hundred lines of C code with a simple neural net. I was just doing you know a couple layers with multiplication and things and producing you know experimenting and playing with these things. You know, the stuff we&#39;re doing today with GPUs is essentially just you know massive versions of that simple algorithm from 30 years ago which is you know we didn&#39;t have more than a couple of megabytes of RAM back then and now we&#39;ve got you know gigabytes with unbelievable horsepower. You know, I&#39;m just just starting to notice my browser tabs got more power than the half million dollar SGI workstation I was experimenting with at Stanford 30 years ago. I mean, in terms of like GPU and computation and everything right. How much it&#39;s probably got more more compute power than the Cray YMP that we were renting time on to do the computations before we sent it to the SGI even. Like, you know, in JavaScript it&#39;s it&#39;s just amazing, crazy.&lt;div&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;The Future of AI and Computing&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;Gordon: Yeah, so how we can also just connect to cloud computing like on browser types as well just with more computing power to both disposal. Yeah, yeah, so anyway, yeah, but so I mean if like 40 years ago neural networks has already started like it&#39;s an infant state within these 40 years are there any things that are like do you see being like infants that will grow to become the next big thing or like the really the next sort of like technological sort of big wave of advancements in like Silicon Valley.&lt;br /&gt;&lt;br /&gt;John: Well, I mean, there&#39;s a bunch of big waves that have been happening um, I mean, well, you know, so right now we&#39;re just at the point where we can process live video images and actually do useful things with them that we couldn&#39;t do before. Um, and that&#39;s opening up a whole universe of opportunities. All right, are you back? All right, that&#39;s bad. Right, yeah, so we were talking about live image processing and well, what does that come out or what is that right like what does that signify in terms of so um for example, uh, at this point we can take a live video from a video camera and and work out the camera&#39;s movement. Um, right, we can recognize objects in the room so so you know the kind of trivial examples and there&#39;s even some ones that run browser attached to that open my webcam, I don&#39;t recognize the cat versus a chair or other objects in the room. It&#39;s not great but you know, it&#39;s okay. There&#39;s an algorithm called segmentation that will separate like you know people from from other things and try and label them um and and these algorithms are getting faster and and they&#39;ve got a really nice framework now where they can compare them you know how much compute power versus accuracy and and quality for example um and and you know so as computers get faster and faster this is going to be just you know normal this kind of uh ability for for even a low end machine um to have an awareness of the environment it&#39;s in where before computers really were oblivious to what was going on in the room around it. Right, uh, you know, so it would have a sense of context if you will you know of the situation and what&#39;s going on. Right, um, yeah, you know, I think that&#39;s going to change things dramatically. Yeah, I can imagine yeah, I was I guess I was researching on buying like a Roomba just a few months ago and like I was I was pretty amazed at how like the progress has gotten since like five years ago where there seems to be some level of intelligence and it&#39;s like routine or obstacle aversion but I guess like if life inspires like if these processing really gets better then maybe the algorithms and its capability could be much better than right now or even a new type of cleaning sort of robots could appear rather than just before itself so so you keep mentioning they&#39;re very limited yeah.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;hr style=&quot;box-sizing: border-box; font-size: 16px; margin: 24px 0px;&quot; /&gt;&lt;h2 style=&quot;box-sizing: border-box; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 28px; margin: 16px 0px 0px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: arial;&quot;&gt;The Power of Algorithm Improvements&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;John: So you know, I&#39;m on the subject of algorithms and the improvement there&#39;s something called the Commodore 64 demo scene and so basically the Commodore 64 is you know a fixed computer they made 30 years ago it&#39;s like a historical piece at this point um the amazing thing is the demos that people have been able to write now that run on them you know because of the advancements and algorithms uh compression performance uh so just you know same hardware as 30 years ago nothing&#39;s improved at all but what they can do on the Commodore 64 now in terms of music and video and animation is just astonishing you know that and 30 years ago just just we could never dream that we could do that with the machine um so you know that&#39;s just an algorithm improvement um and algorithm improvements tend to be the larger shift you know so there&#39;s Moore&#39;s law where the computers are just getting faster because the chemistry is better and the more transistors they could just throw more hardware at it right but then you know if you realize oh I didn&#39;t need to do all these extra multiplications because we can do it some other scheme and reduce the math my god the performance enhancement on that is is tremendous.&lt;br /&gt;&lt;br /&gt;John: Wow, so we&#39;re seeing a lot of that with the AI as well is not just the hardware improvements but but algorithm improvements and understanding things so it&#39;s not uncommon for them to throw enormous money at enormous hardware to try and and get let&#39;s say a technology going but once that you know people were in there they go oh okay we can reduce and simplify and and and this works just as well with you know one tenth the horsepower and and before you know it you know um these algorithms are getting more effective with less compute power. Wow that that I didn&#39;t know about that. I mean 30 years ago I can&#39;t imagine running like modern services on such I mean a machine that predates me. Yeah, so so yeah I mean if you think about it now you know what we&#39;re gonna have mobile in our pocket is is you know effectively what what like a half million dollars with a hardware by issue today which is you know incomprehensible right it&#39;s like a server room. Yeah, yeah, so so the ability of generating photorealistic images and animations with all kinds of intelligence and understanding the the sensors that are attached which we can&#39;t even imagine but I would imagine it would at least have a full depth understanding of of all the structure and depth and what&#39;s going on around you spatially. Right, yeah, I mean yeah and it would be able to do that for almost for free for free like oh yeah the cost you know the cameras are going to be you know a dollar a piece that the compute power you know is going to be five bucks worth of CPU on the phone right they&#39;ll just naturally be able to do a 3D reconstruction of like every room you&#39;ve ever stepped into with it right all right that that&#39;s practically for free yeah. I mean I mean basically yeah you know I mean right now what&#39;s pushing the limit on a phone like this today you know eventually people are going to figure out and post open source you know just like some kid will just like download it and and okay yeah I did this as part of my you know kindergarten show-and-tell oh that&#39;ll be scary yeah yeah as there&#39;s a feature it&#39;s right ahead everything well I mean I&#39;m watching the bar you know for these things come down so even you know what we were doing at the robotics club 30 years ago people were able to do with an Arduino in a pie now you know things considerably more advanced you know and I still see people struggling over how to put two two wheels on a box with a battery still you know the wheels the motors the battery you know haven&#39;t changed all that much in 30 years but with the compute power and not only that the documentation on the internet where you can find you know hundreds and hundreds of examples of web pages and blogs and videos you know that will teach you step by step on how to do this um the problem is is is it&#39;s an overwhelming amount and and figuring out which one do you want to give a student versus sending them down this this overwhelming okay there&#39;s a hundred ways to go with which one and suddenly that you know they&#39;ll end up being paralyzed by too much information yeah then maybe then you have to rely on a recommendation algorithm to give you the one it thinks you need yeah yeah well I think we&#39;re up to time with our session today and I mean thank you John for being here because I mean amazing and I believe for me to learn about all these advancements in technology. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/120141642559074520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/120141642559074520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/120141642559074520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/120141642559074520'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/technology-and-education-conversation.html' title='Technology and Education: A Conversation with John Sokol'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/bUbpma4q4p0/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36504670.post-3756862196987143838</id><published>2025-11-13T18:37:00.000-08:00</published><updated>2025-11-13T18:37:47.324-08:00</updated><title type='text'>test</title><content type='html'>  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Baseline &amp; Drums - BPM 140&lt;/title&gt;
    &lt;style&gt;
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: &#39;Courier New&#39;, monospace;
            background: linear-gradient(135deg, #232526, #414345);
            min-height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 20px;
            color: white;
        }
        
        .container {
            background: rgba(0, 0, 0, 0.8);
            padding: 40px;
            border-radius: 20px;
            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.8);
            max-width: 500px;
            width: 100%;
            border: 2px solid rgba(100, 200, 255, 0.3);
        }
        
        h1 {
            color: #64c8ff;
            margin-bottom: 30px;
            font-size: 32px;
            text-align: center;
            text-shadow: 0 0 20px #64c8ff;
        }
        
        .controls {
            display: flex;
            gap: 15px;
            justify-content: center;
            margin-bottom: 30px;
        }
        
        button {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            border: none;
            padding: 15px 30px;
            font-size: 16px;
            border-radius: 50px;
            cursor: pointer;
            transition: all 0.2s;
            font-weight: bold;
            min-width: 120px;
        }
        
        button:hover:not(:disabled) {
            transform: translateY(-2px);
            box-shadow: 0 10px 25px rgba(102, 126, 234, 0.4);
        }
        
        button:disabled {
            opacity: 0.3;
            cursor: not-allowed;
        }
        
        .loops {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 15px;
            margin-bottom: 20px;
        }
        
        .loop {
            background: rgba(0, 0, 0, 0.5);
            padding: 20px;
            border-radius: 10px;
            border: 2px solid rgba(100, 200, 255, 0.2);
            text-align: center;
            transition: all 0.2s;
        }
        
        .loop.active {
            border-color: #64c8ff;
            box-shadow: 0 0 20px rgba(100, 200, 255, 0.3);
            background: rgba(100, 200, 255, 0.1);
        }
        
        .loop-name {
            font-size: 18px;
            font-weight: bold;
            color: #64c8ff;
            margin-bottom: 10px;
        }
        
        .loop-icon {
            font-size: 32px;
            margin-bottom: 10px;
        }
        
        .info {
            background: rgba(0, 0, 0, 0.5);
            padding: 20px;
            border-radius: 10px;
            font-size: 14px;
            border: 2px solid rgba(100, 200, 255, 0.2);
        }
        
        .info-row {
            display: flex;
            justify-content: space-between;
            margin-bottom: 8px;
        }
        
        .info-row:last-child {
            margin-bottom: 0;
        }
        
        .label {
            font-weight: bold;
            color: #64c8ff;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;h1&gt;🎵 BASELINE &amp; DRUMS&lt;/h1&gt;
        
        &lt;div class=&quot;controls&quot;&gt;
            &lt;button id=&quot;playBtn&quot;&gt;▶ PLAY&lt;/button&gt;
            &lt;button id=&quot;stopBtn&quot; disabled&gt;⏹ STOP&lt;/button&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;loops&quot;&gt;
            &lt;div class=&quot;loop&quot; id=&quot;loop-base&quot;&gt;
                &lt;div class=&quot;loop-icon&quot;&gt;🎹&lt;/div&gt;
                &lt;div class=&quot;loop-name&quot;&gt;BASELINE&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;loop&quot; id=&quot;loop-drum&quot;&gt;
                &lt;div class=&quot;loop-icon&quot;&gt;🥁&lt;/div&gt;
                &lt;div class=&quot;loop-name&quot;&gt;DRUMS&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;info&quot;&gt;
            &lt;div class=&quot;info-row&quot;&gt;
                &lt;span class=&quot;label&quot;&gt;BPM:&lt;/span&gt;
                &lt;span&gt;140&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class=&quot;info-row&quot;&gt;
                &lt;span class=&quot;label&quot;&gt;Synth:&lt;/span&gt;
                &lt;span&gt;FM Synthesis&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class=&quot;info-row&quot;&gt;
                &lt;span class=&quot;label&quot;&gt;Key:&lt;/span&gt;
                &lt;span&gt;D# minor&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class=&quot;info-row&quot;&gt;
                &lt;span class=&quot;label&quot;&gt;Pattern:&lt;/span&gt;
                &lt;span&gt;16 beats (baseline) / 8 beats (drums)&lt;/span&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        let audioContext;
        let isPlaying = false;
        let masterGain;
        let allTimeouts = [];
        
        const BPM = 140;
        const beatDuration = 60 / BPM;
        
        // Note frequencies
        const notes = {
            &#39;ds3&#39;: 155.56,
            &#39;f3&#39;: 174.61,
            &#39;fs3&#39;: 185.00,
            &#39;gs3&#39;: 207.65,
            &#39;as3&#39;: 233.08,
            &#39;b3&#39;: 246.94
        };
        
        // Flash loop indicator
        function flashLoop(name) {
            const el = document.getElementById(`loop-${name}`);
            if (el) {
                el.classList.add(&#39;active&#39;);
                setTimeout(() =&gt; el.classList.remove(&#39;active&#39;), 150);
            }
        }
        
        // Schedule helper
        function scheduleAt(callback, time) {
            const timeout = setTimeout(callback, time * 1000);
            allTimeouts.push(timeout);
        }
        
        // FM Synthesis
        function playFM(time, freq, duration) {
            // Carrier oscillator
            const carrier = audioContext.createOscillator();
            carrier.type = &#39;sine&#39;;
            carrier.frequency.setValueAtTime(freq, time);
            
            // Modulator oscillator
            const modulator = audioContext.createOscillator();
            modulator.type = &#39;sine&#39;;
            modulator.frequency.setValueAtTime(freq * 2, time); // 2:1 ratio
            
            // Modulation amount
            const modulatorGain = audioContext.createGain();
            modulatorGain.gain.setValueAtTime(freq * 0.8, time); // Deep modulation
            
            // Output gain with envelope
            const outputGain = audioContext.createGain();
            
            // ADSR envelope
            const attack = 0.01;
            const decay = 0.1;
            const sustain = 0.3;
            const release = 0.2;
            
            outputGain.gain.setValueAtTime(0, time);
            outputGain.gain.linearRampToValueAtTime(0.4, time + attack);
            outputGain.gain.exponentialRampToValueAtTime(sustain, time + attack + decay);
            outputGain.gain.setValueAtTime(sustain, time + duration - release);
            outputGain.gain.exponentialRampToValueAtTime(0.001, time + duration);
            
            // Connect FM chain
            modulator.connect(modulatorGain);
            modulatorGain.connect(carrier.frequency);
            carrier.connect(outputGain);
            outputGain.connect(masterGain);
            
            // Start and stop
            carrier.start(time);
            modulator.start(time);
            carrier.stop(time + duration);
            modulator.stop(time + duration);
            
            flashLoop(&#39;base&#39;);
        }
        
        // Kick drum
        function playKick(time) {
            const osc = audioContext.createOscillator();
            const gain = audioContext.createGain();
            
            osc.type = &#39;sine&#39;;
            osc.frequency.setValueAtTime(150, time);
            osc.frequency.exponentialRampToValueAtTime(40, time + 0.2);
            
            gain.gain.setValueAtTime(0.8, time);
            gain.gain.exponentialRampToValueAtTime(0.01, time + 0.4);
            
            osc.connect(gain);
            gain.connect(masterGain);
            
            osc.start(time);
            osc.stop(time + 0.5);
            
            flashLoop(&#39;drum&#39;);
        }
        
        // Snare drum
        function playSnare(time) {
            // Noise component
            const noise = audioContext.createBufferSource();
            const buffer = audioContext.createBuffer(1, audioContext.sampleRate * 0.2, audioContext.sampleRate);
            const data = buffer.getChannelData(0);
            
            for (let i = 0; i &lt; data.length; i++) {
                data[i] = Math.random() * 2 - 1;
            }
            noise.buffer = buffer;
            
            const noiseFilter = audioContext.createBiquadFilter();
            noiseFilter.type = &#39;highpass&#39;;
            noiseFilter.frequency.setValueAtTime(1000, time);
            
            const noiseGain = audioContext.createGain();
            noiseGain.gain.setValueAtTime(0.5, time);
            noiseGain.gain.exponentialRampToValueAtTime(0.01, time + 0.15);
            
            noise.connect(noiseFilter);
            noiseFilter.connect(noiseGain);
            noiseGain.connect(masterGain);
            
            // Tone component
            const osc = audioContext.createOscillator();
            osc.type = &#39;triangle&#39;;
            osc.frequency.setValueAtTime(180, time);
            osc.frequency.exponentialRampToValueAtTime(100, time + 0.1);
            
            const oscGain = audioContext.createGain();
            oscGain.gain.setValueAtTime(0.3, time);
            oscGain.gain.exponentialRampToValueAtTime(0.01, time + 0.12);
            
            osc.connect(oscGain);
            oscGain.connect(masterGain);
            
            noise.start(time);
            noise.stop(time + 0.2);
            osc.start(time);
            osc.stop(time + 0.15);
            
            flashLoop(&#39;drum&#39;);
        }
        
        // Baseline pattern
        function baseline(startTime) {
            let time = startTime;
            
            playFM(time, notes.ds3, beatDuration * 1.5);
            time += beatDuration * 1.5;
            
            playFM(time, notes.ds3, beatDuration * 0.5);
            time += beatDuration * 0.5;
            
            playFM(time, notes.f3, beatDuration * 0.5);
            time += beatDuration * 0.5;
            
            playFM(time, notes.fs3, beatDuration * 1.0);
            time += beatDuration * 1.0;
            
            playFM(time, notes.b3, beatDuration * 1.0);
            time += beatDuration * 1.0;
            
            playFM(time, notes.as3, beatDuration * 3.5);
            time += beatDuration * 3.5;
            
            playFM(time, notes.gs3, beatDuration * 1.5);
            time += beatDuration * 1.5;
            
            playFM(time, notes.gs3, beatDuration * 0.5);
            time += beatDuration * 0.5;
            
            playFM(time, notes.b3, beatDuration * 0.5);
            time += beatDuration * 0.5;
            
            playFM(time, notes.as3, beatDuration * 1.0);
            time += beatDuration * 1.0;
            
            playFM(time, notes.fs3, beatDuration * 1.0);
            time += beatDuration * 1.0;
            
            playFM(time, notes.ds3, beatDuration * 3.5);
            time += beatDuration * 3.5;
            
            return time;
        }
        
        // Drums pattern
        function drums(startTime) {
            let time = startTime;
            
            playKick(time);
            time += beatDuration * 1.0;
            
            playSnare(time);
            time += beatDuration * 1.5;
            
            playKick(time);
            time += beatDuration * 0.5;
            
            playSnare(time);
            time += beatDuration * 1.0;
            
            playKick(time);
            time += beatDuration * 1.0;
            
            playSnare(time);
            time += beatDuration * 1.5;
            
            playKick(time);
            time += beatDuration * 0.5;
            
            playSnare(time);
            time += beatDuration * 1.0;
            
            return time;
        }
        
        // Main loops
        function startBaselineLoop() {
            if (!isPlaying) return;
            
            const currentTime = audioContext.currentTime;
            const endTime = baseline(currentTime);
            const loopDuration = (endTime - currentTime) * 1000;
            
            scheduleAt(startBaselineLoop, endTime - audioContext.currentTime);
        }
        
        function startDrumLoop() {
            if (!isPlaying) return;
            
            const currentTime = audioContext.currentTime;
            const endTime = drums(currentTime);
            const loopDuration = (endTime - currentTime) * 1000;
            
            scheduleAt(startDrumLoop, endTime - audioContext.currentTime);
        }
        
        // Start playback
        function startPlayback() {
            if (!audioContext) {
                audioContext = new (window.AudioContext || window.webkitAudioContext)();
            }
            
            masterGain = audioContext.createGain();
            masterGain.gain.setValueAtTime(0.7, audioContext.currentTime);
            masterGain.connect(audioContext.destination);
            
            isPlaying = true;
            
            // Start both loops simultaneously
            startBaselineLoop();
            startDrumLoop();
            
            document.getElementById(&#39;playBtn&#39;).disabled = true;
            document.getElementById(&#39;stopBtn&#39;).disabled = false;
        }
        
        // Stop playback
        function stopPlayback() {
            isPlaying = false;
            
            allTimeouts.forEach(timeout =&gt; clearTimeout(timeout));
            allTimeouts = [];
            
            if (masterGain) {
                masterGain.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.5);
            }
            
            document.querySelectorAll(&#39;.loop&#39;).forEach(el =&gt; el.classList.remove(&#39;active&#39;));
            
            setTimeout(() =&gt; {
                document.getElementById(&#39;playBtn&#39;).disabled = false;
                document.getElementById(&#39;stopBtn&#39;).disabled = true;
            }, 500);
        }
        
        document.getElementById(&#39;playBtn&#39;).addEventListener(&#39;click&#39;, startPlayback);
        document.getElementById(&#39;stopBtn&#39;).addEventListener(&#39;click&#39;, stopPlayback);
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</content><link rel='replies' type='application/atom+xml' href='http://johnsokol.blogspot.com/feeds/3756862196987143838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36504670/3756862196987143838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3756862196987143838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36504670/posts/default/3756862196987143838'/><link rel='alternate' type='text/html' href='http://johnsokol.blogspot.com/2025/11/test.html' title='test'/><author><name>John Sokol</name><uri>http://www.blogger.com/profile/17719400170309249969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIuLuNw1KD4NOt_1D1v0WY9yOYqg3WxwD4LtKWBsM8aF6DO79f6vMm_0ikOxWce7mJ4yLWIRreDFlJ6iiA7IIGOwO1u5X9-WpporhEbehvHsuDnsV5sDl6ui2svqOZA/s121/2019_JohnSokol-02.jpg'/></author><thr:total>0</thr:total></entry></feed>