<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>117362</bug_id>
          
          <creation_ts>2013-06-07 14:44:00 -0700</creation_ts>
          <short_desc>[GTK] Remove unsupported AC backends</short_desc>
          <delta_ts>2013-07-01 18:01:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gustavo Noronha (kov)">gustavo</reporter>
          <assigned_to name="Gustavo Noronha (kov)">gustavo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>joone</cc>
    
    <cc>kevin.cs.oh</cc>
    
    <cc>mrobinson</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>898296</commentid>
    <comment_count>0</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-06-07 14:44:00 -0700</bug_when>
    <thetext>After much internal discussion, Collabora has decided maintaining the clutter AC backend upstream is not really worth it any more at this point. We will deal with customer needs in our private branch as required, and WebKitGTK+ doesn&apos;t have much to gain from it as things stand currently - even if Clutter does get merged at some point, it will need to have a solution for using OpenGL in parallel with cogl. Redirecting resources for improving WebKitGTK+ instead makes more sense, so that&apos;s what we&apos;ll try to do. For those reasons we are proposing complete removal of the clutter AC backend. The cairo texmap backend is also being deemed deprecated right now, so this patch also removes it to allow complete removal of backend selection. Some of the infrastructure for supporting more than one backend still makes sense given we will likely want to have a Wayland backend soon, hopefully runtime-selectable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898309</commentid>
    <comment_count>1</comment_count>
      <attachid>204070</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-06-07 15:17:16 -0700</bug_when>
    <thetext>Created attachment 204070
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898460</commentid>
    <comment_count>2</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2013-06-08 23:49:32 -0700</bug_when>
    <thetext>I&apos;m sad to hear that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>905194</commentid>
    <comment_count>3</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-07-01 18:01:27 -0700</bug_when>
    <thetext>Committed r152275: &lt;http://trac.webkit.org/changeset/152275&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204070</attachid>
            <date>2013-06-07 15:17:16 -0700</date>
            <delta_ts>2013-06-07 16:07:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117362-20130607191541.patch</filename>
            <type>text/plain</type>
            <size>177677</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdiNWY3ZGFiYTE1Y2Vk
YmQ0NzlmMWMzNzRiZWVmODBjYTVkZjM4Zi4uMTlkZTM4MWZhNGM4ZTMxY2YwZjUyOGI2OTg3MTI1
ODYwMTU4ZDM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEzLTA2LTA3ICBHdXN0
YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvbT4KKworICAg
ICAgICBbR1RLXSBSZW1vdmUgdW5zdXBwb3J0ZWQgQUMgYmFja2VuZHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzM2MgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxheWVyLmg6IFJlbW92ZWQgbWVudGlvbnMgb2YgY2x1dHRl
cgorICAgICAgICBhbmQgdGhlIHRleG1hcCBjYWlybyBiYWNrZW5kLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NsdXR0ZXIvRHJhd2luZ0J1ZmZlckNsdXR0ZXIuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0
dGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xh
eWVyQWN0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVy
L0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvUGxhdGZvcm1D
bHV0dGVyQW5pbWF0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2x1dHRlci9QbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvVHJhbnNmb3JtYXRpb25NYXRyaXhDbHV0dGVyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg6IFJlbW92ZWQgY29nbAorICAgICAgICBt
YXRyaXggdHlwZSBjb252ZXJzaW9uLgorCiAyMDEzLTA2LTA3ICBHcnplZ29yeiBDemFqa293c2tp
ICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdW0dUS10gVGV4dENo
ZWNrZXJFbmNoYW50IHVzZXMgZGVwcmVjYXRlZCBlbmNoYW50X2RpY3RfYWRkX3RvX3BlcnNvbmFs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKaW5kZXggNjkyZWRiOTIwNGYyY2ZlYjk1NTA0MDMwMzM2YzdkZTFlMWU1
OWZmZi4uMTlhNzk1OWU3OWY1OWY2OTA1Mzk2MjQwMGVkMTVkMzFjMGFjMTlmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEzLTA2LTA3ICBHdXN0YXZvIE5vcm9uaGEgU2ls
dmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvbT4KKworICAgICAgICBbR1RLXSBSZW1v
dmUgdW5zdXBwb3J0ZWQgQUMgYmFja2VuZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExNzM2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaDogcmVtb3ZlZCBjbHV0dGVyIGFu
ZCBjYWlybworICAgICAgICBhZGRpdGlvbnMuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRDbHV0dGVyLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Z2xvYmFscy5jcHA6CisgICAgICAgICh3
ZWJraXRJbml0KTogcmVtb3ZlZCBjbHV0dGVyLWd0ayBpbml0aWFsaXphdGlvbi4KKwogMjAxMy0w
Ni0wNiAgRGllZ28gUGlubyBHYXJjaWEgIDxkcGlub0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIFBhcmFtZXRlciAncmVmQ2hpbGQnIGZyb20gZnVuY3Rpb24gJ3dlYmtpdF9kb21fbm9kZV9p
bnNlcnRfYmVmb3JlJyBzaG91bGQgYmUgYWxsb3dlZCB0byBiZSBOVUxMCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDBhNTI4ODM3ZTcyMzQ3MjEwN2MwOGIyZGIwMzBkNDg3Y2VmODIwYmIuLjgzYTBi
MGRlMjUwMmE0YzhmOGQ5NzM1ZjJhZDE1YjZlNzQ0NmViYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CkBAIC0yMDAsMjIgKzIwMCwxMSBAQCBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1hMaW5rTmFtZXMu
aDogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YTGlua05hbWVzLmNwcAogRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9YTGlua05hbWVzLmNwcCA6ICQoV2ViQ29yZSkvZG9tL21ha2VfbmFtZXMucGwgJChX
ZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL0hhc2hlci5wbSAkKFdlYkNvcmUpL2JpbmRpbmdzL3Nj
cmlwdHMvU3RhdGljU3RyaW5nLnBtICQoV2ViQ29yZSkvc3ZnL3hsaW5rYXR0cnMuaW4KIAkkKEFN
X1ZfR0VOKSQoUEVSTCkgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS1hdHRycyAk
KFdlYkNvcmUpL3N2Zy94bGlua2F0dHJzLmluIC0tb3V0cHV0RGlyICIkKEdFTlNPVVJDRVNfV0VC
Q09SRSkiCiAKLWlmIFVTRV9URVhUVVJFX01BUFBFUl9DQUlSTwotd2ViY29yZV9jcHBmbGFncyAr
PSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
Ci1lbmRpZiAgIyBFTkQgVVNFX1RFWFRVUkVfTUFQUEVSX0NBSVJPCi0KIGlmIFVTRV9URVhUVVJF
X01BUFBFUl9HTAogd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwCiBlbmRpZiAgIyBFTkQgVVNFVEVYVFVSRV9N
QVBQRVJfR0wKIAotaWYgVVNFX0NMVVRURVIKLXdlYmNvcmVfY3BwZmxhZ3MgKz0gXAotCS1JJChz
cmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NsdXR0ZXIgXAotCS1JJChzcmNkaXIpL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIKLWVuZGlmICAjIEVORCBVU0Vf
Q0xVVFRFUgotCiBpZiBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRQogd2ViY29yZV9jcHBmbGFncyAr
PSBcCiAJLURXVEZfVVNFX0xFVkVMREI9MSBcCkBAIC00ODYsNyArNDc1LDYgQEAgbGliV2ViQ29y
ZV9sYV9DUFBGTEFHUyA9IFwKIAkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCiAJLWZuby1z
dHJpY3QtYWxpYXNpbmcgXAogCSQoQ0FJUk9fQ0ZMQUdTKSBcCi0JJChDTFVUVEVSX0NGTEFHUykg
XAogCSQoQ09WRVJBR0VfQ0ZMQUdTKSBcCiAJJChFTkNIQU5UX0NGTEFHUykgXAogCSQoRlJFRVRZ
UEVfQ0ZMQUdTKSBcCkBAIC01MzMsNyArNTIxLDYgQEAgbGliV2ViQ29yZVBsYXRmb3JtX2xhX0NQ
UEZMQUdTID0gXAogCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKIAktZm5vLXN0cmljdC1h
bGlhc2luZyBcCiAJJChDQUlST19DRkxBR1MpIFwKLQkkKENMVVRURVJfQ0ZMQUdTKSBcCiAJJChD
T1ZFUkFHRV9DRkxBR1MpIFwKIAkkKEVOQ0hBTlRfQ0ZMQUdTKSBcCiAJJChGUkVFVFlQRV9DRkxB
R1MpIFwKQEAgLTU4MSw3ICs1NjgsNiBAQCBsaWJXZWJDb3JlR3RrX2xhX0NQUEZMQUdTID0gXAog
CSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKIAktZm5vLXN0cmljdC1hbGlhc2luZyBcCiAJ
JChDQUlST19DRkxBR1MpIFwKLQkkKENMVVRURVJfQ0ZMQUdTKSBcCiAJJChDT1ZFUkFHRV9DRkxB
R1MpIFwKIAkkKEVOQ0hBTlRfQ0ZMQUdTKSBcCiAJJChGUkVFVFlQRV9DRkxBR1MpIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDg0MWE1NDE5NTA0Yjg2MDdlYzI0YWE0M2YxN2M5
NjE5MjZmNWNiZjEuLjUxYzQyZmE4ODIyN2YzNTMyYmM3OTYzYmQ3YTNkMGE0NjE3OTQ3ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTUwOCwxMCArNTUwOCwxNCBAQCB3ZWJj
b3JlX3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuc2lvbnMzRC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9O
YXRpdmVJbWFnZVB0ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9CaXRtYXBJbWFnZUNhaXJvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRHJhd2luZ0J1ZmZlckNhaXJvLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENh
aXJvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcCBcCkBA
IC02MzQxLDY2ICs2MzQ1LDEwIEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuaAog
ZW5kaWYKIAotaWYgVVNFX0NMVVRURVIKLXdlYmNvcmVfc291cmNlcyArPSBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9EcmF3aW5nQnVmZmVyQ2x1dHRlci5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250
ZXh0M0RDbHV0dGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCi1lbHNlCi13
ZWJjb3JlX3NvdXJjZXMgKz0gXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0RyYXdpbmdCdWZmZXJDYWlyby5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuaAotZW5kaWYgICMgRU5EIFVTRV9DTFVUVEVSCi0KICMgLS0tCiAjIEFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nIHN1cHBvcnQKICMgLS0tCiBpZiBVU0VfQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcKLWlmIFVTRV9DTFVUVEVSCi13ZWJjb3JlX3NvdXJjZXMgKz0gXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0
b3IuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGlj
c0xheWVyQ2x1dHRlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Ns
dXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24uY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL1BsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL1RyYW5zZm9y
bWF0aW9uTWF0cml4Q2x1dHRlci5jcHAKLWVuZGlmICAjIEVORCBVU0VfQ0xVVFRFUgotCi1pZiBV
U0VfVEVYVFVSRV9NQVBQRVJfQ0FJUk8KLXdlYmNvcmVfc291cmNlcyArPSBcCi0JU291cmNlL1dl
YkNvcmUvL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvdGV4bWFwL0N1c3RvbUZpbHRlclZhbGlk
YXRlZFByb2dyYW1UZXh0dXJlTWFwcGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUNvbXBpbGVkUHJv
Z3JhbS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmggXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmUuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFn
ZUJ1ZmZlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU3VyZmFjZUJhY2tpbmdTdG9yZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZS5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclRpbGUuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clRpbGUuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUuaAotZW5kaWYg
ICMgRU5EIFVTRV9URVhUVVJFX01BUFBFUl9DQUlSTwotCiBpZiBVU0VfVEVYVFVSRV9NQVBQRVJf
R0wKIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy90ZXhtYXAvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbVRleHR1cmVNYXBw
ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
TGF5ZXIuaAppbmRleCAxODM2NzNiMTNkZTZlOGM2N2VkOWMyMmZhOWU0M2VkY2QxNTQ5YmY4Li5h
MTdjMTllZGZkZjE4NDM2YWMwYWM5N2M2NjU3YjU0M2NhN2I5ODlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCkBAIC0zOSwxNiArMzks
MTEgQEAgY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI7CiB0eXBlZGVmIFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyIFBsYXRmb3JtTGF5ZXI7CiB9OwogI2VsaWYgUExBVEZPUk0oR1RL
KQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9DQUlSTykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyOwogdHlwZWRlZiBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllciBQbGF0Zm9ybUxheWVyOwogfTsKLSNlbGlmIFVTRShDTFVUVEVSKQotdHlwZWRlZiBz
dHJ1Y3QgX0NsdXR0ZXJBY3RvciBDbHV0dGVyQWN0b3I7Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci10
eXBlZGVmIENsdXR0ZXJBY3RvciBQbGF0Zm9ybUxheWVyOwotfTsKICNlbmRpZgogI2VsaWYgUExB
VEZPUk0oRUZMKQogI2lmIFVTRShURVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvRHJhd2luZ0J1ZmZlckNsdXR0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9EcmF3aW5nQnVmZmVy
Q2x1dHRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZmMwN2FjYmJhNjQz
NjUwNjE3NjQwYzI2ODdmMzIxMDliOGQ5NjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRl
ci9EcmF3aW5nQnVmZmVyQ2x1dHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBDb2xsYWJvcmEgTHRkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IFVTRSgzRF9HUkFQSElD
UykKLQotI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEludFNpemUmIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQcmVzZXJ2ZURyYXdpbmdCdWZmZXIgcHJlc2VydmVEcmF3
aW5nQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHBoYVJlcXVpcmVtZW50
IGFscGhhKQotICAgIDogbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIocHJlc2VydmVEcmF3aW5nQnVm
ZmVyKQotICAgICwgbV9hbHBoYShhbHBoYSkKLSAgICAsIG1fZnJvbnRDb2xvckJ1ZmZlcigwKQot
ICAgICwgbV9zZXBhcmF0ZUZyb250VGV4dHVyZShmYWxzZSkKLXsKLX0KLQotRHJhd2luZ0J1ZmZl
cjo6fkRyYXdpbmdCdWZmZXIoKQotewotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotdm9pZCBEcmF3aW5nQnVmZmVyOjpwcmVwYXJlQmFja0J1ZmZlcigpCi17Ci19Ci0KLWJv
b2wgRHJhd2luZ0J1ZmZlcjo6cmVxdWlyZXNDb3B5RnJvbUJhY2tUb0Zyb250QnVmZmVyKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIERyYXdpbmdCdWZmZXI6OmZy
b250Q29sb3JCdWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiBjb2xvckJ1ZmZlcigpOwotfQot
Ci12b2lkIERyYXdpbmdCdWZmZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciopCi17Ci19Ci0KLXZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXJQbGF0Zm9ybUxheWVy
KCkKLXsKLX0KLSNlbmRpZgotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRl
eHQzRENsdXR0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmEzNmMwNDVi
ZTVjNjhkMWUxN2Y0NTNmOTQ2YmJmYjU3MWNiNzNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Ns
dXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEw
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpZiBVU0UoM0RfR1JBUEhJQ1MpCi0K
LSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPHd0
Zi9Ob3RGb3VuZC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQotewotICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJ1
dGVzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwotICAgIHJldHVybiBjb250ZXh0LnJlbGVh
c2UoKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cs
IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNE
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3I6On5JbWFnZUV4dHJhY3RvcigpCi17Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0
aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsIFBs
YXRmb3JtQ29udGV4dENhaXJvKiBjb250ZXh0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093
blB0cjxDb250ZXh0TG9zdENhbGxiYWNrPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxFcnJvck1lc3NhZ2VDYWxsYmFj
az4pCi17Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgp
Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gbV9wcml2YXRlLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLVBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKQot
ewotICAgIHJldHVybiBtX3ByaXZhdGUtPnBsYXRmb3JtQ29udGV4dCgpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1QbGF0Zm9ybUxh
eWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fcHJpdmF0ZS0+cGxhdGZvcm1MYXllcigpOwotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRSgzRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MzQ2YWUyOGZiNzE5ZmJhOTFkZjUwMmUxNDM1ZDU4MjcwNDliY2JjNS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIElnYWxp
YSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAq
ICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCi0KLSNpZiBVU0Uo
M0RfR1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
SG9zdFdpbmRvdyogd2luZG93KQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlKGNvbnRleHQsIHdpbmRvdykpOwotfQotCi1HcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgSG9zdFdpbmRvdyogd2luZG93KQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAg
LCBtX3dpbmRvdyh3aW5kb3cpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCi17Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRm
b3JtQ29udGV4dCgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShDTFVUVEVSKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBhaW50VG9HcmFwaGljc0xheWVyQWN0b3IoQ2x1dHRlckFjdG9yKiwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9w
YWNpdHkpCi17Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoM0RfR1JBUEhJQ1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZDliZTQ3MTBhOWMxNGI3OGFlN2ZiMDgzODE3MTY2Y2RlMThmOGIzOS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgotICogQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAqICBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZV9o
Ci0jZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZV9oCi0KLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLSNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShDTFVUVEVSKQotI2luY2x1ZGUgPGNsdXR0ZXIv
Y2x1dHRlci5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVHJhbnNm
b3JtYXRpb25NYXRyaXg7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93Kik7Ci0gICAgfkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZSgpOwotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBDbHV0dGVyQWN0b3Iq
IHBsYXRmb3JtTGF5ZXIoKSB7IHJldHVybiBtX2xheWVyOyB9Ci0KLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShDTFVUVEVSKQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRv
R3JhcGhpY3NMYXllckFjdG9yKENsdXR0ZXJBY3RvciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOwotI2VuZGlmCi0K
LXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNE
KiwgSG9zdFdpbmRvdyopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAg
ICBIb3N0V2luZG93KiBtX3dpbmRvdzsKLSAgICBDbHV0dGVyQWN0b3IqIG1fbGF5ZXI7Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGlj
c0xheWVyQWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWJmODZlYThm
ODRmMDM2MWMwN2NlMjQ5ODBiNWE2MjdjYzVkMmVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Ns
dXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEsIDIwMTIsIDIwMTMgQ29sbGFib3JhIExpbWl0ZWQK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k
aXRpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJz
aW9uIDIuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0g
KgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUg
dXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKLSAqIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKLSAqIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwKLSAqIEluYy4sIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJBY3Rvci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NMYXllckNsdXR0ZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVu
dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRy
Q2Fpcm8uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotR19ERUZJTkVf
VFlQRShHcmFwaGljc0xheWVyQWN0b3IsIGdyYXBoaWNzX2xheWVyX2FjdG9yLCBDTFVUVEVSX1RZ
UEVfQUNUT1IpCi0KLSNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJfQUNUT1JfR0VUX1BSSVZBVEUob2Jq
KSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBHUkFQSElDU19MQVlFUl9UWVBF
X0FDVE9SLCBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKSkKLQotc3RydWN0IF9HcmFwaGljc0xh
eWVyQWN0b3JQcml2YXRlIHsKLSAgICBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCogbGF5ZXJD
bGllbnQ7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZTsKLQotICAgIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUgbGF5ZXJUeXBlOwotCi0gICAgYm9vbCBmbGF0dGVu
OwotICAgIGJvb2wgZHJhd3NDb250ZW50OwotCi0gICAgZmxvYXQgc2Nyb2xsWDsKLSAgICBmbG9h
dCBzY3JvbGxZOwotCi0gICAgZmxvYXQgdHJhbnNsYXRlWDsKLSAgICBmbG9hdCB0cmFuc2xhdGVZ
OwotfTsKLQotZW51bSB7Ci0gICAgUHJvcGVydHkwLAotCi0gICAgUHJvcGVydHlUcmFuc2xhdGVY
LAotICAgIFByb3BlcnR5VHJhbnNsYXRlWSwKLQotICAgIFByb3BlcnR5TGFzdAotfTsKLQotc3Rh
dGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yQWxsb2NhdGUoQ2x1dHRlckFjdG9yKiwgY29uc3Qg
Q2x1dHRlckFjdG9yQm94KiwgQ2x1dHRlckFsbG9jYXRpb25GbGFncyk7Ci1zdGF0aWMgdm9pZCBn
cmFwaGljc0xheWVyQWN0b3JBcHBseVRyYW5zZm9ybShDbHV0dGVyQWN0b3IqLCBDb2dsTWF0cml4
Kik7Ci1zdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JEaXNwb3NlKEdPYmplY3QqKTsKLXN0
YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckdldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBw
cm9wSUQsIEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKLXN0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJB
Y3RvclNldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wSUQsIGNvbnN0IEdWYWx1ZSosIEdQ
YXJhbVNwZWMqKTsKLXN0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclBhaW50KENsdXR0ZXJB
Y3RvciopOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yRHJhdyhDbHV0dGVy
Q2FudmFzKiwgY2Fpcm9fdCosIGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0LCBHcmFwaGljc0xheWVy
QWN0b3IqKTsKLXN0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclVwZGF0ZVRleHR1cmUoR3Jh
cGhpY3NMYXllckFjdG9yKik7Ci1zdGF0aWMgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDbHV0dGVy
QWN0b3IqLCBHcmFwaGljc0NvbnRleHQmKTsKLQotc3RhdGljIHZvaWQgZ3JhcGhpY3NfbGF5ZXJf
YWN0b3JfY2xhc3NfaW5pdChHcmFwaGljc0xheWVyQWN0b3JDbGFzcyoga2xhc3MpCi17Ci0gICAg
R09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKLSAgICBD
bHV0dGVyQWN0b3JDbGFzcyogYWN0b3JDbGFzcyA9IENMVVRURVJfQUNUT1JfQ0xBU1Moa2xhc3Mp
OwotCi0gICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdyYXBoaWNzTGF5ZXJBY3Rvckdl
dFByb3BlcnR5OwotICAgIG9iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSBncmFwaGljc0xheWVy
QWN0b3JTZXRQcm9wZXJ0eTsKLSAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IGdyYXBoaWNzTGF5
ZXJBY3RvckRpc3Bvc2U7Ci0KLSAgICBhY3RvckNsYXNzLT5hbGxvY2F0ZSA9IGdyYXBoaWNzTGF5
ZXJBY3RvckFsbG9jYXRlOwotICAgIGFjdG9yQ2xhc3MtPmFwcGx5X3RyYW5zZm9ybSA9IGdyYXBo
aWNzTGF5ZXJBY3RvckFwcGx5VHJhbnNmb3JtOwotICAgIGFjdG9yQ2xhc3MtPnBhaW50ID0gZ3Jh
cGhpY3NMYXllckFjdG9yUGFpbnQ7Ci0KLSAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xh
c3MsIHNpemVvZihHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKSk7Ci0KLSAgICBHUGFyYW1TcGVj
KiBwc3BlYyA9IGdfcGFyYW1fc3BlY19mbG9hdCgidHJhbnNsYXRlLXgiLCAiVHJhbnNsYXRlIFgi
LCAiVHJhbnNsYXRpb24gdmFsdWUgZm9yIHRoZSBYIGF4aXMiLCAtR19NQVhGTE9BVCwgR19NQVhG
TE9BVCwgMC4wLCBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUpKTsK
LSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQcm9wZXJ0
eVRyYW5zbGF0ZVgsIHBzcGVjKTsKLQotICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX2Zsb2F0KCJ0
cmFuc2xhdGUteSIsICJUcmFuc2xhdGUgWSIsICJUcmFuc2xhdGlvbiB2YWx1ZSBmb3IgdGhlIFkg
YXlpcyIsIC1HX01BWEZMT0FULCBHX01BWEZMT0FULCAwLjAsIHN0YXRpY19jYXN0PEdQYXJhbUZs
YWdzPihHX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkob2JqZWN0Q2xhc3MsIFByb3BlcnR5VHJhbnNsYXRlWSwgcHNwZWMpOwotfQotCi1zdGF0
aWMgdm9pZCBncmFwaGljc19sYXllcl9hY3Rvcl9pbml0KEdyYXBoaWNzTGF5ZXJBY3Rvciogc2Vs
ZikKLXsKLSAgICBzZWxmLT5wcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1JfR0VUX1BSSVZBVEUo
c2VsZik7Ci0KLSAgICBjbHV0dGVyX2FjdG9yX3NldF9yZWFjdGl2ZShDTFVUVEVSX0FDVE9SKHNl
bGYpLCBGQUxTRSk7Ci0KLSAgICBzZWxmLT5wcml2LT5mbGF0dGVuID0gdHJ1ZTsKLQotICAgIC8v
IERlZmF1bHQgdXNlZCBieSBHcmFwaGljc0xheWVyLgotICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNl
dEFuY2hvclBvaW50KHNlbGYsIDAuNSwgMC41LCAwLjApOwotfQotCi1zdGF0aWMgdm9pZCBncmFw
aGljc0xheWVyQWN0b3JTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwg
Y29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgR3JhcGhpY3NM
YXllckFjdG9yKiBsYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKG9iamVjdCk7Ci0KLSAgICBz
d2l0Y2ggKHByb3BJRCkgewotICAgIGNhc2UgUHJvcGVydHlUcmFuc2xhdGVYOgotICAgICAgICBn
cmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVYKGxheWVyLCBnX3ZhbHVlX2dldF9mbG9hdCh2
YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFByb3BlcnR5VHJhbnNsYXRlWToKLSAg
ICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWShsYXllciwgZ192YWx1ZV9nZXRf
ZmxvYXQodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwc3BlYyk7Ci0g
ICAgfQotfQotCi1zdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JHZXRQcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCi17Ci0gICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IEdSQVBISUNTX0xBWUVSX0FD
VE9SKG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BJRCkgewotICAgIGNhc2UgUHJvcGVydHlU
cmFuc2xhdGVYOgotICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgZ3JhcGhpY3NMYXll
ckFjdG9yR2V0VHJhbnNsYXRlWChsYXllcikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBy
b3BlcnR5VHJhbnNsYXRlWToKLSAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIGdyYXBo
aWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkobGF5ZXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcElELCBwc3BlYyk7Ci0gICAgfQotfQotCi0KLXN0YXRpYyB2b2lkIGdyYXBoaWNzTGF5
ZXJBY3RvckRpc3Bvc2UoR09iamVjdCogb2JqZWN0KQotewotICAgIEdyYXBoaWNzTGF5ZXJBY3Rv
ciogbGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihvYmplY3QpOwotICAgIEdyYXBoaWNzTGF5
ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKLQotICAgIHByaXYtPnN1cmZhY2Uu
Y2xlYXIoKTsKLQotICAgIEdfT0JKRUNUX0NMQVNTKGdyYXBoaWNzX2xheWVyX2FjdG9yX3BhcmVu
dF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKLX0KLQotLy8gQ29waWVkIGZyb20gY2Fpcm8uCi0j
ZGVmaW5lIE1BWF9JTUFHRV9TSVpFIDMyNzY3Ci0KLXN0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJB
Y3RvckFsbG9jYXRlKENsdXR0ZXJBY3Rvciogc2VsZiwgY29uc3QgQ2x1dHRlckFjdG9yQm94KiBi
b3gsIENsdXR0ZXJBbGxvY2F0aW9uRmxhZ3MgZmxhZ3MpCi17Ci0gICAgQ0xVVFRFUl9BQ1RPUl9D
TEFTUyhncmFwaGljc19sYXllcl9hY3Rvcl9wYXJlbnRfY2xhc3MpLT5hbGxvY2F0ZShzZWxmLCBi
b3gsIGZsYWdzKTsKLQotICAgIENsdXR0ZXJDb250ZW50KiBjYW52YXMgPSBjbHV0dGVyX2FjdG9y
X2dldF9jb250ZW50KHNlbGYpOwotICAgIGlmIChjYW52YXMpCi0gICAgICAgIGNsdXR0ZXJfY2Fu
dmFzX3NldF9zaXplKENMVVRURVJfQ0FOVkFTKGNhbnZhcyksIGNsdXR0ZXJfYWN0b3JfZ2V0X3dp
ZHRoKHNlbGYpLCBjbHV0dGVyX2FjdG9yX2dldF9oZWlnaHQoc2VsZikpOwotCi0gICAgLy8gRklY
TUU6IG1heWJlIHdlIGNhbiBjYWNoZSBjaGlsZHJlbiBhbGxvY2F0aW9uIGFuZCBub3QgY2FsbAot
ICAgIC8vIGFsbG9jYXRlIG9uIHRoZW0gdGhpcyBvZnRlbj8KLSAgICBHT3duUHRyPEdMaXN0PiBj
aGlsZHJlbihjbHV0dGVyX2FjdG9yX2dldF9jaGlsZHJlbihzZWxmKSk7Ci0gICAgZm9yIChHTGlz
dCogY2hpbGQgPSBjaGlsZHJlbi5nZXQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsK
LSAgICAgICAgQ2x1dHRlckFjdG9yKiBjaGlsZEFjdG9yID0gQ0xVVFRFUl9BQ1RPUihjaGlsZC0+
ZGF0YSk7Ci0KLSAgICAgICAgZmxvYXQgY2hpbGRXaWR0aCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3dp
ZHRoKGNoaWxkQWN0b3IpOwotICAgICAgICBmbG9hdCBjaGlsZEhlaWdodCA9IGNsdXR0ZXJfYWN0
b3JfZ2V0X2hlaWdodChjaGlsZEFjdG9yKTsKLQotICAgICAgICBDbHV0dGVyQWN0b3JCb3ggY2hp
bGRCb3g7Ci0gICAgICAgIGNoaWxkQm94LngxID0gY2x1dHRlcl9hY3Rvcl9nZXRfeChjaGlsZEFj
dG9yKTsKLSAgICAgICAgY2hpbGRCb3gueTEgPSBjbHV0dGVyX2FjdG9yX2dldF95KGNoaWxkQWN0
b3IpOwotICAgICAgICBjaGlsZEJveC54MiA9IGNoaWxkQm94LngxICsgY2hpbGRXaWR0aDsKLSAg
ICAgICAgY2hpbGRCb3gueTIgPSBjaGlsZEJveC55MSArIGNoaWxkSGVpZ2h0OwotCi0gICAgICAg
IGNsdXR0ZXJfYWN0b3JfYWxsb2NhdGUoY2hpbGRBY3RvciwgJmNoaWxkQm94LCBmbGFncyk7Ci0g
ICAgfQotfQotCi1zdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBcHBseVRyYW5zZm9ybShD
bHV0dGVyQWN0b3IqIGFjdG9yLCBDb2dsTWF0cml4KiBtYXRyaXgpCi17Ci0gICAgR3JhcGhpY3NM
YXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yKS0+cHJp
djsKLQotICAgIC8vIEFwcGx5IHRyYW5zbGF0aW9uIGFuZCBzY3JvbGxpbmcgYXMgYSBzaW5nbGUg
dHJhbnNsYXRpb24uIFRoZXNlCi0gICAgLy8gbmVlZCB0byBjb21lIGJlZm9yZSBhbnl0aGluZyBl
bHNlLCBvdGhlcndpc2UgdGhleSdsbCBiZQotICAgIC8vIGFmZmVjdGVkIGJ5IG90aGVyIG9wZXJh
dGlvbnMgc3VjaCBhcyBzY2FsaW5nLCB3aGljaCBpcyBub3Qgd2hhdAotICAgIC8vIHdlIHdhbnQu
Ci0gICAgZmxvYXQgdHJhbnNsYXRlWCA9IHByaXYtPnNjcm9sbFggKyBwcml2LT50cmFuc2xhdGVY
OwotICAgIGZsb2F0IHRyYW5zbGF0ZVkgPSBwcml2LT5zY3JvbGxZICsgcHJpdi0+dHJhbnNsYXRl
WTsKLQotICAgIGlmICh0cmFuc2xhdGVYIHx8IHRyYW5zbGF0ZVkpCi0gICAgICAgIGNvZ2xfbWF0
cml4X3RyYW5zbGF0ZShtYXRyaXgsIHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVksIDApOwotCi0gICAg
Q29nbE1hdHJpeCBtb2RlbFZpZXdUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwot
ICAgIENMVVRURVJfQUNUT1JfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfcGFyZW50X2NsYXNz
KS0+YXBwbHlfdHJhbnNmb3JtKGFjdG9yLCAmbW9kZWxWaWV3VHJhbnNmb3JtKTsKLQotICAgIGlm
IChwcml2LT5mbGF0dGVuKQotICAgICAgICBtb2RlbFZpZXdUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgmbW9kZWxWaWV3VHJhbnNmb3JtKS50bzJkVHJhbnNmb3JtKCk7Ci0gICAgY29n
bF9tYXRyaXhfbXVsdGlwbHkobWF0cml4LCBtYXRyaXgsICZtb2RlbFZpZXdUcmFuc2Zvcm0pOwot
fQotCi1zdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JQYWludChDbHV0dGVyQWN0b3IqIGFj
dG9yKQotewotICAgIEdPd25QdHI8R0xpc3Q+IGNoaWxkcmVuKGNsdXR0ZXJfYWN0b3JfZ2V0X2No
aWxkcmVuKGFjdG9yKSk7Ci0gICAgZm9yIChHTGlzdCogY2hpbGQgPSBjaGlsZHJlbi5nZXQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpCi0gICAgICAgIGNsdXR0ZXJfYWN0b3JfcGFpbnQo
Q0xVVFRFUl9BQ1RPUihjaGlsZC0+ZGF0YSkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3JhcGhp
Y3NMYXllckFjdG9yRHJhdyhDbHV0dGVyQ2FudmFzKiB0ZXh0dXJlLCBjYWlyb190KiBjciwgZ2lu
dCB3aWR0aCwgZ2ludCBoZWlnaHQsIEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCi17Ci0gICAg
aWYgKCF3aWR0aCB8fCAhaGVpZ2h0KQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dChjcik7Ci0gICAgY29udGV4dC5jbGVhclJlY3QoRmxvYXRSZWN0
KDAsIDAsIHdpZHRoLCBoZWlnaHQpKTsKLQotICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUq
IHByaXYgPSBsYXllci0+cHJpdjsKLSAgICBpZiAocHJpdi0+c3VyZmFjZSkgewotICAgICAgICBn
aW50IHN1cmZhY2VXaWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHByaXYtPnN1
cmZhY2UuZ2V0KCkpOwotICAgICAgICBnaW50IHN1cmZhY2VIZWlnaHQgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9oZWlnaHQocHJpdi0+c3VyZmFjZS5nZXQoKSk7Ci0KLSAgICAgICAgRmxvYXRS
ZWN0IHNyY1JlY3QoMC4wLCAwLjAsIHN0YXRpY19jYXN0PGZsb2F0PihzdXJmYWNlV2lkdGgpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oc3VyZmFjZUhlaWdodCkpOwotICAgICAgICBGbG9hdFJlY3QgZGVz
dFJlY3QoMC4wLCAwLjAsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChwcml2LT5zdXJmYWNlLmdldCgpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgJmNvbnRleHQpOwotICAgIH0KLQotICAgIGlmIChwcml2LT5sYXllclR5
cGUgPT0gR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZVdlYkxheWVyKQotICAgICAgICBk
cmF3TGF5ZXJDb250ZW50cyhDTFVUVEVSX0FDVE9SKGxheWVyKSwgY29udGV4dCk7Ci0KLSAgICBy
ZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yVXBkYXRlVGV4
dHVyZShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQotewotICAgIEdyYXBoaWNzTGF5ZXJBY3Rv
clByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKLSAgICBBU1NFUlQocHJpdi0+bGF5ZXJUeXBl
ICE9IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGVWaWRlb0xheWVyKTsKLQotICAgIENs
dXR0ZXJBY3RvciogYWN0b3IgPSBDTFVUVEVSX0FDVE9SKGxheWVyKTsKLSAgICBHUmVmUHRyPENs
dXR0ZXJDb250ZW50PiBjYW52YXMgPSBjbHV0dGVyX2FjdG9yX2dldF9jb250ZW50KGFjdG9yKTsK
LSAgICBpZiAoY2FudmFzKSB7Ci0gICAgICAgIC8vIE5vdGhpbmcgbmVlZHMgYSB0ZXh0dXJlLCBy
ZW1vdmUgdGhlIG9uZSB3ZSBoYXZlLCBpZiBhbnkuCi0gICAgICAgIGlmICghcHJpdi0+ZHJhd3ND
b250ZW50ICYmICFwcml2LT5zdXJmYWNlKSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMoY2FudmFzLmdldCgpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihncmFwaGljc0xheWVyQWN0b3JEcmF3KSwgbGF5ZXIpOwotICAgICAgICAgICAgY2x1dHRlcl9h
Y3Rvcl9zZXRfY29udGVudChhY3RvciwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIFdlIHNob3VsZCBoYXZlIGEgdGV4dHVyZSwgc28gY3JlYXRlIG9uZS4K
LSAgICBjYW52YXMgPSBhZG9wdEdSZWYoY2x1dHRlcl9jYW52YXNfbmV3KCkpOwotICAgIGNsdXR0
ZXJfYWN0b3Jfc2V0X2NvbnRlbnQoYWN0b3IsIGNhbnZhcy5nZXQoKSk7Ci0KLSAgICBpbnQgd2lk
dGggPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGNsdXR0ZXJfYWN0b3JfZ2V0X3dp
ZHRoKGFjdG9yKSkpLCAxKTsKLSAgICBpbnQgaGVpZ2h0ID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8
aW50PihjZWlsZihjbHV0dGVyX2FjdG9yX2dldF9oZWlnaHQoYWN0b3IpKSksIDEpOwotICAgIGNs
dXR0ZXJfY2FudmFzX3NldF9zaXplKENMVVRURVJfQ0FOVkFTKGNhbnZhcy5nZXQoKSksIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChjYW52YXMuZ2V0KCksICJkcmF3Iiwg
R19DQUxMQkFDSyhncmFwaGljc0xheWVyQWN0b3JEcmF3KSwgbGF5ZXIpOwotfQotCi0vLyBEcmF3
IGNvbnRlbnQgaW50byB0aGUgbGF5ZXIuCi1zdGF0aWMgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhD
bHV0dGVyQWN0b3IqIGFjdG9yLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgR3Jh
cGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9y
KS0+cHJpdjsKLQotICAgIGlmICghcHJpdi0+ZHJhd3NDb250ZW50IHx8ICFwcml2LT5sYXllckNs
aWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50
PihjbHV0dGVyX2FjdG9yX2dldF93aWR0aChhY3RvcikpOwotICAgIGludCBoZWlnaHQgPSBzdGF0
aWNfY2FzdDxpbnQ+KGNsdXR0ZXJfYWN0b3JfZ2V0X2hlaWdodChhY3RvcikpOwotICAgIEludFJl
Y3QgY2xpcCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIC8vIEFwcGx5IHRoZSBwYWludGVk
IGNvbnRlbnQgdG8gdGhlIGxheWVyLgotICAgIHByaXYtPmxheWVyQ2xpZW50LT5wbGF0Zm9ybUNs
dXR0ZXJMYXllclBhaW50Q29udGVudHMoY29udGV4dCwgY2xpcCk7Ci19Ci0KLXN0YXRpYyBHcmFw
aGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXJBY3Rvck5ldyhHcmFwaGljc0xheWVyQ2x1dHRl
cjo6TGF5ZXJUeXBlIHR5cGUpCi17Ci0gICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IEdS
QVBISUNTX0xBWUVSX0FDVE9SKGdfb2JqZWN0X25ldyhHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9S
LCAwKSk7Ci0gICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2
OwotCi0gICAgcHJpdi0+bGF5ZXJUeXBlID0gdHlwZTsKLSAgICBpZiAocHJpdi0+bGF5ZXJUeXBl
ID09IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllcikKLSAgICAg
ICAgcHJpdi0+ZmxhdHRlbiA9IGZhbHNlOwotCi0gICAgcmV0dXJuIGxheWVyOwotfQotCi1HcmFw
aGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhDbGllbnQoR3JhcGhpY3NM
YXllckNsdXR0ZXI6OkxheWVyVHlwZSB0eXBlLCBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCog
bGF5ZXJDbGllbnQpCi17Ci0gICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IGdyYXBoaWNz
TGF5ZXJBY3Rvck5ldyh0eXBlKTsKLSAgICBncmFwaGljc0xheWVyQWN0b3JTZXRDbGllbnQobGF5
ZXIsIGxheWVyQ2xpZW50KTsKLQotICAgIHJldHVybiBsYXllcjsKLX0KLQotdm9pZCBncmFwaGlj
c0xheWVyQWN0b3JTZXRDbGllbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgUGxhdGZvcm1D
bHV0dGVyTGF5ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBsYXllci0+cHJpdi0+bGF5ZXJDbGll
bnQgPSBjbGllbnQ7Ci19Ci0KLVBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50KiBncmFwaGljc0xh
eWVyQWN0b3JHZXRDbGllbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKLXsKLSAgICByZXR1
cm4gbGF5ZXItPnByaXYtPmxheWVyQ2xpZW50OwotfQotCi12b2lkIGdyYXBoaWNzTGF5ZXJBY3Rv
clNldFN1cmZhY2UoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgY2Fpcm9fc3VyZmFjZV90KiBz
dXJmYWNlKQotewotICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+
cHJpdjsKLSAgICBwcml2LT5zdXJmYWNlID0gc3VyZmFjZTsKLSAgICBncmFwaGljc0xheWVyQWN0
b3JVcGRhdGVUZXh0dXJlKGxheWVyKTsKLX0KLQotdm9pZCBncmFwaGljc0xheWVyQWN0b3JJbnZh
bGlkYXRlUmVjdGFuZ2xlKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQotewotICAgIENsdXR0ZXJDb250ZW50KiBjYW52YXMgPSBjbHV0dGVyX2Fj
dG9yX2dldF9jb250ZW50KENMVVRURVJfQUNUT1IobGF5ZXIpKTsKLSAgICBpZiAoIWNhbnZhcykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IE5lZWQgdG8gaW52YWxpZGF0ZSBhIHNw
ZWNpZmljIGFyZWE/Ci0gICAgY2x1dHRlcl9jb250ZW50X2ludmFsaWRhdGUoY2FudmFzKTsKLX0K
LQotdm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRBbmNob3JQb2ludChHcmFwaGljc0xheWVyQWN0
b3IqIGxheWVyLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQotewotICAgIENsdXR0ZXJBY3Rv
ciogYWN0b3IgPSBDTFVUVEVSX0FDVE9SKGxheWVyKTsKLSAgICBjbHV0dGVyX2FjdG9yX3NldF9w
aXZvdF9wb2ludChhY3RvciwgeCwgeSk7Ci0gICAgY2x1dHRlcl9hY3Rvcl9zZXRfcGl2b3RfcG9p
bnRfeihhY3Rvciwgeik7Ci19Ci0KLXZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U2Nyb2xsUG9z
aXRpb24oR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAg
ICBpZiAoeCA+IDAgfHwgeSA+IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5
ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKLSAgICBwcml2LT5zY3JvbGxYID0g
eDsKLSAgICBwcml2LT5zY3JvbGxZID0geTsKLQotICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVk
cmF3KENMVVRURVJfQUNUT1IobGF5ZXIpKTsKLX0KLQotdm9pZCBncmFwaGljc0xheWVyQWN0b3JT
ZXRTdWJsYXllcnMoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgR3JhcGhpY3NMYXllckFjdG9y
TGlzdCYgc3ViTGF5ZXJzKQotewotICAgIGlmIChzdWJMYXllcnMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGNsdXR0ZXJfYWN0b3JfcmVtb3ZlX2FsbF9jaGlsZHJlbihDTFVUVEVSX0FDVE9SKGxheWVy
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDbHV0dGVyQWN0b3IqIG5ld1BhcmVu
dEFjdG9yID0gQ0xVVFRFUl9BQ1RPUihsYXllcik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdWJMYXllcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ2x1dHRlckFjdG9yKiBjaGlsZEFj
dG9yID0gQ0xVVFRFUl9BQ1RPUihzdWJMYXllcnNbaV0uZ2V0KCkpOwotICAgICAgICBDbHV0dGVy
QWN0b3IqIG9sZFBhcmVudEFjdG9yID0gY2x1dHRlcl9hY3Rvcl9nZXRfcGFyZW50KGNoaWxkQWN0
b3IpOwotICAgICAgICBpZiAob2xkUGFyZW50QWN0b3IpIHsKLSAgICAgICAgICAgIGlmIChvbGRQ
YXJlbnRBY3RvciA9PSBuZXdQYXJlbnRBY3RvcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIGNsdXR0ZXJfYWN0b3JfcmVtb3ZlX2NoaWxkKG9sZFBhcmVudEFjdG9yLCBj
aGlsZEFjdG9yKTsKLSAgICAgICAgfQotICAgICAgICBjbHV0dGVyX2FjdG9yX2FkZF9jaGlsZChu
ZXdQYXJlbnRBY3RvciwgY2hpbGRBY3Rvcik7Ci0gICAgfQotfQotCi12b2lkIGdyYXBoaWNzTGF5
ZXJBY3RvclJlbW92ZUZyb21TdXBlckxheWVyKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCi17
Ci0gICAgQ2x1dHRlckFjdG9yKiBhY3RvciA9IENMVVRURVJfQUNUT1IobGF5ZXIpOwotICAgIENs
dXR0ZXJBY3RvciogcGFyZW50QWN0b3IgPSBjbHV0dGVyX2FjdG9yX2dldF9wYXJlbnQoYWN0b3Ip
OwotICAgIGlmICghcGFyZW50QWN0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsdXR0ZXJf
YWN0b3JfcmVtb3ZlX2NoaWxkKHBhcmVudEFjdG9yLCBhY3Rvcik7Ci19Ci0KLUdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjpMYXllclR5cGUgZ3JhcGhpY3NMYXllckFjdG9yR2V0TGF5ZXJUeXBlKEdyYXBo
aWNzTGF5ZXJBY3RvciogbGF5ZXIpCi17Ci0gICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSog
cHJpdiA9IGxheWVyLT5wcml2OwotICAgIHJldHVybiBwcml2LT5sYXllclR5cGU7Ci19Ci0KLXZv
aWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5
ZXIsIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUgbGF5ZXJUeXBlKQotewotICAgIEdy
YXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKLSAgICBwcml2LT5s
YXllclR5cGUgPSBsYXllclR5cGU7Ci19Ci0KLXZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJh
bnNsYXRlWChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBH
cmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7Ci0gICAgcHJpdi0+
dHJhbnNsYXRlWCA9IHZhbHVlOwotICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVkcmF3KENMVVRU
RVJfQUNUT1IobGF5ZXIpKTsKLX0KLQotZmxvYXQgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNs
YXRlWChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQotewotICAgIEdyYXBoaWNzTGF5ZXJBY3Rv
clByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKLSAgICByZXR1cm4gcHJpdi0+dHJhbnNsYXRl
WDsKLX0KLQotdm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVZKEdyYXBoaWNzTGF5
ZXJBY3RvciogbGF5ZXIsIGZsb2F0IHZhbHVlKQotewotICAgIEdyYXBoaWNzTGF5ZXJBY3RvclBy
aXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKLSAgICBwcml2LT50cmFuc2xhdGVZID0gdmFsdWU7
Ci0gICAgY2x1dHRlcl9hY3Rvcl9xdWV1ZV9yZWRyYXcoQ0xVVFRFUl9BQ1RPUihsYXllcikpOwot
fQotCi1mbG9hdCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVZKEdyYXBoaWNzTGF5ZXJB
Y3RvciogbGF5ZXIpCi17Ci0gICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxh
eWVyLT5wcml2OwotICAgIHJldHVybiBwcml2LT50cmFuc2xhdGVZOwotfQotCi12b2lkIGdyYXBo
aWNzTGF5ZXJBY3RvclNldERyYXdzQ29udGVudChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBi
b29sIGRyYXdzQ29udGVudCkKLXsKLSAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2
ID0gbGF5ZXItPnByaXY7Ci0KLSAgICBpZiAoZHJhd3NDb250ZW50ID09IHByaXYtPmRyYXdzQ29u
dGVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJpdi0+ZHJhd3NDb250ZW50ID0gZHJhd3ND
b250ZW50OwotCi0gICAgZ3JhcGhpY3NMYXllckFjdG9yVXBkYXRlVGV4dHVyZShsYXllcik7Ci19
Ci0KLXZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0RmxhdHRlbihHcmFwaGljc0xheWVyQWN0b3Iq
IGxheWVyLCBib29sIGZsYXR0ZW4pCi17Ci0gICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSog
cHJpdiA9IGxheWVyLT5wcml2OwotICAgIGlmIChmbGF0dGVuID09IHByaXYtPmZsYXR0ZW4pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHByaXYtPmZsYXR0ZW4gPSBmbGF0dGVuOwotfQotCi12b2lk
IGdyYXBoaWNzTGF5ZXJBY3RvclNldE1hc2tzVG9Cb3VuZHMoR3JhcGhpY3NMYXllckFjdG9yKiBs
YXllciwgYm9vbCBtYXNrc1RvQm91bmRzKQotewotICAgIENsdXR0ZXJBY3RvciogYWN0b3IgPSBD
TFVUVEVSX0FDVE9SKGxheWVyKTsKLSAgICBpZiAobWFza3NUb0JvdW5kcykKLSAgICAgICAgY2x1
dHRlcl9hY3Rvcl9zZXRfY2xpcChhY3RvciwgMCwgMCwgY2x1dHRlcl9hY3Rvcl9nZXRfd2lkdGgo
YWN0b3IpLCBjbHV0dGVyX2FjdG9yX2dldF9oZWlnaHQoYWN0b3IpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGNsdXR0ZXJfYWN0b3JfcmVtb3ZlX2NsaXAoYWN0b3IpOwotfQotCi1XZWJDb3JlOjpQbGF0
Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGdyYXBoaWNzTGF5ZXJBY3RvckdldEFuaW1hdGlvbkZvcktl
eShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBjb25zdCBTdHJpbmcga2V5KQotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qPihnX29i
amVjdF9nZXRfZGF0YShHX09CSkVDVChsYXllciksIGtleS51dGY4KCkuZGF0YSgpKSk7Ci19Ci0K
LSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVy
QWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NjNjQ1MjFlM2JiNmRkYWQ2
MjE5MzdmODJiODc0ZTZkMjMzYTRhMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzTGF5ZXJBY3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgMjAxMSwgMjAxMiBDb2xsYWJvcmEgTGltaXRlZAotICogQ29weXJpZ2h0IChD
KSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMi4xLCBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI
T1VUIEFOWQotICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICog
SW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx
IFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBHcmFwaGljc0xheWVyQWN0b3JfaAotI2RlZmluZSBH
cmFwaGljc0xheWVyQWN0b3JfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
Ci0jaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsdXR0ZXIuaCIKLSNpbmNsdWRlIDxjbHV0dGVyL2Ns
dXR0ZXIuaD4KLSNpbmNsdWRlIDxjb2dsL2NvZ2wuaD4KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUiBn
cmFwaGljc19sYXllcl9hY3Rvcl9nZXRfdHlwZSgpCi0KLSNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJf
QUNUT1Iob2JqKSBcCi0gICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBcCi0g
ICAgR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUiwgR3JhcGhpY3NMYXllckFjdG9yKSkKLQotI2Rl
ZmluZSBHUkFQSElDU19MQVlFUl9BQ1RPUl9DTEFTUyhrbGFzcykgXAotICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBcCi0gICAgR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUiwg
R3JhcGhpY3NMYXllckFjdG9yQ2xhc3MpKQotCi0jZGVmaW5lIEdSQVBISUNTX0xBWUVSX0lTX0FD
VE9SKG9iaikgXAotICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgXAotICAg
IEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1IpKQotCi0jZGVmaW5lIEdSQVBISUNTX0xBWUVSX0lT
X0FDVE9SX0NMQVNTKGtsYXNzKSBcCi0gICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksIFwKLSAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SKSkKLQotI2RlZmluZSBHUkFQSElD
U19MQVlFUl9BQ1RPUl9HRVRfQ0xBU1Mob2JqKSBcCi0gICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksIFwKLSAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SLCBHcmFwaGljc0xh
eWVyQWN0b3JDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9HcmFwaGljc0xheWVyQWN0b3IgR3Jh
cGhpY3NMYXllckFjdG9yOwotdHlwZWRlZiBzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJBY3RvckNsYXNz
IEdyYXBoaWNzTGF5ZXJBY3RvckNsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJB
Y3RvclByaXZhdGUgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZTsKLQotLyoqCi0gKiBHcmFwaGlj
c0xheWVyQWN0b3I6Ci0gKgotICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBw
cml2YXRlIGFuZCBzaG91bGQgb25seSBiZSBhY2Nlc3NlZAotICogdGhyb3VnaCB0aGUgcHVibGlj
IEFQSS4KLSAqLwotc3RydWN0IF9HcmFwaGljc0xheWVyQWN0b3IgewotICAgIENsdXR0ZXJSZWN0
YW5nbGUgcGFyZW50OwotICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUgKnByaXY7Ci19Owot
Ci1zdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJBY3RvckNsYXNzIHsKLSAgICBDbHV0dGVyUmVjdGFuZ2xl
Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfZ2V0
X3R5cGUodm9pZCkgR19HTlVDX0NPTlNUOwotCi1HcmFwaGljc0xheWVyQWN0b3IqIGdyYXBoaWNz
TGF5ZXJBY3Rvck5ld1dpdGhDbGllbnQoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6Okxh
eWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqKTsKLQotV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSBncmFwaGljc0xheWVyQWN0b3JHZXRM
YXllclR5cGUoR3JhcGhpY3NMYXllckFjdG9yKik7Ci12b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNl
dExheWVyVHlwZShHcmFwaGljc0xheWVyQWN0b3IqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1
dHRlcjo6TGF5ZXJUeXBlKTsKLQotV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQq
IGdyYXBoaWNzTGF5ZXJBY3RvckdldENsaWVudChHcmFwaGljc0xheWVyQWN0b3IqKTsKLXZvaWQg
Z3JhcGhpY3NMYXllckFjdG9yU2V0Q2xpZW50KEdyYXBoaWNzTGF5ZXJBY3RvciosIFdlYkNvcmU6
OlBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50Kik7Ci0KLXZvaWQgZ3JhcGhpY3NMYXllckFjdG9y
SW52YWxpZGF0ZVJlY3RhbmdsZShHcmFwaGljc0xheWVyQWN0b3IqLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKTsKLXZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U2Nyb2xsUG9zaXRpb24oR3Jh
cGhpY3NMYXllckFjdG9yKiwgZmxvYXQsIGZsb2F0KTsgCi12b2lkIGdyYXBoaWNzTGF5ZXJBY3Rv
clNldFRyYW5zbGF0ZVgoR3JhcGhpY3NMYXllckFjdG9yKiwgZmxvYXQpOwotZmxvYXQgZ3JhcGhp
Y3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWChHcmFwaGljc0xheWVyQWN0b3IqKTsKLXZvaWQgZ3Jh
cGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWShHcmFwaGljc0xheWVyQWN0b3IqLCBmbG9hdCk7
Ci1mbG9hdCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVZKEdyYXBoaWNzTGF5ZXJBY3Rv
ciopOwotCi12b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZUZyb21TdXBlckxheWVyKEdyYXBo
aWNzTGF5ZXJBY3RvciopOwotCi12b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldEFuY2hvclBvaW50
KEdyYXBoaWNzTGF5ZXJBY3RvciosIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwotdm9pZCBncmFwaGlj
c0xheWVyQWN0b3JTZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKiwgYm9vbCBkcmF3
c0NvbnRlbnQpOwotdm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRGbGF0dGVuKEdyYXBoaWNzTGF5
ZXJBY3RvciosIGJvb2wgZmxhdHRlbik7Ci12b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldE1hc2tz
VG9Cb3VuZHMoR3JhcGhpY3NMYXllckFjdG9yKiwgYm9vbCBtYXNrc1RvQm91bmRzKTsKLXZvaWQg
Z3JhcGhpY3NMYXllckFjdG9yU2V0U3VibGF5ZXJzKEdyYXBoaWNzTGF5ZXJBY3RvciosIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJBY3Rvckxpc3QmKTsKLXZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0
U3VyZmFjZShHcmFwaGljc0xheWVyQWN0b3IqLCBjYWlyb19zdXJmYWNlX3QqKTsKLQotV2ViQ29y
ZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBncmFwaGljc0xheWVyQWN0b3JHZXRBbmltYXRp
b25Gb3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiwgY29uc3QgU3RyaW5nKTsKLQotR19FTkRfREVD
TFMKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmIC8q
IEdyYXBoaWNzTGF5ZXJBY3Rvcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmY4NjM1YTQxMzE4MjA0OTRlZDcyNzY3
Y2MwYTUzNmQ3NDU4YmU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NM
YXllckNsdXR0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbHV0dGVyLmgiCi0KLSNpbmNsdWRlICJBbmltYXRpb24uaCIK
LSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0xheWVyQWN0b3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyRmFj
dG9yeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fp
cm8uaCIKLSNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJT
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCi0j
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gSWYgd2Ugc2VuZCBhIGR1
cmF0aW9uIG9mIDAgdG8gQ2x1dHRlclRpbWVsaW5lLCB0aGVuIGl0IHdpbGwgZmFpbCB0byBzZXQg
dGhlIGR1cmF0aW9uLiAKLS8vIFNvIHNlbmQgYSB2ZXJ5IHNtYWxsIHZhbHVlIGluc3RlYWQuCi1z
dGF0aWMgY29uc3QgZmxvYXQgY0FuaW1hdGlvbkFsbW9zdFplcm9EdXJhdGlvbiA9IDFlLTNmOwot
Ci1zdGF0aWMgYm9vbCBpc1RyYW5zZm9ybVR5cGVUcmFuc2Zvcm1hdGlvbk1hdHJpeChUcmFuc2Zv
cm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtVHlwZSkKLXsKLSAgICBzd2l0Y2gg
KHRyYW5zZm9ybVR5cGUpIHsKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOgot
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlNLRVc6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDoKLSAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgotICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpNQVRSSVhfM0Q6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQ
RUNUSVZFOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWToKLSAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgaXNU
cmFuc2Zvcm1UeXBlRmxvYXRQb2ludDNEKFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSB0cmFuc2Zvcm1UeXBlKQotewotICAgIHN3aXRjaCAodHJhbnNmb3JtVHlwZSkgewotICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRToKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6U0NBTEVfM0Q6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURToKLSAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1z
dGF0aWMgYm9vbCBpc1RyYW5zZm9ybVR5cGVOdW1iZXIoVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIHRyYW5zZm9ybVR5cGUpCi17Ci0gICAgcmV0dXJuICFpc1RyYW5zZm9ybVR5cGVU
cmFuc2Zvcm1hdGlvbk1hdHJpeCh0cmFuc2Zvcm1UeXBlKSAmJiAhaXNUcmFuc2Zvcm1UeXBlRmxv
YXRQb2ludDNEKHRyYW5zZm9ybVR5cGUpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1G
dW5jdGlvblZhbHVlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtT3AsIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1UeXBlLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBmbG9hdCYgdmFsdWUpCi17Ci0gICAgc3dpdGNoICh0cmFuc2Zvcm1UeXBlKSB7Ci0g
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURToKLSAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Uk9UQVRFX1g6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9Z
OgotICAgICAgICB2YWx1ZSA9IHRyYW5zZm9ybU9wID8gbmFycm93UHJlY2lzaW9uVG9GbG9hdChk
ZWcycmFkKHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5z
Zm9ybU9wKS0+YW5nbGUoKSkpIDogMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlNDQUxFX1g6Ci0gICAgICAgIHZhbHVlID0gdHJhbnNmb3JtT3AgPyBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uKj4odHJhbnNmb3JtT3ApLT54KCkpIDogMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6Ci0gICAgICAgIHZhbHVlID0gdHJhbnNmb3JtT3Ag
PyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uKj4odHJhbnNmb3JtT3ApLT55KCkpIDogMTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6Ci0gICAgICAgIHZhbHVlID0gdHJhbnNm
b3JtT3AgPyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3ApLT56KCkpIDogMTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgotICAgICAgICB2YWx1
ZSA9IHRyYW5zZm9ybU9wID8gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGF0aWNfY2FzdDxjb25z
dCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcCktPngoc2l6ZSkpIDog
MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV9ZOgotICAgICAgICB2YWx1ZSA9IHRyYW5zZm9ybU9wID8gbmFycm93UHJlY2lzaW9uVG9GbG9h
dChzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zv
cm1PcCktPnkoc2l6ZSkpIDogMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9aOgotICAgICAgICB2YWx1ZSA9IHRyYW5zZm9ybU9wID8gbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24qPih0cmFuc2Zvcm1PcCktPnooc2l6ZSkpIDogMDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBnZXRU
cmFuc2Zvcm1GdW5jdGlvblZhbHVlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3Jt
T3AsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1UeXBlLCBjb25z
dCBJbnRTaXplJiBzaXplLCBGbG9hdFBvaW50M0QmIHZhbHVlKQotewotICAgIHN3aXRjaCAodHJh
bnNmb3JtVHlwZSkgewotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRToKLSAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6Ci0gICAgICAgIHZhbHVlLnNldFgodHJh
bnNmb3JtT3AgPyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0YXRpY19jYXN0PGNvbnN0IFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3ApLT54KCkpIDogMSk7Ci0gICAgICAgIHZh
bHVlLnNldFkodHJhbnNmb3JtT3AgPyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0YXRpY19jYXN0
PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3ApLT55KCkpIDogMSk7
Ci0gICAgICAgIHZhbHVlLnNldFoodHJhbnNmb3JtT3AgPyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3Ap
LT56KCkpIDogMSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEU6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoK
LSAgICAgICAgdmFsdWUuc2V0WCh0cmFuc2Zvcm1PcCA/IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
c3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3Jt
T3ApLT54KHNpemUpKSA6IDApOwotICAgICAgICB2YWx1ZS5zZXRZKHRyYW5zZm9ybU9wID8gbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24qPih0cmFuc2Zvcm1PcCktPnkoc2l6ZSkpIDogMCk7Ci0gICAgICAgIHZhbHVlLnNl
dFoodHJhbnNmb3JtT3AgPyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0YXRpY19jYXN0PGNvbnN0
IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wKS0+eihzaXplKSkgOiAw
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi1zdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1GdW5jdGlvblZhbHVlKGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbiogdHJhbnNmb3JtT3AsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSB0cmFuc2Zvcm1UeXBlLCBjb25zdCBJbnRTaXplJiBzaXplLCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdmFsdWUpCi17Ci0gICAgc3dpdGNoICh0cmFuc2Zvcm1UeXBlKSB7Ci0gICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tF
V19ZOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOgotICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpNQVRSSVg6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFU
RV8zRDoKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOgotICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRToKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6SURFTlRJVFk6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6Ci0gICAg
ICAgIGlmICh0cmFuc2Zvcm1PcCkKLSAgICAgICAgICAgIHRyYW5zZm9ybU9wLT5hcHBseSh2YWx1
ZSwgc2l6ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlLm1ha2VJZGVudGl0eSgp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OlZhbHVlRnVuY3Rpb25UeXBlIGdl
dFZhbHVlRnVuY3Rpb25OYW1lRm9yVHJhbnNmb3JtT3BlcmF0aW9uKFRyYW5zZm9ybU9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1UeXBlKQotewotICAgIC8vIFVzZSBsaXRlcmFsIHN0
cmluZ3MgdG8gYXZvaWQgbGluay10aW1lIGRlcGVuZGVuY3kgb24gdGhvc2Ugc3ltYm9scy4KLSAg
ICBzd2l0Y2ggKHRyYW5zZm9ybVR5cGUpIHsKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
Uk9UQVRFX1g6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OlJvdGF0
ZVg7Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOgotICAgICAgICByZXR1
cm4gUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpSb3RhdGVZOwotICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpST1RBVEU6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OlJvdGF0ZVo7Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6Ci0gICAg
ICAgIHJldHVybiBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OlNjYWxlWDsKLSAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWToKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ2x1dHRl
ckFuaW1hdGlvbjo6U2NhbGVZOwotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9a
OgotICAgICAgICByZXR1cm4gUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpTY2FsZVo7Ci0gICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgotICAgICAgICByZXR1cm4gUGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpUcmFuc2xhdGVYOwotICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpUUkFOU0xBVEVfWToKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ2x1dHRlckFuaW1h
dGlvbjo6VHJhbnNsYXRlWTsKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1o6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OlRyYW5zbGF0ZVo7
Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOgotICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTQ0FMRV8zRDoKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ2x1dHRlckFuaW1h
dGlvbjo6U2NhbGU7Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURToKLSAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgotICAgICAgICByZXR1cm4g
UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpUcmFuc2xhdGU7Ci0gICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246Ok1BVFJJWF8zRDoKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ2x1dHRlckFuaW1h
dGlvbjo6TWF0cml4OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybUNsdXR0
ZXJBbmltYXRpb246Ok5vVmFsdWVGdW5jdGlvbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBTdHJpbmcg
cHJvcGVydHlJZFRvU3RyaW5nKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsKLSAgICBz
d2l0Y2ggKHByb3BlcnR5KSB7Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNm
b3JtOgotICAgICAgICByZXR1cm4gInRyYW5zZm9ybSI7Ci0gICAgY2FzZSBBbmltYXRlZFByb3Bl
cnR5T3BhY2l0eToKLSAgICAgICAgcmV0dXJuICJvcGFjaXR5IjsKLSAgICBjYXNlIEFuaW1hdGVk
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6Ci0gICAgICAgIHJldHVybiAiYmFja2dyb3VuZENvbG9y
IjsKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXI6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQ6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gIiI7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgYW5pbWF0aW9uSWRlbnRpZmll
cihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0
eSwgaW50IGluZGV4KQotewotICAgIHJldHVybiBhbmltYXRpb25OYW1lICsgJ18nICsgU3RyaW5n
OjpudW1iZXIocHJvcGVydHkpICsgJ18nICsgU3RyaW5nOjpudW1iZXIoaW5kZXgpOwotfQotCi1z
dGF0aWMgYm9vbCBhbmltYXRpb25IYXNTdGVwc1RpbWluZ0Z1bmN0aW9uKGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSkKLXsKLSAgICBpZiAo
YW5pbS0+dGltaW5nRnVuY3Rpb24oKS0+aXNTdGVwc1RpbWluZ0Z1bmN0aW9uKCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlTGlzdC5z
aXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rp
b24gPSB2YWx1ZUxpc3QuYXQoaSkudGltaW5nRnVuY3Rpb24oKTsKLSAgICAgICAgaWYgKHRpbWlu
Z0Z1bmN0aW9uICYmIHRpbWluZ0Z1bmN0aW9uLT5pc1N0ZXBzVGltaW5nRnVuY3Rpb24oKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ly8gVGhpcyBpcyB0aGUgaG9vayBmb3IgV2ViQ29yZSBjb21wb3NpdG9yIHRvIGtub3cgdGhhdCB0
aGUgd2ViS2l0IGNsdXR0ZXIgcG9ydCBpbXBsZW1lbnRzCi0vLyBjb21wb3NpdGluZyB3aXRoIEdy
YXBoaWNzTGF5ZXJDbHV0dGVyLgotUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xh
eWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckZhY3RvcnkqIGZhY3RvcnksIEdyYXBoaWNzTGF5ZXJD
bGllbnQqIGNsaWVudCkKLXsKLSAgICBpZiAoIWZhY3RvcnkpCi0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgR3JhcGhpY3NMYXllckNsdXR0ZXIoY2xpZW50KSk7Ci0KLSAgICByZXR1cm4gZmFj
dG9yeS0+Y3JlYXRlR3JhcGhpY3NMYXllcihjbGllbnQpOwotfQotCi1QYXNzT3duUHRyPEdyYXBo
aWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGll
bnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHcmFwaGljc0xheWVyQ2x1dHRlcihjbGll
bnQpKTsKLX0KLQotR3JhcGhpY3NMYXllckNsdXR0ZXI6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyKEdy
YXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKLSAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQot
ICAgICwgbV9jb250ZW50c0xheWVyUHVycG9zZShOb0NvbnRlbnRzTGF5ZXIpCi0gICAgLCBtX3Vu
Y29tbWl0dGVkQ2hhbmdlcygwKQotewotICAgIC8vIENsdXR0ZXJSZWN0YW5nbGUgd2lsbCBiZSB1
c2VkIHRvIHNob3cgdGhlIGRlYnVnIGJvcmRlci4KLSAgICBtX2xheWVyID0gZ3JhcGhpY3NMYXll
ckFjdG9yTmV3V2l0aENsaWVudChMYXllclR5cGVXZWJMYXllciwgdGhpcyk7Ci19Ci0KLXN0YXRp
YyBnYm9vbGVhbiBpZGxlRGVzdHJveShncG9pbnRlciBkYXRhKQotewotICAgIEdSZWZQdHI8Q2x1
dHRlckFjdG9yPiBhY3RvciA9IGFkb3B0R1JlZihDTFVUVEVSX0FDVE9SKGRhdGEpKTsKLSAgICBD
bHV0dGVyQWN0b3IqIHBhcmVudCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3BhcmVudChhY3Rvci5nZXQo
KSk7Ci0KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIGNoaWxkIGFjdG9ycyBtYW51YWxseSBiZWNh
dXNlIHRoZSBjb250YWluZXIgb2YgQ2x1dHRlcgotICAgIC8vIHNlZW1zIHRvIGhhdmUgYSBidWcg
dG8gcmVtb3ZlIGl0cyBjaGlsZCBhY3RvcnMgd2hlbiBpdCBpcyByZW1vdmVkLgotICAgIGlmIChH
UkFQSElDU19MQVlFUl9JU19BQ1RPUihHUkFQSElDU19MQVlFUl9BQ1RPUihhY3Rvci5nZXQoKSkp
KQotICAgICAgICBjbHV0dGVyX2FjdG9yX3JlbW92ZV9hbGxfY2hpbGRyZW4oYWN0b3IuZ2V0KCkp
OwotCi0gICAgaWYgKHBhcmVudCkKLSAgICAgICAgY2x1dHRlcl9hY3Rvcl9yZW1vdmVfY2hpbGQo
cGFyZW50LCBhY3Rvci5nZXQoKSk7Ci0KLSAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFzc2VydCB0
aGF0IHRoZSBhY3RvcidzIHJlZiBjb3VudCBpcyAxIGhlcmUsIGJ1dCBzb21lCi0gICAgLy8gb2Yg
dGhlbSBhcmUgZ2V0dGluZyBoZXJlIHdpdGggMiEKLSAgICAvLyBBU1NFUlQoKEdfT0JKRUNUKGFj
dG9yLmdldCgpKSktPnJlZl9jb3VudCA9PSAxKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQot
R3JhcGhpY3NMYXllckNsdXR0ZXI6On5HcmFwaGljc0xheWVyQ2x1dHRlcigpCi17Ci0gICAgaWYg
KGdyYXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZShtX2xheWVyLmdldCgpKSA9PSBHcmFwaGlj
c0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlUm9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBFdmVuIHRob3VnaCB3ZSBjYWxsIG5vdGlmeUZsdXNoUmVxdWlyZWQgdG8gcmVtb3ZlIGV4
aXN0aW5nIGFuaW1hdGlvbnMgaW4gcmVtb3ZlQW5pbWF0aW9uKCksCi0gICAgLy8gcmVtb3ZlQ2x1
dHRlckFuaW1hdGlvbkZyb21MYXllciBoYXMgYmVlbiBuZXZlciByZWFjaGVkIHNpbmNlIHRoZSBy
b290IGxheWVyIGlzIGRlc3Ryb3llZC4KLSAgICAvLyBJdCBtZWFucyB0aGF0IHdlIGhhdmVuJ3Qg
bG9zdCBhIGNoYW5nZSB0byByZW1vdmUgYWN0dWFsIGFuaW1hdGlvbnMgZnJvbSBjbHV0dGVyQWN0
b3IuIAotICAgIC8vIFNvLCB3ZSBjYWxsIGV4cGxpY3RseSB1cGRhdGVBbmltYXRpb25zIG9uY2Ug
aGVyZSB0byByZW1vdmUgdW5jb21taXR0ZWQgYW5pbWF0aW9ucy4gCi0gICAgaWYgKG1fdW5jb21t
aXR0ZWRDaGFuZ2VzICYgQW5pbWF0aW9uQ2hhbmdlZCkKLSAgICAgICAgdXBkYXRlQW5pbWF0aW9u
cygpOwotCi0gICAgd2lsbEJlRGVzdHJveWVkKCk7Ci0KLSAgICAvLyBXZSBkZXN0cm95IHRoZSBh
Y3RvcnMgb24gYW4gaWRsZSBzbyB0aGF0IHRoZSBtYWluIGxvb3AgY2FuIHJ1biBlbm91Z2ggdG8K
LSAgICAvLyByZXBhaW50IHRoZSBiYWNrZ3JvdW5kIHRoYXQgd2lsbCByZXBsYWNlIHRoZSBhY3Rv
ci4KLSAgICBpZiAobV9sYXllcikgewotICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRDbGll
bnQobV9sYXllci5nZXQoKSwgMCk7Ci0gICAgICAgIGdfaWRsZV9hZGQoaWRsZURlc3Ryb3ksIG1f
bGF5ZXIubGVha1JlZigpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9zdHJ1Y3R1cmFsTGF5ZXIpIHsK
LSAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0Q2xpZW50KG1fc3RydWN0dXJhbExheWVyLmdl
dCgpLCAwKTsKLSAgICAgICAgZ19pZGxlX2FkZChpZGxlRGVzdHJveSwgbV9zdHJ1Y3R1cmFsTGF5
ZXIubGVha1JlZigpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9jb250ZW50c0xheWVyKSB7Ci0gICAg
ICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChtX2NvbnRlbnRzTGF5ZXIuZ2V0KCksIDAp
OwotICAgICAgICBnX2lkbGVfYWRkKGlkbGVEZXN0cm95LCBtX2NvbnRlbnRzTGF5ZXIubGVha1Jl
ZigpKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldE5hbWUoY29u
c3QgU3RyaW5nJiBuYW1lKQotewotICAgIFN0cmluZyBsb25nTmFtZSA9IFN0cmluZzo6Zm9ybWF0
KCJBY3RvciglcCkgR3JhcGhpY3NMYXllciglcCkgIiwgbV9sYXllci5nZXQoKSwgdGhpcykgKyBu
YW1lOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE5hbWUobG9uZ05hbWUpOwotICAgIG5vdGVMYXll
clByb3BlcnR5Q2hhbmdlZChOYW1lQ2hhbmdlZCk7Ci19Ci0KLUNsdXR0ZXJBY3RvciogR3JhcGhp
Y3NMYXllckNsdXR0ZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBDTFVU
VEVSX0FDVE9SKHByaW1hcnlMYXllcigpKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRl
cjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBGbG9hdFJlY3QgaHVnZVJlY3QoRmxvYXRQb2lu
dCgpLCBtX3NpemUpOwotICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChodWdlUmVjdCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBG
bG9hdFJlY3QmIHIpCi17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRmxvYXRSZWN0IHJlY3Qocik7Ci0gICAgRmxvYXRSZWN0IGxheWVyQm91bmRzKEZs
b2F0UG9pbnQoKSwgbV9zaXplKTsKLSAgICByZWN0LmludGVyc2VjdChsYXllckJvdW5kcyk7Ci0g
ICAgaWYgKHJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBzaXpl
X3QgbWF4RGlydHlSZWN0cyA9IDMyOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rp
cnR5UmVjdHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZGlydHlSZWN0c1tpXS5jb250
YWlucyhyZWN0KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9kaXJ0
eVJlY3RzLnNpemUoKSA8IG1heERpcnR5UmVjdHMpCi0gICAgICAgIG1fZGlydHlSZWN0cy5hcHBl
bmQocmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBtX2RpcnR5UmVjdHNbMF0udW5pdGUocmVjdCk7
Ci0KLSAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoRGlydHlSZWN0c0NoYW5nZWQpOwotfQot
Ci12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBv
aW50M0QmIHBvaW50KQotewotICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChwb2ludCk7Ci0g
ICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKEdlb21ldHJ5Q2hhbmdlZCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBm
bG9hdCBjbGFtcGVkT3BhY2l0eSA9IG1heCgwLjBmLCBtaW4ob3BhY2l0eSwgMS4wZikpOwotICAg
IGlmIChjbGFtcGVkT3BhY2l0eSA9PSBtX29wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoY2xhbXBlZE9wYWNpdHkpOwotICAgIG5vdGVMYXll
clByb3BlcnR5Q2hhbmdlZChPcGFjaXR5Q2hhbmdlZCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXll
ckNsdXR0ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIGlm
IChwb2ludCA9PSBtX3Bvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xh
eWVyOjpzZXRQb3NpdGlvbihwb2ludCk7Ci0gICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKEdl
b21ldHJ5Q2hhbmdlZCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldFNpemUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGlmIChzaXplID09IG1fc2l6ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZShzaXplKTsKLSAgICBub3Rl
TGF5ZXJQcm9wZXJ0eUNoYW5nZWQobWFza3NUb0JvdW5kcygpID8gR2VvbWV0cnlDaGFuZ2VkIHwg
TWFza3NUb0JvdW5kc0NoYW5nZWQgOiBHZW9tZXRyeUNoYW5nZWQpOwotfQotdm9pZCBHcmFwaGlj
c0xheWVyQ2x1dHRlcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
KQotewotICAgIGlmICh0ID09IG1fdHJhbnNmb3JtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
cmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7Ci0gICAgbm90ZUxheWVyUHJvcGVydHlDaGFu
Z2VkKFRyYW5zZm9ybUNoYW5nZWQpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpt
b3ZlT3JDb3B5TGF5ZXJBbmltYXRpb24oTW92ZU9yQ29weSBvcGVyYXRpb24sIGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uSWRlbnRpZmllciwgR3JhcGhpY3NMYXllckFjdG9yKiBmcm9tTGF5ZXIsIEdy
YXBoaWNzTGF5ZXJBY3RvciogdG9MYXllcikKLXsKLSAgICBSZWZQdHI8UGxhdGZvcm1DbHV0dGVy
QW5pbWF0aW9uPiBhbmltID0gZ3JhcGhpY3NMYXllckFjdG9yR2V0QW5pbWF0aW9uRm9yS2V5KGZy
b21MYXllciwgYW5pbWF0aW9uSWRlbnRpZmllcik7Ci0gICAgaWYgKCFhbmltKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG9wZXJhdGlvbikgewotICAgIGNhc2UgTW92ZToKLSAgICAg
ICAgYW5pbS0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGZyb21MYXllciwgYW5pbWF0aW9uSWRlbnRp
Zmllcik7Ci0gICAgICAgIGFuaW0tPmFkZEFuaW1hdGlvbkZvcktleSh0b0xheWVyLCBhbmltYXRp
b25JZGVudGlmaWVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb3B5OgotICAgICAgICBh
bmltLT5hZGRBbmltYXRpb25Gb3JLZXkodG9MYXllciwgYW5pbWF0aW9uSWRlbnRpZmllcik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6bW92
ZU9yQ29weUFuaW1hdGlvbnMoTW92ZU9yQ29weSBvcGVyYXRpb24sIEdyYXBoaWNzTGF5ZXJBY3Rv
ciogZnJvbUxheWVyLCBHcmFwaGljc0xheWVyQWN0b3IqIHRvTGF5ZXIpCi17Ci0gICAgLy8gTG9v
ayBmb3IgcnVubmluZyBhbmltYXRpb25zIGFmZmVjdGluZyB0aGlzIHByb3BlcnR5LgotICAgIEFu
aW1hdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5k
KCk7Ci0gICAgZm9yIChBbmltYXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVubmlu
Z0FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZl
Y3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgcHJvcGVydHlBbmltYXRpb25zID0gaXQtPnZh
bHVlOwotICAgICAgICBzaXplX3QgbnVtQW5pbWF0aW9ucyA9IHByb3BlcnR5QW5pbWF0aW9ucy5z
aXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQW5pbWF0aW9uczsgKytp
KSB7Ci0gICAgICAgICAgICBjb25zdCBMYXllclByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0
aW9uID0gcHJvcGVydHlBbmltYXRpb25zW2ldOwotCi0gICAgICAgICAgICBpZiAoY3VyckFuaW1h
dGlvbi5tX3Byb3BlcnR5ID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0KLSAgICAg
ICAgICAgICAgICB8fCBjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHkgPT0gQW5pbWF0ZWRQcm9wZXJ0
eU9wYWNpdHkKLSAgICAgICAgICAgICAgICB8fCBjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHkgPT0g
QW5pbWF0ZWRQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikKLSAgICAgICAgICAgICAgICBtb3ZlT3JD
b3B5TGF5ZXJBbmltYXRpb24ob3BlcmF0aW9uLCBhbmltYXRpb25JZGVudGlmaWVyKGN1cnJBbmlt
YXRpb24ubV9uYW1lLCBjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHksIGN1cnJBbmltYXRpb24ubV9p
bmRleCksIGZyb21MYXllciwgdG9MYXllcik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
R3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldFByZXNlcnZlczNEKGJvb2wgcHJlc2VydmVzM0QpCi17
Ci0gICAgaWYgKHByZXNlcnZlczNEID09IG1fcHJlc2VydmVzM0QpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKHByZXNlcnZlczNEKTsKLSAgICBu
b3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoUHJlc2VydmVzM0RDaGFuZ2VkKTsKLX0KLQotdm9pZCBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TWFza3NUb0JvdW5kcyhib29sIG1hc2tzVG9Cb3VuZHMp
Ci17Ci0gICAgaWYgKG1hc2tzVG9Cb3VuZHMgPT0gbV9tYXNrc1RvQm91bmRzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKG1hc2tzVG9Cb3Vu
ZHMpOwotICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChNYXNrc1RvQm91bmRzQ2hhbmdlZCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldERyYXdzQ29udGVudChib29sIGRy
YXdzQ29udGVudCkKLXsKLSAgICBpZiAoZHJhd3NDb250ZW50ID09IG1fZHJhd3NDb250ZW50KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoZHJh
d3NDb250ZW50KTsKLSAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoRHJhd3NDb250ZW50Q2hh
bmdlZCk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0Q29udGVudHNUb0lt
YWdlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoaW1hZ2UpIHsKLSAgICAgICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gbmV3SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKLSAgICAgICAgaWYgKCFuZXdJbWFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBtX3BlbmRpbmdDb250ZW50c0ltYWdlID0gbmV3SW1hZ2U7Ci0KLSAgICAgICAgbV9jb250
ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5ZXJGb3JJbWFnZTsKLSAgICAgICAgaWYgKCFt
X2NvbnRlbnRzTGF5ZXIpCi0gICAgICAgICAgICBub3RlU3VibGF5ZXJzQ2hhbmdlZCgpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIG1fcGVuZGluZ0NvbnRlbnRzSW1hZ2UgPSAwOwotICAgICAgICBt
X2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gTm9Db250ZW50c0xheWVyOwotICAgICAgICBpZiAobV9j
b250ZW50c0xheWVyKQotICAgICAgICAgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKLSAgICB9
Ci0KLSAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoQ29udGVudHNJbWFnZUNoYW5nZWQpOwot
fQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgp
Ci17Ci0gICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKENvbnRlbnRzTmVlZHNEaXNwbGF5KTsK
LX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHJlY3QgPT0gbV9jb250ZW50c1JlY3QpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChyZWN0KTsKLSAg
ICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoQ29udGVudHNSZWN0Q2hhbmdlZCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldFBhcmVudChHcmFwaGljc0xheWVyKiBjaGlsZExh
eWVyKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRQ
YXJlbnQoY2hpbGRMYXllcik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldENo
aWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQotewotICAgIGJv
b2wgY2hpbGRyZW5DaGFuZ2VkID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4p
OwotICAgIGlmIChjaGlsZHJlbkNoYW5nZWQpCi0gICAgICAgIG5vdGVTdWJsYXllcnNDaGFuZ2Vk
KCk7Ci0KLSAgICByZXR1cm4gY2hpbGRyZW5DaGFuZ2VkOwotfQotCi12b2lkIEdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBjaGlsZExheWVyKQotewotICAgIEdy
YXBoaWNzTGF5ZXI6OmFkZENoaWxkKGNoaWxkTGF5ZXIpOwotICAgIG5vdGVTdWJsYXllcnNDaGFu
Z2VkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OmFkZENoaWxkQXRJbmRleChH
cmFwaGljc0xheWVyKiBjaGlsZExheWVyLCBpbnQgaW5kZXgpCi17Ci0gICAgR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGRBdEluZGV4KGNoaWxkTGF5ZXIsIGluZGV4KTsKLSAgICBub3RlU3VibGF5ZXJz
Q2hhbmdlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjphZGRDaGlsZEJlbG93
KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCi17Ci0g
ICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhjaGlsZExheWVyLCBzaWJsaW5nKTsKLSAg
ICBub3RlU3VibGF5ZXJzQ2hhbmdlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVy
OjphZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIq
IHNpYmxpbmcpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShjaGlsZExheWVy
LCBzaWJsaW5nKTsKLSAgICBub3RlU3VibGF5ZXJzQ2hhbmdlZCgpOwotfQotCi1ib29sIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdy
YXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQotewotICAgIGlmIChHcmFwaGljc0xheWVyOjpyZXBsYWNl
Q2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKSkgewotICAgICAgICBub3RlU3VibGF5ZXJzQ2hhbmdl
ZCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZW1vdmVGcm9tUGFyZW50KCkKLXsKLSAgICBp
ZiAobV9wYXJlbnQpCi0gICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDbHV0dGVyKj4o
bV9wYXJlbnQpLT5ub3RlU3VibGF5ZXJzQ2hhbmdlZCgpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnJl
bW92ZUZyb21QYXJlbnQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cGxhdGZv
cm1DbHV0dGVyTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSW50UmVjdCYgY2xpcCkKLXsKLSAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250
ZXh0LCBjbGlwKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cGxhdGZvcm1DbHV0
dGVyTGF5ZXJBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpCi17Ci0gICAgaWYgKG1f
Y2xpZW50KQotICAgICAgICBtX2NsaWVudC0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCBz
dGFydFRpbWUpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZXBhaW50TGF5ZXJE
aXJ0eVJlY3RzKCkKLXsKLSAgICBpZiAoIW1fZGlydHlSZWN0cy5zaXplKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kaXJ0eVJlY3RzLnNpemUoKTsg
KytpKQotICAgICAgICBncmFwaGljc0xheWVyQWN0b3JJbnZhbGlkYXRlUmVjdGFuZ2xlKG1fbGF5
ZXIuZ2V0KCksIG1fZGlydHlSZWN0c1tpXSk7Ci0KLSAgICBtX2RpcnR5UmVjdHMuY2xlYXIoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQot
ewotICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X29wYWNpdHkoQ0xVVFRFUl9BQ1RPUihwcmltYXJ5TGF5
ZXIoKSksIHN0YXRpY19jYXN0PGd1aW50OD4ocm91bmRmKG1fb3BhY2l0eSAqIDI1NSkpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlQW5pbWF0aW9ucygpCi17Ci0gICAg
aWYgKG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5zaXplKCkpIHsKLSAgICAgICAgQW5pbWF0aW9uc1Rv
UHJvY2Vzc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmVu
ZCgpOwotICAgICAgICBmb3IgKEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBjdXJyQW5pbWF0aW9uTmFtZSA9IGl0LT5rZXk7Ci0g
ICAgICAgICAgICBBbmltYXRpb25zTWFwOjppdGVyYXRvciBhbmltYXRpb25JdCA9IG1fcnVubmlu
Z0FuaW1hdGlvbnMuZmluZChjdXJyQW5pbWF0aW9uTmFtZSk7Ci0gICAgICAgICAgICBpZiAoYW5p
bWF0aW9uSXQgPT0gbV9ydW5uaW5nQW5pbWF0aW9ucy5lbmQoKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYg
cHJvY2Vzc2luZ0luZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5
ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+dmFsdWU7Ci0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBMYXllclByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5p
bWF0aW9uID0gYW5pbWF0aW9uc1tpXTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2Nlc3Np
bmdJbmZvLmFjdGlvbikgewotICAgICAgICAgICAgICAgIGNhc2UgUmVtb3ZlOgotICAgICAgICAg
ICAgICAgICAgICByZW1vdmVDbHV0dGVyQW5pbWF0aW9uRnJvbUxheWVyKGN1cnJBbmltYXRpb24u
bV9wcm9wZXJ0eSwgY3VyckFuaW1hdGlvbk5hbWUsIGN1cnJBbmltYXRpb24ubV9pbmRleCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUGF1c2U6Ci0g
ICAgICAgICAgICAgICAgICAgIHBhdXNlQ2x1dHRlckFuaW1hdGlvbk9uTGF5ZXIoY3VyckFuaW1h
dGlvbi5tX3Byb3BlcnR5LCBjdXJyQW5pbWF0aW9uTmFtZSwgY3VyckFuaW1hdGlvbi5tX2luZGV4
LCBwcm9jZXNzaW5nSW5mby50aW1lT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocHJv
Y2Vzc2luZ0luZm8uYWN0aW9uID09IFJlbW92ZSkKLSAgICAgICAgICAgICAgICBtX3J1bm5pbmdB
bmltYXRpb25zLnJlbW92ZShjdXJyQW5pbWF0aW9uTmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX2FuaW1hdGlvbnNUb1Byb2Nlc3MuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbnVt
QW5pbWF0aW9uczsKLSAgICBpZiAoKG51bUFuaW1hdGlvbnMgPSBtX3VuY29taXR0ZWRBbmltYXRp
b25zLnNpemUoKSkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BbmltYXRp
b25zOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIHBl
bmRpbmdBbmltYXRpb24gPSBtX3VuY29taXR0ZWRBbmltYXRpb25zW2ldOwotICAgICAgICAgICAg
c2V0QW5pbWF0aW9uT25MYXllcihwZW5kaW5nQW5pbWF0aW9uLm1fYW5pbWF0aW9uLmdldCgpLCBw
ZW5kaW5nQW5pbWF0aW9uLm1fcHJvcGVydHksIHBlbmRpbmdBbmltYXRpb24ubV9uYW1lLCBwZW5k
aW5nQW5pbWF0aW9uLm1faW5kZXgsIHBlbmRpbmdBbmltYXRpb24ubV90aW1lT2Zmc2V0KTsKLQot
ICAgICAgICAgICAgQW5pbWF0aW9uc01hcDo6aXRlcmF0b3IgaXQgPSBtX3J1bm5pbmdBbmltYXRp
b25zLmZpbmQocGVuZGluZ0FuaW1hdGlvbi5tX25hbWUpOwotICAgICAgICAgICAgaWYgKGl0ID09
IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8TGF5
ZXJQcm9wZXJ0eUFuaW1hdGlvbj4gYW5pbWF0aW9uczsKLSAgICAgICAgICAgICAgICBhbmltYXRp
b25zLmFwcGVuZChwZW5kaW5nQW5pbWF0aW9uKTsKLSAgICAgICAgICAgICAgICBtX3J1bm5pbmdB
bmltYXRpb25zLmFkZChwZW5kaW5nQW5pbWF0aW9uLm1fbmFtZSwgYW5pbWF0aW9ucyk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5p
bWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsKLSAgICAgICAgICAgICAgICBhbmltYXRp
b25zLmFwcGVuZChwZW5kaW5nQW5pbWF0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIG1fdW5jb21pdHRlZEFuaW1hdGlvbnMuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLUZs
b2F0UG9pbnQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9C
YXNlKGZsb2F0JiBwYWdlU2NhbGUpIGNvbnN0Ci17Ci0gICAgcGFnZVNjYWxlID0gMTsKLQotICAg
IEZsb2F0UG9pbnQgb2Zmc2V0OwotICAgIGZvciAoY29uc3QgR3JhcGhpY3NMYXllciogY3Vyckxh
eWVyID0gdGhpczsgY3VyckxheWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPnBhcmVudCgpKSB7
Ci0gICAgICAgIGlmIChjdXJyTGF5ZXItPmFwcGxpZXNQYWdlU2NhbGUoKSkgewotICAgICAgICAg
ICAgaWYgKGN1cnJMYXllci0+Y2xpZW50KCkpCi0gICAgICAgICAgICAgICAgcGFnZVNjYWxlID0g
Y3VyckxheWVyLT5wYWdlU2NhbGVGYWN0b3IoKTsKLSAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7
Ci0gICAgICAgIH0KLQotICAgICAgICBvZmZzZXQgKz0gY3VyckxheWVyLT5wb3NpdGlvbigpOwot
ICAgIH0KLQotICAgIHJldHVybiBGbG9hdFBvaW50KCk7Ci19Ci0KLS8vIGNhbGxlZCBmcm9tIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMKLXZvaWQg
R3JhcGhpY3NMYXllckNsdXR0ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJl
Y3QmIGNsaXBSZWN0KQotewotICAgIFRyYW5zZm9ybVN0YXRlIHN0YXRlKFRyYW5zZm9ybVN0YXRl
OjpVbmFwcGx5SW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiwgRmxvYXRRdWFkKGNsaXBSZWN0KSk7
Ci0gICAgcmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhDb21taXRTdGF0ZSgpLCBzdGF0ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoY29uc3Qg
Q29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUsIGZs
b2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRv
QmFzZSwgYm9vbCBhZmZlY3RlZEJ5UGFnZVNjYWxlKQotewotICAgIGlmIChhcHBsaWVzUGFnZVNj
YWxlKCkpIHsKLSAgICAgICAgcGFnZVNjYWxlRmFjdG9yID0gdGhpcy0+cGFnZVNjYWxlRmFjdG9y
KCk7Ci0gICAgICAgIGFmZmVjdGVkQnlQYWdlU2NhbGUgPSB0cnVlOwotICAgIH0KLQotICAgIC8v
IEFjY3VtdWxhdGUgYW4gb2Zmc2V0IGZyb20gdGhlIGFuY2VzdHJhbCBwaXhlbC1hbGlnbmVkIGxh
eWVyLgotICAgIEZsb2F0UG9pbnQgYmFzZVJlbGF0aXZlUG9zaXRpb24gPSBwb3NpdGlvblJlbGF0
aXZlVG9CYXNlOwotICAgIGlmIChhZmZlY3RlZEJ5UGFnZVNjYWxlKQotICAgICAgICBiYXNlUmVs
YXRpdmVQb3NpdGlvbiArPSBtX3Bvc2l0aW9uOwotCi0gICAgY29tbWl0TGF5ZXJDaGFuZ2VzQmVm
b3JlU3VibGF5ZXJzKHBhZ2VTY2FsZUZhY3RvciwgYmFzZVJlbGF0aXZlUG9zaXRpb24pOwotCi0g
ICAgY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRMYXllcnMgPSBjaGlsZHJlbigp
OwotICAgIHNpemVfdCBudW1DaGlsZHJlbiA9IGNoaWxkTGF5ZXJzLnNpemUoKTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgewotICAgICAgICBHcmFwaGlj
c0xheWVyQ2x1dHRlciogY3VycmVudENoaWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNs
dXR0ZXIqPihjaGlsZExheWVyc1tpXSk7Ci0gICAgICAgIGN1cnJlbnRDaGlsZC0+cmVjdXJzaXZl
Q29tbWl0Q2hhbmdlcyhjb21taXRTdGF0ZSwgc3RhdGUsIHBhZ2VTY2FsZUZhY3RvciwgYmFzZVJl
bGF0aXZlUG9zaXRpb24sIGFmZmVjdGVkQnlQYWdlU2NhbGUpOwotICAgIH0KLQotICAgIGNvbW1p
dExheWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNs
dXR0ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQotewotICAgIGZs
b2F0IHBhZ2VTY2FsZUZhY3RvcjsKLSAgICBGbG9hdFBvaW50IG9mZnNldCA9IGNvbXB1dGVQb3Np
dGlvblJlbGF0aXZlVG9CYXNlKHBhZ2VTY2FsZUZhY3Rvcik7Ci0gICAgY29tbWl0TGF5ZXJDaGFu
Z2VzQmVmb3JlU3VibGF5ZXJzKHBhZ2VTY2FsZUZhY3Rvciwgb2Zmc2V0KTsKLSAgICBjb21taXRM
YXllckNoYW5nZXNBZnRlclN1YmxheWVycygpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygpCi17Ci0gICAgaWYgKCFtX3Vu
Y29tbWl0dGVkQ2hhbmdlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fdW5jb21taXR0
ZWRDaGFuZ2VzICYgQ2hpbGRyZW5DaGFuZ2VkKQotICAgICAgICB1cGRhdGVTdWJsYXllckxpc3Qo
KTsKLQotICAgIG1fdW5jb21taXR0ZWRDaGFuZ2VzID0gTm9DaGFuZ2U7Ci19Ci12b2lkIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpub3RlU3VibGF5ZXJzQ2hhbmdlZCgpCi17Ci0gICAgbm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKENoaWxkcmVuQ2hhbmdlZCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXll
ckNsdXR0ZXI6Om5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChMYXllckNoYW5nZUZsYWdzIGZsYWdz
KQotewotICAgIGlmICghbV91bmNvbW1pdHRlZENoYW5nZXMgJiYgbV9jbGllbnQpCi0gICAgICAg
IG1fY2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOyAvLyBjYWxsIFJlbmRlckxheWVy
QmFja2luZzo6bm90aWZ5Rmx1c2hSZXF1aXJlZAotCi0gICAgbV91bmNvbW1pdHRlZENoYW5nZXMg
fD0gZmxhZ3M7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExheWVyQ2hh
bmdlc0JlZm9yZVN1YmxheWVycyhmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpCi17Ci0gICAgaWYgKCFtX3VuY29tbWl0dGVkQ2hh
bmdlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTmVlZCB0byBoYW5kbGUgUHJlc2VydmVz
M0RDaGFuZ2VkIGZpcnN0LCBiZWNhdXNlIGl0IGFmZmVjdHMgd2hpY2ggbGF5ZXJzIHN1YnNlcXVl
bnQgcHJvcGVydGllcyBhcmUgYXBwbGllZCB0bwotICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdl
cyAmIFByZXNlcnZlczNEQ2hhbmdlZCkKLSAgICAgICAgdXBkYXRlU3RydWN0dXJhbExheWVyKCk7
Ci0KLSAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBOYW1lQ2hhbmdlZCkKLSAgICAgICAg
dXBkYXRlTGF5ZXJOYW1lcygpOwotCi0gICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgQ29u
dGVudHNJbWFnZUNoYW5nZWQpIC8vIE5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgQ2hpbGRyZW5DaGFu
Z2VkCi0gICAgICAgIHVwZGF0ZUNvbnRlbnRzSW1hZ2UoKTsKLQotICAgIGlmIChtX3VuY29tbWl0
dGVkQ2hhbmdlcyAmIENoaWxkcmVuQ2hhbmdlZCkKLSAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0
KCk7Ci0KLSAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBHZW9tZXRyeUNoYW5nZWQpCi0g
ICAgICAgIHVwZGF0ZUdlb21ldHJ5KHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRv
QmFzZSk7Ci0KLSAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBEcmF3c0NvbnRlbnRDaGFu
Z2VkKQotICAgICAgICB1cGRhdGVMYXllckRyYXdzQ29udGVudChwYWdlU2NhbGVGYWN0b3IsIHBv
c2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwotCi0gICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYg
TmFtZUNoYW5nZWQpCi0gICAgICAgIHVwZGF0ZUxheWVyTmFtZXMoKTsKLQotICAgIGlmIChtX3Vu
Y29tbWl0dGVkQ2hhbmdlcyAmIFRyYW5zZm9ybUNoYW5nZWQpCi0gICAgICAgIHVwZGF0ZVRyYW5z
Zm9ybSgpOwotCi0gICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgTWFza3NUb0JvdW5kc0No
YW5nZWQpCi0gICAgICAgIHVwZGF0ZU1hc2tzVG9Cb3VuZHMoKTsKLQotICAgIGlmIChtX3VuY29t
bWl0dGVkQ2hhbmdlcyAmIE9wYWNpdHlDaGFuZ2VkKQotICAgICAgICB1cGRhdGVPcGFjaXR5T25M
YXllcigpOwotCi0gICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgQW5pbWF0aW9uQ2hhbmdl
ZCkKLSAgICAgICAgdXBkYXRlQW5pbWF0aW9ucygpOwotCi0gICAgaWYgKG1fdW5jb21taXR0ZWRD
aGFuZ2VzICYgRGlydHlSZWN0c0NoYW5nZWQpCi0gICAgICAgIHJlcGFpbnRMYXllckRpcnR5UmVj
dHMoKTsKLQotICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIENvbnRlbnRzUmVjdENoYW5n
ZWQpCi0gICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwotCi0gICAgaWYgKG1fdW5jb21taXR0
ZWRDaGFuZ2VzICYgQ29udGVudHNOZWVkc0Rpc3BsYXkpCi0gICAgICAgIHVwZGF0ZUNvbnRlbnRz
TmVlZHNEaXNwbGF5KCk7Ci0KLSAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBDaGlsZHJl
bkNoYW5nZWQpIHsKLSAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Ci0gICAgICAgIC8vIFN1
YmxheWVycyBtYXkgc2V0IHRoaXMgZmxhZyBhZ2Fpbiwgc28gY2xlYXIgaXQgdG8gYXZvaWQgYWx3
YXlzIHVwZGF0aW5nIHN1YmxheWVycyBpbiBjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVy
cygpLgotICAgICAgICBtX3VuY29tbWl0dGVkQ2hhbmdlcyAmPSB+Q2hpbGRyZW5DaGFuZ2VkOwot
ICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0dXBDb250ZW50c0xheWVy
KEdyYXBoaWNzTGF5ZXJBY3RvciogY29udGVudHNMYXllcikKLXsKLSAgICBncmFwaGljc0xheWVy
QWN0b3JTZXRNYXNrc1RvQm91bmRzKGNvbnRlbnRzTGF5ZXIsIHRydWUpOwotICAgIGdyYXBoaWNz
TGF5ZXJBY3RvclNldEFuY2hvclBvaW50KGNvbnRlbnRzTGF5ZXIsIDAuMCwgMC4wLCAwLjApOwot
fQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVDb250ZW50c0ltYWdlKCkKLXsK
LSAgICBpZiAobV9wZW5kaW5nQ29udGVudHNJbWFnZSkgewotICAgICAgICBpZiAoIW1fY29udGVu
dHNMYXllcikgewotICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gZ3JhcGhpY3NMYXllckFj
dG9yTmV3V2l0aENsaWVudChMYXllclR5cGVMYXllciwgdGhpcyk7Ci0gICAgICAgICAgICBjbHV0
dGVyX2FjdG9yX3NldF9uYW1lKENMVVRURVJfQUNUT1IobV9jb250ZW50c0xheWVyLmdldCgpKSwg
IkltYWdlIExheWVyIik7Ci0gICAgICAgICAgICBzZXR1cENvbnRlbnRzTGF5ZXIobV9jb250ZW50
c0xheWVyLmdldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNl
dFN1cmZhY2UoR1JBUEhJQ1NfTEFZRVJfQUNUT1IobV9jb250ZW50c0xheWVyLmdldCgpKSwgbV9w
ZW5kaW5nQ29udGVudHNJbWFnZS5nZXQoKSk7Ci0gICAgICAgIG1fcGVuZGluZ0NvbnRlbnRzSW1h
Z2UgPSAwOwotCi0gICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIE5vIGltYWdlLgotICAgICAgICAvLyBtX2NvbnRlbnRzTGF5ZXIgd2lsbCBiZSBy
ZW1vdmVkIHZpYSB1cGRhdGVTdWJsYXllckxpc3QuCi0gICAgICAgIG1fY29udGVudHNMYXllciA9
IDA7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVDb250ZW50
c05lZWRzRGlzcGxheSgpCi17Ci0gICAgaWYgKG1fY29udGVudHNMYXllcikKLSAgICAgICAgZ3Jh
cGhpY3NMYXllckFjdG9ySW52YWxpZGF0ZVJlY3RhbmdsZShtX2NvbnRlbnRzTGF5ZXIuZ2V0KCks
IEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCBzaXplKCkpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0xheWVyQ2x1dHRlcjo6dXBkYXRlQ29udGVudHNSZWN0KCkKLXsKLSAgICBpZiAoIW1fY29udGVu
dHNMYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRQb2ludCBwb2ludChtX2NvbnRl
bnRzUmVjdC54KCksIG1fY29udGVudHNSZWN0LnkoKSk7Ci0gICAgRmxvYXRSZWN0IHJlY3QoMCwg
MCwgbV9jb250ZW50c1JlY3Qud2lkdGgoKSwgbV9jb250ZW50c1JlY3QuaGVpZ2h0KCkpOwotCi0g
ICAgY2x1dHRlcl9hY3Rvcl9zZXRfcG9zaXRpb24oQ0xVVFRFUl9BQ1RPUihtX2NvbnRlbnRzTGF5
ZXIuZ2V0KCkpLCBwb2ludC54KCksIHBvaW50LnkoKSk7Ci0gICAgY2x1dHRlcl9hY3Rvcl9zZXRf
c2l6ZShDTFVUVEVSX0FDVE9SKG1fY29udGVudHNMYXllci5nZXQoKSksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRl
R2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlv
blJlbGF0aXZlVG9CYXNlKQotewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgcGFnZSBz
Y2FsaW5nLgotICAgIGlmIChtX3N0cnVjdHVyYWxMYXllcikgewotICAgICAgICBjbHV0dGVyX2Fj
dG9yX3NldF9wb3NpdGlvbihDTFVUVEVSX0FDVE9SKG1fc3RydWN0dXJhbExheWVyLmdldCgpKSwg
bV9wb3NpdGlvbi54KCksIG1fcG9zaXRpb24ueSgpKTsKLSAgICAgICAgY2x1dHRlcl9hY3Rvcl9z
ZXRfc2l6ZShDTFVUVEVSX0FDVE9SKG1fc3RydWN0dXJhbExheWVyLmdldCgpKSwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldEFu
Y2hvclBvaW50KG1fc3RydWN0dXJhbExheWVyLmdldCgpLCBtX2FuY2hvclBvaW50LngoKSwgbV9h
bmNob3JQb2ludC55KCksIG1fYW5jaG9yUG9pbnQueigpKTsKLSAgICB9Ci0KLSAgICBjbHV0dGVy
X2FjdG9yX3NldF9wb3NpdGlvbihDTFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpLCBtX3Bvc2l0
aW9uLngoKSwgbV9wb3NpdGlvbi55KCkpOwotICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3NpemUoQ0xV
VFRFUl9BQ1RPUihtX2xheWVyLmdldCgpKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSk7Ci0gICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0QW5jaG9yUG9pbnQobV9sYXllci5nZXQoKSwg
bV9hbmNob3JQb2ludC54KCksIG1fYW5jaG9yUG9pbnQueSgpLCBtX2FuY2hvclBvaW50LnooKSk7
Ci19Ci0KLS8vIEVhY2ggR3JhcGhpY3NMYXllciBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgbGF5ZXIg
aW4gdGhlIHBsYXRmb3JtIHBvcnQuCi0vLyBTbyB3aGVuZXZlciB0aGUgbGlzdCBvZiBjaGlsZCBs
YXllciBjaGFuZ2VzLCB0aGUgbGlzdCBvZiBHcmFwaGljc0xheWVyQWN0b3Igc2hvdWxkIGJlIHVw
ZGF0ZWQgYWNjb3JkaW5nbHkuCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVTdWJs
YXllckxpc3QoKQotewotICAgIEdyYXBoaWNzTGF5ZXJBY3Rvckxpc3Qgc3RydWN0dXJhbExheWVy
Q2hpbGRyZW47Ci0gICAgR3JhcGhpY3NMYXllckFjdG9yTGlzdCBwcmltYXJ5TGF5ZXJDaGlsZHJl
bjsKLQotICAgIEdyYXBoaWNzTGF5ZXJBY3Rvckxpc3QmIGNoaWxkTGlzdEZvclN1YmxheWVycyA9
IG1fc3RydWN0dXJhbExheWVyID8gc3RydWN0dXJhbExheWVyQ2hpbGRyZW4gOiBwcmltYXJ5TGF5
ZXJDaGlsZHJlbjsKLQotICAgIGlmIChtX3N0cnVjdHVyYWxMYXllcikKLSAgICAgICAgc3RydWN0
dXJhbExheWVyQ2hpbGRyZW4uYXBwZW5kKG1fbGF5ZXIpOwotCi0gICAgaWYgKG1fY29udGVudHNM
YXllcikKLSAgICAgICAgcHJpbWFyeUxheWVyQ2hpbGRyZW4uYXBwZW5kKG1fY29udGVudHNMYXll
cik7Ci0KLSAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVycyA9IGNo
aWxkcmVuKCk7Ci0gICAgc2l6ZV90IG51bUNoaWxkcmVuID0gY2hpbGRMYXllcnMuc2l6ZSgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgewotICAgICAgICBH
cmFwaGljc0xheWVyQ2x1dHRlciogY3VycmVudENoaWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NM
YXllckNsdXR0ZXIqPihjaGlsZExheWVyc1tpXSk7Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXJBY3Rv
ciogY2hpbGRMYXllciA9IGN1cnJlbnRDaGlsZC0+bGF5ZXJGb3JTdXBlcmxheWVyKCk7Ci0gICAg
ICAgIEFTU0VSVChHUkFQSElDU19MQVlFUl9JU19BQ1RPUihjaGlsZExheWVyKSk7Ci0gICAgICAg
IGNoaWxkTGlzdEZvclN1YmxheWVycy5hcHBlbmQoY2hpbGRMYXllcik7Ci0KLSAgICAgICAgLy8g
VGhlIGNoaWxkIGxheWVyIG9ubHkgcHJlc2VydmVzIDNEIGlmIGVpdGhlciBpdHNlbGYgb3IgaXRz
IHBhcmVudCBoYXMgcHJlc2VydmVzM0Qgc2V0LgotICAgICAgICBncmFwaGljc0xheWVyQWN0b3JT
ZXRGbGF0dGVuKGNoaWxkTGF5ZXIsICEocHJlc2VydmVzM0QoKSB8fCBjdXJyZW50Q2hpbGQtPnBy
ZXNlcnZlczNEKCkpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9zdHJ1Y3R1cmFsTGF5ZXIpCi0gICAg
ICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyhtX3N0cnVjdHVyYWxMYXllci5nZXQo
KSwgc3RydWN0dXJhbExheWVyQ2hpbGRyZW4pOwotCi0gICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0
U3VibGF5ZXJzKG1fbGF5ZXIuZ2V0KCksIHByaW1hcnlMYXllckNoaWxkcmVuKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlTGF5ZXJOYW1lcygpCi17Ci0gICAgY2x1dHRl
cl9hY3Rvcl9zZXRfbmFtZShDTFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpLCBuYW1lKCkudXRm
OCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZVRyYW5z
Zm9ybSgpCi17Ci0gICAgQ29nbE1hdHJpeCBtYXRyaXggPSBtX3RyYW5zZm9ybTsKLSAgICBjbHV0
dGVyX2FjdG9yX3NldF90cmFuc2Zvcm0oQ0xVVFRFUl9BQ1RPUihwcmltYXJ5TGF5ZXIoKSksICZt
YXRyaXgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVNYXNrc1RvQm91
bmRzKCkKLXsKLSAgICBncmFwaGljc0xheWVyQWN0b3JTZXRNYXNrc1RvQm91bmRzKG1fbGF5ZXIu
Z2V0KCksIG1fbWFza3NUb0JvdW5kcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6
OnVwZGF0ZVN0cnVjdHVyYWxMYXllcigpCi17Ci0gICAgZW5zdXJlU3RydWN0dXJhbExheWVyKHN0
cnVjdHVyYWxMYXllclB1cnBvc2UoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6
OmVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHB1cnBvc2UpCi17
Ci0gICAgY29uc3QgTGF5ZXJDaGFuZ2VGbGFncyBzdHJ1Y3R1cmFsTGF5ZXJDaGFuZ2VGbGFncyA9
IE5hbWVDaGFuZ2VkCi0gICAgICAgIHwgR2VvbWV0cnlDaGFuZ2VkCi0gICAgICAgIHwgVHJhbnNm
b3JtQ2hhbmdlZAotICAgICAgICB8IENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZAotICAgICAgICB8
IENoaWxkcmVuQ2hhbmdlZAotICAgICAgICB8IEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZWQKLSAg
ICAgICAgfCBPcGFjaXR5Q2hhbmdlZDsKLQotICAgIGlmIChwdXJwb3NlID09IE5vU3RydWN0dXJh
bExheWVyKSB7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyYWxMYXllcikgewotICAgICAgICAgICAg
Ly8gUmVwbGFjZSB0aGUgdHJhbnNmb3JtTGF5ZXIgaW4gdGhlIHBhcmVudCB3aXRoIHRoaXMgbGF5
ZXIuCi0gICAgICAgICAgICBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVGcm9tU3VwZXJMYXllciht
X2xheWVyLmdldCgpKTsKLQotICAgICAgICAgICAgLy8gSWYgbV9sYXllciBkb2Vzbid0IGhhdmUg
YSBwYXJlbnQsIGl0IG1lYW5zIGl0J3MgdGhlIHJvb3QgbGF5ZXIgYW5kCi0gICAgICAgICAgICAv
LyBpcyBsaWtlbHkgaG9zdGVkIGJ5IHNvbWV0aGluZyB0aGF0IGlzIG5vdCBleHBlY3RpbmcgdG8g
YmUgY2hhbmdlZAotICAgICAgICAgICAgQ2x1dHRlckFjdG9yKiBwYXJlbnRBY3RvciA9IGNsdXR0
ZXJfYWN0b3JfZ2V0X3BhcmVudChDTFVUVEVSX0FDVE9SKG1fc3RydWN0dXJhbExheWVyLmdldCgp
KSk7Ci0gICAgICAgICAgICBBU1NFUlQocGFyZW50QWN0b3IpOwotICAgICAgICAgICAgY2x1dHRl
cl9hY3Rvcl9yZXBsYWNlX2NoaWxkKHBhcmVudEFjdG9yLCBDTFVUVEVSX0FDVE9SKG1fc3RydWN0
dXJhbExheWVyLmdldCgpKSwgQ0xVVFRFUl9BQ1RPUihtX2xheWVyLmdldCgpKSk7Ci0KLSAgICAg
ICAgICAgIG1vdmVPckNvcHlBbmltYXRpb25zKE1vdmUsIG1fc3RydWN0dXJhbExheWVyLmdldCgp
LCBtX2xheWVyLmdldCgpKTsKLQotICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgc3RydWN0dXJh
bCBsYXllci4KLSAgICAgICAgICAgIG1fc3RydWN0dXJhbExheWVyID0gMDsKLQotICAgICAgICAg
ICAgbV91bmNvbW1pdHRlZENoYW5nZXMgfD0gc3RydWN0dXJhbExheWVyQ2hhbmdlRmxhZ3M7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgc3RydWN0dXJhbExh
eWVyQ2hhbmdlZCA9IGZhbHNlOwotICAgIGlmIChwdXJwb3NlID09IFN0cnVjdHVyYWxMYXllckZv
clByZXNlcnZlczNEKSB7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyYWxMYXllciAmJiAoZ3JhcGhp
Y3NMYXllckFjdG9yR2V0TGF5ZXJUeXBlKG1fc3RydWN0dXJhbExheWVyLmdldCgpKSAhPSBHcmFw
aGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIpKQotICAgICAgICAgICAg
bV9zdHJ1Y3R1cmFsTGF5ZXIgPSAwOwotCi0gICAgICAgIGlmICghbV9zdHJ1Y3R1cmFsTGF5ZXIp
IHsKLSAgICAgICAgICAgIG1fc3RydWN0dXJhbExheWVyID0gZ3JhcGhpY3NMYXllckFjdG9yTmV3
V2l0aENsaWVudChHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIs
IHRoaXMpOwotICAgICAgICAgICAgc3RydWN0dXJhbExheWVyQ2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9zdHJ1Y3R1cmFsTGF5ZXIgJiYgKGdy
YXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZShtX3N0cnVjdHVyYWxMYXllci5nZXQoKSkgIT0g
R3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZUxheWVyKSkKLSAgICAgICAgICAgIG1fc3Ry
dWN0dXJhbExheWVyID0gMDsKLQotICAgICAgICBpZiAoIW1fc3RydWN0dXJhbExheWVyKSB7Ci0g
ICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllciA9IGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhD
bGllbnQoR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKLSAgICAg
ICAgICAgIHN0cnVjdHVyYWxMYXllckNoYW5nZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKCFzdHJ1Y3R1cmFsTGF5ZXJDaGFuZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3VuY29tbWl0dGVkQ2hhbmdlcyB8PSBzdHJ1Y3R1cmFsTGF5ZXJDaGFuZ2VGbGFnczsKLQot
ICAgIC8vIFdlJ3ZlIGNoYW5nZWQgdGhlIGxheWVyIHRoYXQgb3VyIHBhcmVudCBhZGRlZCB0byBp
dHMgc3VibGF5ZXIgbGlzdCwgc28gdGVsbCBpdCB0byB1cGRhdGUKLSAgICAvLyBzdWJsYXllcnMg
YWdhaW4gaW4gaXRzIGNvbW1pdExheWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJzKCkuCi0gICAgc3Rh
dGljX2Nhc3Q8R3JhcGhpY3NMYXllckNsdXR0ZXIqPihwYXJlbnQoKSktPm5vdGVTdWJsYXllcnND
aGFuZ2VkKCk7Ci0KLSAgICAvLyBTZXQgcHJvcGVydGllcyBvZiBtX2xheWVyIHRvIHRoZWlyIGRl
ZmF1bHQgdmFsdWVzLCBzaW5jZSB0aGVzZSBhcmUgZXhwcmVzc2VkIG9uIG9uIHRoZSBzdHJ1Y3R1
cmFsIGxheWVyLgotICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgMCk7Ci0gICAgRmxvYXRQb2ludDNE
IGFuY2hvclBvaW50KDAuNWYsIDAuNWYsIDApOwotICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3Bvc2l0
aW9uKENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSksIHBvaW50LngoKSwgcG9pbnQueSgpKTsK
LSAgICBncmFwaGljc0xheWVyQWN0b3JTZXRBbmNob3JQb2ludChtX2xheWVyLmdldCgpLCBhbmNo
b3JQb2ludC54KCksIGFuY2hvclBvaW50LnkoKSwgYW5jaG9yUG9pbnQueigpKTsKLQotICAgIENv
Z2xNYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKLSAgICBjbHV0dGVyX2Fj
dG9yX3NldF90cmFuc2Zvcm0oQ0xVVFRFUl9BQ1RPUihtX2xheWVyLmdldCgpKSwgJm1hdHJpeCk7
Ci0KLSAgICBjbHV0dGVyX2FjdG9yX3NldF9vcGFjaXR5KENMVVRURVJfQUNUT1IobV9sYXllci5n
ZXQoKSksIDI1NSk7Ci0KLSAgICBtb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlLCBtX2xheWVyLmdl
dCgpLCBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSk7Ci19Ci0KLUdyYXBoaWNzTGF5ZXJDbHV0dGVy
OjpTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzdHJ1Y3R1cmFs
TGF5ZXJQdXJwb3NlKCkgY29uc3QKLXsKLSAgICBpZiAocHJlc2VydmVzM0QoKSkKLSAgICAgICAg
cmV0dXJuIFN0cnVjdHVyYWxMYXllckZvclByZXNlcnZlczNEOwotCi0gICAgcmV0dXJuIE5vU3Ry
dWN0dXJhbExheWVyOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVMYXll
ckRyYXdzQ29udGVudChmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
c2l0aW9uUmVsYXRpdmVUb0Jhc2UpCi17Ci0gICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0RHJhd3ND
b250ZW50KG1fbGF5ZXIuZ2V0KCksIG1fZHJhd3NDb250ZW50KTsKLQotICAgIGlmIChtX2RyYXdz
Q29udGVudCkKLSAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgZWxzZQotICAgICAgICBn
cmFwaGljc0xheWVyQWN0b3JTZXRTdXJmYWNlKG1fbGF5ZXIuZ2V0KCksIDApOwotCi0gICAgdXBk
YXRlRGVidWdJbmRpY2F0b3JzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNl
dHVwQW5pbWF0aW9uKFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiogcHJvcGVydHlBbmltLCBjb25z
dCBBbmltYXRpb24qIGFuaW0sIGJvb2wgYWRkaXRpdmUpCi17Ci0gICAgZG91YmxlIGR1cmF0aW9u
ID0gYW5pbS0+ZHVyYXRpb24oKTsKLSAgICBpZiAoZHVyYXRpb24gPD0gMCkKLSAgICAgICAgZHVy
YXRpb24gPSBjQW5pbWF0aW9uQWxtb3N0WmVyb0R1cmF0aW9uOwotCi0gICAgZmxvYXQgcmVwZWF0
Q291bnQgPSBhbmltLT5pdGVyYXRpb25Db3VudCgpOwotICAgIGlmIChyZXBlYXRDb3VudCA9PSBB
bmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUpCi0gICAgICAgIHJlcGVhdENvdW50ID0g
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKLSAgICBlbHNlIGlmIChhbmltLT5kaXJlY3Rp
b24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSB8fCBhbmltLT5k
aXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVy
c2UpCi0gICAgICAgIHJlcGVhdENvdW50IC89IDI7Ci0KLSAgICBQbGF0Zm9ybUNsdXR0ZXJBbmlt
YXRpb246OkZpbGxNb2RlVHlwZSBmaWxsTW9kZSA9IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6
Tm9GaWxsTW9kZTsKLSAgICBzd2l0Y2ggKGFuaW0tPmZpbGxNb2RlKCkpIHsKLSAgICBjYXNlIEFu
aW1hdGlvbkZpbGxNb2RlTm9uZToKLSAgICAgICAgZmlsbE1vZGUgPSBQbGF0Zm9ybUNsdXR0ZXJB
bmltYXRpb246OkZvcndhcmRzOyAvLyBVc2UgImZvcndhcmRzIiByYXRoZXIgdGhhbiAicmVtb3Zl
ZCIgYmVjYXVzZSB0aGUgc3R5bGUgc3lzdGVtIHdpbGwgcmVtb3ZlIHRoZSBhbmltYXRpb24gd2hl
biBpdCBpcyBmaW5pc2hlZC4gVGhpcyBhdm9pZHMgYSBmbGFzaC4KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBBbmltYXRpb25GaWxsTW9kZUJhY2t3YXJkczoKLSAgICAgICAgZmlsbE1vZGUgPSBQ
bGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OkJvdGg7IC8vIFVzZSAiYm90aCIgcmF0aGVyIHRoYW4g
ImJhY2t3YXJkcyIgYmVjYXVzZSB0aGUgc3R5bGUgc3lzdGVtIHdpbGwgcmVtb3ZlIHRoZSBhbmlt
YXRpb24gd2hlbiBpdCBpcyBmaW5pc2hlZC4gVGhpcyBhdm9pZHMgYSBmbGFzaC4KLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBbmltYXRpb25GaWxsTW9kZUZvcndhcmRzOgotICAgICAgICBmaWxs
TW9kZSA9IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Rm9yd2FyZHM7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQW5pbWF0aW9uRmlsbE1vZGVCb3RoOgotICAgICAgICBmaWxsTW9kZSA9IFBs
YXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Qm90aDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgcHJvcGVydHlBbmltLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgcHJvcGVydHlBbmlt
LT5zZXRSZXBlYXRDb3VudChyZXBlYXRDb3VudCk7Ci0gICAgcHJvcGVydHlBbmltLT5zZXRBdXRv
cmV2ZXJzZXMoYW5pbS0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rp
b25BbHRlcm5hdGUgfHwgYW5pbS0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25E
aXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKTsKLSAgICBwcm9wZXJ0eUFuaW0tPnNldFJlbW92ZWRP
bkNvbXBsZXRpb24oZmFsc2UpOwotICAgIHByb3BlcnR5QW5pbS0+c2V0QWRkaXRpdmUoYWRkaXRp
dmUpOwotICAgIHByb3BlcnR5QW5pbS0+c2V0RmlsbE1vZGUoZmlsbE1vZGUpOwotfQotCi1jb25z
dCBUaW1pbmdGdW5jdGlvbiogR3JhcGhpY3NMYXllckNsdXR0ZXI6OnRpbWluZ0Z1bmN0aW9uRm9y
QW5pbWF0aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uVmFsdWUmIGFuaW1WYWx1ZSwgY29uc3QgQW5p
bWF0aW9uJiBhbmltKQotewotICAgIGlmIChhbmltVmFsdWUudGltaW5nRnVuY3Rpb24oKSkKLSAg
ICAgICAgcmV0dXJuIGFuaW1WYWx1ZS50aW1pbmdGdW5jdGlvbigpOwotICAgIGlmIChhbmltLmlz
VGltaW5nRnVuY3Rpb25TZXQoKSkKLSAgICAgICAgcmV0dXJuIGFuaW0udGltaW5nRnVuY3Rpb24o
KS5nZXQoKTsKLQotICAgIHJldHVybiBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0
VGltaW5nRnVuY3Rpb24oKTsKLX0KLQotUGFzc1JlZlB0cjxQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b24+IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpjcmVhdGVCYXNpY0FuaW1hdGlvbihjb25zdCBBbmlt
YXRpb24qIGFuaW0sIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhZGRpdGl2ZSkKLXsKLSAg
ICBSZWZQdHI8UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uPiBiYXNpY0FuaW0gPSBQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb246OmNyZWF0ZShQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OkJhc2ljLCBr
ZXlQYXRoKTsKLSAgICBzZXR1cEFuaW1hdGlvbihiYXNpY0FuaW0uZ2V0KCksIGFuaW0sIGFkZGl0
aXZlKTsKLSAgICByZXR1cm4gYmFzaWNBbmltOwotfQotCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ2x1
dHRlckFuaW1hdGlvbj5HcmFwaGljc0xheWVyQ2x1dHRlcjo6Y3JlYXRlS2V5ZnJhbWVBbmltYXRp
b24oY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYWRk
aXRpdmUpCi17Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbj4ga2V5ZnJhbWVB
bmltID0gUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpjcmVhdGUoUGxhdGZvcm1DbHV0dGVyQW5p
bWF0aW9uOjpLZXlmcmFtZSwga2V5UGF0aCk7Ci0gICAgc2V0dXBBbmltYXRpb24oa2V5ZnJhbWVB
bmltLmdldCgpLCBhbmltLCBhZGRpdGl2ZSk7Ci0gICAgcmV0dXJuIGtleWZyYW1lQW5pbTsKLX0K
LQotYm9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0VHJhbnNmb3JtQW5pbWF0aW9uS2V5ZnJh
bWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiog
YW5pbWF0aW9uLCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGtleWZyYW1lQW5pbSwgaW50IGZ1
bmN0aW9uSW5kZXgsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1P
cFR5cGUsIGJvb2wgaXNNYXRyaXhBbmltYXRpb24sIGNvbnN0IEludFNpemUmIGJveFNpemUpCi17
Ci0gICAgVmVjdG9yPGZsb2F0PiBrZXlUaW1lczsKLSAgICBWZWN0b3I8ZmxvYXQ+IGZsb2F0VmFs
dWVzOwotICAgIFZlY3RvcjxGbG9hdFBvaW50M0Q+IGZsb2F0UG9pbnQzRFZhbHVlczsKLSAgICBW
ZWN0b3I8VHJhbnNmb3JtYXRpb25NYXRyaXg+IHRyYW5zZm9ybWF0aW9uTWF0cml4VmFsdWVzOwot
ICAgIFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+IHRpbWluZ0Z1bmN0aW9uczsKLQotICAg
IGJvb2wgZm9yd2FyZHMgPSBhbmltYXRpb24tPmRpcmVjdGlvbklzRm9yd2FyZHMoKTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBmb3J3YXJkcyA/IGkgOiAodmFsdWVMaXN0LnNpemUoKSAtIGkg
LSAxKTsKLSAgICAgICAgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmIGN1clZhbHVlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmPih2YWx1ZUxpc3QuYXQo
aW5kZXgpKTsKLSAgICAgICAga2V5VGltZXMuYXBwZW5kKGZvcndhcmRzID8gY3VyVmFsdWUua2V5
VGltZSgpIDogKDEgLSBjdXJWYWx1ZS5rZXlUaW1lKCkpKTsKLQotICAgICAgICBpZiAoaXNNYXRy
aXhBbmltYXRpb24pIHsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9y
bTsKLSAgICAgICAgICAgIGN1clZhbHVlLnZhbHVlKCkuYXBwbHkoYm94U2l6ZSwgdHJhbnNmb3Jt
KTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IEluIENvcmVBbmltYXRpb24gY2FzZSwgaWYgYW55
IG1hdHJpeCBpcyBzaW5ndWxhciwgQ0Egd29uJ3QgYW5pbWF0ZSBpdCBjb3JyZWN0bHkuCi0gICAg
ICAgICAgICAvLyBCdXQgSSdtIG5vdCBzdXJlIGNsdXR0ZXIgYWxzbyBkb2VzLiBDaGVjayBpdCBs
YXRlciwgYW5kIHRoZW4gZGVjaWRlCi0gICAgICAgICAgICAvLyB3aGV0aGVyIHJlbW92aW5nIGZv
bGxvd2luZyBsaW5lcyBvciBub3QuCi0gICAgICAgICAgICBpZiAoIXRyYW5zZm9ybS5pc0ludmVy
dGlibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHRy
YW5zZm9ybWF0aW9uTWF0cml4VmFsdWVzLmFwcGVuZCh0cmFuc2Zvcm0pOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm1PcCA9
IGN1clZhbHVlLnZhbHVlKCkuYXQoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgICAgICBpZiAoaXNU
cmFuc2Zvcm1UeXBlTnVtYmVyKHRyYW5zZm9ybU9wVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBm
bG9hdCB2YWx1ZTsKLSAgICAgICAgICAgICAgICBnZXRUcmFuc2Zvcm1GdW5jdGlvblZhbHVlKHRy
YW5zZm9ybU9wLCB0cmFuc2Zvcm1PcFR5cGUsIGJveFNpemUsIHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBmbG9hdFZhbHVlcy5hcHBlbmQodmFsdWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChp
c1RyYW5zZm9ybVR5cGVGbG9hdFBvaW50M0QodHJhbnNmb3JtT3BUeXBlKSkgewotICAgICAgICAg
ICAgICAgIEZsb2F0UG9pbnQzRCB2YWx1ZTsKLSAgICAgICAgICAgICAgICBnZXRUcmFuc2Zvcm1G
dW5jdGlvblZhbHVlKHRyYW5zZm9ybU9wLCB0cmFuc2Zvcm1PcFR5cGUsIGJveFNpemUsIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICBmbG9hdFBvaW50M0RWYWx1ZXMuYXBwZW5kKHZhbHVlKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dmFsdWU7Ci0gICAgICAgICAgICAgICAgZ2V0VHJhbnNmb3JtRnVuY3Rpb25WYWx1ZSh0cmFuc2Zv
cm1PcCwgdHJhbnNmb3JtT3BUeXBlLCBib3hTaXplLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
dHJhbnNmb3JtYXRpb25NYXRyaXhWYWx1ZXMuYXBwZW5kKHZhbHVlKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChpIDwgKHZhbHVlTGlzdC5zaXplKCkgLSAxKSkKLSAg
ICAgICAgICAgIHRpbWluZ0Z1bmN0aW9ucy5hcHBlbmQodGltaW5nRnVuY3Rpb25Gb3JBbmltYXRp
b25WYWx1ZShmb3J3YXJkcyA/IGN1clZhbHVlIDogdmFsdWVMaXN0LmF0KGluZGV4IC0gMSksICph
bmltYXRpb24pKTsKLSAgICB9Ci0KLSAgICBrZXlmcmFtZUFuaW0tPnNldEtleVRpbWVzKGtleVRp
bWVzKTsKLQotICAgIGlmIChpc1RyYW5zZm9ybVR5cGVOdW1iZXIodHJhbnNmb3JtT3BUeXBlKSkK
LSAgICAgICAga2V5ZnJhbWVBbmltLT5zZXRWYWx1ZXMoZmxvYXRWYWx1ZXMpOwotICAgIGVsc2Ug
aWYgKGlzVHJhbnNmb3JtVHlwZUZsb2F0UG9pbnQzRCh0cmFuc2Zvcm1PcFR5cGUpKQotICAgICAg
ICBrZXlmcmFtZUFuaW0tPnNldFZhbHVlcyhmbG9hdFBvaW50M0RWYWx1ZXMpOwotICAgIGVsc2UK
LSAgICAgICAga2V5ZnJhbWVBbmltLT5zZXRWYWx1ZXModHJhbnNmb3JtYXRpb25NYXRyaXhWYWx1
ZXMpOwotCi0gICAga2V5ZnJhbWVBbmltLT5zZXRUaW1pbmdGdW5jdGlvbnModGltaW5nRnVuY3Rp
b25zLCAhZm9yd2FyZHMpOwotCi0gICAgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpWYWx1ZUZ1
bmN0aW9uVHlwZSB2YWx1ZUZ1bmN0aW9uID0gZ2V0VmFsdWVGdW5jdGlvbk5hbWVGb3JUcmFuc2Zv
cm1PcGVyYXRpb24odHJhbnNmb3JtT3BUeXBlKTsKLSAgICBpZiAodmFsdWVGdW5jdGlvbiAhPSBQ
bGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246Ok5vVmFsdWVGdW5jdGlvbikKLSAgICAgICAga2V5ZnJh
bWVBbmltLT5zZXRWYWx1ZUZ1bmN0aW9uKHZhbHVlRnVuY3Rpb24pOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldFRyYW5zZm9ybUFuaW1hdGlv
bkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmlt
YXRpb24qIGFuaW1hdGlvbiwgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBiYXNpY0FuaW0sIGlu
dCBmdW5jdGlvbkluZGV4LCBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNm
b3JtT3BUeXBlLCBib29sIGlzTWF0cml4QW5pbWF0aW9uLCBjb25zdCBJbnRTaXplJiBib3hTaXpl
KQotewotICAgIEFTU0VSVCh2YWx1ZUxpc3Quc2l6ZSgpID09IDIpOwotCi0gICAgYm9vbCBmb3J3
YXJkcyA9IGFuaW1hdGlvbi0+ZGlyZWN0aW9uSXNGb3J3YXJkcygpOwotCi0gICAgdW5zaWduZWQg
ZnJvbUluZGV4ID0gIWZvcndhcmRzOwotICAgIHVuc2lnbmVkIHRvSW5kZXggPSBmb3J3YXJkczsK
LQotICAgIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlJiBzdGFydFZhbHVlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmPih2YWx1ZUxpc3QuYXQoZnJvbUlu
ZGV4KSk7Ci0gICAgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmIGVuZFZhbHVlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmPih2YWx1ZUxpc3QuYXQodG9J
bmRleCkpOwotCi0gICAgaWYgKGlzTWF0cml4QW5pbWF0aW9uKSB7Ci0gICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGZyb21UcmFuc2Zvcm0sIHRvVHJhbnNmb3JtOwotICAgICAgICBzdGFydFZh
bHVlLnZhbHVlKCkuYXBwbHkoYm94U2l6ZSwgZnJvbVRyYW5zZm9ybSk7Ci0gICAgICAgIGVuZFZh
bHVlLnZhbHVlKCkuYXBwbHkoYm94U2l6ZSwgdG9UcmFuc2Zvcm0pOwotCi0gICAgICAgIC8vIEZJ
WE1FOiBJZiBhbnkgbWF0cml4IGlzIHNpbmd1bGFyLCBDQSB3b24ndCBhbmltYXRlIGl0IGNvcnJl
Y3RseS4KLSAgICAgICAgLy8gU28gZmFsbCBiYWNrIHRvIHNvZnR3YXJlIGFuaW1hdGlvbiwgQnV0
IGl0J3Mgbm90IHN1cmUgaW4gY2x1dHRlciBjYXNlLgotICAgICAgICAvLyBXZSBuZWVkIHRvIGlu
dmVzdGlnYXRlIGl0IG1vcmUuCi0gICAgICAgIGlmICghZnJvbVRyYW5zZm9ybS5pc0ludmVydGli
bGUoKSB8fCAhdG9UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgYmFzaWNBbmltLT5zZXRGcm9tVmFsdWUoZnJvbVRyYW5zZm9ybSk7
Ci0gICAgICAgIGJhc2ljQW5pbS0+c2V0VG9WYWx1ZSh0b1RyYW5zZm9ybSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKGlzVHJhbnNmb3JtVHlwZU51bWJlcih0cmFuc2Zvcm1PcFR5cGUpKSB7
Ci0gICAgICAgICAgICBmbG9hdCBmcm9tVmFsdWU7Ci0gICAgICAgICAgICBnZXRUcmFuc2Zvcm1G
dW5jdGlvblZhbHVlKHN0YXJ0VmFsdWUudmFsdWUoKS5hdChmdW5jdGlvbkluZGV4KSwgdHJhbnNm
b3JtT3BUeXBlLCBib3hTaXplLCBmcm9tVmFsdWUpOwotICAgICAgICAgICAgYmFzaWNBbmltLT5z
ZXRGcm9tVmFsdWUoZnJvbVZhbHVlKTsKLQotICAgICAgICAgICAgZmxvYXQgdG9WYWx1ZTsKLSAg
ICAgICAgICAgIGdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWUoZW5kVmFsdWUudmFsdWUoKS5hdChm
dW5jdGlvbkluZGV4KSwgdHJhbnNmb3JtT3BUeXBlLCBib3hTaXplLCB0b1ZhbHVlKTsKLSAgICAg
ICAgICAgIGJhc2ljQW5pbS0+c2V0VG9WYWx1ZSh0b1ZhbHVlKTsKLSAgICAgICAgfSBlbHNlIGlm
IChpc1RyYW5zZm9ybVR5cGVGbG9hdFBvaW50M0QodHJhbnNmb3JtT3BUeXBlKSkgewotICAgICAg
ICAgICAgRmxvYXRQb2ludDNEIGZyb21WYWx1ZTsKLSAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1
bmN0aW9uVmFsdWUoc3RhcnRWYWx1ZS52YWx1ZSgpLmF0KGZ1bmN0aW9uSW5kZXgpLCB0cmFuc2Zv
cm1PcFR5cGUsIGJveFNpemUsIGZyb21WYWx1ZSk7Ci0gICAgICAgICAgICBiYXNpY0FuaW0tPnNl
dEZyb21WYWx1ZShmcm9tVmFsdWUpOwotCi0gICAgICAgICAgICBGbG9hdFBvaW50M0QgdG9WYWx1
ZTsKLSAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWUoZW5kVmFsdWUudmFsdWUo
KS5hdChmdW5jdGlvbkluZGV4KSwgdHJhbnNmb3JtT3BUeXBlLCBib3hTaXplLCB0b1ZhbHVlKTsK
LSAgICAgICAgICAgIGJhc2ljQW5pbS0+c2V0VG9WYWx1ZSh0b1ZhbHVlKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21WYWx1ZTsKLSAgICAg
ICAgICAgIGdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWUoc3RhcnRWYWx1ZS52YWx1ZSgpLmF0KGZ1
bmN0aW9uSW5kZXgpLCB0cmFuc2Zvcm1PcFR5cGUsIGJveFNpemUsIGZyb21WYWx1ZSk7Ci0gICAg
ICAgICAgICBiYXNpY0FuaW0tPnNldEZyb21WYWx1ZShmcm9tVmFsdWUpOwotCi0gICAgICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1ZhbHVlOwotICAgICAgICAgICAgZ2V0VHJhbnNmb3Jt
RnVuY3Rpb25WYWx1ZShlbmRWYWx1ZS52YWx1ZSgpLmF0KGZ1bmN0aW9uSW5kZXgpLCB0cmFuc2Zv
cm1PcFR5cGUsIGJveFNpemUsIHRvVmFsdWUpOwotICAgICAgICAgICAgYmFzaWNBbmltLT5zZXRU
b1ZhbHVlKHRvVmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjb2RlcGF0
aCBpcyB1c2VkIGZvciAyLWtleWZyYW1lIGFuaW1hdGlvbnMsIHNvIHdlIHN0aWxsIG5lZWQgdG8g
bG9vayBpbiB0aGUgc3RhcnQKLSAgICAvLyBmb3IgYSB0aW1pbmcgZnVuY3Rpb24uIEV2ZW4gaW4g
dGhlIHJldmVyc2luZyBhbmltYXRpb24gY2FzZSwgdGhlIGZpcnN0IGtleWZyYW1lIHByb3ZpZGVz
IHRoZSB0aW1pbmcgZnVuY3Rpb24uCi0gICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1
bmN0aW9uID0gdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZSh2YWx1ZUxpc3QuYXQoMCks
ICphbmltYXRpb24pOwotICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24odGltaW5nRnVu
Y3Rpb24sICFmb3J3YXJkcyk7Ci0KLSAgICBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OlZhbHVl
RnVuY3Rpb25UeXBlIHZhbHVlRnVuY3Rpb24gPSBnZXRWYWx1ZUZ1bmN0aW9uTmFtZUZvclRyYW5z
Zm9ybU9wZXJhdGlvbih0cmFuc2Zvcm1PcFR5cGUpOwotICAgIGlmICh2YWx1ZUZ1bmN0aW9uICE9
IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Tm9WYWx1ZUZ1bmN0aW9uKQotICAgICAgICBiYXNp
Y0FuaW0tPnNldFZhbHVlRnVuY3Rpb24odmFsdWVGdW5jdGlvbik7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6YXBwZW5kVG9VbmNvbW1pdHRlZEFu
aW1hdGlvbnMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyogb3BlcmF0aW9ucywgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgaW50IGFu
aW1hdGlvbkluZGV4LCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCBpc01hdHJpeEFuaW1hdGlvbikK
LXsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtT3AgPSBp
c01hdHJpeEFuaW1hdGlvbiA/IFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEIDogb3BlcmF0
aW9ucy0+b3BlcmF0aW9ucygpLmF0KGFuaW1hdGlvbkluZGV4KS0+Z2V0T3BlcmF0aW9uVHlwZSgp
OwotICAgIGJvb2wgYWRkaXRpdmUgPSBhbmltYXRpb25JbmRleCA+IDA7Ci0gICAgYm9vbCBpc0tl
eWZyYW1lID0gdmFsdWVMaXN0LnNpemUoKSA+IDI7Ci0KLSAgICBSZWZQdHI8UGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uPiBjbHV0dGVyQW5pbWF0aW9uOwotICAgIGJvb2wgdmFsaWRNYXRyaWNlcyA9
IHRydWU7Ci0gICAgaWYgKGlzS2V5ZnJhbWUpIHsKLSAgICAgICAgY2x1dHRlckFuaW1hdGlvbiA9
IGNyZWF0ZUtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgcHJvcGVydHlJZFRvU3RyaW5nKHZh
bHVlTGlzdC5wcm9wZXJ0eSgpKSwgYWRkaXRpdmUpOwotICAgICAgICB2YWxpZE1hdHJpY2VzID0g
c2V0VHJhbnNmb3JtQW5pbWF0aW9uS2V5ZnJhbWVzKHZhbHVlTGlzdCwgYW5pbWF0aW9uLCBjbHV0
dGVyQW5pbWF0aW9uLmdldCgpLCBhbmltYXRpb25JbmRleCwgdHJhbnNmb3JtT3AsIGlzTWF0cml4
QW5pbWF0aW9uLCBib3hTaXplKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjbHV0dGVyQW5pbWF0
aW9uID0gY3JlYXRlQmFzaWNBbmltYXRpb24oYW5pbWF0aW9uLCBwcm9wZXJ0eUlkVG9TdHJpbmco
dmFsdWVMaXN0LnByb3BlcnR5KCkpLCBhZGRpdGl2ZSk7Ci0gICAgICAgIHZhbGlkTWF0cmljZXMg
PSBzZXRUcmFuc2Zvcm1BbmltYXRpb25FbmRwb2ludHModmFsdWVMaXN0LCBhbmltYXRpb24sIGNs
dXR0ZXJBbmltYXRpb24uZ2V0KCksIGFuaW1hdGlvbkluZGV4LCB0cmFuc2Zvcm1PcCwgaXNNYXRy
aXhBbmltYXRpb24sIGJveFNpemUpOwotICAgIH0KLQotICAgIGlmICghdmFsaWRNYXRyaWNlcykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV91bmNvbWl0dGVkQW5pbWF0aW9ucy5hcHBl
bmQoTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbihjbHV0dGVyQW5pbWF0aW9uLCBhbmltYXRpb25OYW1l
LCB2YWx1ZUxpc3QucHJvcGVydHkoKSwgYW5pbWF0aW9uSW5kZXgsIHRpbWVPZmZzZXQpKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y3JlYXRlVHJh
bnNmb3JtQW5pbWF0aW9uc0Zyb21LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZh
bHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEludFNpemUmIGJveFNpemUpCi17Ci0g
ICAgQVNTRVJUKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm0pOwotCi0gICAgYm9vbCBoYXNCaWdSb3RhdGlvbjsKLSAgICBpbnQgbGlzdEluZGV4
ID0gdmFsaWRhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlTGlzdCwgaGFzQmlnUm90YXRpb24p
OwotICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSAobGlzdEluZGV4
ID49IDApID8gJnN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlJj4odmFs
dWVMaXN0LmF0KGxpc3RJbmRleCkpLnZhbHVlKCkgOiAwOwotCi0gICAgLy8gV2UgbmVlZCB0byBm
YWxsIGJhY2sgdG8gc29mdHdhcmUgYW5pbWF0aW9uIGlmIHdlIGRvbid0IGhhdmUgc2V0VmFsdWVG
dW5jdGlvbjosIGFuZAotICAgIC8vIHdlIHdvdWxkIG5lZWQgdG8gYW5pbWF0ZSBlYWNoIGluY29t
aW5nIHRyYW5zZm9ybSBmdW5jdGlvbiBzZXBhcmF0ZWx5LiBUaGlzIGlzIHRoZQotICAgIC8vIGNh
c2UgaWYgd2UgaGF2ZSBhIHJvdGF0aW9uID49IDE4MCBvciB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUg
dHJhbnNmb3JtIGZ1bmN0aW9uLgotICAgIGlmICgoaGFzQmlnUm90YXRpb24gfHwgKG9wZXJhdGlv
bnMgJiYgb3BlcmF0aW9ucy0+c2l6ZSgpID4gMSkpICYmICFQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OnN1cHBvcnRzVmFsdWVGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBib29sIHZhbGlkTWF0cmljZXMgPSB0cnVlOwotCi0gICAgLy8gSWYgZnVuY3Rpb24gbGlzdHMg
ZG9uJ3QgbWF0Y2ggd2UgZG8gYSBtYXRyaXggYW5pbWF0aW9uLCBvdGhlcndpc2Ugd2UgZG8gYSBj
b21wb25lbnQgaGFyZHdhcmUgYW5pbWF0aW9uLgotICAgIC8vIEFsc28sIHdlIGNhbid0IGRvIGNv
bXBvbmVudCBhbmltYXRpb24gdW5sZXNzIHdlIGhhdmUgdmFsdWVGdW5jdGlvbiwgc28gd2UgbmVl
ZCB0byBkbyBtYXRyaXggYW5pbWF0aW9uCi0gICAgLy8gaWYgdGhhdCdzIG5vdCB0cnVlIGFzIHdl
bGwuCi0gICAgYm9vbCBpc01hdHJpeEFuaW1hdGlvbiA9IGxpc3RJbmRleCA8IDAgfHwgIVBsYXRm
b3JtQ2x1dHRlckFuaW1hdGlvbjo6c3VwcG9ydHNWYWx1ZUZ1bmN0aW9uKCkgfHwgKG9wZXJhdGlv
bnMtPnNpemUoKSA+PSAyICYmICFQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnN1cHBvcnRzQWRk
aXRpdmVWYWx1ZUZ1bmN0aW9uKCkpOwotICAgIGludCBudW1BbmltYXRpb25zID0gaXNNYXRyaXhB
bmltYXRpb24gPyAxIDogb3BlcmF0aW9ucy0+c2l6ZSgpOwotCi0gICAgZm9yIChpbnQgYW5pbWF0
aW9uSW5kZXggPSAwOyBhbmltYXRpb25JbmRleCA8IG51bUFuaW1hdGlvbnM7ICsrYW5pbWF0aW9u
SW5kZXgpIHsKLSAgICAgICAgaWYgKCFhcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyh2YWx1
ZUxpc3QsIG9wZXJhdGlvbnMsIGFuaW1hdGlvbiwgYW5pbWF0aW9uTmFtZSwgYm94U2l6ZSwgYW5p
bWF0aW9uSW5kZXgsIHRpbWVPZmZzZXQsIGlzTWF0cml4QW5pbWF0aW9uKSkgewotICAgICAgICAg
ICAgdmFsaWRNYXRyaWNlcyA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRNYXRyaWNlczsKLX0KLQotYm9vbCBHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6Y3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3Ry
aW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBBU1NFUlQodmFs
dWVMaXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7Ci0K
LSAgICBib29sIGlzS2V5ZnJhbWUgPSB2YWx1ZUxpc3Quc2l6ZSgpID4gMjsKLSAgICBib29sIHZh
bHVlc09LOwotCi0gICAgYm9vbCBhZGRpdGl2ZSA9IGZhbHNlOwotICAgIGludCBhbmltYXRpb25J
bmRleCA9IDA7Ci0KLSAgICBSZWZQdHI8UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uPiBjbHV0dGVy
QW5pbWF0aW9uOwotCi0gICAgaWYgKGlzS2V5ZnJhbWUpIHsKLSAgICAgICAgY2x1dHRlckFuaW1h
dGlvbiA9IGNyZWF0ZUtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgcHJvcGVydHlJZFRvU3Ry
aW5nKHZhbHVlTGlzdC5wcm9wZXJ0eSgpKSwgYWRkaXRpdmUpOwotICAgICAgICB2YWx1ZXNPSyA9
IHNldEFuaW1hdGlvbktleWZyYW1lcyh2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgY2x1dHRlckFuaW1h
dGlvbi5nZXQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2x1dHRlckFuaW1hdGlvbiA9IGNy
ZWF0ZUJhc2ljQW5pbWF0aW9uKGFuaW1hdGlvbiwgcHJvcGVydHlJZFRvU3RyaW5nKHZhbHVlTGlz
dC5wcm9wZXJ0eSgpKSwgYWRkaXRpdmUpOwotICAgICAgICB2YWx1ZXNPSyA9IHNldEFuaW1hdGlv
bkVuZHBvaW50cyh2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgY2x1dHRlckFuaW1hdGlvbi5nZXQoKSk7
Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZXNPSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgbV91bmNvbWl0dGVkQW5pbWF0aW9ucy5hcHBlbmQoTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbihj
bHV0dGVyQW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB2YWx1ZUxpc3QucHJvcGVydHkoKSwgYW5p
bWF0aW9uSW5kZXgsIHRpbWVPZmZzZXQpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBh
bmltLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQotewot
ICAgIEFTU0VSVCghYW5pbWF0aW9uTmFtZS5pc0VtcHR5KCkpOwotCi0gICAgaWYgKCFhbmltIHx8
IGFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpIHx8IHZhbHVlTGlzdC5zaXplKCkgPCAyKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogQ2x1dHRlclRpbWVsaW5lIHNl
ZW1zIHRvIHN1cHBvcnQgc3RlcHMgdGltaW5nIGZ1bmN0aW9uLiBTbyB3ZSBuZWVkIHRvIGltcHJv
dmUgaGVyZS4KLSAgICAvLyBTZWUgaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvY2x1dHRlci9z
dGFibGUvQ2x1dHRlclRpbWVsaW5lLmh0bWwjQ2x1dHRlckFuaW1hdGlvbk1vZGUKLSAgICBpZiAo
YW5pbWF0aW9uSGFzU3RlcHNUaW1pbmdGdW5jdGlvbih2YWx1ZUxpc3QsIGFuaW0pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGNyZWF0ZWRBbmltYXRpb25zID0gZmFsc2U7Ci0g
ICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFu
c2Zvcm0pCi0gICAgICAgIGNyZWF0ZWRBbmltYXRpb25zID0gY3JlYXRlVHJhbnNmb3JtQW5pbWF0
aW9uc0Zyb21LZXlmcmFtZXModmFsdWVMaXN0LCBhbmltLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zm
c2V0LCBib3hTaXplKTsKLSAgICBlbHNlCi0gICAgICAgIGNyZWF0ZWRBbmltYXRpb25zID0gY3Jl
YXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyh2YWx1ZUxpc3QsIGFuaW0sIGFuaW1hdGlvbk5hbWUs
IHRpbWVPZmZzZXQpOwotCi0gICAgaWYgKGNyZWF0ZWRBbmltYXRpb25zKQotICAgICAgICBub3Rl
TGF5ZXJQcm9wZXJ0eUNoYW5nZWQoQW5pbWF0aW9uQ2hhbmdlZCk7Ci0KLSAgICByZXR1cm4gY3Jl
YXRlZEFuaW1hdGlvbnM7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnJlbW92ZUFu
aW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCi17Ci0gICAgaWYgKCFhbmltYXRp
b25Jc1J1bm5pbmcoYW5pbWF0aW9uTmFtZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYW5p
bWF0aW9uc1RvUHJvY2Vzcy5hZGQoYW5pbWF0aW9uTmFtZSwgQW5pbWF0aW9uUHJvY2Vzc2luZ0Fj
dGlvbihSZW1vdmUpKTsKLSAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoQW5pbWF0aW9uQ2hh
bmdlZCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnJlbW92ZUNsdXR0ZXJBbmlt
YXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbk5hbWUsIGludCBpbmRleCkKLXsKLSAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxh
eWVyID0gYW5pbWF0ZWRMYXllcihwcm9wZXJ0eSk7Ci0KLSAgICBTdHJpbmcgYW5pbWF0aW9uSUQg
PSBhbmltYXRpb25JZGVudGlmaWVyKGFuaW1hdGlvbk5hbWUsIHByb3BlcnR5LCBpbmRleCk7Ci0K
LSAgICBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGV4aXN0aW5nQW5pbWF0aW9uID0gZ3JhcGhp
Y3NMYXllckFjdG9yR2V0QW5pbWF0aW9uRm9yS2V5KGxheWVyLCBhbmltYXRpb25JRCk7Ci0gICAg
aWYgKCFleGlzdGluZ0FuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZXhp
c3RpbmdBbmltYXRpb24tPnJlbW92ZUFuaW1hdGlvbkZvcktleShsYXllciwgYW5pbWF0aW9uSUQp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpwYXVz
ZUNsdXR0ZXJBbmltYXRpb25PbkxheWVyKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBpbnQgaW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6
OnNldEFuaW1hdGlvbk9uTGF5ZXIoUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBjbHV0dGVyQW5p
bSwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5h
bWUsIGludCBpbmRleCwgZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgR3JhcGhpY3NMYXllckFj
dG9yKiBsYXllciA9IGFuaW1hdGVkTGF5ZXIocHJvcGVydHkpOwotCi0gICAgaWYgKHRpbWVPZmZz
ZXQpCi0gICAgICAgIGNsdXR0ZXJBbmltLT5zZXRCZWdpblRpbWUoZ19nZXRfcmVhbF90aW1lKCkg
LSB0aW1lT2Zmc2V0KTsKLQotICAgIFN0cmluZyBhbmltYXRpb25JRCA9IGFuaW1hdGlvbklkZW50
aWZpZXIoYW5pbWF0aW9uTmFtZSwgcHJvcGVydHksIGluZGV4KTsKLQotICAgIFBsYXRmb3JtQ2x1
dHRlckFuaW1hdGlvbiogZXhpc3RpbmdBbmltYXRpb24gPSBncmFwaGljc0xheWVyQWN0b3JHZXRB
bmltYXRpb25Gb3JLZXkobGF5ZXIsIGFuaW1hdGlvbklEKTsKLSAgICBpZiAoZXhpc3RpbmdBbmlt
YXRpb24pCi0gICAgICAgIGV4aXN0aW5nQW5pbWF0aW9uLT5yZW1vdmVBbmltYXRpb25Gb3JLZXko
bGF5ZXIsIGFuaW1hdGlvbklEKTsKLQotICAgIGNsdXR0ZXJBbmltLT5hZGRBbmltYXRpb25Gb3JL
ZXkobGF5ZXIsIGFuaW1hdGlvbklEKTsKLX0KLQotYm9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6
c2V0QW5pbWF0aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3Qs
IGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGJh
c2ljQW5pbSkKLXsKLSAgICBib29sIGZvcndhcmRzID0gYW5pbWF0aW9uLT5kaXJlY3Rpb25Jc0Zv
cndhcmRzKCk7Ci0KLSAgICB1bnNpZ25lZCBmcm9tSW5kZXggPSAhZm9yd2FyZHM7Ci0gICAgdW5z
aWduZWQgdG9JbmRleCA9IGZvcndhcmRzOwotCi0gICAgc3dpdGNoICh2YWx1ZUxpc3QucHJvcGVy
dHkoKSkgewotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6IHsKLSAgICAgICAgYmFz
aWNBbmltLT5zZXRGcm9tVmFsdWUoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1
ZSY+KHZhbHVlTGlzdC5hdChmcm9tSW5kZXgpKS52YWx1ZSgpKTsKLSAgICAgICAgYmFzaWNBbmlt
LT5zZXRUb1ZhbHVlKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUmPih2YWx1
ZUxpc3QuYXQodG9JbmRleCkpLnZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIHdlIGRvbid0IGFuaW1h
dGUgY29sb3IgeWV0Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIFRoaXMgY29kZXBh
dGggaXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRv
IGxvb2sgaW4gdGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGlu
IHRoZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRl
cyB0aGUgdGltaW5nIGZ1bmN0aW9uLgotICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdG
dW5jdGlvbiA9IHRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUodmFsdWVMaXN0LmF0KDAp
LCAqYW5pbWF0aW9uKTsKLSAgICBpZiAodGltaW5nRnVuY3Rpb24pCi0gICAgICAgIGJhc2ljQW5p
bS0+c2V0VGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24sICFmb3J3YXJkcyk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0QW5pbWF0aW9u
S2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1h
dGlvbiogYW5pbWF0aW9uLCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGtleWZyYW1lQW5pbSkK
LXsKLSAgICBWZWN0b3I8ZmxvYXQ+IGtleVRpbWVzOwotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVz
OwotICAgIFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+IHRpbWluZ0Z1bmN0aW9uczsKLQot
ICAgIGJvb2wgZm9yd2FyZHMgPSBhbmltYXRpb24tPmRpcmVjdGlvbklzRm9yd2FyZHMoKTsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBmb3J3YXJkcyA/IGkgOiAodmFsdWVMaXN0LnNpemUoKSAt
IGkgLSAxKTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uVmFsdWUmIGN1clZhbHVlID0gdmFsdWVM
aXN0LmF0KGluZGV4KTsKLSAgICAgICAga2V5VGltZXMuYXBwZW5kKGZvcndhcmRzID8gY3VyVmFs
dWUua2V5VGltZSgpIDogKDEgLSBjdXJWYWx1ZS5rZXlUaW1lKCkpKTsKLQotICAgICAgICBzd2l0
Y2ggKHZhbHVlTGlzdC5wcm9wZXJ0eSgpKSB7Ci0gICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0
eU9wYWNpdHk6IHsKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUmIGZsb2F0
VmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlJj4oY3VyVmFsdWUp
OwotICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChmbG9hdFZhbHVlLnZhbHVlKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyB3ZSBkb24ndCBhbmltYXRlIGNvbG9yIHlldAotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaSA8ICh2YWx1ZUxpc3Quc2l6
ZSgpIC0gMSkpCi0gICAgICAgICAgICB0aW1pbmdGdW5jdGlvbnMuYXBwZW5kKHRpbWluZ0Z1bmN0
aW9uRm9yQW5pbWF0aW9uVmFsdWUoZm9yd2FyZHMgPyBjdXJWYWx1ZSA6IHZhbHVlTGlzdC5hdChp
bmRleCAtIDEpLCAqYW5pbWF0aW9uKSk7Ci0gICAgfQotCi0gICAga2V5ZnJhbWVBbmltLT5zZXRL
ZXlUaW1lcyhrZXlUaW1lcyk7Ci0gICAga2V5ZnJhbWVBbmltLT5zZXRWYWx1ZXModmFsdWVzKTsK
LSAgICBrZXlmcmFtZUFuaW0tPnNldFRpbWluZ0Z1bmN0aW9ucyh0aW1pbmdGdW5jdGlvbnMsICFm
b3J3YXJkcyk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR3JhcGhpY3NMYXllckFjdG9yKiBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6bGF5ZXJGb3JTdXBlcmxheWVyKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9zdHJ1Y3R1cmFsTGF5ZXIgPyBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSA6IG1fbGF5
ZXIuZ2V0KCk7Ci19Ci0KLUdyYXBoaWNzTGF5ZXJBY3RvciogR3JhcGhpY3NMYXllckNsdXR0ZXI6
OmFuaW1hdGVkTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAg
IHJldHVybiBwcmltYXJ5TGF5ZXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVy
Q2x1dHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzVlYTE3NzQ1NDQ0YWYx
Njg2Y2QwZjZlZGMzOTA1OGEwYjMzNjgzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIv
R3JhcGhpY3NMYXllckNsdXR0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgR3JhcGhpY3NMYXllckNsdXR0ZXJfaAotI2RlZmluZSBHcmFwaGljc0xheWVyQ2x1dHRl
cl9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJHcmFw
aGljc0xheWVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgotI2luY2x1ZGUg
IkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb24uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudC5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLSNpbmNsdWRlIDxjbHV0dGVyL2NsdXR0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLXR5cGVkZWYgc3RydWN0
IF9HcmFwaGljc0xheWVyQWN0b3IgR3JhcGhpY3NMYXllckFjdG9yOwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFRyYW5zZm9ybVN0YXRlOwotCi10eXBlZGVmIFZlY3RvcjxHUmVmUHRy
PEdyYXBoaWNzTGF5ZXJBY3Rvcj4gPiBHcmFwaGljc0xheWVyQWN0b3JMaXN0OwotCi1jbGFzcyBH
cmFwaGljc0xheWVyQ2x1dHRlciA6IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgUGxhdGZv
cm1DbHV0dGVyTGF5ZXJDbGllbnQgewotcHVibGljOgotICAgIGVudW0gTGF5ZXJUeXBlIHsgTGF5
ZXJUeXBlTGF5ZXIsIExheWVyVHlwZVdlYkxheWVyLCBMYXllclR5cGVWaWRlb0xheWVyLCBMYXll
clR5cGVUcmFuc2Zvcm1MYXllciwgTGF5ZXJUeXBlUm9vdExheWVyLCBMYXllclR5cGVDdXN0b20g
fTsKLQotICAgIEdyYXBoaWNzTGF5ZXJDbHV0dGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKLSAg
ICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyQ2x1dHRlcigpOwotCi0gICAgdmlydHVhbCBDbHV0dGVy
QWN0b3IqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQo
R3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhp
Y3NMYXllciosIGludCBpbmRleCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQWJvdmUoR3Jh
cGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpOwotICAgIHZpcnR1YWwgdm9pZCBh
ZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdD
aGlsZCk7Ci0gICAgdmlydHVhbCBib29sIHNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGlj
c0xheWVyKj4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KEdyYXBoaWNzTGF5ZXIqKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7Ci0gICAgdmlydHVhbCB2
b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRPcGFjaXR5KGZsb2F0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYp
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwotICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c05lZWRzRGlzcGxheSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFn
ZShJbWFnZSopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVj
dCYpOwotCi0gICAgdmlydHVhbCBib29sIGhhc0NvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRlbnRzTGF5ZXI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChi
b29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJ
bnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0
aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmx1
c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBm
bHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBzdHJ1Y3QgQ29t
bWl0U3RhdGUgewotICAgICAgICBib29sIGFuY2VzdG9ySGFzVHJhbnNmb3JtQW5pbWF0aW9uOwot
ICAgICAgICBDb21taXRTdGF0ZSgpCi0gICAgICAgICAgICA6IGFuY2VzdG9ySGFzVHJhbnNmb3Jt
QW5pbWF0aW9uKGZhbHNlKQotICAgICAgICB7IH0KLSAgICB9OwotICAgIHZvaWQgcmVjdXJzaXZl
Q29tbWl0Q2hhbmdlcyhjb25zdCBDb21taXRTdGF0ZSYsIGNvbnN0IFRyYW5zZm9ybVN0YXRlJiwg
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yID0gMSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxh
dGl2ZVRvQmFzZSA9IEZsb2F0UG9pbnQoKSwgYm9vbCBhZmZlY3RlZEJ5UGFnZVNjYWxlID0gZmFs
c2UpOwotCi1wcml2YXRlOgotICAgIEZsb2F0UG9pbnQgY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVU
b0Jhc2UoZmxvYXQmIHBhZ2VTY2FsZSkgY29uc3Q7Ci0KLSAgICBib29sIGFuaW1hdGlvbklzUnVu
bmluZyhjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9ydW5uaW5nQW5pbWF0aW9ucy5maW5kKGFuaW1hdGlvbk5hbWUpICE9IG1fcnVubmlu
Z0FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21taXRMYXllckNoYW5nZXNC
ZWZvcmVTdWJsYXllcnMoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBw
b3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKLSAgICB2b2lkIGNvbW1pdExheWVyQ2hhbmdlc0FmdGVy
U3VibGF5ZXJzKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZU9wYWNpdHlPbkxheWVyKCk7Ci0gICAgdm9p
ZCBzZXR1cENvbnRlbnRzTGF5ZXIoR3JhcGhpY3NMYXllckFjdG9yKik7Ci0gICAgR3JhcGhpY3NM
YXllckFjdG9yKiBjb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVy
LmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbHV0dGVyTGF5ZXJBbmltYXRp
b25TdGFydGVkKGRvdWJsZSBiZWdpblRpbWUpOwotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNs
dXR0ZXJMYXllclBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYg
Y2xpcCk7Ci0KLSAgICBHcmFwaGljc0xheWVyQWN0b3IqIHByaW1hcnlMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJhbExheWVyLmdldCgpID8gbV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkg
OiBtX2xheWVyLmdldCgpOyB9Ci0gICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllckZvclN1cGVy
bGF5ZXIoKSBjb25zdDsKLSAgICBHcmFwaGljc0xheWVyQWN0b3IqIGFuaW1hdGVkTGF5ZXIoQW5p
bWF0ZWRQcm9wZXJ0eUlEKSBjb25zdDsKLQotICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1DbHV0dGVy
QW5pbWF0aW9uPiBjcmVhdGVCYXNpY0FuaW1hdGlvbihjb25zdCBBbmltYXRpb24qLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgYWRkaXRpdmUpOwotICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1D
bHV0dGVyQW5pbWF0aW9uPiBjcmVhdGVLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24q
LCBjb25zdCBTdHJpbmcmLCBib29sIGFkZGl0aXZlKTsKLSAgICB2b2lkIHNldHVwQW5pbWF0aW9u
KFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiosIGNvbnN0IEFuaW1hdGlvbiosIGJvb2wgYWRkaXRp
dmUpOwotCi0gICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0
aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uVmFsdWUmLCBjb25zdCBBbmltYXRpb24mKTsKLQotICAg
IGJvb2wgc2V0QW5pbWF0aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29u
c3QgQW5pbWF0aW9uKiwgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKik7Ci0gICAgYm9vbCBzZXRB
bmltYXRpb25LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRp
b24qLCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qKTsKLQotICAgIHZvaWQgc2V0QW5pbWF0aW9u
T25MYXllcihQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qLCBBbmltYXRlZFByb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCk7
Ci0gICAgYm9vbCByZW1vdmVDbHV0dGVyQW5pbWF0aW9uRnJvbUxheWVyKEFuaW1hdGVkUHJvcGVy
dHlJRCwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBpbnQgaW5kZXgpOwotICAgIHZvaWQg
cGF1c2VDbHV0dGVyQW5pbWF0aW9uT25MYXllcihBbmltYXRlZFByb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCk7Ci0KLSAg
ICBib29sIGNyZWF0ZUFuaW1hdGlvbkZyb21LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJs
ZSB0aW1lT2Zmc2V0KTsKLSAgICBib29sIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbnNGcm9tS2V5
ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgSW50U2l6ZSYg
Ym94U2l6ZSk7Ci0KLSAgICBib29sIHNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyhjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEFuaW1hdGlvbiosIFBsYXRmb3JtQ2x1dHRlckFu
aW1hdGlvbiosIGludCBmdW5jdGlvbkluZGV4LCBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUsIGJvb2wgaXNNYXRyaXhBbmltYXRpb24sIGNvbnN0IEludFNpemUmIGJveFNpemUpOwot
ICAgIGJvb2wgc2V0VHJhbnNmb3JtQW5pbWF0aW9uS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiwgaW50
IGZ1bmN0aW9uSW5kZXgsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgYm9vbCBp
c01hdHJpeEFuaW1hdGlvbiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSk7Ci0KLSAgICBlbnVtIE1v
dmVPckNvcHkgeyBNb3ZlLCBDb3B5IH07Ci0gICAgc3RhdGljIHZvaWQgbW92ZU9yQ29weUxheWVy
QW5pbWF0aW9uKE1vdmVPckNvcHksIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWRlbnRpZmllciwg
R3JhcGhpY3NMYXllckFjdG9yKiBmcm9tTGF5ZXIsIEdyYXBoaWNzTGF5ZXJBY3RvciogdG9MYXll
cik7Ci0gICAgdm9pZCBtb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JDb3B5LCBHcmFwaGljc0xh
eWVyQWN0b3IqIGZyb21MYXllciwgR3JhcGhpY3NMYXllckFjdG9yKiB0b0xheWVyKTsKLQotICAg
IGJvb2wgYXBwZW5kVG9VbmNvbW1pdHRlZEFuaW1hdGlvbnMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBpbnQgYW5pbWF0
aW9uSW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sIGlzTWF0cml4QW5pbWF0aW9uKTsKLQot
ICAgIGVudW0gTGF5ZXJDaGFuZ2UgewotICAgICAgICBOb0NoYW5nZSA9IDAsCi0gICAgICAgIE5h
bWVDaGFuZ2VkID0gMSA8PCAxLAotICAgICAgICBDaGlsZHJlbkNoYW5nZWQgPSAxIDw8IDIsIC8v
IGFsc28gdXNlZCBmb3IgY29udGVudCBsYXllciwgYW5kIHByZXNlcnZlcy0zZCwgYW5kIHNpemUg
aWYgdGlsaW5nIGNoYW5nZXM/Ci0gICAgICAgIEdlb21ldHJ5Q2hhbmdlZCA9IDEgPDwgMywKLSAg
ICAgICAgVHJhbnNmb3JtQ2hhbmdlZCA9IDEgPDwgNCwKLSAgICAgICAgQ2hpbGRyZW5UcmFuc2Zv
cm1DaGFuZ2VkID0gMSA8PCA1LAotICAgICAgICBQcmVzZXJ2ZXMzRENoYW5nZWQgPSAxIDw8IDYs
Ci0gICAgICAgIE1hc2tzVG9Cb3VuZHNDaGFuZ2VkID0gMSA8PCA3LAotICAgICAgICBEcmF3c0Nv
bnRlbnRDaGFuZ2VkID0gMSA8PCA4LCAvLyBuZWVkIHRoaXM/Ci0gICAgICAgIEJhY2tncm91bmRD
b2xvckNoYW5nZWQgPSAxIDw8IDksCi0gICAgICAgIENvbnRlbnRzT3BhcXVlQ2hhbmdlZCA9IDEg
PDwgMTAsCi0gICAgICAgIEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZWQgPSAxIDw8IDExLAotICAg
ICAgICBPcGFjaXR5Q2hhbmdlZCA9IDEgPDwgMTIsCi0gICAgICAgIEFuaW1hdGlvbkNoYW5nZWQg
PSAxIDw8IDEzLAotICAgICAgICBEaXJ0eVJlY3RzQ2hhbmdlZCA9IDEgPDwgMTQsCi0gICAgICAg
IENvbnRlbnRzSW1hZ2VDaGFuZ2VkID0gMSA8PCAxNSwKLSAgICAgICAgQ29udGVudHNNZWRpYUxh
eWVyQ2hhbmdlZCA9IDEgPDwgMTYsCi0gICAgICAgIENvbnRlbnRzQ2FudmFzTGF5ZXJDaGFuZ2Vk
ID0gMSA8PCAxNywKLSAgICAgICAgQ29udGVudHNDb2xvckxheWVyQ2hhbmdlZCA9IDEgPDwgMTgs
Ci0gICAgICAgIENvbnRlbnRzUmVjdENoYW5nZWQgPSAxIDw8IDE5LAotICAgICAgICBNYXNrTGF5
ZXJDaGFuZ2VkID0gMSA8PCAyMCwKLSAgICAgICAgUmVwbGljYXRlZExheWVyQ2hhbmdlZCA9IDEg
PDwgMjEsCi0gICAgICAgIENvbnRlbnRzTmVlZHNEaXNwbGF5ID0gMSA8PCAyMiwKLSAgICAgICAg
QWNjZWxlcmF0ZXNEcmF3aW5nQ2hhbmdlZCA9IDEgPDwgMjMsCi0gICAgICAgIENvbnRlbnRzU2Nh
bGVDaGFuZ2VkID0gMSA8PCAyNCwKLSAgICAgICAgQ29udGVudHNWaXNpYmlsaXR5Q2hhbmdlZCA9
IDEgPDwgMjUsCi0gICAgICAgIFZpc2libGVSZWN0Q2hhbmdlZCA9IDEgPDwgMjYsCi0gICAgICAg
IEZpbHRlcnNDaGFuZ2VkID0gMSA8PCAyNywKLSAgICAgICAgRGVidWdJbmRpY2F0b3JzQ2hhbmdl
ZCA9IDEgPDwgMjgKLSAgICB9OwotCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBMYXllckNoYW5nZUZs
YWdzOwotICAgIHZvaWQgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKExheWVyQ2hhbmdlRmxhZ3Mp
OwotICAgIHZvaWQgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKLQotICAgIHZvaWQgdXBkYXRlQmFj
a2ZhY2VWaXNpYmlsaXR5KCk7Ci0gICAgdm9pZCB1cGRhdGVTdHJ1Y3R1cmFsTGF5ZXIoKTsKLSAg
ICB2b2lkIHVwZGF0ZUxheWVyTmFtZXMoKTsKLSAgICB2b2lkIHVwZGF0ZVN1YmxheWVyTGlzdCgp
OwotICAgIHZvaWQgdXBkYXRlR2VvbWV0cnkoZmxvYXQgcGl4ZWxBbGlnbm1lbnRTY2FsZSwgY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7Ci0gICAgdm9pZCB1cGRhdGVU
cmFuc2Zvcm0oKTsKLSAgICB2b2lkIHVwZGF0ZU1hc2tzVG9Cb3VuZHMoKTsKLSAgICB2b2lkIHVw
ZGF0ZUxheWVyRHJhd3NDb250ZW50KGZsb2F0IHBpeGVsQWxpZ25tZW50U2NhbGUsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwotICAgIHZvaWQgdXBkYXRlQ29udGVu
dHNJbWFnZSgpOwotICAgIHZvaWQgdXBkYXRlQ29udGVudHNSZWN0KCk7Ci0gICAgdm9pZCB1cGRh
dGVDb250ZW50c05lZWRzRGlzcGxheSgpOwotICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9ucygpOwot
Ci0gICAgZW51bSBTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHsKLSAgICAgICAgTm9TdHJ1Y3R1cmFs
TGF5ZXIgPSAwLAotICAgICAgICBTdHJ1Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2ZXMzRCwKLSAgICAg
ICAgU3RydWN0dXJhbExheWVyRm9yUmVwbGljYUZsYXR0ZW5pbmcKLSAgICB9OwotICAgIHZvaWQg
ZW5zdXJlU3RydWN0dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UpOwotICAgIFN0cnVj
dHVyYWxMYXllclB1cnBvc2Ugc3RydWN0dXJhbExheWVyUHVycG9zZSgpIGNvbnN0OwotCi0gICAg
dm9pZCByZXBhaW50TGF5ZXJEaXJ0eVJlY3RzKCk7Ci0KLSAgICBHUmVmUHRyPEdyYXBoaWNzTGF5
ZXJBY3Rvcj4gbV9sYXllcjsKLSAgICBHUmVmUHRyPEdyYXBoaWNzTGF5ZXJBY3Rvcj4gbV9zdHJ1
Y3R1cmFsTGF5ZXI7IC8vIEEgbGF5ZXIgdXNlZCBmb3Igc3RydWN0dXJhbCByZWFzb25zLCBsaWtl
IHByZXNlcnZlcy0zZCBvciByZXBsaWNhLWZsYXR0ZW5pbmcuIElzIHRoZSBwYXJlbnQgb2YgbV9s
YXllci4KLSAgICBHUmVmUHRyPEdyYXBoaWNzTGF5ZXJBY3Rvcj4gbV9jb250ZW50c0xheWVyOyAv
LyBBIGxheWVyIHVzZWQgZm9yIGlubmVyIGNvbnRlbnQsIGxpa2UgaW1hZ2UgYW5kIHZpZGVvCi0g
ICAgZW51bSBDb250ZW50c0xheWVyUHVycG9zZSB7Ci0gICAgICAgIE5vQ29udGVudHNMYXllciA9
IDAsCi0gICAgICAgIENvbnRlbnRzTGF5ZXJGb3JJbWFnZSwKLSAgICAgICAgQ29udGVudHNMYXll
ckZvck1lZGlhLAotICAgICAgICBDb250ZW50c0xheWVyRm9yQ2FudmFzLAotICAgICAgICBDb250
ZW50c0xheWVyRm9yQmFja2dyb3VuZENvbG9yCi0gICAgfTsKLQotICAgIENvbnRlbnRzTGF5ZXJQ
dXJwb3NlIG1fY29udGVudHNMYXllclB1cnBvc2U7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gbV9wZW5kaW5nQ29udGVudHNJbWFnZTsKLQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fZGly
dHlSZWN0czsKLSAgICBMYXllckNoYW5nZUZsYWdzIG1fdW5jb21taXR0ZWRDaGFuZ2VzOwotCi0g
ICAgLy8gVGhpcyByZXByZXNlbnRzIHRoZSBhbmltYXRpb24gb2YgYSBzaW5nbGUgcHJvcGVydHku
IFRoZXJlIG1heSBiZSBtdWx0aXBsZSB0cmFuc2Zvcm0gYW5pbWF0aW9ucyBmb3IKLSAgICAvLyBh
IHNpbmdsZSB0cmFuc2l0aW9uIG9yIGtleWZyYW1lIGFuaW1hdGlvbiwgc28gaW5kZXggaXMgdXNl
ZCB0byBkaXN0aW5ndWlzaCB0aGVzZS4KLSAgICBzdHJ1Y3QgTGF5ZXJQcm9wZXJ0eUFuaW1hdGlv
biB7Ci0gICAgICAgIExheWVyUHJvcGVydHlBbmltYXRpb24oUGFzc1JlZlB0cjxQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb24+IGNhQW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUs
IEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgaW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNl
dCkKLSAgICAgICAgOiBtX2FuaW1hdGlvbihjYUFuaW1hdGlvbikKLSAgICAgICAgLCBtX25hbWUo
YW5pbWF0aW9uTmFtZSkKLSAgICAgICAgLCBtX3Byb3BlcnR5KHByb3BlcnR5KQotICAgICAgICAs
IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV90aW1lT2Zmc2V0KHRpbWVPZmZzZXQpCi0gICAg
ICAgIHsgfQotCi0gICAgICAgIFJlZlB0cjxQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24+IG1fYW5p
bWF0aW9uOwotICAgICAgICBTdHJpbmcgbV9uYW1lOwotICAgICAgICBBbmltYXRlZFByb3BlcnR5
SUQgbV9wcm9wZXJ0eTsKLSAgICAgICAgaW50IG1faW5kZXg7Ci0gICAgICAgIGRvdWJsZSBtX3Rp
bWVPZmZzZXQ7Ci0gICAgfTsKLQotICAgIC8vIFVuY29tbWl0dGVkIHRyYW5zaXRpb25zIGFuZCBh
bmltYXRpb25zLgotICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiBtX3VuY29taXR0
ZWRBbmltYXRpb25zOwotCi0gICAgZW51bSBBY3Rpb24geyBSZW1vdmUsIFBhdXNlIH07Ci0gICAg
c3RydWN0IEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24gewotICAgICAgICBBbmltYXRpb25Qcm9j
ZXNzaW5nQWN0aW9uKEFjdGlvbiBhY3Rpb24gPSBSZW1vdmUsIGRvdWJsZSB0aW1lT2Zmc2V0ID0g
MCkKLSAgICAgICAgICAgIDogYWN0aW9uKGFjdGlvbikKLSAgICAgICAgICAgICwgdGltZU9mZnNl
dCh0aW1lT2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgQWN0aW9uIGFjdGlv
bjsKLSAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQ7IC8vIG9ubHkgdXNlZCBmb3IgcGF1c2UKLSAg
ICB9OwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rp
b24+IEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA7Ci0gICAgQW5pbWF0aW9uc1RvUHJvY2Vzc01hcCBt
X2FuaW1hdGlvbnNUb1Byb2Nlc3M7Ci0KLSAgICAvLyBNYXAgb2YgYW5pbWF0aW9uIG5hbWVzIHRv
IHRoZWlyIGFzc29jaWF0ZWQgbGlzdHMgb2YgcHJvcGVydHkgYW5pbWF0aW9ucywgc28gd2UgY2Fu
IHJlbW92ZS9wYXVzZSB0aGVtLgotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxM
YXllclByb3BlcnR5QW5pbWF0aW9uPiA+IEFuaW1hdGlvbnNNYXA7Ci0gICAgQW5pbWF0aW9uc01h
cCBtX3J1bm5pbmdBbmltYXRpb25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYgLy8gR3JhcGhp
Y3NMYXllckNsdXR0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2x1dHRlci9QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDJlOGUzNGYxNTU4ZGYxZWE0MmFkNGRj
OWY3YWY4YjlmMjRjZTkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvUGxhdGZvcm1D
bHV0dGVyQW5pbWF0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY4OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0xheWVyQWN0b3IuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJUaW1pbmdGdW5jdGlvbi5oIgotI2luY2x1ZGUg
IlVuaXRCZXppZXIuaCIKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBu
YW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIHRpbWVs
aW5lU3RhcnRlZENhbGxiYWNrKENsdXR0ZXJUaW1lbGluZSosIFBsYXRmb3JtQ2x1dHRlckFuaW1h
dGlvbiogYW5pbWF0aW9uKQotewotICAgIGFuaW1hdGlvbi0+YW5pbWF0aW9uRGlkU3RhcnQoKTsK
LX0KLQotc3RhdGljIFN0cmluZyB0b0NsdXR0ZXJBY3RvclByb3BlcnR5U3RyaW5nKGNvbnN0IFBs
YXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6VmFsdWVGdW5jdGlvblR5cGUgdmFsdWVGdW5jdGlvblR5
cGUpCi17Ci0gICAgLy8gQ2x1dHRlckFjdG9yIGRvZXNuJ3QgaGF2ZSAnc2NhbGUnIGFuZCAndHJh
bnNsYXRlJyBwcm9wZXJ0aWVzLiBTbyB3ZSBzaG91bGQgc3VwcG9ydAotICAgIC8vICdzY2FsZScg
YW5kICd0cmFuc2xhdGUnIFZhbHVlRnVuY3Rpb25UeXBlIGJ5IGNvbWJpbmF0aW9uIG9mIGV4aXN0
aW5nIHByb3BlcnR5IGFuaW1hdGlvbnMuIAotICAgIGNvbnN0IGNoYXIqIGNsdXR0ZXJBY3RvclBy
b3BlcnR5W10gPSB7ICJOb1Byb3BlcnR5IiwgInJvdGF0aW9uLWFuZ2xlLXgiLCAicm90YXRpb24t
YW5nbGUteSIsICJyb3RhdGlvbi1hbmdsZS16IiwgInNjYWxlLXgiLCAic2NhbGUteSIsICJzY2Fs
ZS16IiwgInNjYWxlIiwgInRyYW5zbGF0aW9uLXgiLCAidHJhbnNsYXRpb24teSIsICJ0cmFuc2xh
dGlvbi16IiwgInRyYW5zbGF0ZSIsICJ0cmFuc2Zvcm0iIH07IAotICAgIHJldHVybiBjbHV0dGVy
QWN0b3JQcm9wZXJ0eVt2YWx1ZUZ1bmN0aW9uVHlwZV07Ci19Ci0KLXN0YXRpYyBDbHV0dGVyQW5p
bWF0aW9uTW9kZSB0b0NsdXR0ZXJBbmltYXRpb25Nb2RlKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0
aW1pbmdGdW5jdGlvbikKLXsKLSAgICBBU1NFUlQodGltaW5nRnVuY3Rpb24pOwotCi0gICAgaWYg
KHRpbWluZ0Z1bmN0aW9uLT5pc0xpbmVhclRpbWluZ0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVy
biBDTFVUVEVSX0xJTkVBUjsKLSAgICBpZiAodGltaW5nRnVuY3Rpb24tPmlzQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbigpKSB7Ci0gICAgICAgIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OlRp
bWluZ0Z1bmN0aW9uUHJlc2V0IHRpbWluZ0Z1bmN0aW9uUHJlc2V0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKS0+dGltaW5nRnVu
Y3Rpb25QcmVzZXQoKTsgCi0gICAgICAgIHN3aXRjaCAodGltaW5nRnVuY3Rpb25QcmVzZXQpIHsK
LSAgICAgICAgY2FzZSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpFYXNlOgotICAgICAgICAg
ICAgcmV0dXJuIENMVVRURVJfRUFTRTsKLSAgICAgICAgY2FzZSBDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uOjpFYXNlSW46Ci0gICAgICAgICAgICByZXR1cm4gQ0xVVFRFUl9FQVNFX0lOOwotICAg
ICAgICBjYXNlIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkVhc2VPdXQ6Ci0gICAgICAgICAg
ICByZXR1cm4gQ0xVVFRFUl9FQVNFX09VVDsKLSAgICAgICAgY2FzZSBDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uOjpFYXNlSW5PdXQ6Ci0gICAgICAgICAgICByZXR1cm4gQ0xVVFRFUl9FQVNFX0lO
X09VVDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIENMVVRURVJfRUFTRTsKLX0KLQotc3Rh
dGljIGdib29sZWFuIGNsdXR0ZXJNYXRyaXhQcm9ncmVzcyhjb25zdCBHVmFsdWUqIGZyb21WYWx1
ZSwgY29uc3QgR1ZhbHVlKiB0b1ZhbHVlLCBnZG91YmxlIHByb2dyZXNzLCBHVmFsdWUqIHJldHVy
blZhbHVlKQotewotICAgIGNvbnN0IENvZ2xNYXRyaXgqIGZyb21Db2dsTWF0cml4ID0gc3RhdGlj
X2Nhc3Q8Q29nbE1hdHJpeCo+KGdfdmFsdWVfZ2V0X2JveGVkKGZyb21WYWx1ZSkpOwotICAgIGNv
bnN0IENvZ2xNYXRyaXgqIHRvQ29nbE1hdHJpeCA9IHN0YXRpY19jYXN0PENvZ2xNYXRyaXgqPihn
X3ZhbHVlX2dldF9ib3hlZCh0b1ZhbHVlKSk7Ci0KLSAgICBBU1NFUlQoZnJvbUNvZ2xNYXRyaXgg
JiYgdG9Db2dsTWF0cml4KTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21NYXRyaXgo
ZnJvbUNvZ2xNYXRyaXgpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvTWF0cml4KHRvQ29n
bE1hdHJpeCk7Ci0gICAgdG9NYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOwotCi0g
ICAgQ29nbE1hdHJpeCByZXN1bHRDb2dsTWF0cml4ID0gdG9NYXRyaXg7Ci0gICAgZ192YWx1ZV9z
ZXRfYm94ZWQocmV0dXJuVmFsdWUsICZyZXN1bHRDb2dsTWF0cml4KTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OkFuaW1hdGVkUHJvcGVydHlUeXBl
IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c3RyaW5nVG9BbmltYXRlZFByb3BlcnR5VHlwZShj
b25zdCBTdHJpbmcmIGtleVBhdGgpIGNvbnN0Ci17Ci0gICAgaWYgKGtleVBhdGggPT0gInRyYW5z
Zm9ybSIpCi0gICAgICAgIHJldHVybiBUcmFuc2Zvcm07Ci0gICAgaWYgKGtleVBhdGggPT0gIm9w
YWNpdHkiKQotICAgICAgICByZXR1cm4gT3BhY2l0eTsKLSAgICBpZiAoa2V5UGF0aCA9PSAiYmFj
a2dyb3VuZENvbG9yIikKLSAgICAgICAgcmV0dXJuIEJhY2tncm91bmRDb2xvcjsKLSAgICByZXR1
cm4gTm9BbmltYXRlZFByb3BlcnR5VHlwZTsKLX0KLQotUGFzc1JlZlB0cjxQbGF0Zm9ybUNsdXR0
ZXJBbmltYXRpb24+IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Y3JlYXRlKEFuaW1hdGlvblR5
cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQotewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKHR5cGUsIGtleVBhdGgpKTsKLX0KLQotUGFzc1Jl
ZlB0cjxQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24+IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6
Y3JlYXRlKFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiogYW5pbWF0aW9uKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKGFuaW1hdGlvbikpOwotfQot
Ci1QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbihBbmlt
YXRpb25UeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKLSAgICA6IG1fdHlwZSh0eXBl
KQotICAgICwgbV9hbmltYXRlZFByb3BlcnR5VHlwZShzdHJpbmdUb0FuaW1hdGVkUHJvcGVydHlU
eXBlKGtleVBhdGgpKQotICAgICwgbV9hZGRpdGl2ZShmYWxzZSkKLSAgICAsIG1fZnJvbVZhbHVl
KDApCi0gICAgLCBtX3RvVmFsdWUoMCkKLSAgICAsIG1fcmVwZWF0Q291bnQoMCkKLSAgICAsIG1f
dGltaW5nRnVuY3Rpb24oMCkKLSAgICAsIG1fdmFsdWVGdW5jdGlvblR5cGUoTm9WYWx1ZUZ1bmN0
aW9uKQotewotICAgIG1fYW5pbWF0aW9uID0gYWRvcHRHUmVmKEdfT0JKRUNUKGNsdXR0ZXJfdHJh
bnNpdGlvbl9ncm91cF9uZXcoKSkpOwotfQotCi1QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OlBs
YXRmb3JtQ2x1dHRlckFuaW1hdGlvbihjb25zdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGFu
aW1hdGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1QbGF0Zm9ybUNsdXR0ZXJB
bmltYXRpb246On5QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24oKQotewotICAgIG1fYW5pbWF0aW9u
LmNsZWFyKCk7Ci0gICAgbV9sYXllci5jbGVhcigpOwotfQotCi1ib29sIFBsYXRmb3JtQ2x1dHRl
ckFuaW1hdGlvbjo6c3VwcG9ydHNWYWx1ZUZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnN1cHBvcnRzQWRkaXRpdmVWYWx1
ZUZ1bmN0aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogQ2x1dHRlciAxLjEyIGRvZXNuJ3Qgc3VwcG9y
dCBhZGRpdGl2ZSB2YWx1ZUZ1bmN0aW9uIHR5cGUgYW5pbWF0aW9ucy4KLSAgICAvLyBTbywgd2Ug
dXNlIG1hdHJpeCBhbmltYXRpb24gaW5zdGVhZCB1bnRpbCBjbHV0dGVyIHN1cHBvcnRzIGl0Lgot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotZG91YmxlIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6
YmVnaW5UaW1lKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAw
OwotfQotCi12b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0QmVnaW5UaW1lKGRvdWJs
ZSB2YWx1ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1kb3VibGUgUGxhdGZvcm1D
bHV0dGVyQW5pbWF0aW9uOjpkdXJhdGlvbigpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGR1cmF0aW9u
ID0gY2x1dHRlcl90aW1lbGluZV9nZXRfZHVyYXRpb24oQ0xVVFRFUl9USU1FTElORShtX2FuaW1h
dGlvbi5nZXQoKSkpOwotICAgIHJldHVybiBkdXJhdGlvbiAvIDEwMDA7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXREdXJhdGlvbihkb3VibGUgdmFsdWUpCi17Ci0gICAg
Ly8gQ2x1dHRlciBBbmltYXRpb24gc2V0cyB0aGUgZHVyYXRpb24gdGltZSBpbiBtaWxsaXNlY29u
ZHMuCi0gICAgZ2ludCBkdXJhdGlvbiA9IHZhbHVlICogMTAwMDsKLSAgICBjbHV0dGVyX3RpbWVs
aW5lX3NldF9kdXJhdGlvbihDTFVUVEVSX1RJTUVMSU5FKG1fYW5pbWF0aW9uLmdldCgpKSwgZHVy
YXRpb24pOwotfQotCi1mbG9hdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNwZWVkKCkgY29u
c3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFBs
YXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0U3BlZWQoZmxvYXQgdmFsdWUpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotZG91YmxlIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6dGlt
ZU9mZnNldCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotdm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldFRpbWVPZmZzZXQoZG91Ymxl
IHZhbHVlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWZsb2F0IFBsYXRmb3JtQ2x1
dHRlckFuaW1hdGlvbjo6cmVwZWF0Q291bnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3JlcGVh
dENvdW50OwotfQotCi12b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0UmVwZWF0Q291
bnQoZmxvYXQgdmFsdWUpCi17Ci0gICAgaWYgKG1fcmVwZWF0Q291bnQgPT0gdmFsdWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fcmVwZWF0Q291bnQgPSB2YWx1ZTsKLSAgICBjbHV0dGVyX3Rp
bWVsaW5lX3NldF9yZXBlYXRfY291bnQodGltZWxpbmUoKSwgc3RhdGljX2Nhc3Q8Z2ludD4odmFs
dWUgPT0gbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSA/IC0xIDogdmFsdWUpKTsgCi19Ci0K
LWJvb2wgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjphdXRvcmV2ZXJzZXMoKSBjb25zdAotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFBsYXRm
b3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0QXV0b3JldmVyc2VzKGJvb2wgdmFsdWUpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpGaWxsTW9k
ZVR5cGUgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpmaWxsTW9kZSgpIGNvbnN0Ci17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpO
b0ZpbGxNb2RlOwotfQotCi12b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0RmlsbE1v
ZGUoRmlsbE1vZGVUeXBlIHZhbHVlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1p
bmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24sIGJvb2wgcmV2ZXJzZSkKLXsKLSAgICBpZiAoIXRp
bWluZ0Z1bmN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RpbWluZ0Z1bmN0aW9uID0g
dGltaW5nRnVuY3Rpb247Ci19Ci0KLXZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpjb3B5
VGltaW5nRnVuY3Rpb25Gcm9tKGNvbnN0IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiogdmFsdWUp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBQbGF0Zm9ybUNsdXR0ZXJBbmlt
YXRpb246OmlzUmVtb3ZlZE9uQ29tcGxldGlvbigpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0
aW9uOjpzZXRSZW1vdmVkT25Db21wbGV0aW9uKGJvb2wgdmFsdWUpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotYm9vbCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmlzQWRkaXRpdmUo
KSBjb25zdAotewotICAgIHJldHVybiBtX2FkZGl0aXZlOwotfQotCi12b2lkIFBsYXRmb3JtQ2x1
dHRlckFuaW1hdGlvbjo6c2V0QWRkaXRpdmUoYm9vbCB2YWx1ZSkKLXsKLSAgICBpZiAobV9hZGRp
dGl2ZSA9PSB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hZGRpdGl2ZSA9IHZhbHVl
OwotfQotCi1QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OlZhbHVlRnVuY3Rpb25UeXBlIFBsYXRm
b3JtQ2x1dHRlckFuaW1hdGlvbjo6dmFsdWVGdW5jdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fdmFsdWVGdW5jdGlvblR5cGU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
OjpzZXRWYWx1ZUZ1bmN0aW9uKFZhbHVlRnVuY3Rpb25UeXBlIHZhbHVlKQotewotICAgIGlmICht
X3ZhbHVlRnVuY3Rpb25UeXBlID09IHZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Zh
bHVlRnVuY3Rpb25UeXBlID0gdmFsdWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0
aW9uOjpzZXRGcm9tVmFsdWUoZmxvYXQgdmFsdWUpCi17Ci0gICAgaWYgKGFuaW1hdGlvblR5cGUo
KSAhPSBCYXNpYyB8fCBtX2Zyb21WYWx1ZSA9PSB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9mcm9tVmFsdWUgPSB2YWx1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OnNldEZyb21WYWx1ZShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFs
dWUpCi17Ci0gICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYyB8fCBtX2Zyb21WYWx1ZU1h
dHJpeCA9PSB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mcm9tVmFsdWVNYXRyaXgg
PSB2YWx1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldEZyb21WYWx1
ZShjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQotewotICAgIGlmIChhbmltYXRpb25UeXBlKCkg
IT0gQmFzaWMgfHwgbV9mcm9tVmFsdWUzRCA9PSB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9mcm9tVmFsdWUzRCA9IHZhbHVlOwotfQotCi12b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1h
dGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiB2YWx1ZSkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Y29w
eUZyb21WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiB2YWx1ZSkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bjo6c2V0VG9WYWx1ZShmbG9hdCB2YWx1ZSkKLXsKLSAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9
IEJhc2ljIHx8IG1fdG9WYWx1ZSA9PSB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90
b1ZhbHVlID0gdmFsdWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRU
b1ZhbHVlKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKLXsKLSAg
ICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljIHx8IG1fdG9WYWx1ZU1hdHJpeCA9PSB2YWx1
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90b1ZhbHVlTWF0cml4ID0gdmFsdWU7Ci19Ci0K
LXZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRUb1ZhbHVlKGNvbnN0IEZsb2F0UG9p
bnQzRCYgdmFsdWUpCi17Ci0gICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYyB8fCBtX3Rv
VmFsdWUzRCA9PSB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90b1ZhbHVlM0QgPSB2
YWx1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldFRvVmFsdWUoY29u
c3QgV2ViQ29yZTo6Q29sb3ImIHZhbHVlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpjb3B5VG9WYWx1ZUZyb20oY29uc3QgUGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uKiB2YWx1ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0VmFsdWVzKGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHZhbHVlKQotewotICAgIEFTU0VSVChhbmltYXRpb25UeXBlKCkgPT0gS2V5ZnJh
bWUpOwotCi0gICAgbV92YWx1ZXMgPSB2YWx1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNsdXR0ZXJB
bmltYXRpb246OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXg+JiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoYW5pbWF0aW9uVHlwZSgpID09IEtleWZyYW1l
KTsKLQotICAgIG1fdmFsdWVzTWF0cml4ID0gdmFsdWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQzRD4mIHZhbHVl
KQotewotICAgIEFTU0VSVChhbmltYXRpb25UeXBlKCkgPT0gS2V5ZnJhbWUpOwotCi0gICAgbV92
YWx1ZXMzRCA9IHZhbHVlOwotfQotCi12b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0
VmFsdWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4mIHZhbHVlKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpjb3B5VmFs
dWVzRnJvbShjb25zdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIHZhbHVlKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRL
ZXlUaW1lcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoYW5pbWF0
aW9uVHlwZSgpID09IEtleWZyYW1lKTsKLQotICAgIG1fa2V5VGltZXMgPSB2YWx1ZTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmNvcHlLZXlUaW1lc0Zyb20oY29uc3QgUGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uKiB2YWx1ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0VGltaW5nRnVuY3Rpb25zKGNv
bnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+JiB2YWx1ZSwgYm9vbCByZXZlcnNlKQot
ewotICAgIEFTU0VSVChhbmltYXRpb25UeXBlKCkgPT0gS2V5ZnJhbWUpOwotCi0gICAgbV90aW1p
bmdGdW5jdGlvbnMgPSB2YWx1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246
OmNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiog
dmFsdWUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNsdXR0
ZXJBbmltYXRpb246OmFuaW1hdGlvbkRpZFN0YXJ0KCkKLXsKLSAgICBBU1NFUlQoQ0xVVFRFUl9J
U19BQ1RPUihtX2xheWVyLmdldCgpKSk7Ci0KLSAgICBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVu
dCogY2xpZW50ID0gZ3JhcGhpY3NMYXllckFjdG9yR2V0Q2xpZW50KEdSQVBISUNTX0xBWUVSX0FD
VE9SKG1fbGF5ZXIuZ2V0KCkpKTsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2xpZW50LT5wbGF0Zm9ybUNsdXR0ZXJMYXllckFuaW1hdGlvblN0YXJ0ZWQoV1RGOjpj
dXJyZW50VGltZSgpKTsKLX0KLQotQ2x1dHRlclRpbWVsaW5lKiBQbGF0Zm9ybUNsdXR0ZXJBbmlt
YXRpb246OnRpbWVsaW5lKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9hbmltYXRpb24pOwotICAg
IHJldHVybiBDTFVUVEVSX1RJTUVMSU5FKG1fYW5pbWF0aW9uLmdldCgpKTsKLX0KLQotdm9pZCBQ
bGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmFkZENsdXR0ZXJUcmFuc2l0aW9uRm9yUHJvcGVydHko
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgY29uc3QgZmxvYXQgZnJvbVZhbHVlLCBjb25zdCBmbG9h
dCB0b1ZhbHVlKQotewotICAgIEFTU0VSVChwcm9wZXJ0eSAhPSAiTm9Qcm9wZXJ0eSIpOwotCi0g
ICAgR1JlZlB0cjxDbHV0dGVyVHJhbnNpdGlvbj4gdHJhbnNpdGlvbiA9IGFkb3B0R1JlZihjbHV0
dGVyX3Byb3BlcnR5X3RyYW5zaXRpb25fbmV3KHByb3BlcnR5LnV0ZjgoKS5kYXRhKCkpKTsKLSAg
ICBpZiAocHJvcGVydHkgPT0gIm9wYWNpdHkiKSB7Ci0gICAgICAgIGNsdXR0ZXJfdHJhbnNpdGlv
bl9zZXRfZnJvbSh0cmFuc2l0aW9uLmdldCgpLCBHX1RZUEVfVUlOVCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGZyb21WYWx1ZSkpOwotICAgICAgICBjbHV0dGVyX3RyYW5zaXRpb25fc2V0X3RvKHRy
YW5zaXRpb24uZ2V0KCksIEdfVFlQRV9VSU5ULCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9WYWx1
ZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNsdXR0ZXJfdHJhbnNpdGlvbl9zZXRfZnJvbSh0
cmFuc2l0aW9uLmdldCgpLCBHX1RZUEVfRkxPQVQsIGZyb21WYWx1ZSk7Ci0gICAgICAgIGNsdXR0
ZXJfdHJhbnNpdGlvbl9zZXRfdG8odHJhbnNpdGlvbi5nZXQoKSwgR19UWVBFX0ZMT0FULCB0b1Zh
bHVlKTsKLSAgICB9Ci0KLSAgICBjbHV0dGVyX3RpbWVsaW5lX3NldF9wcm9ncmVzc19tb2RlKHRp
bWVsaW5lKCksIHRvQ2x1dHRlckFuaW1hdGlvbk1vZGUobV90aW1pbmdGdW5jdGlvbikpOwotCi0g
ICAgY2x1dHRlcl90cmFuc2l0aW9uX2dyb3VwX2FkZF90cmFuc2l0aW9uKENMVVRURVJfVFJBTlNJ
VElPTl9HUk9VUChtX2FuaW1hdGlvbi5nZXQoKSksIHRyYW5zaXRpb24uZ2V0KCkpOwotfQotCi12
b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6YWRkQ2x1dHRlclRyYW5zaXRpb25Gb3JQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZnJvbVZhbHVlLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dG9WYWx1ZSkKLXsKLSAgICBBU1NFUlQocHJvcGVydHkgIT0gIk5vUHJvcGVydHkiKTsKLQotICAg
IGNvbnN0IENvZ2xNYXRyaXggZnJvbUNvZ2xNYXRyaXggPSBmcm9tVmFsdWU7Ci0gICAgY29uc3Qg
Q29nbE1hdHJpeCB0b0NvZ2xNYXRyaXggPSB0b1ZhbHVlOwotCi0gICAgR1JlZlB0cjxDbHV0dGVy
VHJhbnNpdGlvbj4gdHJhbnNpdGlvbiA9IGFkb3B0R1JlZihjbHV0dGVyX3Byb3BlcnR5X3RyYW5z
aXRpb25fbmV3KHByb3BlcnR5LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBjbHV0dGVyX3RyYW5zaXRp
b25fc2V0X2Zyb20odHJhbnNpdGlvbi5nZXQoKSwgQ0xVVFRFUl9UWVBFX01BVFJJWCwgJmZyb21D
b2dsTWF0cml4KTsKLSAgICBjbHV0dGVyX3RyYW5zaXRpb25fc2V0X3RvKHRyYW5zaXRpb24uZ2V0
KCksIENMVVRURVJfVFlQRV9NQVRSSVgsICZ0b0NvZ2xNYXRyaXgpOwotCi0gICAgY2x1dHRlcl90
aW1lbGluZV9zZXRfcHJvZ3Jlc3NfbW9kZSh0aW1lbGluZSgpLCB0b0NsdXR0ZXJBbmltYXRpb25N
b2RlKG1fdGltaW5nRnVuY3Rpb24pKTsKLQotICAgIGNsdXR0ZXJfdHJhbnNpdGlvbl9ncm91cF9h
ZGRfdHJhbnNpdGlvbihDTFVUVEVSX1RSQU5TSVRJT05fR1JPVVAobV9hbmltYXRpb24uZ2V0KCkp
LCB0cmFuc2l0aW9uLmdldCgpKTsKLQotICAgIC8vIEZJWE1FOiBUaGUgbWF0cml4IGludGVycG9s
YXRpb24gYXBpLCBjbHV0dGVyX21hdHJpeF9wcm9ncmVzcyBvZiBDbHV0dGVyIDEuMTIgd29ya3Mg
dW5leHBlY3RlZGx5LgotICAgIC8vIFNvIHdlIG92ZXJ3cml0ZSBpdCBhbmQgaGFuZGxlIHRoZSBp
bnRlcnBvbGF0aW9uIG9mIHR3byBtYXRyaWNlcyB3aXRoIFRyYW5zZm9ybWF0aW9uTWF0cml4Lgot
ICAgIC8vIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk0
MTk3Ci0gICAgY2x1dHRlcl9pbnRlcnZhbF9yZWdpc3Rlcl9wcm9ncmVzc19mdW5jKENMVVRURVJf
VFlQRV9NQVRSSVgsIGNsdXR0ZXJNYXRyaXhQcm9ncmVzcyk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1D
bHV0dGVyQW5pbWF0aW9uOjphZGRDbHV0dGVyVHJhbnNpdGlvbkZvclByb3BlcnR5KGNvbnN0IFN0
cmluZyYgcHJvcGVydHksIGNvbnN0IEZsb2F0UG9pbnQzRCYgZnJvbVZhbHVlLCBjb25zdCBGbG9h
dFBvaW50M0QmIHRvVmFsdWUpCi17Ci0gICAgQVNTRVJUKHByb3BlcnR5ICE9ICJOb1Byb3BlcnR5
Iik7Ci0KLSAgICBpZiAocHJvcGVydHkgPT0gInNjYWxlIikgewotICAgICAgICBhZGRDbHV0dGVy
VHJhbnNpdGlvbkZvclByb3BlcnR5KFN0cmluZygic2NhbGUteCIpLCBmcm9tVmFsdWUueCgpLCB0
b1ZhbHVlLngoKSk7Ci0gICAgICAgIGFkZENsdXR0ZXJUcmFuc2l0aW9uRm9yUHJvcGVydHkoU3Ry
aW5nKCJzY2FsZS15IiksIGZyb21WYWx1ZS55KCksIHRvVmFsdWUueSgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAocHJvcGVydHkgPT0gInRyYW5zbGF0ZSIpIHsKLSAgICAgICAg
YWRkQ2x1dHRlclRyYW5zaXRpb25Gb3JQcm9wZXJ0eShTdHJpbmcoInRyYW5zbGF0aW9uLXgiKSwg
ZnJvbVZhbHVlLngoKSwgdG9WYWx1ZS54KCkpOwotICAgICAgICBhZGRDbHV0dGVyVHJhbnNpdGlv
bkZvclByb3BlcnR5KFN0cmluZygidHJhbnNsYXRpb24teSIpLCBmcm9tVmFsdWUueCgpLCB0b1Zh
bHVlLnkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmFkZENsdXR0ZXJLZXlm
cmFtZVRyYW5zaXRpb25Gb3JQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi17Ci0gICAgQVNTRVJUKHByb3BlcnR5ICE9ICJOb1Byb3Bl
cnR5Iik7Ci0KLSAgICBHVHlwZSBnVHlwZSA9IChwcm9wZXJ0eSA9PSAib3BhY2l0eSIgPyBHX1RZ
UEVfVUlOVCA6IEdfVFlQRV9GTE9BVCk7Ci0KLSAgICBHUmVmUHRyPENsdXR0ZXJUcmFuc2l0aW9u
PiB0cmFuc2l0aW9uID0gYWRvcHRHUmVmKGNsdXR0ZXJfa2V5ZnJhbWVfdHJhbnNpdGlvbl9uZXco
cHJvcGVydHkudXRmOCgpLmRhdGEoKSkpOwotICAgIGlmIChnVHlwZSA9PSBHX1RZUEVfVUlOVCkg
ewotICAgICAgICBjbHV0dGVyX3RyYW5zaXRpb25fc2V0X2Zyb20odHJhbnNpdGlvbi5nZXQoKSwg
Z1R5cGUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZXMuZmlyc3QoKSkpOwotICAgICAgICBj
bHV0dGVyX3RyYW5zaXRpb25fc2V0X3RvKHRyYW5zaXRpb24uZ2V0KCksIGdUeXBlLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odmFsdWVzLmxhc3QoKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNs
dXR0ZXJfdHJhbnNpdGlvbl9zZXRfZnJvbSh0cmFuc2l0aW9uLmdldCgpLCBnVHlwZSwgdmFsdWVz
LmZpcnN0KCkpOwotICAgICAgICBjbHV0dGVyX3RyYW5zaXRpb25fc2V0X3RvKHRyYW5zaXRpb24u
Z2V0KCksIGdUeXBlLCB2YWx1ZXMubGFzdCgpKTsKLSAgICB9Ci0KLSAgICAvLyBJZ25vcmUgdGhl
IGZpcnN0IGtleWZyYW1lLCBzaW5jZSBpdCdzIGEgJzAnIGZyYW1lLCBtZWFuaW5nbGVzcy4KLSAg
ICBjb25zdCB1bnNpZ25lZCBuS2V5ZnJhbWVzID0gdmFsdWVzLnNpemUoKSAtIDE7Ci0gICAgT3du
QXJyYXlQdHI8Q2x1dHRlckFuaW1hdGlvbk1vZGU+IGFuaW1hdGlvbk1vZGVzID0gYWRvcHRBcnJh
eVB0cihuZXcgQ2x1dHRlckFuaW1hdGlvbk1vZGVbbktleWZyYW1lc10pOwotICAgIE93bkFycmF5
UHRyPGRvdWJsZT4ga2V5VGltZXMgPSBhZG9wdEFycmF5UHRyKG5ldyBkb3VibGVbbktleWZyYW1l
c10pOwotICAgIEdPd25QdHI8R1ZhbHVlPiBrZXlWYWx1ZXMoZ19uZXcwKEdWYWx1ZSwgbktleWZy
YW1lcykpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5LZXlmcmFtZXM7ICsraSkg
ewotICAgICAgICBrZXlUaW1lc1tpXSA9IHN0YXRpY19jYXN0PGRvdWJsZT4obV9rZXlUaW1lc1tp
ICsgMV0pOwotICAgICAgICBhbmltYXRpb25Nb2Rlc1tpXSA9IHRvQ2x1dHRlckFuaW1hdGlvbk1v
ZGUobV90aW1pbmdGdW5jdGlvbnNbaV0pOwotICAgICAgICBnX3ZhbHVlX2luaXQoJmtleVZhbHVl
cy5nZXQoKVtpXSwgZ1R5cGUpOwotICAgICAgICBpZiAoZ1R5cGUgPT0gR19UWVBFX1VJTlQpCi0g
ICAgICAgICAgICBnX3ZhbHVlX3NldF91aW50KCZrZXlWYWx1ZXMuZ2V0KClbaV0sIHN0YXRpY19j
YXN0PHVuc2lnbmVkPih2YWx1ZXNbaSArIDFdKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGdfdmFsdWVfc2V0X2Zsb2F0KCZrZXlWYWx1ZXMuZ2V0KClbaV0sIHZhbHVlc1tpICsgMV0pOwot
ICAgIH0KLQotICAgIGNsdXR0ZXJfa2V5ZnJhbWVfdHJhbnNpdGlvbl9zZXRfa2V5X2ZyYW1lcyhD
TFVUVEVSX0tFWUZSQU1FX1RSQU5TSVRJT04odHJhbnNpdGlvbi5nZXQoKSksIG5LZXlmcmFtZXMs
IGtleVRpbWVzLmdldCgpKTsKLSAgICBjbHV0dGVyX2tleWZyYW1lX3RyYW5zaXRpb25fc2V0X3Zh
bHVlcyhDTFVUVEVSX0tFWUZSQU1FX1RSQU5TSVRJT04odHJhbnNpdGlvbi5nZXQoKSksIG5LZXlm
cmFtZXMsIGtleVZhbHVlcy5nZXQoKSk7Ci0gICAgY2x1dHRlcl9rZXlmcmFtZV90cmFuc2l0aW9u
X3NldF9tb2RlcyhDTFVUVEVSX0tFWUZSQU1FX1RSQU5TSVRJT04odHJhbnNpdGlvbi5nZXQoKSks
IG5LZXlmcmFtZXMsIGFuaW1hdGlvbk1vZGVzLmdldCgpKTsKLQotICAgIGNsdXR0ZXJfdHJhbnNp
dGlvbl9ncm91cF9hZGRfdHJhbnNpdGlvbihDTFVUVEVSX1RSQU5TSVRJT05fR1JPVVAobV9hbmlt
YXRpb24uZ2V0KCkpLCB0cmFuc2l0aW9uLmdldCgpKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBuS2V5ZnJhbWVzOyArK2kpCi0gICAgICAgIGdfdmFsdWVfdW5zZXQoJmtleVZhbHVl
cy5nZXQoKVtpXSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjphZGRDbHV0
dGVyS2V5ZnJhbWVUcmFuc2l0aW9uRm9yUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwg
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4PiYgdmFsdWVzKQotewot
ICAgIEFTU0VSVChwcm9wZXJ0eSAhPSAiTm9Qcm9wZXJ0eSIpOwotCi0gICAgVmVjdG9yPENvZ2xN
YXRyaXg+IGNvZ2xNYXRyaWNlczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVz
LnNpemUoKTsgKytpKQotICAgICAgICBjb2dsTWF0cmljZXMuYXBwZW5kKHZhbHVlc1tpXSk7Ci0K
LSAgICBHUmVmUHRyPENsdXR0ZXJUcmFuc2l0aW9uPiB0cmFuc2l0aW9uID0gYWRvcHRHUmVmKGNs
dXR0ZXJfa2V5ZnJhbWVfdHJhbnNpdGlvbl9uZXcocHJvcGVydHkudXRmOCgpLmRhdGEoKSkpOwot
ICAgIGNsdXR0ZXJfdHJhbnNpdGlvbl9zZXRfZnJvbSh0cmFuc2l0aW9uLmdldCgpLCBDTFVUVEVS
X1RZUEVfTUFUUklYLCBjb2dsTWF0cmljZXMuZmlyc3QoKSk7Ci0gICAgY2x1dHRlcl90cmFuc2l0
aW9uX3NldF90byh0cmFuc2l0aW9uLmdldCgpLCBDTFVUVEVSX1RZUEVfTUFUUklYLCBjb2dsTWF0
cmljZXMubGFzdCgpKTsKLQotICAgIC8vIElnbm9yZSB0aGUgZmlyc3Qga2V5ZnJhbWUsIHNpbmNl
IGl0J3MgYSAnMCcgZnJhbWUsIG1lYW5pbmdsZXNzLgotICAgIGNvbnN0IHVuc2lnbmVkIG5LZXlm
cmFtZXMgPSB2YWx1ZXMuc2l6ZSgpIC0gMTsKLSAgICBPd25BcnJheVB0cjxDbHV0dGVyQW5pbWF0
aW9uTW9kZT4gYW5pbWF0aW9uTW9kZXMgPSBhZG9wdEFycmF5UHRyKG5ldyBDbHV0dGVyQW5pbWF0
aW9uTW9kZVtuS2V5ZnJhbWVzXSk7Ci0gICAgT3duQXJyYXlQdHI8ZG91YmxlPiBrZXlUaW1lcyA9
IGFkb3B0QXJyYXlQdHIobmV3IGRvdWJsZVtuS2V5ZnJhbWVzXSk7Ci0gICAgR093blB0cjxHVmFs
dWU+IGtleVZhbHVlcyhnX25ldzAoR1ZhbHVlLCBuS2V5ZnJhbWVzKSk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbktleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGtleVRpbWVzW2ld
ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2tleVRpbWVzW2kgKyAxXSk7Ci0gICAgICAgIGFuaW1h
dGlvbk1vZGVzW2ldID0gdG9DbHV0dGVyQW5pbWF0aW9uTW9kZShtX3RpbWluZ0Z1bmN0aW9uc1tp
XSk7Ci0gICAgICAgIGdfdmFsdWVfaW5pdCgma2V5VmFsdWVzLmdldCgpW2ldLCBDTFVUVEVSX1RZ
UEVfTUFUUklYKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQoJmtleVZhbHVlcy5nZXQoKVtp
XSwgJmNvZ2xNYXRyaWNlc1tpICsgMV0pOwotICAgIH0KLQotICAgIGNsdXR0ZXJfa2V5ZnJhbWVf
dHJhbnNpdGlvbl9zZXRfa2V5X2ZyYW1lcyhDTFVUVEVSX0tFWUZSQU1FX1RSQU5TSVRJT04odHJh
bnNpdGlvbi5nZXQoKSksIG5LZXlmcmFtZXMsIGtleVRpbWVzLmdldCgpKTsKLSAgICBjbHV0dGVy
X2tleWZyYW1lX3RyYW5zaXRpb25fc2V0X3ZhbHVlcyhDTFVUVEVSX0tFWUZSQU1FX1RSQU5TSVRJ
T04odHJhbnNpdGlvbi5nZXQoKSksIG5LZXlmcmFtZXMsIGtleVZhbHVlcy5nZXQoKSk7Ci0gICAg
Y2x1dHRlcl9rZXlmcmFtZV90cmFuc2l0aW9uX3NldF9tb2RlcyhDTFVUVEVSX0tFWUZSQU1FX1RS
QU5TSVRJT04odHJhbnNpdGlvbi5nZXQoKSksIG5LZXlmcmFtZXMsIGFuaW1hdGlvbk1vZGVzLmdl
dCgpKTsKLQotICAgIGNsdXR0ZXJfdHJhbnNpdGlvbl9ncm91cF9hZGRfdHJhbnNpdGlvbihDTFVU
VEVSX1RSQU5TSVRJT05fR1JPVVAobV9hbmltYXRpb24uZ2V0KCkpLCB0cmFuc2l0aW9uLmdldCgp
KTsKLQotICAgIGNsdXR0ZXJfaW50ZXJ2YWxfcmVnaXN0ZXJfcHJvZ3Jlc3NfZnVuYyhDTFVUVEVS
X1RZUEVfTUFUUklYLCBjbHV0dGVyTWF0cml4UHJvZ3Jlc3MpOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG5LZXlmcmFtZXM7ICsraSkKLSAgICAgICAgZ192YWx1ZV91bnNldCgma2V5
VmFsdWVzLmdldCgpW2ldKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmFk
ZENsdXR0ZXJLZXlmcmFtZVRyYW5zaXRpb25Gb3JQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5LCBjb25zdCBWZWN0b3I8RmxvYXRQb2ludDNEPiYgdmFsdWVzKQotewotICAgIEFTU0VSVChw
cm9wZXJ0eSAhPSAiTm9Qcm9wZXJ0eSIpOwotCi0gICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXNYLCB2
YWx1ZXNZOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgdmFsdWVzWC5hcHBlbmQodmFsdWVzW2ldLngoKSk7Ci0gICAgICAgIHZhbHVl
c1kuYXBwZW5kKHZhbHVlc1tpXS55KCkpOwotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eSA9PSAi
c2NhbGUiKSB7Ci0gICAgICAgIGFkZENsdXR0ZXJLZXlmcmFtZVRyYW5zaXRpb25Gb3JQcm9wZXJ0
eShTdHJpbmcoInNjYWxlLXgiKSwgdmFsdWVzWCk7Ci0gICAgICAgIGFkZENsdXR0ZXJLZXlmcmFt
ZVRyYW5zaXRpb25Gb3JQcm9wZXJ0eShTdHJpbmcoInNjYWxlLXkiKSwgdmFsdWVzWSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHByb3BlcnR5ID09ICJ0cmFuc2xhdGUiKSB7Ci0g
ICAgICAgIGFkZENsdXR0ZXJLZXlmcmFtZVRyYW5zaXRpb25Gb3JQcm9wZXJ0eShTdHJpbmcoInRy
YW5zbGF0aW9uLXgiKSwgdmFsdWVzWCk7Ci0gICAgICAgIGFkZENsdXR0ZXJLZXlmcmFtZVRyYW5z
aXRpb25Gb3JQcm9wZXJ0eShTdHJpbmcoInRyYW5zbGF0aW9uLXkiKSwgdmFsdWVzWSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmFkZE9wYWNpdHlUcmFuc2l0aW9uKCkKLXsKLSAg
ICBpZiAoYW5pbWF0aW9uVHlwZSgpID09IEtleWZyYW1lKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fdmFsdWVz
W2ldICo9IDI1NTsKLQotICAgICAgICBhZGRDbHV0dGVyS2V5ZnJhbWVUcmFuc2l0aW9uRm9yUHJv
cGVydHkoU3RyaW5nKCJvcGFjaXR5IiksIG1fdmFsdWVzKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBtX2Zyb21WYWx1ZSAqPSAyNTU7Ci0gICAgICAgIG1fdG9WYWx1ZSAqPSAyNTU7Ci0KLSAgICAg
ICAgYWRkQ2x1dHRlclRyYW5zaXRpb25Gb3JQcm9wZXJ0eShTdHJpbmcoIm9wYWNpdHkiKSwgbV9m
cm9tVmFsdWUsIG1fdG9WYWx1ZSk7Ci0gICAgfQotfQotCi12b2lkIFBsYXRmb3JtQ2x1dHRlckFu
aW1hdGlvbjo6YWRkVHJhbnNmb3JtVHJhbnNpdGlvbigpCi17Ci0gICAgY29uc3QgYm9vbCBpc0tl
eWZyYW1lID0gKGFuaW1hdGlvblR5cGUoKSA9PSBLZXlmcmFtZSk7Ci0KLSAgICBzd2l0Y2ggKG1f
dmFsdWVGdW5jdGlvblR5cGUpIHsKLSAgICBjYXNlIFJvdGF0ZVg6Ci0gICAgY2FzZSBSb3RhdGVZ
OgotICAgIGNhc2UgUm90YXRlWjoKLSAgICAgICAgaWYgKGlzS2V5ZnJhbWUpIHsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IHJhZDJkZWcobV92YWx1ZXNbaV0pOwotCi0gICAgICAg
ICAgICBhZGRDbHV0dGVyS2V5ZnJhbWVUcmFuc2l0aW9uRm9yUHJvcGVydHkodG9DbHV0dGVyQWN0
b3JQcm9wZXJ0eVN0cmluZyhtX3ZhbHVlRnVuY3Rpb25UeXBlKSwgbV92YWx1ZXMpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgbV9mcm9tVmFsdWUgPSByYWQyZGVnKG1fZnJvbVZhbHVl
KTsKLSAgICAgICAgICAgIG1fdG9WYWx1ZSA9IHJhZDJkZWcobV90b1ZhbHVlKTsKLQotICAgICAg
ICAgICAgYWRkQ2x1dHRlclRyYW5zaXRpb25Gb3JQcm9wZXJ0eSh0b0NsdXR0ZXJBY3RvclByb3Bl
cnR5U3RyaW5nKG1fdmFsdWVGdW5jdGlvblR5cGUpLCBtX2Zyb21WYWx1ZSwgbV90b1ZhbHVlKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNjYWxlWDoKLSAgICBjYXNlIFNj
YWxlWToKLSAgICBjYXNlIFNjYWxlWjoKLSAgICBjYXNlIFRyYW5zbGF0ZVg6Ci0gICAgY2FzZSBU
cmFuc2xhdGVZOgotICAgIGNhc2UgVHJhbnNsYXRlWjoKLSAgICAgICAgaWYgKGlzS2V5ZnJhbWUp
Ci0gICAgICAgICAgICBhZGRDbHV0dGVyS2V5ZnJhbWVUcmFuc2l0aW9uRm9yUHJvcGVydHkodG9D
bHV0dGVyQWN0b3JQcm9wZXJ0eVN0cmluZyhtX3ZhbHVlRnVuY3Rpb25UeXBlKSwgbV92YWx1ZXMp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRDbHV0dGVyVHJhbnNpdGlvbkZvclByb3Bl
cnR5KHRvQ2x1dHRlckFjdG9yUHJvcGVydHlTdHJpbmcobV92YWx1ZUZ1bmN0aW9uVHlwZSksIG1f
ZnJvbVZhbHVlLCBtX3RvVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNjYWxlOgot
ICAgIGNhc2UgVHJhbnNsYXRlOgotICAgICAgICBpZiAoaXNLZXlmcmFtZSkKLSAgICAgICAgICAg
IGFkZENsdXR0ZXJLZXlmcmFtZVRyYW5zaXRpb25Gb3JQcm9wZXJ0eSh0b0NsdXR0ZXJBY3RvclBy
b3BlcnR5U3RyaW5nKG1fdmFsdWVGdW5jdGlvblR5cGUpLCBtX3ZhbHVlczNEKTsgCi0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGFkZENsdXR0ZXJUcmFuc2l0aW9uRm9yUHJvcGVydHkodG9DbHV0
dGVyQWN0b3JQcm9wZXJ0eVN0cmluZyhtX3ZhbHVlRnVuY3Rpb25UeXBlKSwgbV9mcm9tVmFsdWUz
RCwgbV90b1ZhbHVlM0QpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1hdHJpeDoKLSAgICAg
ICAgaWYgKGlzS2V5ZnJhbWUpCi0gICAgICAgICAgICBhZGRDbHV0dGVyS2V5ZnJhbWVUcmFuc2l0
aW9uRm9yUHJvcGVydHkodG9DbHV0dGVyQWN0b3JQcm9wZXJ0eVN0cmluZyhtX3ZhbHVlRnVuY3Rp
b25UeXBlKSwgbV92YWx1ZXNNYXRyaXgpOyAKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRk
Q2x1dHRlclRyYW5zaXRpb25Gb3JQcm9wZXJ0eSh0b0NsdXR0ZXJBY3RvclByb3BlcnR5U3RyaW5n
KG1fdmFsdWVGdW5jdGlvblR5cGUpLCBtX2Zyb21WYWx1ZU1hdHJpeCwgbV90b1ZhbHVlTWF0cml4
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdvcmstYXJvdW5kIHRoZSBmYWN0IHRoYXQg
aWYgdGhlcmUgaXMgYSB0cmFuc2Zvcm0gYWxyZWFkeSBzZXQgdGhlIGFuaW1hdGlvbiBmYWlscyB0
byBzdGFydC4KLSAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Njk2ODA0Ci0gICAgY2x1dHRlcl9hY3Rvcl9zZXRfdHJhbnNmb3JtKG1fbGF5ZXIuZ2V0KCks
IDApOwotfQotCi12b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6YWRkQW5pbWF0aW9uRm9y
S2V5KEdyYXBoaWNzTGF5ZXJBY3RvciogcGxhdGZvcm1MYXllciwgY29uc3QgU3RyaW5nJiBrZXkp
Ci17Ci0gICAgQVNTRVJUKCFnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChwbGF0Zm9ybUxheWVy
KSwga2V5LnV0ZjgoKS5kYXRhKCkpKTsKLQotICAgIG1fbGF5ZXIgPSBDTFVUVEVSX0FDVE9SKHBs
YXRmb3JtTGF5ZXIpOwotCi0gICAgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPT0gT3BhY2l0
eSkKLSAgICAgICAgYWRkT3BhY2l0eVRyYW5zaXRpb24oKTsKLSAgICBlbHNlIGlmIChtX2FuaW1h
dGVkUHJvcGVydHlUeXBlID09IFRyYW5zZm9ybSkKLSAgICAgICAgYWRkVHJhbnNmb3JtVHJhbnNp
dGlvbigpOwotICAgIGVsc2UgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPT0gQmFja2dyb3Vu
ZENvbG9yKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBlbHNlCi0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh0aW1lbGluZSgp
LCAic3RhcnRlZCIsIEdfQ0FMTEJBQ0sodGltZWxpbmVTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChwbGF0Zm9ybUxheWVyKSwga2V5LnV0Zjgo
KS5kYXRhKCksIHRoaXMpOwotCi0gICAgY2x1dHRlcl9hY3Rvcl9hZGRfdHJhbnNpdGlvbihtX2xh
eWVyLmdldCgpLCBrZXkudXRmOCgpLmRhdGEoKSwgQ0xVVFRFUl9UUkFOU0lUSU9OKG1fYW5pbWF0
aW9uLmdldCgpKSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpyZW1vdmVB
bmltYXRpb25Gb3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgY29uc3QgU3RyaW5nJiBr
ZXkpCi17Ci0gICAgY2x1dHRlcl9hY3Rvcl9yZW1vdmVfdHJhbnNpdGlvbihDTFVUVEVSX0FDVE9S
KGxheWVyKSwga2V5LnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JK
RUNUKGxheWVyKSwga2V5LnV0ZjgoKS5kYXRhKCksIDApOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL1BsYXRmb3JtQ2x1
dHRlckFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRl
ci9QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzcyODE1YzdlZjNmOTRiM2M5NDY4YmQxOTE3N2I1Zjk1NjBkMzBhMC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jbHV0dGVyL1BsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBM
dGQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbl9oCi0jZGVmaW5lIFBsYXRmb3JtQ2x1
dHRlckFuaW1hdGlvbl9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNp
bmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUg
IkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotdHlwZWRlZiBzdHJ1
Y3QgX0NsdXR0ZXJBY3RvciBDbHV0dGVyQWN0b3I7Ci10eXBlZGVmIHN0cnVjdCBfQ2x1dHRlclRp
bWVsaW5lIENsdXR0ZXJUaW1lbGluZTsKLXR5cGVkZWYgc3RydWN0IF9HcmFwaGljc0xheWVyQWN0
b3IgR3JhcGhpY3NMYXllckFjdG9yOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZs
b2F0UmVjdDsKLWNsYXNzIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjsKLWNsYXNzIFRpbWluZ0Z1
bmN0aW9uOwotCi1jbGFzcyBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24gOiBwdWJsaWMgUmVmQ291
bnRlZDxQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24+IHsKLXB1YmxpYzoKLSAgICBlbnVtIEFuaW1h
dGlvblR5cGUgeyBCYXNpYywgS2V5ZnJhbWUgfTsKLSAgICBlbnVtIEFuaW1hdGVkUHJvcGVydHlU
eXBlIHsgTm9BbmltYXRlZFByb3BlcnR5VHlwZSwgVHJhbnNmb3JtLCBPcGFjaXR5LCBCYWNrZ3Jv
dW5kQ29sb3IgfTsKLSAgICBlbnVtIEZpbGxNb2RlVHlwZSB7IE5vRmlsbE1vZGUsIEZvcndhcmRz
LCBCYWNrd2FyZHMsIEJvdGggfTsKLSAgICBlbnVtIFZhbHVlRnVuY3Rpb25UeXBlIHsgTm9WYWx1
ZUZ1bmN0aW9uLCBSb3RhdGVYLCBSb3RhdGVZLCBSb3RhdGVaLCBTY2FsZVgsIFNjYWxlWSwgU2Nh
bGVaLCBTY2FsZSwgVHJhbnNsYXRlWCwgVHJhbnNsYXRlWSwgVHJhbnNsYXRlWiwgVHJhbnNsYXRl
LCBNYXRyaXggfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ2x1dHRlckFuaW1h
dGlvbj4gY3JlYXRlKEFuaW1hdGlvblR5cGUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCk7Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uPiBjcmVhdGUoUGxhdGZv
cm1DbHV0dGVyQW5pbWF0aW9uKik7Ci0KLSAgICB+UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKCk7
Ci0KLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1ZhbHVlRnVuY3Rpb24oKTsKLSAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0c0FkZGl0aXZlVmFsdWVGdW5jdGlvbigpOwotCi0gICAgQW5pbWF0aW9uVHlw
ZSBhbmltYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBkb3VibGUg
YmVnaW5UaW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCZWdpblRpbWUoZG91YmxlKTsKLQotICAg
IGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0OwotICAgIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKTsK
LQotICAgIGZsb2F0IHNwZWVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTcGVlZChmbG9hdCk7Ci0K
LSAgICBkb3VibGUgdGltZU9mZnNldCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGltZU9mZnNldChk
b3VibGUpOwotCi0gICAgZmxvYXQgcmVwZWF0Q291bnQoKSBjb25zdDsKLSAgICB2b2lkIHNldFJl
cGVhdENvdW50KGZsb2F0KTsKLQotICAgIGJvb2wgYXV0b3JldmVyc2VzKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRBdXRvcmV2ZXJzZXMoYm9vbCk7Ci0KLSAgICBGaWxsTW9kZVR5cGUgZmlsbE1vZGUo
KSBjb25zdDsKLSAgICB2b2lkIHNldEZpbGxNb2RlKEZpbGxNb2RlVHlwZSk7Ci0KLSAgICB2b2lk
IHNldFRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiwgYm9vbCByZXZlcnNlID0g
ZmFsc2UpOwotICAgIHZvaWQgY29weVRpbWluZ0Z1bmN0aW9uRnJvbShjb25zdCBQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb24qKTsKLQotICAgIGJvb2wgaXNSZW1vdmVkT25Db21wbGV0aW9uKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRSZW1vdmVkT25Db21wbGV0aW9uKGJvb2wpOwotCi0gICAgYm9vbCBp
c0FkZGl0aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBZGRpdGl2ZShib29sKTsKLQotICAgIFZh
bHVlRnVuY3Rpb25UeXBlIHZhbHVlRnVuY3Rpb24oKSBjb25zdDsKLSAgICB2b2lkIHNldFZhbHVl
RnVuY3Rpb24oVmFsdWVGdW5jdGlvblR5cGUpOwotCi0gICAgLy8gQmFzaWMtYW5pbWF0aW9uIHBy
b3BlcnRpZXMuCi0gICAgdm9pZCBzZXRGcm9tVmFsdWUoZmxvYXQpOwotICAgIHZvaWQgc2V0RnJv
bVZhbHVlKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdm9pZCBz
ZXRGcm9tVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJik7Ci0gICAgdm9pZCBzZXRGcm9tVmFsdWUo
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKLSAgICB2b2lkIGNvcHlGcm9tVmFsdWVGcm9tKGNvbnN0
IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiopOwotCi0gICAgdm9pZCBzZXRUb1ZhbHVlKGZsb2F0
KTsKLSAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgmKTsKLSAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJik7Ci0gICAgdm9p
ZCBzZXRUb1ZhbHVlKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7Ci0gICAgdm9pZCBjb3B5VG9WYWx1
ZUZyb20oY29uc3QgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKik7Ci0KLSAgICAvLyBLZXlmcmFt
ZS1hbmltYXRpb24gcHJvcGVydGllcy4KLSAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8
ZmxvYXQ+Jik7Ci0gICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4PiYpOwotICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9h
dFBvaW50M0Q+Jik7Ci0gICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNv
bG9yPiYpOwotICAgIHZvaWQgY29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DbHV0dGVyQW5p
bWF0aW9uKik7Ci0KLSAgICB2b2lkIHNldEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsK
LSAgICB2b2lkIGNvcHlLZXlUaW1lc0Zyb20oY29uc3QgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
Kik7Ci0KLSAgICB2b2lkIHNldFRpbWluZ0Z1bmN0aW9ucyhjb25zdCBWZWN0b3I8Y29uc3QgVGlt
aW5nRnVuY3Rpb24qPiYsIGJvb2wgcmV2ZXJzZSA9IGZhbHNlKTsKLSAgICB2b2lkIGNvcHlUaW1p
bmdGdW5jdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiopOwotCi0gICAg
dm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiwgY29uc3QgU3RyaW5n
Jik7Ci0gICAgdm9pZCByZW1vdmVBbmltYXRpb25Gb3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiwg
Y29uc3QgU3RyaW5nJik7Ci0KLSAgICB2b2lkIGFuaW1hdGlvbkRpZFN0YXJ0KCk7Ci0KLXByb3Rl
Y3RlZDoKLSAgICBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24oQW5pbWF0aW9uVHlwZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoKTsKLSAgICBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24oY29uc3QgUGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uKik7Ci0KLXByaXZhdGU6Ci0gICAgQ2x1dHRlclRpbWVsaW5l
KiB0aW1lbGluZSgpIGNvbnN0OwotICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIHN0cmluZ1RvQW5p
bWF0ZWRQcm9wZXJ0eVR5cGUoY29uc3QgU3RyaW5nJiBrZXlQYXRoKSBjb25zdDsKLQotICAgIHZv
aWQgYWRkQ2x1dHRlclRyYW5zaXRpb25Gb3JQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5
LCBjb25zdCBmbG9hdCBmcm9tVmFsdWUsIGNvbnN0IGZsb2F0IHRvVmFsdWUpOwotICAgIHZvaWQg
YWRkQ2x1dHRlclRyYW5zaXRpb25Gb3JQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdm9pZCBhZGRDbHV0dGVyVHJhbnNpdGlvbkZvclByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGNvbnN0IEZsb2F0UG9pbnQzRCYgZnJvbVZhbHVl
LCBjb25zdCBGbG9hdFBvaW50M0QmIHRvVmFsdWUpOwotCi0gICAgdm9pZCBhZGRDbHV0dGVyS2V5
ZnJhbWVUcmFuc2l0aW9uRm9yUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmFsdWVzKTsKLSAgICB2b2lkIGFkZENsdXR0ZXJLZXlmcmFtZVRyYW5z
aXRpb25Gb3JQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg+JiB2YWx1ZXMpOwotICAgIHZvaWQgYWRkQ2x1dHRl
cktleWZyYW1lVHJhbnNpdGlvbkZvclByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGNv
bnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZXMpOwotCi0gICAgdm9pZCBhZGRPcGFjaXR5
VHJhbnNpdGlvbigpOwotICAgIHZvaWQgYWRkVHJhbnNmb3JtVHJhbnNpdGlvbigpOwotCi0gICAg
QW5pbWF0aW9uVHlwZSBtX3R5cGU7Ci0gICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgbV9hbmltYXRl
ZFByb3BlcnR5VHlwZTsKLQotICAgIEdSZWZQdHI8R09iamVjdD4gbV9hbmltYXRpb247Ci0gICAg
R1JlZlB0cjxDbHV0dGVyQWN0b3I+IG1fbGF5ZXI7Ci0KLSAgICBib29sIG1fYWRkaXRpdmU7Ci0K
LSAgICBmbG9hdCBtX2Zyb21WYWx1ZTsKLSAgICBmbG9hdCBtX3RvVmFsdWU7Ci0KLSAgICBGbG9h
dFBvaW50M0QgbV9mcm9tVmFsdWUzRDsKLSAgICBGbG9hdFBvaW50M0QgbV90b1ZhbHVlM0Q7Ci0K
LSAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2Zyb21WYWx1ZU1hdHJpeDsKLSAg
ICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RvVmFsdWVNYXRyaXg7Ci0KLSAgICBm
bG9hdCBtX3JlcGVhdENvdW50OwotCi0gICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIG1fdGltaW5n
RnVuY3Rpb247Ci0gICAgVmFsdWVGdW5jdGlvblR5cGUgbV92YWx1ZUZ1bmN0aW9uVHlwZTsKLQot
ICAgIFZlY3RvcjxmbG9hdD4gbV9rZXlUaW1lczsKLSAgICBWZWN0b3I8Y29uc3QgVGltaW5nRnVu
Y3Rpb24qPiBtX3RpbWluZ0Z1bmN0aW9uczsKLQotICAgIFZlY3RvcjxmbG9hdD4gbV92YWx1ZXM7
Ci0gICAgVmVjdG9yPEZsb2F0UG9pbnQzRD4gbV92YWx1ZXMzRDsKLSAgICBWZWN0b3I8V2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg+IG1fdmFsdWVzTWF0cml4OwotfTsKLQotfQotCi0jZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYgLy8gUGxhdGZvcm1D
bHV0dGVyQW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBiNTZhYjZhMThiOWUzMTYzYjRkYmM4
NTY3MTE5MDI4Mjg4YjZjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL1BsYXRmb3Jt
Q2x1dHRlckxheWVyQ2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMSBDb2xsYWJvcmEgTHRkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbGF0Zm9ybUNsdXR0ZXJM
YXllckNsaWVudF9oCi0jZGVmaW5lIFBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50X2gKLQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtQ2x1dHRlckxheWVyUGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBJbnRSZWN0JiBpbkNsaXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1D
bHV0dGVyTGF5ZXJBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpID0gMDsKLQotcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgflBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50KCkgeyB9Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNlbmRp
ZiAvLyBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudF9oCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvVHJhbnNmb3JtYXRpb25NYXRyaXhDbHV0
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvVHJhbnNm
b3JtYXRpb25NYXRyaXhDbHV0dGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NTY1NTg3MzliMmJjNmE3YWVlMjBhMThkM2FiNzE5MTVlMjEyZjk4OC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jbHV0dGVyL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2x1dHRlci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIENvbGxhYm9y
YSBMdGQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCi0gKiAg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQot
ICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotCi0jaW5jbHVkZSA8
Y29nbC9jb2dsLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotVHJhbnNmb3JtYXRpb25NYXRy
aXg6Om9wZXJhdG9yIENvZ2xNYXRyaXgoKSBjb25zdAotewotICAgIENvZ2xNYXRyaXggbWF0cml4
OwotCi0gICAgbWF0cml4Lnh4ID0gbTExKCk7Ci0gICAgbWF0cml4Lnh5ID0gbTIxKCk7Ci0gICAg
bWF0cml4Lnh6ID0gbTMxKCk7Ci0gICAgbWF0cml4Lnh3ID0gbTQxKCk7Ci0KLSAgICBtYXRyaXgu
eXggPSBtMTIoKTsKLSAgICBtYXRyaXgueXkgPSBtMjIoKTsKLSAgICBtYXRyaXgueXogPSBtMzIo
KTsKLSAgICBtYXRyaXgueXcgPSBtNDIoKTsKLQotICAgIG1hdHJpeC56eCA9IG0xMygpOwotICAg
IG1hdHJpeC56eSA9IG0yMygpOwotICAgIG1hdHJpeC56eiA9IG0zMygpOwotICAgIG1hdHJpeC56
dyA9IG00MygpOwotCi0gICAgbWF0cml4Lnd4ID0gbTE0KCk7Ci0gICAgbWF0cml4Lnd5ID0gbTI0
KCk7Ci0gICAgbWF0cml4Lnd6ID0gbTM0KCk7Ci0gICAgbWF0cml4Lnd3ID0gbTQ0KCk7Ci0KLSAg
ICByZXR1cm4gbWF0cml4OwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRp
b25NYXRyaXgoY29uc3QgQ29nbE1hdHJpeCogbWF0cml4KQotewotICAgIHNldE1hdHJpeChtYXRy
aXgtPnh4LCBtYXRyaXgtPnl4LCBtYXRyaXgtPnp4LCBtYXRyaXgtPnd4LAotICAgICAgICBtYXRy
aXgtPnh5LCBtYXRyaXgtPnl5LCBtYXRyaXgtPnp5LCBtYXRyaXgtPnd5LAotICAgICAgICBtYXRy
aXgtPnh6LCBtYXRyaXgtPnl6LCBtYXRyaXgtPnp6LCBtYXRyaXgtPnd6LAotICAgICAgICBtYXRy
aXgtPnh3LCBtYXRyaXgtPnl3LCBtYXRyaXgtPnp3LCBtYXRyaXgtPnd3KTsKLX0KLQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCmluZGV4IDAzN2MwMWU4Nzk0MjgzZDA3OGUz
MTIwN2FhODJmYThmZTMwODgzZjkuLjBmMDRiNjc2ZTE4ZDAwN2MzMzIwYTRhM2UwNDA4YmUzZjk3
MWZiOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKQEAgLTM1LDkgKzM1
LDYgQEAKICNpZiBVU0UoQ0EpCiB0eXBlZGVmIHN0cnVjdCBDQVRyYW5zZm9ybTNEIENBVHJhbnNm
b3JtM0Q7CiAjZW5kaWYKLSNpZiBVU0UoQ0xVVFRFUikKLXR5cGVkZWYgc3RydWN0IF9Db2dsTWF0
cml4IENvZ2xNYXRyaXg7Ci0jZW5kaWYKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0Fm
ZmluZVRyYW5zZm9ybSBDR0FmZmluZVRyYW5zZm9ybTsKICNlbGlmIFVTRShDQUlSTykKQEAgLTMz
NCwxMCArMzMxLDYgQEAgcHVibGljOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IENB
VHJhbnNmb3JtM0QmKTsKICAgICBvcGVyYXRvciBDQVRyYW5zZm9ybTNEKCkgY29uc3Q7CiAjZW5k
aWYKLSNpZiBVU0UoQ0xVVFRFUikKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBDb2ds
TWF0cml4Kik7Ci0gICAgb3BlcmF0b3IgQ29nbE1hdHJpeCgpIGNvbnN0OwotI2VuZGlmCiAjaWYg
VVNFKENHKQogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IENHQWZmaW5lVHJhbnNmb3Jt
Jik7CiAgICAgb3BlcmF0b3IgQ0dBZmZpbmVUcmFuc2Zvcm0oKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05V
bWFrZWZpbGUuYW0KaW5kZXggMTFiODlkZWVmN2Y3ZDBlZGM1ZWM2ZGY4MjkwZTM5NjVhOTBmODJm
OS4uNTIwYzg0Y2QzM2ZjZGUwZjk3ZDQwNTA2MmY3MjhhMTAzYmFlOTNiOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsv
R05VbWFrZWZpbGUuYW0KQEAgLTU1LDggKzU1LDYgQEAgbGlid2Via2l0Z3RrX0BXRUJLSVRHVEtf
QVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0NQUEYK
IAkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCiAJJCh3ZWJraXRndGtfY3BwZmxhZ3MpIFwK
IAktZm5vLXN0cmljdC1hbGlhc2luZyBcCi0JJChDTFVUVEVSX0NGTEFHUykgXAotCSQoQ0xVVFRF
Ul9HVEtfQ0ZMQUdTKSBcCiAJJChDT1ZFUkFHRV9DRkxBR1MpIFwKIAkkKEVOQ0hBTlRfQ0ZMQUdT
KSBcCiAJJChGUkVFVFlQRV9DRkxBR1MpIFwKQEAgLTEwOCw4ICsxMDYsNiBAQCBlbmRpZgogbGli
d2Via2l0Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01J
Tk9SX1ZFUlNJT05AX2xhX0xJQkFERCArPSBcCiAJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJ
VEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEg
XAogCSQoQ0FJUk9fTElCUykgXAotCSQoQ0xVVFRFUl9MSUJTKSBcCi0JJChDTFVUVEVSX0dUS19M
SUJTKSBcCiAJJChDT1ZFUkFHRV9MREZMQUdTKSBcCiAJJChFTkNIQU5UX0xJQlMpIFwKIAkkKEZS
RUVUWVBFX0xJQlMpIFwKQEAgLTE5Myw5ICsxODksNyBAQCBCVUlMVF9TT1VSQ0VTICs9ICQod2Vi
a2l0Z3RrX2J1aWx0X3NvdXJjZXMpCiAKIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5o
IFwKLQlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dENsdXR0ZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcCBcCi0JU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRDYWlyby5jcHAg
XAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Fzc2VydE1hdGNoaW5nRW51bXMu
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaAppbmRleCAyYWIwNTJlNGFmMTkwOTE1
ZDk5MzRkMThjYWIyNGM2MGMyZTcyZjE3Li5iZDY3MzU1NGIxMTg1NGZjMTliNzhkZDMxMzVhNjkw
NTIxMDIzNDhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9B
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKQEAgLTc1LDEzICs3
NSw3IEBAIHByaXZhdGU6CiAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwogICAgIHVuc2ln
bmVkIGludCBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQ7CiAKLSNpZiBVU0UoQ0xVVFRFUikK
LSAgICBHdGtXaWRnZXQqIG1fcm9vdExheWVyRW1iZWRkZXI7Ci0gICAgT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7Ci0KLSAgICBzdGF0aWMgZ2Jvb2xl
YW4gbGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayhBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dCopOwotI2VsaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKICAgICBPd25QdHI8V2ViQ29yZTo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+
IG1fcmVkaXJlY3RlZFdpbmRvdzsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV9yb290TGF5ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRD
YWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNjk0MmVlODgzOTU1ZjMy
NzVkYTM2YTlhNjAxZjU0Zjg5YzY2MGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHRDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb1V0
aWxpdGllcy5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudEd0
ay5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJ3ZWJr
aXR3ZWJ2aWV3cHJpdmF0ZS5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z2RrL2dk
ay5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICA6
IG1fd2ViVmlldyh3ZWJWaWV3KQotICAgICwgbV9zeW5jVGltZXJDYWxsYmFja0lkKDApCi0gICAg
LCBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIoMCkKLXsKLX0KLQotQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQ6On5BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCgpCi17Ci0gICAgaWYg
KG1fc3luY1RpbWVyQ2FsbGJhY2tJZCkKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fc3luY1Rp
bWVyQ2FsbGJhY2tJZCk7Ci19Ci0KLWJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
OmVuYWJsZWQoKQotewotICAgIHJldHVybiBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIgJiYgbV90
ZXh0dXJlTWFwcGVyOwotfQotCi1ib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpy
ZW5kZXJMYXllcnNUb1dpbmRvdyhjYWlyb190KiBjciwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qp
Ci17Ci0gICAgaWYgKCFjciB8fCAhZW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChjcik7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5z
ZXRHcmFwaGljc0NvbnRleHQoJmNvbnRleHQpOwotCi0gICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdp
blBhaW50aW5nKCk7Ci0gICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyLT5wYWludCgpOwotICAg
IG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjphdHRhY2hSb290R3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIGlmICghZ3JhcGhpY3NM
YXllcikgewotICAgICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLmNsZWFyKCk7Ci0gICAgICAgIG1f
cm9vdFRleHR1cmVNYXBwZXJMYXllciA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX3Jvb3RHcmFwaGljc0xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwotICAg
IG1fcm9vdFRleHR1cmVNYXBwZXJMYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdEdy
YXBoaWNzTGF5ZXIuZ2V0KCkpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPmFkZENoaWxkKGdy
YXBoaWNzTGF5ZXIpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudCh0
cnVlKTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsK
LSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBtX3Jvb3RH
cmFwaGljc0xheWVyLT5zZXRTaXplKGNvcmUobV93ZWJWaWV3KS0+bWFpbkZyYW1lKCktPnZpZXco
KS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKLQotICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVN
YXBwZXJJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCk7Ci0gICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVy
LT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0gICAgbV9yb290R3Jh
cGhpY3NMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotfQot
Ci12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzY2hlZHVsZVJvb3RMYXllclJl
cGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5
ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAocmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
bV9yb290R3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJl
Y3QpOwotCi0gICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChtX3dlYlZp
ZXcpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19
Ci0KLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlc2l6ZVJvb3RMYXllcihj
b25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGlmICghbV9yb290R3JhcGhpY3NMYXllcikKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldFNpemUoc2l6ZSk7Ci0g
ICAgbV9yb290R3JhcGhpY3NMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gc3luY0xheWVyc1RpbWVvdXRDYWxsYmFjayhB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBjb250ZXh0LT5z
eW5jTGF5ZXJzVGltZW91dCgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZCBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bWFya0ZvclN5bmMoKQotewotICAgIGlmIChtX3N5bmNU
aW1lckNhbGxiYWNrSWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIHVzZSBhIEdMaWIg
dGltZXIgYmVjYXVzZSBvdGhlcndpc2UgR1RLKyBldmVudCBoYW5kbGluZyBkdXJpbmcKLSAgICAv
LyBkcmFnZ2luZyBjYW4gc3RhcnZlIFdlYkNvcmUgdGltZXJzLCB3aGljaCBoYXZlIGEgbG93ZXIg
cHJpb3JpdHkuCi0gICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxs
KEdES19QUklPUklUWV9FVkVOVFMsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHN5
bmNMYXllcnNUaW1lb3V0Q2FsbGJhY2spLCB0aGlzLCAwKTsKLX0KLQotdm9pZCBBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dDo6c3luY0xheWVyc05vdygpCi17Ci0gICAgaWYgKGNvcmUobV93
ZWJWaWV3KS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKLSAgICAgICAgY29y
ZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKS0+dmlldygpLT5sYXlvdXQoKTsKLQotICAgIGlmICht
X3Jvb3RHcmFwaGljc0xheWVyKQotICAgICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5mbHVzaENv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBjb3JlKG1fd2ViVmlldykt
Pm1haW5GcmFtZSgpLT52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZy
YW1lcygpOwotfQotCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzeW5jTGF5
ZXJzVGltZW91dCgpCi17Ci0gICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gMDsKLSAgICBzeW5j
TGF5ZXJzTm93KCk7Ci0gICAgaWYgKCFtX3Jvb3RHcmFwaGljc0xheWVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBGSVhNRTogSW52YWxpZGF0ZSBqdXN0IHRoZSBhbmltYXRpb25zIHJlY3Rh
bmdsZXMuCi0gICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQobV93ZWJWaWV3KSk7
Ci0KLSAgICBpZiAodG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290R3JhcGhpY3NMYXllci5nZXQo
KSktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCi0gICAgICAgIG1f
c3luY1RpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZF
TlRTLCAxMDAwLjAgLyA2MC4wLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzeW5jTGF5
ZXJzVGltZW91dENhbGxiYWNrKSwgdGhpcywgMCk7Ci19Ci0KLXZvaWQgQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXll
ciosIGRvdWJsZSB0aW1lKQotewotCi19Ci12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0Ojpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQotewotCi19Ci0K
LXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnBhaW50Q29udGVudHMoY29uc3Qg
R3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIHJlY3RUb1BhaW50KQotewotICAgIGNhaXJvX3Qq
IGNyID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKLSAgICBjb3B5UmVjdEZyb21D
YWlyb1N1cmZhY2VUb0NvbnRleHQobV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUtPmNhaXJv
U3VyZmFjZSgpLCBjciwgSW50U2l6ZSgpLCByZWN0VG9QYWludCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVJfQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dENsdXR0ZXIuY3BwIGIv
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHRDbHV0dGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhkZjIxZDk2
ZGYyZGM2YTJiOWE3ZjM3ZTViYzY4OWFkMGY0YTdmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9B
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dENsdXR0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ29sbGFib3JhIEx0ZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dC5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiBVU0UoQ0xVVFRFUikKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJB
Y3Rvci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKLSNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oIgotI2luY2x1ZGUgPGNsdXR0ZXIt
Z3RrL2NsdXR0ZXItZ3RrLmg+Ci0jaW5jbHVkZSA8Y2x1dHRlci9jbHV0dGVyLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCi0gICAgOiBtX3dlYlZpZXcod2ViVmlldykKLSAgICAsIG1fbGF5ZXJG
bHVzaFRpbWVyQ2FsbGJhY2tJZCgwKQotICAgICwgbV9yb290TGF5ZXJFbWJlZGRlcigwKQotewot
fQotCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojppbml0aWFsaXplKCkKLXsK
LSAgICBpZiAobV9yb290TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQo
bV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIEludFNpemUgcGFnZVNpemUoYWxsb2NhdGlv
bi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOwotCi0gICAgbV9yb290TGF5ZXIgPSBHcmFwaGlj
c0xheWVyOjpjcmVhdGUoMCwgdGhpcyk7Ci0gICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVu
dChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUocGFnZVNpemUpOwotCi0gICAgLy8g
VGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnRzIGFyZSBhIGNoaWxkIG9mIHRoZSByb290IGxheWVy
LgotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZSgwLCB0aGlzKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRz
T3BhcXVlKCFtX3dlYlZpZXctPnByaXYtPnRyYW5zcGFyZW50KTsKLSAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldFNpemUocGFnZVNpemUpOwotICAgIGlmIChjb3JlKG1fd2ViVmll
dyktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSkKLSAgICAgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcodHJ1ZSk7Ci0K
LSNpZm5kZWYgTkRFQlVHCi0gICAgbV9yb290TGF5ZXItPnNldE5hbWUoIlJvb3QgbGF5ZXIiKTsK
LSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIk5vbi1jb21wb3NpdGVk
IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQot
Ci1BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6fkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0KCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKQotICAgICAg
ICBnX3NvdXJjZV9yZW1vdmUobV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKTsKLX0KLQotYm9v
bCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6ZW5hYmxlZCgpCi17Ci0gICAgcmV0dXJu
IG1fcm9vdExheWVyOwotfQotCi1ib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpy
ZW5kZXJMYXllcnNUb1dpbmRvdyhjYWlyb190KiwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhp
Y3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpIHsKLSAg
ICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihtX3dlYlZpZXcpLCBtX3Jv
b3RMYXllckVtYmVkZGVyKTsKLSAgICAgICAgbV9yb290TGF5ZXJFbWJlZGRlciA9IDA7Ci0gICAg
ICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENyZWF0
ZSBhbiBpbnN0YW5jZSBvZiBHdGtDbHV0dGVyRW1iZWQgdG8gZW1iZWQgYWN0b3JzIGFzIEdyYXBo
aWNzTGF5ZXJzLgotICAgIGlmICghbV9yb290TGF5ZXJFbWJlZGRlcikgewotICAgICAgICBtX3Jv
b3RMYXllckVtYmVkZGVyID0gZ3RrX2NsdXR0ZXJfZW1iZWRfbmV3KCk7Ci0gICAgICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV93ZWJWaWV3KSwgbV9yb290TGF5ZXJFbWJlZGRl
cik7Ci0KLSAgICAgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgICAgICBndGtfd2lk
Z2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwot
ICAgICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVChtX3Jvb3RMYXllckVt
YmVkZGVyKSwgJmFsbG9jYXRpb24pOwotICAgICAgICBndGtfd2lkZ2V0X3Nob3cobV9yb290TGF5
ZXJFbWJlZGRlcik7Ci0gICAgfQotCi0gICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0
cmVlIGhpZXJhcmNoeS4KLSAgICBpbml0aWFsaXplKCk7Ci0KLSAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKLQotICAgIC8vIEFkZCBhIHJvb3Qg
R3JhcGhpY3NMYXllciB0byB0aGUgc3RhZ2UuCi0gICAgaWYgKGdyYXBoaWNzTGF5ZXIpIHsKLSAg
ICAgICAgQ2x1dHRlckNvbG9yIHN0YWdlQ29sb3IgPSB7IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYg
fTsKLSAgICAgICAgQ2x1dHRlckFjdG9yKiBzdGFnZSA9IGd0a19jbHV0dGVyX2VtYmVkX2dldF9z
dGFnZShHVEtfQ0xVVFRFUl9FTUJFRChtX3Jvb3RMYXllckVtYmVkZGVyKSk7Ci0gICAgICAgIGNs
dXR0ZXJfYWN0b3Jfc2V0X2JhY2tncm91bmRfY29sb3Ioc3RhZ2UsICZzdGFnZUNvbG9yKTsKLSAg
ICAgICAgY2x1dHRlcl9hY3Rvcl9hZGRfY2hpbGQoc3RhZ2UsIG1fcm9vdExheWVyLT5wbGF0Zm9y
bUxheWVyKCkpOwotICAgIH0KLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lk
IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNO
ZWVkRGlzcGxheShjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9yb290TGF5ZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChyZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBt
X3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChy
ZWN0KTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dDo6cmVzaXplUm9vdExheWVyKGNvbnN0IEludFNpemUmIG5ld1NpemUp
Ci17Ci0gICAgaWYgKCFtX3Jvb3RMYXllckVtYmVkZGVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0gICAgYWxsb2NhdGlvbi54ID0gMDsKLSAg
ICBhbGxvY2F0aW9uLnkgPSAwOwotICAgIGFsbG9jYXRpb24ud2lkdGggPSBuZXdTaXplLndpZHRo
KCk7Ci0gICAgYWxsb2NhdGlvbi5oZWlnaHQgPSBuZXdTaXplLmhlaWdodCgpOwotICAgIGd0a193
aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKG1fcm9vdExheWVyRW1iZWRkZXIpLCAmYWxs
b2NhdGlvbik7Ci0KLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIC8v
IElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBj
b250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAotICAgIC8vIGZvciB0aG9zZSBuZXds
eSBleHBvc2VkIGFyZWFzLgotICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zaXplKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXRTaXplKG5ld1NpemUpOwotCi0gICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lk
dGgoKSkgewotICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9h
dD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xk
U2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdo
dCkpOwotICAgIH0KLQotICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQo
KSkKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3
U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKLQotICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEludFJlY3QoSW50UG9pbnQoKSwg
bmV3U2l6ZSkpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3Qg
SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHNjcm9s
bFJlY3QpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi1nYm9vbGVhbiBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayhBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBjb250ZXh0LT5mbHVz
aEFuZFJlbmRlckxheWVycygpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZCBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2NoZWR1bGVMYXllckZsdXNoKCkKLXsKLSAgICBpZiAo
bV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBX
ZSB1c2UgYSBHTGliIHRpbWVyIGJlY2F1c2Ugb3RoZXJ3aXNlIEdUSysgZXZlbnQgaGFuZGxpbmcg
ZHVyaW5nCi0gICAgLy8gZHJhZ2dpbmcgY2FuIHN0YXJ2ZSBXZWJDb3JlIHRpbWVycywgd2hpY2gg
aGF2ZSBhIGxvd2VyIHByaW9yaXR5LgotICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9
IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAwLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPihsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKSwgdGhpcywgMCk7
Ci19Ci0KLWJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcygpCi17Ci0gICAgaWYgKG1fcm9vdExheWVyKSB7Ci0gICAgICAgIG1fcm9vdExh
eWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOwotICAgIH0KLQotICAgIHJldHVybiBjb3JlKG1fd2ViVmlldyktPm1haW5GcmFt
ZSgpLT52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwot
fQotCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpmbHVzaEFuZFJlbmRlckxh
eWVycygpCi17Ci0gICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gMDsKLQotICAgIGlm
ICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBjb3Jl
KG1fd2ViVmlldyktPm1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5jb250
ZW50UmVuZGVyZXIoKSB8fCAhZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZy
YW1lLT52aWV3KCktPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKLQot
ICAgIGlmICghZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCi0gICAgICAgIHJldHVybjsKLX0K
LQotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bm90aWZ5QW5pbWF0aW9uU3Rh
cnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRp
bmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdFRvUGFpbnQpCi17Ci0gICAgY29u
dGV4dC5zYXZlKCk7Ci0gICAgY29udGV4dC5jbGlwKHJlY3RUb1BhaW50KTsKLSAgICBjb3JlKG1f
d2ViVmlldyktPm1haW5GcmFtZSgpLT52aWV3KCktPnBhaW50KCZjb250ZXh0LCByZWN0VG9QYWlu
dCk7Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoQ0xVVFRFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcAppbmRleCBlNzhlOWE4
MWU5N2ExMTk3OWViZmQ0ZmY1YTlhMjY4MGU2Yjg2OTkwLi4xN2IxZDBmZWE0ODVkNzczOThkMjgw
MmEzMWNkZmI0ZTNhZGI0ODNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0Z2xvYmFscy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGds
b2JhbHMuY3BwCkBAIC01NSwxMCArNTUsNiBAQAogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKLSNpZiBVU0UoQ0xVVFRF
UikKLSNpbmNsdWRlIDxjbHV0dGVyLWd0ay9jbHV0dGVyLWd0ay5oPgotI2VuZGlmCi0KIHN0YXRp
YyBXZWJLaXRDYWNoZU1vZGVsIGNhY2hlTW9kZWwgPSBXRUJLSVRfQ0FDSEVfTU9ERUxfREVGQVVM
VDsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC01NjQsMTAgKzU2MCw2IEBAIHZvaWQg
d2Via2l0SW5pdCgpCiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0SWdub3JlU1NM
RXJyb3JzKHRydWUpOwogCi0jaWYgVVNFKENMVVRURVIpCi0gICAgZ3RrX2NsdXR0ZXJfaW5pdCgw
LCAwKTsKLSNlbmRpZgotCiAgICAgYXRleGl0KHdlYmtpdEV4aXQpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvYXV0b3Rvb2xzL0ZpbmREZXBlbmRlbmNpZXMubTQgYi9Tb3VyY2UvYXV0b3Rvb2xz
L0ZpbmREZXBlbmRlbmNpZXMubTQKaW5kZXggYWVhZDI5NWYzZmFmMjRkMTA2OWYyYmZjMGM2N2Jm
ZDFjMzFjNmY2NS4uMzEyZTRhZDY0NDVkZjgyY2QyYmU1ODVmZDIyMzkzMDhiZmY1YmRmOSAxMDA2
NDQKLS0tIGEvU291cmNlL2F1dG90b29scy9GaW5kRGVwZW5kZW5jaWVzLm00CisrKyBiL1NvdXJj
ZS9hdXRvdG9vbHMvRmluZERlcGVuZGVuY2llcy5tNApAQCAtMjU2LDE1ICsyNTYsNyBAQCBpZiB0
ZXN0ICIkZW5hYmxlX2dsZXMyIiAhPSAieWVzIjsgdGhlbgogICAgIEFDX0NIRUNLX0hFQURFUlMo
W0dML2dsLmhdLCBbZm91bmRfb3BlbmdsPSJ5ZXMiXSwgW10pCiBmaQogCi1pZiB0ZXN0ICIkd2l0
aF9hY2NlbGVyYXRpb25fYmFja2VuZCIgPSAiYXV0byI7IHRoZW4KLSAgICBpZiB0ZXN0ICIkZm91
bmRfb3BlbmdsIiA9ICJ5ZXMiOyB0aGVuCi0gICAgICAgIHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tl
bmQ9Im9wZW5nbCI7Ci0gICAgZWxzZQotICAgICAgICB3aXRoX2FjY2VsZXJhdGlvbl9iYWNrZW5k
PSJub25lIjsKLSAgICBmaQotZmkKLQotaWYgdGVzdCAiJHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tl
bmQiID0gIm9wZW5nbCI7IHRoZW4KK2lmIHRlc3QgIiRmb3VuZF9vcGVuZ2wiID0gInllcyI7IHRo
ZW4KICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbWENPTVBPU0lURV0sIFt4Y29tcG9zaXRlXSk7CiAg
ICAgUEtHX0NIRUNLX01PRFVMRVMoW1hEQU1BR0VdLCBbeGRhbWFnZV0pOwogICAgIEFDX1NVQlNU
KFhDT01QT1NJVEVfQ0ZMQUdTKQpAQCAtMjczLDI2ICsyNjUsMjUgQEAgaWYgdGVzdCAiJHdpdGhf
YWNjZWxlcmF0aW9uX2JhY2tlbmQiID0gIm9wZW5nbCI7IHRoZW4KICAgICBBQ19TVUJTVChYREFN
QUdFX0xJQlMpCiBmaQogCi0jIE9wZW5HTCBpcyB0dXJuZWQgb24gYnkgZGVmYXVsdCAoYWxvbmcg
d2l0aCBXZWJHTCBhbmQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcpLCBidXQgaWYgQ2x1dHRlciBp
cyBjaG9zZW4KLSMgYXMgdGhlIGFjY2VsZXJhdGVkIGRyYXdpbmcgYmFja2VuZCwgd2Ugd2FudCB0
byBkaXNhYmxlIGl0LiBDT0dMIGRvZXMgbm90IHBsYXkgd2VsbCB3aXRoIE9wZW5HTC4KKyMgT3Bl
bkdMIGlzIHR1cm5lZCBvbiBieSBkZWZhdWx0IGlmIGF2YWlsYWJsZSAoYWxvbmcgd2l0aCBXZWJH
TCBhbmQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcpLgogaWYgdGVzdCAiJGVuYWJsZV93ZWJnbCIg
PSAiYXV0byI7IHRoZW4KLSAgICBpZiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZCIg
PSAib3BlbmdsIjsgdGhlbgorICAgIGlmIHRlc3QgIiRmb3VuZF9vcGVuZ2wiID0geWVzOyB0aGVu
CiAgICAgICAgIGVuYWJsZV93ZWJnbD0ieWVzIjsKICAgICBlbHNlCiAgICAgICAgIGVuYWJsZV93
ZWJnbD0ibm8iOwogICAgIGZpCiBmaQogCi1pZiB0ZXN0ICIkZW5hYmxlX3dlYmdsIiA9ICJ5ZXMi
ICYmIHRlc3QgIiR3aXRoX2FjY2VsZXJhdGlvbl9iYWNrZW5kIiAhPSAib3BlbmdsIjsgdGhlbgot
ICAgIEFDX01TR19FUlJPUihbT3BlbkdMIG11c3QgYmUgYWN0aXZlIChhbmQgQ2x1dHRlciBkaXNh
YmxlZCkgdG8gdXNlIFdlYkdMLl0pCitpZiB0ZXN0ICIkZW5hYmxlX3dlYmdsIiA9ICJ5ZXMiICYm
IHRlc3QgIiRmb3VuZF9vcGVuZ2wiICE9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtP
cGVuR0wgbXVzdCBiZSBhY3RpdmUgdG8gdXNlIFdlYkdMLl0pCiBmaTsKIAotaWYgdGVzdCAiJGVu
YWJsZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAieWVzIiAmJiB0ZXN0ICIkd2l0aF9hY2Nl
bGVyYXRpb25fYmFja2VuZCIgPSAibm9uZSI7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoW09wZW5H
TCBvciBDbHV0dGVyIG11c3QgYmUgYWN0aXZlIHRvIHVzZSBhY2NlbGVyYXRlZCBjb21wb3NpdGlu
Zy5dKQoraWYgdGVzdCAiJGVuYWJsZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAieWVzIiAm
JiB0ZXN0ICIkZm91bmRfb3BlbmdsIiAhPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihb
T3BlbkdMIG11c3QgYmUgYWN0aXZlIHRvIHVzZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZy5dKQog
ZmkKIAogaWYgdGVzdCAiJGVuYWJsZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAiYXV0byI7
IHRoZW4KLSAgICBpZiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZCIgIT0gIm5vbmUi
OyB0aGVuCisgICAgaWYgdGVzdCAiJGZvdW5kX29wZW5nbCIgPSAieWVzIjsgdGhlbgogICAgICAg
ICBlbmFibGVfYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmc9InllcyI7CiAgICAgZWxzZQogICAgICAg
ICBlbmFibGVfYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmc9Im5vIjsKQEAgLTMzMyw3ICszMjQsNyBA
QCBBQ19TVUJTVChKU0NfQ1BQRkxBR1MpCiBlbmFibGVfY3NzX2ZpbHRlcnM9bm87CiBlbmFibGVf
Y3NzX3NoYWRlcnM9bm87CiBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIENTUyBG
aWx0ZXJzIGFuZCBTaGFkZXJzXSkKLWlmIHRlc3QgIiRlbmFibGVfYWNjZWxlcmF0ZWRfY29tcG9z
aXRpbmciID0gInllcyIgJiYgdGVzdCAiJHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tlbmQiID0gIm9w
ZW5nbCI7IHRoZW4KK2lmIHRlc3QgIiRlbmFibGVfYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmciID0g
InllcyIgJiYgdGVzdCAiJGZvdW5kX29wZW5nbCIgPSAieWVzIjsgdGhlbgogICAgIGVuYWJsZV9j
c3NfZmlsdGVycz15ZXM7CiAgICAgZW5hYmxlX2Nzc19zaGFkZXJzPXllczsKIGZpCkBAIC00MzIs
MzUgKzQyMywyMiBAQCBpZiB0ZXN0ICIkZW5hYmxlX3ZpZGVvIiA9ICJ5ZXMiIHx8IHRlc3QgIiRl
bmFibGVfd2ViX2F1ZGlvIiA9ICJ5ZXMiOyB0aGVuCiAgICAgQUNfU1VCU1QoW0dTVFJFQU1FUl9M
SUJTXSkKIGZpCiAKLWFjY2VsZXJhdGlvbl9iYWNrZW5kX2Rlc2NyaXB0aW9uPSR3aXRoX2FjY2Vs
ZXJhdGlvbl9iYWNrZW5kCi1pZiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZCIgPSAi
Y2x1dHRlciI7IHRoZW4KLSAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhDTFVUVEVSLCBjbHV0dGVyLTEu
MCA+PSBjbHV0dGVyX3JlcXVpcmVkX3ZlcnNpb24pCi0gICAgUEtHX0NIRUNLX01PRFVMRVMoW0NM
VVRURVJfR1RLXSwgW2NsdXR0ZXItZ3RrLTEuMCA+PSBjbHV0dGVyX2d0a19yZXF1aXJlZF92ZXJz
aW9uXSkKLQotICAgIEFDX1NVQlNUKENMVVRURVJfQ0ZMQUdTKQotICAgIEFDX1NVQlNUKENMVVRU
RVJfTElCUykKLSAgICBBQ19TVUJTVChDTFVUVEVSX0dUS19DRkxBR1MpCi0gICAgQUNfU1VCU1Qo
Q0xVVFRFUl9HVEtfTElCUykKLQotICAgIGVuYWJsZV9nbGVzMj1ubwotICAgIGVuYWJsZV9nbHg9
bm8KLSAgICBlbmFibGVfZWdsPW5vCi1maQotCi1pZiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRpb25f
YmFja2VuZCIgPSAib3BlbmdsIjsgdGhlbgorYWNjZWxlcmF0aW9uX2Rlc2NyaXB0aW9uPQoraWYg
dGVzdCAiJGZvdW5kX29wZW5nbCIgPSAieWVzIjsgdGhlbgorICAgIGFjY2VsZXJhdGlvbl9kZXNj
cmlwdGlvbj0iT3BlbkdMIgogICAgIGlmIHRlc3QgIiRlbmFibGVfZ2xlczIiID0gInllcyI7IHRo
ZW4KLSAgICAgICAgYWNjZWxlcmF0aW9uX2JhY2tlbmRfZGVzY3JpcHRpb24rPSIoZ2xlczIiCisg
ICAgICAgIGFjY2VsZXJhdGlvbl9kZXNjcmlwdGlvbis9IihnbGVzMiIKICAgICAgICAgT1BFTkdM
X0xJQlM9Ii1sR0xFU3YyIgogICAgIGVsc2UKLSAgICAgICAgYWNjZWxlcmF0aW9uX2JhY2tlbmRf
ZGVzY3JpcHRpb24rPSIoZ2wiCisgICAgICAgIGFjY2VsZXJhdGlvbl9kZXNjcmlwdGlvbis9Iihn
bCIKICAgICAgICAgT1BFTkdMX0xJQlM9Ii1sR0wiCiAgICAgZmkKICAgICBpZiB0ZXN0ICIkZW5h
YmxlX2VnbCIgPSAieWVzIjsgdGhlbgotICAgICAgICBhY2NlbGVyYXRpb25fYmFja2VuZF9kZXNj
cmlwdGlvbis9IiwgZWdsIgorICAgICAgICBhY2NlbGVyYXRpb25fZGVzY3JpcHRpb24rPSIsIGVn
bCIKICAgICAgICAgT1BFTkdMX0xJQlMrPSIgLWxFR0wiCiAgICAgZmkKICAgICBpZiB0ZXN0ICIk
ZW5hYmxlX2dseCIgPSAieWVzIjsgdGhlbgotICAgICAgICBhY2NlbGVyYXRpb25fYmFja2VuZF9k
ZXNjcmlwdGlvbis9IiwgZ2x4IgorICAgICAgICBhY2NlbGVyYXRpb25fZGVzY3JpcHRpb24rPSIs
IGdseCIKICAgICBmaQogCiAgICAgIyBDaGVjayB3aGV0aGVyIGRsb3BlbigpIGlzIGluIHRoZSBj
b3JlIGxpYmMgbGlrZSBvbiBGcmVlQlNELCBvciBpbiBhIHNlcGFyYXRlCkBAIC00NjksMTIgKzQ0
NywxMiBAQCBpZiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZCIgPSAib3BlbmdsIjsg
dGhlbgogICAgIEFDX1NVQlNUKFtETE9QRU5fTElCU10pCiAKICAgICBPUEVOR0xfTElCUys9IiAk
RExPUEVOX0xJQlMiCi0gICAgYWNjZWxlcmF0aW9uX2JhY2tlbmRfZGVzY3JpcHRpb24rPSIpIgor
ICAgIGFjY2VsZXJhdGlvbl9kZXNjcmlwdGlvbis9IikiCiBmaQogQUNfU1VCU1QoW09QRU5HTF9M
SUJTXSkKIAogZW5hYmxlX2FjY2VsZXJhdGVkX2NhbnZhcz1ubwotaWYgdGVzdCAiJGVuYWJsZV9h
Y2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAieWVzIiAmJiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRp
b25fYmFja2VuZCIgPSAib3BlbmdsIjsgdGhlbgoraWYgdGVzdCAiJGVuYWJsZV9hY2NlbGVyYXRl
ZF9jb21wb3NpdGluZyIgPSAieWVzIiAmJiB0ZXN0ICIkZm91bmRfb3BlbmdsIiA9ICJ5ZXMiOyB0
aGVuCiAgICAgQ0FJUk9fR0xfTElCUz0iY2Fpcm8tZ2wiCiAgICAgaWYgdGVzdCAiJGVuYWJsZV9n
bHgiID0gInllcyI7IHRoZW4KICAgICAgICAgQ0FJUk9fR0xfTElCUys9IiBjYWlyby1nbHgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvYXV0b3Rvb2xzL1JlYWRDb21tYW5kTGluZUFyZ3VtZW50cy5tNCBi
L1NvdXJjZS9hdXRvdG9vbHMvUmVhZENvbW1hbmRMaW5lQXJndW1lbnRzLm00CmluZGV4IGU1Mjg4
NjJmZWNmMzEzYTczNTc5YzAzYmMyMWQxMmNmZDkyZDA2MWEuLmZiNWJjODEzNzk0MDBhOGE3MWM2
MDBmMDE3YjZlZmRhNDA0NTAyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9hdXRvdG9vbHMvUmVhZENv
bW1hbmRMaW5lQXJndW1lbnRzLm00CisrKyBiL1NvdXJjZS9hdXRvdG9vbHMvUmVhZENvbW1hbmRM
aW5lQXJndW1lbnRzLm00CkBAIC0xNjgsMTQgKzE2OCw2IEBAIEFDX0FSR19FTkFCTEUoZGVidWdf
c3ltYm9scywKICAgICBdKQogQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9kZWJ1Z19zeW1ib2xzXSkK
IAotQUNfTVNHX0NIRUNLSU5HKFt3aGljaCBHUFUgYWNjZWxlcmF0aW9uIGJhY2tlbmQgdG8gdXNl
XSkKLUFDX0FSR19XSVRIKGFjY2VsZXJhdGlvbl9iYWNrZW5kLAotICAgIEFDX0hFTFBfU1RSSU5H
KFstLXdpdGgtYWNjZWxlcmF0aW9uLWJhY2tlbmQ9QDw6QG9wZW5nbC9jbHV0dGVyL25vbmVAOj5A
XSwKLSAgICAgICAgW1NlbGVjdCBhY2NlbGVyYXRlZCBiYWNrZW5kIChDbHV0dGVyIGN1cnJlbnRs
eSB1bnN1cHBvcnRlZCwgT3BlbkdMIGF1dG9kZXRlY3RlZCkgW2RlZmF1bHQ9YXV0b2RldGVjdF1d
KSwKLSAgICBbXSwKLSAgICBbd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZD0iYXV0byJdKQotQUNf
TVNHX1JFU1VMVChbJHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tlbmRdKQotCiBBQ19NU0dfQ0hFQ0tJ
TkcoW3doZXRoZXIgdG8gZW5hYmxlIFdlYkdMIHN1cHBvcnRdKQogQUNfQVJHX0VOQUJMRSh3ZWJn
bCwgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXdlYmdsXSwgW2VuYWJsZSBzdXBwb3J0IGZvciBX
ZWJHTCBbZGVmYXVsdD1jaGVja11dKSwKICAgICBbXSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9hdXRv
dG9vbHMvU2V0dXBBdXRvY29uZkhlYWRlci5tNCBiL1NvdXJjZS9hdXRvdG9vbHMvU2V0dXBBdXRv
Y29uZkhlYWRlci5tNAppbmRleCBlMTI5NzQ1MmFmMDcxN2YzYTYzODQ2ZWZhMTcyNmIzNTU5NDNi
NTZjLi45ZGNkOTM5MTZmZDRiYjgwMDY4MmE1NDVkODgwYjRiNTg1ZTJjNzMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvYXV0b3Rvb2xzL1NldHVwQXV0b2NvbmZIZWFkZXIubTQKKysrIGIvU291cmNlL2F1
dG90b29scy9TZXR1cEF1dG9jb25mSGVhZGVyLm00CkBAIC02OCwyNCArNjgsOSBAQCBmaQogCiBp
ZiB0ZXN0ICIkZW5hYmxlX2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nIiA9ICJ5ZXMiOyB0aGVuCiAg
ICAgQUNfREVGSU5FKFtXVEZfVVNFX0FDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HXSwgWzFdLCBbIF0p
Ci0KLSAgICBpZiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZCIgPSAibm9uZSI7IHRo
ZW4KLSAgICAgICAgQUNfREVGSU5FKFtXVEZfVVNFX1RFWFRVUkVfTUFQUEVSXSwgWzFdLCBbIF0p
Ci0gICAgICAgIEFDX0RFRklORShbV1RGX1VTRV9URVhUVVJFX01BUFBFUl9DQUlST10sIFsxXSwg
WyBdKQotICAgIGZpCi0KLSAgICBpZiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZCIg
PSAib3BlbmdsIjsgdGhlbgotICAgICAgICBBQ19ERUZJTkUoW1dURl9VU0VfVEVYVFVSRV9NQVBQ
RVJdLCBbMV0sIFsgXSkKLSAgICAgICAgQUNfREVGSU5FKFtXVEZfVVNFX1RFWFRVUkVfTUFQUEVS
X0dMXSwgWzFdLCBbIF0pCi0gICAgZmkKLQotICAgIGlmIHRlc3QgIiR3aXRoX2FjY2VsZXJhdGlv
bl9iYWNrZW5kIiA9ICJjbHV0dGVyIjsgdGhlbgotICAgICAgICBBQ19ERUZJTkUoW1dURl9VU0Vf
Q0xVVFRFUl0sIFsxXSwgWyBdKQotICAgIGZpCi1maQotCi1pZiB0ZXN0ICIkd2l0aF9hY2NlbGVy
YXRpb25fYmFja2VuZCIgPSAib3BlbmdsIjsgdGhlbgogICAgIEFDX0RFRklORShbV1RGX1VTRV9P
UEVOR0xdLCBbMV0sIFsgXSkKKyAgICBBQ19ERUZJTkUoW1dURl9VU0VfVEVYVFVSRV9NQVBQRVJd
LCBbMV0sIFsgXSkKKyAgICBBQ19ERUZJTkUoW1dURl9VU0VfVEVYVFVSRV9NQVBQRVJfR0xdLCBb
MV0sIFsgXSkKIGZpCiAKIGlmIHRlc3QgIiRlbmFibGVfZ2x4IiA9ICJ5ZXMiOyB0aGVuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvYXV0b3Rvb2xzL1NldHVwQXV0b21ha2UubTQgYi9Tb3VyY2UvYXV0b3Rv
b2xzL1NldHVwQXV0b21ha2UubTQKaW5kZXggNmY1OGU3ZDQxYjA4M2VjMDhmN2NiNjFlNTNiODM3
MzcxNTQ2YjY1NS4uNjQxYTBhZmQwOGFjOThmMjIzOThlZmFhOTU2YTNhNTEyZTg0NzE2YyAxMDA2
NDQKLS0tIGEvU291cmNlL2F1dG90b29scy9TZXR1cEF1dG9tYWtlLm00CisrKyBiL1NvdXJjZS9h
dXRvdG9vbHMvU2V0dXBBdXRvbWFrZS5tNApAQCAtMzcsMTQgKzM3LDExIEBAIEFNX0NPTkRJVElP
TkFMKFtIQVZFX0FUU1BJMl0sIFt0ZXN0ICIkaGF2ZV9hdHNwaTIiID0gInllcyJdKQogCiAjIEFj
Y2VsZXJhdGVkIGNvbXBvc2l0aW5nIGNvbmRpdGlvbmFscy4KIEFNX0NPTkRJVElPTkFMKFtVU0Vf
QUNDRUxFUkFURURfQ09NUE9TSVRJTkddLCBbdGVzdCAiJGVuYWJsZV9hY2NlbGVyYXRlZF9jb21w
b3NpdGluZyIgPSAieWVzIl0pCi1BTV9DT05ESVRJT05BTChbVVNFX1RFWFRVUkVfTUFQUEVSX0NB
SVJPXSwKLSAgICBbdGVzdCAiJGVuYWJsZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAieWVz
IiAmJiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZCIgPSAibm9uZSJdKQogQU1fQ09O
RElUSU9OQUwoW1VTRV9URVhUVVJFX01BUFBFUl9HTF0sCi0gICAgW3Rlc3QgIiRlbmFibGVfYWNj
ZWxlcmF0ZWRfY29tcG9zaXRpbmciID0gInllcyIgJiYgdGVzdCAiJHdpdGhfYWNjZWxlcmF0aW9u
X2JhY2tlbmQiID0gIm9wZW5nbCJdKQotQU1fQ09ORElUSU9OQUwoW1VTRV9DTFVUVEVSXSwgW3Rl
c3QgIiR3aXRoX2FjY2VsZXJhdGlvbl9iYWNrZW5kIiA9ICJjbHV0dGVyIl0pCisgICAgW3Rlc3Qg
IiRlbmFibGVfYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmciID0gInllcyIgJiYgdGVzdCAiJGZvdW5k
X29wZW5nbCIgPSAieWVzIl0pCiAKICMgVGhlc2UgYXJlIHRoZSBzYW1lIGZvciBub3csIGJ1dCB0
aGV5IHdpbGwgc29vbiBiZSBzZXBhcmF0ZS4KLUFNX0NPTkRJVElPTkFMKFtVU0VfT1BFTkdMXSwg
W3Rlc3QgIiR3aXRoX2FjY2VsZXJhdGlvbl9iYWNrZW5kIiA9ICJvcGVuZ2wiXSkKK0FNX0NPTkRJ
VElPTkFMKFtVU0VfT1BFTkdMXSwgW3Rlc3QgIiRmb3VuZF9vcGVuZ2wiID0gInllcyJdKQogQU1f
Q09ORElUSU9OQUwoW1VTRV9FR0xdLCBbdGVzdCAiJGVuYWJsZV9lZ2wiID0gInllcyJdKQogQU1f
Q09ORElUSU9OQUwoW1VTRV9HTEVTMl0sIFt0ZXN0ICIkZW5hYmxlX2dsZXMyIiA9ICJ5ZXMiXSkK
IEFNX0NPTkRJVElPTkFMKFtVU0VfR0xYXSwgW3Rlc3QgIiRlbmFibGVfZ2x4IiA9ICJ5ZXMiXSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9hdXRvdG9vbHMvVmVyc2lvbnMubTQgYi9Tb3VyY2UvYXV0b3Rv
b2xzL1ZlcnNpb25zLm00CmluZGV4IDIzNjRiNzE3MTM5OWY5MmRiNWZjYWI2ZDMzNDlhZmRmZmQy
MTBlYWUuLjliODExMmExMjViNTI2MTY0MzUyZTE5YTcwZGFkYjBmZWU2OWU2NGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9hdXRvdG9vbHMvVmVyc2lvbnMubTQKKysrIGIvU291cmNlL2F1dG90b29scy9W
ZXJzaW9ucy5tNApAQCAtMzUsNyArMzUsMyBAQCBtNF9kZWZpbmUoW2xpYnhtbF9yZXF1aXJlZF92
ZXJzaW9uXSwgWzIuNl0pCiBtNF9kZWZpbmUoW2xpYnhzbHRfcmVxdWlyZWRfdmVyc2lvbl0sIFsx
LjEuN10pCiBtNF9kZWZpbmUoW3BhbmdvX3JlcXVpcmVkX3ZlcnNpb25dLCBbMS4zMC4wXSkKIG00
X2RlZmluZShbc3FsaXRlX3JlcXVpcmVkX3ZlcnNpb25dLCBbMy4wXSkKLQotbTRfZGVmaW5lKFtj
bHV0dGVyX3JlcXVpcmVkX3ZlcnNpb25dLCBbMS4xNF0pCi1tNF9kZWZpbmUoW2NsdXR0ZXJfZ3Rr
X3JlcXVpcmVkX3ZlcnNpb25dLCBbMS40XSkKLQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ4NWViNTMzOTJkNDE1YjEzMWJhMjZlYzJkZDMyNTdk
Mzg5YWI5ZjYuLjcyY2Q1YjZhNTQ2NGIwZjQxZWFiMjgwMzNjZjEzZmViNjk3NjEzOTAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxMy0wNi0wNyAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3Jvbmhh
QGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVtb3ZlIHVuc3VwcG9ydGVkIEFDIGJh
Y2tlbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTczNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGd0ay9qaGJ1aWxkLW9wdGlvbmFsLm1vZHVsZXM6IG5vIGxvbmdlciBuZWVkcyBjbHV0dGVyLWd0
aywgY2x1dHRlcgorICAgICAgICBhbmQgY29nbCwgc28gcmVtb3ZlZC4KKwogMjAxMy0wNi0wNyAg
SnVuZ3NpayBUYWUgIDxkYXZpZHRsYXk4OEBnbWFpbC5jb20+CiAKICAgICAgICAgW0VGTF0gSW1w
bGVtZW50IGNvbG9ycGlja2VyIGZvciBIVE1MNSBpbnB1dCB0eXBlIGNvbG9yIG9uIE1pbmlicm93
c2VyCmRpZmYgLS1naXQgYS9Ub29scy9ndGsvamhidWlsZC1vcHRpb25hbC5tb2R1bGVzIGIvVG9v
bHMvZ3RrL2poYnVpbGQtb3B0aW9uYWwubW9kdWxlcwppbmRleCAzYWQwMzYyMDdjNTA2YzVlOGU2
MTBjNTQ2NThmMTg4NTQ2OTI2Y2JmLi5jY2NmOGZmZmYzM2E5MDY4M2E2YWI1OGRjYjVjM2NmMDk4
MmJiNWEzIDEwMDY0NAotLS0gYS9Ub29scy9ndGsvamhidWlsZC1vcHRpb25hbC5tb2R1bGVzCisr
KyBiL1Rvb2xzL2d0ay9qaGJ1aWxkLW9wdGlvbmFsLm1vZHVsZXMKQEAgLTcsMTQgKzcsNiBAQAog
ICAgICAgIGNlcnRhaW4gZGlzdHJpYnV0aW9ucy4gRmVlbCBmcmVlIHRvIGFkZCBtb3JlIGhlcmUs
IHdpdGhpbiByZWFzb24sCiAgICAgICAgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3QgYnVpbHQgYnkg
ZGVmYXVsdC4gLS0+CiAKLSAgPG1ldGFtb2R1bGUgaWQ9IndlYmtpdGd0ay1jbHV0dGVyLWRlcGVu
ZGVuY2llcyI+Ci0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgIDxkZXAgcGFja2FnZT0iY2x1dHRl
ciIvPgotICAgICAgPGRlcCBwYWNrYWdlPSJjbHV0dGVyLWd0ayIvPgotICAgICAgPGRlcCBwYWNr
YWdlPSJjb2dsIi8+Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0gIDwvbWV0YW1vZHVsZT4KLQogICA8
cmVwb3NpdG9yeSB0eXBlPSJ0YXJiYWxsIiBuYW1lPSJmdHAuZ25vbWUub3JnIgogICAgICAgaHJl
Zj0iaHR0cDovL2Z0cC5nbm9tZS5vcmciLz4KIApAQCAtMjQsMzUgKzE2LDQgQEAKICAgICAgICAg
ICAgIGhhc2g9InNoYTI1NjplNTM5OWRmYjYxMzc2YTc1MDBkMjBjYjIyNzE1MTUyNzgwYWEzYTJj
OGE2NDI4MWVjNmJjOGYwZWJlYjhiNjg5Ii8+CiAgIDwvYXV0b3Rvb2xzPgogCi0gIDxhdXRvdG9v
bHMgaWQ9ImNvZ2wiCi0gICAgICAgICAgICBhdXRvZ2VuLXNoPSJjb25maWd1cmUiCi0gICAgICAg
ICAgICBhdXRvZ2VuYXJncz0iLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iPgotICAgIDxicmFuY2gg
bW9kdWxlPSIvcHViL0dOT01FL3NvdXJjZXMvY29nbC8xLjE0L2NvZ2wtMS4xNC4wLnRhci54eiIg
dmVyc2lvbj0iMS4xNC4wIgotICAgICAgICAgICAgcmVwbz0iZnRwLmdub21lLm9yZyIgCi0gICAg
ICAgICAgICBoYXNoPSJzaGEyNTY6Mjc2ZThjOWY1ZmYwZmNkNTdjMWVhZjc0Y2MyNDVmNDFhZDQ2
OWE5NWExOGFjODMxZmFjMmQ1OTYwYmFhNWFlOCIvPgotICA8L2F1dG90b29scz4KLQotICA8YXV0
b3Rvb2xzIGlkPSJjbHV0dGVyIgotICAgICAgICAgICBhdXRvZ2VuLXNoPSJjb25maWd1cmUiCi0g
ICAgICAgICAgIGF1dG9nZW5hcmdzPSItLWRpc2FibGUtaW50cm9zcGVjdGlvbiI+Ci0gICAgPGRl
cGVuZGVuY2llcz4KLSAgICAgIDxkZXAgcGFja2FnZT0iY29nbCIvPgotICAgICAgPGRlcCBwYWNr
YWdlPSJhdGsiLz4KLSAgICA8L2RlcGVuZGVuY2llcz4KLSAgICA8YnJhbmNoIG1vZHVsZT0iL3B1
Yi9HTk9NRS9zb3VyY2VzL2NsdXR0ZXIvMS4xNC9jbHV0dGVyLTEuMTQuMC50YXIueHoiIHZlcnNp
b249IjEuMTQuMCIKLSAgICAgICAgICAgIHJlcG89ImZ0cC5nbm9tZS5vcmciIAotICAgICAgICAg
ICAgaGFzaD0ic2hhMjU2OjNiN2EwNzM3M2MyN2ZhZDRmMGNmNTlmZDY2YTY4NTVkNjZmOWE0MmI3
YjU3MGEwMGNhNTFhOGI0ODhhZjY0ZDUiLz4KLSAgPC9hdXRvdG9vbHM+Ci0KLSAgPGF1dG90b29s
cyBpZD0iY2x1dHRlci1ndGsiCi0gICAgICAgICAgIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSIKLSAg
ICAgICAgICAgYXV0b2dlbmFyZ3M9Ii0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIj4KLSAgICA8ZGVw
ZW5kZW5jaWVzPgotICAgICAgPGRlcCBwYWNrYWdlPSJjbHV0dGVyIi8+Ci0gICAgPC9kZXBlbmRl
bmNpZXM+Ci0gICAgPGJyYW5jaCBtb2R1bGU9Ii9wdWIvR05PTUUvc291cmNlcy9jbHV0dGVyLWd0
ay8xLjQvY2x1dHRlci1ndGstMS40LjQudGFyLnh6IiB2ZXJzaW9uPSIxLjQuNCIKLSAgICAgICAg
ICAgIHJlcG89ImZ0cC5nbm9tZS5vcmciICAgICAgICAgICAgIAotICAgICAgICAgICAgaGFzaD0i
c2hhMjU2OmJjMzEwODU5NGEwMWEwOGJiNmQ5YjUzOGFmZTk5NWU0ZmQ3ODYzNGE4MzU2MDY0ZWU4
MTM3ZDg3YWFkNTFiMmUiLz4KLSAgPC9hdXRvdG9vbHM+Ci0KIDwvbW9kdWxlc2V0PgpkaWZmIC0t
Z2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDM0NTU1ZWJlYjgyMGZjNmM3MDgzYzVj
NDIyM2ZmNjU0MWFkNjA2MmQuLjdiMDE5MzA2NmU5YjQ2NDlkNTJiMzZhMTZjOTE3ZGVmOTZlNDRm
MWQgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBA
QAorMjAxMy0wNi0wNyAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNv
bGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVtb3ZlIHVuc3VwcG9ydGVkIEFDIGJhY2tl
bmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcz
NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNv
dXJjZS9hdXRvdG9vbHMvRmluZERlcGVuZGVuY2llcy5tNDogcmVtb3ZlIGNoZWNrcyByZWxhdGVk
IHRvIGFjY2VsZXJhdGlvbiBiYWNrZW5kLAorICAgICAgICB0dXJuIHRoZW0gaW50byBhIGNoZWNr
IGZvciBPcGVuR0wgYmVpbmcgYXZhaWxhYmxlLCBzaW1wbHkuCisgICAgICAgICogU291cmNlL2F1
dG90b29scy9SZWFkQ29tbWFuZExpbmVBcmd1bWVudHMubTQ6IHJlbW92ZSBjb21tYW5kIGxpbmUg
b3B0aW9uIHRvIHNlbGVjdAorICAgICAgICBhY2NlbGVyYXRlZCBiYWNrZW5kLCBpdCdzIG5vdyBh
dXRvLWRldGVjdGVkLgorICAgICAgICAqIFNvdXJjZS9hdXRvdG9vbHMvU2V0dXBBdXRvY29uZkhl
YWRlci5tNDogbm8gbG9uZ2VyIGRlZmluZXMgVVNFX0NMVVRURVIgYW5kCisgICAgICAgIFVTRV9U
RVhUVVJFX01BUFBFUl9DQUlSTy4KKyAgICAgICAgKiBTb3VyY2UvYXV0b3Rvb2xzL1NldHVwQXV0
b21ha2UubTQ6IHJlbW92ZSBjaGVja3MgcmVsYXRlZCB0byBhY2NlbGVyYXRpb24gYmFja2VuZCwK
KyAgICAgICAgdHVybiB0aGVtIGludG8gYSBjaGVjayBmb3IgT3BlbkdMIGJlaW5nIGF2YWlsYWJs
ZSwgc2ltcGx5LgorICAgICAgICAqIFNvdXJjZS9hdXRvdG9vbHMvVmVyc2lvbnMubTQ6IG5vIGxv
bmdlciBjaGVjayBmb3IgY2x1dHRlci9jbHV0dGVyLWd0ay4KKwogMjAxMy0wNi0wNSAgQmVhciBU
cmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CiAKICAgICAgICAgW0NTUyBFeGNsdXNpb25zXVtD
U1MgU2hhcGVzXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyAmIFNoYXBlcyBjb21waWxlICYgcnVudGlt
ZSBmbGFncwo=
</data>
<flag name="review"
          id="225595"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>