Re: automatic creation of a chroot environment

Mario Marietto <[email protected]> Thu, 16 Jul 2026 17:27:02 +0200
Newsgroups gmane.os.freebsd.devel.hackers
Message-ID <CA+1FSigR4nsgwW0d+Dun6O7oPCbQLtTKubO8OmCbMzBcc=L-zw@mail.gmail.com>
--000000000000a4b23c0656bc142c
Content-Type: multipart/alternative; boundary="000000000000a4b23b0656bc142a"

--000000000000a4b23b0656bc142a
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

>It was covered already two times :]

yes,thanks. But I meant on your website,not on the FreeBSD forums.

>hope someone finds this useful.
>https://github.com/rozhuk-im/chroot_env

Hi all,

chroot_env (https://github.com/rozhuk-im/chroot_env) is a lightweight
tmpfs+chroot sandbox for FreeBSD - no jails, no ZFS, RO by default,
noexec/nosuid on anything writable. As the author notes, one thing it
doesn't touch is the network stack: chroot(2) gives a sandboxed process the
same network access as its user has on the host.

I've added an opt-in network ACL that closes this gap without pulling in
jails or VNET:

- CHROOT_APP_PF_RULES: pf.conf-syntax rules loaded into a per-app anchor
(pfctl -a chroot_env/${CHROOT_USER} -f -). The script appends a deny-all
scoped to CHROOT_USER after your rules, so anything not explicitly passed
is blocked. The only one-time setup is a single "anchor \"chroot_env/*\""
line in the host pf.conf.
- CHROOT_PF_ANCHOR: anchor name override, same auto-default pattern already
used for CHROOT_GROUP.

It hooks into chroot_init/chroot_deinit the same way devfs rules and nullfs
maps already do, not through CHROOT_INIT_HOOK (which already owns the
default RO remount). setfib-based routing restriction and real VNET-style
isolation are out of scope by design - the script never executes the target
app, so those belong at the invocation site, not inside chroot_env.sh.
Documented, not automated.

Patch and a worked example attached (sandboxing a browser: port + PF rules
+ RW-mapped profile dir only, everything else RO/ephemeral). Syntax-checked
so far, not yet exercised against a live pf(4)/mount_nullfs/devfs setup -
testing and feedback welcome before calling it done.

Thanks,

On Thu, Jul 16, 2026 at 5:19=E2=80=AFPM vermaden <[email protected]> wrot=
e:

>
> > // Rozhuk Ivan
> > https://github.com/mpv-player/mpv/pull/18221
> > Hope it will be merged sometimes :)
>
> Nice addition, I hope so, gonna add it to VN too :)
>
>
>
> > // Mario Marietto
> > > .. and I believe this is what You are looking for:
> > > - https://forums.freebsd.org/threads/bhyve-qemu-vmm.102735/
> >
> > yes, but this wasn't included between the VN?
> > I thought that that project was enough valuable
> > / trying to understand the criteria that makes a project valuable for
> you /
>
> It was covered already two times :]
>
> | % vernews 102735
> |
> | Qemu Accelerated with <tt>bhyve_vmm</tt> for First Time on FreeBSD.
> | https://forums.freebsd.org/threads/qemu-bhyve-vmm.102735/
> |
> | QEMU Bhyve Enabled Performance Comparison.
> | https://forums.freebsd.org/threads/qemu-bhyve.102735/page-2#post-763082
> |
> | % which vernews
> | vernews: aliased to find ~/misc/verblog/NEWS -name post.txt -print0 |
> xargs -0 -n1 grep -i -B 2 -A 1
>
> ... and this QEMU/Bhyve/VMM project is VERY valuable for me because of
> these reasons:
> -
> https://forums.freebsd.org/threads/qemu-bhyve-vmm.102735/page-2#post-7614=
21
> -
> https://forums.freebsd.org/threads/qemu-bhyve-vmm.102735/page-2#post-7614=
58
>
>
>
> Hope that helps.
>
> Regards,
> vermaden
>


--=20
Mario.

--000000000000a4b23b0656bc142a
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div><span class=3D"gmail-im">&gt;</span>It was covered al=
ready two times :]</div><div><br></div><div>yes,thanks. But I meant on your=
 website,not on the FreeBSD forums.</div><div><br></div><div>&gt;hope someo=
ne finds this useful.<br>&gt;<a href=3D"https://github.com/rozhuk-im/chroot=
_env" rel=3D"noreferrer" target=3D"_blank">https://github.com/rozhuk-im/chr=
oot_env</a></div><div><br></div><div>Hi all,</div><br>chroot_env (<a href=
=3D"https://github.com/rozhuk-im/chroot_env">https://github.com/rozhuk-im/c=
hroot_env</a>) is a lightweight tmpfs+chroot sandbox for FreeBSD - no jails=
, no ZFS, RO by default, noexec/nosuid on anything writable. As the author =
notes, one thing it doesn&#39;t touch is the network stack: chroot(2) gives=
 a sandboxed process the same network access as its user has on the host.<b=
r><br>I&#39;ve added an opt-in network ACL that closes this gap without pul=
ling in jails or VNET:<br><br>- CHROOT_APP_PF_RULES: pf.conf-syntax rules l=
oaded into a per-app anchor (pfctl -a chroot_env/${CHROOT_USER} -f -). The =
script appends a deny-all scoped to CHROOT_USER after your rules, so anythi=
ng not explicitly passed is blocked. The only one-time setup is a single &q=
uot;anchor \&quot;chroot_env/*\&quot;&quot; line in the host pf.conf.<br>- =
CHROOT_PF_ANCHOR: anchor name override, same auto-default pattern already u=
sed for CHROOT_GROUP.<br><br>It hooks into chroot_init/chroot_deinit the sa=
me way devfs rules and nullfs maps already do, not through CHROOT_INIT_HOOK=
 (which already owns the default RO remount). setfib-based routing restrict=
ion and real VNET-style isolation are out of scope by design - the script n=
ever executes the target app, so those belong at the invocation site, not i=
nside chroot_env.sh. Documented, not automated.<br><br>Patch and a worked e=
xample attached (sandboxing a browser: port + PF rules + RW-mapped profile =
dir only, everything else RO/ephemeral). Syntax-checked so far, not yet exe=
rcised against a live pf(4)/mount_nullfs/devfs setup - testing and feedback=
 welcome before calling it done.<br><br>Thanks,</div><br><div class=3D"gmai=
l_quote gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Thu=
, Jul 16, 2026 at 5:19=E2=80=AFPM vermaden &lt;<a href=3D"mailto:vermaden@i=
nteria.pl">[email protected]</a>&gt; wrote:<br></div><blockquote class=3D=
"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2=
04,204,204);padding-left:1ex"><br>
&gt; // Rozhuk Ivan<br>
&gt; <a href=3D"https://github.com/mpv-player/mpv/pull/18221" rel=3D"norefe=
rrer" target=3D"_blank">https://github.com/mpv-player/mpv/pull/18221</a><br=
>
&gt; Hope it will be merged sometimes :)<br>
<br>
Nice addition, I hope so, gonna add it to VN too :)<br>
<br>
<br>
<br>
&gt; // Mario Marietto<br>
&gt; &gt; .. and I believe this is what You are looking for:<br>
&gt; &gt; - <a href=3D"https://forums.freebsd.org/threads/bhyve-qemu-vmm.10=
2735/" rel=3D"noreferrer" target=3D"_blank">https://forums.freebsd.org/thre=
ads/bhyve-qemu-vmm.102735/</a><br>
&gt; <br>
&gt; yes, but this wasn&#39;t included between the VN?<br>
&gt; I thought that that project was enough valuable<br>
&gt; / trying to understand the criteria that makes a project valuable for =
you /<br>
<br>
It was covered already two times :]<br>
<br>
| % vernews 102735=C2=A0 =C2=A0<br>
| <br>
| Qemu Accelerated with &lt;tt&gt;bhyve_vmm&lt;/tt&gt; for First Time on Fr=
eeBSD.<br>
| <a href=3D"https://forums.freebsd.org/threads/qemu-bhyve-vmm.102735/" rel=
=3D"noreferrer" target=3D"_blank">https://forums.freebsd.org/threads/qemu-b=
hyve-vmm.102735/</a><br>
| <br>
| QEMU Bhyve Enabled Performance Comparison.<br>
| <a href=3D"https://forums.freebsd.org/threads/qemu-bhyve.102735/page-2#po=
st-763082" rel=3D"noreferrer" target=3D"_blank">https://forums.freebsd.org/=
threads/qemu-bhyve.102735/page-2#post-763082</a><br>
| <br>
| % which vernews<br>
| vernews: aliased to find ~/misc/verblog/NEWS -name post.txt -print0 | xar=
gs -0 -n1 grep -i -B 2 -A 1<br>
<br>
... and this QEMU/Bhyve/VMM project is VERY valuable for me because of thes=
e reasons:<br>
- <a href=3D"https://forums.freebsd.org/threads/qemu-bhyve-vmm.102735/page-=
2#post-761421" rel=3D"noreferrer" target=3D"_blank">https://forums.freebsd.=
org/threads/qemu-bhyve-vmm.102735/page-2#post-761421</a><br>
- <a href=3D"https://forums.freebsd.org/threads/qemu-bhyve-vmm.102735/page-=
2#post-761458" rel=3D"noreferrer" target=3D"_blank">https://forums.freebsd.=
org/threads/qemu-bhyve-vmm.102735/page-2#post-761458</a><br>
<br>
<br>
<br>
Hope that helps.<br>
<br>
Regards,<br>
vermaden<br>
</blockquote></div><div><br clear=3D"all"></div><br><span class=3D"gmail_si=
gnature_prefix">-- </span><br><div dir=3D"ltr" class=3D"gmail_signature">Ma=
rio.<br></div>

--000000000000a4b23b0656bc142a--
--000000000000a4b23c0656bc142c
Content-Type: application/x-shellscript; name="chroot_env.sh"
Content-Disposition: attachment; filename="chroot_env.sh"
Content-Transfer-Encoding: base64
Content-ID: <f_mrnnqgri1>
X-Attachment-Id: f_mrnnqgri1

IyEvYmluL3NoCiMjIyBSb3podWsgSXZhbiAyMDA5LjA1LTIwMjYKIyMjIE1ha2UgY2hyb290IGVu
diBzY3JpcHQuCiMjIwoKCiMgRXhpdCBvbiBlcnJvci4Kc2V0IC1lCgojIEluaXQgY29uc3RhbnRz
LgojIFRvIGF2b2lkIGhhdmluZyBlYWNoIHdvcmQgb2YgdGhlIHJlYXNvbiB0cmVhdGVkIHNlcGFy
YXRlbHkuCklGUz0kJ1xuJwoKQ0hST09UX0RFVkZTX1JVTEVTPSIKaGlkZQpwYXRoIGZkIHVuaGlk
ZQpwYXRoIGZkLyogdW5oaWRlCnBhdGggbG9nIHVuaGlkZQpwYXRoIG51bGwgdW5oaWRlCnBhdGgg
cmFuZG9tIHVuaGlkZQpwYXRoIHN0ZGVyciB1bmhpZGUKcGF0aCBzdGRpbiB1bmhpZGUKcGF0aCBz
dGRvdXQgdW5oaWRlCnBhdGggdXJhbmRvbSB1bmhpZGUKcGF0aCB6ZXJvIHVuaGlkZQoiCgpDSFJP
T1RfQkFTRV9ESVJTX0xJU1Q9IgovYmluCi9kZXYKL2V0YwovbGliCi9saWJleGVjCi9wcm9jCi9z
YmluCi91c3IvYmluCi91c3IvbGliCi91c3IvbGliZXhlYwovdXNyL2xvY2FsL2JpbgovdXNyL2xv
Y2FsL2V0YwovdXNyL2xvY2FsL2xpYgovdXNyL3NiaW4KL3RtcAovdmFyL2RiX2Nocm9vdC9wb3J0
cwovdmFyL3J1bgoiCgpDSFJPT1RfQkFTRV9DUF9MSVNUPSIKL2V0Yy9ob3N0LmNvbmYKL2V0Yy9s
aWJtYXAuY29uZgovZXRjL2xpYm1hcDMyLmNvbmYKL2V0Yy9sb2NhbHRpbWUKL2V0Yy9sb2dpbi5j
b25mCi9ldGMvbmV0d29ya3MKL2V0Yy9uc3N3aXRjaC5jb25mCi9ldGMvcHJvdG9jb2xzCi9ldGMv
cmVzb2x2LmNvbmYKL2V0Yy9zZXJ2aWNlcwovZXRjL3NzbAovZXRjL3dhbGxfY21vc19jbG9jawov
bGliZXhlYy9sZC1lbGYuc28uKgovbGliZXhlYy9sZC1lbGYzMi5zby4qCi91c3IvbGliZXhlYy9s
ZC1lbGYuc28uKgovdXNyL2xvY2FsL2V0Yy9saWJtYXAuZAovdXNyL3NoYXJlL25scwovdXNyL3No
YXJlL3pvbmVpbmZvCi92YXIvcnVuL2xkLWVsZi5zby5oaW50cwoiCgpDSFJPT1RfQkFTRV9FWEVD
X0xJU1Q9IgovdXNyL2Jpbi9lbnYKIgoKQ0hST09UX0JBU0VfUE9SVFNfRklMRVNfRVhDTFVERV9M
SVNUPSIKL3Vzci9sb2NhbC9ldGMvYmFzaF9jb21wbGV0aW9uLmQvCi91c3IvbG9jYWwvZXRjL2Ri
dXMtMS8KL3Vzci9sb2NhbC9ldGMvZGV2ZC8KL3Vzci9sb2NhbC9ldGMvcmMuZC8KL3Vzci9sb2Nh
bC9pbmNsdWRlLwovdXNyL2xvY2FsL2xpYi9jbWFrZS8KL3Vzci9sb2NhbC9saWIvcHl0aG9uKi90
ZXN0LwovdXNyL2xvY2FsL3NoYXJlL2FjbG9jYWwvCi91c3IvbG9jYWwvc2hhcmUvYmFzaC1jb21w
bGV0aW9uLwovdXNyL2xvY2FsL3NoYXJlL2NvbW1vbi1saXNwLwovdXNyL2xvY2FsL3NoYXJlL2Rv
Yy8KL3Vzci9sb2NhbC9zaGFyZS9lbWFjcy8KL3Vzci9sb2NhbC9zaGFyZS9leGFtcGxlcy8KL3Vz
ci9sb2NhbC9zaGFyZS9nZGIvCi91c3IvbG9jYWwvc2hhcmUvZ2xpYi0yLjAvCi91c3IvbG9jYWwv
c2hhcmUvaW5mby8KL3Vzci9sb2NhbC9zaGFyZS9saWNlbnNlcy8KL3Vzci9sb2NhbC9zaGFyZS9t
YW4vCi91c3IvbG9jYWwvc2hhcmUvcGtnLwovdXNyL2xvY2FsL3NoYXJlL3JlYWRsaW5lLwovdXNy
L2xvY2FsL2xpYmRhdGEvcGtnY29uZmlnLwoiCgoKIyBEZWZhdWx0cy4KQ0hST09UX0NGR19ESVI9
Jy91c3IvbG9jYWwvZXRjL2Nocm9vdCcKQ0hST09UX01OVF9ST09UX0FSR1M9Jy1vIG5vc3VpZCcK
Q0hST09UX01OVF9UTVBfU0laRT0nMW0nCkNIUk9PVF9NTlRfVE1QX0FSR1M9Jy1vIG5vZXhlYyAt
byBub3N1aWQgLW8gaW5vZGVzPTFrJwpDSFJPT1RfSU5JVF9IT09LPSdjaHJvb3RfaW5pdF9ob29r
X2RlZmF1bHQnCkNIUk9PVF9ERUlOSVRfSE9PSz0nJwoKCmNocm9vdF9jcCgpIHsgIyBmaWxlbmFt
ZS9kaXIKCWxvY2FsIF9fRk4KCglmb3IgX19GTiBpbiAiJHtAfSI7IGRvCgkJWyAhIC1yICIke19f
Rk59IiBdICYmIGNvbnRpbnVlCgkJWyAtciAiJHtDSFJPT1RfRElSfS8ke19fRk59IiBdICYmIGNv
bnRpbnVlCgoJCW1rZGlyIC1wIC1tIDA1NTUgJHtDSFJPT1RfRElSfS9gZGlybmFtZSAiJHtfX0ZO
fSJgCgkJY3AgLWFSTCAiJHtfX0ZOfSIgIiR7Q0hST09UX0RJUn0vJHtfX0ZOfSIKCWRvbmUKCgly
ZXR1cm4gMAp9CgpjaHJvb3RfY3BfYmluX3dpdGhkZXAoKSB7ICMgZmlsZW5hbWUKCWxvY2FsIF9f
Rk4KCWxvY2FsIF9fREVQUwoKCWZvciBfX0ZOIGluICIke0B9IjsgZG8KCQlbICEgLXIgIiR7X19G
Tn0iIF0gJiYgY29udGludWUKCgkJX19ERVBTPWBsZGQgLWEgIiR7X19GTn0iIDI+L2Rldi9udWxs
IHwgZ3JlcCAnPT4nIHwgc2VkICdzfC4qPT4gfHxnJyB8IHNlZCAnc3wgKC4qKXx8ZycgfCBzb3J0
IC11YAoJCSMgRmFsbGJhY2ssIG1vc3RseSBmb3IgR08gYXBwcy4KCQlpZiBbIC16ICIke19fREVQ
U30iIF07IHRoZW4KCQkJX19ERVBTPWByZWFkZWxmIC0tZWxmLW91dHB1dC1zdHlsZT1HTlUgLS1u
ZWVkZWQtbGlicyAiJHtfX0ZOfSIgMj4vZGV2L251bGwgfCBncmVwICcgICcgfCBzZWQgLWUgJ3N8
ICB8fGcnIHwgeGFyZ3MgLUwgMSAtSiAlIGxvY2F0ZSAlIDI+L2Rldi9udWxsIHwgZ3JlcCAtdiAn
L21udC8nIHwgZ3JlcCAtdiAnL3RtcC8nIHwgZ3JlcCAtdiAnL3Vzci9vYmovJyB8IGdyZXAgLXYg
Jy91c3Ivc3JjLycgfCBncmVwIC12ICcvdmFyLycgfCBzb3J0IC11YAoJCWZpCgkJZm9yIF9fREVQ
IGluICR7X19ERVBTfTsgZG8KCQkJWyAtciAiJHtDSFJPT1RfRElSfS8ke19fREVQfSIgXSAmJiBj
b250aW51ZQoJCQljaHJvb3RfY3BfYmluX3dpdGhkZXAgIiR7X19ERVB9IgoJCWRvbmUKCgkJWyAt
ciAiJHtDSFJPT1RfRElSfS8ke19fRk59IiBdICYmIGNvbnRpbnVlCgkJY2hyb290X2NwICIke19f
Rk59IgoJZG9uZQoKCXJldHVybiAwCn0KCmNocm9vdF9tb3VudF9zaW5nbGUoKSB7ICMgcm8vcncs
IGZpbGVuYW1lL2RpcgoJbG9jYWwgX19ESVIKCglpZiBbIC1kICIkezJ9IiBdOyB0aGVuCgkJbWtk
aXIgLXAgLW0gMDU1NSAiJHtDSFJPT1RfRElSfS8kezJ9IgoJCWNob3duIHJvb3Q6d2hlZWwgIiR7
Q0hST09UX0RJUn0vJHsyfSIKCQltb3VudF9udWxsZnMgLW8gIiR7MX0iIC1vIG5vY2FjaGUgLW8g
bm9hdGltZSAtbyBub2V4ZWMgLW8gbm9zdWlkICIkezJ9IiAiJHtDSFJPT1RfRElSfS8kezJ9IgoJ
CXJldHVybiAwCglmaQoKCWlmIFsgLWYgIiR7Mn0iIF07IHRoZW4KCQlfX0RJUj1gZGlybmFtZSAk
ezJ9YAoJCW1rZGlyIC1wIC1tIDA1NTUgIiR7Q0hST09UX0RJUn0vJHtfX0RJUn0iCgkJY2hvd24g
cm9vdDp3aGVlbCAiJHtDSFJPT1RfRElSfS8ke19fRElSfSIKCQl0b3VjaCAiJHsyfSIgIiR7Q0hS
T09UX0RJUn0vJHsyfSIKCQljaG93biAiJHtDSFJPT1RfVVNFUn06JHtDSFJPT1RfR1JPVVB9IiAi
JHtDSFJPT1RfRElSfS8kezJ9IgoJCW1vdW50X251bGxmcyAtbyAiJHsxfSIgLW8gbm9jYWNoZSAt
byBub2F0aW1lIC1vIG5vZXhlYyAtbyBub3N1aWQgIiR7Mn0iICIke0NIUk9PVF9ESVJ9LyR7Mn0i
CgkJcmV0dXJuIDAKCWZpCgoJZWNobyAiQ2FuIG5vdCBtb3VudCAtIG5vdCBmaWxlIG9yIGRpcjog
JHsyfSIKCXJldHVybiAxCn0KCmNocm9vdF9wZl9sb2FkKCkgeyAjIG9wdC1pbiB2aWEgQ0hST09U
X0FQUF9QRl9SVUxFUwoJWyAteiAiJHtDSFJPT1RfQVBQX1BGX1JVTEVTfSIgXSAmJiByZXR1cm4g
MAoKCSMgQXBwIHJ1bGVzIGZpcnN0LCB0aGV5IG5lZWQgInF1aWNrIiB0byB3aW4gb3ZlciB0aGUg
ZGVueS1hbGwgYmVsb3cuCglwcmludGYgJyVzXG4nICR7Q0hST09UX0FQUF9QRl9SVUxFU30gImJs
b2NrIHJldHVybiBvdXQgcXVpY2sgdXNlciAke0NIUk9PVF9VU0VSfSIgImJsb2NrIGluIHF1aWNr
IHVzZXIgJHtDSFJPT1RfVVNFUn0iIHwgcGZjdGwgLWEgIiR7Q0hST09UX1BGX0FOQ0hPUn0iIC1m
IC0KCglyZXR1cm4gMAp9CgpjaHJvb3RfcGZfdW5sb2FkKCkgewoJWyAteiAiJHtDSFJPT1RfQVBQ
X1BGX1JVTEVTfSIgXSAmJiByZXR1cm4gMAoKCXBmY3RsIC1hICIke0NIUk9PVF9QRl9BTkNIT1J9
IiAtRiBhbGwgMj4vZGV2L251bGwgfCB0cnVlCgoJcmV0dXJuIDAKfQoKY2hyb290X3BvcnRfbWFy
a19hc19kb25lKCkgeyAjIHBvcnRzIG5hbWVzCglsb2NhbCBfX1BPUlRfTkFNRQoJbG9jYWwgX19Q
S0dfSU5GT19SQVcKCWxvY2FsIF9fUEtHX05BTUUKCWxvY2FsIF9fUEtHX1ZFUgoJbG9jYWwgX19Q
S0dfTkFNRV9WRVIKCglmb3IgX19QT1JUX05BTUUgaW4gIiR7QH0iOyBkbwoJCSMgTWFrZSBzdXJl
IHRoYXQgcG9ydCBuYW1lIGlzIGluIHByb3BlciBmb3JtYXQuCgkJX19QS0dfSU5GT19SQVc9YHBr
ZyBpbmZvIC0tZnVsbCAtLXF1aWV0ICIke19fUE9SVF9OQU1FfSJgCgkJX19QS0dfTkFNRT1gZWNo
byAiJHtfX1BLR19JTkZPX1JBV30iIHwgZ3JlcCAnTmFtZSAgICAgICAgICAgOiAnIHwgc2VkIC1l
ICdzfE5hbWUgICAgICAgICAgIDogfHxnJyB8IHRyIC1kICdcbidgCgkJX19QS0dfVkVSPWBlY2hv
ICIke19fUEtHX0lORk9fUkFXfSIgfCBncmVwICdWZXJzaW9uICAgICAgICA6ICcgfCBzZWQgLWUg
J3N8VmVyc2lvbiAgICAgICAgOiB8fGcnIHwgdHIgLWQgJ1xuJ2AKCQlfX1BLR19OQU1FX1ZFUj0i
JHtfX1BLR19OQU1FfS0ke19fUEtHX1ZFUn0iCgkJdG91Y2ggIiR7Q0hST09UX0RJUn0vdmFyL2Ri
X2Nocm9vdC9wb3J0cy8ke19fUEtHX05BTUVfVkVSfSIKCQl0b3VjaCAiJHtDSFJPT1RfRElSfS92
YXIvZGJfY2hyb290L3BvcnRzLyR7X19QS0dfTkFNRV9WRVJ9LmRlcHMiCglkb25lCgoJcmV0dXJu
IDAKfQoKY2hyb290X3BvcnRfY2xvbmUoKSB7ICMgcG9ydHMgbmFtZXMKCWxvY2FsIF9fUE9SVF9O
QU1FCglsb2NhbCBfX1BLR19JTkZPX1JBVwoJbG9jYWwgX19QS0dfTkFNRQoJbG9jYWwgX19QS0df
VkVSCglsb2NhbCBfX1BLR19OQU1FX1ZFUgoJbG9jYWwgX19ESVIKCWxvY2FsIF9fVEFSX0VYQ0xV
REUKCglmb3IgX19ESVIgaW4gJHtDSFJPT1RfQkFTRV9QT1JUU19GSUxFU19FWENMVURFX0xJU1R9
ICR7Q0hST09UX0FQUF9DUF9MSVNUfSAke0NIUk9PVF9QT1JUU19GSUxFU19FWENMVURFX0xJU1R9
OyBkbwoJCV9fVEFSX0VYQ0xVREU9IiR7X19UQVJfRVhDTFVERX0gLS1leGNsdWRlICR7X19ESVJ9
IgoJZG9uZQoKCWxvY2FsIElGUz0nICcKCWZvciBfX1BPUlRfTkFNRSBpbiAiJHtAfSI7IGRvCgkJ
IyBNYWtlIHN1cmUgdGhhdCBwb3J0IG5hbWUgaXMgaW4gcHJvcGVyIGZvcm1hdC4KCQlfX1BLR19J
TkZPX1JBVz1gcGtnIGluZm8gLS1mdWxsIC0tcXVpZXQgIiR7X19QT1JUX05BTUV9ImAKCQlfX1BL
R19OQU1FPWBlY2hvICIke19fUEtHX0lORk9fUkFXfSIgfCBncmVwICdOYW1lICAgICAgICAgICA6
ICcgfCBzZWQgLWUgJ3N8TmFtZSAgICAgICAgICAgOiB8fGcnIHwgdHIgLWQgJ1xuJ2AKCQlfX1BL
R19WRVI9YGVjaG8gIiR7X19QS0dfSU5GT19SQVd9IiB8IGdyZXAgJ1ZlcnNpb24gICAgICAgIDog
JyB8IHNlZCAtZSAnc3xWZXJzaW9uICAgICAgICA6IHx8ZycgfCB0ciAtZCAnXG4nYAoJCV9fUEtH
X05BTUVfVkVSPSIke19fUEtHX05BTUV9LSR7X19QS0dfVkVSfSIKCQkjIElzIHBvcnQgYWxyZWFk
eSBjbG9uZWQ/CgkJWyAtZiAiJHtDSFJPT1RfRElSfS92YXIvZGJfY2hyb290L3BvcnRzLyR7X19Q
S0dfTkFNRV9WRVJ9IiBdICYmIGNvbnRpbnVlCgkJdG91Y2ggIiR7Q0hST09UX0RJUn0vdmFyL2Ri
X2Nocm9vdC9wb3J0cy8ke19fUEtHX05BTUVfVkVSfSIKCQkjIFNsb3dlciB0aGFuIGNwIGluIHNv
bWUgY2FzZXMsIGJ1dCBoYW5kbGUgaGFyZGxpa3MgYW5kIGRpcnMuCgkJIyBVc2UgLS1rZWVwLW9s
ZC1maWxlcyAtLW1vZGlmaWNhdGlvbi10aW1lIC4uLiAyPi9kZXYvbnVsbCB8IHRydWUKCQkjIHRv
IHNpbGVjZSBhbmQgc3VwcmVzcyBlcnJvcnMgdGhhdCBtYXkgaGFwcGVuIHdoaWxlIGV4dHJhY3QK
CQkjIGZpbGVzIHRvIFJPIG1vdW50IHBvbnRzLgoJCSMgLS1za2lwLW9sZC1maWxlcyBtYXkgZml4
IHRoaXMgYnV0IGl0IGRvZXMgbm90IGV4aXN0IGluIGJzZHRhci4KCQlwa2cgaW5mbyAtLWxpc3Qt
ZmlsZXMgLS1xdWlldCAiJHtfX1BPUlRfTkFNRX0iIHwgdGFyIC0tY3JlYXRlIC0tZGlyZWN0b3J5
ICcvdG1wLycgLS1ub3JlY3Vyc2UgJHtfX1RBUl9FWENMVURFfSAtLWZpbGVzLWZyb20gLSAtLWZp
bGUgLSAyPi9kZXYvbnVsbCB8IHRhciAtLWV4dHJhY3QgLS1maWxlIC0gLS1rZWVwLW9sZC1maWxl
cyAtLW1vZGlmaWNhdGlvbi10aW1lIC0tZGlyZWN0b3J5ICIke0NIUk9PVF9ESVJ9LyIgMj4vZGV2
L251bGwgfCB0cnVlCglkb25lCgoJcmV0dXJuIDAKfQoKIyBEb2VzIG5vdCBjbG9uZSBwb3J0LCBv
bmx5IGl0cyBkZXBzLgpjaHJvb3RfcG9ydF9kZXBzX2Nsb25lKCkgeyAjIHBvcnRzIG5hbWVzCgls
b2NhbCBfX1BPUlRfTkFNRQoJbG9jYWwgX19QS0dfTkFNRV9WRVIKCglmb3IgX19QT1JUX05BTUUg
aW4gIiR7QH0iOyBkbwoJCWZvciBfX1BLR19OQU1FX1ZFUiBpbiBgcGtnIGluZm8gLS1kZXBlbmRl
bmNpZXMgLS1xdWlldCAiJHtfX1BPUlRfTkFNRX0iIHwgZ3JlcCAtdiAnCSdgOyBkbwoJCQkjIElz
IHBvcnQgYWxyZWFkeSBjbG9uZWQ/CgkJCVsgLWYgIiR7Q0hST09UX0RJUn0vdmFyL2RiX2Nocm9v
dC9wb3J0cy8ke19fUEtHX05BTUVfVkVSfS5kZXBzIiBdICYmIGNvbnRpbnVlCgkJCXRvdWNoICIk
e0NIUk9PVF9ESVJ9L3Zhci9kYl9jaHJvb3QvcG9ydHMvJHtfX1BLR19OQU1FX1ZFUn0uZGVwcyIK
CQkJY2hyb290X3BvcnRfY2xvbmUgIiR7X19QS0dfTkFNRV9WRVJ9IgoJCQljaHJvb3RfcG9ydF9k
ZXBzX2Nsb25lICIke19fUEtHX05BTUVfVkVSfSIKCQlkb25lCglkb25lCgoJcmV0dXJuIDAKfQoK
Y2hyb290X2RlcHNfZml4dXAoKSB7CgkjIEJpbnMuCgljaHJvb3RfY3BfYmluX3dpdGhkZXAgYGZp
bmQgIiR7Q0hST09UX0RJUn0vIiAtdHlwZSBmIC1leGVjdXRhYmxlIHwgc29ydCAtdSB8IHNlZCAi
c3wke0NIUk9PVF9ESVJ9fHxnImAJCgkjIExpYnMuCgljaHJvb3RfY3BfYmluX3dpdGhkZXAgYGZp
bmQgIiR7Q0hST09UX0RJUn0vIiAtdHlwZSBmIC1uYW1lICcqLnNvKicgfCBzb3J0IC11IHwgc2Vk
ICJzfCR7Q0hST09UX0RJUn18fGciYAp9CgpjaHJvb3RfaW5pdCgpIHsKCWxvY2FsIF9fRElSCgls
b2NhbCBfX1JVTEUKCglpZiBbIC1kICIke0NIUk9PVF9ESVJ9IiBdOyB0aGVuCgkJZWNobyAiRGly
IGFscmVhZHkgZXhpc3QgJHtDSFJPT1RfRElSfSEiCgkJZXhpdCAwCglmaQoKCSMgQ3JlYXRlIGNo
cm9vdCBkaXIuCglta2RpciAtcCAtbSAwNTU1ICIke0NIUk9PVF9ESVJ9IgoJZWNobyAtbyBydyAt
byBub210aW1lIC1vIHNpemU9IiR7Q0hST09UX01OVF9ST09UX1NJWkV9IiAke0NIUk9PVF9NTlRf
Uk9PVF9BUkdTfSAtdCB0bXBmcyB0bXBmcyAiJHtDSFJPT1RfRElSfSIgfCB4YXJncyBtb3VudAoJ
IyBJbml0IC90bXAsIC92YXIvdG1wLgoJbWtkaXIgLXAgLW0gMDc3NyAiJHtDSFJPT1RfRElSfS90
bXAiICIke0NIUk9PVF9ESVJ9L3ZhciIKCWVjaG8gLW8gcncgLW8gbm9tdGltZSAtbyBwZ3JlYWQg
LW8gc2l6ZT0iJHtDSFJPT1RfTU5UX1RNUF9TSVpFfSIgLW8gbW9kZT0wNzc3ICR7Q0hST09UX01O
VF9UTVBfQVJHU30gLXQgdG1wZnMgdG1wZnMgIiR7Q0hST09UX0RJUn0vdG1wIiB8IHhhcmdzIG1v
dW50CgljaG1vZCAxNzc3ICIke0NIUk9PVF9ESVJ9L3RtcCIKCWxuIC1zZiAnL3RtcCcgIiR7Q0hS
T09UX0RJUn0vdmFyL3RtcCIKCSMgQ3JlYXRlIGRpcnMuCglmb3IgX19ESVIgaW4gJHtDSFJPT1Rf
QkFTRV9ESVJTX0xJU1R9OyBkbwoJCW1rZGlyIC1wIC1tIDA1NTUgIiR7Q0hST09UX0RJUn0vJHtf
X0RJUn0iCglkb25lCgljaG93biAtUiByb290OndoZWVsICIke0NIUk9PVF9ESVJ9IgoKCSMgQ29w
eSBmaWxlcyBhbmQgZGlycy4KCWNocm9vdF9jcCAke0NIUk9PVF9CQVNFX0NQX0xJU1R9CgoJIyBD
b3B5IGJpbnMgYW5kIGl0cyBkZXBzLgoJY2hyb290X2NwX2Jpbl93aXRoZGVwICR7Q0hST09UX0JB
U0VfRVhFQ19MSVNUfQoKCgkjIGV0YyBpbml0LgoJIyBtYWxsb2MuY29uZiBpcyBhIHN5bWxpbmss
IG9wdGlvbmFsLgoJY3AgLWEgJy9ldGMvbWFsbG9jLmNvbmYnICIke0NIUk9PVF9ESVJ9L2V0Yy8i
IHwgdHJ1ZQoJIyAvZXRjL2hvc3RzCgllY2hvICc6OjEgbG9jYWxob3N0JyA+CQkiJHtDSFJPT1Rf
RElSfS9ldGMvaG9zdHMiCgllY2hvICcxMjcuMC4wLjEgbG9jYWxob3N0JyA+PgkiJHtDSFJPT1Rf
RElSfS9ldGMvaG9zdHMiCgkjIFBhc3N3b3Jkcy4KCWdyZXAgIl4ke0NIUk9PVF9VU0VSfSIgJy9l
dGMvbWFzdGVyLnBhc3N3ZCcgPiAiJHtDSFJPT1RfRElSfS9ldGMvbWFzdGVyLnBhc3N3ZCIKCWdy
ZXAgIl4ke0NIUk9PVF9VU0VSfSIgJy9ldGMvcGFzc3dkJyA+ICIke0NIUk9PVF9ESVJ9L2V0Yy9w
YXNzd2QiCglncmVwICJeJHtDSFJPT1RfR1JPVVB9IiAnL2V0Yy9ncm91cCcgPiAiJHtDSFJPT1Rf
RElSfS9ldGMvZ3JvdXAiCgljYXBfbWtkYiAtZiAiJHtDSFJPT1RfRElSfS9ldGMvbG9naW4uY29u
ZiIgIiR7Q0hST09UX0RJUn0vZXRjL2xvZ2luLmNvbmYiCglwd2RfbWtkYiAtZCAiJHtDSFJPT1Rf
RElSfS9ldGMiICIke0NIUk9PVF9ESVJ9L2V0Yy9tYXN0ZXIucGFzc3dkIgoKCgkjIEluaXQgZGV2
ZnMuCgltb3VudCAtdCBkZXZmcyBkZXZmcyAiJHtDSFJPT1RfRElSfS9kZXYiCgkjIEFwcGx5IHJ1
bGVzLgoJZm9yIF9fUlVMRSBpbiAke0NIUk9PVF9ERVZGU19SVUxFU30gJHtDSFJPT1RfQVBQX0RF
VkZTX1JVTEVTfTsgZG8KCQllY2hvICIke19fUlVMRX0iIHwgeGFyZ3MgZGV2ZnMgLW0gIiR7Q0hS
T09UX0RJUn0vZGV2IiBydWxlIGFwcGx5Cglkb25lCgoJIyBNb3VudCBSTyBmaWxlcy9kaXJzLgoJ
Zm9yIF9fRElSIGluICR7Q0hST09UX01OVF9NQVBfUk99OyBkbwoJCWNocm9vdF9tb3VudF9zaW5n
bGUgJ3JvJyAiJHtfX0RJUn0iCglkb25lCgkjIE1vdW50IFJXIGZpbGVzL2RpcnMuCglmb3IgX19E
SVIgaW4gJHtDSFJPT1RfTU5UX01BUF9SV307IGRvCgkJY2hyb290X21vdW50X3NpbmdsZSAncncn
ICIke19fRElSfSIKCWRvbmUKCgkjIEFwcCBzcGVjaWZpYy4KCWNocm9vdF9jcCAke0NIUk9PVF9B
UFBfQ1BfTElTVH0KCWNocm9vdF9jcF9iaW5fd2l0aGRlcCAke0NIUk9PVF9BUFBfRVhFQ19MSVNU
fQoKCSMgUG9ydHMuCgljaHJvb3RfcG9ydF9jbG9uZSAke0NIUk9PVF9QT1JUU19OQU1FU30KCgkj
IFBvcnRzIGRlcHMuCgljaHJvb3RfcG9ydF9kZXBzX2Nsb25lICR7Q0hST09UX1BPUlRTX0RFUFNf
TkFNRVN9CgoJIyBQb3J0cyB3aXRoIGRlcHMuCgljaHJvb3RfcG9ydF9tYXJrX2FzX2RvbmUgJHtD
SFJPT1RfUE9SVFNfU1RPUF9MSVNUfQoJY2hyb290X3BvcnRfY2xvbmUgJHtDSFJPT1RfUE9SVFNf
V0lUSF9ERVBTX05BTUVTfQoJY2hyb290X3BvcnRfZGVwc19jbG9uZSAke0NIUk9PVF9QT1JUU19X
SVRIX0RFUFNfTkFNRVN9CgoJIyBGaXh1cCBkZXBzCgljaHJvb3RfZGVwc19maXh1cAoKCSMgTmV0
d29yayBBQ0wsIG9wdGlvbmFsLgoJY2hyb290X3BmX2xvYWQKfQoKY2hyb290X2RlaW5pdCgpIHsK
CglpZiBbICEgLWQgIiR7Q0hST09UX0RJUn0iIF07IHRoZW4KCQlyZXR1cm4gMAoJZmkKCgljaHJv
b3RfcGZfdW5sb2FkCgoJbW91bnQgfCBncmVwICIgb24gJHtDSFJPT1RfRElSfS8iIHwgY3V0IC1k
ICcgJyAtZiAzLTI1NSB8IGN1dCAtZCAnKCcgLWYgMSB8IHNlZCAncy8uJC8vJyB8IHhhcmdzIHVt
b3VudCAtZgoJI2NoZmxhZ3MgLVIgbm9zY2hnICIke0NIUk9PVF9ESVJ9IgoJdW1vdW50IC1mICIk
e0NIUk9PVF9ESVJ9IgoJcm0gLXJmICIke0NIUk9PVF9ESVJ9Igp9CgpjaHJvb3RfaW5pdF9ob29r
X2RlZmF1bHQoKSB7CgkjIExvY2t1cCBjaGFuZ2VzLgoJbW91bnQgLXUgLW8gcm8gIiR7Q0hST09U
X0RJUn0iCn0KCmNocm9vdF9tYWluKCkgewoJIyBBdXRvIGRlZmF1bHRzLgoJaWYgWyAteiAiJHtD
SFJPT1RfR1JPVVB9IiBdOyB0aGVuCgkJQ0hST09UX0dST1VQPWAvdXNyL2Jpbi9pZCAtZ24gJHtD
SFJPT1RfVVNFUn1gCglmaQoJaWYgWyAteiAiJHtDSFJPT1RfUEZfQU5DSE9SfSIgXTsgdGhlbgoJ
CUNIUk9PVF9QRl9BTkNIT1I9ImNocm9vdF9lbnYvJHtDSFJPT1RfVVNFUn0iCglmaQoKCSMgSGFu
ZGxlIGNvbW1hbmQuCgljYXNlICR7MX0gaW4KCXN0YXJ0KQoJCSMgQmFzZSBjaHJvb3QgaW5pdC4K
CQljaHJvb3RfaW5pdAoJCSMgVXNlciBkZWZpbmVkIGNvZGUuCgkJaWYgWyAtbiAiJHtDSFJPT1Rf
SU5JVF9IT09LfSIgXTsgdGhlbgoJCQlldmFsICIke0NIUk9PVF9JTklUX0hPT0t9IgoJCWZpCgkJ
OzsKCXN0b3ApCgkJIyBVc2VyIGRlZmluZWQgY29kZS4KCQlpZiBbICEgLWQgIiR7Q0hST09UX0RJ
Un0iIF07IHRoZW4KCQkJZWNobyAiRGlyIGRvZXMgbm90IGV4aXN0ICR7Q0hST09UX0RJUn0hIgoJ
CQlyZXR1cm4gMAoJCWZpCgkJaWYgWyAtbiAiJHtDSFJPT1RfREVJTklUX0hPT0t9IiBdOyB0aGVu
CgkJCWV2YWwgIiR7Q0hST09UX0RFSU5JVF9IT09LfSIKCQlmaQoJCSMgQmFzZSBjaHJvb3QgZGVp
bml0LgoJCWNocm9vdF9kZWluaXQKCQk7OwoJcmVzdGFydCkKCQlpZiBbIC1kICIke0NIUk9PVF9E
SVJ9IiBdOyB0aGVuCgkJCWNocm9vdF9tYWluIHN0b3AKCQlmaQoJCWNocm9vdF9tYWluIHN0YXJ0
CgkJOzsKCSopCgkJZWNobyAnSW52YWxpZCBjb21tYW5kIScKCQlleGl0IDEKCQk7OwoJZXNhYwp9
CgoKaWYgWyAtZiAiJHsxfSIgXTsgdGhlbgouICIkezF9IgplbHNlCglpZiBbIC1mICIke0NIUk9P
VF9DRkdfRElSfS8kezF9IiBdOyB0aGVuCi4gIiR7Q0hST09UX0NGR19ESVJ9LyR7MX0iCgllbHNl
CgkJZWNobyAiQ2hyb290IGVudiBjb25maWcgXCckezF9XCcgbm90IGZvdW5kISIKCQlleGl0IDEK
CWZpCmZpCgpjaHJvb3RfbWFpbiAkezJ9CgoKZXhpdCAwCg==
--000000000000a4b23c0656bc142c
Content-Type: application/octet-stream; name=browser
Content-Disposition: attachment; filename=browser
Content-Transfer-Encoding: base64
Content-ID: <f_mrnnqgrc0>
X-Attachment-Id: f_mrnnqgrc0

IyEvYmluL3NoCiMjIyBDaHJvb3QgY29uZmlnIGZpbGUgZm9yIHd3dy9maXJlZm94IChzd2FwIGZv
ciBhbnkgb3RoZXIgYnJvd3NlciBwb3J0KQojIyMKIyMjIFByZXJlcXVpc2l0ZXMsIGJvdGggb25l
LXRpbWU6CiMjIyAgMSkgcHcgdXNlcmFkZCBicm93c2VyIC1jICJzYW5kYm94ZWQgYnJvd3NlciIg
LWQgL25vbmV4aXN0ZW50IC1zIC91c3Ivc2Jpbi9ub2xvZ2luCiMjIyAgMikgaW4gdGhlIGhvc3Qg
cGYuY29uZiwgc28gcGVyLWFwcCBhbmNob3JzIGJlbG93IGdldCBldmFsdWF0ZWQgYXQgYWxsOgoj
IyMgICAgICAgYW5jaG9yICJjaHJvb3RfZW52LyoiCiMjIwoKCkNIUk9PVF9ESVI9Jy92YXIvcnVu
L2Nocm9vdC1icm93c2VyJwpDSFJPT1RfVVNFUj0nYnJvd3NlcicKIyBGaXJlZm94ICsgZGVwcyBp
cyBsYXJnZTsgdGhpcyBpcyBhIHN0YXJ0aW5nIHBvaW50LCBzaXplIHVwIGFmdGVyIHRoZQojIGZp
cnN0ICJzdGFydCIgaWYgY2hyb290X2RlcHNfZml4dXAgcHVsbHMgaW4gbW9yZSB0aGFuIHRoaXMu
CkNIUk9PVF9NTlRfUk9PVF9TSVpFPSc3NjhtJwpDSFJPT1RfTU5UX1RNUF9TSVpFPSc2NG0nCkNI
Uk9PVF9NTlRfVE1QX0FSR1M9Jy1vIG5vZXhlYyAtbyBub3N1aWQgLW8gaW5vZGVzPTE2aycKIyBP
bmx5IHRoZSBwcm9maWxlIHBlcnNpc3RzIGFjcm9zcyByZXN0YXJ0czsgZXZlcnl0aGluZyBlbHNl
IGlzIHJlYnVpbHQKIyBmcm9tIHBvcnRzIGVhY2ggdGltZS4gS2VlcCB0aGlzIHRvIGp1c3QgdGhl
IHByb2ZpbGUgZGlyLCBub3QgdGhlIHdob2xlCiMgaW5zdGFsbCwgdG8ga2VlcCB0aGUgYmxhc3Qg
cmFkaXVzIHNtYWxsIC0gaXQncyBzdGlsbCBub2V4ZWMvbm9zdWlkLgpDSFJPT1RfTU5UX01BUF9S
Vz0iCi9ob21lL2Jyb3dzZXIvLm1vemlsbGEKL3Zhci9ydW4KIgpDSFJPT1RfUE9SVFNfV0lUSF9E
RVBTX05BTUVTPSIKd3d3L2ZpcmVmb3gKIgoKIyBETlMgcmVzb2x2ZXIgYW5kIFRMUyB0cnVzdCBz
dG9yZSBuZWVkIG5vdGhpbmcgZXh0cmEgaGVyZTogQ0hST09UX0JBU0VfQ1BfTElTVAojIGFscmVh
ZHkgY29waWVzIC9ldGMvcmVzb2x2LmNvbmYsIC9ldGMvbnNzd2l0Y2guY29uZiBhbmQgL2V0Yy9z
c2wgKHRoZSBDQQojIGJ1bmRsZSwgaWYgc2VjdXJpdHkvY2Ffcm9vdF9uc3MgaXMgaW5zdGFsbGVk
KSBpbnRvIGV2ZXJ5IGNocm9vdC4KIyBQb2ludCAvZXRjL3Jlc29sdi5jb25mIGF0IGEgbG9jYWwg
ZmlsdGVyaW5nIHJlc29sdmVyIChzZWUgdGhlICJ1bmJvdW5kIgojIGV4YW1wbGUpIGZvciBhIHNl
Y29uZCBsYXllciBvZiBjb250cm9sIGFsb25nc2lkZSB0aGUgcnVsZXMgYmVsb3cuCgojIE5ldHdv
cmsgQUNMOiBvbmx5IDgwLzQ0MyBvdXRib3VuZCBmb3IgQ0hST09UX1VTRVIsIGV2ZXJ5dGhpbmcg
ZWxzZSBkZW5pZWQuCiMgVHdvIHRoaW5ncyB0aGF0IG11c3QgYm90aCBiZSB0cnVlIG9yIHRoaXMg
c2lsZW50bHkgdW5kZXIvb3Zlci1yZXN0cmljdHM6CiMgIC0gZXZlcnkgInBhc3MiIG5lZWRzICJx
dWljayI6IGFwcCBydWxlcyBydW4gYmVmb3JlIHRoZSBibG9jay1hbGwgdGhpcwojICAgIHNjcmlw
dCBhcHBlbmRzLCBhbmQgd2l0aG91dCBxdWljayB0aGV5IGxvc2UgdG8gaXQuCiMgIC0gZXZlcnkg
cnVsZSBuZWVkcyAidXNlciAke0NIUk9PVF9VU0VSfSI6IGFuY2hvciBldmFsdWF0aW9uIGlzbid0
IHNjb3BlZAojICAgIGJ5IGFuY2hvciBuYW1lIGFsb25lLCBzbyBhIHJ1bGUgd2l0aG91dCBpdCBj
YW4gcGFzcyB0cmFmZmljIGZvciBvdGhlcgojICAgIHByb2Nlc3NlcyBvbiB0aGUgaG9zdCB0b28s
IG5vdCBqdXN0IHRoaXMgY2hyb290LgpDSFJPT1RfQVBQX1BGX1JVTEVTPSIKcGFzcyBvdXQgcXVp
Y2sgcHJvdG8gdGNwIHRvIGFueSBwb3J0IHs4MCwgNDQzfSB1c2VyICR7Q0hST09UX1VTRVJ9CiIK
CiMgUm91dGluZy1sZXZlbCByZXN0cmljdGlvbiAoZGVueSB0aGUgTEFOLCBmb3JjZSBhIGdhdGV3
YXkvcHJveHkpIGFuZCB0cnVlCiMgbmV0d29yay1uYW1lc3BhY2UgaXNvbGF0aW9uIGFyZSBib3Ro
IG91dHNpZGUgd2hhdCB0aGlzIHNjcmlwdCBjYW4gZG8sCiMgc2luY2UgaXQgbmV2ZXIgZXhlY3Mg
dGhlIHRhcmdldCBhcHAgLSBzZWUgdGhlICJOZXR3b3JrIiBzZWN0aW9uIG9mCiMgcmVhZG1lLm1k
IGZvciBzZXRmaWIgdXNhZ2UgYXQgdGhlIGFjdHVhbCBjaHJvb3QoOCkvcmMuZCBpbnZvY2F0aW9u
IHNpdGUuCg==
--000000000000a4b23c0656bc142c
Content-Type: text/x-patch; charset="UTF-8"; name="network-support.patch"
Content-Disposition: attachment; filename="network-support.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mrnnqgrm2>
X-Attachment-Id: f_mrnnqgrm2

ZGlmZiAtLWdpdCBhL3JlYWRtZS5tZCBiL3JlYWRtZS5tZAppbmRleCBmOTYyZWUzLi5kNmJiZDcx
IDEwMDY0NAotLS0gYS9yZWFkbWUubWQKKysrIGIvcmVhZG1lLm1kCkBAIC01OCw2ICs1OCwxMCBA
QCBJZiB0aGUgcGF0aCB0byB0aGUgY2hyb290IGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBub3Qgc3Bl
Y2lmaWVkLCB0aGVuIGl0IGlzIHVzZWQgYgogKiAqKkNIUk9PVF9BUFBfRVhFQ19MSVNUKiogLSBh
IGxpc3Qgb2YgZXhlY3V0YWJsZSBmaWxlcyB0byBiZSBjb3BpZWQgaW50byB0aGUgY2hyb290LiBU
aGlzIGlzIHVzZWQgdG8gY29weSBleGVjdXRhYmxlIGZpbGVzIGFuZCBhbGwgdGhlaXIgZGVwZW5k
ZW5jaWVzLiBJdCdzIGlkZWFsIGZvciBsaXN0aW5nIHN5c3RlbS1yZWxhdGVkIGZpbGVzIHRvIGJl
IGNvcGllZCBpbnRvIHRoZSBjaHJvb3QsIGFzIHdlbGwgYXMgc2ltcGxlIHByb2dyYW1zIGluc3Rh
bGxlZCBmcm9tIHBvcnRzLiA8YnIvPgogPGJyLz4KIAorKiAqKkNIUk9PVF9BUFBfUEZfUlVMRVMq
KiAtIFBGIHJ1bGVzIChwZi5jb25mIHN5bnRheCkgbG9hZGVkIGludG8gYSBwZXItYXBwIGFuY2hv
ci4gT3B0LWluOiBsZWF2ZSB1bnNldCBhbmQgbm8gUEYgaW50ZWdyYXRpb24gaGFwcGVucyBhdCBh
bGwsIG5vdGhpbmcgY2hhbmdlcy4gU2VlICJOZXR3b3JrIiBiZWxvdy4gPGJyLz4KKyogKipDSFJP
T1RfUEZfQU5DSE9SKiogLSBuYW1lIG9mIHRoZSBQRiBhbmNob3IgYENIUk9PVF9BUFBfUEZfUlVM
RVNgIGlzIGxvYWRlZCBpbnRvLiBEZWZhdWx0OiBgY2hyb290X2Vudi8ke0NIUk9PVF9VU0VSfWAu
IDxici8+Cis8YnIvPgorCiAqICoqQ0hST09UX1BPUlRTX05BTUVTKiogLSBhIGxpc3Qgb2YgcG9y
dHMgdG8gYmUgY2xvbmVkIGludG8gdGhlIGNocm9vdCwgZXhjbHVkaW5nIGRlcGVuZGVuY2llcy4g
PGJyLz4KICogKipDSFJPT1RfUE9SVFNfREVQU19OQU1FUyoqIC0gaXMgYSBsaXN0IG9mIHBvcnRz
IGZvciB3aGljaCB0aGVpciBkZXBlbmRlbmNpZXMgbXVzdCBhbHNvIGJlIGNsb25lZC4gPGJyLz4K
ICogKipDSFJPT1RfUE9SVFNfV0lUSF9ERVBTX05BTUVTKiog4oCUIGEgbGlzdCBvZiBwb3J0cyB0
byBiZSBjbG9uZWQgaW50byB0aGUgY2hyb290LCBhbG9uZyB3aXRoIHRoZWlyIGRlcGVuZGVuY2ll
cy4gUG9ydHMgbGlzdGVkIGluIGBDSFJPT1RfUE9SVFNfU1RPUF9MSVNUYCBhcmUgZXhjbHVkZWQg
ZnJvbSB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGlkZWFsIGZvciBjb21wbGV4IHBvcnRzIHRo
YXQgcmVxdWlyZSB0ZXh0IGZpbGVzIGFuZCBvdGhlciBiaW5hcnkgZmlsZXMgaW4gYWRkaXRpb24g
dG8gZXhlY3V0YWJsZXMuIDxici8+CkBAIC02OSw2ICs3MywzNSBAQCBJZiB0aGUgcGF0aCB0byB0
aGUgY2hyb290IGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGl0IGlz
IHVzZWQgYgogKiAqKkNIUk9PVF9ERUlOSVRfSE9PSyoqIC0gQSBzaGVsbCBzY3JpcHQgZnVuY3Rp
b24gY2FsbGVkIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBjaHJvb3QgZW52aXJvbm1lbnQuIFVzZWQg
d2hlbiBhZGRpdGlvbmFsIGFjdGlvbnMgYXJlIHJlcXVpcmVkLiBTZWUgZXhhbXBsZXM6IHBocC1u
ZXh0Y2xvdWQuIDxici8+CiAKIAorIyMjIE5ldHdvcmsgKG9wdGlvbmFsKQorQnkgaXRzZWxmIGNo
cm9vdCgyKSBkb2VzIG5vdCBpc29sYXRlIHRoZSBuZXR3b3JrIHN0YWNrOiBhIHByb2Nlc3MgaW5z
aWRlIHRoZSBjaHJvb3QgaGFzIGV4YWN0bHkgdGhlIHNhbWUgYWNjZXNzIHRvIHNvY2tldHMgYW5k
IGludGVyZmFjZXMgYXMgYENIUk9PVF9VU0VSYCBoYXMgb24gdGhlIGhvc3QuIGBDSFJPT1RfQVBQ
X1BGX1JVTEVTYCBhZGRzIGFuIG9wdC1pbiBuZXR3b3JrIEFDTCBvbiB0b3Agb2YgdGhhdCwgdXNp
bmcgUEYncyBgdXNlcmAgbWF0Y2ggaW5zdGVhZCBvZiBhIHNlcGFyYXRlIG5ldHdvcmsgc3RhY2sv
Vk5FVCBqYWlsIC0gc28gaXQgc3RheXMgaW5zaWRlIHRoZSAibGlnaHQsIG5vIGphaWxzIiBzY29w
ZSBvZiB0aGlzIHNjcmlwdC4gPGJyLz4KKzxici8+CisKK09uZS10aW1lIHNldHVwIGluIHRoZSBo
b3N0IGBwZi5jb25mYCwgc28gcGVyLWFwcCBhbmNob3JzIGFjdHVhbGx5IGdldCBldmFsdWF0ZWQg
KGxlYXZlIHRoaXMgb3V0IGFuZCBgQ0hST09UX0FQUF9QRl9SVUxFU2Agc3RpbGwgbG9hZHMgZmlu
ZSwgaXQganVzdCBuZXZlciBhcHBsaWVzIHRvIGFueSB0cmFmZmljKTogPGJyLz4KK2BgYCBzaGVs
bAorYW5jaG9yICJjaHJvb3RfZW52LyoiCitgYGAKK1RoZW4sIHBlciBhcHA6IDxici8+CitgYGAg
c2hlbGwKK0NIUk9PVF9BUFBfUEZfUlVMRVM9IgorcGFzcyBvdXQgcXVpY2sgcHJvdG8gdGNwIHRv
IGFueSBwb3J0IHs4MCwgNDQzfSB1c2VyICR7Q0hST09UX1VTRVJ9CisiCitgYGAKK2BzdGFydGAg
bG9hZHMgdGhpcyBpbnRvIGBDSFJPT1RfUEZfQU5DSE9SYCAoYHBmY3RsIC1hIC4uLiAtZiAtYCkg
d2l0aCBhIGBibG9jayByZXR1cm4gb3V0IHF1aWNrIHVzZXIgJHtDSFJPT1RfVVNFUn1gIC8gYGJs
b2NrIGluIHF1aWNrIHVzZXIgJHtDSFJPT1RfVVNFUn1gIHBhaXIgYXBwZW5kZWQgYWZ0ZXIgaXQs
IHNvIGFueXRoaW5nIG5vdCBleHBsaWNpdGx5IHBhc3NlZCBpcyBkZW5pZWQ7IGBzdG9wYCBmbHVz
aGVzIHRoZSBhbmNob3IgKGBwZmN0bCAtYSAuLi4gLUYgYWxsYCkuIFR3byB0aGluZ3MgaGF2ZSB0
byBob2xkIGZvciBldmVyeSBydWxlIGluIGBDSFJPT1RfQVBQX1BGX1JVTEVTYCwgb3IgaXQgc2ls
ZW50bHkgdW5kZXItIG9yIG92ZXItcmVzdHJpY3RzOiA8YnIvPgorKiBuZWVkcyBgcXVpY2tgIC0g
YXBwIHJ1bGVzIGFyZSBldmFsdWF0ZWQgYmVmb3JlIHRoZSBhcHBlbmRlZCBibG9jayBwYWlyLCBz
byB3aXRob3V0IGBxdWlja2AgdGhleSBsb3NlIHRvIGl0LiA8YnIvPgorKiBuZWVkcyBgdXNlciAk
e0NIUk9PVF9VU0VSfWAgLSBhbmNob3IgZXZhbHVhdGlvbiBpc24ndCBzY29wZWQgYnkgYW5jaG9y
IG5hbWUgYWxvbmU7IGEgcnVsZSB3aXRob3V0IGl0IGNhbiBwYXNzIHRyYWZmaWMgZm9yIG90aGVy
IHByb2Nlc3NlcyBvbiB0aGUgaG9zdCB0b28sIG5vdCBqdXN0IHRoaXMgY2hyb290LiA8YnIvPgor
PGJyLz4KKworRE5TIHJlc29sdmVyIGFuZCBUTFMgdHJ1c3Qgc3RvcmUgbmVlZCBubyBleHRyYSBj
b25maWc6IGBDSFJPT1RfQkFTRV9DUF9MSVNUYCBhbHJlYWR5IGluY2x1ZGVzIGAvZXRjL3Jlc29s
di5jb25mYCwgYC9ldGMvbnNzd2l0Y2guY29uZmAgYW5kIGAvZXRjL3NzbGAgKHRoZSBDQSBidW5k
bGUsIGlmIGBzZWN1cml0eS9jYV9yb290X25zc2AgaXMgaW5zdGFsbGVkKSBmb3IgZXZlcnkgY2hy
b290LiBQb2ludCBgL2V0Yy9yZXNvbHYuY29uZmAgYXQgYSBsb2NhbGx5IGZpbHRlcmluZyByZXNv
bHZlciAtIHNlZSB0aGUgYHVuYm91bmRgIGV4YW1wbGUgLSBmb3IgYSBzZWNvbmQgbGF5ZXIgb2Yg
Y29udHJvbCBhbG9uZ3NpZGUgdGhlIFBGIHJ1bGVzIGFib3ZlLiA8YnIvPgorPGJyLz4KKworVHdv
IHRoaW5ncyB0aGlzIGNhbm5vdCBkbywgc2luY2UgdGhlIHNjcmlwdCBvbmx5IG1hbmFnZXMgdGhl
IGNocm9vdCBlbnZpcm9ubWVudCBhbmQgbmV2ZXIgZXhlY3MgdGhlIHRhcmdldCBhcHBsaWNhdGlv
biBpdHNlbGYgLSB0aGF0IGhhcHBlbnMgdmlhIGBjaHJvb3QoOClgL2ByYy5kYDogPGJyLz4KKyog
KipSb3V0aW5nLWxldmVsIHJlc3RyaWN0aW9uKiogKGRlbnkgdGhlIExBTiwgZm9yY2UgYSBnYXRl
d2F5L3Byb3h5KSAtIGFsbG9jYXRlIGEgRklCIChgbmV0LmZpYnNgIGluIGBsb2FkZXIuY29uZmAp
IGFuZCBwcmVmaXggdGhlIGFjdHVhbCBpbnZvY2F0aW9uIHdpdGggYHNldGZpYmAsIGUuZy4gYHNl
dGZpYiAxIGNocm9vdCAiJHtDSFJPT1RfRElSfSIgLi4uYC4gPGJyLz4KKyogKipUcnVlIG5ldHdv
cmsgaXNvbGF0aW9uKiogKG93biBpbnRlcmZhY2UsIHJvdXRpbmcgdGFibGUgaW52aXNpYmxlIHRv
IHRoZSBob3N0KSAtIHRoYXQncyB3aGF0IFZORVQgamFpbHMgYXJlIGZvcjsgYXQgdGhhdCBwb2lu
dCB1c2UgamFpbHMgaW5zdGVhZCBvZiB0aGlzIHNjcmlwdC4gPGJyLz4KKworU2VlIGBleGFtcGxl
cy9icm93c2VyYCBmb3IgYWxsIG9mIHRoZSBhYm92ZSB0b2dldGhlci4gPGJyLz4KKworCiAjIyMg
SW50ZWdyYXRpb24gd2l0aCBzZXJ2aWNlcwogVG8gYXV0b21hdGljYWxseSBjcmVhdGUgYW5kIHJl
bW92ZSBhIGNocm9vdCB3aGVuIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyBhIHNlcnZpY2UsIHlvdSds
bCBuZWVkIHRvIGFwcGx5IGEgcGF0Y2ggdG8gdGhlIHN5c3RlbTogaHR0cHM6Ly9naXRodWIuY29t
L2ZyZWVic2QvZnJlZWJzZC1zcmMvcHVsbC8yMTg2IDxici8+CiAKZGlmZiAtLWdpdCBhL3NyYy9j
aHJvb3RfZW52LnNoIGIvc3JjL2Nocm9vdF9lbnYuc2gKaW5kZXggOTNkNWZjOC4uY2I0Nzk0ZiAx
MDA3NTUKLS0tIGEvc3JjL2Nocm9vdF9lbnYuc2gKKysrIGIvc3JjL2Nocm9vdF9lbnYuc2gKQEAg
LTE2Nyw2ICsxNjcsMjMgQEAgY2hyb290X21vdW50X3NpbmdsZSgpIHsgIyByby9ydywgZmlsZW5h
bWUvZGlyCiAJcmV0dXJuIDEKIH0KIAorY2hyb290X3BmX2xvYWQoKSB7ICMgb3B0LWluIHZpYSBD
SFJPT1RfQVBQX1BGX1JVTEVTCisJWyAteiAiJHtDSFJPT1RfQVBQX1BGX1JVTEVTfSIgXSAmJiBy
ZXR1cm4gMAorCisJIyBBcHAgcnVsZXMgZmlyc3QsIHRoZXkgbmVlZCAicXVpY2siIHRvIHdpbiBv
dmVyIHRoZSBkZW55LWFsbCBiZWxvdy4KKwlwcmludGYgJyVzXG4nICR7Q0hST09UX0FQUF9QRl9S
VUxFU30gImJsb2NrIHJldHVybiBvdXQgcXVpY2sgdXNlciAke0NIUk9PVF9VU0VSfSIgImJsb2Nr
IGluIHF1aWNrIHVzZXIgJHtDSFJPT1RfVVNFUn0iIHwgcGZjdGwgLWEgIiR7Q0hST09UX1BGX0FO
Q0hPUn0iIC1mIC0KKworCXJldHVybiAwCit9CisKK2Nocm9vdF9wZl91bmxvYWQoKSB7CisJWyAt
eiAiJHtDSFJPT1RfQVBQX1BGX1JVTEVTfSIgXSAmJiByZXR1cm4gMAorCisJcGZjdGwgLWEgIiR7
Q0hST09UX1BGX0FOQ0hPUn0iIC1GIGFsbCAyPi9kZXYvbnVsbCB8IHRydWUKKworCXJldHVybiAw
Cit9CisKIGNocm9vdF9wb3J0X21hcmtfYXNfZG9uZSgpIHsgIyBwb3J0cyBuYW1lcwogCWxvY2Fs
IF9fUE9SVF9OQU1FCiAJbG9jYWwgX19QS0dfSU5GT19SQVcKQEAgLTMyMyw2ICszNDAsOSBAQCBj
aHJvb3RfaW5pdCgpIHsKIAogCSMgRml4dXAgZGVwcwogCWNocm9vdF9kZXBzX2ZpeHVwCisKKwkj
IE5ldHdvcmsgQUNMLCBvcHRpb25hbC4KKwljaHJvb3RfcGZfbG9hZAogfQogCiBjaHJvb3RfZGVp
bml0KCkgewpAQCAtMzMxLDYgKzM1MSw4IEBAIGNocm9vdF9kZWluaXQoKSB7CiAJCXJldHVybiAw
CiAJZmkKIAorCWNocm9vdF9wZl91bmxvYWQKKwogCW1vdW50IHwgZ3JlcCAiIG9uICR7Q0hST09U
X0RJUn0vIiB8IGN1dCAtZCAnICcgLWYgMy0yNTUgfCBjdXQgLWQgJygnIC1mIDEgfCBzZWQgJ3Mv
LiQvLycgfCB4YXJncyB1bW91bnQgLWYKIAkjY2hmbGFncyAtUiBub3NjaGcgIiR7Q0hST09UX0RJ
Un0iCiAJdW1vdW50IC1mICIke0NIUk9PVF9ESVJ9IgpAQCAtMzQ3LDYgKzM2OSw5IEBAIGNocm9v
dF9tYWluKCkgewogCWlmIFsgLXogIiR7Q0hST09UX0dST1VQfSIgXTsgdGhlbgogCQlDSFJPT1Rf
R1JPVVA9YC91c3IvYmluL2lkIC1nbiAke0NIUk9PVF9VU0VSfWAKIAlmaQorCWlmIFsgLXogIiR7
Q0hST09UX1BGX0FOQ0hPUn0iIF07IHRoZW4KKwkJQ0hST09UX1BGX0FOQ0hPUj0iY2hyb290X2Vu
di8ke0NIUk9PVF9VU0VSfSIKKwlmaQogCiAJIyBIYW5kbGUgY29tbWFuZC4KIAljYXNlICR7MX0g
aW4KLS0tIG5ldyBmaWxlIChnaXQgZGlmZiBkb2Vzbid0IHNob3cgdW50cmFja2VkIGNvbnRlbnQp
IC0tLQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYnJvd3NlciBiL2V4YW1wbGVzL2Jyb3dzZXIKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmZWUyOQotLS0gL2Rldi9udWxsCisr
KyBiL2V4YW1wbGVzL2Jyb3dzZXIKQEAgLTAsMCArMSw0OSBAQAorIyEvYmluL3NoCisjIyMgQ2hy
b290IGNvbmZpZyBmaWxlIGZvciB3d3cvZmlyZWZveCAoc3dhcCBmb3IgYW55IG90aGVyIGJyb3dz
ZXIgcG9ydCkKKyMjIworIyMjIFByZXJlcXVpc2l0ZXMsIGJvdGggb25lLXRpbWU6CisjIyMgIDEp
IHB3IHVzZXJhZGQgYnJvd3NlciAtYyAic2FuZGJveGVkIGJyb3dzZXIiIC1kIC9ub25leGlzdGVu
dCAtcyAvdXNyL3NiaW4vbm9sb2dpbgorIyMjICAyKSBpbiB0aGUgaG9zdCBwZi5jb25mLCBzbyBw
ZXItYXBwIGFuY2hvcnMgYmVsb3cgZ2V0IGV2YWx1YXRlZCBhdCBhbGw6CisjIyMgICAgICAgYW5j
aG9yICJjaHJvb3RfZW52LyoiCisjIyMKKworCitDSFJPT1RfRElSPScvdmFyL3J1bi9jaHJvb3Qt
YnJvd3NlcicKK0NIUk9PVF9VU0VSPSdicm93c2VyJworIyBGaXJlZm94ICsgZGVwcyBpcyBsYXJn
ZTsgdGhpcyBpcyBhIHN0YXJ0aW5nIHBvaW50LCBzaXplIHVwIGFmdGVyIHRoZQorIyBmaXJzdCAi
c3RhcnQiIGlmIGNocm9vdF9kZXBzX2ZpeHVwIHB1bGxzIGluIG1vcmUgdGhhbiB0aGlzLgorQ0hS
T09UX01OVF9ST09UX1NJWkU9Jzc2OG0nCitDSFJPT1RfTU5UX1RNUF9TSVpFPSc2NG0nCitDSFJP
T1RfTU5UX1RNUF9BUkdTPSctbyBub2V4ZWMgLW8gbm9zdWlkIC1vIGlub2Rlcz0xNmsnCisjIE9u
bHkgdGhlIHByb2ZpbGUgcGVyc2lzdHMgYWNyb3NzIHJlc3RhcnRzOyBldmVyeXRoaW5nIGVsc2Ug
aXMgcmVidWlsdAorIyBmcm9tIHBvcnRzIGVhY2ggdGltZS4gS2VlcCB0aGlzIHRvIGp1c3QgdGhl
IHByb2ZpbGUgZGlyLCBub3QgdGhlIHdob2xlCisjIGluc3RhbGwsIHRvIGtlZXAgdGhlIGJsYXN0
IHJhZGl1cyBzbWFsbCAtIGl0J3Mgc3RpbGwgbm9leGVjL25vc3VpZC4KK0NIUk9PVF9NTlRfTUFQ
X1JXPSIKKy9ob21lL2Jyb3dzZXIvLm1vemlsbGEKKy92YXIvcnVuCisiCitDSFJPT1RfUE9SVFNf
V0lUSF9ERVBTX05BTUVTPSIKK3d3dy9maXJlZm94CisiCisKKyMgRE5TIHJlc29sdmVyIGFuZCBU
TFMgdHJ1c3Qgc3RvcmUgbmVlZCBub3RoaW5nIGV4dHJhIGhlcmU6IENIUk9PVF9CQVNFX0NQX0xJ
U1QKKyMgYWxyZWFkeSBjb3BpZXMgL2V0Yy9yZXNvbHYuY29uZiwgL2V0Yy9uc3N3aXRjaC5jb25m
IGFuZCAvZXRjL3NzbCAodGhlIENBCisjIGJ1bmRsZSwgaWYgc2VjdXJpdHkvY2Ffcm9vdF9uc3Mg
aXMgaW5zdGFsbGVkKSBpbnRvIGV2ZXJ5IGNocm9vdC4KKyMgUG9pbnQgL2V0Yy9yZXNvbHYuY29u
ZiBhdCBhIGxvY2FsIGZpbHRlcmluZyByZXNvbHZlciAoc2VlIHRoZSAidW5ib3VuZCIKKyMgZXhh
bXBsZSkgZm9yIGEgc2Vjb25kIGxheWVyIG9mIGNvbnRyb2wgYWxvbmdzaWRlIHRoZSBydWxlcyBi
ZWxvdy4KKworIyBOZXR3b3JrIEFDTDogb25seSA4MC80NDMgb3V0Ym91bmQgZm9yIENIUk9PVF9V
U0VSLCBldmVyeXRoaW5nIGVsc2UgZGVuaWVkLgorIyBUd28gdGhpbmdzIHRoYXQgbXVzdCBib3Ro
IGJlIHRydWUgb3IgdGhpcyBzaWxlbnRseSB1bmRlci9vdmVyLXJlc3RyaWN0czoKKyMgIC0gZXZl
cnkgInBhc3MiIG5lZWRzICJxdWljayI6IGFwcCBydWxlcyBydW4gYmVmb3JlIHRoZSBibG9jay1h
bGwgdGhpcworIyAgICBzY3JpcHQgYXBwZW5kcywgYW5kIHdpdGhvdXQgcXVpY2sgdGhleSBsb3Nl
IHRvIGl0LgorIyAgLSBldmVyeSBydWxlIG5lZWRzICJ1c2VyICR7Q0hST09UX1VTRVJ9IjogYW5j
aG9yIGV2YWx1YXRpb24gaXNuJ3Qgc2NvcGVkCisjICAgIGJ5IGFuY2hvciBuYW1lIGFsb25lLCBz
byBhIHJ1bGUgd2l0aG91dCBpdCBjYW4gcGFzcyB0cmFmZmljIGZvciBvdGhlcgorIyAgICBwcm9j
ZXNzZXMgb24gdGhlIGhvc3QgdG9vLCBub3QganVzdCB0aGlzIGNocm9vdC4KK0NIUk9PVF9BUFBf
UEZfUlVMRVM9IgorcGFzcyBvdXQgcXVpY2sgcHJvdG8gdGNwIHRvIGFueSBwb3J0IHs4MCwgNDQz
fSB1c2VyICR7Q0hST09UX1VTRVJ9CisiCisKKyMgUm91dGluZy1sZXZlbCByZXN0cmljdGlvbiAo
ZGVueSB0aGUgTEFOLCBmb3JjZSBhIGdhdGV3YXkvcHJveHkpIGFuZCB0cnVlCisjIG5ldHdvcmst
bmFtZXNwYWNlIGlzb2xhdGlvbiBhcmUgYm90aCBvdXRzaWRlIHdoYXQgdGhpcyBzY3JpcHQgY2Fu
IGRvLAorIyBzaW5jZSBpdCBuZXZlciBleGVjcyB0aGUgdGFyZ2V0IGFwcCAtIHNlZSB0aGUgIk5l
dHdvcmsiIHNlY3Rpb24gb2YKKyMgcmVhZG1lLm1kIGZvciBzZXRmaWIgdXNhZ2UgYXQgdGhlIGFj
dHVhbCBjaHJvb3QoOCkvcmMuZCBpbnZvY2F0aW9uIHNpdGUuCg==
--000000000000a4b23c0656bc142c
Content-Type: text/markdown; charset="UTF-8"; name="readme.md"
Content-Disposition: attachment; filename="readme.md"
Content-Transfer-Encoding: base64
Content-ID: <f_mrnnqgrp3>
X-Attachment-Id: f_mrnnqgrp3

IyBjaHJvb3RfZW52CgpSb3podWsgSXZhbiA8cm96aHVrLmltQGdtYWlsLmNvbT4gMjAyNgoKSGVs
cHMgY3JlYXRlIGNocm9vdCBlbnZpcm9ubWVudHMgZm9yIGFwcGxpY2F0aW9ucyBvbiBGcmVlQlNE
IGF1dG9tYXRpY2FsbHkuCgpUaGlzIHNjcmlwdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIGNocm9v
dCBlbnZpcm9ubWVudCBmb3IgYW4gYXBwbGljYXRpb24gdGhhdCBjb250YWlucyBubyBTRVRVSUQg
ZmlsZXM7IHRoZSBlbnRpcmUgZW52aXJvbm1lbnQgaXMgbW91bnRlZCByZWFkLW9ubHkgKFJPKSwg
d2hpbGUgbG9jYXRpb25zIHJlcXVpcmluZyB3cml0ZSBhY2Nlc3MgYXJlIG1vdW50ZWQgd2l0aCBg
bm9leGVjYCBhbmQgYG5vc3VpZGAgZmxhZ3MuIFRoaXMgc2V0dXAgZWZmZWN0aXZlbHkgcHJldmVu
dHMgdGhlIGV4cGxvaXRhdGlvbiBvZiBtYW55IHZ1bG5lcmFiaWxpdGllcyBmb3VuZCBpbiBib3Ro
IHN0YW5kYXJkIGFuZCB3ZWIgYXBwbGljYXRpb25zLiA8YnIvPgoKVGhlIG92ZXJoZWFkIGlzIG1p
bmltYWw6IHplcm8gaW1wYWN0IG9uIENQVSB1c2FnZSBhbmQgYSBuZWdsaWdpYmxlIGFtb3VudCBv
ZiBSQU0gdXNhZ2UuIDxici8+CgpBbiBhZGRpdGlvbmFsIGJlbmVmaXQgaXMgdGhlIGFiaWxpdHkg
dG8gcGVyZm9ybSBhdG9taWMgdXBkYXRlcyBmb3IgcnVubmluZyBhcHBsaWNhdGlvbnM6IHRoZSBw
cm9jZXNzIG9mIGJ1aWxkaW5nIHBvcnRzIG9yIGluc3RhbGxpbmcgcGFja2FnZXMgZG9lcyBub3Qg
aW50ZXJmZXJlIHdpdGggdGhlIGFwcGxpY2F0aW9uIGN1cnJlbnRseSBydW5uaW5nIGluc2lkZSB0
aGUgY2hyb290LiA8YnIvPgoKVGhpcyBtZWNoYW5pc20gY2FuIGFsc28gYmUgdXNlZCB0byBjcmVh
dGUgYW4gYXBwbGljYXRpb24gY29udGFpbmVyIHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBkZXBlbmRl
bmNpZXMgcmVxdWlyZWQgZm9yIGV4ZWN1dGlvbi4gPGJyLz4KPGJyLz4KCkl0IHdhcyBvcmlnaW5h
bGx5IGRldmVsb3BlZCBhcyBhIHNlY3VyaXR5IGVuaGFuY2VtZW50IGZvciBwdWJsaWMgd2ViIHNl
cnZlcnMgcnVubmluZyBQSFAgYXBwbGljYXRpb25zLiA8YnIvPgoKCiMjIExpY2VuY2UKQlNEIGxp
Y2VuY2UuCgoKIyMgRG9uYXRlClN1cHBvcnQgdGhlIGF1dGhvcgoqICoqR2l0SHViIFNwb25zb3Jz
OioqIFshWyJHaXRIdWIgU3BvbnNvcnMiXShodHRwczovL2NhbW8uZ2l0aHVidXNlcmNvbnRlbnQu
Y29tLzIyMGI3ZDQ2MDE0ZGFhNzJhMmFiNmIwZmNmNGI4YmY1YzRiZTcyODlhZDRiMDJmMzU1ZDVh
YTg0MDdlYjk1MmMvNjg3NDc0NzA3MzNhMmYyZjY5NmQ2NzJlNzM2ODY5NjU2YzY0NzMyZTY5NmYy
ZjYyNjE2NDY3NjUyZjJkNTM3MDZmNmU3MzZmNzIyZDY2NjE2NjYyNjY2MzNmNmM2ZjY3NmYzZDQ3
Njk3NDQ4NzU2MjI1MzIzMDUzNzA2ZjZlNzM2ZjcyNzMpXShodHRwczovL2dpdGh1Yi5jb20vc3Bv
bnNvcnMvcm96aHVrLWltKSA8YnIvPgoqICoqQnV5IE1lIEEgQ29mZmVlOioqIFshWyJCdXkgTWUg
QSBDb2ZmZWUiXShodHRwczovL3d3dy5idXltZWFjb2ZmZWUuY29tL2Fzc2V0cy9pbWcvY3VzdG9t
X2ltYWdlcy9vcmFuZ2VfaW1nLnBuZyldKGh0dHBzOi8vd3d3LmJ1eW1lYWNvZmZlZS5jb20vcm9q
dWMpIDxici8+CiogKipQYXlQYWw6KiogWyFbUGF5UGFsXShodHRwczovL3Nydi1jZG4uaGltcGZl
bi5pby9iYWRnZXMvcGF5cGFsL3BheXBhbC1mbGF0LnN2ZyldKGh0dHBzOi8vcGF5cGFsLm1lL3Jv
anVjKSA8YnIvPgoqICoqQml0Y29pbiAoQlRDKToqKiBgMUF4WXlNV2VrNXZob1dXUlRXS1FwV1Vx
S3h5ZkxhckN1emAgPGJyLz4KCgojIyBVc2FnZQpgYGAgc2hlbGwKY2hyb290X2Vudi5zaCBDT05G
SUdfRklMRV9OQU1FIHN0YXJ0fHN0b3B8cmVzdGFydApjaHJvb3RfZW52LnNoIFBBVEhfVE9fQ09O
RklHX0ZJTEVfTkFNRSBzdGFydHxzdG9wfHJlc3RhcnQKYGBgCklmIHRoZSBwYXRoIHRvIHRoZSBj
aHJvb3QgY29uZmlndXJhdGlvbiBmaWxlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gaXQgaXMgdXNl
ZCBieSBkZWZhdWx0OiBDSFJPT1RfQ0ZHX0RJUj1gL3Vzci9sb2NhbC9ldGMvY2hyb290YC4gPGJy
Lz4KCgojIyMgQ2hyb290IG9wdGlvbnMKCgojIyMjIE1hbmRhdG9yeQoKKiAqKkNIUk9PVF9ESVIq
KiAtIGlzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gY3JlYXRlIGNocm9vdC4gPGJyLz4KKiAq
KkNIUk9PVF9VU0VSKiogLSB0aGUgdXNlciB1bmRlciB3aGljaCB0aGUgYXBwbGljYXRpb24gd2ls
bCBiZSBsYXVuY2hlZC4gPGJyLz4KKiAqKkNIUk9PVF9HUk9VUCoqIC0gaXMgdGhlIGdyb3VwIHRv
IHdoaWNoIHRoZSBydW5uaW5nIHByb2Nlc3Mgd2lsbCBiZWxvbmcuIEJ5IGRlZmF1bHQsIGl0IGlz
IGRlZmluZWQgYXMgdGhlIGdyb3VwIHRoZSB1c2VyIGJlbG9uZ3MgdG86IGAvdXNyL2Jpbi9pZCAt
Z24gJHtDSFJPT1RfVVNFUn1gLiA8YnIvPgoqICoqQ0hST09UX01OVF9ST09UX1NJWkUqKiAtIHNp
emUgb2YgdGhlIHRtcGZzIGZvciBjaHJvb3QuIDxici8+CgojIyMjIEF1eGlsaWFyeQoqICoqQ0hS
T09UX01OVF9ST09UX0FSR1MqKiAtIHRtcGZzIGFyZ3VtZW50cyBmb3IgbW91bnRpbmcgdGhlIGNo
cm9vdCByb290LCBkZWZhdWx0OiBgLW8gbm9zdWlkYC4gPGJyLz4KKiAqKkNIUk9PVF9NTlRfVE1Q
X1NJWkUqKiAtIHNpemUgb2YgdG1wZnMgbW91bnRlZCBpbiAvdG1wIGNocm9vdCwgZGVmYXVsdDog
YDFtYC4gPGJyLz4KKiAqKkNIUk9PVF9NTlRfVE1QX0FSR1MqKiAtIHRtcGZzIGFyZ3VtZW50cyBm
b3IgbW91bnRpbmcgdGhlIGNocm9vdCAvdG1wLCBkZWZhdWx0OiBgLW8gbm9leGVjIC1vIG5vc3Vp
ZCAtbyBpbm9kZXM9MWtgLiA8YnIvPgoqICoqQ0hST09UX01OVF9NQVBfUk8qKiwgKipDSFJPT1Rf
TU5UX01BUF9SVyoqIC0gcGF0aHMgdG8gZmlsZXMvZGlyZWN0b3JpZXMgdGhhdCB3aWxsIGJlIG1v
dW50ZWQgaW4gY2hyb290IHVzaW5nIG51bGxmcyB3aXRoIG9wdGlvbnM6IGAtbyBub2NhY2hlIC1v
IG5vYXRpbWUgLW8gbm9leGVjIC1vIG5vc3VpZGAuIDxici8+Cjxici8+CgoqICoqQ0hST09UX0FQ
UF9ERVZGU19SVUxFUyoqIC0gZGV2ZnMgcnVsZXMgYXBwbGllZCB3aXRoaW4gY2hyb290LiBVc2Vk
IHdoZW4gd29ya2luZyB3aXRoIGRldmljZXMgaXMgcmVxdWlyZWQuIDxici8+CiogKipDSFJPT1Rf
QVBQX0NQX0xJU1QqKiAtIGEgbGlzdCBvZiBmaWxlcyB0aGF0IHdpbGwgYmUgY29waWVkIGludG8g
dGhlIGNocm9vdC4gVXNlZCBmb3Igbm9uLWV4ZWN1dGFibGUgZmlsZXMsIHN1Y2ggYXMgY29uZmln
dXJhdGlvbiBmaWxlcy4gPGJyLz4KKiAqKkNIUk9PVF9BUFBfRVhFQ19MSVNUKiogLSBhIGxpc3Qg
b2YgZXhlY3V0YWJsZSBmaWxlcyB0byBiZSBjb3BpZWQgaW50byB0aGUgY2hyb290LiBUaGlzIGlz
IHVzZWQgdG8gY29weSBleGVjdXRhYmxlIGZpbGVzIGFuZCBhbGwgdGhlaXIgZGVwZW5kZW5jaWVz
LiBJdCdzIGlkZWFsIGZvciBsaXN0aW5nIHN5c3RlbS1yZWxhdGVkIGZpbGVzIHRvIGJlIGNvcGll
ZCBpbnRvIHRoZSBjaHJvb3QsIGFzIHdlbGwgYXMgc2ltcGxlIHByb2dyYW1zIGluc3RhbGxlZCBm
cm9tIHBvcnRzLiA8YnIvPgo8YnIvPgoKKiAqKkNIUk9PVF9BUFBfUEZfUlVMRVMqKiAtIFBGIHJ1
bGVzIChwZi5jb25mIHN5bnRheCkgbG9hZGVkIGludG8gYSBwZXItYXBwIGFuY2hvci4gT3B0LWlu
OiBsZWF2ZSB1bnNldCBhbmQgbm8gUEYgaW50ZWdyYXRpb24gaGFwcGVucyBhdCBhbGwsIG5vdGhp
bmcgY2hhbmdlcy4gU2VlICJOZXR3b3JrIiBiZWxvdy4gPGJyLz4KKiAqKkNIUk9PVF9QRl9BTkNI
T1IqKiAtIG5hbWUgb2YgdGhlIFBGIGFuY2hvciBgQ0hST09UX0FQUF9QRl9SVUxFU2AgaXMgbG9h
ZGVkIGludG8uIERlZmF1bHQ6IGBjaHJvb3RfZW52LyR7Q0hST09UX1VTRVJ9YC4gPGJyLz4KPGJy
Lz4KCiogKipDSFJPT1RfUE9SVFNfTkFNRVMqKiAtIGEgbGlzdCBvZiBwb3J0cyB0byBiZSBjbG9u
ZWQgaW50byB0aGUgY2hyb290LCBleGNsdWRpbmcgZGVwZW5kZW5jaWVzLiA8YnIvPgoqICoqQ0hS
T09UX1BPUlRTX0RFUFNfTkFNRVMqKiAtIGlzIGEgbGlzdCBvZiBwb3J0cyBmb3Igd2hpY2ggdGhl
aXIgZGVwZW5kZW5jaWVzIG11c3QgYWxzbyBiZSBjbG9uZWQuIDxici8+CiogKipDSFJPT1RfUE9S
VFNfV0lUSF9ERVBTX05BTUVTKiog4oCUIGEgbGlzdCBvZiBwb3J0cyB0byBiZSBjbG9uZWQgaW50
byB0aGUgY2hyb290LCBhbG9uZyB3aXRoIHRoZWlyIGRlcGVuZGVuY2llcy4gUG9ydHMgbGlzdGVk
IGluIGBDSFJPT1RfUE9SVFNfU1RPUF9MSVNUYCBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgZGVwZW5k
ZW5jaWVzLiBUaGlzIGlzIGlkZWFsIGZvciBjb21wbGV4IHBvcnRzIHRoYXQgcmVxdWlyZSB0ZXh0
IGZpbGVzIGFuZCBvdGhlciBiaW5hcnkgZmlsZXMgaW4gYWRkaXRpb24gdG8gZXhlY3V0YWJsZXMu
IDxici8+CiogKipDSFJPT1RfUE9SVFNfU1RPUF9MSVNUKiogLSBhIGxpc3Qgb2YgcG9ydHMgdGhh
dCB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGNsb25lZCBpbnRvIHRoZSBjaHJvb3QuIEluIHNv
bWUgY2FzZXMsIHRoZXJlJ3Mgbm8gbmVlZCB0byBjbG9uZSB0aGUgZW50aXJlIHBvcnQgc3BlY2lm
aWVkIGFzIGEgZGVwZW5kZW5jeSwgYXMgdGhlIGVudGlyZSBwb3J0IG1heSBvbmx5IHJlcXVpcmUg
YSBmZXcgbGlicmFyaWVzLiBGb3IgZXhhbXBsZSwgbmV0LWltL3Byb3NvZHkgZGVwZW5kcyBvbiBk
bnMvdW5ib3VuZCBvbmx5IGJlY2F1c2UgaXQgcmVxdWlyZXMgbGlidW5ib3VuZC5zby4gSW4gdGhp
cyBjYXNlLCB0aGVyZSdzIG5vIG5lZWQgdG8gY2xvbmUgdGhlIGVudGlyZSB1bmJvdWQgcG9ydCB3
aXRoIGFsbCBpdHMgZGVwZW5kZW5jaWVzLiBUaGUgc2NyaXB0IHdpbGwgYXV0b21hdGljYWxseSBk
ZXRlY3QgdGhhdCBsaWJ1bmJvdW5kLnNvIGlzIHJlcXVpcmVkIGFuZCBjb3B5IGl0IGludG8gdGhl
IGNocm9vdCBhbG9uZyB3aXRoIGFsbCBpdHMgZGVwZW5kZW5jaWVzLiBEb2VzIG5vdCB3b3JrIGZv
ciBwb3J0cyBsaXN0ZWQgaW4gYENIUk9PVF9QT1JUU19OQU1FU2AgYW5kIGBDSFJPT1RfUE9SVFNf
REVQU19OQU1FU2AuIDxici8+CiogKipDSFJPT1RfUE9SVFNfRklMRVNfRVhDTFVERV9MSVNUKiog
LSBsaXN0IG9mIGZpbGVzIHRoYXQgd2lsbCBub3QgYmUgY29waWVkIHRvIGNocm9vdCB3aGVuIGNs
b25pbmcgcG9ydHMuIFVzZTogYHBrZyBpbmZvIC0tbGlzdC1maWxlcyBQT1JUTkFNRWAgdG8gc2Vl
IGEgbGlzdCBvZiBmaWxlcyByZWxhdGVkIHRvIGEgcG9ydC4gPGJyLz4KPGJyLz4KCiogKipDSFJP
T1RfSU5JVF9IT09LKiogLSBBIHNoZWxsIHNjcmlwdCBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIGZp
bmFsIHN0YWdlIG9mIGNyZWF0aW5nIGEgY2hyb290IGVudmlyb25tZW50LiBJdCBpcyB1c2VkIHdo
ZW4gYWRkaXRpb25hbCBhY3Rpb25zIGFyZSByZXF1aXJlZC4gU2VlIGV4YW1wbGVzOiBhcGN1cHNk
LCBwaHAtZG9rdXdpa2ksIHBocC1uZXh0Y2xvdWQsIHNoLiBCeSBkZWZhdWx0LCBjaHJvb3RfaW5p
dF9ob29rX2RlZmF1bHQoKSBpcyBjYWxsZWQsIHdoaWNoIHJlbW91bnRzIHRoZSBjaHJvb3QgdG8g
Uk86IGBtb3VudCAtdSAtbyBybyAiJHtDSFJPT1RfRElSfSJgLiA8YnIvPgoqICoqQ0hST09UX0RF
SU5JVF9IT09LKiogLSBBIHNoZWxsIHNjcmlwdCBmdW5jdGlvbiBjYWxsZWQgYmVmb3JlIGRlc3Ry
b3lpbmcgdGhlIGNocm9vdCBlbnZpcm9ubWVudC4gVXNlZCB3aGVuIGFkZGl0aW9uYWwgYWN0aW9u
cyBhcmUgcmVxdWlyZWQuIFNlZSBleGFtcGxlczogcGhwLW5leHRjbG91ZC4gPGJyLz4KCgojIyMg
TmV0d29yayAob3B0aW9uYWwpCkJ5IGl0c2VsZiBjaHJvb3QoMikgZG9lcyBub3QgaXNvbGF0ZSB0
aGUgbmV0d29yayBzdGFjazogYSBwcm9jZXNzIGluc2lkZSB0aGUgY2hyb290IGhhcyBleGFjdGx5
IHRoZSBzYW1lIGFjY2VzcyB0byBzb2NrZXRzIGFuZCBpbnRlcmZhY2VzIGFzIGBDSFJPT1RfVVNF
UmAgaGFzIG9uIHRoZSBob3N0LiBgQ0hST09UX0FQUF9QRl9SVUxFU2AgYWRkcyBhbiBvcHQtaW4g
bmV0d29yayBBQ0wgb24gdG9wIG9mIHRoYXQsIHVzaW5nIFBGJ3MgYHVzZXJgIG1hdGNoIGluc3Rl
YWQgb2YgYSBzZXBhcmF0ZSBuZXR3b3JrIHN0YWNrL1ZORVQgamFpbCAtIHNvIGl0IHN0YXlzIGlu
c2lkZSB0aGUgImxpZ2h0LCBubyBqYWlscyIgc2NvcGUgb2YgdGhpcyBzY3JpcHQuIDxici8+Cjxi
ci8+CgpPbmUtdGltZSBzZXR1cCBpbiB0aGUgaG9zdCBgcGYuY29uZmAsIHNvIHBlci1hcHAgYW5j
aG9ycyBhY3R1YWxseSBnZXQgZXZhbHVhdGVkIChsZWF2ZSB0aGlzIG91dCBhbmQgYENIUk9PVF9B
UFBfUEZfUlVMRVNgIHN0aWxsIGxvYWRzIGZpbmUsIGl0IGp1c3QgbmV2ZXIgYXBwbGllcyB0byBh
bnkgdHJhZmZpYyk6IDxici8+CmBgYCBzaGVsbAphbmNob3IgImNocm9vdF9lbnYvKiIKYGBgClRo
ZW4sIHBlciBhcHA6IDxici8+CmBgYCBzaGVsbApDSFJPT1RfQVBQX1BGX1JVTEVTPSIKcGFzcyBv
dXQgcXVpY2sgcHJvdG8gdGNwIHRvIGFueSBwb3J0IHs4MCwgNDQzfSB1c2VyICR7Q0hST09UX1VT
RVJ9CiIKYGBgCmBzdGFydGAgbG9hZHMgdGhpcyBpbnRvIGBDSFJPT1RfUEZfQU5DSE9SYCAoYHBm
Y3RsIC1hIC4uLiAtZiAtYCkgd2l0aCBhIGBibG9jayByZXR1cm4gb3V0IHF1aWNrIHVzZXIgJHtD
SFJPT1RfVVNFUn1gIC8gYGJsb2NrIGluIHF1aWNrIHVzZXIgJHtDSFJPT1RfVVNFUn1gIHBhaXIg
YXBwZW5kZWQgYWZ0ZXIgaXQsIHNvIGFueXRoaW5nIG5vdCBleHBsaWNpdGx5IHBhc3NlZCBpcyBk
ZW5pZWQ7IGBzdG9wYCBmbHVzaGVzIHRoZSBhbmNob3IgKGBwZmN0bCAtYSAuLi4gLUYgYWxsYCku
IFR3byB0aGluZ3MgaGF2ZSB0byBob2xkIGZvciBldmVyeSBydWxlIGluIGBDSFJPT1RfQVBQX1BG
X1JVTEVTYCwgb3IgaXQgc2lsZW50bHkgdW5kZXItIG9yIG92ZXItcmVzdHJpY3RzOiA8YnIvPgoq
IG5lZWRzIGBxdWlja2AgLSBhcHAgcnVsZXMgYXJlIGV2YWx1YXRlZCBiZWZvcmUgdGhlIGFwcGVu
ZGVkIGJsb2NrIHBhaXIsIHNvIHdpdGhvdXQgYHF1aWNrYCB0aGV5IGxvc2UgdG8gaXQuIDxici8+
CiogbmVlZHMgYHVzZXIgJHtDSFJPT1RfVVNFUn1gIC0gYW5jaG9yIGV2YWx1YXRpb24gaXNuJ3Qg
c2NvcGVkIGJ5IGFuY2hvciBuYW1lIGFsb25lOyBhIHJ1bGUgd2l0aG91dCBpdCBjYW4gcGFzcyB0
cmFmZmljIGZvciBvdGhlciBwcm9jZXNzZXMgb24gdGhlIGhvc3QgdG9vLCBub3QganVzdCB0aGlz
IGNocm9vdC4gPGJyLz4KPGJyLz4KCkROUyByZXNvbHZlciBhbmQgVExTIHRydXN0IHN0b3JlIG5l
ZWQgbm8gZXh0cmEgY29uZmlnOiBgQ0hST09UX0JBU0VfQ1BfTElTVGAgYWxyZWFkeSBpbmNsdWRl
cyBgL2V0Yy9yZXNvbHYuY29uZmAsIGAvZXRjL25zc3dpdGNoLmNvbmZgIGFuZCBgL2V0Yy9zc2xg
ICh0aGUgQ0EgYnVuZGxlLCBpZiBgc2VjdXJpdHkvY2Ffcm9vdF9uc3NgIGlzIGluc3RhbGxlZCkg
Zm9yIGV2ZXJ5IGNocm9vdC4gUG9pbnQgYC9ldGMvcmVzb2x2LmNvbmZgIGF0IGEgbG9jYWxseSBm
aWx0ZXJpbmcgcmVzb2x2ZXIgLSBzZWUgdGhlIGB1bmJvdW5kYCBleGFtcGxlIC0gZm9yIGEgc2Vj
b25kIGxheWVyIG9mIGNvbnRyb2wgYWxvbmdzaWRlIHRoZSBQRiBydWxlcyBhYm92ZS4gPGJyLz4K
PGJyLz4KClR3byB0aGluZ3MgdGhpcyBjYW5ub3QgZG8sIHNpbmNlIHRoZSBzY3JpcHQgb25seSBt
YW5hZ2VzIHRoZSBjaHJvb3QgZW52aXJvbm1lbnQgYW5kIG5ldmVyIGV4ZWNzIHRoZSB0YXJnZXQg
YXBwbGljYXRpb24gaXRzZWxmIC0gdGhhdCBoYXBwZW5zIHZpYSBgY2hyb290KDgpYC9gcmMuZGA6
IDxici8+CiogKipSb3V0aW5nLWxldmVsIHJlc3RyaWN0aW9uKiogKGRlbnkgdGhlIExBTiwgZm9y
Y2UgYSBnYXRld2F5L3Byb3h5KSAtIGFsbG9jYXRlIGEgRklCIChgbmV0LmZpYnNgIGluIGBsb2Fk
ZXIuY29uZmApIGFuZCBwcmVmaXggdGhlIGFjdHVhbCBpbnZvY2F0aW9uIHdpdGggYHNldGZpYmAs
IGUuZy4gYHNldGZpYiAxIGNocm9vdCAiJHtDSFJPT1RfRElSfSIgLi4uYC4gPGJyLz4KKiAqKlRy
dWUgbmV0d29yayBpc29sYXRpb24qKiAob3duIGludGVyZmFjZSwgcm91dGluZyB0YWJsZSBpbnZp
c2libGUgdG8gdGhlIGhvc3QpIC0gdGhhdCdzIHdoYXQgVk5FVCBqYWlscyBhcmUgZm9yOyBhdCB0
aGF0IHBvaW50IHVzZSBqYWlscyBpbnN0ZWFkIG9mIHRoaXMgc2NyaXB0LiA8YnIvPgoKU2VlIGBl
eGFtcGxlcy9icm93c2VyYCBmb3IgYWxsIG9mIHRoZSBhYm92ZSB0b2dldGhlci4gPGJyLz4KCgoj
IyMgSW50ZWdyYXRpb24gd2l0aCBzZXJ2aWNlcwpUbyBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhbmQg
cmVtb3ZlIGEgY2hyb290IHdoZW4gc3RhcnRpbmcgYW5kIHN0b3BwaW5nIGEgc2VydmljZSwgeW91
J2xsIG5lZWQgdG8gYXBwbHkgYSBwYXRjaCB0byB0aGUgc3lzdGVtOiBodHRwczovL2dpdGh1Yi5j
b20vZnJlZWJzZC9mcmVlYnNkLXNyYy9wdWxsLzIxODYgPGJyLz4KClRoZW4sIHNpbXBseSBzcGVj
aWZ5IHRoZSBjaHJvb3QgYW5kIHByZV9zdGFydCArIHBvc3Rfc3RvcCBpbiByYy5jb25mOgpgYGAg
c2hlbGwKY2hyb255ZF9lbmFibGU9IllFUyIKY2hyb255ZF9jaHJvb3Q9Ii92YXIvcnVuL2Nocm9v
dC1jaHJvbnkvIgpjaHJvbnlkX3ByZV9zdGFydD0iY2hyb290X2Vudi5zaCBjaHJvbnkgcmVzdGFy
dCIKY2hyb255ZF9wb3N0X3N0b3A9ImNocm9vdF9lbnYuc2ggY2hyb255IHN0b3AiCmBgYApGb3Ig
c2VydmljZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIGNocm9vdCAodW5ib3VuZCwgcGhw
X2ZwbSksIHlvdSBvbmx5IG5lZWQgdG8gc3BlY2lmeSBwcmVfc3RhcnQgKyBwb3N0X3N0b3AuCmBg
YCBzaGVsbAp1bmJvdW5kX2VuYWJsZT0iWUVTIgp1bmJvdW5kX3BpZGZpbGU9Ii92YXIvcnVuL3Vu
Ym91bmQucGlkIgp1bmJvdW5kX3ByZV9zdGFydD0iY2hyb290X2Vudi5zaCB1bmJvdW5kIHJlc3Rh
cnQiCnVuYm91bmRfcG9zdF9zdG9wPSJjaHJvb3RfZW52LnNoIHVuYm91bmQgc3RvcCIKYGBgCg==
--000000000000a4b23c0656bc142c--