From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from sonic321-26.consmr.mail.bf2.yahoo.com (sonic321-26.consmr.mail.bf2.yahoo.com [74.6.133.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4839E314A61 for ; Thu, 11 Dec 2025 16:41:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.6.133.81 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765471320; cv=none; b=F9zOMhelcgB/u7EjKEqElAyrowMj2tqc2S2RP1W7I+g/JuuDBW654kl2sqxYeh2DDzvukbxZVcxEWu/WcNJk70zka3WontnZRDyA+Il0Br/6DX+xnHmfEgqu8gEIEBI3XoLvtv6uqsQUJDb0FMAV96+rYXc215z6xpet7neN/dw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765471320; c=relaxed/simple; bh=r+k1oJ2hO5zM1U2AYeXOsJTSTJ9F8pTRkPKFe9CDpC8=; h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type: References; b=FYAgb/9mjX6+aEqU3Echsj8Nv4QGdoJCaP67xTyY78BJmNH9lPIke/K/z/VRIPQJRCWUMncSZUmYfO33xsvFfWMPg1gdRmUiEG6VEJo3fhXiYkBxsIh1jVNsf/3nc7WO+RcUwp60xjLJn7V+35XQMoMv3Fdll+gvWO1pm9Mj1aE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=aol.com; spf=pass smtp.mailfrom=aol.com; dkim=pass (2048-bit key) header.d=aol.com header.i=@aol.com header.b=afS0opI4; arc=none smtp.client-ip=74.6.133.81 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=aol.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=aol.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=aol.com header.i=@aol.com header.b="afS0opI4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1765471317; bh=vb+KnAEloV/6fqkFuWEYx9NazCAHQ3QaqTAXo/rk7JU=; h=Date:From:To:Subject:References:From:Subject:Reply-To; b=afS0opI4xOeVLXnoYD4L5UKP4j4P6Bu36mOS/b/KDcIFlDawXmbjEYdK+Gq0qAP1Eyls9VZ46UXLM4vyjwn/W/l3NQxzE/bGgad3O0PQJesQrxqCEDaalWTg9fGxxphikOOfjTBoJbDeckDFde9JgRvs9akViW0yugoo7skpFD/0eajb19vONy3dyLTSs47cGJilEEw4+HJqpMvBLPvOq2WdFJ1MJcBZBOVG1BfGim2C0zTpiOtp0XavhdICNVZfyJygQ1L49hFaIX5RLImRdPfX3bnFxDd9SVfnUgD20oIqNF1LwPBhHECibo/3lvk9cNOskJXrXYhPVC14MBhcIQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1765471317; bh=DoXtshKgk1UUpO9axbwZK/f2NC49dYWJo/n0z+2J2AS=; h=X-Sonic-MF:Date:From:To:Subject:From:Subject; b=gK1ECav5fVQDjV7H8Hz6/bw+SkCfiQfUicUMrg2utKseN+qpVgTyzELBnu/RJniJJ+WmgB2Xw89krmLXHvorvf2ZuR9iyUV4QiXMtR3kihKvdn5bVuLQeoSP1woM36xg9PKzK0C9isAUx2yTIqT8MELsgR6yRQLtjtDGgPGC0lsbXpW1uNxy/LNEiDZsxdEMtKnFlAnNGmF084aiu55gTW7Q2p1LjKP0FdoXgHM1XJD56Gm9N4orN1Iqgy4O5oZj9450tt+/XQz/yzrATXJxVLUZ2Y+QgY19E5/Xte652tJ/sKmh6V0JBWcRJA2ZeuAJHXnpgoHBu7qO8/9U0bUt5A== X-YMail-OSG: 4RUzuqwVM1l6YnY.T1kkGUJFxvP_5uTpQMAQJ8fwo8iGxvDhYA3GAYsfoeAt2of QTxvy0gnEceKu9bLG.7XH_HqTP7PPoG6aZLOxrG8dDxltP1fzMIlYON4fyVaRSI_MQJLqQ_XTq80 bh08Vi64LwX.Rh9A3woDyKwE75uLNWt1rAV.jY60VRgPMUurL0Pgf3LxjX8eqHr6WTu3GvTsyyKe fotBKj7tF86lu1OI8S.1Udblk95pfKy.aiUJOjctKCCDFewJZFsUvauy3.tBsSr25NSxfIt6W12H mmqqM2kqjVSCMG8usPtp8oEWNFvw4OVtM.iVNVTb43N5vTcePkfoaXA8.w99KX0uqgqGbbz3D8yW PCTPTuTKq8LKVaj9zVodchwCFc10wNWQoHLYXyZoR1OSCwP89nm89bTIdcEP4MQJ8GMlWDz9zPg4 BiZ4HthRQdO_n9WvbTzApv6.AQMYy7n32DZtdIzi8vKrRjahyWl6wkteWKiN1sLl.REkpssBPMjA tvv1wgDLx4pmCQOWrSj18DKTvR72aUw0hit.FVdJpDTbDnqFbDRIHcknYpPfPQcYxUsl3Dn9HAXC eMDoAUanCqKksjZxOmFT1Avy8EPEDFlRWzyWcFx5q.E6rG1y02jqzAZC5cojMOnhdaVu0zOodzgz Fq76f5pu_r7m_QOG8Oa.Ozs65aLwzmBGeSxuayANCE.WWedBz.3ZIhvuBCerDaLF1UJDgymnBpkv PLrpqNd6z54mE6xWEgJTMeZha_xX_zSiuTSTQhWlLgEISrv0zwwqMYeYnusUn42hWEMzr_vbHBwM 0t6hqp8BCYCbBDRAKb1EoENp0grQPl7K5xJCYONZ8JtUTk22kh0U0nLX3GNR4tyfH2kxVNEQkFLR 0LQvOKKBs4a4dddtsyS4PLENCwAQ70ezqvA.Ty8bjJsTjbxMcBZ9bjPF83mSQ8PZCMjLuaYgZmPW w8PBBSpFOw2Gq68Ma1c44PxVILwsGm6hhdOaUwBdR_DLxlz4Lwa.YIopG6J17pF3CTJ3QV6DDlTM MD5tfy5eOmJn.jzN8DCpD0gNAZoXeoeUhrvUpfXgb0urEej0dwx1CaTVWim3Hsn5oFKF07M5HXvR Lqsl3ie_70jSopabTnyoly8WOWG0D5DYFLTCMHlSWwFOfnPaq_7k0RIOjH5KwgOfuniBdXdOaFLr naYZVoC12FOVX6bSjsFj_WDlpM2QNNBAPkLpgZoYW8LIe8XMFD8yXfTcqAIRoEDegLf0xsqiZFgX 8H7Rqq_K7VK4JQ_CbwJmkY2zQ2IQqkfIxabAshjXvqF3DB9CQLRRV_WlGgwx_KqXqDYzRkWBF63i XgLexDmgko9fUx.3wyOeamsZFhS5QrNL7nFQ2LQGSemiZNLnC.5XvJX.lXcABJRbSBUs9noci8zj X3zCj3e8Sb860hXX7bsH4VcCUVzrmm.vhR29X1yxHV8emJS_l8Hhnd.C69mUPbXMMPACfvgo4mFo 6u4BQDViD3lOxaalJe4peWqfDcEQoLrk8ZEkqp5sQ9CvJ5gcgaT_yianwLibxme5xSmVZ1.y4Llc OcibJfN_RQTxTmIyu1ibFpWxM8q9HniGF8OVuCM58hX00N728sv7EA1aE3XNOmhaD3zMSKX.T9HW xDunJ8.RWKiFBIM7Eua6eC_2KuAlxUgivApUkp4zzRCMh822bjDE_4HL.5ISvIJ65MUOlsN_75jM DQiq_U6gXWyHKRyyic0M9eJK9GcrIVnUX3CJKftlPJjNtt2rbfsOXdohdyPoQhyGWozbAVXcAsdF S1woTpnt3BGgFKK59BwsUSZFTK2DqcNL6GdMYcgjw3J1cRfMmRJ7itcbvbe_RVrQ370YKMjtuDtU Yjx6JvDs0CFqEETn0GjgElMBaCb89uDRZJAklIEH7HvNyWX5MPkwbIJ82AFmhtQ0P0kZaC1nclEL GbziZexRBC7whOzdK5yR8o5HRpjwQUMCnX51bPrB7lHwvLbhRYJvTw5tmCUUJFci4BBJQdz.YtUX .ap8vvl8TbANFNWd9Gl0Eq02lJpE18yJ8ZGOgyqhKIyhhuqU9OuKBdcMyOpRkHoNe5KRR9fblcG7 rqZPCegu.4dThmTsvqWkURVhYPQLJRYTcStodIPsO6oxVfxOVK8auhOH5gji5hN.eBvScKo6Jvi2 U4yjI1WDqrK2mLNEinqtUEzPN9Nkln4Ms124M4GrA2im5kR1qHjUQKLipjGmWaEwHRBMpVYwdTIF InGavja3WR3bM7dwUEowHergglrhD7Q-- X-Sonic-MF: X-Sonic-ID: 2ee55bac-886c-4cd1-8a00-f8b869d33e2d Received: from sonic.gate.mail.ne1.yahoo.com by sonic321.consmr.mail.bf2.yahoo.com with HTTP; Thu, 11 Dec 2025 16:41:57 +0000 Date: Thu, 11 Dec 2025 16:11:33 +0000 (UTC) From: "dseda1@aol.com" To: "linux-rt@vger.kernel.org" , "linux-kernel@vger.kernel.org" Message-ID: <410971005.3282899.1765469493984@mail.yahoo.com> Subject: David S from New Jersey Pattern Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_3282898_2104875624.1765469493984" References: <410971005.3282899.1765469493984.ref@mail.yahoo.com> X-Mailer: WebService/1.1.24794 AolMailNorrin ------=_Part_3282898_2104875624.1765469493984 Content-Type: multipart/alternative; boundary="----=_Part_3282897_171459878.1765469493919" ------=_Part_3282897_171459878.1765469493919 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [RFC] Lock-free atomic handler dispatch for runtime reconfigurati= on To: linux-rt@vger.kernel.orgCc: linux-kernel@vger.kernel.org --- Hello, I am writing to share a pattern I discovered while building single-producer= /single-consumer (SPSC) ring buffers for low-latency systems. Over the past= 18 months of learning C, I have developed a lock-free mechanism for hot-sw= apping function pointers at runtime using atomic operations with C11 acquir= e-release semantics. **Backstory:** I have approximately 1.5 years of hands-on C experience and = about 15,000 lines of production code. The first 10,000 lines focused heavi= ly on understanding pointers. This atomic dispatch pattern emerged over 8 m= onths of iterative development. I recognize the kernel community brings dee= p expertise, and I approach this with appropriate humility. **Note on Presentation:** I am dyslexic and ambidextrous and I use Ai assis= tive tools for grammar and clarity, but all technical content and pattern d= iscovery are entirely my own work. --- ## My Problem In real-time systems with strict latency budgets, it is common to need runt= ime reconfiguration without stopping the world or coordinating threads. Exa= mples include: - Toggling audit/metrics export on and off- Swapping diagnostic callbacks w= ithout restart- Hot-swapping print functions for different output formats- = Changing processing strategies at runtime based on control-plane signals Existing approaches have trade-offs:- **Locks** introduce coordination over= head and potential contention- **Callback tables** require index management= and potentially CAS loops- **Jump labels** provide compile-time flexibilit= y only- **Full restart** requires stopping the system I needed a pattern that was lock-free, runtime-reconfigurable, and required= zero coordination overhead. --- ## My Solution: Atomic Function Dispatch The core idea is simple: store a function pointer in shared memory and upda= te it atomically using C11 acquire-release semantics. The producer publishe= s a new handler; the consumer loads it with the guarantee that all prior wr= ites are visible. ```c/* Producer: hot-swap a new handler */void Control_room_CheckOff_Switch= (void (*fn)(const StringRegistry *)) {=C2=A0 =C2=A0 atomic_store_explicit(= =C2=A0 =C2=A0 =C2=A0 =C2=A0 (_Atomic(void (**)(const StringRegistry *))) &C= R.size,=C2=A0 =C2=A0 =C2=A0 =C2=A0 fn,=C2=A0 =C2=A0 =C2=A0 =C2=A0 memory_or= der_release=C2=A0 =C2=A0 );} /* Consumer: load and invoke safely */void (*current_handler)(const StringR= egistry *) =3D=C2=A0=C2=A0 =C2=A0 atomic_load_explicit(=C2=A0 =C2=A0 =C2=A0= =C2=A0 (_Atomic(void (*)(const StringRegistry *))) &CR.size,=C2=A0 =C2=A0 = =C2=A0 =C2=A0 memory_order_acquire=C2=A0 =C2=A0 ); if (current_handler) {=C2=A0 =C2=A0 current_handler(®istry);}``` The acquire-release pair ensures:- Producer releases: "All prior writes are= complete and visible."- Consumer acquires: "I see all prior writes and the= new handler safely." --- ## Performance Characteristics | Attribute | Measurement ||-----------|------------|| **Latency** | ~8-12 = CPU cycles (~15-20 ns on x86-64) || **Jitter** | Zero =E2=80=94 fixed, dete= rministic latency || **Lock-Free** | Yes =E2=80=94 single atomic store/load= , no loops or coordination || **Coordination Overhead** | None =E2=80=94 no= locks, CAS loops, or kernel interaction | This pattern occupies a middle ground:- Near jump_label speed (3-5 cycles, = but compile-time only)- Full runtime flexibility (any function, any time)- = Zero stop-the-world pauses- Predictable, bounded latency --- ## Real-World Usage In production SPSC ring buffers, this enables control-plane hot-swaps: ```cvoid ControlRoom_swap_audit(struct ControlRoom *cr,=C2=A0=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 void (*new_fn)(const struct ControlRoom *)) {=C2=A0 =C2=A0 atomi= c_store_explicit(&cr->audit_fn, new_fn, memory_order_release);} void ControlRoom_swap_metrics(struct ControlRoom *cr,=C2=A0=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 void (*new_fn)(const struct ControlRoom *)) {=C2=A0 =C2= =A0 atomic_store_explicit(&cr->push_metrics_fn, new_fn, memory_order_releas= e);}``` Each swap is instantaneous and visible to all consumers with no coordinatio= n. This is essential for real-time control in low-latency systems. --- ## Why Share This I studied the Linux kernel extensively while learning systems programming. = The kernel's latency discipline and careful use of memory ordering were my = primary teachers. Similar structures exist in `kernel/jump_label.c` and `ke= rnel/events/ring_buffer.c`, and I wanted to validate my approach against ex= isting kernel patterns. I do not claim this pattern is novel in the kernel context. But I discovere= d it independently through first-principles thinking about atomic operation= s, and it has proven invaluable in practice. I hope this submission demonst= rates that careful study of kernel patterns, combined with first-principles= reasoning about memory ordering, can lead to useful code even for newcomer= s to C. --- ## Limitations 1. **Specific to atomic function pointers** =E2=80=94 not for larger struct= ures2. **Not a replacement for callback tables** =E2=80=94 if I need index-= based dispatch, a callback table may be more appropriate3. **Still testing = latency measurements** =E2=80=94 I am validating the 8-12 cycle estimate wi= th hardware performance counters --- ## Questions for the Community I welcome feedback on:- Memory ordering correctness across architectures- W= hether this pattern solves a problem the kernel cares about- Suggestions fo= r production-grade validation- Any gotchas or limitations I may have missed --- ## Conclusion The Atomic Function Dispatch pattern is a lock-free, zero-overhead mechanis= m for hot-swapping function pointers at runtime. I am grateful for the oppo= rtunity to share this work and welcome corrections or questions from the co= mmunity. Best regards, David --- **Appendix: RFC Document** For detailed technical breakdown, wire diagrams, and integration examples, = please refer to the attached RFC document. David dseda1@aol.com ### Appendix: Wire Diagram ```=E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=90=E2=94=82=C2=A0 CALLER=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=82=C2=A0 void new= _handler(const StringRegistry *r) {...} =E2=94=82=E2=94=82=C2=A0 Control_ro= om_CheckOff_Switch(new_handler);=C2=A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=82=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=E2=94=82= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=E2=96=BC=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =E2=94=82=E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (*fn= ) =3D signal=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =E2=94=82=E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=BC=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=98=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=96=BC=E2=94=8C=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90=E2=94=82=C2=A0 AT= OMIC STORE (The Wire)=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=E2=94=82=E2=94=82=C2=A0 atomic_store= _explicit(=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=82=C2=A0 =C2=A0 =C2=A0 &cr->han= dler_fn,=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=82=C2=A0 =C2=A0 =C2=A0 fn,= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =E2=94=82=E2=94=82=C2=A0 =C2=A0 =C2=A0 memory_order_release)=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=E2=94= =82=E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0=E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=94=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=BC=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2= =94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =E2=96=BC=E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=90=E2=94=82=C2=A0 SHARED MEMORY (The Terminal)= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2= =94=82=E2=94=82=C2=A0 cr->handler_fn now points to: new_handler=C2=A0 =C2= =A0 =C2=A0 =E2=94=82=E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=82= =C2=A0 All prior writes are visible to consumers=C2=A0 =C2=A0 =C2=A0 =C2=A0= =E2=94=82=E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0=E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=94=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=BC=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=98=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =E2=96=BC=E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=90=E2=94=82=C2=A0 CONSUMER=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=82=C2= =A0 void (*h)(...) =3D atomic_load_explicit(=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =E2=94=82=E2=94=82=C2=A0 =C2=A0 =C2=A0 &cr->handler_fn, memory_order_ac= quire)=C2=A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=82=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =E2=94=82=E2=94=82=C2=A0 Safe to invoke; all prior writes visible=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =E2=94=82=E2=94=82=C2=A0 h(®istry);=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=E2=94=82=E2=94=94=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98``` s ------=_Part_3282897_171459878.1765469493919 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Subject: [RFC] Lock-free atomi= c handler dispatch for runtime reconfiguration

To:= linux-rt@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
<= div>
---

Hello,

=
I am writing to share a pattern I discovered while building single-pro= ducer/single-consumer (SPSC) ring buffers for low-latency systems. Over the= past 18 months of learning C, I have developed a lock-free mechanism for h= ot-swapping function pointers at runtime using atomic operations with C11 a= cquire-release semantics.

**Backstory:** I have ap= proximately 1.5 years of hands-on C experience and about 15,000 lines of pr= oduction code. The first 10,000 lines focused heavily on understanding poin= ters. This atomic dispatch pattern emerged over 8 months of iterative devel= opment. I recognize the kernel community brings deep expertise, and I appro= ach this with appropriate humility.

**Note on Pres= entation:** I am dyslexic and ambidextrous and I use Ai assistive tools for= grammar and clarity, but all technical content and pattern discovery are e= ntirely my own work.

---

= ## My Problem

In real-time systems with strict lat= ency budgets, it is common to need runtime reconfiguration without stopping= the world or coordinating threads. Examples include:

<= div>- Toggling audit/metrics export on and off
- Swapping diagnos= tic callbacks without restart
- Hot-swapping print functions for = different output formats
- Changing processing strategies at runt= ime based on control-plane signals

Existing approa= ches have trade-offs:
- **Locks** introduce coordination overhead= and potential contention
- **Callback tables** require index man= agement and potentially CAS loops
- **Jump labels** provide compi= le-time flexibility only
- **Full restart** requires stopping the= system

I needed a pattern that was lock-free, run= time-reconfigurable, and required zero coordination overhead.
---

## My Solution: Atomic Function Di= spatch

The core idea is simple: store a function p= ointer in shared memory and update it atomically using C11 acquire-release = semantics. The producer publishes a new handler; the consumer loads it with= the guarantee that all prior writes are visible.

= ```c
/* Producer: hot-swap a new handler */
void Contro= l_room_CheckOff_Switch(void (*fn)(const StringRegistry *)) {
&nbs= p;   atomic_store_explicit(
        (_At= omic(void (**)(const StringRegistry *))) &CR.size,
  &nb= sp;     fn,
        memory_order_re= lease
    );
}

/* Co= nsumer: load and invoke safely */
void (*current_handler)(const S= tringRegistry *) =3D 
    atomic_load_explicit(
        (_Atomic(void (*)(const StringRegistry = *))) &CR.size,
        memory_order_acqui= re
    );

if (current_handler)= {
    current_handler(&registry);
}
```

The acquire-release pair ensures:
<= div>- Producer releases: "All prior writes are complete and visible."
=
- Consumer acquires: "I see all prior writes and the new handler safel= y."

---

## Performance Ch= aracteristics

| Attribute | Measurement |
|-----------|------------|
| **Latency** | ~8-12 CPU cycles (~1= 5-20 ns on x86-64) |
| **Jitter** | Zero =E2=80=94 fixed, determi= nistic latency |
| **Lock-Free** | Yes =E2=80=94 single atomic st= ore/load, no loops or coordination |
| **Coordination Overhead** = | None =E2=80=94 no locks, CAS loops, or kernel interaction |
This pattern occupies a middle ground:
- Near jump_la= bel speed (3-5 cycles, but compile-time only)
- Full runtime flex= ibility (any function, any time)
- Zero stop-the-world pauses
- Predictable, bounded latency

---

## Real-World Usage

In production= SPSC ring buffers, this enables control-plane hot-swaps:

```c
void ControlRoom_swap_audit(struct ControlRoom *cr,&= nbsp;
                &nb= sp;           void (*new_fn)(const struct ControlR= oom *)) {
    atomic_store_explicit(&cr->audit_f= n, new_fn, memory_order_release);
}

void= ControlRoom_swap_metrics(struct ControlRoom *cr, 
  &n= bsp;                     =       void (*new_fn)(const struct ControlRoom *)) {
    atomic_store_explicit(&cr->push_metrics_fn, new_fn, = memory_order_release);
}
```

E= ach swap is instantaneous and visible to all consumers with no coordination= . This is essential for real-time control in low-latency systems.

---

## Why Share This
I studied the Linux kernel extensively while learning systems = programming. The kernel's latency discipline and careful use of memory orde= ring were my primary teachers. Similar structures exist in `kernel/jump_lab= el.c` and `kernel/events/ring_buffer.c`, and I wanted to validate my approa= ch against existing kernel patterns.

I do not clai= m this pattern is novel in the kernel context. But I discovered it independ= ently through first-principles thinking about atomic operations, and it has= proven invaluable in practice. I hope this submission demonstrates that ca= reful study of kernel patterns, combined with first-principles reasoning ab= out memory ordering, can lead to useful code even for newcomers to C.
=

---

## Limitations
<= br>
1. **Specific to atomic function pointers** =E2=80=94 not for= larger structures
2. **Not a replacement for callback tables** = =E2=80=94 if I need index-based dispatch, a callback table may be more appr= opriate
3. **Still testing latency measurements** =E2=80=94 I am = validating the 8-12 cycle estimate with hardware performance counters
=

---

## Questions for the Commu= nity

I welcome feedback on:
- Memory ord= ering correctness across architectures
- Whether this pattern sol= ves a problem the kernel cares about
- Suggestions for production= -grade validation
- Any gotchas or limitations I may have missed<= /div>

---

## Conclusion

The Atomic Function Dispatch pattern is a lock-free, zero= -overhead mechanism for hot-swapping function pointers at runtime. I am gra= teful for the opportunity to share this work and welcome corrections or que= stions from the community.

Best regards,

David

---

**Appendix: RFC Document**

For detailed technical= breakdown, wire diagrams, and integration examples, please refer to the at= tached RFC document.

David dseda1@aol.com



### Appendix: Wire Diagram

```
=E2=94=8C=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90
=E2=94= =82  CALLER                &nb= sp;                     &= nbsp;   =E2=94=82
=E2=94=82  void new_handler(const Str= ingRegistry *r) {...} =E2=94=82
=E2=94=82  Control_room_Chec= kOff_Switch(new_handler);      =E2=94=82
=E2=94=82=                    =E2=94= =82                    &n= bsp;         =E2=94=82
=E2=94=82   =                =E2=96=BC  &nb= sp;                     &= nbsp;     =E2=94=82
=E2=94=82       = ;     (*fn) =3D signal            &= nbsp;           =E2=94=82
=E2=94=82 = ;                  =E2=94=82&n= bsp;                     =         =E2=94=82
=E2=94=94=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=BC=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98
                    =E2= =94=82
                &n= bsp;   =E2=96=BC
=E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90
=E2=94=82&nbs= p; ATOMIC STORE (The Wire)              =            =E2=94=82
=E2=94=82 = ; atomic_store_explicit(              &n= bsp;           =E2=94=82
=E2=94=82 =     &cr->handler_fn,          &n= bsp;                 =E2=94=82
=E2=94=82      fn,          &= nbsp;                    =          =E2=94=82
=E2=94=82  &nbs= p;   memory_order_release)            &n= bsp;          =E2=94=82
=E2=94=82  =                  =E2=94=82&nbs= p;                     &n= bsp;       =E2=94=82
=E2=94=94=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=BC=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98
                    =E2= =94=82
                &n= bsp;   =E2=96=BC
=E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90
=E2=94=82&nbs= p; SHARED MEMORY (The Terminal)            &n= bsp;       =E2=94=82
=E2=94=82  cr->handle= r_fn now points to: new_handler      =E2=94=82
=E2= =94=82                   =                     &nbs= p;         =E2=94=82
=E2=94=82  All prio= r writes are visible to consumers       =E2=94=82
=
=E2=94=82                 = ;  =E2=94=82                &n= bsp;             =E2=94=82
=E2=94= =94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=BC=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=98
              &nb= sp;     =E2=94=82
          &n= bsp;         =E2=96=BC
=E2=94=8C=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90
=E2=94=82  CONSUMER            &= nbsp;                    =       =E2=94=82
=E2=94=82  void (*h)(...) = =3D atomic_load_explicit(          =E2=94=82
=
=E2=94=82      &cr->handler_fn, memory_order_acq= uire)      =E2=94=82
=E2=94=82     =                     &nbs= p;                     &n= bsp; =E2=94=82
=E2=94=82  Safe to invoke; all prior writes v= isible        =E2=94=82
=E2=94=82  h(&am= p;registry);                  =                  =E2=94=82
=E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=98
```

s
<= div>

------=_Part_3282897_171459878.1765469493919-- ------=_Part_3282898_2104875624.1765469493984 Content-Type: text/plain Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="submission_email.txt" Content-ID: <64246a41-9de9-2328-6ca7-1922826f3701@yahoo.com> U3ViamVjdDogW1JGQ10gTG9jay1mcmVlIGF0b21pYyBoYW5kbGVyIGRpc3BhdGNoIGZvciBydW50 aW1lIHJlY29uZmlndXJhdGlvbgoKVG86IGxpbnV4LXJ0QHZnZXIua2VybmVsLm9yZwpDYzogbGlu dXgta2VybmVsQHZnZXIua2VybmVsLm9yZwoKLS0tCgpIZWxsbywKCkkgYW0gd3JpdGluZyB0byBz aGFyZSBhIHBhdHRlcm4gSSBkaXNjb3ZlcmVkIHdoaWxlIGJ1aWxkaW5nIHNpbmdsZS1wcm9kdWNl ci9zaW5nbGUtY29uc3VtZXIgKFNQU0MpIHJpbmcgYnVmZmVycyBmb3IgbG93LWxhdGVuY3kgc3lz dGVtcy4gT3ZlciB0aGUgcGFzdCAxOCBtb250aHMgb2YgbGVhcm5pbmcgQywgSSBoYXZlIGRldmVs b3BlZCBhIGxvY2stZnJlZSBtZWNoYW5pc20gZm9yIGhvdC1zd2FwcGluZyBmdW5jdGlvbiBwb2lu dGVycyBhdCBydW50aW1lIHVzaW5nIGF0b21pYyBvcGVyYXRpb25zIHdpdGggQzExIGFjcXVpcmUt cmVsZWFzZSBzZW1hbnRpY3MuCgoqKkJhY2tncm91bmQ6KiogSSBoYXZlIGFwcHJveGltYXRlbHkg MS41IHllYXJzIG9mIGhhbmRzLW9uIEMgZXhwZXJpZW5jZSBhbmQgYWJvdXQgMTUsMDAwIGxpbmVz IG9mIHByb2R1Y3Rpb24gY29kZS4gVGhlIGZpcnN0IDEwLDAwMCBsaW5lcyBmb2N1c2VkIGhlYXZp bHkgb24gdW5kZXJzdGFuZGluZyBwb2ludGVycy4gVGhpcyBhdG9taWMgZGlzcGF0Y2ggcGF0dGVy biBlbWVyZ2VkIG92ZXIgOCBtb250aHMgb2YgaXRlcmF0aXZlIGRldmVsb3BtZW50LiBJIHJlY29n bml6ZSB0aGUga2VybmVsIGNvbW11bml0eSBicmluZ3MgZGVlcCBleHBlcnRpc2UsIGFuZCBJIGFw cHJvYWNoIHRoaXMgd2l0aCBhcHByb3ByaWF0ZSBodW1pbGl0eS4KCioqTm90ZSBvbiBwcmVzZW50 YXRpb246KiogSSBhbSBkeXNsZXhpYyBhbmQgYW1iaWRleHRyb3VzIGFuZCBJIHVzZSBBaSBhc3Np c3RpdmUgdG9vbHMgZm9yIGdyYW1tYXIgYW5kIGNsYXJpdHksIGJ1dCBhbGwgdGVjaG5pY2FsIGNv bnRlbnQgYW5kIHBhdHRlcm4gZGlzY292ZXJ5IGFyZSBlbnRpcmVseSBteSBvd24gd29yay4KCi0t LQoKIyMgTXkgUHJvYmxlbQoKSW4gcmVhbC10aW1lIHN5c3RlbXMgd2l0aCBzdHJpY3QgbGF0ZW5j eSBidWRnZXRzLCBpdCBpcyBjb21tb24gdG8gbmVlZCBydW50aW1lIHJlY29uZmlndXJhdGlvbiB3 aXRob3V0IHN0b3BwaW5nIHRoZSB3b3JsZCBvciBjb29yZGluYXRpbmcgdGhyZWFkcy4gRXhhbXBs ZXMgaW5jbHVkZToKCi0gVG9nZ2xpbmcgYXVkaXQvbWV0cmljcyBleHBvcnQgb24gYW5kIG9mZgot IFN3YXBwaW5nIGRpYWdub3N0aWMgY2FsbGJhY2tzIHdpdGhvdXQgcmVzdGFydAotIEhvdC1zd2Fw cGluZyBwcmludCBmdW5jdGlvbnMgZm9yIGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0cwotIENoYW5n aW5nIHByb2Nlc3Npbmcgc3RyYXRlZ2llcyBhdCBydW50aW1lIGJhc2VkIG9uIGNvbnRyb2wtcGxh bmUgc2lnbmFscwoKRXhpc3RpbmcgYXBwcm9hY2hlcyBoYXZlIHRyYWRlLW9mZnM6Ci0gKipMb2Nr cyoqIGludHJvZHVjZSBjb29yZGluYXRpb24gb3ZlcmhlYWQgYW5kIHBvdGVudGlhbCBjb250ZW50 aW9uCi0gKipDYWxsYmFjayB0YWJsZXMqKiByZXF1aXJlIGluZGV4IG1hbmFnZW1lbnQgYW5kIHBv dGVudGlhbGx5IENBUyBsb29wcwotICoqSnVtcCBsYWJlbHMqKiBwcm92aWRlIGNvbXBpbGUtdGlt ZSBmbGV4aWJpbGl0eSBvbmx5Ci0gKipGdWxsIHJlc3RhcnQqKiByZXF1aXJlcyBzdG9wcGluZyB0 aGUgc3lzdGVtCgpJIG5lZWRlZCBhIHBhdHRlcm4gdGhhdCB3YXMgbG9jay1mcmVlLCBydW50aW1l LXJlY29uZmlndXJhYmxlLCBhbmQgcmVxdWlyZWQgemVybyBjb29yZGluYXRpb24gb3ZlcmhlYWQu CgotLS0KCiMjIE15IFNvbHV0aW9uOiBBdG9taWMgRnVuY3Rpb24gRGlzcGF0Y2gKClRoZSBjb3Jl IGlkZWEgaXMgc2ltcGxlOiBzdG9yZSBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gc2hhcmVkIG1lbW9y eSBhbmQgdXBkYXRlIGl0IGF0b21pY2FsbHkgdXNpbmcgQzExIGFjcXVpcmUtcmVsZWFzZSBzZW1h bnRpY3MuIFRoZSBwcm9kdWNlciBwdWJsaXNoZXMgYSBuZXcgaGFuZGxlcjsgdGhlIGNvbnN1bWVy IGxvYWRzIGl0IHdpdGggdGhlIGd1YXJhbnRlZSB0aGF0IGFsbCBwcmlvciB3cml0ZXMgYXJlIHZp c2libGUuCgpgYGBjCi8qIFByb2R1Y2VyOiBob3Qtc3dhcCBhIG5ldyBoYW5kbGVyICovCnZvaWQg Q29udHJvbF9yb29tX0NoZWNrT2ZmX1N3aXRjaCh2b2lkICgqZm4pKGNvbnN0IFN0cmluZ1JlZ2lz dHJ5ICopKSB7CiAgICBhdG9taWNfc3RvcmVfZXhwbGljaXQoCiAgICAgICAgKF9BdG9taWModm9p ZCAoKiopKGNvbnN0IFN0cmluZ1JlZ2lzdHJ5ICopKSkgJkNSLnNpemUsCiAgICAgICAgZm4sCiAg ICAgICAgbWVtb3J5X29yZGVyX3JlbGVhc2UKICAgICk7Cn0KCi8qIENvbnN1bWVyOiBsb2FkIGFu ZCBpbnZva2Ugc2FmZWx5ICovCnZvaWQgKCpjdXJyZW50X2hhbmRsZXIpKGNvbnN0IFN0cmluZ1Jl Z2lzdHJ5ICopID0gCiAgICBhdG9taWNfbG9hZF9leHBsaWNpdCgKICAgICAgICAoX0F0b21pYyh2 b2lkICgqKShjb25zdCBTdHJpbmdSZWdpc3RyeSAqKSkpICZDUi5zaXplLAogICAgICAgIG1lbW9y eV9vcmRlcl9hY3F1aXJlCiAgICApOwoKaWYgKGN1cnJlbnRfaGFuZGxlcikgewogICAgY3VycmVu dF9oYW5kbGVyKCZyZWdpc3RyeSk7Cn0KYGBgCgpUaGUgYWNxdWlyZS1yZWxlYXNlIHBhaXIgZW5z dXJlczoKLSBQcm9kdWNlciByZWxlYXNlczogIkFsbCBwcmlvciB3cml0ZXMgYXJlIGNvbXBsZXRl IGFuZCB2aXNpYmxlLiIKLSBDb25zdW1lciBhY3F1aXJlczogIkkgc2VlIGFsbCBwcmlvciB3cml0 ZXMgYW5kIHRoZSBuZXcgaGFuZGxlciBzYWZlbHkuIgoKLS0tCgojIyBQZXJmb3JtYW5jZSBDaGFy YWN0ZXJpc3RpY3MKCnwgQXR0cmlidXRlIHwgTWVhc3VyZW1lbnQgfAp8LS0tLS0tLS0tLS18LS0t LS0tLS0tLS0tfAp8ICoqTGF0ZW5jeSoqIHwgfjgtMTIgQ1BVIGN5Y2xlcyAofjE1LTIwIG5zIG9u IHg4Ni02NCkgfAp8ICoqSml0dGVyKiogfCBaZXJvIOKAlCBmaXhlZCwgZGV0ZXJtaW5pc3RpYyBs YXRlbmN5IHwKfCAqKkxvY2stRnJlZSoqIHwgWWVzIOKAlCBzaW5nbGUgYXRvbWljIHN0b3JlL2xv YWQsIG5vIGxvb3BzIG9yIGNvb3JkaW5hdGlvbiB8CnwgKipDb29yZGluYXRpb24gT3ZlcmhlYWQq KiB8IE5vbmUg4oCUIG5vIGxvY2tzLCBDQVMgbG9vcHMsIG9yIGtlcm5lbCBpbnRlcmFjdGlvbiB8 CgpUaGlzIHBhdHRlcm4gb2NjdXBpZXMgYSBtaWRkbGUgZ3JvdW5kOgotIE5lYXIganVtcF9sYWJl bCBzcGVlZCAoMy01IGN5Y2xlcywgYnV0IGNvbXBpbGUtdGltZSBvbmx5KQotIEZ1bGwgcnVudGlt ZSBmbGV4aWJpbGl0eSAoYW55IGZ1bmN0aW9uLCBhbnkgdGltZSkKLSBaZXJvIHN0b3AtdGhlLXdv cmxkIHBhdXNlcwotIFByZWRpY3RhYmxlLCBib3VuZGVkIGxhdGVuY3kKCi0tLQoKIyMgUmVhbC1X b3JsZCBVc2FnZQoKSW4gcHJvZHVjdGlvbiBTUFNDIHJpbmcgYnVmZmVycywgdGhpcyBlbmFibGVz IGNvbnRyb2wtcGxhbmUgaG90LXN3YXBzOgoKYGBgYwp2b2lkIENvbnRyb2xSb29tX3N3YXBfYXVk aXQoc3RydWN0IENvbnRyb2xSb29tICpjciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICgqbmV3X2ZuKShjb25zdCBzdHJ1Y3QgQ29udHJvbFJvb20gKikpIHsKICAgIGF0b21pY19z dG9yZV9leHBsaWNpdCgmY3ItPmF1ZGl0X2ZuLCBuZXdfZm4sIG1lbW9yeV9vcmRlcl9yZWxlYXNl KTsKfQoKdm9pZCBDb250cm9sUm9vbV9zd2FwX21ldHJpY3Moc3RydWN0IENvbnRyb2xSb29tICpj ciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpuZXdfZm4pKGNvbnN0IHN0 cnVjdCBDb250cm9sUm9vbSAqKSkgewogICAgYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZjci0+cHVz aF9tZXRyaWNzX2ZuLCBuZXdfZm4sIG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKfQpgYGAKCkVhY2gg c3dhcCBpcyBpbnN0YW50YW5lb3VzIGFuZCB2aXNpYmxlIHRvIGFsbCBjb25zdW1lcnMgd2l0aCBu byBjb29yZGluYXRpb24uIFRoaXMgaXMgZXNzZW50aWFsIGZvciByZWFsLXRpbWUgY29udHJvbCBp biBsb3ctbGF0ZW5jeSBzeXN0ZW1zLgoKLS0tCgojIyBXaHkgU2hhcmUgVGhpcwoKSSBzdHVkaWVk IHRoZSBMaW51eCBrZXJuZWwgZXh0ZW5zaXZlbHkgd2hpbGUgbGVhcm5pbmcgc3lzdGVtcyBwcm9n cmFtbWluZy4gVGhlIGtlcm5lbCdzIGxhdGVuY3kgZGlzY2lwbGluZSBhbmQgY2FyZWZ1bCB1c2Ug b2YgbWVtb3J5IG9yZGVyaW5nIHdlcmUgbXkgcHJpbWFyeSB0ZWFjaGVycy4gU2ltaWxhciBzdHJ1 Y3R1cmVzIGV4aXN0IGluIGBrZXJuZWwvanVtcF9sYWJlbC5jYCBhbmQgYGtlcm5lbC9ldmVudHMv cmluZ19idWZmZXIuY2AsIGFuZCBJIHdhbnRlZCB0byB2YWxpZGF0ZSBteSBhcHByb2FjaCBhZ2Fp bnN0IGV4aXN0aW5nIGtlcm5lbCBwYXR0ZXJucy4KCkkgZG8gbm90IGNsYWltIHRoaXMgcGF0dGVy biBpcyBub3ZlbCBpbiB0aGUga2VybmVsIGNvbnRleHQuIEJ1dCBJIGRpc2NvdmVyZWQgaXQgaW5k ZXBlbmRlbnRseSB0aHJvdWdoIGZpcnN0LXByaW5jaXBsZXMgdGhpbmtpbmcgYWJvdXQgYXRvbWlj IG9wZXJhdGlvbnMsIGFuZCBpdCBoYXMgcHJvdmVuIGludmFsdWFibGUgaW4gcHJhY3RpY2UuIEkg aG9wZSB0aGlzIHN1Ym1pc3Npb24gZGVtb25zdHJhdGVzIHRoYXQgY2FyZWZ1bCBzdHVkeSBvZiBr ZXJuZWwgcGF0dGVybnMsIGNvbWJpbmVkIHdpdGggZmlyc3QtcHJpbmNpcGxlcyByZWFzb25pbmcg YWJvdXQgbWVtb3J5IG9yZGVyaW5nLCBjYW4gbGVhZCB0byB1c2VmdWwgY29kZSBldmVuIGZvciBu ZXdjb21lcnMgdG8gQy4KCi0tLQoKIyMgTGltaXRhdGlvbnMKCjEuICoqU3BlY2lmaWMgdG8gYXRv bWljIGZ1bmN0aW9uIHBvaW50ZXJzKiog4oCUIG5vdCBmb3IgbGFyZ2VyIHN0cnVjdHVyZXMKMi4g KipOb3QgYSByZXBsYWNlbWVudCBmb3IgY2FsbGJhY2sgdGFibGVzKiog4oCUIGlmIEkgbmVlZCBp bmRleC1iYXNlZCBkaXNwYXRjaCwgYSBjYWxsYmFjayB0YWJsZSBtYXkgYmUgbW9yZSBhcHByb3By aWF0ZQozLiAqKlN0aWxsIHRlc3RpbmcgbGF0ZW5jeSBtZWFzdXJlbWVudHMqKiDigJQgSSBhbSB2 YWxpZGF0aW5nIHRoZSA4LTEyIGN5Y2xlIGVzdGltYXRlIHdpdGggaGFyZHdhcmUgcGVyZm9ybWFu Y2UgY291bnRlcnMKCi0tLQoKIyMgUXVlc3Rpb25zIGZvciB0aGUgQ29tbXVuaXR5CgpJIHdlbGNv bWUgZmVlZGJhY2sgb246Ci0gTWVtb3J5IG9yZGVyaW5nIGNvcnJlY3RuZXNzIGFjcm9zcyBhcmNo aXRlY3R1cmVzCi0gV2hldGhlciB0aGlzIHBhdHRlcm4gc29sdmVzIGEgcHJvYmxlbSB0aGUga2Vy bmVsIGNhcmVzIGFib3V0Ci0gU3VnZ2VzdGlvbnMgZm9yIHByb2R1Y3Rpb24tZ3JhZGUgdmFsaWRh dGlvbgotIEFueSBnb3RjaGFzIG9yIGxpbWl0YXRpb25zIEkgbWF5IGhhdmUgbWlzc2VkCgotLS0K CiMjIENvbmNsdXNpb24KClRoZSBBdG9taWMgRnVuY3Rpb24gRGlzcGF0Y2ggcGF0dGVybiBpcyBh IGxvY2stZnJlZSwgemVyby1vdmVyaGVhZCBtZWNoYW5pc20gZm9yIGhvdC1zd2FwcGluZyBmdW5j dGlvbiBwb2ludGVycyBhdCBydW50aW1lLiBJIGFtIGdyYXRlZnVsIGZvciB0aGUgb3Bwb3J0dW5p dHkgdG8gc2hhcmUgdGhpcyB3b3JrIGFuZCB3ZWxjb21lIGNvcnJlY3Rpb25zIG9yIHF1ZXN0aW9u cyBmcm9tIHRoZSBjb21tdW5pdHkuCgpCZXN0IHJlZ2FyZHMsCgpEYXZpZAoKLS0tCgoqKkFwcGVu ZGl4OiBSRkMgRG9jdW1lbnQqKgoKRm9yIGRldGFpbGVkIHRlY2huaWNhbCBicmVha2Rvd24sIHdp cmUgZGlhZ3JhbXMsIGFuZCBpbnRlZ3JhdGlvbiBleGFtcGxlcywgcGxlYXNlIHJlZmVyIHRvIHRo ZSBhdHRhY2hlZCBSRkMgZG9jdW1lbnQuCgpEYXZpZCBkc2VkYTFAYW9sLmNvbQoKCgojIyMgQXBw ZW5kaXg6IFdpcmUgRGlhZ3JhbQoKYGBgCuKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUkArilIIgIENBTExFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIOKUggrilIIgIHZvaWQgbmV3X2hhbmRsZXIoY29uc3QgU3RyaW5nUmVnaXN0cnkgKnIp IHsuLi59IOKUggrilIIgIENvbnRyb2xfcm9vbV9DaGVja09mZl9Td2l0Y2gobmV3X2hhbmRsZXIp OyAgICAgIOKUggrilIIgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAg4pSCCuKUgiAgICAgICAgICAgICAgICAgICDilrwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICDilIIK4pSCICAgICAgICAgICAgKCpmbikgPSBzaWduYWwgICAgICAgICAgICAg ICAgICAgICAgICDilIIK4pSCICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIOKUggrilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lJgKICAgICAgICAgICAgICAgICAgICDilIIKICAgICAgICAgICAgICAgICAgICDilrwK4pSM4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQCuKUgiAgQVRPTUlDIFNUT1JFIChU aGUgV2lyZSkgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCuKUgiAgYXRvbWljX3N0b3JlX2V4 cGxpY2l0KCAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCuKUgiAgICAgICZjci0+aGFuZGxl cl9mbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCuKUgiAgICAgIGZuLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCuKUgiAgICAgIG1lbW9yeV9vcmRl cl9yZWxlYXNlKSAgICAgICAgICAgICAgICAgICAgICAg4pSCCuKUgiAgICAgICAgICAgICAgICAg ICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIK4pSU4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYCiAgICAgICAgICAgICAgICAgICAg4pSCCiAgICAgICAg ICAgICAgICAgICAg4pa8CuKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU kArilIIgIFNIQVJFRCBNRU1PUlkgKFRoZSBUZXJtaW5hbCkgICAgICAgICAgICAgICAgICAgIOKU ggrilIIgIGNyLT5oYW5kbGVyX2ZuIG5vdyBwb2ludHMgdG86IG5ld19oYW5kbGVyICAgICAg4pSC CuKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSC CuKUgiAgQWxsIHByaW9yIHdyaXRlcyBhcmUgdmlzaWJsZSB0byBjb25zdW1lcnMgICAgICAg4pSC CuKUgiAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDi lIIK4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYCiAgICAgICAgICAg ICAgICAgICAg4pSCCiAgICAgICAgICAgICAgICAgICAg4pa8CuKUjOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUkArilIIgIENPTlNVTUVSICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIOKUggrilIIgIHZvaWQgKCpoKSguLi4pID0gYXRvbWljX2xvYWRf ZXhwbGljaXQoICAgICAgICAgIOKUggrilIIgICAgICAmY3ItPmhhbmRsZXJfZm4sIG1lbW9yeV9v cmRlcl9hY3F1aXJlKSAgICAgIOKUggrilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIOKUggrilIIgIFNhZmUgdG8gaW52b2tlOyBhbGwgcHJpb3Igd3Jp dGVzIHZpc2libGUgICAgICAgIOKUggrilIIgIGgoJnJlZ2lzdHJ5KTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIOKUggrilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilJgKYGBgCgoK ------=_Part_3282898_2104875624.1765469493984--