<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
The options you have modified changes native memory, not the Java heap. That said, I would run JFR with the default configuration unless you experience issues.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
5% of 24G is 1,2 GB. That doesn't sound reasonable, but I can't rule out JFR impacts GC heuristics somehow. You could do a Java heap dump and see if there are classes held by JFR. You could also run with NMT (native memory tracking) to get a more detailed view
of what is happening from a memory perspective.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
What JDK version are you using?</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Erik</div>
<div id="appendonsend"></div>
<hr style="display: inline-block; width: 98%;">
<div dir="ltr" id="divRplyFwdMsg"><span style="font-family: Calibri, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);"><b>From:</b> Gaurav Gupta <geniusgaurav27@gmail.com><br>
<b>Sent:</b> Friday, March 1, 2024 2:49 PM<br>
<b>To:</b> Marcus Hirt <marcus@hirt.se><br>
<b>Cc:</b> Erik Gahlin <erik.gahlin@oracle.com>; hotspot-jfr-dev@openjdk.org <hotspot-jfr-dev@openjdk.org>; jmc-dev@openjdk.org <jmc-dev@openjdk.org><br>
<b>Subject:</b> [External] : Re: JFR causes spike in HeapMemoryAfterGC in prod ssystems</span>
<div> </div>
</div>
<div style="direction: ltr;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Thanks Marcus and Erik.</span></div>
<div style="direction: ltr;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
</span></div>
<div style="direction: ltr;"><span style="font-family: Slack-Lato, Slack-Fractions, appleLogo, sans-serif; font-size: 15px; color: rgb(29, 28, 29); background-color: rgb(248, 248, 248);">HeapMemoryAfterGC - Our service framework in Amazon emits a JMX metrics
for HeapMemoryAfterGC - i.e. the percent occupancy of the part of the Java heap <i>
that excludes Eden</i> by both live and garbage objects <i>after the last collection that affected that part of the Java heap</i>. It is
<i>not</i> an instantaneously measured value: it changes <i>only after</i> a collection. HeapMemoryAfterGCUse stays fairly constant.</span></div>
<div style="direction: ltr;"><span style="font-family: Slack-Lato, Slack-Fractions, appleLogo, sans-serif; font-size: 15px; color: rgb(29, 28, 29); background-color: rgb(248, 248, 248);"><br>
</span></div>
<div style="direction: ltr;"><span style="font-family: Slack-Lato, Slack-Fractions, appleLogo, sans-serif; font-size: 15px; color: rgb(29, 28, 29); background-color: rgb(248, 248, 248);">Heap memory Xmx and Xms values are set to 24G on the server The rise is
from 10% to 30%. When I disable the JFR VM params, the HeapMomoryAfterGCuse falls bacl to 5-10%. So its the enables of JFR causing the issue.</span></div>
<div style="direction: ltr;"><span style="font-family: Slack-Lato, Slack-Fractions, appleLogo, sans-serif; font-size: 15px; color: rgb(29, 28, 29); background-color: rgb(248, 248, 248);"><br>
</span></div>
<div style="direction: ltr;"><span style="font-family: Slack-Lato, Slack-Fractions, appleLogo, sans-serif; font-size: 15px; color: rgb(29, 28, 29); background-color: rgb(248, 248, 248);">Do you think additional JVM parameters could cause the issue though I
have capped the memory to 60MB.</span></div>
<div style="direction: ltr;"><span style="font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; color: rgb(224, 30, 90); background-color: rgba(29, 28, 29, 0.04);">-XX:StartFlightRecording=name=SomeServiceJFR,disk=false,path-to-gc-roots=false
-XX:FlightRecorderOptions=stackdepth=256,memorysize=60M,numglobalbuffers=2,globalbuffersize=30M,old-object-queue-size=64</span></div>
<div style="direction: ltr;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
</span></div>
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
</span>
<div style="direction: ltr;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">On Sat, Feb 24, 2024 at 6:02 PM Marcus Hirt <<a href="mailto:marcus@hirt.se" id="OWA9eeaeab3-ed4b-1c4a-1eb7-4d55dc6dbc94" class="OWAAutoLink" data-loopstyle="linkonly">marcus@hirt.se</a>>
wrote:</span></div>
<blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);">
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">Hi Gaurav,<br>
<br>
I’ve invited you to the JMC slack.</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">Kind regards,</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">Marcus</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);"> </span></p>
<div style="padding: 3pt 0cm 0cm; border-width: 1pt medium medium; border-style: solid none none; border-color: rgb(225, 225, 225) currentcolor currentcolor;">
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Calibri, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);"><b>From:</b> jmc-dev <<a href="mailto:jmc-dev-retn@openjdk.org" id="OWA019d2859-a03f-3635-7369-65d7184995c2" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">jmc-dev-retn@openjdk.org</a>>
<b>On Behalf Of </b>Erik Gahlin<br>
<b>Sent:</b> Saturday, 24 February 2024 11:09<br>
<b>To:</b> Gaurav Gupta <<a href="mailto:geniusgaurav27@gmail.com" id="OWA2b05232e-0f66-80f4-1bfc-0a112dae2c85" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">geniusgaurav27@gmail.com</a>>;
<a href="mailto:hotspot-jfr-dev@openjdk.org" id="OWA6af91ef6-68a4-b5ea-e1c7-9511916c4e47" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">
hotspot-jfr-dev@openjdk.org</a>; <a href="mailto:jmc-dev@openjdk.org" id="OWAba131203-185d-5c57-1f8a-9958cdcf20bf" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">
jmc-dev@openjdk.org</a><br>
<b>Subject:</b> Re: JFR causes spike in HeapMemoryAfterGC in prod ssystems</span></p>
</div>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">Hi Guarav,</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">> it is claimed to be safe in prod systems with continuous JFR profiling.</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">The overhead should be less than 1% by default (-XX:StartFlightRecording,
no other options) and it should not crash, cause memory leaks etc. if you run it for a long time.</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">I don't know where the HeapMemoryAfterGC metric comes from. Is it something
shown in JMC? We don't have targets for memory usage. That said, JFR should probably not use more than 50 MB of the Java heap, so if 30% is normal or not depends on how large heap you are using.</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">There is a slack channel for JMC developers. I don't manage it and I'm
not sure if this is really a bug.</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;"><a href="https://wiki.openjdk.org/display/jmc/Contributing" id="OWA7f6a63c9-ba16-10b6-e928-28f5c5cb0941" class="OWAAutoLink" data-auth="NotApplicable" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">https://wiki.openjdk.org/display/jmc/Contributing</a></span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">Best regards,</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">Erik</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;"> </span></p>
<div align="center">
<hr align="center" size="2" style="width: 98%;">
</div>
<div id="x_m_-4765585040214848765m_-3690963903267059490divRplyFwdMsg">
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Calibri, sans-serif; font-size: 11pt; color: black;"><b>From:</b> hotspot-jfr-dev <<a href="mailto:hotspot-jfr-dev-retn@openjdk.org" id="OWAb006e331-1e13-e994-0ce6-3bc445f8ce5b" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">hotspot-jfr-dev-retn@openjdk.org</a>>
on behalf of Gaurav Gupta <<a href="mailto:geniusgaurav27@gmail.com" id="OWAad20a351-e5f6-4843-7304-076cdd2693bb" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">geniusgaurav27@gmail.com</a>><br>
<b>Sent:</b> Friday, February 23, 2024 6:26 AM<br>
<b>To:</b> <a href="mailto:hotspot-jfr-dev@openjdk.org" id="OWAd908e493-6864-ce18-f71c-aff040b653a3" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">hotspot-jfr-dev@openjdk.org</a> <<a href="mailto:hotspot-jfr-dev@openjdk.org" id="OWA2b787b91-8eed-502c-c84f-4af9bfb95a19" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">hotspot-jfr-dev@openjdk.org</a>>;
<a href="mailto:jmc-dev@openjdk.org" id="OWAba334178-2feb-12f5-cec1-7586a7197d00" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">
jmc-dev@openjdk.org</a> <<a href="mailto:jmc-dev@openjdk.org" id="OWAb218bb49-ae43-7c14-8a34-2b52d47a010f" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">jmc-dev@openjdk.org</a>><br>
<b>Subject:</b> JFR causes spike in HeapMemoryAfterGC in prod ssystems</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"> </p>
</div>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">Hi Team, </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">I am Gaurav Gupta, Principal Engineer at Amazon India (<a href="mailto:gagup@amazon.com" id="OWAb1339f2d-54f7-5415-5d6b-40ff60eceacb" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">gagup@amazon.com</a>).
My team is trying to enable JFR on production systems for studying any issues using custom events in JMC. Also we plan to study the impact of code changes in our application on system performance by studying JFR dumps using JMC and Flamescope (sub-second profiling).</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">We tried enabling JFR in our prod system by adding following JVM args in
our application startup (we have not yet added any custom event in our code:</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Consolas; font-size: 9pt; color: rgb(224, 30, 90);">-XX:+FlightRecorder -XX:StartFlightRecording=name=SomeServiceJFR,disk=false,path-to-gc-roots=false -XX:FlightRecorderOptions=stackdepth=256,memorysize=60M,numglobalbuffers=2,globalbuffersize=30M,old-object-queue-size=64</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">(The reason we turned off the disk parameter is to avoid disk space issues
during spiky traffic. We plan to take JFR dump on demand basis by running JFR.dump command line option to study application behavior and keep JFR recording on all the time).</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-top: 0px; margin-bottom: 12pt;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">We saw the system performance metrics on HeapMemoryAfterGC rising from
5% to 30% (on our test fleet) after starting our application with above JVM args (i.e. with JFR enabled). As per our reading about JFR, it is claimed to be safe in prod systems with continuous JFR profiling. But the rise of the HeapMemory use raised concern.</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">I seek your advice in this regard, if we are missing anything (wrt parameter
configuration above) or are there other options to try without affecting the prod system.</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">Also, is there a slack channel that I join for live discussion in this
regard? How can I get added?</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;">PS: I won't be able to share the JFR dump file outside Amazon as it records
events and stack traces for our proprietary software. But I am happy to come to a meeting on slack or other means and discuss this. Slack email:
<a href="mailto:gagup@amazon.com" id="OWA9a230af4-a03e-3aee-5312-e5c3ac4259cb" class="OWAAutoLink" data-loopstyle="linkonly" style="margin-top: 0px; margin-bottom: 0px;">
gagup@amazon.com</a></span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;"><br>
--</span></p>
<p style="margin-top: 0px; margin-bottom: 0px;"><span style="font-family: Garamond, serif; font-size: 12pt; color: black;">Best regards,</span><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;"><br>
</span><span style="font-family: Garamond, serif; font-size: 10pt; color: rgb(0, 204, 204);"><b>Gaurav Gupta</b></span><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;"><br>
<br>
</span><span style="font-family: Garamond, serif; font-size: 12pt; color: rgb(51, 0, 153);">-------------------------------------------------------------------------------------------------------------------------------</span><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: black;"><br>
</span><span style="font-family: Garamond, serif; font-size: 12pt; color: rgb(51, 0, 153);"><i>"Perfection is achieved not when there is nothing more to add,but rather when there is nothing more to take away."</i></span></p>
</blockquote>
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
<br>
--<br>
</span>
<div style="direction: ltr;"><span style="font-family: garamond, serif; font-size: 12pt; color: rgb(0, 0, 0);">Best regards,</span><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
</span><span style="font-family: garamond, serif; font-size: 13px; color: rgb(0, 204, 204);"><b>Gaurav Gupta</b></span><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
<br>
</span><span style="font-family: garamond, serif; font-size: 12pt; color: rgb(51, 0, 153);">-------------------------------------------------------------------------------------------------------------------------------</span><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
</span><span style="font-family: garamond, serif; font-size: 12pt; color: rgb(51, 0, 153);"><i>"Perfection is achieved not when there is nothing more to add,but rather when there is nothing more to take away."</i></span></div>
</body>
</html>