<?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>225731</bug_id>
          
          <creation_ts>2021-05-12 20:50:56 -0700</creation_ts>
          <short_desc>[LFC] Move geometry/quirk/margincollapse classes out of their FormattingContext</short_desc>
          <delta_ts>2021-05-16 09:03:41 -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>Layout and Rendering</component>
          <version>WebKit 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>
          <dependson>225744</dependson>
    
    <dependson>225745</dependson>
    
    <dependson>225746</dependson>
    
    <dependson>225747</dependson>
    
    <dependson>225748</dependson>
    
    <dependson>225749</dependson>
    
    <dependson>225750</dependson>
    
    <dependson>225751</dependson>
    
    <dependson>225752</dependson>
    
    <dependson>225753</dependson>
    
    <dependson>225754</dependson>
    
    <dependson>225755</dependson>
    
    <dependson>225756</dependson>
    
    <dependson>225757</dependson>
    
    <dependson>225758</dependson>
    
    <dependson>225759</dependson>
    
    <dependson>225760</dependson>
    
    <dependson>225761</dependson>
    
    <dependson>225762</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1759527</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-05-12 20:50:56 -0700</bug_when>
    <thetext>This is about cleaning up the class interface and make them more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759528</commentid>
    <comment_count>1</comment_count>
      <attachid>428454</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-12 20:55:59 -0700</bug_when>
    <thetext>Created attachment 428454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759532</commentid>
    <comment_count>2</comment_count>
      <attachid>428455</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-12 21:02:26 -0700</bug_when>
    <thetext>Created attachment 428455
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760406</commentid>
    <comment_count>3</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-05-15 08:28:23 -0700</bug_when>
    <thetext>This is essentially a squashed version of the following patches:

Move BlockMarginCollapse to its own class
Move block formatting quirks to its own class
Move table wrapper quirks to its own class
Move inline formatting quirks to its own class
Move table formatting quirks to its own class
Move base formatting quirks to its own class
Move block formatting geometry to its own class
Move flex formatting geometry to its own class
Move table formatting geometry to its own class
Move base formatting geometry to its own class
Make FormattingGeometry c&apos;tors public
Make redundant public helpers private in BlockFormattingContext
Make redundant public helpers private in InlineFormattingContext
Make redundant public helpers private in TableFormattingContext
Make redundant public helpers private in FormattingContext
Cleanup FormattingQuirk classes
Cleanup MarginCollapsing class
Cleanup FormattingContext class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760407</commentid>
    <comment_count>4</comment_count>
      <attachid>428455</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-05-15 08:33:37 -0700</bug_when>
    <thetext>Comment on attachment 428455
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=428455&amp;action=review

&gt; Source/WebCore/ChangeLog:8
&gt; +        This is just an umbrella patch.

nice umbrella</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760612</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-05-16 09:02:45 -0700</bug_when>
    <thetext>All the patches have been landed. Closing now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428454</attachid>
            <date>2021-05-12 20:55:59 -0700</date>
            <delta_ts>2021-05-12 21:02:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225731-20210512205558.patch</filename>
            <type>text/plain</type>
            <size>512753</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE5ZDEyNDY2NTYyNDFh
MTM2ZGYzNzJjYjQxZjMyZGViNWY0MzYwNy4uY2U1ZjlkMDEyMTEwY2FlNWVhY2ZkMWNiMTc0MTEx
YzhhYzMyNWJjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIxLTA1LTEyICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gTW92ZSBnZW9tZXRy
eS9xdWlyay9tYXJnaW5jb2xsYXBzZSBjbGFzc2VzIG91dCBvZiB0aGVpciBGb3JtYXR0aW5nQ29u
dGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
NzMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBpcyBqdXN0IGFuIHVtYnJlbGxhIHBhdGNoLgorCiAyMDIxLTA1LTA1ICBBbGljaWEgQm95YSBH
YXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbTVNFXVtHU3RyZWFtZXJdIFdl
YktpdE1lZGlhU3JjIHJld29yayB2MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBkZTk1NzBhNTI2N2VmNTM5
NTdlMzdkMTY2MGNlMmRhMzhjZWU3N2ZiLi45MmI4NDYzZDk2NDQ1YjIyN2JlYTEwZjY1ODE5Nzgz
OTdmYmE2NDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTUxMSw4ICsxNTExLDggQEAgaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKIGluc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5jcHAKIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlclJ1bnRpbWVBZ2VudC5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0
UXVpcmtzLmNwcAorbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnku
Y3BwCitsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdRdWlya3MuY3BwCiBsYXlv
dXQvRm9ybWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L0xheW91dENvbnRleHQuY3BwCiBsYXlvdXQv
TGF5b3V0UGhhc2UuY3BwCkBAIC0xNTIwLDIzICsxNTIwLDIzIEBAIGxheW91dC9MYXlvdXRTdGF0
ZS5jcHAKIGxheW91dC9MYXlvdXRVbml0cy5jcHAKIGxheW91dC9WZXJpZmljYXRpb24uY3BwCiBs
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3Bw
Ci1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHAKLWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0
aW5nQ29udGV4dFF1aXJrcy5jcHAKK2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxv
Y2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCitsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2Nr
L0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxv
Y2svQmxvY2tGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL1ByZWNvbXB1dGVkQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKIGxheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9U
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nUXVpcmtzLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0
aW5nQ29udGV4dC5jcHAKLWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKK2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9G
bGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4
L0ZsZXhGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHAK
IGxheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmNwcAogbGF5b3V0L2Zsb2F0cy9GbG9hdGlu
Z1N0YXRlLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lQ29udGVu
dEJyZWFrZXIuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5jcHAKLWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKK2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKK2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdRdWlya3MuY3BwCiBsYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwCiBs
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVJdGVtLmNwcAogbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5jcHAKQEAgLTE1NjMsOCArMTU2Myw4
IEBAIGxheW91dC9sYXlvdXR0cmVlL0xheW91dExpbmVCcmVha0JveC5jcHAKIGxheW91dC9sYXlv
dXR0cmVlL0xheW91dFJlcGxhY2VkQm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJl
ZUJ1aWxkZXIuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0
dGluZ0NvbnRleHQuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKLWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFi
bGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKK2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCitsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAKIGxheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlR3JpZC5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvdGFibGUvVGFibGVMYXlvdXQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjE5MzUzYzlmMWI5NTVlNTRkM2QxYTIxZDkz
M2U2YzJhNDdjNjMwMy4uOWY3ZTM4MWQwYTRmZDM4ZGI5OWQ3N2E5OWU4MWI4OGFjYmRmM2MzOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjEyNSwxNCArMjEyNSwyMSBAQAogCQk2RUU4QTc3MzEwRjgwM0YzMDA1QTRBMjQgLyog
SlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzLmggKi87IH07CiAJCTZGMEI5OEI1MjNGMjY4RUMwMEVFQzJGMiAvKiBMYXlv
dXRJbmxpbmVUZXh0Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RjBCOThCMzIzRjI2OEVCMDBFRUMyRjIgLyogTGF5b3V0SW5saW5lVGV4dEJveC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGMENE
Njk1MjI5RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjBDRDY5NDIyOUVEMzI3MDBDNTk5NEUgLyogSW5s
aW5lTGluZS5oICovOyB9OworCQk2RjE1NTIyMTI2NDc2QjVDMDBFMzUzQzYgLyogVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RjE1NTIyMDI2NDc2QjVCMDBFMzUzQzYgLyogVGFibGVXcmFwcGVy
QmxvY2tGb3JtYXR0aW5nUXVpcmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNkYxNzI2NEYyNDcwQzYwQjAwNTE4Qzk2IC8qIFRhYmxlV3JhcHBl
ckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGMTcyNjRFMjQ3MEM2MEEwMDUxOEM5NiAvKiBUYWJsZVdyYXBwZXJC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNkYxQ0MxREUyMjVGOEI0OTAwNzIwQUQyIC8qIElubGluZVRleHRJ
dGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjFD
QzFERDIyNUY4QjQyMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjI2QkI2QzIzMzQzRTZGMDAyRjJC
RUEgLyogTGF5b3V0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkYyNkJCNkIyMzM0M0U1QjAwMkYyQkVBIC8qIExheW91dENvbnRleHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjI2RUI0
ODIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGMjZFQjQ2MjM0MDA0QTUwMDY5MDZFMiAv
KiBJbmxpbmVMaW5lQnVpbGRlci5oICovOyB9OworCQk2RjI5MUY0QTI2NDg4MjFFMDBCMTU3ODUg
LyogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RjI5MUY0OTI2NDg4MjFFMDBCMTU3ODUgLyogSW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNkYzNDBFQTIyNjQ4ODUyRDAwQTYzQTAwIC8qIEZvcm1hdHRpbmdHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYzNDBF
QTEyNjQ4ODUyRDAwQTYzQTAwIC8qIEZvcm1hdHRpbmdHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGMzYwRTUwMjM5OTk0MjEwMDE1
MTJBNyAvKiBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYzNjBFNEUyMzk5OTQyMDAwMTUxMkE3IC8qIElubGlu
ZVNvZnRMaW5lQnJlYWtJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNkYzRkJBOTgyNTU2RTMxMzAwMzUzMEZEIC8qIExheW91dEludGVncmF0
aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGM0ZCQTk3MjU1NkUzMTIwMDM1MzBGRCAvKiBMYXlvdXRJbnRlZ3Jh
dGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY0MERBODIyNTEzMDMzQTAwRUMwNEI3IC8qIElubGluZVJl
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGNDBE
QTgxMjUxMzAzM0EwMEVDMDRCNyAvKiBJbmxpbmVSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkY0OUMzRTcyNjQ3OUIzQzAwNTE5NTNEIC8q
IFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkY0OUMzRTYyNjQ3OUIzQjAwNTE5NTNEIC8qIFRhYmxlRm9ybWF0dGlu
Z1F1aXJrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTZGNTZCNDQ3MjY0NzlFNjIwMEFBRTI1NyAvKiBGb3JtYXR0aW5nUXVpcmtzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjU2QjQ0NjI2NDc5RTYx
MDBBQUUyNTcgLyogRm9ybWF0dGluZ1F1aXJrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGNjM4M0Y2MjQyN0FGNEEwMERBQkE1MyAvKiBMYXlv
dXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RjYzODNGNDI0MjdBRjQ5MDBEQUJBNTMgLyogTGF5b3V0SW5pdGlh
bENvbnRhaW5pbmdCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTZGNkRGMzZGMjY0NzIyRUEwMDkzRTgzNCAvKiBCbG9ja01hcmdpbkNvbGxh
cHNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjZE
RjM2RTI2NDcyMkVBMDA5M0U4MzQgLyogQmxvY2tNYXJnaW5Db2xsYXBzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZGNzlGMEMxMjY0ODdDNEMw
MDY5ODJCNiAvKiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3OUYwQzAyNjQ4N0M0QzAwNjk4MkI2IC8qIEJs
b2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNkY3Q0EzQzYyMDhDMjk1NzAwMkYyOUFCIC8qIExheW91dFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjdDQTND
NDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDQTIwOEMyQjJFMDAyRjI5QUIgLyog
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZGOTE0MjExMjUxNTIxMzgwMDRFNEZFQSAvKiBJbmxpbmVMaW5lR2VvbWV0cnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGOTE0MjBGMjUx
NTIxMzcwMDRFNEZFQSAvKiBJbmxpbmVMaW5lR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjE0OCw2ICsyMTU1LDcgQEAKIAkJNkY5
OTVBMzYxQTcwODMzNzAwQTczNUY0IC8qIEpTV2ViR0xTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Rjk5NUEyQzFBNzA4MzM3MDBBNzM1RjQgLyog
SlNXZWJHTFN5bmMuaCAqLzsgfTsKIAkJNkY5OTVBMzgxQTcwODMzNzAwQTczNUY0IC8qIEpTV2Vi
R0xUcmFuc2Zvcm1GZWVkYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkY5OTVBMkUxQTcwODMzNzAwQTczNUY0IC8qIEpTV2ViR0xUcmFuc2Zvcm1G
ZWVkYmFjay5oICovOyB9OwogCQk2Rjk5NUEzQTFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFZl
cnRleEFycmF5T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2Rjk5NUEzMDFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0LmggKi87IH07CisJCTZGOUQxQUZBMjY0NzYxMzYwMEY1RDNBRCAvKiBCbG9ja0Zvcm1hdHRp
bmdRdWlya3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZGOUQxQUY5MjY0NzYxMzUwMEY1RDNBRCAvKiBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RkE0NDU0RTg5
OEYyRkMxNjhCQzM4QzEgLyogSlNCZWZvcmVVbmxvYWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlFMDRBMjdCRUQyRjgxRjk4RTkwMjJCIC8q
IEpTQmVmb3JlVW5sb2FkRXZlbnQuaCAqLzsgfTsKIAkJNkZCMTFCNUMyMTc4M0ZEMDAwRTJBNTc0
IC8qIFRleHRVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RkIxMUI1OTIxNzgzRkNGMDBFMkE1NzQgLyogVGV4dFV0aWwuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RkIyNDAwNTIzREZGMTI4MDA3
OTY0NTggLyogSW5saW5lTGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkZCMjQwMDMyM0RGRjEyNzAwNzk2NDU4IC8qIElubGluZUxpbmVCb3gu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjE1
OSw3ICsyMTY3LDEwIEBACiAJCTZGQ0UxQTFBMjI2MThBQkQwMDRGMDM0MyAvKiBMYXlvdXRJbnRl
Z3JhdGlvblJ1bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkZDRTFBMTgyMjYxOEFCMzAwNEYwMzQzIC8qIExheW91dEludGVncmF0aW9uUnVuLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZEMDk1NDMy
NTExMTUyMjAwOTg4NzdEIC8qIExheW91dEdlb21ldHJ5UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZEMDk1NDEyNTExMTUyMjAwOTg4NzdEIC8q
IExheW91dEdlb21ldHJ5UmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTZGRTE5ODE3MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVDb250ZW50
QnJlYWtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUNvbnRlbnRCcmVha2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZFNjM2RTgyNjQ3
OTYyOTAwRjA5NTFFIC8qIElubGluZUZvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGRTYzNkU3MjY0Nzk2MjkwMEYwOTUxRSAv
KiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZFN0NGQTIyMTc3RUVGMjAwNUIxNTczIC8qIElubGluZUl0
ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGRTdD
RkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggKi87IH07CisJCTZGRjkxMUY3MjY0
ODdGQzgwMDIwMjFERiAvKiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkY5MTFGNjI2NDg3RkM4MDAyMDIxREYg
LyogRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTZGRjlBMDg0MjY0ODgzNDIwMDEyNTBEOCAvKiBUYWJsZUZv
cm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkZGOUEwODMyNjQ4ODM0MTAwMTI1MEQ4IC8qIFRhYmxlRm9ybWF0dGluZ0dlb21l
dHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NkZGQTRDMDEyM0YyRkVEOTAwN0U0RUJDIC8qIExheW91dExpbmVCcmVha0JveC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZGQTRDMDAyM0YyRkVEOTAw
N0U0RUJDIC8qIExheW91dExpbmVCcmVha0JveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGRkRDNDQyMjEyRUZGMTcwMEE5Q0E5MSAvKiBGbG9h
dEF2b2lkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZGRkRDNDQwMjEyRUZGMTYwMEE5Q0E5MSAvKiBGbG9hdEF2b2lkZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDlBMDFGRTFFM0QwQkREMDA2
QjBENEMgLyogTW9kdWxlRmV0Y2hGYWlsdXJlS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA5QTAxRkQxRTNEMEJDQzAwNkIwRDRDIC8qIE1vZHVs
ZUZldGNoRmFpbHVyZUtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNjQxNSw3ICs2NDI2LDcgQEAKIAkJMTFDNUYxMzQyMDA1MjdGOTAwMDFB
RTYwIC8qIFJlbmRlclRyZWVCdWlsZGVyTWF0aE1MLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyTWF0aE1MLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTExQ0IyNzg2MjAzQkE1NzAwMDRBMURDOSAvKiBSZW5kZXJUcmVlQnVpbGRlckZ1
bGxTY3JlZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGdWxsU2Ny
ZWVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFDQjI3ODcyMDNCQTU3MDAw
NEExREM5IC8qIFJlbmRlclRyZWVCdWlsZGVyRnVsbFNjcmVlbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMTFEMTlDMkUyMzE1OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0
cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxMUQxOUMyRTIzMTU5QkFFMDA4
RjI0RDMgLyogVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxMUU1MTYzNTI2MUUxQTA1MDBFNjlGMjUgLyogV2ViWFJJbnB1dFNwYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlhSSW5wdXRTcGFjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxMUU1MTYzNzI2MUUxQTA1MDBFNjlGMjUgLyogV2ViWFJJbnB1dFNw
YWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlhSSW5wdXRT
cGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExRTUxNjNBMjYxRTFBMTQw
MEU2OUYyNSAvKiBXZWJYUkdhbWVwYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViWFJHYW1lcGFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTM2LDEy
ICs5OTQ3LDEzIEBACiAJCTZFRDhDMzc4MTgzQkZGOEMwMDlFNTNCRCAvKiBCb3hTaGFwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb3hTaGFwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RUU4QTc3MDEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
V2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZFRThBNzcxMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGMDgzMERGMjBCNDY5NTEwMDhBOTQ1
QiAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNkYwODMwREYyMEI0Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0dl
b21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwQjk4QjMyM0YyNjhFQjAwRUVDMkYy
IC8qIExheW91dElubGluZVRleHRCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGF5b3V0SW5saW5lVGV4dEJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
RjBCOThCNjIzRjI2OTA2MDBFRUMyRjIgLyogTGF5b3V0SW5saW5lVGV4dEJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMYXlvdXRJbmxpbmVUZXh0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkYwQ0Q2OTIyMjlFRDMxOTAwQzU5OTRFIC8qIElubGluZUxpbmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZGMENENjk0MjI5RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNkYxMEIwODYyMkI4NTY4RDAwOTBFNjlDIC8qIElubGluZUZvcm1hdHRpbmdD
b250ZXh0UXVpcmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUZvcm1hdHRpbmdDb250
ZXh0UXVpcmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYxMEIwODYyMkI4
NTY4RDAwOTBFNjlDIC8qIElubGluZUZvcm1hdHRpbmdRdWlya3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZGMTU1MjIwMjY0NzZCNUIwMEUzNTNDNiAvKiBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1h
dHRpbmdRdWlya3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGMTcyNjRDMjQ3MEM1RjcwMDUxOEM5NiAvKiBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjE3MjY0RTI0NzBD
NjBBMDA1MThDOTYgLyogVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMUNDMURDMjI1RjhCNDEw
MDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVU
ZXh0SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTUyLDI1ICs5OTY0
LDMxIEBACiAJCTZGMjZCQjY5MjMzNDNFNUEwMDJGMkJFQSAvKiBMYXlvdXRDb250ZXh0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dENvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RjI2QkI2QjIzMzQzRTVCMDAyRjJCRUEgLyogTGF5b3V0Q29udGV4dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMYXlvdXRDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZGMjZFQjQ2MjM0MDA0QTUwMDY5MDZFMiAvKiBJbmxpbmVMaW5lQnVpbGRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lQnVpbGRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYyOTFGNDkyNjQ4ODIxRTAwQjE1Nzg1IC8qIElubGluZUZv
cm1hdHRpbmdHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxp
bmVGb3JtYXR0aW5nR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYz
NDBFQTEyNjQ4ODUyRDAwQTYzQTAwIC8qIEZvcm1hdHRpbmdHZW9tZXRyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXR0aW5nR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNkYzNUVGQUYyMTg3Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1h
dHRpbmdHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RjM2MEU0RTIzOTk5NDIwMDAxNTEyQTcgLyogSW5saW5lU29mdExpbmVCcmVha0l0ZW0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lU29mdExpbmVCcmVha0l0ZW0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRkJBOTYyNTU2RTMwODAwMzUzMEZE
IC8qIExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGM0ZCQTk3MjU1NkUzMTIwMDM1MzBGRCAvKiBMYXlv
dXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY0MERBODEyNTEzMDMzQTAwRUMwNEI3IC8qIElu
bGluZVJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lUmVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjQ5QzNFNjI2NDc5QjNCMDA1MTk1M0Qg
LyogVGFibGVGb3JtYXR0aW5nUXVpcmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RjRBNUJENTIyRjlGMTZCMDBBODBGMjUgLyogTGF5b3V0UGhhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2
RjU2QjQ0NjI2NDc5RTYxMDBBQUUyNTcgLyogRm9ybWF0dGluZ1F1aXJrcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXR0aW5nUXVpcmtzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZGNUI3RUFBMjMwMEE3OUUwMDY3RDlDMyAvKiBUYWJsZUdyaWQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGFibGVHcmlkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkY2MzgzRjQyNDI3QUY0OTAwREFCQTUzIC8qIExheW91dEluaXRpYWxDb250YWlu
aW5nQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0SW5pdGlh
bENvbnRhaW5pbmdCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjY2MzhE
NDI0OUUyNjhCMDAxOTI1RkMgLyogVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1
aXJrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0UXVpcmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkY2NjM4RDQy
NDlFMjY4QjAwMTkyNUZDIC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjY5QTc5OTI0RDZGQUI4MDBFNkI4NUQg
LyogSW5saW5lTGluZUJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lQm94LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkY3MERFREQyNTExMjZGMzAwRjBGQzc4
IC8qIEZsZXhGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZsZXhGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkY2REYzNkUyNjQ3MjJFQTAwOTNFODM0IC8qIEJsb2NrTWFyZ2luQ29sbGFwc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tNYXJnaW5Db2xsYXBzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjcwREVERDI1MTEyNkYzMDBGMEZDNzgg
LyogRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbGV4Rm9y
bWF0dGluZ0dlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3Mzkx
OEMyMTA2Q0VERDAwNkFGMjYyIC8qIExheW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91
dFVuaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGNzlGMEMwMjY0ODdDNEMw
MDY5ODJCNiAvKiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RjdCOENFQzIzNjI2RTY2MDBDOUZGMTUgLyogSW5saW5lSXRlbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVJdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8qIExheW91dFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExheW91dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
N0NBM0M1MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMYXlvdXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGN0NB
M0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RjdDQTNDOTIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjhGNDYwMTIxQjAzQkI0MDA0MUFDM0EgLyog
Rm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0dGlu
Z0NvbnRleHRRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjhGNDYw
MzIxQjAzQkM2MDA0MUFDM0EgLyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkY4RjQ2MDEyMUIwM0JCNDAwNDFBQzNBIC8qIEZvcm1h
dHRpbmdRdWlya3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0dGluZ1F1aXJrcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGOEY0NjAzMjFCMDNCQzYwMDQxQUMzQSAv
KiBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvY2tGb3Jt
YXR0aW5nUXVpcmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY5MTQyMEYy
NTE1MjEzNzAwNEU0RkVBIC8qIElubGluZUxpbmVHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkY5NURFNEIyMzdCODg5QjAwRTUxN0UxIC8qIEludmFsaWRhdGlvbkNvbnRl
eHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW52YWxpZGF0aW9uQ29udGV4
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2Rjk1REU0QzIzN0I4ODlDMDBFNTE3
RTEgLyogSW52YWxpZGF0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW52YWxpZGF0aW9uU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5
OTksNiArMTAwMTcsNyBAQAogCQk2Rjk5NUEyRTFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFRy
YW5zZm9ybUZlZWRiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2Vi
R0xUcmFuc2Zvcm1GZWVkYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2Rjk5
NUEyRjFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGOTk1QTMwMUE3MDgzMzcwMEE3
MzVGNCAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTZGOUQxQUY5MjY0NzYxMzUwMEY1RDNBRCAvKiBCbG9ja0Zvcm1hdHRpbmdR
dWlya3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tGb3JtYXR0aW5n
UXVpcmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGQUUxNkJBMjQwNkRFN0Uw
MEE0ODQxNCAvKiBQcmVjb21wdXRlZEJsb2NrTWFyZ2luQ29sbGFwc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUHJlY29tcHV0ZWRCbG9ja01hcmdpbkNvbGxhcHNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkZCMEVEMTEyNDI3QjZDNjAwMjczN0U2IC8qIExheW91dEluaXRp
YWxDb250YWluaW5nQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW5pdGlhbENv
bnRhaW5pbmdCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGQjExQjU5
MjE3ODNGQ0YwMEUyQTU3NCAvKiBUZXh0VXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXh0VXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwMTEs
OSArMTAwMzAsOSBAQAogCQk2RkI3RDJEODI1MEZEN0VGMDAwMjA3QUEgLyogRmxleEZvcm1hdHRp
bmdTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbGV4Rm9ybWF0dGluZ1N0YXRlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCN0QyRDkyNTBGRDdGQzAwMDIwN0FBIC8q
IEZsZXhGb3JtYXR0aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbGV4Rm9ybWF0dGluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkZCN0QyREEyNTBGRDdGQzAwMDIwN0FBIC8qIEZsZXhGb3JtYXR0aW5nU3RhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxleEZvcm1hdHRpbmdTdGF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyogRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtYXR0aW5nQ29u
dGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZCQjg2MDUy
MEI0NjRCNjAwREFEOTM4IC8qIEZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb3JtYXR0aW5nR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RkMzRjk0NTI1MTY3NTY2MDBBNDlCRUEgLyogSW5saW5lTGluZVJ1bi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lUnVuLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTZGQzUzQUVCMjRBRjdBOEUwMDYwNTlGRSAvKiBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0UXVpcmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlRm9ybWF0dGluZ0NvbnRl
eHRRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RkM1M0FFQjI0QUY3
QThFMDA2MDU5RkUgLyogVGFibGVGb3JtYXR0aW5nUXVpcmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZGQzVDQTkyMjJFMzU5OTMwMEIxM0UxMSAvKiBUYWJsZUZvcm1hdHRpbmdTdGF0ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZUZvcm1hdHRpbmdTdGF0ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZGQzVDQTk0MjJFMzU5OTQwMEIxM0UxMSAvKiBUYWJsZUZvcm1h
dHRpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlRm9ybWF0dGluZ0NvbnRl
eHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkM1Q0E5NTIyRTM1OTk0MDBC
MTNFMTEgLyogVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUYWJsZUZv
cm1hdHRpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDAyMiwx
MiArMTAwNDEsMTUgQEAKIAkJNkZEMDk1NDEyNTExMTUyMjAwOTg4NzdEIC8qIExheW91dEdlb21l
dHJ5UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRHZW9tZXRy
eVJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZFMTk4MTMyMTc4Mzk3QjAw
NDQ2RjA4IC8qIElubGluZUNvbnRlbnRCcmVha2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElubGluZUNvbnRlbnRCcmVha2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUNvbnRlbnRC
cmVha2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUNvbnRlbnRC
cmVha2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGRTYzNkU3MjY0Nzk2Mjkw
MEYwOTUxRSAvKiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElubGluZUZvcm1hdHRpbmdRdWlya3MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkZFN0FBMjYyMUMzN0I2MzAwMjk2RENEIC8qIE1hcmdpblR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1hcmdpblR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGRTdDRkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkZFOEU2RjcyMzdCQTVFODAwNzU4RDI2IC8qIEludmFsaWRhdGlvbkNvbnRleHQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW52YWxpZGF0aW9uQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZGRThFNkY4MjM3QkE2QjIwMDc1OEQyNiAvKiBJbnZhbGlkYXRp
b25TdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnZhbGlkYXRpb25TdGF0ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTlGMDkyMjIyMTEwMzUwMDRDNTA4MiAvKiBD
b250ZW50Q2hhbmdlT2JzZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29udGVudENoYW5nZU9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkZFRkU4MUQyMkY5RDIyQTAwMTE0OTI3IC8qIExheW91dFBoYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExheW91dFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGRjkx
MUY2MjY0ODdGQzgwMDIwMjFERiAvKiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZGOUEwODMyNjQ4ODM0MTAwMTI1MEQ4IC8qIFRhYmxl
Rm9ybWF0dGluZ0dlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRh
YmxlRm9ybWF0dGluZ0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
RjlGMUJFMjQ2RDk2NkMwMDQzNTA4MyAvKiBUYWJsZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUYWJsZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRkE0
QkZFMjNGMkZFQ0QwMDdFNEVCQyAvKiBMYXlvdXRMaW5lQnJlYWtCb3guY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTGF5b3V0TGluZUJyZWFrQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkZGQTRDMDAyM0YyRkVEOTAwN0U0RUJDIC8qIExheW91dExpbmVCcmVha0JveC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRMaW5lQnJlYWtCb3guaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MjMyLDExICsxODI1NCwxNCBAQAogCQkJCTZG
RDRGRTNFMjQ3MEIzQUQwMDczNzRDQyAvKiB0YWJsZXdyYXBwZXIgKi8sCiAJCQkJMTE1Q0ZBNkQy
MDhBRkFCNjAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTEx
NUNGQTZDMjA4QUZBQjYwMDFFNjk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggKi8sCi0J
CQkJNkYwODMwREYyMEI0Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAgKi8sCi0JCQkJNkY4RjQ2MDMyMUIwM0JDNjAwNDFBQzNBIC8qIEJsb2NrRm9ybWF0
dGluZ0NvbnRleHRRdWlya3MuY3BwICovLAorCQkJCTZGMDgzMERGMjBCNDY5NTEwMDhBOTQ1QiAv
KiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkY3OUYwQzAyNjQ4N0M0QzAw
Njk4MkI2IC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8sCisJCQkJNkY4RjQ2MDMyMUIw
M0JDNjAwNDFBQzNBIC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8sCisJCQkJNkY5RDFB
RjkyNjQ3NjEzNTAwRjVEM0FEIC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oICovLAogCQkJCTEx
NUNGQTc5MjA4QjhEOUQwMDFFNjk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5jcHAgKi8sCiAJ
CQkJMTE1Q0ZBNzgyMDhCOEQ5RDAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0dGluZ1N0YXRlLmggKi8s
CiAJCQkJMTE1Q0ZBODkyMDhCOTIxQTAwMUU2OTkxIC8qIEJsb2NrTWFyZ2luQ29sbGFwc2UuY3Bw
ICovLAorCQkJCTZGNkRGMzZFMjY0NzIyRUEwMDkzRTgzNCAvKiBCbG9ja01hcmdpbkNvbGxhcHNl
LmggKi8sCiAJCQkJNkZBRTE2QkEyNDA2REU3RTAwQTQ4NDE0IC8qIFByZWNvbXB1dGVkQmxvY2tN
YXJnaW5Db2xsYXBzZS5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IGJsb2NrOwpAQCAtMTgyNTAs
OCArMTgyNzUsMTAgQEAKIAkJCQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lQ29u
dGVudEJyZWFrZXIuaCAqLywKIAkJCQk2RjdDQTNDOTIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICovLAotCQkJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0
RTBGNCAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLywKLQkJCQk2RjEw
QjA4NjIyQjg1NjhEMDA5MEU2OUMgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3Bw
ICovLAorCQkJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0RTBGNCAvKiBJbmxpbmVGb3JtYXR0aW5nR2Vv
bWV0cnkuY3BwICovLAorCQkJCTZGMjkxRjQ5MjY0ODgyMUUwMEIxNTc4NSAvKiBJbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnkuaCAqLywKKwkJCQk2RjEwQjA4NjIyQjg1NjhEMDA5MEU2OUMgLyogSW5s
aW5lRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8sCisJCQkJNkZFNjM2RTcyNjQ3OTYyOTAwRjA5NTFF
IC8qIElubGluZUZvcm1hdHRpbmdRdWlya3MuaCAqLywKIAkJCQkxMTVDRkE3RDIwOEI4RTEwMDAx
RTY5OTEgLyogSW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcCAqLywKIAkJCQkxMTVDRkE3QzIwOEI4
RTEwMDAxRTY5OTEgLyogSW5saW5lRm9ybWF0dGluZ1N0YXRlLmggKi8sCiAJCQkJNkY3QjhDRUMy
MzYyNkU2NjAwQzlGRjE1IC8qIElubGluZUl0ZW0uY3BwICovLApAQCAtMjI2MDYsOCArMjI2MzMs
MTAgQEAKIAkJCQk2RkM1Q0E5MTIyRTM1OTMzMDBCMTNFMTEgLyogdGFibGUgKi8sCiAJCQkJMTE1
Q0ZBNjkyMDhBRjdEMDAwMUU2OTkxIC8qIEZvcm1hdHRpbmdDb250ZXh0LmNwcCAqLywKIAkJCQkx
MTVDRkE2ODIwOEFGN0QwMDAxRTY5OTEgLyogRm9ybWF0dGluZ0NvbnRleHQuaCAqLywKLQkJCQk2
RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyogRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAg
Ki8sCi0JCQkJNkY4RjQ2MDEyMUIwM0JCNDAwNDFBQzNBIC8qIEZvcm1hdHRpbmdDb250ZXh0UXVp
cmtzLmNwcCAqLywKKwkJCQk2RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyogRm9ybWF0dGluZ0dl
b21ldHJ5LmNwcCAqLywKKwkJCQk2RjM0MEVBMTI2NDg4NTJEMDBBNjNBMDAgLyogRm9ybWF0dGlu
Z0dlb21ldHJ5LmggKi8sCisJCQkJNkY4RjQ2MDEyMUIwM0JCNDAwNDFBQzNBIC8qIEZvcm1hdHRp
bmdRdWlya3MuY3BwICovLAorCQkJCTZGNTZCNDQ2MjY0NzlFNjEwMEFBRTI1NyAvKiBGb3JtYXR0
aW5nUXVpcmtzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGZvcm1hdHRpbmdDb250ZXh0czsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMjYyOCw3ICsyMjY1Nyw4IEBACiAJCQljaGls
ZHJlbiA9ICgKIAkJCQk2RkI3RDJENzI1MEZEN0U1MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdD
b250ZXh0LmNwcCAqLywKIAkJCQk2RkI3RDJEOTI1MEZEN0ZDMDAwMjA3QUEgLyogRmxleEZvcm1h
dHRpbmdDb250ZXh0LmggKi8sCi0JCQkJNkY3MERFREQyNTExMjZGMzAwRjBGQzc4IC8qIEZsZXhG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLywKKwkJCQk2RjcwREVERDI1MTEyNkYzMDBG
MEZDNzggLyogRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkZGOTExRjYyNjQ4
N0ZDODAwMjAyMURGIC8qIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLywKIAkJCQk2RkI3RDJE
ODI1MEZEN0VGMDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdTdGF0ZS5jcHAgKi8sCiAJCQkJNkZC
N0QyREEyNTBGRDdGQzAwMDIwN0FBIC8qIEZsZXhGb3JtYXR0aW5nU3RhdGUuaCAqLywKIAkJCSk7
CkBAIC0yMjY0MCw4ICsyMjY3MCwxMCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNkZDNUNBOTQy
MkUzNTk5NDAwQjEzRTExIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTZG
QzVDQTk1MjJFMzU5OTQwMEIxM0UxMSAvKiBUYWJsZUZvcm1hdHRpbmdDb250ZXh0LmggKi8sCi0J
CQkJMTFEMTlDMkUyMzE1OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAgKi8sCi0JCQkJNkZDNTNBRUIyNEFGN0E4RTAwNjA1OUZFIC8qIFRhYmxlRm9ybWF0
dGluZ0NvbnRleHRRdWlya3MuY3BwICovLAorCQkJCTExRDE5QzJFMjMxNTlCQUUwMDhGMjREMyAv
KiBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkZGOUEwODMyNjQ4ODM0MTAw
MTI1MEQ4IC8qIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8sCisJCQkJNkZDNTNBRUIyNEFG
N0E4RTAwNjA1OUZFIC8qIFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8sCisJCQkJNkY0OUMz
RTYyNjQ3OUIzQjAwNTE5NTNEIC8qIFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5oICovLAogCQkJCTZG
QzVDQTkyMjJFMzU5OTMwMEIxM0UxMSAvKiBUYWJsZUZvcm1hdHRpbmdTdGF0ZS5jcHAgKi8sCiAJ
CQkJNkZDNUNBOTYyMkUzNTk5NTAwQjEzRTExIC8qIFRhYmxlRm9ybWF0dGluZ1N0YXRlLmggKi8s
CiAJCQkJNkY1QjdFQUEyMzAwQTc5RTAwNjdEOUMzIC8qIFRhYmxlR3JpZC5jcHAgKi8sCkBAIC0y
MjY2OSw3ICsyMjcwMSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk2RjE3MjY0QzI0NzBDNUY3
MDA1MThDOTYgLyogVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgKi8sCiAJ
CQkJNkYxNzI2NEUyNDcwQzYwQTAwNTE4Qzk2IC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuaCAqLywKLQkJCQk2RjY2MzhENDI0OUUyNjhCMDAxOTI1RkMgLyogVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgKi8sCisJCQkJNkY2NjM4RDQyNDlF
MjY4QjAwMTkyNUZDIC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8s
CisJCQkJNkYxNTUyMjAyNjQ3NkI1QjAwRTM1M0M2IC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0
dGluZ1F1aXJrcy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0YWJsZXdyYXBwZXI7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzE0MjYsNyArMzE0NTksNiBAQAogCQkJCTMxQTc5NUM3
MTg4OEJDQjIwMDM4MkY5MCAvKiBBTkdMRUluc3RhbmNlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNDQ5RDg2NEYyNjQwQzlDNTAwMDEyMkRFIC8qIEhpZ2hsaWdodFZp
c2liaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAv
KiBBbmltYXRpb25FZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5ODQ4MDExQTFE
ODE3QjAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTFB
RDEyNjIzNkQ4NkU1MDA2RkYzN0MgLyogQW5pbWF0aW9uRXZlbnRCYXNlLmggaW4gSGVhZGVycyAq
LywKQEAgLTMxNjU5LDcgKzMxNjkxLDEwIEBACiAJCQkJMkVCNEJDRDMxMjFGMDNFMzAwRUM0ODg1
IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZDN0YxMjJC
OEEzRDAwMUZEMUY3IC8qIEJsb2JVUkwuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTZFMjA4
QUZBQjcwMDFFNjk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
KwkJCQk2Rjc5RjBDMTI2NDg3QzRDMDA2OTgyQjYgLyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnku
aCBpbiBIZWFkZXJzICovLAorCQkJCTZGOUQxQUZBMjY0NzYxMzYwMEY1RDNBRCAvKiBCbG9ja0Zv
cm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTdBMjA4QjhEOUQwMDFF
Njk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkY2REYz
NkYyNjQ3MjJFQTAwOTNFODM0IC8qIEJsb2NrTWFyZ2luQ29sbGFwc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNUVCNUUxMEU4MUJFODcwMEIyNTk2NSAvKiBCb3JkZXJEYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1ODk1NTZFRDE4RDRBNDQwMDA3NjRCMDMgLyogQm9yZGVyRWRnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8qIEJvcmRlclZhbHVlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMyNDY0LDYgKzMyNDk5LDcgQEAKIAkJCQkzNzJDMDBEOTEyOTYx
OUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRG
MEExNTRGMDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2RkI3RDJERDI1MEZEODI4MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggaW4g
SGVhZGVycyAqLywKKwkJCQk2RkY5MTFGNzI2NDg3RkM4MDAyMDIxREYgLyogRmxleEZvcm1hdHRp
bmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCN0QyREUyNTBGRDgyRTAwMDIwN0FB
IC8qIEZsZXhGb3JtYXR0aW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRkRDNDQyMjEy
RUZGMTcwMEE5Q0E5MSAvKiBGbG9hdEF2b2lkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDcz
QkFBMEMzOTlCMUYwMDBGNTk3OSAvKiBGbG9hdENvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMzI1MTcsNiArMzI1NTMsOCBAQAogCQkJCUQwNUNFRDJBMEE0MEJCMkMwMEM1QUYzOCAvKiBG
b3JtYXRCbG9ja0NvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRTZDQkZCMTg3RjM3MDcw
MEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTZB
MjA4QUY3RDAwMDFFNjk5MSAvKiBGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNkYzNDBFQTIyNjQ4ODUyRDAwQTYzQTAwIC8qIEZvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNkY1NkI0NDcyNjQ3OUU2MjAwQUFFMjU3IC8qIEZvcm1hdHRpbmdRdWly
a3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTc2MjA4QUZFMzAwMDFFNjk5MSAvKiBGb3Jt
YXR0aW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1MDY2NEY4MTU3RjUyREMwMEFDMjI2
RiAvKiBGb3JtQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2NzAwQ0U5MjNB
MTAwN0VGM0NEIC8qIEZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNjQ1LDYgKzMyNjgz
LDcgQEAKIAkJCQk0NDMwRDAwQjI1NzVBODNFMDA0NkQ0MDEgLyogSGlnaGxpZ2h0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogSGlnaGxpZ2h0RGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDQzMEQwMEQyNTc1QThBNTAwNDZENDAxIC8qIEhpZ2hsaWdo
dFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NDlEODY0RjI2NDBDOUM1MDAwMTIyREUg
LyogSGlnaGxpZ2h0VmlzaWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5NEQxNTQwQzI3
NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3RENFMjAyMTA4
MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTE3NDFEMTEwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggaW4gSGVhZGVycyAqLywK
QEAgLTMyOTIwLDYgKzMyOTU5LDggQEAKIAkJCQlCNTdDQjUyRTE4MkEzRUZDMDA3OUE2NDcgLyog
SW5saW5lRWxlbWVudEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkY1RTMwQTE1NUEwNTAw
MEE0MjM0IC8qIElubGluZUZsb3dCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTZGN0NBM0NBMjA4
QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNkYyOTFGNEEyNjQ4ODIxRTAwQjE1Nzg1IC8qIElubGluZUZvcm1hdHRpbmdHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkZFNjM2RTgyNjQ3OTYyOTAwRjA5NTFFIC8qIElubGlu
ZUZvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTdFMjA4QjhFMTAw
MDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZG
RTdDRkEyMjE3N0VFRjIwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0U3ODkxNjExMjBENjA4MDA2MEVDRTUgLyogSW5saW5lSXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzQ4ODMsNyArMzQ5MjQsNiBAQAogCQkJCUU0NkI0MUY5MUNCMjRFNzAwMDhGMTFE
RSAvKiBTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OThBRUQy
MTNGQjIyNEQwMDkwQjFBQSAvKiBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4QTQ4NDc4MEU1MjcyQzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyogU3R5bGVTY29w
ZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRTRFMkE4MUUzQjE3MTAwMDIzQkI4QSAv
KiBTY3JpcHRFbGVtZW50Q2FjaGVkU2NyaXB0RmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQxMTIyM0JBMjYwMjQ0RkUwMEIwQTBCNiAvKiBTY3JpcHRFeGVjdXRp
b25Db250ZXh0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTE5OSw2ICszNTIzOSw3
IEBACiAJCQkJRTQ5NDZFQUYxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5NEYzN0UyMzY2MTYyNjAwM0FBNUM3IC8qIFN0eWxlUnVsZVR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NjFENjVGMUJCMEM4MEQwMENCNTY0NSAvKiBTdHls
ZVNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyog
U3R5bGVTY29wZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTRBNEY0OEFBMTZCMERGQzAw
MEVEQkIyOSAvKiBTdHlsZVNjb3BlUnVsZVNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0N0E1
RTNFMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTlENjM4MDEwMUFGMTczMjIwMDMxQTE1QyAvKiBTdHlsZVNlbGZBbGlnbm1lbnRE
YXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NDIzLDggKzM1NDY0LDExIEBACiAJCQkJRTNDMDQx
MzgyNTRDQjMwRDAwMjFEMEU2IC8qIFN5c3RlbVNvdW5kRGVsZWdhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzQzA0MTJGMjU0Q0EyOUIwMDIxRDBFNiAvKiBTeXN0ZW1Tb3VuZE1hbmFnZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTVENTk3NUIzMTk2MzVGMTEwMEQwMDg3OCAvKiBTeXN0ZW1WZXJz
aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RkY5QTA4NDI2NDg4MzQyMDAxMjUwRDggLyogVGFi
bGVGb3JtYXR0aW5nR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGNDlDM0U3MjY0NzlC
M0MwMDUxOTUzRCAvKiBUYWJsZUZvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4Q0ZGMDUxMEExNTRGMDkwMDBBNDIzNCAvKiBUYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNkYxNzI2NEYyNDcwQzYwQjAwNTE4Qzk2IC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0
dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGMTU1MjIxMjY0NzZCNUMwMEUzNTND
NiAvKiBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTNCQjZCODExMjJBN0QzMTMwMDNBMkE2OSAvKiBUYWJTaXplLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0NjNFQjYyMzFCODc4OUUwMDA5NkVENTEgLyogVGFnQ29sbGVjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOUIwQUJDQUUyMzZCQjQzMTAwQjQ1MDg1IC8qIFRhc2tTb3VyY2UuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdT
dGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oCmluZGV4IGJk
NmM5OGJmZDFlODNjNGQ2NjI1OWMyYjdlMTlkZDA0ZGJhNjVhNmUuLjU2YzFlODFiMWE5NWZhZTYx
YjA4YzZmYjAzZWE5ZDM4ZTNjOTkyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9Gb3JtYXR0aW5nU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGlu
Z1N0YXRlLmgKQEAgLTQ4LDEyICs0OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrTmVlZHNM
YXlvdXQoY29uc3QgQm94JiwgU3R5bGVEaWZmKTsKICAgICBib29sIG5lZWRzTGF5b3V0KGNvbnN0
IEJveCYpOwogCi0gICAgdm9pZCBzZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNv
bnN0IEJveCYsICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk7
Ci0gICAgT3B0aW9uYWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHM+IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY29uc3QgQm94JikgY29uc3Q7Cisg
ICAgdm9pZCBzZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNvbnN0IEJveCYsICBJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKTsKKyAgICBPcHRpb25hbDxJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzPiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNvbnN0IEJveCYpIGNv
bnN0OwogICAgIHZvaWQgY2xlYXJJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEJveCYp
OwogCi0gICAgdm9pZCBzZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKEZvcm1hdHRpbmdDb250
ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMp
IHsgbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gaW50cmluc2ljV2lkdGhDb25zdHJhaW50
czsgfQotICAgIE9wdGlvbmFsPEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzPiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzOyB9CisgICAgdm9pZCBzZXRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25zdHJhaW50
cykgeyBtX2ludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzOyB9CisgICAgT3B0aW9uYWw8SW50cmluc2ljV2lkdGhDb25zdHJhaW50cz4gaW50cmluc2lj
V2lkdGhDb25zdHJhaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faW50cmluc2ljV2lkdGhDb25zdHJh
aW50czsgfQogCiAgICAgYm9vbCBpc0Jsb2NrRm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlID09IFR5cGU6OkJsb2NrOyB9CiAgICAgYm9vbCBpc0lubGluZUZvcm1hdHRpbmdT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpJbmxpbmU7IH0KQEAgLTc4LDE0
ICs3OCwxNCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIExheW91dFN0YXRlJiBtX2xheW91
dFN0YXRlOwogICAgIFJlZjxGbG9hdGluZ1N0YXRlPiBtX2Zsb2F0aW5nU3RhdGU7Ci0gICAgSGFz
aE1hcDxjb25zdCBCb3gqLCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJh
aW50cz4gbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94ZXM7Ci0gICAgT3B0aW9uYWw8
Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHM+IG1faW50cmluc2lj
V2lkdGhDb25zdHJhaW50czsKKyAgICBIYXNoTWFwPGNvbnN0IEJveCosIEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHM+IG1faW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveGVzOworICAgIE9w
dGlvbmFsPEludHJpbnNpY1dpZHRoQ29uc3RyYWludHM+IG1faW50cmluc2ljV2lkdGhDb25zdHJh
aW50czsKICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyBXZWFrTGlzdEhhc2hTZXQKICAgICBPdXRP
ZkZsb3dCb3hMaXN0IG1fb3V0T2ZGbG93Qm94ZXM7CiAgICAgVHlwZSBtX3R5cGU7CiB9OwogCi1p
bmxpbmUgdm9pZCBGb3JtYXR0aW5nU3RhdGU6OnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNG
b3JCb3goY29uc3QgQm94JiBsYXlvdXRCb3gsIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpCitpbmxpbmUgdm9pZCBG
b3JtYXR0aW5nU3RhdGU6OnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cykKIHsKICAgICBBU1NFUlQoIW1faW50cmluc2ljV2lkdGhDb25zdHJhaW50c0Zv
ckJveGVzLmNvbnRhaW5zKCZsYXlvdXRCb3gpKTsKICAgICBBU1NFUlQoJm1fbGF5b3V0U3RhdGUu
Zm9ybWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCkgPT0gdGhpcyk7CkBAIC05OCw3ICs5OCw3
IEBAIGlubGluZSB2b2lkIEZvcm1hdHRpbmdTdGF0ZTo6Y2xlYXJJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKGNvbnN0IEJveCYgbGF5b3V0Qm94CiAgICAgbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzRm9yQm94ZXMucmVtb3ZlKCZsYXlvdXRCb3gpOwogfQogCi1pbmxpbmUgT3B0aW9uYWw8Rm9y
bWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHM+IEZvcm1hdHRpbmdTdGF0
ZTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChjb25zdCBCb3gmIGxheW91dEJveCkg
Y29uc3QKK2lubGluZSBPcHRpb25hbDxJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzPiBGb3JtYXR0
aW5nU3RhdGU6OmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY29uc3QgQm94JiBsYXlv
dXRCb3gpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCZtX2xheW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0
ZUZvckJveChsYXlvdXRCb3gpID09IHRoaXMpOwogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2ludHJp
bnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3hlcy5maW5kKCZsYXlvdXRCb3gpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L0xheW91dENvbnRleHQuY3BwCmluZGV4IDUzZTcwZTU5YzU1YmMyNGExZDAxNDI4
NzA1MmEyMzZmN2EwODk0YzMuLmI5MGExN2Y2ODNkNTY3YzFlYWQxMDA1NzU4YzE0NjViNzUyNDEw
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0Q29udGV4dC5jcHAKQEAgLTEwMCw3ICsx
MDAsNyBAQCB2b2lkIExheW91dENvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0U3VidHJl
ZShjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbgogICAgIGF1dG8mIGJveEdlb21ldHJ5ID0g
bGF5b3V0U3RhdGUoKS5nZW9tZXRyeUZvckJveChmb3JtYXR0aW5nQ29udGV4dFJvb3QpOwogCiAg
ICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkg
ewotICAgICAgICBhdXRvIGNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCA9IEZvcm1hdHRpbmdD
b250ZXh0OjpDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQgeyB7IGJveEdlb21ldHJ5LmNvbnRl
bnRCb3hMZWZ0KCksIGJveEdlb21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpIH0sIHsgYm94R2VvbWV0
cnkuY29udGVudEJveFRvcCgpLCB7IH0gfSB9OworICAgICAgICBhdXRvIGNvbnN0cmFpbnRzRm9y
SW5GbG93Q29udGVudCA9IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCB7IHsgYm94R2VvbWV0
cnkuY29udGVudEJveExlZnQoKSwgYm94R2VvbWV0cnkuY29udGVudEJveFdpZHRoKCkgfSwgeyBi
b3hHZW9tZXRyeS5jb250ZW50Qm94VG9wKCksIHsgfSB9IH07CiAgICAgICAgIGZvcm1hdHRpbmdD
b250ZXh0LT5sYXlvdXRJbkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBjb25zdHJhaW50
c0ZvckluRmxvd0NvbnRlbnQpOwogICAgIH0KIApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgTGF5
b3V0Q29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRTdWJ0cmVlKGNvbnN0IENvbnRhaW5l
ckJveCYgZm9ybWF0dGluCiAgICAgLy8gSXQgY29uc3RydWN0cyBhbiBGQyBmb3IgZGVzY2VuZGFu
dCBib3hlcyBhbmQgcnVucyBsYXlvdXQgb24gdGhlbS4gVGhlIGZvcm1hdHRpbmdDb250ZXh0Um9v
dCBpcyBsYWlkIG91dCBpbiB0aGUgRkMgaW4gd2hpY2ggaXQgbGl2ZXMgKHBhcmVudCBmb3JtYXR0
aW5nIGNvbnRleHQpLgogICAgIC8vIEl0IGFsc28gbWVhbnMgdGhhdCB0aGUgZm9ybWF0dGluZ0Nv
bnRleHRSb290IGhhcyB0byBoYXZlIGEgdmFsaWQvY2xlYW4gZ2VvbWV0cnkgYXQgdGhpcyBwb2lu
dC4KICAgICB7Ci0gICAgICAgIGF1dG8gY29uc3RyYWludHMgPSBGb3JtYXR0aW5nQ29udGV4dDo6
Q29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50IHsgeyBib3hHZW9tZXRyeS5wYWRkaW5nQm94
TGVmdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94V2lkdGgoKSB9LAorICAgICAgICBhdXRvIGNv
bnN0cmFpbnRzID0gQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50IHsgeyBib3hHZW9tZXRy
eS5wYWRkaW5nQm94TGVmdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94V2lkdGgoKSB9LAogICAg
ICAgICAgICAgeyBib3hHZW9tZXRyeS5wYWRkaW5nQm94VG9wKCksIGJveEdlb21ldHJ5LnBhZGRp
bmdCb3hIZWlnaHQoKSB9LCBib3hHZW9tZXRyeS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgICAg
ICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlkYXRpb25T
dGF0ZSwgY29uc3RyYWludHMpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9MYXlvdXRVbml0cy5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dFVuaXRzLmgK
aW5kZXggNDM5NjVhOTkyZThhYjE3OTY1YWJhOWQ5MjhjODJiZTdhMDE3OTNiZS4uN2JjYzViZmVm
MjM2Y2NlNzE4MGMzNzM1OTk5YzdiMTIyYzUzNWJiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L0xheW91dFVuaXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91
dFVuaXRzLmgKQEAgLTE2OSw2ICsxNjksMjkgQEAgc3RydWN0IFZlcnRpY2FsQ29uc3RyYWludHMg
ewogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGxvZ2ljYWxIZWlnaHQ7CiB9OwogCitzdHJ1Y3Qg
Q29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50IHsKKyAgICBIb3Jpem9udGFsQ29uc3RyYWludHMg
aG9yaXpvbnRhbDsKKyAgICBWZXJ0aWNhbENvbnN0cmFpbnRzIHZlcnRpY2FsOworfTsKKworc3Ry
dWN0IENvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudCB7CisgICAgSG9yaXpvbnRhbENvbnN0
cmFpbnRzIGhvcml6b250YWw7CisgICAgVmVydGljYWxDb25zdHJhaW50cyB2ZXJ0aWNhbDsKKyAg
ICAvLyBCb3JkZXJzIGFuZCBwYWRkaW5nIGFyZSByZXNvbHZlZCBhZ2FpbnN0IHRoZSBjb250YWlu
aW5nIGJsb2NrJ3MgY29udGVudCBib3ggYXMgaWYgdGhlIGJveCB3YXMgYW4gaW4tZmxvdyBib3gu
CisgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQ29uc3RyYWludHM7Cit9OworCitzdHJ1
Y3QgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7CisgICAgdm9pZCBleHBhbmQoTGF5b3V0VW5p
dCBob3Jpem9udGFsVmFsdWUpOworICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIG9wZXJh
dG9yKz0oY29uc3QgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYpOworICAgIEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMmIG9wZXJhdG9yKz0oTGF5b3V0VW5pdCk7CisgICAgSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyYgb3BlcmF0b3ItPShjb25zdCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
Jik7CisgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYgb3BlcmF0b3ItPShMYXlvdXRVbml0
KTsKKworICAgIExheW91dFVuaXQgbWluaW11bTsKKyAgICBMYXlvdXRVbml0IG1heGltdW07Cit9
OworCiBzdHJ1Y3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMgewogICAgIE9wdGlvbmFsPExh
eW91dFVuaXQ+IHdpZHRoOwogICAgIE9wdGlvbmFsPFVzZWRIb3Jpem9udGFsTWFyZ2luPiBtYXJn
aW47CkBAIC0yMDgsNiArMjMxLDM4IEBAIGlubGluZSBJbmxpbmVMYXlvdXRVbml0IG1heElubGlu
ZUxheW91dFVuaXQoKQogI2VuZGlmCiB9CiAKK2lubGluZSB2b2lkIEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHM6OmV4cGFuZChMYXlvdXRVbml0IGhvcml6b250YWxWYWx1ZSkKK3sKKyAgICBtaW5p
bXVtICs9IGhvcml6b250YWxWYWx1ZTsKKyAgICBtYXhpbXVtICs9IGhvcml6b250YWxWYWx1ZTsK
K30KKworaW5saW5lIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHM6Om9wZXJhdG9yKz0oY29uc3QgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYgb3Ro
ZXIpCit7CisgICAgbWluaW11bSArPSBvdGhlci5taW5pbXVtOworICAgIG1heGltdW0gKz0gb3Ro
ZXIubWF4aW11bTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzJiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOjpvcGVyYXRvcis9KExheW91
dFVuaXQgdmFsdWUpCit7CisgICAgZXhwYW5kKHZhbHVlKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK2lubGluZSBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzJiBJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzOjpvcGVyYXRvci09KGNvbnN0IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIG90aGVy
KQoreworICAgIG1pbmltdW0gLT0gb3RoZXIubWluaW11bTsKKyAgICBtYXhpbXVtIC09IG90aGVy
Lm1heGltdW07CisgICAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyYgSW50cmluc2ljV2lkdGhDb25zdHJhaW50czo6b3BlcmF0b3ItPShMYXlvdXRV
bml0IHZhbHVlKQoreworICAgIGV4cGFuZCgtdmFsdWUpOworICAgIHJldHVybiAqdGhpczsKK30K
Kwogc3RydWN0IFNsb3RQb3NpdGlvbiB7CiAgICAgU2xvdFBvc2l0aW9uKCkgPSBkZWZhdWx0Owog
ICAgIFNsb3RQb3NpdGlvbihzaXplX3QgY29sdW1uLCBzaXplX3Qgcm93KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9NYXJnaW5UeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L01hcmdpblR5cGVzLmgKaW5kZXggMzI5NjhjZGJkYzQxMjRjNDg4ZDA5NDg4ZDJkZGNjYjZk
NmEwZjc1ZS4uZWFhMjQyZjE4ZGYwZTlhNzJlMmUzZDAyYjU3NWFiNjdiMTlmODZlMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L01hcmdpblR5cGVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L01hcmdpblR5cGVzLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9y
bWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDk4NTdkYmEyYzdkNjUyOTYwYzQxMWZhYmNhMzU3NTg2
OTViYTExMjguLjAxODE4MmYyOGFlYmY2YmZkNDg4NTdlMWQzYWQxMjM1N2MyNmFlNTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkZvcm1hdHRpbmdHZW9tZXRy
eS5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdRdWlya3MuaCIKICNpbmNsdWRlICJGb3JtYXR0aW5n
U3RhdGUuaCIKICNpbmNsdWRlICJJbnZhbGlkYXRpb25TdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91
dEJveC5oIgpAQCAtMjcwLDYgKzI3MiwxNiBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb2xs
ZWN0T3V0T2ZGbG93RGVzY2VuZGFudHNJZk5lZWRlZCgpCiAgICAgfQogfQogCitGb3JtYXR0aW5n
R2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsKK30KKworRm9ybWF0dGluZ1F1aXJrcyBGb3Jt
YXR0aW5nQ29udGV4dDo6cXVpcmtzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRm9ybWF0dGluZ1F1
aXJrcygqdGhpcyk7Cit9CisKICNpZm5kZWYgTkRFQlVHCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0
Ojp2YWxpZGF0ZUdlb21ldHJ5Q29uc3RyYWludHNBZnRlckxheW91dCgpIGNvbnN0CiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRp
bmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zv
cm1hdHRpbmdDb250ZXh0LmgKaW5kZXggNzExMDI1NTg4ZWM0YTAzZDllMzVhMGFjOTMwYTc3NmM2
MjNmODQ0NC4uOWY1N2Y3ZTBhNTUzODdmMGE0NWM5ZDhlMmU3OTkwZDkwOWU1NzNlOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5n
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
Rm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNDEsNTkgKzQxLDI3IEBAIHN0cnVjdCBMZW5ndGg7CiBu
YW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgQm94R2VvbWV0cnk7Ci1jbGFzcyBSZXBsYWNlZEJv
eDsKLXN0cnVjdCBDb21wdXRlZEhvcml6b250YWxNYXJnaW47Ci1zdHJ1Y3QgQ29tcHV0ZWRWZXJ0
aWNhbE1hcmdpbjsKIGNsYXNzIENvbnRhaW5lckJveDsKLXN0cnVjdCBDb250ZW50SGVpZ2h0QW5k
TWFyZ2luOwotc3RydWN0IENvbnRlbnRXaWR0aEFuZE1hcmdpbjsKLXN0cnVjdCBFZGdlczsKK2Ns
YXNzIEZvcm1hdHRpbmdHZW9tZXRyeTsKIGNsYXNzIEZvcm1hdHRpbmdTdGF0ZTsKLXN0cnVjdCBI
b3Jpem9udGFsR2VvbWV0cnk7CitjbGFzcyBGb3JtYXR0aW5nUXVpcmtzOwogY2xhc3MgSW52YWxp
ZGF0aW9uU3RhdGU7CiBjbGFzcyBMYXlvdXRTdGF0ZTsKLXN0cnVjdCBPdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlczsKLXN0cnVjdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXM7Ci1zdHJ1Y3QgVmVy
dGljYWxHZW9tZXRyeTsKIAogY2xhc3MgRm9ybWF0dGluZ0NvbnRleHQgewogICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoRm9ybWF0dGluZ0NvbnRleHQpOwogcHVibGljOgotICAgIEZvcm1hdHRp
bmdDb250ZXh0KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBGb3Jt
YXR0aW5nU3RhdGUmKTsKICAgICB2aXJ0dWFsIH5Gb3JtYXR0aW5nQ29udGV4dCgpOwogCi0gICAg
c3RydWN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCB7Ci0gICAgICAgIEhvcml6b250YWxD
b25zdHJhaW50cyBob3Jpem9udGFsOwotICAgICAgICBWZXJ0aWNhbENvbnN0cmFpbnRzIHZlcnRp
Y2FsOwotICAgIH07CiAgICAgdmlydHVhbCB2b2lkIGxheW91dEluRmxvd0NvbnRlbnQoSW52YWxp
ZGF0aW9uU3RhdGUmLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKSA9IDA7Ci0K
LSAgICBzdHJ1Y3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50IHsKLSAgICAgICAgSG9y
aXpvbnRhbENvbnN0cmFpbnRzIGhvcml6b250YWw7Ci0gICAgICAgIFZlcnRpY2FsQ29uc3RyYWlu
dHMgdmVydGljYWw7Ci0gICAgICAgIC8vIEJvcmRlcnMgYW5kIHBhZGRpbmcgYXJlIHJlc29sdmVk
IGFnYWluc3QgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBjb250ZW50IGJveCBhcyBpZiB0aGUgYm94
IHdhcyBhbiBpbi1mbG93IGJveC4KLSAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5n
Q29uc3RyYWludHM7Ci0gICAgfTsKICAgICB2b2lkIGxheW91dE91dE9mRmxvd0NvbnRlbnQoSW52
YWxpZGF0aW9uU3RhdGUmLCBjb25zdCBDb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQmKTsK
LQotICAgIHN0cnVjdCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsKLSAgICAgICAgdm9pZCBl
eHBhbmQoTGF5b3V0VW5pdCBob3Jpem9udGFsVmFsdWUpOwotICAgICAgICBJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzJiBvcGVyYXRvcis9KGNvbnN0IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMm
KTsKLSAgICAgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYgb3BlcmF0b3IrPShMYXlvdXRV
bml0KTsKLSAgICAgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYgb3BlcmF0b3ItPShjb25z
dCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzJik7Ci0gICAgICAgIEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMmIG9wZXJhdG9yLT0oTGF5b3V0VW5pdCk7Ci0KLSAgICAgICAgTGF5b3V0VW5pdCBt
aW5pbXVtOwotICAgICAgICBMYXlvdXRVbml0IG1heGltdW07Ci0gICAgfTsKICAgICB2aXJ0dWFs
IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCkgPSAwOworCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHVzZWRDb250ZW50SGVpZ2h0KCkg
Y29uc3QgPSAwOwogCi0gICAgYm9vbCBpc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiByb290KCkuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCk7IH0KLSAg
ICBib29sIGlzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiByb290KCku
ZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpOyB9Ci0gICAgYm9vbCBpc1RhYmxl
Rm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiByb290KCkuZXN0YWJsaXNoZXNUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0KCk7IH0KLSAgICBib29sIGlzVGFibGVXcmFwcGVyQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGlzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgp
ICYmIHJvb3QoKS5pc1RhYmxlV3JhcHBlckJveCgpOyB9Ci0gICAgYm9vbCBpc0ZsZXhGb3JtYXR0
aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIHJvb3QoKS5lc3RhYmxpc2hlc0ZsZXhGb3JtYXR0
aW5nQ29udGV4dCgpOyB9CisgICAgY29uc3QgQ29udGFpbmVyQm94JiByb290KCkgY29uc3QgeyBy
ZXR1cm4gKm1fcm9vdDsgfQorICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0Owor
ICAgIGNvbnN0IEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9mb3JtYXR0aW5nU3RhdGU7IH0KIAogICAgIGVudW0gY2xhc3MgRXNjYXBlUmVhc29uIHsK
ICAgICAgICAgVGFibGVRdWlya05lZWRzR2VvbWV0cnlGcm9tRXN0YWJsaXNoZWRGb3JtYXR0aW5n
Q29udGV4dCwKQEAgLTEwNSwxNCArNzMsMTkgQEAgcHVibGljOgogICAgICAgICBUYWJsZU5lZWRz
QWNjZXNzVG9UYWJsZVdyYXBwZXIKICAgICB9OwogICAgIGNvbnN0IEJveEdlb21ldHJ5JiBnZW9t
ZXRyeUZvckJveChjb25zdCBCb3gmLCBPcHRpb25hbDxFc2NhcGVSZWFzb24+ID0gV1RGOjpudWxs
b3B0KSBjb25zdDsKLSAgICBjb25zdCBDb250YWluZXJCb3gmIHJvb3QoKSBjb25zdCB7IHJldHVy
biAqbV9yb290OyB9CiAKLSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKKwor
ICAgIGJvb2wgaXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gcm9vdCgp
LmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpOyB9CisgICAgYm9vbCBpc0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gcm9vdCgpLmVzdGFibGlzaGVzSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQoKTsgfQorICAgIGJvb2wgaXNUYWJsZUZvcm1hdHRpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gcm9vdCgpLmVzdGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29u
dGV4dCgpOyB9CisgICAgYm9vbCBpc1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQo
KSBjb25zdCB7IHJldHVybiBpc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSAmJiByb290KCkuaXNU
YWJsZVdyYXBwZXJCb3goKTsgfQorICAgIGJvb2wgaXNGbGV4Rm9ybWF0dGluZ0NvbnRleHQoKSBj
b25zdCB7IHJldHVybiByb290KCkuZXN0YWJsaXNoZXNGbGV4Rm9ybWF0dGluZ0NvbnRleHQoKTsg
fQogCiBwcm90ZWN0ZWQ6CisgICAgRm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQ29udGFpbmVyQm94
JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIEZvcm1hdHRpbmdTdGF0ZSYpOworCiAgICAgdXNpbmcg
TGF5b3V0UXVldWUgPSBWZWN0b3I8Y29uc3QgQm94Kj47CiAKLSAgICBjb25zdCBGb3JtYXR0aW5n
U3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ1N0YXRl
OyB9CiAgICAgRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSB7IHJldHVybiBtX2Zv
cm1hdHRpbmdTdGF0ZTsgfQogCiAgICAgdm9pZCBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKQEAgLTEyMSw5NyArOTQsMTAg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZUdlb21ldHJ5Q29uc3RyYWlu
dHNBZnRlckxheW91dCgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICAvLyBUaGlzIGNsYXNzIGltcGxl
bWVudHMgZ2VuZXJpYyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nLgotICAgIGNsYXNzIEdlb21ldHJ5
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93VmVydGlj
YWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25z
dCBWZXJ0aWNhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikg
Y29uc3Q7Ci0gICAgICAgIEhvcml6b250YWxHZW9tZXRyeSBvdXRPZkZsb3dIb3Jpem9udGFsR2Vv
bWV0cnkoY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgVmVy
dGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0K
LSAgICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBmbG9hdGluZ0NvbnRlbnRIZWlnaHRBbmRN
YXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3Zl
cnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIENvbnRlbnRXaWR0aEFuZE1h
cmdpbiBmbG9hdGluZ0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwot
Ci0gICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5saW5lUmVwbGFjZWRDb250ZW50SGVp
Z2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiwgT3B0aW9uYWw8VmVydGljYWxDb25zdHJhaW50cz4sIGNvbnN0IE92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcyYpIGNvbnN0OwotICAgICAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gaW5saW5l
UmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmLCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmLCBPcHRpb25hbDxWZXJ0aWNhbENvbnN0cmFpbnRzPiwgY29u
c3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKLQotICAgICAgICBMYXlvdXRTaXplIGlu
Rmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmKSBjb25zdDsKLQotICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGNv
bXBsaWNhdGVkQ2FzZXMoY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwg
Y29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIExheW91dFVu
aXQgc2hyaW5rVG9GaXRXaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRo
KTsKLQotICAgICAgICBFZGdlcyBjb21wdXRlZEJvcmRlcihjb25zdCBCb3gmKSBjb25zdDsKLSAg
ICAgICAgT3B0aW9uYWw8RWRnZXM+IGNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmLCBMYXlvdXRV
bml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSBjb25zdDsKLQotICAgICAgICBDb21wdXRlZEhvcml6
b250YWxNYXJnaW4gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYpIGNvbnN0OwotICAgICAgICBDb21wdXRlZFZlcnRpY2FsTWFy
Z2luIGNvbXB1dGVkVmVydGljYWxNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJikgY29uc3Q7Ci0KLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0
ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHksIExheW91dFVuaXQgY29udGFp
bmluZ0Jsb2NrV2lkdGgpIGNvbnN0OwotICAgICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBmaXhl
ZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9wZXJ0eSkgY29uc3Q7Ci0KLSAgICAgICAg
T3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRNaW5IZWlnaHQoY29uc3QgQm94JiwgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRNYXhIZWlnaHQoY29uc3Qg
Qm94JiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gV1RGOjpu
dWxsb3B0KSBjb25zdDsKLQotICAgICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZE1p
bldpZHRoKGNvbnN0IEJveCYsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAg
ICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZE1heFdpZHRoKGNvbnN0IEJveCYsIExh
eW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotCi0gICAgICAgIEZvcm1hdHRpbmdDb250
ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY29u
c3QgQm94JiwgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cykgY29uc3Q7Ci0KLSAgICAgICAgTGF5
b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IENvbnRh
aW5lckJveCYpIGNvbnN0OwotCi0gICAgICAgIENvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVu
dCBjb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94Jik7Ci0g
ICAgICAgIENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCBjb25zdHJhaW50c0ZvckluRmxvd0Nv
bnRlbnQoY29uc3QgQ29udGFpbmVyQm94JiwgT3B0aW9uYWw8RXNjYXBlUmVhc29uPiA9IFdURjo6
bnVsbG9wdCk7Ci0KLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRIZWlnaHQo
Y29uc3QgQm94JiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0g
V1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0
ZWRXaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLQot
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgZnJpZW5kIGNsYXNzIEZvcm1hdHRpbmdDb250ZXh0Owot
ICAgICAgICBHZW9tZXRyeShjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYpOwotCi0gICAgICAgIGNv
bnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGlu
Z0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQotICAgICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUoKSB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7IH0KLSAgICAg
ICAgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgVmVy
dGljYWxHZW9tZXRyeSBvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoY29uc3QgUmVw
bGFjZWRCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENv
bnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAg
ICAgIEhvcml6b250YWxHZW9tZXRyeSBvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRy
eShjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0
IFZlcnRpY2FsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYp
OwotCi0gICAgICAgIFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNh
bEdlb21ldHJ5KGNvbnN0IENvbnRhaW5lckJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxW
YWx1ZXMmKSBjb25zdDsKLSAgICAgICAgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxvd05vblJl
cGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IENvbnRhaW5lckJveCYsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0K
LSAgICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBmbG9hdGluZ1JlcGxhY2VkQ29udGVudEhl
aWdodEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwotICAgICAgICBD
b250ZW50V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdp
bihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0
IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAgICAgQ29udGVudFdpZHRoQW5k
TWFyZ2luIGZsb2F0aW5nTm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250
YWxWYWx1ZXMmKTsKLQotICAgICAgICBMYXlvdXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25G
b3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWlu
dHMmKSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb25G
b3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYpIGNvbnN0OwotCi0gICAgICAgIGVudW0gY2xhc3MgSGVpZ2h0VHlwZSB7IE1pbiwgTWF4
LCBOb3JtYWwgfTsKLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRIZWlnaHRW
YWx1ZShjb25zdCBCb3gmLCBIZWlnaHRUeXBlLCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250YWlu
aW5nQmxvY2tIZWlnaHQpIGNvbnN0OwotCi0gICAgICAgIGVudW0gY2xhc3MgV2lkdGhUeXBlIHsg
TWluLCBNYXgsIE5vcm1hbCB9OwotICAgICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRl
ZFdpZHRoVmFsdWUoY29uc3QgQm94JiwgV2lkdGhUeXBlLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdC
bG9ja1dpZHRoKTsKLQotICAgICAgICBjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgbV9mb3JtYXR0
aW5nQ29udGV4dDsKLSAgICB9OwotICAgIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSBnZW9t
ZXRyeSgpIGNvbnN0IHsgcmV0dXJuIEdlb21ldHJ5KCp0aGlzKTsgfQotCi0gICAgY2xhc3MgUXVp
cmtzIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFF1aXJrcyhjb25zdCBGb3JtYXR0aW5nQ29udGV4
dCYpOwotCi0gICAgICAgIExheW91dFVuaXQgaGVpZ2h0VmFsdWVPZk5lYXJlc3RDb250YWluaW5n
QmxvY2tXaXRoRml4ZWRIZWlnaHQoY29uc3QgQm94Jik7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAg
ICAgIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9y
bWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQotICAgICAgICBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUoKSB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7IH0K
LSAgICAgICAgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dDsgfQotCi0gICAgICAgIGNvbnN0IEZvcm1h
dHRpbmdDb250ZXh0JiBtX2Zvcm1hdHRpbmdDb250ZXh0OwotICAgIH07Ci0gICAgRm9ybWF0dGlu
Z0NvbnRleHQ6OlF1aXJrcyBxdWlya3MoKSBjb25zdCB7IHJldHVybiBRdWlya3MoKnRoaXMpOyB9
Ci0KIHByaXZhdGU6CisgICAgRm9ybWF0dGluZ0dlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3Q7Cisg
ICAgRm9ybWF0dGluZ1F1aXJrcyBxdWlya3MoKSBjb25zdDsKKwogICAgIHZvaWQgY29sbGVjdE91
dE9mRmxvd0Rlc2NlbmRhbnRzSWZOZWVkZWQoKTsKICAgICB2b2lkIGNvbXB1dGVPdXRPZkZsb3dW
ZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYsIGNvbnN0IENvbnN0cmFpbnRzRm9yT3V0T2ZGbG93
Q29udGVudCYpOwogICAgIHZvaWQgY29tcHV0ZU91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShj
b25zdCBCb3gmLCBjb25zdCBDb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQmKTsKQEAgLTIy
MCw0OCArMTA2LDYgQEAgcHJpdmF0ZToKICAgICBGb3JtYXR0aW5nU3RhdGUmIG1fZm9ybWF0dGlu
Z1N0YXRlOwogfTsKIAotaW5saW5lIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0
cnkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KQotICAgIDogbV9m
b3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nQ29udGV4dCkKLXsKLX0KLQotaW5saW5lIEZvcm1h
dHRpbmdDb250ZXh0OjpRdWlya3M6OlF1aXJrcyhjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9y
bWF0dGluZ0NvbnRleHQpCi0gICAgOiBtX2Zvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdDb250
ZXh0KQotewotfQotCi1pbmxpbmUgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lk
dGhDb25zdHJhaW50czo6ZXhwYW5kKExheW91dFVuaXQgaG9yaXpvbnRhbFZhbHVlKQotewotICAg
IG1pbmltdW0gKz0gaG9yaXpvbnRhbFZhbHVlOwotICAgIG1heGltdW0gKz0gaG9yaXpvbnRhbFZh
bHVlOwotfQotCi1pbmxpbmUgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMmIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOjpvcGVy
YXRvcis9KGNvbnN0IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIG90aGVyKQotewotICAgIG1p
bmltdW0gKz0gb3RoZXIubWluaW11bTsKLSAgICBtYXhpbXVtICs9IG90aGVyLm1heGltdW07Ci0g
ICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMmIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzOjpvcGVyYXRvcis9KExheW91dFVuaXQgdmFsdWUpCi17Ci0gICAgZXhwYW5kKHZhbHVl
KTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBGb3JtYXR0aW5nQ29udGV4dDo6SW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyYgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRo
Q29uc3RyYWludHM6Om9wZXJhdG9yLT0oY29uc3QgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYg
b3RoZXIpCi17Ci0gICAgbWluaW11bSAtPSBvdGhlci5taW5pbXVtOwotICAgIG1heGltdW0gLT0g
b3RoZXIubWF4aW11bTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYgRm9ybWF0dGluZ0NvbnRleHQ6Oklu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHM6Om9wZXJhdG9yLT0oTGF5b3V0VW5pdCB2YWx1ZSkKLXsK
LSAgICBleHBhbmQoLXZhbHVlKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDllYjE5NjU3YjhiZTcxOTlhYTNmZmMyMDZmNTcyMWE3MmNkNjJjODEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDExNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgotCi0jaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdT
dGF0ZS5oIgotI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJGbG9h
dGluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiSW5s
aW5lRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1
ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKLSNpbmNsdWRlICJMYXlvdXRSZXBs
YWNlZEJveC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJUYWJsZUZvcm1hdHRp
bmdTdGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQot
c3RhdGljIGlubGluZSBib29sIGlzSGVpZ2h0QXV0byhjb25zdCBCb3gmIGxheW91dEJveCkKLXsK
LSAgICAvLyAxMC41IENvbnRlbnQgaGVpZ2h0OiB0aGUgJ2hlaWdodCcgcHJvcGVydHkKLSAgICAv
LwotICAgIC8vIFRoZSBwZXJjZW50YWdlIGlzIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRo
ZSBoZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gncyBjb250YWluaW5nIGJsb2NrLgotICAgIC8v
IElmIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgbm90IHNwZWNpZmllZCBl
eHBsaWNpdGx5IChpLmUuLCBpdCBkZXBlbmRzIG9uIGNvbnRlbnQgaGVpZ2h0KSwKLSAgICAvLyBh
bmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHRoZSB1c2VkIGhl
aWdodCBpcyBjYWxjdWxhdGVkIGFzIGlmICdhdXRvJyB3YXMgc3BlY2lmaWVkLgotCi0gICAgYXV0
byBoZWlnaHQgPSBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYgKGhl
aWdodC5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoaGVpZ2h0Lmlz
UGVyY2VudCgpKSB7Ci0gICAgICAgIGlmIChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuICFsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNGaXhlZCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZEhlaWdodFZhbHVlKGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBIZWlnaHRUeXBlIGhlaWdodFR5cGUsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNv
bnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3QKLXsKLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJv
eC5zdHlsZSgpOwotICAgIGF1dG8gaGVpZ2h0ID0gaGVpZ2h0VHlwZSA9PSBIZWlnaHRUeXBlOjpO
b3JtYWwgPyBzdHlsZS5sb2dpY2FsSGVpZ2h0KCkgOiBoZWlnaHRUeXBlID09IEhlaWdodFR5cGU6
Ok1pbiA/IHN0eWxlLmxvZ2ljYWxNaW5IZWlnaHQoKSA6IHN0eWxlLmxvZ2ljYWxNYXhIZWlnaHQo
KTsKLSAgICBpZiAoaGVpZ2h0LmlzVW5kZWZpbmVkKCkgfHwgaGVpZ2h0LmlzQXV0bygpIHx8IGhl
aWdodC5pc01heENvbnRlbnQoKSB8fCBoZWlnaHQuaXNNaW5Db250ZW50KCkgfHwgaGVpZ2h0Lmlz
Rml0Q29udGVudCgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKGhlaWdodC5pc0Zp
eGVkKCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRVbml0IHsgaGVpZ2h0LnZhbHVlKCkgfTsKLQot
ICAgIGlmICghY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSB7Ci0gICAgICAgIGlmIChsYXlvdXRTdGF0
ZSgpLmluUXVpcmtzTW9kZSgpKQotICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0g
Zm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5oZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5p
bmdCbG9ja1dpdGhGaXhlZEhlaWdodChsYXlvdXRCb3gpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGF1dG8gbm9uQW5vbnltb3VzQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCA9IFsm
XSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgYmxvY2sgbGV2ZWwgYm94IGlzIGEgZGly
ZWN0IGNoaWxkIG9mIGFuIGlubGluZSBsZXZlbCBib3ggKDxzcGFuPjxkaXY+PC9kaXY+PC9zcGFu
PikgYW5kIHdlIHdyYXAgaXQgaW50byBhIGNvbnRpbnVhdGlvbiwKLSAgICAgICAgICAgICAgICAv
LyB0aGUgY29udGFpbmluZyBibG9jayAoYW5vbnltb3VzIHdyYXBwZXIpIGlzIG5vdCB0aGUgYm94
IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGZpeGVkIGhlaWdodC4KLSAgICAgICAgICAgICAgICBhdXRv
JiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxv
Y2soKTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9ICZsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCk7IGNvbnRhaW5pbmdCbG9jayAhPSAmaW5pdGlhbENvbnRh
aW5pbmdCbG9jazsgY29udGFpbmluZ0Jsb2NrID0gJmNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmlu
Z0Jsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNB
bm9ueW1vdXMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxDb250
YWluaW5nQmxvY2suc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICB9OwotICAg
ICAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gZml4ZWRWYWx1ZShub25Bbm9ueW1vdXND
b250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKCFjb250YWluaW5nQmxvY2tIZWlnaHQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBy
ZXR1cm4gdmFsdWVGb3JMZW5ndGgoaGVpZ2h0LCAqY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLX0K
LQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21w
dXRlZEhlaWdodChjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29u
dGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAotewotICAgIGlmIChhdXRvIGhlaWdodCA9IGNvbXB1
dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwsIGNvbnRhaW5pbmdC
bG9ja0hlaWdodCkpIHsKLSAgICAgICAgaWYgKGxheW91dEJveC5zdHlsZSgpLmJveFNpemluZygp
ID09IEJveFNpemluZzo6Q29udGVudEJveCkKLSAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7Ci0g
ICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZv
ckJveChsYXlvdXRCb3gpOwotICAgICAgICByZXR1cm4gKmhlaWdodCAtIChib3hHZW9tZXRyeS52
ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigw
KSk7Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRXaWR0aFZhbHVlKGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBXaWR0aFR5cGUgd2lkdGhUeXBlLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9j
a1dpZHRoKQotewotICAgIC8vIEFwcGxpZXMgdG86IGFsbCBlbGVtZW50cyBleGNlcHQgbm9uLXJl
cGxhY2VkIGlubGluZXMgKG91dC1vZi1mbG93IGNoZWNrIGlzIHJlcXVpcmVkIGZvciBwb3NpdGlv
bmVkIDxicj4gYXMgZm9yIHNvbWUgcmVhc29uIHdlIGRvbid0IGJsb2NraWZ5IHRoZW0pLgotICAg
IEFTU0VSVCghbGF5b3V0Qm94LmlzSW5saW5lQm94KCkgfHwgbGF5b3V0Qm94LmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpKTsKLQotICAgIGF1dG8gd2lkdGggPSBbJl0gewotICAgICAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgICAgICBzd2l0Y2ggKHdpZHRoVHlwZSkgewot
ICAgICAgICBjYXNlIFdpZHRoVHlwZTo6Tm9ybWFsOgotICAgICAgICAgICAgcmV0dXJuIHN0eWxl
LmxvZ2ljYWxXaWR0aCgpOwotICAgICAgICBjYXNlIFdpZHRoVHlwZTo6TWluOgotICAgICAgICAg
ICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNaW5XaWR0aCgpOwotICAgICAgICBjYXNlIFdpZHRoVHlw
ZTo6TWF4OgotICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNYXhXaWR0aCgpOwotICAg
ICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gc3R5
bGUubG9naWNhbFdpZHRoKCk7Ci0gICAgfSgpOwotICAgIGlmIChhdXRvIGNvbXB1dGVkVmFsdWUg
PSB0aGlzLT5jb21wdXRlZFZhbHVlKHdpZHRoLCBjb250YWluaW5nQmxvY2tXaWR0aCkpCi0gICAg
ICAgIHJldHVybiBjb21wdXRlZFZhbHVlOwotCi0gICAgaWYgKHdpZHRoLmlzTWluQ29udGVudCgp
IHx8IHdpZHRoLmlzTWF4Q29udGVudCgpIHx8IHdpZHRoLmlzRml0Q29udGVudCgpKSB7Ci0gICAg
ICAgIGlmICghaXM8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKQotICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgYXV0byYgY29udGFpbmVyQm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94
PihsYXlvdXRCb3gpOwotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgc3BsaXR0aW5nIHVwIGNv
bXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBzbyB0aGF0IHdlIGNvdWxkIGNvbXB1dGVk
IHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgc2VwYXJhdGVseS4KLSAgICAgICAgYXV0byBpbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzID0gWyZdIHsKLSAgICAgICAgICAgIGlmICghY29udGFpbmVyQm94
Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgMF9sdSwgY29udGFpbmluZ0Jsb2NrV2lkdGggfTsKLSAg
ICAgICAgICAgIEFTU0VSVChjb250YWluZXJCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4
dCgpKTsKLSAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCku
ZW5zdXJlRm9ybWF0dGluZ1N0YXRlKGNvbnRhaW5lckJveCk7Ci0gICAgICAgICAgICBpZiAoYXV0
byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKmludHJpbnNpY1dpZHRo
Q29uc3RyYWludHM7Ci0gICAgICAgICAgICByZXR1cm4gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9y
bWF0dGluZ0NvbnRleHQoY29udGFpbmVyQm94LCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgaWYgKHdpZHRo
LmlzTWluQ29udGVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMubWluaW11bTsKLSAgICAgICAgaWYgKHdpZHRoLmlzTWF4Q29udGVudCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bTsKLSAgICAgICAg
QVNTRVJUKHdpZHRoLmlzRml0Q29udGVudCgpKTsKLSAgICAgICAgLy8gSWYgdGhlIGF2YWlsYWJs
ZSBzcGFjZSBpbiBhIGdpdmVuIGF4aXMgaXMgZGVmaW5pdGUsIGVxdWFsIHRvIG1pbihtYXgtY29u
dGVudCBzaXplLAotICAgICAgICAvLyBtYXgobWluLWNvbnRlbnQgc2l6ZSwgc3RyZXRjaC1maXQg
c2l6ZSkpLiBPdGhlcndpc2UsIGVxdWFsIHRvIHRoZSBtYXgtY29udGVudCBzaXplIGluIHRoYXQg
YXhpcy4KLSAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IHlldCBoYXZlIGluZGVmaW5pdGUgYXZh
aWxhYmxlIHNpemUuCi0gICAgICAgIHJldHVybiBzdGQ6Om1pbihpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzLm1heGltdW0sIHN0ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11
bSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQot
T3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRl
ZFdpZHRoKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKQotewotICAgIGlmIChhdXRvIGNvbXB1dGVkV2lkdGggPSBjb21wdXRlZFdpZHRoVmFsdWUo
bGF5b3V0Qm94LCBXaWR0aFR5cGU6Ok5vcm1hbCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7Ci0g
ICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgICAgIC8vIE5vbi1x
dWFudGl0YXRpdmUgdmFsdWVzIHN1Y2ggYXMgYXV0byBhbmQgbWluLWNvbnRlbnQgYXJlIG5vdCBp
bmZsdWVuY2VkIGJ5IHRoZSBib3gtc2l6aW5nIHByb3BlcnR5LgotICAgICAgICBpZiAoc3R5bGUu
Ym94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpDb250ZW50Qm94IHx8IHN0eWxlLndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlZFdpZHRoOwotICAg
ICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKLSAgICAgICAgcmV0dXJuICpjb21wdXRlZFdpZHRoIC0gKGJveEdlb21l
dHJ5Lmhvcml6b250YWxCb3JkZXIoKSArIGJveEdlb21ldHJ5Lmhvcml6b250YWxQYWRkaW5nKCku
dmFsdWVPcigwKSk7Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19Ci0KLUxheW91dFVuaXQgRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRl
eHRSb290KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290KSBjb25zdAot
ewotICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5n
Q29udGV4dCgpKTsKLSAgICBBU1NFUlQoaXNIZWlnaHRBdXRvKGZvcm1hdHRpbmdDb250ZXh0Um9v
dCkgfHwgZm9ybWF0dGluZ0NvbnRleHRSb290LmVzdGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29u
dGV4dCgpIHx8IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5pc1RhYmxlQ2VsbCgpKTsKLSAgICBhdXRv
IHVzZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCB7IH07IAotICAgIGF1dG8gaGFzQ29udGVu
dCA9IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKLSAg
ICAvLyBUaGUgdXNlZCBoZWlnaHQgb2YgdGhlIGNvbnRhaW5tZW50IGJveCBpcyBkZXRlcm1pbmVk
IGFzIGlmIHBlcmZvcm1pbmcgYSBub3JtYWwgbGF5b3V0IG9mIHRoZSBib3gsIGV4Y2VwdCB0aGF0
IGl0IGlzIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGNvbnRlbnQuCi0gICAgYXV0byBzaG91bGRJZ25v
cmVDb250ZW50ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LmlzU2l6ZUNvbnRhaW5tZW50Qm94KCk7
Ci0gICAgaWYgKGhhc0NvbnRlbnQgJiYgIXNob3VsZElnbm9yZUNvbnRlbnQpCi0gICAgICAgIHVz
ZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQo
Zm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdF9jYXN0PExheW91dFN0YXRlJj4obGF5b3V0U3Rh
dGUoKSkpLT51c2VkQ29udGVudEhlaWdodCgpOwotICAgIHJldHVybiB1c2VkQ29udGVudEhlaWdo
dDsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
Ojpjb21wdXRlZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9wZXJ0eSwgTGF5b3V0VW5p
dCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3QKLXsKLSAgICAvLyAgSW4gZ2VuZXJhbCwgdGhl
IGNvbXB1dGVkIHZhbHVlIHJlc29sdmVzIHRoZSBzcGVjaWZpZWQgdmFsdWUgYXMgZmFyIGFzIHBv
c3NpYmxlIHdpdGhvdXQgbGF5aW5nIG91dCB0aGUgY29udGVudC4KLSAgICBpZiAoZ2VvbWV0cnlQ
cm9wZXJ0eS5pc0ZpeGVkKCkgfHwgZ2VvbWV0cnlQcm9wZXJ0eS5pc1BlcmNlbnQoKSB8fCBnZW9t
ZXRyeVByb3BlcnR5LmlzQ2FsY3VsYXRlZCgpKQotICAgICAgICByZXR1cm4gdmFsdWVGb3JMZW5n
dGgoZ2VvbWV0cnlQcm9wZXJ0eSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIHJldHVybiB7
IH07Ci19Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6Zml4ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHkpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFnZW9tZXRyeVByb3BlcnR5LmlzRml4ZWQoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICByZXR1cm4gTGF5b3V0VW5pdCB7IGdlb21ldHJ5UHJvcGVydHkudmFsdWUoKSB9OwotfQot
Ci0vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlzdWRldC5odG1sI21pbi1tYXgtaGVp
Z2h0cwotLy8gU3BlY2lmaWVzIGEgcGVyY2VudGFnZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHVzZWQg
dmFsdWUuIFRoZSBwZXJjZW50YWdlIGlzIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBo
ZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gncyBjb250YWluaW5nIGJsb2NrLgotLy8gSWYgdGhl
IGhlaWdodCBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0
bHkgKGkuZS4sIGl0IGRlcGVuZHMgb24gY29udGVudCBoZWlnaHQpLCBhbmQgdGhpcyBlbGVtZW50
IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQsCi0vLyB0aGUgcGVyY2VudGFnZSB2YWx1ZSBp
cyB0cmVhdGVkIGFzICcwJyAoZm9yICdtaW4taGVpZ2h0Jykgb3IgJ25vbmUnIChmb3IgJ21heC1o
ZWlnaHQnKS4KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6Y29tcHV0ZWRNYXhIZWlnaHQoY29uc3QgQm94JiBsYXlvdXRCb3gsIE9wdGlvbmFsPExheW91
dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcHV0
ZWRIZWlnaHRWYWx1ZShsYXlvdXRCb3gsIEhlaWdodFR5cGU6Ok1heCwgY29udGFpbmluZ0Jsb2Nr
SGVpZ2h0KTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5Ojpjb21wdXRlZE1pbkhlaWdodChjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8
TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAotewotICAgIHJldHVybiBj
b21wdXRlZEhlaWdodFZhbHVlKGxheW91dEJveCwgSGVpZ2h0VHlwZTo6TWluLCBjb250YWluaW5n
QmxvY2tIZWlnaHQpOwotfQotCi1PcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmNvbXB1dGVkTWluV2lkdGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIExheW91
dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhW
YWx1ZShsYXlvdXRCb3gsIFdpZHRoVHlwZTo6TWluLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci19
Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29t
cHV0ZWRNYXhXaWR0aChjb25zdCBCb3gmIGxheW91dEJveCwgTGF5b3V0VW5pdCBjb250YWluaW5n
QmxvY2tXaWR0aCkKLXsKLSAgICByZXR1cm4gY29tcHV0ZWRXaWR0aFZhbHVlKGxheW91dEJveCwg
V2lkdGhUeXBlOjpNYXgsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLX0KLQotTGF5b3V0VW5pdCBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRP
ZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBWZXJ0aWNhbENvbnN0
cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzKSBjb25zdAotewotICAgIEFTU0VSVChsYXlvdXRC
b3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotCi0gICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBv
ZiB0aGlzIHNlY3Rpb24gYW5kIHRoZSBuZXh0LCB0aGUgdGVybSAic3RhdGljIHBvc2l0aW9uIiAo
b2YgYW4gZWxlbWVudCkgcmVmZXJzLCByb3VnaGx5LCB0byB0aGUgcG9zaXRpb24gYW4gZWxlbWVu
dCB3b3VsZCBoYXZlCi0gICAgLy8gaGFkIGluIHRoZSBub3JtYWwgZmxvdy4gTW9yZSBwcmVjaXNl
bHksIHRoZSBzdGF0aWMgcG9zaXRpb24gZm9yICd0b3AnIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRo
ZSB0b3AgZWRnZSBvZiB0aGUgY29udGFpbmluZyBibG9jayB0byB0aGUgdG9wIG1hcmdpbgotICAg
IC8vIGVkZ2Ugb2YgYSBoeXBvdGhldGljYWwgYm94IHRoYXQgd291bGQgaGF2ZSBiZWVuIHRoZSBm
aXJzdCBib3ggb2YgdGhlIGVsZW1lbnQgaWYgaXRzIHNwZWNpZmllZCAncG9zaXRpb24nIHZhbHVl
IGhhZCBiZWVuICdzdGF0aWMnIGFuZCBpdHMgc3BlY2lmaWVkCi0gICAgLy8gJ2Zsb2F0JyBoYWQg
YmVlbiAnbm9uZScgYW5kIGl0cyBzcGVjaWZpZWQgJ2NsZWFyJyBoYWQgYmVlbiAnbm9uZScuIChO
b3RlIHRoYXQgZHVlIHRvIHRoZSBydWxlcyBpbiBzZWN0aW9uIDkuNyB0aGlzIG1pZ2h0IHJlcXVp
cmUgYWxzbyBhc3N1bWluZyBhIGRpZmZlcmVudAotICAgIC8vIGNvbXB1dGVkIHZhbHVlIGZvciAn
ZGlzcGxheScuKSBUaGUgdmFsdWUgaXMgbmVnYXRpdmUgaWYgdGhlIGh5cG90aGV0aWNhbCBib3gg
aXMgYWJvdmUgdGhlIGNvbnRhaW5pbmcgYmxvY2suCi0KLSAgICAvLyBTdGFydCB3aXRoIHRoaXMg
Ym94J3MgYm9yZGVyIGJveCBvZmZzZXQgZnJvbSB0aGUgcGFyZW50J3MgYm9yZGVyIGJveC4KLSAg
ICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0g
ICAgTGF5b3V0VW5pdCB0b3A7Ci0gICAgaWYgKGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxp
bmcoKSAmJiBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCktPmlzQmxvY2tMZXZlbEJv
eCgpKSB7Ci0gICAgICAgIC8vIEFkZCBzaWJsaW5nIG9mZnNldAotICAgICAgICBhdXRvJiBwcmV2
aW91c0luRmxvd1NpYmxpbmcgPSAqbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93U2libGluZygpOwot
ICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQuZ2VvbWV0cnlGb3JCb3gocHJldmlvdXNJbkZsb3dTaWJsaW5nLCBFc2NhcGVSZWFzb246Ok91
dE9mRmxvd0JveE5lZWRzSW5GbG93R2VvbWV0cnkpOwotICAgICAgICBhdXRvJiBmb3JtYXR0aW5n
U3RhdGUgPSBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdTdGF0ZT4obGF5b3V0U3RhdGUoKS5mb3Jt
YXR0aW5nU3RhdGVGb3JCb3gocHJldmlvdXNJbkZsb3dTaWJsaW5nKSk7Ci0gICAgICAgIGF1dG8g
dXNlZFZlcnRpY2FsTWFyZ2luRm9yUHJldmlvdXNCb3ggPSBmb3JtYXR0aW5nU3RhdGUudXNlZFZl
cnRpY2FsTWFyZ2luKHByZXZpb3VzSW5GbG93U2libGluZyk7Ci0KLSAgICAgICAgdG9wICs9IEJv
eEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkpLmJvdHRv
bSgpICsgdXNlZFZlcnRpY2FsTWFyZ2luRm9yUHJldmlvdXNCb3gubm9uQ29sbGFwc2VkVmFsdWVz
LmFmdGVyOwotICAgIH0gZWxzZQotICAgICAgICB0b3AgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChsYXlvdXRCb3gucGFyZW50KCksIEVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94
TmVlZHNJbkZsb3dHZW9tZXRyeSkuY29udGVudEJveFRvcCgpOwotCi0gICAgLy8gUmVzb2x2ZSB0
b3AgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGNvbnRhaW5pbmcgYmxvY2suCi0gICAgYXV0byYgY29u
dGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwotICAgIC8vIFN0YXJ0
IHdpdGggdGhlIHBhcmVudCBzaW5jZSB3ZSBwcmV0ZW5kIHRoYXQgdGhpcyBib3ggaXMgbm9ybWFs
IGZsb3cuCi0gICAgZm9yIChhdXRvKiBhbmNlc3RvciA9ICZsYXlvdXRCb3gucGFyZW50KCk7IGFu
Y2VzdG9yICE9ICZjb250YWluaW5nQmxvY2s7IGFuY2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWlu
aW5nQmxvY2soKSkgewotICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0Lmdlb21ldHJ5Rm9yQm94KCphbmNlc3RvciwgRXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hO
ZWVkc0luRmxvd0dlb21ldHJ5KTsKLSAgICAgICAgLy8gQm94R2VvbWV0cnk6OnRvcCBpcyB0aGUg
Ym9yZGVyIGJveCB0b3AgcG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGlu
YXRlIHN5c3RlbS4KLSAgICAgICAgdG9wICs9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hUb3AoYm94
R2VvbWV0cnkpOwotICAgICAgICBBU1NFUlQoIWFuY2VzdG9yLT5pc1Bvc2l0aW9uZWQoKSB8fCBs
YXlvdXRCb3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7Ci0gICAgfQotICAgIC8vIE1vdmUgdGhlIHN0
YXRpYyBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgcGFkZGluZyBib3guIFRoaXMgaXMgdmVyeSBz
cGVjaWZpYyB0byBhYm9sdXRlbHkgcG9zaXRpb25lZCBib3hlcy4KLSAgICByZXR1cm4gdG9wIC0g
dmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOwotfQotCi1MYXlvdXRVbml0IEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93
UG9zaXRpb25lZChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheW91dEJv
eC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci0gICAgLy8gU2VlIHN0YXRpY1ZlcnRpY2FsUG9z
aXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3Rh
dGljIHBvc2l0aW9uLgotCi0gICAgLy8gU3RhcnQgd2l0aCB0aGlzIGJveCdzIGJvcmRlciBib3gg
b2Zmc2V0IGZyb20gdGhlIHBhcmVudCdzIGJvcmRlciBib3guCi0gICAgYXV0byYgZm9ybWF0dGlu
Z0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8gbGVmdCA9IGZv
cm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveC5wYXJlbnQoKSwgRXNjYXBl
UmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KS5jb250ZW50Qm94TGVmdCgp
OwotCi0gICAgLy8gUmVzb2x2ZSBsZWZ0IGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBjb250YWluaW5n
IGJsb2NrLgotICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9IGxheW91dEJveC5jb250YWluaW5n
QmxvY2soKTsKLSAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJlbnQgc2luY2Ugd2UgcHJldGVuZCB0
aGF0IHRoaXMgYm94IGlzIG5vcm1hbCBmbG93LgotICAgIGZvciAoYXV0byogYW5jZXN0b3IgPSAm
bGF5b3V0Qm94LnBhcmVudCgpOyBhbmNlc3RvciAhPSAmY29udGFpbmluZ0Jsb2NrOyBhbmNlc3Rv
ciA9ICZhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgYXV0byYgYm94R2Vv
bWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveCgqYW5jZXN0b3IsIEVzY2Fw
ZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSk7Ci0gICAgICAgIC8vIEJv
eEdlb21ldHJ5OjpsZWZ0IGlzIHRoZSBib3JkZXIgYm94IGxlZnQgcG9zaXRpb24gaW4gaXRzIGNv
bnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgbGVmdCArPSBCb3hH
ZW9tZXRyeTo6Ym9yZGVyQm94TGVmdChib3hHZW9tZXRyeSk7Ci0gICAgICAgIEFTU0VSVCghYW5j
ZXN0b3ItPmlzUG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsK
LSAgICB9Ci0gICAgLy8gTW92ZSB0aGUgc3RhdGljIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBw
YWRkaW5nIGJveC4gVGhpcyBpcyB2ZXJ5IHNwZWNpZmljIHRvIGFib2x1dGVseSBwb3NpdGlvbmVk
IGJveGVzLgotICAgIHJldHVybiBsZWZ0IC0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxM
ZWZ0OwotfQotCi1MYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c2hyaW5r
VG9GaXRXaWR0aChjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aCkKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRM
YXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXSAtPiBzaHJpbmsgdG8gZml0IC0+IHVuc3VwcG9ydGVk
IC0+IHdpZHRoKCIgPDwgTGF5b3V0VW5pdCB7IH0gPDwgInB4KSBsYXlvdXRCb3g6ICIgPDwgJmZv
cm1hdHRpbmdDb250ZXh0Um9vdCA8PCAiKSIpOwotICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4
dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKLQotICAgIC8vIENhbGN1bGF0
aW9uIG9mIHRoZSBzaHJpbmstdG8tZml0IHdpZHRoIGlzIHNpbWlsYXIgdG8gY2FsY3VsYXRpbmcg
dGhlIHdpZHRoIG9mIGEgdGFibGUgY2VsbCB1c2luZyB0aGUgYXV0b21hdGljIHRhYmxlIGxheW91
dCBhbGdvcml0aG0uCi0gICAgLy8gUm91Z2hseTogY2FsY3VsYXRlIHRoZSBwcmVmZXJyZWQgd2lk
dGggYnkgZm9ybWF0dGluZyB0aGUgY29udGVudCB3aXRob3V0IGJyZWFraW5nIGxpbmVzIG90aGVy
IHRoYW4gd2hlcmUgZXhwbGljaXQgbGluZSBicmVha3Mgb2NjdXIsCi0gICAgLy8gYW5kIGFsc28g
Y2FsY3VsYXRlIHRoZSBwcmVmZXJyZWQgbWluaW11bSB3aWR0aCwgZS5nLiwgYnkgdHJ5aW5nIGFs
bCBwb3NzaWJsZSBsaW5lIGJyZWFrcy4gQ1NTIDIuMiBkb2VzIG5vdCBkZWZpbmUgdGhlIGV4YWN0
IGFsZ29yaXRobS4KLSAgICAvLyBUaGlyZGx5LCBmaW5kIHRoZSBhdmFpbGFibGUgd2lkdGg6IGlu
IHRoaXMgY2FzZSwgdGhpcyBpcyB0aGUgd2lkdGggb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgbWlu
dXMgdGhlIHVzZWQgdmFsdWVzIG9mICdtYXJnaW4tbGVmdCcsICdib3JkZXItbGVmdC13aWR0aCcs
Ci0gICAgLy8gJ3BhZGRpbmctbGVmdCcsICdwYWRkaW5nLXJpZ2h0JywgJ2JvcmRlci1yaWdodC13
aWR0aCcsICdtYXJnaW4tcmlnaHQnLCBhbmQgdGhlIHdpZHRocyBvZiBhbnkgcmVsZXZhbnQgc2Ny
b2xsIGJhcnMuCi0KLSAgICAvLyBUaGVuIHRoZSBzaHJpbmstdG8tZml0IHdpZHRoIGlzOiBtaW4o
bWF4KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBhdmFpbGFibGUgd2lkdGgpLCBwcmVmZXJyZWQg
d2lkdGgpLgotICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMgeyB9OwotICAgIGF1dG8gaGFzQ29udGVudCA9IGlzPENvbnRhaW5lckJv
eD4oZm9ybWF0dGluZ0NvbnRleHRSb290KSAmJiBkb3duY2FzdDxDb250YWluZXJCb3g+KGZvcm1h
dHRpbmdDb250ZXh0Um9vdCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCk7Ci0gICAgLy8gVGhl
IHVzZWQgd2lkdGggb2YgdGhlIGNvbnRhaW5tZW50IGJveCBpcyBkZXRlcm1pbmVkIGFzIGlmIHBl
cmZvcm1pbmcgYSBub3JtYWwgbGF5b3V0IG9mIHRoZSBib3gsIGV4Y2VwdCB0aGF0IGl0IGlzIHRy
ZWF0ZWQgYXMgaGF2aW5nIG5vIGNvbnRlbnQuCi0gICAgYXV0byBzaG91bGRJZ25vcmVDb250ZW50
ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LmlzU2l6ZUNvbnRhaW5tZW50Qm94KCk7ICAKLSAgICBp
ZiAoaGFzQ29udGVudCAmJiAhc2hvdWxkSWdub3JlQ29udGVudCkgewotICAgICAgICBhdXRvJiBy
b290ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpOwotICAg
ICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGVGb3JSb290ID0gbGF5b3V0U3RhdGUoKS5lbnN1cmVG
b3JtYXR0aW5nU3RhdGUocm9vdCk7Ci0gICAgICAgIGF1dG8gcHJlY29tcHV0ZWRJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0YXRlRm9yUm9vdC5pbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzKCk7Ci0gICAgICAgIGlmICghcHJlY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKQotICAgICAgICAgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IExheW91dENv
bnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KHJvb3QsIGxheW91dFN0YXRlKCkpLT5jb21w
dXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9ICpwcmVjb21wdXRlZEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHM7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heChpbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGF2YWlsYWJsZVdpZHRoKSwgaW50cmluc2ljV2lk
dGhDb25zdHJhaW50cy5tYXhpbXVtKTsKLX0KLQotVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkVmVydGljYWxHZW9tZXRyeShj
b25zdCBDb250YWluZXJCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRz
JiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRp
Y2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRl
blZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpOwotICAgIEFTU0VS
VCh2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQpOwotCi0gICAgLy8gMTAuNi40IEFi
c29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCi0gICAgLy8KLSAgICAv
LyBGb3IgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVsZW1lbnRzLCB0aGUgdXNlZCB2YWx1ZXMgb2Yg
dGhlIHZlcnRpY2FsIGRpbWVuc2lvbnMgbXVzdCBzYXRpc2Z5IHRoaXMgY29uc3RyYWludDoKLSAg
ICAvLyAndG9wJyArICdtYXJnaW4tdG9wJyArICdib3JkZXItdG9wLXdpZHRoJyArICdwYWRkaW5n
LXRvcCcgKyAnaGVpZ2h0JyArICdwYWRkaW5nLWJvdHRvbScgKyAnYm9yZGVyLWJvdHRvbS13aWR0
aCcgKyAnbWFyZ2luLWJvdHRvbScgKyAnYm90dG9tJwotICAgIC8vID0gaGVpZ2h0IG9mIGNvbnRh
aW5pbmcgYmxvY2sKLQotICAgIC8vIElmIGFsbCB0aHJlZSBvZiAndG9wJywgJ2hlaWdodCcsIGFu
ZCAnYm90dG9tJyBhcmUgYXV0bywgc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5k
IGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93LgotCi0gICAgLy8gSWYgbm9uZSBvZiB0aGUg
dGhyZWUgYXJlICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9t
JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhCi0gICAgLy8g
Y29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBnZXQgZXF1YWwgdmFsdWVzLiBJZiBvbmUg
b2YgJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyBpcyAnYXV0bycsIHNvbHZlIHRoZSBl
cXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KLSAgICAvLyBJZiB0aGUgdmFsdWVzIGFyZSBvdmVyLWNv
bnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRo
YXQgdmFsdWUuCi0KLSAgICAvLyBPdGhlcndpc2UsIHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93
aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCi0KLSAgICAvLyAxLiAndG9wJyBhbmQgJ2hlaWdo
dCcgYXJlICdhdXRvJyBhbmQgJ2JvdHRvbScgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0
IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAxMC42LjcsCi0gICAgLy8gICAgIHNldCAnYXV0
bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQg
c29sdmUgZm9yICd0b3AnCi0gICAgLy8gMi4gJ3RvcCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycg
YW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMg
cG9zaXRpb24sIHNldCAnYXV0bycgdmFsdWVzIGZvcgotICAgIC8vICAgICdtYXJnaW4tdG9wJyBh
bmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKLSAgICAvLyAz
LiAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlICdhdXRvJyBhbmQgJ3RvcCcgaXMgbm90ICdhdXRv
JywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAxMC42LjcsIHNl
dCAnYXV0bycKLSAgICAvLyAgICAgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4t
Ym90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICdib3R0b20nCi0gICAgLy8gNC4gJ3RvcCcgaXMg
J2F1dG8nLCAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdh
dXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFu
ZCBzb2x2ZSBmb3IgJ3RvcCcKLSAgICAvLyA1LiAnaGVpZ2h0JyBpcyAnYXV0bycsICd0b3AnIGFu
ZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgdGhlbiAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2lu
LXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgc2V0IHRvIDAgYW5kIHNvbHZlIGZvciAnaGVp
Z2h0JwotICAgIC8vIDYuICdib3R0b20nIGlzICdhdXRvJywgJ3RvcCcgYW5kICdoZWlnaHQnIGFy
ZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5k
ICdtYXJnaW4tYm90dG9tJyB0byAwIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKLQotICAgIGF1dG8m
IGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKLSAgICBhdXRv
JiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICBhdXRvIGNvbnRh
aW5pbmdCbG9ja0hlaWdodCA9ICp2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQ7Ci0g
ICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dp
Y2FsV2lkdGg7Ci0KLSAgICBhdXRvIHRvcCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbFRv
cCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZh
bHVlKHN0eWxlLmxvZ2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1
dG8gaGVpZ2h0ID0gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5W
ZXJ0aWNhbFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCwg
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLSAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4g
PSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cyk7Ci0gICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMg
dXNlZFZlcnRpY2FsTWFyZ2luOyAKLSAgICBhdXRvIHBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5w
YWRkaW5nVG9wKCkudmFsdWVPcigwKTsKLSAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSBib3hHZW9t
ZXRyeS5wYWRkaW5nQm90dG9tKCkudmFsdWVPcigwKTsKLSAgICBhdXRvIGJvcmRlclRvcCA9IGJv
eEdlb21ldHJ5LmJvcmRlclRvcCgpOwotICAgIGF1dG8gYm9yZGVyQm90dG9tID0gYm94R2VvbWV0
cnkuYm9yZGVyQm90dG9tKCk7Ci0KLSAgICBpZiAoIXRvcCAmJiAhaGVpZ2h0ICYmICFib3R0b20p
Ci0gICAgICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlv
bmVkKGxheW91dEJveCwgdmVydGljYWxDb25zdHJhaW50cyk7Ci0KLSAgICBpZiAodG9wICYmIGhl
aWdodCAmJiBib3R0b20pIHsKLSAgICAgICAgaWYgKCFjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJl
Zm9yZSAmJiAhY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcikgewotICAgICAgICAgICAgYXV0
byBtYXJnaW5CZWZvcmVBbmRBZnRlciA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsg
Ym9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVy
Qm90dG9tICsgKmJvdHRvbSk7Ci0gICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IG1h
cmdpbkJlZm9yZUFuZEFmdGVyIC8gMiwgbWFyZ2luQmVmb3JlQW5kQWZ0ZXIgLyAyIH07Ci0gICAg
ICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlKSB7Ci0gICAgICAg
ICAgICB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgPSAqY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5h
ZnRlcjsKLSAgICAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgPSBjb250YWluaW5n
QmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsg
cGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciAr
ICpib3R0b20pOwotICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyKSB7Ci0gICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlID0gKmNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYmVmb3JlOwotICAgICAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4u
YmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9t
ICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
dXNlZFZlcnRpY2FsTWFyZ2luID0geyAqY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUsICpj
b21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyIH07Ci0gICAgICAgIC8vIE92ZXItY29uc3RyYWlu
ZWQ/Ci0gICAgICAgIGF1dG8gYm94SGVpZ2h0ID0gKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5i
ZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20g
KyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgKyAqYm90dG9tOwotICAg
ICAgICBpZiAoYm94SGVpZ2h0ICE9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkKLSAgICAgICAgICAg
IGJvdHRvbSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgdXNlZFZlcnRpY2FsTWFy
Z2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0Jv
dHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcik7Ci0gICAgfQot
Ci0gICAgaWYgKCF0b3AgJiYgIWhlaWdodCAmJiBib3R0b20pIHsKLSAgICAgICAgLy8gIzEKLSAg
ICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlv
dXRCb3gpOwotICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxN
YXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFs
dWVPcigwKSB9OwotICAgICAgICB0b3AgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAodXNlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsg
cGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciAr
ICpib3R0b20pOyAKLSAgICB9Ci0KLSAgICBpZiAoIXRvcCAmJiAhYm90dG9tICYmIGhlaWdodCkg
ewotICAgICAgICAvLyAjMgotICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9y
T3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMpOwotICAg
ICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3Jl
LnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9Owot
ICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0
aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBh
ZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIpOwot
ICAgIH0KLQotICAgIGlmICghaGVpZ2h0ICYmICFib3R0b20gJiYgdG9wKSB7Ci0gICAgICAgIC8v
ICMzCi0gICAgICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJv
b3QobGF5b3V0Qm94KTsKLSAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyBjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyLnZhbHVlT3IoMCkgfTsKLSAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0
IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGlu
Z1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRp
Y2FsTWFyZ2luLmFmdGVyKTsKLSAgICB9Ci0KLSAgICBpZiAoIXRvcCAmJiBoZWlnaHQgJiYgYm90
dG9tKSB7Ci0gICAgICAgIC8vICM0Ci0gICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsgY29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbi5hZnRlci52YWx1ZU9yKDApIH07Ci0gICAgICAgIHRvcCA9IGNvbnRhaW5pbmdCbG9ja0hl
aWdodCAtICh1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1Rv
cCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2Fs
TWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7Ci0gICAgfQotCi0gICAgaWYgKCFoZWlnaHQgJiYgdG9w
ICYmIGJvdHRvbSkgewotICAgICAgICAvLyAjNQotICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4g
PSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVy
dGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwotICAgICAgICBoZWlnaHQgPSBjb250YWlu
aW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3Jk
ZXJUb3AgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRW
ZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b20pOwotICAgIH0KLQotICAgIGlmICghYm90dG9t
ICYmIHRvcCAmJiBoZWlnaHQpIHsKLSAgICAgICAgLy8gIzYKLSAgICAgICAgdXNlZFZlcnRpY2Fs
TWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21w
dXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKLSAgICAgICAgYm90dG9tID0g
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3Jl
ICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9y
ZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQodG9wKTsKLSAgICBBU1NFUlQoYm90dG9tKTsKLSAgICBBU1NFUlQoaGVpZ2h0KTsKLQotICAg
IC8vIEZvciBvdXQtb2YtZmxvdyBlbGVtZW50cyB0aGUgY29udGFpbmluZyBibG9jayBpcyBmb3Jt
ZWQgYnkgdGhlIHBhZGRpbmcgZWRnZSBvZiB0aGUgYW5jZXN0b3IuCi0gICAgLy8gQXQgdGhpcyBw
b2ludCB0aGUgcG9zaXRpb25lZCB2YWx1ZSBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2Yg
dGhlIHBhZGRpbmcgYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3ggY29vcmRpbmF0
ZSBzeXN0ZW0uCi0gICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlID0g
dmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOwotICAgICp0b3AgKz0gY29udGFpbmluZ0Js
b2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKLSAgICAqYm90dG9tICs9IGNvbnRhaW5pbmdCbG9ja1Bh
ZGRpbmdWZXJ0aWNhbEVkZ2U7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRl
eHRMYXlvdXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9uXVtIZWlnaHRdW01hcmdpbl0gLT4gb3V0LW9m
LWZsb3cgbm9uLXJlcGxhY2VkIC0+IHRvcCgiIDw8ICp0b3AgPDwgInB4KSBib3R0b20oIiAgPDwg
KmJvdHRvbSA8PCAicHgpIGhlaWdodCgiIDw8ICpoZWlnaHQgPDwgInB4KSBtYXJnaW4oIiA8PCB1
c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlIDw8ICJweCwgIiAgPDwgdXNlZFZlcnRpY2FsTWFyZ2lu
LmFmdGVyIDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOwotICAgIHJl
dHVybiB7ICp0b3AsICpib3R0b20sIHsgKmhlaWdodCwgdXNlZFZlcnRpY2FsTWFyZ2luIH0gfTsK
LX0KLQotSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0
T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQ29udGFpbmVyQm94JiBs
YXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFp
bnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250
YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7Ci0gICAgCi0gICAgLy8gMTAuMy43IEFi
c29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCi0gICAgLy8KLSAgICAv
LyAnbGVmdCcgKyAnbWFyZ2luLWxlZnQnICsgJ2JvcmRlci1sZWZ0LXdpZHRoJyArICdwYWRkaW5n
LWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0JyArICdib3JkZXItcmlnaHQtd2lkdGgn
ICsgJ21hcmdpbi1yaWdodCcgKyAncmlnaHQnCi0gICAgLy8gPSB3aWR0aCBvZiBjb250YWluaW5n
IGJsb2NrCi0KLSAgICAvLyBJZiBhbGwgdGhyZWUgb2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3Jp
Z2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4t
bGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAuCi0gICAgLy8gVGhlbiwgaWYgdGhlICdkaXJl
Y3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBv
c2l0aW9uIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGlj
Ci0gICAgLy8gcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93OyBvdGhl
cndpc2UsIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUg
bnVtYmVyIG9uZSBiZWxvdy4KLSAgICAvLwotICAgIC8vIElmIG5vbmUgb2YgdGhlIHRocmVlIGlz
ICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgJ2F1
dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0
aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcywKLSAgICAvLyB1bmxlc3MgdGhpcyB3b3Vs
ZCBtYWtlIHRoZW0gbmVnYXRpdmUsIGluIHdoaWNoIGNhc2Ugd2hlbiBkaXJlY3Rpb24gb2YgdGhl
IGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdydGwnKSwgc2V0ICdtYXJnaW4tbGVmdCcgKCdt
YXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZAotICAgIC8vIHNvbHZlIGZvciAnbWFyZ2luLXJpZ2h0
JyAoJ21hcmdpbi1sZWZ0JykuIElmIG9uZSBvZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmln
aHQnIGlzICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgotICAgIC8v
IElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9y
ICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5p
bmcgYmxvY2sgaXMgJ3J0bCcpIG9yICdyaWdodCcKLSAgICAvLyAoaW4gY2FzZSAnZGlyZWN0aW9u
JyBpcyAnbHRyJykgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgotICAgIC8vCi0gICAgLy8gT3Ro
ZXJ3aXNlLCBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1y
aWdodCcgdG8gMCwgYW5kIHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0
aGF0IGFwcGxpZXMuCi0gICAgLy8KLSAgICAvLyAxLiAnbGVmdCcgYW5kICd3aWR0aCcgYXJlICdh
dXRvJyBhbmQgJ3JpZ2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmst
dG8tZml0LiBUaGVuIHNvbHZlIGZvciAnbGVmdCcKLSAgICAvLyAyLiAnbGVmdCcgYW5kICdyaWdo
dCcgYXJlICdhdXRvJyBhbmQgJ3dpZHRoJyBpcyBub3QgJ2F1dG8nLCB0aGVuIGlmIHRoZSAnZGly
ZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1w
b3NpdGlvbiAKLSAgICAvLyAgICBjb250YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcg
dG8gdGhlIHN0YXRpYyBwb3NpdGlvbiwgb3RoZXJ3aXNlIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0
aWMgcG9zaXRpb24uCi0gICAgLy8gICAgVGhlbiBzb2x2ZSBmb3IgJ2xlZnQnIChpZiAnZGlyZWN0
aW9uIGlzICdydGwnKSBvciAncmlnaHQnIChpZiAnZGlyZWN0aW9uJyBpcyAnbHRyJykuCi0gICAg
Ly8gMy4gJ3dpZHRoJyBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnbGVmdCcgaXMgbm90ICdh
dXRvJywgdGhlbiB0aGUgd2lkdGggaXMgc2hyaW5rLXRvLWZpdCAuIFRoZW4gc29sdmUgZm9yICdy
aWdodCcKLSAgICAvLyA0LiAnbGVmdCcgaXMgJ2F1dG8nLCAnd2lkdGgnIGFuZCAncmlnaHQnIGFy
ZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnbGVmdCcKLSAgICAvLyA1LiAnd2lkdGgnIGlz
ICdhdXRvJywgJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZv
ciAnd2lkdGgnCi0gICAgLy8gNi4gJ3JpZ2h0JyBpcyAnYXV0bycsICdsZWZ0JyBhbmQgJ3dpZHRo
JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0JwotCi0gICAgYXV0byYgZm9y
bWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8mIHN0
eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0
aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgIGF1dG8gY29udGFpbmlu
Z0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwotICAgIGF1
dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKS5z
dHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAKLSAgICBhdXRvIGxlZnQgPSBj
b21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsK
LSAgICBhdXRvIHJpZ2h0ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsUmlnaHQoKSwgY29u
dGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gd2lkdGggPSBvdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcy53aWR0aCA/IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoIDogY29tcHV0
ZWRXaWR0aChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICBhdXRvIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4o
bGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIFVzZWRIb3Jpem9udGFsTWFy
Z2luIHVzZWRIb3Jpem9udGFsTWFyZ2luOwotICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBib3hHZW9t
ZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBwYWRkaW5nUmlnaHQgPSBi
b3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwotICAgIGF1dG8gYm9yZGVyTGVm
dCA9IGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKTsKLSAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94
R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKLSAgICBpZiAoIWxlZnQgJiYgIXdpZHRoICYmICFyaWdo
dCkgewotICAgICAgICAvLyBJZiBhbGwgdGhyZWUgb2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3Jp
Z2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4t
bGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAuCi0gICAgICAgIC8vIFRoZW4sIGlmIHRoZSAn
ZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRp
Yy1wb3NpdGlvbiBjb250YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0
YXRpYwotICAgICAgICAvLyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgdGhyZWUgYmVs
b3c7IG90aGVyd2lzZSwgc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiBhbmQgYXBw
bHkgcnVsZSBudW1iZXIgb25lIGJlbG93LgotICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9
IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9y
aXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9OwotCi0gICAgICAgIGF1dG8gc3RhdGljSG9y
aXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9z
aXRpb25lZChsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgICAgIGlmIChp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQotICAgICAgICAgICAgbGVmdCA9IHN0YXRpY0hvcml6b250
YWxQb3NpdGlvbjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmlnaHQgPSBzdGF0aWNIb3Jp
em9udGFsUG9zaXRpb247Ci0gICAgfSBlbHNlIGlmIChsZWZ0ICYmIHdpZHRoICYmIHJpZ2h0KSB7
Ci0gICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIHRocmVlIGlzICdhdXRvJzogSWYgYm90aCAnbWFy
Z2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRp
b24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVx
dWFsIHZhbHVlcywKLSAgICAgICAgLy8gdW5sZXNzIHRoaXMgd291bGQgbWFrZSB0aGVtIG5lZ2F0
aXZlLCBpbiB3aGljaCBjYXNlIHdoZW4gZGlyZWN0aW9uIG9mIHRoZSBjb250YWluaW5nIGJsb2Nr
IGlzICdsdHInICgncnRsJyksIHNldCAnbWFyZ2luLWxlZnQnICgnbWFyZ2luLXJpZ2h0JykgdG8g
emVybyBhbmQKLSAgICAgICAgLy8gc29sdmUgZm9yICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxl
ZnQnKS4gSWYgb25lIG9mICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgaXMgJ2F1dG8n
LCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuCi0gICAgICAgIC8vIElmIHRoZSB2
YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdsZWZ0JyAo
aW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sg
aXMgJ3J0bCcpIG9yICdyaWdodCcKLSAgICAgICAgLy8gKGluIGNhc2UgJ2RpcmVjdGlvbicgaXMg
J2x0cicpIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KLSAgICAgICAgaWYgKCFjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uc3RhcnQgJiYgIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsK
LSAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnRBbmRFbmQgPSBjb250YWluaW5nQmxvY2tXaWR0
aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdS
aWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKLSAgICAgICAgICAgIGlmIChtYXJnaW5TdGFy
dEFuZEVuZCA+PSAwKQotICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBt
YXJnaW5TdGFydEFuZEVuZCAvIDIsIG1hcmdpblN0YXJ0QW5kRW5kIC8gMiB9OwotICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pIHsK
LSAgICAgICAgICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSAwX2x1Owot
ICAgICAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250YWluaW5n
QmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVy
TGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQg
KyAqcmlnaHQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9IDBfbHU7Ci0gICAgICAgICAgICAgICAgICAgIHVz
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQg
KyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3Jk
ZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQpIHsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kOwotICAgICAgICAgICAgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRl
ckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0
ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKLSAgICAgICAgfSBlbHNlIGlm
ICghY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgewotICAgICAgICAgICAgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgPSAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0OwotICAg
ICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGgg
LSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRk
aW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyAq
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LCAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZCB9OwotICAgICAgICAgICAgLy8gT3ZlcmNvbnN0cmFpbmVkPyBJZ25vcmUgcmlnaHQgKGxl
ZnQpLgotICAgICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAgICAg
ICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCArICpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0
aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVm
dCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxN
YXJnaW4uZW5kICsgKnJpZ2h0KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IE90aGVyd2lzZSwgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJn
aW4tcmlnaHQnIHRvIDAsIGFuZCBwaWNrIHRoZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVs
ZXMgdGhhdCBhcHBsaWVzLgotICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5lbmQudmFsdWVPcigwKSB9OwotICAgIH0KLQotICAgIGlmICghbGVmdCAmJiAhd2lkdGgg
JiYgcmlnaHQpIHsKLSAgICAgICAgLy8gIzEKLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhdmFp
bGFibGUgd2lkdGggYnkgc29sdmluZyBmb3IgJ3dpZHRoJyBhZnRlciBzZXR0aW5nICdsZWZ0JyAo
aW4gY2FzZSAxKSB0byAwCi0gICAgICAgIGxlZnQgPSBMYXlvdXRVbml0IHsgMCB9OwotICAgICAg
ICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1
c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBh
ZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJp
Z2h0KTsKLSAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCwgYXZhaWxh
YmxlV2lkdGgpOwotICAgICAgICBsZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhv
cml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGgg
KyBwYWRkaW5nUmlnaHQgICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQg
KyAqcmlnaHQpOwotICAgIH0gZWxzZSBpZiAoIWxlZnQgJiYgIXJpZ2h0ICYmIHdpZHRoKSB7Ci0g
ICAgICAgIC8vICMyCi0gICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIGhv
cml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KSB7Ci0gICAgICAgICAgICBsZWZ0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOwotICAgICAg
ICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9u
dGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmlnaHQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRp
b247Ci0gICAgICAgICAgICBsZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBw
YWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpy
aWdodCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiAhcmlnaHQgJiYgbGVm
dCkgewotICAgICAgICAvLyAjMwotICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGF2YWlsYWJsZSB3
aWR0aCBieSBzb2x2aW5nIGZvciAnd2lkdGgnIGFmdGVyIHNldHRpbmcgJ3JpZ2h0JyAoaW4gY2Fz
ZSAzKSB0byAwCi0gICAgICAgIHJpZ2h0ID0gTGF5b3V0VW5pdCB7IDAgfTsKLSAgICAgICAgYXV0
byBhdmFpbGFibGVXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhv
cml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5n
UmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7
Ci0gICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRCb3gsIGF2YWlsYWJsZVdp
ZHRoKTsKLSAgICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVz
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndp
ZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5l
bmQpOwotICAgIH0gZWxzZSBpZiAoIWxlZnQgJiYgd2lkdGggJiYgcmlnaHQpIHsKLSAgICAgICAg
Ly8gIzQKLSAgICAgICAgbGVmdCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9u
dGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmln
aHQpOwotICAgIH0gZWxzZSBpZiAoIXdpZHRoICYmIGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAg
Ly8gIzUKLSAgICAgICAgd2lkdGggPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVz
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmln
aHQpOwotICAgIH0gZWxzZSBpZiAoIXJpZ2h0ICYmIGxlZnQgJiYgd2lkdGgpIHsKLSAgICAgICAg
Ly8gIzYKLSAgICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVz
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndp
ZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5l
bmQpOwotICAgIH0KLQotICAgIEFTU0VSVChsZWZ0KTsKLSAgICBBU1NFUlQocmlnaHQpOwotICAg
IEFTU0VSVCh3aWR0aCk7Ci0KLSAgICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNv
bnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2Vz
dG9yLgotICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhl
IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0
byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2Nr
UGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsK
LSAgICAqbGVmdCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotICAgICpy
aWdodCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlvbl1b
V2lkdGhdW01hcmdpbl0gLT4gb3V0LW9mLWZsb3cgbm9uLXJlcGxhY2VkIC0+IGxlZnQoIiA8PCAq
bGVmdCA8PCAicHgpIHJpZ2h0KCIgIDw8ICpyaWdodCA8PCAicHgpIHdpZHRoKCIgPDwgKndpZHRo
IDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPDwgInB4LCAi
ICA8PCB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPDwgInB4KSBsYXlvdXRCb3goIiA8PCAmbGF5
b3V0Qm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsgKmxlZnQsICpyaWdodCwgeyAqd2lkdGgsIHVz
ZWRIb3Jpem9udGFsTWFyZ2luIH0gfTsKLX0KLQotVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25z
dCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYg
aG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNh
bENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5W
ZXJ0aWNhbFZhbHVlcykgY29uc3QKLXsKLSAgICBBU1NFUlQocmVwbGFjZWRCb3guaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpOwotICAgIEFTU0VSVCh2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxI
ZWlnaHQpOwotCi0gICAgLy8gMTAuNi41IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQg
ZWxlbWVudHMKLSAgICAvLwotICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzIGRl
dGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZCBlbGVtZW50cy4KLSAgICAvLyBJZiAnbWFy
Z2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIGlzIHNwZWNpZmllZCBhcyAnYXV0bycgaXRzIHVz
ZWQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcnVsZXMgYmVsb3cuCi0gICAgLy8gMS4gSWYg
Ym90aCAndG9wJyBhbmQgJ2JvdHRvbScgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCByZXBsYWNlICd0
b3AnIHdpdGggdGhlIGVsZW1lbnQncyBzdGF0aWMgcG9zaXRpb24uCi0gICAgLy8gMi4gSWYgJ2Jv
dHRvbScgaXMgJ2F1dG8nLCByZXBsYWNlIGFueSAnYXV0bycgb24gJ21hcmdpbi10b3AnIG9yICdt
YXJnaW4tYm90dG9tJyB3aXRoICcwJy4KLSAgICAvLyAzLiBJZiBhdCB0aGlzIHBvaW50IGJvdGgg
J21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgYXJlIHN0aWxsICdhdXRvJywgc29sdmUg
dGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBjb25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJn
aW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVlcy4KLSAgICAvLyA0LiBJZiBhdCB0aGlzIHBvaW50IHRo
ZXJlIGlzIG9ubHkgb25lICdhdXRvJyBsZWZ0LCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQg
dmFsdWUuCi0gICAgLy8gNS4gSWYgYXQgdGhpcyBwb2ludCB0aGUgdmFsdWVzIGFyZSBvdmVyLWNv
bnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRo
YXQgdmFsdWUuCi0KLSAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRp
bmdDb250ZXh0KCk7Ci0gICAgYXV0byYgc3R5bGUgPSByZXBsYWNlZEJveC5zdHlsZSgpOwotICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocmVw
bGFjZWRCb3gpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gKnZlcnRpY2FsQ29u
c3RyYWludHMubG9naWNhbEhlaWdodDsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0g
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLQotICAgIGF1dG8gdG9wID0gY29t
cHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAg
ICBhdXRvIGJvdHRvbSA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250
YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byBoZWlnaHQgPSBpbmxpbmVSZXBsYWNlZENvbnRl
bnRIZWlnaHRBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgdmVy
dGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKS5jb250ZW50SGVpZ2h0
OwotICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZl
cnRpY2FsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIE9w
dGlvbmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5CZWZvcmUgPSBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmJlZm9yZTsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luQWZ0ZXIgPSBj
b21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyOwotICAgIGF1dG8gcGFkZGluZ1RvcCA9IGJveEdl
b21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9
IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApOwotICAgIGF1dG8gYm9yZGVy
VG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCk7Ci0gICAgYXV0byBib3JkZXJCb3R0b20gPSBi
b3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKLQotICAgIGlmICghdG9wICYmICFib3R0b20pIHsK
LSAgICAgICAgLy8gIzEKLSAgICAgICAgdG9wID0gc3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91
dE9mRmxvd1Bvc2l0aW9uZWQocmVwbGFjZWRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMpOwotICAg
IH0KLQotICAgIGlmICghYm90dG9tKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIHVzZWRNYXJn
aW5CZWZvcmUgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApOwotICAg
ICAgICB1c2VkTWFyZ2luQWZ0ZXIgPSB1c2VkTWFyZ2luQmVmb3JlOwotICAgIH0KLQotICAgIGlm
ICghdXNlZE1hcmdpbkJlZm9yZSAmJiAhdXNlZE1hcmdpbkFmdGVyKSB7Ci0gICAgICAgIC8vICMz
Ci0gICAgICAgIGF1dG8gbWFyZ2luQmVmb3JlQW5kQWZ0ZXIgPSBjb250YWluaW5nQmxvY2tIZWln
aHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90
dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7Ci0gICAgICAgIHVzZWRNYXJnaW5CZWZvcmUg
PSBtYXJnaW5CZWZvcmVBbmRBZnRlciAvIDI7Ci0gICAgICAgIHVzZWRNYXJnaW5BZnRlciA9IHVz
ZWRNYXJnaW5CZWZvcmU7Ci0gICAgfQotCi0gICAgLy8gIzQKLSAgICBpZiAoIXRvcCkKLSAgICAg
ICAgdG9wID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp1c2VkTWFyZ2luQmVmb3JlICsgYm9y
ZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0
b20gKyAqdXNlZE1hcmdpbkFmdGVyICsgKmJvdHRvbSk7Ci0KLSAgICBpZiAoIWJvdHRvbSkKLSAg
ICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyAqdXNlZE1hcmdp
bkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9t
ICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5BZnRlcik7Ci0KLSAgICBpZiAoIXVzZWRNYXJn
aW5CZWZvcmUpCi0gICAgICAgIHVzZWRNYXJnaW5CZWZvcmUgPSBjb250YWluaW5nQmxvY2tIZWln
aHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90
dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5BZnRlciArICpib3R0b20pOwotCi0gICAg
aWYgKCF1c2VkTWFyZ2luQWZ0ZXIpCi0gICAgICAgIHVzZWRNYXJnaW5BZnRlciA9IGNvbnRhaW5p
bmdCbG9ja0hlaWdodCAtICgqdG9wICsgKnVzZWRNYXJnaW5CZWZvcmUgKyBib3JkZXJUb3AgKyBw
YWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArICpib3R0
b20pOwotCi0gICAgLy8gIzUKLSAgICBhdXRvIGJveEhlaWdodCA9ICp0b3AgKyAqdXNlZE1hcmdp
bkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9t
ICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5BZnRlciArICpib3R0b207Ci0gICAgaWYgKGJv
eEhlaWdodCA+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkKLSAgICAgICAgYm90dG9tID0gY29udGFp
bmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyAqdXNlZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCAr
IHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVz
ZWRNYXJnaW5BZnRlcik7IAotCi0gICAgLy8gRm9yIG91dC1vZi1mbG93IGVsZW1lbnRzIHRoZSBj
b250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBlZGdlIG9mIHRoZSBhbmNl
c3Rvci4KLSAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVkIHZhbHVlIGlzIGluIHRo
ZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExldCdzIGNvbnZlcnQgaXQg
dG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9j
a1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSB2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxUb3A7Ci0g
ICAgKnRvcCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotICAgICpib3R0
b20gKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKLQotICAgIEFTU0VSVCh0
b3ApOwotICAgIEFTU0VSVChib3R0b20pOwotICAgIEFTU0VSVCh1c2VkTWFyZ2luQmVmb3JlKTsK
LSAgICBBU1NFUlQodXNlZE1hcmdpbkFmdGVyKTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0
dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9uXVtIZWlnaHRdW01hcmdpbl0g
LT4gb3V0LW9mLWZsb3cgcmVwbGFjZWQgLT4gdG9wKCIgPDwgKnRvcCA8PCAicHgpIGJvdHRvbSgi
ICA8PCAqYm90dG9tIDw8ICJweCkgaGVpZ2h0KCIgPDwgaGVpZ2h0IDw8ICJweCkgbWFyZ2luKCIg
PDwgKnVzZWRNYXJnaW5CZWZvcmUgPDwgInB4LCAiICA8PCAqdXNlZE1hcmdpbkFmdGVyIDw8ICJw
eCkgbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsgKnRv
cCwgKmJvdHRvbSwgeyBoZWlnaHQsIHsgKnVzZWRNYXJnaW5CZWZvcmUsICp1c2VkTWFyZ2luQWZ0
ZXIgfSB9IH07Ci19Ci0KLUhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IFJlcGxhY2Vk
Qm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWlu
dHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcykKLXsKLSAgICBBU1NFUlQocmVwbGFjZWRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpOwotCi0gICAgLy8gMTAuMy44IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxl
bWVudHMKLSAgICAvLyBJbiB0aGlzIGNhc2UsIHNlY3Rpb24gMTAuMy43IGFwcGxpZXMgdXAgdGhy
b3VnaCBhbmQgaW5jbHVkaW5nIHRoZSBjb25zdHJhaW50IGVxdWF0aW9uLCBidXQgdGhlIHJlc3Qg
b2Ygc2VjdGlvbiAxMC4zLjcgaXMgcmVwbGFjZWQgYnkgdGhlIGZvbGxvd2luZyBydWxlczoKLSAg
ICAvLwotICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBm
b3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLiBJZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4t
cmlnaHQnIGlzIHNwZWNpZmllZCBhcyAnYXV0bycgaXRzIHVzZWQgdmFsdWUgaXMgZGV0ZXJtaW5l
ZCBieSB0aGUgcnVsZXMgYmVsb3cuCi0gICAgLy8gMS4gSWYgYm90aCAnbGVmdCcgYW5kICdyaWdo
dCcgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCB0aGVuIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0
eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiBjb250YWlu
aW5nIGJsb2NrIGlzICdsdHInLAotICAgIC8vICAgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBv
c2l0aW9uOyBlbHNlIGlmICdkaXJlY3Rpb24nIGlzICdydGwnLCBzZXQgJ3JpZ2h0JyB0byB0aGUg
c3RhdGljIHBvc2l0aW9uLgotICAgIC8vIDIuIElmICdsZWZ0JyBvciAncmlnaHQnIGFyZSAnYXV0
bycsIHJlcGxhY2UgYW55ICdhdXRvJyBvbiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQn
IHdpdGggJzAnLgotICAgIC8vIDMuIElmIGF0IHRoaXMgcG9pbnQgYm90aCAnbWFyZ2luLWxlZnQn
IGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgc3RpbGwgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24g
dW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMgbXVzdCBnZXQg
ZXF1YWwgdmFsdWVzLAotICAgIC8vICAgdW5sZXNzIHRoaXMgd291bGQgbWFrZSB0aGVtIG5lZ2F0
aXZlLCBpbiB3aGljaCBjYXNlIHdoZW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgY29udGFpbmluZyBi
bG9jayBpcyAnbHRyJyAoJ3J0bCcpLCBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcp
IHRvIHplcm8gYW5kCi0gICAgLy8gICBzb2x2ZSBmb3IgJ21hcmdpbi1yaWdodCcgKCdtYXJnaW4t
bGVmdCcpLgotICAgIC8vIDQuIElmIGF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgYW4gJ2F1dG8nIGxl
ZnQsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KLSAgICAvLyA1LiBJZiBhdCB0
aGlzIHBvaW50IHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFs
dWUgZm9yIGVpdGhlciAnbGVmdCcgKGluIGNhc2UgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9m
IHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdydGwnKSBvcgotICAgIC8vICAgJ3JpZ2h0JyAoaW4g
Y2FzZSAnZGlyZWN0aW9uJyBpcyAnbHRyJykgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgotCi0g
ICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwot
ICAgIGF1dG8mIHN0eWxlID0gcmVwbGFjZWRCb3guc3R5bGUoKTsKLSAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KHJlcGxhY2VkQm94KTsKLSAg
ICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2lj
YWxXaWR0aDsKLSAgICBhdXRvIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPSByZXBsYWNlZEJveC5j
b250YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLQotICAg
IGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbExlZnQoKSwgY29udGFpbmlu
Z0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gcmlnaHQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2lj
YWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byBjb21wdXRlZEhvcml6
b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKHJlcGxhY2Vk
Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVz
ZWRNYXJnaW5TdGFydCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydDsKLSAgICBPcHRp
b25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luRW5kID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZDsKLSAgICBhdXRvIHdpZHRoID0gaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJn
aW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50
cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpLmNvbnRlbnRXaWR0aDsKLSAgICBhdXRvIHBh
ZGRpbmdMZWZ0ID0gYm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOwotICAgIGF1
dG8gcGFkZGluZ1JpZ2h0ID0gYm94R2VvbWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsK
LSAgICBhdXRvIGJvcmRlckxlZnQgPSBib3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCk7Ci0gICAgYXV0
byBib3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCk7Ci0KLSAgICBpZiAoIWxl
ZnQgJiYgIXJpZ2h0KSB7Ci0gICAgICAgIC8vICMxCi0gICAgICAgIGF1dG8gc3RhdGljSG9yaXpv
bnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRp
b25lZChyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLSAgICAgICAgaWYgKGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAgICAgICBsZWZ0ID0gc3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByaWdodCA9IHN0YXRpY0hvcml6
b250YWxQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlZnQgfHwgIXJpZ2h0KSB7Ci0gICAg
ICAgIC8vICMyCi0gICAgICAgIHVzZWRNYXJnaW5TdGFydCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5zdGFydC52YWx1ZU9yKDApOwotICAgICAgICB1c2VkTWFyZ2luRW5kID0gY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApOwotICAgIH0KLQotICAgIGlmICghdXNlZE1h
cmdpblN0YXJ0ICYmICF1c2VkTWFyZ2luRW5kKSB7Ci0gICAgICAgIC8vICMzCi0gICAgICAgIGF1
dG8gbWFyZ2luU3RhcnRBbmRFbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJv
cmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyAqcmlnaHQpOwotICAgICAgICBpZiAobWFyZ2luU3RhcnRBbmRFbmQgPj0gMCkgewotICAg
ICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gbWFyZ2luU3RhcnRBbmRFbmQgLyAyOwotICAgICAg
ICAgICAgdXNlZE1hcmdpbkVuZCA9IHVzZWRNYXJnaW5TdGFydDsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgdXNlZE1hcmdpblN0YXJ0ID0gMF9sdTsKLSAgICAgICAgICAgICAgICB1c2VkTWFyZ2luRW5k
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArICpyaWdodCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVzZWRN
YXJnaW5FbmQgPSAwX2x1OwotICAgICAgICAgICAgICAgIHVzZWRNYXJnaW5TdGFydCA9IGNvbnRh
aW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lk
dGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vICM0Ci0gICAgaWYg
KCFsZWZ0KQotICAgICAgICBsZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKnVzZWRNYXJn
aW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0
ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCArICpyaWdodCk7Ci0KLSAgICBpZiAoIXJp
Z2h0KQotICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgKnVz
ZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGlu
Z1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCk7Ci0KLSAgICBpZiAoIXVzZWRN
YXJnaW5TdGFydCkKLSAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdS
aWdodCArIGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJnaW5FbmQgKyAqcmlnaHQpOwotCi0gICAgaWYg
KCF1c2VkTWFyZ2luRW5kKQotICAgICAgICB1c2VkTWFyZ2luRW5kID0gY29udGFpbmluZ0Jsb2Nr
V2lkdGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdM
ZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7Ci0KLSAg
ICBhdXRvIGJveFdpZHRoID0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQg
KyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNl
ZE1hcmdpbkVuZCArICpyaWdodCk7Ci0gICAgaWYgKGJveFdpZHRoID4gY29udGFpbmluZ0Jsb2Nr
V2lkdGgpIHsKLSAgICAgICAgLy8gIzUgT3Zlci1jb25zdHJhaW5lZD8KLSAgICAgICAgaWYgKGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9j
a1dpZHRoIC0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5n
TGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVu
ZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0
aCAtICgqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGgg
KyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0KTsK
LSAgICB9Ci0KLSAgICBBU1NFUlQobGVmdCk7Ci0gICAgQVNTRVJUKHJpZ2h0KTsKLSAgICBBU1NF
UlQodXNlZE1hcmdpblN0YXJ0KTsKLSAgICBBU1NFUlQodXNlZE1hcmdpbkVuZCk7Ci0KLSAgICAv
LyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVk
IGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgotICAgIC8vIEF0IHRoaXMgcG9p
bnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRo
ZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUg
c3lzdGVtLgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGhv
cml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKLSAgICAqbGVmdCArPSBjb250YWluaW5n
QmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotICAgICpyaWdodCArPSBjb250YWluaW5nQmxvY2tQ
YWRkaW5nVmVydGljYWxFZGdlOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250
ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlvbl1bV2lkdGhdW01hcmdpbl0gLT4gb3V0LW9m
LWZsb3cgcmVwbGFjZWQgLT4gbGVmdCgiIDw8ICpsZWZ0IDw8ICJweCkgcmlnaHQoIiAgPDwgKnJp
Z2h0IDw8ICJweCkgd2lkdGgoIiA8PCB3aWR0aCA8PCAicHgpIG1hcmdpbigiIDw8ICp1c2VkTWFy
Z2luU3RhcnQgPDwgInB4LCAiICA8PCAqdXNlZE1hcmdpbkVuZCA8PCAicHgpIGxheW91dEJveCgi
IDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOwotICAgIHJldHVybiB7ICpsZWZ0LCAqcmlnaHQsIHsg
d2lkdGgsIHsgKnVzZWRNYXJnaW5TdGFydCwgKnVzZWRNYXJnaW5FbmQgfSB9IH07Ci19Ci0KLUNv
bnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wbGlj
YXRlZENhc2VzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVz
JiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFsYXlvdXRC
b3guaXNSZXBsYWNlZEJveCgpKTsKLSAgICAvLyBUT0RPOiBVc2UgY29tcGxpY2F0ZWQtY2FzZSBm
b3IgZG9jdW1lbnQgcmVuZGVyZXIgZm9yIG5vdyAoc2VlIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4pLgotICAgIEFTU0VSVCgobGF5b3V0Qm94
LmlzQmxvY2tMZXZlbEJveCgpICYmIGxheW91dEJveC5pc0luRmxvdygpICYmICFsYXlvdXRCb3gu
aXNPdmVyZmxvd1Zpc2libGUoKSkgfHwgbGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSB8fCBs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNEb2N1bWVudEJv
eCgpIHx8IGxheW91dEJveC5pc1RhYmxlQm94KCkpOwotCi0gICAgLy8gMTAuNi42IENvbXBsaWNh
dGVkIGNhc2VzCi0gICAgLy8KLSAgICAvLyBCbG9jay1sZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1l
bnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292ZXJmbG93JyBkb2VzIG5vdCBjb21wdXRlIHRvICd2
aXNpYmxlJyAoZXhjZXB0IGlmIHRoZSAnb3ZlcmZsb3cnIHByb3BlcnR5J3MgdmFsdWUgaGFzIGJl
ZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQpLgotICAgIC8vICdJbmxpbmUtYmxvY2snLCBu
b24tcmVwbGFjZWQgZWxlbWVudHMuCi0gICAgLy8gRmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVt
ZW50cy4KLSAgICAvLwotICAgIC8vIDEuIElmICdtYXJnaW4tdG9wJywgb3IgJ21hcmdpbi1ib3R0
b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMgMC4KLSAgICAvLyAyLiBJZiAnaGVp
Z2h0JyBpcyAnYXV0bycsIHRoZSBoZWlnaHQgZGVwZW5kcyBvbiB0aGUgZWxlbWVudCdzIGRlc2Nl
bmRhbnRzIHBlciAxMC42LjcuCi0KLSAgICBhdXRvIGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkg
OiBjb21wdXRlZEhlaWdodChsYXlvdXRCb3gpOwotICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzKTsKLSAgICAvLyAjMQotICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2lu
ID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVy
LnZhbHVlT3IoMCkgfTsgCi0gICAgLy8gIzIKLSAgICBpZiAoIWhlaWdodCkgewotICAgICAgICBB
U1NFUlQoaXNIZWlnaHRBdXRvKGxheW91dEJveCkpOwotICAgICAgICBpZiAoIWlzPENvbnRhaW5l
ckJveD4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLmhh
c0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAgICAgICAgICAgaGVpZ2h0ID0gMF9sdTsKLSAg
ICAgICAgZWxzZSBpZiAobGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSAmJiAhbGF5b3V0Qm94LmVz
dGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgYXV0byYgZG9jdW1l
bnRCb3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCk7Ci0gICAgICAgICAgICBh
dXRvIHRvcCA9IEJveEdlb21ldHJ5OjptYXJnaW5Cb3hSZWN0KGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3goKmRvY3VtZW50Qm94LmZpcnN0SW5GbG93Q2hpbGQoKSkpLnRvcCgpOwot
ICAgICAgICAgICAgYXV0byBib3R0b20gPSBCb3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmb3Jt
YXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpkb2N1bWVudEJveC5sYXN0SW5GbG93Q2hp
bGQoKSkpLmJvdHRvbSgpOwotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgKHF1aXJr
PykgYmVoYXZpb3Igc2luY2UgdGhlIGRvY3VtZW50IGJveCBpcyBub3QgYSBmb3JtYXR0aW5nIGNv
bnRleHQgcm9vdCBhbmQKLSAgICAgICAgICAgIC8vIGFsbCB0aGUgZmxvYXQgYm94ZXMgZW5kIHVw
IGF0IHRoZSBJQ0IgbGV2ZWwuCi0gICAgICAgICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Js
b2NrID0gZG9jdW1lbnRCb3guZm9ybWF0dGluZ0NvbnRleHRSb290KCk7Ci0gICAgICAgICAgICBh
dXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IGZvcm1hdHRpbmdDb250ZXh0
KCksIGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoaW5pdGlhbENvbnRh
aW5pbmdCbG9jaykuZmxvYXRpbmdTdGF0ZSgpIH07Ci0gICAgICAgICAgICBpZiAoYXV0byBmbG9h
dEJvdHRvbSA9IGZsb2F0aW5nQ29udGV4dC5ib3R0b20oKSkgewotICAgICAgICAgICAgICAgIGJv
dHRvbSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KCpmbG9hdEJvdHRvbSwgYm90dG9tKTsKLSAgICAg
ICAgICAgICAgICBhdXRvIGZsb2F0VG9wID0gZmxvYXRpbmdDb250ZXh0LnRvcCgpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVChmbG9hdFRvcCk7Ci0gICAgICAgICAgICAgICAgdG9wID0gc3RkOjpt
aW48TGF5b3V0VW5pdD4oKmZsb2F0VG9wLCB0b3ApOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaGVpZ2h0ID0gYm90dG9tIC0gdG9wOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKGxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwotICAgICAg
ICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChkb3du
Y2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
QVNTRVJUKGhlaWdodCk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRM
YXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAtPiBmbG9hdGluZyBub24tcmVwbGFj
ZWQgLT4gaGVpZ2h0KCIgPDwgKmhlaWdodCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRWZXJ0aWNh
bE1hcmdpbi5iZWZvcmUgPDwgInB4LCAiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciA8PCAi
cHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKLSAgICByZXR1cm4gQ29u
dGVudEhlaWdodEFuZE1hcmdpbiB7ICpoZWlnaHQsIHVzZWRWZXJ0aWNhbE1hcmdpbiB9OwotfQot
Ci1Db250ZW50V2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9h
dGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29u
c3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVz
KQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSAmJiAhbGF5
b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7Ci0KLSAgICAvLyAxMC4zLjUgRmxvYXRpbmcsIG5vbi1y
ZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAgLy8gMS4gSWYgJ21hcmdpbi1sZWZ0Jywgb3Ig
J21hcmdpbi1yaWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBp
cyAnMCcuCi0gICAgLy8gMi4gSWYgJ3dpZHRoJyBpcyBjb21wdXRlZCBhcyAnYXV0bycsIHRoZSB1
c2VkIHZhbHVlIGlzIHRoZSAic2hyaW5rLXRvLWZpdCIgd2lkdGguCi0KLSAgICBhdXRvIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4o
bGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotCi0gICAgLy8gIzEKLSAgICBhdXRv
IHVzZWRIb3Jpem9udGFsbE1hcmdpbiA9IFVzZWRIb3Jpem9udGFsTWFyZ2luIHsgY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
bi5lbmQudmFsdWVPcigwKSB9OwotICAgIC8vICMyCi0gICAgYXV0byB3aWR0aCA9IG92ZXJyaWRk
ZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lk
dGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2lj
YWxXaWR0aCk7Ci0gICAgaWYgKCF3aWR0aCkKLSAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdp
ZHRoKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCk7Ci0KLSAg
ICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dp
ZHRoXVtNYXJnaW5dIC0+IGZsb2F0aW5nIG5vbi1yZXBsYWNlZCAtPiB3aWR0aCgiIDw8ICp3aWR0
aCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRIb3Jpem9udGFsbE1hcmdpbi5zdGFydCA8PCAicHgs
ICIgPDwgdXNlZEhvcml6b250YWxsTWFyZ2luLmVuZCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8
ICZsYXlvdXRCb3ggPDwgIikiKTsKLSAgICByZXR1cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsg
KndpZHRoLCB1c2VkSG9yaXpvbnRhbGxNYXJnaW4gfTsKLX0KLQotQ29udGVudEhlaWdodEFuZE1h
cmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRDb250ZW50
SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAg
IEFTU0VSVChyZXBsYWNlZEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLQotICAgIC8vIDEw
LjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1l
bnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJwotICAgIC8vIHJlcGxhY2VkIGVsZW1l
bnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGluZyByZXBsYWNlZCBlbGVtZW50cwotICAgIExP
R19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0
XVtNYXJnaW5dIC0+IGZsb2F0aW5nIHJlcGxhY2VkIC0+IHJlZGlyZWN0ZWQgdG8gaW5saW5lIHJl
cGxhY2VkIik7Ci0gICAgcmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdp
bihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIG92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcyk7Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3Qg
UmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewotICAgIEFTU0VSVChyZXBsYWNlZEJveC5pc0Zs
b2F0aW5nUG9zaXRpb25lZCgpKTsKLQotICAgIC8vIDEwLjMuNiBGbG9hdGluZywgcmVwbGFjZWQg
ZWxlbWVudHMKLSAgICAvLwotICAgIC8vIDEuIElmICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1y
aWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAnMCcuCi0g
ICAgLy8gMi4gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBp
bmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCi0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJn
aW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250
ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWlnaHRdW01hcmdpbl0gLT4gZmxvYXRpbmcgcmVwbGFj
ZWQgLT4gcmVkaXJlY3RlZCB0byBpbmxpbmUgcmVwbGFjZWQiKTsKLSAgICBhdXRvIHVzZWRNYXJn
aW4gPSBVc2VkSG9yaXpvbnRhbE1hcmdpbiB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFy
dC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsK
LSAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCB7IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFs
dWVzLndpZHRoLCB1c2VkTWFyZ2luIH0pOwotfQotCi1WZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gm
IGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3Ry
YWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNv
bnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBj
b25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwot
Ci0gICAgaWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQotICAgICAgICByZXR1cm4gb3V0
T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGRvd25jYXN0PENvbnRhaW5lckJveD4o
bGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBv
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotICAgIHJldHVybiBvdXRPZkZsb3dSZXBsYWNlZFZl
cnRpY2FsR2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250
YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFs
dWVzKTsKLX0KLQotSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6b3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVy
dGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewotICAgIEFTU0VS
VChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotCi0gICAgaWYgKCFsYXlvdXRC
b3guaXNSZXBsYWNlZEJveCgpKQotICAgICAgICByZXR1cm4gb3V0T2ZGbG93Tm9uUmVwbGFjZWRI
b3Jpem9udGFsR2VvbWV0cnkoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLCBob3Jp
em9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKLSAgICByZXR1
cm4gb3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFjZWRC
b3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50
cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOwotfQotCi1Db250ZW50SGVpZ2h0QW5kTWFy
Z2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5k
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBv
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5p
c0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLQotICAgIGlmICghbGF5b3V0Qm94LmlzUmVwbGFjZWRC
b3goKSkKLSAgICAgICAgcmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0Qm94LCBob3Jpem9u
dGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci0gICAgcmV0dXJuIGZs
b2F0aW5nUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94
PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcyk7Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmZsb2F0aW5nQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29u
c3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVz
KQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSk7Ci0KLSAg
ICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAgICAgIHJldHVybiBmbG9hdGlu
Z05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgcmV0dXJuIGZsb2F0
aW5nUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxh
eW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1
ZXMpOwotfQotCi1Db250ZW50SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2Vk
Qm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMsIE9wdGlvbmFsPFZlcnRpY2FsQ29uc3RyYWludHM+IHZlcnRpY2FsQ29uc3Ry
YWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2Fs
VmFsdWVzKSBjb25zdAotewotICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMs
IGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJs
b2NrJyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVwbGFj
ZWQgZWxlbWVudHMKLSAgICAvLwotICAgIC8vIDEuIElmICdtYXJnaW4tdG9wJywgb3IgJ21hcmdp
bi1ib3R0b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMgMC4KLSAgICAvLyAyLiBJ
ZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUgY29tcHV0ZWQgdmFsdWVzIG9mICdhdXRv
JyBhbmQgdGhlIGVsZW1lbnQgYWxzbyBoYXMgYW4gaW50cmluc2ljIGhlaWdodCwgdGhlbiB0aGF0
IGludHJpbnNpYyBoZWlnaHQgaXMgdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcuCi0gICAgLy8g
My4gT3RoZXJ3aXNlLCBpZiAnaGVpZ2h0JyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycs
IGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIHRoZW4gdGhlIHVzZWQgdmFs
dWUgb2YgJ2hlaWdodCcgaXM6Ci0gICAgLy8gICAgKHVzZWQgd2lkdGgpIC8gKGludHJpbnNpYyBy
YXRpbykKLSAgICAvLyA0LiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVkIHZh
bHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0
aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4K
LSAgICAvLyA1LiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9m
ICdhdXRvJywgYnV0IG5vbmUgb2YgdGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG1ldCwgdGhlbiB0
aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBtdXN0IGJlIHNldCB0bwotICAgIC8vICAgIHRoZSBo
ZWlnaHQgb2YgdGhlIGxhcmdlc3QgcmVjdGFuZ2xlIHRoYXQgaGFzIGEgMjoxIHJhdGlvLCBoYXMg
YSBoZWlnaHQgbm90IGdyZWF0ZXIgdGhhbiAxNTBweCwgYW5kIGhhcyBhIHdpZHRoIG5vdCBncmVh
dGVyIHRoYW4gdGhlIGRldmljZSB3aWR0aC4KLQotICAgIC8vICMxCi0gICAgYXV0byYgZm9ybWF0
dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8gY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKHJlcGxh
Y2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFy
Z2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyLnZhbHVlT3IoMCkgfTsKLSAgICBhdXRvJiBzdHlsZSA9IHJlcGxhY2VkQm94LnN0eWxlKCk7
Ci0KLSAgICBhdXRvIGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgPyBv
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBjb21wdXRlZEhlaWdodChy
ZXBsYWNlZEJveCwgdmVydGljYWxDb25zdHJhaW50cyA/IHZlcnRpY2FsQ29uc3RyYWludHMtPmxv
Z2ljYWxIZWlnaHQgOiBXVEY6Om51bGxvcHQpOwotICAgIGF1dG8gaGVpZ2h0SXNBdXRvID0gIW92
ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgJiYgaXNIZWlnaHRBdXRvKHJlcGxhY2VkQm94
KTsKLSAgICBhdXRvIHdpZHRoSXNBdXRvID0gc3R5bGUubG9naWNhbFdpZHRoKCkuaXNBdXRvKCk7
Ci0KLSAgICBpZiAoaGVpZ2h0SXNBdXRvICYmIHdpZHRoSXNBdXRvICYmIHJlcGxhY2VkQm94Lmhh
c0ludHJpbnNpY0hlaWdodCgpKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIGhlaWdodCA9IHJl
cGxhY2VkQm94LmludHJpbnNpY0hlaWdodCgpOwotICAgIH0gZWxzZSBpZiAoaGVpZ2h0SXNBdXRv
ICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpIHsKLSAgICAgICAgLy8gIzMKLSAg
ICAgICAgYXV0byB1c2VkV2lkdGggPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChy
ZXBsYWNlZEJveCkuY29udGVudEJveFdpZHRoKCk7Ci0gICAgICAgIGhlaWdodCA9IHVzZWRXaWR0
aCAvIHJlcGxhY2VkQm94LmludHJpbnNpY1JhdGlvKCk7Ci0gICAgfSBlbHNlIGlmIChoZWlnaHRJ
c0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkpIHsKLSAgICAgICAgLy8g
IzQKLSAgICAgICAgaGVpZ2h0ID0gcmVwbGFjZWRCb3guaW50cmluc2ljSGVpZ2h0KCk7Ci0gICAg
fSBlbHNlIGlmIChoZWlnaHRJc0F1dG8pIHsKLSAgICAgICAgLy8gIzUKLSAgICAgICAgaGVpZ2h0
ID0geyAxNTAgfTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGVpZ2h0KTsKLQotICAgIExPR19XSVRI
X1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJn
aW5dIC0+IGluZmxvdyByZXBsYWNlZCAtPiBoZWlnaHQoIiA8PCAqaGVpZ2h0IDw8ICJweCkgbWFy
Z2luKCIgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSA8PCAicHgsICIgPDwgdXNlZFZlcnRp
Y2FsTWFyZ2luLmFmdGVyIDw8ICJweCkgLT4gbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8
ICIpIik7Ci0gICAgcmV0dXJuIHsgKmhlaWdodCwgdXNlZFZlcnRpY2FsTWFyZ2luIH07Ci19Ci0K
LUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGlu
ZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNl
ZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMs
IE9wdGlvbmFsPFZlcnRpY2FsQ29uc3RyYWludHM+IHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0
IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykK
LXsKLSAgICAvLyAxMC4zLjIgSW5saW5lLCByZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAg
Ly8gQSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycgZm9yICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdp
bi1yaWdodCcgYmVjb21lcyBhIHVzZWQgdmFsdWUgb2YgJzAnLgotICAgIC8vCi0gICAgLy8gMS4g
SWYgJ2hlaWdodCcgYW5kICd3aWR0aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0
bycgYW5kIHRoZSBlbGVtZW50IGFsc28gaGFzIGFuIGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0
IGludHJpbnNpYyB3aWR0aCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnLgotICAgIC8vCi0g
ICAgLy8gMi4gSWYgJ2hlaWdodCcgYW5kICd3aWR0aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVl
cyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGhhcyBubyBpbnRyaW5zaWMgd2lkdGgsIGJ1dCBk
b2VzIGhhdmUgYW4gaW50cmluc2ljIGhlaWdodCBhbmQgaW50cmluc2ljIHJhdGlvOwotICAgIC8v
ICAgIG9yIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCAnaGVpZ2h0
JyBoYXMgc29tZSBvdGhlciBjb21wdXRlZCB2YWx1ZSwgYW5kIHRoZSBlbGVtZW50IGRvZXMgaGF2
ZSBhbiBpbnRyaW5zaWMgcmF0aW87Ci0gICAgLy8gICAgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAn
d2lkdGgnIGlzOiAodXNlZCBoZWlnaHQpICogKGludHJpbnNpYyByYXRpbykKLSAgICAvLwotICAg
IC8vIDMuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgnIGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMg
b2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIGJ1dCBubyBp
bnRyaW5zaWMgaGVpZ2h0IG9yIHdpZHRoLAotICAgIC8vICAgIHRoZW4gdGhlIHVzZWQgdmFsdWUg
b2YgJ3dpZHRoJyBpcyB1bmRlZmluZWQgaW4gQ1NTIDIuMi4gSG93ZXZlciwgaXQgaXMgc3VnZ2Vz
dGVkIHRoYXQsIGlmIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mgd2lkdGggZG9lcyBub3QgaXRzZWxm
IGRlcGVuZCBvbiB0aGUgcmVwbGFjZWQKLSAgICAvLyAgICBlbGVtZW50J3Mgd2lkdGgsIHRoZW4g
dGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGNvbnN0cmFp
bnQgZXF1YXRpb24gdXNlZCBmb3IgYmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBp
biBub3JtYWwgZmxvdy4KLSAgICAvLwotICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgJ3dpZHRoJyBo
YXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50
cmluc2ljIHdpZHRoLCB0aGVuIHRoYXQgaW50cmluc2ljIHdpZHRoIGlzIHRoZSB1c2VkIHZhbHVl
IG9mICd3aWR0aCcuCi0gICAgLy8KLSAgICAvLyA1LiBPdGhlcndpc2UsIGlmICd3aWR0aCcgaGFz
IGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBidXQgbm9uZSBvZiB0aGUgY29uZGl0aW9ucyBh
Ym92ZSBhcmUgbWV0LCB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgYmVjb21lcyAzMDBw
eC4KLSAgICAvLyAgICBJZiAzMDBweCBpcyB0b28gd2lkZSB0byBmaXQgdGhlIGRldmljZSwgVUFz
IHNob3VsZCB1c2UgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSB0aGF0IGhhcyBh
IDI6MSByYXRpbyBhbmQgZml0cyB0aGUgZGV2aWNlIGluc3RlYWQuCi0KLSAgICBhdXRvIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4o
cmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0KLSAgICBhdXRvIHVzZWRNYXJn
aW5TdGFydCA9IFsmXSB7Ci0gICAgICAgIGlmIChvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy5t
YXJnaW4pCi0gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMubWFy
Z2luLT5zdGFydDsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFy
dC52YWx1ZU9yKDBfbHUpOwotICAgIH07Ci0KLSAgICBhdXRvIHVzZWRNYXJnaW5FbmQgPSBbJl0g
ewotICAgICAgICBpZiAob3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMubWFyZ2luKQotICAgICAg
ICAgICAgcmV0dXJuIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbi0+ZW5kOwotICAg
ICAgICByZXR1cm4gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDBfbHUpOwot
ICAgIH07Ci0KLSAgICBhdXRvIHdpZHRoID0gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lk
dGggPyBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkV2lkdGgocmVw
bGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOwotICAgIGF1dG8g
aGVpZ2h0SXNBdXRvID0gaXNIZWlnaHRBdXRvKHJlcGxhY2VkQm94KTsKLSAgICBhdXRvIGhlaWdo
dCA9IGNvbXB1dGVkSGVpZ2h0KHJlcGxhY2VkQm94LCB2ZXJ0aWNhbENvbnN0cmFpbnRzID8gdmVy
dGljYWxDb25zdHJhaW50cy0+bG9naWNhbEhlaWdodCA6IFdURjo6bnVsbG9wdCk7Ci0KLSAgICBp
ZiAoIXdpZHRoICYmIGhlaWdodElzQXV0byAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0
aCgpKSB7Ci0gICAgICAgIC8vICMxCi0gICAgICAgIHdpZHRoID0gcmVwbGFjZWRCb3guaW50cmlu
c2ljV2lkdGgoKTsKLSAgICB9IGVsc2UgaWYgKCghd2lkdGggJiYgaGVpZ2h0SXNBdXRvICYmICFy
ZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgpICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNp
Y0hlaWdodCgpICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpCi0gICAgICAgIHx8
ICghd2lkdGggJiYgaGVpZ2h0ICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpKSB7
Ci0gICAgICAgIC8vICMyCi0gICAgICAgIHdpZHRoID0gaGVpZ2h0LnZhbHVlT3IocmVwbGFjZWRC
b3guaGFzSW50cmluc2ljSGVpZ2h0KCkpICogcmVwbGFjZWRCb3guaW50cmluc2ljUmF0aW8oKTsK
LSAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiBoZWlnaHRJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFz
SW50cmluc2ljUmF0aW8oKSAmJiAhcmVwbGFjZWRCb3guaGFzSW50cmluc2ljV2lkdGgoKSAmJiAh
cmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gIzMKLSAgICAg
ICAgLy8gRklYTUU6IHVuZGVmaW5lZCBidXQgc3VyZWx5IGRvYWJsZS4KLSAgICAgICAgQVNTRVJU
X05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiByZXBsYWNl
ZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgpKSB7Ci0gICAgICAgIC8vICM0Ci0gICAgICAgIHdpZHRo
ID0gcmVwbGFjZWRCb3guaW50cmluc2ljV2lkdGgoKTsKLSAgICB9IGVsc2UgaWYgKCF3aWR0aCkg
ewotICAgICAgICAvLyAjNQotICAgICAgICB3aWR0aCA9IHsgMzAwIH07Ci0gICAgfQotCi0gICAg
QVNTRVJUKHdpZHRoKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExh
eW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5mbG93IHJlcGxhY2VkIC0+IHdp
ZHRoKCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZE1hcmdpblN0YXJ0KCkgPDwg
InB4LCAiIDw8IHVzZWRNYXJnaW5FbmQoKSA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZyZXBs
YWNlZEJveCA8PCAiKSIpOwotICAgIHJldHVybiB7ICp3aWR0aCwgeyB1c2VkTWFyZ2luU3RhcnQo
KSwgdXNlZE1hcmdpbkVuZCgpIH0gfTsKLX0KLQotTGF5b3V0U2l6ZSBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25zdCBCb3gmIGxh
eW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWlu
dHMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSk7
Ci0KLSAgICAvLyA5LjQuMyBSZWxhdGl2ZSBwb3NpdGlvbmluZwotICAgIC8vCi0gICAgLy8gVGhl
ICd0b3AnIGFuZCAnYm90dG9tJyBwcm9wZXJ0aWVzIG1vdmUgcmVsYXRpdmVseSBwb3NpdGlvbmVk
IGVsZW1lbnQocykgdXAgb3IgZG93biB3aXRob3V0IGNoYW5naW5nIHRoZWlyIHNpemUuCi0gICAg
Ly8gVG9wJyBtb3ZlcyB0aGUgYm94ZXMgZG93biwgYW5kICdib3R0b20nIG1vdmVzIHRoZW0gdXAu
IFNpbmNlIGJveGVzIGFyZSBub3Qgc3BsaXQgb3Igc3RyZXRjaGVkIGFzIGEgcmVzdWx0IG9mICd0
b3AnIG9yICdib3R0b20nLCB0aGUgdXNlZCB2YWx1ZXMgYXJlIGFsd2F5czogdG9wID0gLWJvdHRv
bS4KLSAgICAvLwotICAgIC8vIDEuIElmIGJvdGggYXJlICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1
ZXMgYXJlIGJvdGggJzAnLgotICAgIC8vIDIuIElmIG9uZSBvZiB0aGVtIGlzICdhdXRvJywgaXQg
YmVjb21lcyB0aGUgbmVnYXRpdmUgb2YgdGhlIG90aGVyLgotICAgIC8vIDMuIElmIG5laXRoZXIg
aXMgJ2F1dG8nLCAnYm90dG9tJyBpcyBpZ25vcmVkIChpLmUuLCB0aGUgdXNlZCB2YWx1ZSBvZiAn
Ym90dG9tJyB3aWxsIGJlIG1pbnVzIHRoZSB2YWx1ZSBvZiAndG9wJykuCi0KLSAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGgg
PSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwotCi0gICAgYXV0byB0b3AgPSBj
b21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxUb3AoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwot
ICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsQm90dG9tKCksIGNv
bnRhaW5pbmdCbG9ja1dpZHRoKTsKLQotICAgIGlmICghdG9wICYmICFib3R0b20pIHsKLSAgICAg
ICAgLy8gIzEKLSAgICAgICAgdG9wID0gYm90dG9tID0geyAwIH07Ci0gICAgfSBlbHNlIGlmICgh
dG9wKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIHRvcCA9IC0qYm90dG9tOwotICAgIH0gZWxz
ZSBpZiAoIWJvdHRvbSkgewotICAgICAgICAvLyAjMwotICAgICAgICBib3R0b20gPSAtKnRvcDsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyAjNAotICAgICAgICBib3R0b20gPSBXVEY6Om51bGxv
cHQ7Ci0gICAgfQotCi0gICAgLy8gRm9yIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50cywg
J2xlZnQnIGFuZCAncmlnaHQnIG1vdmUgdGhlIGJveChlcykgaG9yaXpvbnRhbGx5LCB3aXRob3V0
IGNoYW5naW5nIHRoZWlyIHNpemUuCi0gICAgLy8gJ0xlZnQnIG1vdmVzIHRoZSBib3hlcyB0byB0
aGUgcmlnaHQsIGFuZCAncmlnaHQnIG1vdmVzIHRoZW0gdG8gdGhlIGxlZnQuCi0gICAgLy8gU2lu
Y2UgYm94ZXMgYXJlIG5vdCBzcGxpdCBvciBzdHJldGNoZWQgYXMgYSByZXN1bHQgb2YgJ2xlZnQn
IG9yICdyaWdodCcsIHRoZSB1c2VkIHZhbHVlcyBhcmUgYWx3YXlzOiBsZWZ0ID0gLXJpZ2h0Lgot
ICAgIC8vCi0gICAgLy8gMS4gSWYgYm90aCAnbGVmdCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyAo
dGhlaXIgaW5pdGlhbCB2YWx1ZXMpLCB0aGUgdXNlZCB2YWx1ZXMgYXJlICcwJyAoaS5lLiwgdGhl
IGJveGVzIHN0YXkgaW4gdGhlaXIgb3JpZ2luYWwgcG9zaXRpb24pLgotICAgIC8vIDIuIElmICds
ZWZ0JyBpcyAnYXV0bycsIGl0cyB1c2VkIHZhbHVlIGlzIG1pbnVzIHRoZSB2YWx1ZSBvZiAncmln
aHQnIChpLmUuLCB0aGUgYm94ZXMgbW92ZSB0byB0aGUgbGVmdCBieSB0aGUgdmFsdWUgb2YgJ3Jp
Z2h0JykuCi0gICAgLy8gMy4gSWYgJ3JpZ2h0JyBpcyBzcGVjaWZpZWQgYXMgJ2F1dG8nLCBpdHMg
dXNlZCB2YWx1ZSBpcyBtaW51cyB0aGUgdmFsdWUgb2YgJ2xlZnQnLgotICAgIC8vIDQuIElmIG5l
aXRoZXIgJ2xlZnQnIG5vciAncmlnaHQnIGlzICdhdXRvJywgdGhlIHBvc2l0aW9uIGlzIG92ZXIt
Y29uc3RyYWluZWQsIGFuZCBvbmUgb2YgdGhlbSBoYXMgdG8gYmUgaWdub3JlZC4KLSAgICAvLyAg
ICBJZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMg
J2x0cicsIHRoZSB2YWx1ZSBvZiAnbGVmdCcgd2lucyBhbmQgJ3JpZ2h0JyBiZWNvbWVzIC0nbGVm
dCcuCi0gICAgLy8gICAgSWYgJ2RpcmVjdGlvbicgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMg
J3J0bCcsICdyaWdodCcgd2lucyBhbmQgJ2xlZnQnIGlzIGlnbm9yZWQuCi0KLSAgICBhdXRvIGxl
ZnQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKTsKLSAgICBhdXRvIHJpZ2h0ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsUmlnaHQo
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotCi0gICAgaWYgKCFsZWZ0ICYmICFyaWdodCkgewot
ICAgICAgICAvLyAjMQotICAgICAgICBsZWZ0ID0gcmlnaHQgPSB7IDAgfTsKLSAgICB9IGVsc2Ug
aWYgKCFsZWZ0KSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIGxlZnQgPSAtKnJpZ2h0OwotICAg
IH0gZWxzZSBpZiAoIXJpZ2h0KSB7Ci0gICAgICAgIC8vICMzCi0gICAgICAgIHJpZ2h0ID0gLSps
ZWZ0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vICM0Ci0gICAgICAgIGF1dG8gaXNMZWZ0VG9S
aWdodERpcmVjdGlvbiA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24p
Ci0gICAgICAgICAgICByaWdodCA9IC0qbGVmdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bGVmdCA9IFdURjo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIWJvdHRvbSB8fCAqdG9w
ID09IC0qYm90dG9tKTsKLSAgICBBU1NFUlQoIWxlZnQgfHwgKmxlZnQgPT0gLSpyaWdodCk7Ci0K
LSAgICBhdXRvIHRvcFBvc2l0aW9uT2Zmc2V0ID0gKnRvcDsKLSAgICBhdXRvIGxlZnRQb3NpdGlv
bk9mZnNldCA9IGxlZnQudmFsdWVPcigtKnJpZ2h0KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShG
b3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbUG9zaXRpb25dIC0+IHBvc2l0aW9u
ZWQgaW5mbG93IC0+IHRvcCBvZmZzZXQoIiA8PCB0b3BQb3NpdGlvbk9mZnNldCA8PCAicHgpIGxl
ZnQgb2Zmc2V0KCIgPDwgbGVmdFBvc2l0aW9uT2Zmc2V0IDw8ICJweCkgbGF5b3V0Qm94KCIgPDwg
JmxheW91dEJveCA8PCAiKSIpOwotICAgIHJldHVybiB7IGxlZnRQb3NpdGlvbk9mZnNldCwgdG9w
UG9zaXRpb25PZmZzZXQgfTsKLX0KLQotaW5saW5lIHN0YXRpYyBXcml0aW5nTW9kZSB1c2VkV3Jp
dGluZ01vZGUoY29uc3QgQm94JiBsYXlvdXRCb3gpCi17Ci0gICAgLy8gaHR0cHM6Ly93d3cudzMu
b3JnL1RSL2Nzcy13cml0aW5nLW1vZGVzLTQvI2xvZ2ljYWwtZGlyZWN0aW9uLWxheW91dAotICAg
IC8vIEZsb3ctcmVsYXRpdmUgZGlyZWN0aW9ucyBhcmUgY2FsY3VsYXRlZCB3aXRoIHJlc3BlY3Qg
dG8gdGhlIHdyaXRpbmcgbW9kZSBvZiB0aGUgY29udGFpbmluZyBibG9jayBvZiB0aGUgYm94Lgot
ICAgIC8vIEZvciBpbmxpbmUtbGV2ZWwgYm94ZXMsIHRoZSB3cml0aW5nIG1vZGUgb2YgdGhlIHBh
cmVudCBib3ggaXMgdXNlZCBpbnN0ZWFkLgotICAgIHJldHVybiBsYXlvdXRCb3guaXNJbmxpbmVM
ZXZlbEJveCgpID8gbGF5b3V0Qm94LnBhcmVudCgpLnN0eWxlKCkud3JpdGluZ01vZGUoKSA6IGxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKS5zdHlsZSgpLndyaXRpbmdNb2RlKCk7Ci19Ci0KLUVk
Z2VzIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRCb3JkZXIoY29uc3QgQm94
JiBsYXlvdXRCb3gpIGNvbnN0Ci17Ci0gICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUo
KTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8
PCAiW0JvcmRlcl0gLT4gbGF5b3V0Qm94OiAiIDw8ICZsYXlvdXRCb3gpOwotICAgIHJldHVybiB7
Ci0gICAgICAgIHsgTGF5b3V0VW5pdChzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSksIExheW91dFVu
aXQoc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpKSB9LAotICAgICAgICB7IExheW91dFVuaXQoc3R5
bGUuYm9yZGVyVG9wV2lkdGgoKSksIExheW91dFVuaXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgo
KSkgfQotICAgIH07Ci19Ci0KLU9wdGlvbmFsPEVkZ2VzPiBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgTGF5b3V0
VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3QKLXsKLSAgICBpZiAoIWxheW91dEJveC5p
c1BhZGRpbmdBcHBsaWNhYmxlKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIExPR19XSVRIX1NUUkVBTShG
b3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbUGFkZGluZ10gLT4gbGF5b3V0Qm94
OiAiIDw8ICZsYXlvdXRCb3gpOwotICAgIHJldHVybiBFZGdlcyB7Ci0gICAgICAgIHsgdmFsdWVG
b3JMZW5ndGgoc3R5bGUucGFkZGluZ0xlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCB2YWx1
ZUZvckxlbmd0aChzdHlsZS5wYWRkaW5nUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH0s
Ci0gICAgICAgIHsgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFkZGluZ1RvcCgpLCBjb250YWluaW5n
QmxvY2tXaWR0aCksIHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBhZGRpbmdCb3R0b20oKSwgY29udGFp
bmluZ0Jsb2NrV2lkdGgpIH0KLSAgICB9OwotfQotCi1Db21wdXRlZEhvcml6b250YWxNYXJnaW4g
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4oY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKSBjb25zdAotewotICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxl
KCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50
cy5sb2dpY2FsV2lkdGg7Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHVzZWRXcml0
aW5nTW9kZShsYXlvdXRCb3gpKSkKLSAgICAgICAgcmV0dXJuIHsgY29tcHV0ZWRWYWx1ZShzdHls
ZS5tYXJnaW5MZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRWYWx1ZShzdHls
ZS5tYXJnaW5SaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkgfTsKLSAgICByZXR1cm4geyBj
b21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNv
bXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9
OwotfQotCi1Db21wdXRlZFZlcnRpY2FsTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAg
YXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9j
a1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICBpZiAoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUodXNlZFdyaXRpbmdNb2RlKGxheW91dEJveCkpKQotICAgICAg
ICByZXR1cm4geyBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblRvcCgpLCBjb250YWluaW5nQmxv
Y2tXaWR0aCksIGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luQm90dG9tKCksIGNvbnRhaW5pbmdC
bG9ja1dpZHRoKSB9OwotICAgIHJldHVybiB7IGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luTGVm
dCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luUmln
aHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07Ci19Ci0KLUZvcm1hdHRpbmdDb250ZXh0OjpJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29u
c3RyYWluQnlNaW5NYXhXaWR0aChjb25zdCBCb3gmIGxheW91dEJveCwgSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aCkgY29uc3QKLXsKLSAgICBhdXRvJiBzdHlsZSA9IGxh
eW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8gbWluV2lkdGggPSBmaXhlZFZhbHVlKHN0eWxlLmxv
Z2ljYWxNaW5XaWR0aCgpKTsKLSAgICBhdXRvIG1heFdpZHRoID0gZml4ZWRWYWx1ZShzdHlsZS5s
b2dpY2FsTWF4V2lkdGgoKSk7Ci0gICAgaWYgKCFtaW5XaWR0aCAmJiAhbWF4V2lkdGgpCi0gICAg
ICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aDsKLQotICAgIGlmIChtYXhXaWR0aCkgewotICAgICAg
ICBpbnRyaW5zaWNXaWR0aC5taW5pbXVtID0gc3RkOjptaW4oKm1heFdpZHRoLCBpbnRyaW5zaWNX
aWR0aC5taW5pbXVtKTsKLSAgICAgICAgaW50cmluc2ljV2lkdGgubWF4aW11bSA9IHN0ZDo6bWlu
KCptYXhXaWR0aCwgaW50cmluc2ljV2lkdGgubWF4aW11bSk7Ci0gICAgfQotCi0gICAgaWYgKG1p
bldpZHRoKSB7Ci0gICAgICAgIGludHJpbnNpY1dpZHRoLm1pbmltdW0gPSBzdGQ6Om1heCgqbWlu
V2lkdGgsIGludHJpbnNpY1dpZHRoLm1pbmltdW0pOwotICAgICAgICBpbnRyaW5zaWNXaWR0aC5t
YXhpbXVtID0gc3RkOjptYXgoKm1pbldpZHRoLCBpbnRyaW5zaWNXaWR0aC5tYXhpbXVtKTsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaW50cmluc2ljV2lkdGgubWluaW11bSA8PSBpbnRyaW5zaWNXaWR0
aC5tYXhpbXVtKTsKLSAgICByZXR1cm4gaW50cmluc2ljV2lkdGg7Ci19Ci0KLUZvcm1hdHRpbmdD
b250ZXh0OjpDb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQgRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5Ojpjb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVy
Qm94JiBjb250YWluZXJCb3gpCi17Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5lckJveCk7Ci0gICAgcmV0dXJuIHsKLSAg
ICAgICAgeyBib3hHZW9tZXRyeS5wYWRkaW5nQm94TGVmdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5n
Qm94V2lkdGgoKSB9LAotICAgICAgICB7IGJveEdlb21ldHJ5LnBhZGRpbmdCb3hUb3AoKSwgYm94
R2VvbWV0cnkucGFkZGluZ0JveEhlaWdodCgpIH0sCi0gICAgICAgIGJveEdlb21ldHJ5LmNvbnRl
bnRCb3hXaWR0aCgpIH07Ci19Ci0KLUZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJhaW50c0Zvcklu
Rmxvd0NvbnRlbnQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb25zdHJhaW50c0Zvcklu
Rmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gsIE9wdGlvbmFsPEVz
Y2FwZVJlYXNvbj4gZXNjYXBlUmVhc29uKQotewotICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChjb250YWluZXJCb3gsIGVzY2FwZVJlYXNv
bik7Ci0gICAgcmV0dXJuIHsgeyBib3hHZW9tZXRyeS5jb250ZW50Qm94TGVmdCgpLCBib3hHZW9t
ZXRyeS5jb250ZW50Qm94V2lkdGgoKSB9LCB7IGJveEdlb21ldHJ5LmNvbnRlbnRCb3hUb3AoKSwg
Y29tcHV0ZWRIZWlnaHQoY29udGFpbmVyQm94KSB9IH07Ci19Ci0KLX0KLX0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0
aW5nQ29udGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggODIxMWIwZGM2MzBjYTIzOTdiYWIzODRmOTgwODMwMzE5MWYyYmQwYS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiTGF5b3V0Qm94LmgiCi0jaW5jbHVkZSAi
TGF5b3V0Qm94R2VvbWV0cnkuaCIKLSNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Js
b2NrLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1MYXlv
dXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmhlaWdodFZhbHVlT2ZOZWFyZXN0Q29u
dGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGNvbnN0IEJveCYgbGF5b3V0Qm94KQotewotICAg
IC8vIEluIHF1aXJrcyBtb2RlLCB3ZSBnbyBhbmQgdHJhdmVycyB0aGUgY29udGFpbmluZyBibG9j
ayBjaGFpbiB0byBmaW5kIGEgYmxvY2sgbGV2ZWwgYm94IHdpdGggZml4ZWQgaGVpZ2h0IHZhbHVl
LCBldmVuIGlmIGl0IG1lYW5zIGxlYXZpbmcKLSAgICAvLyB0aGUgY3VycmVudCBmb3JtYXR0aW5n
IGNvbnRleHQuIEZJWE1FOiBzdXJlbHkgd2UgbmVlZCB0byBkbyBzb21lIHRyaWNrcyBoZXJlIHdo
ZW4gYmxvY2sgZGlyZWN0aW9uIHN1cHBvcnQgaXMgYWRkZWQuCi0gICAgYXV0byYgZm9ybWF0dGlu
Z0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8qIGNvbnRhaW5p
bmdCbG9jayA9ICZsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgTGF5b3V0VW5pdCBi
b2R5QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXI7Ci0gICAgd2hpbGUg
KGNvbnRhaW5pbmdCbG9jaykgewotICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9
IGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIGlmIChj
b250YWluaW5nQmxvY2tIZWlnaHQuaXNGaXhlZCgpKQotICAgICAgICAgICAgcmV0dXJuIExheW91
dFVuaXQoY29udGFpbmluZ0Jsb2NrSGVpZ2h0LnZhbHVlKCkgLSBib2R5QW5kRG9jdW1lbnRWZXJ0
aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXIpOwotCi0gICAgICAgIC8vIElmIHRoZSBvbmx5IGZp
eGVkIHZhbHVlIGJveCB3ZSBmaW5kIGlzIHRoZSBJQ0IsIHRoZW4gaWdub3JlIHRoZSBib2R5IGFu
ZCB0aGUgZG9jdW1lbnQgKHZlcnRpY2FsKSBtYXJnaW4sIHBhZGRpbmcgYW5kIGJvcmRlci4gU28g
bXVjaCBxdWlya2luZXNzLgotICAgICAgICAvLyAtYW5kIGl0J3MgdG90YWxseSBpbnNhbmUgYmVj
YXVzZSBub3cgd2UgZnJlZWx5IHRyYXZlbCBhY3Jvc3MgZm9ybWF0dGluZyBjb250ZXh0IGJvdW5k
YXJpZXMgYW5kIGNvbXB1dGVkIG1hcmdpbnMgYXJlIG5vbmV4aXN0ZW50LgotICAgICAgICBpZiAo
Y29udGFpbmluZ0Jsb2NrLT5pc0JvZHlCb3goKSB8fCBjb250YWluaW5nQmxvY2stPmlzRG9jdW1l
bnRCb3goKSkgewotCi0gICAgICAgICAgICBhdXRvIGdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQuZ2VvbWV0cnkoKTsKLSAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRzID0g
Z2VvbWV0cnkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnRhaW5pbmdCbG9jay0+Y29u
dGFpbmluZ0Jsb2NrKCksIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVSZWFzb246OkZpbmRGaXhl
ZEhlaWdodEFuY2VzdG9yUXVpcmspLmhvcml6b250YWw7Ci0gICAgICAgICAgICBhdXRvIHZlcnRp
Y2FsTWFyZ2luID0gZ2VvbWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbigqY29udGFpbmluZ0Js
b2NrLCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotCi0gICAgICAgICAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCpjb250YWluaW5nQmxvY2ss
IEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVSZWFzb246OkZpbmRGaXhlZEhlaWdodEFuY2VzdG9y
UXVpcmspOwotICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbFBhZGRpbmcgPSBib3hHZW9tZXRyeS5w
YWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52YWx1
ZU9yKDApOwotICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEJvcmRlciA9IGJveEdlb21ldHJ5LmJv
cmRlclRvcCgpICsgYm94R2VvbWV0cnkuYm9yZGVyQm90dG9tKCk7Ci0gICAgICAgICAgICBib2R5
QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXIgKz0gdmVydGljYWxNYXJn
aW4uYmVmb3JlLnZhbHVlT3IoMCkgKyB2ZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApICsg
dmVydGljYWxQYWRkaW5nICsgdmVydGljYWxCb3JkZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoaXM8SW5pdGlhbENvbnRhaW5pbmdCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gJmNvbnRhaW5pbmdCbG9jay0+
Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgfQotICAgIC8vIEluaXRpYWwgY29udGFpbmluZyBibG9j
ayBoYXMgdG8gaGF2ZSBhIGhlaWdodC4KLSAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQuZ2Vv
bWV0cnlGb3JCb3gobGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxvY2soKSwgRm9ybWF0dGlu
Z0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6RmluZEZpeGVkSGVpZ2h0QW5jZXN0b3JRdWlyaykuY29u
dGVudEJveCgpLmhlaWdodCgpIC0gYm9keUFuZERvY3VtZW50VmVydGljYWxNYXJnaW5QYWRkaW5n
QW5kQm9yZGVyOwotfQotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQyZTQ3YzgxYmU5MGQ0M2JjODgwOWE1MGI3YmI0MmU2OGIwMGFlZTgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSwxMTcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdHZW9tZXRyeS5oIgor
CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJCbG9j
a0Zvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5nU3RhdGUuaCIKKyNp
bmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCisj
aW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGV4
dC5oIgorI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKKyNpbmNsdWRl
ICJMYXlvdXRSZXBsYWNlZEJveC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJU
YWJsZUZvcm1hdHRpbmdTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
TGF5b3V0IHsKKworc3RhdGljIGlubGluZSBib29sIGlzSGVpZ2h0QXV0byhjb25zdCBCb3gmIGxh
eW91dEJveCkKK3sKKyAgICAvLyAxMC41IENvbnRlbnQgaGVpZ2h0OiB0aGUgJ2hlaWdodCcgcHJv
cGVydHkKKyAgICAvLworICAgIC8vIFRoZSBwZXJjZW50YWdlIGlzIGNhbGN1bGF0ZWQgd2l0aCBy
ZXNwZWN0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gncyBjb250YWluaW5nIGJs
b2NrLgorICAgIC8vIElmIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgbm90
IHNwZWNpZmllZCBleHBsaWNpdGx5IChpLmUuLCBpdCBkZXBlbmRzIG9uIGNvbnRlbnQgaGVpZ2h0
KSwKKyAgICAvLyBhbmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQs
IHRoZSB1c2VkIGhlaWdodCBpcyBjYWxjdWxhdGVkIGFzIGlmICdhdXRvJyB3YXMgc3BlY2lmaWVk
LgorCisgICAgYXV0byBoZWlnaHQgPSBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7
CisgICAgaWYgKGhlaWdodC5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoaGVpZ2h0LmlzUGVyY2VudCgpKSB7CisgICAgICAgIGlmIChsYXlvdXRCb3guaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0
dXJuICFsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCku
aXNGaXhlZCgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworRm9ybWF0dGluZ0dl
b21ldHJ5OjpGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1h
dHRpbmdDb250ZXh0KQorICAgIDogbV9mb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nQ29udGV4
dCkKK3sKK30KKworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21w
dXRlZEhlaWdodFZhbHVlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBIZWlnaHRUeXBlIGhlaWdodFR5
cGUsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3QKK3sK
KyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1dG8gaGVpZ2h0ID0g
aGVpZ2h0VHlwZSA9PSBIZWlnaHRUeXBlOjpOb3JtYWwgPyBzdHlsZS5sb2dpY2FsSGVpZ2h0KCkg
OiBoZWlnaHRUeXBlID09IEhlaWdodFR5cGU6Ok1pbiA/IHN0eWxlLmxvZ2ljYWxNaW5IZWlnaHQo
KSA6IHN0eWxlLmxvZ2ljYWxNYXhIZWlnaHQoKTsKKyAgICBpZiAoaGVpZ2h0LmlzVW5kZWZpbmVk
KCkgfHwgaGVpZ2h0LmlzQXV0bygpIHx8IGhlaWdodC5pc01heENvbnRlbnQoKSB8fCBoZWlnaHQu
aXNNaW5Db250ZW50KCkgfHwgaGVpZ2h0LmlzRml0Q29udGVudCgpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgaWYgKGhlaWdodC5pc0ZpeGVkKCkpCisgICAgICAgIHJldHVybiBMYXlvdXRV
bml0IHsgaGVpZ2h0LnZhbHVlKCkgfTsKKworICAgIGlmICghY29udGFpbmluZ0Jsb2NrSGVpZ2h0
KSB7CisgICAgICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQorICAgICAgICAg
ICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gRm9ybWF0dGluZ1F1aXJrcyhmb3JtYXR0aW5nQ29u
dGV4dCgpKS5oZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdo
dChsYXlvdXRCb3gpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gbm9uQW5vbnlt
b3VzQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCA9IFsmXSB7CisgICAgICAgICAgICAgICAg
Ly8gV2hlbiB0aGUgYmxvY2sgbGV2ZWwgYm94IGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFuIGlubGlu
ZSBsZXZlbCBib3ggKDxzcGFuPjxkaXY+PC9kaXY+PC9zcGFuPikgYW5kIHdlIHdyYXAgaXQgaW50
byBhIGNvbnRpbnVhdGlvbiwKKyAgICAgICAgICAgICAgICAvLyB0aGUgY29udGFpbmluZyBibG9j
ayAoYW5vbnltb3VzIHdyYXBwZXIpIGlzIG5vdCB0aGUgYm94IHdlIG5lZWQgdG8gY2hlY2sgZm9y
IGZpeGVkIGhlaWdodC4KKyAgICAgICAgICAgICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Js
b2NrID0gbGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9ICZsYXlvdXRCb3guY29udGFpbmluZ0Jsb2Nr
KCk7IGNvbnRhaW5pbmdCbG9jayAhPSAmaW5pdGlhbENvbnRhaW5pbmdCbG9jazsgY29udGFpbmlu
Z0Jsb2NrID0gJmNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNBbm9ueW1vdXMoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29u
dGFpbmluZ0Jsb2NrLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxDb250YWluaW5nQmxvY2suc3R5bGUoKS5s
b2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgY29udGFpbmluZ0Js
b2NrSGVpZ2h0ID0gZml4ZWRWYWx1ZShub25Bbm9ueW1vdXNDb250YWluaW5nQmxvY2tMb2dpY2Fs
SGVpZ2h0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjb250YWluaW5nQmxvY2tI
ZWlnaHQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgo
aGVpZ2h0LCAqY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKK30KKworT3B0aW9uYWw8TGF5b3V0VW5p
dD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZEhlaWdodChjb25zdCBCb3gmIGxheW91dEJv
eCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAorewor
ICAgIGlmIChhdXRvIGhlaWdodCA9IGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWln
aHRUeXBlOjpOb3JtYWwsIGNvbnRhaW5pbmdCbG9ja0hlaWdodCkpIHsKKyAgICAgICAgaWYgKGxh
eW91dEJveC5zdHlsZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCkKKyAg
ICAgICAgICAgIHJldHVybiBoZWlnaHQ7CisgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICByZXR1
cm4gKmhlaWdodCAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnku
dmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9
CisKK09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRXaWR0
aFZhbHVlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBXaWR0aFR5cGUgd2lkdGhUeXBlLCBMYXlvdXRV
bml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQoreworICAgIC8vIEFwcGxpZXMgdG86IGFsbCBlbGVt
ZW50cyBleGNlcHQgbm9uLXJlcGxhY2VkIGlubGluZXMgKG91dC1vZi1mbG93IGNoZWNrIGlzIHJl
cXVpcmVkIGZvciBwb3NpdGlvbmVkIDxicj4gYXMgZm9yIHNvbWUgcmVhc29uIHdlIGRvbid0IGJs
b2NraWZ5IHRoZW0pLgorICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzSW5saW5lQm94KCkgfHwgbGF5
b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKworICAgIGF1dG8gd2lkdGggPSBbJl0g
eworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgICAgICBzd2l0
Y2ggKHdpZHRoVHlwZSkgeworICAgICAgICBjYXNlIFdpZHRoVHlwZTo6Tm9ybWFsOgorICAgICAg
ICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxXaWR0aCgpOworICAgICAgICBjYXNlIFdpZHRoVHlw
ZTo6TWluOgorICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNaW5XaWR0aCgpOworICAg
ICAgICBjYXNlIFdpZHRoVHlwZTo6TWF4OgorICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2lj
YWxNYXhXaWR0aCgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gc3R5bGUubG9naWNhbFdpZHRoKCk7CisgICAgfSgpOworICAgIGlmIChh
dXRvIGNvbXB1dGVkVmFsdWUgPSB0aGlzLT5jb21wdXRlZFZhbHVlKHdpZHRoLCBjb250YWluaW5n
QmxvY2tXaWR0aCkpCisgICAgICAgIHJldHVybiBjb21wdXRlZFZhbHVlOworCisgICAgaWYgKHdp
ZHRoLmlzTWluQ29udGVudCgpIHx8IHdpZHRoLmlzTWF4Q29udGVudCgpIHx8IHdpZHRoLmlzRml0
Q29udGVudCgpKSB7CisgICAgICAgIGlmICghaXM8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKQor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgYXV0byYgY29udGFpbmVyQm94ID0gZG93
bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpOworICAgICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgc3BsaXR0aW5nIHVwIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBzbyB0aGF0
IHdlIGNvdWxkIGNvbXB1dGVkIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgc2VwYXJhdGVseS4KKyAg
ICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gWyZdIHsKKyAgICAgICAgICAg
IGlmICghY29udGFpbmVyQm94Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgMF9sdSwgY29udGFpbmlu
Z0Jsb2NrV2lkdGggfTsKKyAgICAgICAgICAgIEFTU0VSVChjb250YWluZXJCb3guZXN0YWJsaXNo
ZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0
ZSA9IGxheW91dFN0YXRlKCkuZW5zdXJlRm9ybWF0dGluZ1N0YXRlKGNvbnRhaW5lckJveCk7Cisg
ICAgICAgICAgICBpZiAoYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGlu
Z1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gKmludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0
Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoY29udGFpbmVyQm94LCBsYXlvdXRTdGF0
ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CisgICAgICAgIH0oKTsK
KyAgICAgICAgaWYgKHdpZHRoLmlzTWluQ29udGVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bTsKKyAgICAgICAgaWYgKHdpZHRoLmlzTWF4
Q29udGVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMu
bWF4aW11bTsKKyAgICAgICAgQVNTRVJUKHdpZHRoLmlzRml0Q29udGVudCgpKTsKKyAgICAgICAg
Ly8gSWYgdGhlIGF2YWlsYWJsZSBzcGFjZSBpbiBhIGdpdmVuIGF4aXMgaXMgZGVmaW5pdGUsIGVx
dWFsIHRvIG1pbihtYXgtY29udGVudCBzaXplLAorICAgICAgICAvLyBtYXgobWluLWNvbnRlbnQg
c2l6ZSwgc3RyZXRjaC1maXQgc2l6ZSkpLiBPdGhlcndpc2UsIGVxdWFsIHRvIHRoZSBtYXgtY29u
dGVudCBzaXplIGluIHRoYXQgYXhpcy4KKyAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IHlldCBo
YXZlIGluZGVmaW5pdGUgYXZhaWxhYmxlIHNpemUuCisgICAgICAgIHJldHVybiBzdGQ6Om1pbihp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0sIHN0ZDo6bWF4KGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMubWluaW11bSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKTsKKyAgICB9CisgICAg
cmV0dXJuIHsgfTsKK30KKworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5
Ojpjb21wdXRlZFdpZHRoKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBMYXlvdXRVbml0IGNvbnRhaW5p
bmdCbG9ja1dpZHRoKQoreworICAgIGlmIChhdXRvIGNvbXB1dGVkV2lkdGggPSBjb21wdXRlZFdp
ZHRoVmFsdWUobGF5b3V0Qm94LCBXaWR0aFR5cGU6Ok5vcm1hbCwgY29udGFpbmluZ0Jsb2NrV2lk
dGgpKSB7CisgICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgICAg
IC8vIE5vbi1xdWFudGl0YXRpdmUgdmFsdWVzIHN1Y2ggYXMgYXV0byBhbmQgbWluLWNvbnRlbnQg
YXJlIG5vdCBpbmZsdWVuY2VkIGJ5IHRoZSBib3gtc2l6aW5nIHByb3BlcnR5LgorICAgICAgICBp
ZiAoc3R5bGUuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpDb250ZW50Qm94IHx8IHN0eWxlLndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAgICAgIHJldHVybiBjb21wdXRlZFdp
ZHRoOworICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2Vv
bWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgcmV0dXJuICpjb21wdXRlZFdpZHRoIC0g
KGJveEdlb21ldHJ5Lmhvcml6b250YWxCb3JkZXIoKSArIGJveEdlb21ldHJ5Lmhvcml6b250YWxQ
YWRkaW5nKCkudmFsdWVPcigwKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK0xheW91
dFVuaXQgRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRl
eHRSb290KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290KSBjb25zdAor
eworICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5n
Q29udGV4dCgpKTsKKyAgICBBU1NFUlQoaXNIZWlnaHRBdXRvKGZvcm1hdHRpbmdDb250ZXh0Um9v
dCkgfHwgZm9ybWF0dGluZ0NvbnRleHRSb290LmVzdGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29u
dGV4dCgpIHx8IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5pc1RhYmxlQ2VsbCgpKTsKKyAgICBhdXRv
IHVzZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCB7IH07IAorICAgIGF1dG8gaGFzQ29udGVu
dCA9IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKKyAg
ICAvLyBUaGUgdXNlZCBoZWlnaHQgb2YgdGhlIGNvbnRhaW5tZW50IGJveCBpcyBkZXRlcm1pbmVk
IGFzIGlmIHBlcmZvcm1pbmcgYSBub3JtYWwgbGF5b3V0IG9mIHRoZSBib3gsIGV4Y2VwdCB0aGF0
IGl0IGlzIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGNvbnRlbnQuCisgICAgYXV0byBzaG91bGRJZ25v
cmVDb250ZW50ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LmlzU2l6ZUNvbnRhaW5tZW50Qm94KCk7
CisgICAgaWYgKGhhc0NvbnRlbnQgJiYgIXNob3VsZElnbm9yZUNvbnRlbnQpCisgICAgICAgIHVz
ZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQo
Zm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdF9jYXN0PExheW91dFN0YXRlJj4obGF5b3V0U3Rh
dGUoKSkpLT51c2VkQ29udGVudEhlaWdodCgpOworICAgIHJldHVybiB1c2VkQ29udGVudEhlaWdo
dDsKK30KKworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRl
ZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9wZXJ0eSwgTGF5b3V0VW5pdCBjb250YWlu
aW5nQmxvY2tXaWR0aCkgY29uc3QKK3sKKyAgICAvLyAgSW4gZ2VuZXJhbCwgdGhlIGNvbXB1dGVk
IHZhbHVlIHJlc29sdmVzIHRoZSBzcGVjaWZpZWQgdmFsdWUgYXMgZmFyIGFzIHBvc3NpYmxlIHdp
dGhvdXQgbGF5aW5nIG91dCB0aGUgY29udGVudC4KKyAgICBpZiAoZ2VvbWV0cnlQcm9wZXJ0eS5p
c0ZpeGVkKCkgfHwgZ2VvbWV0cnlQcm9wZXJ0eS5pc1BlcmNlbnQoKSB8fCBnZW9tZXRyeVByb3Bl
cnR5LmlzQ2FsY3VsYXRlZCgpKQorICAgICAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgoZ2VvbWV0
cnlQcm9wZXJ0eSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIHJldHVybiB7IH07Cit9CisK
K09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Zml4ZWRWYWx1ZShjb25z
dCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHkpIGNvbnN0Cit7CisgICAgaWYgKCFnZW9tZXRyeVBy
b3BlcnR5LmlzRml4ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gTGF5b3V0
VW5pdCB7IGdlb21ldHJ5UHJvcGVydHkudmFsdWUoKSB9OworfQorCisvLyBodHRwczovL3d3dy53
My5vcmcvVFIvQ1NTMjIvdmlzdWRldC5odG1sI21pbi1tYXgtaGVpZ2h0cworLy8gU3BlY2lmaWVz
IGEgcGVyY2VudGFnZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHVzZWQgdmFsdWUuIFRoZSBwZXJjZW50
YWdlIGlzIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIGdlbmVy
YXRlZCBib3gncyBjb250YWluaW5nIGJsb2NrLgorLy8gSWYgdGhlIGhlaWdodCBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHkgKGkuZS4sIGl0IGRlcGVu
ZHMgb24gY29udGVudCBoZWlnaHQpLCBhbmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0ZWx5
IHBvc2l0aW9uZWQsCisvLyB0aGUgcGVyY2VudGFnZSB2YWx1ZSBpcyB0cmVhdGVkIGFzICcwJyAo
Zm9yICdtaW4taGVpZ2h0Jykgb3IgJ25vbmUnIChmb3IgJ21heC1oZWlnaHQnKS4KK09wdGlvbmFs
PExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRNYXhIZWlnaHQoY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdo
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcHV0ZWRIZWlnaHRWYWx1ZShsYXlvdXRCb3gsIEhl
aWdodFR5cGU6Ok1heCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKK30KKworT3B0aW9uYWw8TGF5
b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZE1pbkhlaWdodChjb25zdCBCb3gm
IGxheW91dEJveCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBj
b25zdAoreworICAgIHJldHVybiBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91dEJveCwgSGVpZ2h0
VHlwZTo6TWluLCBjb250YWluaW5nQmxvY2tIZWlnaHQpOworfQorCitPcHRpb25hbDxMYXlvdXRV
bml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkTWluV2lkdGgoY29uc3QgQm94JiBsYXlv
dXRCb3gsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpCit7CisgICAgcmV0dXJuIGNv
bXB1dGVkV2lkdGhWYWx1ZShsYXlvdXRCb3gsIFdpZHRoVHlwZTo6TWluLCBjb250YWluaW5nQmxv
Y2tXaWR0aCk7Cit9CisKK09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6
Y29tcHV0ZWRNYXhXaWR0aChjb25zdCBCb3gmIGxheW91dEJveCwgTGF5b3V0VW5pdCBjb250YWlu
aW5nQmxvY2tXaWR0aCkKK3sKKyAgICByZXR1cm4gY29tcHV0ZWRXaWR0aFZhbHVlKGxheW91dEJv
eCwgV2lkdGhUeXBlOjpNYXgsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKK30KKworTGF5b3V0VW5p
dCBGb3JtYXR0aW5nR2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRz
JiB2ZXJ0aWNhbENvbnN0cmFpbnRzKSBjb25zdAoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCkpOworCisgICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlz
IHNlY3Rpb24gYW5kIHRoZSBuZXh0LCB0aGUgdGVybSAic3RhdGljIHBvc2l0aW9uIiAob2YgYW4g
ZWxlbWVudCkgcmVmZXJzLCByb3VnaGx5LCB0byB0aGUgcG9zaXRpb24gYW4gZWxlbWVudCB3b3Vs
ZCBoYXZlCisgICAgLy8gaGFkIGluIHRoZSBub3JtYWwgZmxvdy4gTW9yZSBwcmVjaXNlbHksIHRo
ZSBzdGF0aWMgcG9zaXRpb24gZm9yICd0b3AnIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3Ag
ZWRnZSBvZiB0aGUgY29udGFpbmluZyBibG9jayB0byB0aGUgdG9wIG1hcmdpbgorICAgIC8vIGVk
Z2Ugb2YgYSBoeXBvdGhldGljYWwgYm94IHRoYXQgd291bGQgaGF2ZSBiZWVuIHRoZSBmaXJzdCBi
b3ggb2YgdGhlIGVsZW1lbnQgaWYgaXRzIHNwZWNpZmllZCAncG9zaXRpb24nIHZhbHVlIGhhZCBi
ZWVuICdzdGF0aWMnIGFuZCBpdHMgc3BlY2lmaWVkCisgICAgLy8gJ2Zsb2F0JyBoYWQgYmVlbiAn
bm9uZScgYW5kIGl0cyBzcGVjaWZpZWQgJ2NsZWFyJyBoYWQgYmVlbiAnbm9uZScuIChOb3RlIHRo
YXQgZHVlIHRvIHRoZSBydWxlcyBpbiBzZWN0aW9uIDkuNyB0aGlzIG1pZ2h0IHJlcXVpcmUgYWxz
byBhc3N1bWluZyBhIGRpZmZlcmVudAorICAgIC8vIGNvbXB1dGVkIHZhbHVlIGZvciAnZGlzcGxh
eScuKSBUaGUgdmFsdWUgaXMgbmVnYXRpdmUgaWYgdGhlIGh5cG90aGV0aWNhbCBib3ggaXMgYWJv
dmUgdGhlIGNvbnRhaW5pbmcgYmxvY2suCisKKyAgICAvLyBTdGFydCB3aXRoIHRoaXMgYm94J3Mg
Ym9yZGVyIGJveCBvZmZzZXQgZnJvbSB0aGUgcGFyZW50J3MgYm9yZGVyIGJveC4KKyAgICBhdXRv
JiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgTGF5
b3V0VW5pdCB0b3A7CisgICAgaWYgKGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKSAm
JiBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCktPmlzQmxvY2tMZXZlbEJveCgpKSB7
CisgICAgICAgIC8vIEFkZCBzaWJsaW5nIG9mZnNldAorICAgICAgICBhdXRvJiBwcmV2aW91c0lu
Rmxvd1NpYmxpbmcgPSAqbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93U2libGluZygpOworICAgICAg
ICBhdXRvJiBwcmV2aW91c0luRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2Vv
bWV0cnlGb3JCb3gocHJldmlvdXNJbkZsb3dTaWJsaW5nLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNj
YXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KTsKKyAgICAgICAgYXV0
byYgZm9ybWF0dGluZ1N0YXRlID0gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nU3RhdGU+KGxheW91
dFN0YXRlKCkuZm9ybWF0dGluZ1N0YXRlRm9yQm94KHByZXZpb3VzSW5GbG93U2libGluZykpOwor
ICAgICAgICBhdXRvIHVzZWRWZXJ0aWNhbE1hcmdpbkZvclByZXZpb3VzQm94ID0gZm9ybWF0dGlu
Z1N0YXRlLnVzZWRWZXJ0aWNhbE1hcmdpbihwcmV2aW91c0luRmxvd1NpYmxpbmcpOworCisgICAg
ICAgIHRvcCArPSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChwcmV2aW91c0luRmxvd0JveEdl
b21ldHJ5KS5ib3R0b20oKSArIHVzZWRWZXJ0aWNhbE1hcmdpbkZvclByZXZpb3VzQm94Lm5vbkNv
bGxhcHNlZFZhbHVlcy5hZnRlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgdG9wID0gZm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94LnBhcmVudCgpLCBGb3JtYXR0aW5nQ29u
dGV4dDo6RXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KS5jb250
ZW50Qm94VG9wKCk7CisKKyAgICAvLyBSZXNvbHZlIHRvcCBhbGwgdGhlIHdheSB1cCB0byB0aGUg
Y29udGFpbmluZyBibG9jay4KKyAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3gu
Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdl
IHByZXRlbmQgdGhhdCB0aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KKyAgICBmb3IgKGF1dG8qIGFu
Y2VzdG9yID0gJmxheW91dEJveC5wYXJlbnQoKTsgYW5jZXN0b3IgIT0gJmNvbnRhaW5pbmdCbG9j
azsgYW5jZXN0b3IgPSAmYW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgICAgIGF1
dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmFuY2Vz
dG9yLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0lu
Rmxvd0dlb21ldHJ5KTsKKyAgICAgICAgLy8gQm94R2VvbWV0cnk6OnRvcCBpcyB0aGUgYm9yZGVy
IGJveCB0b3AgcG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5
c3RlbS4KKyAgICAgICAgdG9wICs9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hUb3AoYm94R2VvbWV0
cnkpOworICAgICAgICBBU1NFUlQoIWFuY2VzdG9yLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRC
b3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7CisgICAgfQorICAgIC8vIE1vdmUgdGhlIHN0YXRpYyBw
b3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgcGFkZGluZyBib3guIFRoaXMgaXMgdmVyeSBzcGVjaWZp
YyB0byBhYm9sdXRlbHkgcG9zaXRpb25lZCBib3hlcy4KKyAgICByZXR1cm4gdG9wIC0gdmVydGlj
YWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdHZW9t
ZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25z
dCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSk7CisgICAgLy8gU2VlIHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZs
b3dQb3NpdGlvbmVkIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RhdGljIHBvc2l0aW9uLgor
CisgICAgLy8gU3RhcnQgd2l0aCB0aGlzIGJveCdzIGJvcmRlciBib3ggb2Zmc2V0IGZyb20gdGhl
IHBhcmVudCdzIGJvcmRlciBib3guCisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlz
LT5mb3JtYXR0aW5nQ29udGV4dCgpOworICAgIGF1dG8gbGVmdCA9IGZvcm1hdHRpbmdDb250ZXh0
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveC5wYXJlbnQoKSwgRm9ybWF0dGluZ0NvbnRleHQ6OkVz
Y2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSkuY29udGVudEJveExl
ZnQoKTsKKworICAgIC8vIFJlc29sdmUgbGVmdCBhbGwgdGhlIHdheSB1cCB0byB0aGUgY29udGFp
bmluZyBibG9jay4KKyAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guY29udGFp
bmluZ0Jsb2NrKCk7CisgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdlIHByZXRl
bmQgdGhhdCB0aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9y
ID0gJmxheW91dEJveC5wYXJlbnQoKTsgYW5jZXN0b3IgIT0gJmNvbnRhaW5pbmdCbG9jazsgYW5j
ZXN0b3IgPSAmYW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmFuY2VzdG9yLCBG
b3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dl
b21ldHJ5KTsKKyAgICAgICAgLy8gQm94R2VvbWV0cnk6OmxlZnQgaXMgdGhlIGJvcmRlciBib3gg
bGVmdCBwb3NpdGlvbiBpbiBpdHMgY29udGFpbmluZyBibG9jaydzIGNvb3JkaW5hdGUgc3lzdGVt
LgorICAgICAgICBsZWZ0ICs9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hMZWZ0KGJveEdlb21ldHJ5
KTsKKyAgICAgICAgQVNTRVJUKCFhbmNlc3Rvci0+aXNQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94
LmlzRml4ZWRQb3NpdGlvbmVkKCkpOworICAgIH0KKyAgICAvLyBNb3ZlIHRoZSBzdGF0aWMgcG9z
aXRpb24gcmVsYXRpdmUgdG8gdGhlIHBhZGRpbmcgYm94LiBUaGlzIGlzIHZlcnkgc3BlY2lmaWMg
dG8gYWJvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMuCisgICAgcmV0dXJuIGxlZnQgLSBob3Jpem9u
dGFsQ29uc3RyYWludHMubG9naWNhbExlZnQ7Cit9CisKK0xheW91dFVuaXQgRm9ybWF0dGluZ0dl
b21ldHJ5OjpzaHJpbmtUb0ZpdFdpZHRoKGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290
LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQoreworICAgIExPR19XSVRIX1NUUkVBTShGb3Jt
YXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdIC0+IHNocmluayB0byBmaXQg
LT4gdW5zdXBwb3J0ZWQgLT4gd2lkdGgoIiA8PCBMYXlvdXRVbml0IHsgfSA8PCAicHgpIGxheW91
dEJveDogIiA8PCAmZm9ybWF0dGluZ0NvbnRleHRSb290IDw8ICIpIik7CisgICAgQVNTRVJUKGZv
cm1hdHRpbmdDb250ZXh0Um9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOworCisg
ICAgLy8gQ2FsY3VsYXRpb24gb2YgdGhlIHNocmluay10by1maXQgd2lkdGggaXMgc2ltaWxhciB0
byBjYWxjdWxhdGluZyB0aGUgd2lkdGggb2YgYSB0YWJsZSBjZWxsIHVzaW5nIHRoZSBhdXRvbWF0
aWMgdGFibGUgbGF5b3V0IGFsZ29yaXRobS4KKyAgICAvLyBSb3VnaGx5OiBjYWxjdWxhdGUgdGhl
IHByZWZlcnJlZCB3aWR0aCBieSBmb3JtYXR0aW5nIHRoZSBjb250ZW50IHdpdGhvdXQgYnJlYWtp
bmcgbGluZXMgb3RoZXIgdGhhbiB3aGVyZSBleHBsaWNpdCBsaW5lIGJyZWFrcyBvY2N1ciwKKyAg
ICAvLyBhbmQgYWxzbyBjYWxjdWxhdGUgdGhlIHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBlLmcu
LCBieSB0cnlpbmcgYWxsIHBvc3NpYmxlIGxpbmUgYnJlYWtzLiBDU1MgMi4yIGRvZXMgbm90IGRl
ZmluZSB0aGUgZXhhY3QgYWxnb3JpdGhtLgorICAgIC8vIFRoaXJkbHksIGZpbmQgdGhlIGF2YWls
YWJsZSB3aWR0aDogaW4gdGhpcyBjYXNlLCB0aGlzIGlzIHRoZSB3aWR0aCBvZiB0aGUgY29udGFp
bmluZyBibG9jayBtaW51cyB0aGUgdXNlZCB2YWx1ZXMgb2YgJ21hcmdpbi1sZWZ0JywgJ2JvcmRl
ci1sZWZ0LXdpZHRoJywKKyAgICAvLyAncGFkZGluZy1sZWZ0JywgJ3BhZGRpbmctcmlnaHQnLCAn
Ym9yZGVyLXJpZ2h0LXdpZHRoJywgJ21hcmdpbi1yaWdodCcsIGFuZCB0aGUgd2lkdGhzIG9mIGFu
eSByZWxldmFudCBzY3JvbGwgYmFycy4KKworICAgIC8vIFRoZW4gdGhlIHNocmluay10by1maXQg
d2lkdGggaXM6IG1pbihtYXgocHJlZmVycmVkIG1pbmltdW0gd2lkdGgsIGF2YWlsYWJsZSB3aWR0
aCksIHByZWZlcnJlZCB3aWR0aCkuCisgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
ID0gSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH07CisgICAgYXV0byBoYXNDb250ZW50ID0g
aXM8Q29udGFpbmVyQm94Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpICYmIGRvd25jYXN0PENvbnRh
aW5lckJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQo
KTsKKyAgICAvLyBUaGUgdXNlZCB3aWR0aCBvZiB0aGUgY29udGFpbm1lbnQgYm94IGlzIGRldGVy
bWluZWQgYXMgaWYgcGVyZm9ybWluZyBhIG5vcm1hbCBsYXlvdXQgb2YgdGhlIGJveCwgZXhjZXB0
IHRoYXQgaXQgaXMgdHJlYXRlZCBhcyBoYXZpbmcgbm8gY29udGVudC4KKyAgICBhdXRvIHNob3Vs
ZElnbm9yZUNvbnRlbnQgPSBmb3JtYXR0aW5nQ29udGV4dFJvb3QuaXNTaXplQ29udGFpbm1lbnRC
b3goKTsgIAorICAgIGlmIChoYXNDb250ZW50ICYmICFzaG91bGRJZ25vcmVDb250ZW50KSB7Cisg
ICAgICAgIGF1dG8mIHJvb3QgPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGZvcm1hdHRpbmdDb250
ZXh0Um9vdCk7CisgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZUZvclJvb3QgPSBsYXlvdXRT
dGF0ZSgpLmVuc3VyZUZvcm1hdHRpbmdTdGF0ZShyb290KTsKKyAgICAgICAgYXV0byBwcmVjb21w
dXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBmb3JtYXR0aW5nU3RhdGVGb3JSb290Lmlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKKyAgICAgICAgaWYgKCFwcmVjb21wdXRlZEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMpCisgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQocm9vdCwgbGF5b3V0
U3RhdGUoKSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gKnByZWNvbXB1dGVk
SW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bWluKHN0
ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgYXZhaWxhYmxlV2lkdGgp
LCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0pOworfQorCitWZXJ0aWNhbEdlb21l
dHJ5IEZvcm1hdHRpbmdHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21l
dHJ5KGNvbnN0IENvbnRhaW5lckJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYg
dmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7CisgICAg
QVNTRVJUKHZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbEhlaWdodCk7CisKKyAgICAvLyAxMC42
LjQgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLwor
ICAgIC8vIEZvciBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgZWxlbWVudHMsIHRoZSB1c2VkIHZhbHVl
cyBvZiB0aGUgdmVydGljYWwgZGltZW5zaW9ucyBtdXN0IHNhdGlzZnkgdGhpcyBjb25zdHJhaW50
OgorICAgIC8vICd0b3AnICsgJ21hcmdpbi10b3AnICsgJ2JvcmRlci10b3Atd2lkdGgnICsgJ3Bh
ZGRpbmctdG9wJyArICdoZWlnaHQnICsgJ3BhZGRpbmctYm90dG9tJyArICdib3JkZXItYm90dG9t
LXdpZHRoJyArICdtYXJnaW4tYm90dG9tJyArICdib3R0b20nCisgICAgLy8gPSBoZWlnaHQgb2Yg
Y29udGFpbmluZyBibG9jaworCisgICAgLy8gSWYgYWxsIHRocmVlIG9mICd0b3AnLCAnaGVpZ2h0
JywgYW5kICdib3R0b20nIGFyZSBhdXRvLCBzZXQgJ3RvcCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlv
biBhbmQgYXBwbHkgcnVsZSBudW1iZXIgdGhyZWUgYmVsb3cuCisKKyAgICAvLyBJZiBub25lIG9m
IHRoZSB0aHJlZSBhcmUgJ2F1dG8nOiBJZiBib3RoICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1i
b3R0b20nIGFyZSAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEKKyAg
ICAvLyBjb25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJnaW5zIGdldCBlcXVhbCB2YWx1ZXMuIElm
IG9uZSBvZiAnbWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIGlzICdhdXRvJywgc29sdmUg
dGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgorICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIG92
ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdib3R0b20nIGFuZCBzb2x2ZSBm
b3IgdGhhdCB2YWx1ZS4KKworICAgIC8vIE90aGVyd2lzZSwgcGljayB0aGUgb25lIG9mIHRoZSBm
b2xsb3dpbmcgc2l4IHJ1bGVzIHRoYXQgYXBwbGllcy4KKworICAgIC8vIDEuICd0b3AnIGFuZCAn
aGVpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnYm90dG9tJyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSBo
ZWlnaHQgaXMgYmFzZWQgb24gdGhlIGNvbnRlbnQgcGVyIDEwLjYuNywKKyAgICAvLyAgICAgc2V0
ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAs
IGFuZCBzb2x2ZSBmb3IgJ3RvcCcKKyAgICAvLyAyLiAndG9wJyBhbmQgJ2JvdHRvbScgYXJlICdh
dXRvJyBhbmQgJ2hlaWdodCcgaXMgbm90ICdhdXRvJywgdGhlbiBzZXQgJ3RvcCcgdG8gdGhlIHN0
YXRpYyBwb3NpdGlvbiwgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yCisgICAgLy8gICAgJ21hcmdpbi10
b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAnYm90dG9tJworICAg
IC8vIDMuICdoZWlnaHQnIGFuZCAnYm90dG9tJyBhcmUgJ2F1dG8nIGFuZCAndG9wJyBpcyBub3Qg
J2F1dG8nLCB0aGVuIHRoZSBoZWlnaHQgaXMgYmFzZWQgb24gdGhlIGNvbnRlbnQgcGVyIDEwLjYu
Nywgc2V0ICdhdXRvJworICAgIC8vICAgICB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21h
cmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKKyAgICAvLyA0LiAndG9w
JyBpcyAnYXV0bycsICdoZWlnaHQnIGFuZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgdGhlbiBz
ZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8g
MCwgYW5kIHNvbHZlIGZvciAndG9wJworICAgIC8vIDUuICdoZWlnaHQnIGlzICdhdXRvJywgJ3Rv
cCcgYW5kICdib3R0b20nIGFyZSBub3QgJ2F1dG8nLCB0aGVuICdhdXRvJyB2YWx1ZXMgZm9yICdt
YXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIGFyZSBzZXQgdG8gMCBhbmQgc29sdmUgZm9y
ICdoZWlnaHQnCisgICAgLy8gNi4gJ2JvdHRvbScgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2hlaWdo
dCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9w
JyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAgYW5kIHNvbHZlIGZvciAnYm90dG9tJworCisgICAg
YXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOworICAg
IGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIGF1dG8g
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gKnZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbEhlaWdo
dDsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRz
LmxvZ2ljYWxXaWR0aDsKKworICAgIGF1dG8gdG9wID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dp
Y2FsVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGJvdHRvbSA9IGNvbXB1
dGVkVmFsdWUoc3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Cisg
ICAgYXV0byBoZWlnaHQgPSBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0ID8gb3ZlcnJp
ZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRIZWlnaHQobGF5b3V0
Qm94LCBjb250YWluaW5nQmxvY2tIZWlnaHQpOworICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25D
b2xsYXBzZWRWYWx1ZXMgdXNlZFZlcnRpY2FsTWFyZ2luOyAKKyAgICBhdXRvIHBhZGRpbmdUb3Ag
PSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKKyAgICBhdXRvIHBhZGRpbmdC
b3R0b20gPSBib3hHZW9tZXRyeS5wYWRkaW5nQm90dG9tKCkudmFsdWVPcigwKTsKKyAgICBhdXRv
IGJvcmRlclRvcCA9IGJveEdlb21ldHJ5LmJvcmRlclRvcCgpOworICAgIGF1dG8gYm9yZGVyQm90
dG9tID0gYm94R2VvbWV0cnkuYm9yZGVyQm90dG9tKCk7CisKKyAgICBpZiAoIXRvcCAmJiAhaGVp
Z2h0ICYmICFib3R0b20pCisgICAgICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JP
dXRPZkZsb3dQb3NpdGlvbmVkKGxheW91dEJveCwgdmVydGljYWxDb25zdHJhaW50cyk7CisKKyAg
ICBpZiAodG9wICYmIGhlaWdodCAmJiBib3R0b20pIHsKKyAgICAgICAgaWYgKCFjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZSAmJiAhY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcikgewor
ICAgICAgICAgICAgYXV0byBtYXJnaW5CZWZvcmVBbmRBZnRlciA9IGNvbnRhaW5pbmdCbG9ja0hl
aWdodCAtICgqdG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5n
Qm90dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7CisgICAgICAgICAgICB1c2VkVmVydGlj
YWxNYXJnaW4gPSB7IG1hcmdpbkJlZm9yZUFuZEFmdGVyIC8gMiwgbWFyZ2luQmVmb3JlQW5kQWZ0
ZXIgLyAyIH07CisgICAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVm
b3JlKSB7CisgICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgPSAqY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbi5hZnRlcjsKKyAgICAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZv
cmUgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNh
bE1hcmdpbi5hZnRlciArICpib3R0b20pOworICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmFmdGVyKSB7CisgICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4uYmVm
b3JlID0gKmNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlOworICAgICAgICAgICAgdXNlZFZl
cnRpY2FsTWFyZ2luLmFmdGVyID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2Vk
VmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQg
KyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyAqY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbi5iZWZvcmUsICpjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyIH07CisgICAgICAgIC8v
IE92ZXItY29uc3RyYWluZWQ/CisgICAgICAgIGF1dG8gYm94SGVpZ2h0ID0gKnRvcCArIHVzZWRW
ZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCAr
IHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIg
KyAqYm90dG9tOworICAgICAgICBpZiAoYm94SGVpZ2h0ICE9IGNvbnRhaW5pbmdCbG9ja0hlaWdo
dCkKKyAgICAgICAgICAgIGJvdHRvbSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsg
dXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVp
Z2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5h
ZnRlcik7CisgICAgfQorCisgICAgaWYgKCF0b3AgJiYgIWhlaWdodCAmJiBib3R0b20pIHsKKyAg
ICAgICAgLy8gIzEKKyAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdD
b250ZXh0Um9vdChsYXlvdXRCb3gpOworICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNv
bXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxN
YXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OworICAgICAgICB0b3AgPSBjb250YWluaW5nQmxvY2tI
ZWlnaHQgLSAodXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNh
bE1hcmdpbi5hZnRlciArICpib3R0b20pOyAKKyAgICB9CisKKyAgICBpZiAoIXRvcCAmJiAhYm90
dG9tICYmIGhlaWdodCkgeworICAgICAgICAvLyAjMgorICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0
aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIHZlcnRpY2FsQ29u
c3RyYWludHMpOworICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGlj
YWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIu
dmFsdWVPcigwKSB9OworICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAo
KnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9w
ICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxN
YXJnaW4uYWZ0ZXIpOworICAgIH0KKworICAgIGlmICghaGVpZ2h0ICYmICFib3R0b20gJiYgdG9w
KSB7CisgICAgICAgIC8vICMzCisgICAgICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JGb3Jt
YXR0aW5nQ29udGV4dFJvb3QobGF5b3V0Qm94KTsKKyAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2lu
ID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKKyAgICAgICAgYm90dG9tID0gY29udGFp
bmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9y
ZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90
dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKTsKKyAgICB9CisKKyAgICBpZiAoIXRvcCAm
JiBoZWlnaHQgJiYgYm90dG9tKSB7CisgICAgICAgIC8vICM0CisgICAgICAgIHVzZWRWZXJ0aWNh
bE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CisgICAgICAgIHRvcCA9IGNv
bnRhaW5pbmdCbG9ja0hlaWdodCAtICh1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVy
VG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9t
ICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7CisgICAgfQorCisgICAgaWYg
KCFoZWlnaHQgJiYgdG9wICYmIGJvdHRvbSkgeworICAgICAgICAvLyAjNQorICAgICAgICB1c2Vk
VmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3Io
MCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OworICAgICAgICBo
ZWlnaHQgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdp
bi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIGJvcmRl
ckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b20pOworICAgIH0KKwor
ICAgIGlmICghYm90dG9tICYmIHRvcCAmJiBoZWlnaHQpIHsKKyAgICAgICAgLy8gIzYKKyAgICAg
ICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52
YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKKyAg
ICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGlj
YWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRk
aW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKTsKKyAg
ICB9CisKKyAgICBBU1NFUlQodG9wKTsKKyAgICBBU1NFUlQoYm90dG9tKTsKKyAgICBBU1NFUlQo
aGVpZ2h0KTsKKworICAgIC8vIEZvciBvdXQtb2YtZmxvdyBlbGVtZW50cyB0aGUgY29udGFpbmlu
ZyBibG9jayBpcyBmb3JtZWQgYnkgdGhlIHBhZGRpbmcgZWRnZSBvZiB0aGUgYW5jZXN0b3IuCisg
ICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcG9zaXRpb25lZCB2YWx1ZSBpcyBpbiB0aGUgY29vcmRp
bmF0ZSBzeXN0ZW0gb2YgdGhlIHBhZGRpbmcgYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRl
ciBib3ggY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5n
VmVydGljYWxFZGdlID0gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOworICAgICp0b3Ag
Kz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKKyAgICAqYm90dG9tICs9IGNv
bnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0o
Rm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9uXVtIZWlnaHRdW01h
cmdpbl0gLT4gb3V0LW9mLWZsb3cgbm9uLXJlcGxhY2VkIC0+IHRvcCgiIDw8ICp0b3AgPDwgInB4
KSBib3R0b20oIiAgPDwgKmJvdHRvbSA8PCAicHgpIGhlaWdodCgiIDw8ICpoZWlnaHQgPDwgInB4
KSBtYXJnaW4oIiA8PCB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlIDw8ICJweCwgIiAgPDwgdXNl
ZFZlcnRpY2FsTWFyZ2luLmFmdGVyIDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8
PCAiKSIpOworICAgIHJldHVybiB7ICp0b3AsICpib3R0b20sIHsgKmhlaWdodCwgdXNlZFZlcnRp
Y2FsTWFyZ2luIH0gfTsKK30KKworSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdHZW9tZXRy
eTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQ29udGFpbmVy
Qm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENv
bnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7CisgICAgCisgICAgLy8gMTAu
My43IEFic29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCisgICAgLy8K
KyAgICAvLyAnbGVmdCcgKyAnbWFyZ2luLWxlZnQnICsgJ2JvcmRlci1sZWZ0LXdpZHRoJyArICdw
YWRkaW5nLWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0JyArICdib3JkZXItcmlnaHQt
d2lkdGgnICsgJ21hcmdpbi1yaWdodCcgKyAncmlnaHQnCisgICAgLy8gPSB3aWR0aCBvZiBjb250
YWluaW5nIGJsb2NrCisKKyAgICAvLyBJZiBhbGwgdGhyZWUgb2YgJ2xlZnQnLCAnd2lkdGgnLCBh
bmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdt
YXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAuCisgICAgLy8gVGhlbiwgaWYgdGhl
ICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3Rh
dGljLXBvc2l0aW9uIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUg
c3RhdGljCisgICAgLy8gcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93
OyBvdGhlcndpc2UsIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5
IHJ1bGUgbnVtYmVyIG9uZSBiZWxvdy4KKyAgICAvLworICAgIC8vIElmIG5vbmUgb2YgdGhlIHRo
cmVlIGlzICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBh
cmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQg
dGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcywKKyAgICAvLyB1bmxlc3MgdGhp
cyB3b3VsZCBtYWtlIHRoZW0gbmVnYXRpdmUsIGluIHdoaWNoIGNhc2Ugd2hlbiBkaXJlY3Rpb24g
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdydGwnKSwgc2V0ICdtYXJnaW4tbGVm
dCcgKCdtYXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZAorICAgIC8vIHNvbHZlIGZvciAnbWFyZ2lu
LXJpZ2h0JyAoJ21hcmdpbi1sZWZ0JykuIElmIG9uZSBvZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJn
aW4tcmlnaHQnIGlzICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgor
ICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFs
dWUgZm9yICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNv
bnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yICdyaWdodCcKKyAgICAvLyAoaW4gY2FzZSAnZGly
ZWN0aW9uJyBpcyAnbHRyJykgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgorICAgIC8vCisgICAg
Ly8gT3RoZXJ3aXNlLCBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBhbmQgJ21h
cmdpbi1yaWdodCcgdG8gMCwgYW5kIHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBy
dWxlcyB0aGF0IGFwcGxpZXMuCisgICAgLy8KKyAgICAvLyAxLiAnbGVmdCcgYW5kICd3aWR0aCcg
YXJlICdhdXRvJyBhbmQgJ3JpZ2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBz
aHJpbmstdG8tZml0LiBUaGVuIHNvbHZlIGZvciAnbGVmdCcKKyAgICAvLyAyLiAnbGVmdCcgYW5k
ICdyaWdodCcgYXJlICdhdXRvJyBhbmQgJ3dpZHRoJyBpcyBub3QgJ2F1dG8nLCB0aGVuIGlmIHRo
ZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0
YXRpYy1wb3NpdGlvbiAKKyAgICAvLyAgICBjb250YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAn
bGVmdCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiwgb3RoZXJ3aXNlIHNldCAncmlnaHQnIHRvIHRo
ZSBzdGF0aWMgcG9zaXRpb24uCisgICAgLy8gICAgVGhlbiBzb2x2ZSBmb3IgJ2xlZnQnIChpZiAn
ZGlyZWN0aW9uIGlzICdydGwnKSBvciAncmlnaHQnIChpZiAnZGlyZWN0aW9uJyBpcyAnbHRyJyku
CisgICAgLy8gMy4gJ3dpZHRoJyBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnbGVmdCcgaXMg
bm90ICdhdXRvJywgdGhlbiB0aGUgd2lkdGggaXMgc2hyaW5rLXRvLWZpdCAuIFRoZW4gc29sdmUg
Zm9yICdyaWdodCcKKyAgICAvLyA0LiAnbGVmdCcgaXMgJ2F1dG8nLCAnd2lkdGgnIGFuZCAncmln
aHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnbGVmdCcKKyAgICAvLyA1LiAnd2lk
dGgnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNv
bHZlIGZvciAnd2lkdGgnCisgICAgLy8gNi4gJ3JpZ2h0JyBpcyAnYXV0bycsICdsZWZ0JyBhbmQg
J3dpZHRoJyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0JworCisgICAgYXV0
byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOworICAgIGF1
dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIGF1dG8gY29u
dGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwor
ICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGxheW91dEJveC5jb250YWluaW5nQmxv
Y2soKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICAKKyAgICBhdXRvIGxl
ZnQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKTsKKyAgICBhdXRvIHJpZ2h0ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsUmlnaHQo
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gd2lkdGggPSBvdmVycmlkZGVuSG9y
aXpvbnRhbFZhbHVlcy53aWR0aCA/IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoIDog
Y29tcHV0ZWRXaWR0aChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRv
IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICBV
c2VkSG9yaXpvbnRhbE1hcmdpbiB1c2VkSG9yaXpvbnRhbE1hcmdpbjsKKyAgICBhdXRvIHBhZGRp
bmdMZWZ0ID0gYm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOworICAgIGF1dG8g
cGFkZGluZ1JpZ2h0ID0gYm94R2VvbWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKKyAg
ICBhdXRvIGJvcmRlckxlZnQgPSBib3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCk7CisgICAgYXV0byBi
b3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCk7CisgICAgaWYgKCFsZWZ0ICYm
ICF3aWR0aCAmJiAhcmlnaHQpIHsKKyAgICAgICAgLy8gSWYgYWxsIHRocmVlIG9mICdsZWZ0Jywg
J3dpZHRoJywgYW5kICdyaWdodCcgYXJlICdhdXRvJzogRmlyc3Qgc2V0IGFueSAnYXV0bycgdmFs
dWVzIGZvciAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyB0byAwLgorICAgICAgICAv
LyBUaGVuLCBpZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQgZXN0YWJs
aXNoaW5nIHRoZSBzdGF0aWMtcG9zaXRpb24gY29udGFpbmluZyBibG9jayBpcyAnbHRyJyBzZXQg
J2xlZnQnIHRvIHRoZSBzdGF0aWMKKyAgICAgICAgLy8gcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUg
bnVtYmVyIHRocmVlIGJlbG93OyBvdGhlcndpc2UsIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMg
cG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIG9uZSBiZWxvdy4KKyAgICAgICAgdXNlZEhv
cml6b250YWxNYXJnaW4gPSB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9y
KDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsKKworICAgICAg
ICBhdXRvIHN0YXRpY0hvcml6b250YWxQb3NpdGlvbiA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlv
bkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMp
OworICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbikKKyAgICAgICAgICAgIGxlZnQg
PSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJp
Z2h0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOworICAgIH0gZWxzZSBpZiAobGVmdCAmJiB3
aWR0aCAmJiByaWdodCkgeworICAgICAgICAvLyBJZiBub25lIG9mIHRoZSB0aHJlZSBpcyAnYXV0
byc6IElmIGJvdGggJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgYXJlICdhdXRvJywg
c29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBjb25zdHJhaW50IHRoYXQgdGhlIHR3
byBtYXJnaW5zIGdldCBlcXVhbCB2YWx1ZXMsCisgICAgICAgIC8vIHVubGVzcyB0aGlzIHdvdWxk
IG1ha2UgdGhlbSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZSB3aGVuIGRpcmVjdGlvbiBvZiB0aGUg
Y29udGFpbmluZyBibG9jayBpcyAnbHRyJyAoJ3J0bCcpLCBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21h
cmdpbi1yaWdodCcpIHRvIHplcm8gYW5kCisgICAgICAgIC8vIHNvbHZlIGZvciAnbWFyZ2luLXJp
Z2h0JyAoJ21hcmdpbi1sZWZ0JykuIElmIG9uZSBvZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4t
cmlnaHQnIGlzICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgorICAg
ICAgICAvLyBJZiB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZh
bHVlIGZvciAnbGVmdCcgKGluIGNhc2UgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBj
b250YWluaW5nIGJsb2NrIGlzICdydGwnKSBvciAncmlnaHQnCisgICAgICAgIC8vIChpbiBjYXNl
ICdkaXJlY3Rpb24nIGlzICdsdHInKSBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCisgICAgICAg
IGlmICghY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmICFjb21wdXRlZEhvcml6b250
YWxNYXJnaW4uZW5kKSB7CisgICAgICAgICAgICBhdXRvIG1hcmdpblN0YXJ0QW5kRW5kID0gY29u
dGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAq
d2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7CisgICAgICAgICAg
ICBpZiAobWFyZ2luU3RhcnRBbmRFbmQgPj0gMCkKKyAgICAgICAgICAgICAgICB1c2VkSG9yaXpv
bnRhbE1hcmdpbiA9IHsgbWFyZ2luU3RhcnRBbmRFbmQgLyAyLCBtYXJnaW5TdGFydEFuZEVuZCAv
IDIgfTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0ID0gMF9sdTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4u
ZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdo
dCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSAwX2x1OworICAgICAg
ICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNvbnRhaW5pbmdCbG9j
a1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmln
aHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
ICghY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0KSB7CisgICAgICAgICAgICB1c2VkSG9y
aXpvbnRhbE1hcmdpbi5lbmQgPSAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZDsKKyAgICAg
ICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGgg
LSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmln
aHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKKyAgICAg
ICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gKmNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5zdGFydDsKKyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9IGNvbnRh
aW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBi
b3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJS
aWdodCArICpyaWdodCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1c2VkSG9yaXpv
bnRhbE1hcmdpbiA9IHsgKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCwgKmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbi5lbmQgfTsKKyAgICAgICAgICAgIC8vIE92ZXJjb25zdHJhaW5lZD8g
SWdub3JlIHJpZ2h0IChsZWZ0KS4KKyAgICAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKQorICAgICAgICAgICAgICAgIHJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNl
ZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyAqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVm
dCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxN
YXJnaW4uZW5kKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZWZ0ID0gY29u
dGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJM
ZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCAr
IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBPdGhlcndpc2UsIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2lu
LWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyB0byAwLCBhbmQgcGljayB0aGUgb25lIG9mIHRoZSBm
b2xsb3dpbmcgc2l4IHJ1bGVzIHRoYXQgYXBwbGllcy4KKyAgICAgICAgdXNlZEhvcml6b250YWxN
YXJnaW4gPSB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApLCBjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsKKyAgICB9CisKKyAgICBpZiAo
IWxlZnQgJiYgIXdpZHRoICYmIHJpZ2h0KSB7CisgICAgICAgIC8vICMxCisgICAgICAgIC8vIENh
bGN1bGF0ZSB0aGUgYXZhaWxhYmxlIHdpZHRoIGJ5IHNvbHZpbmcgZm9yICd3aWR0aCcgYWZ0ZXIg
c2V0dGluZyAnbGVmdCcgKGluIGNhc2UgMSkgdG8gMAorICAgICAgICBsZWZ0ID0gTGF5b3V0VW5p
dCB7IDAgfTsKKyAgICAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChs
YXlvdXRCb3gsIGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgbGVmdCA9IGNvbnRhaW5pbmdCbG9j
a1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRp
bmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6
b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKKyAgICB9IGVsc2UgaWYgKCFsZWZ0ICYmICFyaWdo
dCAmJiB3aWR0aCkgeworICAgICAgICAvLyAjMgorICAgICAgICBhdXRvIHN0YXRpY0hvcml6b250
YWxQb3NpdGlvbiA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9u
ZWQobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworICAgICAgICBpZiAoaXNMZWZ0
VG9SaWdodERpcmVjdGlvbikgeworICAgICAgICAgICAgbGVmdCA9IHN0YXRpY0hvcml6b250YWxQ
b3NpdGlvbjsKKyAgICAgICAgICAgIHJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxl
ZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVm
dCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxN
YXJnaW4uZW5kKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJpZ2h0ID0gc3RhdGlj
SG9yaXpvbnRhbFBvc2l0aW9uOworICAgICAgICAgICAgbGVmdCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdM
ZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRh
bE1hcmdpbi5lbmQgKyAqcmlnaHQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghd2lkdGgg
JiYgIXJpZ2h0ICYmIGxlZnQpIHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgLy8gQ2FsY3VsYXRl
IHRoZSBhdmFpbGFibGUgd2lkdGggYnkgc29sdmluZyBmb3IgJ3dpZHRoJyBhZnRlciBzZXR0aW5n
ICdyaWdodCcgKGluIGNhc2UgMykgdG8gMAorICAgICAgICByaWdodCA9IExheW91dFVuaXQgeyAw
IH07CisgICAgICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBjb250YWluaW5nQmxvY2tXaWR0aCAt
ICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRp
bmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5lbmQgKyAqcmlnaHQpOworICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgobGF5b3V0
Qm94LCBhdmFpbGFibGVXaWR0aCk7CisgICAgICAgIHJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBw
YWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhv
cml6b250YWxNYXJnaW4uZW5kKTsKKyAgICB9IGVsc2UgaWYgKCFsZWZ0ICYmIHdpZHRoICYmIHJp
Z2h0KSB7CisgICAgICAgIC8vICM0CisgICAgICAgIGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0
aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVm
dCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxN
YXJnaW4uZW5kICsgKnJpZ2h0KTsKKyAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiBsZWZ0ICYmIHJp
Z2h0KSB7CisgICAgICAgIC8vICM1CisgICAgICAgIHdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBw
YWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxN
YXJnaW4uZW5kICsgKnJpZ2h0KTsKKyAgICB9IGVsc2UgaWYgKCFyaWdodCAmJiBsZWZ0ICYmIHdp
ZHRoKSB7CisgICAgICAgIC8vICM2CisgICAgICAgIHJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBw
YWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhv
cml6b250YWxNYXJnaW4uZW5kKTsKKyAgICB9CisKKyAgICBBU1NFUlQobGVmdCk7CisgICAgQVNT
RVJUKHJpZ2h0KTsKKyAgICBBU1NFUlQod2lkdGgpOworCisgICAgLy8gRm9yIG91dC1vZi1mbG93
IGVsZW1lbnRzIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBl
ZGdlIG9mIHRoZSBhbmNlc3Rvci4KKyAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVk
IHZhbHVlIGlzIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExl
dCdzIGNvbnZlcnQgaXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBhdXRv
IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSBob3Jpem9udGFsQ29uc3RyYWlu
dHMubG9naWNhbExlZnQ7CisgICAgKmxlZnQgKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRp
Y2FsRWRnZTsKKyAgICAqcmlnaHQgKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRn
ZTsKKworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFt
IDw8ICJbUG9zaXRpb25dW1dpZHRoXVtNYXJnaW5dIC0+IG91dC1vZi1mbG93IG5vbi1yZXBsYWNl
ZCAtPiBsZWZ0KCIgPDwgKmxlZnQgPDwgInB4KSByaWdodCgiICA8PCAqcmlnaHQgPDwgInB4KSB3
aWR0aCgiIDw8ICp3aWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0IDw8ICJweCwgIiAgPDwgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kIDw8ICJweCkgbGF5
b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOworICAgIHJldHVybiB7ICpsZWZ0LCAqcmln
aHQsIHsgKndpZHRoLCB1c2VkSG9yaXpvbnRhbE1hcmdpbiB9IH07Cit9CisKK1ZlcnRpY2FsR2Vv
bWV0cnkgRm9ybWF0dGluZ0dlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0
cnkoY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYg
dmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlcGxhY2VkQm94Lmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQodmVydGljYWxDb25zdHJhaW50cy5s
b2dpY2FsSGVpZ2h0KTsKKworICAgIC8vIDEwLjYuNSBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHJl
cGxhY2VkIGVsZW1lbnRzCisgICAgLy8KKyAgICAvLyBUaGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0
JyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCisgICAgLy8g
SWYgJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyBpcyBzcGVjaWZpZWQgYXMgJ2F1dG8n
IGl0cyB1c2VkIHZhbHVlIGlzIGRldGVybWluZWQgYnkgdGhlIHJ1bGVzIGJlbG93LgorICAgIC8v
IDEuIElmIGJvdGggJ3RvcCcgYW5kICdib3R0b20nIGhhdmUgdGhlIHZhbHVlICdhdXRvJywgcmVw
bGFjZSAndG9wJyB3aXRoIHRoZSBlbGVtZW50J3Mgc3RhdGljIHBvc2l0aW9uLgorICAgIC8vIDIu
IElmICdib3R0b20nIGlzICdhdXRvJywgcmVwbGFjZSBhbnkgJ2F1dG8nIG9uICdtYXJnaW4tdG9w
JyBvciAnbWFyZ2luLWJvdHRvbScgd2l0aCAnMCcuCisgICAgLy8gMy4gSWYgYXQgdGhpcyBwb2lu
dCBib3RoICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIGFyZSBzdGlsbCAnYXV0bycs
IHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0
d28gbWFyZ2lucyBtdXN0IGdldCBlcXVhbCB2YWx1ZXMuCisgICAgLy8gNC4gSWYgYXQgdGhpcyBw
b2ludCB0aGVyZSBpcyBvbmx5IG9uZSAnYXV0bycgbGVmdCwgc29sdmUgdGhlIGVxdWF0aW9uIGZv
ciB0aGF0IHZhbHVlLgorICAgIC8vIDUuIElmIGF0IHRoaXMgcG9pbnQgdGhlIHZhbHVlcyBhcmUg
b3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgJ2JvdHRvbScgYW5kIHNvbHZl
IGZvciB0aGF0IHZhbHVlLgorCisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5m
b3JtYXR0aW5nQ29udGV4dCgpOworICAgIGF1dG8mIHN0eWxlID0gcmVwbGFjZWRCb3guc3R5bGUo
KTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9y
Qm94KHJlcGxhY2VkQm94KTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9ICp2ZXJ0
aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQ7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tX
aWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7CisKKyAgICBhdXRvIHRv
cCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0
aCk7CisgICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxCb3R0b20o
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gaGVpZ2h0ID0gaW5saW5lUmVwbGFj
ZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIHZlcnRpY2FsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykuY29udGVu
dEhlaWdodDsKKyAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBGb3JtYXR0aW5nR2Vv
bWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cyk7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpbkJlZm9yZSA9IGNv
bXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlOworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVz
ZWRNYXJnaW5BZnRlciA9IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXI7CisgICAgYXV0byBw
YWRkaW5nVG9wID0gYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgYXV0
byBwYWRkaW5nQm90dG9tID0gYm94R2VvbWV0cnkucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7
CisgICAgYXV0byBib3JkZXJUb3AgPSBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKTsKKyAgICBhdXRv
IGJvcmRlckJvdHRvbSA9IGJveEdlb21ldHJ5LmJvcmRlckJvdHRvbSgpOworCisgICAgaWYgKCF0
b3AgJiYgIWJvdHRvbSkgeworICAgICAgICAvLyAjMQorICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0
aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChyZXBsYWNlZEJveCwgdmVydGljYWxD
b25zdHJhaW50cyk7CisgICAgfQorCisgICAgaWYgKCFib3R0b20pIHsKKyAgICAgICAgLy8gIzIK
KyAgICAgICAgdXNlZE1hcmdpbkJlZm9yZSA9IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3Jl
LnZhbHVlT3IoMCk7CisgICAgICAgIHVzZWRNYXJnaW5BZnRlciA9IHVzZWRNYXJnaW5CZWZvcmU7
CisgICAgfQorCisgICAgaWYgKCF1c2VkTWFyZ2luQmVmb3JlICYmICF1c2VkTWFyZ2luQWZ0ZXIp
IHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgYXV0byBtYXJnaW5CZWZvcmVBbmRBZnRlciA9IGNv
bnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhl
aWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqYm90dG9tKTsKKyAgICAgICAg
dXNlZE1hcmdpbkJlZm9yZSA9IG1hcmdpbkJlZm9yZUFuZEFmdGVyIC8gMjsKKyAgICAgICAgdXNl
ZE1hcmdpbkFmdGVyID0gdXNlZE1hcmdpbkJlZm9yZTsKKyAgICB9CisKKyAgICAvLyAjNAorICAg
IGlmICghdG9wKQorICAgICAgICB0b3AgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnVzZWRN
YXJnaW5CZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0Jv
dHRvbSArIGJvcmRlckJvdHRvbSArICp1c2VkTWFyZ2luQWZ0ZXIgKyAqYm90dG9tKTsKKworICAg
IGlmICghYm90dG9tKQorICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAo
KnRvcCArICp1c2VkTWFyZ2luQmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdo
dCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyKTsKKwor
ICAgIGlmICghdXNlZE1hcmdpbkJlZm9yZSkKKyAgICAgICAgdXNlZE1hcmdpbkJlZm9yZSA9IGNv
bnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhl
aWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyICsg
KmJvdHRvbSk7CisKKyAgICBpZiAoIXVzZWRNYXJnaW5BZnRlcikKKyAgICAgICAgdXNlZE1hcmdp
bkFmdGVyID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyAqdXNlZE1hcmdpbkJlZm9y
ZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9y
ZGVyQm90dG9tICsgKmJvdHRvbSk7CisKKyAgICAvLyAjNQorICAgIGF1dG8gYm94SGVpZ2h0ID0g
KnRvcCArICp1c2VkTWFyZ2luQmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdo
dCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyICsgKmJv
dHRvbTsKKyAgICBpZiAoYm94SGVpZ2h0ID4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KQorICAgICAg
ICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArICp1c2VkTWFyZ2luQmVm
b3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBi
b3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyKTsgCisKKyAgICAvLyBGb3Igb3V0LW9mLWZs
b3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5n
IGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgorICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9u
ZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4g
TGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IHZlcnRpY2FsQ29uc3RyYWlu
dHMubG9naWNhbFRvcDsKKyAgICAqdG9wICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNh
bEVkZ2U7CisgICAgKmJvdHRvbSArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdl
OworCisgICAgQVNTRVJUKHRvcCk7CisgICAgQVNTRVJUKGJvdHRvbSk7CisgICAgQVNTRVJUKHVz
ZWRNYXJnaW5CZWZvcmUpOworICAgIEFTU0VSVCh1c2VkTWFyZ2luQWZ0ZXIpOworICAgIExPR19X
SVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbUG9zaXRpb25d
W0hlaWdodF1bTWFyZ2luXSAtPiBvdXQtb2YtZmxvdyByZXBsYWNlZCAtPiB0b3AoIiA8PCAqdG9w
IDw8ICJweCkgYm90dG9tKCIgIDw8ICpib3R0b20gPDwgInB4KSBoZWlnaHQoIiA8PCBoZWlnaHQg
PDwgInB4KSBtYXJnaW4oIiA8PCAqdXNlZE1hcmdpbkJlZm9yZSA8PCAicHgsICIgIDw8ICp1c2Vk
TWFyZ2luQWZ0ZXIgPDwgInB4KSBsYXlvdXRCb3goIiA8PCAmcmVwbGFjZWRCb3ggPDwgIikiKTsK
KyAgICByZXR1cm4geyAqdG9wLCAqYm90dG9tLCB7IGhlaWdodCwgeyAqdXNlZE1hcmdpbkJlZm9y
ZSwgKnVzZWRNYXJnaW5BZnRlciB9IH0gfTsKK30KKworSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1h
dHRpbmdHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3Qg
UmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxD
b25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5I
b3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChyZXBsYWNlZEJveC5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSk7CisKKyAgICAvLyAxMC4zLjggQWJzb2x1dGVseSBwb3NpdGlvbmVkLCByZXBs
YWNlZCBlbGVtZW50cworICAgIC8vIEluIHRoaXMgY2FzZSwgc2VjdGlvbiAxMC4zLjcgYXBwbGll
cyB1cCB0aHJvdWdoIGFuZCBpbmNsdWRpbmcgdGhlIGNvbnN0cmFpbnQgZXF1YXRpb24sIGJ1dCB0
aGUgcmVzdCBvZiBzZWN0aW9uIDEwLjMuNyBpcyByZXBsYWNlZCBieSB0aGUgZm9sbG93aW5nIHJ1
bGVzOgorICAgIC8vCisgICAgLy8gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1p
bmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuIElmICdtYXJnaW4tbGVmdCcgb3Ig
J21hcmdpbi1yaWdodCcgaXMgc3BlY2lmaWVkIGFzICdhdXRvJyBpdHMgdXNlZCB2YWx1ZSBpcyBk
ZXRlcm1pbmVkIGJ5IHRoZSBydWxlcyBiZWxvdy4KKyAgICAvLyAxLiBJZiBib3RoICdsZWZ0JyBh
bmQgJ3JpZ2h0JyBoYXZlIHRoZSB2YWx1ZSAnYXV0bycsIHRoZW4gaWYgdGhlICdkaXJlY3Rpb24n
IHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBvc2l0aW9u
IGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicsCisgICAgLy8gICBzZXQgJ2xlZnQnIHRvIHRoZSBz
dGF0aWMgcG9zaXRpb247IGVsc2UgaWYgJ2RpcmVjdGlvbicgaXMgJ3J0bCcsIHNldCAncmlnaHQn
IHRvIHRoZSBzdGF0aWMgcG9zaXRpb24uCisgICAgLy8gMi4gSWYgJ2xlZnQnIG9yICdyaWdodCcg
YXJlICdhdXRvJywgcmVwbGFjZSBhbnkgJ2F1dG8nIG9uICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdp
bi1yaWdodCcgd2l0aCAnMCcuCisgICAgLy8gMy4gSWYgYXQgdGhpcyBwb2ludCBib3RoICdtYXJn
aW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIGFyZSBzdGlsbCAnYXV0bycsIHNvbHZlIHRoZSBl
cXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBt
dXN0IGdldCBlcXVhbCB2YWx1ZXMsCisgICAgLy8gICB1bmxlc3MgdGhpcyB3b3VsZCBtYWtlIHRo
ZW0gbmVnYXRpdmUsIGluIHdoaWNoIGNhc2Ugd2hlbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBjb250
YWluaW5nIGJsb2NrIGlzICdsdHInICgncnRsJyksIHNldCAnbWFyZ2luLWxlZnQnICgnbWFyZ2lu
LXJpZ2h0JykgdG8gemVybyBhbmQKKyAgICAvLyAgIHNvbHZlIGZvciAnbWFyZ2luLXJpZ2h0JyAo
J21hcmdpbi1sZWZ0JykuCisgICAgLy8gNC4gSWYgYXQgdGhpcyBwb2ludCB0aGVyZSBpcyBhbiAn
YXV0bycgbGVmdCwgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgorICAgIC8vIDUu
IElmIGF0IHRoaXMgcG9pbnQgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3Jl
IHRoZSB2YWx1ZSBmb3IgZWl0aGVyICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicgcHJv
cGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yCisgICAgLy8gICAncmln
aHQnIChpbiBjYXNlICdkaXJlY3Rpb24nIGlzICdsdHInKSBhbmQgc29sdmUgZm9yIHRoYXQgdmFs
dWUuCisKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250
ZXh0KCk7CisgICAgYXV0byYgc3R5bGUgPSByZXBsYWNlZEJveC5zdHlsZSgpOworICAgIGF1dG8m
IGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocmVwbGFjZWRC
b3gpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWlu
dHMubG9naWNhbFdpZHRoOworICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IHJlcGxh
Y2VkQm94LmNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
OworCisgICAgYXV0byBsZWZ0ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsTGVmdCgpLCBj
b250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byByaWdodCA9IGNvbXB1dGVkVmFsdWUoc3R5
bGUubG9naWNhbFJpZ2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworICAgIE9wdGlv
bmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5TdGFydCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydDsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luRW5kID0gY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZDsKKyAgICBhdXRvIHdpZHRoID0gaW5saW5lUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywg
dmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpLmNvbnRlbnRX
aWR0aDsKKyAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gYm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52
YWx1ZU9yKDApOworICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gYm94R2VvbWV0cnkucGFkZGluZ1Jp
Z2h0KCkudmFsdWVPcigwKTsKKyAgICBhdXRvIGJvcmRlckxlZnQgPSBib3hHZW9tZXRyeS5ib3Jk
ZXJMZWZ0KCk7CisgICAgYXV0byBib3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0
KCk7CisKKyAgICBpZiAoIWxlZnQgJiYgIXJpZ2h0KSB7CisgICAgICAgIC8vICMxCisgICAgICAg
IGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9u
Rm9yT3V0T2ZGbG93UG9zaXRpb25lZChyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
KTsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCisgICAgICAgICAgICBsZWZ0
ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
aWdodCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAoIWxlZnQg
fHwgIXJpZ2h0KSB7CisgICAgICAgIC8vICMyCisgICAgICAgIHVzZWRNYXJnaW5TdGFydCA9IGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApOworICAgICAgICB1c2VkTWFy
Z2luRW5kID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApOworICAgIH0K
KworICAgIGlmICghdXNlZE1hcmdpblN0YXJ0ICYmICF1c2VkTWFyZ2luRW5kKSB7CisgICAgICAg
IC8vICMzCisgICAgICAgIGF1dG8gbWFyZ2luU3RhcnRBbmRFbmQgPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGlu
Z1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOworICAgICAgICBpZiAobWFyZ2luU3RhcnRB
bmRFbmQgPj0gMCkgeworICAgICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gbWFyZ2luU3RhcnRB
bmRFbmQgLyAyOworICAgICAgICAgICAgdXNlZE1hcmdpbkVuZCA9IHVzZWRNYXJnaW5TdGFydDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KSB7CisgICAgICAgICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gMF9sdTsKKyAgICAgICAgICAg
ICAgICB1c2VkTWFyZ2luRW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqdXNl
ZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5n
UmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHVzZWRNYXJnaW5FbmQgPSAwX2x1OworICAgICAgICAgICAgICAgIHVzZWRN
YXJnaW5TdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCAr
IHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2Vk
TWFyZ2luRW5kICsgKnJpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vICM0CisgICAgaWYgKCFsZWZ0KQorICAgICAgICBsZWZ0ID0gY29udGFpbmluZ0Jsb2Nr
V2lkdGggLSAoKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdp
ZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCArICpyaWdo
dCk7CisKKyAgICBpZiAoIXJpZ2h0KQorICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVm
dCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCk7
CisKKyAgICBpZiAoIXVzZWRNYXJnaW5TdGFydCkKKyAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0g
Y29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQg
KyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJnaW5FbmQgKyAq
cmlnaHQpOworCisgICAgaWYgKCF1c2VkTWFyZ2luRW5kKQorICAgICAgICB1c2VkTWFyZ2luRW5k
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArICpyaWdodCk7CisKKyAgICBhdXRvIGJveFdpZHRoID0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5T
dGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCArICpyaWdodCk7CisgICAgaWYgKGJveFdpZHRo
ID4gY29udGFpbmluZ0Jsb2NrV2lkdGgpIHsKKyAgICAgICAgLy8gIzUgT3Zlci1jb25zdHJhaW5l
ZD8KKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCisgICAgICAgICAgICByaWdo
dCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5TdGFydCArIGJv
cmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyAqdXNlZE1hcmdpbkVuZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxlZnQgPSBj
b250YWluaW5nQmxvY2tXaWR0aCAtICgqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBh
ZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFy
Z2luRW5kICsgKnJpZ2h0KTsKKyAgICB9CisKKyAgICBBU1NFUlQobGVmdCk7CisgICAgQVNTRVJU
KHJpZ2h0KTsKKyAgICBBU1NFUlQodXNlZE1hcmdpblN0YXJ0KTsKKyAgICBBU1NFUlQodXNlZE1h
cmdpbkVuZCk7CisKKyAgICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5p
bmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgor
ICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3Jk
aW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3Jk
ZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGlu
Z1ZlcnRpY2FsRWRnZSA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKKyAgICAq
bGVmdCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOworICAgICpyaWdodCAr
PSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOworCisgICAgTE9HX1dJVEhfU1RS
RUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlvbl1bV2lkdGhd
W01hcmdpbl0gLT4gb3V0LW9mLWZsb3cgcmVwbGFjZWQgLT4gbGVmdCgiIDw8ICpsZWZ0IDw8ICJw
eCkgcmlnaHQoIiAgPDwgKnJpZ2h0IDw8ICJweCkgd2lkdGgoIiA8PCB3aWR0aCA8PCAicHgpIG1h
cmdpbigiIDw8ICp1c2VkTWFyZ2luU3RhcnQgPDwgInB4LCAiICA8PCAqdXNlZE1hcmdpbkVuZCA8
PCAicHgpIGxheW91dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOworICAgIHJldHVybiB7
ICpsZWZ0LCAqcmlnaHQsIHsgd2lkdGgsIHsgKnVzZWRNYXJnaW5TdGFydCwgKnVzZWRNYXJnaW5F
bmQgfSB9IH07Cit9CisKK0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5
Ojpjb21wbGljYXRlZENhc2VzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRp
Y2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsKKyAgICAvLyBUT0RPOiBVc2UgY29tcGxpY2F0
ZWQtY2FzZSBmb3IgZG9jdW1lbnQgcmVuZGVyZXIgZm9yIG5vdyAoc2VlIEJsb2NrRm9ybWF0dGlu
Z0dlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4pLgorICAgIEFTU0VSVCgobGF5b3V0Qm94
LmlzQmxvY2tMZXZlbEJveCgpICYmIGxheW91dEJveC5pc0luRmxvdygpICYmICFsYXlvdXRCb3gu
aXNPdmVyZmxvd1Zpc2libGUoKSkgfHwgbGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSB8fCBs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNEb2N1bWVudEJv
eCgpIHx8IGxheW91dEJveC5pc1RhYmxlQm94KCkpOworCisgICAgLy8gMTAuNi42IENvbXBsaWNh
dGVkIGNhc2VzCisgICAgLy8KKyAgICAvLyBCbG9jay1sZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1l
bnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292ZXJmbG93JyBkb2VzIG5vdCBjb21wdXRlIHRvICd2
aXNpYmxlJyAoZXhjZXB0IGlmIHRoZSAnb3ZlcmZsb3cnIHByb3BlcnR5J3MgdmFsdWUgaGFzIGJl
ZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQpLgorICAgIC8vICdJbmxpbmUtYmxvY2snLCBu
b24tcmVwbGFjZWQgZWxlbWVudHMuCisgICAgLy8gRmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVt
ZW50cy4KKyAgICAvLworICAgIC8vIDEuIElmICdtYXJnaW4tdG9wJywgb3IgJ21hcmdpbi1ib3R0
b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMgMC4KKyAgICAvLyAyLiBJZiAnaGVp
Z2h0JyBpcyAnYXV0bycsIHRoZSBoZWlnaHQgZGVwZW5kcyBvbiB0aGUgZWxlbWVudCdzIGRlc2Nl
bmRhbnRzIHBlciAxMC42LjcuCisKKyAgICBhdXRvIGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkg
OiBjb21wdXRlZEhlaWdodChsYXlvdXRCb3gpOworICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgLy8gIzEKKyAgICBhdXRvIHVzZWRWZXJ0
aWNhbE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbi5hZnRlci52YWx1ZU9yKDApIH07IAorICAgIC8vICMyCisgICAgaWYgKCFoZWlnaHQpIHsK
KyAgICAgICAgQVNTRVJUKGlzSGVpZ2h0QXV0byhsYXlvdXRCb3gpKTsKKyAgICAgICAgaWYgKCFp
czxDb250YWluZXJCb3g+KGxheW91dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lckJveD4obGF5
b3V0Qm94KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKKyAgICAgICAgICAgIGhlaWdodCA9
IDBfbHU7CisgICAgICAgIGVsc2UgaWYgKGxheW91dEJveC5pc0RvY3VtZW50Qm94KCkgJiYgIWxh
eW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50Qm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpOworICAg
ICAgICAgICAgYXV0byB0b3AgPSBCb3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpkb2N1bWVudEJveC5maXJzdEluRmxvd0NoaWxkKCkp
KS50b3AoKTsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tID0gQm94R2VvbWV0cnk6Om1hcmdpbkJv
eFJlY3QoZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqZG9jdW1lbnRCb3gubGFz
dEluRmxvd0NoaWxkKCkpKS5ib3R0b20oKTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVj
aWFsIChxdWlyaz8pIGJlaGF2aW9yIHNpbmNlIHRoZSBkb2N1bWVudCBib3ggaXMgbm90IGEgZm9y
bWF0dGluZyBjb250ZXh0IHJvb3QgYW5kCisgICAgICAgICAgICAvLyBhbGwgdGhlIGZsb2F0IGJv
eGVzIGVuZCB1cCBhdCB0aGUgSUNCIGxldmVsLgorICAgICAgICAgICAgYXV0byYgaW5pdGlhbENv
bnRhaW5pbmdCbG9jayA9IGRvY3VtZW50Qm94LmZvcm1hdHRpbmdDb250ZXh0Um9vdCgpOworICAg
ICAgICAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBmb3JtYXR0
aW5nQ29udGV4dCgpLCBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlu
aXRpYWxDb250YWluaW5nQmxvY2spLmZsb2F0aW5nU3RhdGUoKSB9OworICAgICAgICAgICAgaWYg
KGF1dG8gZmxvYXRCb3R0b20gPSBmbG9hdGluZ0NvbnRleHQuYm90dG9tKCkpIHsKKyAgICAgICAg
ICAgICAgICBib3R0b20gPSBzdGQ6Om1heDxMYXlvdXRVbml0PigqZmxvYXRCb3R0b20sIGJvdHRv
bSk7CisgICAgICAgICAgICAgICAgYXV0byBmbG9hdFRvcCA9IGZsb2F0aW5nQ29udGV4dC50b3Ao
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZmxvYXRUb3ApOworICAgICAgICAgICAgICAgIHRv
cCA9IHN0ZDo6bWluPExheW91dFVuaXQ+KCpmbG9hdFRvcCwgdG9wKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGhlaWdodCA9IGJvdHRvbSAtIHRvcDsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVChsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgp
KTsKKyAgICAgICAgICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4
dFJvb3QoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEFTU0VSVChoZWlnaHQpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRp
bmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWlnaHRdW01hcmdpbl0gLT4gZmxvYXRpbmcg
bm9uLXJlcGxhY2VkIC0+IGhlaWdodCgiIDw8ICpoZWlnaHQgPDwgInB4KSBtYXJnaW4oIiA8PCB1
c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlIDw8ICJweCwgIiA8PCB1c2VkVmVydGljYWxNYXJnaW4u
YWZ0ZXIgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAg
cmV0dXJuIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4geyAqaGVpZ2h0LCB1c2VkVmVydGljYWxNYXJn
aW4gfTsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdHZW9tZXRyeTo6Zmxv
YXRpbmdOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNv
bnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cykKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgJiYgIWxh
eW91dEJveC5pc1JlcGxhY2VkQm94KCkpOworCisgICAgLy8gMTAuMy41IEZsb2F0aW5nLCBub24t
cmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vIDEuIElmICdtYXJnaW4tbGVmdCcsIG9y
ICdtYXJnaW4tcmlnaHQnIGFyZSBjb21wdXRlZCBhcyAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUg
aXMgJzAnLgorICAgIC8vIDIuIElmICd3aWR0aCcgaXMgY29tcHV0ZWQgYXMgJ2F1dG8nLCB0aGUg
dXNlZCB2YWx1ZSBpcyB0aGUgInNocmluay10by1maXQiIHdpZHRoLgorCisgICAgYXV0byBjb21w
dXRlZEhvcml6b250YWxNYXJnaW4gPSBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisKKyAgICAvLyAj
MQorICAgIGF1dG8gdXNlZEhvcml6b250YWxsTWFyZ2luID0gVXNlZEhvcml6b250YWxNYXJnaW4g
eyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07CisgICAgLy8gIzIKKyAgICBhdXRvIHdpZHRo
ID0gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkV2lkdGgobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3Ry
YWludHMubG9naWNhbFdpZHRoKTsKKyAgICBpZiAoIXdpZHRoKQorICAgICAgICB3aWR0aCA9IHNo
cmlua1RvRml0V2lkdGgobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdp
ZHRoKTsKKworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3Ry
ZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gZmxvYXRpbmcgbm9uLXJlcGxhY2VkIC0+IHdpZHRo
KCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZEhvcml6b250YWxsTWFyZ2luLnN0
YXJ0IDw8ICJweCwgIiA8PCB1c2VkSG9yaXpvbnRhbGxNYXJnaW4uZW5kIDw8ICJweCkgLT4gbGF5
b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOworICAgIHJldHVybiBDb250ZW50V2lkdGhB
bmRNYXJnaW4geyAqd2lkdGgsIHVzZWRIb3Jpem9udGFsbE1hcmdpbiB9OworfQorCitDb250ZW50
SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZENvbnRl
bnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJp
ZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKHJlcGxhY2VkQm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOworCisgICAgLy8g
MTAuNi4yIElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxl
bWVudHMgaW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snCisgICAgLy8gcmVwbGFjZWQgZWxl
bWVudHMgaW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1lbnRzCisgICAg
TE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWln
aHRdW01hcmdpbl0gLT4gZmxvYXRpbmcgcmVwbGFjZWQgLT4gcmVkaXJlY3RlZCB0byBpbmxpbmUg
cmVwbGFjZWQiKTsKKyAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFy
Z2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwgb3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzKTsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdHZW9t
ZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBsYWNl
ZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRl
bkhvcml6b250YWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKHJlcGxhY2VkQm94LmlzRmxvYXRpbmdQ
b3NpdGlvbmVkKCkpOworCisgICAgLy8gMTAuMy42IEZsb2F0aW5nLCByZXBsYWNlZCBlbGVtZW50
cworICAgIC8vCisgICAgLy8gMS4gSWYgJ21hcmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBh
cmUgY29tcHV0ZWQgYXMgJ2F1dG8nLCB0aGVpciB1c2VkIHZhbHVlIGlzICcwJy4KKyAgICAvLyAy
LiBUaGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSBy
ZXBsYWNlZCBlbGVtZW50cy4KKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZv
cm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKHJlcGxhY2VkQm94LCBo
b3Jpem9udGFsQ29uc3RyYWludHMpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdD
b250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWlnaHRdW01hcmdpbl0gLT4gZmxvYXRpbmcgcmVw
bGFjZWQgLT4gcmVkaXJlY3RlZCB0byBpbmxpbmUgcmVwbGFjZWQiKTsKKyAgICBhdXRvIHVzZWRN
YXJnaW4gPSBVc2VkSG9yaXpvbnRhbE1hcmdpbiB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5z
dGFydC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkg
fTsKKyAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFj
ZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCB7IG92ZXJyaWRkZW5Ib3Jpem9udGFs
VmFsdWVzLndpZHRoLCB1c2VkTWFyZ2luIH0pOworfQorCitWZXJ0aWNhbEdlb21ldHJ5IEZvcm1h
dHRpbmdHZW9tZXRyeTo6b3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91
dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMs
IGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92
ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAor
eworICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOworCisgICAg
aWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQorICAgICAgICByZXR1cm4gb3V0T2ZGbG93
Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0
Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlk
ZGVuVmVydGljYWxWYWx1ZXMpOworICAgIHJldHVybiBvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2Fs
R2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25z
dHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsK
K30KKworSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdHZW9tZXRyeTo6b3V0T2ZGbG93SG9y
aXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29u
c3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50
cyYgdmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMm
IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCkpOworCisgICAgaWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJv
eCgpKQorICAgICAgICByZXR1cm4gb3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0
cnkoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKKyAgICByZXR1cm4gb3V0T2ZGbG93UmVw
bGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCks
IGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMpOworfQorCitDb250ZW50SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdH
ZW9tZXRyeTo6ZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywg
Y29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMp
IGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsK
KworICAgIGlmICghbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKKyAgICAgICAgcmV0dXJuIGNv
bXBsaWNhdGVkQ2FzZXMobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcyk7CisgICAgcmV0dXJuIGZsb2F0aW5nUmVwbGFjZWRDb250ZW50SGVp
Z2h0QW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFs
Q29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Cit9CisKK0NvbnRlbnRXaWR0
aEFuZE1hcmdpbiBGb3JtYXR0aW5nR2VvbWV0cnk6OmZsb2F0aW5nQ29udGVudFdpZHRoQW5kTWFy
Z2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9h
dGluZ1Bvc2l0aW9uZWQoKSk7CisKKyAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkp
CisgICAgICAgIHJldHVybiBmbG9hdGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2lu
KGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZh
bHVlcyk7CisgICAgcmV0dXJuIGZsb2F0aW5nUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4o
ZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywg
b3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOworfQorCitDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
IEZvcm1hdHRpbmdHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIE9wdGlvbmFsPFZlcnRpY2FsQ29uc3RyYWludHM+
IHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3Zl
cnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAoreworICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVw
bGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBm
bG93LCAnaW5saW5lLWJsb2NrJyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQg
ZmxvYXRpbmcgcmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vIDEuIElmICdtYXJnaW4t
dG9wJywgb3IgJ21hcmdpbi1ib3R0b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMg
MC4KKyAgICAvLyAyLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUgY29tcHV0ZWQg
dmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgYWxzbyBoYXMgYW4gaW50cmluc2ljIGhl
aWdodCwgdGhlbiB0aGF0IGludHJpbnNpYyBoZWlnaHQgaXMgdGhlIHVzZWQgdmFsdWUgb2YgJ2hl
aWdodCcuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiAnaGVpZ2h0JyBoYXMgYSBjb21wdXRlZCB2
YWx1ZSBvZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIHRo
ZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcgaXM6CisgICAgLy8gICAgKHVzZWQgd2lkdGgp
IC8gKGludHJpbnNpYyByYXRpbykKKyAgICAvLyA0LiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhh
cyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRy
aW5zaWMgaGVpZ2h0LCB0aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0aGUgdXNlZCB2YWx1
ZSBvZiAnaGVpZ2h0Jy4KKyAgICAvLyA1LiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNv
bXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYnV0IG5vbmUgb2YgdGhlIGNvbmRpdGlvbnMgYWJvdmUg
YXJlIG1ldCwgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBtdXN0IGJlIHNldCB0bwor
ICAgIC8vICAgIHRoZSBoZWlnaHQgb2YgdGhlIGxhcmdlc3QgcmVjdGFuZ2xlIHRoYXQgaGFzIGEg
MjoxIHJhdGlvLCBoYXMgYSBoZWlnaHQgbm90IGdyZWF0ZXIgdGhhbiAxNTBweCwgYW5kIGhhcyBh
IHdpZHRoIG5vdCBncmVhdGVyIHRoYW4gdGhlIGRldmljZSB3aWR0aC4KKworICAgIC8vICMxCisg
ICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwor
ICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsK
KyAgICBhdXRvIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29s
bGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwg
Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CisgICAgYXV0byYgc3R5
bGUgPSByZXBsYWNlZEJveC5zdHlsZSgpOworCisgICAgYXV0byBoZWlnaHQgPSBvdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMuaGVpZ2h0ID8gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodC52
YWx1ZSgpIDogY29tcHV0ZWRIZWlnaHQocmVwbGFjZWRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMg
PyB2ZXJ0aWNhbENvbnN0cmFpbnRzLT5sb2dpY2FsSGVpZ2h0IDogV1RGOjpudWxsb3B0KTsKKyAg
ICBhdXRvIGhlaWdodElzQXV0byA9ICFvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0ICYm
IGlzSGVpZ2h0QXV0byhyZXBsYWNlZEJveCk7CisgICAgYXV0byB3aWR0aElzQXV0byA9IHN0eWxl
LmxvZ2ljYWxXaWR0aCgpLmlzQXV0bygpOworCisgICAgaWYgKGhlaWdodElzQXV0byAmJiB3aWR0
aElzQXV0byAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNIZWlnaHQoKSkgeworICAgICAgICAv
LyAjMgorICAgICAgICBoZWlnaHQgPSByZXBsYWNlZEJveC5pbnRyaW5zaWNIZWlnaHQoKTsKKyAg
ICB9IGVsc2UgaWYgKGhlaWdodElzQXV0byAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNSYXRp
bygpKSB7CisgICAgICAgIC8vICMzCisgICAgICAgIGF1dG8gdXNlZFdpZHRoID0gZm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocmVwbGFjZWRCb3gpLmNvbnRlbnRCb3hXaWR0aCgpOwor
ICAgICAgICBoZWlnaHQgPSB1c2VkV2lkdGggLyByZXBsYWNlZEJveC5pbnRyaW5zaWNSYXRpbygp
OworICAgIH0gZWxzZSBpZiAoaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNp
Y0hlaWdodCgpKSB7CisgICAgICAgIC8vICM0CisgICAgICAgIGhlaWdodCA9IHJlcGxhY2VkQm94
LmludHJpbnNpY0hlaWdodCgpOworICAgIH0gZWxzZSBpZiAoaGVpZ2h0SXNBdXRvKSB7CisgICAg
ICAgIC8vICM1CisgICAgICAgIGhlaWdodCA9IHsgMTUwIH07CisgICAgfQorCisgICAgQVNTRVJU
KGhlaWdodCk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQs
IHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAtPiBpbmZsb3cgcmVwbGFjZWQgLT4gaGVpZ2h0
KCIgPDwgKmhlaWdodCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZv
cmUgPDwgInB4LCAiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciA8PCAicHgpIC0+IGxheW91
dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOworICAgIHJldHVybiB7ICpoZWlnaHQsIHVz
ZWRWZXJ0aWNhbE1hcmdpbiB9OworfQorCitDb250ZW50V2lkdGhBbmRNYXJnaW4gRm9ybWF0dGlu
Z0dlb21ldHJ5OjppbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBs
YWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCBPcHRpb25hbDxWZXJ0aWNhbENvbnN0cmFpbnRzPiB2ZXJ0aWNhbENv
bnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMpCit7CisgICAgLy8gMTAuMy4yIElubGluZSwgcmVwbGFjZWQgZWxlbWVu
dHMKKyAgICAvLworICAgIC8vIEEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nIGZvciAnbWFyZ2lu
LWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGJlY29tZXMgYSB1c2VkIHZhbHVlIG9mICcwJy4KKyAg
ICAvLworICAgIC8vIDEuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgnIGJvdGggaGF2ZSBjb21wdXRl
ZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBhbHNvIGhhcyBhbiBpbnRyaW5zaWMg
d2lkdGgsIHRoZW4gdGhhdCBpbnRyaW5zaWMgd2lkdGggaXMgdGhlIHVzZWQgdmFsdWUgb2YgJ3dp
ZHRoJy4KKyAgICAvLworICAgIC8vIDIuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgnIGJvdGggaGF2
ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBoYXMgbm8gaW50cmlu
c2ljIHdpZHRoLCBidXQgZG9lcyBoYXZlIGFuIGludHJpbnNpYyBoZWlnaHQgYW5kIGludHJpbnNp
YyByYXRpbzsKKyAgICAvLyAgICBvciBpZiAnd2lkdGgnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9m
ICdhdXRvJywgJ2hlaWdodCcgaGFzIHNvbWUgb3RoZXIgY29tcHV0ZWQgdmFsdWUsIGFuZCB0aGUg
ZWxlbWVudCBkb2VzIGhhdmUgYW4gaW50cmluc2ljIHJhdGlvOworICAgIC8vICAgIHRoZW4gdGhl
IHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpczogKHVzZWQgaGVpZ2h0KSAqIChpbnRyaW5zaWMgcmF0
aW8pCisgICAgLy8KKyAgICAvLyAzLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUg
Y29tcHV0ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgaGFzIGFuIGludHJpbnNp
YyByYXRpbyBidXQgbm8gaW50cmluc2ljIGhlaWdodCBvciB3aWR0aCwKKyAgICAvLyAgICB0aGVu
IHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgdW5kZWZpbmVkIGluIENTUyAyLjIuIEhvd2V2
ZXIsIGl0IGlzIHN1Z2dlc3RlZCB0aGF0LCBpZiB0aGUgY29udGFpbmluZyBibG9jaydzIHdpZHRo
IGRvZXMgbm90IGl0c2VsZiBkZXBlbmQgb24gdGhlIHJlcGxhY2VkCisgICAgLy8gICAgZWxlbWVu
dCdzIHdpZHRoLCB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgY2FsY3VsYXRlZCBm
cm9tIHRoZSBjb25zdHJhaW50IGVxdWF0aW9uIHVzZWQgZm9yIGJsb2NrLWxldmVsLCBub24tcmVw
bGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cuCisgICAgLy8KKyAgICAvLyA0LiBPdGhlcndp
c2UsIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhlIGVs
ZW1lbnQgaGFzIGFuIGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0IGludHJpbnNpYyB3aWR0aCBp
cyB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnLgorICAgIC8vCisgICAgLy8gNS4gT3RoZXJ3aXNl
LCBpZiAnd2lkdGgnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYnV0IG5vbmUgb2Yg
dGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG1ldCwgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lk
dGgnIGJlY29tZXMgMzAwcHguCisgICAgLy8gICAgSWYgMzAwcHggaXMgdG9vIHdpZGUgdG8gZml0
IHRoZSBkZXZpY2UsIFVBcyBzaG91bGQgdXNlIHRoZSB3aWR0aCBvZiB0aGUgbGFyZ2VzdCByZWN0
YW5nbGUgdGhhdCBoYXMgYSAyOjEgcmF0aW8gYW5kIGZpdHMgdGhlIGRldmljZSBpbnN0ZWFkLgor
CisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBGb3JtYXR0aW5nR2VvbWV0cnk6
OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFp
bnRzKTsKKworICAgIGF1dG8gdXNlZE1hcmdpblN0YXJ0ID0gWyZdIHsKKyAgICAgICAgaWYgKG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbikKKyAgICAgICAgICAgIHJldHVybiBvdmVy
cmlkZGVuSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4tPnN0YXJ0OworICAgICAgICByZXR1cm4gY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMF9sdSk7CisgICAgfTsKKworICAg
IGF1dG8gdXNlZE1hcmdpbkVuZCA9IFsmXSB7CisgICAgICAgIGlmIChvdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcy5tYXJnaW4pCisgICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGRlbkhvcml6b250
YWxWYWx1ZXMubWFyZ2luLT5lbmQ7CisgICAgICAgIHJldHVybiBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uZW5kLnZhbHVlT3IoMF9sdSk7CisgICAgfTsKKworICAgIGF1dG8gd2lkdGggPSBvdmVy
cmlkZGVuSG9yaXpvbnRhbFZhbHVlcy53aWR0aCA/IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVz
LndpZHRoIDogY29tcHV0ZWRXaWR0aChyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LmxvZ2ljYWxXaWR0aCk7CisgICAgYXV0byBoZWlnaHRJc0F1dG8gPSBpc0hlaWdodEF1dG8ocmVw
bGFjZWRCb3gpOworICAgIGF1dG8gaGVpZ2h0ID0gY29tcHV0ZWRIZWlnaHQocmVwbGFjZWRCb3gs
IHZlcnRpY2FsQ29uc3RyYWludHMgPyB2ZXJ0aWNhbENvbnN0cmFpbnRzLT5sb2dpY2FsSGVpZ2h0
IDogV1RGOjpudWxsb3B0KTsKKworICAgIGlmICghd2lkdGggJiYgaGVpZ2h0SXNBdXRvICYmIHJl
cGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkpIHsKKyAgICAgICAgLy8gIzEKKyAgICAgICAg
d2lkdGggPSByZXBsYWNlZEJveC5pbnRyaW5zaWNXaWR0aCgpOworICAgIH0gZWxzZSBpZiAoKCF3
aWR0aCAmJiBoZWlnaHRJc0F1dG8gJiYgIXJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkg
JiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkgJiYgcmVwbGFjZWRCb3guaGFzSW50
cmluc2ljUmF0aW8oKSkKKyAgICAgICAgfHwgKCF3aWR0aCAmJiBoZWlnaHQgJiYgcmVwbGFjZWRC
b3guaGFzSW50cmluc2ljUmF0aW8oKSkpIHsKKyAgICAgICAgLy8gIzIKKyAgICAgICAgd2lkdGgg
PSBoZWlnaHQudmFsdWVPcihyZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNIZWlnaHQoKSkgKiByZXBs
YWNlZEJveC5pbnRyaW5zaWNSYXRpbygpOworICAgIH0gZWxzZSBpZiAoIXdpZHRoICYmIGhlaWdo
dElzQXV0byAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNSYXRpbygpICYmICFyZXBsYWNlZEJv
eC5oYXNJbnRyaW5zaWNXaWR0aCgpICYmICFyZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNIZWlnaHQo
KSkgeworICAgICAgICAvLyAjMworICAgICAgICAvLyBGSVhNRTogdW5kZWZpbmVkIGJ1dCBzdXJl
bHkgZG9hYmxlLgorICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgIH0g
ZWxzZSBpZiAoIXdpZHRoICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkpIHsKKyAg
ICAgICAgLy8gIzQKKyAgICAgICAgd2lkdGggPSByZXBsYWNlZEJveC5pbnRyaW5zaWNXaWR0aCgp
OworICAgIH0gZWxzZSBpZiAoIXdpZHRoKSB7CisgICAgICAgIC8vICM1CisgICAgICAgIHdpZHRo
ID0geyAzMDAgfTsKKyAgICB9CisKKyAgICBBU1NFUlQod2lkdGgpOworCisgICAgTE9HX1dJVEhf
U1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0aF1bTWFyZ2lu
XSAtPiBpbmZsb3cgcmVwbGFjZWQgLT4gd2lkdGgoIiA8PCAqd2lkdGggPDwgInB4KSBtYXJnaW4o
IiA8PCB1c2VkTWFyZ2luU3RhcnQoKSA8PCAicHgsICIgPDwgdXNlZE1hcmdpbkVuZCgpIDw8ICJw
eCkgLT4gbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8ICIpIik7CisgICAgcmV0dXJuIHsg
KndpZHRoLCB7IHVzZWRNYXJnaW5TdGFydCgpLCB1c2VkTWFyZ2luRW5kKCkgfSB9OworfQorCitM
YXlvdXRTaXplIEZvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zm
c2V0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cykgY29uc3QKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5G
bG93UG9zaXRpb25lZCgpKTsKKworICAgIC8vIDkuNC4zIFJlbGF0aXZlIHBvc2l0aW9uaW5nCisg
ICAgLy8KKyAgICAvLyBUaGUgJ3RvcCcgYW5kICdib3R0b20nIHByb3BlcnRpZXMgbW92ZSByZWxh
dGl2ZWx5IHBvc2l0aW9uZWQgZWxlbWVudChzKSB1cCBvciBkb3duIHdpdGhvdXQgY2hhbmdpbmcg
dGhlaXIgc2l6ZS4KKyAgICAvLyBUb3AnIG1vdmVzIHRoZSBib3hlcyBkb3duLCBhbmQgJ2JvdHRv
bScgbW92ZXMgdGhlbSB1cC4gU2luY2UgYm94ZXMgYXJlIG5vdCBzcGxpdCBvciBzdHJldGNoZWQg
YXMgYSByZXN1bHQgb2YgJ3RvcCcgb3IgJ2JvdHRvbScsIHRoZSB1c2VkIHZhbHVlcyBhcmUgYWx3
YXlzOiB0b3AgPSAtYm90dG9tLgorICAgIC8vCisgICAgLy8gMS4gSWYgYm90aCBhcmUgJ2F1dG8n
LCB0aGVpciB1c2VkIHZhbHVlcyBhcmUgYm90aCAnMCcuCisgICAgLy8gMi4gSWYgb25lIG9mIHRo
ZW0gaXMgJ2F1dG8nLCBpdCBiZWNvbWVzIHRoZSBuZWdhdGl2ZSBvZiB0aGUgb3RoZXIuCisgICAg
Ly8gMy4gSWYgbmVpdGhlciBpcyAnYXV0bycsICdib3R0b20nIGlzIGlnbm9yZWQgKGkuZS4sIHRo
ZSB1c2VkIHZhbHVlIG9mICdib3R0b20nIHdpbGwgYmUgbWludXMgdGhlIHZhbHVlIG9mICd0b3An
KS4KKworICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byBjb250
YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7CisK
KyAgICBhdXRvIHRvcCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxv
Z2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworCisgICAgaWYgKCF0b3AgJiYg
IWJvdHRvbSkgeworICAgICAgICAvLyAjMQorICAgICAgICB0b3AgPSBib3R0b20gPSB7IDAgfTsK
KyAgICB9IGVsc2UgaWYgKCF0b3ApIHsKKyAgICAgICAgLy8gIzIKKyAgICAgICAgdG9wID0gLSpi
b3R0b207CisgICAgfSBlbHNlIGlmICghYm90dG9tKSB7CisgICAgICAgIC8vICMzCisgICAgICAg
IGJvdHRvbSA9IC0qdG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vICM0CisgICAgICAgIGJv
dHRvbSA9IFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAvLyBGb3IgcmVsYXRpdmVseSBwb3Np
dGlvbmVkIGVsZW1lbnRzLCAnbGVmdCcgYW5kICdyaWdodCcgbW92ZSB0aGUgYm94KGVzKSBob3Jp
em9udGFsbHksIHdpdGhvdXQgY2hhbmdpbmcgdGhlaXIgc2l6ZS4KKyAgICAvLyAnTGVmdCcgbW92
ZXMgdGhlIGJveGVzIHRvIHRoZSByaWdodCwgYW5kICdyaWdodCcgbW92ZXMgdGhlbSB0byB0aGUg
bGVmdC4KKyAgICAvLyBTaW5jZSBib3hlcyBhcmUgbm90IHNwbGl0IG9yIHN0cmV0Y2hlZCBhcyBh
IHJlc3VsdCBvZiAnbGVmdCcgb3IgJ3JpZ2h0JywgdGhlIHVzZWQgdmFsdWVzIGFyZSBhbHdheXM6
IGxlZnQgPSAtcmlnaHQuCisgICAgLy8KKyAgICAvLyAxLiBJZiBib3RoICdsZWZ0JyBhbmQgJ3Jp
Z2h0JyBhcmUgJ2F1dG8nICh0aGVpciBpbml0aWFsIHZhbHVlcyksIHRoZSB1c2VkIHZhbHVlcyBh
cmUgJzAnIChpLmUuLCB0aGUgYm94ZXMgc3RheSBpbiB0aGVpciBvcmlnaW5hbCBwb3NpdGlvbiku
CisgICAgLy8gMi4gSWYgJ2xlZnQnIGlzICdhdXRvJywgaXRzIHVzZWQgdmFsdWUgaXMgbWludXMg
dGhlIHZhbHVlIG9mICdyaWdodCcgKGkuZS4sIHRoZSBib3hlcyBtb3ZlIHRvIHRoZSBsZWZ0IGJ5
IHRoZSB2YWx1ZSBvZiAncmlnaHQnKS4KKyAgICAvLyAzLiBJZiAncmlnaHQnIGlzIHNwZWNpZmll
ZCBhcyAnYXV0bycsIGl0cyB1c2VkIHZhbHVlIGlzIG1pbnVzIHRoZSB2YWx1ZSBvZiAnbGVmdCcu
CisgICAgLy8gNC4gSWYgbmVpdGhlciAnbGVmdCcgbm9yICdyaWdodCcgaXMgJ2F1dG8nLCB0aGUg
cG9zaXRpb24gaXMgb3Zlci1jb25zdHJhaW5lZCwgYW5kIG9uZSBvZiB0aGVtIGhhcyB0byBiZSBp
Z25vcmVkLgorICAgIC8vICAgIElmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBpcyAnbHRyJywgdGhlIHZhbHVlIG9mICdsZWZ0JyB3aW5zIGFuZCAncmln
aHQnIGJlY29tZXMgLSdsZWZ0Jy4KKyAgICAvLyAgICBJZiAnZGlyZWN0aW9uJyBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBpcyAncnRsJywgJ3JpZ2h0JyB3aW5zIGFuZCAnbGVmdCcgaXMgaWdub3Jl
ZC4KKworICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbExlZnQoKSwg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gcmlnaHQgPSBjb21wdXRlZFZhbHVlKHN0
eWxlLmxvZ2ljYWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisKKyAgICBpZiAoIWxl
ZnQgJiYgIXJpZ2h0KSB7CisgICAgICAgIC8vICMxCisgICAgICAgIGxlZnQgPSByaWdodCA9IHsg
MCB9OworICAgIH0gZWxzZSBpZiAoIWxlZnQpIHsKKyAgICAgICAgLy8gIzIKKyAgICAgICAgbGVm
dCA9IC0qcmlnaHQ7CisgICAgfSBlbHNlIGlmICghcmlnaHQpIHsKKyAgICAgICAgLy8gIzMKKyAg
ICAgICAgcmlnaHQgPSAtKmxlZnQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gIzQKKyAgICAg
ICAgYXV0byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgICAgICBpZiAoaXNMZWZ0
VG9SaWdodERpcmVjdGlvbikKKyAgICAgICAgICAgIHJpZ2h0ID0gLSpsZWZ0OworICAgICAgICBl
bHNlCisgICAgICAgICAgICBsZWZ0ID0gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIEFTU0VS
VCghYm90dG9tIHx8ICp0b3AgPT0gLSpib3R0b20pOworICAgIEFTU0VSVCghbGVmdCB8fCAqbGVm
dCA9PSAtKnJpZ2h0KTsKKworICAgIGF1dG8gdG9wUG9zaXRpb25PZmZzZXQgPSAqdG9wOworICAg
IGF1dG8gbGVmdFBvc2l0aW9uT2Zmc2V0ID0gbGVmdC52YWx1ZU9yKC0qcmlnaHQpOworCisgICAg
TE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3Np
dGlvbl0gLT4gcG9zaXRpb25lZCBpbmZsb3cgLT4gdG9wIG9mZnNldCgiIDw8IHRvcFBvc2l0aW9u
T2Zmc2V0IDw8ICJweCkgbGVmdCBvZmZzZXQoIiA8PCBsZWZ0UG9zaXRpb25PZmZzZXQgPDwgInB4
KSBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAgcmV0dXJuIHsgbGVmdFBv
c2l0aW9uT2Zmc2V0LCB0b3BQb3NpdGlvbk9mZnNldCB9OworfQorCitpbmxpbmUgc3RhdGljIFdy
aXRpbmdNb2RlIHVzZWRXcml0aW5nTW9kZShjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXdyaXRpbmctbW9kZXMtNC8jbG9naWNhbC1kaXJl
Y3Rpb24tbGF5b3V0CisgICAgLy8gRmxvdy1yZWxhdGl2ZSBkaXJlY3Rpb25zIGFyZSBjYWxjdWxh
dGVkIHdpdGggcmVzcGVjdCB0byB0aGUgd3JpdGluZyBtb2RlIG9mIHRoZSBjb250YWluaW5nIGJs
b2NrIG9mIHRoZSBib3guCisgICAgLy8gRm9yIGlubGluZS1sZXZlbCBib3hlcywgdGhlIHdyaXRp
bmcgbW9kZSBvZiB0aGUgcGFyZW50IGJveCBpcyB1c2VkIGluc3RlYWQuCisgICAgcmV0dXJuIGxh
eW91dEJveC5pc0lubGluZUxldmVsQm94KCkgPyBsYXlvdXRCb3gucGFyZW50KCkuc3R5bGUoKS53
cml0aW5nTW9kZSgpIDogbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCkud3JpdGlu
Z01vZGUoKTsKK30KKworRWRnZXMgRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZEJvcmRlcihj
b25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3sKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJv
eC5zdHlsZSgpOworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwg
c3RyZWFtIDw8ICJbQm9yZGVyXSAtPiBsYXlvdXRCb3g6ICIgPDwgJmxheW91dEJveCk7CisgICAg
cmV0dXJuIHsKKyAgICAgICAgeyBMYXlvdXRVbml0KHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpKSwg
TGF5b3V0VW5pdChzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCkpIH0sCisgICAgICAgIHsgTGF5b3V0
VW5pdChzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKSwgTGF5b3V0VW5pdChzdHlsZS5ib3JkZXJCb3R0
b21XaWR0aCgpKSB9CisgICAgfTsKK30KKworT3B0aW9uYWw8RWRnZXM+IEZvcm1hdHRpbmdHZW9t
ZXRyeTo6Y29tcHV0ZWRQYWRkaW5nKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBMYXlvdXRV
bml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSBjb25zdAoreworICAgIGlmICghbGF5b3V0Qm94Lmlz
UGFkZGluZ0FwcGxpY2FibGUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZv
cm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQYWRkaW5nXSAtPiBsYXlvdXRCb3g6
ICIgPDwgJmxheW91dEJveCk7CisgICAgcmV0dXJuIEVkZ2VzIHsKKyAgICAgICAgeyB2YWx1ZUZv
ckxlbmd0aChzdHlsZS5wYWRkaW5nTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIHZhbHVl
Rm9yTGVuZ3RoKHN0eWxlLnBhZGRpbmdSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkgfSwK
KyAgICAgICAgeyB2YWx1ZUZvckxlbmd0aChzdHlsZS5wYWRkaW5nVG9wKCksIGNvbnRhaW5pbmdC
bG9ja1dpZHRoKSwgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFkZGluZ0JvdHRvbSgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCkgfQorICAgIH07Cit9CisKK0NvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiBG
b3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxh
eW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWlu
dHMpIGNvbnN0Cit7CisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICBh
dXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxX
aWR0aDsKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUodXNlZFdyaXRpbmdNb2RlKGxh
eW91dEJveCkpKQorICAgICAgICByZXR1cm4geyBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpbkxl
ZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblJp
Z2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9OworICAgIHJldHVybiB7IGNvbXB1dGVkVmFs
dWUoc3R5bGUubWFyZ2luVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRWYWx1
ZShzdHlsZS5tYXJnaW5Cb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07Cit9CisKK0Nv
bXB1dGVkVmVydGljYWxNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2Fs
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cykgY29uc3QKK3sKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91
dEJveC5zdHlsZSgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFs
Q29uc3RyYWludHMubG9naWNhbFdpZHRoOworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSh1c2VkV3JpdGluZ01vZGUobGF5b3V0Qm94KSkpCisgICAgICAgIHJldHVybiB7IGNvbXB1dGVk
VmFsdWUoc3R5bGUubWFyZ2luVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRW
YWx1ZShzdHlsZS5tYXJnaW5Cb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07CisgICAg
cmV0dXJuIHsgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5MZWZ0KCksIGNvbnRhaW5pbmdCbG9j
a1dpZHRoKSwgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5SaWdodCgpLCBjb250YWluaW5nQmxv
Y2tXaWR0aCkgfTsKK30KKworSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBGb3JtYXR0aW5nR2Vv
bWV0cnk6OmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGgpIGNvbnN0Cit7CisgICAgYXV0byYg
c3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICBhdXRvIG1pbldpZHRoID0gZml4ZWRWYWx1
ZShzdHlsZS5sb2dpY2FsTWluV2lkdGgoKSk7CisgICAgYXV0byBtYXhXaWR0aCA9IGZpeGVkVmFs
dWUoc3R5bGUubG9naWNhbE1heFdpZHRoKCkpOworICAgIGlmICghbWluV2lkdGggJiYgIW1heFdp
ZHRoKQorICAgICAgICByZXR1cm4gaW50cmluc2ljV2lkdGg7CisKKyAgICBpZiAobWF4V2lkdGgp
IHsKKyAgICAgICAgaW50cmluc2ljV2lkdGgubWluaW11bSA9IHN0ZDo6bWluKCptYXhXaWR0aCwg
aW50cmluc2ljV2lkdGgubWluaW11bSk7CisgICAgICAgIGludHJpbnNpY1dpZHRoLm1heGltdW0g
PSBzdGQ6Om1pbigqbWF4V2lkdGgsIGludHJpbnNpY1dpZHRoLm1heGltdW0pOworICAgIH0KKwor
ICAgIGlmIChtaW5XaWR0aCkgeworICAgICAgICBpbnRyaW5zaWNXaWR0aC5taW5pbXVtID0gc3Rk
OjptYXgoKm1pbldpZHRoLCBpbnRyaW5zaWNXaWR0aC5taW5pbXVtKTsKKyAgICAgICAgaW50cmlu
c2ljV2lkdGgubWF4aW11bSA9IHN0ZDo6bWF4KCptaW5XaWR0aCwgaW50cmluc2ljV2lkdGgubWF4
aW11bSk7CisgICAgfQorCisgICAgQVNTRVJUKGludHJpbnNpY1dpZHRoLm1pbmltdW0gPD0gaW50
cmluc2ljV2lkdGgubWF4aW11bSk7CisgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoOworfQorCitD
b25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQgRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb25zdHJh
aW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gp
Cit7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5
Rm9yQm94KGNvbnRhaW5lckJveCk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgeyBib3hHZW9tZXRy
eS5wYWRkaW5nQm94TGVmdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94V2lkdGgoKSB9LAorICAg
ICAgICB7IGJveEdlb21ldHJ5LnBhZGRpbmdCb3hUb3AoKSwgYm94R2VvbWV0cnkucGFkZGluZ0Jv
eEhlaWdodCgpIH0sCisgICAgICAgIGJveEdlb21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpIH07Cit9
CisKK0NvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbnN0
cmFpbnRzRm9ySW5GbG93Q29udGVudChjb25zdCBDb250YWluZXJCb3gmIGNvbnRhaW5lckJveCwg
T3B0aW9uYWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbj4gZXNjYXBlUmVhc29uKSBj
b25zdAoreworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9t
ZXRyeUZvckJveChjb250YWluZXJCb3gsIGVzY2FwZVJlYXNvbik7CisgICAgcmV0dXJuIHsgeyBi
b3hHZW9tZXRyeS5jb250ZW50Qm94TGVmdCgpLCBib3hHZW9tZXRyeS5jb250ZW50Qm94V2lkdGgo
KSB9LCB7IGJveEdlb21ldHJ5LmNvbnRlbnRCb3hUb3AoKSwgY29tcHV0ZWRIZWlnaHQoY29udGFp
bmVyQm94KSB9IH07Cit9CisKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWM5OTM2N2Q2YWYwMDUwZDg3NWY2ODMxOTdiM2M2MjQ0MmUxZDM0MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
Rm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5j
bHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIExheW91dCB7CisKK2NsYXNzIFJlcGxhY2VkQm94Oworc3RydWN0IENvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbjsKK3N0cnVjdCBDb21wdXRlZFZlcnRpY2FsTWFyZ2luOworY2xhc3MgQ29udGFp
bmVyQm94Oworc3RydWN0IENvbnRlbnRIZWlnaHRBbmRNYXJnaW47CitzdHJ1Y3QgQ29udGVudFdp
ZHRoQW5kTWFyZ2luOworc3RydWN0IEVkZ2VzOworc3RydWN0IEhvcml6b250YWxHZW9tZXRyeTsK
K2NsYXNzIExheW91dFN0YXRlOworc3RydWN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzOwor
c3RydWN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlczsKK3N0cnVjdCBWZXJ0aWNhbEdlb21ldHJ5
OworCisvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgZ2VuZXJpYyBwb3NpdGlvbmluZyBhbmQgc2l6
aW5nLgorY2xhc3MgRm9ybWF0dGluZ0dlb21ldHJ5IHsKK3B1YmxpYzoKKyAgICBGb3JtYXR0aW5n
R2VvbWV0cnkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmKTsKKworICAgIFZlcnRpY2FsR2VvbWV0
cnkgb3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRl
blZlcnRpY2FsVmFsdWVzJikgY29uc3Q7CisgICAgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxv
d0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250
YWxWYWx1ZXMmKTsKKworICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gZmxvYXRpbmdDb250ZW50
SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYs
IGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OworICAgIENvbnRlbnRXaWR0
aEFuZE1hcmdpbiBmbG9hdGluZ0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cyYpOworCisgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbmxpbmVSZXBsYWNlZENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmLCBPcHRpb25hbDxWZXJ0aWNhbENvbnN0cmFpbnRzPiwgY29uc3QgT3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzJikgY29uc3Q7CisgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGlubGluZVJl
cGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiwgT3B0aW9uYWw8VmVydGljYWxDb25zdHJhaW50cz4sIGNvbnN0
IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7CisKKyAgICBMYXlvdXRTaXplIGluRmxvd1Bv
c2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmKSBjb25zdDsKKworICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gY29tcGxpY2F0ZWRD
YXNlcyhjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNocmlua1RvRml0
V2lkdGgoY29uc3QgQm94JiwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCk7CisKKyAgICBFZGdl
cyBjb21wdXRlZEJvcmRlcihjb25zdCBCb3gmKSBjb25zdDsKKyAgICBPcHRpb25hbDxFZGdlcz4g
Y29tcHV0ZWRQYWRkaW5nKGNvbnN0IEJveCYsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lk
dGgpIGNvbnN0OworCisgICAgQ29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luIGNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25z
dDsKKyAgICBDb21wdXRlZFZlcnRpY2FsTWFyZ2luIGNvbXB1dGVkVmVydGljYWxNYXJnaW4oY29u
c3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CisKKyAgICBPcHRp
b25hbDxMYXlvdXRVbml0PiBjb21wdXRlZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9w
ZXJ0eSwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3Q7CisgICAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gZml4ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHkp
IGNvbnN0OworCisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRNaW5IZWlnaHQoY29u
c3QgQm94JiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gV1RG
OjpudWxsb3B0KSBjb25zdDsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZE1heEhl
aWdodChjb25zdCBCb3gmLCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250YWluaW5nQmxvY2tIZWln
aHQgPSBXVEY6Om51bGxvcHQpIGNvbnN0OworCisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29t
cHV0ZWRNaW5XaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRo
KTsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZE1heFdpZHRoKGNvbnN0IEJveCYs
IExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworCisgICAgSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyBjb25zdHJhaW5CeU1pbk1heFdpZHRoKGNvbnN0IEJveCYsIEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9y
Rm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IENvbnRhaW5lckJveCYpIGNvbnN0OworCisgICAg
Q29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50IGNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29u
dGVudChjb25zdCBDb250YWluZXJCb3gmKTsKKyAgICBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRl
bnQgY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnN0IENvbnRhaW5lckJveCYsIE9wdGlv
bmFsPEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVSZWFzb24+ID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKKworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkSGVpZ2h0KGNvbnN0IEJveCYs
IE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IFdURjo6bnVsbG9w
dCkgY29uc3Q7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRXaWR0aChjb25zdCBC
b3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKworcHJvdGVjdGVkOgorICAg
IGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0
dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQorICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0
ZSgpIHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQorICAgIGNv
bnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9ybWF0dGluZ0NvbnRleHQ7IH0KKworcHJpdmF0ZToKKyAgICBWZXJ0aWNhbEdlb21ldHJ5
IG91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmLCBj
b25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKKyAgICBIb3Jpem9udGFsR2Vv
bWV0cnkgb3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgUmVwbGFjZWRC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFp
bnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIFZlcnRpY2Fs
R2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IENvbnRh
aW5lckJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IFZlcnRpY2FsQ29u
c3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKKyAgICBI
b3Jpem9udGFsR2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnko
Y29uc3QgQ29udGFpbmVyQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3Qg
T3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIENvbnRlbnRIZWlnaHRBbmRNYXJn
aW4gZmxvYXRpbmdSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGlj
YWxWYWx1ZXMmKSBjb25zdDsKKyAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdSZXBs
YWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7CisK
KyAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdOb25SZXBsYWNlZENvbnRlbnRXaWR0
aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25z
dCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOworCisgICAgTGF5b3V0VW5pdCBzdGF0aWNW
ZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBCb3gmLCBjb25zdCBW
ZXJ0aWNhbENvbnN0cmFpbnRzJikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzdGF0aWNIb3Jpem9u
dGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYpIGNvbnN0OworCisgICAgZW51bSBjbGFzcyBIZWlnaHRUeXBlIHsg
TWluLCBNYXgsIE5vcm1hbCB9OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkSGVp
Z2h0VmFsdWUoY29uc3QgQm94JiwgSGVpZ2h0VHlwZSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29u
dGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdDsKKworICAgIGVudW0gY2xhc3MgV2lkdGhUeXBlIHsg
TWluLCBNYXgsIE5vcm1hbCB9OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkV2lk
dGhWYWx1ZShjb25zdCBCb3gmLCBXaWR0aFR5cGUsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpOworCisgICAgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIG1fZm9ybWF0dGluZ0NvbnRl
eHQ7Cit9OworCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDU2OGFlZWMxZjVhNjgyOTM2ZDQ2YmJlNTJmZjY5NGU0YjE2MGY1NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0
dGluZ1F1aXJrcy5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGb3JtYXR0aW5nUXVpcmtzLmgiCisKKyNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1
ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5p
bmdCbG9jay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKwor
Rm9ybWF0dGluZ1F1aXJrczo6Rm9ybWF0dGluZ1F1aXJrcyhjb25zdCBGb3JtYXR0aW5nQ29udGV4
dCYgZm9ybWF0dGluZ0NvbnRleHQpCisgICAgOiBtX2Zvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRp
bmdDb250ZXh0KQoreworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdRdWlya3M6OmhlaWdodFZh
bHVlT2ZOZWFyZXN0Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGNvbnN0IEJveCYgbGF5
b3V0Qm94KSBjb25zdAoreworICAgIC8vIEluIHF1aXJrcyBtb2RlLCB3ZSBnbyBhbmQgdHJhdmVy
cyB0aGUgY29udGFpbmluZyBibG9jayBjaGFpbiB0byBmaW5kIGEgYmxvY2sgbGV2ZWwgYm94IHdp
dGggZml4ZWQgaGVpZ2h0IHZhbHVlLCBldmVuIGlmIGl0IG1lYW5zIGxlYXZpbmcKKyAgICAvLyB0
aGUgY3VycmVudCBmb3JtYXR0aW5nIGNvbnRleHQuIEZJWE1FOiBzdXJlbHkgd2UgbmVlZCB0byBk
byBzb21lIHRyaWNrcyBoZXJlIHdoZW4gYmxvY2sgZGlyZWN0aW9uIHN1cHBvcnQgaXMgYWRkZWQu
CisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgp
OworICAgIGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9ICZsYXlvdXRCb3guY29udGFpbmluZ0Jsb2Nr
KCk7CisgICAgTGF5b3V0VW5pdCBib2R5QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdpblBhZGRpbmdB
bmRCb3JkZXI7CisgICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jaykgeworICAgICAgICBhdXRvIGNv
bnRhaW5pbmdCbG9ja0hlaWdodCA9IGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS5sb2dpY2FsSGVp
Z2h0KCk7CisgICAgICAgIGlmIChjb250YWluaW5nQmxvY2tIZWlnaHQuaXNGaXhlZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIExheW91dFVuaXQoY29udGFpbmluZ0Jsb2NrSGVpZ2h0LnZhbHVlKCkg
LSBib2R5QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXIpOworCisgICAg
ICAgIC8vIElmIHRoZSBvbmx5IGZpeGVkIHZhbHVlIGJveCB3ZSBmaW5kIGlzIHRoZSBJQ0IsIHRo
ZW4gaWdub3JlIHRoZSBib2R5IGFuZCB0aGUgZG9jdW1lbnQgKHZlcnRpY2FsKSBtYXJnaW4sIHBh
ZGRpbmcgYW5kIGJvcmRlci4gU28gbXVjaCBxdWlya2luZXNzLgorICAgICAgICAvLyAtYW5kIGl0
J3MgdG90YWxseSBpbnNhbmUgYmVjYXVzZSBub3cgd2UgZnJlZWx5IHRyYXZlbCBhY3Jvc3MgZm9y
bWF0dGluZyBjb250ZXh0IGJvdW5kYXJpZXMgYW5kIGNvbXB1dGVkIG1hcmdpbnMgYXJlIG5vbmV4
aXN0ZW50LgorICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0JvZHlCb3goKSB8fCBjb250
YWluaW5nQmxvY2stPmlzRG9jdW1lbnRCb3goKSkgeworCisgICAgICAgICAgICBhdXRvIGdlb21l
dHJ5ID0gRm9ybWF0dGluZ0dlb21ldHJ5IHsgZm9ybWF0dGluZ0NvbnRleHQgfTsKKyAgICAgICAg
ICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRzID0gZ2VvbWV0cnkuY29uc3RyYWludHNGb3JJ
bkZsb3dDb250ZW50KGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCksIEZvcm1hdHRp
bmdDb250ZXh0OjpFc2NhcGVSZWFzb246OkZpbmRGaXhlZEhlaWdodEFuY2VzdG9yUXVpcmspLmhv
cml6b250YWw7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0gZ2VvbWV0cnkuY29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbigqY29udGFpbmluZ0Jsb2NrLCBob3Jpem9udGFsQ29uc3RyYWlu
dHMpOworCisgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0
Lmdlb21ldHJ5Rm9yQm94KCpjb250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdDb250ZXh0OjpFc2Nh
cGVSZWFzb246OkZpbmRGaXhlZEhlaWdodEFuY2VzdG9yUXVpcmspOworICAgICAgICAgICAgYXV0
byB2ZXJ0aWNhbFBhZGRpbmcgPSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSAr
IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApOworICAgICAgICAgICAgYXV0
byB2ZXJ0aWNhbEJvcmRlciA9IGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnku
Ym9yZGVyQm90dG9tKCk7CisgICAgICAgICAgICBib2R5QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdp
blBhZGRpbmdBbmRCb3JkZXIgKz0gdmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCkgKyB2
ZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApICsgdmVydGljYWxQYWRkaW5nICsgdmVydGlj
YWxCb3JkZXI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXM8SW5pdGlhbENvbnRhaW5pbmdC
bG9jaz4oKmNvbnRhaW5pbmdCbG9jaykpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY29u
dGFpbmluZ0Jsb2NrID0gJmNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAg
fQorICAgIC8vIEluaXRpYWwgY29udGFpbmluZyBibG9jayBoYXMgdG8gaGF2ZSBhIGhlaWdodC4K
KyAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94Lmlu
aXRpYWxDb250YWluaW5nQmxvY2soKSwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6
RmluZEZpeGVkSGVpZ2h0QW5jZXN0b3JRdWlyaykuY29udGVudEJveCgpLmhlaWdodCgpIC0gYm9k
eUFuZERvY3VtZW50VmVydGljYWxNYXJnaW5QYWRkaW5nQW5kQm9yZGVyOworfQorCit9Cit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL0Zvcm1hdHRpbmdRdWlya3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2YwZDgyNDEyYmE1ZWI5
Zjk5NGY4ZTk2ZWM4MDdmMjkzMDZhMDkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmgKQEAgLTAsMCAr
MSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgRm9ybWF0dGlu
Z1F1aXJrcyB7CitwdWJsaWM6CisgICAgRm9ybWF0dGluZ1F1aXJrcyhjb25zdCBGb3JtYXR0aW5n
Q29udGV4dCYpOworCisgICAgTGF5b3V0VW5pdCBoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5p
bmdCbG9ja1dpdGhGaXhlZEhlaWdodChjb25zdCBCb3gmKSBjb25zdDsKKworcHJvdGVjdGVkOgor
ICAgIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9y
bWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQorICAgIGNvbnN0IEZvcm1hdHRpbmdDb250
ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRl
eHQ7IH0KKworICAgIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBtX2Zvcm1hdHRpbmdDb250ZXh0
OworfTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0
dGluZ0NvbnRleHQuY3BwCmluZGV4IDBmNTU1ZjgxOTM4MWU3M2FmM2UxOWMwMmYzOGIwZmNmM2Jk
MTIwNGIuLmZmNWM1MDNmNGQwNTFjYzU4N2UzYzAzY2FjZDRhMzNjMGY2YmVlOGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tG
b3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMjgsNyArMjgs
OSBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRl
ICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0
YXRlLmgiCisjaW5jbHVkZSAiQmxvY2tNYXJnaW5Db2xsYXBzZS5oIgogI2luY2x1ZGUgIkZsb2F0
aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbnZh
bGlkYXRpb25TdGF0ZS5oIgpAQCAtMjg0LDE1ICsyODYsMTYgQEAgdm9pZCBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpwcmVjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckJveEFuZEFuY2VzdG9ycyhj
b25zdAogICAgIC8vCiAgICAgLy8gVGhlIGlkZWEgaGVyZSBpcyB0aGF0IGFzIGxvbmcgYXMgd2Ug
ZG9uJ3QgY3Jvc3MgdGhlIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCBib3VuZGFyeSwgd2Ugc2hv
dWxkIGJlIGFibGUgdG8gcHJlLWNvbXB1dGUgdGhlIGZpbmFsIHRvcCBwb3NpdGlvbi4KICAgICAv
LyBGSVhNRTogd2UgY3VycmVudGx5IGRvbid0IGFjY291bnQgZm9yIHRoZSAiY2xlYXIiIHByb3Bl
cnR5IHdoZW4gY29tcHV0aW5nIHRoZSBmaW5hbCBwb3NpdGlvbiBmb3IgYW4gYW5jZXN0b3IuCisg
ICAgYXV0byBmb3JtYXR0aW5nR2VvbWV0cnkgPSBnZW9tZXRyeSgpOwogICAgIGZvciAoYXV0byog
YW5jZXN0b3IgPSAmbGF5b3V0Qm94OyBhbmNlc3RvciAmJiBhbmNlc3RvciAhPSAmcm9vdCgpOyBh
bmNlc3RvciA9ICZhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgYXV0byBj
b25zdHJhaW50c0ZvckFuY2VzdG9yID0gWyZdIHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRhaW5p
bmdCbG9jayA9IGFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHJldHVy
biAmY29udGFpbmluZ0Jsb2NrID09ICZyb290KCkgPyBjb25zdHJhaW50c1BhaXIuZm9ybWF0dGlu
Z0NvbnRleHRSb290IDogZ2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29u
dGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiAmY29udGFpbmluZ0Jsb2NrID09ICZy
b290KCkgPyBjb25zdHJhaW50c1BhaXIuZm9ybWF0dGluZ0NvbnRleHRSb290IDogZm9ybWF0dGlu
Z0dlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb250YWluaW5nQmxvY2spOwog
ICAgICAgICB9KCk7CiAKLSAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gZ2Vv
bWV0cnkoKS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKCphbmNlc3RvciwgY29uc3RyYWludHNGb3JB
bmNlc3Rvci5ob3Jpem9udGFsKTsKKyAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2lu
ID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkVmVydGljYWxNYXJnaW4oKmFuY2VzdG9yLCBj
b25zdHJhaW50c0ZvckFuY2VzdG9yLmhvcml6b250YWwpOwogICAgICAgICBhdXRvIHVzZWROb25D
b2xsYXBzZWRNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7
IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGlj
YWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwotICAgICAgICBhdXRvIHByZWNvbXB1dGVkTWFy
Z2luQmVmb3JlID0gbWFyZ2luQ29sbGFwc2UoKS5wcmVjb21wdXRlZE1hcmdpbkJlZm9yZSgqYW5j
ZXN0b3IsIHVzZWROb25Db2xsYXBzZWRNYXJnaW4pOworICAgICAgICBhdXRvIHByZWNvbXB1dGVk
TWFyZ2luQmVmb3JlID0gbWFyZ2luQ29sbGFwc2UoKS5wcmVjb21wdXRlZE1hcmdpbkJlZm9yZSgq
YW5jZXN0b3IsIHVzZWROb25Db2xsYXBzZWRNYXJnaW4sIGZvcm1hdHRpbmdHZW9tZXRyeSk7CiAK
ICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRy
eSgqYW5jZXN0b3IpOwogICAgICAgICBhdXRvIG5vbkNvbGxhcHNlZFZhbHVlcyA9IFVzZWRWZXJ0
aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUu
bm9uQ29sbGFwc2VkVmFsdWUsIHsgfSB9OwpAQCAtNDIwLDEwICs0MjMsMTAgQEAgdm9pZCBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBjb25zdAogICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hIZWlnaHQoY29udGVu
dEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KTsKICAgICBib3hHZW9tZXRyeS5zZXRWZXJ0
aWNhbE1hcmdpbih7IG1hcmdpbkJlZm9yZSh2ZXJ0aWNhbE1hcmdpbiksIG1hcmdpbkFmdGVyKHZl
cnRpY2FsTWFyZ2luKSB9KTsKICAgICAvLyBBZGp1c3QgdGhlIHByZXZpb3VzIHNpYmxpbmcncyBt
YXJnaW4gYm90dG9tIG5vdyB0aGF0IHRoaXMgYm94J3MgdmVydGljYWwgbWFyZ2luIGlzIGNvbXB1
dGVkLgotICAgIE1hcmdpbkNvbGxhcHNlOjp1cGRhdGVNYXJnaW5BZnRlckZvclByZXZpb3VzU2li
bGluZygqdGhpcywgbWFyZ2luQ29sbGFwc2UsIGxheW91dEJveCk7CisgICAgdXBkYXRlTWFyZ2lu
QWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcobGF5b3V0Qm94KTsKIH0KIAotRm9ybWF0dGluZ0NvbnRl
eHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkKK0ludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCkKIHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3Rh
dGUoKTsKICAgICBBU1NFUlQoIWZvcm1hdHRpbmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCkpOwpAQCAtNTU3LDYgKzU2MCw1OCBAQCBMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OnZlcnRpY2FsUG9zaXRpb25XaXRoTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0QgogICAg
IHJldHVybiBjb250YWluaW5nQmxvY2tDb250ZW50Qm94VG9wICsgbWFyZ2luQmVmb3JlKHZlcnRp
Y2FsTWFyZ2luKTsKIH0KIAordm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojp1cGRhdGVNYXJn
aW5BZnRlckZvclByZXZpb3VzU2libGluZyhjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBh
dXRvIG1hcmdpbkNvbGxhcHNlID0gdGhpcy0+bWFyZ2luQ29sbGFwc2UoKTsKKyAgICBhdXRvJiBm
b3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKKyAgICAvLyAxLiBHZXQg
dGhlIG1hcmdpbiBiZWZvcmUgdmFsdWUgZnJvbSB0aGUgbmV4dCBpbi1mbG93IHNpYmxpbmcuIFRo
aXMgaXMgdGhlIHNhbWUgYXMgdGhpcyBib3gncyBtYXJnaW4gYWZ0ZXIgdmFsdWUgbm93IHNpbmNl
IHRoZXkgYXJlIGNvbGxhcHNlZC4KKyAgICAvLyAyLiBVcGRhdGUgdGhlIGNvbGxhcHNlZCBtYXJn
aW4gYWZ0ZXIgdmFsdWUgYXMgd2VsbCBhcyB0aGUgcG9zaXRpdmUvbmVnYXRpdmUgY2FjaGUuCisg
ICAgLy8gMy4gQ2hlY2sgaWYgdGhlIGJveCdzIG1hcmdpbnMgY29sbGFwc2UgdGhyb3VnaC4KKyAg
ICAvLyA0LiBJZiBzbywgdXBkYXRlIHRoZSBwb3NpdGl2ZS9uZWdhdGl2ZSBjYWNoZS4KKyAgICAv
LyA1LiBJbiBjYXNlIG9mIGNvbGxhcHNlZCB0aHJvdWdoIG1hcmdpbnMgY2hlY2sgaWYgdGhlIGJl
Zm9yZSBtYXJnaW4gY29sbGFwZXMgd2l0aCB0aGUgcHJldmlvdXMgaW5mbG93IHNpYmxpbmcncyBh
ZnRlciBtYXJnaW4uCisgICAgLy8gNi4gSWYgc28sIGp1bXAgdG8gIzIuCisgICAgLy8gNy4gTm8g
bmVlZCB0byBwcm9wYWdhdGUgdG8gcGFyZW50IGJlY2F1c2UgaXRzIG1hcmdpbiBpcyBub3QgY29t
cHV0ZWQgeWV0IChwcmUtY29tcHV0ZWQgYXQgbW9zdCkuCisgICAgYXV0byogY3VycmVudEJveCA9
ICZsYXlvdXRCb3g7CisgICAgd2hpbGUgKG1hcmdpbkNvbGxhcHNlLm1hcmdpbkJlZm9yZUNvbGxh
cHNlc1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRlcigqY3VycmVudEJveCkpIHsKKyAgICAg
ICAgYXV0byYgcHJldmlvdXNTaWJsaW5nID0gKmN1cnJlbnRCb3gtPnByZXZpb3VzSW5GbG93U2li
bGluZygpOworICAgICAgICBhdXRvIHByZXZpb3VzU2libGluZ1ZlcnRpY2FsTWFyZ2luID0gZm9y
bWF0dGluZ1N0YXRlLnVzZWRWZXJ0aWNhbE1hcmdpbihwcmV2aW91c1NpYmxpbmcpOworCisgICAg
ICAgIGF1dG8gY29sbGFwc2VkVmVydGljYWxNYXJnaW5CZWZvcmUgPSBwcmV2aW91c1NpYmxpbmdW
ZXJ0aWNhbE1hcmdpbi5jb2xsYXBzZWRWYWx1ZXMuYmVmb3JlOworICAgICAgICBhdXRvIGNvbGxh
cHNlZFZlcnRpY2FsTWFyZ2luQWZ0ZXIgPSBnZW9tZXRyeUZvckJveCgqY3VycmVudEJveCkubWFy
Z2luQmVmb3JlKCk7CisKKyAgICAgICAgYXV0byBtYXJnaW5zQ29sbGFwc2VUaHJvdWdoID0gbWFy
Z2luQ29sbGFwc2UubWFyZ2luc0NvbGxhcHNlVGhyb3VnaChwcmV2aW91c1NpYmxpbmcpOworICAg
ICAgICBpZiAobWFyZ2luc0NvbGxhcHNlVGhyb3VnaCkKKyAgICAgICAgICAgIGNvbGxhcHNlZFZl
cnRpY2FsTWFyZ2luQmVmb3JlID0gY29sbGFwc2VkVmVydGljYWxNYXJnaW5BZnRlcjsKKworICAg
ICAgICAvLyBVcGRhdGUgcG9zaXRpdmUvbmVnYXRpdmUgY2FjaGUuCisgICAgICAgIGF1dG8gcHJl
dmlvdXNTaWJsaW5nUG9zaXRpdmVOZWdhdGl2ZU1hcmdpbiA9IGZvcm1hdHRpbmdTdGF0ZS51c2Vk
VmVydGljYWxNYXJnaW4ocHJldmlvdXNTaWJsaW5nKS5wb3NpdGl2ZUFuZE5lZ2F0aXZlVmFsdWVz
OworICAgICAgICBhdXRvIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUgPSBmb3JtYXR0aW5n
U3RhdGUudXNlZFZlcnRpY2FsTWFyZ2luKCpjdXJyZW50Qm94KS5wb3NpdGl2ZUFuZE5lZ2F0aXZl
VmFsdWVzLmJlZm9yZTsKKworICAgICAgICBhdXRvIGFkanVzdGVkUHJldmlvdXNTaWJsaW5nVmVy
dGljYWxNYXJnaW4gPSBwcmV2aW91c1NpYmxpbmdWZXJ0aWNhbE1hcmdpbjsKKyAgICAgICAgYWRq
dXN0ZWRQcmV2aW91c1NpYmxpbmdWZXJ0aWNhbE1hcmdpbi5wb3NpdGl2ZUFuZE5lZ2F0aXZlVmFs
dWVzLmFmdGVyID0gbWFyZ2luQ29sbGFwc2UuY29tcHV0ZWRQb3NpdGl2ZUFuZE5lZ2F0aXZlTWFy
Z2luKHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUsIHByZXZpb3VzU2libGluZ1Bvc2l0aXZl
TmVnYXRpdmVNYXJnaW4uYWZ0ZXIpOworICAgICAgICBpZiAobWFyZ2luc0NvbGxhcHNlVGhyb3Vn
aCkgeworICAgICAgICAgICAgYWRqdXN0ZWRQcmV2aW91c1NpYmxpbmdWZXJ0aWNhbE1hcmdpbi5w
b3NpdGl2ZUFuZE5lZ2F0aXZlVmFsdWVzLmJlZm9yZSA9IG1hcmdpbkNvbGxhcHNlLmNvbXB1dGVk
UG9zaXRpdmVBbmROZWdhdGl2ZU1hcmdpbihwcmV2aW91c1NpYmxpbmdQb3NpdGl2ZU5lZ2F0aXZl
TWFyZ2luLmJlZm9yZSwgYWRqdXN0ZWRQcmV2aW91c1NpYmxpbmdWZXJ0aWNhbE1hcmdpbi5wb3Np
dGl2ZUFuZE5lZ2F0aXZlVmFsdWVzLmFmdGVyKTsKKyAgICAgICAgICAgIGFkanVzdGVkUHJldmlv
dXNTaWJsaW5nVmVydGljYWxNYXJnaW4ucG9zaXRpdmVBbmROZWdhdGl2ZVZhbHVlcy5hZnRlciA9
IGFkanVzdGVkUHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW4ucG9zaXRpdmVBbmROZWdhdGl2
ZVZhbHVlcy5iZWZvcmU7CisgICAgICAgIH0KKyAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldFVz
ZWRWZXJ0aWNhbE1hcmdpbihwcmV2aW91c1NpYmxpbmcsIGFkanVzdGVkUHJldmlvdXNTaWJsaW5n
VmVydGljYWxNYXJnaW4pOworCisgICAgICAgIGlmICghbWFyZ2luc0NvbGxhcHNlVGhyb3VnaCkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGN1cnJlbnRCb3ggPSAmcHJldmlvdXNTaWJs
aW5nOworICAgIH0KK30KKworQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Z2VvbWV0cnkoKSBjb25zdAoreworICAgIHJldHVybiBCbG9ja0Zvcm1hdHRpbmdH
ZW9tZXRyeSB7ICp0aGlzIH07Cit9CisKK0Jsb2NrTWFyZ2luQ29sbGFwc2UgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6bWFyZ2luQ29sbGFwc2UoKSBjb25zdAoreworICAgIHJldHVybiBCbG9ja01h
cmdpbkNvbGxhcHNlIHsgbGF5b3V0U3RhdGUoKSwgZm9ybWF0dGluZ1N0YXRlKCkgfTsKK30KKwog
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4
IDYzZDk5NjkzZTg3Y2QwYjBmMTMyZWFjNzEzNjkwZTBiNzA1MmUxMjkuLjNjYTkwNzViOTQyZDBk
YTc3NzhhMjc2MWIyOTZhODQzNDA0MTg4OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tG
b3JtYXR0aW5nQ29udGV4dC5oCkBAIC0zOSw2ICszOSw4IEBAIGNsYXNzIExheW91dFVuaXQ7CiBu
YW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgQm94OworY2xhc3MgQmxvY2tGb3JtYXR0aW5nR2Vv
bWV0cnk7CitjbGFzcyBCbG9ja01hcmdpbkNvbGxhcHNlOwogY2xhc3MgRmxvYXRpbmdDb250ZXh0
OwogCiAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGxheW91dCBsb2dpYyBmb3IgYmxvY2sg
Zm9ybWF0dGluZyBjb250ZXh0cy4KQEAgLTUxLDYgKzUzLDggQEAgcHVibGljOgogICAgIHZvaWQg
bGF5b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYsIGNvbnN0IENvbnN0cmFpbnRz
Rm9ySW5GbG93Q29udGVudCYpIG92ZXJyaWRlOwogICAgIExheW91dFVuaXQgdXNlZENvbnRlbnRI
ZWlnaHQoKSBjb25zdCBvdmVycmlkZTsKIAorICAgIGNvbnN0IEJsb2NrRm9ybWF0dGluZ1N0YXRl
JiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxCbG9ja0Zvcm1hdHRp
bmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQorCiBwcm90
ZWN0ZWQ6CiAgICAgc3RydWN0IENvbnN0cmFpbnRzUGFpciB7CiAgICAgICAgIENvbnN0cmFpbnRz
Rm9ySW5GbG93Q29udGVudCBmb3JtYXR0aW5nQ29udGV4dFJvb3Q7CkBAIC03Miw5OSArNzYsMTIg
QEAgcHJvdGVjdGVkOgogCiAgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdp
bihjb25zdCBCb3gmLCBjb25zdCBVc2VkVmVydGljYWxNYXJnaW4mLCBjb25zdCBWZXJ0aWNhbENv
bnN0cmFpbnRzJikgY29uc3Q7CiAKLSAgICAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgcG9zaXRp
b25pbmcgYW5kIHNpemluZyBmb3IgYm94ZXMgcGFydGljaXBhdGluZyBpbiBhIGJsb2NrIGZvcm1h
dHRpbmcgY29udGV4dC4KLSAgICBjbGFzcyBHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnkgewotICAgIHB1YmxpYzoKLSAgICAgICAgR2VvbWV0cnkoY29uc3QgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dCYpOwotCi0gICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4g
aW5GbG93Q29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKTsKLSAgICAgICAg
Q29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcyYpOwotCi0gICAgICAgIFBvaW50IHN0YXRpY1Bvc2l0aW9uKGNvbnN0IEJveCYs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMm
KSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0
IEJveCYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmKSBjb25zdDsKLSAgICAgICAgTGF5b3V0
VW5pdCBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJikgY29uc3Q7Ci0KLSAgICAgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEJveCYpOwotCi0gICAgICAgIENvbnRl
bnRXaWR0aEFuZE1hcmdpbiBjb21wdXRlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gm
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBPcHRpb25hbDxMYXlvdXRVbml0PiBhdmFp
bGFibGVXaWR0aEZsb2F0QXZvaWRlcik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDb250ZW50
SGVpZ2h0QW5kTWFyZ2luIGluRmxvd05vblJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihj
b25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMmKTsKLSAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd05v
blJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0gICAg
ICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbkZsb3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1h
cmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNv
bnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAgICAgY29uc3QgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3du
Y2FzdDxCbG9ja0Zvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9Ci0gICAgfTsKLSAgICBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIEdlb21ldHJ5KCp0aGlzKTsg
fQotCi0gICAgLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIG1hcmdpbiBjb2xsYXBzaW5nIGZvciBi
bG9jayBmb3JtYXR0aW5nIGNvbnRleHQuCi0gICAgY2xhc3MgTWFyZ2luQ29sbGFwc2UgewotICAg
IHB1YmxpYzoKLSAgICAgICAgVXNlZFZlcnRpY2FsTWFyZ2luIGNvbGxhcHNlZFZlcnRpY2FsVmFs
dWVzKGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzKTsK
LQotICAgICAgICBQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSBwcmVjb21wdXRlZE1hcmdpbkJlZm9y
ZShjb25zdCBCb3gmLCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyk7Ci0g
ICAgICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlSWdub3JpbmdDb2xsYXBzaW5nVGhyb3VnaChj
b25zdCBCb3gmLCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyk7Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHVwZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlvdXNTaWJsaW5nKEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQmLCBjb25zdCBNYXJnaW5Db2xsYXBzZSYsIGNvbnN0IEJveCYpOwot
Ci0gICAgICAgIGJvb2wgbWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkJlZm9y
ZShjb25zdCBCb3gmKSBjb25zdDsKLSAgICAgICAgYm9vbCBtYXJnaW5CZWZvcmVDb2xsYXBzZXNX
aXRoRmlyc3RJbkZsb3dDaGlsZE1hcmdpbkJlZm9yZShjb25zdCBCb3gmKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3Qg
Qm94JikgY29uc3Q7Ci0gICAgICAgIGJvb2wgbWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFByZXZp
b3VzU2libGluZ01hcmdpbkFmdGVyKGNvbnN0IEJveCYpIGNvbnN0OwotCi0gICAgICAgIGJvb2wg
bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgQm94JikgY29u
c3Q7Ci0gICAgICAgIGJvb2wgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0NoaWxk
TWFyZ2luQWZ0ZXIoY29uc3QgQm94JikgY29uc3Q7Ci0gICAgICAgIGJvb2wgbWFyZ2luQWZ0ZXJD
b2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGNvbnN0IEJveCYpIGNvbnN0OwotICAgICAg
ICBib29sIG1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aE5leHRTaWJsaW5nTWFyZ2luQmVmb3JlKGNv
bnN0IEJveCYpIGNvbnN0OwotICAgICAgICBib29sIG1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFNp
YmxpbmdNYXJnaW5CZWZvcmVXaXRoQ2xlYXJhbmNlKGNvbnN0IEJveCYpIGNvbnN0OwotCi0gICAg
ICAgIGJvb2wgbWFyZ2luc0NvbGxhcHNlVGhyb3VnaChjb25zdCBCb3gmKSBjb25zdDsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Owot
ICAgICAgICBNYXJnaW5Db2xsYXBzZShjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Jik7Ci0K
LSAgICAgICAgZW51bSBjbGFzcyBNYXJnaW5UeXBlIHsgQmVmb3JlLCBBZnRlciB9OwotICAgICAg
ICBVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgcG9z
aXRpdmVOZWdhdGl2ZVZhbHVlcyhjb25zdCBCb3gmLCBNYXJnaW5UeXBlKSBjb25zdDsKLSAgICAg
ICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIHBv
c2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUoY29uc3QgQm94JiwgVXNlZFZlcnRpY2FsTWFyZ2lu
OjpOb25Db2xsYXBzZWRWYWx1ZXMpIGNvbnN0OwotICAgICAgICBVc2VkVmVydGljYWxNYXJnaW46
OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgcG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkFm
dGVyKGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzKSBj
b25zdDsKLQotICAgICAgICBVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQ
YWlyOjpWYWx1ZXMgcHJlY29tcHV0ZWRQb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKGNvbnN0
IEJveCYsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzKSBjb25zdDsKLSAg
ICAgICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVz
IHByZWNvbXB1dGVkUG9zaXRpdmVOZWdhdGl2ZVZhbHVlcyhjb25zdCBCb3gmKSBjb25zdDsKLQot
ICAgICAgICBVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1
ZXMgY29tcHV0ZWRQb3NpdGl2ZUFuZE5lZ2F0aXZlTWFyZ2luKFVzZWRWZXJ0aWNhbE1hcmdpbjo6
UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcywgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3Np
dGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzKSBjb25zdDsKLSAgICAgICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gbWFyZ2luVmFsdWUoVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0
aXZlUGFpcjo6VmFsdWVzKSBjb25zdDsKLQotICAgICAgICBib29sIGhhc0NsZWFyYW5jZShjb25z
dCBCb3gmKSBjb25zdDsKLQotICAgICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSB7IHJl
dHVybiBtX2Jsb2NrRm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQotICAgICAgICBj
b25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrRm9y
bWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQotICAgICAgICBjb25zdCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tG
b3JtYXR0aW5nQ29udGV4dDsgfQotCi0gICAgICAgIGNvbnN0IEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQmIG1fYmxvY2tGb3JtYXR0aW5nQ29udGV4dDsKLSAgICB9OwotICAgIE1hcmdpbkNvbGxhcHNl
IG1hcmdpbkNvbGxhcHNlKCkgY29uc3QgeyByZXR1cm4gTWFyZ2luQ29sbGFwc2UoKnRoaXMpOyB9
Ci0KLSAgICBjbGFzcyBRdWlya3MgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyB7
Ci0gICAgcHVibGljOgotICAgICAgICBRdWlya3MoY29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dCYpOwotCi0gICAgICAgIGJvb2wgbmVlZHNTdHJldGNoaW5nKGNvbnN0IEJveCYpIGNvbnN0Owot
ICAgICAgICBMYXlvdXRVbml0IHN0cmV0Y2hlZEluRmxvd0hlaWdodChjb25zdCBCb3gmLCBDb250
ZW50SGVpZ2h0QW5kTWFyZ2luKTsKLQotICAgICAgICBib29sIHNob3VsZElnbm9yZUNvbGxhcHNl
ZFF1aXJrTWFyZ2luKGNvbnN0IEJveCYpIGNvbnN0OwotICAgICAgICBib29sIHNob3VsZENvbGxh
cHNlTWFyZ2luQmVmb3JlV2l0aFBhcmVudE1hcmdpbkJlZm9yZShjb25zdCBCb3gmKSBjb25zdDsK
LSAgICAgICAgYm9vbCBzaG91bGRDb2xsYXBzZU1hcmdpbkFmdGVyV2l0aFBhcmVudE1hcmdpbkFm
dGVyKGNvbnN0IEJveCYpIGNvbnN0OwotCi0gICAgICAgIGNvbnN0IEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8QmxvY2tG
b3JtYXR0aW5nQ29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6Zm9ybWF0dGluZ0Nv
bnRleHQoKSk7IH0KLSAgICAgICAgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgZ2Vv
bWV0cnkoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5KCk7IH0K
LQotICAgIH07Ci0gICAgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzIHF1aXJrcygpIGNv
bnN0IHsgcmV0dXJuIFF1aXJrcygqdGhpcyk7IH0KLQogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+
IHVzZWRBdmFpbGFibGVXaWR0aEZvckZsb2F0QXZvaWRlcihjb25zdCBGbG9hdGluZ0NvbnRleHQm
LCBjb25zdCBCb3gmLCBjb25zdCBDb25zdHJhaW50c1BhaXImKTsKKyAgICB2b2lkIHVwZGF0ZU1h
cmdpbkFmdGVyRm9yUHJldmlvdXNTaWJsaW5nKGNvbnN0IEJveCYpOwogCi0gICAgY29uc3QgQmxv
Y2tGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25j
YXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0
YXRlKCkpOyB9CiAgICAgQmxvY2tGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsg
cmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6
Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CisgICAgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgZ2VvbWV0
cnkoKSBjb25zdDsKKyAgICBCbG9ja01hcmdpbkNvbGxhcHNlIG1hcmdpbkNvbGxhcHNlKCkgY29u
c3Q7CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIHZvaWQgc2V0UHJlY29tcHV0ZWRNYXJnaW5C
ZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFByZWNvbXB1dGVkTWFyZ2luQmVmb3Jl
JiBwcmVjb21wdXRlZE1hcmdpbkJlZm9yZSkgeyBtX3ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlTGlz
dC5zZXQoJmxheW91dEJveCwgcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUpOyB9CkBAIC0xNzUsMjEg
KzkyLDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPGNvbnN0IEJveCosIFByZWNvbXB1dGVkTWFy
Z2luQmVmb3JlPiBtX3ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlTGlzdDsKIH07CiAKLWlubGluZSBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkoY29uc3QgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dCYgYmxvY2tGb3JtYXR0aW5nQ29udGV4dCkKLSAgICA6IEZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeShibG9ja0Zvcm1hdHRpbmdDb250ZXh0KQotewotfQotCi1pbmxpbmUg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpRdWlya3MoY29uc3QgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dCYgYmxvY2tGb3JtYXR0aW5nQ29udGV4dCkKLSAgICA6IEZvcm1hdHRpbmdDb250
ZXh0OjpRdWlya3MoYmxvY2tGb3JtYXR0aW5nQ29udGV4dCkKLXsKLX0KLQotaW5saW5lIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjpNYXJnaW5Db2xsYXBzZShjb25zdCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBibG9ja0Zvcm1hdHRpbmdDb250ZXh0KQotICAgIDogbV9i
bG9ja0Zvcm1hdHRpbmdDb250ZXh0KGJsb2NrRm9ybWF0dGluZ0NvbnRleHQpCi17Ci19Ci0KIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTFhMmI0MTZjNjdk
ZTVmMjQ1ZDUyYzE1ZGI2MzQzNThkY2NiNWIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nU3RhdGUuaCIKLSNp
bmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdT
dGF0ZS5oIgotI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCi0jaW5jbHVkZSAiTGF5b3V0
Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxheW91dENvbnRleHQuaCIKLSNpbmNsdWRlICJM
YXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRC
b3guaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotQ29udGVu
dEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93
Tm9uUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3Qg
T3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpCi17Ci0g
ICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpICYmICFsYXlvdXRCb3guaXNSZXBsYWNlZEJv
eCgpKTsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3ZlcmZsb3dWaXNpYmxlKCkpOwotCi0gICAg
YXV0byBjb21wdXRlID0gWyZdKGNvbnN0IGF1dG8mIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykg
LT4gQ29udGVudEhlaWdodEFuZE1hcmdpbiB7Ci0KLSAgICAgICAgLy8gMTAuNi4zIEJsb2NrLWxl
dmVsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyB3aGVuICdvdmVyZmxvdycg
Y29tcHV0ZXMgdG8gJ3Zpc2libGUnCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmICdtYXJnaW4t
dG9wJywgb3IgJ21hcmdpbi1ib3R0b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMg
MC4KLSAgICAgICAgLy8gSWYgJ2hlaWdodCcgaXMgJ2F1dG8nLCB0aGUgaGVpZ2h0IGRlcGVuZHMg
b24gd2hldGhlciB0aGUgZWxlbWVudCBoYXMgYW55IGJsb2NrLWxldmVsIGNoaWxkcmVuIGFuZCB3
aGV0aGVyIGl0IGhhcyBwYWRkaW5nIG9yIGJvcmRlcnM6Ci0gICAgICAgIC8vIFRoZSBlbGVtZW50
J3MgaGVpZ2h0IGlzIHRoZSBkaXN0YW5jZSBmcm9tIGl0cyB0b3AgY29udGVudCBlZGdlIHRvIHRo
ZSBmaXJzdCBhcHBsaWNhYmxlIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgIC8vIDEuIHRoZSBi
b3R0b20gZWRnZSBvZiB0aGUgbGFzdCBsaW5lIGJveCwgaWYgdGhlIGJveCBlc3RhYmxpc2hlcyBh
IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgd2l0aCBvbmUgb3IgbW9yZSBsaW5lcwotICAgICAg
ICAvLyAyLiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJvdHRvbSAocG9zc2libHkgY29sbGFwc2Vk
KSBtYXJnaW4gb2YgaXRzIGxhc3QgaW4tZmxvdyBjaGlsZCwgaWYgdGhlIGNoaWxkJ3MgYm90dG9t
IG1hcmdpbgotICAgICAgICAvLyAgICBkb2VzIG5vdCBjb2xsYXBzZSB3aXRoIHRoZSBlbGVtZW50
J3MgYm90dG9tIG1hcmdpbgotICAgICAgICAvLyAzLiB0aGUgYm90dG9tIGJvcmRlciBlZGdlIG9m
IHRoZSBsYXN0IGluLWZsb3cgY2hpbGQgd2hvc2UgdG9wIG1hcmdpbiBkb2Vzbid0IGNvbGxhcHNl
IHdpdGggdGhlIGVsZW1lbnQncyBib3R0b20gbWFyZ2luCi0gICAgICAgIC8vIDQuIHplcm8sIG90
aGVyd2lzZQotICAgICAgICAvLyBPbmx5IGNoaWxkcmVuIGluIHRoZSBub3JtYWwgZmxvdyBhcmUg
dGFrZW4gaW50byBhY2NvdW50IChpLmUuLCBmbG9hdGluZyBib3hlcyBhbmQgYWJzb2x1dGVseSBw
b3NpdGlvbmVkIGJveGVzIGFyZSBpZ25vcmVkLAotICAgICAgICAvLyBhbmQgcmVsYXRpdmVseSBw
b3NpdGlvbmVkIGJveGVzIGFyZSBjb25zaWRlcmVkIHdpdGhvdXQgdGhlaXIgb2Zmc2V0KS4gTm90
ZSB0aGF0IHRoZSBjaGlsZCBib3ggbWF5IGJlIGFuIGFub255bW91cyBibG9jayBib3guCi0KLSAg
ICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9y
Qm94KGxheW91dEJveCk7Ci0gICAgICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdl
b21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzKTsKLSAgICAgICAgYXV0byBub25Db2xsYXBzZWRNYXJnaW4gPSBVc2VkVmVydGljYWxN
YXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3Jl
LnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OyAK
LSAgICAgICAgYXV0byBib3JkZXJBbmRQYWRkaW5nVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9w
KCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKLSAgICAgICAgYXV0byBo
ZWlnaHQgPSBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0ID8gb3ZlcnJpZGRlblZlcnRp
Y2FsVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRIZWlnaHQobGF5b3V0Qm94KTsKLQot
ICAgICAgICBpZiAoaGVpZ2h0KQotICAgICAgICAgICAgcmV0dXJuIHsgKmhlaWdodCwgbm9uQ29s
bGFwc2VkTWFyZ2luIH07Ci0KLSAgICAgICAgaWYgKCFpczxDb250YWluZXJCb3g+KGxheW91dEJv
eCkgfHwgIWRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KS5oYXNJbkZsb3dDaGlsZCgp
KQotICAgICAgICAgICAgcmV0dXJuIHsgMCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07Ci0KLSAgICAg
ICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0aGUgYm94
IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBvciBtb3Jl
IGxpbmVzCi0gICAgICAgIGF1dG8mIGxheW91dENvbnRhaW5lciA9IGRvd25jYXN0PENvbnRhaW5l
ckJveD4obGF5b3V0Qm94KTsKLSAgICAgICAgaWYgKGxheW91dENvbnRhaW5lci5lc3RhYmxpc2hl
c0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGlubGluZUZv
cm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5n
U3RhdGUobGF5b3V0Q29udGFpbmVyKTsKLSAgICAgICAgICAgIGF1dG8mIGxpbmVzID0gaW5saW5l
Rm9ybWF0dGluZ1N0YXRlLmxpbmVzKCk7Ci0gICAgICAgICAgICAvLyBFdmVuIGVtcHR5IGNvbnRh
aW5lcnMgZ2VuZXJhdGUgb25lIGxpbmUuIAotICAgICAgICAgICAgQVNTRVJUKCFsaW5lcy5pc0Vt
cHR5KCkpOwotICAgICAgICAgICAgcmV0dXJuIHsgdG9MYXlvdXRVbml0KGxpbmVzLmxhc3QoKS5s
aW5lQm94TG9naWNhbFJlY3QoKS5ib3R0b20oKSArIGlubGluZUZvcm1hdHRpbmdTdGF0ZS5jbGVh
ckdhcEFmdGVyTGFzdExpbmUoKSkgLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xsYXBzZWRN
YXJnaW4gfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDIuIHRoZSBib3R0b20gZWRnZSBvZiB0
aGUgYm90dG9tIChwb3NzaWJseSBjb2xsYXBzZWQpIG1hcmdpbiBvZiBpdHMgbGFzdCBpbi1mbG93
IGNoaWxkLCBpZiB0aGUgY2hpbGQncyBib3R0b20gbWFyZ2luLi4uCi0gICAgICAgIGF1dG8mIGxh
c3RJbkZsb3dDaGlsZCA9ICpsYXlvdXRDb250YWluZXIubGFzdEluRmxvd0NoaWxkKCk7Ci0gICAg
ICAgIGlmICghZm9ybWF0dGluZ0NvbnRleHQoKS5tYXJnaW5Db2xsYXBzZSgpLm1hcmdpbkFmdGVy
Q29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkFmdGVyKGxhc3RJbkZsb3dDaGlsZCkpIHsKLSAgICAg
ICAgICAgIGF1dG8mIGxhc3RJbkZsb3dCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3gobGFzdEluRmxvd0NoaWxkKTsKLSAgICAgICAgICAgIGF1dG8gYm90dG9t
RWRnZU9mQm90dG9tTWFyZ2luID0gQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QobGFzdEluRmxv
d0JveEdlb21ldHJ5KS5ib3R0b20oKSArIGxhc3RJbkZsb3dCb3hHZW9tZXRyeS5tYXJnaW5BZnRl
cigpOwotICAgICAgICAgICAgcmV0dXJuIHsgYm90dG9tRWRnZU9mQm90dG9tTWFyZ2luIC0gYm9y
ZGVyQW5kUGFkZGluZ1RvcCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyAzLiB0aGUgYm90dG9tIGJvcmRlciBlZGdlIG9mIHRoZSBsYXN0IGluLWZsb3cgY2hp
bGQgd2hvc2UgdG9wIG1hcmdpbiBkb2Vzbid0IGNvbGxhcHNlIHdpdGggdGhlIGVsZW1lbnQncyBi
b3R0b20gbWFyZ2luCi0gICAgICAgIGF1dG8qIGluRmxvd0NoaWxkID0gJmxhc3RJbkZsb3dDaGls
ZDsKLSAgICAgICAgd2hpbGUgKGluRmxvd0NoaWxkICYmIGZvcm1hdHRpbmdDb250ZXh0KCkubWFy
Z2luQ29sbGFwc2UoKS5tYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIo
KmluRmxvd0NoaWxkKSkKLSAgICAgICAgICAgIGluRmxvd0NoaWxkID0gaW5GbG93Q2hpbGQtPnBy
ZXZpb3VzSW5GbG93U2libGluZygpOwotICAgICAgICBpZiAoaW5GbG93Q2hpbGQpIHsKLSAgICAg
ICAgICAgIGF1dG8mIGluRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9t
ZXRyeUZvckJveCgqaW5GbG93Q2hpbGQpOwotICAgICAgICAgICAgcmV0dXJuIHsgQm94R2VvbWV0
cnk6OmJvcmRlckJveFRvcChpbkZsb3dCb3hHZW9tZXRyeSkgKyBpbkZsb3dCb3hHZW9tZXRyeS5i
b3JkZXJCb3goKS5oZWlnaHQoKSAtIGJvcmRlckFuZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1h
cmdpbiB9OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC4gemVybywgb3RoZXJ3aXNlCi0gICAg
ICAgIHJldHVybiB7IDAsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwotICAgIH07Ci0KLSAgICAvLyAx
MC42LjcgJ0F1dG8nIGhlaWdodHMgZm9yIGJsb2NrLWxldmVsIGZvcm1hdHRpbmcgY29udGV4dCBi
b3hlcy4KLSAgICBhdXRvIGlzQXV0b0hlaWdodCA9ICFvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMu
aGVpZ2h0ICYmICFjb21wdXRlZEhlaWdodChsYXlvdXRCb3gpOwotICAgIGlmIChpc0F1dG9IZWln
aHQgJiYgKGxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkgJiYgIWxheW91
dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpKQotICAgICAgICByZXR1
cm4gY29tcHV0ZSggT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzIHsgY29udGVudEhlaWdodEZvckZv
cm1hdHRpbmdDb250ZXh0Um9vdChkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpIH0p
OwotICAgIHJldHVybiBjb21wdXRlKG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci19Ci0KLUNv
bnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5G
bG93Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25z
dCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMp
Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpKTsKLQotICAgIGF1dG8gY29tcHV0
ZSA9IFsmXSgpIHsKLQotICAgICAgICAvLyAxMC4zLjMgQmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNl
ZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdwotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgZm9s
bG93aW5nIGNvbnN0cmFpbnRzIG11c3QgaG9sZCBhbW9uZyB0aGUgdXNlZCB2YWx1ZXMgb2YgdGhl
IG90aGVyIHByb3BlcnRpZXM6Ci0gICAgICAgIC8vICdtYXJnaW4tbGVmdCcgKyAnYm9yZGVyLWxl
ZnQtd2lkdGgnICsgJ3BhZGRpbmctbGVmdCcgKyAnd2lkdGgnICsgJ3BhZGRpbmctcmlnaHQnICsg
J2JvcmRlci1yaWdodC13aWR0aCcgKyAnbWFyZ2luLXJpZ2h0JyA9IHdpZHRoIG9mIGNvbnRhaW5p
bmcgYmxvY2sKLSAgICAgICAgLy8KLSAgICAgICAgLy8gMS4gSWYgJ3dpZHRoJyBpcyBub3QgJ2F1
dG8nIGFuZCAnYm9yZGVyLWxlZnQtd2lkdGgnICsgJ3BhZGRpbmctbGVmdCcgKyAnd2lkdGgnICsg
J3BhZGRpbmctcmlnaHQnICsgJ2JvcmRlci1yaWdodC13aWR0aCcgCi0gICAgICAgIC8vICAgIChw
bHVzIGFueSBvZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIHRoYXQgYXJlIG5vdCAn
YXV0bycpIGlzIGxhcmdlciB0aGFuIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmluZyBibG9jaywg
dGhlbgotICAgICAgICAvLyAgICBhbnkgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBv
ciAnbWFyZ2luLXJpZ2h0JyBhcmUsIGZvciB0aGUgZm9sbG93aW5nIHJ1bGVzLCB0cmVhdGVkIGFz
IHplcm8uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIDIuIElmIGFsbCBvZiB0aGUgYWJvdmUgaGF2
ZSBhIGNvbXB1dGVkIHZhbHVlIG90aGVyIHRoYW4gJ2F1dG8nLCB0aGUgdmFsdWVzIGFyZSBzYWlk
IHRvIGJlICJvdmVyLWNvbnN0cmFpbmVkIiBhbmQgb25lIG9mIHRoZSB1c2VkIHZhbHVlcyB3aWxs
Ci0gICAgICAgIC8vICAgIGhhdmUgdG8gYmUgZGlmZmVyZW50IGZyb20gaXRzIGNvbXB1dGVkIHZh
bHVlLiBJZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sg
aGFzIHRoZSB2YWx1ZSAnbHRyJywgdGhlIHNwZWNpZmllZCB2YWx1ZQotICAgICAgICAvLyAgICBv
ZiAnbWFyZ2luLXJpZ2h0JyBpcyBpZ25vcmVkIGFuZCB0aGUgdmFsdWUgaXMgY2FsY3VsYXRlZCBz
byBhcyB0byBtYWtlIHRoZSBlcXVhbGl0eSB0cnVlLiBJZiB0aGUgdmFsdWUgb2YgJ2RpcmVjdGlv
bicgaXMgJ3J0bCcsCi0gICAgICAgIC8vICAgIHRoaXMgaGFwcGVucyB0byAnbWFyZ2luLWxlZnQn
IGluc3RlYWQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIDMuIElmIHRoZXJlIGlzIGV4YWN0bHkg
b25lIHZhbHVlIHNwZWNpZmllZCBhcyAnYXV0bycsIGl0cyB1c2VkIHZhbHVlIGZvbGxvd3MgZnJv
bSB0aGUgZXF1YWxpdHkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIDQuIElmICd3aWR0aCcgaXMg
c2V0IHRvICdhdXRvJywgYW55IG90aGVyICdhdXRvJyB2YWx1ZXMgYmVjb21lICcwJyBhbmQgJ3dp
ZHRoJyBmb2xsb3dzIGZyb20gdGhlIHJlc3VsdGluZyBlcXVhbGl0eS4KLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gNS4gSWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUg
J2F1dG8nLCB0aGVpciB1c2VkIHZhbHVlcyBhcmUgZXF1YWwuIFRoaXMgaG9yaXpvbnRhbGx5IGNl
bnRlcnMgdGhlIGVsZW1lbnQgd2l0aCByZXNwZWN0IHRvIHRoZQotICAgICAgICAvLyAgICBlZGdl
cyBvZiB0aGUgY29udGFpbmluZyBibG9jay4KLQotICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9j
a1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICAgICAgYXV0
byYgY29udGFpbmluZ0Jsb2NrU3R5bGUgPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5
bGUoKTsKLSAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdl
b21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0KLSAgICAgICAgYXV0byB3aWR0aCA9IG92ZXJyaWRk
ZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lk
dGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAg
ICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhv
cml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgICAg
ICBVc2VkSG9yaXpvbnRhbE1hcmdpbiB1c2VkSG9yaXpvbnRhbE1hcmdpbjsKLSAgICAgICAgYXV0
byBib3JkZXJMZWZ0ID0gYm94R2VvbWV0cnkuYm9yZGVyTGVmdCgpOwotICAgICAgICBhdXRvIGJv
cmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKLSAgICAgICAgYXV0byBwYWRk
aW5nTGVmdCA9IGJveEdlb21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKLSAgICAgICAg
YXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDAp
OwotCi0gICAgICAgIC8vICMxCi0gICAgICAgIGlmICh3aWR0aCkgewotICAgICAgICAgICAgYXV0
byBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gPSBjb250YWluaW5nQmxvY2tXaWR0aCAtIChjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSArIGJvcmRlckxlZnQgKyBwYWRk
aW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApKTsKLSAgICAgICAgICAgIGlmIChob3Jpem9u
dGFsU3BhY2VGb3JNYXJnaW4gPCAwKQotICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFy
Z2luID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyAjMgotICAgICAgICBpZiAod2lkdGggJiYgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ICYmIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKLSAgICAgICAgICAgIGlmIChj
b250YWluaW5nQmxvY2tTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKLSAgICAgICAg
ICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9ICpjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uc3RhcnQ7Ci0gICAgICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0g
Y29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3Jk
ZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kOwotICAgICAgICAgICAg
ICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAo
Ym9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVy
UmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gIzMKLSAgICAgICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJn
aW4uc3RhcnQgJiYgd2lkdGggJiYgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgewotICAg
ICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gKmNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5lbmQ7Ci0gICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNvbnRh
aW5pbmdCbG9ja1dpZHRoIC0gKGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCAgKyAqd2lkdGggKyBw
YWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmICF3aWR0
aCAmJiBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKSB7Ci0gICAgICAgICAgICB1c2VkSG9y
aXpvbnRhbE1hcmdpbiA9IHsgKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCwgKmNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQgfTsKLSAgICAgICAgICAgIHdpZHRoID0gY29udGFpbmlu
Z0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0ICYmIHdpZHRoICYmICFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKSB7Ci0gICAg
ICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9ICpjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uc3RhcnQ7Ci0gICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250
YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxl
ZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0KTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vICM0Ci0gICAgICAgIGlmICghd2lkdGgpIHsKLSAgICAg
ICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4u
c3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDAp
IH07Ci0gICAgICAgICAgICB3aWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1Jp
Z2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gIzUKLSAgICAgICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4u
c3RhcnQgJiYgIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKLSAgICAgICAgICAgIGF1
dG8gaG9yaXpvbnRhbFNwYWNlRm9yTWFyZ2luID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJp
Z2h0KTsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBob3Jpem9udGFsU3Bh
Y2VGb3JNYXJnaW4gLyAyLCBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gLyAyIH07Ci0gICAgICAg
IH0KLQotICAgICAgICBhdXRvIHNob3VsZEFwcGx5Q2VudGVyQWxpZ25Gb3JCbG9ja0NvbnRlbnQg
PSBjb250YWluaW5nQmxvY2tTdHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJL
aXRDZW50ZXIgJiYgKGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCB8fCBjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uZW5kKTsKLSAgICAgICAgaWYgKHNob3VsZEFwcGx5Q2VudGVyQWxpZ25G
b3JCbG9ja0NvbnRlbnQpIHsKLSAgICAgICAgICAgIGF1dG8gYm9yZGVyQm94V2lkdGggPSAoYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJp
Z2h0KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnQgPSBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uc3RhcnQudmFsdWVPcigwKTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2luRW5kID0gY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApOwotICAgICAgICAgICAgYXV0byBj
ZW50ZXJlZExvZ2ljYWxMZWZ0Rm9yTWFyZ2luQm94ID0gc3RkOjptYXgoKGNvbnRhaW5pbmdCbG9j
a1dpZHRoIC0gYm9yZGVyQm94V2lkdGggLSBtYXJnaW5TdGFydCAtIG1hcmdpbkVuZCkgLyAyLCAw
X2x1KTsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY2VudGVyZWRM
b2dpY2FsTGVmdEZvck1hcmdpbkJveCArIG1hcmdpblN0YXJ0OwotICAgICAgICAgICAgdXNlZEhv
cml6b250YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSBib3JkZXJCb3hXaWR0
aCAtIG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCh3
aWR0aCk7Ci0KLSAgICAgICAgcmV0dXJuIENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7ICp3aWR0aCwg
dXNlZEhvcml6b250YWxNYXJnaW4gfTsKLSAgICB9OwotCi0gICAgYXV0byBjb250ZW50V2lkdGhB
bmRNYXJnaW4gPSBjb21wdXRlKCk7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250
ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0aF1bTWFyZ2luXSAtPiBpbmZsb3cgbm9uLXJlcGxh
Y2VkIC0+IHdpZHRoKCIgPDwgY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8PCAi
cHgpIG1hcmdpbigiIDw8IGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLnN0YXJ0IDw8
ICJweCwgIiA8PCBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5lbmQgPDwgInB4KSAt
PiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIGNvbnRlbnRX
aWR0aEFuZE1hcmdpbjsKLX0KLQotQ29udGVudFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihj
b25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKHJlcGxhY2VkQm94
LmlzSW5GbG93KCkpOwotCi0gICAgLy8gMTAuMy40IEJsb2NrLWxldmVsLCByZXBsYWNlZCBlbGVt
ZW50cyBpbiBub3JtYWwgZmxvdwotICAgIC8vCi0gICAgLy8gMS4gVGhlIHVzZWQgdmFsdWUgb2Yg
J3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCi0g
ICAgLy8gMi4gVGhlbiB0aGUgcnVsZXMgZm9yIG5vbi1yZXBsYWNlZCBibG9jay1sZXZlbCBlbGVt
ZW50cyBhcmUgYXBwbGllZCB0byBkZXRlcm1pbmUgdGhlIG1hcmdpbnMuCi0KLSAgICAvLyAjMQot
ICAgIGF1dG8gdXNlZFdpZHRoID0gaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4o
cmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCBvdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcykuY29udGVudFdpZHRoOwotICAgIC8vICMyCi0gICAgYXV0byBub25SZXBsYWNl
ZFdpZHRoQW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4o
cmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgT3ZlcnJpZGRlbkhvcml6b250YWxW
YWx1ZXMgeyB1c2VkV2lkdGgsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbiB9KTsK
LQotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8
ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5mbG93IHJlcGxhY2VkIC0+IHdpZHRoKCIgPDwgdXNlZFdp
ZHRoICA8PCAicHgpIG1hcmdpbigiIDw8IG5vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4udXNlZE1h
cmdpbi5zdGFydCA8PCAicHgsICIgPDwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51c2VkTWFy
Z2luLmVuZCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOwot
ICAgIHJldHVybiB7IHVzZWRXaWR0aCwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51c2VkTWFy
Z2luIH07Ci19Ci0KLUxheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFZlcnRp
Y2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zpc3VyZW4uaHRtbCNibG9jay1mb3JtYXR0aW5nCi0g
ICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQsIGJveGVzIGFyZSBsYWlkIG91dCBv
bmUgYWZ0ZXIgdGhlIG90aGVyLCB2ZXJ0aWNhbGx5LCBiZWdpbm5pbmcgYXQgdGhlIHRvcCBvZiBh
IGNvbnRhaW5pbmcgYmxvY2suCi0gICAgLy8gVGhlIHZlcnRpY2FsIGRpc3RhbmNlIGJldHdlZW4g
dHdvIHNpYmxpbmcgYm94ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgJ21hcmdpbicgcHJvcGVydGll
cy4KLSAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zIGJldHdlZW4gYWRqYWNlbnQgYmxvY2stbGV2ZWwg
Ym94ZXMgaW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgY29sbGFwc2UuCi0gICAgaWYgKGF1
dG8qIHByZXZpb3VzSW5GbG93U2libGluZyA9IGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxp
bmcoKSkgewotICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0
dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqcHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKLSAg
ICAgICAgcmV0dXJuIEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KHByZXZpb3VzSW5GbG93Qm94
R2VvbWV0cnkpLmJvdHRvbSgpICsgcHJldmlvdXNJbkZsb3dCb3hHZW9tZXRyeS5tYXJnaW5BZnRl
cigpOwotICAgIH0KLSAgICByZXR1cm4gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOwot
fQotCi1MYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNI
b3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAotewotICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1cmVuLmh0bWwjYmxvY2stZm9ybWF0dGluZwotICAg
IC8vIEluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LCBlYWNoIGJveCdzIGxlZnQgb3V0ZXIg
ZWRnZSB0b3VjaGVzIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgKGZvciBy
aWdodC10by1sZWZ0IGZvcm1hdHRpbmcsIHJpZ2h0IGVkZ2VzIHRvdWNoKS4KLSAgICByZXR1cm4g
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0ICsgZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdpblN0YXJ0KCk7Ci19Ci0KLVBvaW50IEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNQb3NpdGlvbihjb25zdCBCb3gmIGxh
eW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHsgc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGxheW91dEJveCwgaG9y
aXpvbnRhbENvbnN0cmFpbnRzKSwgc3RhdGljVmVydGljYWxQb3NpdGlvbihsYXlvdXRCb3gsIHZl
cnRpY2FsQ29uc3RyYWludHMpIH07Ci19Ci0KLUNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4o
Y29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcykKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOwot
Ci0gICAgLy8gMTAuNi4yIElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVw
bGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snCi0gICAgLy8gcmVw
bGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1l
bnRzCi0gICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAgICAgIHJldHVybiBp
bmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+
KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCBvdmVycmlkZGVuVmVydGlj
YWxWYWx1ZXMpOwotCi0gICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBjb250ZW50SGVpZ2h0QW5k
TWFyZ2luOwotICAgIGlmIChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSAmJiAhbGF5b3V0
Qm94LmlzRG9jdW1lbnRCb3goKSkgewotICAgICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHRoZSBj
YXNlIGZvciB0aGUgZG9jdW1lbnQgZWxlbWVudC4gTGV0J3MganVzdCBjb21wbGljYXRlZC1jYXNl
IGl0IGZvciBub3cuCi0gICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBpbkZsb3dOb25S
ZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3Ry
YWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2VzCi0gICAgICAgIC8vIEJsb2NrLWxldmVsLCBub24t
cmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgd2hlbiAnb3ZlcmZsb3cnIGRvZXMgbm90
IGNvbXB1dGUgdG8gJ3Zpc2libGUnIChleGNlcHQgaWYgdGhlICdvdmVyZmxvdycgcHJvcGVydHkn
cyB2YWx1ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIHRvIHRoZSB2aWV3cG9ydCkuCi0gICAgICAgIGNv
bnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wbGljYXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotICAgIH0KLQotICAg
IGF1dG8gcXVpcmtzID0gZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKTsKLSAgICBpZiAoIXF1
aXJrcy5uZWVkc1N0cmV0Y2hpbmcobGF5b3V0Qm94KSkKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRI
ZWlnaHRBbmRNYXJnaW47Ci0KLSAgICBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWln
aHQgPSBxdWlya3Muc3RyZXRjaGVkSW5GbG93SGVpZ2h0KGxheW91dEJveCwgY29udGVudEhlaWdo
dEFuZE1hcmdpbik7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlv
dXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAtPiBpbmZsb3cgbm9uLXJlcGxhY2VkIC0+
IHN0cmVjaGVkIHRvIHZpZXdwb3J0IC0+IGhlaWdodCgiIDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJn
aW4uY29udGVudEhlaWdodCA8PCAicHgpIG1hcmdpbigiIDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJn
aW4ubm9uQ29sbGFwc2VkTWFyZ2luLmJlZm9yZSA8PCAicHgsICIgPDwgY29udGVudEhlaWdodEFu
ZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8
PCAmbGF5b3V0Qm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW47
Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW5GbG93Q29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3Qg
T3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQot
ewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSk7Ci0KLSAgICBpZiAoIWxheW91dEJv
eC5pc1JlcGxhY2VkQm94KCkpCi0gICAgICAgIHJldHVybiBpbkZsb3dOb25SZXBsYWNlZENvbnRl
bnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMpOwotICAgIHJldHVybiBpbkZsb3dSZXBsYWNlZENvbnRlbnRX
aWR0aEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRh
bENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7Ci19Ci0KLUNvbnRlbnRX
aWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBPcHRpb25hbDxMYXlvdXRVbml0
PiBhdmFpbGFibGVXaWR0aEZsb2F0QXZvaWRlcikKLXsKLSAgICBhdXRvIGNvbXB1dGUgPSBbJl0g
KGF1dG8gY29uc3RyYWludHNGb3JXaWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdpZHRo
KSB7Ci0gICAgICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmbG9hdGluZ0NvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNv
bnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNlZFdpZHRoLCB7IH0gfSk7Ci0KLSAgICAgICAgaWYgKGxh
eW91dEJveC5pc0luRmxvdygpKQotICAgICAgICAgICAgcmV0dXJuIGluRmxvd0NvbnRlbnRXaWR0
aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNlZFdpZHRoLCB7
IH0gfSk7Ci0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBD
b250ZW50V2lkdGhBbmRNYXJnaW4geyB9OwotICAgIH07Ci0KLSAgICBhdXRvIGhvcml6b250YWxD
b25zdHJhaW50c0ZvcldpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzOwotICAgIGlmIChsYXlv
dXRCb3guc3R5bGUoKS5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSAmJiBhdmFpbGFibGVXaWR0aEZs
b2F0QXZvaWRlcikgewotICAgICAgICAvLyBXaGlsZSB0aGUgbm9uLWF1dG8gd2lkdGggdmFsdWVz
IHNob3VsZCBhbGwgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgY29udGFpbmluZyBibG9jaydzIHdp
ZHRoLCB3aGVuCi0gICAgICAgIC8vIHRoZSB3aWR0aCBpcyBhdXRvIHRoZSBhdmFpbGFibGUgaG9y
aXpvbnRhbCBzcGFjZSBpcyBzaHJ1bmsgYnkgbmVpZ2hib3JpbmcgZmxvYXRzLgotICAgICAgICBo
b3Jpem9udGFsQ29uc3RyYWludHNGb3JXaWR0aC5sb2dpY2FsV2lkdGggPSAqYXZhaWxhYmxlV2lk
dGhGbG9hdEF2b2lkZXI7Ci0gICAgfQotICAgIGF1dG8gY29udGVudFdpZHRoQW5kTWFyZ2luID0g
Y29tcHV0ZShob3Jpem9udGFsQ29uc3RyYWludHNGb3JXaWR0aCwgeyB9KTsKLSAgICBhdXRvIGF2
YWlsYWJsZVdpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICBp
ZiAoYXV0byBtYXhXaWR0aCA9IGNvbXB1dGVkTWF4V2lkdGgobGF5b3V0Qm94LCBhdmFpbGFibGVX
aWR0aCkpIHsKLSAgICAgICAgYXV0byBtYXhXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUoaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCBtYXhXaWR0aCk7Ci0gICAgICAgIGlmIChjb250ZW50V2lkdGhBbmRN
YXJnaW4uY29udGVudFdpZHRoID4gbWF4V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKQotICAg
ICAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWF4V2lkdGhBbmRNYXJnaW47Ci0gICAg
fQotCi0gICAgYXV0byBtaW5XaWR0aCA9IGNvbXB1dGVkTWluV2lkdGgobGF5b3V0Qm94LCBhdmFp
bGFibGVXaWR0aCkudmFsdWVPcigwKTsKLSAgICBhdXRvIG1pbldpZHRoQW5kTWFyZ2luID0gY29t
cHV0ZShob3Jpem9udGFsQ29uc3RyYWludHMsIG1pbldpZHRoKTsKLSAgICBpZiAoY29udGVudFdp
ZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbldpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0
aCkKLSAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWluV2lkdGhBbmRNYXJnaW47Ci0g
ICAgcmV0dXJuIGNvbnRlbnRXaWR0aEFuZE1hcmdpbjsKLX0KLQotRm9ybWF0dGluZ0NvbnRleHQ6
OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgQm94JiBsYXlvdXRCb3gpCi17Ci0g
ICAgYXV0byBmaXhlZE1hcmdpbkJvcmRlckFuZFBhZGRpbmcgPSBbJl0oYXV0byYgbGF5b3V0Qm94
KSB7Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgICAgIHJl
dHVybiBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpblN0YXJ0KCkpLnZhbHVlT3IoMCkKLSAgICAgICAg
ICAgICsgTGF5b3V0VW5pdCB7IHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpIH0KLSAgICAgICAgICAg
ICsgZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nTGVmdCgpKS52YWx1ZU9yKDApCi0gICAgICAgICAg
ICArIGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ1JpZ2h0KCkpLnZhbHVlT3IoMCkKLSAgICAgICAg
ICAgICsgTGF5b3V0VW5pdCB7IHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSB9Ci0gICAgICAgICAg
ICArIGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luRW5kKCkpLnZhbHVlT3IoMCk7Ci0gICAgfTsKLQot
ICAgIGF1dG8gY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gWyZdKCkgLT4gSW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyB7Ci0gICAgICAgIGF1dG8gbG9naWNhbFdpZHRoID0gbGF5
b3V0Qm94LnN0eWxlKCkubG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIC8vIE1pbmltdW0vbWF4aW11
bSB3aWR0aCBjYW4ndCBiZSBkZXBlbmRpbmcgb24gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyB3aWR0
aC4KLSAgICAgICAgYXV0byBuZWVkc1Jlc29sdmVkQ29udGFpbmluZ0Jsb2NrV2lkdGggPSBsb2dp
Y2FsV2lkdGguaXNDYWxjdWxhdGVkKCkgfHwgbG9naWNhbFdpZHRoLmlzUGVyY2VudCgpIHx8IGxv
Z2ljYWxXaWR0aC5pc1JlbGF0aXZlKCk7Ci0gICAgICAgIGlmIChuZWVkc1Jlc29sdmVkQ29udGFp
bmluZ0Jsb2NrV2lkdGgpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIGlmIChh
dXRvIHdpZHRoID0gZml4ZWRWYWx1ZShsb2dpY2FsV2lkdGgpKQotICAgICAgICAgICAgcmV0dXJu
IHsgKndpZHRoLCAqd2lkdGggfTsKLQotICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRC
b3goKSkgewotICAgICAgICAgICAgYXV0byYgcmVwbGFjZWRCb3ggPSBkb3duY2FzdDxSZXBsYWNl
ZEJveD4obGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGlmIChyZXBsYWNlZEJveC5oYXNJbnRyaW5z
aWNXaWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXBsYWNlZFdpZHRoID0gcmVwbGFj
ZWRCb3guaW50cmluc2ljV2lkdGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyByZXBsYWNl
ZFdpZHRoLCByZXBsYWNlZFdpZHRoIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4geyB9OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpczxDb250YWluZXJCb3g+KGxheW91
dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KS5oYXNJbkZsb3dPckZs
b2F0aW5nQ2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAgaWYgKGxh
eW91dEJveC5pc1NpemVDb250YWlubWVudEJveCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgaW50
cmluc2ljIHNpemVzIG9mIHRoZSBzaXplIGNvbnRhaW5tZW50IGJveCBhcmUgZGV0ZXJtaW5lZCBh
cyBpZiB0aGUgZWxlbWVudCBoYWQgbm8gY29udGVudCwKLSAgICAgICAgICAgIC8vIGZvbGxvd2lu
ZyB0aGUgc2FtZSBsb2dpYyBhcyB3aGVuIHNpemluZyBhcyBpZiBlbXB0eS4KLSAgICAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGF5b3V0Qm94LmVzdGFibGlz
aGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZG93
bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0gICAgICAgICAgICBpZiAobG9naWNhbFdpZHRo
LmlzTWluQ29udGVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMubWluaW11bSwgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtIH07
Ci0gICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzTWF4Q29udGVudCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB7IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSwgaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtIH07Ci0gICAgICAgICAgICByZXR1cm4gaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50czsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gaW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyA9IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OwotICAgICAg
ICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmZvcm1hdHRpbmdTdGF0ZUZv
ckJveChsYXlvdXRCb3gpOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5
cGU8Qm94Pihkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpKSB7Ci0gICAgICAgICAg
ICBpZiAoY2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgKGNoaWxkLmlzRmxvYXRBdm9p
ZGVyKCkgJiYgIWNoaWxkLmhhc0Zsb2F0Q2xlYXIoKSkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBhdXRvIGNoaWxkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGZv
cm1hdHRpbmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNoaWxkKTsKLSAg
ICAgICAgICAgIEFTU0VSVChjaGlsZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOwotCi0gICAg
ICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0gPSBzdGQ6Om1heChpbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGNoaWxkSW50cmluc2ljV2lkdGhDb25zdHJh
aW50cy0+bWluaW11bSk7Ci0gICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1h
eGltdW0gPSBzdGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0sIGNoaWxk
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cy0+bWF4aW11bSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0gICAgfTsKLSAgICAvLyBGSVhNRSBD
aGVjayBmb3IgYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAgICBhdXRvIGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgPSBjb25zdHJhaW5CeU1pbk1heFdpZHRoKGxheW91dEJveCwgY29tcHV0ZWRJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpOwotICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMuZXhwYW5kKGZpeGVkTWFyZ2luQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gpKTsKLSAgICBy
ZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKLX0KLQotfQotfQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2sv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWIwODg0MjAzZGM4NmE2NzM2YWJjOGVi
ZGFmMmE1ZWYxZDU4NmFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKLQotI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiTGF5b3V0
Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKLSNpbmNsdWRlICJMYXlvdXRD
b250YWluZXJCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNw
YWNlIExheW91dCB7Ci0KLXN0YXRpYyBib29sIGlzUXVpcmtDb250YWluZXIoY29uc3QgQm94JiBs
YXlvdXRCb3gpCi17Ci0gICAgcmV0dXJuIGxheW91dEJveC5pc0JvZHlCb3goKSB8fCBsYXlvdXRC
b3guaXNEb2N1bWVudEJveCgpIHx8IGxheW91dEJveC5pc1RhYmxlQ2VsbCgpOwotfQotCi1ib29s
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bmVlZHNTdHJldGNoaW5nKGNvbnN0IEJv
eCYgbGF5b3V0Qm94KSBjb25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSk7
Ci0gICAgLy8gSW4gcXVpcmtzIG1vZGUsIGluLWZsb3cgYm9keSBhbmQgaHRtbCBzdHJldGNoIHRv
IHRoZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxvY2sgKGhlaWdodDogYXV0byBvbmx5KS4KLSAgICBp
ZiAoIWxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSAmJiAhbGF5b3V0Qm94LmlzQm9k
eUJveCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbGF5b3V0Qm94LnN0
eWxlKCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygpOwotfQotCi1MYXlvdXRVbml0IEJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4p
Ci17Ci0gICAgQVNTRVJUKG5lZWRzU3RyZXRjaGluZyhsYXlvdXRCb3gpKTsKLSAgICBhdXRvJiBm
b3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0gICAgYXV0byBu
b25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbiA9IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4ubm9uQ29s
bGFwc2VkTWFyZ2luLmJlZm9yZSArIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2Vk
TWFyZ2luLmFmdGVyOwotCi0gICAgaWYgKGxheW91dEJveC5pc0RvY3VtZW50Qm94KCkpIHsKLSAg
ICAgICAgLy8gTGV0J3Mgc3RyZXRjaCB0aGUgaW5mbG93IGRvY3VtZW50IGJveCg8aHRtbD4pIHRv
IHRoZSBoZWlnaHQgb2YgdGhlIGluaXRpYWwgY29udGFpbmluZyBibG9jayAodmlldykuCi0gICAg
ICAgIGF1dG8gZG9jdW1lbnRCb3hDb250ZW50SGVpZ2h0ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2Vv
bWV0cnlGb3JCb3gobGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxvY2soKSwgRXNjYXBlUmVh
c29uOjpEb2N1bWVudEJveFN0cmV0Y2hlc1RvVmlld3BvcnRRdWlyaykuY29udGVudEJveEhlaWdo
dCgpOwotICAgICAgICAvLyBEb2N1bWVudCBib3gncyBvd24gdmVydGljYWwgbWFyZ2luL2JvcmRl
ci9wYWRkaW5nIHZhbHVlcyBhbHdheXMgc2hyaW5rIHRoZSBjb250ZW50IGhlaWdodC4KLSAgICAg
ICAgYXV0byYgZG9jdW1lbnRCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5
Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgIGRvY3VtZW50Qm94Q29udGVudEhlaWdodCAtPSBu
b25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbiArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGljYWxC
b3JkZXIoKSArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigw
KTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVu
dEhlaWdodCwgIGRvY3VtZW50Qm94Q29udGVudEhlaWdodCk7Ci0gICAgfQotCi0gICAgLy8gSGVy
ZSBpcyB0aGUgcXVpcmt5IHBhcnQgZm9yIGJvZHkgYm94IHdoZW4gaXQgc3RyZXRjaGVzIGFsbCB0
aGUgd2F5IHRvIHRoZSBJQ0IgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBib3ggZG9lcyBub3QgKGUu
Zy4gb3V0LW9mLWZsb3cgcG9zaXRpb25lZCkuCi0gICAgQVNTRVJUKGxheW91dEJveC5pc0JvZHlC
b3goKSk7Ci0gICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9jayA9IGxheW91dEJveC5pbml0
aWFsQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9ja0dl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goaW5pdGlhbENvbnRhaW5p
bmdCbG9jaywgRXNjYXBlUmVhc29uOjpCb2R5U3RyZXRjaGVzVG9WaWV3cG9ydFF1aXJrKTsKLSAg
ICAvLyBTdGFydCB0aGUgY29udGVudCBoZWlnaHQgd2l0aCB0aGUgSUNCLgotICAgIGF1dG8gYm9k
eUJveENvbnRlbnRIZWlnaHQgPSBpbml0aWFsQ29udGFpbmluZ0Jsb2NrR2VvbWV0cnkuY29udGVu
dEJveEhlaWdodCgpOwotICAgIC8vIEJvZHkgYm94J3Mgb3duIGJvcmRlciBhbmQgcGFkZGluZyBz
aHJpbmsgdGhlIGNvbnRlbnQgaGVpZ2h0LgotICAgIGF1dG8mIGJvZHlCb3hHZW9tZXRyeSA9IGZv
cm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgYm9keUJveENv
bnRlbnRIZWlnaHQgLT0gYm9keUJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib2R5Qm94
R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKTsKLSAgICAvLyBCb2R5IGJveCBu
ZXZlciBjb2xsYXBzZXMgaXRzIHZlcnRpY2FsIG1hcmdpbnMgd2l0aCB0aGUgZG9jdW1lbnQgYm94
IGJ1dCBpdCBtaWdodCBjb2xsYXBzZSBpdHMgbWFyZ2luIHdpdGggaXRzIGRlc2NlbmRhbnRzLgot
ICAgIGF1dG8gbm9uQ29sbGFwc2VkTWFyZ2luID0gY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25D
b2xsYXBzZWRNYXJnaW47Ci0gICAgYXV0byBjb2xsYXBzZWRNYXJnaW4gPSBmb3JtYXR0aW5nQ29u
dGV4dC5tYXJnaW5Db2xsYXBzZSgpLmNvbGxhcHNlZFZlcnRpY2FsVmFsdWVzKGxheW91dEJveCwg
bm9uQ29sbGFwc2VkTWFyZ2luKS5jb2xsYXBzZWRWYWx1ZXM7Ci0gICAgYXV0byB1c2VkVmVydGlj
YWxNYXJnaW4gPSBjb2xsYXBzZWRNYXJnaW4uYmVmb3JlLnZhbHVlT3Iobm9uQ29sbGFwc2VkTWFy
Z2luLmJlZm9yZSk7Ci0gICAgdXNlZFZlcnRpY2FsTWFyZ2luICs9IGNvbGxhcHNlZE1hcmdpbi5p
c0NvbGxhcHNlZFRocm91Z2ggPyBub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIgOiBjb2xsYXBzZWRN
YXJnaW4uYWZ0ZXIudmFsdWVPcihub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIpOwotICAgIGJvZHlC
b3hDb250ZW50SGVpZ2h0IC09IHVzZWRWZXJ0aWNhbE1hcmdpbjsKLSAgICAvLyBEb2N1bWVudCBi
b3gncyBwYWRkaW5nIGFuZCBib3JkZXIgYWxzbyBzaHJpbmsgdGhlIGJvZHkgYm94J3MgY29udGVu
dCBoZWlnaHQuCi0gICAgYXV0byYgZG9jdW1lbnRCb3ggPSBsYXlvdXRCb3gucGFyZW50KCk7Ci0g
ICAgYXV0byYgZG9jdW1lbnRCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5
Rm9yQm94KGRvY3VtZW50Qm94LCBFc2NhcGVSZWFzb246OkJvZHlTdHJldGNoZXNUb1ZpZXdwb3J0
UXVpcmspOwotICAgIGJvZHlCb3hDb250ZW50SGVpZ2h0IC09IGRvY3VtZW50Qm94R2VvbWV0cnku
dmVydGljYWxCb3JkZXIoKSArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCku
dmFsdWVPcigwKTsKLSAgICAvLyBIb3dldmVyIHRoZSBub24taW4tZmxvdyBkb2N1bWVudCBib3gn
cyB2ZXJ0aWNhbCBtYXJnaW5zIGFyZSBpZ25vcmVkLiBUaGV5IGRvbid0IGFmZmVjdCB0aGUgYm9k
eSBib3gncyBjb250ZW50IGhlaWdodC4KLSAgICBpZiAoZG9jdW1lbnRCb3guaXNJbkZsb3coKSkg
ewotICAgICAgICBhdXRvIGdlb21ldHJ5ID0gdGhpcy0+Z2VvbWV0cnkoKTsKLSAgICAgICAgYXV0
byBwcmVjb21wdXRlRG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbiA9IGdlb21ldHJ5LmNvbXB1dGVk
VmVydGljYWxNYXJnaW4oZG9jdW1lbnRCb3gsIGdlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93
Q29udGVudChpbml0aWFsQ29udGFpbmluZ0Jsb2NrLCBFc2NhcGVSZWFzb246OkJvZHlTdHJldGNo
ZXNUb1ZpZXdwb3J0UXVpcmspLmhvcml6b250YWwpOwotICAgICAgICBib2R5Qm94Q29udGVudEhl
aWdodCAtPSBwcmVjb21wdXRlRG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVP
cigwKSArIHByZWNvbXB1dGVEb2N1bWVudEJveFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3Io
MCk7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om1heChjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNv
bnRlbnRIZWlnaHQsICBib2R5Qm94Q29udGVudEhlaWdodCk7Ci19Ci0KLWJvb2wgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6UXVpcmtzOjpzaG91bGRJZ25vcmVDb2xsYXBzZWRRdWlya01hcmdpbihj
b25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5p
blF1aXJrc01vZGUoKSAmJiBpc1F1aXJrQ29udGFpbmVyKGxheW91dEJveCk7Ci19Ci0KLWVudW0g
Y2xhc3MgVmVydGljYWxNYXJnaW4geyBCZWZvcmUsIEFmdGVyIH07Ci1zdGF0aWMgaW5saW5lIGJv
b2wgaGFzUXVpcmtNYXJnaW5Ub0NvbGxhcHNlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBWZXJ0aWNh
bE1hcmdpbiB2ZXJ0aWNhbE1hcmdpbikKLXsKLSAgICBpZiAoIWxheW91dEJveC5pc0luRmxvdygp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5
bGUoKTsKLSAgICByZXR1cm4gKHZlcnRpY2FsTWFyZ2luID09IFZlcnRpY2FsTWFyZ2luOjpCZWZv
cmUgJiYgc3R5bGUuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSkgfHwgKHZlcnRpY2FsTWFyZ2luID09
IFZlcnRpY2FsTWFyZ2luOjpBZnRlciAmJiBzdHlsZS5oYXNNYXJnaW5BZnRlclF1aXJrKCkpOwot
fQotCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c2hvdWxkQ29sbGFwc2VN
YXJnaW5CZWZvcmVXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBj
b25zdAotewotICAgIHJldHVybiBsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpICYmIGhhc1F1
aXJrTWFyZ2luVG9Db2xsYXBzZShsYXlvdXRCb3gsIFZlcnRpY2FsTWFyZ2luOjpCZWZvcmUpICYm
IGlzUXVpcmtDb250YWluZXIobGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKLX0KLQotYm9v
bCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OnNob3VsZENvbGxhcHNlTWFyZ2luQWZ0
ZXJXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkgJiYgaGFzUXVpcmtNYXJnaW5U
b0NvbGxhcHNlKGxheW91dEJveCwgVmVydGljYWxNYXJnaW46OkFmdGVyKSAmJiBpc1F1aXJrQ29u
dGFpbmVyKGxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7Ci19Ci0KLX0KLX0KLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjA0NzdkY2FjZjM4NWFlMDcxMGM5N2E5NTU5ZDcxMjE3ZjA4OGI1MTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2Nr
L0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtMCwwICsxLDQwNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRy
eS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRl
ICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94
R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
TGF5b3V0Q29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2su
aCIKKyNpbmNsdWRlICJMYXlvdXRSZXBsYWNlZEJveC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K25hbWVzcGFjZSBMYXlvdXQgeworCitCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6QmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkoY29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYgYmxvY2tGb3JtYXR0
aW5nQ29udGV4dCkKKyAgICA6IEZvcm1hdHRpbmdHZW9tZXRyeShibG9ja0Zvcm1hdHRpbmdDb250
ZXh0KQoreworfQorCitDb250ZW50SGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5OjppbkZsb3dOb25SZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBs
YXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFp
bnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcykKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkgJiYgIWxheW91dEJveC5p
c1JlcGxhY2VkQm94KCkpOworICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUo
KSk7CisKKyAgICBhdXRvIGNvbXB1dGUgPSBbJl0oY29uc3QgYXV0byYgb3ZlcnJpZGRlblZlcnRp
Y2FsVmFsdWVzKSAtPiBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIHsKKworICAgICAgICAvLyAxMC42
LjMgQmxvY2stbGV2ZWwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IHdoZW4g
J292ZXJmbG93JyBjb21wdXRlcyB0byAndmlzaWJsZScKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
SWYgJ21hcmdpbi10b3AnLCBvciAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywgdGhlaXIgdXNl
ZCB2YWx1ZSBpcyAwLgorICAgICAgICAvLyBJZiAnaGVpZ2h0JyBpcyAnYXV0bycsIHRoZSBoZWln
aHQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyBhbnkgYmxvY2stbGV2ZWwgY2hp
bGRyZW4gYW5kIHdoZXRoZXIgaXQgaGFzIHBhZGRpbmcgb3IgYm9yZGVyczoKKyAgICAgICAgLy8g
VGhlIGVsZW1lbnQncyBoZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGZyb20gaXRzIHRvcCBjb250ZW50
IGVkZ2UgdG8gdGhlIGZpcnN0IGFwcGxpY2FibGUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAg
Ly8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0aGUgYm94IGVz
dGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBvciBtb3JlIGxp
bmVzCisgICAgICAgIC8vIDIuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm90dG9tIChwb3NzaWJs
eSBjb2xsYXBzZWQpIG1hcmdpbiBvZiBpdHMgbGFzdCBpbi1mbG93IGNoaWxkLCBpZiB0aGUgY2hp
bGQncyBib3R0b20gbWFyZ2luCisgICAgICAgIC8vICAgIGRvZXMgbm90IGNvbGxhcHNlIHdpdGgg
dGhlIGVsZW1lbnQncyBib3R0b20gbWFyZ2luCisgICAgICAgIC8vIDMuIHRoZSBib3R0b20gYm9y
ZGVyIGVkZ2Ugb2YgdGhlIGxhc3QgaW4tZmxvdyBjaGlsZCB3aG9zZSB0b3AgbWFyZ2luIGRvZXNu
J3QgY29sbGFwc2Ugd2l0aCB0aGUgZWxlbWVudCdzIGJvdHRvbSBtYXJnaW4KKyAgICAgICAgLy8g
NC4gemVybywgb3RoZXJ3aXNlCisgICAgICAgIC8vIE9ubHkgY2hpbGRyZW4gaW4gdGhlIG5vcm1h
bCBmbG93IGFyZSB0YWtlbiBpbnRvIGFjY291bnQgKGkuZS4sIGZsb2F0aW5nIGJveGVzIGFuZCBh
YnNvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGlnbm9yZWQsCisgICAgICAgIC8vIGFuZCBy
ZWxhdGl2ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGNvbnNpZGVyZWQgd2l0aG91dCB0aGVpciBv
ZmZzZXQpLiBOb3RlIHRoYXQgdGhlIGNoaWxkIGJveCBtYXkgYmUgYW4gYW5vbnltb3VzIGJsb2Nr
IGJveC4KKworICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2Fs
TWFyZ2luID0gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91
dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAgICAgYXV0byBub25Db2xsYXBzZWRN
YXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4u
YWZ0ZXIudmFsdWVPcigwKSB9OyAKKyAgICAgICAgYXV0byBib3JkZXJBbmRQYWRkaW5nVG9wID0g
Ym94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVP
cigwKTsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVp
Z2h0ID8gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRI
ZWlnaHQobGF5b3V0Qm94KTsKKworICAgICAgICBpZiAoaGVpZ2h0KQorICAgICAgICAgICAgcmV0
dXJuIHsgKmhlaWdodCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07CisKKyAgICAgICAgaWYgKCFpczxD
b250YWluZXJCb3g+KGxheW91dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0
Qm94KS5oYXNJbkZsb3dDaGlsZCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgMCwgbm9uQ29sbGFw
c2VkTWFyZ2luIH07CisKKyAgICAgICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0
IGxpbmUgYm94LCBpZiB0aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29u
dGV4dCB3aXRoIG9uZSBvciBtb3JlIGxpbmVzCisgICAgICAgIGF1dG8mIGxheW91dENvbnRhaW5l
ciA9IGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KTsKKyAgICAgICAgaWYgKGxheW91
dENvbnRhaW5lci5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAg
ICAgICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJs
aXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUobGF5b3V0Q29udGFpbmVyKTsKKyAgICAgICAgICAg
IGF1dG8mIGxpbmVzID0gaW5saW5lRm9ybWF0dGluZ1N0YXRlLmxpbmVzKCk7CisgICAgICAgICAg
ICAvLyBFdmVuIGVtcHR5IGNvbnRhaW5lcnMgZ2VuZXJhdGUgb25lIGxpbmUuIAorICAgICAgICAg
ICAgQVNTRVJUKCFsaW5lcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgcmV0dXJuIHsgdG9MYXlv
dXRVbml0KGxpbmVzLmxhc3QoKS5saW5lQm94TG9naWNhbFJlY3QoKS5ib3R0b20oKSArIGlubGlu
ZUZvcm1hdHRpbmdTdGF0ZS5jbGVhckdhcEFmdGVyTGFzdExpbmUoKSkgLSBib3JkZXJBbmRQYWRk
aW5nVG9wLCBub25Db2xsYXBzZWRNYXJnaW4gfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDIu
IHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm90dG9tIChwb3NzaWJseSBjb2xsYXBzZWQpIG1hcmdp
biBvZiBpdHMgbGFzdCBpbi1mbG93IGNoaWxkLCBpZiB0aGUgY2hpbGQncyBib3R0b20gbWFyZ2lu
Li4uCisgICAgICAgIGF1dG8gbWFyZ2luQ29sbGFwc2UgPSBCbG9ja01hcmdpbkNvbGxhcHNlIHsg
bGF5b3V0U3RhdGUoKSwgZm9ybWF0dGluZ0NvbnRleHQoKS5mb3JtYXR0aW5nU3RhdGUoKSB9Owor
ICAgICAgICBhdXRvJiBsYXN0SW5GbG93Q2hpbGQgPSAqbGF5b3V0Q29udGFpbmVyLmxhc3RJbkZs
b3dDaGlsZCgpOworICAgICAgICBpZiAoIW1hcmdpbkNvbGxhcHNlLm1hcmdpbkFmdGVyQ29sbGFw
c2VzV2l0aFBhcmVudE1hcmdpbkFmdGVyKGxhc3RJbkZsb3dDaGlsZCkpIHsKKyAgICAgICAgICAg
IGF1dG8mIGxhc3RJbkZsb3dCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0
cnlGb3JCb3gobGFzdEluRmxvd0NoaWxkKTsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tRWRnZU9m
Qm90dG9tTWFyZ2luID0gQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QobGFzdEluRmxvd0JveEdl
b21ldHJ5KS5ib3R0b20oKSArIGxhc3RJbkZsb3dCb3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpOwor
ICAgICAgICAgICAgcmV0dXJuIHsgYm90dG9tRWRnZU9mQm90dG9tTWFyZ2luIC0gYm9yZGVyQW5k
UGFkZGluZ1RvcCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07CisgICAgICAgIH0KKworICAgICAgICAv
LyAzLiB0aGUgYm90dG9tIGJvcmRlciBlZGdlIG9mIHRoZSBsYXN0IGluLWZsb3cgY2hpbGQgd2hv
c2UgdG9wIG1hcmdpbiBkb2Vzbid0IGNvbGxhcHNlIHdpdGggdGhlIGVsZW1lbnQncyBib3R0b20g
bWFyZ2luCisgICAgICAgIGF1dG8qIGluRmxvd0NoaWxkID0gJmxhc3RJbkZsb3dDaGlsZDsKKyAg
ICAgICAgd2hpbGUgKGluRmxvd0NoaWxkICYmIG1hcmdpbkNvbGxhcHNlLm1hcmdpbkJlZm9yZUNv
bGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcigqaW5GbG93Q2hpbGQpKQorICAgICAgICAgICAg
aW5GbG93Q2hpbGQgPSBpbkZsb3dDaGlsZC0+cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7CisgICAg
ICAgIGlmIChpbkZsb3dDaGlsZCkgeworICAgICAgICAgICAgYXV0byYgaW5GbG93Qm94R2VvbWV0
cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCppbkZsb3dDaGlsZCk7Cisg
ICAgICAgICAgICByZXR1cm4geyBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94VG9wKGluRmxvd0JveEdl
b21ldHJ5KSArIGluRmxvd0JveEdlb21ldHJ5LmJvcmRlckJveCgpLmhlaWdodCgpIC0gYm9yZGVy
QW5kUGFkZGluZ1RvcCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07CisgICAgICAgIH0KKworICAgICAg
ICAvLyA0LiB6ZXJvLCBvdGhlcndpc2UKKyAgICAgICAgcmV0dXJuIHsgMCwgbm9uQ29sbGFwc2Vk
TWFyZ2luIH07CisgICAgfTsKKworICAgIC8vIDEwLjYuNyAnQXV0bycgaGVpZ2h0cyBmb3IgYmxv
Y2stbGV2ZWwgZm9ybWF0dGluZyBjb250ZXh0IGJveGVzLgorICAgIGF1dG8gaXNBdXRvSGVpZ2h0
ID0gIW92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgJiYgIWNvbXB1dGVkSGVpZ2h0KGxh
eW91dEJveCk7CisgICAgaWYgKGlzQXV0b0hlaWdodCAmJiAobGF5b3V0Qm94LmVzdGFibGlzaGVz
Rm9ybWF0dGluZ0NvbnRleHQoKSAmJiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQoKSkpCisgICAgICAgIHJldHVybiBjb21wdXRlKCBPdmVycmlkZGVuVmVydGlj
YWxWYWx1ZXMgeyBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGRvd25jYXN0
PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSkgfSk7CisgICAgcmV0dXJuIGNvbXB1dGUob3ZlcnJp
ZGRlblZlcnRpY2FsVmFsdWVzKTsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9y
bWF0dGluZ0dlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihj
b25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9u
dGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlk
ZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkp
OworCisgICAgYXV0byBjb21wdXRlID0gWyZdKCkgeworCisgICAgICAgIC8vIDEwLjMuMyBCbG9j
ay1sZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93CisgICAgICAgIC8v
CisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29uc3RyYWludHMgbXVzdCBob2xkIGFtb25nIHRo
ZSB1c2VkIHZhbHVlcyBvZiB0aGUgb3RoZXIgcHJvcGVydGllczoKKyAgICAgICAgLy8gJ21hcmdp
bi1sZWZ0JyArICdib3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGluZy1sZWZ0JyArICd3aWR0aCcg
KyAncGFkZGluZy1yaWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyArICdtYXJnaW4tcmlnaHQn
ID0gd2lkdGggb2YgY29udGFpbmluZyBibG9jaworICAgICAgICAvLworICAgICAgICAvLyAxLiBJ
ZiAnd2lkdGgnIGlzIG5vdCAnYXV0bycgYW5kICdib3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGlu
Zy1sZWZ0JyArICd3aWR0aCcgKyAncGFkZGluZy1yaWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRo
JyAKKyAgICAgICAgLy8gICAgKHBsdXMgYW55IG9mICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1y
aWdodCcgdGhhdCBhcmUgbm90ICdhdXRvJykgaXMgbGFyZ2VyIHRoYW4gdGhlIHdpZHRoIG9mIHRo
ZSBjb250YWluaW5nIGJsb2NrLCB0aGVuCisgICAgICAgIC8vICAgIGFueSAnYXV0bycgdmFsdWVz
IGZvciAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGFyZSwgZm9yIHRoZSBmb2xsb3dp
bmcgcnVsZXMsIHRyZWF0ZWQgYXMgemVyby4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMi4gSWYg
YWxsIG9mIHRoZSBhYm92ZSBoYXZlIGEgY29tcHV0ZWQgdmFsdWUgb3RoZXIgdGhhbiAnYXV0bycs
IHRoZSB2YWx1ZXMgYXJlIHNhaWQgdG8gYmUgIm92ZXItY29uc3RyYWluZWQiIGFuZCBvbmUgb2Yg
dGhlIHVzZWQgdmFsdWVzIHdpbGwKKyAgICAgICAgLy8gICAgaGF2ZSB0byBiZSBkaWZmZXJlbnQg
ZnJvbSBpdHMgY29tcHV0ZWQgdmFsdWUuIElmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0
aGUgY29udGFpbmluZyBibG9jayBoYXMgdGhlIHZhbHVlICdsdHInLCB0aGUgc3BlY2lmaWVkIHZh
bHVlCisgICAgICAgIC8vICAgIG9mICdtYXJnaW4tcmlnaHQnIGlzIGlnbm9yZWQgYW5kIHRoZSB2
YWx1ZSBpcyBjYWxjdWxhdGVkIHNvIGFzIHRvIG1ha2UgdGhlIGVxdWFsaXR5IHRydWUuIElmIHRo
ZSB2YWx1ZSBvZiAnZGlyZWN0aW9uJyBpcyAncnRsJywKKyAgICAgICAgLy8gICAgdGhpcyBoYXBw
ZW5zIHRvICdtYXJnaW4tbGVmdCcgaW5zdGVhZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMy4g
SWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgdmFsdWUgc3BlY2lmaWVkIGFzICdhdXRvJywgaXRzIHVz
ZWQgdmFsdWUgZm9sbG93cyBmcm9tIHRoZSBlcXVhbGl0eS4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gNC4gSWYgJ3dpZHRoJyBpcyBzZXQgdG8gJ2F1dG8nLCBhbnkgb3RoZXIgJ2F1dG8nIHZhbHVl
cyBiZWNvbWUgJzAnIGFuZCAnd2lkdGgnIGZvbGxvd3MgZnJvbSB0aGUgcmVzdWx0aW5nIGVxdWFs
aXR5LgorICAgICAgICAvLworICAgICAgICAvLyA1LiBJZiBib3RoICdtYXJnaW4tbGVmdCcgYW5k
ICdtYXJnaW4tcmlnaHQnIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWVzIGFyZSBlcXVhbC4g
VGhpcyBob3Jpem9udGFsbHkgY2VudGVycyB0aGUgZWxlbWVudCB3aXRoIHJlc3BlY3QgdG8gdGhl
CisgICAgICAgIC8vICAgIGVkZ2VzIG9mIHRoZSBjb250YWluaW5nIGJsb2NrLgorCisgICAgICAg
IGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNh
bFdpZHRoOworICAgICAgICBhdXRvJiBjb250YWluaW5nQmxvY2tTdHlsZSA9IGxheW91dEJveC5j
b250YWluaW5nQmxvY2soKS5zdHlsZSgpOworICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZv
cm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKworICAgICAgICBh
dXRvIHdpZHRoID0gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVu
SG9yaXpvbnRhbFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkV2lkdGgobGF5b3V0Qm94LCBjb250YWlu
aW5nQmxvY2tXaWR0aCk7CisgICAgICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0g
Rm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBo
b3Jpem9udGFsQ29uc3RyYWludHMpOworICAgICAgICBVc2VkSG9yaXpvbnRhbE1hcmdpbiB1c2Vk
SG9yaXpvbnRhbE1hcmdpbjsKKyAgICAgICAgYXV0byBib3JkZXJMZWZ0ID0gYm94R2VvbWV0cnku
Ym9yZGVyTGVmdCgpOworICAgICAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9y
ZGVyUmlnaHQoKTsKKyAgICAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGJveEdlb21ldHJ5LnBhZGRp
bmdMZWZ0KCkudmFsdWVPcigwKTsKKyAgICAgICAgYXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9t
ZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOworCisgICAgICAgIC8vICMxCisgICAgICAg
IGlmICh3aWR0aCkgeworICAgICAgICAgICAgYXV0byBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4g
PSBjb250YWluaW5nQmxvY2tXaWR0aCAtIChjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQu
dmFsdWVPcigwKSArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdS
aWdodCArIGJvcmRlclJpZ2h0ICsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9y
KDApKTsKKyAgICAgICAgICAgIGlmIChob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gPCAwKQorICAg
ICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1
ZU9yKDApIH07CisgICAgICAgIH0KKworICAgICAgICAvLyAjMgorICAgICAgICBpZiAod2lkdGgg
JiYgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmIGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5lbmQpIHsKKyAgICAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2tTdHlsZS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7CisgICAgICAgICAgICAg
ICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNl
ZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lk
dGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9ICpjb21wdXRlZEhvcml6
b250YWxNYXJnaW4uZW5kOworICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsg
KndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5lbmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gIzMKKyAgICAg
ICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgJiYgd2lkdGggJiYgY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgeworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJn
aW4uZW5kID0gKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQ7CisgICAgICAgICAgICB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKGJvcmRlckxl
ZnQgKyBwYWRkaW5nTGVmdCAgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCAr
IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmICF3aWR0aCAmJiBjb21wdXRlZEhvcml6b250YWxNYXJn
aW4uZW5kKSB7CisgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgKmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbi5zdGFydCwgKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQgfTsK
KyAgICAgICAgICAgIHdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250
YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQg
KyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmIHdpZHRoICYmICFjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uZW5kKSB7CisgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7CisgICAgICAgICAgICB1
c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9y
aXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCAr
IHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICM0
CisgICAgICAgIGlmICghd2lkdGgpIHsKKyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2lu
ID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07CisgICAgICAgICAgICB3aWR0aCA9IGNv
bnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVy
TGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9y
aXpvbnRhbE1hcmdpbi5lbmQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gIzUKKyAgICAgICAg
aWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgJiYgIWNvbXB1dGVkSG9yaXpvbnRh
bE1hcmdpbi5lbmQpIHsKKyAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbFNwYWNlRm9yTWFyZ2lu
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICArICp3
aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0KTsKKyAgICAgICAgICAgIHVzZWRIb3Jp
em9udGFsTWFyZ2luID0geyBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gLyAyLCBob3Jpem9udGFs
U3BhY2VGb3JNYXJnaW4gLyAyIH07CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHNob3VsZEFw
cGx5Q2VudGVyQWxpZ25Gb3JCbG9ja0NvbnRlbnQgPSBjb250YWluaW5nQmxvY2tTdHlsZS50ZXh0
QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXIgJiYgKGNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydCB8fCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKTsKKyAgICAg
ICAgaWYgKHNob3VsZEFwcGx5Q2VudGVyQWxpZ25Gb3JCbG9ja0NvbnRlbnQpIHsKKyAgICAgICAg
ICAgIGF1dG8gYm9yZGVyQm94V2lkdGggPSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICArICp3
aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0KTsKKyAgICAgICAgICAgIGF1dG8gbWFy
Z2luU3RhcnQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKTsKKyAg
ICAgICAgICAgIGF1dG8gbWFyZ2luRW5kID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52
YWx1ZU9yKDApOworICAgICAgICAgICAgYXV0byBjZW50ZXJlZExvZ2ljYWxMZWZ0Rm9yTWFyZ2lu
Qm94ID0gc3RkOjptYXgoKGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gYm9yZGVyQm94V2lkdGggLSBt
YXJnaW5TdGFydCAtIG1hcmdpbkVuZCkgLyAyLCAwX2x1KTsKKyAgICAgICAgICAgIHVzZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0ID0gY2VudGVyZWRMb2dpY2FsTGVmdEZvck1hcmdpbkJveCArIG1h
cmdpblN0YXJ0OworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gY29udGFp
bmluZ0Jsb2NrV2lkdGggLSBib3JkZXJCb3hXaWR0aCAtIG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5k
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVCh3aWR0aCk7CisKKyAgICAgICAgcmV0dXJuIENv
bnRlbnRXaWR0aEFuZE1hcmdpbiB7ICp3aWR0aCwgdXNlZEhvcml6b250YWxNYXJnaW4gfTsKKyAg
ICB9OworCisgICAgYXV0byBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBjb21wdXRlKCk7CisgICAg
TE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0
aF1bTWFyZ2luXSAtPiBpbmZsb3cgbm9uLXJlcGxhY2VkIC0+IHdpZHRoKCIgPDwgY29udGVudFdp
ZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IGNvbnRlbnRXaWR0
aEFuZE1hcmdpbi51c2VkTWFyZ2luLnN0YXJ0IDw8ICJweCwgIiA8PCBjb250ZW50V2lkdGhBbmRN
YXJnaW4udXNlZE1hcmdpbi5lbmQgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94
IDw8ICIpIik7CisgICAgcmV0dXJuIGNvbnRlbnRXaWR0aEFuZE1hcmdpbjsKK30KKworQ29udGVu
dFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dSZXBsYWNlZENv
bnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0
IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVy
cmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCit7Cisg
ICAgQVNTRVJUKHJlcGxhY2VkQm94LmlzSW5GbG93KCkpOworCisgICAgLy8gMTAuMy40IEJsb2Nr
LWxldmVsLCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdworICAgIC8vCisgICAgLy8g
MS4gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUg
cmVwbGFjZWQgZWxlbWVudHMuCisgICAgLy8gMi4gVGhlbiB0aGUgcnVsZXMgZm9yIG5vbi1yZXBs
YWNlZCBibG9jay1sZXZlbCBlbGVtZW50cyBhcmUgYXBwbGllZCB0byBkZXRlcm1pbmUgdGhlIG1h
cmdpbnMuCisKKyAgICAvLyAjMQorICAgIGF1dG8gdXNlZFdpZHRoID0gaW5saW5lUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywg
eyB9LCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykuY29udGVudFdpZHRoOworICAgIC8vICMy
CisgICAgYXV0byBub25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywg
T3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMgeyB1c2VkV2lkdGgsIG92ZXJyaWRkZW5Ib3Jpem9u
dGFsVmFsdWVzLm1hcmdpbiB9KTsKKworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29u
dGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5mbG93IHJlcGxhY2Vk
IC0+IHdpZHRoKCIgPDwgdXNlZFdpZHRoICA8PCAicHgpIG1hcmdpbigiIDw8IG5vblJlcGxhY2Vk
V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCA8PCAicHgsICIgPDwgbm9uUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLmVuZCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZy
ZXBsYWNlZEJveCA8PCAiKSIpOworICAgIHJldHVybiB7IHVzZWRXaWR0aCwgbm9uUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luIH07Cit9CisKK0xheW91dFVuaXQgQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gs
IGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0Cit7
CisgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zpc3VyZW4uaHRtbCNibG9jay1m
b3JtYXR0aW5nCisgICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQsIGJveGVzIGFy
ZSBsYWlkIG91dCBvbmUgYWZ0ZXIgdGhlIG90aGVyLCB2ZXJ0aWNhbGx5LCBiZWdpbm5pbmcgYXQg
dGhlIHRvcCBvZiBhIGNvbnRhaW5pbmcgYmxvY2suCisgICAgLy8gVGhlIHZlcnRpY2FsIGRpc3Rh
bmNlIGJldHdlZW4gdHdvIHNpYmxpbmcgYm94ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgJ21hcmdp
bicgcHJvcGVydGllcy4KKyAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zIGJldHdlZW4gYWRqYWNlbnQg
YmxvY2stbGV2ZWwgYm94ZXMgaW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgY29sbGFwc2Uu
CisgICAgaWYgKGF1dG8qIHByZXZpb3VzSW5GbG93U2libGluZyA9IGxheW91dEJveC5wcmV2aW91
c0luRmxvd1NpYmxpbmcoKSkgeworICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0JveEdlb21l
dHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqcHJldmlvdXNJbkZsb3dT
aWJsaW5nKTsKKyAgICAgICAgcmV0dXJuIEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KHByZXZp
b3VzSW5GbG93Qm94R2VvbWV0cnkpLmJvdHRvbSgpICsgcHJldmlvdXNJbkZsb3dCb3hHZW9tZXRy
eS5tYXJnaW5BZnRlcigpOworICAgIH0KKyAgICByZXR1cm4gdmVydGljYWxDb25zdHJhaW50cy5s
b2dpY2FsVG9wOworfQorCitMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjpzdGF0
aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAoreworICAgIC8vIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1cmVuLmh0bWwjYmxvY2stZm9ybWF0dGluZwor
ICAgIC8vIEluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LCBlYWNoIGJveCdzIGxlZnQgb3V0
ZXIgZWRnZSB0b3VjaGVzIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgKGZv
ciByaWdodC10by1sZWZ0IGZvcm1hdHRpbmcsIHJpZ2h0IGVkZ2VzIHRvdWNoKS4KKyAgICByZXR1
cm4gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0ICsgZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdpblN0YXJ0KCk7Cit9CisKK1BvaW50IEJs
b2NrRm9ybWF0dGluZ0dlb21ldHJ5OjpzdGF0aWNQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNv
bnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHsgc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGxheW91dEJveCwgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKSwgc3RhdGljVmVydGljYWxQb3NpdGlvbihsYXlvdXRCb3gsIHZlcnRpY2Fs
Q29uc3RyYWludHMpIH07Cit9CisKK0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnk6OmluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlv
dXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVl
cykKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOworCisgICAgLy8gMTAuNi4y
IElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMg
aW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snCisgICAgLy8gcmVwbGFjZWQgZWxlbWVudHMg
aW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1lbnRzCisgICAgaWYgKGxh
eW91dEJveC5pc1JlcGxhY2VkQm94KCkpCisgICAgICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENv
bnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhv
cml6b250YWxDb25zdHJhaW50cywgeyB9LCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOworCisg
ICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBjb250ZW50SGVpZ2h0QW5kTWFyZ2luOworICAgIGlm
IChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSAmJiAhbGF5b3V0Qm94LmlzRG9jdW1lbnRC
b3goKSkgeworICAgICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHRoZSBjYXNlIGZvciB0aGUgZG9j
dW1lbnQgZWxlbWVudC4gTGV0J3MganVzdCBjb21wbGljYXRlZC1jYXNlIGl0IGZvciBub3cuCisg
ICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBpbkZsb3dOb25SZXBsYWNlZENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gMTAuNi42IENvbXBs
aWNhdGVkIGNhc2VzCisgICAgICAgIC8vIEJsb2NrLWxldmVsLCBub24tcmVwbGFjZWQgZWxlbWVu
dHMgaW4gbm9ybWFsIGZsb3cgd2hlbiAnb3ZlcmZsb3cnIGRvZXMgbm90IGNvbXB1dGUgdG8gJ3Zp
c2libGUnIChleGNlcHQgaWYgdGhlICdvdmVyZmxvdycgcHJvcGVydHkncyB2YWx1ZSBoYXMgYmVl
biBwcm9wYWdhdGVkIHRvIHRoZSB2aWV3cG9ydCkuCisgICAgICAgIGNvbnRlbnRIZWlnaHRBbmRN
YXJnaW4gPSBjb21wbGljYXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOworICAgIH0KKworICAgIGlmIChsYXlvdXRTdGF0
ZSgpLmluUXVpcmtzTW9kZSgpKSB7CisgICAgICAgIGlmIChhdXRvIHN0cmV0Y2hlZEluRmxvd0hl
aWdodCA9IEJsb2NrRm9ybWF0dGluZ1F1aXJrcyhmb3JtYXR0aW5nQ29udGV4dCgpKS5zdHJldGNo
ZWRJbkZsb3dIZWlnaHRJZkFwcGxpY2FibGUobGF5b3V0Qm94LCBjb250ZW50SGVpZ2h0QW5kTWFy
Z2luKSkKKyAgICAgICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA9
ICpzdHJldGNoZWRJbkZsb3dIZWlnaHQ7ICAgICAKKyAgICB9CisKKyAgICBMT0dfV0lUSF9TVFJF
QU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAt
PiBpbmZsb3cgbm9uLXJlcGxhY2VkIC0+IHN0cmVjaGVkIHRvIHZpZXdwb3J0IC0+IGhlaWdodCgi
IDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA8PCAicHgpIG1hcmdpbigi
IDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luLmJlZm9yZSA8PCAi
cHgsICIgPDwgY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIg
PDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAgcmV0dXJu
IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW47Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93Q29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJv
eCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25z
dHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jp
em9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSk7CisKKyAg
ICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCisgICAgICAgIHJldHVybiBpbkZsb3dO
b25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOworICAgIHJldHVybiBpbkZsb3dS
ZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0
Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7
Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6Y29t
cHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBPcHRpb25hbDxMYXlv
dXRVbml0PiBhdmFpbGFibGVXaWR0aEZsb2F0QXZvaWRlcikKK3sKKyAgICBhdXRvIGNvbXB1dGUg
PSBbJl0gKGF1dG8gY29uc3RyYWludHNGb3JXaWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNl
ZFdpZHRoKSB7CisgICAgICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkK
KyAgICAgICAgICAgIHJldHVybiBmbG9hdGluZ0NvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRC
b3gsIGNvbnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNlZFdpZHRoLCB7IH0gfSk7CisKKyAgICAgICAg
aWYgKGxheW91dEJveC5pc0luRmxvdygpKQorICAgICAgICAgICAgcmV0dXJuIGluRmxvd0NvbnRl
bnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNlZFdp
ZHRoLCB7IH0gfSk7CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBDb250ZW50V2lkdGhBbmRNYXJnaW4geyB9OworICAgIH07CisKKyAgICBhdXRvIGhvcml6
b250YWxDb25zdHJhaW50c0ZvcldpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzOworICAgIGlm
IChsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSAmJiBhdmFpbGFibGVX
aWR0aEZsb2F0QXZvaWRlcikgeworICAgICAgICAvLyBXaGlsZSB0aGUgbm9uLWF1dG8gd2lkdGgg
dmFsdWVzIHNob3VsZCBhbGwgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgY29udGFpbmluZyBibG9j
aydzIHdpZHRoLCB3aGVuCisgICAgICAgIC8vIHRoZSB3aWR0aCBpcyBhdXRvIHRoZSBhdmFpbGFi
bGUgaG9yaXpvbnRhbCBzcGFjZSBpcyBzaHJ1bmsgYnkgbmVpZ2hib3JpbmcgZmxvYXRzLgorICAg
ICAgICBob3Jpem9udGFsQ29uc3RyYWludHNGb3JXaWR0aC5sb2dpY2FsV2lkdGggPSAqYXZhaWxh
YmxlV2lkdGhGbG9hdEF2b2lkZXI7CisgICAgfQorICAgIGF1dG8gY29udGVudFdpZHRoQW5kTWFy
Z2luID0gY29tcHV0ZShob3Jpem9udGFsQ29uc3RyYWludHNGb3JXaWR0aCwgeyB9KTsKKyAgICBh
dXRvIGF2YWlsYWJsZVdpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsK
KyAgICBpZiAoYXV0byBtYXhXaWR0aCA9IGNvbXB1dGVkTWF4V2lkdGgobGF5b3V0Qm94LCBhdmFp
bGFibGVXaWR0aCkpIHsKKyAgICAgICAgYXV0byBtYXhXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUo
aG9yaXpvbnRhbENvbnN0cmFpbnRzLCBtYXhXaWR0aCk7CisgICAgICAgIGlmIChjb250ZW50V2lk
dGhBbmRNYXJnaW4uY29udGVudFdpZHRoID4gbWF4V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRo
KQorICAgICAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWF4V2lkdGhBbmRNYXJnaW47
CisgICAgfQorCisgICAgYXV0byBtaW5XaWR0aCA9IGNvbXB1dGVkTWluV2lkdGgobGF5b3V0Qm94
LCBhdmFpbGFibGVXaWR0aCkudmFsdWVPcigwKTsKKyAgICBhdXRvIG1pbldpZHRoQW5kTWFyZ2lu
ID0gY29tcHV0ZShob3Jpem9udGFsQ29uc3RyYWludHMsIG1pbldpZHRoKTsKKyAgICBpZiAoY29u
dGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbldpZHRoQW5kTWFyZ2luLmNvbnRl
bnRXaWR0aCkKKyAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWluV2lkdGhBbmRNYXJn
aW47CisgICAgcmV0dXJuIGNvbnRlbnRXaWR0aEFuZE1hcmdpbjsKK30KKworSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6aW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyhjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBhdXRvIGZpeGVkTWFyZ2luQm9y
ZGVyQW5kUGFkZGluZyA9IFsmXShhdXRvJiBsYXlvdXRCb3gpIHsKKyAgICAgICAgYXV0byYgc3R5
bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICAgICAgcmV0dXJuIGZpeGVkVmFsdWUoc3R5bGUu
bWFyZ2luU3RhcnQoKSkudmFsdWVPcigwKQorICAgICAgICAgICAgKyBMYXlvdXRVbml0IHsgc3R5
bGUuYm9yZGVyTGVmdFdpZHRoKCkgfQorICAgICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLnBh
ZGRpbmdMZWZ0KCkpLnZhbHVlT3IoMCkKKyAgICAgICAgICAgICsgZml4ZWRWYWx1ZShzdHlsZS5w
YWRkaW5nUmlnaHQoKSkudmFsdWVPcigwKQorICAgICAgICAgICAgKyBMYXlvdXRVbml0IHsgc3R5
bGUuYm9yZGVyUmlnaHRXaWR0aCgpIH0KKyAgICAgICAgICAgICsgZml4ZWRWYWx1ZShzdHlsZS5t
YXJnaW5FbmQoKSkudmFsdWVPcigwKTsKKyAgICB9OworCisgICAgYXV0byBjb21wdXRlZEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgPSBbJl0oKSAtPiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
IHsKKyAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2Fs
V2lkdGgoKTsKKyAgICAgICAgLy8gTWluaW11bS9tYXhpbXVtIHdpZHRoIGNhbid0IGJlIGRlcGVu
ZGluZyBvbiB0aGUgY29udGFpbmluZyBibG9jaydzIHdpZHRoLgorICAgICAgICBhdXRvIG5lZWRz
UmVzb2x2ZWRDb250YWluaW5nQmxvY2tXaWR0aCA9IGxvZ2ljYWxXaWR0aC5pc0NhbGN1bGF0ZWQo
KSB8fCBsb2dpY2FsV2lkdGguaXNQZXJjZW50KCkgfHwgbG9naWNhbFdpZHRoLmlzUmVsYXRpdmUo
KTsKKyAgICAgICAgaWYgKG5lZWRzUmVzb2x2ZWRDb250YWluaW5nQmxvY2tXaWR0aCkKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBmaXhlZFZhbHVl
KGxvZ2ljYWxXaWR0aCkpCisgICAgICAgICAgICByZXR1cm4geyAqd2lkdGgsICp3aWR0aCB9Owor
CisgICAgICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKSB7CisgICAgICAgICAgICBh
dXRvJiByZXBsYWNlZEJveCA9IGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpOworICAg
ICAgICAgICAgaWYgKHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIHJlcGxhY2VkV2lkdGggPSByZXBsYWNlZEJveC5pbnRyaW5zaWNXaWR0aCgp
OworICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcGxhY2VkV2lkdGgsIHJlcGxhY2VkV2lkdGgg
fTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIWlzPENvbnRhaW5lckJveD4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8Q29u
dGFpbmVyQm94PihsYXlvdXRCb3gpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBpZiAobGF5b3V0Qm94LmlzU2l6ZUNvbnRhaW5t
ZW50Qm94KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBpbnRyaW5zaWMgc2l6ZXMgb2YgdGhlIHNp
emUgY29udGFpbm1lbnQgYm94IGFyZSBkZXRlcm1pbmVkIGFzIGlmIHRoZSBlbGVtZW50IGhhZCBu
byBjb250ZW50LAorICAgICAgICAgICAgLy8gZm9sbG93aW5nIHRoZSBzYW1lIGxvZ2ljIGFzIHdo
ZW4gc2l6aW5nIGFzIGlmIGVtcHR5LgorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgp
KSB7CisgICAgICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBMYXlvdXRD
b250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChkb3duY2FzdDxDb250YWluZXJCb3g+KGxh
eW91dEJveCksIGxheW91dFN0YXRlKCkpLT5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMoKTsKKyAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNNaW5Db250ZW50KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtLCBp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0gfTsKKyAgICAgICAgICAgIGlmIChsb2dp
Y2FsV2lkdGguaXNNYXhDb250ZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtLCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1h
eGltdW0gfTsKKyAgICAgICAgICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOwor
ICAgICAgICB9CisKKyAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gSW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH07CisgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0
ZSA9IGxheW91dFN0YXRlKCkuZm9ybWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCk7CisgICAg
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxCb3g+KGRvd25jYXN0PENvbnRh
aW5lckJveD4obGF5b3V0Qm94KSkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC5pc091dE9mRmxv
d1Bvc2l0aW9uZWQoKSB8fCAoY2hpbGQuaXNGbG9hdEF2b2lkZXIoKSAmJiAhY2hpbGQuaGFzRmxv
YXRDbGVhcigpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8g
Y2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0YXRlLmludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHNGb3JCb3goY2hpbGQpOworICAgICAgICAgICAgQVNTRVJUKGNoaWxk
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk7CisKKyAgICAgICAgICAgIGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMubWluaW11bSA9IHN0ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMu
bWluaW11bSwgY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLT5taW5pbXVtKTsKKyAgICAg
ICAgICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSA9IHN0ZDo6bWF4KGludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSwgY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzLT5tYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50cmluc2ljV2lkdGhD
b25zdHJhaW50czsKKyAgICB9OworICAgIC8vIEZJWE1FIENoZWNrIGZvciBib3gtc2l6aW5nOiBi
b3JkZXItYm94OworICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGNvbnN0cmFp
bkJ5TWluTWF4V2lkdGgobGF5b3V0Qm94LCBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMoKSk7CisgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5leHBhbmQoZml4ZWRNYXJnaW5C
b3JkZXJBbmRQYWRkaW5nKGxheW91dEJveCkpOworICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzOworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRy
eS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyMjY2ZTM0OGE5NjMwOTU5NDllYjg3
NjM5NDQxM2E0MWRhNGUzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAg
LTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nR2VvbWV0cnku
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKKy8vIFRoaXMg
Y2xhc3MgaW1wbGVtZW50cyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nIGZvciBib3hlcyBwYXJ0aWNp
cGF0aW5nIGluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LgorY2xhc3MgQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKK3B1YmxpYzoKKyAgICBC
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Jik7CisK
KyAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4o
Y29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRl
blZlcnRpY2FsVmFsdWVzJik7CisgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd0NvbnRl
bnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOworCisgICAgUG9pbnQgc3RhdGlj
UG9zaXRpb24oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3Qg
VmVydGljYWxDb25zdHJhaW50cyYpIGNvbnN0OworICAgIExheW91dFVuaXQgc3RhdGljVmVydGlj
YWxQb3NpdGlvbihjb25zdCBCb3gmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJikgY29uc3Q7
CisgICAgTGF5b3V0VW5pdCBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiwgY29u
c3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CisKKyAgICBJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgQm94Jik7CisKKyAgICBD
b250ZW50V2lkdGhBbmRNYXJnaW4gY29tcHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3Qg
Qm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4g
YXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXIpOworCitwcml2YXRlOgorICAgIENvbnRlbnRIZWln
aHRBbmRNYXJnaW4gaW5GbG93Tm9uUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0
IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcyYpOworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbkZsb3dOb25SZXBsYWNl
ZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOworICAgIENvbnRlbnRX
aWR0aEFuZE1hcmdpbiBpbkZsb3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBS
ZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRk
ZW5Ib3Jpem9udGFsVmFsdWVzJik7CisKKyAgICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ+KEZvcm1hdHRpbmdHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0K
K307CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z1F1aXJrcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmExOTFhOTMyNTEyZjljZTQzY2E5NTg4ODAzZWIxNWI2
ZDRmMDBiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcApAQCAtMCwwICsxLDEz
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCbG9ja0Zv
cm1hdHRpbmdRdWlya3MuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQorCisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJCbG9j
a0Zvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUgIkxh
eW91dEJveEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCisjaW5j
bHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgorI2luY2x1ZGUgIkxheW91dFN0
YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitzdGF0
aWMgYm9vbCBpc1F1aXJrQ29udGFpbmVyKGNvbnN0IEJveCYgbGF5b3V0Qm94KQoreworICAgIHJl
dHVybiBsYXlvdXRCb3guaXNCb2R5Qm94KCkgfHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSB8
fCBsYXlvdXRCb3guaXNUYWJsZUNlbGwoKTsKK30KKworQmxvY2tGb3JtYXR0aW5nUXVpcmtzOjpC
bG9ja0Zvcm1hdHRpbmdRdWlya3MoY29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYgYmxvY2tG
b3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IEZvcm1hdHRpbmdRdWlya3MoYmxvY2tGb3JtYXR0aW5n
Q29udGV4dCkKK3sKKyAgICBBU1NFUlQobGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUoKSk7Cit9
CisKK3N0YXRpYyBib29sIG5lZWRzU3RyZXRjaGluZyhjb25zdCBCb3gmIGxheW91dEJveCkKK3sK
KyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOworICAgIC8vIEluIHF1aXJrcyBtb2Rl
LCBpbi1mbG93IGJvZHkgYW5kIGh0bWwgc3RyZXRjaCB0byB0aGUgaW5pdGlhbCBjb250YWluaW5n
IGJsb2NrIChoZWlnaHQ6IGF1dG8gb25seSkuCisgICAgaWYgKCFsYXlvdXRCb3guaXNEb2N1bWVu
dEJveCgpICYmICFsYXlvdXRCb3guaXNCb2R5Qm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gbGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygpOwor
fQorCitPcHRpb25hbDxMYXlvdXRVbml0PiBCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OnN0cmV0Y2hl
ZEluRmxvd0hlaWdodElmQXBwbGljYWJsZShjb25zdCBCb3gmIGxheW91dEJveCwgQ29udGVudEhl
aWdodEFuZE1hcmdpbiBjb250ZW50SGVpZ2h0QW5kTWFyZ2luKSBjb25zdAoreworICAgIGlmICgh
bmVlZHNTdHJldGNoaW5nKGxheW91dEJveCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0
byYgZm9ybWF0dGluZ0NvbnRleHQgPSBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Pih0
aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICBhdXRvIG5vbkNvbGxhcHNlZFZlcnRpY2Fs
TWFyZ2luID0gY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYmVmb3Jl
ICsgY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXI7CisKKyAg
ICBpZiAobGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgeworICAgICAgICAvLyBMZXQncyBzdHJl
dGNoIHRoZSBpbmZsb3cgZG9jdW1lbnQgYm94KDxodG1sPikgdG8gdGhlIGhlaWdodCBvZiB0aGUg
aW5pdGlhbCBjb250YWluaW5nIGJsb2NrICh2aWV3KS4KKyAgICAgICAgYXV0byBkb2N1bWVudEJv
eENvbnRlbnRIZWlnaHQgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRC
b3guaW5pdGlhbENvbnRhaW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVh
c29uOjpEb2N1bWVudEJveFN0cmV0Y2hlc1RvVmlld3BvcnRRdWlyaykuY29udGVudEJveEhlaWdo
dCgpOworICAgICAgICAvLyBEb2N1bWVudCBib3gncyBvd24gdmVydGljYWwgbWFyZ2luL2JvcmRl
ci9wYWRkaW5nIHZhbHVlcyBhbHdheXMgc2hyaW5rIHRoZSBjb250ZW50IGhlaWdodC4KKyAgICAg
ICAgYXV0byYgZG9jdW1lbnRCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5
Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgIGRvY3VtZW50Qm94Q29udGVudEhlaWdodCAtPSBu
b25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbiArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGljYWxC
b3JkZXIoKSArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigw
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVu
dEhlaWdodCwgIGRvY3VtZW50Qm94Q29udGVudEhlaWdodCk7CisgICAgfQorCisgICAgLy8gSGVy
ZSBpcyB0aGUgcXVpcmt5IHBhcnQgZm9yIGJvZHkgYm94IHdoZW4gaXQgc3RyZXRjaGVzIGFsbCB0
aGUgd2F5IHRvIHRoZSBJQ0IgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBib3ggZG9lcyBub3QgKGUu
Zy4gb3V0LW9mLWZsb3cgcG9zaXRpb25lZCkuCisgICAgQVNTRVJUKGxheW91dEJveC5pc0JvZHlC
b3goKSk7CisgICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9jayA9IGxheW91dEJveC5pbml0
aWFsQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9ja0dl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goaW5pdGlhbENvbnRhaW5p
bmdCbG9jaywgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6Qm9keVN0cmV0Y2hlc1Rv
Vmlld3BvcnRRdWlyayk7CisgICAgLy8gU3RhcnQgdGhlIGNvbnRlbnQgaGVpZ2h0IHdpdGggdGhl
IElDQi4KKyAgICBhdXRvIGJvZHlCb3hDb250ZW50SGVpZ2h0ID0gaW5pdGlhbENvbnRhaW5pbmdC
bG9ja0dlb21ldHJ5LmNvbnRlbnRCb3hIZWlnaHQoKTsKKyAgICAvLyBCb2R5IGJveCdzIG93biBi
b3JkZXIgYW5kIHBhZGRpbmcgc2hyaW5rIHRoZSBjb250ZW50IGhlaWdodC4KKyAgICBhdXRvJiBi
b2R5Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRC
b3gpOworICAgIGJvZHlCb3hDb250ZW50SGVpZ2h0IC09IGJvZHlCb3hHZW9tZXRyeS52ZXJ0aWNh
bEJvcmRlcigpICsgYm9keUJveEdlb21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7
CisgICAgLy8gQm9keSBib3ggbmV2ZXIgY29sbGFwc2VzIGl0cyB2ZXJ0aWNhbCBtYXJnaW5zIHdp
dGggdGhlIGRvY3VtZW50IGJveCBidXQgaXQgbWlnaHQgY29sbGFwc2UgaXRzIG1hcmdpbiB3aXRo
IGl0cyBkZXNjZW5kYW50cy4KKyAgICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9IGNvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luOworICAgIGF1dG8gbWFyZ2luQ29sbGFw
c2UgPSBCbG9ja01hcmdpbkNvbGxhcHNlIHsgZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUo
KSwgZm9ybWF0dGluZ0NvbnRleHQuZm9ybWF0dGluZ1N0YXRlKCkgfTsKKyAgICBhdXRvIGNvbGxh
cHNlZE1hcmdpbiA9IG1hcmdpbkNvbGxhcHNlLmNvbGxhcHNlZFZlcnRpY2FsVmFsdWVzKGxheW91
dEJveCwgbm9uQ29sbGFwc2VkTWFyZ2luKS5jb2xsYXBzZWRWYWx1ZXM7CisgICAgYXV0byB1c2Vk
VmVydGljYWxNYXJnaW4gPSBjb2xsYXBzZWRNYXJnaW4uYmVmb3JlLnZhbHVlT3Iobm9uQ29sbGFw
c2VkTWFyZ2luLmJlZm9yZSk7CisgICAgdXNlZFZlcnRpY2FsTWFyZ2luICs9IGNvbGxhcHNlZE1h
cmdpbi5pc0NvbGxhcHNlZFRocm91Z2ggPyBub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIgOiBjb2xs
YXBzZWRNYXJnaW4uYWZ0ZXIudmFsdWVPcihub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIpOworICAg
IGJvZHlCb3hDb250ZW50SGVpZ2h0IC09IHVzZWRWZXJ0aWNhbE1hcmdpbjsKKyAgICAvLyBEb2N1
bWVudCBib3gncyBwYWRkaW5nIGFuZCBib3JkZXIgYWxzbyBzaHJpbmsgdGhlIGJvZHkgYm94J3Mg
Y29udGVudCBoZWlnaHQuCisgICAgYXV0byYgZG9jdW1lbnRCb3ggPSBsYXlvdXRCb3gucGFyZW50
KCk7CisgICAgYXV0byYgZG9jdW1lbnRCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdl
b21ldHJ5Rm9yQm94KGRvY3VtZW50Qm94LCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29u
OjpCb2R5U3RyZXRjaGVzVG9WaWV3cG9ydFF1aXJrKTsKKyAgICBib2R5Qm94Q29udGVudEhlaWdo
dCAtPSBkb2N1bWVudEJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBkb2N1bWVudEJveEdl
b21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7CisgICAgLy8gSG93ZXZlciB0aGUg
bm9uLWluLWZsb3cgZG9jdW1lbnQgYm94J3MgdmVydGljYWwgbWFyZ2lucyBhcmUgaWdub3JlZC4g
VGhleSBkb24ndCBhZmZlY3QgdGhlIGJvZHkgYm94J3MgY29udGVudCBoZWlnaHQuCisgICAgaWYg
KGRvY3VtZW50Qm94LmlzSW5GbG93KCkpIHsKKyAgICAgICAgYXV0byBmb3JtYXR0aW5nR2VvbWV0
cnkgPSBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSB7IGZvcm1hdHRpbmdDb250ZXh0IH07CisgICAg
ICAgIGF1dG8gcHJlY29tcHV0ZURvY3VtZW50Qm94VmVydGljYWxNYXJnaW4gPSBmb3JtYXR0aW5n
R2VvbWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihkb2N1bWVudEJveCwgZm9ybWF0dGluZ0dl
b21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChpbml0aWFsQ29udGFpbmluZ0Jsb2Nr
LCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpCb2R5U3RyZXRjaGVzVG9WaWV3cG9y
dFF1aXJrKS5ob3Jpem9udGFsKTsKKyAgICAgICAgYm9keUJveENvbnRlbnRIZWlnaHQgLT0gcHJl
Y29tcHV0ZURvY3VtZW50Qm94VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCkgKyBwcmVj
b21wdXRlRG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApOworICAgIH0K
KyAgICByZXR1cm4gc3RkOjptYXgoY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0
LCAgYm9keUJveENvbnRlbnRIZWlnaHQpOworfQorCitib29sIEJsb2NrRm9ybWF0dGluZ1F1aXJr
czo6c2hvdWxkSWdub3JlQ29sbGFwc2VkUXVpcmtNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gp
Cit7CisgICAgcmV0dXJuIGlzUXVpcmtDb250YWluZXIobGF5b3V0Qm94KTsKK30KKworZW51bSBj
bGFzcyBWZXJ0aWNhbE1hcmdpbiB7IEJlZm9yZSwgQWZ0ZXIgfTsKK3N0YXRpYyBpbmxpbmUgYm9v
bCBoYXNRdWlya01hcmdpblRvQ29sbGFwc2UoY29uc3QgQm94JiBsYXlvdXRCb3gsIFZlcnRpY2Fs
TWFyZ2luIHZlcnRpY2FsTWFyZ2luKQoreworICAgIGlmICghbGF5b3V0Qm94LmlzSW5GbG93KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHls
ZSgpOworICAgIHJldHVybiAodmVydGljYWxNYXJnaW4gPT0gVmVydGljYWxNYXJnaW46OkJlZm9y
ZSAmJiBzdHlsZS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpKSB8fCAodmVydGljYWxNYXJnaW4gPT0g
VmVydGljYWxNYXJnaW46OkFmdGVyICYmIHN0eWxlLmhhc01hcmdpbkFmdGVyUXVpcmsoKSk7Cit9
CisKK2Jvb2wgQmxvY2tGb3JtYXR0aW5nUXVpcmtzOjpzaG91bGRDb2xsYXBzZU1hcmdpbkJlZm9y
ZVdpdGhQYXJlbnRNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpCit7CisgICAgcmV0
dXJuIGhhc1F1aXJrTWFyZ2luVG9Db2xsYXBzZShsYXlvdXRCb3gsIFZlcnRpY2FsTWFyZ2luOjpC
ZWZvcmUpICYmIGlzUXVpcmtDb250YWluZXIobGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsK
K30KKworYm9vbCBCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OnNob3VsZENvbGxhcHNlTWFyZ2luQWZ0
ZXJXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpCit7CisgICAgcmV0
dXJuIGhhc1F1aXJrTWFyZ2luVG9Db2xsYXBzZShsYXlvdXRCb3gsIFZlcnRpY2FsTWFyZ2luOjpB
ZnRlcikgJiYgaXNRdWlya0NvbnRhaW5lcihsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOwor
fQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVp
cmtzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2NmYmMyYzY1OTk1ZDUyNTQ2OGJhMWE1NjkyYjA5NzZiYjViYTJm
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgKQEAgLTAsMCArMSw1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nUXVpcmtzLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitjbGFzcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OworCitjbGFzcyBCbG9ja0Zvcm1hdHRpbmdRdWlya3MgOiBwdWJsaWMgRm9ybWF0dGluZ1F1aXJr
cyB7CitwdWJsaWM6CisgICAgQmxvY2tGb3JtYXR0aW5nUXVpcmtzKGNvbnN0IEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQmKTsKKworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHN0cmV0Y2hlZEluRmxv
d0hlaWdodElmQXBwbGljYWJsZShjb25zdCBCb3gmLCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luKSBj
b25zdDsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVDb2xsYXBzZWRRdWlya01hcmdpbihj
b25zdCBCb3gmKTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRDb2xsYXBzZU1hcmdpbkJlZm9yZVdp
dGhQYXJlbnRNYXJnaW5CZWZvcmUoY29uc3QgQm94Jik7CisgICAgc3RhdGljIGJvb2wgc2hvdWxk
Q29sbGFwc2VNYXJnaW5BZnRlcldpdGhQYXJlbnRNYXJnaW5BZnRlcihjb25zdCBCb3gmKTsKK307
CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja01hcmdpbkNvbGxhcHNl
LmNwcAppbmRleCBmMWZkNWJiZTIyYTFhYjkyZTg1MWQ4NTBkZTBmNGE2YWQxODcxMGRiLi5jNjc1
MmY1YjgwNjQ1YTliY2ViNjAxMzY5ZDA0ZWE3NmJhMjI2NDJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrTWFyZ2luQ29sbGFw
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxv
Y2svQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKQEAgLTI0LDEwICsyNCwxMSBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiQmxvY2tNYXJnaW5Db2xsYXBzZS5oIgogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCIKICNp
bmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUu
aCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKQEAgLTgxLDE2ICs4MiwyMyBA
QCBzdGF0aWMgYm9vbCBlc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQm94
JiBsYXlvdXRCb3gpCiAgICAgcmV0dXJuIGxheW91dEJveC5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0
dGluZ0NvbnRleHQoKTsKIH0KIAotYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5D
b2xsYXBzZTo6aGFzQ2xlYXJhbmNlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAorQmxvY2tN
YXJnaW5Db2xsYXBzZTo6QmxvY2tNYXJnaW5Db2xsYXBzZShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIGNvbnN0IEJsb2NrRm9ybWF0dGluZ1N0YXRlJiBibG9ja0Zvcm1hdHRpbmdTdGF0
ZSkKKyAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUpCisgICAgLCBtX2Jsb2NrRm9ybWF0
dGluZ1N0YXRlKGJsb2NrRm9ybWF0dGluZ1N0YXRlKQorICAgICwgbV9pblF1aXJrc01vZGUobGF5
b3V0U3RhdGUuaW5RdWlya3NNb2RlKCkpCit7Cit9CisKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBz
ZTo6aGFzQ2xlYXJhbmNlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogewogICAgIGlmICgh
bGF5b3V0Qm94Lmhhc0Zsb2F0Q2xlYXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8v
IEZJWE1FOiBwcmVjb21wdXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JGb3JtYXR0aW5nUm9vdCBsb2dp
YyBlbmRzIHVwIGNhbGxpbmcgaW50byB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIGxheW91dEJveCAo
Zmlyc3QgaW5mbG93IGNoaWxkKSBoYXMKICAgICAvLyBub3QgYmVlbiBsYWlkIG91dC4KLSAgICBy
ZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5mb3JtYXR0aW5nU3RhdGUoKS5oYXNDbGVhcmFuY2Uo
bGF5b3V0Qm94KTsKKyAgICByZXR1cm4gZm9ybWF0dGluZ1N0YXRlKCkuaGFzQ2xlYXJhbmNlKGxh
eW91dEJveCk7CiB9CiAKLWJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFw
c2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcihjb25zdCBCb3gm
IGxheW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3Jl
Q29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkFmdGVyKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25z
dAogewogICAgIC8vIDEuIFRoaXMgaXMgdGhlIGxhc3QgaW4tZmxvdyBjaGlsZCBhbmQgaXRzIG1h
cmdpbnMgY29sbGFwc2UgdGhyb3VnaCBhbmQgdGhlIG1hcmdpbiBhZnRlciBjb2xsYXBzZXMgd2l0
aCBwYXJlbnQncyBtYXJnaW4gYWZ0ZXIgb3IKICAgICAvLyAyLiBUaGlzIGJveCdzIG1hcmdpbiBh
ZnRlciBjb2xsYXBzZXMgd2l0aCB0aGUgbmV4dCBzaWJsaW5nJ3MgbWFyZ2luIGJlZm9yZSBhbmQg
dGhhdCBzaWJsaW5nIGNvbGxhcHNlcyB0aHJvdWdoIGFuZApAQCAtMTA4LDEzICsxMTYsMTMgQEAg
Ym9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3Jl
Q29sbGFwc2VzV2l0aFBhcmVudE1hcmcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNl
c1dpdGhQYXJlbnRNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Citib29s
IEJsb2NrTWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJn
aW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAgICAgLy8gVGhlIGZpcnN0
IGluZmxvdyBjaGlsZCBjb3VsZCBwcm9wYWdhdGUgaXRzIHRvcCBtYXJnaW4gdG8gcGFyZW50Lgog
ICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9ib3guaHRtbCNjb2xsYXBzaW5nLW1h
cmdpbnMKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKIAotICAgIGlm
IChmb3JtYXR0aW5nQ29udGV4dCgpLnF1aXJrcygpLnNob3VsZENvbGxhcHNlTWFyZ2luQmVmb3Jl
V2l0aFBhcmVudE1hcmdpbkJlZm9yZShsYXlvdXRCb3gpKQorICAgIGlmIChpblF1aXJrc01vZGUo
KSAmJiBCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OnNob3VsZENvbGxhcHNlTWFyZ2luQmVmb3JlV2l0
aFBhcmVudE1hcmdpbkJlZm9yZShsYXlvdXRCb3gpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIC8vIE1hcmdpbnMgYmV0d2VlbiBhIGZsb2F0ZWQgYm94IGFuZCBhbnkgb3RoZXIgYm94IGRv
IG5vdCBjb2xsYXBzZS4KQEAgLTE1MSw3ICsxNTksNyBAQCBib29sIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUGFyZW50TWFy
ZwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1h
cmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFy
Z2luQWZ0ZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Citib29sIEJsb2NrTWFyZ2luQ29s
bGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRl
cihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94Lmlz
QmxvY2tMZXZlbEJveCgpKTsKIApAQCAtMTgwLDcgKzE4OCw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2
aW91c1NpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhGaXJzdEluRmxvd0No
aWxkTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAorYm9vbCBCbG9ja01h
cmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoRmlyc3RJbkZsb3dDaGlsZE1h
cmdpbkJlZm9yZShjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5
b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKICAgICAvLyBNYXJnaW5zIG9mIGVsZW1lbnRzIHRo
YXQgZXN0YWJsaXNoIG5ldyBibG9jayBmb3JtYXR0aW5nIGNvbnRleHRzIGRvIG5vdCBjb2xsYXBz
ZSB3aXRoIHRoZWlyIGluLWZsb3cgY2hpbGRyZW4uCkBAIC0yMTQsNyArMjIyLDcgQEAgYm9vbCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFw
c2VzV2l0aEZpcnN0SW5GbG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoU2li
bGluZ01hcmdpbkJlZm9yZVdpdGhDbGVhcmFuY2UoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0
Citib29sIEJsb2NrTWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFNpYmxp
bmdNYXJnaW5CZWZvcmVXaXRoQ2xlYXJhbmNlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAog
ewogICAgIC8vIElmIHRoZSB0b3AgYW5kIGJvdHRvbSBtYXJnaW5zIG9mIGFuIGVsZW1lbnQgd2l0
aCBjbGVhcmFuY2UgYXJlIGFkam9pbmluZywgaXRzIG1hcmdpbnMgY29sbGFwc2Ugd2l0aCB0aGUg
YWRqb2luaW5nIG1hcmdpbnMKICAgICAvLyBvZiBmb2xsb3dpbmcgc2libGluZ3MgYnV0IHRoYXQg
cmVzdWx0aW5nIG1hcmdpbiBkb2VzIG5vdCBjb2xsYXBzZSB3aXRoIHRoZSBib3R0b20gbWFyZ2lu
IG9mIHRoZSBwYXJlbnQgYmxvY2suCkBAIC0yMzAsNyArMjM4LDcgQEAgYm9vbCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoU2li
bGluZ01hcmcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdp
bkJlZm9yZShjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xs
YXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGNvbnN0IEJv
eCYgbGF5b3V0Qm94KSBjb25zdAogewogICAgIC8vIDEuIFRoaXMgaXMgdGhlIGZpcnN0IGluLWZs
b3cgY2hpbGQgYW5kIGl0cyBtYXJnaW5zIGNvbGxhcHNlIHRocm91Z2ggYW5kIHRoZSBtYXJnaW4g
YmVmb3JlIGNvbGxhcHNlcyB3aXRoIHBhcmVudCdzIG1hcmdpbiBiZWZvcmUgb3IKICAgICAvLyAy
LiBUaGlzIGJveCdzIG1hcmdpbiBiZWZvcmUgY29sbGFwc2VzIHdpdGggdGhlIHByZXZpb3VzIHNp
YmxpbmcncyBtYXJnaW4gYWZ0ZXIgYW5kIHRoYXQgc2libGluZyBjb2xsYXBzZXMgdGhyb3VnaCBh
bmQKQEAgLTI0OCwxMSArMjU2LDExIEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFy
Z2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxh
cHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcihjb25zdCBCb3gm
IGxheW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJD
b2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSk7CiAKLSAgICBpZiAo
Zm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5zaG91bGRDb2xsYXBzZU1hcmdpbkFmdGVyV2l0
aFBhcmVudE1hcmdpbkFmdGVyKGxheW91dEJveCkpCisgICAgaWYgKGluUXVpcmtzTW9kZSgpICYm
IEJsb2NrRm9ybWF0dGluZ1F1aXJrczo6c2hvdWxkQ29sbGFwc2VNYXJnaW5BZnRlcldpdGhQYXJl
bnRNYXJnaW5BZnRlcihsYXlvdXRCb3gpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8v
IE1hcmdpbnMgYmV0d2VlbiBhIGZsb2F0ZWQgYm94IGFuZCBhbnkgb3RoZXIgYm94IGRvIG5vdCBj
b2xsYXBzZS4KQEAgLTMwMCw3ICszMDgsNyBAQCBib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaQogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNv
bGxhcHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhMYXN0SW5GbG93Q2hpbGRNYXJnaW5BZnRl
cihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBzZTo6
bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0NoaWxkTWFyZ2luQWZ0ZXIoY29uc3Qg
Qm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Jsb2NrTGV2
ZWxCb3goKSk7CiAKQEAgLTM0MywxMyArMzUxLDE0IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aExhc3RJbkZsb3dD
CiAKICAgICAvLyBUaGlzIGlzIGEgcXVpcmsgYmVoYXZpb3I6IFdoZW4gdGhlIG1hcmdpbiBhZnRl
ciBvZiB0aGUgbGFzdCBpbmZsb3cgY2hpbGQgKG9yIGEgcHJldmlvdXMgc2libGluZyB3aXRoIGNv
bGxhcHNlZCB0aHJvdWdoIG1hcmdpbnMpCiAgICAgLy8gY29sbGFwc2VzIHdpdGggYSBxdWlyayBw
YXJlbnQncyB0aGUgbWFyZ2luIGJlZm9yZSwgdGhlbiB0aGUgc2FtZSBtYXJnaW4gYWZ0ZXIgZG9l
cyBub3QgY29sbGFwc2VzIHdpdGggdGhlIHBhcmVudCdzIG1hcmdpbiBhZnRlci4KLSAgICBpZiAo
Zm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5zaG91bGRJZ25vcmVDb2xsYXBzZWRRdWlya01h
cmdpbihsYXlvdXRCb3gpICYmIG1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkJl
Zm9yZShsYXN0SW5GbG93Q2hpbGQpKQorICAgIGF1dG8gc2hvdWxkSWdub3JlQ29sbGFwc2VkTWFy
Z2luID0gaW5RdWlya3NNb2RlKCkgJiYgQmxvY2tGb3JtYXR0aW5nUXVpcmtzOjpzaG91bGRJZ25v
cmVDb2xsYXBzZWRRdWlya01hcmdpbihsYXlvdXRCb3gpOworICAgIGlmIChzaG91bGRJZ25vcmVD
b2xsYXBzZWRNYXJnaW4gJiYgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVm
b3JlKGxhc3RJbkZsb3dDaGlsZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNl
OjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhOZXh0U2libGluZ01hcmdpbkJlZm9yZShjb25zdCBC
b3gmIGxheW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0
ZXJDb2xsYXBzZXNXaXRoTmV4dFNpYmxpbmdNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRC
b3gpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSk7CiAK
QEAgLTM1OSw3ICszNjgsNyBAQCBib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNv
bGxhcHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhOZXh0U2libGluZwogICAgIHJldHVybiBt
YXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFyZ2luQWZ0ZXIoKmxheW91
dEJveC5uZXh0SW5GbG93U2libGluZygpKTsKIH0KIAotYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luc0NvbGxhcHNlVGhyb3VnaChjb25zdCBCb3gmIGxh
eW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBzZTo6bWFyZ2luc0NvbGxhcHNl
VGhyb3VnaChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0
Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKIApAQCAtNDMxLDcgKzQ0MCw3IEBAIGJvb2wgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbnNDb2xsYXBzZVRocm91Z2go
Y29uc3QgQm94JiBsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVVzZWRWZXJ0aWNhbE1hcmdpbjo6
UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpN
YXJnaW5Db2xsYXBzZTo6Y29tcHV0ZWRQb3NpdGl2ZUFuZE5lZ2F0aXZlTWFyZ2luKFVzZWRWZXJ0
aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBhLCBVc2VkVmVydGlj
YWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgYikgY29uc3QKK1VzZWRW
ZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBCbG9ja01hcmdp
bkNvbGxhcHNlOjpjb21wdXRlZFBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW4oVXNlZFZlcnRpY2Fs
TWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIGEsIFVzZWRWZXJ0aWNhbE1h
cmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBiKSBjb25zdAogewogICAgIFVz
ZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBjb21wdXRl
ZFZhbHVlczsKICAgICBpZiAoYS5wb3NpdGl2ZSAmJiBiLnBvc2l0aXZlKQpAQCAtNDU0LDcgKzQ2
Myw3IEBAIFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVl
cyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnCiAgICAgcmV0dXJuIGNvbXB1dGVkVmFsdWVz
OwogfQogCi1PcHRpb25hbDxMYXlvdXRVbml0PiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJn
aW5Db2xsYXBzZTo6bWFyZ2luVmFsdWUoVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5l
Z2F0aXZlUGFpcjo6VmFsdWVzIG1hcmdpblZhbHVlcykgY29uc3QKK09wdGlvbmFsPExheW91dFVu
aXQ+IEJsb2NrTWFyZ2luQ29sbGFwc2U6Om1hcmdpblZhbHVlKFVzZWRWZXJ0aWNhbE1hcmdpbjo6
UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBtYXJnaW5WYWx1ZXMpIGNvbnN0CiB7CiAg
ICAgLy8gV2hlbiB0d28gb3IgbW9yZSBtYXJnaW5zIGNvbGxhcHNlLCB0aGUgcmVzdWx0aW5nIG1h
cmdpbiB3aWR0aCBpcyB0aGUgbWF4aW11bSBvZiB0aGUgY29sbGFwc2luZyBtYXJnaW5zJyB3aWR0
aHMuCiAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgbmVnYXRpdmUgbWFyZ2lucywgdGhlIG1heGltdW0g
b2YgdGhlIGFic29sdXRlIHZhbHVlcyBvZiB0aGUgbmVnYXRpdmUgYWRqb2luaW5nIG1hcmdpbnMg
aXMgZGVkdWN0ZWQgZnJvbSB0aGUgbWF4aW11bQpAQCAtNDY4LDU4ICs0NzcsMTYgQEAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1h
cmdpblZhbHVlKFVzZWRWZXIKICAgICByZXR1cm4gKm1hcmdpblZhbHVlcy5wb3NpdGl2ZSArICpt
YXJnaW5WYWx1ZXMubmVnYXRpdmU7CiB9CiAKLXZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
TWFyZ2luQ29sbGFwc2U6OnVwZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlvdXNTaWJsaW5nKEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQmIGJsb2NrRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IE1hcmdpbkNv
bGxhcHNlJiBtYXJnaW5Db2xsYXBzZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCi17Ci0gICAgLy8g
MS4gR2V0IHRoZSBtYXJnaW4gYmVmb3JlIHZhbHVlIGZyb20gdGhlIG5leHQgaW4tZmxvdyBzaWJs
aW5nLiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoaXMgYm94J3MgbWFyZ2luIGFmdGVyIHZhbHVlIG5v
dyBzaW5jZSB0aGV5IGFyZSBjb2xsYXBzZWQuCi0gICAgLy8gMi4gVXBkYXRlIHRoZSBjb2xsYXBz
ZWQgbWFyZ2luIGFmdGVyIHZhbHVlIGFzIHdlbGwgYXMgdGhlIHBvc2l0aXZlL25lZ2F0aXZlIGNh
Y2hlLgotICAgIC8vIDMuIENoZWNrIGlmIHRoZSBib3gncyBtYXJnaW5zIGNvbGxhcHNlIHRocm91
Z2guCi0gICAgLy8gNC4gSWYgc28sIHVwZGF0ZSB0aGUgcG9zaXRpdmUvbmVnYXRpdmUgY2FjaGUu
Ci0gICAgLy8gNS4gSW4gY2FzZSBvZiBjb2xsYXBzZWQgdGhyb3VnaCBtYXJnaW5zIGNoZWNrIGlm
IHRoZSBiZWZvcmUgbWFyZ2luIGNvbGxhcGVzIHdpdGggdGhlIHByZXZpb3VzIGluZmxvdyBzaWJs
aW5nJ3MgYWZ0ZXIgbWFyZ2luLgotICAgIC8vIDYuIElmIHNvLCBqdW1wIHRvICMyLgotICAgIC8v
IDcuIE5vIG5lZWQgdG8gcHJvcGFnYXRlIHRvIHBhcmVudCBiZWNhdXNlIGl0cyBtYXJnaW4gaXMg
bm90IGNvbXB1dGVkIHlldCAocHJlLWNvbXB1dGVkIGF0IG1vc3QpLgotICAgIGF1dG8qIGN1cnJl
bnRCb3ggPSAmbGF5b3V0Qm94OwotICAgIGF1dG8mIGJsb2NrRm9ybWF0dGluZ1N0YXRlID0gYmxv
Y2tGb3JtYXR0aW5nQ29udGV4dC5mb3JtYXR0aW5nU3RhdGUoKTsKLSAgICB3aGlsZSAobWFyZ2lu
Q29sbGFwc2UubWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFByZXZpb3VzU2libGluZ01hcmdpbkFm
dGVyKCpjdXJyZW50Qm94KSkgewotICAgICAgICBhdXRvJiBwcmV2aW91c1NpYmxpbmcgPSAqY3Vy
cmVudEJveC0+cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7Ci0gICAgICAgIGF1dG8gcHJldmlvdXNT
aWJsaW5nVmVydGljYWxNYXJnaW4gPSBibG9ja0Zvcm1hdHRpbmdTdGF0ZS51c2VkVmVydGljYWxN
YXJnaW4ocHJldmlvdXNTaWJsaW5nKTsKLQotICAgICAgICBhdXRvIGNvbGxhcHNlZFZlcnRpY2Fs
TWFyZ2luQmVmb3JlID0gcHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW4uY29sbGFwc2VkVmFs
dWVzLmJlZm9yZTsKLSAgICAgICAgYXV0byBjb2xsYXBzZWRWZXJ0aWNhbE1hcmdpbkFmdGVyID0g
YmxvY2tGb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveCgqY3VycmVudEJveCkubWFyZ2lu
QmVmb3JlKCk7Ci0KLSAgICAgICAgYXV0byBtYXJnaW5zQ29sbGFwc2VUaHJvdWdoID0gbWFyZ2lu
Q29sbGFwc2UubWFyZ2luc0NvbGxhcHNlVGhyb3VnaChwcmV2aW91c1NpYmxpbmcpOwotICAgICAg
ICBpZiAobWFyZ2luc0NvbGxhcHNlVGhyb3VnaCkKLSAgICAgICAgICAgIGNvbGxhcHNlZFZlcnRp
Y2FsTWFyZ2luQmVmb3JlID0gY29sbGFwc2VkVmVydGljYWxNYXJnaW5BZnRlcjsKLQotICAgICAg
ICAvLyBVcGRhdGUgcG9zaXRpdmUvbmVnYXRpdmUgY2FjaGUuCi0gICAgICAgIGF1dG8gcHJldmlv
dXNTaWJsaW5nUG9zaXRpdmVOZWdhdGl2ZU1hcmdpbiA9IGJsb2NrRm9ybWF0dGluZ1N0YXRlLnVz
ZWRWZXJ0aWNhbE1hcmdpbihwcmV2aW91c1NpYmxpbmcpLnBvc2l0aXZlQW5kTmVnYXRpdmVWYWx1
ZXM7Ci0gICAgICAgIGF1dG8gcG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZSA9IGJsb2NrRm9y
bWF0dGluZ1N0YXRlLnVzZWRWZXJ0aWNhbE1hcmdpbigqY3VycmVudEJveCkucG9zaXRpdmVBbmRO
ZWdhdGl2ZVZhbHVlcy5iZWZvcmU7Ci0KLSAgICAgICAgYXV0byBhZGp1c3RlZFByZXZpb3VzU2li
bGluZ1ZlcnRpY2FsTWFyZ2luID0gcHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW47Ci0gICAg
ICAgIGFkanVzdGVkUHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW4ucG9zaXRpdmVBbmROZWdh
dGl2ZVZhbHVlcy5hZnRlciA9IG1hcmdpbkNvbGxhcHNlLmNvbXB1dGVkUG9zaXRpdmVBbmROZWdh
dGl2ZU1hcmdpbihwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlLCBwcmV2aW91c1NpYmxpbmdQ
b3NpdGl2ZU5lZ2F0aXZlTWFyZ2luLmFmdGVyKTsKLSAgICAgICAgaWYgKG1hcmdpbnNDb2xsYXBz
ZVRocm91Z2gpIHsKLSAgICAgICAgICAgIGFkanVzdGVkUHJldmlvdXNTaWJsaW5nVmVydGljYWxN
YXJnaW4ucG9zaXRpdmVBbmROZWdhdGl2ZVZhbHVlcy5iZWZvcmUgPSBtYXJnaW5Db2xsYXBzZS5j
b21wdXRlZFBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW4ocHJldmlvdXNTaWJsaW5nUG9zaXRpdmVO
ZWdhdGl2ZU1hcmdpbi5iZWZvcmUsIGFkanVzdGVkUHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJn
aW4ucG9zaXRpdmVBbmROZWdhdGl2ZVZhbHVlcy5hZnRlcik7Ci0gICAgICAgICAgICBhZGp1c3Rl
ZFByZXZpb3VzU2libGluZ1ZlcnRpY2FsTWFyZ2luLnBvc2l0aXZlQW5kTmVnYXRpdmVWYWx1ZXMu
YWZ0ZXIgPSBhZGp1c3RlZFByZXZpb3VzU2libGluZ1ZlcnRpY2FsTWFyZ2luLnBvc2l0aXZlQW5k
TmVnYXRpdmVWYWx1ZXMuYmVmb3JlOwotICAgICAgICB9Ci0gICAgICAgIGJsb2NrRm9ybWF0dGlu
Z1N0YXRlLnNldFVzZWRWZXJ0aWNhbE1hcmdpbihwcmV2aW91c1NpYmxpbmcsIGFkanVzdGVkUHJl
dmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW4pOwotCi0gICAgICAgIGlmICghbWFyZ2luc0NvbGxh
cHNlVGhyb3VnaCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGN1cnJlbnRCb3ggPSAm
cHJldmlvdXNTaWJsaW5nOwotICAgIH0KLX0KLQotVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2
ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNv
bGxhcHNlOjpwb3NpdGl2ZU5lZ2F0aXZlVmFsdWVzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBNYXJn
aW5UeXBlIG1hcmdpblR5cGUpIGNvbnN0CitVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5k
TmVnYXRpdmVQYWlyOjpWYWx1ZXMgQmxvY2tNYXJnaW5Db2xsYXBzZTo6cG9zaXRpdmVOZWdhdGl2
ZVZhbHVlcyhjb25zdCBCb3gmIGxheW91dEJveCwgTWFyZ2luVHlwZSBtYXJnaW5UeXBlKSBjb25z
dAogewotICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZm9y
bWF0dGluZ1N0YXRlKCk7CiAgICAgLy8gQnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUgaW4gQkZDIGxh
eW91dCB0byBnYXRoZXIgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIG1hcmdpbiB2YWx1ZXMgZm9yIGVp
dGhlciBhIHByZXZpb3VzIHNpYmxpbmcgb3IgYSBjaGlsZCBib3gsCiAgICAgLy8gd2UgbXVzaCBo
YXZlIGNvbXB1dGVkIGFuZCBjYWNoZWQgdGhvc2UgdmFsdWVzLgotICAgIEFTU0VSVChmb3JtYXR0
aW5nU3RhdGUuaGFzVXNlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCkpOwotICAgIGF1dG8gcG9z
aXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luID0gZm9ybWF0dGluZ1N0YXRlLnVzZWRWZXJ0
aWNhbE1hcmdpbihsYXlvdXRCb3gpLnBvc2l0aXZlQW5kTmVnYXRpdmVWYWx1ZXM7CisgICAgQVNT
RVJUKGZvcm1hdHRpbmdTdGF0ZSgpLmhhc1VzZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gpKTsK
KyAgICBhdXRvIHBvc2l0aXZlQW5kTmVnYXRpdmVWZXJ0aWNhbE1hcmdpbiA9IGZvcm1hdHRpbmdT
dGF0ZSgpLnVzZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gpLnBvc2l0aXZlQW5kTmVnYXRpdmVW
YWx1ZXM7CiAgICAgcmV0dXJuIG1hcmdpblR5cGUgPT0gTWFyZ2luVHlwZTo6QmVmb3JlID8gcG9z
aXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luLmJlZm9yZSA6IHBvc2l0aXZlQW5kTmVnYXRp
dmVWZXJ0aWNhbE1hcmdpbi5hZnRlcjsgCiB9CiAKLVVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRp
dmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5D
b2xsYXBzZTo6cG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZShjb25zdCBCb3gmIGxheW91dEJv
eCwgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgbm9uQ29sbGFwc2VkVmFs
dWVzKSBjb25zdAorVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6
VmFsdWVzIEJsb2NrTWFyZ2luQ29sbGFwc2U6OnBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUo
Y29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFs
dWVzIG5vbkNvbGxhcHNlZFZhbHVlcykgY29uc3QKIHsKICAgICBhdXRvIGZpcnN0Q2hpbGRDb2xs
YXBzZWRNYXJnaW5CZWZvcmUgPSBbJl0oKSAtPiBVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZl
QW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgewogICAgICAgICBpZiAoIW1hcmdpbkJlZm9yZUNvbGxh
cHNlc1dpdGhGaXJzdEluRmxvd0NoaWxkTWFyZ2luQmVmb3JlKGxheW91dEJveCkpCkBAIC01Mzcs
NyArNTA0LDggQEAgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6
VmFsdWVzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmcKICAgICAvLyAyLiBHYXRoZXIgcG9z
aXRpdmUgYW5kIG5lZ2F0aXZlIG1hcmdpbiB2YWx1ZXMgZnJvbSBwcmV2aW91cyBpbmZsb3cgc2li
bGluZyBpZiBtYXJnaW5zIGFyZSBhZGpvaW5pbmcuCiAgICAgLy8gMy4gQ29tcHV0ZSBtaW4vbWF4
IHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBjb2xsYXBzZWQgbWFyZ2luIHZhbHVlcyB1c2luZyBub24t
Y29sbHBhc2VkIGNvbXB1dGVkIG1hcmdpbiBiZWZvcmUuCiAgICAgYXV0byBjb2xsYXBzZWRNYXJn
aW5CZWZvcmUgPSBjb21wdXRlZFBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW4oZmlyc3RDaGlsZENv
bGxhcHNlZE1hcmdpbkJlZm9yZSgpLCBwcmV2aW91U2libGluZ0NvbGxhcHNlZE1hcmdpbkFmdGVy
KCkpOwotICAgIGlmIChjb2xsYXBzZWRNYXJnaW5CZWZvcmUuaXNRdWlyayAmJiBmb3JtYXR0aW5n
Q29udGV4dCgpLnF1aXJrcygpLnNob3VsZElnbm9yZUNvbGxhcHNlZFF1aXJrTWFyZ2luKGxheW91
dEJveCkpCisgICAgYXV0byBzaG91bGRJZ25vcmVDb2xsYXBzZWRNYXJnaW4gPSBjb2xsYXBzZWRN
YXJnaW5CZWZvcmUuaXNRdWlyayAmJiBpblF1aXJrc01vZGUoKSAmJiBCbG9ja0Zvcm1hdHRpbmdR
dWlya3M6OnNob3VsZElnbm9yZUNvbGxhcHNlZFF1aXJrTWFyZ2luKGxheW91dEJveCk7CisgICAg
aWYgKHNob3VsZElnbm9yZUNvbGxhcHNlZE1hcmdpbikKICAgICAgICAgY29sbGFwc2VkTWFyZ2lu
QmVmb3JlID0geyB9OwogCiAgICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0
aXZlUGFpcjo6VmFsdWVzIG5vbkNvbGxhcHNlZEJlZm9yZTsKQEAgLTU0OSw3ICs1MTcsNyBAQCBV
c2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6TWFyZwogICAgIHJldHVybiBjb21wdXRlZFBvc2l0aXZlQW5kTmVn
YXRpdmVNYXJnaW4oY29sbGFwc2VkTWFyZ2luQmVmb3JlLCBub25Db2xsYXBzZWRCZWZvcmUpOwog
fQogCi1Vc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6OnBvc2l0aXZlTmVnYXRpdmVN
YXJnaW5BZnRlcihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25D
b2xsYXBzZWRWYWx1ZXMgbm9uQ29sbGFwc2VkVmFsdWVzKSBjb25zdAorVXNlZFZlcnRpY2FsTWFy
Z2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIEJsb2NrTWFyZ2luQ29sbGFwc2U6
OnBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRlcihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZFZl
cnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgbm9uQ29sbGFwc2VkVmFsdWVzKSBjb25z
dAogewogICAgIGF1dG8gbGFzdENoaWxkQ29sbGFwc2VkTWFyZ2luQWZ0ZXIgPSBbJl0oKSAtPiBV
c2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgewogICAg
ICAgICBpZiAoIW1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aExhc3RJbkZsb3dDaGlsZE1hcmdpbkFm
dGVyKGxheW91dEJveCkpCkBAIC01NjgsMTMgKzUzNiwxMyBAQCBVc2VkVmVydGljYWxNYXJnaW46
OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
TWFyZwogICAgIHJldHVybiBjb21wdXRlZFBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW4obGFzdENo
aWxkQ29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSwgbm9uQ29sbGFwc2VkQWZ0ZXIpOwogfQogCi1MYXlv
dXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZv
cmVJZ25vcmluZ0NvbGxhcHNpbmdUaHJvdWdoKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkVmVy
dGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyBub25Db2xsYXBzZWRWYWx1ZXMpCitMYXlv
dXRVbml0IEJsb2NrTWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUlnbm9yaW5nQ29sbGFwc2lu
Z1Rocm91Z2goY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29s
bGFwc2VkVmFsdWVzIG5vbkNvbGxhcHNlZFZhbHVlcykKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94
LmlzQmxvY2tMZXZlbEJveCgpKTsKICAgICByZXR1cm4gbWFyZ2luVmFsdWUocG9zaXRpdmVOZWdh
dGl2ZU1hcmdpbkJlZm9yZShsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZFZhbHVlcykpLnZhbHVlT3Io
bm9uQ29sbGFwc2VkVmFsdWVzLmJlZm9yZSk7CiB9CiAKLVVzZWRWZXJ0aWNhbE1hcmdpbiBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6Y29sbGFwc2VkVmVydGljYWxWYWx1
ZXMoY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2Vk
VmFsdWVzIG5vbkNvbGxhcHNlZFZhbHVlcykKK1VzZWRWZXJ0aWNhbE1hcmdpbiBCbG9ja01hcmdp
bkNvbGxhcHNlOjpjb2xsYXBzZWRWZXJ0aWNhbFZhbHVlcyhjb25zdCBCb3gmIGxheW91dEJveCwg
VXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgbm9uQ29sbGFwc2VkVmFsdWVz
KQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNCbG9ja0xldmVsQm94KCkpOwogICAgIC8vIDEu
IEdldCBtaW4vbWF4IG1hcmdpbiB0b3AgdmFsdWVzIGZyb20gdGhlIGZpcnN0IGluLWZsb3cgY2hp
bGQgaWYgd2UgYXJlIGNvbGxhcHNpbmcgbWFyZ2luIHRvcCB3aXRoIGl0LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja01hcmdp
bkNvbGxhcHNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL0Jsb2NrTWFyZ2luQ29sbGFwc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDc1NmMxNjEzMTg5ZGExMjQx
YTA4NzFiZGQ4ODg5MDE2NTNhMWI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja01hcmdpbkNvbGxhcHNlLmgKQEAg
LTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJNYXJnaW5UeXBlcy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgQm94OworY2xh
c3MgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk7CitjbGFzcyBCbG9ja0Zvcm1hdHRpbmdTdGF0ZTsK
K2NsYXNzIExheW91dFN0YXRlOworCisvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgbWFyZ2luIGNv
bGxhcHNpbmcgZm9yIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dC4KK2NsYXNzIEJsb2NrTWFyZ2lu
Q29sbGFwc2UgeworcHVibGljOgorICAgIEJsb2NrTWFyZ2luQ29sbGFwc2UoY29uc3QgTGF5b3V0
U3RhdGUmLCBjb25zdCBCbG9ja0Zvcm1hdHRpbmdTdGF0ZSYpOworCisgICAgVXNlZFZlcnRpY2Fs
TWFyZ2luIGNvbGxhcHNlZFZlcnRpY2FsVmFsdWVzKGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbE1h
cmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzKTsKKworICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3Jl
SWdub3JpbmdDb2xsYXBzaW5nVGhyb3VnaChjb25zdCBCb3gmLCBVc2VkVmVydGljYWxNYXJnaW46
Ok5vbkNvbGxhcHNlZFZhbHVlcyk7CisKKyAgICBib29sIG1hcmdpbkJlZm9yZUNvbGxhcHNlc1dp
dGhQYXJlbnRNYXJnaW5CZWZvcmUoY29uc3QgQm94JikgY29uc3Q7CisgICAgYm9vbCBtYXJnaW5C
ZWZvcmVDb2xsYXBzZXNXaXRoRmlyc3RJbkZsb3dDaGlsZE1hcmdpbkJlZm9yZShjb25zdCBCb3gm
KSBjb25zdDsKKyAgICBib29sIG1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5B
ZnRlcihjb25zdCBCb3gmKSBjb25zdDsKKyAgICBib29sIG1hcmdpbkJlZm9yZUNvbGxhcHNlc1dp
dGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRlcihjb25zdCBCb3gmKSBjb25zdDsKKworICAgIGJv
b2wgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgQm94Jikg
Y29uc3Q7CisgICAgYm9vbCBtYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhMYXN0SW5GbG93Q2hpbGRN
YXJnaW5BZnRlcihjb25zdCBCb3gmKSBjb25zdDsKKyAgICBib29sIG1hcmdpbkFmdGVyQ29sbGFw
c2VzV2l0aFBhcmVudE1hcmdpbkJlZm9yZShjb25zdCBCb3gmKSBjb25zdDsKKyAgICBib29sIG1h
cmdpbkFmdGVyQ29sbGFwc2VzV2l0aE5leHRTaWJsaW5nTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYp
IGNvbnN0OworICAgIGJvb2wgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoU2libGluZ01hcmdpbkJl
Zm9yZVdpdGhDbGVhcmFuY2UoY29uc3QgQm94JikgY29uc3Q7CisKKyAgICBVc2VkVmVydGljYWxN
YXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgY29tcHV0ZWRQb3NpdGl2ZUFu
ZE5lZ2F0aXZlTWFyZ2luKFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBh
aXI6OlZhbHVlcywgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6
VmFsdWVzKSBjb25zdDsKKworICAgIGJvb2wgbWFyZ2luc0NvbGxhcHNlVGhyb3VnaChjb25zdCBC
b3gmKSBjb25zdDsKKworICAgIFByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHByZWNvbXB1dGVkTWFy
Z2luQmVmb3JlKGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFs
dWVzLCBjb25zdCBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSYpOworCitwcml2YXRlOgorICAgIGVu
dW0gY2xhc3MgTWFyZ2luVHlwZSB7IEJlZm9yZSwgQWZ0ZXIgfTsKKyAgICBVc2VkVmVydGljYWxN
YXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgcG9zaXRpdmVOZWdhdGl2ZVZh
bHVlcyhjb25zdCBCb3gmLCBNYXJnaW5UeXBlKSBjb25zdDsKKyAgICBVc2VkVmVydGljYWxNYXJn
aW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgcG9zaXRpdmVOZWdhdGl2ZU1hcmdp
bkJlZm9yZShjb25zdCBCb3gmLCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVl
cykgY29uc3Q7CisgICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFp
cjo6VmFsdWVzIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRlcihjb25zdCBCb3gmLCBVc2VkVmVy
dGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcykgY29uc3Q7CisKKyAgICBVc2VkVmVydGlj
YWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgcHJlY29tcHV0ZWRQb3Np
dGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6
Tm9uQ29sbGFwc2VkVmFsdWVzLCBjb25zdCBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSYpIGNvbnN0
OworICAgIFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVl
cyBwcmVjb21wdXRlZFBvc2l0aXZlTmVnYXRpdmVWYWx1ZXMoY29uc3QgQm94JiwgY29uc3QgQmxv
Y2tGb3JtYXR0aW5nR2VvbWV0cnkmKSBjb25zdDsKKworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+
IG1hcmdpblZhbHVlKFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6
OlZhbHVlcykgY29uc3Q7CisKKyAgICBib29sIGhhc0NsZWFyYW5jZShjb25zdCBCb3gmKSBjb25z
dDsKKworICAgIGJvb2wgaW5RdWlya3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblF1aXJrc01v
ZGU7IH0KKyAgICBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX2xheW91dFN0YXRlOyB9CisgICAgY29uc3QgQmxvY2tGb3JtYXR0aW5nU3RhdGUmIGZvcm1h
dHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tGb3JtYXR0aW5nU3RhdGU7IH0KKwor
ICAgIGNvbnN0IExheW91dFN0YXRlJiBtX2xheW91dFN0YXRlOworICAgIGNvbnN0IEJsb2NrRm9y
bWF0dGluZ1N0YXRlJiBtX2Jsb2NrRm9ybWF0dGluZ1N0YXRlOworICAgIGJvb2wgbV9pblF1aXJr
c01vZGUgeyBmYWxzZSB9OworfTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svUHJlY29tcHV0ZWRCbG9j
a01hcmdpbkNvbGxhcHNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvYmxvY2svUHJlY29tcHV0ZWRCbG9ja01hcmdpbkNvbGxhcHNlLmNwcAppbmRleCBkZWZi
M2Q1NTRmZTY4ZGU0MjczMWZmOGUyZDRiMjBlYWJmNjU5ZWMyLi41YWFmYTNmYWIwM2U3ZjZhM2Qz
ZmU5YmRlYTcyNGJjZDVlMGMzZTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL1ByZWNvbXB1dGVkQmxvY2tNYXJnaW5Db2xsYXBzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9Q
cmVjb21wdXRlZEJsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCkBAIC0yNCwxMCArMjQsMTEgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nQ29udGV4
dC5oIgorI2luY2x1ZGUgIkJsb2NrTWFyZ2luQ29sbGFwc2UuaCIKIAogI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nR2VvbWV0
cnkuaCIKICNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91
dEJveC5oIgogI2luY2x1ZGUgIkxheW91dENvbnRhaW5lckJveC5oIgpAQCAtMzgsMjUgKzM5LDI0
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotVXNlZFZlcnRp
Y2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjpwcmVjb21wdXRlZFBvc2l0aXZlTmVnYXRpdmVWYWx1
ZXMoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CitVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0
aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgQmxvY2tNYXJnaW5Db2xsYXBzZTo6cHJlY29tcHV0
ZWRQb3NpdGl2ZU5lZ2F0aXZlVmFsdWVzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBCbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeSYgZm9ybWF0dGluZ0dlb21ldHJ5KSBjb25zdAogewogICAgIGF1
dG8mIGJsb2NrRm9ybWF0dGluZ1N0YXRlID0gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nU3RhdGU+
KGxheW91dFN0YXRlKCkuZm9ybWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCkpOwogICAgIGlm
IChibG9ja0Zvcm1hdHRpbmdTdGF0ZS5oYXNVc2VkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94KSkK
ICAgICAgICAgcmV0dXJuIGJsb2NrRm9ybWF0dGluZ1N0YXRlLnVzZWRWZXJ0aWNhbE1hcmdpbihs
YXlvdXRCb3gpLnBvc2l0aXZlQW5kTmVnYXRpdmVWYWx1ZXMuYmVmb3JlOwogCi0gICAgYXV0byBn
ZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnkoKTsKLSAgICBhdXRvIGhvcml6
b250YWxDb25zdHJhaW50cyA9IGdlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChs
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmhvcml6b250YWw7Ci0gICAgYXV0byBjb21wdXRl
ZFZlcnRpY2FsTWFyZ2luID0gZ2VvbWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgYXV0byBob3Jpem9udGFsQ29uc3RyYWlu
dHMgPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGxheW91
dEJveC5jb250YWluaW5nQmxvY2soKSkuaG9yaXpvbnRhbDsKKyAgICBhdXRvIGNvbXB1dGVkVmVy
dGljYWxNYXJnaW4gPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihs
YXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAgYXV0byBub25Db2xsYXBzZWRN
YXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4u
YWZ0ZXIudmFsdWVPcigwKSB9OwotICAgIHJldHVybiBwcmVjb21wdXRlZFBvc2l0aXZlTmVnYXRp
dmVNYXJnaW5CZWZvcmUobGF5b3V0Qm94LCBub25Db2xsYXBzZWRNYXJnaW4pOworICAgIHJldHVy
biBwcmVjb21wdXRlZFBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUobGF5b3V0Qm94LCBub25D
b2xsYXBzZWRNYXJnaW4sIGZvcm1hdHRpbmdHZW9tZXRyeSk7CiB9CiAKLVVzZWRWZXJ0aWNhbE1h
cmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpNYXJnaW5Db2xsYXBzZTo6cHJlY29tcHV0ZWRQb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVm
b3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNl
ZFZhbHVlcyBub25Db2xsYXBzZWRWYWx1ZXMpIGNvbnN0CitVc2VkVmVydGljYWxNYXJnaW46OlBv
c2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgQmxvY2tNYXJnaW5Db2xsYXBzZTo6cHJlY29t
cHV0ZWRQb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBV
c2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyBub25Db2xsYXBzZWRWYWx1ZXMs
IGNvbnN0IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5JiBmb3JtYXR0aW5nR2VvbWV0cnkpIGNvbnN0
CiB7CiAgICAgYXV0byBmaXJzdENoaWxkQ29sbGFwc2VkTWFyZ2luQmVmb3JlID0gWyZdKCkgLT4g
VXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIHsKICAg
ICAgICAgaWYgKCFtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoRmlyc3RJbkZsb3dDaGlsZE1hcmdp
bkJlZm9yZShsYXlvdXRCb3gpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmV0
dXJuIHByZWNvbXB1dGVkUG9zaXRpdmVOZWdhdGl2ZVZhbHVlcygqZG93bmNhc3Q8Q29udGFpbmVy
Qm94PihsYXlvdXRCb3gpLmZpcnN0SW5GbG93Q2hpbGQoKSk7CisgICAgICAgIHJldHVybiBwcmVj
b21wdXRlZFBvc2l0aXZlTmVnYXRpdmVWYWx1ZXMoKmRvd25jYXN0PENvbnRhaW5lckJveD4obGF5
b3V0Qm94KS5maXJzdEluRmxvd0NoaWxkKCksIGZvcm1hdHRpbmdHZW9tZXRyeSk7CiAgICAgfTsK
IAogICAgIGF1dG8gcHJldmlvdVNpYmxpbmdDb2xsYXBzZWRNYXJnaW5BZnRlciA9IFsmXSgpIC0+
IFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyB7CkBA
IC03MSw3ICs3MSw4IEBAIFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBh
aXI6OlZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnCiAgICAgLy8gMi4gR2F0aGVy
IHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW4gdmFsdWVzIGZyb20gcHJldmlvdXMgaW5mbG93
IHNpYmxpbmcgaWYgbWFyZ2lucyBhcmUgYWRqb2luaW5nLgogICAgIC8vIDMuIENvbXB1dGUgbWlu
L21heCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgY29sbGFwc2VkIG1hcmdpbiB2YWx1ZXMgdXNpbmcg
bm9uLWNvbGxwYXNlZCBjb21wdXRlZCBtYXJnaW4gYmVmb3JlLgogICAgIGF1dG8gY29sbGFwc2Vk
TWFyZ2luQmVmb3JlID0gY29tcHV0ZWRQb3NpdGl2ZUFuZE5lZ2F0aXZlTWFyZ2luKGZpcnN0Q2hp
bGRDb2xsYXBzZWRNYXJnaW5CZWZvcmUoKSwgcHJldmlvdVNpYmxpbmdDb2xsYXBzZWRNYXJnaW5B
ZnRlcigpKTsKLSAgICBpZiAoY29sbGFwc2VkTWFyZ2luQmVmb3JlLmlzUXVpcmsgJiYgZm9ybWF0
dGluZ0NvbnRleHQoKS5xdWlya3MoKS5zaG91bGRJZ25vcmVDb2xsYXBzZWRRdWlya01hcmdpbihs
YXlvdXRCb3gpKQorICAgIGF1dG8gc2hvdWxkSWdub3JlQ29sbGFwc2VkTWFyZ2luID0gY29sbGFw
c2VkTWFyZ2luQmVmb3JlLmlzUXVpcmsgJiYgaW5RdWlya3NNb2RlKCkgJiYgQmxvY2tGb3JtYXR0
aW5nUXVpcmtzOjpzaG91bGRJZ25vcmVDb2xsYXBzZWRRdWlya01hcmdpbihsYXlvdXRCb3gpOwor
ICAgIGlmIChzaG91bGRJZ25vcmVDb2xsYXBzZWRNYXJnaW4pCiAgICAgICAgIGNvbGxhcHNlZE1h
cmdpbkJlZm9yZSA9IHsgfTsKIAogICAgIGF1dG8gbm9uQ29sbGFwc2VkQmVmb3JlID0gVXNlZFZl
cnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIHsgfTsKQEAgLTgz
LDE0ICs4NCwxNCBAQCBVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWly
OjpWYWx1ZXMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZwogICAgIHJldHVybiBjb21wdXRl
ZFBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW4oY29sbGFwc2VkTWFyZ2luQmVmb3JlLCBub25Db2xs
YXBzZWRCZWZvcmUpOwogfQogCi1QcmVjb21wdXRlZE1hcmdpbkJlZm9yZSBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6cHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHVz
ZWROb25Db2xsYXBzZWRNYXJnaW4pCitQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSBCbG9ja01hcmdp
bkNvbGxhcHNlOjpwcmVjb21wdXRlZE1hcmdpbkJlZm9yZShjb25zdCBCb3gmIGxheW91dEJveCwg
VXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgdXNlZE5vbkNvbGxhcHNlZE1h
cmdpbiwgY29uc3QgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkmIGZvcm1hdHRpbmdHZW9tZXRyeSkK
IHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKICAgICAvLyBEb24n
dCBwcmUtY29tcHV0ZSB2ZXJ0aWNhbCBtYXJnaW5zIGZvciBvdXQgb2YgZmxvdyBib3hlcy4KICAg
ICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3Np
dGlvbmVkKCkpOwogICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7CiAKLSAg
ICBhdXRvIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUgPSBwcmVjb21wdXRlZFBvc2l0aXZl
TmVnYXRpdmVNYXJnaW5CZWZvcmUobGF5b3V0Qm94LCB1c2VkTm9uQ29sbGFwc2VkTWFyZ2luKTsK
KyAgICBhdXRvIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUgPSBwcmVjb21wdXRlZFBvc2l0
aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUobGF5b3V0Qm94LCB1c2VkTm9uQ29sbGFwc2VkTWFyZ2lu
LCBmb3JtYXR0aW5nR2VvbWV0cnkpOwogICAgIGF1dG8gY29sbGFwc2VkTWFyZ2luQmVmb3JlID0g
bWFyZ2luVmFsdWUocG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZSk7CiAgICAgcmV0dXJuIHsg
dXNlZE5vbkNvbGxhcHNlZE1hcmdpbi5iZWZvcmUsIGNvbGxhcHNlZE1hcmdpbkJlZm9yZSwgcG9z
aXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZSB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0LmNwcAppbmRleCBhYzZkZjY1Y2E0YmI3MTM2MDRlYWI3MDAxNmNmN2RlZjFj
MjJmMDRkLi5hYTc3NTQ2MzAyZThlOWU4ZDlkZWYwZTExMzMwYTY4Mjc2NTE4YjhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxl
d3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9U
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJCbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgi
CiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRCb3hHZW9t
ZXRyeS5oIgpAQCAtMzYsNiArMzcsNyBAQAogI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWlu
aW5nQmxvY2suaCIKICNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiVGFibGVGb3JtYXR0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJUYWJsZVdyYXBwZXJCbG9ja0Zv
cm1hdHRpbmdRdWlya3MuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91
dCB7CkBAIC0yMTcsMTAgKzIxOSwxNiBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdAogICAgIEFT
U0VSVCh0YWJsZUJveC5pc1RhYmxlQm94KCkpOwogICAgIC8vIFRhYmxlIGlzIGEgc3BlY2lhbCBC
RkMgY29udGVudC4gSXRzIGhlaWdodCBpcyBtYWlubHkgZHJpdmVuIGJ5IHRoZSBjb250ZW50LiBD
b21wdXRlZCBoZWlnaHQsIG1pbi1oZWlnaHQgYW5kIG1heC1oZWlnaHQgYXJlIGFsbAogICAgIC8v
IGFscmVhZHkgYmVlbiB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nIHRoZSBURkMgbGF5b3V0Lgot
ICAgIGF1dG8gaGVpZ2h0QW5kTWFyZ2luID0gZ2VvbWV0cnkoKS5pbkZsb3dDb250ZW50SGVpZ2h0
QW5kTWFyZ2luKHRhYmxlQm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IHF1aXJrcygpLm92
ZXJyaWRkZW5UYWJsZUhlaWdodCh0YWJsZUJveCkgfSk7Ci0KLSAgICBhdXRvIG1hcmdpbkNvbGxh
cHNlID0gdGhpcy0+bWFyZ2luQ29sbGFwc2UoKTsKLSAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0g
bWFyZ2luQ29sbGFwc2UuY29sbGFwc2VkVmVydGljYWxWYWx1ZXModGFibGVCb3gsIGhlaWdodEFu
ZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4pOworICAgIGF1dG8gb3ZlcnJpZGRlblRhYmxlSGVp
Z2h0ID0gWyZdKCkgLT4gT3B0aW9uYWw8TGF5b3V0VW5pdD4geworICAgICAgICBpZiAobGF5b3V0
U3RhdGUoKS5pblF1aXJrc01vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBUYWJsZVdyYXBwZXJR
dWlya3MoKnRoaXMpLm92ZXJyaWRkZW5UYWJsZUhlaWdodCh0YWJsZUJveCk7CisgICAgICAgIGlm
ICh0YWJsZUJveC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKKyAgICAgICAgICAgIHJldHVy
biBnZW9tZXRyeSgpLmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QodGFibGVC
b3gpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0oKTsKKworICAgIGF1dG8gaGVpZ2h0QW5k
TWFyZ2luID0gZ2VvbWV0cnkoKS5pbkZsb3dDb250ZW50SGVpZ2h0QW5kTWFyZ2luKHRhYmxlQm94
LCBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IG92ZXJyaWRkZW5UYWJsZUhlaWdodCB9KTsKKyAg
ICBhdXRvIHZlcnRpY2FsTWFyZ2luID0gbWFyZ2luQ29sbGFwc2UoKS5jb2xsYXBzZWRWZXJ0aWNh
bFZhbHVlcyh0YWJsZUJveCwgaGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbik7CiAg
ICAgLy8gQ2FjaGUgdGhlIGNvbXB1dGVkIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW4gdmFs
dWUgcGFpci4KICAgICBmb3JtYXR0aW5nU3RhdGUoKS5zZXRVc2VkVmVydGljYWxNYXJnaW4odGFi
bGVCb3gsIHZlcnRpY2FsTWFyZ2luKTsKIApAQCAtMjI5LDcgKzIzNyw3IEBAIHZvaWQgVGFibGVX
cmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbkZvclRh
YmxlQm94KGNvbnN0CiAgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChoZWlnaHRB
bmRNYXJnaW4uY29udGVudEhlaWdodCk7CiAgICAgYm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJn
aW4oeyBtYXJnaW5CZWZvcmUodmVydGljYWxNYXJnaW4pLCBtYXJnaW5BZnRlcih2ZXJ0aWNhbE1h
cmdpbikgfSk7CiAgICAgLy8gQWRqdXN0IHRoZSBwcmV2aW91cyBzaWJsaW5nJ3MgbWFyZ2luIGJv
dHRvbSBub3cgdGhhdCB0aGlzIGJveCdzIHZlcnRpY2FsIG1hcmdpbiBpcyBjb21wdXRlZC4KLSAg
ICBNYXJnaW5Db2xsYXBzZTo6dXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcoKnRo
aXMsIG1hcmdpbkNvbGxhcHNlLCB0YWJsZUJveCk7CisgICAgdXBkYXRlTWFyZ2luQWZ0ZXJGb3JQ
cmV2aW91c1NpYmxpbmcodGFibGVCb3gpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdy
YXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0LmgKaW5kZXggMGRlYTE1N2NjNTIxNmY4ODRmZDI4OTgzNGEzYzg2Njk1Mzc0
MjdhNS4uZDc2M2NhYTkzMzQ3OTdjMTUzNzcxMjY3NDY1OGIzNWFmZjY3ZGJiZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdy
YXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxl
V3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiQmxvY2tGb3JtYXR0
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMTQgKzQ2
LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SG9yaXpvbnRhbENvbnN0cmFpbnRzSWdub3JpbmdG
bG9hdHMoY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMp
IHsgbV9ob3Jpem9udGFsQ29uc3RyYWludHNJZ25vcmluZ0Zsb2F0cyA9IGhvcml6b250YWxDb25z
dHJhaW50czsgfQogCiBwcml2YXRlOgotICAgIGNsYXNzIFF1aXJrcyA6IHB1YmxpYyBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpRdWlya3MgewotICAgIHB1YmxpYzoKLSAgICAgICAgUXVpcmtzKGNv
bnN0IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQmKTsKLQotICAgICAgICBPcHRp
b25hbDxMYXlvdXRVbml0PiBvdmVycmlkZGVuVGFibGVIZWlnaHQoY29uc3QgQ29udGFpbmVyQm94
JiB0YWJsZUJveCkgY29uc3Q7Ci0gICAgfTsKLSAgICBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpRdWlya3MgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gUXVpcmtzKCp0aGlzKTsg
fQotCiAgICAgdm9pZCBsYXlvdXRUYWJsZUJveChjb25zdCBDb250YWluZXJCb3gmIHRhYmxlQm94
LCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKTsKIAogICAgIHZvaWQgY29tcHV0
ZUJvcmRlckFuZFBhZGRpbmdGb3JUYWJsZUJveChjb25zdCBDb250YWluZXJCb3gmLCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmKTsKQEAgLTYzLDExICs1Niw2IEBAIHByaXZhdGU6CiAgICAg
SG9yaXpvbnRhbENvbnN0cmFpbnRzIG1faG9yaXpvbnRhbENvbnN0cmFpbnRzSWdub3JpbmdGbG9h
dHM7CiB9OwogCi1pbmxpbmUgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVp
cmtzOjpRdWlya3MoY29uc3QgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYgZm9y
bWF0dGluZ0NvbnRleHQpCi0gICAgOiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpRdWlya3MoZm9y
bWF0dGluZ0NvbnRleHQpCi17Ci19Ci0KIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZWFkYTkyZWQyOGY3OTdmM2I4MjZiMGZiOTE1NDI1ZWI3ODliYjk5NS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGFibGVXcmFwcGVy
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oIgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCi0KLSNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpvdmVycmlkZGVuVGFibGVIZWlnaHQo
Y29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCkgY29uc3QKLXsKLSAgICBpZiAobGF5b3V0U3Rh
dGUoKS5pblF1aXJrc01vZGUoKSkgewotICAgICAgICAvLyBJbiBxdWlya3MgbW9kZSBhbHdheXMg
dXNlIHRoZSBjb250ZW50IGhlaWdodC4gTm90ZSB0aGF0IHRoZSB0YWJsZXMgd2l0aCBjb250ZW50
IHRha2UgY29tcHV0ZWQgdmFsdWVzIGludG8gYWNjb3VudC4KLSAgICAgICAgcmV0dXJuIGdlb21l
dHJ5KCkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCk7Ci0g
ICAgfQotICAgIHJldHVybiB0YWJsZUJveC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSA/IGdl
b21ldHJ5KCkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCkg
OiBPcHRpb25hbDxMYXlvdXRVbml0PiB7IH07Ci19Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxl
d3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVX
cmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjcwOWM2OTVlNDY3
YTg1MzMxMDVmMDhjYjU1NWM5MDNkMGM3ZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVX
cmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRhYmxlV3JhcHBlckJsb2NrRm9y
bWF0dGluZ1F1aXJrcy5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CisKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkxheW91
dFN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitU
YWJsZVdyYXBwZXJRdWlya3M6OlRhYmxlV3JhcHBlclF1aXJrcyhjb25zdCBUYWJsZVdyYXBwZXJC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IEJsb2NrRm9y
bWF0dGluZ1F1aXJrcyhmb3JtYXR0aW5nQ29udGV4dCkKK3sKKyAgICBBU1NFUlQobGF5b3V0U3Rh
dGUoKS5pblF1aXJrc01vZGUoKSk7Cit9CisKK0xheW91dFVuaXQgVGFibGVXcmFwcGVyUXVpcmtz
OjpvdmVycmlkZGVuVGFibGVIZWlnaHQoY29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCkgY29u
c3QKK3sKKyAgICAvLyBJbiBxdWlya3MgbW9kZSBhbHdheXMgdXNlIHRoZSBjb250ZW50IGhlaWdo
dC4gTm90ZSB0aGF0IHRoZSB0YWJsZXMgd2l0aCBjb250ZW50IHRha2UgY29tcHV0ZWQgdmFsdWVz
IGludG8gYWNjb3VudC4KKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IGRvd25jYXN0PEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ+KHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCkpOworICAgIHJl
dHVybiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeShmb3JtYXR0aW5nQ29udGV4dCkuY29udGVudEhl
aWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCk7Cit9CisKK30KK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFw
cGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjMmUz
MzYyYmMyZTk5YjAwMzg2MGZhYjA1MzgwZDgyYTllZDFkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBl
ci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaApAQCAtMCwwICsxLDQ1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKKworI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgVGFibGVXcmFwcGVyUXVp
cmtzIDogcHVibGljIEJsb2NrRm9ybWF0dGluZ1F1aXJrcyB7CitwdWJsaWM6CisgICAgVGFibGVX
cmFwcGVyUXVpcmtzKGNvbnN0IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQmKTsK
KworICAgIExheW91dFVuaXQgb3ZlcnJpZGRlblRhYmxlSGVpZ2h0KGNvbnN0IENvbnRhaW5lckJv
eCYgdGFibGVCb3gpIGNvbnN0OworfTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGlu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9m
bGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMzE1N2ZkNjk5MDQyODY5N2U4NWQx
NzFmNmQzYWM4ZDU4N2FjYWNmOC4uNjM2MWY4ZTkxZTc0NDc0MzQ2MzQyMDE0ODg2ZTVmMTBkYTNh
OGRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQog
CisjaW5jbHVkZSAiRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsZXhGb3Jt
YXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxpbmVSZWN0LmgiCiAjaW5jbHVkZSAiSW52YWxp
ZGF0aW9uU3RhdGUuaCIKQEAgLTU4LDcgKzU5LDcgQEAgTGF5b3V0VW5pdCBGbGV4Rm9ybWF0dGlu
Z0NvbnRleHQ6OnVzZWRDb250ZW50SGVpZ2h0KCkgY29uc3QKICAgICByZXR1cm4gTGF5b3V0VW5p
dCB7IGxpbmVzLmxhc3QoKS5ib3R0b20oKSAtIGxpbmVzLmZpcnN0KCkudG9wKCkgfTsKIH0KIAot
Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgRmxleEZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKQorSW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2lj
V2lkdGhDb25zdHJhaW50cygpCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTExNyw2ICsxMTgs
MTEgQEAgdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzRm9yRmxleEl0ZW1zKCkKICAgICB9CiB9CiAKK0ZsZXhGb3JtYXR0aW5nR2VvbWV0
cnkgRmxleEZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkoKnRoaXMpOworfQorCiB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0
dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
ZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCA4MWEwZTQwNjlmZmQxMDI5Njg4Y2M1
MTZjZmQ5NTkwY2NjOTM2NTJiLi4zZWVmYzVlNDljZmI2MjhjOTE2N2E1MjU0ZTA4MzlmZGY1NzM4
MGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC0zNCw2
ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorY2xh
c3MgRmxleEZvcm1hdHRpbmdHZW9tZXRyeTsKIGNsYXNzIEludmFsaWRhdGlvblN0YXRlOwogLy8g
VGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBsYXlvdXQgbG9naWMgZm9yIGZsZXggZm9ybWF0dGlu
ZyBjb250ZXh0cy4KIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtZmxleGJveC0xLwpAQCAt
NDcsMTcgKzQ4LDcgQEAgcHVibGljOgogICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0g
ICAgLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHBvc2l0aW9uaW5nIGFuZCBzaXppbmcgZm9yIGZs
ZXggaXRlbXMuCi0gICAgY2xhc3MgR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEdlb21ldHJ5KGNvbnN0IEZsZXhGb3Jt
YXR0aW5nQ29udGV4dCYpOwotCi0gICAgICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyhjb25zdCBDb250YWluZXJCb3gmKTsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIGNvbnN0IEZsZXhGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxGbGV4Rm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KLSAgICB9Owot
ICAgIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdCB7IHJl
dHVybiBHZW9tZXRyeSgqdGhpcyk7IH0KKyAgICBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5IGdlb21l
dHJ5KCkgY29uc3Q7CiAKICAgICB2b2lkIHNpemVBbmRQbGFjZUZsZXhJdGVtcyhjb25zdCBDb25z
dHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKTsKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzRm9yRmxleEl0ZW1zKCk7CkBAIC02NiwxMSArNTcsNiBAQCBwcml2YXRlOgog
ICAgIEZsZXhGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsgcmV0dXJuIGRvd25j
YXN0PEZsZXhGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3Rh
dGUoKSk7IH0KIH07CiAKLWlubGluZSBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpH
ZW9tZXRyeShjb25zdCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQmIGZsZXhGb3JtYXR0aW5nQ29udGV4
dCkKLSAgICA6IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeShmbGV4Rm9ybWF0dGluZ0NvbnRl
eHQpCi17Ci19Ci0KIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRj
N2M4ZGQwOTgwOWQxZDBiNTg0YWJmZjc4ZGQxNzkxYmZmNDY4OTguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRmxleEZvcm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5nU3RhdGUu
aCIKLSNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dENvbnRl
eHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLUZvcm1h
dHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEZsZXhGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgQ29udGFpbmVy
Qm94JiBmbGV4SXRlbSkKLXsKLSAgICBhdXRvIGZpeGVkTWFyZ2luQm9yZGVyQW5kUGFkZGluZyA9
IFsmXShhdXRvJiBsYXlvdXRCb3gpIHsKLSAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3gu
c3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luU3RhcnQoKSku
dmFsdWVPcigwKQotICAgICAgICAgICAgKyBMYXlvdXRVbml0IHsgc3R5bGUuYm9yZGVyTGVmdFdp
ZHRoKCkgfQotICAgICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLnBhZGRpbmdMZWZ0KCkpLnZh
bHVlT3IoMCkKLSAgICAgICAgICAgICsgZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nUmlnaHQoKSku
dmFsdWVPcigwKQotICAgICAgICAgICAgKyBMYXlvdXRVbml0IHsgc3R5bGUuYm9yZGVyUmlnaHRX
aWR0aCgpIH0KLSAgICAgICAgICAgICsgZml4ZWRWYWx1ZShzdHlsZS5tYXJnaW5FbmQoKSkudmFs
dWVPcigwKTsKLSAgICB9OwotCi0gICAgYXV0byBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMgPSBbJl0oKSAtPiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsKLSAgICAgICAgYXV0
byBsb2dpY2FsV2lkdGggPSBmbGV4SXRlbS5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpOwotICAgICAg
ICAvLyBNaW5pbXVtL21heGltdW0gd2lkdGggY2FuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoZSBjb250
YWluaW5nIGJsb2NrJ3Mgd2lkdGguCi0gICAgICAgIGF1dG8gbmVlZHNSZXNvbHZlZENvbnRhaW5p
bmdCbG9ja1dpZHRoID0gbG9naWNhbFdpZHRoLmlzQ2FsY3VsYXRlZCgpIHx8IGxvZ2ljYWxXaWR0
aC5pc1BlcmNlbnQoKSB8fCBsb2dpY2FsV2lkdGguaXNSZWxhdGl2ZSgpOwotICAgICAgICBpZiAo
bmVlZHNSZXNvbHZlZENvbnRhaW5pbmdCbG9ja1dpZHRoKQotICAgICAgICAgICAgcmV0dXJuIHsg
fTsKLQotICAgICAgICBpZiAoYXV0byB3aWR0aCA9IGZpeGVkVmFsdWUobG9naWNhbFdpZHRoKSkK
LSAgICAgICAgICAgIHJldHVybiB7ICp3aWR0aCwgKndpZHRoIH07Ci0KLSAgICAgICAgQVNTRVJU
KGZsZXhJdGVtLmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7Ci0gICAgICAgIGF1dG8g
aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRp
bmdDb250ZXh0KGZsZXhJdGVtLCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzKCk7Ci0gICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNNaW5Db250ZW50KCkp
Ci0gICAgICAgICAgICByZXR1cm4geyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0s
IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSB9OwotICAgICAgICBpZiAobG9naWNh
bFdpZHRoLmlzTWF4Q29udGVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgaW50cmluc2ljV2lk
dGhDb25zdHJhaW50cy5tYXhpbXVtLCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0g
fTsKLSAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0gICAgfTsKLSAg
ICBhdXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBjb25zdHJhaW5CeU1pbk1heFdpZHRo
KGZsZXhJdGVtLCBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSk7Ci0gICAgaW50
cmluc2ljV2lkdGhDb25zdHJhaW50cy5leHBhbmQoZml4ZWRNYXJnaW5Cb3JkZXJBbmRQYWRkaW5n
KGZsZXhJdGVtKSk7Ci0gICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci19Ci0K
LX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRy
eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2U5NjIyMmRmY2M3OThkYzBmMTIzYWI3YjZkMzE1NmFiNGRkMDNk
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5n
R2VvbWV0cnkuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisj
aW5jbHVkZSAiRmxleEZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgTGF5b3V0IHsKKworRmxleEZvcm1hdHRpbmdHZW9tZXRyeTo6RmxleEZvcm1h
dHRpbmdHZW9tZXRyeShjb25zdCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQmIGZsZXhGb3JtYXR0aW5n
Q29udGV4dCkKKyAgICA6IEZvcm1hdHRpbmdHZW9tZXRyeShmbGV4Rm9ybWF0dGluZ0NvbnRleHQp
Cit7Cit9CisKK0ludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgRmxleEZvcm1hdHRpbmdHZW9tZXRy
eTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhjb25zdCBDb250YWluZXJCb3gmIGZsZXhJdGVt
KQoreworICAgIGF1dG8gZml4ZWRNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nID0gWyZdKGF1dG8mIGxh
eW91dEJveCkgeworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAg
ICAgICByZXR1cm4gZml4ZWRWYWx1ZShzdHlsZS5tYXJnaW5TdGFydCgpKS52YWx1ZU9yKDApCisg
ICAgICAgICAgICArIExheW91dFVuaXQgeyBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSB9CisgICAg
ICAgICAgICArIGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ0xlZnQoKSkudmFsdWVPcigwKQorICAg
ICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLnBhZGRpbmdSaWdodCgpKS52YWx1ZU9yKDApCisg
ICAgICAgICAgICArIExheW91dFVuaXQgeyBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCkgfQorICAg
ICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpbkVuZCgpKS52YWx1ZU9yKDApOworICAg
IH07CisKKyAgICBhdXRvIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IFsmXSgp
IC0+IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeworICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0
aCA9IGZsZXhJdGVtLnN0eWxlKCkubG9naWNhbFdpZHRoKCk7CisgICAgICAgIC8vIE1pbmltdW0v
bWF4aW11bSB3aWR0aCBjYW4ndCBiZSBkZXBlbmRpbmcgb24gdGhlIGNvbnRhaW5pbmcgYmxvY2sn
cyB3aWR0aC4KKyAgICAgICAgYXV0byBuZWVkc1Jlc29sdmVkQ29udGFpbmluZ0Jsb2NrV2lkdGgg
PSBsb2dpY2FsV2lkdGguaXNDYWxjdWxhdGVkKCkgfHwgbG9naWNhbFdpZHRoLmlzUGVyY2VudCgp
IHx8IGxvZ2ljYWxXaWR0aC5pc1JlbGF0aXZlKCk7CisgICAgICAgIGlmIChuZWVkc1Jlc29sdmVk
Q29udGFpbmluZ0Jsb2NrV2lkdGgpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAg
IGlmIChhdXRvIHdpZHRoID0gZml4ZWRWYWx1ZShsb2dpY2FsV2lkdGgpKQorICAgICAgICAgICAg
cmV0dXJuIHsgKndpZHRoLCAqd2lkdGggfTsKKworICAgICAgICBBU1NFUlQoZmxleEl0ZW0uZXN0
YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZmxl
eEl0ZW0sIGxheW91dFN0YXRlKCkpLT5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMo
KTsKKyAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc01pbkNvbnRlbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiB7IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgaW50cmluc2ljV2lk
dGhDb25zdHJhaW50cy5taW5pbXVtIH07CisgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNNYXhD
b250ZW50KCkpCisgICAgICAgICAgICByZXR1cm4geyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
Lm1heGltdW0sIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSB9OworICAgICAgICBy
ZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKKyAgICB9OworICAgIGF1dG8gaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyA9IGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoZmxleEl0ZW0sIGNv
bXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpKTsKKyAgICBpbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzLmV4cGFuZChmaXhlZE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoZmxleEl0ZW0pKTsK
KyAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKK30KKworfQorfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
ZmxleC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE4OWNmODJkNjBjZjBkYjhmN2NlNjg3MjczNTY4ZDQyMDZmZWZkMzcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZv
cm1hdHRpbmdHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVk
ZSAiRm9ybWF0dGluZ0dlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFj
ZSBMYXlvdXQgeworCisvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgcG9zaXRpb25pbmcgYW5kIHNp
emluZyBmb3IgZmxleCBpdGVtcy4KK2NsYXNzIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkgOiBwdWJs
aWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKK3B1YmxpYzoKKyAgICBGbGV4Rm9ybWF0dGluZ0dlb21l
dHJ5KGNvbnN0IEZsZXhGb3JtYXR0aW5nQ29udGV4dCYpOworCisgICAgSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IENvbnRhaW5lckJveCYp
OworCitwcml2YXRlOgorICAgIGNvbnN0IEZsZXhGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGlu
Z0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxGbGV4Rm9ybWF0dGluZ0NvbnRleHQ+
KEZvcm1hdHRpbmdHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KK307CisKK30KK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5jcHAKaW5kZXggYTUxZWFmZmNkYTNlZWNjNDNlMjE1ZDFkOTY0NjEwNmMwY2M1YTk3Mi4uODZj
ODM0YzMxMmY1Y2E1ZGVmNjQwNGE1ZjcyMDljMTMzZWE2ZWRkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMzAsNiArMzAsOCBAQAog
CiAjaW5jbHVkZSAiRmxvYXRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
KyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJJbmxpbmVG
b3JtYXR0aW5nUXVpcmtzLmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAj
aW5jbHVkZSAiSW5saW5lTGluZUJveC5oIgogI2luY2x1ZGUgIklubGluZUxpbmVSdW4uaCIKQEAg
LTE5Myw3ICsxOTUsMTIgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91
dChJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIExpbmVCdWlsZGVyOjoKICAgICAgICAgLy8gInNw
WzwtbGluZSBicmVhay0+XWxpdF9jb250ZW50IiAtPiBvdmVyZmxvdyBsZW5ndGg6IDExIC0+IGxl
YWRpbmcgcGFydGlhbCBjb250ZW50IGxlbmd0aDogMTEuCiAgICAgICAgIGF1dG8gcGFydGlhbExl
YWRpbmdDb250ZW50TGVuZ3RoID0gcHJldmlvdXNMaW5lID8gcHJldmlvdXNMaW5lLT5vdmVyZmxv
d0NvbnRlbnRMZW5ndGggOiAwOwogICAgICAgICBhdXRvIGxlYWRpbmdMb2dpY2FsV2lkdGggPSBw
cmV2aW91c0xpbmUgPyBwcmV2aW91c0xpbmUtPm92ZXJmbG93TG9naWNhbFdpZHRoIDogV1RGOjpu
dWxsb3B0OwotICAgICAgICBhdXRvIGluaXRpYWxMaW5lQ29uc3RyYWludHMgPSBJbmxpbmVSZWN0
IHsgbGluZUxvZ2ljYWxUb3AsIGNvbnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbExlZnQsIGNv
bnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbFdpZHRoLCBxdWlya3MoKS5pbml0aWFsTGluZUhl
aWdodCgpIH07CisgICAgICAgIGF1dG8gaW5pdGlhbExpbmVIZWlnaHQgPSBbJl0oKSAtPiBJbmxp
bmVMYXlvdXRVbml0IHsKKyAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluU3RhbmRhcmRz
TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiByb290KCkuc3R5bGUoKS5jb21wdXRlZExp
bmVIZWlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzKCp0
aGlzKS5pbml0aWFsTGluZUhlaWdodCgpOworICAgICAgICB9KCk7CisgICAgICAgIGF1dG8gaW5p
dGlhbExpbmVDb25zdHJhaW50cyA9IElubGluZVJlY3QgeyBsaW5lTG9naWNhbFRvcCwgY29uc3Ry
YWludHMuaG9yaXpvbnRhbC5sb2dpY2FsTGVmdCwgY29uc3RyYWludHMuaG9yaXpvbnRhbC5sb2dp
Y2FsV2lkdGgsIGluaXRpYWxMaW5lSGVpZ2h0IH07CiAgICAgICAgIGF1dG8gbGluZUNvbnRlbnQg
PSBsaW5lQnVpbGRlci5sYXlvdXRJbmxpbmVDb250ZW50KG5lZWRzTGF5b3V0UmFuZ2UsIHBhcnRp
YWxMZWFkaW5nQ29udGVudExlbmd0aCwgbGVhZGluZ0xvZ2ljYWxXaWR0aCwgaW5pdGlhbExpbmVD
b25zdHJhaW50cywgaXNGaXJzdExpbmUpOwogICAgICAgICBhdXRvIGxpbmVMb2dpY2FsUmVjdCA9
IGNvbXB1dGVHZW9tZXRyeUZvckxpbmVDb250ZW50KGxpbmVDb250ZW50LCBjb25zdHJhaW50cy5o
b3Jpem9udGFsKTsKIApAQCAtMjM2LDcgKzI0Myw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lQnVpbGRlcjo6
CiAgICAgfQogfQogCi1Gb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCkKK0ludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpCiB7CiAgICAgYXV0byYgbGF5b3V0
U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogICAgIEFTU0VSVCghZm9ybWF0dGluZ1N0YXRl
KCkuaW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpKTsKQEAgLTYwNSw2ICs2MTIsMTEgQEAgdm9p
ZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW52YWxpZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25z
dCBJbnZhbGlkYXRpb25TdGF0ZSYKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbHNvIHdoZXJlIHdl
IHdvdWxkIGRlbGV0ZSBpbmxpbmUgaXRlbXMgaWYgdGhlaXIgY29udGVudCBjaGFuZ2VkLgogfQog
CitJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21l
dHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlz
KTsKK30KKwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaAppbmRleCBhZDdlYzk3MjM3YzFlODhkNzg4NjAyNjdhMTgwN2UyMDQ4YWY0MzJlLi4w
Zjk5ZjlmOTM0ZWM4ZWY1OTQ0YmZhYjk3Yzc1Y2M3NDQ3ZGE3MmY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTM0LDYgKzM0LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCitjbGFzcyBJbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnk7CiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nU3RhdGU7CiBjbGFzcyBJbnZh
bGlkYXRpb25TdGF0ZTsKIGNsYXNzIExpbmVCb3g7CkBAIC00NywyMSArNDgsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiwgY29uc3Qg
Q29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50Jikgb3ZlcnJpZGU7CiAgICAgTGF5b3V0VW5pdCB1
c2VkQ29udGVudEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgY2xhc3MgUXVpcmtzIDog
cHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3MgewotICAgIHB1YmxpYzoKLSAgICAgICAg
SW5saW5lTGF5b3V0VW5pdCBpbml0aWFsTGluZUhlaWdodCgpIGNvbnN0OwotICAgICAgICBib29s
IGhhc1NvZnRXcmFwT3Bwb3J0dW5pdHlBdEltYWdlKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaW5s
aW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYs
IGNvbnN0IExpbmVCb3gmKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLSAgICAgICAgUXVpcmtzKGNvbnN0IElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Jik7Ci0KLSAgICAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmZvcm1hdHRpbmdD
b250ZXh0KCkpOyB9Ci0KLSAgICB9OwotICAgIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWly
a3MgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gUXVpcmtzKCp0aGlzKTsgfQotCiAgICAgY29uc3Qg
SW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBk
b3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0
aW5nU3RhdGUoKSk7IH0KICAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0
ZSgpIHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0Nv
bnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQogCkBAIC03MCwyMiArNTYsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7CiAKLSAgICBjbGFzcyBHZW9tZXRyeSA6IHB1
YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgewotICAgIHB1YmxpYzoKLSAgICAgICAg
TGluZUJveCBsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250
ZW50Jik7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcEZvck5leHRMaW5lKGNv
bnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYsIElubGluZUxheW91dFVuaXQgcHJldmlvdXNM
aW5lTG9naWNhbEJvdHRvbSwgY29uc3QgRmxvYXRpbmdDb250ZXh0JikgY29uc3Q7Ci0KLSAgICAg
ICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbmxpbmVCbG9ja0NvbnRlbnRIZWlnaHRBbmRNYXJn
aW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJp
ZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIENvbnRlbnRXaWR0aEFuZE1hcmdp
biBpbmxpbmVCbG9ja0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OwotICAgICAgICBHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwot
Ci0gICAgICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdDb250ZXh0PihGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9Ci0KLSAgICB9
OwotICAgIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0
IHsgcmV0dXJuIEdlb21ldHJ5KCp0aGlzKTsgfQorICAgIElubGluZUZvcm1hdHRpbmdHZW9tZXRy
eSBnZW9tZXRyeSgpIGNvbnN0OwogCiAgICAgdm9pZCBsaW5lTGF5b3V0KElubGluZUl0ZW1zJiwg
TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SYW5nZSwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dD
b250ZW50Jik7CiAKQEAgLTEwMSwxNiArNzIsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgaW52YWxp
ZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYpOwogfTsKIAotaW5s
aW5lIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkoY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgIDogRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotewotfQot
Ci1pbmxpbmUgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6UXVpcmtzKGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKLSAgICA6IEZv
cm1hdHRpbmdDb250ZXh0OjpRdWlya3MoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi17Ci19Ci0K
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI0ZTc4
ODMzMzgwZmI0Y2MyMDUxMzU5YTM2YjUwNDk1NDliOWFkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDcyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkZsb2F0aW5nQ29udGV4dC5o
IgotI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW5saW5lTGluZUJv
eC5oIgotI2luY2x1ZGUgIkxheW91dEJveC5oIgotI2luY2x1ZGUgIkxheW91dENvbnRhaW5lckJv
eC5oIgotI2luY2x1ZGUgIkxheW91dFJlcGxhY2VkQm94LmgiCi0jaW5jbHVkZSAiTGVuZ3RoRnVu
Y3Rpb25zLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1j
bGFzcyBMaW5lQm94QnVpbGRlciB7Ci1wdWJsaWM6Ci0gICAgTGluZUJveEJ1aWxkZXIoY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmKTsKLSAgICBMaW5lQm94IGJ1aWxkKGNvbnN0IExpbmVC
dWlsZGVyOjpMaW5lQ29udGVudCYpOwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBTaW1wbGlmaWVk
VmVydGljYWxBbGlnbm1lbnQgewotICAgICAgICBTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQo
Y29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gpOwotCi0gICAgICAg
IHN0YXRpYyBib29sIGNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQoY29uc3QgTGluZUJveDo6SW5s
aW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gsIGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94
JiwgT3B0aW9uYWw8Y29uc3QgQm94R2VvbWV0cnk+IGlubGluZUxldmVsQm94R2VvbWV0cnkpOwot
Ci0gICAgICAgIHZvaWQgYWxpZ24oTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmKTsKLQotICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IHJvb3RJbmxpbmVCb3hMb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1
cm4gbV9yb290SW5saW5lQm94TG9naWNhbFRvcDsgfQotICAgICAgICBJbmxpbmVMYXlvdXRVbml0
IGxpbmVCb3hIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hMb2dpY2FsQm90dG9tIC0g
bV9saW5lQm94TG9naWNhbFRvcDsgfQotCi0gICAgICAgIHZvaWQgc2V0RW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9pc0VuYWJsZWQgPSBlbmFibGVkOyB9Ci0gICAgICAgIGJvb2wgaXNFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0VuYWJsZWQ7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IHZvaWQgYWRqdXN0KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94Jik7Ci0KLSAgICAgICAg
Y29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIG1fcm9vdElubGluZUJveDsKLSAgICAgICAg
Ym9vbCBtX2lzRW5hYmxlZCB7IHRydWUgfTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2xp
bmVCb3hMb2dpY2FsVG9wIHsgMCB9OwotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fbGluZUJv
eExvZ2ljYWxCb3R0b20geyAwIH07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbV9yb290SW5s
aW5lQm94TG9naWNhbFRvcCB7IDAgfTsKLSAgICB9OwotCi0gICAgdm9pZCBzZXRWZXJ0aWNhbEdl
b21ldHJ5Rm9ySW5saW5lQm94KExpbmVCb3g6OklubGluZUxldmVsQm94JikgY29uc3Q7Ci0gICAg
dm9pZCBjb25zdHJ1Y3RBbmRBbGlnbklubGluZUxldmVsQm94ZXMoTGluZUJveCYsIGNvbnN0IExp
bmU6OlJ1bkxpc3QmKTsKLSAgICB2b2lkIGNvbXB1dGVMaW5lQm94SGVpZ2h0QW5kQWxpZ25Jbmxp
bmVMZXZlbEJveGVzVmVydGljYWxseShMaW5lQm94Jik7Ci0KLSAgICBjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OyB9Ci0gICAgY29uc3QgQm94JiByb290Qm94KCkgY29uc3QgeyBy
ZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7IH0KLSAgICBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRl
KCk7IH0KLQotICAgIGJvb2wgaXNSb290TGF5b3V0Qm94KGNvbnN0IENvbnRhaW5lckJveCYgY29u
dGFpbmVyQm94KSBjb25zdCB7IHJldHVybiAmY29udGFpbmVyQm94ID09ICZyb290Qm94KCk7IH0K
LQotcHJpdmF0ZToKLSAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDsKLX07Ci0KLXN0cnVjdCBIYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNl
Q29udGVudCB7Ci1wdWJsaWM6Ci0gICAgdm9pZCByZXNldCgpOwotCi0gICAgSW5saW5lTGF5b3V0
VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICBib29sIGlzQ29uZGl0
aW9uYWwoKSBjb25zdCB7IHJldHVybiBtX2lzQ29uZGl0aW9uYWw7IH0KLQotICAgIHZvaWQgc2V0
SXNDb25kaXRpb25hbCgpIHsgbV9pc0NvbmRpdGlvbmFsID0gdHJ1ZTsgfQotICAgIHZvaWQgZXhw
YW5kKElubGluZUxheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCArPSB3aWR0aDsgfQotCi1wcml2
YXRlOgotICAgIGJvb2wgbV9pc0NvbmRpdGlvbmFsIHsgZmFsc2UgfTsKLSAgICBJbmxpbmVMYXlv
dXRVbml0IG1fd2lkdGggeyAwIH07Ci19OwotCi12b2lkIEhhbmdpbmdUcmFpbGluZ1doaXRlc3Bh
Y2VDb250ZW50OjpyZXNldCgpCi17Ci0gICAgbV9pc0NvbmRpdGlvbmFsID0gZmFsc2U7Ci0gICAg
bV93aWR0aCA9ICAwOwotfQotCi1zdGF0aWMgSGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRl
bnQgY29sbGVjdEhhbmdpbmdUcmFpbGluZ1doaXRlc3BhY2VDb250ZW50KGNvbnN0IExpbmU6OlJ1
bkxpc3QmIHJ1bnMsIGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQotewotICAgIGF1
dG8gaGFuZ2luZ0NvbnRlbnQgPSBIYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudCB7IH07
Ci0gICAgaWYgKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKLSAgICAgICAgaGFuZ2luZ0Nv
bnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOwotICAgIGZvciAoYXV0byYgcnVuIDogV1RGOjptYWtl
UmV2ZXJzZWRSYW5nZShydW5zKSkgewotICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94U3RhcnQo
KSB8fCBydW4uaXNJbmxpbmVCb3hFbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIGhhbmdpbmdDb250ZW50LnNl
dElzQ29uZGl0aW9uYWwoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNw
YWNlLgotICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6
OlByZVdyYXApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gVGhpcyBpcyBlaXRoZXIg
YSBub3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0g
ICAgICAgIGhhbmdpbmdDb250ZW50LmV4cGFuZChydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgo
KSk7Ci0gICAgfQotICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKLX0KLQotc3RhdGljIE9wdGlv
bmFsPElubGluZUxheW91dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoY29uc3QgTGlu
ZTo6UnVuTGlzdCYgcnVucywgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIElubGluZUxheW91dFVu
aXQgbGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRo
LCBib29sIGlzTGFzdExpbmUpCi17Ci0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxpbmVMb2dp
Y2FsV2lkdGggLSBjb250ZW50TG9naWNhbFdpZHRoOwotICAgIGF1dG8gaGFuZ2luZ1RyYWlsaW5n
V2hpdGVzcGFjZUNvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRl
bnQocnVucywgaXNMYXN0TGluZSk7Ci0gICAgYXZhaWxhYmxlV2lkdGggKz0gaGFuZ2luZ1RyYWls
aW5nV2hpdGVzcGFjZUNvbnRlbnQud2lkdGgoKTsKLSAgICBpZiAoYXZhaWxhYmxlV2lkdGggPD0g
MCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsQWxp
Z25tZW50ID0gWyZdIHsKLSAgICAgICAgaWYgKHRleHRBbGlnbiAhPSBUZXh0QWxpZ25Nb2RlOjpK
dXN0aWZ5KQotICAgICAgICAgICAgcmV0dXJuIHRleHRBbGlnbjsKLSAgICAgICAgLy8gVGV4dCBp
cyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0ZXh0
LWp1c3RpZnkgcHJvcGVydHksCi0gICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmlsbCB0
aGUgbGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24tbGFz
dCwKLSAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhl
IGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KLSAgICAgICAgaWYgKGlzTGFzdExp
bmUgfHwgKCFydW5zLmlzRW1wdHkoKSAmJiBydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpKSkKLSAg
ICAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKLSAgICAgICAgcmV0dXJuIFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnk7Ci0gICAgfTsKLQotICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jp
em9udGFsQWxpZ25tZW50KCkpIHsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6Ci0gICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
U3RhcnQ6Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdo
dDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6RW5kOgotICAgICAgICByZXR1cm4gYXZhaWxhYmxlV2lkdGg7Ci0gICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50
ZXI6Ci0gICAgICAgIHJldHVybiBhdmFpbGFibGVXaWR0aCAvIDI7Ci0gICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpKdXN0aWZ5OgotICAgICAgICAvLyBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5IGlzIGEg
cnVuIGFsaWdubWVudCAoYW5kIHdlIG9ubHkgZG8gaW5saW5lIGJveCBhbGlnbm1lbnQgaGVyZSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX0lN
UExFTUVOVEVEX1lFVCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1MaW5lQm94QnVpbGRlcjo6TGlu
ZUJveEJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCkKLXsKLX0KLQotTGluZUJveCBMaW5lQm94QnVpbGRlcjo6YnVpbGQoY29uc3Qg
TGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCkKLXsKLSAgICBhdXRvJiBydW5z
ID0gbGluZUNvbnRlbnQucnVuczsKLSAgICBhdXRvIGxpbmVMb2dpY2FsV2lkdGggPSBsaW5lQ29u
dGVudC5saW5lTG9naWNhbFdpZHRoOwotICAgIGF1dG8gY29udGVudExvZ2ljYWxXaWR0aCA9IGxp
bmVDb250ZW50LmNvbnRlbnRMb2dpY2FsV2lkdGg7Ci0gICAgYXV0byBob3Jpem9udGFsQWxpZ25t
ZW50T2Zmc2V0ID0gTGF5b3V0Ojpob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KHJ1bnMsIHJvb3RC
b3goKS5zdHlsZSgpLnRleHRBbGlnbigpLCBsaW5lTG9naWNhbFdpZHRoLCBjb250ZW50TG9naWNh
bFdpZHRoLCBsaW5lQ29udGVudC5pc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwotICAgIGF1
dG8gbGluZUJveCA9IExpbmVCb3ggeyByb290Qm94KCksIGxpbmVDb250ZW50LmxvZ2ljYWxUb3BM
ZWZ0LCBsaW5lTG9naWNhbFdpZHRoLCBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0LnZhbHVlT3Io
SW5saW5lTGF5b3V0VW5pdCB7IH0pLCBjb250ZW50TG9naWNhbFdpZHRoLCBsaW5lQ29udGVudC5u
b25TcGFubmluZ0lubGluZUxldmVsQm94Q291bnQgfTsKLSAgICBjb25zdHJ1Y3RBbmRBbGlnbklu
bGluZUxldmVsQm94ZXMobGluZUJveCwgcnVucyk7Ci0gICAgcmV0dXJuIGxpbmVCb3g7Ci19Ci0K
LXZvaWQgTGluZUJveEJ1aWxkZXI6OnNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goTGlu
ZUJveDo6SW5saW5lTGV2ZWxCb3gmIGlubGluZUxldmVsQm94KSBjb25zdAotewotICAgIEFTU0VS
VChpbmxpbmVMZXZlbEJveC5pc0lubGluZUJveCgpIHx8IGlubGluZUxldmVsQm94LmlzTGluZUJy
ZWFrQm94KCkpOwotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gaW5saW5lTGV2ZWxCb3guc3R5bGUo
KS5mb250TWV0cmljcygpOwotICAgIElubGluZUxheW91dFVuaXQgYXNjZW50ID0gZm9udE1ldHJp
Y3MuYXNjZW50KCk7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50ID0gZm9udE1ldHJpY3Mu
ZGVzY2VudCgpOwotICAgIGF1dG8gbG9naWNhbEhlaWdodCA9IGFzY2VudCArIGRlc2NlbnQ7Ci0g
ICAgLy8gV2UgbmVlZCBmbG9vci9jZWlsIHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwg
cG9zaXRpb25pbmcuCi0gICAgaW5saW5lTGV2ZWxCb3guc2V0QmFzZWxpbmUoZmxvb3JmKGFzY2Vu
dCkpOwotICAgIGlubGluZUxldmVsQm94LnNldERlc2NlbnQoY2VpbChkZXNjZW50KSk7Ci0gICAg
aW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KTsKLQotICAgIC8v
IEZJWE1FOiBBZGp1c3QgbGF5b3V0IGJvdW5kcyB3aXRoIGZhbGxiYWNrIGZvbnQgd2hlbiBhcHBs
aWNhYmxlLgotICAgIGF1dG8mIHN0eWxlID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5
bGUoKTsKLSAgICBhdXRvIGxpbmVIZWlnaHQgPSBzdHlsZS5saW5lSGVpZ2h0KCk7Ci0gICAgaWYg
KGxpbmVIZWlnaHQuaXNOZWdhdGl2ZSgpKSB7Ci0gICAgICAgIC8vIElmIGxpbmUtaGVpZ2h0IGNv
bXB1dGVzIHRvIG5vcm1hbCBhbmQgZWl0aGVyIHRleHQtZWRnZSBpcyBsZWFkaW5nIG9yIHRoaXMg
aXMgdGhlIHJvb3QgaW5saW5lIGJveCwKLSAgICAgICAgLy8gdGhlIGZvbnTigJlzIGxpbmUgZ2Fw
IG1ldHJpYyBtYXkgYWxzbyBiZSBpbmNvcnBvcmF0ZWQgaW50byBBIGFuZCBEIGJ5IGFkZGluZyBo
YWxmIHRvIGVhY2ggc2lkZSBhcyBoYWxmLWxlYWRpbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9jc3MtaW5saW5lLTMvI2lubGluZS1oZWlnaHQKLSAgICAgICAgLy8gU2luY2Ug
dGV4dC1lZGdlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGFuZCB0aGUgaW5pdGlhbCB2YWx1ZSBpcyBs
ZWFkaW5nLCB3ZSBzaG91bGQganVzdCBhcHBseSBpdCB0bwotICAgICAgICAvLyBhbGwgaW5saW5l
IGJveGVzLgotICAgICAgICBhdXRvIGhhbGZMaW5lR2FwID0gKGZvbnRNZXRyaWNzLmxpbmVTcGFj
aW5nKCkgLSBsb2dpY2FsSGVpZ2h0KSAvIDI7Ci0gICAgICAgIGFzY2VudCArPSBoYWxmTGluZUdh
cDsKLSAgICAgICAgZGVzY2VudCArPSBoYWxmTGluZUdhcDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQo
KTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBoYWxmTGVhZGluZyA9IChsaW5lSGVpZ2h0IC0g
KGFzY2VudCArIGRlc2NlbnQpKSAvIDI7Ci0gICAgICAgIGFzY2VudCArPSBoYWxmTGVhZGluZzsK
LSAgICAgICAgZGVzY2VudCArPSBoYWxmTGVhZGluZzsKLSAgICB9Ci0gICAgLy8gV2UgbmVlZCBm
bG9vci9jZWlsIHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwgcG9zaXRpb25pbmcuCi0g
ICAgaW5saW5lTGV2ZWxCb3guc2V0TGF5b3V0Qm91bmRzKExpbmVCb3g6OklubGluZUxldmVsQm94
OjpMYXlvdXRCb3VuZHMgeyBmbG9vcmYoYXNjZW50KSwgY2VpbChkZXNjZW50KSB9KTsKLX0KLQot
dm9pZCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExp
bmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMpCi17Ci0gICAgYXV0byYg
cm9vdElubGluZUJveCA9IGxpbmVCb3gucm9vdElubGluZUJveCgpOwotICAgIHNldFZlcnRpY2Fs
R2VvbWV0cnlGb3JJbmxpbmVCb3gocm9vdElubGluZUJveCk7Ci0KLSAgICBhdXRvIHNpbXBsaWZp
ZWRWZXJ0aWNhbEFsaWdubWVudCA9IFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudCB7IHJvb3RJ
bmxpbmVCb3ggfTsKLSAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aCBzdXBwb3J0IGZvciBsaW5l
LWhlaWdodCBjb250ZW50LgotICAgIHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5zZXRFbmFi
bGVkKGxheW91dFN0YXRlKCkuaW5TdGFuZGFyZHNNb2RlKCkgJiYgcm9vdEJveCgpLnN0eWxlKCku
bGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSk7Ci0KLSAgICBhdXRvIHNpbXBsaWZpZWRBbGlnblZl
cnRpY2FsbHlJZkFwcGxpY2FibGUgPSBbJl0oYXV0byYgaW5saW5lTGV2ZWxCb3gsIE9wdGlvbmFs
PGNvbnN0IEJveEdlb21ldHJ5PiBib3hHZW9tZXRyeSkgewotICAgICAgICBpZiAoIXNpbXBsaWZp
ZWRWZXJ0aWNhbEFsaWdubWVudC5pc0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKCFTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmNhblVzZVNpbXBsaWZpZWRB
bGlnbm1lbnQocm9vdElubGluZUJveCwgaW5saW5lTGV2ZWxCb3gsIGJveEdlb21ldHJ5KSkgewot
ICAgICAgICAgICAgc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LnNldEVuYWJsZWQoZmFsc2Up
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNpbXBsaWZpZWRWZXJ0
aWNhbEFsaWdubWVudC5hbGlnbihpbmxpbmVMZXZlbEJveCk7Ci0gICAgfTsKLQotICAgIGF1dG8g
Y3JlYXRlV3JhcHBlZElubGluZUJveGVzID0gWyZdIHsKLSAgICAgICAgaWYgKHJ1bnMuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAvLyBBbiBpbmxpbmUgYm94IG1heSBu
b3QgbmVjZXNzYXJpbHkgc3RhcnQgb24gdGhlIGN1cnJlbnQgbGluZToKLSAgICAgICAgLy8gPHNw
YW4gaWQ9b3V0ZXI+bGluZSBicmVhazxicj50aGlzIGNvbnRlbnQncyBwYXJlbnQgaW5saW5lIGJv
eCgnb3V0ZXInKSA8c3BhbiBpZD1pbm5lcj5zdGFydHMgb24gdGhlIHByZXZpb3VzIGxpbmU8L3Nw
YW4+PC9zcGFuPgotICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlJ3Mg
YW4gTGluZUJveDo6SW5saW5lTGV2ZWxCb3ggZm9yIGV2ZXJ5IGlubGluZSBib3ggdGhhdCdzIHBy
ZXNlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgLy8gSW4gbmVzdGluZyBjYXNlIHdl
IG5lZWQgdG8gY3JlYXRlIExpbmVCb3g6OklubGluZUxldmVsQm94ZXMgZm9yIHRoZSBpbmxpbmUg
Ym94IGFuY2VzdG9ycy4KLSAgICAgICAgLy8gV2Ugb25seSBoYXZlIHRvIGRvIGl0IG9uIHRoZSBm
aXJzdCBydW4gYXMgYW55IHN1YnNlcXVlbnQgaW5saW5lIGNvbnRlbnQgaXMgZWl0aGVyIGF0IHRo
ZSBzYW1lL2hpZ2hlciBuZXN0aW5nIGxldmVsIG9yCi0gICAgICAgIC8vIG5lc3RlZCB3aXRoIGEg
W2lubGluZSBib3ggc3RhcnRdIHJ1bi4KLSAgICAgICAgYXV0byYgZmlyc3RSdW4gPSBydW5zWzBd
OwotICAgICAgICBhdXRvJiBmaXJzdFJ1blBhcmVudExheW91dEJveCA9IGZpcnN0UnVuLmxheW91
dEJveCgpLnBhcmVudCgpOwotICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIHRoZSBmb3JtYXR0
aW5nIHJvb3QsIHdlIGNhbiBzdG9wIGhlcmUuIFRoaXMgaXMgcm9vdCBpbmxpbmUgYm94IGNvbnRl
bnQsIHRoZXJlJ3Mgbm8gbmVzdGluZyBpbmxpbmUgYm94IGZyb20gdGhlIHByZXZpb3VzIGxpbmUo
cykKLSAgICAgICAgLy8gdW5sZXNzIHRoZSBpbmxpbmUgYm94IGNsb3NpbmcgaXMgZm9yY2VkIG92
ZXIgdG8gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgLy8gZS5nLgotICAgICAgICAvLyA8c3Bh
bj5ub3JtYWxseSB0aGUgaW5saW5lIGJveCBjbG9zaW5nIGZvcm1zIGEgY29udGludW91cyBjb250
ZW50PC9zcGFuPgotICAgICAgICAvLyA8c3Bhbj51bmxlc3MgaXQncyBmb3JjZWQgdG8gdGhlIG5l
eHQgbGluZTxicj48L3NwYW4+Ci0gICAgICAgIGF1dG8gZmlyc3RSdW5OZWVkc0lubGluZUJveCA9
IGZpcnN0UnVuLmlzSW5saW5lQm94RW5kKCk7Ci0gICAgICAgIGlmICghZmlyc3RSdW5OZWVkc0lu
bGluZUJveCAmJiBpc1Jvb3RMYXlvdXRCb3goZmlyc3RSdW5QYXJlbnRMYXlvdXRCb3gpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gbGF5b3V0Qm94ZXNX
aXRob3V0SW5saW5lQm94ZXM7Ci0gICAgICAgIGlmIChmaXJzdFJ1bk5lZWRzSW5saW5lQm94KQot
ICAgICAgICAgICAgbGF5b3V0Qm94ZXNXaXRob3V0SW5saW5lQm94ZXMuYXBwZW5kKCZmaXJzdFJ1
bi5sYXlvdXRCb3goKSk7Ci0gICAgICAgIGF1dG8qIGFuY2VzdG9yID0gJmZpcnN0UnVuUGFyZW50
TGF5b3V0Qm94OwotICAgICAgICB3aGlsZSAoIWlzUm9vdExheW91dEJveCgqYW5jZXN0b3IpKSB7
Ci0gICAgICAgICAgICBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlcy5hcHBlbmQoYW5jZXN0
b3IpOwotICAgICAgICAgICAgYW5jZXN0b3IgPSAmYW5jZXN0b3ItPnBhcmVudCgpOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgbWlzc2luZyBMaW5lQm94OjpJbmxpbmVCb3hl
cyBzdGFydGluZyB3aXRoIHRoZSB0b3Btb3N0IGxheW91dCBib3guCi0gICAgICAgIGZvciAoYXV0
byogbGF5b3V0Qm94IDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShsYXlvdXRCb3hlc1dpdGhvdXRJ
bmxpbmVCb3hlcykpIHsKLSAgICAgICAgICAgIGF1dG8gaW5saW5lQm94ID0gTGluZUJveDo6SW5s
aW5lTGV2ZWxCb3g6OmNyZWF0ZUlubGluZUJveCgqbGF5b3V0Qm94LCByb290SW5saW5lQm94Lmxv
Z2ljYWxMZWZ0KCksIGxpbmVCb3guY29udGVudExvZ2ljYWxXaWR0aCgpKTsKLSAgICAgICAgICAg
IHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goaW5saW5lQm94KTsKLSAgICAgICAgICAg
IHNpbXBsaWZpZWRBbGlnblZlcnRpY2FsbHlJZkFwcGxpY2FibGUoaW5saW5lQm94LCB7IH0pOwot
ICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChXVEZNb3ZlKGlubGluZUJveCkp
OwotICAgICAgICB9Ci0gICAgfTsKLSAgICBjcmVhdGVXcmFwcGVkSW5saW5lQm94ZXMoKTsKLQot
ICAgIGF1dG8gbGluZUhhc0NvbnRlbnQgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IHJ1
bnMpIHsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAg
ICBhdXRvIHJ1bkhhc0NvbnRlbnQgPSBbJl0gKCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBBU1NF
UlQoIWxpbmVIYXNDb250ZW50KTsKLSAgICAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVu
LmlzQm94KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygpIHx8IHJ1bi5pc0hhcmRMaW5lQnJlYWso
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8mIGlubGlu
ZUJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRC
b3gpOwotICAgICAgICAgICAgLy8gRXZlbiBuZWdhdGl2ZSBob3Jpem9udGFsIG1hcmdpbiBtYWtl
cyB0aGUgbGluZSAiY29udGVudGZ1bCIuCi0gICAgICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94
U3RhcnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5lQm94R2VvbWV0cnkubWFyZ2lu
U3RhcnQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCkgfHwgaW5saW5lQm94R2Vv
bWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDBfbHUpOwotICAgICAgICAgICAgaWYgKHJ1bi5p
c0lubGluZUJveEVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVCb3hHZW9tZXRy
eS5tYXJnaW5FbmQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5ib3JkZXJSaWdodCgpIHx8IGlubGlu
ZUJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMF9sdSk7Ci0gICAgICAgICAgICBp
ZiAocnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9OwotICAgICAgICBsaW5lSGFzQ29udGVudCA9IGxpbmVIYXND
b250ZW50IHx8IHJ1bkhhc0NvbnRlbnQoKTsKLSAgICAgICAgYXV0byBsb2dpY2FsTGVmdCA9IHJv
b3RJbmxpbmVCb3gubG9naWNhbExlZnQoKSArIHJ1bi5sb2dpY2FsTGVmdCgpOwotICAgICAgICBp
ZiAocnVuLmlzQm94KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGlubGluZUxldmVsQm94R2VvbWV0
cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAg
ICAgICAgICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGlubGluZUxldmVsQm94R2VvbWV0cnkubWFy
Z2luQm94SGVpZ2h0KCk7Ci0gICAgICAgICAgICBhdXRvIGFzY2VudCA9IElubGluZUxheW91dFVu
aXQgeyB9OwotICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlKCkuc2hvdWxkTm90U3ludGhlc2l6
ZUlubGluZUJsb2NrQmFzZWxpbmUoKSkgewotICAgICAgICAgICAgICAgIC8vIEludGVncmF0aW9u
IGNvZGVwYXRoIGNvbnN0cnVjdHMgcmVwbGFjZWQgYm94ZXMgZm9yIGlubGluZS1ibG9jayBjb250
ZW50LgotICAgICAgICAgICAgICAgIEFTU0VSVChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsK
LSAgICAgICAgICAgICAgICBhc2NlbnQgPSAqZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJv
eCkuYmFzZWxpbmUoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5l
QmxvY2tCb3goKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBiYXNlbGluZSBvZiBhbiAnaW5s
aW5lLWJsb2NrJyBpcyB0aGUgYmFzZWxpbmUgb2YgaXRzIGxhc3QgbGluZSBib3ggaW4gdGhlIG5v
cm1hbCBmbG93LCB1bmxlc3MgaXQgaGFzIGVpdGhlciBubyBpbi1mbG93IGxpbmUgYm94ZXMgb3IK
LSAgICAgICAgICAgICAgICAvLyBpZiBpdHMgJ292ZXJmbG93JyBwcm9wZXJ0eSBoYXMgYSBjb21w
dXRlZCB2YWx1ZSBvdGhlciB0aGFuICd2aXNpYmxlJywgaW4gd2hpY2ggY2FzZSB0aGUgYmFzZWxp
bmUgaXMgdGhlIGJvdHRvbSBtYXJnaW4gZWRnZS4KLSAgICAgICAgICAgICAgICBhdXRvIHN5bnRo
ZXNpemVCYXNlbGluZSA9ICFsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCgpIHx8ICFsYXlvdXRCb3guc3R5bGUoKS5pc092ZXJmbG93VmlzaWJsZSgpOwotICAgICAg
ICAgICAgICAgIGlmIChzeW50aGVzaXplQmFzZWxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGFz
Y2VudCA9IG1hcmdpbkJveEhlaWdodDsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxp
c2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOwotICAgICAgICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZSA9IGZvcm1hdHRpbmdTdGF0
ZS5saW5lcygpLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jh
c2VsaW5lID0gbGFzdExpbmUubGluZUJveExvZ2ljYWxSZWN0KCkudG9wKCkgKyBsYXN0TGluZS5i
YXNlbGluZSgpOwotICAgICAgICAgICAgICAgICAgICBhc2NlbnQgPSBpbmxpbmVMZXZlbEJveEdl
b21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5ib3JkZXJUb3Ao
KSArIGlubGluZUxldmVsQm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxp
bmVCbG9ja0Jhc2VsaW5lOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKLSAgICAgICAgICAgICAgICBhc2NlbnQgPSBk
b3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KS5iYXNlbGluZSgpLnZhbHVlT3IobWFyZ2lu
Qm94SGVpZ2h0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhc2NlbnQgPSBt
YXJnaW5Cb3hIZWlnaHQ7Ci0gICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBzdGQ6Om1heCgwX2x1
LCBpbmxpbmVMZXZlbEJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkpOwotICAgICAgICAgICAgYXV0
byBhdG9taWNJbmxpbmVMZXZlbEJveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVB
dG9taWNJbmxpbmVMZXZlbEJveChsYXlvdXRCb3gsIGxvZ2ljYWxMZWZ0LCB7IGlubGluZUxldmVs
Qm94R2VvbWV0cnkuYm9yZGVyQm94V2lkdGgoKSwgbWFyZ2luQm94SGVpZ2h0IH0pOwotICAgICAg
ICAgICAgYXRvbWljSW5saW5lTGV2ZWxCb3guc2V0QmFzZWxpbmUoYXNjZW50KTsKLSAgICAgICAg
ICAgIGF0b21pY0lubGluZUxldmVsQm94LnNldExheW91dEJvdW5kcyhMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveDo6TGF5b3V0Qm91bmRzIHsgYXNjZW50LCBtYXJnaW5Cb3hIZWlnaHQgLSBhc2NlbnQg
fSk7Ci0gICAgICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGF0
b21pY0lubGluZUxldmVsQm94LCBpbmxpbmVMZXZlbEJveEdlb21ldHJ5KTsKLSAgICAgICAgICAg
IGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShhdG9taWNJbmxpbmVMZXZlbEJveCkp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bi5pc0lu
bGluZUJveFN0YXJ0KCkpIHsKLSAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgZG9uJ3Qg
a25vdyB5ZXQgaG93IHdpZGUgdGhpcyBpbmxpbmUgYm94IGlzLiBMZXQncyBhc3N1bWUgaXQncyBh
cyBsb25nIGFzIHRoZSBsaW5lIGlzCi0gICAgICAgICAgICAvLyBhbmQgYWRqdXN0IGl0IGxhdGVy
IGlmIHdlIGNvbWUgYWNyb3NzIGFuIGlubGluZUJveEVuZCBydW4gKHNlZSBiZWxvdykuCi0gICAg
ICAgICAgICBhdXRvIGluaXRpYWxMb2dpY2FsV2lkdGggPSBsaW5lQm94LmNvbnRlbnRMb2dpY2Fs
V2lkdGgoKSAtIHJ1bi5sb2dpY2FsTGVmdCgpOwotICAgICAgICAgICAgQVNTRVJUKGluaXRpYWxM
b2dpY2FsV2lkdGggPj0gMCk7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgYm94IHJ1biBpcyBiYXNl
ZCBvbiBtYXJnaW4gYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3guCi0gICAgICAg
ICAgICBhdXRvIG1hcmdpblN0YXJ0ID0gc3RkOjptYXgoMF9sdSwgZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdpblN0YXJ0KCkpOwotICAgICAgICAgICAg
bG9naWNhbExlZnQgKz0gbWFyZ2luU3RhcnQ7Ci0gICAgICAgICAgICBpbml0aWFsTG9naWNhbFdp
ZHRoIC09IG1hcmdpblN0YXJ0OwotICAgICAgICAgICAgYXV0byBpbmxpbmVCb3ggPSBMaW5lQm94
OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KGxheW91dEJveCwgbG9naWNhbExlZnQs
IGluaXRpYWxMb2dpY2FsV2lkdGgpOwotICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZv
cklubGluZUJveChpbmxpbmVCb3gpOwotICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGlj
YWxseUlmQXBwbGljYWJsZShpbmxpbmVCb3gsIHsgfSk7Ci0gICAgICAgICAgICBsaW5lQm94LmFk
ZElubGluZUxldmVsQm94KFdURk1vdmUoaW5saW5lQm94KSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94RW5kKCkpIHsKLSAgICAg
ICAgICAgIC8vIEFkanVzdCB0aGUgbG9naWNhbCB3aWR0aCB3aGVuIHRoZSBpbmxpbmUgYm94IGNs
b3NlcyBvbiB0aGlzIGxpbmUuCi0gICAgICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBsaW5lQm94
LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBBU1NF
UlQoaW5saW5lQm94LmlzSW5saW5lQm94KCkpOwotICAgICAgICAgICAgLy8gSW5saW5lIGJveCBy
dW4gaXMgYmFzZWQgb24gbWFyZ2luIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94
LgotICAgICAgICAgICAgYXV0byBtYXJnaW5FbmQgPSBzdGQ6Om1heCgwX2x1LCBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkubWFyZ2luRW5kKCkpOwotICAgICAg
ICAgICAgYXV0byBpbmxpbmVCb3hMb2dpY2FsUmlnaHQgPSBsb2dpY2FsTGVmdCArIHJ1bi5sb2dp
Y2FsV2lkdGgoKSAtIG1hcmdpbkVuZDsKLSAgICAgICAgICAgIGlubGluZUJveC5zZXRMb2dpY2Fs
V2lkdGgoaW5saW5lQm94TG9naWNhbFJpZ2h0IC0gaW5saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwot
ICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZShpbmxpbmVC
b3gsIHsgfSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
cnVuLmlzVGV4dCgpIHx8IHJ1bi5pc1NvZnRMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8g
RklYTUU6IEFkanVzdCBub24tZW1wdHkgaW5saW5lIGJveCBoZWlnaHQgd2hlbiBnbHlwaHMgZnJv
bSB0aGUgbm9uLXByaW1hcnkgZm9udCBzdHJldGNoIHRoZSBib3guCi0gICAgICAgICAgICBsaW5l
Qm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSkuc2V0SGFz
Q29udGVudCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHJ1bi5pc0hhcmRMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgYXV0byBsaW5lQnJlYWtCb3gg
PSBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlTGluZUJyZWFrQm94KGxheW91dEJveCwg
bG9naWNhbExlZnQpOwotICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJv
eChsaW5lQnJlYWtCb3gpOwotICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlm
QXBwbGljYWJsZShsaW5lQnJlYWtCb3gsIHsgfSk7Ci0gICAgICAgICAgICBsaW5lQm94LmFkZElu
bGluZUxldmVsQm94KFdURk1vdmUobGluZUJyZWFrQm94KSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSkg
ewotICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveDo6Y3JlYXRlR2VuZXJpY0lubGluZUxldmVsQm94KGxheW91dEJveCwgbG9naWNhbExl
ZnQpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGxpbmVCb3guc2V0SGFzQ29udGVudChsaW5lSGFz
Q29udGVudCk7Ci0gICAgaWYgKHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5pc0VuYWJsZWQo
KSB8fCAhbGluZUhhc0NvbnRlbnQpIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBh
YmxlIHRvIGV4ZXJjaXNlIHRoZSBmYXN0IHBhdGggd2hlbiB0aGUgbGluZSBoYXMgbm8gY29udGVu
dCBhdCBhbGwsIGV2ZW4gaW4gbm9uLXN0YW5kYXJkcyBtb2RlIG9yIHdpdGggbGluZS1oZWlnaHQg
c2V0LgotICAgICAgICByb290SW5saW5lQm94LnNldExvZ2ljYWxUb3AobGluZUhhc0NvbnRlbnQg
PyBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQucm9vdElubGluZUJveExvZ2ljYWxUb3AoKSA6
IC1yb290SW5saW5lQm94LmJhc2VsaW5lKCkpOwotICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxI
ZWlnaHQobGluZUhhc0NvbnRlbnQgPyBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQubGluZUJv
eEhlaWdodCgpIDogSW5saW5lTGF5b3V0VW5pdCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29t
cHV0ZUxpbmVCb3hIZWlnaHRBbmRBbGlnbklubGluZUxldmVsQm94ZXNWZXJ0aWNhbGx5KGxpbmVC
b3gpOwotfQotCi12b2lkIExpbmVCb3hCdWlsZGVyOjpjb21wdXRlTGluZUJveEhlaWdodEFuZEFs
aWduSW5saW5lTGV2ZWxCb3hlc1ZlcnRpY2FsbHkoTGluZUJveCYgbGluZUJveCkKLXsKLSAgICBB
U1NFUlQobGluZUJveC5oYXNDb250ZW50KCkpOwotICAgIC8vIFRoaXMgZnVuY3Rpb24gKHBhcnRp
YWxseSkgaW1wbGVtZW50czoKLSAgICAvLyAyLjIuIExheW91dCBXaXRoaW4gTGluZSBCb3hlcwot
ICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtaW5saW5lLTMvI2xpbmUtbGF5b3V0Ci0g
ICAgLy8gMS4gQ29tcHV0ZSB0aGUgbGluZSBib3ggaGVpZ2h0IHVzaW5nIHRoZSBsYXlvdXQgYm91
bmRzIGdlb21ldHJ5LiBUaGlzIGhlaWdodCBjb21wdXRhdGlvbiBzdHJpY3RseSB1c2VzIGxheW91
dCBib3VuZHMgYW5kIG5vdCBub3JtYWwgaW5saW5lIGxldmVsIGJveCBnZW9tZXRyaWVzLgotICAg
IC8vIDIuIENvbXB1dGUgdGhlIGJhc2VsaW5lL2xvZ2ljYWwgdG9wIHBvc2l0aW9uIG9mIHRoZSBy
b290IGlubGluZSBib3guIEFsaWduZWQgYm94ZXMgcHVzaCB0aGUgcm9vdCBpbmxpbmUgYm94IGFy
b3VuZCBpbnNpZGUgdGhlIGxpbmUgYm94LgotICAgIC8vIDMuIEZpbmFsbHkgYWxpZ24gdGhlIGlu
bGluZSBsZXZlbCBib3hlcyB1c2luZyAobW9zdGx5KSBub3JtYWwgaW5saW5lIGxldmVsIGJveCBn
ZW9tZXRyaWVzLgotICAgIGF1dG8gcXVpcmtzID0gZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3Mo
KTsKLSAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGluZUJveC5yb290SW5saW5lQm94KCk7Ci0K
LSAgICBhdXRvIGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodCA9IFsmXSB7Ci0gICAgICAgIC8v
IExpbmUgYm94IGhlaWdodCBjb21wdXRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgbGF5b3V0IGJvdW5k
cyBvZiB0aGUgaW5saW5lIGJveGVzIGFuZCBub3QgdGhlaXIgbG9naWNhbCAoYXNjZW50L2Rlc2Nl
bnQpIGRpbWVuc2lvbnMuCi0gICAgICAgIHN0cnVjdCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7Ci0g
ICAgICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRvcCB7IDAgfTsKLSAgICAgICAgICAgIElubGlu
ZUxheW91dFVuaXQgYm90dG9tIHsgMCB9OwotICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPGNv
bnN0IExpbmVCb3g6OklubGluZUxldmVsQm94KiwgQWJzb2x1dGVUb3BBbmRCb3R0b20+IGlubGlu
ZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXA7Ci0KLSAgICAgICAgYXV0byBtaW5pbXVt
TG9naWNhbFRvcCA9IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsKLSAgICAgICAgYXV0
byBtYXhpbXVtTG9naWNhbEJvdHRvbSA9IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsK
LSAgICAgICAgaWYgKHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KHJvb3RJbmxp
bmVCb3gsIGxpbmVCb3gpKSB7Ci0gICAgICAgICAgICBtaW5pbXVtTG9naWNhbFRvcCA9IElubGlu
ZUxheW91dFVuaXQgeyB9OwotICAgICAgICAgICAgbWF4aW11bUxvZ2ljYWxCb3R0b20gPSByb290
SW5saW5lQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpOwotICAgICAgICAgICAgaW5saW5lTGV2
ZWxCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbU1hcC5hZGQoJnJvb3RJbmxpbmVCb3gsIEFic29sdXRl
VG9wQW5kQm90dG9tIHsgKm1pbmltdW1Mb2dpY2FsVG9wLCAqbWF4aW11bUxvZ2ljYWxCb3R0b20g
fSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZVRv
cEFuZEJvdHRvbU1hcC5hZGQoJnJvb3RJbmxpbmVCb3gsIEFic29sdXRlVG9wQW5kQm90dG9tIHsg
fSk7Ci0KLSAgICAgICAgVmVjdG9yPExpbmVCb3g6OklubGluZUxldmVsQm94Kj4gbGluZUJveFJl
bGF0aXZlSW5saW5lTGV2ZWxCb3hlczsKLSAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJv
eCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVsQm94ZXMoKSkgewotICAgICAgICAgICAgYXV0
byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBp
ZiAoaW5saW5lTGV2ZWxCb3guaGFzTGluZUJveFJlbGF0aXZlQWxpZ25tZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVzLmFwcGVuZCgmaW5saW5l
TGV2ZWxCb3gpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVMZXZlbEJveEZv
ckxheW91dEJveChsYXlvdXRCb3gucGFyZW50KCkpOwotICAgICAgICAgICAgLy8gTG9naWNhbCB0
b3AgaXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBpbmxpbmUgYm94J3MgbGF5b3V0IGJvdW5kcy4K
LSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGxvZ2ljYWwgdG9wIGlzIG5vdCB0aGUgZmlu
YWwgbG9naWNhbCB0b3Agb2YgdGhlIGlubGluZSBsZXZlbCBib3guCi0gICAgICAgICAgICAvLyBU
aGlzIGlzIHRoZSBsb2dpY2FsIHRvcCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGF5b3V0IGJvdW5k
cyBnZW9tZXRyeSB3aGljaCBtYXkgYmUgdmVyeSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5saW5lIGJv
eCdzIG5vcm1hbCBnZW9tZXRyeS4KLSAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGlu
ZUxheW91dFVuaXQgeyB9OwotICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0
aWNhbEFsaWduKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6
IHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxp
bmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0gICAgICAgICAgICAg
ICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBs
b2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6
IHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxp
bmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAvIDIgKyBwYXJlbnRJ
bmxpbmVCb3guc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDI7Ci0gICAgICAgICAg
ICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQg
LSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNl
bGluZU1pZGRsZTogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21Q
YXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpIC8g
MjsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxheW91dEJv
dW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246Okxlbmd0aDogewotICAgICAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gaW5saW5l
TGV2ZWxCb3guc3R5bGUoKTsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmUgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHN0eWxlLnZlcnRpY2FsQWxp
Z25MZW5ndGgoKSwgc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpICsgaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm91bmRzKCkuYXNjZW50OwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJl
bnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNhbFRvcE9mZnNldEZyb21Q
YXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDogewotICAgICAgICAgICAgICAg
IC8vIE5vdGUgdGhhdCB0ZXh0LXRvcCBhbGlnbnMgd2l0aCB0aGUgaW5saW5lIGJveCdzIGZvbnQg
bWV0cmljcyB0b3AgKGFzY2VudCkgYW5kIG5vdCB0aGUgbGF5b3V0IGJvdW5kcyB0b3AuCi0gICAg
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5h
c2NlbnQgLSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJv
dHRvbTogewotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0ZXh0LWJvdHRvbSBhbGlnbnMg
d2l0aCB0aGUgaW5saW5lIGJveCdzIGZvbnQgbWV0cmljcyBib3R0b20gKGRlc2NlbnQpIGFuZCBu
b3QgdGhlIGxheW91dCBib3VuZHMgYm90dG9tLgotICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50
SW5saW5lQm94TGF5b3V0Qm91bmRzID0gcGFyZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpOwot
ICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50SW5saW5lQm94TG9naWNhbEJvdHRvbSA9IHBhcmVu
dElubGluZUJveExheW91dEJvdW5kcy5oZWlnaHQoKSAtIHBhcmVudElubGluZUJveExheW91dEJv
dW5kcy5kZXNjZW50ICsgcGFyZW50SW5saW5lQm94LmRlc2NlbnQoKS52YWx1ZU9yKElubGluZUxh
eW91dFVuaXQoKSk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJv
eExvZ2ljYWxCb3R0b20gLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gcGFyZW50
SW5saW5lQm94QWJzb2x1dGVUb3BBbmRCb3R0b20gPSBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9w
QW5kQm90dG9tTWFwLmdldCgmcGFyZW50SW5saW5lQm94KTsKLSAgICAgICAgICAgIGF1dG8gYWJz
b2x1dGVMb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94QWJzb2x1dGVUb3BBbmRCb3R0b20udG9w
ICsgbG9naWNhbFRvcDsKLSAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVMb2dpY2FsQm90dG9tID0g
YWJzb2x1dGVMb2dpY2FsVG9wICsgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0
KCk7Ci0gICAgICAgICAgICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmFk
ZCgmaW5saW5lTGV2ZWxCb3gsIEFic29sdXRlVG9wQW5kQm90dG9tIHsgYWJzb2x1dGVMb2dpY2Fs
VG9wLCBhYnNvbHV0ZUxvZ2ljYWxCb3R0b20gfSk7Ci0gICAgICAgICAgICAvLyBTdHJldGNoIHRo
ZSBtaW4vbWF4IGFic29sdXRlIHZhbHVlcyBpZiBhcHBsaWNhYmxlLgotICAgICAgICAgICAgaWYg
KHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGlubGluZUxldmVsQm94LCBsaW5l
Qm94KSkgewotICAgICAgICAgICAgICAgIG1pbmltdW1Mb2dpY2FsVG9wID0gc3RkOjptaW4obWlu
aW11bUxvZ2ljYWxUb3AudmFsdWVPcihhYnNvbHV0ZUxvZ2ljYWxUb3ApLCBhYnNvbHV0ZUxvZ2lj
YWxUb3ApOwotICAgICAgICAgICAgICAgIG1heGltdW1Mb2dpY2FsQm90dG9tID0gc3RkOjptYXgo
bWF4aW11bUxvZ2ljYWxCb3R0b20udmFsdWVPcihhYnNvbHV0ZUxvZ2ljYWxCb3R0b20pLCBhYnNv
bHV0ZUxvZ2ljYWxCb3R0b20pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8v
IFRoZSBsaW5lIGJveCBoZWlnaHQgY29tcHV0YXRpb24gaXMgYXMgZm9sbG93czoKLSAgICAgICAg
Ly8gMS4gU3RyZXRjaCB0aGUgbGluZSBib3ggd2l0aCB0aGUgbm9uLWxpbmUtYm94IHJlbGF0aXZl
IGFsaWduZWQgaW5saW5lIGJveCBhYnNvbHV0ZSB0b3AgYW5kIGJvdHRvbSB2YWx1ZXMuCi0gICAg
ICAgIC8vIDIuIENoZWNrIGlmIHRoZSBsaW5lIGJveCByZWxhdGl2ZSBhbGlnbmVkIGlubGluZSBi
b3hlcyAodG9wLCBib3R0b20gZXRjKSBoYXZlIGVub3VnaCByb29tIGFuZCBzdHJldGNoIHRoZSBs
aW5lIGJveCBmdXJ0aGVyIGlmIG5lZWRlZC4KLSAgICAgICAgYXV0byBsaW5lQm94TG9naWNhbEhl
aWdodCA9IG1heGltdW1Mb2dpY2FsQm90dG9tLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCgpKSAt
IG1pbmltdW1Mb2dpY2FsVG9wLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKLSAgICAgICAg
Zm9yIChhdXRvKiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveCA6IGxpbmVCb3hSZWxhdGl2
ZUlubGluZUxldmVsQm94ZXMpIHsKLSAgICAgICAgICAgIGlmICghcXVpcmtzLmlubGluZUxldmVs
Qm94QWZmZWN0c0xpbmVCb3goKmxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94LCBsaW5lQm94
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGxpbmVCb3hMb2dpY2Fs
SGVpZ2h0ID0gc3RkOjptYXgobGluZUJveExvZ2ljYWxIZWlnaHQsIGxpbmVCb3hSZWxhdGl2ZUlu
bGluZUxldmVsQm94LT5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KGxpbmVCb3hMb2dpY2FsSGVpZ2h0KTsKLSAgICB9
OwotICAgIGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodCgpOwotCi0gICAgYXV0byBjb21wdXRl
Um9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24gPSBbJl0gewotICAgICAgICBIYXNoTWFwPGNv
bnN0IExpbmVCb3g6OklubGluZUxldmVsQm94KiwgSW5saW5lTGF5b3V0VW5pdD4gaW5saW5lTGV2
ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwOwotICAgICAgICBpbmxpbmVMZXZlbEJveEFi
c29sdXRlQmFzZWxpbmVPZmZzZXRNYXAuYWRkKCZyb290SW5saW5lQm94LCBJbmxpbmVMYXlvdXRV
bml0IHsgfSk7Ci0KLSAgICAgICAgYXV0byBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVC
b3hCYXNlbGluZSA9IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsKLSAgICAgICAgaWYg
KHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KHJvb3RJbmxpbmVCb3gsIGxpbmVC
b3gpKQotICAgICAgICAgICAgbWF4aW11bVRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxp
bmUgPSByb290SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsKLQotICAgICAgICBmb3Ig
KGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygp
KSB7Ci0gICAgICAgICAgICBhdXRvIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBJbmxpbmVMYXlv
dXRVbml0IHsgfTsKLSAgICAgICAgICAgIGlmICghaW5saW5lTGV2ZWxCb3guaGFzTGluZUJveFJl
bGF0aXZlQWxpZ25tZW50KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKLSAgICAgICAgICAgICAgICBhdXRvJiBwYXJlbnRJ
bmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5w
YXJlbnQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRC
YXNlbGluZSA9IElubGluZUxheW91dFVuaXQgeyB9OwotCi0gICAgICAgICAgICAgICAgc3dpdGNo
IChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOgotICAgICAgICAgICAgICAgICAgICBiYXNlbGluZU9m
ZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6IHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gKGlu
bGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpIC8gMiArIHBhcmVudElubGluZUJv
eC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gMik7Ci0gICAgICAgICAgICAgICAg
ICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZy
b21QYXJlbnRCYXNlbGluZSAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmVNaWRkbGU6IHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5l
TGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLyAyOwotICAgICAgICAgICAgICAgICAg
ICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGxvZ2ljYWxUb3BPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Okxlbmd0aDogewotICAgICAgICAgICAgICAgICAgICBh
dXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94LnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gdmVydGljYWxBbGlnbk9mZnNldCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoc3R5bGUudmVy
dGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHZl
cnRpY2FsQWxpZ25PZmZzZXQgKyBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAgICAgICAg
ICAgICAgICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGxvZ2ljYWxUb3BP
ZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOgotICAgICAgICAgICAgICAgICAgICBiYXNl
bGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgp
IC0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0
b206Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5l
ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtICpwYXJlbnRJbmxpbmVC
b3guZGVzY2VudCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lF
VCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYWJzb2x1dGVCYXNlbGluZU9mZnNldCA9IGlubGluZUxldmVsQm94QWJzb2x1
dGVCYXNlbGluZU9mZnNldE1hcC5nZXQoJnBhcmVudElubGluZUJveCkgKyBiYXNlbGluZU9mZnNl
dEZyb21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDogewotICAgICAgICAgICAgICAgICAgICBhYnNv
bHV0ZUJhc2VsaW5lT2Zmc2V0ID0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQg
LSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OkJvdHRvbTogewotICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUJhc2VsaW5l
T2Zmc2V0ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtIHJvb3RJbmxp
bmVCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlubGluZUxldmVsQm94QWJzb2x1dGVCYXNlbGluZU9mZnNldE1hcC5hZGQoJmlubGluZUxldmVs
Qm94LCBhYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0KTsKLSAgICAgICAgICAgIGF1dG8gYWZmZWN0c1Jv
b3RJbmxpbmVCb3hWZXJ0aWNhbFBvc2l0aW9uID0gcXVpcmtzLmlubGluZUxldmVsQm94QWZmZWN0
c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpOwotICAgICAgICAgICAgaWYgKGFmZmVj
dHNSb290SW5saW5lQm94VmVydGljYWxQb3NpdGlvbikgewotICAgICAgICAgICAgICAgIGF1dG8g
dG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IGFic29sdXRlQmFzZWxpbmVPZmZz
ZXQgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lKQotICAgICAg
ICAgICAgICAgICAgICBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9
IHN0ZDo6bWF4KCptYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSwgdG9w
T2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBpcyBxdWlyayBtb2RlIGFuZCB0aGUgcm9v
dCBpbmxpbmUgYm94IGhhcyBubyBjb250ZW50LiBUaGUgcm9vdCBpbmxpbmUgYm94J3MgYmFzZWxp
bmUgaXMgYW5jaG9yZWQgYXQgMC4KLSAgICAgICAgICAgICAgICAgICAgLy8gSG93ZXZlciBuZWdh
dGl2ZSBhc2NlbnQgKGUuZyBuZWdhdGl2ZSB0b3AgbWFyZ2luKSBjYW4gInB1c2giIHRoZSByb290
IGlubGluZSBib3ggdXB3YXJkcyBhbmQgaGF2ZSBhIG5lZ2F0aXZlIHZhbHVlLgotICAgICAgICAg
ICAgICAgICAgICBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IGlu
bGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudCA+PSAwCi0gICAgICAgICAgICAgICAg
ICAgICAgICA/IHN0ZDo6bWF4KDAuMGYsIHRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxp
bmUpCi0gICAgICAgICAgICAgICAgICAgICAgICA6IHRvcE9mZnNldEZyb21Sb290SW5saW5lQm94
QmFzZWxpbmU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGF1dG8gcm9vdElubGluZUJveExvZ2ljYWxUb3AgPSBtYXhpbXVtVG9wT2Zmc2V0RnJv
bVJvb3RJbmxpbmVCb3hCYXNlbGluZS52YWx1ZU9yKDAuZikgLSByb290SW5saW5lQm94LmJhc2Vs
aW5lKCk7Ci0gICAgICAgIHJvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRvcChyb290SW5saW5lQm94
TG9naWNhbFRvcCk7Ci0gICAgfTsKLSAgICBjb21wdXRlUm9vdElubGluZUJveFZlcnRpY2FsUG9z
aXRpb24oKTsKLQotICAgIGF1dG8gYWxpZ25JbmxpbmVMZXZlbEJveGVzID0gWyZdIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVs
Qm94ZXMoKSkgewotICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94
LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7Ci0gICAgICAg
ICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgICAg
IHN3aXRjaCAoaW5saW5lTGV2ZWxCb3gudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOgotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3Ag
PSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
Ok1pZGRsZTogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJl
bnRCYXNlbGluZSA9IChpbmxpbmVMZXZlbEJveC5sb2dpY2FsSGVpZ2h0KCkgLyAyICsgcGFyZW50
SW5saW5lQm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyKTsKLSAgICAgICAg
ICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2Fs
VG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZU1pZGRs
ZTogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNl
bGluZSA9IGlubGluZUxldmVsQm94LmxvZ2ljYWxIZWlnaHQoKSAvIDI7Ci0gICAgICAgICAgICAg
ICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gbG9naWNhbFRvcE9m
ZnNldEZyb21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TGVuZ3RoOiB7Ci0gICAgICAg
ICAgICAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVMZXZlbEJveC5zdHlsZSgpOwotICAgICAgICAg
ICAgICAgIGF1dG8gdmVydGljYWxBbGlnbk9mZnNldCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoc3R5
bGUudmVydGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0g
dmVydGljYWxBbGlnbk9mZnNldCArIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAg
ICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gbG9naWNh
bFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCAodGV4dCl0b3AvYm90dG9tIGFs
aWduIHRoZWlyIGxheW91dCBib3VuZHMuCi0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OlRleHRUb3A6Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0
b206Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sb2dpY2Fs
SGVpZ2h0KCkgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50IC0gaW5saW5l
TGV2ZWxCb3guYmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGxvZ2ljYWwgdG9wIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGlubGluZSBib3gu
Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5k
cygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAg
ICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBsb2dpY2FsIHRvcCBpcyBub3QgcmVsYXRpdmUgdG8g
dGhlIHBhcmVudCBpbmxpbmUgYm94LgotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBsaW5l
Qm94LmxvZ2ljYWxIZWlnaHQoKSAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmRlc2Nl
bnQgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVO
VEVEX1lFVCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbFRvcChsb2dpY2FsVG9wKTsKLSAgICAgICAg
fQotICAgIH07Ci0gICAgYWxpZ25JbmxpbmVMZXZlbEJveGVzKCk7Ci19Ci0KLUxpbmVCb3hCdWls
ZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OlNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdu
bWVudChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgcm9vdElubGluZUJveCkKLSAgICA6
IG1fcm9vdElubGluZUJveChyb290SW5saW5lQm94KQotewotICAgIGFkanVzdChyb290SW5saW5l
Qm94KTsKLX0KLQotYm9vbCBMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25t
ZW50OjpjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVs
Qm94JiByb290SW5saW5lQm94LCBjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgaW5saW5l
TGV2ZWxCb3gsIE9wdGlvbmFsPGNvbnN0IEJveEdlb21ldHJ5PiBpbmxpbmVMZXZlbEJveEdlb21l
dHJ5KQotewotICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0F0b21pY0lubGluZUxldmVsQm94KCkp
IHsKLSAgICAgICAgQVNTRVJUKGlubGluZUxldmVsQm94R2VvbWV0cnkpOwotICAgICAgICAvLyBC
YXNlbGluZSBhbGlnbmVkLCBub24tc3RyZXRjaHkgZGlyZWN0IGNoaWxkcmVuIGFyZSBjb25zaWRl
cmVkIHRvIGJlIHNpbXBsZSBmb3Igbm93LgotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxp
bmVMZXZlbEJveC5sYXlvdXRCb3goKTsKLSAgICAgICAgcmV0dXJuICZsYXlvdXRCb3gucGFyZW50
KCkgPT0gJnJvb3RJbmxpbmVCb3gubGF5b3V0Qm94KCkKLSAgICAgICAgICAgICYmIGxheW91dEJv
eC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZQotICAg
ICAgICAgICAgJiYgIWlubGluZUxldmVsQm94R2VvbWV0cnktPm1hcmdpbkJlZm9yZSgpCi0gICAg
ICAgICAgICAmJiAhaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQWZ0ZXIoKQotICAgICAg
ICAgICAgJiYgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQm94SGVpZ2h0KCkgPD0gcm9v
dElubGluZUJveC5iYXNlbGluZSgpOwotICAgIH0KLSAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNM
aW5lQnJlYWtCb3goKSkgewotICAgICAgICAvLyBCYXNlbGluZSBhbGlnbmVkLCBub24tc3RyZXRj
aHkgbGluZSBicmVha3MgZS5nLiA8ZGl2PjxzcGFuPjxicj48L3NwYW4+PC9kaXY+IGJ1dCBub3Qg
PGRpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMDBweDsiPjxicj48L3NwYW4+PC9kaXY+Lgot
ICAgICAgICByZXR1cm4gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNh
bEFsaWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUgJiYgaW5saW5lTGV2ZWxCb3guYmFz
ZWxpbmUoKSA8PSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7Ci0gICAgfQotICAgIGlmIChpbmxp
bmVMZXZlbEJveC5pc0lubGluZUJveCgpKSB7Ci0gICAgICAgIC8vIEJhc2VsaW5lIGFsaWduZWQs
IG5vbi1zdHJldGNoeSBpbmxpbmUgYm94ZXMgZS5nLiA8ZGl2PjxzcGFuPjwvc3Bhbj48L2Rpdj4g
YnV0IG5vdCA8ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwMHB4OyI+PC9zcGFuPjwvZGl2
Pi4KLSAgICAgICAgcmV0dXJuIGlubGluZUxldmVsQm94LmxheW91dEJveCgpLnN0eWxlKCkudmVy
dGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lICYmIGlubGluZUxldmVsQm94
LmxheW91dEJvdW5kcygpID09IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCk7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZl
cnRpY2FsQWxpZ25tZW50OjphbGlnbihMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgaW5saW5lTGV2
ZWxCb3gpCi17Ci0gICAgaWYgKGlubGluZUxldmVsQm94LmlzQXRvbWljSW5saW5lTGV2ZWxCb3go
KSB8fCBpbmxpbmVMZXZlbEJveC5pc0xpbmVCcmVha0JveCgpIHx8IGlubGluZUxldmVsQm94Lmlz
SW5saW5lQm94KCkpIHsKLSAgICAgICAgLy8gT25seSBiYXNlbGluZSBhbGlnbm1lbnQgZm9yIG5v
dy4KLSAgICAgICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbFRvcChtX3Jvb3RJbmxpbmVCb3gu
YmFzZWxpbmUoKSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCkpOwotICAgICAgICBhZGp1c3Qo
aW5saW5lTGV2ZWxCb3gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVF9OT1Rf
SU1QTEVNRU5URURfWUVUKCk7Ci19Ci0KLXZvaWQgTGluZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRW
ZXJ0aWNhbEFsaWdubWVudDo6YWRqdXN0KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94JiBp
bmxpbmVMZXZlbEJveCkKLXsKLSAgICBhdXRvIGxheW91dEJvdW5kc0xvZ2ljYWxUb3AgPSBtX3Jv
b3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gaW5saW5lTGV2ZWxCb3gubGF5b3V0
Qm91bmRzKCkuYXNjZW50OwotICAgIG1fbGluZUJveExvZ2ljYWxUb3AgPSBzdGQ6Om1pbihtX2xp
bmVCb3hMb2dpY2FsVG9wLCBsYXlvdXRCb3VuZHNMb2dpY2FsVG9wKTsKLSAgICBtX2xpbmVCb3hM
b2dpY2FsQm90dG9tID0gc3RkOjptYXgobV9saW5lQm94TG9naWNhbEJvdHRvbSwgbGF5b3V0Qm91
bmRzTG9naWNhbFRvcCArIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpKTsK
LSAgICBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wID0gc3RkOjptYXgobV9yb290SW5saW5lQm94
TG9naWNhbFRvcCwgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbV9yb290
SW5saW5lQm94LmJhc2VsaW5lKCkpOwotfQotCi1MaW5lQm94IElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6bGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpM
aW5lQ29udGVudCYgbGluZUNvbnRlbnQpCi17Ci0gICAgcmV0dXJuIExpbmVCb3hCdWlsZGVyKGZv
cm1hdHRpbmdDb250ZXh0KCkpLmJ1aWxkKGxpbmVDb250ZW50KTsKLX0KLQotSW5saW5lTGF5b3V0
VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmxvZ2ljYWxUb3BGb3JOZXh0
TGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBJbmxpbmVM
YXlvdXRVbml0IHByZXZpb3VzTGluZUxvZ2ljYWxCb3R0b20sIGNvbnN0IEZsb2F0aW5nQ29udGV4
dCYgZmxvYXRpbmdDb250ZXh0KSBjb25zdAotewotICAgIC8vIE5vcm1hbGx5IHRoZSBuZXh0IGxp
bmUncyBsb2dpY2FsIHRvcCBpcyB0aGUgcHJldmlvdXMgbGluZSdzIGxvZ2ljYWwgYm90dG9tLCBi
dXQgd2hlbiB0aGUgbGluZSBlbmRzCi0gICAgLy8gd2l0aCB0aGUgY2xlYXIgcHJvcGVydHkgc2V0
LCB0aGUgbmV4dCBsaW5lIG5lZWRzIHRvIGNsZWFyIHRoZSBleGlzdGluZyBmbG9hdHMuCi0gICAg
aWYgKGxpbmVDb250ZW50LnJ1bnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcHJldmlvdXNM
aW5lTG9naWNhbEJvdHRvbTsKLSAgICBhdXRvJiBsYXN0UnVuTGF5b3V0Qm94ID0gbGluZUNvbnRl
bnQucnVucy5sYXN0KCkubGF5b3V0Qm94KCk7IAotICAgIGlmIChsYXN0UnVuTGF5b3V0Qm94LnN0
eWxlKCkuY2xlYXIoKSA9PSBDbGVhcjo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIHByZXZpb3VzTGlu
ZUxvZ2ljYWxCb3R0b207Ci0gICAgYXV0byBwb3NpdGlvbldpdGhDbGVhcmFuY2UgPSBmbG9hdGlu
Z0NvbnRleHQudmVydGljYWxQb3NpdGlvbldpdGhDbGVhcmFuY2UobGFzdFJ1bkxheW91dEJveCk7
Ci0gICAgaWYgKCFwb3NpdGlvbldpdGhDbGVhcmFuY2UpCi0gICAgICAgIHJldHVybiBwcmV2aW91
c0xpbmVMb2dpY2FsQm90dG9tOwotICAgIHJldHVybiBzdGQ6Om1heChwcmV2aW91c0xpbmVMb2dp
Y2FsQm90dG9tLCBJbmxpbmVMYXlvdXRVbml0KHBvc2l0aW9uV2l0aENsZWFyYW5jZS0+cG9zaXRp
b24pKTsKLX0KLQotQ29udGVudFdpZHRoQW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6aW5saW5lQmxvY2tDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBm
b3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGZvcm1hdHRpbmdDb250ZXh0Um9v
dC5pc0luRmxvdygpKTsKLQotICAgIC8vIDEwLjMuMTAgJ0lubGluZS1ibG9jaycsIHJlcGxhY2Vk
IGVsZW1lbnRzIGluIG5vcm1hbCBmbG93Ci0KLSAgICAvLyBFeGFjdGx5IGFzIGlubGluZSByZXBs
YWNlZCBlbGVtZW50cy4KLSAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHRSb290LmlzUmVwbGFjZWRC
b3goKSkKLSAgICAgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2lu
KGRvd25jYXN0PFJlcGxhY2VkQm94Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpLCBob3Jpem9udGFs
Q29uc3RyYWludHMsIHsgfSwgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOwotCi0gICAgLy8g
MTAuMy45ICdJbmxpbmUtYmxvY2snLCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZs
b3cKLQotICAgIC8vIElmICd3aWR0aCcgaXMgJ2F1dG8nLCB0aGUgdXNlZCB2YWx1ZSBpcyB0aGUg
c2hyaW5rLXRvLWZpdCB3aWR0aCBhcyBmb3IgZmxvYXRpbmcgZWxlbWVudHMuCi0gICAgLy8gQSBj
b21wdXRlZCB2YWx1ZSBvZiAnYXV0bycgZm9yICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdo
dCcgYmVjb21lcyBhIHVzZWQgdmFsdWUgb2YgJzAnLgotICAgIC8vICMxCi0gICAgYXV0byB3aWR0
aCA9IGNvbXB1dGVkVmFsdWUoZm9ybWF0dGluZ0NvbnRleHRSb290LnN0eWxlKCkubG9naWNhbFdp
ZHRoKCksIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOwotICAgIGlmICghd2lk
dGgpCi0gICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChmb3JtYXR0aW5nQ29udGV4dFJv
b3QsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOwotCi0gICAgLy8gIzIKLSAg
ICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6
b250YWxNYXJnaW4oZm9ybWF0dGluZ0NvbnRleHRSb290LCBob3Jpem9udGFsQ29uc3RyYWludHMp
OwotCi0gICAgcmV0dXJuIENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7ICp3aWR0aCwgeyBjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwX2x1KSwgY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLmVuZC52YWx1ZU9yKDBfbHUpIH0gfTsKLX0KLQotQ29udGVudEhlaWdodEFuZE1hcmdp
biBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZUJsb2NrQ29udGVudEhl
aWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIEFTU0VSVChsYXlv
dXRCb3guaXNJbkZsb3coKSk7Ci0KLSAgICAvLyAxMC42LjIgSW5saW5lIHJlcGxhY2VkIGVsZW1l
bnRzLCBibG9jay1sZXZlbCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdywgJ2lubGlu
ZS1ibG9jaycgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJl
cGxhY2VkIGVsZW1lbnRzCi0gICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAg
ICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNhc3Q8
UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCBvdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMpOwotCi0gICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2Vz
Ci0gICAgLy8gLSAnSW5saW5lLWJsb2NrJywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzLgotICAgIHJl
dHVybiBjb21wbGljYXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBv
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotfQotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWJlNjVkYWQ1Y2M1ZjU2YjI5ZWIwNzAzZTZj
ZGM5NDM5MGFjMmE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklubGluZUZv
cm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKLQotI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1JbmxpbmVMYXlvdXRVbml0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpRdWlya3M6OmluaXRpYWxMaW5lSGVpZ2h0KCkgY29uc3QKLXsKLSAgICAvLyBO
ZWdhdGl2ZSBsaW5lSGVpZ2h0IHZhbHVlIG1lYW5zIHRoZSBsaW5lLWhlaWdodCBpcyBub3Qgc2V0
Ci0gICAgYXV0byYgcm9vdCA9IGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpOwotICAgIGlmIChs
YXlvdXRTdGF0ZSgpLmluU3RhbmRhcmRzTW9kZSgpIHx8ICFyb290LnN0eWxlKCkubGluZUhlaWdo
dCgpLmlzTmVnYXRpdmUoKSkKLSAgICAgICAgcmV0dXJuIHJvb3Quc3R5bGUoKS5jb21wdXRlZExp
bmVIZWlnaHQoKTsKLSAgICByZXR1cm4gcm9vdC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuZmxvYXRI
ZWlnaHQoKTsKLX0KLQotYm9vbCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjppbmxp
bmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94JiBp
bmxpbmVMZXZlbEJveCwgY29uc3QgTGluZUJveCYgbGluZUJveCkgY29uc3QKLXsKLSAgICBpZiAo
aW5saW5lTGV2ZWxCb3guaXNMaW5lQnJlYWtCb3goKSkgewotICAgICAgICBpZiAobGF5b3V0U3Rh
dGUoKS5pblN0YW5kYXJkc01vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAvLyBJbiBxdWlya3MgbW9kZSBsaW5lYnJlYWsgYm94ZXMgKDxicj4pIHN0b3AgYWZmZWN0aW5n
IHRoZSBsaW5lIGJveCB3aGVuIChhc3N1bWUgPGJyPiBpcyBuZXN0ZWQgZS5nLiA8c3BhbiBzdHls
ZT0iZm9udC1zaXplOiAxMDBweCI+PGJyPjwvc3Bhbj4pCi0gICAgICAgIC8vIDEuIHRoZSByb290
IGlubGluZSBib3ggaGFzIGNvbnRlbnQgPGRpdj5jb250ZW50PGJyPi9kaXY+Ci0gICAgICAgIC8v
IDIuIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGF0b21pYyBpbmxpbmUgbGV2ZWwgYm94IG9uIHRoZSBs
aW5lIGUuZyA8ZGl2PjxpbWc+PGJyPjwvZGl2PiBvciA8ZGl2PjxzcGFuPjxpbWc+PC9zcGFuPjxi
cj48L2Rpdj4KLSAgICAgICAgLy8gMy4gdGhlcmUncyBhdCBsZWFzdCBvbmUgaW5saW5lIGJveCB3
aXRoIGNvbnRlbnQgZS5nLiA8ZGl2PjxzcGFuPmNvbnRlbnQ8L3NwYW4+PGJyPjwvZGl2PgotICAg
ICAgICBpZiAobGluZUJveC5yb290SW5saW5lQm94KCkuaGFzQ29udGVudCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobGluZUJveC5oYXNBdG9taWNJbmxpbmVMZXZl
bEJveCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBBdCB0aGlzIHBv
aW50IHdlIGVpdGhlciBoYXZlIG9ubHkgdGhlIDxicj4gb24gdGhlIGxpbmUgb3IgaW5saW5lIGJv
eGVzIHdpdGggb3Igd2l0aG91dCBjb250ZW50LgotICAgICAgICBhdXRvJiBpbmxpbmVMZXZlbEJv
eGVzID0gbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpOwotICAgICAgICBBU1NFUlQo
IWlubGluZUxldmVsQm94ZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgaWYgKGlubGluZUxldmVsQm94
ZXMuc2l6ZSgpID09IDEpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZm9yIChh
dXRvJiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVsQm94ZXMoKSkg
ewotICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBlbXB0eSBpbmxpbmUgYm94ZXMgZS5nLiA8ZGl2
PjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PGJyPjwvZGl2PgotICAgICAgICAgICAgaWYgKGlu
bGluZUxldmVsQm94LmlzSW5saW5lQm94KCkgJiYgaW5saW5lTGV2ZWxCb3guaGFzQ29udGVudCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGlubGluZUxldmVsQm94LmlzSW5saW5lQm94KCkpIHsK
LSAgICAgICAgLy8gSW5saW5lIGJveGVzIChlLmcuIHJvb3QgaW5saW5lIGJveCBvciA8c3Bhbj4p
IGFmZmVjdHMgbGluZSBib3hlcyBlaXRoZXIgdGhyb3VnaCB0aGUgc3RydXQgb3IgYWN0dWFsIGNv
bnRlbnQuCi0gICAgICAgIGF1dG8gaW5saW5lQm94SGFzSW1hZ2luYXJ5U3RydXQgPSBsYXlvdXRT
dGF0ZSgpLmluU3RhbmRhcmRzTW9kZSgpOwotICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3guaGFz
Q29udGVudCgpIHx8IGlubGluZUJveEhhc0ltYWdpbmFyeVN0cnV0KQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc1Jvb3RJbmxpbmVCb3goKSkg
ewotICAgICAgICAgICAgYXV0byBzaG91bGRSb290SW5saW5lQm94V2l0aE5vQ29udGVudFN0cmV0
Y2hMaW5lQm94ID0gWyZdIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3gubGF5
b3V0Qm94KCkuc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHJvb3QgaW5saW5l
IGJveCB3aXRoIG5vbi1pbml0aWFsIGxpbmUgaGVpZ2h0IHZhbHVlIHN0cmV0Y2hlcyB0aGUgbGlu
ZSBib3ggZXZlbiB3aGVuIHJvb3QgaGFzIG5vIGNvbnRlbnQKLSAgICAgICAgICAgICAgICAvLyBi
dXQgdGhlcmUncyBhdCBsZWFzdCBvbmUgaW5saW5lIGJveCB3aXRoIGNvbnRlbnQuCi0gICAgICAg
ICAgICAgICAgLy8gZS5nLiA8ZGl2IHN0eWxlPSJsaW5lLWhlaWdodDogMTAwcHg7Ij48c3Bhbj5j
b250ZW50PC9zcGFuPjwvZGl2PgotICAgICAgICAgICAgICAgIGlmICghbGluZUJveC5oYXNJbmxp
bmVCb3goKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94Lm5vblJvb3RJbmxpbmVMZXZl
bEJveGVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVMZXZlbEJveC5pc0lu
bGluZUJveCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChpbmxpbmVMZXZlbEJveC5oYXNDb250ZW50KCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHJldHVybiBzaG91
bGRSb290SW5saW5lQm94V2l0aE5vQ29udGVudFN0cmV0Y2hMaW5lQm94KCk7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gTm9uLXJvb3QgaW5saW5lIGJveGVzIChlLmcuIDxzcGFuPikuCi0gICAgICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKSk7Ci0gICAgICAgIGlmIChib3hHZW9tZXRyeS5ob3Jp
em9udGFsQm9yZGVyKCkgfHwgYm94R2VvbWV0cnkuaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1ZU9y
KDBfbHUpKSB7Ci0gICAgICAgICAgICAvLyBIb3Jpem9udGFsIGJvcmRlciBhbmQgcGFkZGluZyBt
YWtlIHRoZSBpbmxpbmUgYm94IHN0cmV0Y2ggdGhlIGxpbmUgKGUuZy4gPHNwYW4gc3R5bGU9InBh
ZGRpbmc6IDEwcHg7Ij48L3NwYW4+KS4KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGlubGluZUxldmVsQm94
LmlzQXRvbWljSW5saW5lTGV2ZWxCb3goKSkgewotICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgLy8gV2hpbGUgaW4gcHJhY3RpY2Ugd2hlbiB0aGUgbmVnYXRpdmUgdmVydGljYWwgbWFyZ2lu
IG1ha2VzIHRoZSBsYXlvdXQgYm91bmRzIGVtcHR5IChlLmc6IGhlaWdodDogMTAwcHg7IG1hcmdp
bi10b3A6IC0xMDBweDspLCBhbmQgdGhpcyBpbmxpbmUKLSAgICAgICAgLy8gbGV2ZWwgYm94IGNv
bnRyaWJ1dGVzIDBweCB0byB0aGUgbGluZSBib3ggaGVpZ2h0LCBpdCBzdGlsbCBuZWVkcyB0byBi
ZSB0YWtlbiBpbnRvIGFjY291bnQgd2hpbGUgY29tcHV0aW5nIGxpbmUgYm94IGdlb21ldHJpZXMu
Ci0gICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRy
eUZvckJveChpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKSk7Ci0gICAgICAgIHJldHVybiBib3hH
ZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSB8fCBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OlF1aXJrczo6aGFzU29mdFdyYXBPcHBvcnR1bml0eUF0SW1hZ2UoKSBjb25zdAotewotICAgIHJl
dHVybiAhZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCkuaXNUYWJsZUNlbGwoKTsKLX0KLQotfQot
fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2Vv
bWV0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4ZjQ3NTFmNTk1NzMwZDJhMjVmZTgwOTc0YWNlMzRkYjE3
YmY4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEs
NzQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCisKKyNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJGb3JtYXR0
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdRdWlya3MuaCIKKyNpbmNs
dWRlICJJbmxpbmVMaW5lQm94LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCisjaW5jbHVkZSAi
TGF5b3V0Q29udGFpbmVyQm94LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIKKyNp
bmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIExheW91dCB7CisKK2NsYXNzIExpbmVCb3hCdWlsZGVyIHsKK3B1YmxpYzoKKyAgICBMaW5l
Qm94QnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOworICAgIExpbmVCb3gg
YnVpbGQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50Jik7CisKK3ByaXZhdGU6CisgICAg
c3RydWN0IFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudCB7CisgICAgICAgIFNpbXBsaWZpZWRW
ZXJ0aWNhbEFsaWdubWVudChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgcm9vdElubGlu
ZUJveCk7CisKKyAgICAgICAgc3RhdGljIGJvb2wgY2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChj
b25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgcm9vdElubGluZUJveCwgY29uc3QgTGluZUJv
eDo6SW5saW5lTGV2ZWxCb3gmLCBPcHRpb25hbDxjb25zdCBCb3hHZW9tZXRyeT4gaW5saW5lTGV2
ZWxCb3hHZW9tZXRyeSk7CisKKyAgICAgICAgdm9pZCBhbGlnbihMaW5lQm94OjpJbmxpbmVMZXZl
bEJveCYpOworCisgICAgICAgIElubGluZUxheW91dFVuaXQgcm9vdElubGluZUJveExvZ2ljYWxU
b3AoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wOyB9CisgICAgICAg
IElubGluZUxheW91dFVuaXQgbGluZUJveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJv
eExvZ2ljYWxCb3R0b20gLSBtX2xpbmVCb3hMb2dpY2FsVG9wOyB9CisKKyAgICAgICAgdm9pZCBz
ZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2lzRW5hYmxlZCA9IGVuYWJsZWQ7IH0KKyAgICAg
ICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRW5hYmxlZDsgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgdm9pZCBhZGp1c3QoY29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxC
b3gmKTsKKworICAgICAgICBjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgbV9yb290SW5s
aW5lQm94OworICAgICAgICBib29sIG1faXNFbmFibGVkIHsgdHJ1ZSB9OworICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IG1fbGluZUJveExvZ2ljYWxUb3AgeyAwIH07CisgICAgICAgIElubGluZUxh
eW91dFVuaXQgbV9saW5lQm94TG9naWNhbEJvdHRvbSB7IDAgfTsKKyAgICAgICAgSW5saW5lTGF5
b3V0VW5pdCBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wIHsgMCB9OworICAgIH07CisKKyAgICB2
b2lkIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goTGluZUJveDo6SW5saW5lTGV2ZWxC
b3gmKSBjb25zdDsKKyAgICB2b2lkIGNvbnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhM
aW5lQm94JiwgY29uc3QgTGluZTo6UnVuTGlzdCYpOworICAgIHZvaWQgY29tcHV0ZUxpbmVCb3hI
ZWlnaHRBbmRBbGlnbklubGluZUxldmVsQm94ZXNWZXJ0aWNhbGx5KExpbmVCb3gmKTsKKworICAg
IGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KKyAgICBjb25zdCBCb3gmIHJv
b3RCb3goKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKTsgfQorICAg
IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250
ZXh0KCkubGF5b3V0U3RhdGUoKTsgfQorCisgICAgYm9vbCBpc1Jvb3RMYXlvdXRCb3goY29uc3Qg
Q29udGFpbmVyQm94JiBjb250YWluZXJCb3gpIGNvbnN0IHsgcmV0dXJuICZjb250YWluZXJCb3gg
PT0gJnJvb3RCb3goKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworfTsKKworc3RydWN0IEhhbmdpbmdU
cmFpbGluZ1doaXRlc3BhY2VDb250ZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHJlc2V0KCk7CisK
KyAgICBJbmxpbmVMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIGJvb2wgaXNDb25kaXRpb25hbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb25kaXRpb25hbDsg
fQorCisgICAgdm9pZCBzZXRJc0NvbmRpdGlvbmFsKCkgeyBtX2lzQ29uZGl0aW9uYWwgPSB0cnVl
OyB9CisgICAgdm9pZCBleHBhbmQoSW5saW5lTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3dpZHRoICs9
IHdpZHRoOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzQ29uZGl0aW9uYWwgeyBmYWxzZSB9
OworICAgIElubGluZUxheW91dFVuaXQgbV93aWR0aCB7IDAgfTsKK307CisKK3ZvaWQgSGFuZ2lu
Z1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRlbnQ6OnJlc2V0KCkKK3sKKyAgICBtX2lzQ29uZGl0aW9u
YWwgPSBmYWxzZTsKKyAgICBtX3dpZHRoID0gIDA7Cit9CisKK3N0YXRpYyBIYW5naW5nVHJhaWxp
bmdXaGl0ZXNwYWNlQ29udGVudCBjb2xsZWN0SGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRl
bnQoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucywgYm9vbCBpc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQpCit7CisgICAgYXV0byBoYW5naW5nQ29udGVudCA9IEhhbmdpbmdUcmFpbGluZ1doaXRl
c3BhY2VDb250ZW50IHsgfTsKKyAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQor
ICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7CisgICAgZm9yIChhdXRv
JiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKHJ1bnMpKSB7CisgICAgICAgIGlmIChydW4u
aXNJbmxpbmVCb3hTdGFydCgpIHx8IHJ1bi5pc0lubGluZUJveEVuZCgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAg
aGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFydW4uaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHByZXNlcnZl
ZCBvciBodW5nIHdoaXRlc3BhY2UuCisgICAgICAgIGlmIChydW4uc3R5bGUoKS53aGl0ZVNwYWNl
KCkgIT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAv
LyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBjb25kaXRpb25hbGx5IGhhbmdpbmcgdHJhaWxp
bmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaGFuZ2luZ0NvbnRlbnQuZXhwYW5kKHJ1bi50cmFpbGlu
Z1doaXRlc3BhY2VXaWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGhhbmdpbmdDb250ZW50Owor
fQorCitzdGF0aWMgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gaG9yaXpvbnRhbEFsaWdubWVu
dE9mZnNldChjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBUZXh0QWxpZ25Nb2RlIHRleHRBbGln
biwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGNv
bnRlbnRMb2dpY2FsV2lkdGgsIGJvb2wgaXNMYXN0TGluZSkKK3sKKyAgICBhdXRvIGF2YWlsYWJs
ZVdpZHRoID0gbGluZUxvZ2ljYWxXaWR0aCAtIGNvbnRlbnRMb2dpY2FsV2lkdGg7CisgICAgYXV0
byBoYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudCA9IGNvbGxlY3RIYW5naW5nVHJhaWxp
bmdXaGl0ZXNwYWNlQ29udGVudChydW5zLCBpc0xhc3RMaW5lKTsKKyAgICBhdmFpbGFibGVXaWR0
aCArPSBoYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudC53aWR0aCgpOworICAgIGlmIChh
dmFpbGFibGVXaWR0aCA8PSAwKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBjb21w
dXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0geworICAgICAgICBpZiAodGV4dEFsaWduICE9
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisgICAgICAgICAgICByZXR1cm4gdGV4dEFsaWduOwor
ICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVj
aWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKKyAgICAgICAgLy8gaW4gb3JkZXIg
dG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQg
YnkgdGV4dC1hbGlnbi1sYXN0LAorICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZv
cmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgorICAg
ICAgICBpZiAoaXNMYXN0TGluZSB8fCAoIXJ1bnMuaXNFbXB0eSgpICYmIHJ1bnMubGFzdCgpLmlz
TGluZUJyZWFrKCkpKQorICAgICAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6OlN0YXJ0Owor
ICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKKyAgICB9OworCisgICAgc3dp
dGNoIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQoKSkgeworICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6TGVmdDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OlJpZ2h0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6
CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgIHJldHVybiBhdmFpbGFibGVX
aWR0aDsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKKyAgICBjYXNlIFRleHRBbGln
bk1vZGU6OldlYktpdENlbnRlcjoKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVdpZHRoIC8gMjsK
KyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgICAgIC8vIFRleHRBbGlnbk1v
ZGU6Okp1c3RpZnkgaXMgYSBydW4gYWxpZ25tZW50IChhbmQgd2Ugb25seSBkbyBpbmxpbmUgYm94
IGFsaWdubWVudCBoZXJlKQorICAgICAgICByZXR1cm4geyB9OworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK0xp
bmVCb3hCdWlsZGVyOjpMaW5lQm94QnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250
ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQoreworfQorCitMaW5lQm94IExpbmVCb3hCdWls
ZGVyOjpidWlsZChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50KQor
eworICAgIGF1dG8mIHJ1bnMgPSBsaW5lQ29udGVudC5ydW5zOworICAgIGF1dG8gbGluZUxvZ2lj
YWxXaWR0aCA9IGxpbmVDb250ZW50LmxpbmVMb2dpY2FsV2lkdGg7CisgICAgYXV0byBjb250ZW50
TG9naWNhbFdpZHRoID0gbGluZUNvbnRlbnQuY29udGVudExvZ2ljYWxXaWR0aDsKKyAgICBhdXRv
IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQgPSBMYXlvdXQ6Omhvcml6b250YWxBbGlnbm1lbnRP
ZmZzZXQocnVucywgcm9vdEJveCgpLnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmVMb2dpY2FsV2lk
dGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGxpbmVDb250ZW50LmlzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudCk7CisgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7IHJvb3RCb3goKSwgbGluZUNv
bnRlbnQubG9naWNhbFRvcExlZnQsIGxpbmVMb2dpY2FsV2lkdGgsIGhvcml6b250YWxBbGlnbm1l
bnRPZmZzZXQudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSksIGNvbnRlbnRMb2dpY2FsV2lk
dGgsIGxpbmVDb250ZW50Lm5vblNwYW5uaW5nSW5saW5lTGV2ZWxCb3hDb3VudCB9OworICAgIGNv
bnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhsaW5lQm94LCBydW5zKTsKKyAgICByZXR1
cm4gbGluZUJveDsKK30KKwordm9pZCBMaW5lQm94QnVpbGRlcjo6c2V0VmVydGljYWxHZW9tZXRy
eUZvcklubGluZUJveChMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgaW5saW5lTGV2ZWxCb3gpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlubGluZUxldmVsQm94LmlzSW5saW5lQm94KCkgfHwgaW5saW5l
TGV2ZWxCb3guaXNMaW5lQnJlYWtCb3goKSk7CisgICAgYXV0byYgZm9udE1ldHJpY3MgPSBpbmxp
bmVMZXZlbEJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAgSW5saW5lTGF5b3V0VW5pdCBh
c2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKKyAgICBJbmxpbmVMYXlvdXRVbml0IGRlc2Nl
bnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7CisgICAgYXV0byBsb2dpY2FsSGVpZ2h0ID0gYXNj
ZW50ICsgZGVzY2VudDsKKyAgICAvLyBXZSBuZWVkIGZsb29yL2NlaWwgdG8gbWF0Y2ggbGVnYWN5
IGxheW91dCBpbnRlZ3JhbCBwb3NpdGlvbmluZy4KKyAgICBpbmxpbmVMZXZlbEJveC5zZXRCYXNl
bGluZShmbG9vcmYoYXNjZW50KSk7CisgICAgaW5saW5lTGV2ZWxCb3guc2V0RGVzY2VudChjZWls
KGRlc2NlbnQpKTsKKyAgICBpbmxpbmVMZXZlbEJveC5zZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxI
ZWlnaHQpOworCisgICAgLy8gRklYTUU6IEFkanVzdCBsYXlvdXQgYm91bmRzIHdpdGggZmFsbGJh
Y2sgZm9udCB3aGVuIGFwcGxpY2FibGUuCisgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVMZXZlbEJv
eC5sYXlvdXRCb3goKS5zdHlsZSgpOworICAgIGF1dG8gbGluZUhlaWdodCA9IHN0eWxlLmxpbmVI
ZWlnaHQoKTsKKyAgICBpZiAobGluZUhlaWdodC5pc05lZ2F0aXZlKCkpIHsKKyAgICAgICAgLy8g
SWYgbGluZS1oZWlnaHQgY29tcHV0ZXMgdG8gbm9ybWFsIGFuZCBlaXRoZXIgdGV4dC1lZGdlIGlz
IGxlYWRpbmcgb3IgdGhpcyBpcyB0aGUgcm9vdCBpbmxpbmUgYm94LAorICAgICAgICAvLyB0aGUg
Zm9udOKAmXMgbGluZSBnYXAgbWV0cmljIG1heSBhbHNvIGJlIGluY29ycG9yYXRlZCBpbnRvIEEg
YW5kIEQgYnkgYWRkaW5nIGhhbGYgdG8gZWFjaCBzaWRlIGFzIGhhbGYtbGVhZGluZy4KKyAgICAg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1pbmxpbmUtMy8jaW5saW5lLWhlaWdodAor
ICAgICAgICAvLyBTaW5jZSB0ZXh0LWVkZ2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQgYW5kIHRoZSBp
bml0aWFsIHZhbHVlIGlzIGxlYWRpbmcsIHdlIHNob3VsZCBqdXN0IGFwcGx5IGl0IHRvCisgICAg
ICAgIC8vIGFsbCBpbmxpbmUgYm94ZXMuCisgICAgICAgIGF1dG8gaGFsZkxpbmVHYXAgPSAoZm9u
dE1ldHJpY3MubGluZVNwYWNpbmcoKSAtIGxvZ2ljYWxIZWlnaHQpIC8gMjsKKyAgICAgICAgYXNj
ZW50ICs9IGhhbGZMaW5lR2FwOworICAgICAgICBkZXNjZW50ICs9IGhhbGZMaW5lR2FwOworICAg
IH0gZWxzZSB7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbGluZUhlaWdodCA9IHN0eWxlLmNv
bXB1dGVkTGluZUhlaWdodCgpOworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGhhbGZMZWFkaW5n
ID0gKGxpbmVIZWlnaHQgLSAoYXNjZW50ICsgZGVzY2VudCkpIC8gMjsKKyAgICAgICAgYXNjZW50
ICs9IGhhbGZMZWFkaW5nOworICAgICAgICBkZXNjZW50ICs9IGhhbGZMZWFkaW5nOworICAgIH0K
KyAgICAvLyBXZSBuZWVkIGZsb29yL2NlaWwgdG8gbWF0Y2ggbGVnYWN5IGxheW91dCBpbnRlZ3Jh
bCBwb3NpdGlvbmluZy4KKyAgICBpbmxpbmVMZXZlbEJveC5zZXRMYXlvdXRCb3VuZHMoTGluZUJv
eDo6SW5saW5lTGV2ZWxCb3g6OkxheW91dEJvdW5kcyB7IGZsb29yZihhc2NlbnQpLCBjZWlsKGRl
c2NlbnQpIH0pOworfQorCit2b2lkIExpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RBbmRBbGlnbklu
bGluZUxldmVsQm94ZXMoTGluZUJveCYgbGluZUJveCwgY29uc3QgTGluZTo6UnVuTGlzdCYgcnVu
cykKK3sKKyAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGluZUJveC5yb290SW5saW5lQm94KCk7
CisgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChyb290SW5saW5lQm94KTsKKwor
ICAgIGF1dG8gc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50ID0gU2ltcGxpZmllZFZlcnRpY2Fs
QWxpZ25tZW50IHsgcm9vdElubGluZUJveCB9OworICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBwYXRo
IHN1cHBvcnQgZm9yIGxpbmUtaGVpZ2h0IGNvbnRlbnQuCisgICAgc2ltcGxpZmllZFZlcnRpY2Fs
QWxpZ25tZW50LnNldEVuYWJsZWQobGF5b3V0U3RhdGUoKS5pblN0YW5kYXJkc01vZGUoKSAmJiBy
b290Qm94KCkuc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpKTsKKworICAgIGF1dG8g
c2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZSA9IFsmXShhdXRvJiBpbmxpbmVM
ZXZlbEJveCwgT3B0aW9uYWw8Y29uc3QgQm94R2VvbWV0cnk+IGJveEdlb21ldHJ5KSB7CisgICAg
ICAgIGlmICghc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LmlzRW5hYmxlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIVNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudDo6
Y2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChyb290SW5saW5lQm94LCBpbmxpbmVMZXZlbEJveCwg
Ym94R2VvbWV0cnkpKSB7CisgICAgICAgICAgICBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQu
c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LmFsaWduKGlubGluZUxldmVsQm94KTsKKyAg
ICB9OworCisgICAgYXV0byBjcmVhdGVXcmFwcGVkSW5saW5lQm94ZXMgPSBbJl0geworICAgICAg
ICBpZiAocnVucy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIEFu
IGlubGluZSBib3ggbWF5IG5vdCBuZWNlc3NhcmlseSBzdGFydCBvbiB0aGUgY3VycmVudCBsaW5l
OgorICAgICAgICAvLyA8c3BhbiBpZD1vdXRlcj5saW5lIGJyZWFrPGJyPnRoaXMgY29udGVudCdz
IHBhcmVudCBpbmxpbmUgYm94KCdvdXRlcicpIDxzcGFuIGlkPWlubmVyPnN0YXJ0cyBvbiB0aGUg
cHJldmlvdXMgbGluZTwvc3Bhbj48L3NwYW4+CisgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRoYXQgdGhlcmUncyBhbiBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCBmb3IgZXZlcnkgaW5s
aW5lIGJveCB0aGF0J3MgcHJlc2VudCBvbiB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICAvLyBJ
biBuZXN0aW5nIGNhc2Ugd2UgbmVlZCB0byBjcmVhdGUgTGluZUJveDo6SW5saW5lTGV2ZWxCb3hl
cyBmb3IgdGhlIGlubGluZSBib3ggYW5jZXN0b3JzLgorICAgICAgICAvLyBXZSBvbmx5IGhhdmUg
dG8gZG8gaXQgb24gdGhlIGZpcnN0IHJ1biBhcyBhbnkgc3Vic2VxdWVudCBpbmxpbmUgY29udGVu
dCBpcyBlaXRoZXIgYXQgdGhlIHNhbWUvaGlnaGVyIG5lc3RpbmcgbGV2ZWwgb3IKKyAgICAgICAg
Ly8gbmVzdGVkIHdpdGggYSBbaW5saW5lIGJveCBzdGFydF0gcnVuLgorICAgICAgICBhdXRvJiBm
aXJzdFJ1biA9IHJ1bnNbMF07CisgICAgICAgIGF1dG8mIGZpcnN0UnVuUGFyZW50TGF5b3V0Qm94
ID0gZmlyc3RSdW4ubGF5b3V0Qm94KCkucGFyZW50KCk7CisgICAgICAgIC8vIElmIHRoZSBwYXJl
bnQgaXMgdGhlIGZvcm1hdHRpbmcgcm9vdCwgd2UgY2FuIHN0b3AgaGVyZS4gVGhpcyBpcyByb290
IGlubGluZSBib3ggY29udGVudCwgdGhlcmUncyBubyBuZXN0aW5nIGlubGluZSBib3ggZnJvbSB0
aGUgcHJldmlvdXMgbGluZShzKQorICAgICAgICAvLyB1bmxlc3MgdGhlIGlubGluZSBib3ggY2xv
c2luZyBpcyBmb3JjZWQgb3ZlciB0byB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICAvLyBlLmcu
CisgICAgICAgIC8vIDxzcGFuPm5vcm1hbGx5IHRoZSBpbmxpbmUgYm94IGNsb3NpbmcgZm9ybXMg
YSBjb250aW51b3VzIGNvbnRlbnQ8L3NwYW4+CisgICAgICAgIC8vIDxzcGFuPnVubGVzcyBpdCdz
IGZvcmNlZCB0byB0aGUgbmV4dCBsaW5lPGJyPjwvc3Bhbj4KKyAgICAgICAgYXV0byBmaXJzdFJ1
bk5lZWRzSW5saW5lQm94ID0gZmlyc3RSdW4uaXNJbmxpbmVCb3hFbmQoKTsKKyAgICAgICAgaWYg
KCFmaXJzdFJ1bk5lZWRzSW5saW5lQm94ICYmIGlzUm9vdExheW91dEJveChmaXJzdFJ1blBhcmVu
dExheW91dEJveCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFZlY3Rvcjxjb25zdCBC
b3gqPiBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlczsKKyAgICAgICAgaWYgKGZpcnN0UnVu
TmVlZHNJbmxpbmVCb3gpCisgICAgICAgICAgICBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hl
cy5hcHBlbmQoJmZpcnN0UnVuLmxheW91dEJveCgpKTsKKyAgICAgICAgYXV0byogYW5jZXN0b3Ig
PSAmZmlyc3RSdW5QYXJlbnRMYXlvdXRCb3g7CisgICAgICAgIHdoaWxlICghaXNSb290TGF5b3V0
Qm94KCphbmNlc3RvcikpIHsKKyAgICAgICAgICAgIGxheW91dEJveGVzV2l0aG91dElubGluZUJv
eGVzLmFwcGVuZChhbmNlc3Rvcik7CisgICAgICAgICAgICBhbmNlc3RvciA9ICZhbmNlc3Rvci0+
cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBtaXNzaW5nIExp
bmVCb3g6OklubGluZUJveGVzIHN0YXJ0aW5nIHdpdGggdGhlIHRvcG1vc3QgbGF5b3V0IGJveC4K
KyAgICAgICAgZm9yIChhdXRvKiBsYXlvdXRCb3ggOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKGxh
eW91dEJveGVzV2l0aG91dElubGluZUJveGVzKSkgeworICAgICAgICAgICAgYXV0byBpbmxpbmVC
b3ggPSBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KCpsYXlvdXRCb3gs
IHJvb3RJbmxpbmVCb3gubG9naWNhbExlZnQoKSwgbGluZUJveC5jb250ZW50TG9naWNhbFdpZHRo
KCkpOworICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChpbmxpbmVC
b3gpOworICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZShp
bmxpbmVCb3gsIHsgfSk7CisgICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdU
Rk1vdmUoaW5saW5lQm94KSk7CisgICAgICAgIH0KKyAgICB9OworICAgIGNyZWF0ZVdyYXBwZWRJ
bmxpbmVCb3hlcygpOworCisgICAgYXV0byBsaW5lSGFzQ29udGVudCA9IGZhbHNlOworICAgIGZv
ciAoYXV0byYgcnVuIDogcnVucykgeworICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5
b3V0Qm94KCk7CisgICAgICAgIGF1dG8gcnVuSGFzQ29udGVudCA9IFsmXSAoKSAtPiBib29sIHsK
KyAgICAgICAgICAgIEFTU0VSVCghbGluZUhhc0NvbnRlbnQpOworICAgICAgICAgICAgaWYgKHJ1
bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSB8fCBydW4uaXNTb2Z0TGluZUJyZWFrKCkgfHwgcnVu
LmlzSGFyZExpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgYXV0byYgaW5saW5lQm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21l
dHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICAvLyBFdmVuIG5lZ2F0aXZlIGhvcml6
b250YWwgbWFyZ2luIG1ha2VzIHRoZSBsaW5lICJjb250ZW50ZnVsIi4KKyAgICAgICAgICAgIGlm
IChydW4uaXNJbmxpbmVCb3hTdGFydCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVC
b3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpIHx8IGlubGluZUJveEdlb21ldHJ5LmJvcmRlckxlZnQo
KSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMF9sdSk7CisgICAg
ICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94RW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGlubGluZUJveEdlb21ldHJ5Lm1hcmdpbkVuZCgpIHx8IGlubGluZUJveEdlb21ldHJ5LmJvcmRl
clJpZ2h0KCkgfHwgaW5saW5lQm94R2VvbWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwX2x1
KTsKKyAgICAgICAgICAgIGlmIChydW4uaXNXb3JkQnJlYWtPcHBvcnR1bml0eSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisgICAgICAgIGxpbmVIYXND
b250ZW50ID0gbGluZUhhc0NvbnRlbnQgfHwgcnVuSGFzQ29udGVudCgpOworICAgICAgICBhdXRv
IGxvZ2ljYWxMZWZ0ID0gcm9vdElubGluZUJveC5sb2dpY2FsTGVmdCgpICsgcnVuLmxvZ2ljYWxM
ZWZ0KCk7CisgICAgICAgIGlmIChydW4uaXNCb3goKSkgeworICAgICAgICAgICAgYXV0byYgaW5s
aW5lTGV2ZWxCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3go
bGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gaW5saW5lTGV2
ZWxCb3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKKyAgICAgICAgICAgIGF1dG8gYXNjZW50
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUoKS5z
aG91bGROb3RTeW50aGVzaXplSW5saW5lQmxvY2tCYXNlbGluZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gSW50ZWdyYXRpb24gY29kZXBhdGggY29uc3RydWN0cyByZXBsYWNlZCBib3hlcyBmb3Ig
aW5saW5lLWJsb2NrIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgQVNTRVJUKGxheW91dEJveC5p
c1JlcGxhY2VkQm94KCkpOworICAgICAgICAgICAgICAgIGFzY2VudCA9ICpkb3duY2FzdDxSZXBs
YWNlZEJveD4obGF5b3V0Qm94KS5iYXNlbGluZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChs
YXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGJh
c2VsaW5lIG9mIGFuICdpbmxpbmUtYmxvY2snIGlzIHRoZSBiYXNlbGluZSBvZiBpdHMgbGFzdCBs
aW5lIGJveCBpbiB0aGUgbm9ybWFsIGZsb3csIHVubGVzcyBpdCBoYXMgZWl0aGVyIG5vIGluLWZs
b3cgbGluZSBib3hlcyBvcgorICAgICAgICAgICAgICAgIC8vIGlmIGl0cyAnb3ZlcmZsb3cnIHBy
b3BlcnR5IGhhcyBhIGNvbXB1dGVkIHZhbHVlIG90aGVyIHRoYW4gJ3Zpc2libGUnLCBpbiB3aGlj
aCBjYXNlIHRoZSBiYXNlbGluZSBpcyB0aGUgYm90dG9tIG1hcmdpbiBlZGdlLgorICAgICAgICAg
ICAgICAgIGF1dG8gc3ludGhlc2l6ZUJhc2VsaW5lID0gIWxheW91dEJveC5lc3RhYmxpc2hlc0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0KCkgfHwgIWxheW91dEJveC5zdHlsZSgpLmlzT3ZlcmZsb3dW
aXNpYmxlKCk7CisgICAgICAgICAgICAgICAgaWYgKHN5bnRoZXNpemVCYXNlbGluZSkKKyAgICAg
ICAgICAgICAgICAgICAgYXNjZW50ID0gbWFyZ2luQm94SGVpZ2h0OworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlv
dXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRh
aW5lckJveD4obGF5b3V0Qm94KSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGxhc3RMaW5l
ID0gZm9ybWF0dGluZ1N0YXRlLmxpbmVzKCkubGFzdCgpOworICAgICAgICAgICAgICAgICAgICBh
dXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBsYXN0TGluZS5saW5lQm94TG9naWNhbFJlY3QoKS50
b3AoKSArIGxhc3RMaW5lLmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGFzY2VudCA9
IGlubGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBpbmxpbmVMZXZlbEJveEdl
b21ldHJ5LmJvcmRlclRvcCgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5wYWRkaW5nVG9wKCku
dmFsdWVPcigwKSArIGlubGluZUJsb2NrQmFzZWxpbmU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQorICAgICAgICAg
ICAgICAgIGFzY2VudCA9IGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLmJhc2VsaW5l
KCkudmFsdWVPcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGFzY2VudCA9IG1hcmdpbkJveEhlaWdodDsKKyAgICAgICAgICAgIGxvZ2ljYWxMZWZ0
ICs9IHN0ZDo6bWF4KDBfbHUsIGlubGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKSk7
CisgICAgICAgICAgICBhdXRvIGF0b21pY0lubGluZUxldmVsQm94ID0gTGluZUJveDo6SW5saW5l
TGV2ZWxCb3g6OmNyZWF0ZUF0b21pY0lubGluZUxldmVsQm94KGxheW91dEJveCwgbG9naWNhbExl
ZnQsIHsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5ib3JkZXJCb3hXaWR0aCgpLCBtYXJnaW5Cb3hI
ZWlnaHQgfSk7CisgICAgICAgICAgICBhdG9taWNJbmxpbmVMZXZlbEJveC5zZXRCYXNlbGluZShh
c2NlbnQpOworICAgICAgICAgICAgYXRvbWljSW5saW5lTGV2ZWxCb3guc2V0TGF5b3V0Qm91bmRz
KExpbmVCb3g6OklubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHMgeyBhc2NlbnQsIG1hcmdpbkJv
eEhlaWdodCAtIGFzY2VudCB9KTsKKyAgICAgICAgICAgIHNpbXBsaWZpZWRBbGlnblZlcnRpY2Fs
bHlJZkFwcGxpY2FibGUoYXRvbWljSW5saW5lTGV2ZWxCb3gsIGlubGluZUxldmVsQm94R2VvbWV0
cnkpOworICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChXVEZNb3ZlKGF0b21p
Y0lubGluZUxldmVsQm94KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocnVuLmlzSW5saW5lQm94U3RhcnQoKSkgeworICAgICAgICAgICAgLy8gQXQgdGhp
cyBwb2ludCB3ZSBkb24ndCBrbm93IHlldCBob3cgd2lkZSB0aGlzIGlubGluZSBib3ggaXMuIExl
dCdzIGFzc3VtZSBpdCdzIGFzIGxvbmcgYXMgdGhlIGxpbmUgaXMKKyAgICAgICAgICAgIC8vIGFu
ZCBhZGp1c3QgaXQgbGF0ZXIgaWYgd2UgY29tZSBhY3Jvc3MgYW4gaW5saW5lQm94RW5kIHJ1biAo
c2VlIGJlbG93KS4KKyAgICAgICAgICAgIGF1dG8gaW5pdGlhbExvZ2ljYWxXaWR0aCA9IGxpbmVC
b3guY29udGVudExvZ2ljYWxXaWR0aCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCk7CisgICAgICAgICAg
ICBBU1NFUlQoaW5pdGlhbExvZ2ljYWxXaWR0aCA+PSAwKTsKKyAgICAgICAgICAgIC8vIElubGlu
ZSBib3ggcnVuIGlzIGJhc2VkIG9uIG1hcmdpbiBib3guIExldCdzIGNvbnZlcnQgaXQgdG8gYm9y
ZGVyIGJveC4KKyAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnQgPSBzdGQ6Om1heCgwX2x1LCBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkubWFyZ2luU3RhcnQo
KSk7CisgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBtYXJnaW5TdGFydDsKKyAgICAgICAgICAg
IGluaXRpYWxMb2dpY2FsV2lkdGggLT0gbWFyZ2luU3RhcnQ7CisgICAgICAgICAgICBhdXRvIGlu
bGluZUJveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVJbmxpbmVCb3gobGF5b3V0
Qm94LCBsb2dpY2FsTGVmdCwgaW5pdGlhbExvZ2ljYWxXaWR0aCk7CisgICAgICAgICAgICBzZXRW
ZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KGlubGluZUJveCk7CisgICAgICAgICAgICBzaW1w
bGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGlubGluZUJveCwgeyB9KTsKKyAgICAg
ICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShpbmxpbmVCb3gpKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChydW4uaXNJbmxpbmVC
b3hFbmQoKSkgeworICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBsb2dpY2FsIHdpZHRoIHdoZW4g
dGhlIGlubGluZSBib3ggY2xvc2VzIG9uIHRoaXMgbGluZS4KKyAgICAgICAgICAgIGF1dG8mIGlu
bGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsK
KyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVCb3guaXNJbmxpbmVCb3goKSk7CisgICAgICAgICAg
ICAvLyBJbmxpbmUgYm94IHJ1biBpcyBiYXNlZCBvbiBtYXJnaW4gYm94LiBMZXQncyBjb252ZXJ0
IGl0IHRvIGJvcmRlciBib3guCisgICAgICAgICAgICBhdXRvIG1hcmdpbkVuZCA9IHN0ZDo6bWF4
KDBfbHUsIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS5tYXJn
aW5FbmQoKSk7CisgICAgICAgICAgICBhdXRvIGlubGluZUJveExvZ2ljYWxSaWdodCA9IGxvZ2lj
YWxMZWZ0ICsgcnVuLmxvZ2ljYWxXaWR0aCgpIC0gbWFyZ2luRW5kOworICAgICAgICAgICAgaW5s
aW5lQm94LnNldExvZ2ljYWxXaWR0aChpbmxpbmVCb3hMb2dpY2FsUmlnaHQgLSBpbmxpbmVCb3gu
bG9naWNhbExlZnQoKSk7CisgICAgICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZB
cHBsaWNhYmxlKGlubGluZUJveCwgeyB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogQWRqdXN0IG5vbi1lbXB0eSBpbmxpbmUgYm94IGhlaWdo
dCB3aGVuIGdseXBocyBmcm9tIHRoZSBub24tcHJpbWFyeSBmb250IHN0cmV0Y2ggdGhlIGJveC4K
KyAgICAgICAgICAgIGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
LnBhcmVudCgpKS5zZXRIYXNDb250ZW50KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocnVuLmlzSGFyZExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBh
dXRvIGxpbmVCcmVha0JveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVMaW5lQnJl
YWtCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCk7CisgICAgICAgICAgICBzZXRWZXJ0aWNhbEdl
b21ldHJ5Rm9ySW5saW5lQm94KGxpbmVCcmVha0JveCk7CisgICAgICAgICAgICBzaW1wbGlmaWVk
QWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGxpbmVCcmVha0JveCwgeyB9KTsKKyAgICAgICAg
ICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShsaW5lQnJlYWtCb3gpKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChydW4uaXNXb3JkQnJl
YWtPcHBvcnR1bml0eSgpKSB7CisgICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94
KExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVHZW5lcmljSW5saW5lTGV2ZWxCb3gobGF5
b3V0Qm94LCBsb2dpY2FsTGVmdCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgbGluZUJveC5zZXRI
YXNDb250ZW50KGxpbmVIYXNDb250ZW50KTsKKyAgICBpZiAoc2ltcGxpZmllZFZlcnRpY2FsQWxp
Z25tZW50LmlzRW5hYmxlZCgpIHx8ICFsaW5lSGFzQ29udGVudCkgeworICAgICAgICAvLyBXZSBz
aG91bGQgYWx3YXlzIGJlIGFibGUgdG8gZXhlcmNpc2UgdGhlIGZhc3QgcGF0aCB3aGVuIHRoZSBs
aW5lIGhhcyBubyBjb250ZW50IGF0IGFsbCwgZXZlbiBpbiBub24tc3RhbmRhcmRzIG1vZGUgb3Ig
d2l0aCBsaW5lLWhlaWdodCBzZXQuCisgICAgICAgIHJvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRv
cChsaW5lSGFzQ29udGVudCA/IHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5yb290SW5saW5l
Qm94TG9naWNhbFRvcCgpIDogLXJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKSk7CisgICAgICAgIGxp
bmVCb3guc2V0TG9naWNhbEhlaWdodChsaW5lSGFzQ29udGVudCA/IHNpbXBsaWZpZWRWZXJ0aWNh
bEFsaWdubWVudC5saW5lQm94SGVpZ2h0KCkgOiBJbmxpbmVMYXlvdXRVbml0KCkpOworICAgIH0g
ZWxzZQorICAgICAgICBjb21wdXRlTGluZUJveEhlaWdodEFuZEFsaWduSW5saW5lTGV2ZWxCb3hl
c1ZlcnRpY2FsbHkobGluZUJveCk7Cit9CisKK3ZvaWQgTGluZUJveEJ1aWxkZXI6OmNvbXB1dGVM
aW5lQm94SGVpZ2h0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseShMaW5lQm94JiBs
aW5lQm94KQoreworICAgIEFTU0VSVChsaW5lQm94Lmhhc0NvbnRlbnQoKSk7CisgICAgLy8gVGhp
cyBmdW5jdGlvbiAocGFydGlhbGx5KSBpbXBsZW1lbnRzOgorICAgIC8vIDIuMi4gTGF5b3V0IFdp
dGhpbiBMaW5lIEJveGVzCisgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1pbmxpbmUt
My8jbGluZS1sYXlvdXQKKyAgICAvLyAxLiBDb21wdXRlIHRoZSBsaW5lIGJveCBoZWlnaHQgdXNp
bmcgdGhlIGxheW91dCBib3VuZHMgZ2VvbWV0cnkuIFRoaXMgaGVpZ2h0IGNvbXB1dGF0aW9uIHN0
cmljdGx5IHVzZXMgbGF5b3V0IGJvdW5kcyBhbmQgbm90IG5vcm1hbCBpbmxpbmUgbGV2ZWwgYm94
IGdlb21ldHJpZXMuCisgICAgLy8gMi4gQ29tcHV0ZSB0aGUgYmFzZWxpbmUvbG9naWNhbCB0b3Ag
cG9zaXRpb24gb2YgdGhlIHJvb3QgaW5saW5lIGJveC4gQWxpZ25lZCBib3hlcyBwdXNoIHRoZSBy
b290IGlubGluZSBib3ggYXJvdW5kIGluc2lkZSB0aGUgbGluZSBib3guCisgICAgLy8gMy4gRmlu
YWxseSBhbGlnbiB0aGUgaW5saW5lIGxldmVsIGJveGVzIHVzaW5nIChtb3N0bHkpIG5vcm1hbCBp
bmxpbmUgbGV2ZWwgYm94IGdlb21ldHJpZXMuCisgICAgYXV0byBxdWlya3MgPSBJbmxpbmVGb3Jt
YXR0aW5nUXVpcmtzIHsgZm9ybWF0dGluZ0NvbnRleHQoKSB9OworICAgIGF1dG8mIHJvb3RJbmxp
bmVCb3ggPSBsaW5lQm94LnJvb3RJbmxpbmVCb3goKTsKKworICAgIGF1dG8gY29tcHV0ZUxpbmVC
b3hMb2dpY2FsSGVpZ2h0ID0gWyZdIHsKKyAgICAgICAgLy8gTGluZSBib3ggaGVpZ2h0IGNvbXB1
dGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBsYXlvdXQgYm91bmRzIG9mIHRoZSBpbmxpbmUgYm94ZXMg
YW5kIG5vdCB0aGVpciBsb2dpY2FsIChhc2NlbnQvZGVzY2VudCkgZGltZW5zaW9ucy4KKyAgICAg
ICAgc3RydWN0IEFic29sdXRlVG9wQW5kQm90dG9tIHsKKyAgICAgICAgICAgIElubGluZUxheW91
dFVuaXQgdG9wIHsgMCB9OworICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBib3R0b20geyAw
IH07CisgICAgICAgIH07CisgICAgICAgIEhhc2hNYXA8Y29uc3QgTGluZUJveDo6SW5saW5lTGV2
ZWxCb3gqLCBBYnNvbHV0ZVRvcEFuZEJvdHRvbT4gaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZVRvcEFu
ZEJvdHRvbU1hcDsKKworICAgICAgICBhdXRvIG1pbmltdW1Mb2dpY2FsVG9wID0gT3B0aW9uYWw8
SW5saW5lTGF5b3V0VW5pdD4geyB9OworICAgICAgICBhdXRvIG1heGltdW1Mb2dpY2FsQm90dG9t
ID0gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4geyB9OworICAgICAgICBpZiAocXVpcmtzLmlu
bGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3gocm9vdElubGluZUJveCwgbGluZUJveCkpIHsKKyAg
ICAgICAgICAgIG1pbmltdW1Mb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAg
ICAgICAgICBtYXhpbXVtTG9naWNhbEJvdHRvbSA9IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRz
KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90
dG9tTWFwLmFkZCgmcm9vdElubGluZUJveCwgQWJzb2x1dGVUb3BBbmRCb3R0b20geyAqbWluaW11
bUxvZ2ljYWxUb3AsICptYXhpbXVtTG9naWNhbEJvdHRvbSB9KTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmFkZCgmcm9v
dElubGluZUJveCwgQWJzb2x1dGVUb3BBbmRCb3R0b20geyB9KTsKKworICAgICAgICBWZWN0b3I8
TGluZUJveDo6SW5saW5lTGV2ZWxCb3gqPiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVz
OworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5s
aW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVM
ZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVMZXZlbEJveC5oYXNM
aW5lQm94UmVsYXRpdmVBbGlnbm1lbnQoKSkgeworICAgICAgICAgICAgICAgIGxpbmVCb3hSZWxh
dGl2ZUlubGluZUxldmVsQm94ZXMuYXBwZW5kKCZpbmxpbmVMZXZlbEJveCk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvJiBwYXJlbnRJ
bmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5w
YXJlbnQoKSk7CisgICAgICAgICAgICAvLyBMb2dpY2FsIHRvcCBpcyByZWxhdGl2ZSB0byB0aGUg
cGFyZW50IGlubGluZSBib3gncyBsYXlvdXQgYm91bmRzLgorICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgbG9naWNhbCB0b3AgaXMgbm90IHRoZSBmaW5hbCBsb2dpY2FsIHRvcCBvZiB0aGUg
aW5saW5lIGxldmVsIGJveC4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvZ2ljYWwgdG9w
IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXlvdXQgYm91bmRzIGdlb21ldHJ5IHdoaWNoIG1heSBi
ZSB2ZXJ5IGRpZmZlcmVudCBmcm9tIHRoZSBpbmxpbmUgYm94J3Mgbm9ybWFsIGdlb21ldHJ5Lgor
ICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAg
ICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRpY2FsQWxpZ24oKSkgeworICAgICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogeworICAgICAgICAgICAgICAgIGF1
dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50
SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFy
ZW50QmFzZWxpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogeworICAgICAgICAgICAgICAgIGF1
dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmhlaWdodCgpIC8gMiArIHBhcmVudElubGluZUJveC5zdHlsZSgpLmZvbnRN
ZXRyaWNzKCkueEhlaWdodCgpIC8gMjsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFy
ZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lTWlkZGxlOiB7CisgICAgICAg
ICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5l
TGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLyAyOworICAgICAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNh
bFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TGVuZ3RoOiB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVMZXZlbEJveC5zdHlsZSgpOworICAg
ICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGZs
b2F0VmFsdWVGb3JMZW5ndGgoc3R5bGUudmVydGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21w
dXRlZExpbmVIZWlnaHQoKSkgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7
CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3Vu
ZHMoKS5hc2NlbnQgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNh
bEFsaWduOjpUZXh0VG9wOiB7CisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRleHQtdG9w
IGFsaWducyB3aXRoIHRoZSBpbmxpbmUgYm94J3MgZm9udCBtZXRyaWNzIHRvcCAoYXNjZW50KSBh
bmQgbm90IHRoZSBsYXlvdXQgYm91bmRzIHRvcC4KKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9w
ID0gcGFyZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIHBhcmVudElubGluZUJv
eC5iYXNlbGluZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0Qm90dG9tOiB7CisgICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IHRleHQtYm90dG9tIGFsaWducyB3aXRoIHRoZSBpbmxpbmUgYm94J3Mg
Zm9udCBtZXRyaWNzIGJvdHRvbSAoZGVzY2VudCkgYW5kIG5vdCB0aGUgbGF5b3V0IGJvdW5kcyBi
b3R0b20uCisgICAgICAgICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hMYXlvdXRCb3VuZHMg
PSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCk7CisgICAgICAgICAgICAgICAgYXV0byBw
YXJlbnRJbmxpbmVCb3hMb2dpY2FsQm90dG9tID0gcGFyZW50SW5saW5lQm94TGF5b3V0Qm91bmRz
LmhlaWdodCgpIC0gcGFyZW50SW5saW5lQm94TGF5b3V0Qm91bmRzLmRlc2NlbnQgKyBwYXJlbnRJ
bmxpbmVCb3guZGVzY2VudCgpLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKKyAgICAgICAg
ICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94TG9naWNhbEJvdHRvbSAtIGlubGlu
ZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hBYnNvbHV0ZVRvcEFu
ZEJvdHRvbSA9IGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAuZ2V0KCZwYXJl
bnRJbmxpbmVCb3gpOworICAgICAgICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxUb3AgPSBwYXJl
bnRJbmxpbmVCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbS50b3AgKyBsb2dpY2FsVG9wOworICAgICAg
ICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxCb3R0b20gPSBhYnNvbHV0ZUxvZ2ljYWxUb3AgKyBp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgIGlubGlu
ZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAuYWRkKCZpbmxpbmVMZXZlbEJveCwgQWJz
b2x1dGVUb3BBbmRCb3R0b20geyBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGFic29sdXRlTG9naWNhbEJv
dHRvbSB9KTsKKyAgICAgICAgICAgIC8vIFN0cmV0Y2ggdGhlIG1pbi9tYXggYWJzb2x1dGUgdmFs
dWVzIGlmIGFwcGxpY2FibGUuCisgICAgICAgICAgICBpZiAocXVpcmtzLmlubGluZUxldmVsQm94
QWZmZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpKSB7CisgICAgICAgICAgICAg
ICAgbWluaW11bUxvZ2ljYWxUb3AgPSBzdGQ6Om1pbihtaW5pbXVtTG9naWNhbFRvcC52YWx1ZU9y
KGFic29sdXRlTG9naWNhbFRvcCksIGFic29sdXRlTG9naWNhbFRvcCk7CisgICAgICAgICAgICAg
ICAgbWF4aW11bUxvZ2ljYWxCb3R0b20gPSBzdGQ6Om1heChtYXhpbXVtTG9naWNhbEJvdHRvbS52
YWx1ZU9yKGFic29sdXRlTG9naWNhbEJvdHRvbSksIGFic29sdXRlTG9naWNhbEJvdHRvbSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlIGxpbmUgYm94IGhlaWdodCBj
b21wdXRhdGlvbiBpcyBhcyBmb2xsb3dzOgorICAgICAgICAvLyAxLiBTdHJldGNoIHRoZSBsaW5l
IGJveCB3aXRoIHRoZSBub24tbGluZS1ib3ggcmVsYXRpdmUgYWxpZ25lZCBpbmxpbmUgYm94IGFi
c29sdXRlIHRvcCBhbmQgYm90dG9tIHZhbHVlcy4KKyAgICAgICAgLy8gMi4gQ2hlY2sgaWYgdGhl
IGxpbmUgYm94IHJlbGF0aXZlIGFsaWduZWQgaW5saW5lIGJveGVzICh0b3AsIGJvdHRvbSBldGMp
IGhhdmUgZW5vdWdoIHJvb20gYW5kIHN0cmV0Y2ggdGhlIGxpbmUgYm94IGZ1cnRoZXIgaWYgbmVl
ZGVkLgorICAgICAgICBhdXRvIGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gbWF4aW11bUxvZ2ljYWxC
b3R0b20udmFsdWVPcihJbmxpbmVMYXlvdXRVbml0KCkpIC0gbWluaW11bUxvZ2ljYWxUb3AudmFs
dWVPcihJbmxpbmVMYXlvdXRVbml0KCkpOworICAgICAgICBmb3IgKGF1dG8qIGxpbmVCb3hSZWxh
dGl2ZUlubGluZUxldmVsQm94IDogbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3hlcykgewor
ICAgICAgICAgICAgaWYgKCFxdWlya3MuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveCgqbGlu
ZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgbGluZUJveExvZ2ljYWxIZWlnaHQgPSBzdGQ6Om1heChsaW5l
Qm94TG9naWNhbEhlaWdodCwgbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3gtPmxheW91dEJv
dW5kcygpLmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxI
ZWlnaHQobGluZUJveExvZ2ljYWxIZWlnaHQpOworICAgIH07CisgICAgY29tcHV0ZUxpbmVCb3hM
b2dpY2FsSGVpZ2h0KCk7CisKKyAgICBhdXRvIGNvbXB1dGVSb290SW5saW5lQm94VmVydGljYWxQ
b3NpdGlvbiA9IFsmXSB7CisgICAgICAgIEhhc2hNYXA8Y29uc3QgTGluZUJveDo6SW5saW5lTGV2
ZWxCb3gqLCBJbmxpbmVMYXlvdXRVbml0PiBpbmxpbmVMZXZlbEJveEFic29sdXRlQmFzZWxpbmVP
ZmZzZXRNYXA7CisgICAgICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVCYXNlbGluZU9mZnNldE1h
cC5hZGQoJnJvb3RJbmxpbmVCb3gsIElubGluZUxheW91dFVuaXQgeyB9KTsKKworICAgICAgICBh
dXRvIG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gT3B0aW9uYWw8
SW5saW5lTGF5b3V0VW5pdD4geyB9OworICAgICAgICBpZiAocXVpcmtzLmlubGluZUxldmVsQm94
QWZmZWN0c0xpbmVCb3gocm9vdElubGluZUJveCwgbGluZUJveCkpCisgICAgICAgICAgICBtYXhp
bXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IHJvb3RJbmxpbmVCb3gubGF5
b3V0Qm91bmRzKCkuYXNjZW50OworCisgICAgICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3gg
OiBsaW5lQm94Lm5vblJvb3RJbmxpbmVMZXZlbEJveGVzKCkpIHsKKyAgICAgICAgICAgIGF1dG8g
YWJzb2x1dGVCYXNlbGluZU9mZnNldCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAg
ICAgaWYgKCFpbmxpbmVMZXZlbEJveC5oYXNMaW5lQm94UmVsYXRpdmVBbGlnbm1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LmxheW91dEJv
eCgpOworICAgICAgICAgICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5s
aW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gSW5saW5lTGF5b3V0
VW5pdCB7IH07CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRp
Y2FsQWxpZ24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxp
bmU6CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5l
ID0geyB9OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2lj
YWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSAoaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91
bmRzKCkuaGVpZ2h0KCkgLyAyICsgcGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9udE1ldHJpY3Mo
KS54SGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmUgPSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lIC0gaW5s
aW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZU1pZGRsZTogeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxU
b3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMo
KS5oZWlnaHQoKSAvIDI7CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBh
cmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSAtIGlubGlu
ZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6TGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gaW5saW5lTGV2
ZWxCb3guc3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduT2Zm
c2V0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3RoKCksIHN0
eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBsb2dp
Y2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gdmVydGljYWxBbGlnbk9mZnNldCArIGlu
bGluZUxldmVsQm94LmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zm
c2V0RnJvbVBhcmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGlu
ZSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OlRleHRUb3A6CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJh
c2VsaW5lID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBpbmxpbmVMZXZlbEJveC5sYXlv
dXRCb3VuZHMoKS5hc2NlbnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbToKKyAgICAgICAgICAgICAgICAg
ICAgYmFzZWxpbmVPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlv
dXRCb3VuZHMoKS5kZXNjZW50IC0gKnBhcmVudElubGluZUJveC5kZXNjZW50KCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhYnNvbHV0ZUJh
c2VsaW5lT2Zmc2V0ID0gaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwLmdl
dCgmcGFyZW50SW5saW5lQm94KSArIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVs
Qm94LnZlcnRpY2FsQWxpZ24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6VG9wOiB7CisgICAgICAgICAgICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBy
b290SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmxheW91
dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7Cisg
ICAgICAgICAgICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBpbmxpbmVMZXZlbEJv
eC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50IC0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5k
ZXNjZW50OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9J
TVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0
ZUJhc2VsaW5lT2Zmc2V0TWFwLmFkZCgmaW5saW5lTGV2ZWxCb3gsIGFic29sdXRlQmFzZWxpbmVP
ZmZzZXQpOworICAgICAgICAgICAgYXV0byBhZmZlY3RzUm9vdElubGluZUJveFZlcnRpY2FsUG9z
aXRpb24gPSBxdWlya3MuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChpbmxpbmVMZXZlbEJv
eCwgbGluZUJveCk7CisgICAgICAgICAgICBpZiAoYWZmZWN0c1Jvb3RJbmxpbmVCb3hWZXJ0aWNh
bFBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgYXV0byB0b3BPZmZzZXRGcm9tUm9vdElubGlu
ZUJveEJhc2VsaW5lID0gYWJzb2x1dGVCYXNlbGluZU9mZnNldCArIGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICBpZiAobWF4aW11bVRvcE9mZnNl
dEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUpCisgICAgICAgICAgICAgICAgICAgIG1heGltdW1U
b3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gc3RkOjptYXgoKm1heGltdW1Ub3BP
ZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lLCB0b3BPZmZzZXRGcm9tUm9vdElubGluZUJv
eEJhc2VsaW5lKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgYXJlIGlzIHF1aXJrIG1vZGUgYW5kIHRoZSByb290IGlubGluZSBib3ggaGFzIG5vIGNv
bnRlbnQuIFRoZSByb290IGlubGluZSBib3gncyBiYXNlbGluZSBpcyBhbmNob3JlZCBhdCAwLgor
ICAgICAgICAgICAgICAgICAgICAvLyBIb3dldmVyIG5lZ2F0aXZlIGFzY2VudCAoZS5nIG5lZ2F0
aXZlIHRvcCBtYXJnaW4pIGNhbiAicHVzaCIgdGhlIHJvb3QgaW5saW5lIGJveCB1cHdhcmRzIGFu
ZCBoYXZlIGEgbmVnYXRpdmUgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIG1heGltdW1Ub3BP
ZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91
bmRzKCkuYXNjZW50ID49IDAKKyAgICAgICAgICAgICAgICAgICAgICAgID8gc3RkOjptYXgoMC4w
ZiwgdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDogdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXV0byByb290SW5saW5l
Qm94TG9naWNhbFRvcCA9IG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5l
LnZhbHVlT3IoMC5mKSAtIHJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgcm9vdElu
bGluZUJveC5zZXRMb2dpY2FsVG9wKHJvb3RJbmxpbmVCb3hMb2dpY2FsVG9wKTsKKyAgICB9Owor
ICAgIGNvbXB1dGVSb290SW5saW5lQm94VmVydGljYWxQb3NpdGlvbigpOworCisgICAgYXV0byBh
bGlnbklubGluZUxldmVsQm94ZXMgPSBbJl0geworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxl
dmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAg
ICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlv
dXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9
IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJv
eC52ZXJ0aWNhbEFsaWduKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFz
ZWxpbmU6CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNl
bGluZSgpIC0gaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7CisgICAgICAgICAg
ICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gKGlubGluZUxl
dmVsQm94LmxvZ2ljYWxIZWlnaHQoKSAvIDIgKyBwYXJlbnRJbmxpbmVCb3guc3R5bGUoKS5mb250
TWV0cmljcygpLnhIZWlnaHQoKSAvIDIpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBw
YXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFz
ZWxpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lTWlkZGxlOiB7CisgICAgICAgICAgICAgICAg
YXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gu
bG9naWNhbEhlaWdodCgpIC8gMjsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50
SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5l
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBWZXJ0aWNhbEFsaWduOjpMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9
IGlubGluZUxldmVsQm94LnN0eWxlKCk7CisgICAgICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFs
aWduT2Zmc2V0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3Ro
KCksIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxv
Z2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSB2ZXJ0aWNhbEFsaWduT2Zmc2V0ICsg
aW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0g
cGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJh
c2VsaW5lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0ICh0ZXh0KXRvcC9ib3R0b20gYWxpZ24gdGhlaXIgbGF5b3V0IGJvdW5k
cy4KKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDoKKyAgICAgICAgICAg
ICAgICBsb2dpY2FsVG9wID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0g
aW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbToKKyAgICAgICAgICAgICAgICBs
b2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIGlubGluZUxldmVs
Qm94LmxheW91dEJvdW5kcygpLmRlc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpU
b3A6CisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbG9naWNhbCB0b3AgaXMgbm90
IHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgaW5saW5lIGJveC4KKyAgICAgICAgICAgICAgICBsb2dp
Y2FsVG9wID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gaW5saW5lTGV2
ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgorICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGxvZ2ljYWwgdG9wIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGlubGluZSBib3gu
CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGxpbmVCb3gubG9naWNhbEhlaWdodCgpIC0g
aW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtIGlubGluZUxldmVsQm94LmJh
c2VsaW5lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmxpbmVMZXZlbEJveC5z
ZXRMb2dpY2FsVG9wKGxvZ2ljYWxUb3ApOworICAgICAgICB9CisgICAgfTsKKyAgICBhbGlnbklu
bGluZUxldmVsQm94ZXMoKTsKK30KKworTGluZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRWZXJ0aWNh
bEFsaWdubWVudDo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50KGNvbnN0IExpbmVCb3g6Oklu
bGluZUxldmVsQm94JiByb290SW5saW5lQm94KQorICAgIDogbV9yb290SW5saW5lQm94KHJvb3RJ
bmxpbmVCb3gpCit7CisgICAgYWRqdXN0KHJvb3RJbmxpbmVCb3gpOworfQorCitib29sIExpbmVC
b3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmNhblVzZVNpbXBsaWZpZWRB
bGlnbm1lbnQoY29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gsIGNv
bnN0IExpbmVCb3g6OklubGluZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveCwgT3B0aW9uYWw8Y29u
c3QgQm94R2VvbWV0cnk+IGlubGluZUxldmVsQm94R2VvbWV0cnkpCit7CisgICAgaWYgKGlubGlu
ZUxldmVsQm94LmlzQXRvbWljSW5saW5lTGV2ZWxCb3goKSkgeworICAgICAgICBBU1NFUlQoaW5s
aW5lTGV2ZWxCb3hHZW9tZXRyeSk7CisgICAgICAgIC8vIEJhc2VsaW5lIGFsaWduZWQsIG5vbi1z
dHJldGNoeSBkaXJlY3QgY2hpbGRyZW4gYXJlIGNvbnNpZGVyZWQgdG8gYmUgc2ltcGxlIGZvciBu
b3cuCisgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LmxheW91dEJveCgp
OworICAgICAgICByZXR1cm4gJmxheW91dEJveC5wYXJlbnQoKSA9PSAmcm9vdElubGluZUJveC5s
YXlvdXRCb3goKQorICAgICAgICAgICAgJiYgbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGln
bigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lCisgICAgICAgICAgICAmJiAhaW5saW5lTGV2
ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQmVmb3JlKCkKKyAgICAgICAgICAgICYmICFpbmxpbmVMZXZl
bEJveEdlb21ldHJ5LT5tYXJnaW5BZnRlcigpCisgICAgICAgICAgICAmJiBpbmxpbmVMZXZlbEJv
eEdlb21ldHJ5LT5tYXJnaW5Cb3hIZWlnaHQoKSA8PSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7
CisgICAgfQorICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0xpbmVCcmVha0JveCgpKSB7CisgICAg
ICAgIC8vIEJhc2VsaW5lIGFsaWduZWQsIG5vbi1zdHJldGNoeSBsaW5lIGJyZWFrcyBlLmcuIDxk
aXY+PHNwYW4+PGJyPjwvc3Bhbj48L2Rpdj4gYnV0IG5vdCA8ZGl2PjxzcGFuIHN0eWxlPSJmb250
LXNpemU6IDEwMHB4OyI+PGJyPjwvc3Bhbj48L2Rpdj4uCisgICAgICAgIHJldHVybiBpbmxpbmVM
ZXZlbEJveC5sYXlvdXRCb3goKS5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZSAmJiBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpIDw9IHJvb3RJbmxpbmVC
b3guYmFzZWxpbmUoKTsKKyAgICB9CisgICAgaWYgKGlubGluZUxldmVsQm94LmlzSW5saW5lQm94
KCkpIHsKKyAgICAgICAgLy8gQmFzZWxpbmUgYWxpZ25lZCwgbm9uLXN0cmV0Y2h5IGlubGluZSBi
b3hlcyBlLmcuIDxkaXY+PHNwYW4+PC9zcGFuPjwvZGl2PiBidXQgbm90IDxkaXY+PHNwYW4gc3R5
bGU9ImZvbnQtc2l6ZTogMTAwcHg7Ij48L3NwYW4+PC9kaXY+LgorICAgICAgICByZXR1cm4gaW5s
aW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGlj
YWxBbGlnbjo6QmFzZWxpbmUgJiYgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkgPT0gcm9v
dElubGluZUJveC5sYXlvdXRCb3VuZHMoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIExpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmFsaWdu
KExpbmVCb3g6OklubGluZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveCkKK3sKKyAgICBpZiAoaW5s
aW5lTGV2ZWxCb3guaXNBdG9taWNJbmxpbmVMZXZlbEJveCgpIHx8IGlubGluZUxldmVsQm94Lmlz
TGluZUJyZWFrQm94KCkgfHwgaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSkgeworICAgICAg
ICAvLyBPbmx5IGJhc2VsaW5lIGFsaWdubWVudCBmb3Igbm93LgorICAgICAgICBpbmxpbmVMZXZl
bEJveC5zZXRMb2dpY2FsVG9wKG1fcm9vdElubGluZUJveC5iYXNlbGluZSgpIC0gaW5saW5lTGV2
ZWxCb3guYmFzZWxpbmUoKSk7CisgICAgICAgIGFkanVzdChpbmxpbmVMZXZlbEJveCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30K
Kwordm9pZCBMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50OjphZGp1
c3QoY29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIGlubGluZUxldmVsQm94KQoreworICAg
IGF1dG8gbGF5b3V0Qm91bmRzTG9naWNhbFRvcCA9IG1fcm9vdElubGluZUJveC5sYXlvdXRCb3Vu
ZHMoKS5hc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7CisgICAg
bV9saW5lQm94TG9naWNhbFRvcCA9IHN0ZDo6bWluKG1fbGluZUJveExvZ2ljYWxUb3AsIGxheW91
dEJvdW5kc0xvZ2ljYWxUb3ApOworICAgIG1fbGluZUJveExvZ2ljYWxCb3R0b20gPSBzdGQ6Om1h
eChtX2xpbmVCb3hMb2dpY2FsQm90dG9tLCBsYXlvdXRCb3VuZHNMb2dpY2FsVG9wICsgaW5saW5l
TGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkpOworICAgIG1fcm9vdElubGluZUJveExv
Z2ljYWxUb3AgPSBzdGQ6Om1heChtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wLCBpbmxpbmVMZXZl
bEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBtX3Jvb3RJbmxpbmVCb3guYmFzZWxpbmUoKSk7
Cit9CisKK0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkK
KyAgICA6IEZvcm1hdHRpbmdHZW9tZXRyeShpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKK3sKK30K
KworTGluZUJveCBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6OmxpbmVCb3hGb3JMaW5lQ29udGVu
dChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50KQoreworICAgIHJl
dHVybiBMaW5lQm94QnVpbGRlcihmb3JtYXR0aW5nQ29udGV4dCgpKS5idWlsZChsaW5lQ29udGVu
dCk7Cit9CisKK0lubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5Ojpsb2dp
Y2FsVG9wRm9yTmV4dExpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29u
dGVudCwgSW5saW5lTGF5b3V0VW5pdCBwcmV2aW91c0xpbmVMb2dpY2FsQm90dG9tLCBjb25zdCBG
bG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCkgY29uc3QKK3sKKyAgICAvLyBOb3JtYWxs
eSB0aGUgbmV4dCBsaW5lJ3MgbG9naWNhbCB0b3AgaXMgdGhlIHByZXZpb3VzIGxpbmUncyBsb2dp
Y2FsIGJvdHRvbSwgYnV0IHdoZW4gdGhlIGxpbmUgZW5kcworICAgIC8vIHdpdGggdGhlIGNsZWFy
IHByb3BlcnR5IHNldCwgdGhlIG5leHQgbGluZSBuZWVkcyB0byBjbGVhciB0aGUgZXhpc3Rpbmcg
ZmxvYXRzLgorICAgIGlmIChsaW5lQ29udGVudC5ydW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHByZXZpb3VzTGluZUxvZ2ljYWxCb3R0b207CisgICAgYXV0byYgbGFzdFJ1bkxheW91dEJv
eCA9IGxpbmVDb250ZW50LnJ1bnMubGFzdCgpLmxheW91dEJveCgpOyAKKyAgICBpZiAobGFzdFJ1
bkxheW91dEJveC5zdHlsZSgpLmNsZWFyKCkgPT0gQ2xlYXI6Ok5vbmUpCisgICAgICAgIHJldHVy
biBwcmV2aW91c0xpbmVMb2dpY2FsQm90dG9tOworICAgIGF1dG8gcG9zaXRpb25XaXRoQ2xlYXJh
bmNlID0gZmxvYXRpbmdDb250ZXh0LnZlcnRpY2FsUG9zaXRpb25XaXRoQ2xlYXJhbmNlKGxhc3RS
dW5MYXlvdXRCb3gpOworICAgIGlmICghcG9zaXRpb25XaXRoQ2xlYXJhbmNlKQorICAgICAgICBy
ZXR1cm4gcHJldmlvdXNMaW5lTG9naWNhbEJvdHRvbTsKKyAgICByZXR1cm4gc3RkOjptYXgocHJl
dmlvdXNMaW5lTG9naWNhbEJvdHRvbSwgSW5saW5lTGF5b3V0VW5pdChwb3NpdGlvbldpdGhDbGVh
cmFuY2UtPnBvc2l0aW9uKSk7Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBJbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnk6OmlubGluZUJsb2NrQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJv
eCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4
dFJvb3QuaXNJbkZsb3coKSk7CisKKyAgICAvLyAxMC4zLjEwICdJbmxpbmUtYmxvY2snLCByZXBs
YWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdworCisgICAgLy8gRXhhY3RseSBhcyBpbmxpbmUg
cmVwbGFjZWQgZWxlbWVudHMuCisgICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5pc1JlcGxh
Y2VkQm94KCkpCisgICAgICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1h
cmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KSwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCB7IH0sIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKKworICAg
IC8vIDEwLjMuOSAnSW5saW5lLWJsb2NrJywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1h
bCBmbG93CisKKyAgICAvLyBJZiAnd2lkdGgnIGlzICdhdXRvJywgdGhlIHVzZWQgdmFsdWUgaXMg
dGhlIHNocmluay10by1maXQgd2lkdGggYXMgZm9yIGZsb2F0aW5nIGVsZW1lbnRzLgorICAgIC8v
IEEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nIGZvciAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4t
cmlnaHQnIGJlY29tZXMgYSB1c2VkIHZhbHVlIG9mICcwJy4KKyAgICAvLyAjMQorICAgIGF1dG8g
d2lkdGggPSBjb21wdXRlZFZhbHVlKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5zdHlsZSgpLmxvZ2lj
YWxXaWR0aCgpLCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKKyAgICBpZiAo
IXdpZHRoKQorICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgoZm9ybWF0dGluZ0NvbnRl
eHRSb290LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKKworICAgIC8vICMy
CisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBGb3JtYXR0aW5nR2VvbWV0cnk6
OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGhvcml6b250
YWxDb25zdHJhaW50cyk7CisKKyAgICByZXR1cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsgKndp
ZHRoLCB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDBfbHUpLCBjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMF9sdSkgfSB9OworfQorCitDb250ZW50
SGVpZ2h0QW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6aW5saW5lQmxvY2tDb250
ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRp
Y2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGxheW91dEJveC5pc0luRmxvdygpKTsKKworICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQg
ZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAn
aW5saW5lLWJsb2NrJyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRp
bmcgcmVwbGFjZWQgZWxlbWVudHMKKyAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkK
KyAgICAgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihkb3du
Y2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0s
IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7CisKKyAgICAvLyAxMC42LjYgQ29tcGxpY2F0ZWQg
Y2FzZXMKKyAgICAvLyAtICdJbmxpbmUtYmxvY2snLCBub24tcmVwbGFjZWQgZWxlbWVudHMuCisg
ICAgcmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Cit9CisKK2Jvb2wgSW5saW5lRm9ybWF0dGlu
Z0dlb21ldHJ5OjppbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGNvbnN0IExpbmVCb3g6Oklu
bGluZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveCwgY29uc3QgTGluZUJveCYgbGluZUJveCkgY29u
c3QKK3sKKyAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSB8fCBpbmxpbmVMZXZl
bEJveC5pc0xpbmVCcmVha0JveCgpKQorICAgICAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5pblN0
YW5kYXJkc01vZGUoKSA/IHRydWUgOiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzKGZvcm1hdHRpbmdD
b250ZXh0KCkpLmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxp
bmVCb3gpOworICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0F0b21pY0lubGluZUxldmVsQm94KCkp
IHsKKyAgICAgICAgaWYgKGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIFdoaWxlIGluIHByYWN0aWNlIHdo
ZW4gdGhlIG5lZ2F0aXZlIHZlcnRpY2FsIG1hcmdpbiBtYWtlcyB0aGUgbGF5b3V0IGJvdW5kcyBl
bXB0eSAoZS5nOiBoZWlnaHQ6IDEwMHB4OyBtYXJnaW4tdG9wOiAtMTAwcHg7KSwgYW5kIHRoaXMg
aW5saW5lCisgICAgICAgIC8vIGxldmVsIGJveCBjb250cmlidXRlcyAwcHggdG8gdGhlIGxpbmUg
Ym94IGhlaWdodCwgaXQgc3RpbGwgbmVlZHMgdG8gYmUgdGFrZW4gaW50byBhY2NvdW50IHdoaWxl
IGNvbXB1dGluZyBsaW5lIGJveCBnZW9tZXRyaWVzLgorICAgICAgICBhdXRvJiBib3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goaW5saW5lTGV2ZWxCb3gubGF5
b3V0Qm94KCkpOworICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgfHwg
Ym94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2ZkODRjYjA1M2Q3ZGE0YzZiNGI1YmMyYmRjNTc3ZmU2
MTE1YjIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAgLTAsMCArMSw1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIElubGluZUZvcm1h
dHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nR2VvbWV0cnkgeworcHVibGljOgorICAg
IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYp
OworCisgICAgTGluZUJveCBsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6
OkxpbmVDb250ZW50Jik7CisgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yTmV4dExp
bmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgSW5saW5lTGF5b3V0VW5pdCBwcmV2
aW91c0xpbmVMb2dpY2FsQm90dG9tLCBjb25zdCBGbG9hdGluZ0NvbnRleHQmKSBjb25zdDsKKwor
ICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5saW5lQmxvY2tDb250ZW50SGVpZ2h0QW5kTWFy
Z2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJy
aWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBp
bmxpbmVCbG9ja0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9u
dGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOworCisg
ICAgYm9vbCBpbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGNvbnN0IExpbmVCb3g6OklubGlu
ZUxldmVsQm94JiwgY29uc3QgTGluZUJveCYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGNvbnN0
IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5nR2VvbWV0cnk6
OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CisKK307CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9Jbmxp
bmVGb3JtYXR0aW5nUXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdRdWlya3MuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5
NGQ5NWExYjc3ZDU0MTliODhhM2Y2MGFiYTkzMjE2NzI0ODkzZjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVG
b3JtYXR0aW5nUXVpcmtzLmNwcApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmgiCisKKyNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkxheW91dEJv
eEdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgewor
CitJbmxpbmVGb3JtYXR0aW5nUXVpcmtzOjpJbmxpbmVGb3JtYXR0aW5nUXVpcmtzKGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IEZv
cm1hdHRpbmdRdWlya3MoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCit7Cit9CisKK0lubGluZUxh
eW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ1F1aXJrczo6aW5pdGlhbExpbmVIZWlnaHQoKSBjb25z
dAoreworICAgIEFTU0VSVCghbGF5b3V0U3RhdGUoKS5pblN0YW5kYXJkc01vZGUoKSk7CisgICAg
Ly8gTmVnYXRpdmUgbGluZUhlaWdodCB2YWx1ZSBtZWFucyB0aGUgbGluZS1oZWlnaHQgaXMgbm90
IHNldAorICAgIGF1dG8mIHJvb3RTdHlsZSA9IGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpLnN0
eWxlKCk7CisgICAgcmV0dXJuIHJvb3RTdHlsZS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpID8g
cm9vdFN0eWxlLmZvbnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKSA6IHJvb3RTdHlsZS5jb21wdXRl
ZExpbmVIZWlnaHQoKTsKK30KKworYm9vbCBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzOjppbmxpbmVM
ZXZlbEJveEFmZmVjdHNMaW5lQm94KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94JiBpbmxp
bmVMZXZlbEJveCwgY29uc3QgTGluZUJveCYgbGluZUJveCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
IWxheW91dFN0YXRlKCkuaW5TdGFuZGFyZHNNb2RlKCkpOworICAgIGlmIChpbmxpbmVMZXZlbEJv
eC5pc0xpbmVCcmVha0JveCgpKSB7CisgICAgICAgIC8vIEluIHF1aXJrcyBtb2RlIGxpbmVicmVh
ayBib3hlcyAoPGJyPikgc3RvcCBhZmZlY3RpbmcgdGhlIGxpbmUgYm94IHdoZW4gKGFzc3VtZSA8
YnI+IGlzIG5lc3RlZCBlLmcuIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwMHB4Ij48YnI+PC9z
cGFuPikKKyAgICAgICAgLy8gMS4gdGhlIHJvb3QgaW5saW5lIGJveCBoYXMgY29udGVudCA8ZGl2
PmNvbnRlbnQ8YnI+L2Rpdj4KKyAgICAgICAgLy8gMi4gdGhlcmUncyBhdCBsZWFzdCBvbmUgYXRv
bWljIGlubGluZSBsZXZlbCBib3ggb24gdGhlIGxpbmUgZS5nIDxkaXY+PGltZz48YnI+PC9kaXY+
IG9yIDxkaXY+PHNwYW4+PGltZz48L3NwYW4+PGJyPjwvZGl2PgorICAgICAgICAvLyAzLiB0aGVy
ZSdzIGF0IGxlYXN0IG9uZSBpbmxpbmUgYm94IHdpdGggY29udGVudCBlLmcuIDxkaXY+PHNwYW4+
Y29udGVudDwvc3Bhbj48YnI+PC9kaXY+CisgICAgICAgIGlmIChsaW5lQm94LnJvb3RJbmxpbmVC
b3goKS5oYXNDb250ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChsaW5lQm94Lmhhc0F0b21pY0lubGluZUxldmVsQm94KCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgZWl0aGVyIGhhdmUgb25seSB0aGUg
PGJyPiBvbiB0aGUgbGluZSBvciBpbmxpbmUgYm94ZXMgd2l0aCBvciB3aXRob3V0IGNvbnRlbnQu
CisgICAgICAgIGF1dG8mIGlubGluZUxldmVsQm94ZXMgPSBsaW5lQm94Lm5vblJvb3RJbmxpbmVM
ZXZlbEJveGVzKCk7CisgICAgICAgIEFTU0VSVCghaW5saW5lTGV2ZWxCb3hlcy5pc0VtcHR5KCkp
OworICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3hlcy5zaXplKCkgPT0gMSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJv
eC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0
IGVtcHR5IGlubGluZSBib3hlcyBlLmcuIDxkaXY+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj48
YnI+PC9kaXY+CisgICAgICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSAm
JiBpbmxpbmVMZXZlbEJveC5oYXNDb250ZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoaW5s
aW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSkgeworICAgICAgICAvLyBJbmxpbmUgYm94ZXMgKGUu
Zy4gcm9vdCBpbmxpbmUgYm94IG9yIDxzcGFuPikgYWZmZWN0cyBsaW5lIGJveGVzIGVpdGhlciB0
aHJvdWdoIHRoZSBzdHJ1dCBvciBhY3R1YWwgY29udGVudC4KKyAgICAgICAgaWYgKGlubGluZUxl
dmVsQm94Lmhhc0NvbnRlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoaW5saW5lTGV2ZWxCb3guaXNSb290SW5saW5lQm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8g
c2hvdWxkUm9vdElubGluZUJveFdpdGhOb0NvbnRlbnRTdHJldGNoTGluZUJveCA9IFsmXSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlubGluZUxldmVsQm94LmxheW91dEJveCgpLnN0eWxlKCkubGlu
ZUhlaWdodCgpLmlzTmVnYXRpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIC8vIFRoZSByb290IGlubGluZSBib3ggd2l0aCBub24taW5pdGlh
bCBsaW5lIGhlaWdodCB2YWx1ZSBzdHJldGNoZXMgdGhlIGxpbmUgYm94IGV2ZW4gd2hlbiByb290
IGhhcyBubyBjb250ZW50CisgICAgICAgICAgICAgICAgLy8gYnV0IHRoZXJlJ3MgYXQgbGVhc3Qg
b25lIGlubGluZSBib3ggd2l0aCBjb250ZW50LgorICAgICAgICAgICAgICAgIC8vIGUuZy4gPGRp
diBzdHlsZT0ibGluZS1oZWlnaHQ6IDEwMHB4OyI+PHNwYW4+Y29udGVudDwvc3Bhbj48L2Rpdj4K
KyAgICAgICAgICAgICAgICBpZiAoIWxpbmVCb3guaGFzSW5saW5lQm94KCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGlubGlu
ZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5l
TGV2ZWxCb3guaGFzQ29udGVudCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gc2hvdWxkUm9vdElubGluZUJveFdpdGhO
b0NvbnRlbnRTdHJldGNoTGluZUJveCgpOworICAgICAgICB9CisgICAgICAgIC8vIE5vbi1yb290
IGlubGluZSBib3hlcyAoZS5nLiA8c3Bhbj4pLgorICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goaW5saW5lTGV2ZWxCb3gubGF5b3V0
Qm94KCkpOworICAgICAgICBpZiAoYm94R2VvbWV0cnkuaG9yaXpvbnRhbEJvcmRlcigpIHx8IGJv
eEdlb21ldHJ5Lmhvcml6b250YWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSkgeworICAgICAgICAg
ICAgLy8gSG9yaXpvbnRhbCBib3JkZXIgYW5kIHBhZGRpbmcgbWFrZSB0aGUgaW5saW5lIGJveCBz
dHJldGNoIHRoZSBsaW5lIChlLmcuIDxzcGFuIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyI+PC9zcGFu
PikuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzOjpoYXNTb2Z0V3JhcE9wcG9ydHVu
aXR5QXRJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFmb3JtYXR0aW5nQ29udGV4dCgpLnJv
b3QoKS5pc1RhYmxlQ2VsbCgpOworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0
dGluZ1F1aXJrcy5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9p
bmxpbmUvSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5MjdhMDg0NzQ2MDgz
MDY2OTFjYWY5ZWY5MWE1NTM0ZDc5MGMwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nUXVp
cmtzLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5n
UXVpcmtzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitj
bGFzcyBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzIDogcHVibGljIEZvcm1hdHRpbmdRdWlya3Mgewor
cHVibGljOgorICAgIElubGluZUZvcm1hdHRpbmdRdWlya3MoY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmKTsKKworICAgIElubGluZUxheW91dFVuaXQgaW5pdGlhbExpbmVIZWlnaHQoKSBj
b25zdDsKKyAgICBib29sIGhhc1NvZnRXcmFwT3Bwb3J0dW5pdHlBdEltYWdlKCkgY29uc3Q7Cisg
ICAgYm9vbCBpbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGNvbnN0IExpbmVCb3g6OklubGlu
ZUxldmVsQm94JiwgY29uc3QgTGluZUJveCYpIGNvbnN0OworfTsKKworfQorfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5s
aW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcAppbmRleCA2YzYyNmVhMGVl
NWE2M2E0YTk2MmIxNTVjZTYxMDY1MzBmY2UyMmYyLi4xNTgwMGIxOGFmNzJhZWE1ZmJhZjk4ODUy
MGEyYmRjMzI5Njc2NzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJ1aWxkZXIu
Y3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzQXRTb2Z0V3JhcE9w
cG9ydHVuaXR5KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmUKICAgICBpZiAo
Y3VycmVudC5pc0JveCgpIHx8IG5leHQuaXNCb3goKSkgewogICAgICAgICBhdXRvIGlzSW1hZ2VD
b250ZW50ID0gY3VycmVudC5sYXlvdXRCb3goKS5pc0ltYWdlKCkgfHwgbmV4dC5sYXlvdXRCb3go
KS5pc0ltYWdlKCk7CiAgICAgICAgIGlmIChpc0ltYWdlQ29udGVudCkKLSAgICAgICAgICAgIHJl
dHVybiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5xdWlya3MoKS5oYXNTb2Z0V3JhcE9wcG9ydHVu
aXR5QXRJbWFnZSgpOworICAgICAgICAgICAgcmV0dXJuIElubGluZUZvcm1hdHRpbmdRdWlya3Mo
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQpLmhhc1NvZnRXcmFwT3Bwb3J0dW5pdHlBdEltYWdlKCk7
CiAgICAgICAgIC8vIFt0ZXh0XVtpbmxpbmUgYm94IHN0YXJ0XVtpbmxpbmUgYm94IGVuZF1baW5s
aW5lIGJveF0gKHRleHQ8c3Bhbj48L3NwYW4+PGltZz4pIDogdGhlcmUncyBhIHNvZnQgd3JhcCBv
cHBvcnR1bml0eSBiZXR3ZWVuIHRoZSBbdGV4dF0gYW5kIFtpbWddLgogICAgICAgICAvLyBUaGUg
bGluZSBicmVha2luZyBiZWhhdmlvciBvZiBhIHJlcGxhY2VkIGVsZW1lbnQgb3Igb3RoZXIgYXRv
bWljIGlubGluZSBpcyBlcXVpdmFsZW50IHRvIGFuIGlkZW9ncmFwaGljIGNoYXJhY3Rlci4KICAg
ICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdD
b250ZXh0LmNwcAppbmRleCA5MDJhZjdjNWVkODhkNTA0Y2FjNDI1YTEzNTIxMDA4YjZlNThiOWFj
Li41NDFhMDRhNjQzMzQ0OGVhNWIyYmMyMWUxMThiMDY1ZjVmZGJkZWYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0
dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4
dC5oIgogI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKKyNpbmNsdWRl
ICJUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1N0
YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMzAzLDcgKzMw
NCw3IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Q2VsbChjb25zdCBUYWJs
ZUdyaWQ6OkNlbGwmIGNlbGwsIExheW91dFVuaXQKICAgICBjZWxsQm94R2VvbWV0cnkuc2V0Q29u
dGVudEJveEhlaWdodChnZW9tZXRyeSgpLmNlbGxIZWlnaChjZWxsQm94KSk7CiB9CiAKLUZvcm1h
dHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRhYmxlRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpCitJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cygpCiB7CiAgICAgQVNTRVJUKCFyb290KCkuaXNTaXplQ29udGFpbm1lbnRC
b3goKSk7CiAgICAgLy8gVGFibGVzIGhhdmUgYSBzbGlnaHR5IGRpZmZlcmVudCBjb25jZXB0IG9m
IHNocmluayB0byBmaXQuIEl0J3MgcmVhbGx5IG9ubHkgZGlmZmVyZW50IHdpdGggbm9uLWF1dG8g
IndpZHRoIiB2YWx1ZXMsIHdoZXJlCkBAIC0zNzAsNyArMzcxLDcgQEAgVW5pcXVlUmVmPFRhYmxl
R3JpZD4gVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6ZW5zdXJlVGFibGVHcmlkKGNvbnN0IENvbnRh
aW5lckJveCYKICAgICByZXR1cm4gdGFibGVHcmlkOwogfQogCi1Gb3JtYXR0aW5nQ29udGV4dDo6
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
ZFByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucygpCitJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKCkK
IHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsK
ICAgICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlLnRhYmxlR3JpZCgpOwpAQCAtNDEyLDcg
KzQxMyw3IEBAIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkUHJlCiAgICAgICAgIGZpeGVkV2lkdGhDb2x1
bW5zLmFwcGVuZChmaXhlZFdpZHRoKCkpOwogICAgIH0KIAotICAgIFZlY3RvcjxGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cz4gY29sdW1uSW50cmluc2ljV2lkdGhz
KGNvbHVtbkxpc3Quc2l6ZSgpKTsKKyAgICBWZWN0b3I8SW50cmluc2ljV2lkdGhDb25zdHJhaW50
cz4gY29sdW1uSW50cmluc2ljV2lkdGhzKGNvbHVtbkxpc3Quc2l6ZSgpKTsKICAgICAvLyAzLiBD
b2xsZWN0IGhlIG1pbi9tYXggd2lkdGggZm9yIGVhY2ggY29sdW1uIGJ1dCBpZ25vcmUgY29sdW1u
IHNwYW5zIGZvciBub3cuCiAgICAgVmVjdG9yPFNsb3RQb3NpdGlvbj4gc3Bhbm5pbmdDZWxsUG9z
aXRpb25MaXN0OwogICAgIHNpemVfdCBudW1iZXJPZkFjdHVhbENvbHVtbnMgPSAwOwpAQCAtNDI4
LDcgKzQyOSw3IEBAIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkUHJlCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvIGNvbHVtbkZpeGVkV2lkdGgg
PSBmaXhlZFdpZHRoQ29sdW1uc1tjb2x1bW5JbmRleF07Ci0gICAgICAgICAgICBhdXRvIHdpZHRo
Q29uc3RyYWludHMgPSAhY29sdW1uRml4ZWRXaWR0aCA/IHNsb3Qud2lkdGhDb25zdHJhaW50cygp
IDogRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyAqY29sdW1u
Rml4ZWRXaWR0aCwgKmNvbHVtbkZpeGVkV2lkdGggfTsKKyAgICAgICAgICAgIGF1dG8gd2lkdGhD
b25zdHJhaW50cyA9ICFjb2x1bW5GaXhlZFdpZHRoID8gc2xvdC53aWR0aENvbnN0cmFpbnRzKCkg
OiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgKmNvbHVtbkZpeGVkV2lkdGgsICpjb2x1bW5G
aXhlZFdpZHRoIH07CiAgICAgICAgICAgICBjb2x1bW5JbnRyaW5zaWNXaWR0aHNbY29sdW1uSW5k
ZXhdLm1pbmltdW0gPSBzdGQ6Om1heCh3aWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGNvbHVtbklu
dHJpbnNpY1dpZHRoc1tjb2x1bW5JbmRleF0ubWluaW11bSk7CiAgICAgICAgICAgICBjb2x1bW5J
bnRyaW5zaWNXaWR0aHNbY29sdW1uSW5kZXhdLm1heGltdW0gPSBzdGQ6Om1heCh3aWR0aENvbnN0
cmFpbnRzLm1heGltdW0sIGNvbHVtbkludHJpbnNpY1dpZHRoc1tjb2x1bW5JbmRleF0ubWF4aW11
bSk7CiAgICAgICAgIH0KQEAgLTUxNCw2ICs1MTUsMTEgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlQW5kRGlzdHJpYnV0ZUV4dHJhU3BhY2UoTGF5b3V0VW5pdCBhdmFpbGFi
bGUKICAgICB9CiB9CiAKK1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IFRhYmxlRm9ybWF0dGluZ0Nv
bnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGFibGVGb3JtYXR0aW5nR2Vv
bWV0cnkoKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpKTsKK30KKwogfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3Rh
YmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDFmMzBk
ZTEzNTQ1NjY1NTgxZWI5NDlhMjdiODBkZjRlMTIyMjVlNmYuLjJiMWYwYWI5NGEzMTQwMmFmMzRh
YThhY2NkYWMwMzJiY2FjYTJhMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0
aW5nQ29udGV4dC5oCkBAIC0zNyw2ICszNyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBMYXlvdXQgewogCiBjbGFzcyBJbnZhbGlkYXRpb25TdGF0ZTsKK2NsYXNzIFRhYmxlRm9y
bWF0dGluZ0dlb21ldHJ5OworCiAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGxheW91dCBs
b2dpYyBmb3IgdGFibGUgZm9ybWF0dGluZyBjb250ZXh0cy4KIC8vIGh0dHBzOi8vd3d3LnczLm9y
Zy9UUi9DU1MyMi90YWJsZXMuaHRtbAogY2xhc3MgVGFibGVGb3JtYXR0aW5nQ29udGV4dCBmaW5h
bCA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4dCB7CkBAIC02NCwzNCArNjYsNiBAQCBwcml2YXRl
OgogICAgICAgICBjb25zdCBUYWJsZUdyaWQmIG1fZ3JpZDsKICAgICB9OwogCi0gICAgY2xhc3Mg
R2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIExheW91dFVuaXQgY2VsbEhlaWdoKGNvbnN0IENvbnRhaW5lckJveCYpIGNv
bnN0OwotICAgICAgICBFZGdlcyBjb21wdXRlZENlbGxCb3JkZXIoY29uc3QgVGFibGVHcmlkOjpD
ZWxsJikgY29uc3Q7Ci0gICAgICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkQ29sdW1u
V2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1bW5Cb3gpOwotICAgICAgICBGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzRm9yQ2VsbChjb25zdCBUYWJsZUdyaWQ6OkNlbGwmKTsKLSAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCB1c2VkQmFzZWxpbmVGb3JDZWxsKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCk7Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgVGFibGVGb3JtYXR0aW5nQ29udGV4
dDsKLSAgICAgICAgR2VvbWV0cnkoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0
IFRhYmxlR3JpZCYpOwotCi0gICAgICAgIGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIGZv
cm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8VGFibGVGb3JtYXR0aW5n
Q29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCgp
KTsgfQotICAgICAgICBjb25zdCBUYWJsZUdyaWQmIG1fZ3JpZDsKLSAgICB9OwotICAgIFRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gR2Vv
bWV0cnkoKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpKTsgfQotCi0gICAgY2xh
c3MgUXVpcmtzIDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3MgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgUXVpcmtzKGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmKTsKLQotICAg
ICAgICBib29sIHNob3VsZElnbm9yZUNoaWxkQ29udGVudFZlcnRpY2FsTWFyZ2luKGNvbnN0IENv
bnRhaW5lckJveCYpIGNvbnN0OwotCi0gICAgICAgIGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRl
eHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8VGFibGVGb3Jt
YXR0aW5nQ29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6Zm9ybWF0dGluZ0NvbnRl
eHQoKSk7IH0KLSAgICAgICAgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgZ2VvbWV0
cnkoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5KCk7IH0KLSAg
ICB9OwotICAgIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyBxdWlya3MoKSBjb25zdCB7
IHJldHVybiBRdWlya3MoKnRoaXMpOyB9Ci0KICAgICBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpU
YWJsZUxheW91dCB0YWJsZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIFRhYmxlTGF5b3V0KCp0aGlz
LCBmb3JtYXR0aW5nU3RhdGUoKS50YWJsZUdyaWQoKSk7IH0KIAogICAgIEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7
CkBAIC0xMDMsMjEgKzc3LDExIEBAIHByaXZhdGU6CiAgICAgSW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyBjb21wdXRlZFByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucygpOwogICAgIHZvaWQgY29tcHV0
ZUFuZERpc3RyaWJ1dGVFeHRyYVNwYWNlKExheW91dFVuaXQgYXZhaWxhYmxlSG9yaXpvbnRhbFNw
YWNlLCBPcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlKTsKIAorICAg
IFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3Q7CiAgICAgY29uc3QgVGFi
bGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25j
YXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0
YXRlKCkpOyB9CiAgICAgVGFibGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsg
cmV0dXJuIGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6
Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiB9OwogCi1pbmxpbmUgVGFibGVGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6Okdlb21ldHJ5KGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIHRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IFRhYmxlR3JpZCYgZ3JpZCkKLSAgICA6IEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeSh0YWJsZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV9ncmlk
KGdyaWQpCi17Ci19Ci0KLWlubGluZSBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OlF1
aXJrcyhjb25zdCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0JiB0YWJsZUZvcm1hdHRpbmdDb250ZXh0
KQotICAgIDogRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyh0YWJsZUZvcm1hdHRpbmdDb250ZXh0
KQotewotfQotCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDczMjM5MjY5NGY2ZTdhODI0MjljMjBhNWU2MTA5ODQwZTJhZWRjOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIklubGluZUZvcm1hdHRp
bmdTdGF0ZS5oIgotI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCi0jaW5jbHVkZSAiTGF5
b3V0Q29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dERlc2NlbmRhbnRJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKLSNpbmNsdWRlICJUYWJsZUZv
cm1hdHRpbmdTdGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0
IHsKLQotTGF5b3V0VW5pdCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y2VsbEhl
aWdoKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCkgY29uc3QKLXsKLSAgICBBU1NFUlQoY2Vs
bEJveC5pc0luRmxvdygpKTsKLSAgICBhdXRvIGNvbnRlbnRIZWlnaHQgPSBMYXlvdXRVbml0IHsg
fTsKLSAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5zaG91bGRJZ25vcmVDaGls
ZENvbnRlbnRWZXJ0aWNhbE1hcmdpbihjZWxsQm94KSkgewotICAgICAgICBBU1NFUlQoY2VsbEJv
eC5maXJzdEluRmxvd0NoaWxkKCkpOwotICAgICAgICBhdXRvIGZvcm1hdHRpbmdDb250ZXh0ID0g
dGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKLSAgICAgICAgYXV0byYgZmlyc3RJbkZsb3dDaGls
ZCA9ICpjZWxsQm94LmZpcnN0SW5GbG93Q2hpbGQoKTsKLSAgICAgICAgYXV0byYgbGFzdEluRmxv
d0NoaWxkID0gKmNlbGxCb3gubGFzdEluRmxvd0NoaWxkKCk7Ci0gICAgICAgIGF1dG8mIGZpcnN0
SW5GbG93Q2hpbGRHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGZp
cnN0SW5GbG93Q2hpbGQsIEVzY2FwZVJlYXNvbjo6VGFibGVRdWlya05lZWRzR2VvbWV0cnlGcm9t
RXN0YWJsaXNoZWRGb3JtYXR0aW5nQ29udGV4dCk7Ci0gICAgICAgIGF1dG8mIGxhc3RJbkZsb3dD
aGlsZEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGFzdEluRmxv
d0NoaWxkLCBFc2NhcGVSZWFzb246OlRhYmxlUXVpcmtOZWVkc0dlb21ldHJ5RnJvbUVzdGFibGlz
aGVkRm9ybWF0dGluZ0NvbnRleHQpOwotCi0gICAgICAgIGF1dG8gdG9wID0gZmlyc3RJbkZsb3dD
aGlsZC5zdHlsZSgpLmhhc01hcmdpbkJlZm9yZVF1aXJrKCkgPyBCb3hHZW9tZXRyeTo6Ym9yZGVy
Qm94UmVjdChmaXJzdEluRmxvd0NoaWxkR2VvbWV0cnkpLnRvcCgpIDogQm94R2VvbWV0cnk6Om1h
cmdpbkJveFJlY3QoZmlyc3RJbkZsb3dDaGlsZEdlb21ldHJ5KS50b3AoKTsKLSAgICAgICAgYXV0
byBib3R0b20gPSBsYXN0SW5GbG93Q2hpbGQuc3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCkg
PyBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChsYXN0SW5GbG93Q2hpbGRHZW9tZXRyeSkuYm90
dG9tKCkgOiBCb3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChsYXN0SW5GbG93Q2hpbGRHZW9tZXRy
eSkuYm90dG9tKCk7Ci0gICAgICAgIGNvbnRlbnRIZWlnaHQgPSBib3R0b20gLSB0b3A7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGNvbnRlbnRIZWlnaHQgPSBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGlu
Z0NvbnRleHRSb290KGNlbGxCb3gpOwotICAgIHJldHVybiBzdGQ6Om1heChjb21wdXRlZEhlaWdo
dChjZWxsQm94KS52YWx1ZU9yKDBfbHUpLCBjb250ZW50SGVpZ2h0KTsKLX0KLQotRWRnZXMgVGFi
bGVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkQ2VsbEJvcmRlcihjb25zdCBU
YWJsZUdyaWQ6OkNlbGwmIGNlbGwpIGNvbnN0Ci17Ci0gICAgYXV0byYgY2VsbEJveCA9IGNlbGwu
Ym94KCk7Ci0gICAgYXV0byBib3JkZXIgPSBjb21wdXRlZEJvcmRlcihjZWxsQm94KTsKLSAgICBh
dXRvIGNvbGxhcHNlZEJvcmRlciA9IG1fZ3JpZC5jb2xsYXBzZWRCb3JkZXIoKTsKLSAgICBpZiAo
IWNvbGxhcHNlZEJvcmRlcikKLSAgICAgICAgcmV0dXJuIGJvcmRlcjsKLQotICAgIC8vIFdlIG1p
Z2h0IHdhbnQgdG8gY2FjaGUgdGhlc2UgY29sbGFwc2VkIGJvcmRlcnMgb24gdGhlIGdyaWQuCi0g
ICAgYXV0byBjZWxsUG9zaXRpb24gPSBjZWxsLnBvc2l0aW9uKCk7Ci0gICAgLy8gQ29sbGFwc2Vk
IGJvcmRlciBsZWZ0IGZyb20gdGFibGUgYW5kIGFkamFjZW50IGNlbGxzLgotICAgIGlmICghY2Vs
bFBvc2l0aW9uLmNvbHVtbikKLSAgICAgICAgYm9yZGVyLmhvcml6b250YWwubGVmdCA9IGNvbGxh
cHNlZEJvcmRlci0+aG9yaXpvbnRhbC5sZWZ0IC8gMjsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0
byBhZGphY2VudEJvcmRlclJpZ2h0ID0gY29tcHV0ZWRCb3JkZXIobV9ncmlkLnNsb3QoeyBjZWxs
UG9zaXRpb24uY29sdW1uIC0gMSwgY2VsbFBvc2l0aW9uLnJvdyB9KS0+Y2VsbCgpLmJveCgpKS5o
b3Jpem9udGFsLnJpZ2h0OwotICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5sZWZ0ID0gc3RkOjpt
YXgoYm9yZGVyLmhvcml6b250YWwubGVmdCwgYWRqYWNlbnRCb3JkZXJSaWdodCkgLyAyOwotICAg
IH0KLSAgICAvLyBDb2xsYXBzZWQgYm9yZGVyIHJpZ2h0IGZyb20gdGFibGUgYW5kIGFkamFjZW50
IGNlbGxzLgotICAgIGlmIChjZWxsUG9zaXRpb24uY29sdW1uID09IG1fZ3JpZC5jb2x1bW5zKCku
c2l6ZSgpIC0gMSkKLSAgICAgICAgYm9yZGVyLmhvcml6b250YWwucmlnaHQgPSBjb2xsYXBzZWRC
b3JkZXItPmhvcml6b250YWwucmlnaHQgLyAyOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGFk
amFjZW50Qm9yZGVyTGVmdCA9IGNvbXB1dGVkQm9yZGVyKG1fZ3JpZC5zbG90KHsgY2VsbFBvc2l0
aW9uLmNvbHVtbiArIDEsIGNlbGxQb3NpdGlvbi5yb3cgfSktPmNlbGwoKS5ib3goKSkuaG9yaXpv
bnRhbC5sZWZ0OwotICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5yaWdodCA9IHN0ZDo6bWF4KGJv
cmRlci5ob3Jpem9udGFsLnJpZ2h0LCBhZGphY2VudEJvcmRlckxlZnQpIC8gMjsKLSAgICB9Ci0g
ICAgLy8gQ29sbGFwc2VkIGJvcmRlciB0b3AgZnJvbSB0YWJsZSwgcm93IGFuZCBhZGphY2VudCBj
ZWxscy4KLSAgICBhdXRvJiByb3dzID0gbV9ncmlkLnJvd3MoKS5saXN0KCk7Ci0gICAgaWYgKCFj
ZWxsUG9zaXRpb24ucm93KQotICAgICAgICBib3JkZXIudmVydGljYWwudG9wID0gY29sbGFwc2Vk
Qm9yZGVyLT52ZXJ0aWNhbC50b3AgLyAyOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGFkamFj
ZW50Qm9yZGVyQm90dG9tID0gY29tcHV0ZWRCb3JkZXIobV9ncmlkLnNsb3QoeyBjZWxsUG9zaXRp
b24uY29sdW1uLCBjZWxsUG9zaXRpb24ucm93IC0gMSB9KS0+Y2VsbCgpLmJveCgpKS52ZXJ0aWNh
bC5ib3R0b207Ci0gICAgICAgIGF1dG8gYWRqYWNlbnRSb3dCb3R0b20gPSBjb21wdXRlZEJvcmRl
cihyb3dzW2NlbGxQb3NpdGlvbi5yb3cgLSAxXS5ib3goKSkudmVydGljYWwuYm90dG9tOwotICAg
ICAgICBhdXRvIGFkamFjZW50Q29sbGFwc2VkQm9yZGVyID0gc3RkOjptYXgoYWRqYWNlbnRCb3Jk
ZXJCb3R0b20sIGFkamFjZW50Um93Qm90dG9tKTsKLSAgICAgICAgYm9yZGVyLnZlcnRpY2FsLnRv
cCA9IHN0ZDo6bWF4KGJvcmRlci52ZXJ0aWNhbC50b3AsIGFkamFjZW50Q29sbGFwc2VkQm9yZGVy
KSAvIDI7Ci0gICAgfQotICAgIC8vIENvbGxhcHNlZCBib3JkZXIgYm90dG9tIGZyb20gdGFibGUs
IHJvdyBhbmQgYWRqYWNlbnQgY2VsbHMuCi0gICAgaWYgKGNlbGxQb3NpdGlvbi5yb3cgPT0gbV9n
cmlkLnJvd3MoKS5zaXplKCkgLSAxKQotICAgICAgICBib3JkZXIudmVydGljYWwuYm90dG9tID0g
Y29sbGFwc2VkQm9yZGVyLT52ZXJ0aWNhbC5ib3R0b20gLyAyOwotICAgIGVsc2UgewotICAgICAg
ICBhdXRvIGFkamFjZW50Qm9yZGVyVG9wID0gY29tcHV0ZWRCb3JkZXIobV9ncmlkLnNsb3QoeyBj
ZWxsUG9zaXRpb24uY29sdW1uLCBjZWxsUG9zaXRpb24ucm93ICsgMSB9KS0+Y2VsbCgpLmJveCgp
KS52ZXJ0aWNhbC50b3A7Ci0gICAgICAgIGF1dG8gYWRqYWNlbnRSb3dUb3AgPSBjb21wdXRlZEJv
cmRlcihyb3dzW2NlbGxQb3NpdGlvbi5yb3cgKyAxXS5ib3goKSkudmVydGljYWwudG9wOwotICAg
ICAgICBhdXRvIGFkamFjZW50Q29sbGFwc2VkQm9yZGVyID0gc3RkOjptYXgoYWRqYWNlbnRCb3Jk
ZXJUb3AsIGFkamFjZW50Um93VG9wKTsKLSAgICAgICAgYm9yZGVyLnZlcnRpY2FsLmJvdHRvbSA9
IHN0ZDo6bWF4KGJvcmRlci52ZXJ0aWNhbC5ib3R0b20sIGFkamFjZW50Q29sbGFwc2VkQm9yZGVy
KSAvIDI7Ci0gICAgfQotICAgIHJldHVybiBib3JkZXI7Ci19Ci0KLU9wdGlvbmFsPExheW91dFVu
aXQ+IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZENvbHVtbldpZHRo
KGNvbnN0IENvbnRhaW5lckJveCYgY29sdW1uQm94KQotewotICAgIC8vIENoZWNrIGJvdGggc3R5
bGUgYW5kIDxjb2w+J3Mgd2lkdGggYXR0cmlidXRlLgotICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0
IHdoYXQgdG8gZG8gd2l0aCBjYWxjdWxhdGVkIHZhbHVlcywgbGlrZSA8Y29sIHN0eWxlPSJ3aWR0
aDogMTAlIj4uCi0gICAgaWYgKGF1dG8gY29tcHV0ZWRXaWR0aFZhbHVlID0gY29tcHV0ZWRXaWR0
aChjb2x1bW5Cb3gsIHsgfSkpCi0gICAgICAgIHJldHVybiBjb21wdXRlZFdpZHRoVmFsdWU7Ci0g
ICAgcmV0dXJuIGNvbHVtbkJveC5jb2x1bW5XaWR0aCgpOwotfQotCi1Gb3JtYXR0aW5nQ29udGV4
dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGwoY29uc3QgVGFibGVHcmlkOjpD
ZWxsJiBjZWxsKQotewotICAgIGF1dG8mIGNlbGxCb3ggPSBjZWxsLmJveCgpOwotICAgIGF1dG8m
IHN0eWxlID0gY2VsbEJveC5zdHlsZSgpOwotCi0gICAgYXV0byBjb21wdXRlZEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMgPSBbJl0oKSAtPiBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyB7Ci0gICAgICAgIC8vIEV2ZW4gZml4ZWQgd2lkdGggY2VsbHMgZXhwYW5k
IHRvIHRoZWlyIG1pbmltdW0gY29udGVudCB3aWR0aAotICAgICAgICAvLyA8dGQgc3R5bGU9Indp
ZHRoOiAxMHB4Ij50ZXN0X2NvbnRlbnQ8L3RkPiB3aWxsIHNpemUgdG8gbWF4KG1pbmltdW0gY29u
dGVudCB3aWR0aCwgY29tcHV0ZWQgd2lkdGgpLgotICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgPSBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyB7IH07Ci0gICAgICAgIGlmIChjZWxsQm94Lmhhc0NoaWxkKCkpCi0gICAgICAgICAgICBpbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0Nv
bnRleHQoY2VsbEJveCwgbGF5b3V0U3RhdGUoKSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25z
dHJhaW50cygpOwotICAgICAgICBpZiAoYXV0byBmaXhlZFdpZHRoID0gZml4ZWRWYWx1ZShzdHls
ZS5sb2dpY2FsV2lkdGgoKSkpCi0gICAgICAgICAgICByZXR1cm4geyBzdGQ6Om1heChpbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sICpmaXhlZFdpZHRoKSwgc3RkOjptYXgoaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtLCAqZml4ZWRXaWR0aCkgfTsKLSAgICAgICAgcmV0
dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0gICAgfTsKLSAgICAvLyBGSVhNRSBDaGVj
ayBmb3IgYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgPSBjb25zdHJhaW5CeU1pbk1heFdpZHRoKGNlbGxCb3gsIGNvbXB1dGVkSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cygpKTsKLSAgICAvLyBFeHBhbmQgd2l0aCBib3JkZXIKLSAgICBp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLmV4cGFuZChjb21wdXRlZENlbGxCb3JkZXIoY2VsbCku
d2lkdGgoKSk7Ci0gICAgLy8gcGFkZGluZwotICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMu
ZXhwYW5kKGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ0xlZnQoKSkudmFsdWVPcigwKSArIGZpeGVk
VmFsdWUoc3R5bGUucGFkZGluZ1JpZ2h0KCkpLnZhbHVlT3IoMCkpOwotICAgIC8vIGFuZCBtYXJn
aW4KLSAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLmV4cGFuZChmaXhlZFZhbHVlKHN0eWxl
Lm1hcmdpblN0YXJ0KCkpLnZhbHVlT3IoMCkgKyBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpbkVuZCgp
KS52YWx1ZU9yKDApKTsKLSAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKLX0K
LQotCi1JbmxpbmVMYXlvdXRVbml0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojp1
c2VkQmFzZWxpbmVGb3JDZWxsKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCkKLXsKLSAgICAv
LyBUaGUgYmFzZWxpbmUgb2YgYSBjZWxsIGlzIGRlZmluZWQgYXMgdGhlIGJhc2VsaW5lIG9mIHRo
ZSBmaXJzdCBpbi1mbG93IGxpbmUgYm94IGluIHRoZSBjZWxsLAotICAgIC8vIG9yIHRoZSBmaXJz
dCBpbi1mbG93IHRhYmxlLXJvdyBpbiB0aGUgY2VsbCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0Lgot
ICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1Y2ggbGluZSBib3gsIHRoZSBiYXNlbGluZSBpcyB0aGUg
Ym90dG9tIG9mIGNvbnRlbnQgZWRnZSBvZiB0aGUgY2VsbCBib3guCi0gICAgaWYgKGNlbGxCb3gu
ZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gbGF5
b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShjZWxsQm94KS5saW5l
cygpWzBdLmJhc2VsaW5lKCk7Ci0gICAgZm9yIChhdXRvJiBjZWxsRGVzY2VuZGFudCA6IGRlc2Nl
bmRhbnRzT2ZUeXBlPENvbnRhaW5lckJveD4oY2VsbEJveCkpIHsKLSAgICAgICAgaWYgKGNlbGxE
ZXNjZW5kYW50LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAg
ICAgICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlRm9yQ2VsbCA9IGxheW91dFN0YXRlKCku
ZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoY2VsbERlc2NlbmRhbnQpOwotICAgICAg
ICAgICAgaWYgKCFpbmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsLmxpbmVzKCkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsLmxp
bmVzKClbMF0uYmFzZWxpbmUoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2VsbERlc2NlbmRh
bnQuZXN0YWJsaXNoZXNUYWJsZUZvcm1hdHRpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICByZXR1
cm4gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZFRhYmxlRm9ybWF0dGluZ1N0YXRlKGNlbGxEZXNj
ZW5kYW50KS50YWJsZUdyaWQoKS5yb3dzKCkubGlzdCgpWzBdLmJhc2VsaW5lKCk7Ci0gICAgfQot
ICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGNlbGxCb3gpLmNv
bnRlbnRCb3hCb3R0b20oKTsKLX0KLQotfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5n
Q29udGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiNjRhNjJkZmYwNzE0YWQ2OGZhNzg5Njg1ZmJiYjIxMzc0ZmYxNTMy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29u
dGV4dFF1aXJrcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ0NvbnRleHQu
aCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAi
TGF5b3V0Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCi0jaW5jbHVkZSAi
TGF5b3V0U3RhdGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7
Ci0KLWJvb2wgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpzaG91bGRJZ25vcmVDaGls
ZENvbnRlbnRWZXJ0aWNhbE1hcmdpbihjb25zdCBDb250YWluZXJCb3gmIGNlbGxCb3gpIGNvbnN0
Ci17Ci0gICAgLy8gTm9ybWFsbHkgQkZDIHJvb3QgY29udGVudCBoZWlnaHQgdGFrZXMgdGhlIG1h
cmdpbiBib3ggb2YgdGhlIGNoaWxkIGNvbnRlbnQgYXMgdmVydGljYWwgbWFyZ2lucyBkb24ndCBj
b2xsYXBzZSB3aXRoIEJGQyByb290cywKLSAgICAvLyBidXQgdGFibGUgY2VsbCBib3hlcyBkbyBj
b2xsYXBzZSB0aGVpciAobm9uLWV4aXN0aW5nKSBtYXJnaW5zIHdpdGggY2hpbGQgcXVpcmsgbWFy
Z2lucyAoc28gbXVjaCBxdWlyayksIHNvIGhlcmUgd2UgY2hlY2sKLSAgICAvLyBpZiB0aGUgY29u
dGVudCBoZWlnaHQgc2hvdWxkIGluY2x1ZGUgbWFyZ2lucyBvciBub3QuCi0gICAgLy8gZS5nIDx0
YWJsZT48dHI+PHRkPjxwPnRleHQgY29udGVudDwvdGQ+PC90cj48L3RhYmxlPiA8LSA8cD4ncyBx
dWlyayBtYXJnaW4gY29sbGFwc2VzIHdpdGggdGhlIDx0ZD4gc28gaXRzIGNvbnRlbnQKLSAgICAv
LyBoZWlnaHQgc2hvdWxkIG5vdCBpbmNsdWRlIHZlcnRpY2FsIG1hcmdpbnMuCi0gICAgaWYgKCFs
YXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGNlbGxCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFjZWxsQm94Lmhhc0luRmxvd0NoaWxkKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY2VsbEJveC5maXJzdEluRmxvd0NoaWxkKCkt
PnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSB8fCBjZWxsQm94Lmxhc3RJbkZsb3dDaGls
ZCgpLT5zdHlsZSgpLmhhc01hcmdpbkFmdGVyUXVpcmsoKTsKLX0KLQotfQotfQotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFi
bGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzc5NWMzNjc0Mjc5NGExZWNiMGE5MGJkMDM4ZTc0OTFjYTdkOTRlYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUv
VGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5
LmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUg
IklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5Lmgi
CisjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dERlc2NlbmRhbnRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKKyNp
bmNsdWRlICJUYWJsZUZvcm1hdHRpbmdRdWlya3MuaCIKKyNpbmNsdWRlICJUYWJsZUZvcm1hdHRp
bmdTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKwor
VGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OlRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KGNvbnN0IFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQmIHRhYmxlRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IFRhYmxl
R3JpZCYgZ3JpZCkKKyAgICA6IEZvcm1hdHRpbmdHZW9tZXRyeSh0YWJsZUZvcm1hdHRpbmdDb250
ZXh0KQorICAgICwgbV9ncmlkKGdyaWQpCit7Cit9CisKK0xheW91dFVuaXQgVGFibGVGb3JtYXR0
aW5nR2VvbWV0cnk6OmNlbGxIZWlnaChjb25zdCBDb250YWluZXJCb3gmIGNlbGxCb3gpIGNvbnN0
Cit7CisgICAgQVNTRVJUKGNlbGxCb3guaXNJbkZsb3coKSk7CisgICAgYXV0byBjb250ZW50SGVp
Z2h0ID0gTGF5b3V0VW5pdCB7IH07CisgICAgaWYgKGxheW91dFN0YXRlKCkuaW5RdWlya3NNb2Rl
KCkgJiYgVGFibGVGb3JtYXR0aW5nUXVpcmtzOjpzaG91bGRJZ25vcmVDaGlsZENvbnRlbnRWZXJ0
aWNhbE1hcmdpbihjZWxsQm94KSkgeworICAgICAgICBBU1NFUlQoY2VsbEJveC5maXJzdEluRmxv
d0NoaWxkKCkpOworICAgICAgICBhdXRvIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0
dGluZ0NvbnRleHQoKTsKKyAgICAgICAgYXV0byYgZmlyc3RJbkZsb3dDaGlsZCA9ICpjZWxsQm94
LmZpcnN0SW5GbG93Q2hpbGQoKTsKKyAgICAgICAgYXV0byYgbGFzdEluRmxvd0NoaWxkID0gKmNl
bGxCb3gubGFzdEluRmxvd0NoaWxkKCk7CisgICAgICAgIGF1dG8mIGZpcnN0SW5GbG93Q2hpbGRH
ZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGZpcnN0SW5GbG93Q2hp
bGQsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVSZWFzb246OlRhYmxlUXVpcmtOZWVkc0dlb21l
dHJ5RnJvbUVzdGFibGlzaGVkRm9ybWF0dGluZ0NvbnRleHQpOworICAgICAgICBhdXRvJiBsYXN0
SW5GbG93Q2hpbGRHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxh
c3RJbkZsb3dDaGlsZCwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6VGFibGVRdWly
a05lZWRzR2VvbWV0cnlGcm9tRXN0YWJsaXNoZWRGb3JtYXR0aW5nQ29udGV4dCk7CisKKyAgICAg
ICAgYXV0byB0b3AgPSBmaXJzdEluRmxvd0NoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVp
cmsoKSA/IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGZpcnN0SW5GbG93Q2hpbGRHZW9tZXRy
eSkudG9wKCkgOiBCb3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmaXJzdEluRmxvd0NoaWxkR2Vv
bWV0cnkpLnRvcCgpOworICAgICAgICBhdXRvIGJvdHRvbSA9IGxhc3RJbkZsb3dDaGlsZC5zdHls
ZSgpLmhhc01hcmdpbkFmdGVyUXVpcmsoKSA/IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGxh
c3RJbkZsb3dDaGlsZEdlb21ldHJ5KS5ib3R0b20oKSA6IEJveEdlb21ldHJ5OjptYXJnaW5Cb3hS
ZWN0KGxhc3RJbkZsb3dDaGlsZEdlb21ldHJ5KS5ib3R0b20oKTsKKyAgICAgICAgY29udGVudEhl
aWdodCA9IGJvdHRvbSAtIHRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgY29udGVudEhlaWdodCA9
IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY2VsbEJveCk7CisgICAgcmV0
dXJuIHN0ZDo6bWF4KGNvbXB1dGVkSGVpZ2h0KGNlbGxCb3gpLnZhbHVlT3IoMF9sdSksIGNvbnRl
bnRIZWlnaHQpOworfQorCitFZGdlcyBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRD
ZWxsQm9yZGVyKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCkgY29uc3QKK3sKKyAgICBhdXRv
JiBjZWxsQm94ID0gY2VsbC5ib3goKTsKKyAgICBhdXRvIGJvcmRlciA9IGNvbXB1dGVkQm9yZGVy
KGNlbGxCb3gpOworICAgIGF1dG8gY29sbGFwc2VkQm9yZGVyID0gbV9ncmlkLmNvbGxhcHNlZEJv
cmRlcigpOworICAgIGlmICghY29sbGFwc2VkQm9yZGVyKQorICAgICAgICByZXR1cm4gYm9yZGVy
OworCisgICAgLy8gV2UgbWlnaHQgd2FudCB0byBjYWNoZSB0aGVzZSBjb2xsYXBzZWQgYm9yZGVy
cyBvbiB0aGUgZ3JpZC4KKyAgICBhdXRvIGNlbGxQb3NpdGlvbiA9IGNlbGwucG9zaXRpb24oKTsK
KyAgICAvLyBDb2xsYXBzZWQgYm9yZGVyIGxlZnQgZnJvbSB0YWJsZSBhbmQgYWRqYWNlbnQgY2Vs
bHMuCisgICAgaWYgKCFjZWxsUG9zaXRpb24uY29sdW1uKQorICAgICAgICBib3JkZXIuaG9yaXpv
bnRhbC5sZWZ0ID0gY29sbGFwc2VkQm9yZGVyLT5ob3Jpem9udGFsLmxlZnQgLyAyOworICAgIGVs
c2UgeworICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyUmlnaHQgPSBjb21wdXRlZEJvcmRlciht
X2dyaWQuc2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4gLSAxLCBjZWxsUG9zaXRpb24ucm93IH0p
LT5jZWxsKCkuYm94KCkpLmhvcml6b250YWwucmlnaHQ7CisgICAgICAgIGJvcmRlci5ob3Jpem9u
dGFsLmxlZnQgPSBzdGQ6Om1heChib3JkZXIuaG9yaXpvbnRhbC5sZWZ0LCBhZGphY2VudEJvcmRl
clJpZ2h0KSAvIDI7CisgICAgfQorICAgIC8vIENvbGxhcHNlZCBib3JkZXIgcmlnaHQgZnJvbSB0
YWJsZSBhbmQgYWRqYWNlbnQgY2VsbHMuCisgICAgaWYgKGNlbGxQb3NpdGlvbi5jb2x1bW4gPT0g
bV9ncmlkLmNvbHVtbnMoKS5zaXplKCkgLSAxKQorICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5y
aWdodCA9IGNvbGxhcHNlZEJvcmRlci0+aG9yaXpvbnRhbC5yaWdodCAvIDI7CisgICAgZWxzZSB7
CisgICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJMZWZ0ID0gY29tcHV0ZWRCb3JkZXIobV9ncmlk
LnNsb3QoeyBjZWxsUG9zaXRpb24uY29sdW1uICsgMSwgY2VsbFBvc2l0aW9uLnJvdyB9KS0+Y2Vs
bCgpLmJveCgpKS5ob3Jpem9udGFsLmxlZnQ7CisgICAgICAgIGJvcmRlci5ob3Jpem9udGFsLnJp
Z2h0ID0gc3RkOjptYXgoYm9yZGVyLmhvcml6b250YWwucmlnaHQsIGFkamFjZW50Qm9yZGVyTGVm
dCkgLyAyOworICAgIH0KKyAgICAvLyBDb2xsYXBzZWQgYm9yZGVyIHRvcCBmcm9tIHRhYmxlLCBy
b3cgYW5kIGFkamFjZW50IGNlbGxzLgorICAgIGF1dG8mIHJvd3MgPSBtX2dyaWQucm93cygpLmxp
c3QoKTsKKyAgICBpZiAoIWNlbGxQb3NpdGlvbi5yb3cpCisgICAgICAgIGJvcmRlci52ZXJ0aWNh
bC50b3AgPSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLnRvcCAvIDI7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJCb3R0b20gPSBjb21wdXRlZEJvcmRlcihtX2dyaWQu
c2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgLSAxIH0pLT5jZWxs
KCkuYm94KCkpLnZlcnRpY2FsLmJvdHRvbTsKKyAgICAgICAgYXV0byBhZGphY2VudFJvd0JvdHRv
bSA9IGNvbXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyAtIDFdLmJveCgpKS52ZXJ0
aWNhbC5ib3R0b207CisgICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6
Om1heChhZGphY2VudEJvcmRlckJvdHRvbSwgYWRqYWNlbnRSb3dCb3R0b20pOworICAgICAgICBi
b3JkZXIudmVydGljYWwudG9wID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLnRvcCwgYWRqYWNl
bnRDb2xsYXBzZWRCb3JkZXIpIC8gMjsKKyAgICB9CisgICAgLy8gQ29sbGFwc2VkIGJvcmRlciBi
b3R0b20gZnJvbSB0YWJsZSwgcm93IGFuZCBhZGphY2VudCBjZWxscy4KKyAgICBpZiAoY2VsbFBv
c2l0aW9uLnJvdyA9PSBtX2dyaWQucm93cygpLnNpemUoKSAtIDEpCisgICAgICAgIGJvcmRlci52
ZXJ0aWNhbC5ib3R0b20gPSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLmJvdHRvbSAvIDI7Cisg
ICAgZWxzZSB7CisgICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJUb3AgPSBjb21wdXRlZEJvcmRl
cihtX2dyaWQuc2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgKyAx
IH0pLT5jZWxsKCkuYm94KCkpLnZlcnRpY2FsLnRvcDsKKyAgICAgICAgYXV0byBhZGphY2VudFJv
d1RvcCA9IGNvbXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyArIDFdLmJveCgpKS52
ZXJ0aWNhbC50b3A7CisgICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6
Om1heChhZGphY2VudEJvcmRlclRvcCwgYWRqYWNlbnRSb3dUb3ApOworICAgICAgICBib3JkZXIu
dmVydGljYWwuYm90dG9tID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLmJvdHRvbSwgYWRqYWNl
bnRDb2xsYXBzZWRCb3JkZXIpIC8gMjsKKyAgICB9CisgICAgcmV0dXJuIGJvcmRlcjsKK30KKwor
T3B0aW9uYWw8TGF5b3V0VW5pdD4gVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkQ29s
dW1uV2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1bW5Cb3gpCit7CisgICAgLy8gQ2hlY2sg
Ym90aCBzdHlsZSBhbmQgPGNvbD4ncyB3aWR0aCBhdHRyaWJ1dGUuCisgICAgLy8gRklYTUU6IEZp
Z3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGNhbGN1bGF0ZWQgdmFsdWVzLCBsaWtlIDxjb2wgc3R5
bGU9IndpZHRoOiAxMCUiPi4KKyAgICBpZiAoYXV0byBjb21wdXRlZFdpZHRoVmFsdWUgPSBjb21w
dXRlZFdpZHRoKGNvbHVtbkJveCwgeyB9KSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhW
YWx1ZTsKKyAgICByZXR1cm4gY29sdW1uQm94LmNvbHVtbldpZHRoKCk7Cit9CisKK0ludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OmludHJpbnNpY1dpZHRo
Q29uc3RyYWludHNGb3JDZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCkKK3sKKyAgICBh
dXRvJiBjZWxsQm94ID0gY2VsbC5ib3goKTsKKyAgICBhdXRvJiBzdHlsZSA9IGNlbGxCb3guc3R5
bGUoKTsKKworICAgIGF1dG8gY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gWyZd
KCkgLT4gSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7CisgICAgICAgIC8vIEV2ZW4gZml4ZWQg
d2lkdGggY2VsbHMgZXhwYW5kIHRvIHRoZWlyIG1pbmltdW0gY29udGVudCB3aWR0aAorICAgICAg
ICAvLyA8dGQgc3R5bGU9IndpZHRoOiAxMHB4Ij50ZXN0X2NvbnRlbnQ8L3RkPiB3aWxsIHNpemUg
dG8gbWF4KG1pbmltdW0gY29udGVudCB3aWR0aCwgY29tcHV0ZWQgd2lkdGgpLgorICAgICAgICBh
dXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
IHsgfTsKKyAgICAgICAgaWYgKGNlbGxCb3guaGFzQ2hpbGQoKSkKKyAgICAgICAgICAgIGludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29u
dGV4dChjZWxsQm94LCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKCk7CisgICAgICAgIGlmIChhdXRvIGZpeGVkV2lkdGggPSBmaXhlZFZhbHVlKHN0eWxl
LmxvZ2ljYWxXaWR0aCgpKSkKKyAgICAgICAgICAgIHJldHVybiB7IHN0ZDo6bWF4KGludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgKmZpeGVkV2lkdGgpLCBzdGQ6Om1heChpbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sICpmaXhlZFdpZHRoKSB9OworICAgICAgICByZXR1
cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKKyAgICB9OworICAgIC8vIEZJWE1FIENoZWNr
IGZvciBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyA9IGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY2VsbEJveCwgY29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCkpOworICAgIC8vIEV4cGFuZCB3aXRoIGJvcmRlcgorICAgIGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGNvbXB1dGVkQ2VsbEJvcmRlcihjZWxsKS53
aWR0aCgpKTsKKyAgICAvLyBwYWRkaW5nCisgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5l
eHBhbmQoZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nTGVmdCgpKS52YWx1ZU9yKDApICsgZml4ZWRW
YWx1ZShzdHlsZS5wYWRkaW5nUmlnaHQoKSkudmFsdWVPcigwKSk7CisgICAgLy8gYW5kIG1hcmdp
bgorICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGZpeGVkVmFsdWUoc3R5bGUu
bWFyZ2luU3RhcnQoKSkudmFsdWVPcigwKSArIGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luRW5kKCkp
LnZhbHVlT3IoMCkpOworICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOworfQor
CisKK0lubGluZUxheW91dFVuaXQgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OnVzZWRCYXNlbGlu
ZUZvckNlbGwoY29uc3QgQ29udGFpbmVyQm94JiBjZWxsQm94KQoreworICAgIC8vIFRoZSBiYXNl
bGluZSBvZiBhIGNlbGwgaXMgZGVmaW5lZCBhcyB0aGUgYmFzZWxpbmUgb2YgdGhlIGZpcnN0IGlu
LWZsb3cgbGluZSBib3ggaW4gdGhlIGNlbGwsCisgICAgLy8gb3IgdGhlIGZpcnN0IGluLWZsb3cg
dGFibGUtcm93IGluIHRoZSBjZWxsLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCisgICAgLy8gSWYg
dGhlcmUgaXMgbm8gc3VjaCBsaW5lIGJveCwgdGhlIGJhc2VsaW5lIGlzIHRoZSBib3R0b20gb2Yg
Y29udGVudCBlZGdlIG9mIHRoZSBjZWxsIGJveC4KKyAgICBpZiAoY2VsbEJveC5lc3RhYmxpc2hl
c0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBsYXlvdXRTdGF0ZSgp
LmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGNlbGxCb3gpLmxpbmVzKClbMF0uYmFz
ZWxpbmUoKTsKKyAgICBmb3IgKGF1dG8mIGNlbGxEZXNjZW5kYW50IDogZGVzY2VuZGFudHNPZlR5
cGU8Q29udGFpbmVyQm94PihjZWxsQm94KSkgeworICAgICAgICBpZiAoY2VsbERlc2NlbmRhbnQu
ZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICBhdXRv
JiBpbmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hl
ZElubGluZUZvcm1hdHRpbmdTdGF0ZShjZWxsRGVzY2VuZGFudCk7CisgICAgICAgICAgICBpZiAo
IWlubGluZUZvcm1hdHRpbmdTdGF0ZUZvckNlbGwubGluZXMoKS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGlubGluZUZvcm1hdHRpbmdTdGF0ZUZvckNlbGwubGluZXMoKVswXS5i
YXNlbGluZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChjZWxsRGVzY2VuZGFudC5lc3RhYmxp
c2hlc1RhYmxlRm9ybWF0dGluZ0NvbnRleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXRT
dGF0ZSgpLmVzdGFibGlzaGVkVGFibGVGb3JtYXR0aW5nU3RhdGUoY2VsbERlc2NlbmRhbnQpLnRh
YmxlR3JpZCgpLnJvd3MoKS5saXN0KClbMF0uYmFzZWxpbmUoKTsKKyAgICB9CisgICAgcmV0dXJu
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goY2VsbEJveCkuY29udGVudEJveEJv
dHRvbSgpOworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZv
cm1hdHRpbmdHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwY2E1OTFjMzU3ODY1Mjk4NTUxMmQwNWI4
Zjg5NmU2NzkxMmZjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAgLTAs
MCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nR2VvbWV0cnkuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIFRhYmxl
Rm9ybWF0dGluZ0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdHZW9tZXRyeSB7CitwdWJsaWM6
CisgICAgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4
dCYsIGNvbnN0IFRhYmxlR3JpZCYpOworCisgICAgTGF5b3V0VW5pdCBjZWxsSGVpZ2goY29uc3Qg
Q29udGFpbmVyQm94JikgY29uc3Q7CisgICAgRWRnZXMgY29tcHV0ZWRDZWxsQm9yZGVyKGNvbnN0
IFRhYmxlR3JpZDo6Q2VsbCYpIGNvbnN0OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1
dGVkQ29sdW1uV2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1bW5Cb3gpOworICAgIEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGwoY29u
c3QgVGFibGVHcmlkOjpDZWxsJik7CisgICAgSW5saW5lTGF5b3V0VW5pdCB1c2VkQmFzZWxpbmVG
b3JDZWxsKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCk7CisKK3ByaXZhdGU6CisgICAgY29u
c3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5nR2VvbWV0cnk6
OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CisgICAgY29uc3QgVGFibGVHcmlkJiBtX2dyaWQ7Cit9
OworCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdR
dWlya3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzMGViODE4YWMxMGQwM2RkOGUzNmUwMmE5NjM0ZDI5Njhk
MjViMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUYWJsZUZvcm1h
dHRpbmdRdWlya3MuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQor
CisjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94Lmgi
CisjaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIExheW91dCB7CisKK1RhYmxlRm9ybWF0dGluZ1F1aXJrczo6VGFibGVGb3JtYXR0aW5nUXVp
cmtzKGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIHRhYmxlRm9ybWF0dGluZ0NvbnRleHQp
CisgICAgOiBGb3JtYXR0aW5nUXVpcmtzKHRhYmxlRm9ybWF0dGluZ0NvbnRleHQpCit7CisgICAg
QVNTRVJUKGxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkpOworfQorCitib29sIFRhYmxlRm9y
bWF0dGluZ1F1aXJrczo6c2hvdWxkSWdub3JlQ2hpbGRDb250ZW50VmVydGljYWxNYXJnaW4oY29u
c3QgQ29udGFpbmVyQm94JiBjZWxsQm94KQoreworICAgIC8vIE5vcm1hbGx5IEJGQyByb290IGNv
bnRlbnQgaGVpZ2h0IHRha2VzIHRoZSBtYXJnaW4gYm94IG9mIHRoZSBjaGlsZCBjb250ZW50IGFz
IHZlcnRpY2FsIG1hcmdpbnMgZG9uJ3QgY29sbGFwc2Ugd2l0aCBCRkMgcm9vdHMsCisgICAgLy8g
YnV0IHRhYmxlIGNlbGwgYm94ZXMgZG8gY29sbGFwc2UgdGhlaXIgKG5vbi1leGlzdGluZykgbWFy
Z2lucyB3aXRoIGNoaWxkIHF1aXJrIG1hcmdpbnMgKHNvIG11Y2ggcXVpcmspLCBzbyBoZXJlIHdl
IGNoZWNrCisgICAgLy8gaWYgdGhlIGNvbnRlbnQgaGVpZ2h0IHNob3VsZCBpbmNsdWRlIG1hcmdp
bnMgb3Igbm90LgorICAgIC8vIGUuZyA8dGFibGU+PHRyPjx0ZD48cD50ZXh0IGNvbnRlbnQ8L3Rk
PjwvdHI+PC90YWJsZT4gPC0gPHA+J3MgcXVpcmsgbWFyZ2luIGNvbGxhcHNlcyB3aXRoIHRoZSA8
dGQ+IHNvIGl0cyBjb250ZW50CisgICAgLy8gaGVpZ2h0IHNob3VsZCBub3QgaW5jbHVkZSB2ZXJ0
aWNhbCBtYXJnaW5zLgorICAgIGlmIChjZWxsQm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghY2VsbEJveC5oYXNJ
bkZsb3dDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNlbGxCb3gu
Zmlyc3RJbkZsb3dDaGlsZCgpLT5zdHlsZSgpLmhhc01hcmdpbkJlZm9yZVF1aXJrKCkgfHwgY2Vs
bEJveC5sYXN0SW5GbG93Q2hpbGQoKS0+c3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCk7Cit9
CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWly
a3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iYWIzZTRmNmIyZDJiYzkyMGU5NGVkZWIzMzRiMGJlNjYzZDVlOTA1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuaApAQCAtMCwwICsxLDQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKKworI2luY2x1ZGUgIkZvcm1hdHRpbmdRdWlya3MuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIFRhYmxlRm9ybWF0dGluZ1F1aXJrcyA6
IHB1YmxpYyBGb3JtYXR0aW5nUXVpcmtzIHsKK3B1YmxpYzoKKyAgICBUYWJsZUZvcm1hdHRpbmdR
dWlya3MoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYpOworCisgICAgc3RhdGljIGJvb2wg
c2hvdWxkSWdub3JlQ2hpbGRDb250ZW50VmVydGljYWxNYXJnaW4oY29uc3QgQ29udGFpbmVyQm94
Jik7Cit9OworCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUdyaWQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVHcmlkLmgKaW5kZXggNjI1YTNm
NDRiZjYyMjFjZTQ2NTI1OTQwOTEzZWNlMTBiMDZhYWNlZi4uYWZlODQxN2M5YWUxOTU3OWE4ZTNi
NjBiNzFjYjNjMDNmM2RjMDljNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUdyaWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlR3JpZC5oCkBAIC01OCw4ICs1OCw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbGxhcHNlZEJvcmRlcihjb25zdCBFZGdlcyYgY29s
bGFwc2VkQm9yZGVyKSB7IG1fY29sbGFwc2VkQm9yZGVyID0gY29sbGFwc2VkQm9yZGVyOyB9CiAg
ICAgT3B0aW9uYWw8RWRnZXM+IGNvbGxhcHNlZEJvcmRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29s
bGFwc2VkQm9yZGVyOyB9CiAKLSAgICB2b2lkIHNldFdpZHRoQ29uc3RyYWludHMoRm9ybWF0dGlu
Z0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25zdHJh
aW50cykgeyBtX2ludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzOyB9Ci0gICAgT3B0aW9uYWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRo
Q29uc3RyYWludHM+IHdpZHRoQ29uc3RyYWludHMoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHM7IH0KKyAgICB2b2lkIHNldFdpZHRoQ29uc3RyYWludHMoSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKSB7IG1faW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyA9IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7IH0KKyAgICBP
cHRpb25hbDxJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzPiB3aWR0aENvbnN0cmFpbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOyB9CiAKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Nsb3RNYXAuaXNFbXB0eSgpOyB9CiAgICAgLy8gQ29s
dW1uIHJlcHJlc2VudHMgYSB2ZXJ0aWNhbCBzZXQgb2Ygc2xvdHMgaW4gdGhlIGdyaWQuIEEgY29s
dW1uIGhhcyBob3Jpem9udGFsIHBvc2l0aW9uIGFuZCB3aWR0aC4KQEAgLTE4Nyw4ICsxODcsOCBA
QCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IENlbGwmIGNlbGwoKSBjb25zdCB7IHJldHVybiAqbV9j
ZWxsOyB9CiAgICAgICAgIENlbGwmIGNlbGwoKSB7IHJldHVybiAqbV9jZWxsOyB9CiAKLSAgICAg
ICAgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIHdp
ZHRoQ29uc3RyYWludHMoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoQ29uc3RyYWludHM7IH0KLSAg
ICAgICAgdm9pZCBzZXRXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0OjpJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzJiB3aWR0aENvbnN0cmFpbnRzKSB7IG1fd2lkdGhDb25z
dHJhaW50cyA9IHdpZHRoQ29uc3RyYWludHM7IH0KKyAgICAgICAgY29uc3QgSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyYgd2lkdGhDb25zdHJhaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhD
b25zdHJhaW50czsgfQorICAgICAgICB2b2lkIHNldFdpZHRoQ29uc3RyYWludHMoY29uc3QgSW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyYgd2lkdGhDb25zdHJhaW50cykgeyBtX3dpZHRoQ29uc3Ry
YWludHMgPSB3aWR0aENvbnN0cmFpbnRzOyB9CiAKICAgICAgICAgLy8gSW5pdGlhbCBzbG90IHBv
c2l0aW9uIGZvciBhIHNwYW5uaW5nIGNlbGwuCiAgICAgICAgIC8vIDx0ZD48L3RkPjx0ZCBjb2xz
cGFuPTI+PC90ZD4gWzEsIDBdIHNsb3QgaGFzIGNvbHVtbiBzcGFuIG9mIDIuCkBAIC0yMDUsNyAr
MjA1LDcgQEAgcHVibGljOgogICAgICAgICBXZWFrUHRyPENlbGw+IG1fY2VsbDsKICAgICAgICAg
Ym9vbCBtX2lzQ29sdW1uU3Bhbm5lZCB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgbV9pc1Jvd1Nw
YW5uZWQgeyBmYWxzZSB9OwotICAgICAgICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyBtX3dpZHRoQ29uc3RyYWludHM7CisgICAgICAgIEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgbV93aWR0aENvbnN0cmFpbnRzOwogICAgIH07CiAKICAgICBjb25zdCBDb2x1
bW5zJiBjb2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5zOyB9CkBAIC0yMzEsNyArMjMx
LDcgQEAgcHJpdmF0ZToKIAogICAgIExheW91dFVuaXQgbV9ob3Jpem9udGFsU3BhY2luZzsKICAg
ICBMYXlvdXRVbml0IG1fdmVydGljYWxTcGFjaW5nOwotICAgIE9wdGlvbmFsPEZvcm1hdHRpbmdD
b250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzPiBtX2ludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHM7CisgICAgT3B0aW9uYWw8SW50cmluc2ljV2lkdGhDb25zdHJhaW50cz4gbV9pbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzOwogICAgIE9wdGlvbmFsPEVkZ2VzPiBtX2NvbGxhcHNlZEJvcmRl
cjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVy
LmNwcAppbmRleCA3ZDE3NmE3OWE1YjlkMjc5Zjc4ZGY2YzdjZjRkMmEzYmFiNGJhZWYwLi5jNjZi
NDNjNGUwNDQxN2IwNzE4OTczNmFkMzdjZTQ5ZWYzZWU3NjJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50
QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUg
IklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmgiCkBAIC0zNjYsNyArMzY3LDcg
QEAgdm9pZCBJbmxpbmVDb250ZW50QnVpbGRlcjo6Y3JlYXRlRGlzcGxheUxpbmVzKGNvbnN0IExh
eW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXQKIHZvaWQgSW5saW5lQ29udGVudEJ1aWxkZXI6OmNy
ZWF0ZURpc3BsYXlOb25Sb290SW5saW5lQm94ZXMoY29uc3QgTGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIElubGluZUNvbnRlbnQmIGlubGlu
ZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlID0gaW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuZm9ybWF0dGluZ1N0YXRlKCk7Ci0gICAgYXV0byBpbmxpbmVR
dWlya3MgPSBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5xdWlya3MoKTsKKyAgICBhdXRvIGlubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeSA9IExheW91dDo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5IHsg
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQgfTsKICAgICBmb3IgKHNpemVfdCBsaW5lSW5kZXggPSAw
OyBsaW5lSW5kZXggPCBpbmxpbmVGb3JtYXR0aW5nU3RhdGUubGluZUJveGVzKCkuc2l6ZSgpOyAr
K2xpbmVJbmRleCkgewogICAgICAgICBhdXRvJiBsaW5lQm94ID0gaW5saW5lRm9ybWF0dGluZ1N0
YXRlLmxpbmVCb3hlcygpW2xpbmVJbmRleF07CiAgICAgICAgIGlmICghbGluZUJveC5oYXNJbmxp
bmVCb3goKSkKQEAgLTM4MSw3ICszODIsNyBAQCB2b2lkIElubGluZUNvbnRlbnRCdWlsZGVyOjpj
cmVhdGVEaXNwbGF5Tm9uUm9vdElubGluZUJveGVzKGNvbnN0IExheW91dDo6SW5saW5lRgogICAg
ICAgICAgICAgYXV0byBpbmxpbmVCb3hSZWN0ID0gbGluZUJveC5sb2dpY2FsQm9yZGVyQm94Rm9y
SW5saW5lQm94KGxheW91dEJveCwgYm94R2VvbWV0cnkpOwogICAgICAgICAgICAgaW5saW5lQm94
UmVjdC5tb3ZlQnkobGluZUJveExvZ2ljYWxSZWN0LnRvcExlZnQoKSk7CiAKLSAgICAgICAgICAg
IGlubGluZUNvbnRlbnQubm9uUm9vdElubGluZUJveGVzLmFwcGVuZCh7IGxpbmVJbmRleCwgbGF5
b3V0Qm94LCBpbmxpbmVCb3hSZWN0LCBpbmxpbmVRdWlya3MuaW5saW5lTGV2ZWxCb3hBZmZlY3Rz
TGluZUJveChpbmxpbmVMZXZlbEJveCwgbGluZUJveCkgfSk7CisgICAgICAgICAgICBpbmxpbmVD
b250ZW50Lm5vblJvb3RJbmxpbmVCb3hlcy5hcHBlbmQoeyBsaW5lSW5kZXgsIGxheW91dEJveCwg
aW5saW5lQm94UmVjdCwgaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmlubGluZUxldmVsQm94QWZm
ZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpIH0pOwogICAgICAgICB9CiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0Lnhjd29ya3NwYWNlL3hjc2hhcmVkZGF0YS94Y3NjaGVt
ZXMvQWxsIFNvdXJjZS54Y3NjaGVtZSBiL1dlYktpdC54Y3dvcmtzcGFjZS94Y3NoYXJlZGRhdGEv
eGNzY2hlbWVzL0FsbCBTb3VyY2UueGNzY2hlbWUKaW5kZXggNTA2NjI3NTAxNzYxM2E3ZDg4YmU0
MWMyMWMyMGQyN2Q5NzE5OGRmYS4uODI5OGYwNTFhYTdmOWFkMzJmNGIwNzk5NTRlMDk2ODEzMGQ4
MzJiZiAxMDA2NDQKLS0tIGEvV2ViS2l0Lnhjd29ya3NwYWNlL3hjc2hhcmVkZGF0YS94Y3NjaGVt
ZXMvQWxsIFNvdXJjZS54Y3NjaGVtZQkKKysrIGIvV2ViS2l0Lnhjd29ya3NwYWNlL3hjc2hhcmVk
ZGF0YS94Y3NjaGVtZXMvQWxsIFNvdXJjZS54Y3NjaGVtZQkKQEAgLTEyNyw4ICsxMjcsOCBAQAog
ICAgICAgICAgICAgPEJ1aWxkYWJsZVJlZmVyZW5jZQogICAgICAgICAgICAgICAgQnVpbGRhYmxl
SWRlbnRpZmllciA9ICJwcmltYXJ5IgogICAgICAgICAgICAgICAgQmx1ZXByaW50SWRlbnRpZmll
ciA9ICIxQTUwREIzODExMEEzQzEzMDAwRDNGRTUiCi0gICAgICAgICAgICAgICBCdWlsZGFibGVO
YW1lID0gIkFsbCIKLSAgICAgICAgICAgICAgIEJsdWVwcmludE5hbWUgPSAiQWxsIgorICAgICAg
ICAgICAgICAgQnVpbGRhYmxlTmFtZSA9ICJGcmFtZXdvcmsgJmFtcDsgWFBDIFNlcnZpY2VzIgor
ICAgICAgICAgICAgICAgQmx1ZXByaW50TmFtZSA9ICJGcmFtZXdvcmsgJmFtcDsgWFBDIFNlcnZp
Y2VzIgogICAgICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6U291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qIj4KICAgICAgICAgICAgIDwvQnVpbGRhYmxlUmVm
ZXJlbmNlPgogICAgICAgICAgPC9CdWlsZEFjdGlvbkVudHJ5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428455</attachid>
            <date>2021-05-12 21:02:26 -0700</date>
            <delta_ts>2021-05-16 09:03:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.txt</filename>
            <type>text/plain</type>
            <size>511865</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE5ZDEyNDY2NTYyNDFh
MTM2ZGYzNzJjYjQxZjMyZGViNWY0MzYwNy4uY2U1ZjlkMDEyMTEwY2FlNWVhY2ZkMWNiMTc0MTEx
YzhhYzMyNWJjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIxLTA1LTEyICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gTW92ZSBnZW9tZXRy
eS9xdWlyay9tYXJnaW5jb2xsYXBzZSBjbGFzc2VzIG91dCBvZiB0aGVpciBGb3JtYXR0aW5nQ29u
dGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
NzMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBpcyBqdXN0IGFuIHVtYnJlbGxhIHBhdGNoLgorCiAyMDIxLTA1LTA1ICBBbGljaWEgQm95YSBH
YXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbTVNFXVtHU3RyZWFtZXJdIFdl
YktpdE1lZGlhU3JjIHJld29yayB2MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBkZTk1NzBhNTI2N2VmNTM5
NTdlMzdkMTY2MGNlMmRhMzhjZWU3N2ZiLi45MmI4NDYzZDk2NDQ1YjIyN2JlYTEwZjY1ODE5Nzgz
OTdmYmE2NDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTUxMSw4ICsxNTExLDggQEAgaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKIGluc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5jcHAKIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlclJ1bnRpbWVBZ2VudC5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0
UXVpcmtzLmNwcAorbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnku
Y3BwCitsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdRdWlya3MuY3BwCiBsYXlv
dXQvRm9ybWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L0xheW91dENvbnRleHQuY3BwCiBsYXlvdXQv
TGF5b3V0UGhhc2UuY3BwCkBAIC0xNTIwLDIzICsxNTIwLDIzIEBAIGxheW91dC9MYXlvdXRTdGF0
ZS5jcHAKIGxheW91dC9MYXlvdXRVbml0cy5jcHAKIGxheW91dC9WZXJpZmljYXRpb24uY3BwCiBs
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3Bw
Ci1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHAKLWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0
aW5nQ29udGV4dFF1aXJrcy5jcHAKK2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxv
Y2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCitsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2Nr
L0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxv
Y2svQmxvY2tGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL1ByZWNvbXB1dGVkQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKIGxheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9U
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nUXVpcmtzLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0
aW5nQ29udGV4dC5jcHAKLWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKK2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9G
bGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4
L0ZsZXhGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHAK
IGxheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmNwcAogbGF5b3V0L2Zsb2F0cy9GbG9hdGlu
Z1N0YXRlLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lQ29udGVu
dEJyZWFrZXIuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5jcHAKLWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKK2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKK2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdRdWlya3MuY3BwCiBsYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwCiBs
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVJdGVtLmNwcAogbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5jcHAKQEAgLTE1NjMsOCArMTU2Myw4
IEBAIGxheW91dC9sYXlvdXR0cmVlL0xheW91dExpbmVCcmVha0JveC5jcHAKIGxheW91dC9sYXlv
dXR0cmVlL0xheW91dFJlcGxhY2VkQm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJl
ZUJ1aWxkZXIuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0
dGluZ0NvbnRleHQuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKLWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFi
bGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKK2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCitsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAKIGxheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlR3JpZC5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvdGFibGUvVGFibGVMYXlvdXQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjE5MzUzYzlmMWI5NTVlNTRkM2QxYTIxZDkz
M2U2YzJhNDdjNjMwMy4uOWY3ZTM4MWQwYTRmZDM4ZGI5OWQ3N2E5OWU4MWI4OGFjYmRmM2MzOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjEyNSwxNCArMjEyNSwyMSBAQAogCQk2RUU4QTc3MzEwRjgwM0YzMDA1QTRBMjQgLyog
SlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzLmggKi87IH07CiAJCTZGMEI5OEI1MjNGMjY4RUMwMEVFQzJGMiAvKiBMYXlv
dXRJbmxpbmVUZXh0Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RjBCOThCMzIzRjI2OEVCMDBFRUMyRjIgLyogTGF5b3V0SW5saW5lVGV4dEJveC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGMENE
Njk1MjI5RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjBDRDY5NDIyOUVEMzI3MDBDNTk5NEUgLyogSW5s
aW5lTGluZS5oICovOyB9OworCQk2RjE1NTIyMTI2NDc2QjVDMDBFMzUzQzYgLyogVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RjE1NTIyMDI2NDc2QjVCMDBFMzUzQzYgLyogVGFibGVXcmFwcGVy
QmxvY2tGb3JtYXR0aW5nUXVpcmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNkYxNzI2NEYyNDcwQzYwQjAwNTE4Qzk2IC8qIFRhYmxlV3JhcHBl
ckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGMTcyNjRFMjQ3MEM2MEEwMDUxOEM5NiAvKiBUYWJsZVdyYXBwZXJC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNkYxQ0MxREUyMjVGOEI0OTAwNzIwQUQyIC8qIElubGluZVRleHRJ
dGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjFD
QzFERDIyNUY4QjQyMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjI2QkI2QzIzMzQzRTZGMDAyRjJC
RUEgLyogTGF5b3V0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkYyNkJCNkIyMzM0M0U1QjAwMkYyQkVBIC8qIExheW91dENvbnRleHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjI2RUI0
ODIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGMjZFQjQ2MjM0MDA0QTUwMDY5MDZFMiAv
KiBJbmxpbmVMaW5lQnVpbGRlci5oICovOyB9OworCQk2RjI5MUY0QTI2NDg4MjFFMDBCMTU3ODUg
LyogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RjI5MUY0OTI2NDg4MjFFMDBCMTU3ODUgLyogSW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNkYzNDBFQTIyNjQ4ODUyRDAwQTYzQTAwIC8qIEZvcm1hdHRpbmdHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYzNDBF
QTEyNjQ4ODUyRDAwQTYzQTAwIC8qIEZvcm1hdHRpbmdHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGMzYwRTUwMjM5OTk0MjEwMDE1
MTJBNyAvKiBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYzNjBFNEUyMzk5OTQyMDAwMTUxMkE3IC8qIElubGlu
ZVNvZnRMaW5lQnJlYWtJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNkYzRkJBOTgyNTU2RTMxMzAwMzUzMEZEIC8qIExheW91dEludGVncmF0
aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGM0ZCQTk3MjU1NkUzMTIwMDM1MzBGRCAvKiBMYXlvdXRJbnRlZ3Jh
dGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY0MERBODIyNTEzMDMzQTAwRUMwNEI3IC8qIElubGluZVJl
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGNDBE
QTgxMjUxMzAzM0EwMEVDMDRCNyAvKiBJbmxpbmVSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkY0OUMzRTcyNjQ3OUIzQzAwNTE5NTNEIC8q
IFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkY0OUMzRTYyNjQ3OUIzQjAwNTE5NTNEIC8qIFRhYmxlRm9ybWF0dGlu
Z1F1aXJrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTZGNTZCNDQ3MjY0NzlFNjIwMEFBRTI1NyAvKiBGb3JtYXR0aW5nUXVpcmtzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjU2QjQ0NjI2NDc5RTYx
MDBBQUUyNTcgLyogRm9ybWF0dGluZ1F1aXJrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGNjM4M0Y2MjQyN0FGNEEwMERBQkE1MyAvKiBMYXlv
dXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RjYzODNGNDI0MjdBRjQ5MDBEQUJBNTMgLyogTGF5b3V0SW5pdGlh
bENvbnRhaW5pbmdCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTZGNkRGMzZGMjY0NzIyRUEwMDkzRTgzNCAvKiBCbG9ja01hcmdpbkNvbGxh
cHNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjZE
RjM2RTI2NDcyMkVBMDA5M0U4MzQgLyogQmxvY2tNYXJnaW5Db2xsYXBzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZGNzlGMEMxMjY0ODdDNEMw
MDY5ODJCNiAvKiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3OUYwQzAyNjQ4N0M0QzAwNjk4MkI2IC8qIEJs
b2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNkY3Q0EzQzYyMDhDMjk1NzAwMkYyOUFCIC8qIExheW91dFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjdDQTND
NDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDQTIwOEMyQjJFMDAyRjI5QUIgLyog
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZGOTE0MjExMjUxNTIxMzgwMDRFNEZFQSAvKiBJbmxpbmVMaW5lR2VvbWV0cnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGOTE0MjBGMjUx
NTIxMzcwMDRFNEZFQSAvKiBJbmxpbmVMaW5lR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjE0OCw2ICsyMTU1LDcgQEAKIAkJNkY5
OTVBMzYxQTcwODMzNzAwQTczNUY0IC8qIEpTV2ViR0xTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Rjk5NUEyQzFBNzA4MzM3MDBBNzM1RjQgLyog
SlNXZWJHTFN5bmMuaCAqLzsgfTsKIAkJNkY5OTVBMzgxQTcwODMzNzAwQTczNUY0IC8qIEpTV2Vi
R0xUcmFuc2Zvcm1GZWVkYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkY5OTVBMkUxQTcwODMzNzAwQTczNUY0IC8qIEpTV2ViR0xUcmFuc2Zvcm1G
ZWVkYmFjay5oICovOyB9OwogCQk2Rjk5NUEzQTFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFZl
cnRleEFycmF5T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2Rjk5NUEzMDFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0LmggKi87IH07CisJCTZGOUQxQUZBMjY0NzYxMzYwMEY1RDNBRCAvKiBCbG9ja0Zvcm1hdHRp
bmdRdWlya3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZGOUQxQUY5MjY0NzYxMzUwMEY1RDNBRCAvKiBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RkE0NDU0RTg5
OEYyRkMxNjhCQzM4QzEgLyogSlNCZWZvcmVVbmxvYWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlFMDRBMjdCRUQyRjgxRjk4RTkwMjJCIC8q
IEpTQmVmb3JlVW5sb2FkRXZlbnQuaCAqLzsgfTsKIAkJNkZCMTFCNUMyMTc4M0ZEMDAwRTJBNTc0
IC8qIFRleHRVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RkIxMUI1OTIxNzgzRkNGMDBFMkE1NzQgLyogVGV4dFV0aWwuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RkIyNDAwNTIzREZGMTI4MDA3
OTY0NTggLyogSW5saW5lTGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkZCMjQwMDMyM0RGRjEyNzAwNzk2NDU4IC8qIElubGluZUxpbmVCb3gu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjE1
OSw3ICsyMTY3LDEwIEBACiAJCTZGQ0UxQTFBMjI2MThBQkQwMDRGMDM0MyAvKiBMYXlvdXRJbnRl
Z3JhdGlvblJ1bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkZDRTFBMTgyMjYxOEFCMzAwNEYwMzQzIC8qIExheW91dEludGVncmF0aW9uUnVuLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZEMDk1NDMy
NTExMTUyMjAwOTg4NzdEIC8qIExheW91dEdlb21ldHJ5UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZEMDk1NDEyNTExMTUyMjAwOTg4NzdEIC8q
IExheW91dEdlb21ldHJ5UmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTZGRTE5ODE3MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVDb250ZW50
QnJlYWtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUNvbnRlbnRCcmVha2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZFNjM2RTgyNjQ3
OTYyOTAwRjA5NTFFIC8qIElubGluZUZvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGRTYzNkU3MjY0Nzk2MjkwMEYwOTUxRSAv
KiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZFN0NGQTIyMTc3RUVGMjAwNUIxNTczIC8qIElubGluZUl0
ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGRTdD
RkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggKi87IH07CisJCTZGRjkxMUY3MjY0
ODdGQzgwMDIwMjFERiAvKiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkY5MTFGNjI2NDg3RkM4MDAyMDIxREYg
LyogRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTZGRjlBMDg0MjY0ODgzNDIwMDEyNTBEOCAvKiBUYWJsZUZv
cm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkZGOUEwODMyNjQ4ODM0MTAwMTI1MEQ4IC8qIFRhYmxlRm9ybWF0dGluZ0dlb21l
dHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NkZGQTRDMDEyM0YyRkVEOTAwN0U0RUJDIC8qIExheW91dExpbmVCcmVha0JveC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZGQTRDMDAyM0YyRkVEOTAw
N0U0RUJDIC8qIExheW91dExpbmVCcmVha0JveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGRkRDNDQyMjEyRUZGMTcwMEE5Q0E5MSAvKiBGbG9h
dEF2b2lkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZGRkRDNDQwMjEyRUZGMTYwMEE5Q0E5MSAvKiBGbG9hdEF2b2lkZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDlBMDFGRTFFM0QwQkREMDA2
QjBENEMgLyogTW9kdWxlRmV0Y2hGYWlsdXJlS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA5QTAxRkQxRTNEMEJDQzAwNkIwRDRDIC8qIE1vZHVs
ZUZldGNoRmFpbHVyZUtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNjQxNSw3ICs2NDI2LDcgQEAKIAkJMTFDNUYxMzQyMDA1MjdGOTAwMDFB
RTYwIC8qIFJlbmRlclRyZWVCdWlsZGVyTWF0aE1MLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyTWF0aE1MLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTExQ0IyNzg2MjAzQkE1NzAwMDRBMURDOSAvKiBSZW5kZXJUcmVlQnVpbGRlckZ1
bGxTY3JlZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGdWxsU2Ny
ZWVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFDQjI3ODcyMDNCQTU3MDAw
NEExREM5IC8qIFJlbmRlclRyZWVCdWlsZGVyRnVsbFNjcmVlbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMTFEMTlDMkUyMzE1OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0
cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxMUQxOUMyRTIzMTU5QkFFMDA4
RjI0RDMgLyogVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxMUU1MTYzNTI2MUUxQTA1MDBFNjlGMjUgLyogV2ViWFJJbnB1dFNwYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlhSSW5wdXRTcGFjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxMUU1MTYzNzI2MUUxQTA1MDBFNjlGMjUgLyogV2ViWFJJbnB1dFNw
YWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlhSSW5wdXRT
cGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExRTUxNjNBMjYxRTFBMTQw
MEU2OUYyNSAvKiBXZWJYUkdhbWVwYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViWFJHYW1lcGFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTM2LDEy
ICs5OTQ3LDEzIEBACiAJCTZFRDhDMzc4MTgzQkZGOEMwMDlFNTNCRCAvKiBCb3hTaGFwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb3hTaGFwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RUU4QTc3MDEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
V2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZFRThBNzcxMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGMDgzMERGMjBCNDY5NTEwMDhBOTQ1
QiAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNkYwODMwREYyMEI0Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0dl
b21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwQjk4QjMyM0YyNjhFQjAwRUVDMkYy
IC8qIExheW91dElubGluZVRleHRCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGF5b3V0SW5saW5lVGV4dEJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
RjBCOThCNjIzRjI2OTA2MDBFRUMyRjIgLyogTGF5b3V0SW5saW5lVGV4dEJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMYXlvdXRJbmxpbmVUZXh0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkYwQ0Q2OTIyMjlFRDMxOTAwQzU5OTRFIC8qIElubGluZUxpbmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZGMENENjk0MjI5RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNkYxMEIwODYyMkI4NTY4RDAwOTBFNjlDIC8qIElubGluZUZvcm1hdHRpbmdD
b250ZXh0UXVpcmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUZvcm1hdHRpbmdDb250
ZXh0UXVpcmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYxMEIwODYyMkI4
NTY4RDAwOTBFNjlDIC8qIElubGluZUZvcm1hdHRpbmdRdWlya3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZGMTU1MjIwMjY0NzZCNUIwMEUzNTNDNiAvKiBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1h
dHRpbmdRdWlya3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGMTcyNjRDMjQ3MEM1RjcwMDUxOEM5NiAvKiBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjE3MjY0RTI0NzBD
NjBBMDA1MThDOTYgLyogVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMUNDMURDMjI1RjhCNDEw
MDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVU
ZXh0SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTUyLDI1ICs5OTY0
LDMxIEBACiAJCTZGMjZCQjY5MjMzNDNFNUEwMDJGMkJFQSAvKiBMYXlvdXRDb250ZXh0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dENvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RjI2QkI2QjIzMzQzRTVCMDAyRjJCRUEgLyogTGF5b3V0Q29udGV4dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMYXlvdXRDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZGMjZFQjQ2MjM0MDA0QTUwMDY5MDZFMiAvKiBJbmxpbmVMaW5lQnVpbGRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lQnVpbGRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYyOTFGNDkyNjQ4ODIxRTAwQjE1Nzg1IC8qIElubGluZUZv
cm1hdHRpbmdHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxp
bmVGb3JtYXR0aW5nR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYz
NDBFQTEyNjQ4ODUyRDAwQTYzQTAwIC8qIEZvcm1hdHRpbmdHZW9tZXRyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXR0aW5nR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNkYzNUVGQUYyMTg3Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1h
dHRpbmdHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RjM2MEU0RTIzOTk5NDIwMDAxNTEyQTcgLyogSW5saW5lU29mdExpbmVCcmVha0l0ZW0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lU29mdExpbmVCcmVha0l0ZW0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRkJBOTYyNTU2RTMwODAwMzUzMEZE
IC8qIExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGM0ZCQTk3MjU1NkUzMTIwMDM1MzBGRCAvKiBMYXlv
dXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY0MERBODEyNTEzMDMzQTAwRUMwNEI3IC8qIElu
bGluZVJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lUmVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjQ5QzNFNjI2NDc5QjNCMDA1MTk1M0Qg
LyogVGFibGVGb3JtYXR0aW5nUXVpcmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RjRBNUJENTIyRjlGMTZCMDBBODBGMjUgLyogTGF5b3V0UGhhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2
RjU2QjQ0NjI2NDc5RTYxMDBBQUUyNTcgLyogRm9ybWF0dGluZ1F1aXJrcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXR0aW5nUXVpcmtzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZGNUI3RUFBMjMwMEE3OUUwMDY3RDlDMyAvKiBUYWJsZUdyaWQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGFibGVHcmlkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkY2MzgzRjQyNDI3QUY0OTAwREFCQTUzIC8qIExheW91dEluaXRpYWxDb250YWlu
aW5nQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0SW5pdGlh
bENvbnRhaW5pbmdCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjY2MzhE
NDI0OUUyNjhCMDAxOTI1RkMgLyogVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1
aXJrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0UXVpcmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkY2NjM4RDQy
NDlFMjY4QjAwMTkyNUZDIC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjY5QTc5OTI0RDZGQUI4MDBFNkI4NUQg
LyogSW5saW5lTGluZUJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lQm94LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkY3MERFREQyNTExMjZGMzAwRjBGQzc4
IC8qIEZsZXhGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZsZXhGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkY2REYzNkUyNjQ3MjJFQTAwOTNFODM0IC8qIEJsb2NrTWFyZ2luQ29sbGFwc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tNYXJnaW5Db2xsYXBzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjcwREVERDI1MTEyNkYzMDBGMEZDNzgg
LyogRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbGV4Rm9y
bWF0dGluZ0dlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3Mzkx
OEMyMTA2Q0VERDAwNkFGMjYyIC8qIExheW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91
dFVuaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGNzlGMEMwMjY0ODdDNEMw
MDY5ODJCNiAvKiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RjdCOENFQzIzNjI2RTY2MDBDOUZGMTUgLyogSW5saW5lSXRlbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVJdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8qIExheW91dFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExheW91dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
N0NBM0M1MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMYXlvdXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGN0NB
M0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RjdDQTNDOTIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjhGNDYwMTIxQjAzQkI0MDA0MUFDM0EgLyog
Rm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0dGlu
Z0NvbnRleHRRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjhGNDYw
MzIxQjAzQkM2MDA0MUFDM0EgLyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkY4RjQ2MDEyMUIwM0JCNDAwNDFBQzNBIC8qIEZvcm1h
dHRpbmdRdWlya3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0dGluZ1F1aXJrcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGOEY0NjAzMjFCMDNCQzYwMDQxQUMzQSAv
KiBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvY2tGb3Jt
YXR0aW5nUXVpcmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY5MTQyMEYy
NTE1MjEzNzAwNEU0RkVBIC8qIElubGluZUxpbmVHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkY5NURFNEIyMzdCODg5QjAwRTUxN0UxIC8qIEludmFsaWRhdGlvbkNvbnRl
eHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW52YWxpZGF0aW9uQ29udGV4
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2Rjk1REU0QzIzN0I4ODlDMDBFNTE3
RTEgLyogSW52YWxpZGF0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW52YWxpZGF0aW9uU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5
OTksNiArMTAwMTcsNyBAQAogCQk2Rjk5NUEyRTFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFRy
YW5zZm9ybUZlZWRiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2Vi
R0xUcmFuc2Zvcm1GZWVkYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2Rjk5
NUEyRjFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGOTk1QTMwMUE3MDgzMzcwMEE3
MzVGNCAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTZGOUQxQUY5MjY0NzYxMzUwMEY1RDNBRCAvKiBCbG9ja0Zvcm1hdHRpbmdR
dWlya3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tGb3JtYXR0aW5n
UXVpcmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGQUUxNkJBMjQwNkRFN0Uw
MEE0ODQxNCAvKiBQcmVjb21wdXRlZEJsb2NrTWFyZ2luQ29sbGFwc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUHJlY29tcHV0ZWRCbG9ja01hcmdpbkNvbGxhcHNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkZCMEVEMTEyNDI3QjZDNjAwMjczN0U2IC8qIExheW91dEluaXRp
YWxDb250YWluaW5nQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW5pdGlhbENv
bnRhaW5pbmdCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGQjExQjU5
MjE3ODNGQ0YwMEUyQTU3NCAvKiBUZXh0VXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXh0VXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwMTEs
OSArMTAwMzAsOSBAQAogCQk2RkI3RDJEODI1MEZEN0VGMDAwMjA3QUEgLyogRmxleEZvcm1hdHRp
bmdTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbGV4Rm9ybWF0dGluZ1N0YXRlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCN0QyRDkyNTBGRDdGQzAwMDIwN0FBIC8q
IEZsZXhGb3JtYXR0aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbGV4Rm9ybWF0dGluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkZCN0QyREEyNTBGRDdGQzAwMDIwN0FBIC8qIEZsZXhGb3JtYXR0aW5nU3RhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxleEZvcm1hdHRpbmdTdGF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyogRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtYXR0aW5nQ29u
dGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZCQjg2MDUy
MEI0NjRCNjAwREFEOTM4IC8qIEZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb3JtYXR0aW5nR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RkMzRjk0NTI1MTY3NTY2MDBBNDlCRUEgLyogSW5saW5lTGluZVJ1bi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lUnVuLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTZGQzUzQUVCMjRBRjdBOEUwMDYwNTlGRSAvKiBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0UXVpcmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlRm9ybWF0dGluZ0NvbnRl
eHRRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RkM1M0FFQjI0QUY3
QThFMDA2MDU5RkUgLyogVGFibGVGb3JtYXR0aW5nUXVpcmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZGQzVDQTkyMjJFMzU5OTMwMEIxM0UxMSAvKiBUYWJsZUZvcm1hdHRpbmdTdGF0ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZUZvcm1hdHRpbmdTdGF0ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZGQzVDQTk0MjJFMzU5OTQwMEIxM0UxMSAvKiBUYWJsZUZvcm1h
dHRpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlRm9ybWF0dGluZ0NvbnRl
eHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkM1Q0E5NTIyRTM1OTk0MDBC
MTNFMTEgLyogVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUYWJsZUZv
cm1hdHRpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDAyMiwx
MiArMTAwNDEsMTUgQEAKIAkJNkZEMDk1NDEyNTExMTUyMjAwOTg4NzdEIC8qIExheW91dEdlb21l
dHJ5UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRHZW9tZXRy
eVJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZFMTk4MTMyMTc4Mzk3QjAw
NDQ2RjA4IC8qIElubGluZUNvbnRlbnRCcmVha2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElubGluZUNvbnRlbnRCcmVha2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUNvbnRlbnRC
cmVha2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUNvbnRlbnRC
cmVha2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGRTYzNkU3MjY0Nzk2Mjkw
MEYwOTUxRSAvKiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElubGluZUZvcm1hdHRpbmdRdWlya3MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkZFN0FBMjYyMUMzN0I2MzAwMjk2RENEIC8qIE1hcmdpblR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1hcmdpblR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGRTdDRkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkZFOEU2RjcyMzdCQTVFODAwNzU4RDI2IC8qIEludmFsaWRhdGlvbkNvbnRleHQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW52YWxpZGF0aW9uQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZGRThFNkY4MjM3QkE2QjIwMDc1OEQyNiAvKiBJbnZhbGlkYXRp
b25TdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnZhbGlkYXRpb25TdGF0ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTlGMDkyMjIyMTEwMzUwMDRDNTA4MiAvKiBD
b250ZW50Q2hhbmdlT2JzZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29udGVudENoYW5nZU9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkZFRkU4MUQyMkY5RDIyQTAwMTE0OTI3IC8qIExheW91dFBoYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExheW91dFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGRjkx
MUY2MjY0ODdGQzgwMDIwMjFERiAvKiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZGOUEwODMyNjQ4ODM0MTAwMTI1MEQ4IC8qIFRhYmxl
Rm9ybWF0dGluZ0dlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRh
YmxlRm9ybWF0dGluZ0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
RjlGMUJFMjQ2RDk2NkMwMDQzNTA4MyAvKiBUYWJsZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUYWJsZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRkE0
QkZFMjNGMkZFQ0QwMDdFNEVCQyAvKiBMYXlvdXRMaW5lQnJlYWtCb3guY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTGF5b3V0TGluZUJyZWFrQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkZGQTRDMDAyM0YyRkVEOTAwN0U0RUJDIC8qIExheW91dExpbmVCcmVha0JveC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRMaW5lQnJlYWtCb3guaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MjMyLDExICsxODI1NCwxNCBAQAogCQkJCTZG
RDRGRTNFMjQ3MEIzQUQwMDczNzRDQyAvKiB0YWJsZXdyYXBwZXIgKi8sCiAJCQkJMTE1Q0ZBNkQy
MDhBRkFCNjAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTEx
NUNGQTZDMjA4QUZBQjYwMDFFNjk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggKi8sCi0J
CQkJNkYwODMwREYyMEI0Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAgKi8sCi0JCQkJNkY4RjQ2MDMyMUIwM0JDNjAwNDFBQzNBIC8qIEJsb2NrRm9ybWF0
dGluZ0NvbnRleHRRdWlya3MuY3BwICovLAorCQkJCTZGMDgzMERGMjBCNDY5NTEwMDhBOTQ1QiAv
KiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkY3OUYwQzAyNjQ4N0M0QzAw
Njk4MkI2IC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8sCisJCQkJNkY4RjQ2MDMyMUIw
M0JDNjAwNDFBQzNBIC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8sCisJCQkJNkY5RDFB
RjkyNjQ3NjEzNTAwRjVEM0FEIC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oICovLAogCQkJCTEx
NUNGQTc5MjA4QjhEOUQwMDFFNjk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5jcHAgKi8sCiAJ
CQkJMTE1Q0ZBNzgyMDhCOEQ5RDAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0dGluZ1N0YXRlLmggKi8s
CiAJCQkJMTE1Q0ZBODkyMDhCOTIxQTAwMUU2OTkxIC8qIEJsb2NrTWFyZ2luQ29sbGFwc2UuY3Bw
ICovLAorCQkJCTZGNkRGMzZFMjY0NzIyRUEwMDkzRTgzNCAvKiBCbG9ja01hcmdpbkNvbGxhcHNl
LmggKi8sCiAJCQkJNkZBRTE2QkEyNDA2REU3RTAwQTQ4NDE0IC8qIFByZWNvbXB1dGVkQmxvY2tN
YXJnaW5Db2xsYXBzZS5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IGJsb2NrOwpAQCAtMTgyNTAs
OCArMTgyNzUsMTAgQEAKIAkJCQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lQ29u
dGVudEJyZWFrZXIuaCAqLywKIAkJCQk2RjdDQTNDOTIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICovLAotCQkJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0
RTBGNCAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLywKLQkJCQk2RjEw
QjA4NjIyQjg1NjhEMDA5MEU2OUMgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3Bw
ICovLAorCQkJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0RTBGNCAvKiBJbmxpbmVGb3JtYXR0aW5nR2Vv
bWV0cnkuY3BwICovLAorCQkJCTZGMjkxRjQ5MjY0ODgyMUUwMEIxNTc4NSAvKiBJbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnkuaCAqLywKKwkJCQk2RjEwQjA4NjIyQjg1NjhEMDA5MEU2OUMgLyogSW5s
aW5lRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8sCisJCQkJNkZFNjM2RTcyNjQ3OTYyOTAwRjA5NTFF
IC8qIElubGluZUZvcm1hdHRpbmdRdWlya3MuaCAqLywKIAkJCQkxMTVDRkE3RDIwOEI4RTEwMDAx
RTY5OTEgLyogSW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcCAqLywKIAkJCQkxMTVDRkE3QzIwOEI4
RTEwMDAxRTY5OTEgLyogSW5saW5lRm9ybWF0dGluZ1N0YXRlLmggKi8sCiAJCQkJNkY3QjhDRUMy
MzYyNkU2NjAwQzlGRjE1IC8qIElubGluZUl0ZW0uY3BwICovLApAQCAtMjI2MDYsOCArMjI2MzMs
MTAgQEAKIAkJCQk2RkM1Q0E5MTIyRTM1OTMzMDBCMTNFMTEgLyogdGFibGUgKi8sCiAJCQkJMTE1
Q0ZBNjkyMDhBRjdEMDAwMUU2OTkxIC8qIEZvcm1hdHRpbmdDb250ZXh0LmNwcCAqLywKIAkJCQkx
MTVDRkE2ODIwOEFGN0QwMDAxRTY5OTEgLyogRm9ybWF0dGluZ0NvbnRleHQuaCAqLywKLQkJCQk2
RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyogRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAg
Ki8sCi0JCQkJNkY4RjQ2MDEyMUIwM0JCNDAwNDFBQzNBIC8qIEZvcm1hdHRpbmdDb250ZXh0UXVp
cmtzLmNwcCAqLywKKwkJCQk2RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyogRm9ybWF0dGluZ0dl
b21ldHJ5LmNwcCAqLywKKwkJCQk2RjM0MEVBMTI2NDg4NTJEMDBBNjNBMDAgLyogRm9ybWF0dGlu
Z0dlb21ldHJ5LmggKi8sCisJCQkJNkY4RjQ2MDEyMUIwM0JCNDAwNDFBQzNBIC8qIEZvcm1hdHRp
bmdRdWlya3MuY3BwICovLAorCQkJCTZGNTZCNDQ2MjY0NzlFNjEwMEFBRTI1NyAvKiBGb3JtYXR0
aW5nUXVpcmtzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGZvcm1hdHRpbmdDb250ZXh0czsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMjYyOCw3ICsyMjY1Nyw4IEBACiAJCQljaGls
ZHJlbiA9ICgKIAkJCQk2RkI3RDJENzI1MEZEN0U1MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdD
b250ZXh0LmNwcCAqLywKIAkJCQk2RkI3RDJEOTI1MEZEN0ZDMDAwMjA3QUEgLyogRmxleEZvcm1h
dHRpbmdDb250ZXh0LmggKi8sCi0JCQkJNkY3MERFREQyNTExMjZGMzAwRjBGQzc4IC8qIEZsZXhG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLywKKwkJCQk2RjcwREVERDI1MTEyNkYzMDBG
MEZDNzggLyogRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkZGOTExRjYyNjQ4
N0ZDODAwMjAyMURGIC8qIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLywKIAkJCQk2RkI3RDJE
ODI1MEZEN0VGMDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdTdGF0ZS5jcHAgKi8sCiAJCQkJNkZC
N0QyREEyNTBGRDdGQzAwMDIwN0FBIC8qIEZsZXhGb3JtYXR0aW5nU3RhdGUuaCAqLywKIAkJCSk7
CkBAIC0yMjY0MCw4ICsyMjY3MCwxMCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNkZDNUNBOTQy
MkUzNTk5NDAwQjEzRTExIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTZG
QzVDQTk1MjJFMzU5OTQwMEIxM0UxMSAvKiBUYWJsZUZvcm1hdHRpbmdDb250ZXh0LmggKi8sCi0J
CQkJMTFEMTlDMkUyMzE1OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAgKi8sCi0JCQkJNkZDNTNBRUIyNEFGN0E4RTAwNjA1OUZFIC8qIFRhYmxlRm9ybWF0
dGluZ0NvbnRleHRRdWlya3MuY3BwICovLAorCQkJCTExRDE5QzJFMjMxNTlCQUUwMDhGMjREMyAv
KiBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkZGOUEwODMyNjQ4ODM0MTAw
MTI1MEQ4IC8qIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8sCisJCQkJNkZDNTNBRUIyNEFG
N0E4RTAwNjA1OUZFIC8qIFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8sCisJCQkJNkY0OUMz
RTYyNjQ3OUIzQjAwNTE5NTNEIC8qIFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5oICovLAogCQkJCTZG
QzVDQTkyMjJFMzU5OTMwMEIxM0UxMSAvKiBUYWJsZUZvcm1hdHRpbmdTdGF0ZS5jcHAgKi8sCiAJ
CQkJNkZDNUNBOTYyMkUzNTk5NTAwQjEzRTExIC8qIFRhYmxlRm9ybWF0dGluZ1N0YXRlLmggKi8s
CiAJCQkJNkY1QjdFQUEyMzAwQTc5RTAwNjdEOUMzIC8qIFRhYmxlR3JpZC5jcHAgKi8sCkBAIC0y
MjY2OSw3ICsyMjcwMSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk2RjE3MjY0QzI0NzBDNUY3
MDA1MThDOTYgLyogVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgKi8sCiAJ
CQkJNkYxNzI2NEUyNDcwQzYwQTAwNTE4Qzk2IC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuaCAqLywKLQkJCQk2RjY2MzhENDI0OUUyNjhCMDAxOTI1RkMgLyogVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgKi8sCisJCQkJNkY2NjM4RDQyNDlF
MjY4QjAwMTkyNUZDIC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8s
CisJCQkJNkYxNTUyMjAyNjQ3NkI1QjAwRTM1M0M2IC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0
dGluZ1F1aXJrcy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0YWJsZXdyYXBwZXI7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzE0MjYsNyArMzE0NTksNiBAQAogCQkJCTMxQTc5NUM3
MTg4OEJDQjIwMDM4MkY5MCAvKiBBTkdMRUluc3RhbmNlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNDQ5RDg2NEYyNjQwQzlDNTAwMDEyMkRFIC8qIEhpZ2hsaWdodFZp
c2liaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAv
KiBBbmltYXRpb25FZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5ODQ4MDExQTFE
ODE3QjAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTFB
RDEyNjIzNkQ4NkU1MDA2RkYzN0MgLyogQW5pbWF0aW9uRXZlbnRCYXNlLmggaW4gSGVhZGVycyAq
LywKQEAgLTMxNjU5LDcgKzMxNjkxLDEwIEBACiAJCQkJMkVCNEJDRDMxMjFGMDNFMzAwRUM0ODg1
IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZDN0YxMjJC
OEEzRDAwMUZEMUY3IC8qIEJsb2JVUkwuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTZFMjA4
QUZBQjcwMDFFNjk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
KwkJCQk2Rjc5RjBDMTI2NDg3QzRDMDA2OTgyQjYgLyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnku
aCBpbiBIZWFkZXJzICovLAorCQkJCTZGOUQxQUZBMjY0NzYxMzYwMEY1RDNBRCAvKiBCbG9ja0Zv
cm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTdBMjA4QjhEOUQwMDFF
Njk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkY2REYz
NkYyNjQ3MjJFQTAwOTNFODM0IC8qIEJsb2NrTWFyZ2luQ29sbGFwc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNUVCNUUxMEU4MUJFODcwMEIyNTk2NSAvKiBCb3JkZXJEYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1ODk1NTZFRDE4RDRBNDQwMDA3NjRCMDMgLyogQm9yZGVyRWRnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8qIEJvcmRlclZhbHVlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMyNDY0LDYgKzMyNDk5LDcgQEAKIAkJCQkzNzJDMDBEOTEyOTYx
OUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRG
MEExNTRGMDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2RkI3RDJERDI1MEZEODI4MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggaW4g
SGVhZGVycyAqLywKKwkJCQk2RkY5MTFGNzI2NDg3RkM4MDAyMDIxREYgLyogRmxleEZvcm1hdHRp
bmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCN0QyREUyNTBGRDgyRTAwMDIwN0FB
IC8qIEZsZXhGb3JtYXR0aW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRkRDNDQyMjEy
RUZGMTcwMEE5Q0E5MSAvKiBGbG9hdEF2b2lkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDcz
QkFBMEMzOTlCMUYwMDBGNTk3OSAvKiBGbG9hdENvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMzI1MTcsNiArMzI1NTMsOCBAQAogCQkJCUQwNUNFRDJBMEE0MEJCMkMwMEM1QUYzOCAvKiBG
b3JtYXRCbG9ja0NvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRTZDQkZCMTg3RjM3MDcw
MEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTZB
MjA4QUY3RDAwMDFFNjk5MSAvKiBGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNkYzNDBFQTIyNjQ4ODUyRDAwQTYzQTAwIC8qIEZvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNkY1NkI0NDcyNjQ3OUU2MjAwQUFFMjU3IC8qIEZvcm1hdHRpbmdRdWly
a3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTc2MjA4QUZFMzAwMDFFNjk5MSAvKiBGb3Jt
YXR0aW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1MDY2NEY4MTU3RjUyREMwMEFDMjI2
RiAvKiBGb3JtQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2NzAwQ0U5MjNB
MTAwN0VGM0NEIC8qIEZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNjQ1LDYgKzMyNjgz
LDcgQEAKIAkJCQk0NDMwRDAwQjI1NzVBODNFMDA0NkQ0MDEgLyogSGlnaGxpZ2h0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogSGlnaGxpZ2h0RGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDQzMEQwMEQyNTc1QThBNTAwNDZENDAxIC8qIEhpZ2hsaWdo
dFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NDlEODY0RjI2NDBDOUM1MDAwMTIyREUg
LyogSGlnaGxpZ2h0VmlzaWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5NEQxNTQwQzI3
NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3RENFMjAyMTA4
MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTE3NDFEMTEwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggaW4gSGVhZGVycyAqLywK
QEAgLTMyOTIwLDYgKzMyOTU5LDggQEAKIAkJCQlCNTdDQjUyRTE4MkEzRUZDMDA3OUE2NDcgLyog
SW5saW5lRWxlbWVudEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkY1RTMwQTE1NUEwNTAw
MEE0MjM0IC8qIElubGluZUZsb3dCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTZGN0NBM0NBMjA4
QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNkYyOTFGNEEyNjQ4ODIxRTAwQjE1Nzg1IC8qIElubGluZUZvcm1hdHRpbmdHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkZFNjM2RTgyNjQ3OTYyOTAwRjA5NTFFIC8qIElubGlu
ZUZvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTdFMjA4QjhFMTAw
MDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZG
RTdDRkEyMjE3N0VFRjIwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0U3ODkxNjExMjBENjA4MDA2MEVDRTUgLyogSW5saW5lSXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzQ4ODMsNyArMzQ5MjQsNiBAQAogCQkJCUU0NkI0MUY5MUNCMjRFNzAwMDhGMTFE
RSAvKiBTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OThBRUQy
MTNGQjIyNEQwMDkwQjFBQSAvKiBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4QTQ4NDc4MEU1MjcyQzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyogU3R5bGVTY29w
ZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRTRFMkE4MUUzQjE3MTAwMDIzQkI4QSAv
KiBTY3JpcHRFbGVtZW50Q2FjaGVkU2NyaXB0RmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQxMTIyM0JBMjYwMjQ0RkUwMEIwQTBCNiAvKiBTY3JpcHRFeGVjdXRp
b25Db250ZXh0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTE5OSw2ICszNTIzOSw3
IEBACiAJCQkJRTQ5NDZFQUYxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5NEYzN0UyMzY2MTYyNjAwM0FBNUM3IC8qIFN0eWxlUnVsZVR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NjFENjVGMUJCMEM4MEQwMENCNTY0NSAvKiBTdHls
ZVNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyog
U3R5bGVTY29wZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTRBNEY0OEFBMTZCMERGQzAw
MEVEQkIyOSAvKiBTdHlsZVNjb3BlUnVsZVNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0N0E1
RTNFMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTlENjM4MDEwMUFGMTczMjIwMDMxQTE1QyAvKiBTdHlsZVNlbGZBbGlnbm1lbnRE
YXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NDIzLDggKzM1NDY0LDExIEBACiAJCQkJRTNDMDQx
MzgyNTRDQjMwRDAwMjFEMEU2IC8qIFN5c3RlbVNvdW5kRGVsZWdhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzQzA0MTJGMjU0Q0EyOUIwMDIxRDBFNiAvKiBTeXN0ZW1Tb3VuZE1hbmFnZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTVENTk3NUIzMTk2MzVGMTEwMEQwMDg3OCAvKiBTeXN0ZW1WZXJz
aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RkY5QTA4NDI2NDg4MzQyMDAxMjUwRDggLyogVGFi
bGVGb3JtYXR0aW5nR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGNDlDM0U3MjY0NzlC
M0MwMDUxOTUzRCAvKiBUYWJsZUZvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4Q0ZGMDUxMEExNTRGMDkwMDBBNDIzNCAvKiBUYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNkYxNzI2NEYyNDcwQzYwQjAwNTE4Qzk2IC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0
dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGMTU1MjIxMjY0NzZCNUMwMEUzNTND
NiAvKiBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTNCQjZCODExMjJBN0QzMTMwMDNBMkE2OSAvKiBUYWJTaXplLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0NjNFQjYyMzFCODc4OUUwMDA5NkVENTEgLyogVGFnQ29sbGVjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOUIwQUJDQUUyMzZCQjQzMTAwQjQ1MDg1IC8qIFRhc2tTb3VyY2UuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdT
dGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oCmluZGV4IGJk
NmM5OGJmZDFlODNjNGQ2NjI1OWMyYjdlMTlkZDA0ZGJhNjVhNmUuLjU2YzFlODFiMWE5NWZhZTYx
YjA4YzZmYjAzZWE5ZDM4ZTNjOTkyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9Gb3JtYXR0aW5nU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGlu
Z1N0YXRlLmgKQEAgLTQ4LDEyICs0OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrTmVlZHNM
YXlvdXQoY29uc3QgQm94JiwgU3R5bGVEaWZmKTsKICAgICBib29sIG5lZWRzTGF5b3V0KGNvbnN0
IEJveCYpOwogCi0gICAgdm9pZCBzZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNv
bnN0IEJveCYsICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk7
Ci0gICAgT3B0aW9uYWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHM+IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY29uc3QgQm94JikgY29uc3Q7Cisg
ICAgdm9pZCBzZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNvbnN0IEJveCYsICBJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKTsKKyAgICBPcHRpb25hbDxJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzPiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNvbnN0IEJveCYpIGNv
bnN0OwogICAgIHZvaWQgY2xlYXJJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEJveCYp
OwogCi0gICAgdm9pZCBzZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKEZvcm1hdHRpbmdDb250
ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMp
IHsgbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gaW50cmluc2ljV2lkdGhDb25zdHJhaW50
czsgfQotICAgIE9wdGlvbmFsPEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzPiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzOyB9CisgICAgdm9pZCBzZXRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25zdHJhaW50
cykgeyBtX2ludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzOyB9CisgICAgT3B0aW9uYWw8SW50cmluc2ljV2lkdGhDb25zdHJhaW50cz4gaW50cmluc2lj
V2lkdGhDb25zdHJhaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faW50cmluc2ljV2lkdGhDb25zdHJh
aW50czsgfQogCiAgICAgYm9vbCBpc0Jsb2NrRm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlID09IFR5cGU6OkJsb2NrOyB9CiAgICAgYm9vbCBpc0lubGluZUZvcm1hdHRpbmdT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpJbmxpbmU7IH0KQEAgLTc4LDE0
ICs3OCwxNCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIExheW91dFN0YXRlJiBtX2xheW91
dFN0YXRlOwogICAgIFJlZjxGbG9hdGluZ1N0YXRlPiBtX2Zsb2F0aW5nU3RhdGU7Ci0gICAgSGFz
aE1hcDxjb25zdCBCb3gqLCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJh
aW50cz4gbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94ZXM7Ci0gICAgT3B0aW9uYWw8
Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHM+IG1faW50cmluc2lj
V2lkdGhDb25zdHJhaW50czsKKyAgICBIYXNoTWFwPGNvbnN0IEJveCosIEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHM+IG1faW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveGVzOworICAgIE9w
dGlvbmFsPEludHJpbnNpY1dpZHRoQ29uc3RyYWludHM+IG1faW50cmluc2ljV2lkdGhDb25zdHJh
aW50czsKICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyBXZWFrTGlzdEhhc2hTZXQKICAgICBPdXRP
ZkZsb3dCb3hMaXN0IG1fb3V0T2ZGbG93Qm94ZXM7CiAgICAgVHlwZSBtX3R5cGU7CiB9OwogCi1p
bmxpbmUgdm9pZCBGb3JtYXR0aW5nU3RhdGU6OnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNG
b3JCb3goY29uc3QgQm94JiBsYXlvdXRCb3gsIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpCitpbmxpbmUgdm9pZCBG
b3JtYXR0aW5nU3RhdGU6OnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cykKIHsKICAgICBBU1NFUlQoIW1faW50cmluc2ljV2lkdGhDb25zdHJhaW50c0Zv
ckJveGVzLmNvbnRhaW5zKCZsYXlvdXRCb3gpKTsKICAgICBBU1NFUlQoJm1fbGF5b3V0U3RhdGUu
Zm9ybWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCkgPT0gdGhpcyk7CkBAIC05OCw3ICs5OCw3
IEBAIGlubGluZSB2b2lkIEZvcm1hdHRpbmdTdGF0ZTo6Y2xlYXJJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKGNvbnN0IEJveCYgbGF5b3V0Qm94CiAgICAgbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzRm9yQm94ZXMucmVtb3ZlKCZsYXlvdXRCb3gpOwogfQogCi1pbmxpbmUgT3B0aW9uYWw8Rm9y
bWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHM+IEZvcm1hdHRpbmdTdGF0
ZTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChjb25zdCBCb3gmIGxheW91dEJveCkg
Y29uc3QKK2lubGluZSBPcHRpb25hbDxJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzPiBGb3JtYXR0
aW5nU3RhdGU6OmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY29uc3QgQm94JiBsYXlv
dXRCb3gpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCZtX2xheW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0
ZUZvckJveChsYXlvdXRCb3gpID09IHRoaXMpOwogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2ludHJp
bnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3hlcy5maW5kKCZsYXlvdXRCb3gpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L0xheW91dENvbnRleHQuY3BwCmluZGV4IDUzZTcwZTU5YzU1YmMyNGExZDAxNDI4
NzA1MmEyMzZmN2EwODk0YzMuLmI5MGExN2Y2ODNkNTY3YzFlYWQxMDA1NzU4YzE0NjViNzUyNDEw
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0Q29udGV4dC5jcHAKQEAgLTEwMCw3ICsx
MDAsNyBAQCB2b2lkIExheW91dENvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0U3VidHJl
ZShjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbgogICAgIGF1dG8mIGJveEdlb21ldHJ5ID0g
bGF5b3V0U3RhdGUoKS5nZW9tZXRyeUZvckJveChmb3JtYXR0aW5nQ29udGV4dFJvb3QpOwogCiAg
ICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkg
ewotICAgICAgICBhdXRvIGNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCA9IEZvcm1hdHRpbmdD
b250ZXh0OjpDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQgeyB7IGJveEdlb21ldHJ5LmNvbnRl
bnRCb3hMZWZ0KCksIGJveEdlb21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpIH0sIHsgYm94R2VvbWV0
cnkuY29udGVudEJveFRvcCgpLCB7IH0gfSB9OworICAgICAgICBhdXRvIGNvbnN0cmFpbnRzRm9y
SW5GbG93Q29udGVudCA9IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCB7IHsgYm94R2VvbWV0
cnkuY29udGVudEJveExlZnQoKSwgYm94R2VvbWV0cnkuY29udGVudEJveFdpZHRoKCkgfSwgeyBi
b3hHZW9tZXRyeS5jb250ZW50Qm94VG9wKCksIHsgfSB9IH07CiAgICAgICAgIGZvcm1hdHRpbmdD
b250ZXh0LT5sYXlvdXRJbkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBjb25zdHJhaW50
c0ZvckluRmxvd0NvbnRlbnQpOwogICAgIH0KIApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgTGF5
b3V0Q29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRTdWJ0cmVlKGNvbnN0IENvbnRhaW5l
ckJveCYgZm9ybWF0dGluCiAgICAgLy8gSXQgY29uc3RydWN0cyBhbiBGQyBmb3IgZGVzY2VuZGFu
dCBib3hlcyBhbmQgcnVucyBsYXlvdXQgb24gdGhlbS4gVGhlIGZvcm1hdHRpbmdDb250ZXh0Um9v
dCBpcyBsYWlkIG91dCBpbiB0aGUgRkMgaW4gd2hpY2ggaXQgbGl2ZXMgKHBhcmVudCBmb3JtYXR0
aW5nIGNvbnRleHQpLgogICAgIC8vIEl0IGFsc28gbWVhbnMgdGhhdCB0aGUgZm9ybWF0dGluZ0Nv
bnRleHRSb290IGhhcyB0byBoYXZlIGEgdmFsaWQvY2xlYW4gZ2VvbWV0cnkgYXQgdGhpcyBwb2lu
dC4KICAgICB7Ci0gICAgICAgIGF1dG8gY29uc3RyYWludHMgPSBGb3JtYXR0aW5nQ29udGV4dDo6
Q29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50IHsgeyBib3hHZW9tZXRyeS5wYWRkaW5nQm94
TGVmdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94V2lkdGgoKSB9LAorICAgICAgICBhdXRvIGNv
bnN0cmFpbnRzID0gQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50IHsgeyBib3hHZW9tZXRy
eS5wYWRkaW5nQm94TGVmdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94V2lkdGgoKSB9LAogICAg
ICAgICAgICAgeyBib3hHZW9tZXRyeS5wYWRkaW5nQm94VG9wKCksIGJveEdlb21ldHJ5LnBhZGRp
bmdCb3hIZWlnaHQoKSB9LCBib3hHZW9tZXRyeS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgICAg
ICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlkYXRpb25T
dGF0ZSwgY29uc3RyYWludHMpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9MYXlvdXRVbml0cy5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dFVuaXRzLmgK
aW5kZXggNDM5NjVhOTkyZThhYjE3OTY1YWJhOWQ5MjhjODJiZTdhMDE3OTNiZS4uN2JjYzViZmVm
MjM2Y2NlNzE4MGMzNzM1OTk5YzdiMTIyYzUzNWJiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L0xheW91dFVuaXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91
dFVuaXRzLmgKQEAgLTE2OSw2ICsxNjksMjkgQEAgc3RydWN0IFZlcnRpY2FsQ29uc3RyYWludHMg
ewogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGxvZ2ljYWxIZWlnaHQ7CiB9OwogCitzdHJ1Y3Qg
Q29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50IHsKKyAgICBIb3Jpem9udGFsQ29uc3RyYWludHMg
aG9yaXpvbnRhbDsKKyAgICBWZXJ0aWNhbENvbnN0cmFpbnRzIHZlcnRpY2FsOworfTsKKworc3Ry
dWN0IENvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudCB7CisgICAgSG9yaXpvbnRhbENvbnN0
cmFpbnRzIGhvcml6b250YWw7CisgICAgVmVydGljYWxDb25zdHJhaW50cyB2ZXJ0aWNhbDsKKyAg
ICAvLyBCb3JkZXJzIGFuZCBwYWRkaW5nIGFyZSByZXNvbHZlZCBhZ2FpbnN0IHRoZSBjb250YWlu
aW5nIGJsb2NrJ3MgY29udGVudCBib3ggYXMgaWYgdGhlIGJveCB3YXMgYW4gaW4tZmxvdyBib3gu
CisgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQ29uc3RyYWludHM7Cit9OworCitzdHJ1
Y3QgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7CisgICAgdm9pZCBleHBhbmQoTGF5b3V0VW5p
dCBob3Jpem9udGFsVmFsdWUpOworICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIG9wZXJh
dG9yKz0oY29uc3QgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYpOworICAgIEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMmIG9wZXJhdG9yKz0oTGF5b3V0VW5pdCk7CisgICAgSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyYgb3BlcmF0b3ItPShjb25zdCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
Jik7CisgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYgb3BlcmF0b3ItPShMYXlvdXRVbml0
KTsKKworICAgIExheW91dFVuaXQgbWluaW11bTsKKyAgICBMYXlvdXRVbml0IG1heGltdW07Cit9
OworCiBzdHJ1Y3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMgewogICAgIE9wdGlvbmFsPExh
eW91dFVuaXQ+IHdpZHRoOwogICAgIE9wdGlvbmFsPFVzZWRIb3Jpem9udGFsTWFyZ2luPiBtYXJn
aW47CkBAIC0yMDgsNiArMjMxLDM4IEBAIGlubGluZSBJbmxpbmVMYXlvdXRVbml0IG1heElubGlu
ZUxheW91dFVuaXQoKQogI2VuZGlmCiB9CiAKK2lubGluZSB2b2lkIEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHM6OmV4cGFuZChMYXlvdXRVbml0IGhvcml6b250YWxWYWx1ZSkKK3sKKyAgICBtaW5p
bXVtICs9IGhvcml6b250YWxWYWx1ZTsKKyAgICBtYXhpbXVtICs9IGhvcml6b250YWxWYWx1ZTsK
K30KKworaW5saW5lIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHM6Om9wZXJhdG9yKz0oY29uc3QgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYgb3Ro
ZXIpCit7CisgICAgbWluaW11bSArPSBvdGhlci5taW5pbXVtOworICAgIG1heGltdW0gKz0gb3Ro
ZXIubWF4aW11bTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzJiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOjpvcGVyYXRvcis9KExheW91
dFVuaXQgdmFsdWUpCit7CisgICAgZXhwYW5kKHZhbHVlKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK2lubGluZSBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzJiBJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzOjpvcGVyYXRvci09KGNvbnN0IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIG90aGVy
KQoreworICAgIG1pbmltdW0gLT0gb3RoZXIubWluaW11bTsKKyAgICBtYXhpbXVtIC09IG90aGVy
Lm1heGltdW07CisgICAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyYgSW50cmluc2ljV2lkdGhDb25zdHJhaW50czo6b3BlcmF0b3ItPShMYXlvdXRV
bml0IHZhbHVlKQoreworICAgIGV4cGFuZCgtdmFsdWUpOworICAgIHJldHVybiAqdGhpczsKK30K
Kwogc3RydWN0IFNsb3RQb3NpdGlvbiB7CiAgICAgU2xvdFBvc2l0aW9uKCkgPSBkZWZhdWx0Owog
ICAgIFNsb3RQb3NpdGlvbihzaXplX3QgY29sdW1uLCBzaXplX3Qgcm93KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9NYXJnaW5UeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L01hcmdpblR5cGVzLmgKaW5kZXggMzI5NjhjZGJkYzQxMjRjNDg4ZDA5NDg4ZDJkZGNjYjZk
NmEwZjc1ZS4uZWFhMjQyZjE4ZGYwZTlhNzJlMmUzZDAyYjU3NWFiNjdiMTlmODZlMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L01hcmdpblR5cGVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L01hcmdpblR5cGVzLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9y
bWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDk4NTdkYmEyYzdkNjUyOTYwYzQxMWZhYmNhMzU3NTg2
OTViYTExMjguLjAxODE4MmYyOGFlYmY2YmZkNDg4NTdlMWQzYWQxMjM1N2MyNmFlNTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkZvcm1hdHRpbmdHZW9tZXRy
eS5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdRdWlya3MuaCIKICNpbmNsdWRlICJGb3JtYXR0aW5n
U3RhdGUuaCIKICNpbmNsdWRlICJJbnZhbGlkYXRpb25TdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91
dEJveC5oIgpAQCAtMjcwLDYgKzI3MiwxNiBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb2xs
ZWN0T3V0T2ZGbG93RGVzY2VuZGFudHNJZk5lZWRlZCgpCiAgICAgfQogfQogCitGb3JtYXR0aW5n
R2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsKK30KKworRm9ybWF0dGluZ1F1aXJrcyBGb3Jt
YXR0aW5nQ29udGV4dDo6cXVpcmtzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRm9ybWF0dGluZ1F1
aXJrcygqdGhpcyk7Cit9CisKICNpZm5kZWYgTkRFQlVHCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0
Ojp2YWxpZGF0ZUdlb21ldHJ5Q29uc3RyYWludHNBZnRlckxheW91dCgpIGNvbnN0CiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRp
bmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zv
cm1hdHRpbmdDb250ZXh0LmgKaW5kZXggNzExMDI1NTg4ZWM0YTAzZDllMzVhMGFjOTMwYTc3NmM2
MjNmODQ0NC4uOWY1N2Y3ZTBhNTUzODdmMGE0NWM5ZDhlMmU3OTkwZDkwOWU1NzNlOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5n
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
Rm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNDEsNTkgKzQxLDI3IEBAIHN0cnVjdCBMZW5ndGg7CiBu
YW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgQm94R2VvbWV0cnk7Ci1jbGFzcyBSZXBsYWNlZEJv
eDsKLXN0cnVjdCBDb21wdXRlZEhvcml6b250YWxNYXJnaW47Ci1zdHJ1Y3QgQ29tcHV0ZWRWZXJ0
aWNhbE1hcmdpbjsKIGNsYXNzIENvbnRhaW5lckJveDsKLXN0cnVjdCBDb250ZW50SGVpZ2h0QW5k
TWFyZ2luOwotc3RydWN0IENvbnRlbnRXaWR0aEFuZE1hcmdpbjsKLXN0cnVjdCBFZGdlczsKK2Ns
YXNzIEZvcm1hdHRpbmdHZW9tZXRyeTsKIGNsYXNzIEZvcm1hdHRpbmdTdGF0ZTsKLXN0cnVjdCBI
b3Jpem9udGFsR2VvbWV0cnk7CitjbGFzcyBGb3JtYXR0aW5nUXVpcmtzOwogY2xhc3MgSW52YWxp
ZGF0aW9uU3RhdGU7CiBjbGFzcyBMYXlvdXRTdGF0ZTsKLXN0cnVjdCBPdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlczsKLXN0cnVjdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXM7Ci1zdHJ1Y3QgVmVy
dGljYWxHZW9tZXRyeTsKIAogY2xhc3MgRm9ybWF0dGluZ0NvbnRleHQgewogICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoRm9ybWF0dGluZ0NvbnRleHQpOwogcHVibGljOgotICAgIEZvcm1hdHRp
bmdDb250ZXh0KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBGb3Jt
YXR0aW5nU3RhdGUmKTsKICAgICB2aXJ0dWFsIH5Gb3JtYXR0aW5nQ29udGV4dCgpOwogCi0gICAg
c3RydWN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCB7Ci0gICAgICAgIEhvcml6b250YWxD
b25zdHJhaW50cyBob3Jpem9udGFsOwotICAgICAgICBWZXJ0aWNhbENvbnN0cmFpbnRzIHZlcnRp
Y2FsOwotICAgIH07CiAgICAgdmlydHVhbCB2b2lkIGxheW91dEluRmxvd0NvbnRlbnQoSW52YWxp
ZGF0aW9uU3RhdGUmLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKSA9IDA7Ci0K
LSAgICBzdHJ1Y3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50IHsKLSAgICAgICAgSG9y
aXpvbnRhbENvbnN0cmFpbnRzIGhvcml6b250YWw7Ci0gICAgICAgIFZlcnRpY2FsQ29uc3RyYWlu
dHMgdmVydGljYWw7Ci0gICAgICAgIC8vIEJvcmRlcnMgYW5kIHBhZGRpbmcgYXJlIHJlc29sdmVk
IGFnYWluc3QgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBjb250ZW50IGJveCBhcyBpZiB0aGUgYm94
IHdhcyBhbiBpbi1mbG93IGJveC4KLSAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5n
Q29uc3RyYWludHM7Ci0gICAgfTsKICAgICB2b2lkIGxheW91dE91dE9mRmxvd0NvbnRlbnQoSW52
YWxpZGF0aW9uU3RhdGUmLCBjb25zdCBDb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQmKTsK
LQotICAgIHN0cnVjdCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsKLSAgICAgICAgdm9pZCBl
eHBhbmQoTGF5b3V0VW5pdCBob3Jpem9udGFsVmFsdWUpOwotICAgICAgICBJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzJiBvcGVyYXRvcis9KGNvbnN0IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMm
KTsKLSAgICAgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYgb3BlcmF0b3IrPShMYXlvdXRV
bml0KTsKLSAgICAgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYgb3BlcmF0b3ItPShjb25z
dCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzJik7Ci0gICAgICAgIEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMmIG9wZXJhdG9yLT0oTGF5b3V0VW5pdCk7Ci0KLSAgICAgICAgTGF5b3V0VW5pdCBt
aW5pbXVtOwotICAgICAgICBMYXlvdXRVbml0IG1heGltdW07Ci0gICAgfTsKICAgICB2aXJ0dWFs
IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCkgPSAwOworCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHVzZWRDb250ZW50SGVpZ2h0KCkg
Y29uc3QgPSAwOwogCi0gICAgYm9vbCBpc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiByb290KCkuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCk7IH0KLSAg
ICBib29sIGlzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiByb290KCku
ZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpOyB9Ci0gICAgYm9vbCBpc1RhYmxl
Rm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiByb290KCkuZXN0YWJsaXNoZXNUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0KCk7IH0KLSAgICBib29sIGlzVGFibGVXcmFwcGVyQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGlzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgp
ICYmIHJvb3QoKS5pc1RhYmxlV3JhcHBlckJveCgpOyB9Ci0gICAgYm9vbCBpc0ZsZXhGb3JtYXR0
aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIHJvb3QoKS5lc3RhYmxpc2hlc0ZsZXhGb3JtYXR0
aW5nQ29udGV4dCgpOyB9CisgICAgY29uc3QgQ29udGFpbmVyQm94JiByb290KCkgY29uc3QgeyBy
ZXR1cm4gKm1fcm9vdDsgfQorICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0Owor
ICAgIGNvbnN0IEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9mb3JtYXR0aW5nU3RhdGU7IH0KIAogICAgIGVudW0gY2xhc3MgRXNjYXBlUmVhc29uIHsK
ICAgICAgICAgVGFibGVRdWlya05lZWRzR2VvbWV0cnlGcm9tRXN0YWJsaXNoZWRGb3JtYXR0aW5n
Q29udGV4dCwKQEAgLTEwNSwxNCArNzMsMTkgQEAgcHVibGljOgogICAgICAgICBUYWJsZU5lZWRz
QWNjZXNzVG9UYWJsZVdyYXBwZXIKICAgICB9OwogICAgIGNvbnN0IEJveEdlb21ldHJ5JiBnZW9t
ZXRyeUZvckJveChjb25zdCBCb3gmLCBPcHRpb25hbDxFc2NhcGVSZWFzb24+ID0gV1RGOjpudWxs
b3B0KSBjb25zdDsKLSAgICBjb25zdCBDb250YWluZXJCb3gmIHJvb3QoKSBjb25zdCB7IHJldHVy
biAqbV9yb290OyB9CiAKLSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKKwor
ICAgIGJvb2wgaXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gcm9vdCgp
LmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpOyB9CisgICAgYm9vbCBpc0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gcm9vdCgpLmVzdGFibGlzaGVzSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQoKTsgfQorICAgIGJvb2wgaXNUYWJsZUZvcm1hdHRpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gcm9vdCgpLmVzdGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29u
dGV4dCgpOyB9CisgICAgYm9vbCBpc1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQo
KSBjb25zdCB7IHJldHVybiBpc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSAmJiByb290KCkuaXNU
YWJsZVdyYXBwZXJCb3goKTsgfQorICAgIGJvb2wgaXNGbGV4Rm9ybWF0dGluZ0NvbnRleHQoKSBj
b25zdCB7IHJldHVybiByb290KCkuZXN0YWJsaXNoZXNGbGV4Rm9ybWF0dGluZ0NvbnRleHQoKTsg
fQogCiBwcm90ZWN0ZWQ6CisgICAgRm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQ29udGFpbmVyQm94
JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIEZvcm1hdHRpbmdTdGF0ZSYpOworCiAgICAgdXNpbmcg
TGF5b3V0UXVldWUgPSBWZWN0b3I8Y29uc3QgQm94Kj47CiAKLSAgICBjb25zdCBGb3JtYXR0aW5n
U3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ1N0YXRl
OyB9CiAgICAgRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSB7IHJldHVybiBtX2Zv
cm1hdHRpbmdTdGF0ZTsgfQogCiAgICAgdm9pZCBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKQEAgLTEyMSw5NyArOTQsMTAg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZUdlb21ldHJ5Q29uc3RyYWlu
dHNBZnRlckxheW91dCgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICAvLyBUaGlzIGNsYXNzIGltcGxl
bWVudHMgZ2VuZXJpYyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nLgotICAgIGNsYXNzIEdlb21ldHJ5
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93VmVydGlj
YWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25z
dCBWZXJ0aWNhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikg
Y29uc3Q7Ci0gICAgICAgIEhvcml6b250YWxHZW9tZXRyeSBvdXRPZkZsb3dIb3Jpem9udGFsR2Vv
bWV0cnkoY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgVmVy
dGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0K
LSAgICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBmbG9hdGluZ0NvbnRlbnRIZWlnaHRBbmRN
YXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3Zl
cnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIENvbnRlbnRXaWR0aEFuZE1h
cmdpbiBmbG9hdGluZ0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwot
Ci0gICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5saW5lUmVwbGFjZWRDb250ZW50SGVp
Z2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiwgT3B0aW9uYWw8VmVydGljYWxDb25zdHJhaW50cz4sIGNvbnN0IE92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcyYpIGNvbnN0OwotICAgICAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gaW5saW5l
UmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmLCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmLCBPcHRpb25hbDxWZXJ0aWNhbENvbnN0cmFpbnRzPiwgY29u
c3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKLQotICAgICAgICBMYXlvdXRTaXplIGlu
Rmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmKSBjb25zdDsKLQotICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGNv
bXBsaWNhdGVkQ2FzZXMoY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwg
Y29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIExheW91dFVu
aXQgc2hyaW5rVG9GaXRXaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRo
KTsKLQotICAgICAgICBFZGdlcyBjb21wdXRlZEJvcmRlcihjb25zdCBCb3gmKSBjb25zdDsKLSAg
ICAgICAgT3B0aW9uYWw8RWRnZXM+IGNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmLCBMYXlvdXRV
bml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSBjb25zdDsKLQotICAgICAgICBDb21wdXRlZEhvcml6
b250YWxNYXJnaW4gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYpIGNvbnN0OwotICAgICAgICBDb21wdXRlZFZlcnRpY2FsTWFy
Z2luIGNvbXB1dGVkVmVydGljYWxNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJikgY29uc3Q7Ci0KLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0
ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHksIExheW91dFVuaXQgY29udGFp
bmluZ0Jsb2NrV2lkdGgpIGNvbnN0OwotICAgICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBmaXhl
ZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9wZXJ0eSkgY29uc3Q7Ci0KLSAgICAgICAg
T3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRNaW5IZWlnaHQoY29uc3QgQm94JiwgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRNYXhIZWlnaHQoY29uc3Qg
Qm94JiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gV1RGOjpu
dWxsb3B0KSBjb25zdDsKLQotICAgICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZE1p
bldpZHRoKGNvbnN0IEJveCYsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAg
ICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZE1heFdpZHRoKGNvbnN0IEJveCYsIExh
eW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotCi0gICAgICAgIEZvcm1hdHRpbmdDb250
ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY29u
c3QgQm94JiwgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cykgY29uc3Q7Ci0KLSAgICAgICAgTGF5
b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IENvbnRh
aW5lckJveCYpIGNvbnN0OwotCi0gICAgICAgIENvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVu
dCBjb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94Jik7Ci0g
ICAgICAgIENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCBjb25zdHJhaW50c0ZvckluRmxvd0Nv
bnRlbnQoY29uc3QgQ29udGFpbmVyQm94JiwgT3B0aW9uYWw8RXNjYXBlUmVhc29uPiA9IFdURjo6
bnVsbG9wdCk7Ci0KLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRIZWlnaHQo
Y29uc3QgQm94JiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0g
V1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0
ZWRXaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLQot
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgZnJpZW5kIGNsYXNzIEZvcm1hdHRpbmdDb250ZXh0Owot
ICAgICAgICBHZW9tZXRyeShjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYpOwotCi0gICAgICAgIGNv
bnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGlu
Z0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQotICAgICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUoKSB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7IH0KLSAgICAg
ICAgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgVmVy
dGljYWxHZW9tZXRyeSBvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoY29uc3QgUmVw
bGFjZWRCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENv
bnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAg
ICAgIEhvcml6b250YWxHZW9tZXRyeSBvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRy
eShjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0
IFZlcnRpY2FsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYp
OwotCi0gICAgICAgIFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNh
bEdlb21ldHJ5KGNvbnN0IENvbnRhaW5lckJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxW
YWx1ZXMmKSBjb25zdDsKLSAgICAgICAgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxvd05vblJl
cGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IENvbnRhaW5lckJveCYsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0K
LSAgICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBmbG9hdGluZ1JlcGxhY2VkQ29udGVudEhl
aWdodEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwotICAgICAgICBD
b250ZW50V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdp
bihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0
IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAgICAgQ29udGVudFdpZHRoQW5k
TWFyZ2luIGZsb2F0aW5nTm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250
YWxWYWx1ZXMmKTsKLQotICAgICAgICBMYXlvdXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25G
b3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWlu
dHMmKSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb25G
b3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYpIGNvbnN0OwotCi0gICAgICAgIGVudW0gY2xhc3MgSGVpZ2h0VHlwZSB7IE1pbiwgTWF4
LCBOb3JtYWwgfTsKLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRIZWlnaHRW
YWx1ZShjb25zdCBCb3gmLCBIZWlnaHRUeXBlLCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250YWlu
aW5nQmxvY2tIZWlnaHQpIGNvbnN0OwotCi0gICAgICAgIGVudW0gY2xhc3MgV2lkdGhUeXBlIHsg
TWluLCBNYXgsIE5vcm1hbCB9OwotICAgICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRl
ZFdpZHRoVmFsdWUoY29uc3QgQm94JiwgV2lkdGhUeXBlLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdC
bG9ja1dpZHRoKTsKLQotICAgICAgICBjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgbV9mb3JtYXR0
aW5nQ29udGV4dDsKLSAgICB9OwotICAgIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSBnZW9t
ZXRyeSgpIGNvbnN0IHsgcmV0dXJuIEdlb21ldHJ5KCp0aGlzKTsgfQotCi0gICAgY2xhc3MgUXVp
cmtzIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFF1aXJrcyhjb25zdCBGb3JtYXR0aW5nQ29udGV4
dCYpOwotCi0gICAgICAgIExheW91dFVuaXQgaGVpZ2h0VmFsdWVPZk5lYXJlc3RDb250YWluaW5n
QmxvY2tXaXRoRml4ZWRIZWlnaHQoY29uc3QgQm94Jik7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAg
ICAgIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9y
bWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQotICAgICAgICBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUoKSB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7IH0K
LSAgICAgICAgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dDsgfQotCi0gICAgICAgIGNvbnN0IEZvcm1h
dHRpbmdDb250ZXh0JiBtX2Zvcm1hdHRpbmdDb250ZXh0OwotICAgIH07Ci0gICAgRm9ybWF0dGlu
Z0NvbnRleHQ6OlF1aXJrcyBxdWlya3MoKSBjb25zdCB7IHJldHVybiBRdWlya3MoKnRoaXMpOyB9
Ci0KIHByaXZhdGU6CisgICAgRm9ybWF0dGluZ0dlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3Q7Cisg
ICAgRm9ybWF0dGluZ1F1aXJrcyBxdWlya3MoKSBjb25zdDsKKwogICAgIHZvaWQgY29sbGVjdE91
dE9mRmxvd0Rlc2NlbmRhbnRzSWZOZWVkZWQoKTsKICAgICB2b2lkIGNvbXB1dGVPdXRPZkZsb3dW
ZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYsIGNvbnN0IENvbnN0cmFpbnRzRm9yT3V0T2ZGbG93
Q29udGVudCYpOwogICAgIHZvaWQgY29tcHV0ZU91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShj
b25zdCBCb3gmLCBjb25zdCBDb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQmKTsKQEAgLTIy
MCw0OCArMTA2LDYgQEAgcHJpdmF0ZToKICAgICBGb3JtYXR0aW5nU3RhdGUmIG1fZm9ybWF0dGlu
Z1N0YXRlOwogfTsKIAotaW5saW5lIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0
cnkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KQotICAgIDogbV9m
b3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nQ29udGV4dCkKLXsKLX0KLQotaW5saW5lIEZvcm1h
dHRpbmdDb250ZXh0OjpRdWlya3M6OlF1aXJrcyhjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9y
bWF0dGluZ0NvbnRleHQpCi0gICAgOiBtX2Zvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdDb250
ZXh0KQotewotfQotCi1pbmxpbmUgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lk
dGhDb25zdHJhaW50czo6ZXhwYW5kKExheW91dFVuaXQgaG9yaXpvbnRhbFZhbHVlKQotewotICAg
IG1pbmltdW0gKz0gaG9yaXpvbnRhbFZhbHVlOwotICAgIG1heGltdW0gKz0gaG9yaXpvbnRhbFZh
bHVlOwotfQotCi1pbmxpbmUgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMmIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOjpvcGVy
YXRvcis9KGNvbnN0IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIG90aGVyKQotewotICAgIG1p
bmltdW0gKz0gb3RoZXIubWluaW11bTsKLSAgICBtYXhpbXVtICs9IG90aGVyLm1heGltdW07Ci0g
ICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMmIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzOjpvcGVyYXRvcis9KExheW91dFVuaXQgdmFsdWUpCi17Ci0gICAgZXhwYW5kKHZhbHVl
KTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBGb3JtYXR0aW5nQ29udGV4dDo6SW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyYgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRo
Q29uc3RyYWludHM6Om9wZXJhdG9yLT0oY29uc3QgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYg
b3RoZXIpCi17Ci0gICAgbWluaW11bSAtPSBvdGhlci5taW5pbXVtOwotICAgIG1heGltdW0gLT0g
b3RoZXIubWF4aW11bTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYgRm9ybWF0dGluZ0NvbnRleHQ6Oklu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHM6Om9wZXJhdG9yLT0oTGF5b3V0VW5pdCB2YWx1ZSkKLXsK
LSAgICBleHBhbmQoLXZhbHVlKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDllYjE5NjU3YjhiZTcxOTlhYTNmZmMyMDZmNTcyMWE3MmNkNjJjODEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDExNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgotCi0jaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdT
dGF0ZS5oIgotI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJGbG9h
dGluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiSW5s
aW5lRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1
ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKLSNpbmNsdWRlICJMYXlvdXRSZXBs
YWNlZEJveC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJUYWJsZUZvcm1hdHRp
bmdTdGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQot
c3RhdGljIGlubGluZSBib29sIGlzSGVpZ2h0QXV0byhjb25zdCBCb3gmIGxheW91dEJveCkKLXsK
LSAgICAvLyAxMC41IENvbnRlbnQgaGVpZ2h0OiB0aGUgJ2hlaWdodCcgcHJvcGVydHkKLSAgICAv
LwotICAgIC8vIFRoZSBwZXJjZW50YWdlIGlzIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRo
ZSBoZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gncyBjb250YWluaW5nIGJsb2NrLgotICAgIC8v
IElmIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgbm90IHNwZWNpZmllZCBl
eHBsaWNpdGx5IChpLmUuLCBpdCBkZXBlbmRzIG9uIGNvbnRlbnQgaGVpZ2h0KSwKLSAgICAvLyBh
bmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHRoZSB1c2VkIGhl
aWdodCBpcyBjYWxjdWxhdGVkIGFzIGlmICdhdXRvJyB3YXMgc3BlY2lmaWVkLgotCi0gICAgYXV0
byBoZWlnaHQgPSBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYgKGhl
aWdodC5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoaGVpZ2h0Lmlz
UGVyY2VudCgpKSB7Ci0gICAgICAgIGlmIChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuICFsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNGaXhlZCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZEhlaWdodFZhbHVlKGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBIZWlnaHRUeXBlIGhlaWdodFR5cGUsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNv
bnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3QKLXsKLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJv
eC5zdHlsZSgpOwotICAgIGF1dG8gaGVpZ2h0ID0gaGVpZ2h0VHlwZSA9PSBIZWlnaHRUeXBlOjpO
b3JtYWwgPyBzdHlsZS5sb2dpY2FsSGVpZ2h0KCkgOiBoZWlnaHRUeXBlID09IEhlaWdodFR5cGU6
Ok1pbiA/IHN0eWxlLmxvZ2ljYWxNaW5IZWlnaHQoKSA6IHN0eWxlLmxvZ2ljYWxNYXhIZWlnaHQo
KTsKLSAgICBpZiAoaGVpZ2h0LmlzVW5kZWZpbmVkKCkgfHwgaGVpZ2h0LmlzQXV0bygpIHx8IGhl
aWdodC5pc01heENvbnRlbnQoKSB8fCBoZWlnaHQuaXNNaW5Db250ZW50KCkgfHwgaGVpZ2h0Lmlz
Rml0Q29udGVudCgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKGhlaWdodC5pc0Zp
eGVkKCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRVbml0IHsgaGVpZ2h0LnZhbHVlKCkgfTsKLQot
ICAgIGlmICghY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSB7Ci0gICAgICAgIGlmIChsYXlvdXRTdGF0
ZSgpLmluUXVpcmtzTW9kZSgpKQotICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0g
Zm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5oZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5p
bmdCbG9ja1dpdGhGaXhlZEhlaWdodChsYXlvdXRCb3gpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGF1dG8gbm9uQW5vbnltb3VzQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCA9IFsm
XSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgYmxvY2sgbGV2ZWwgYm94IGlzIGEgZGly
ZWN0IGNoaWxkIG9mIGFuIGlubGluZSBsZXZlbCBib3ggKDxzcGFuPjxkaXY+PC9kaXY+PC9zcGFu
PikgYW5kIHdlIHdyYXAgaXQgaW50byBhIGNvbnRpbnVhdGlvbiwKLSAgICAgICAgICAgICAgICAv
LyB0aGUgY29udGFpbmluZyBibG9jayAoYW5vbnltb3VzIHdyYXBwZXIpIGlzIG5vdCB0aGUgYm94
IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGZpeGVkIGhlaWdodC4KLSAgICAgICAgICAgICAgICBhdXRv
JiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxv
Y2soKTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9ICZsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCk7IGNvbnRhaW5pbmdCbG9jayAhPSAmaW5pdGlhbENvbnRh
aW5pbmdCbG9jazsgY29udGFpbmluZ0Jsb2NrID0gJmNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmlu
Z0Jsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNB
bm9ueW1vdXMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxDb250
YWluaW5nQmxvY2suc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICB9OwotICAg
ICAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gZml4ZWRWYWx1ZShub25Bbm9ueW1vdXND
b250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKCFjb250YWluaW5nQmxvY2tIZWlnaHQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBy
ZXR1cm4gdmFsdWVGb3JMZW5ndGgoaGVpZ2h0LCAqY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLX0K
LQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21w
dXRlZEhlaWdodChjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29u
dGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAotewotICAgIGlmIChhdXRvIGhlaWdodCA9IGNvbXB1
dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwsIGNvbnRhaW5pbmdC
bG9ja0hlaWdodCkpIHsKLSAgICAgICAgaWYgKGxheW91dEJveC5zdHlsZSgpLmJveFNpemluZygp
ID09IEJveFNpemluZzo6Q29udGVudEJveCkKLSAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7Ci0g
ICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZv
ckJveChsYXlvdXRCb3gpOwotICAgICAgICByZXR1cm4gKmhlaWdodCAtIChib3hHZW9tZXRyeS52
ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigw
KSk7Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRXaWR0aFZhbHVlKGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBXaWR0aFR5cGUgd2lkdGhUeXBlLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9j
a1dpZHRoKQotewotICAgIC8vIEFwcGxpZXMgdG86IGFsbCBlbGVtZW50cyBleGNlcHQgbm9uLXJl
cGxhY2VkIGlubGluZXMgKG91dC1vZi1mbG93IGNoZWNrIGlzIHJlcXVpcmVkIGZvciBwb3NpdGlv
bmVkIDxicj4gYXMgZm9yIHNvbWUgcmVhc29uIHdlIGRvbid0IGJsb2NraWZ5IHRoZW0pLgotICAg
IEFTU0VSVCghbGF5b3V0Qm94LmlzSW5saW5lQm94KCkgfHwgbGF5b3V0Qm94LmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpKTsKLQotICAgIGF1dG8gd2lkdGggPSBbJl0gewotICAgICAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgICAgICBzd2l0Y2ggKHdpZHRoVHlwZSkgewot
ICAgICAgICBjYXNlIFdpZHRoVHlwZTo6Tm9ybWFsOgotICAgICAgICAgICAgcmV0dXJuIHN0eWxl
LmxvZ2ljYWxXaWR0aCgpOwotICAgICAgICBjYXNlIFdpZHRoVHlwZTo6TWluOgotICAgICAgICAg
ICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNaW5XaWR0aCgpOwotICAgICAgICBjYXNlIFdpZHRoVHlw
ZTo6TWF4OgotICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNYXhXaWR0aCgpOwotICAg
ICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gc3R5
bGUubG9naWNhbFdpZHRoKCk7Ci0gICAgfSgpOwotICAgIGlmIChhdXRvIGNvbXB1dGVkVmFsdWUg
PSB0aGlzLT5jb21wdXRlZFZhbHVlKHdpZHRoLCBjb250YWluaW5nQmxvY2tXaWR0aCkpCi0gICAg
ICAgIHJldHVybiBjb21wdXRlZFZhbHVlOwotCi0gICAgaWYgKHdpZHRoLmlzTWluQ29udGVudCgp
IHx8IHdpZHRoLmlzTWF4Q29udGVudCgpIHx8IHdpZHRoLmlzRml0Q29udGVudCgpKSB7Ci0gICAg
ICAgIGlmICghaXM8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKQotICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgYXV0byYgY29udGFpbmVyQm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94
PihsYXlvdXRCb3gpOwotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgc3BsaXR0aW5nIHVwIGNv
bXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBzbyB0aGF0IHdlIGNvdWxkIGNvbXB1dGVk
IHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgc2VwYXJhdGVseS4KLSAgICAgICAgYXV0byBpbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzID0gWyZdIHsKLSAgICAgICAgICAgIGlmICghY29udGFpbmVyQm94
Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgMF9sdSwgY29udGFpbmluZ0Jsb2NrV2lkdGggfTsKLSAg
ICAgICAgICAgIEFTU0VSVChjb250YWluZXJCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4
dCgpKTsKLSAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCku
ZW5zdXJlRm9ybWF0dGluZ1N0YXRlKGNvbnRhaW5lckJveCk7Ci0gICAgICAgICAgICBpZiAoYXV0
byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKmludHJpbnNpY1dpZHRo
Q29uc3RyYWludHM7Ci0gICAgICAgICAgICByZXR1cm4gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9y
bWF0dGluZ0NvbnRleHQoY29udGFpbmVyQm94LCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgaWYgKHdpZHRo
LmlzTWluQ29udGVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMubWluaW11bTsKLSAgICAgICAgaWYgKHdpZHRoLmlzTWF4Q29udGVudCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bTsKLSAgICAgICAg
QVNTRVJUKHdpZHRoLmlzRml0Q29udGVudCgpKTsKLSAgICAgICAgLy8gSWYgdGhlIGF2YWlsYWJs
ZSBzcGFjZSBpbiBhIGdpdmVuIGF4aXMgaXMgZGVmaW5pdGUsIGVxdWFsIHRvIG1pbihtYXgtY29u
dGVudCBzaXplLAotICAgICAgICAvLyBtYXgobWluLWNvbnRlbnQgc2l6ZSwgc3RyZXRjaC1maXQg
c2l6ZSkpLiBPdGhlcndpc2UsIGVxdWFsIHRvIHRoZSBtYXgtY29udGVudCBzaXplIGluIHRoYXQg
YXhpcy4KLSAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IHlldCBoYXZlIGluZGVmaW5pdGUgYXZh
aWxhYmxlIHNpemUuCi0gICAgICAgIHJldHVybiBzdGQ6Om1pbihpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzLm1heGltdW0sIHN0ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11
bSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQot
T3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRl
ZFdpZHRoKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKQotewotICAgIGlmIChhdXRvIGNvbXB1dGVkV2lkdGggPSBjb21wdXRlZFdpZHRoVmFsdWUo
bGF5b3V0Qm94LCBXaWR0aFR5cGU6Ok5vcm1hbCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7Ci0g
ICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgICAgIC8vIE5vbi1x
dWFudGl0YXRpdmUgdmFsdWVzIHN1Y2ggYXMgYXV0byBhbmQgbWluLWNvbnRlbnQgYXJlIG5vdCBp
bmZsdWVuY2VkIGJ5IHRoZSBib3gtc2l6aW5nIHByb3BlcnR5LgotICAgICAgICBpZiAoc3R5bGUu
Ym94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpDb250ZW50Qm94IHx8IHN0eWxlLndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlZFdpZHRoOwotICAg
ICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKLSAgICAgICAgcmV0dXJuICpjb21wdXRlZFdpZHRoIC0gKGJveEdlb21l
dHJ5Lmhvcml6b250YWxCb3JkZXIoKSArIGJveEdlb21ldHJ5Lmhvcml6b250YWxQYWRkaW5nKCku
dmFsdWVPcigwKSk7Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19Ci0KLUxheW91dFVuaXQgRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRl
eHRSb290KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290KSBjb25zdAot
ewotICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5n
Q29udGV4dCgpKTsKLSAgICBBU1NFUlQoaXNIZWlnaHRBdXRvKGZvcm1hdHRpbmdDb250ZXh0Um9v
dCkgfHwgZm9ybWF0dGluZ0NvbnRleHRSb290LmVzdGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29u
dGV4dCgpIHx8IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5pc1RhYmxlQ2VsbCgpKTsKLSAgICBhdXRv
IHVzZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCB7IH07IAotICAgIGF1dG8gaGFzQ29udGVu
dCA9IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKLSAg
ICAvLyBUaGUgdXNlZCBoZWlnaHQgb2YgdGhlIGNvbnRhaW5tZW50IGJveCBpcyBkZXRlcm1pbmVk
IGFzIGlmIHBlcmZvcm1pbmcgYSBub3JtYWwgbGF5b3V0IG9mIHRoZSBib3gsIGV4Y2VwdCB0aGF0
IGl0IGlzIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGNvbnRlbnQuCi0gICAgYXV0byBzaG91bGRJZ25v
cmVDb250ZW50ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LmlzU2l6ZUNvbnRhaW5tZW50Qm94KCk7
Ci0gICAgaWYgKGhhc0NvbnRlbnQgJiYgIXNob3VsZElnbm9yZUNvbnRlbnQpCi0gICAgICAgIHVz
ZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQo
Zm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdF9jYXN0PExheW91dFN0YXRlJj4obGF5b3V0U3Rh
dGUoKSkpLT51c2VkQ29udGVudEhlaWdodCgpOwotICAgIHJldHVybiB1c2VkQ29udGVudEhlaWdo
dDsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
Ojpjb21wdXRlZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9wZXJ0eSwgTGF5b3V0VW5p
dCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3QKLXsKLSAgICAvLyAgSW4gZ2VuZXJhbCwgdGhl
IGNvbXB1dGVkIHZhbHVlIHJlc29sdmVzIHRoZSBzcGVjaWZpZWQgdmFsdWUgYXMgZmFyIGFzIHBv
c3NpYmxlIHdpdGhvdXQgbGF5aW5nIG91dCB0aGUgY29udGVudC4KLSAgICBpZiAoZ2VvbWV0cnlQ
cm9wZXJ0eS5pc0ZpeGVkKCkgfHwgZ2VvbWV0cnlQcm9wZXJ0eS5pc1BlcmNlbnQoKSB8fCBnZW9t
ZXRyeVByb3BlcnR5LmlzQ2FsY3VsYXRlZCgpKQotICAgICAgICByZXR1cm4gdmFsdWVGb3JMZW5n
dGgoZ2VvbWV0cnlQcm9wZXJ0eSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIHJldHVybiB7
IH07Ci19Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6Zml4ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHkpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFnZW9tZXRyeVByb3BlcnR5LmlzRml4ZWQoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICByZXR1cm4gTGF5b3V0VW5pdCB7IGdlb21ldHJ5UHJvcGVydHkudmFsdWUoKSB9OwotfQot
Ci0vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlzdWRldC5odG1sI21pbi1tYXgtaGVp
Z2h0cwotLy8gU3BlY2lmaWVzIGEgcGVyY2VudGFnZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHVzZWQg
dmFsdWUuIFRoZSBwZXJjZW50YWdlIGlzIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBo
ZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gncyBjb250YWluaW5nIGJsb2NrLgotLy8gSWYgdGhl
IGhlaWdodCBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0
bHkgKGkuZS4sIGl0IGRlcGVuZHMgb24gY29udGVudCBoZWlnaHQpLCBhbmQgdGhpcyBlbGVtZW50
IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQsCi0vLyB0aGUgcGVyY2VudGFnZSB2YWx1ZSBp
cyB0cmVhdGVkIGFzICcwJyAoZm9yICdtaW4taGVpZ2h0Jykgb3IgJ25vbmUnIChmb3IgJ21heC1o
ZWlnaHQnKS4KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6Y29tcHV0ZWRNYXhIZWlnaHQoY29uc3QgQm94JiBsYXlvdXRCb3gsIE9wdGlvbmFsPExheW91
dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcHV0
ZWRIZWlnaHRWYWx1ZShsYXlvdXRCb3gsIEhlaWdodFR5cGU6Ok1heCwgY29udGFpbmluZ0Jsb2Nr
SGVpZ2h0KTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5Ojpjb21wdXRlZE1pbkhlaWdodChjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8
TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAotewotICAgIHJldHVybiBj
b21wdXRlZEhlaWdodFZhbHVlKGxheW91dEJveCwgSGVpZ2h0VHlwZTo6TWluLCBjb250YWluaW5n
QmxvY2tIZWlnaHQpOwotfQotCi1PcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmNvbXB1dGVkTWluV2lkdGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIExheW91
dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhW
YWx1ZShsYXlvdXRCb3gsIFdpZHRoVHlwZTo6TWluLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci19
Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29t
cHV0ZWRNYXhXaWR0aChjb25zdCBCb3gmIGxheW91dEJveCwgTGF5b3V0VW5pdCBjb250YWluaW5n
QmxvY2tXaWR0aCkKLXsKLSAgICByZXR1cm4gY29tcHV0ZWRXaWR0aFZhbHVlKGxheW91dEJveCwg
V2lkdGhUeXBlOjpNYXgsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLX0KLQotTGF5b3V0VW5pdCBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRP
ZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBWZXJ0aWNhbENvbnN0
cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzKSBjb25zdAotewotICAgIEFTU0VSVChsYXlvdXRC
b3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotCi0gICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBv
ZiB0aGlzIHNlY3Rpb24gYW5kIHRoZSBuZXh0LCB0aGUgdGVybSAic3RhdGljIHBvc2l0aW9uIiAo
b2YgYW4gZWxlbWVudCkgcmVmZXJzLCByb3VnaGx5LCB0byB0aGUgcG9zaXRpb24gYW4gZWxlbWVu
dCB3b3VsZCBoYXZlCi0gICAgLy8gaGFkIGluIHRoZSBub3JtYWwgZmxvdy4gTW9yZSBwcmVjaXNl
bHksIHRoZSBzdGF0aWMgcG9zaXRpb24gZm9yICd0b3AnIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRo
ZSB0b3AgZWRnZSBvZiB0aGUgY29udGFpbmluZyBibG9jayB0byB0aGUgdG9wIG1hcmdpbgotICAg
IC8vIGVkZ2Ugb2YgYSBoeXBvdGhldGljYWwgYm94IHRoYXQgd291bGQgaGF2ZSBiZWVuIHRoZSBm
aXJzdCBib3ggb2YgdGhlIGVsZW1lbnQgaWYgaXRzIHNwZWNpZmllZCAncG9zaXRpb24nIHZhbHVl
IGhhZCBiZWVuICdzdGF0aWMnIGFuZCBpdHMgc3BlY2lmaWVkCi0gICAgLy8gJ2Zsb2F0JyBoYWQg
YmVlbiAnbm9uZScgYW5kIGl0cyBzcGVjaWZpZWQgJ2NsZWFyJyBoYWQgYmVlbiAnbm9uZScuIChO
b3RlIHRoYXQgZHVlIHRvIHRoZSBydWxlcyBpbiBzZWN0aW9uIDkuNyB0aGlzIG1pZ2h0IHJlcXVp
cmUgYWxzbyBhc3N1bWluZyBhIGRpZmZlcmVudAotICAgIC8vIGNvbXB1dGVkIHZhbHVlIGZvciAn
ZGlzcGxheScuKSBUaGUgdmFsdWUgaXMgbmVnYXRpdmUgaWYgdGhlIGh5cG90aGV0aWNhbCBib3gg
aXMgYWJvdmUgdGhlIGNvbnRhaW5pbmcgYmxvY2suCi0KLSAgICAvLyBTdGFydCB3aXRoIHRoaXMg
Ym94J3MgYm9yZGVyIGJveCBvZmZzZXQgZnJvbSB0aGUgcGFyZW50J3MgYm9yZGVyIGJveC4KLSAg
ICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0g
ICAgTGF5b3V0VW5pdCB0b3A7Ci0gICAgaWYgKGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxp
bmcoKSAmJiBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCktPmlzQmxvY2tMZXZlbEJv
eCgpKSB7Ci0gICAgICAgIC8vIEFkZCBzaWJsaW5nIG9mZnNldAotICAgICAgICBhdXRvJiBwcmV2
aW91c0luRmxvd1NpYmxpbmcgPSAqbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93U2libGluZygpOwot
ICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQuZ2VvbWV0cnlGb3JCb3gocHJldmlvdXNJbkZsb3dTaWJsaW5nLCBFc2NhcGVSZWFzb246Ok91
dE9mRmxvd0JveE5lZWRzSW5GbG93R2VvbWV0cnkpOwotICAgICAgICBhdXRvJiBmb3JtYXR0aW5n
U3RhdGUgPSBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdTdGF0ZT4obGF5b3V0U3RhdGUoKS5mb3Jt
YXR0aW5nU3RhdGVGb3JCb3gocHJldmlvdXNJbkZsb3dTaWJsaW5nKSk7Ci0gICAgICAgIGF1dG8g
dXNlZFZlcnRpY2FsTWFyZ2luRm9yUHJldmlvdXNCb3ggPSBmb3JtYXR0aW5nU3RhdGUudXNlZFZl
cnRpY2FsTWFyZ2luKHByZXZpb3VzSW5GbG93U2libGluZyk7Ci0KLSAgICAgICAgdG9wICs9IEJv
eEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkpLmJvdHRv
bSgpICsgdXNlZFZlcnRpY2FsTWFyZ2luRm9yUHJldmlvdXNCb3gubm9uQ29sbGFwc2VkVmFsdWVz
LmFmdGVyOwotICAgIH0gZWxzZQotICAgICAgICB0b3AgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChsYXlvdXRCb3gucGFyZW50KCksIEVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94
TmVlZHNJbkZsb3dHZW9tZXRyeSkuY29udGVudEJveFRvcCgpOwotCi0gICAgLy8gUmVzb2x2ZSB0
b3AgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGNvbnRhaW5pbmcgYmxvY2suCi0gICAgYXV0byYgY29u
dGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwotICAgIC8vIFN0YXJ0
IHdpdGggdGhlIHBhcmVudCBzaW5jZSB3ZSBwcmV0ZW5kIHRoYXQgdGhpcyBib3ggaXMgbm9ybWFs
IGZsb3cuCi0gICAgZm9yIChhdXRvKiBhbmNlc3RvciA9ICZsYXlvdXRCb3gucGFyZW50KCk7IGFu
Y2VzdG9yICE9ICZjb250YWluaW5nQmxvY2s7IGFuY2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWlu
aW5nQmxvY2soKSkgewotICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0Lmdlb21ldHJ5Rm9yQm94KCphbmNlc3RvciwgRXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hO
ZWVkc0luRmxvd0dlb21ldHJ5KTsKLSAgICAgICAgLy8gQm94R2VvbWV0cnk6OnRvcCBpcyB0aGUg
Ym9yZGVyIGJveCB0b3AgcG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGlu
YXRlIHN5c3RlbS4KLSAgICAgICAgdG9wICs9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hUb3AoYm94
R2VvbWV0cnkpOwotICAgICAgICBBU1NFUlQoIWFuY2VzdG9yLT5pc1Bvc2l0aW9uZWQoKSB8fCBs
YXlvdXRCb3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7Ci0gICAgfQotICAgIC8vIE1vdmUgdGhlIHN0
YXRpYyBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgcGFkZGluZyBib3guIFRoaXMgaXMgdmVyeSBz
cGVjaWZpYyB0byBhYm9sdXRlbHkgcG9zaXRpb25lZCBib3hlcy4KLSAgICByZXR1cm4gdG9wIC0g
dmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOwotfQotCi1MYXlvdXRVbml0IEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93
UG9zaXRpb25lZChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheW91dEJv
eC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci0gICAgLy8gU2VlIHN0YXRpY1ZlcnRpY2FsUG9z
aXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3Rh
dGljIHBvc2l0aW9uLgotCi0gICAgLy8gU3RhcnQgd2l0aCB0aGlzIGJveCdzIGJvcmRlciBib3gg
b2Zmc2V0IGZyb20gdGhlIHBhcmVudCdzIGJvcmRlciBib3guCi0gICAgYXV0byYgZm9ybWF0dGlu
Z0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8gbGVmdCA9IGZv
cm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveC5wYXJlbnQoKSwgRXNjYXBl
UmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KS5jb250ZW50Qm94TGVmdCgp
OwotCi0gICAgLy8gUmVzb2x2ZSBsZWZ0IGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBjb250YWluaW5n
IGJsb2NrLgotICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9IGxheW91dEJveC5jb250YWluaW5n
QmxvY2soKTsKLSAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJlbnQgc2luY2Ugd2UgcHJldGVuZCB0
aGF0IHRoaXMgYm94IGlzIG5vcm1hbCBmbG93LgotICAgIGZvciAoYXV0byogYW5jZXN0b3IgPSAm
bGF5b3V0Qm94LnBhcmVudCgpOyBhbmNlc3RvciAhPSAmY29udGFpbmluZ0Jsb2NrOyBhbmNlc3Rv
ciA9ICZhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgYXV0byYgYm94R2Vv
bWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveCgqYW5jZXN0b3IsIEVzY2Fw
ZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSk7Ci0gICAgICAgIC8vIEJv
eEdlb21ldHJ5OjpsZWZ0IGlzIHRoZSBib3JkZXIgYm94IGxlZnQgcG9zaXRpb24gaW4gaXRzIGNv
bnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgbGVmdCArPSBCb3hH
ZW9tZXRyeTo6Ym9yZGVyQm94TGVmdChib3hHZW9tZXRyeSk7Ci0gICAgICAgIEFTU0VSVCghYW5j
ZXN0b3ItPmlzUG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsK
LSAgICB9Ci0gICAgLy8gTW92ZSB0aGUgc3RhdGljIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBw
YWRkaW5nIGJveC4gVGhpcyBpcyB2ZXJ5IHNwZWNpZmljIHRvIGFib2x1dGVseSBwb3NpdGlvbmVk
IGJveGVzLgotICAgIHJldHVybiBsZWZ0IC0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxM
ZWZ0OwotfQotCi1MYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c2hyaW5r
VG9GaXRXaWR0aChjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aCkKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRM
YXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXSAtPiBzaHJpbmsgdG8gZml0IC0+IHVuc3VwcG9ydGVk
IC0+IHdpZHRoKCIgPDwgTGF5b3V0VW5pdCB7IH0gPDwgInB4KSBsYXlvdXRCb3g6ICIgPDwgJmZv
cm1hdHRpbmdDb250ZXh0Um9vdCA8PCAiKSIpOwotICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4
dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKLQotICAgIC8vIENhbGN1bGF0
aW9uIG9mIHRoZSBzaHJpbmstdG8tZml0IHdpZHRoIGlzIHNpbWlsYXIgdG8gY2FsY3VsYXRpbmcg
dGhlIHdpZHRoIG9mIGEgdGFibGUgY2VsbCB1c2luZyB0aGUgYXV0b21hdGljIHRhYmxlIGxheW91
dCBhbGdvcml0aG0uCi0gICAgLy8gUm91Z2hseTogY2FsY3VsYXRlIHRoZSBwcmVmZXJyZWQgd2lk
dGggYnkgZm9ybWF0dGluZyB0aGUgY29udGVudCB3aXRob3V0IGJyZWFraW5nIGxpbmVzIG90aGVy
IHRoYW4gd2hlcmUgZXhwbGljaXQgbGluZSBicmVha3Mgb2NjdXIsCi0gICAgLy8gYW5kIGFsc28g
Y2FsY3VsYXRlIHRoZSBwcmVmZXJyZWQgbWluaW11bSB3aWR0aCwgZS5nLiwgYnkgdHJ5aW5nIGFs
bCBwb3NzaWJsZSBsaW5lIGJyZWFrcy4gQ1NTIDIuMiBkb2VzIG5vdCBkZWZpbmUgdGhlIGV4YWN0
IGFsZ29yaXRobS4KLSAgICAvLyBUaGlyZGx5LCBmaW5kIHRoZSBhdmFpbGFibGUgd2lkdGg6IGlu
IHRoaXMgY2FzZSwgdGhpcyBpcyB0aGUgd2lkdGggb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgbWlu
dXMgdGhlIHVzZWQgdmFsdWVzIG9mICdtYXJnaW4tbGVmdCcsICdib3JkZXItbGVmdC13aWR0aCcs
Ci0gICAgLy8gJ3BhZGRpbmctbGVmdCcsICdwYWRkaW5nLXJpZ2h0JywgJ2JvcmRlci1yaWdodC13
aWR0aCcsICdtYXJnaW4tcmlnaHQnLCBhbmQgdGhlIHdpZHRocyBvZiBhbnkgcmVsZXZhbnQgc2Ny
b2xsIGJhcnMuCi0KLSAgICAvLyBUaGVuIHRoZSBzaHJpbmstdG8tZml0IHdpZHRoIGlzOiBtaW4o
bWF4KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBhdmFpbGFibGUgd2lkdGgpLCBwcmVmZXJyZWQg
d2lkdGgpLgotICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMgeyB9OwotICAgIGF1dG8gaGFzQ29udGVudCA9IGlzPENvbnRhaW5lckJv
eD4oZm9ybWF0dGluZ0NvbnRleHRSb290KSAmJiBkb3duY2FzdDxDb250YWluZXJCb3g+KGZvcm1h
dHRpbmdDb250ZXh0Um9vdCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCk7Ci0gICAgLy8gVGhl
IHVzZWQgd2lkdGggb2YgdGhlIGNvbnRhaW5tZW50IGJveCBpcyBkZXRlcm1pbmVkIGFzIGlmIHBl
cmZvcm1pbmcgYSBub3JtYWwgbGF5b3V0IG9mIHRoZSBib3gsIGV4Y2VwdCB0aGF0IGl0IGlzIHRy
ZWF0ZWQgYXMgaGF2aW5nIG5vIGNvbnRlbnQuCi0gICAgYXV0byBzaG91bGRJZ25vcmVDb250ZW50
ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LmlzU2l6ZUNvbnRhaW5tZW50Qm94KCk7ICAKLSAgICBp
ZiAoaGFzQ29udGVudCAmJiAhc2hvdWxkSWdub3JlQ29udGVudCkgewotICAgICAgICBhdXRvJiBy
b290ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpOwotICAg
ICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGVGb3JSb290ID0gbGF5b3V0U3RhdGUoKS5lbnN1cmVG
b3JtYXR0aW5nU3RhdGUocm9vdCk7Ci0gICAgICAgIGF1dG8gcHJlY29tcHV0ZWRJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0YXRlRm9yUm9vdC5pbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzKCk7Ci0gICAgICAgIGlmICghcHJlY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKQotICAgICAgICAgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IExheW91dENv
bnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KHJvb3QsIGxheW91dFN0YXRlKCkpLT5jb21w
dXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9ICpwcmVjb21wdXRlZEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHM7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heChpbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGF2YWlsYWJsZVdpZHRoKSwgaW50cmluc2ljV2lk
dGhDb25zdHJhaW50cy5tYXhpbXVtKTsKLX0KLQotVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkVmVydGljYWxHZW9tZXRyeShj
b25zdCBDb250YWluZXJCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRz
JiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRp
Y2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRl
blZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpOwotICAgIEFTU0VS
VCh2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQpOwotCi0gICAgLy8gMTAuNi40IEFi
c29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCi0gICAgLy8KLSAgICAv
LyBGb3IgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVsZW1lbnRzLCB0aGUgdXNlZCB2YWx1ZXMgb2Yg
dGhlIHZlcnRpY2FsIGRpbWVuc2lvbnMgbXVzdCBzYXRpc2Z5IHRoaXMgY29uc3RyYWludDoKLSAg
ICAvLyAndG9wJyArICdtYXJnaW4tdG9wJyArICdib3JkZXItdG9wLXdpZHRoJyArICdwYWRkaW5n
LXRvcCcgKyAnaGVpZ2h0JyArICdwYWRkaW5nLWJvdHRvbScgKyAnYm9yZGVyLWJvdHRvbS13aWR0
aCcgKyAnbWFyZ2luLWJvdHRvbScgKyAnYm90dG9tJwotICAgIC8vID0gaGVpZ2h0IG9mIGNvbnRh
aW5pbmcgYmxvY2sKLQotICAgIC8vIElmIGFsbCB0aHJlZSBvZiAndG9wJywgJ2hlaWdodCcsIGFu
ZCAnYm90dG9tJyBhcmUgYXV0bywgc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5k
IGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93LgotCi0gICAgLy8gSWYgbm9uZSBvZiB0aGUg
dGhyZWUgYXJlICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9t
JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhCi0gICAgLy8g
Y29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBnZXQgZXF1YWwgdmFsdWVzLiBJZiBvbmUg
b2YgJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyBpcyAnYXV0bycsIHNvbHZlIHRoZSBl
cXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KLSAgICAvLyBJZiB0aGUgdmFsdWVzIGFyZSBvdmVyLWNv
bnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRo
YXQgdmFsdWUuCi0KLSAgICAvLyBPdGhlcndpc2UsIHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93
aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCi0KLSAgICAvLyAxLiAndG9wJyBhbmQgJ2hlaWdo
dCcgYXJlICdhdXRvJyBhbmQgJ2JvdHRvbScgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0
IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAxMC42LjcsCi0gICAgLy8gICAgIHNldCAnYXV0
bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQg
c29sdmUgZm9yICd0b3AnCi0gICAgLy8gMi4gJ3RvcCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycg
YW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMg
cG9zaXRpb24sIHNldCAnYXV0bycgdmFsdWVzIGZvcgotICAgIC8vICAgICdtYXJnaW4tdG9wJyBh
bmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKLSAgICAvLyAz
LiAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlICdhdXRvJyBhbmQgJ3RvcCcgaXMgbm90ICdhdXRv
JywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAxMC42LjcsIHNl
dCAnYXV0bycKLSAgICAvLyAgICAgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4t
Ym90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICdib3R0b20nCi0gICAgLy8gNC4gJ3RvcCcgaXMg
J2F1dG8nLCAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdh
dXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFu
ZCBzb2x2ZSBmb3IgJ3RvcCcKLSAgICAvLyA1LiAnaGVpZ2h0JyBpcyAnYXV0bycsICd0b3AnIGFu
ZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgdGhlbiAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2lu
LXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgc2V0IHRvIDAgYW5kIHNvbHZlIGZvciAnaGVp
Z2h0JwotICAgIC8vIDYuICdib3R0b20nIGlzICdhdXRvJywgJ3RvcCcgYW5kICdoZWlnaHQnIGFy
ZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5k
ICdtYXJnaW4tYm90dG9tJyB0byAwIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKLQotICAgIGF1dG8m
IGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKLSAgICBhdXRv
JiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICBhdXRvIGNvbnRh
aW5pbmdCbG9ja0hlaWdodCA9ICp2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQ7Ci0g
ICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dp
Y2FsV2lkdGg7Ci0KLSAgICBhdXRvIHRvcCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbFRv
cCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZh
bHVlKHN0eWxlLmxvZ2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1
dG8gaGVpZ2h0ID0gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5W
ZXJ0aWNhbFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCwg
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLSAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4g
PSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cyk7Ci0gICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMg
dXNlZFZlcnRpY2FsTWFyZ2luOyAKLSAgICBhdXRvIHBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5w
YWRkaW5nVG9wKCkudmFsdWVPcigwKTsKLSAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSBib3hHZW9t
ZXRyeS5wYWRkaW5nQm90dG9tKCkudmFsdWVPcigwKTsKLSAgICBhdXRvIGJvcmRlclRvcCA9IGJv
eEdlb21ldHJ5LmJvcmRlclRvcCgpOwotICAgIGF1dG8gYm9yZGVyQm90dG9tID0gYm94R2VvbWV0
cnkuYm9yZGVyQm90dG9tKCk7Ci0KLSAgICBpZiAoIXRvcCAmJiAhaGVpZ2h0ICYmICFib3R0b20p
Ci0gICAgICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlv
bmVkKGxheW91dEJveCwgdmVydGljYWxDb25zdHJhaW50cyk7Ci0KLSAgICBpZiAodG9wICYmIGhl
aWdodCAmJiBib3R0b20pIHsKLSAgICAgICAgaWYgKCFjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJl
Zm9yZSAmJiAhY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcikgewotICAgICAgICAgICAgYXV0
byBtYXJnaW5CZWZvcmVBbmRBZnRlciA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsg
Ym9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVy
Qm90dG9tICsgKmJvdHRvbSk7Ci0gICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IG1h
cmdpbkJlZm9yZUFuZEFmdGVyIC8gMiwgbWFyZ2luQmVmb3JlQW5kQWZ0ZXIgLyAyIH07Ci0gICAg
ICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlKSB7Ci0gICAgICAg
ICAgICB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgPSAqY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5h
ZnRlcjsKLSAgICAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgPSBjb250YWluaW5n
QmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsg
cGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciAr
ICpib3R0b20pOwotICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyKSB7Ci0gICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlID0gKmNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYmVmb3JlOwotICAgICAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4u
YmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9t
ICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
dXNlZFZlcnRpY2FsTWFyZ2luID0geyAqY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUsICpj
b21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyIH07Ci0gICAgICAgIC8vIE92ZXItY29uc3RyYWlu
ZWQ/Ci0gICAgICAgIGF1dG8gYm94SGVpZ2h0ID0gKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5i
ZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20g
KyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgKyAqYm90dG9tOwotICAg
ICAgICBpZiAoYm94SGVpZ2h0ICE9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkKLSAgICAgICAgICAg
IGJvdHRvbSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgdXNlZFZlcnRpY2FsTWFy
Z2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0Jv
dHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcik7Ci0gICAgfQot
Ci0gICAgaWYgKCF0b3AgJiYgIWhlaWdodCAmJiBib3R0b20pIHsKLSAgICAgICAgLy8gIzEKLSAg
ICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlv
dXRCb3gpOwotICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxN
YXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFs
dWVPcigwKSB9OwotICAgICAgICB0b3AgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAodXNlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsg
cGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciAr
ICpib3R0b20pOyAKLSAgICB9Ci0KLSAgICBpZiAoIXRvcCAmJiAhYm90dG9tICYmIGhlaWdodCkg
ewotICAgICAgICAvLyAjMgotICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9y
T3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMpOwotICAg
ICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3Jl
LnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9Owot
ICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0
aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBh
ZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIpOwot
ICAgIH0KLQotICAgIGlmICghaGVpZ2h0ICYmICFib3R0b20gJiYgdG9wKSB7Ci0gICAgICAgIC8v
ICMzCi0gICAgICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJv
b3QobGF5b3V0Qm94KTsKLSAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyBjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyLnZhbHVlT3IoMCkgfTsKLSAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0
IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGlu
Z1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRp
Y2FsTWFyZ2luLmFmdGVyKTsKLSAgICB9Ci0KLSAgICBpZiAoIXRvcCAmJiBoZWlnaHQgJiYgYm90
dG9tKSB7Ci0gICAgICAgIC8vICM0Ci0gICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsgY29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbi5hZnRlci52YWx1ZU9yKDApIH07Ci0gICAgICAgIHRvcCA9IGNvbnRhaW5pbmdCbG9ja0hl
aWdodCAtICh1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1Rv
cCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2Fs
TWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7Ci0gICAgfQotCi0gICAgaWYgKCFoZWlnaHQgJiYgdG9w
ICYmIGJvdHRvbSkgewotICAgICAgICAvLyAjNQotICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4g
PSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVy
dGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwotICAgICAgICBoZWlnaHQgPSBjb250YWlu
aW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3Jk
ZXJUb3AgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRW
ZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b20pOwotICAgIH0KLQotICAgIGlmICghYm90dG9t
ICYmIHRvcCAmJiBoZWlnaHQpIHsKLSAgICAgICAgLy8gIzYKLSAgICAgICAgdXNlZFZlcnRpY2Fs
TWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21w
dXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKLSAgICAgICAgYm90dG9tID0g
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3Jl
ICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9y
ZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQodG9wKTsKLSAgICBBU1NFUlQoYm90dG9tKTsKLSAgICBBU1NFUlQoaGVpZ2h0KTsKLQotICAg
IC8vIEZvciBvdXQtb2YtZmxvdyBlbGVtZW50cyB0aGUgY29udGFpbmluZyBibG9jayBpcyBmb3Jt
ZWQgYnkgdGhlIHBhZGRpbmcgZWRnZSBvZiB0aGUgYW5jZXN0b3IuCi0gICAgLy8gQXQgdGhpcyBw
b2ludCB0aGUgcG9zaXRpb25lZCB2YWx1ZSBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2Yg
dGhlIHBhZGRpbmcgYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3ggY29vcmRpbmF0
ZSBzeXN0ZW0uCi0gICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlID0g
dmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOwotICAgICp0b3AgKz0gY29udGFpbmluZ0Js
b2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKLSAgICAqYm90dG9tICs9IGNvbnRhaW5pbmdCbG9ja1Bh
ZGRpbmdWZXJ0aWNhbEVkZ2U7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRl
eHRMYXlvdXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9uXVtIZWlnaHRdW01hcmdpbl0gLT4gb3V0LW9m
LWZsb3cgbm9uLXJlcGxhY2VkIC0+IHRvcCgiIDw8ICp0b3AgPDwgInB4KSBib3R0b20oIiAgPDwg
KmJvdHRvbSA8PCAicHgpIGhlaWdodCgiIDw8ICpoZWlnaHQgPDwgInB4KSBtYXJnaW4oIiA8PCB1
c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlIDw8ICJweCwgIiAgPDwgdXNlZFZlcnRpY2FsTWFyZ2lu
LmFmdGVyIDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOwotICAgIHJl
dHVybiB7ICp0b3AsICpib3R0b20sIHsgKmhlaWdodCwgdXNlZFZlcnRpY2FsTWFyZ2luIH0gfTsK
LX0KLQotSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0
T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQ29udGFpbmVyQm94JiBs
YXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFp
bnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250
YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7Ci0gICAgCi0gICAgLy8gMTAuMy43IEFi
c29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCi0gICAgLy8KLSAgICAv
LyAnbGVmdCcgKyAnbWFyZ2luLWxlZnQnICsgJ2JvcmRlci1sZWZ0LXdpZHRoJyArICdwYWRkaW5n
LWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0JyArICdib3JkZXItcmlnaHQtd2lkdGgn
ICsgJ21hcmdpbi1yaWdodCcgKyAncmlnaHQnCi0gICAgLy8gPSB3aWR0aCBvZiBjb250YWluaW5n
IGJsb2NrCi0KLSAgICAvLyBJZiBhbGwgdGhyZWUgb2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3Jp
Z2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4t
bGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAuCi0gICAgLy8gVGhlbiwgaWYgdGhlICdkaXJl
Y3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBv
c2l0aW9uIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGlj
Ci0gICAgLy8gcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93OyBvdGhl
cndpc2UsIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUg
bnVtYmVyIG9uZSBiZWxvdy4KLSAgICAvLwotICAgIC8vIElmIG5vbmUgb2YgdGhlIHRocmVlIGlz
ICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgJ2F1
dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0
aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcywKLSAgICAvLyB1bmxlc3MgdGhpcyB3b3Vs
ZCBtYWtlIHRoZW0gbmVnYXRpdmUsIGluIHdoaWNoIGNhc2Ugd2hlbiBkaXJlY3Rpb24gb2YgdGhl
IGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdydGwnKSwgc2V0ICdtYXJnaW4tbGVmdCcgKCdt
YXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZAotICAgIC8vIHNvbHZlIGZvciAnbWFyZ2luLXJpZ2h0
JyAoJ21hcmdpbi1sZWZ0JykuIElmIG9uZSBvZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmln
aHQnIGlzICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgotICAgIC8v
IElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9y
ICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5p
bmcgYmxvY2sgaXMgJ3J0bCcpIG9yICdyaWdodCcKLSAgICAvLyAoaW4gY2FzZSAnZGlyZWN0aW9u
JyBpcyAnbHRyJykgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgotICAgIC8vCi0gICAgLy8gT3Ro
ZXJ3aXNlLCBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1y
aWdodCcgdG8gMCwgYW5kIHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0
aGF0IGFwcGxpZXMuCi0gICAgLy8KLSAgICAvLyAxLiAnbGVmdCcgYW5kICd3aWR0aCcgYXJlICdh
dXRvJyBhbmQgJ3JpZ2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmst
dG8tZml0LiBUaGVuIHNvbHZlIGZvciAnbGVmdCcKLSAgICAvLyAyLiAnbGVmdCcgYW5kICdyaWdo
dCcgYXJlICdhdXRvJyBhbmQgJ3dpZHRoJyBpcyBub3QgJ2F1dG8nLCB0aGVuIGlmIHRoZSAnZGly
ZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1w
b3NpdGlvbiAKLSAgICAvLyAgICBjb250YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcg
dG8gdGhlIHN0YXRpYyBwb3NpdGlvbiwgb3RoZXJ3aXNlIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0
aWMgcG9zaXRpb24uCi0gICAgLy8gICAgVGhlbiBzb2x2ZSBmb3IgJ2xlZnQnIChpZiAnZGlyZWN0
aW9uIGlzICdydGwnKSBvciAncmlnaHQnIChpZiAnZGlyZWN0aW9uJyBpcyAnbHRyJykuCi0gICAg
Ly8gMy4gJ3dpZHRoJyBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnbGVmdCcgaXMgbm90ICdh
dXRvJywgdGhlbiB0aGUgd2lkdGggaXMgc2hyaW5rLXRvLWZpdCAuIFRoZW4gc29sdmUgZm9yICdy
aWdodCcKLSAgICAvLyA0LiAnbGVmdCcgaXMgJ2F1dG8nLCAnd2lkdGgnIGFuZCAncmlnaHQnIGFy
ZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnbGVmdCcKLSAgICAvLyA1LiAnd2lkdGgnIGlz
ICdhdXRvJywgJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZv
ciAnd2lkdGgnCi0gICAgLy8gNi4gJ3JpZ2h0JyBpcyAnYXV0bycsICdsZWZ0JyBhbmQgJ3dpZHRo
JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0JwotCi0gICAgYXV0byYgZm9y
bWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8mIHN0
eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0
aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgIGF1dG8gY29udGFpbmlu
Z0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwotICAgIGF1
dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKS5z
dHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAKLSAgICBhdXRvIGxlZnQgPSBj
b21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsK
LSAgICBhdXRvIHJpZ2h0ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsUmlnaHQoKSwgY29u
dGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gd2lkdGggPSBvdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcy53aWR0aCA/IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoIDogY29tcHV0
ZWRXaWR0aChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICBhdXRvIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4o
bGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIFVzZWRIb3Jpem9udGFsTWFy
Z2luIHVzZWRIb3Jpem9udGFsTWFyZ2luOwotICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBib3hHZW9t
ZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBwYWRkaW5nUmlnaHQgPSBi
b3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwotICAgIGF1dG8gYm9yZGVyTGVm
dCA9IGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKTsKLSAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94
R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKLSAgICBpZiAoIWxlZnQgJiYgIXdpZHRoICYmICFyaWdo
dCkgewotICAgICAgICAvLyBJZiBhbGwgdGhyZWUgb2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3Jp
Z2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4t
bGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAuCi0gICAgICAgIC8vIFRoZW4sIGlmIHRoZSAn
ZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRp
Yy1wb3NpdGlvbiBjb250YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0
YXRpYwotICAgICAgICAvLyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgdGhyZWUgYmVs
b3c7IG90aGVyd2lzZSwgc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiBhbmQgYXBw
bHkgcnVsZSBudW1iZXIgb25lIGJlbG93LgotICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9
IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9y
aXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9OwotCi0gICAgICAgIGF1dG8gc3RhdGljSG9y
aXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9z
aXRpb25lZChsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgICAgIGlmIChp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQotICAgICAgICAgICAgbGVmdCA9IHN0YXRpY0hvcml6b250
YWxQb3NpdGlvbjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmlnaHQgPSBzdGF0aWNIb3Jp
em9udGFsUG9zaXRpb247Ci0gICAgfSBlbHNlIGlmIChsZWZ0ICYmIHdpZHRoICYmIHJpZ2h0KSB7
Ci0gICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIHRocmVlIGlzICdhdXRvJzogSWYgYm90aCAnbWFy
Z2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRp
b24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVx
dWFsIHZhbHVlcywKLSAgICAgICAgLy8gdW5sZXNzIHRoaXMgd291bGQgbWFrZSB0aGVtIG5lZ2F0
aXZlLCBpbiB3aGljaCBjYXNlIHdoZW4gZGlyZWN0aW9uIG9mIHRoZSBjb250YWluaW5nIGJsb2Nr
IGlzICdsdHInICgncnRsJyksIHNldCAnbWFyZ2luLWxlZnQnICgnbWFyZ2luLXJpZ2h0JykgdG8g
emVybyBhbmQKLSAgICAgICAgLy8gc29sdmUgZm9yICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxl
ZnQnKS4gSWYgb25lIG9mICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgaXMgJ2F1dG8n
LCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuCi0gICAgICAgIC8vIElmIHRoZSB2
YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdsZWZ0JyAo
aW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sg
aXMgJ3J0bCcpIG9yICdyaWdodCcKLSAgICAgICAgLy8gKGluIGNhc2UgJ2RpcmVjdGlvbicgaXMg
J2x0cicpIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KLSAgICAgICAgaWYgKCFjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uc3RhcnQgJiYgIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsK
LSAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnRBbmRFbmQgPSBjb250YWluaW5nQmxvY2tXaWR0
aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdS
aWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKLSAgICAgICAgICAgIGlmIChtYXJnaW5TdGFy
dEFuZEVuZCA+PSAwKQotICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBt
YXJnaW5TdGFydEFuZEVuZCAvIDIsIG1hcmdpblN0YXJ0QW5kRW5kIC8gMiB9OwotICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pIHsK
LSAgICAgICAgICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSAwX2x1Owot
ICAgICAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250YWluaW5n
QmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVy
TGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQg
KyAqcmlnaHQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9IDBfbHU7Ci0gICAgICAgICAgICAgICAgICAgIHVz
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQg
KyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3Jk
ZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQpIHsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kOwotICAgICAgICAgICAgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRl
ckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0
ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKLSAgICAgICAgfSBlbHNlIGlm
ICghY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgewotICAgICAgICAgICAgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgPSAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0OwotICAg
ICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGgg
LSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRk
aW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyAq
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LCAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZCB9OwotICAgICAgICAgICAgLy8gT3ZlcmNvbnN0cmFpbmVkPyBJZ25vcmUgcmlnaHQgKGxl
ZnQpLgotICAgICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAgICAg
ICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCArICpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0
aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVm
dCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxN
YXJnaW4uZW5kICsgKnJpZ2h0KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IE90aGVyd2lzZSwgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJn
aW4tcmlnaHQnIHRvIDAsIGFuZCBwaWNrIHRoZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVs
ZXMgdGhhdCBhcHBsaWVzLgotICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5lbmQudmFsdWVPcigwKSB9OwotICAgIH0KLQotICAgIGlmICghbGVmdCAmJiAhd2lkdGgg
JiYgcmlnaHQpIHsKLSAgICAgICAgLy8gIzEKLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhdmFp
bGFibGUgd2lkdGggYnkgc29sdmluZyBmb3IgJ3dpZHRoJyBhZnRlciBzZXR0aW5nICdsZWZ0JyAo
aW4gY2FzZSAxKSB0byAwCi0gICAgICAgIGxlZnQgPSBMYXlvdXRVbml0IHsgMCB9OwotICAgICAg
ICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1
c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBh
ZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJp
Z2h0KTsKLSAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCwgYXZhaWxh
YmxlV2lkdGgpOwotICAgICAgICBsZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhv
cml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGgg
KyBwYWRkaW5nUmlnaHQgICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQg
KyAqcmlnaHQpOwotICAgIH0gZWxzZSBpZiAoIWxlZnQgJiYgIXJpZ2h0ICYmIHdpZHRoKSB7Ci0g
ICAgICAgIC8vICMyCi0gICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIGhv
cml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KSB7Ci0gICAgICAgICAgICBsZWZ0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOwotICAgICAg
ICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9u
dGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmlnaHQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRp
b247Ci0gICAgICAgICAgICBsZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBw
YWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpy
aWdodCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiAhcmlnaHQgJiYgbGVm
dCkgewotICAgICAgICAvLyAjMwotICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGF2YWlsYWJsZSB3
aWR0aCBieSBzb2x2aW5nIGZvciAnd2lkdGgnIGFmdGVyIHNldHRpbmcgJ3JpZ2h0JyAoaW4gY2Fz
ZSAzKSB0byAwCi0gICAgICAgIHJpZ2h0ID0gTGF5b3V0VW5pdCB7IDAgfTsKLSAgICAgICAgYXV0
byBhdmFpbGFibGVXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhv
cml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5n
UmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7
Ci0gICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRCb3gsIGF2YWlsYWJsZVdp
ZHRoKTsKLSAgICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVz
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndp
ZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5l
bmQpOwotICAgIH0gZWxzZSBpZiAoIWxlZnQgJiYgd2lkdGggJiYgcmlnaHQpIHsKLSAgICAgICAg
Ly8gIzQKLSAgICAgICAgbGVmdCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9u
dGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmln
aHQpOwotICAgIH0gZWxzZSBpZiAoIXdpZHRoICYmIGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAg
Ly8gIzUKLSAgICAgICAgd2lkdGggPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVz
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmln
aHQpOwotICAgIH0gZWxzZSBpZiAoIXJpZ2h0ICYmIGxlZnQgJiYgd2lkdGgpIHsKLSAgICAgICAg
Ly8gIzYKLSAgICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVz
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndp
ZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5l
bmQpOwotICAgIH0KLQotICAgIEFTU0VSVChsZWZ0KTsKLSAgICBBU1NFUlQocmlnaHQpOwotICAg
IEFTU0VSVCh3aWR0aCk7Ci0KLSAgICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNv
bnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2Vz
dG9yLgotICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhl
IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0
byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2Nr
UGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsK
LSAgICAqbGVmdCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotICAgICpy
aWdodCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlvbl1b
V2lkdGhdW01hcmdpbl0gLT4gb3V0LW9mLWZsb3cgbm9uLXJlcGxhY2VkIC0+IGxlZnQoIiA8PCAq
bGVmdCA8PCAicHgpIHJpZ2h0KCIgIDw8ICpyaWdodCA8PCAicHgpIHdpZHRoKCIgPDwgKndpZHRo
IDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPDwgInB4LCAi
ICA8PCB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPDwgInB4KSBsYXlvdXRCb3goIiA8PCAmbGF5
b3V0Qm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsgKmxlZnQsICpyaWdodCwgeyAqd2lkdGgsIHVz
ZWRIb3Jpem9udGFsTWFyZ2luIH0gfTsKLX0KLQotVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25z
dCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYg
aG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNh
bENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5W
ZXJ0aWNhbFZhbHVlcykgY29uc3QKLXsKLSAgICBBU1NFUlQocmVwbGFjZWRCb3guaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpOwotICAgIEFTU0VSVCh2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxI
ZWlnaHQpOwotCi0gICAgLy8gMTAuNi41IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQg
ZWxlbWVudHMKLSAgICAvLwotICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzIGRl
dGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZCBlbGVtZW50cy4KLSAgICAvLyBJZiAnbWFy
Z2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIGlzIHNwZWNpZmllZCBhcyAnYXV0bycgaXRzIHVz
ZWQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcnVsZXMgYmVsb3cuCi0gICAgLy8gMS4gSWYg
Ym90aCAndG9wJyBhbmQgJ2JvdHRvbScgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCByZXBsYWNlICd0
b3AnIHdpdGggdGhlIGVsZW1lbnQncyBzdGF0aWMgcG9zaXRpb24uCi0gICAgLy8gMi4gSWYgJ2Jv
dHRvbScgaXMgJ2F1dG8nLCByZXBsYWNlIGFueSAnYXV0bycgb24gJ21hcmdpbi10b3AnIG9yICdt
YXJnaW4tYm90dG9tJyB3aXRoICcwJy4KLSAgICAvLyAzLiBJZiBhdCB0aGlzIHBvaW50IGJvdGgg
J21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgYXJlIHN0aWxsICdhdXRvJywgc29sdmUg
dGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBjb25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJn
aW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVlcy4KLSAgICAvLyA0LiBJZiBhdCB0aGlzIHBvaW50IHRo
ZXJlIGlzIG9ubHkgb25lICdhdXRvJyBsZWZ0LCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQg
dmFsdWUuCi0gICAgLy8gNS4gSWYgYXQgdGhpcyBwb2ludCB0aGUgdmFsdWVzIGFyZSBvdmVyLWNv
bnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRo
YXQgdmFsdWUuCi0KLSAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRp
bmdDb250ZXh0KCk7Ci0gICAgYXV0byYgc3R5bGUgPSByZXBsYWNlZEJveC5zdHlsZSgpOwotICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocmVw
bGFjZWRCb3gpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gKnZlcnRpY2FsQ29u
c3RyYWludHMubG9naWNhbEhlaWdodDsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0g
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLQotICAgIGF1dG8gdG9wID0gY29t
cHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAg
ICBhdXRvIGJvdHRvbSA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250
YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byBoZWlnaHQgPSBpbmxpbmVSZXBsYWNlZENvbnRl
bnRIZWlnaHRBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgdmVy
dGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKS5jb250ZW50SGVpZ2h0
OwotICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZl
cnRpY2FsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIE9w
dGlvbmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5CZWZvcmUgPSBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmJlZm9yZTsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luQWZ0ZXIgPSBj
b21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyOwotICAgIGF1dG8gcGFkZGluZ1RvcCA9IGJveEdl
b21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9
IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApOwotICAgIGF1dG8gYm9yZGVy
VG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCk7Ci0gICAgYXV0byBib3JkZXJCb3R0b20gPSBi
b3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKLQotICAgIGlmICghdG9wICYmICFib3R0b20pIHsK
LSAgICAgICAgLy8gIzEKLSAgICAgICAgdG9wID0gc3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91
dE9mRmxvd1Bvc2l0aW9uZWQocmVwbGFjZWRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMpOwotICAg
IH0KLQotICAgIGlmICghYm90dG9tKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIHVzZWRNYXJn
aW5CZWZvcmUgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApOwotICAg
ICAgICB1c2VkTWFyZ2luQWZ0ZXIgPSB1c2VkTWFyZ2luQmVmb3JlOwotICAgIH0KLQotICAgIGlm
ICghdXNlZE1hcmdpbkJlZm9yZSAmJiAhdXNlZE1hcmdpbkFmdGVyKSB7Ci0gICAgICAgIC8vICMz
Ci0gICAgICAgIGF1dG8gbWFyZ2luQmVmb3JlQW5kQWZ0ZXIgPSBjb250YWluaW5nQmxvY2tIZWln
aHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90
dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7Ci0gICAgICAgIHVzZWRNYXJnaW5CZWZvcmUg
PSBtYXJnaW5CZWZvcmVBbmRBZnRlciAvIDI7Ci0gICAgICAgIHVzZWRNYXJnaW5BZnRlciA9IHVz
ZWRNYXJnaW5CZWZvcmU7Ci0gICAgfQotCi0gICAgLy8gIzQKLSAgICBpZiAoIXRvcCkKLSAgICAg
ICAgdG9wID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp1c2VkTWFyZ2luQmVmb3JlICsgYm9y
ZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0
b20gKyAqdXNlZE1hcmdpbkFmdGVyICsgKmJvdHRvbSk7Ci0KLSAgICBpZiAoIWJvdHRvbSkKLSAg
ICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyAqdXNlZE1hcmdp
bkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9t
ICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5BZnRlcik7Ci0KLSAgICBpZiAoIXVzZWRNYXJn
aW5CZWZvcmUpCi0gICAgICAgIHVzZWRNYXJnaW5CZWZvcmUgPSBjb250YWluaW5nQmxvY2tIZWln
aHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90
dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5BZnRlciArICpib3R0b20pOwotCi0gICAg
aWYgKCF1c2VkTWFyZ2luQWZ0ZXIpCi0gICAgICAgIHVzZWRNYXJnaW5BZnRlciA9IGNvbnRhaW5p
bmdCbG9ja0hlaWdodCAtICgqdG9wICsgKnVzZWRNYXJnaW5CZWZvcmUgKyBib3JkZXJUb3AgKyBw
YWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArICpib3R0
b20pOwotCi0gICAgLy8gIzUKLSAgICBhdXRvIGJveEhlaWdodCA9ICp0b3AgKyAqdXNlZE1hcmdp
bkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9t
ICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5BZnRlciArICpib3R0b207Ci0gICAgaWYgKGJv
eEhlaWdodCA+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkKLSAgICAgICAgYm90dG9tID0gY29udGFp
bmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyAqdXNlZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCAr
IHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVz
ZWRNYXJnaW5BZnRlcik7IAotCi0gICAgLy8gRm9yIG91dC1vZi1mbG93IGVsZW1lbnRzIHRoZSBj
b250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBlZGdlIG9mIHRoZSBhbmNl
c3Rvci4KLSAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVkIHZhbHVlIGlzIGluIHRo
ZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExldCdzIGNvbnZlcnQgaXQg
dG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9j
a1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSB2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxUb3A7Ci0g
ICAgKnRvcCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotICAgICpib3R0
b20gKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKLQotICAgIEFTU0VSVCh0
b3ApOwotICAgIEFTU0VSVChib3R0b20pOwotICAgIEFTU0VSVCh1c2VkTWFyZ2luQmVmb3JlKTsK
LSAgICBBU1NFUlQodXNlZE1hcmdpbkFmdGVyKTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0
dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9uXVtIZWlnaHRdW01hcmdpbl0g
LT4gb3V0LW9mLWZsb3cgcmVwbGFjZWQgLT4gdG9wKCIgPDwgKnRvcCA8PCAicHgpIGJvdHRvbSgi
ICA8PCAqYm90dG9tIDw8ICJweCkgaGVpZ2h0KCIgPDwgaGVpZ2h0IDw8ICJweCkgbWFyZ2luKCIg
PDwgKnVzZWRNYXJnaW5CZWZvcmUgPDwgInB4LCAiICA8PCAqdXNlZE1hcmdpbkFmdGVyIDw8ICJw
eCkgbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsgKnRv
cCwgKmJvdHRvbSwgeyBoZWlnaHQsIHsgKnVzZWRNYXJnaW5CZWZvcmUsICp1c2VkTWFyZ2luQWZ0
ZXIgfSB9IH07Ci19Ci0KLUhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IFJlcGxhY2Vk
Qm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWlu
dHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcykKLXsKLSAgICBBU1NFUlQocmVwbGFjZWRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpOwotCi0gICAgLy8gMTAuMy44IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxl
bWVudHMKLSAgICAvLyBJbiB0aGlzIGNhc2UsIHNlY3Rpb24gMTAuMy43IGFwcGxpZXMgdXAgdGhy
b3VnaCBhbmQgaW5jbHVkaW5nIHRoZSBjb25zdHJhaW50IGVxdWF0aW9uLCBidXQgdGhlIHJlc3Qg
b2Ygc2VjdGlvbiAxMC4zLjcgaXMgcmVwbGFjZWQgYnkgdGhlIGZvbGxvd2luZyBydWxlczoKLSAg
ICAvLwotICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBm
b3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLiBJZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4t
cmlnaHQnIGlzIHNwZWNpZmllZCBhcyAnYXV0bycgaXRzIHVzZWQgdmFsdWUgaXMgZGV0ZXJtaW5l
ZCBieSB0aGUgcnVsZXMgYmVsb3cuCi0gICAgLy8gMS4gSWYgYm90aCAnbGVmdCcgYW5kICdyaWdo
dCcgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCB0aGVuIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0
eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiBjb250YWlu
aW5nIGJsb2NrIGlzICdsdHInLAotICAgIC8vICAgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBv
c2l0aW9uOyBlbHNlIGlmICdkaXJlY3Rpb24nIGlzICdydGwnLCBzZXQgJ3JpZ2h0JyB0byB0aGUg
c3RhdGljIHBvc2l0aW9uLgotICAgIC8vIDIuIElmICdsZWZ0JyBvciAncmlnaHQnIGFyZSAnYXV0
bycsIHJlcGxhY2UgYW55ICdhdXRvJyBvbiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQn
IHdpdGggJzAnLgotICAgIC8vIDMuIElmIGF0IHRoaXMgcG9pbnQgYm90aCAnbWFyZ2luLWxlZnQn
IGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgc3RpbGwgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24g
dW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMgbXVzdCBnZXQg
ZXF1YWwgdmFsdWVzLAotICAgIC8vICAgdW5sZXNzIHRoaXMgd291bGQgbWFrZSB0aGVtIG5lZ2F0
aXZlLCBpbiB3aGljaCBjYXNlIHdoZW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgY29udGFpbmluZyBi
bG9jayBpcyAnbHRyJyAoJ3J0bCcpLCBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcp
IHRvIHplcm8gYW5kCi0gICAgLy8gICBzb2x2ZSBmb3IgJ21hcmdpbi1yaWdodCcgKCdtYXJnaW4t
bGVmdCcpLgotICAgIC8vIDQuIElmIGF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgYW4gJ2F1dG8nIGxl
ZnQsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KLSAgICAvLyA1LiBJZiBhdCB0
aGlzIHBvaW50IHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFs
dWUgZm9yIGVpdGhlciAnbGVmdCcgKGluIGNhc2UgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9m
IHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdydGwnKSBvcgotICAgIC8vICAgJ3JpZ2h0JyAoaW4g
Y2FzZSAnZGlyZWN0aW9uJyBpcyAnbHRyJykgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgotCi0g
ICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwot
ICAgIGF1dG8mIHN0eWxlID0gcmVwbGFjZWRCb3guc3R5bGUoKTsKLSAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KHJlcGxhY2VkQm94KTsKLSAg
ICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2lj
YWxXaWR0aDsKLSAgICBhdXRvIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPSByZXBsYWNlZEJveC5j
b250YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLQotICAg
IGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbExlZnQoKSwgY29udGFpbmlu
Z0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gcmlnaHQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2lj
YWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byBjb21wdXRlZEhvcml6
b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKHJlcGxhY2Vk
Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVz
ZWRNYXJnaW5TdGFydCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydDsKLSAgICBPcHRp
b25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luRW5kID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZDsKLSAgICBhdXRvIHdpZHRoID0gaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJn
aW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50
cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpLmNvbnRlbnRXaWR0aDsKLSAgICBhdXRvIHBh
ZGRpbmdMZWZ0ID0gYm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOwotICAgIGF1
dG8gcGFkZGluZ1JpZ2h0ID0gYm94R2VvbWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsK
LSAgICBhdXRvIGJvcmRlckxlZnQgPSBib3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCk7Ci0gICAgYXV0
byBib3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCk7Ci0KLSAgICBpZiAoIWxl
ZnQgJiYgIXJpZ2h0KSB7Ci0gICAgICAgIC8vICMxCi0gICAgICAgIGF1dG8gc3RhdGljSG9yaXpv
bnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRp
b25lZChyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLSAgICAgICAgaWYgKGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAgICAgICBsZWZ0ID0gc3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByaWdodCA9IHN0YXRpY0hvcml6
b250YWxQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlZnQgfHwgIXJpZ2h0KSB7Ci0gICAg
ICAgIC8vICMyCi0gICAgICAgIHVzZWRNYXJnaW5TdGFydCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5zdGFydC52YWx1ZU9yKDApOwotICAgICAgICB1c2VkTWFyZ2luRW5kID0gY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApOwotICAgIH0KLQotICAgIGlmICghdXNlZE1h
cmdpblN0YXJ0ICYmICF1c2VkTWFyZ2luRW5kKSB7Ci0gICAgICAgIC8vICMzCi0gICAgICAgIGF1
dG8gbWFyZ2luU3RhcnRBbmRFbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJv
cmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyAqcmlnaHQpOwotICAgICAgICBpZiAobWFyZ2luU3RhcnRBbmRFbmQgPj0gMCkgewotICAg
ICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gbWFyZ2luU3RhcnRBbmRFbmQgLyAyOwotICAgICAg
ICAgICAgdXNlZE1hcmdpbkVuZCA9IHVzZWRNYXJnaW5TdGFydDsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgdXNlZE1hcmdpblN0YXJ0ID0gMF9sdTsKLSAgICAgICAgICAgICAgICB1c2VkTWFyZ2luRW5k
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArICpyaWdodCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVzZWRN
YXJnaW5FbmQgPSAwX2x1OwotICAgICAgICAgICAgICAgIHVzZWRNYXJnaW5TdGFydCA9IGNvbnRh
aW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lk
dGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vICM0Ci0gICAgaWYg
KCFsZWZ0KQotICAgICAgICBsZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKnVzZWRNYXJn
aW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0
ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCArICpyaWdodCk7Ci0KLSAgICBpZiAoIXJp
Z2h0KQotICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgKnVz
ZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGlu
Z1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCk7Ci0KLSAgICBpZiAoIXVzZWRN
YXJnaW5TdGFydCkKLSAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdS
aWdodCArIGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJnaW5FbmQgKyAqcmlnaHQpOwotCi0gICAgaWYg
KCF1c2VkTWFyZ2luRW5kKQotICAgICAgICB1c2VkTWFyZ2luRW5kID0gY29udGFpbmluZ0Jsb2Nr
V2lkdGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdM
ZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7Ci0KLSAg
ICBhdXRvIGJveFdpZHRoID0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQg
KyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNl
ZE1hcmdpbkVuZCArICpyaWdodCk7Ci0gICAgaWYgKGJveFdpZHRoID4gY29udGFpbmluZ0Jsb2Nr
V2lkdGgpIHsKLSAgICAgICAgLy8gIzUgT3Zlci1jb25zdHJhaW5lZD8KLSAgICAgICAgaWYgKGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9j
a1dpZHRoIC0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5n
TGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVu
ZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0
aCAtICgqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGgg
KyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0KTsK
LSAgICB9Ci0KLSAgICBBU1NFUlQobGVmdCk7Ci0gICAgQVNTRVJUKHJpZ2h0KTsKLSAgICBBU1NF
UlQodXNlZE1hcmdpblN0YXJ0KTsKLSAgICBBU1NFUlQodXNlZE1hcmdpbkVuZCk7Ci0KLSAgICAv
LyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVk
IGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgotICAgIC8vIEF0IHRoaXMgcG9p
bnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRo
ZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUg
c3lzdGVtLgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGhv
cml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKLSAgICAqbGVmdCArPSBjb250YWluaW5n
QmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotICAgICpyaWdodCArPSBjb250YWluaW5nQmxvY2tQ
YWRkaW5nVmVydGljYWxFZGdlOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250
ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlvbl1bV2lkdGhdW01hcmdpbl0gLT4gb3V0LW9m
LWZsb3cgcmVwbGFjZWQgLT4gbGVmdCgiIDw8ICpsZWZ0IDw8ICJweCkgcmlnaHQoIiAgPDwgKnJp
Z2h0IDw8ICJweCkgd2lkdGgoIiA8PCB3aWR0aCA8PCAicHgpIG1hcmdpbigiIDw8ICp1c2VkTWFy
Z2luU3RhcnQgPDwgInB4LCAiICA8PCAqdXNlZE1hcmdpbkVuZCA8PCAicHgpIGxheW91dEJveCgi
IDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOwotICAgIHJldHVybiB7ICpsZWZ0LCAqcmlnaHQsIHsg
d2lkdGgsIHsgKnVzZWRNYXJnaW5TdGFydCwgKnVzZWRNYXJnaW5FbmQgfSB9IH07Ci19Ci0KLUNv
bnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wbGlj
YXRlZENhc2VzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVz
JiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFsYXlvdXRC
b3guaXNSZXBsYWNlZEJveCgpKTsKLSAgICAvLyBUT0RPOiBVc2UgY29tcGxpY2F0ZWQtY2FzZSBm
b3IgZG9jdW1lbnQgcmVuZGVyZXIgZm9yIG5vdyAoc2VlIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4pLgotICAgIEFTU0VSVCgobGF5b3V0Qm94
LmlzQmxvY2tMZXZlbEJveCgpICYmIGxheW91dEJveC5pc0luRmxvdygpICYmICFsYXlvdXRCb3gu
aXNPdmVyZmxvd1Zpc2libGUoKSkgfHwgbGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSB8fCBs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNEb2N1bWVudEJv
eCgpIHx8IGxheW91dEJveC5pc1RhYmxlQm94KCkpOwotCi0gICAgLy8gMTAuNi42IENvbXBsaWNh
dGVkIGNhc2VzCi0gICAgLy8KLSAgICAvLyBCbG9jay1sZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1l
bnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292ZXJmbG93JyBkb2VzIG5vdCBjb21wdXRlIHRvICd2
aXNpYmxlJyAoZXhjZXB0IGlmIHRoZSAnb3ZlcmZsb3cnIHByb3BlcnR5J3MgdmFsdWUgaGFzIGJl
ZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQpLgotICAgIC8vICdJbmxpbmUtYmxvY2snLCBu
b24tcmVwbGFjZWQgZWxlbWVudHMuCi0gICAgLy8gRmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVt
ZW50cy4KLSAgICAvLwotICAgIC8vIDEuIElmICdtYXJnaW4tdG9wJywgb3IgJ21hcmdpbi1ib3R0
b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMgMC4KLSAgICAvLyAyLiBJZiAnaGVp
Z2h0JyBpcyAnYXV0bycsIHRoZSBoZWlnaHQgZGVwZW5kcyBvbiB0aGUgZWxlbWVudCdzIGRlc2Nl
bmRhbnRzIHBlciAxMC42LjcuCi0KLSAgICBhdXRvIGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkg
OiBjb21wdXRlZEhlaWdodChsYXlvdXRCb3gpOwotICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzKTsKLSAgICAvLyAjMQotICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2lu
ID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVy
LnZhbHVlT3IoMCkgfTsgCi0gICAgLy8gIzIKLSAgICBpZiAoIWhlaWdodCkgewotICAgICAgICBB
U1NFUlQoaXNIZWlnaHRBdXRvKGxheW91dEJveCkpOwotICAgICAgICBpZiAoIWlzPENvbnRhaW5l
ckJveD4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLmhh
c0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAgICAgICAgICAgaGVpZ2h0ID0gMF9sdTsKLSAg
ICAgICAgZWxzZSBpZiAobGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSAmJiAhbGF5b3V0Qm94LmVz
dGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgYXV0byYgZG9jdW1l
bnRCb3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCk7Ci0gICAgICAgICAgICBh
dXRvIHRvcCA9IEJveEdlb21ldHJ5OjptYXJnaW5Cb3hSZWN0KGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3goKmRvY3VtZW50Qm94LmZpcnN0SW5GbG93Q2hpbGQoKSkpLnRvcCgpOwot
ICAgICAgICAgICAgYXV0byBib3R0b20gPSBCb3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmb3Jt
YXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpkb2N1bWVudEJveC5sYXN0SW5GbG93Q2hp
bGQoKSkpLmJvdHRvbSgpOwotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgKHF1aXJr
PykgYmVoYXZpb3Igc2luY2UgdGhlIGRvY3VtZW50IGJveCBpcyBub3QgYSBmb3JtYXR0aW5nIGNv
bnRleHQgcm9vdCBhbmQKLSAgICAgICAgICAgIC8vIGFsbCB0aGUgZmxvYXQgYm94ZXMgZW5kIHVw
IGF0IHRoZSBJQ0IgbGV2ZWwuCi0gICAgICAgICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Js
b2NrID0gZG9jdW1lbnRCb3guZm9ybWF0dGluZ0NvbnRleHRSb290KCk7Ci0gICAgICAgICAgICBh
dXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IGZvcm1hdHRpbmdDb250ZXh0
KCksIGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoaW5pdGlhbENvbnRh
aW5pbmdCbG9jaykuZmxvYXRpbmdTdGF0ZSgpIH07Ci0gICAgICAgICAgICBpZiAoYXV0byBmbG9h
dEJvdHRvbSA9IGZsb2F0aW5nQ29udGV4dC5ib3R0b20oKSkgewotICAgICAgICAgICAgICAgIGJv
dHRvbSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KCpmbG9hdEJvdHRvbSwgYm90dG9tKTsKLSAgICAg
ICAgICAgICAgICBhdXRvIGZsb2F0VG9wID0gZmxvYXRpbmdDb250ZXh0LnRvcCgpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVChmbG9hdFRvcCk7Ci0gICAgICAgICAgICAgICAgdG9wID0gc3RkOjpt
aW48TGF5b3V0VW5pdD4oKmZsb2F0VG9wLCB0b3ApOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaGVpZ2h0ID0gYm90dG9tIC0gdG9wOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKGxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwotICAgICAg
ICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChkb3du
Y2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
QVNTRVJUKGhlaWdodCk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRM
YXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAtPiBmbG9hdGluZyBub24tcmVwbGFj
ZWQgLT4gaGVpZ2h0KCIgPDwgKmhlaWdodCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRWZXJ0aWNh
bE1hcmdpbi5iZWZvcmUgPDwgInB4LCAiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciA8PCAi
cHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKLSAgICByZXR1cm4gQ29u
dGVudEhlaWdodEFuZE1hcmdpbiB7ICpoZWlnaHQsIHVzZWRWZXJ0aWNhbE1hcmdpbiB9OwotfQot
Ci1Db250ZW50V2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9h
dGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29u
c3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVz
KQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSAmJiAhbGF5
b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7Ci0KLSAgICAvLyAxMC4zLjUgRmxvYXRpbmcsIG5vbi1y
ZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAgLy8gMS4gSWYgJ21hcmdpbi1sZWZ0Jywgb3Ig
J21hcmdpbi1yaWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBp
cyAnMCcuCi0gICAgLy8gMi4gSWYgJ3dpZHRoJyBpcyBjb21wdXRlZCBhcyAnYXV0bycsIHRoZSB1
c2VkIHZhbHVlIGlzIHRoZSAic2hyaW5rLXRvLWZpdCIgd2lkdGguCi0KLSAgICBhdXRvIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4o
bGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotCi0gICAgLy8gIzEKLSAgICBhdXRv
IHVzZWRIb3Jpem9udGFsbE1hcmdpbiA9IFVzZWRIb3Jpem9udGFsTWFyZ2luIHsgY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
bi5lbmQudmFsdWVPcigwKSB9OwotICAgIC8vICMyCi0gICAgYXV0byB3aWR0aCA9IG92ZXJyaWRk
ZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lk
dGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2lj
YWxXaWR0aCk7Ci0gICAgaWYgKCF3aWR0aCkKLSAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdp
ZHRoKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCk7Ci0KLSAg
ICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dp
ZHRoXVtNYXJnaW5dIC0+IGZsb2F0aW5nIG5vbi1yZXBsYWNlZCAtPiB3aWR0aCgiIDw8ICp3aWR0
aCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRIb3Jpem9udGFsbE1hcmdpbi5zdGFydCA8PCAicHgs
ICIgPDwgdXNlZEhvcml6b250YWxsTWFyZ2luLmVuZCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8
ICZsYXlvdXRCb3ggPDwgIikiKTsKLSAgICByZXR1cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsg
KndpZHRoLCB1c2VkSG9yaXpvbnRhbGxNYXJnaW4gfTsKLX0KLQotQ29udGVudEhlaWdodEFuZE1h
cmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRDb250ZW50
SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAg
IEFTU0VSVChyZXBsYWNlZEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLQotICAgIC8vIDEw
LjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1l
bnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJwotICAgIC8vIHJlcGxhY2VkIGVsZW1l
bnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGluZyByZXBsYWNlZCBlbGVtZW50cwotICAgIExP
R19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0
XVtNYXJnaW5dIC0+IGZsb2F0aW5nIHJlcGxhY2VkIC0+IHJlZGlyZWN0ZWQgdG8gaW5saW5lIHJl
cGxhY2VkIik7Ci0gICAgcmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdp
bihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIG92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcyk7Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3Qg
UmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewotICAgIEFTU0VSVChyZXBsYWNlZEJveC5pc0Zs
b2F0aW5nUG9zaXRpb25lZCgpKTsKLQotICAgIC8vIDEwLjMuNiBGbG9hdGluZywgcmVwbGFjZWQg
ZWxlbWVudHMKLSAgICAvLwotICAgIC8vIDEuIElmICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1y
aWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAnMCcuCi0g
ICAgLy8gMi4gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBp
bmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCi0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJn
aW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250
ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWlnaHRdW01hcmdpbl0gLT4gZmxvYXRpbmcgcmVwbGFj
ZWQgLT4gcmVkaXJlY3RlZCB0byBpbmxpbmUgcmVwbGFjZWQiKTsKLSAgICBhdXRvIHVzZWRNYXJn
aW4gPSBVc2VkSG9yaXpvbnRhbE1hcmdpbiB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFy
dC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsK
LSAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCB7IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFs
dWVzLndpZHRoLCB1c2VkTWFyZ2luIH0pOwotfQotCi1WZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gm
IGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3Ry
YWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNv
bnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBj
b25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwot
Ci0gICAgaWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQotICAgICAgICByZXR1cm4gb3V0
T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGRvd25jYXN0PENvbnRhaW5lckJveD4o
bGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBv
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotICAgIHJldHVybiBvdXRPZkZsb3dSZXBsYWNlZFZl
cnRpY2FsR2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250
YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFs
dWVzKTsKLX0KLQotSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6b3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVy
dGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewotICAgIEFTU0VS
VChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotCi0gICAgaWYgKCFsYXlvdXRC
b3guaXNSZXBsYWNlZEJveCgpKQotICAgICAgICByZXR1cm4gb3V0T2ZGbG93Tm9uUmVwbGFjZWRI
b3Jpem9udGFsR2VvbWV0cnkoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLCBob3Jp
em9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKLSAgICByZXR1
cm4gb3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFjZWRC
b3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50
cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOwotfQotCi1Db250ZW50SGVpZ2h0QW5kTWFy
Z2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5k
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBv
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5p
c0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLQotICAgIGlmICghbGF5b3V0Qm94LmlzUmVwbGFjZWRC
b3goKSkKLSAgICAgICAgcmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0Qm94LCBob3Jpem9u
dGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci0gICAgcmV0dXJuIGZs
b2F0aW5nUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94
PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcyk7Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmZsb2F0aW5nQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29u
c3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVz
KQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSk7Ci0KLSAg
ICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAgICAgIHJldHVybiBmbG9hdGlu
Z05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgcmV0dXJuIGZsb2F0
aW5nUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxh
eW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1
ZXMpOwotfQotCi1Db250ZW50SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2Vk
Qm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMsIE9wdGlvbmFsPFZlcnRpY2FsQ29uc3RyYWludHM+IHZlcnRpY2FsQ29uc3Ry
YWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2Fs
VmFsdWVzKSBjb25zdAotewotICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMs
IGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJs
b2NrJyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVwbGFj
ZWQgZWxlbWVudHMKLSAgICAvLwotICAgIC8vIDEuIElmICdtYXJnaW4tdG9wJywgb3IgJ21hcmdp
bi1ib3R0b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMgMC4KLSAgICAvLyAyLiBJ
ZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUgY29tcHV0ZWQgdmFsdWVzIG9mICdhdXRv
JyBhbmQgdGhlIGVsZW1lbnQgYWxzbyBoYXMgYW4gaW50cmluc2ljIGhlaWdodCwgdGhlbiB0aGF0
IGludHJpbnNpYyBoZWlnaHQgaXMgdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcuCi0gICAgLy8g
My4gT3RoZXJ3aXNlLCBpZiAnaGVpZ2h0JyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycs
IGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIHRoZW4gdGhlIHVzZWQgdmFs
dWUgb2YgJ2hlaWdodCcgaXM6Ci0gICAgLy8gICAgKHVzZWQgd2lkdGgpIC8gKGludHJpbnNpYyBy
YXRpbykKLSAgICAvLyA0LiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVkIHZh
bHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0
aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4K
LSAgICAvLyA1LiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9m
ICdhdXRvJywgYnV0IG5vbmUgb2YgdGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG1ldCwgdGhlbiB0
aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBtdXN0IGJlIHNldCB0bwotICAgIC8vICAgIHRoZSBo
ZWlnaHQgb2YgdGhlIGxhcmdlc3QgcmVjdGFuZ2xlIHRoYXQgaGFzIGEgMjoxIHJhdGlvLCBoYXMg
YSBoZWlnaHQgbm90IGdyZWF0ZXIgdGhhbiAxNTBweCwgYW5kIGhhcyBhIHdpZHRoIG5vdCBncmVh
dGVyIHRoYW4gdGhlIGRldmljZSB3aWR0aC4KLQotICAgIC8vICMxCi0gICAgYXV0byYgZm9ybWF0
dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8gY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKHJlcGxh
Y2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFy
Z2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyLnZhbHVlT3IoMCkgfTsKLSAgICBhdXRvJiBzdHlsZSA9IHJlcGxhY2VkQm94LnN0eWxlKCk7
Ci0KLSAgICBhdXRvIGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgPyBv
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBjb21wdXRlZEhlaWdodChy
ZXBsYWNlZEJveCwgdmVydGljYWxDb25zdHJhaW50cyA/IHZlcnRpY2FsQ29uc3RyYWludHMtPmxv
Z2ljYWxIZWlnaHQgOiBXVEY6Om51bGxvcHQpOwotICAgIGF1dG8gaGVpZ2h0SXNBdXRvID0gIW92
ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgJiYgaXNIZWlnaHRBdXRvKHJlcGxhY2VkQm94
KTsKLSAgICBhdXRvIHdpZHRoSXNBdXRvID0gc3R5bGUubG9naWNhbFdpZHRoKCkuaXNBdXRvKCk7
Ci0KLSAgICBpZiAoaGVpZ2h0SXNBdXRvICYmIHdpZHRoSXNBdXRvICYmIHJlcGxhY2VkQm94Lmhh
c0ludHJpbnNpY0hlaWdodCgpKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIGhlaWdodCA9IHJl
cGxhY2VkQm94LmludHJpbnNpY0hlaWdodCgpOwotICAgIH0gZWxzZSBpZiAoaGVpZ2h0SXNBdXRv
ICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpIHsKLSAgICAgICAgLy8gIzMKLSAg
ICAgICAgYXV0byB1c2VkV2lkdGggPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChy
ZXBsYWNlZEJveCkuY29udGVudEJveFdpZHRoKCk7Ci0gICAgICAgIGhlaWdodCA9IHVzZWRXaWR0
aCAvIHJlcGxhY2VkQm94LmludHJpbnNpY1JhdGlvKCk7Ci0gICAgfSBlbHNlIGlmIChoZWlnaHRJ
c0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkpIHsKLSAgICAgICAgLy8g
IzQKLSAgICAgICAgaGVpZ2h0ID0gcmVwbGFjZWRCb3guaW50cmluc2ljSGVpZ2h0KCk7Ci0gICAg
fSBlbHNlIGlmIChoZWlnaHRJc0F1dG8pIHsKLSAgICAgICAgLy8gIzUKLSAgICAgICAgaGVpZ2h0
ID0geyAxNTAgfTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGVpZ2h0KTsKLQotICAgIExPR19XSVRI
X1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJn
aW5dIC0+IGluZmxvdyByZXBsYWNlZCAtPiBoZWlnaHQoIiA8PCAqaGVpZ2h0IDw8ICJweCkgbWFy
Z2luKCIgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSA8PCAicHgsICIgPDwgdXNlZFZlcnRp
Y2FsTWFyZ2luLmFmdGVyIDw8ICJweCkgLT4gbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8
ICIpIik7Ci0gICAgcmV0dXJuIHsgKmhlaWdodCwgdXNlZFZlcnRpY2FsTWFyZ2luIH07Ci19Ci0K
LUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGlu
ZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNl
ZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMs
IE9wdGlvbmFsPFZlcnRpY2FsQ29uc3RyYWludHM+IHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0
IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykK
LXsKLSAgICAvLyAxMC4zLjIgSW5saW5lLCByZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAg
Ly8gQSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycgZm9yICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdp
bi1yaWdodCcgYmVjb21lcyBhIHVzZWQgdmFsdWUgb2YgJzAnLgotICAgIC8vCi0gICAgLy8gMS4g
SWYgJ2hlaWdodCcgYW5kICd3aWR0aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0
bycgYW5kIHRoZSBlbGVtZW50IGFsc28gaGFzIGFuIGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0
IGludHJpbnNpYyB3aWR0aCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnLgotICAgIC8vCi0g
ICAgLy8gMi4gSWYgJ2hlaWdodCcgYW5kICd3aWR0aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVl
cyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGhhcyBubyBpbnRyaW5zaWMgd2lkdGgsIGJ1dCBk
b2VzIGhhdmUgYW4gaW50cmluc2ljIGhlaWdodCBhbmQgaW50cmluc2ljIHJhdGlvOwotICAgIC8v
ICAgIG9yIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCAnaGVpZ2h0
JyBoYXMgc29tZSBvdGhlciBjb21wdXRlZCB2YWx1ZSwgYW5kIHRoZSBlbGVtZW50IGRvZXMgaGF2
ZSBhbiBpbnRyaW5zaWMgcmF0aW87Ci0gICAgLy8gICAgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAn
d2lkdGgnIGlzOiAodXNlZCBoZWlnaHQpICogKGludHJpbnNpYyByYXRpbykKLSAgICAvLwotICAg
IC8vIDMuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgnIGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMg
b2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIGJ1dCBubyBp
bnRyaW5zaWMgaGVpZ2h0IG9yIHdpZHRoLAotICAgIC8vICAgIHRoZW4gdGhlIHVzZWQgdmFsdWUg
b2YgJ3dpZHRoJyBpcyB1bmRlZmluZWQgaW4gQ1NTIDIuMi4gSG93ZXZlciwgaXQgaXMgc3VnZ2Vz
dGVkIHRoYXQsIGlmIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mgd2lkdGggZG9lcyBub3QgaXRzZWxm
IGRlcGVuZCBvbiB0aGUgcmVwbGFjZWQKLSAgICAvLyAgICBlbGVtZW50J3Mgd2lkdGgsIHRoZW4g
dGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGNvbnN0cmFp
bnQgZXF1YXRpb24gdXNlZCBmb3IgYmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBp
biBub3JtYWwgZmxvdy4KLSAgICAvLwotICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgJ3dpZHRoJyBo
YXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50
cmluc2ljIHdpZHRoLCB0aGVuIHRoYXQgaW50cmluc2ljIHdpZHRoIGlzIHRoZSB1c2VkIHZhbHVl
IG9mICd3aWR0aCcuCi0gICAgLy8KLSAgICAvLyA1LiBPdGhlcndpc2UsIGlmICd3aWR0aCcgaGFz
IGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBidXQgbm9uZSBvZiB0aGUgY29uZGl0aW9ucyBh
Ym92ZSBhcmUgbWV0LCB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgYmVjb21lcyAzMDBw
eC4KLSAgICAvLyAgICBJZiAzMDBweCBpcyB0b28gd2lkZSB0byBmaXQgdGhlIGRldmljZSwgVUFz
IHNob3VsZCB1c2UgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSB0aGF0IGhhcyBh
IDI6MSByYXRpbyBhbmQgZml0cyB0aGUgZGV2aWNlIGluc3RlYWQuCi0KLSAgICBhdXRvIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4o
cmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0KLSAgICBhdXRvIHVzZWRNYXJn
aW5TdGFydCA9IFsmXSB7Ci0gICAgICAgIGlmIChvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy5t
YXJnaW4pCi0gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMubWFy
Z2luLT5zdGFydDsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFy
dC52YWx1ZU9yKDBfbHUpOwotICAgIH07Ci0KLSAgICBhdXRvIHVzZWRNYXJnaW5FbmQgPSBbJl0g
ewotICAgICAgICBpZiAob3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMubWFyZ2luKQotICAgICAg
ICAgICAgcmV0dXJuIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbi0+ZW5kOwotICAg
ICAgICByZXR1cm4gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDBfbHUpOwot
ICAgIH07Ci0KLSAgICBhdXRvIHdpZHRoID0gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lk
dGggPyBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkV2lkdGgocmVw
bGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOwotICAgIGF1dG8g
aGVpZ2h0SXNBdXRvID0gaXNIZWlnaHRBdXRvKHJlcGxhY2VkQm94KTsKLSAgICBhdXRvIGhlaWdo
dCA9IGNvbXB1dGVkSGVpZ2h0KHJlcGxhY2VkQm94LCB2ZXJ0aWNhbENvbnN0cmFpbnRzID8gdmVy
dGljYWxDb25zdHJhaW50cy0+bG9naWNhbEhlaWdodCA6IFdURjo6bnVsbG9wdCk7Ci0KLSAgICBp
ZiAoIXdpZHRoICYmIGhlaWdodElzQXV0byAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0
aCgpKSB7Ci0gICAgICAgIC8vICMxCi0gICAgICAgIHdpZHRoID0gcmVwbGFjZWRCb3guaW50cmlu
c2ljV2lkdGgoKTsKLSAgICB9IGVsc2UgaWYgKCghd2lkdGggJiYgaGVpZ2h0SXNBdXRvICYmICFy
ZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgpICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNp
Y0hlaWdodCgpICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpCi0gICAgICAgIHx8
ICghd2lkdGggJiYgaGVpZ2h0ICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpKSB7
Ci0gICAgICAgIC8vICMyCi0gICAgICAgIHdpZHRoID0gaGVpZ2h0LnZhbHVlT3IocmVwbGFjZWRC
b3guaGFzSW50cmluc2ljSGVpZ2h0KCkpICogcmVwbGFjZWRCb3guaW50cmluc2ljUmF0aW8oKTsK
LSAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiBoZWlnaHRJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFz
SW50cmluc2ljUmF0aW8oKSAmJiAhcmVwbGFjZWRCb3guaGFzSW50cmluc2ljV2lkdGgoKSAmJiAh
cmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gIzMKLSAgICAg
ICAgLy8gRklYTUU6IHVuZGVmaW5lZCBidXQgc3VyZWx5IGRvYWJsZS4KLSAgICAgICAgQVNTRVJU
X05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiByZXBsYWNl
ZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgpKSB7Ci0gICAgICAgIC8vICM0Ci0gICAgICAgIHdpZHRo
ID0gcmVwbGFjZWRCb3guaW50cmluc2ljV2lkdGgoKTsKLSAgICB9IGVsc2UgaWYgKCF3aWR0aCkg
ewotICAgICAgICAvLyAjNQotICAgICAgICB3aWR0aCA9IHsgMzAwIH07Ci0gICAgfQotCi0gICAg
QVNTRVJUKHdpZHRoKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExh
eW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5mbG93IHJlcGxhY2VkIC0+IHdp
ZHRoKCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZE1hcmdpblN0YXJ0KCkgPDwg
InB4LCAiIDw8IHVzZWRNYXJnaW5FbmQoKSA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZyZXBs
YWNlZEJveCA8PCAiKSIpOwotICAgIHJldHVybiB7ICp3aWR0aCwgeyB1c2VkTWFyZ2luU3RhcnQo
KSwgdXNlZE1hcmdpbkVuZCgpIH0gfTsKLX0KLQotTGF5b3V0U2l6ZSBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25zdCBCb3gmIGxh
eW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWlu
dHMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSk7
Ci0KLSAgICAvLyA5LjQuMyBSZWxhdGl2ZSBwb3NpdGlvbmluZwotICAgIC8vCi0gICAgLy8gVGhl
ICd0b3AnIGFuZCAnYm90dG9tJyBwcm9wZXJ0aWVzIG1vdmUgcmVsYXRpdmVseSBwb3NpdGlvbmVk
IGVsZW1lbnQocykgdXAgb3IgZG93biB3aXRob3V0IGNoYW5naW5nIHRoZWlyIHNpemUuCi0gICAg
Ly8gVG9wJyBtb3ZlcyB0aGUgYm94ZXMgZG93biwgYW5kICdib3R0b20nIG1vdmVzIHRoZW0gdXAu
IFNpbmNlIGJveGVzIGFyZSBub3Qgc3BsaXQgb3Igc3RyZXRjaGVkIGFzIGEgcmVzdWx0IG9mICd0
b3AnIG9yICdib3R0b20nLCB0aGUgdXNlZCB2YWx1ZXMgYXJlIGFsd2F5czogdG9wID0gLWJvdHRv
bS4KLSAgICAvLwotICAgIC8vIDEuIElmIGJvdGggYXJlICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1
ZXMgYXJlIGJvdGggJzAnLgotICAgIC8vIDIuIElmIG9uZSBvZiB0aGVtIGlzICdhdXRvJywgaXQg
YmVjb21lcyB0aGUgbmVnYXRpdmUgb2YgdGhlIG90aGVyLgotICAgIC8vIDMuIElmIG5laXRoZXIg
aXMgJ2F1dG8nLCAnYm90dG9tJyBpcyBpZ25vcmVkIChpLmUuLCB0aGUgdXNlZCB2YWx1ZSBvZiAn
Ym90dG9tJyB3aWxsIGJlIG1pbnVzIHRoZSB2YWx1ZSBvZiAndG9wJykuCi0KLSAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGgg
PSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwotCi0gICAgYXV0byB0b3AgPSBj
b21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxUb3AoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwot
ICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsQm90dG9tKCksIGNv
bnRhaW5pbmdCbG9ja1dpZHRoKTsKLQotICAgIGlmICghdG9wICYmICFib3R0b20pIHsKLSAgICAg
ICAgLy8gIzEKLSAgICAgICAgdG9wID0gYm90dG9tID0geyAwIH07Ci0gICAgfSBlbHNlIGlmICgh
dG9wKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIHRvcCA9IC0qYm90dG9tOwotICAgIH0gZWxz
ZSBpZiAoIWJvdHRvbSkgewotICAgICAgICAvLyAjMwotICAgICAgICBib3R0b20gPSAtKnRvcDsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyAjNAotICAgICAgICBib3R0b20gPSBXVEY6Om51bGxv
cHQ7Ci0gICAgfQotCi0gICAgLy8gRm9yIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50cywg
J2xlZnQnIGFuZCAncmlnaHQnIG1vdmUgdGhlIGJveChlcykgaG9yaXpvbnRhbGx5LCB3aXRob3V0
IGNoYW5naW5nIHRoZWlyIHNpemUuCi0gICAgLy8gJ0xlZnQnIG1vdmVzIHRoZSBib3hlcyB0byB0
aGUgcmlnaHQsIGFuZCAncmlnaHQnIG1vdmVzIHRoZW0gdG8gdGhlIGxlZnQuCi0gICAgLy8gU2lu
Y2UgYm94ZXMgYXJlIG5vdCBzcGxpdCBvciBzdHJldGNoZWQgYXMgYSByZXN1bHQgb2YgJ2xlZnQn
IG9yICdyaWdodCcsIHRoZSB1c2VkIHZhbHVlcyBhcmUgYWx3YXlzOiBsZWZ0ID0gLXJpZ2h0Lgot
ICAgIC8vCi0gICAgLy8gMS4gSWYgYm90aCAnbGVmdCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyAo
dGhlaXIgaW5pdGlhbCB2YWx1ZXMpLCB0aGUgdXNlZCB2YWx1ZXMgYXJlICcwJyAoaS5lLiwgdGhl
IGJveGVzIHN0YXkgaW4gdGhlaXIgb3JpZ2luYWwgcG9zaXRpb24pLgotICAgIC8vIDIuIElmICds
ZWZ0JyBpcyAnYXV0bycsIGl0cyB1c2VkIHZhbHVlIGlzIG1pbnVzIHRoZSB2YWx1ZSBvZiAncmln
aHQnIChpLmUuLCB0aGUgYm94ZXMgbW92ZSB0byB0aGUgbGVmdCBieSB0aGUgdmFsdWUgb2YgJ3Jp
Z2h0JykuCi0gICAgLy8gMy4gSWYgJ3JpZ2h0JyBpcyBzcGVjaWZpZWQgYXMgJ2F1dG8nLCBpdHMg
dXNlZCB2YWx1ZSBpcyBtaW51cyB0aGUgdmFsdWUgb2YgJ2xlZnQnLgotICAgIC8vIDQuIElmIG5l
aXRoZXIgJ2xlZnQnIG5vciAncmlnaHQnIGlzICdhdXRvJywgdGhlIHBvc2l0aW9uIGlzIG92ZXIt
Y29uc3RyYWluZWQsIGFuZCBvbmUgb2YgdGhlbSBoYXMgdG8gYmUgaWdub3JlZC4KLSAgICAvLyAg
ICBJZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMg
J2x0cicsIHRoZSB2YWx1ZSBvZiAnbGVmdCcgd2lucyBhbmQgJ3JpZ2h0JyBiZWNvbWVzIC0nbGVm
dCcuCi0gICAgLy8gICAgSWYgJ2RpcmVjdGlvbicgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMg
J3J0bCcsICdyaWdodCcgd2lucyBhbmQgJ2xlZnQnIGlzIGlnbm9yZWQuCi0KLSAgICBhdXRvIGxl
ZnQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKTsKLSAgICBhdXRvIHJpZ2h0ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsUmlnaHQo
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotCi0gICAgaWYgKCFsZWZ0ICYmICFyaWdodCkgewot
ICAgICAgICAvLyAjMQotICAgICAgICBsZWZ0ID0gcmlnaHQgPSB7IDAgfTsKLSAgICB9IGVsc2Ug
aWYgKCFsZWZ0KSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIGxlZnQgPSAtKnJpZ2h0OwotICAg
IH0gZWxzZSBpZiAoIXJpZ2h0KSB7Ci0gICAgICAgIC8vICMzCi0gICAgICAgIHJpZ2h0ID0gLSps
ZWZ0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vICM0Ci0gICAgICAgIGF1dG8gaXNMZWZ0VG9S
aWdodERpcmVjdGlvbiA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24p
Ci0gICAgICAgICAgICByaWdodCA9IC0qbGVmdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bGVmdCA9IFdURjo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIWJvdHRvbSB8fCAqdG9w
ID09IC0qYm90dG9tKTsKLSAgICBBU1NFUlQoIWxlZnQgfHwgKmxlZnQgPT0gLSpyaWdodCk7Ci0K
LSAgICBhdXRvIHRvcFBvc2l0aW9uT2Zmc2V0ID0gKnRvcDsKLSAgICBhdXRvIGxlZnRQb3NpdGlv
bk9mZnNldCA9IGxlZnQudmFsdWVPcigtKnJpZ2h0KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShG
b3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbUG9zaXRpb25dIC0+IHBvc2l0aW9u
ZWQgaW5mbG93IC0+IHRvcCBvZmZzZXQoIiA8PCB0b3BQb3NpdGlvbk9mZnNldCA8PCAicHgpIGxl
ZnQgb2Zmc2V0KCIgPDwgbGVmdFBvc2l0aW9uT2Zmc2V0IDw8ICJweCkgbGF5b3V0Qm94KCIgPDwg
JmxheW91dEJveCA8PCAiKSIpOwotICAgIHJldHVybiB7IGxlZnRQb3NpdGlvbk9mZnNldCwgdG9w
UG9zaXRpb25PZmZzZXQgfTsKLX0KLQotaW5saW5lIHN0YXRpYyBXcml0aW5nTW9kZSB1c2VkV3Jp
dGluZ01vZGUoY29uc3QgQm94JiBsYXlvdXRCb3gpCi17Ci0gICAgLy8gaHR0cHM6Ly93d3cudzMu
b3JnL1RSL2Nzcy13cml0aW5nLW1vZGVzLTQvI2xvZ2ljYWwtZGlyZWN0aW9uLWxheW91dAotICAg
IC8vIEZsb3ctcmVsYXRpdmUgZGlyZWN0aW9ucyBhcmUgY2FsY3VsYXRlZCB3aXRoIHJlc3BlY3Qg
dG8gdGhlIHdyaXRpbmcgbW9kZSBvZiB0aGUgY29udGFpbmluZyBibG9jayBvZiB0aGUgYm94Lgot
ICAgIC8vIEZvciBpbmxpbmUtbGV2ZWwgYm94ZXMsIHRoZSB3cml0aW5nIG1vZGUgb2YgdGhlIHBh
cmVudCBib3ggaXMgdXNlZCBpbnN0ZWFkLgotICAgIHJldHVybiBsYXlvdXRCb3guaXNJbmxpbmVM
ZXZlbEJveCgpID8gbGF5b3V0Qm94LnBhcmVudCgpLnN0eWxlKCkud3JpdGluZ01vZGUoKSA6IGxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKS5zdHlsZSgpLndyaXRpbmdNb2RlKCk7Ci19Ci0KLUVk
Z2VzIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRCb3JkZXIoY29uc3QgQm94
JiBsYXlvdXRCb3gpIGNvbnN0Ci17Ci0gICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUo
KTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8
PCAiW0JvcmRlcl0gLT4gbGF5b3V0Qm94OiAiIDw8ICZsYXlvdXRCb3gpOwotICAgIHJldHVybiB7
Ci0gICAgICAgIHsgTGF5b3V0VW5pdChzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSksIExheW91dFVu
aXQoc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpKSB9LAotICAgICAgICB7IExheW91dFVuaXQoc3R5
bGUuYm9yZGVyVG9wV2lkdGgoKSksIExheW91dFVuaXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgo
KSkgfQotICAgIH07Ci19Ci0KLU9wdGlvbmFsPEVkZ2VzPiBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgTGF5b3V0
VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3QKLXsKLSAgICBpZiAoIWxheW91dEJveC5p
c1BhZGRpbmdBcHBsaWNhYmxlKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIExPR19XSVRIX1NUUkVBTShG
b3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbUGFkZGluZ10gLT4gbGF5b3V0Qm94
OiAiIDw8ICZsYXlvdXRCb3gpOwotICAgIHJldHVybiBFZGdlcyB7Ci0gICAgICAgIHsgdmFsdWVG
b3JMZW5ndGgoc3R5bGUucGFkZGluZ0xlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCB2YWx1
ZUZvckxlbmd0aChzdHlsZS5wYWRkaW5nUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH0s
Ci0gICAgICAgIHsgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFkZGluZ1RvcCgpLCBjb250YWluaW5n
QmxvY2tXaWR0aCksIHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBhZGRpbmdCb3R0b20oKSwgY29udGFp
bmluZ0Jsb2NrV2lkdGgpIH0KLSAgICB9OwotfQotCi1Db21wdXRlZEhvcml6b250YWxNYXJnaW4g
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4oY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKSBjb25zdAotewotICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxl
KCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50
cy5sb2dpY2FsV2lkdGg7Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHVzZWRXcml0
aW5nTW9kZShsYXlvdXRCb3gpKSkKLSAgICAgICAgcmV0dXJuIHsgY29tcHV0ZWRWYWx1ZShzdHls
ZS5tYXJnaW5MZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRWYWx1ZShzdHls
ZS5tYXJnaW5SaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkgfTsKLSAgICByZXR1cm4geyBj
b21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNv
bXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9
OwotfQotCi1Db21wdXRlZFZlcnRpY2FsTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAg
YXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9j
a1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICBpZiAoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUodXNlZFdyaXRpbmdNb2RlKGxheW91dEJveCkpKQotICAgICAg
ICByZXR1cm4geyBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblRvcCgpLCBjb250YWluaW5nQmxv
Y2tXaWR0aCksIGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luQm90dG9tKCksIGNvbnRhaW5pbmdC
bG9ja1dpZHRoKSB9OwotICAgIHJldHVybiB7IGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luTGVm
dCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luUmln
aHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07Ci19Ci0KLUZvcm1hdHRpbmdDb250ZXh0OjpJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29u
c3RyYWluQnlNaW5NYXhXaWR0aChjb25zdCBCb3gmIGxheW91dEJveCwgSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aCkgY29uc3QKLXsKLSAgICBhdXRvJiBzdHlsZSA9IGxh
eW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8gbWluV2lkdGggPSBmaXhlZFZhbHVlKHN0eWxlLmxv
Z2ljYWxNaW5XaWR0aCgpKTsKLSAgICBhdXRvIG1heFdpZHRoID0gZml4ZWRWYWx1ZShzdHlsZS5s
b2dpY2FsTWF4V2lkdGgoKSk7Ci0gICAgaWYgKCFtaW5XaWR0aCAmJiAhbWF4V2lkdGgpCi0gICAg
ICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aDsKLQotICAgIGlmIChtYXhXaWR0aCkgewotICAgICAg
ICBpbnRyaW5zaWNXaWR0aC5taW5pbXVtID0gc3RkOjptaW4oKm1heFdpZHRoLCBpbnRyaW5zaWNX
aWR0aC5taW5pbXVtKTsKLSAgICAgICAgaW50cmluc2ljV2lkdGgubWF4aW11bSA9IHN0ZDo6bWlu
KCptYXhXaWR0aCwgaW50cmluc2ljV2lkdGgubWF4aW11bSk7Ci0gICAgfQotCi0gICAgaWYgKG1p
bldpZHRoKSB7Ci0gICAgICAgIGludHJpbnNpY1dpZHRoLm1pbmltdW0gPSBzdGQ6Om1heCgqbWlu
V2lkdGgsIGludHJpbnNpY1dpZHRoLm1pbmltdW0pOwotICAgICAgICBpbnRyaW5zaWNXaWR0aC5t
YXhpbXVtID0gc3RkOjptYXgoKm1pbldpZHRoLCBpbnRyaW5zaWNXaWR0aC5tYXhpbXVtKTsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaW50cmluc2ljV2lkdGgubWluaW11bSA8PSBpbnRyaW5zaWNXaWR0
aC5tYXhpbXVtKTsKLSAgICByZXR1cm4gaW50cmluc2ljV2lkdGg7Ci19Ci0KLUZvcm1hdHRpbmdD
b250ZXh0OjpDb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQgRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5Ojpjb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVy
Qm94JiBjb250YWluZXJCb3gpCi17Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5lckJveCk7Ci0gICAgcmV0dXJuIHsKLSAg
ICAgICAgeyBib3hHZW9tZXRyeS5wYWRkaW5nQm94TGVmdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5n
Qm94V2lkdGgoKSB9LAotICAgICAgICB7IGJveEdlb21ldHJ5LnBhZGRpbmdCb3hUb3AoKSwgYm94
R2VvbWV0cnkucGFkZGluZ0JveEhlaWdodCgpIH0sCi0gICAgICAgIGJveEdlb21ldHJ5LmNvbnRl
bnRCb3hXaWR0aCgpIH07Ci19Ci0KLUZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJhaW50c0Zvcklu
Rmxvd0NvbnRlbnQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb25zdHJhaW50c0Zvcklu
Rmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gsIE9wdGlvbmFsPEVz
Y2FwZVJlYXNvbj4gZXNjYXBlUmVhc29uKQotewotICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChjb250YWluZXJCb3gsIGVzY2FwZVJlYXNv
bik7Ci0gICAgcmV0dXJuIHsgeyBib3hHZW9tZXRyeS5jb250ZW50Qm94TGVmdCgpLCBib3hHZW9t
ZXRyeS5jb250ZW50Qm94V2lkdGgoKSB9LCB7IGJveEdlb21ldHJ5LmNvbnRlbnRCb3hUb3AoKSwg
Y29tcHV0ZWRIZWlnaHQoY29udGFpbmVyQm94KSB9IH07Ci19Ci0KLX0KLX0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0
aW5nQ29udGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggODIxMWIwZGM2MzBjYTIzOTdiYWIzODRmOTgwODMwMzE5MWYyYmQwYS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiTGF5b3V0Qm94LmgiCi0jaW5jbHVkZSAi
TGF5b3V0Qm94R2VvbWV0cnkuaCIKLSNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Js
b2NrLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1MYXlv
dXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmhlaWdodFZhbHVlT2ZOZWFyZXN0Q29u
dGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGNvbnN0IEJveCYgbGF5b3V0Qm94KQotewotICAg
IC8vIEluIHF1aXJrcyBtb2RlLCB3ZSBnbyBhbmQgdHJhdmVycyB0aGUgY29udGFpbmluZyBibG9j
ayBjaGFpbiB0byBmaW5kIGEgYmxvY2sgbGV2ZWwgYm94IHdpdGggZml4ZWQgaGVpZ2h0IHZhbHVl
LCBldmVuIGlmIGl0IG1lYW5zIGxlYXZpbmcKLSAgICAvLyB0aGUgY3VycmVudCBmb3JtYXR0aW5n
IGNvbnRleHQuIEZJWE1FOiBzdXJlbHkgd2UgbmVlZCB0byBkbyBzb21lIHRyaWNrcyBoZXJlIHdo
ZW4gYmxvY2sgZGlyZWN0aW9uIHN1cHBvcnQgaXMgYWRkZWQuCi0gICAgYXV0byYgZm9ybWF0dGlu
Z0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8qIGNvbnRhaW5p
bmdCbG9jayA9ICZsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgTGF5b3V0VW5pdCBi
b2R5QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXI7Ci0gICAgd2hpbGUg
KGNvbnRhaW5pbmdCbG9jaykgewotICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9
IGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIGlmIChj
b250YWluaW5nQmxvY2tIZWlnaHQuaXNGaXhlZCgpKQotICAgICAgICAgICAgcmV0dXJuIExheW91
dFVuaXQoY29udGFpbmluZ0Jsb2NrSGVpZ2h0LnZhbHVlKCkgLSBib2R5QW5kRG9jdW1lbnRWZXJ0
aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXIpOwotCi0gICAgICAgIC8vIElmIHRoZSBvbmx5IGZp
eGVkIHZhbHVlIGJveCB3ZSBmaW5kIGlzIHRoZSBJQ0IsIHRoZW4gaWdub3JlIHRoZSBib2R5IGFu
ZCB0aGUgZG9jdW1lbnQgKHZlcnRpY2FsKSBtYXJnaW4sIHBhZGRpbmcgYW5kIGJvcmRlci4gU28g
bXVjaCBxdWlya2luZXNzLgotICAgICAgICAvLyAtYW5kIGl0J3MgdG90YWxseSBpbnNhbmUgYmVj
YXVzZSBub3cgd2UgZnJlZWx5IHRyYXZlbCBhY3Jvc3MgZm9ybWF0dGluZyBjb250ZXh0IGJvdW5k
YXJpZXMgYW5kIGNvbXB1dGVkIG1hcmdpbnMgYXJlIG5vbmV4aXN0ZW50LgotICAgICAgICBpZiAo
Y29udGFpbmluZ0Jsb2NrLT5pc0JvZHlCb3goKSB8fCBjb250YWluaW5nQmxvY2stPmlzRG9jdW1l
bnRCb3goKSkgewotCi0gICAgICAgICAgICBhdXRvIGdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQuZ2VvbWV0cnkoKTsKLSAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRzID0g
Z2VvbWV0cnkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnRhaW5pbmdCbG9jay0+Y29u
dGFpbmluZ0Jsb2NrKCksIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVSZWFzb246OkZpbmRGaXhl
ZEhlaWdodEFuY2VzdG9yUXVpcmspLmhvcml6b250YWw7Ci0gICAgICAgICAgICBhdXRvIHZlcnRp
Y2FsTWFyZ2luID0gZ2VvbWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbigqY29udGFpbmluZ0Js
b2NrLCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotCi0gICAgICAgICAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCpjb250YWluaW5nQmxvY2ss
IEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVSZWFzb246OkZpbmRGaXhlZEhlaWdodEFuY2VzdG9y
UXVpcmspOwotICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbFBhZGRpbmcgPSBib3hHZW9tZXRyeS5w
YWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52YWx1
ZU9yKDApOwotICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEJvcmRlciA9IGJveEdlb21ldHJ5LmJv
cmRlclRvcCgpICsgYm94R2VvbWV0cnkuYm9yZGVyQm90dG9tKCk7Ci0gICAgICAgICAgICBib2R5
QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXIgKz0gdmVydGljYWxNYXJn
aW4uYmVmb3JlLnZhbHVlT3IoMCkgKyB2ZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApICsg
dmVydGljYWxQYWRkaW5nICsgdmVydGljYWxCb3JkZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoaXM8SW5pdGlhbENvbnRhaW5pbmdCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gJmNvbnRhaW5pbmdCbG9jay0+
Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgfQotICAgIC8vIEluaXRpYWwgY29udGFpbmluZyBibG9j
ayBoYXMgdG8gaGF2ZSBhIGhlaWdodC4KLSAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQuZ2Vv
bWV0cnlGb3JCb3gobGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxvY2soKSwgRm9ybWF0dGlu
Z0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6RmluZEZpeGVkSGVpZ2h0QW5jZXN0b3JRdWlyaykuY29u
dGVudEJveCgpLmhlaWdodCgpIC0gYm9keUFuZERvY3VtZW50VmVydGljYWxNYXJnaW5QYWRkaW5n
QW5kQm9yZGVyOwotfQotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQyZTQ3YzgxYmU5MGQ0M2JjODgwOWE1MGI3YmI0MmU2OGIwMGFlZTgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSwxMTcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdHZW9tZXRyeS5oIgor
CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJCbG9j
a0Zvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5nU3RhdGUuaCIKKyNp
bmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCisj
aW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGV4
dC5oIgorI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKKyNpbmNsdWRl
ICJMYXlvdXRSZXBsYWNlZEJveC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJU
YWJsZUZvcm1hdHRpbmdTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
TGF5b3V0IHsKKworc3RhdGljIGlubGluZSBib29sIGlzSGVpZ2h0QXV0byhjb25zdCBCb3gmIGxh
eW91dEJveCkKK3sKKyAgICAvLyAxMC41IENvbnRlbnQgaGVpZ2h0OiB0aGUgJ2hlaWdodCcgcHJv
cGVydHkKKyAgICAvLworICAgIC8vIFRoZSBwZXJjZW50YWdlIGlzIGNhbGN1bGF0ZWQgd2l0aCBy
ZXNwZWN0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gncyBjb250YWluaW5nIGJs
b2NrLgorICAgIC8vIElmIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgbm90
IHNwZWNpZmllZCBleHBsaWNpdGx5IChpLmUuLCBpdCBkZXBlbmRzIG9uIGNvbnRlbnQgaGVpZ2h0
KSwKKyAgICAvLyBhbmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQs
IHRoZSB1c2VkIGhlaWdodCBpcyBjYWxjdWxhdGVkIGFzIGlmICdhdXRvJyB3YXMgc3BlY2lmaWVk
LgorCisgICAgYXV0byBoZWlnaHQgPSBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7
CisgICAgaWYgKGhlaWdodC5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoaGVpZ2h0LmlzUGVyY2VudCgpKSB7CisgICAgICAgIGlmIChsYXlvdXRCb3guaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0
dXJuICFsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCku
aXNGaXhlZCgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworRm9ybWF0dGluZ0dl
b21ldHJ5OjpGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1h
dHRpbmdDb250ZXh0KQorICAgIDogbV9mb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nQ29udGV4
dCkKK3sKK30KKworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21w
dXRlZEhlaWdodFZhbHVlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBIZWlnaHRUeXBlIGhlaWdodFR5
cGUsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3QKK3sK
KyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1dG8gaGVpZ2h0ID0g
aGVpZ2h0VHlwZSA9PSBIZWlnaHRUeXBlOjpOb3JtYWwgPyBzdHlsZS5sb2dpY2FsSGVpZ2h0KCkg
OiBoZWlnaHRUeXBlID09IEhlaWdodFR5cGU6Ok1pbiA/IHN0eWxlLmxvZ2ljYWxNaW5IZWlnaHQo
KSA6IHN0eWxlLmxvZ2ljYWxNYXhIZWlnaHQoKTsKKyAgICBpZiAoaGVpZ2h0LmlzVW5kZWZpbmVk
KCkgfHwgaGVpZ2h0LmlzQXV0bygpIHx8IGhlaWdodC5pc01heENvbnRlbnQoKSB8fCBoZWlnaHQu
aXNNaW5Db250ZW50KCkgfHwgaGVpZ2h0LmlzRml0Q29udGVudCgpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgaWYgKGhlaWdodC5pc0ZpeGVkKCkpCisgICAgICAgIHJldHVybiBMYXlvdXRV
bml0IHsgaGVpZ2h0LnZhbHVlKCkgfTsKKworICAgIGlmICghY29udGFpbmluZ0Jsb2NrSGVpZ2h0
KSB7CisgICAgICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQorICAgICAgICAg
ICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gRm9ybWF0dGluZ1F1aXJrcyhmb3JtYXR0aW5nQ29u
dGV4dCgpKS5oZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdo
dChsYXlvdXRCb3gpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gbm9uQW5vbnlt
b3VzQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCA9IFsmXSB7CisgICAgICAgICAgICAgICAg
Ly8gV2hlbiB0aGUgYmxvY2sgbGV2ZWwgYm94IGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFuIGlubGlu
ZSBsZXZlbCBib3ggKDxzcGFuPjxkaXY+PC9kaXY+PC9zcGFuPikgYW5kIHdlIHdyYXAgaXQgaW50
byBhIGNvbnRpbnVhdGlvbiwKKyAgICAgICAgICAgICAgICAvLyB0aGUgY29udGFpbmluZyBibG9j
ayAoYW5vbnltb3VzIHdyYXBwZXIpIGlzIG5vdCB0aGUgYm94IHdlIG5lZWQgdG8gY2hlY2sgZm9y
IGZpeGVkIGhlaWdodC4KKyAgICAgICAgICAgICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Js
b2NrID0gbGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9ICZsYXlvdXRCb3guY29udGFpbmluZ0Jsb2Nr
KCk7IGNvbnRhaW5pbmdCbG9jayAhPSAmaW5pdGlhbENvbnRhaW5pbmdCbG9jazsgY29udGFpbmlu
Z0Jsb2NrID0gJmNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNBbm9ueW1vdXMoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29u
dGFpbmluZ0Jsb2NrLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxDb250YWluaW5nQmxvY2suc3R5bGUoKS5s
b2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgY29udGFpbmluZ0Js
b2NrSGVpZ2h0ID0gZml4ZWRWYWx1ZShub25Bbm9ueW1vdXNDb250YWluaW5nQmxvY2tMb2dpY2Fs
SGVpZ2h0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjb250YWluaW5nQmxvY2tI
ZWlnaHQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgo
aGVpZ2h0LCAqY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKK30KKworT3B0aW9uYWw8TGF5b3V0VW5p
dD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZEhlaWdodChjb25zdCBCb3gmIGxheW91dEJv
eCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAorewor
ICAgIGlmIChhdXRvIGhlaWdodCA9IGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWln
aHRUeXBlOjpOb3JtYWwsIGNvbnRhaW5pbmdCbG9ja0hlaWdodCkpIHsKKyAgICAgICAgaWYgKGxh
eW91dEJveC5zdHlsZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCkKKyAg
ICAgICAgICAgIHJldHVybiBoZWlnaHQ7CisgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICByZXR1
cm4gKmhlaWdodCAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnku
dmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9
CisKK09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRXaWR0
aFZhbHVlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBXaWR0aFR5cGUgd2lkdGhUeXBlLCBMYXlvdXRV
bml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQoreworICAgIC8vIEFwcGxpZXMgdG86IGFsbCBlbGVt
ZW50cyBleGNlcHQgbm9uLXJlcGxhY2VkIGlubGluZXMgKG91dC1vZi1mbG93IGNoZWNrIGlzIHJl
cXVpcmVkIGZvciBwb3NpdGlvbmVkIDxicj4gYXMgZm9yIHNvbWUgcmVhc29uIHdlIGRvbid0IGJs
b2NraWZ5IHRoZW0pLgorICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzSW5saW5lQm94KCkgfHwgbGF5
b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKworICAgIGF1dG8gd2lkdGggPSBbJl0g
eworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgICAgICBzd2l0
Y2ggKHdpZHRoVHlwZSkgeworICAgICAgICBjYXNlIFdpZHRoVHlwZTo6Tm9ybWFsOgorICAgICAg
ICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxXaWR0aCgpOworICAgICAgICBjYXNlIFdpZHRoVHlw
ZTo6TWluOgorICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNaW5XaWR0aCgpOworICAg
ICAgICBjYXNlIFdpZHRoVHlwZTo6TWF4OgorICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2lj
YWxNYXhXaWR0aCgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gc3R5bGUubG9naWNhbFdpZHRoKCk7CisgICAgfSgpOworICAgIGlmIChh
dXRvIGNvbXB1dGVkVmFsdWUgPSB0aGlzLT5jb21wdXRlZFZhbHVlKHdpZHRoLCBjb250YWluaW5n
QmxvY2tXaWR0aCkpCisgICAgICAgIHJldHVybiBjb21wdXRlZFZhbHVlOworCisgICAgaWYgKHdp
ZHRoLmlzTWluQ29udGVudCgpIHx8IHdpZHRoLmlzTWF4Q29udGVudCgpIHx8IHdpZHRoLmlzRml0
Q29udGVudCgpKSB7CisgICAgICAgIGlmICghaXM8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKQor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgYXV0byYgY29udGFpbmVyQm94ID0gZG93
bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpOworICAgICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgc3BsaXR0aW5nIHVwIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBzbyB0aGF0
IHdlIGNvdWxkIGNvbXB1dGVkIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgc2VwYXJhdGVseS4KKyAg
ICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gWyZdIHsKKyAgICAgICAgICAg
IGlmICghY29udGFpbmVyQm94Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgMF9sdSwgY29udGFpbmlu
Z0Jsb2NrV2lkdGggfTsKKyAgICAgICAgICAgIEFTU0VSVChjb250YWluZXJCb3guZXN0YWJsaXNo
ZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0
ZSA9IGxheW91dFN0YXRlKCkuZW5zdXJlRm9ybWF0dGluZ1N0YXRlKGNvbnRhaW5lckJveCk7Cisg
ICAgICAgICAgICBpZiAoYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGlu
Z1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gKmludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0
Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoY29udGFpbmVyQm94LCBsYXlvdXRTdGF0
ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CisgICAgICAgIH0oKTsK
KyAgICAgICAgaWYgKHdpZHRoLmlzTWluQ29udGVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bTsKKyAgICAgICAgaWYgKHdpZHRoLmlzTWF4
Q29udGVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMu
bWF4aW11bTsKKyAgICAgICAgQVNTRVJUKHdpZHRoLmlzRml0Q29udGVudCgpKTsKKyAgICAgICAg
Ly8gSWYgdGhlIGF2YWlsYWJsZSBzcGFjZSBpbiBhIGdpdmVuIGF4aXMgaXMgZGVmaW5pdGUsIGVx
dWFsIHRvIG1pbihtYXgtY29udGVudCBzaXplLAorICAgICAgICAvLyBtYXgobWluLWNvbnRlbnQg
c2l6ZSwgc3RyZXRjaC1maXQgc2l6ZSkpLiBPdGhlcndpc2UsIGVxdWFsIHRvIHRoZSBtYXgtY29u
dGVudCBzaXplIGluIHRoYXQgYXhpcy4KKyAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IHlldCBo
YXZlIGluZGVmaW5pdGUgYXZhaWxhYmxlIHNpemUuCisgICAgICAgIHJldHVybiBzdGQ6Om1pbihp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0sIHN0ZDo6bWF4KGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMubWluaW11bSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKTsKKyAgICB9CisgICAg
cmV0dXJuIHsgfTsKK30KKworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5
Ojpjb21wdXRlZFdpZHRoKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBMYXlvdXRVbml0IGNvbnRhaW5p
bmdCbG9ja1dpZHRoKQoreworICAgIGlmIChhdXRvIGNvbXB1dGVkV2lkdGggPSBjb21wdXRlZFdp
ZHRoVmFsdWUobGF5b3V0Qm94LCBXaWR0aFR5cGU6Ok5vcm1hbCwgY29udGFpbmluZ0Jsb2NrV2lk
dGgpKSB7CisgICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgICAg
IC8vIE5vbi1xdWFudGl0YXRpdmUgdmFsdWVzIHN1Y2ggYXMgYXV0byBhbmQgbWluLWNvbnRlbnQg
YXJlIG5vdCBpbmZsdWVuY2VkIGJ5IHRoZSBib3gtc2l6aW5nIHByb3BlcnR5LgorICAgICAgICBp
ZiAoc3R5bGUuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpDb250ZW50Qm94IHx8IHN0eWxlLndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAgICAgIHJldHVybiBjb21wdXRlZFdp
ZHRoOworICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2Vv
bWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgcmV0dXJuICpjb21wdXRlZFdpZHRoIC0g
KGJveEdlb21ldHJ5Lmhvcml6b250YWxCb3JkZXIoKSArIGJveEdlb21ldHJ5Lmhvcml6b250YWxQ
YWRkaW5nKCkudmFsdWVPcigwKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK0xheW91
dFVuaXQgRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRl
eHRSb290KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290KSBjb25zdAor
eworICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5n
Q29udGV4dCgpKTsKKyAgICBBU1NFUlQoaXNIZWlnaHRBdXRvKGZvcm1hdHRpbmdDb250ZXh0Um9v
dCkgfHwgZm9ybWF0dGluZ0NvbnRleHRSb290LmVzdGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29u
dGV4dCgpIHx8IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5pc1RhYmxlQ2VsbCgpKTsKKyAgICBhdXRv
IHVzZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCB7IH07IAorICAgIGF1dG8gaGFzQ29udGVu
dCA9IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKKyAg
ICAvLyBUaGUgdXNlZCBoZWlnaHQgb2YgdGhlIGNvbnRhaW5tZW50IGJveCBpcyBkZXRlcm1pbmVk
IGFzIGlmIHBlcmZvcm1pbmcgYSBub3JtYWwgbGF5b3V0IG9mIHRoZSBib3gsIGV4Y2VwdCB0aGF0
IGl0IGlzIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGNvbnRlbnQuCisgICAgYXV0byBzaG91bGRJZ25v
cmVDb250ZW50ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LmlzU2l6ZUNvbnRhaW5tZW50Qm94KCk7
CisgICAgaWYgKGhhc0NvbnRlbnQgJiYgIXNob3VsZElnbm9yZUNvbnRlbnQpCisgICAgICAgIHVz
ZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQo
Zm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdF9jYXN0PExheW91dFN0YXRlJj4obGF5b3V0U3Rh
dGUoKSkpLT51c2VkQ29udGVudEhlaWdodCgpOworICAgIHJldHVybiB1c2VkQ29udGVudEhlaWdo
dDsKK30KKworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRl
ZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9wZXJ0eSwgTGF5b3V0VW5pdCBjb250YWlu
aW5nQmxvY2tXaWR0aCkgY29uc3QKK3sKKyAgICAvLyAgSW4gZ2VuZXJhbCwgdGhlIGNvbXB1dGVk
IHZhbHVlIHJlc29sdmVzIHRoZSBzcGVjaWZpZWQgdmFsdWUgYXMgZmFyIGFzIHBvc3NpYmxlIHdp
dGhvdXQgbGF5aW5nIG91dCB0aGUgY29udGVudC4KKyAgICBpZiAoZ2VvbWV0cnlQcm9wZXJ0eS5p
c0ZpeGVkKCkgfHwgZ2VvbWV0cnlQcm9wZXJ0eS5pc1BlcmNlbnQoKSB8fCBnZW9tZXRyeVByb3Bl
cnR5LmlzQ2FsY3VsYXRlZCgpKQorICAgICAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgoZ2VvbWV0
cnlQcm9wZXJ0eSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIHJldHVybiB7IH07Cit9CisK
K09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Zml4ZWRWYWx1ZShjb25z
dCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHkpIGNvbnN0Cit7CisgICAgaWYgKCFnZW9tZXRyeVBy
b3BlcnR5LmlzRml4ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gTGF5b3V0
VW5pdCB7IGdlb21ldHJ5UHJvcGVydHkudmFsdWUoKSB9OworfQorCisvLyBodHRwczovL3d3dy53
My5vcmcvVFIvQ1NTMjIvdmlzdWRldC5odG1sI21pbi1tYXgtaGVpZ2h0cworLy8gU3BlY2lmaWVz
IGEgcGVyY2VudGFnZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHVzZWQgdmFsdWUuIFRoZSBwZXJjZW50
YWdlIGlzIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIGdlbmVy
YXRlZCBib3gncyBjb250YWluaW5nIGJsb2NrLgorLy8gSWYgdGhlIGhlaWdodCBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHkgKGkuZS4sIGl0IGRlcGVu
ZHMgb24gY29udGVudCBoZWlnaHQpLCBhbmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0ZWx5
IHBvc2l0aW9uZWQsCisvLyB0aGUgcGVyY2VudGFnZSB2YWx1ZSBpcyB0cmVhdGVkIGFzICcwJyAo
Zm9yICdtaW4taGVpZ2h0Jykgb3IgJ25vbmUnIChmb3IgJ21heC1oZWlnaHQnKS4KK09wdGlvbmFs
PExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRNYXhIZWlnaHQoY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdo
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcHV0ZWRIZWlnaHRWYWx1ZShsYXlvdXRCb3gsIEhl
aWdodFR5cGU6Ok1heCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKK30KKworT3B0aW9uYWw8TGF5
b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZE1pbkhlaWdodChjb25zdCBCb3gm
IGxheW91dEJveCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBj
b25zdAoreworICAgIHJldHVybiBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91dEJveCwgSGVpZ2h0
VHlwZTo6TWluLCBjb250YWluaW5nQmxvY2tIZWlnaHQpOworfQorCitPcHRpb25hbDxMYXlvdXRV
bml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkTWluV2lkdGgoY29uc3QgQm94JiBsYXlv
dXRCb3gsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpCit7CisgICAgcmV0dXJuIGNv
bXB1dGVkV2lkdGhWYWx1ZShsYXlvdXRCb3gsIFdpZHRoVHlwZTo6TWluLCBjb250YWluaW5nQmxv
Y2tXaWR0aCk7Cit9CisKK09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6
Y29tcHV0ZWRNYXhXaWR0aChjb25zdCBCb3gmIGxheW91dEJveCwgTGF5b3V0VW5pdCBjb250YWlu
aW5nQmxvY2tXaWR0aCkKK3sKKyAgICByZXR1cm4gY29tcHV0ZWRXaWR0aFZhbHVlKGxheW91dEJv
eCwgV2lkdGhUeXBlOjpNYXgsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKK30KKworTGF5b3V0VW5p
dCBGb3JtYXR0aW5nR2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRz
JiB2ZXJ0aWNhbENvbnN0cmFpbnRzKSBjb25zdAoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCkpOworCisgICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlz
IHNlY3Rpb24gYW5kIHRoZSBuZXh0LCB0aGUgdGVybSAic3RhdGljIHBvc2l0aW9uIiAob2YgYW4g
ZWxlbWVudCkgcmVmZXJzLCByb3VnaGx5LCB0byB0aGUgcG9zaXRpb24gYW4gZWxlbWVudCB3b3Vs
ZCBoYXZlCisgICAgLy8gaGFkIGluIHRoZSBub3JtYWwgZmxvdy4gTW9yZSBwcmVjaXNlbHksIHRo
ZSBzdGF0aWMgcG9zaXRpb24gZm9yICd0b3AnIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3Ag
ZWRnZSBvZiB0aGUgY29udGFpbmluZyBibG9jayB0byB0aGUgdG9wIG1hcmdpbgorICAgIC8vIGVk
Z2Ugb2YgYSBoeXBvdGhldGljYWwgYm94IHRoYXQgd291bGQgaGF2ZSBiZWVuIHRoZSBmaXJzdCBi
b3ggb2YgdGhlIGVsZW1lbnQgaWYgaXRzIHNwZWNpZmllZCAncG9zaXRpb24nIHZhbHVlIGhhZCBi
ZWVuICdzdGF0aWMnIGFuZCBpdHMgc3BlY2lmaWVkCisgICAgLy8gJ2Zsb2F0JyBoYWQgYmVlbiAn
bm9uZScgYW5kIGl0cyBzcGVjaWZpZWQgJ2NsZWFyJyBoYWQgYmVlbiAnbm9uZScuIChOb3RlIHRo
YXQgZHVlIHRvIHRoZSBydWxlcyBpbiBzZWN0aW9uIDkuNyB0aGlzIG1pZ2h0IHJlcXVpcmUgYWxz
byBhc3N1bWluZyBhIGRpZmZlcmVudAorICAgIC8vIGNvbXB1dGVkIHZhbHVlIGZvciAnZGlzcGxh
eScuKSBUaGUgdmFsdWUgaXMgbmVnYXRpdmUgaWYgdGhlIGh5cG90aGV0aWNhbCBib3ggaXMgYWJv
dmUgdGhlIGNvbnRhaW5pbmcgYmxvY2suCisKKyAgICAvLyBTdGFydCB3aXRoIHRoaXMgYm94J3Mg
Ym9yZGVyIGJveCBvZmZzZXQgZnJvbSB0aGUgcGFyZW50J3MgYm9yZGVyIGJveC4KKyAgICBhdXRv
JiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgTGF5
b3V0VW5pdCB0b3A7CisgICAgaWYgKGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKSAm
JiBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCktPmlzQmxvY2tMZXZlbEJveCgpKSB7
CisgICAgICAgIC8vIEFkZCBzaWJsaW5nIG9mZnNldAorICAgICAgICBhdXRvJiBwcmV2aW91c0lu
Rmxvd1NpYmxpbmcgPSAqbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93U2libGluZygpOworICAgICAg
ICBhdXRvJiBwcmV2aW91c0luRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2Vv
bWV0cnlGb3JCb3gocHJldmlvdXNJbkZsb3dTaWJsaW5nLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNj
YXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KTsKKyAgICAgICAgYXV0
byYgZm9ybWF0dGluZ1N0YXRlID0gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nU3RhdGU+KGxheW91
dFN0YXRlKCkuZm9ybWF0dGluZ1N0YXRlRm9yQm94KHByZXZpb3VzSW5GbG93U2libGluZykpOwor
ICAgICAgICBhdXRvIHVzZWRWZXJ0aWNhbE1hcmdpbkZvclByZXZpb3VzQm94ID0gZm9ybWF0dGlu
Z1N0YXRlLnVzZWRWZXJ0aWNhbE1hcmdpbihwcmV2aW91c0luRmxvd1NpYmxpbmcpOworCisgICAg
ICAgIHRvcCArPSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChwcmV2aW91c0luRmxvd0JveEdl
b21ldHJ5KS5ib3R0b20oKSArIHVzZWRWZXJ0aWNhbE1hcmdpbkZvclByZXZpb3VzQm94Lm5vbkNv
bGxhcHNlZFZhbHVlcy5hZnRlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgdG9wID0gZm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94LnBhcmVudCgpLCBGb3JtYXR0aW5nQ29u
dGV4dDo6RXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KS5jb250
ZW50Qm94VG9wKCk7CisKKyAgICAvLyBSZXNvbHZlIHRvcCBhbGwgdGhlIHdheSB1cCB0byB0aGUg
Y29udGFpbmluZyBibG9jay4KKyAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3gu
Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdl
IHByZXRlbmQgdGhhdCB0aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KKyAgICBmb3IgKGF1dG8qIGFu
Y2VzdG9yID0gJmxheW91dEJveC5wYXJlbnQoKTsgYW5jZXN0b3IgIT0gJmNvbnRhaW5pbmdCbG9j
azsgYW5jZXN0b3IgPSAmYW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgICAgIGF1
dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmFuY2Vz
dG9yLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0lu
Rmxvd0dlb21ldHJ5KTsKKyAgICAgICAgLy8gQm94R2VvbWV0cnk6OnRvcCBpcyB0aGUgYm9yZGVy
IGJveCB0b3AgcG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5
c3RlbS4KKyAgICAgICAgdG9wICs9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hUb3AoYm94R2VvbWV0
cnkpOworICAgICAgICBBU1NFUlQoIWFuY2VzdG9yLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRC
b3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7CisgICAgfQorICAgIC8vIE1vdmUgdGhlIHN0YXRpYyBw
b3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgcGFkZGluZyBib3guIFRoaXMgaXMgdmVyeSBzcGVjaWZp
YyB0byBhYm9sdXRlbHkgcG9zaXRpb25lZCBib3hlcy4KKyAgICByZXR1cm4gdG9wIC0gdmVydGlj
YWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdHZW9t
ZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25z
dCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSk7CisgICAgLy8gU2VlIHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZs
b3dQb3NpdGlvbmVkIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RhdGljIHBvc2l0aW9uLgor
CisgICAgLy8gU3RhcnQgd2l0aCB0aGlzIGJveCdzIGJvcmRlciBib3ggb2Zmc2V0IGZyb20gdGhl
IHBhcmVudCdzIGJvcmRlciBib3guCisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlz
LT5mb3JtYXR0aW5nQ29udGV4dCgpOworICAgIGF1dG8gbGVmdCA9IGZvcm1hdHRpbmdDb250ZXh0
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveC5wYXJlbnQoKSwgRm9ybWF0dGluZ0NvbnRleHQ6OkVz
Y2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSkuY29udGVudEJveExl
ZnQoKTsKKworICAgIC8vIFJlc29sdmUgbGVmdCBhbGwgdGhlIHdheSB1cCB0byB0aGUgY29udGFp
bmluZyBibG9jay4KKyAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guY29udGFp
bmluZ0Jsb2NrKCk7CisgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdlIHByZXRl
bmQgdGhhdCB0aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9y
ID0gJmxheW91dEJveC5wYXJlbnQoKTsgYW5jZXN0b3IgIT0gJmNvbnRhaW5pbmdCbG9jazsgYW5j
ZXN0b3IgPSAmYW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmFuY2VzdG9yLCBG
b3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dl
b21ldHJ5KTsKKyAgICAgICAgLy8gQm94R2VvbWV0cnk6OmxlZnQgaXMgdGhlIGJvcmRlciBib3gg
bGVmdCBwb3NpdGlvbiBpbiBpdHMgY29udGFpbmluZyBibG9jaydzIGNvb3JkaW5hdGUgc3lzdGVt
LgorICAgICAgICBsZWZ0ICs9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hMZWZ0KGJveEdlb21ldHJ5
KTsKKyAgICAgICAgQVNTRVJUKCFhbmNlc3Rvci0+aXNQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94
LmlzRml4ZWRQb3NpdGlvbmVkKCkpOworICAgIH0KKyAgICAvLyBNb3ZlIHRoZSBzdGF0aWMgcG9z
aXRpb24gcmVsYXRpdmUgdG8gdGhlIHBhZGRpbmcgYm94LiBUaGlzIGlzIHZlcnkgc3BlY2lmaWMg
dG8gYWJvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMuCisgICAgcmV0dXJuIGxlZnQgLSBob3Jpem9u
dGFsQ29uc3RyYWludHMubG9naWNhbExlZnQ7Cit9CisKK0xheW91dFVuaXQgRm9ybWF0dGluZ0dl
b21ldHJ5OjpzaHJpbmtUb0ZpdFdpZHRoKGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290
LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQoreworICAgIExPR19XSVRIX1NUUkVBTShGb3Jt
YXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdIC0+IHNocmluayB0byBmaXQg
LT4gdW5zdXBwb3J0ZWQgLT4gd2lkdGgoIiA8PCBMYXlvdXRVbml0IHsgfSA8PCAicHgpIGxheW91
dEJveDogIiA8PCAmZm9ybWF0dGluZ0NvbnRleHRSb290IDw8ICIpIik7CisgICAgQVNTRVJUKGZv
cm1hdHRpbmdDb250ZXh0Um9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOworCisg
ICAgLy8gQ2FsY3VsYXRpb24gb2YgdGhlIHNocmluay10by1maXQgd2lkdGggaXMgc2ltaWxhciB0
byBjYWxjdWxhdGluZyB0aGUgd2lkdGggb2YgYSB0YWJsZSBjZWxsIHVzaW5nIHRoZSBhdXRvbWF0
aWMgdGFibGUgbGF5b3V0IGFsZ29yaXRobS4KKyAgICAvLyBSb3VnaGx5OiBjYWxjdWxhdGUgdGhl
IHByZWZlcnJlZCB3aWR0aCBieSBmb3JtYXR0aW5nIHRoZSBjb250ZW50IHdpdGhvdXQgYnJlYWtp
bmcgbGluZXMgb3RoZXIgdGhhbiB3aGVyZSBleHBsaWNpdCBsaW5lIGJyZWFrcyBvY2N1ciwKKyAg
ICAvLyBhbmQgYWxzbyBjYWxjdWxhdGUgdGhlIHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBlLmcu
LCBieSB0cnlpbmcgYWxsIHBvc3NpYmxlIGxpbmUgYnJlYWtzLiBDU1MgMi4yIGRvZXMgbm90IGRl
ZmluZSB0aGUgZXhhY3QgYWxnb3JpdGhtLgorICAgIC8vIFRoaXJkbHksIGZpbmQgdGhlIGF2YWls
YWJsZSB3aWR0aDogaW4gdGhpcyBjYXNlLCB0aGlzIGlzIHRoZSB3aWR0aCBvZiB0aGUgY29udGFp
bmluZyBibG9jayBtaW51cyB0aGUgdXNlZCB2YWx1ZXMgb2YgJ21hcmdpbi1sZWZ0JywgJ2JvcmRl
ci1sZWZ0LXdpZHRoJywKKyAgICAvLyAncGFkZGluZy1sZWZ0JywgJ3BhZGRpbmctcmlnaHQnLCAn
Ym9yZGVyLXJpZ2h0LXdpZHRoJywgJ21hcmdpbi1yaWdodCcsIGFuZCB0aGUgd2lkdGhzIG9mIGFu
eSByZWxldmFudCBzY3JvbGwgYmFycy4KKworICAgIC8vIFRoZW4gdGhlIHNocmluay10by1maXQg
d2lkdGggaXM6IG1pbihtYXgocHJlZmVycmVkIG1pbmltdW0gd2lkdGgsIGF2YWlsYWJsZSB3aWR0
aCksIHByZWZlcnJlZCB3aWR0aCkuCisgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
ID0gSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH07CisgICAgYXV0byBoYXNDb250ZW50ID0g
aXM8Q29udGFpbmVyQm94Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpICYmIGRvd25jYXN0PENvbnRh
aW5lckJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQo
KTsKKyAgICAvLyBUaGUgdXNlZCB3aWR0aCBvZiB0aGUgY29udGFpbm1lbnQgYm94IGlzIGRldGVy
bWluZWQgYXMgaWYgcGVyZm9ybWluZyBhIG5vcm1hbCBsYXlvdXQgb2YgdGhlIGJveCwgZXhjZXB0
IHRoYXQgaXQgaXMgdHJlYXRlZCBhcyBoYXZpbmcgbm8gY29udGVudC4KKyAgICBhdXRvIHNob3Vs
ZElnbm9yZUNvbnRlbnQgPSBmb3JtYXR0aW5nQ29udGV4dFJvb3QuaXNTaXplQ29udGFpbm1lbnRC
b3goKTsgIAorICAgIGlmIChoYXNDb250ZW50ICYmICFzaG91bGRJZ25vcmVDb250ZW50KSB7Cisg
ICAgICAgIGF1dG8mIHJvb3QgPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGZvcm1hdHRpbmdDb250
ZXh0Um9vdCk7CisgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZUZvclJvb3QgPSBsYXlvdXRT
dGF0ZSgpLmVuc3VyZUZvcm1hdHRpbmdTdGF0ZShyb290KTsKKyAgICAgICAgYXV0byBwcmVjb21w
dXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBmb3JtYXR0aW5nU3RhdGVGb3JSb290Lmlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKKyAgICAgICAgaWYgKCFwcmVjb21wdXRlZEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMpCisgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQocm9vdCwgbGF5b3V0
U3RhdGUoKSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gKnByZWNvbXB1dGVk
SW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bWluKHN0
ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgYXZhaWxhYmxlV2lkdGgp
LCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0pOworfQorCitWZXJ0aWNhbEdlb21l
dHJ5IEZvcm1hdHRpbmdHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21l
dHJ5KGNvbnN0IENvbnRhaW5lckJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYg
dmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7CisgICAg
QVNTRVJUKHZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbEhlaWdodCk7CisKKyAgICAvLyAxMC42
LjQgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLwor
ICAgIC8vIEZvciBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgZWxlbWVudHMsIHRoZSB1c2VkIHZhbHVl
cyBvZiB0aGUgdmVydGljYWwgZGltZW5zaW9ucyBtdXN0IHNhdGlzZnkgdGhpcyBjb25zdHJhaW50
OgorICAgIC8vICd0b3AnICsgJ21hcmdpbi10b3AnICsgJ2JvcmRlci10b3Atd2lkdGgnICsgJ3Bh
ZGRpbmctdG9wJyArICdoZWlnaHQnICsgJ3BhZGRpbmctYm90dG9tJyArICdib3JkZXItYm90dG9t
LXdpZHRoJyArICdtYXJnaW4tYm90dG9tJyArICdib3R0b20nCisgICAgLy8gPSBoZWlnaHQgb2Yg
Y29udGFpbmluZyBibG9jaworCisgICAgLy8gSWYgYWxsIHRocmVlIG9mICd0b3AnLCAnaGVpZ2h0
JywgYW5kICdib3R0b20nIGFyZSBhdXRvLCBzZXQgJ3RvcCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlv
biBhbmQgYXBwbHkgcnVsZSBudW1iZXIgdGhyZWUgYmVsb3cuCisKKyAgICAvLyBJZiBub25lIG9m
IHRoZSB0aHJlZSBhcmUgJ2F1dG8nOiBJZiBib3RoICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1i
b3R0b20nIGFyZSAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEKKyAg
ICAvLyBjb25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJnaW5zIGdldCBlcXVhbCB2YWx1ZXMuIElm
IG9uZSBvZiAnbWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIGlzICdhdXRvJywgc29sdmUg
dGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgorICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIG92
ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdib3R0b20nIGFuZCBzb2x2ZSBm
b3IgdGhhdCB2YWx1ZS4KKworICAgIC8vIE90aGVyd2lzZSwgcGljayB0aGUgb25lIG9mIHRoZSBm
b2xsb3dpbmcgc2l4IHJ1bGVzIHRoYXQgYXBwbGllcy4KKworICAgIC8vIDEuICd0b3AnIGFuZCAn
aGVpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnYm90dG9tJyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSBo
ZWlnaHQgaXMgYmFzZWQgb24gdGhlIGNvbnRlbnQgcGVyIDEwLjYuNywKKyAgICAvLyAgICAgc2V0
ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAs
IGFuZCBzb2x2ZSBmb3IgJ3RvcCcKKyAgICAvLyAyLiAndG9wJyBhbmQgJ2JvdHRvbScgYXJlICdh
dXRvJyBhbmQgJ2hlaWdodCcgaXMgbm90ICdhdXRvJywgdGhlbiBzZXQgJ3RvcCcgdG8gdGhlIHN0
YXRpYyBwb3NpdGlvbiwgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yCisgICAgLy8gICAgJ21hcmdpbi10
b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAnYm90dG9tJworICAg
IC8vIDMuICdoZWlnaHQnIGFuZCAnYm90dG9tJyBhcmUgJ2F1dG8nIGFuZCAndG9wJyBpcyBub3Qg
J2F1dG8nLCB0aGVuIHRoZSBoZWlnaHQgaXMgYmFzZWQgb24gdGhlIGNvbnRlbnQgcGVyIDEwLjYu
Nywgc2V0ICdhdXRvJworICAgIC8vICAgICB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21h
cmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKKyAgICAvLyA0LiAndG9w
JyBpcyAnYXV0bycsICdoZWlnaHQnIGFuZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgdGhlbiBz
ZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8g
MCwgYW5kIHNvbHZlIGZvciAndG9wJworICAgIC8vIDUuICdoZWlnaHQnIGlzICdhdXRvJywgJ3Rv
cCcgYW5kICdib3R0b20nIGFyZSBub3QgJ2F1dG8nLCB0aGVuICdhdXRvJyB2YWx1ZXMgZm9yICdt
YXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIGFyZSBzZXQgdG8gMCBhbmQgc29sdmUgZm9y
ICdoZWlnaHQnCisgICAgLy8gNi4gJ2JvdHRvbScgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2hlaWdo
dCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9w
JyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAgYW5kIHNvbHZlIGZvciAnYm90dG9tJworCisgICAg
YXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOworICAg
IGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIGF1dG8g
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gKnZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbEhlaWdo
dDsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRz
LmxvZ2ljYWxXaWR0aDsKKworICAgIGF1dG8gdG9wID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dp
Y2FsVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGJvdHRvbSA9IGNvbXB1
dGVkVmFsdWUoc3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Cisg
ICAgYXV0byBoZWlnaHQgPSBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0ID8gb3ZlcnJp
ZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRIZWlnaHQobGF5b3V0
Qm94LCBjb250YWluaW5nQmxvY2tIZWlnaHQpOworICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25D
b2xsYXBzZWRWYWx1ZXMgdXNlZFZlcnRpY2FsTWFyZ2luOyAKKyAgICBhdXRvIHBhZGRpbmdUb3Ag
PSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKKyAgICBhdXRvIHBhZGRpbmdC
b3R0b20gPSBib3hHZW9tZXRyeS5wYWRkaW5nQm90dG9tKCkudmFsdWVPcigwKTsKKyAgICBhdXRv
IGJvcmRlclRvcCA9IGJveEdlb21ldHJ5LmJvcmRlclRvcCgpOworICAgIGF1dG8gYm9yZGVyQm90
dG9tID0gYm94R2VvbWV0cnkuYm9yZGVyQm90dG9tKCk7CisKKyAgICBpZiAoIXRvcCAmJiAhaGVp
Z2h0ICYmICFib3R0b20pCisgICAgICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JP
dXRPZkZsb3dQb3NpdGlvbmVkKGxheW91dEJveCwgdmVydGljYWxDb25zdHJhaW50cyk7CisKKyAg
ICBpZiAodG9wICYmIGhlaWdodCAmJiBib3R0b20pIHsKKyAgICAgICAgaWYgKCFjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZSAmJiAhY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcikgewor
ICAgICAgICAgICAgYXV0byBtYXJnaW5CZWZvcmVBbmRBZnRlciA9IGNvbnRhaW5pbmdCbG9ja0hl
aWdodCAtICgqdG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5n
Qm90dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7CisgICAgICAgICAgICB1c2VkVmVydGlj
YWxNYXJnaW4gPSB7IG1hcmdpbkJlZm9yZUFuZEFmdGVyIC8gMiwgbWFyZ2luQmVmb3JlQW5kQWZ0
ZXIgLyAyIH07CisgICAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVm
b3JlKSB7CisgICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgPSAqY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbi5hZnRlcjsKKyAgICAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZv
cmUgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNh
bE1hcmdpbi5hZnRlciArICpib3R0b20pOworICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmFmdGVyKSB7CisgICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4uYmVm
b3JlID0gKmNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlOworICAgICAgICAgICAgdXNlZFZl
cnRpY2FsTWFyZ2luLmFmdGVyID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2Vk
VmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQg
KyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyAqY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbi5iZWZvcmUsICpjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyIH07CisgICAgICAgIC8v
IE92ZXItY29uc3RyYWluZWQ/CisgICAgICAgIGF1dG8gYm94SGVpZ2h0ID0gKnRvcCArIHVzZWRW
ZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCAr
IHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIg
KyAqYm90dG9tOworICAgICAgICBpZiAoYm94SGVpZ2h0ICE9IGNvbnRhaW5pbmdCbG9ja0hlaWdo
dCkKKyAgICAgICAgICAgIGJvdHRvbSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsg
dXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVp
Z2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5h
ZnRlcik7CisgICAgfQorCisgICAgaWYgKCF0b3AgJiYgIWhlaWdodCAmJiBib3R0b20pIHsKKyAg
ICAgICAgLy8gIzEKKyAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdD
b250ZXh0Um9vdChsYXlvdXRCb3gpOworICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNv
bXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxN
YXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OworICAgICAgICB0b3AgPSBjb250YWluaW5nQmxvY2tI
ZWlnaHQgLSAodXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNh
bE1hcmdpbi5hZnRlciArICpib3R0b20pOyAKKyAgICB9CisKKyAgICBpZiAoIXRvcCAmJiAhYm90
dG9tICYmIGhlaWdodCkgeworICAgICAgICAvLyAjMgorICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0
aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIHZlcnRpY2FsQ29u
c3RyYWludHMpOworICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGlj
YWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIu
dmFsdWVPcigwKSB9OworICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAo
KnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9w
ICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxN
YXJnaW4uYWZ0ZXIpOworICAgIH0KKworICAgIGlmICghaGVpZ2h0ICYmICFib3R0b20gJiYgdG9w
KSB7CisgICAgICAgIC8vICMzCisgICAgICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JGb3Jt
YXR0aW5nQ29udGV4dFJvb3QobGF5b3V0Qm94KTsKKyAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2lu
ID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKKyAgICAgICAgYm90dG9tID0gY29udGFp
bmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9y
ZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90
dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKTsKKyAgICB9CisKKyAgICBpZiAoIXRvcCAm
JiBoZWlnaHQgJiYgYm90dG9tKSB7CisgICAgICAgIC8vICM0CisgICAgICAgIHVzZWRWZXJ0aWNh
bE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CisgICAgICAgIHRvcCA9IGNv
bnRhaW5pbmdCbG9ja0hlaWdodCAtICh1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVy
VG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9t
ICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7CisgICAgfQorCisgICAgaWYg
KCFoZWlnaHQgJiYgdG9wICYmIGJvdHRvbSkgeworICAgICAgICAvLyAjNQorICAgICAgICB1c2Vk
VmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3Io
MCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OworICAgICAgICBo
ZWlnaHQgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdp
bi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIGJvcmRl
ckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b20pOworICAgIH0KKwor
ICAgIGlmICghYm90dG9tICYmIHRvcCAmJiBoZWlnaHQpIHsKKyAgICAgICAgLy8gIzYKKyAgICAg
ICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52
YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKKyAg
ICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGlj
YWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRk
aW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKTsKKyAg
ICB9CisKKyAgICBBU1NFUlQodG9wKTsKKyAgICBBU1NFUlQoYm90dG9tKTsKKyAgICBBU1NFUlQo
aGVpZ2h0KTsKKworICAgIC8vIEZvciBvdXQtb2YtZmxvdyBlbGVtZW50cyB0aGUgY29udGFpbmlu
ZyBibG9jayBpcyBmb3JtZWQgYnkgdGhlIHBhZGRpbmcgZWRnZSBvZiB0aGUgYW5jZXN0b3IuCisg
ICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcG9zaXRpb25lZCB2YWx1ZSBpcyBpbiB0aGUgY29vcmRp
bmF0ZSBzeXN0ZW0gb2YgdGhlIHBhZGRpbmcgYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRl
ciBib3ggY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5n
VmVydGljYWxFZGdlID0gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOworICAgICp0b3Ag
Kz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKKyAgICAqYm90dG9tICs9IGNv
bnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0o
Rm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9uXVtIZWlnaHRdW01h
cmdpbl0gLT4gb3V0LW9mLWZsb3cgbm9uLXJlcGxhY2VkIC0+IHRvcCgiIDw8ICp0b3AgPDwgInB4
KSBib3R0b20oIiAgPDwgKmJvdHRvbSA8PCAicHgpIGhlaWdodCgiIDw8ICpoZWlnaHQgPDwgInB4
KSBtYXJnaW4oIiA8PCB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlIDw8ICJweCwgIiAgPDwgdXNl
ZFZlcnRpY2FsTWFyZ2luLmFmdGVyIDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8
PCAiKSIpOworICAgIHJldHVybiB7ICp0b3AsICpib3R0b20sIHsgKmhlaWdodCwgdXNlZFZlcnRp
Y2FsTWFyZ2luIH0gfTsKK30KKworSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdHZW9tZXRy
eTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQ29udGFpbmVy
Qm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENv
bnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7CisgICAgCisgICAgLy8gMTAu
My43IEFic29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCisgICAgLy8K
KyAgICAvLyAnbGVmdCcgKyAnbWFyZ2luLWxlZnQnICsgJ2JvcmRlci1sZWZ0LXdpZHRoJyArICdw
YWRkaW5nLWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0JyArICdib3JkZXItcmlnaHQt
d2lkdGgnICsgJ21hcmdpbi1yaWdodCcgKyAncmlnaHQnCisgICAgLy8gPSB3aWR0aCBvZiBjb250
YWluaW5nIGJsb2NrCisKKyAgICAvLyBJZiBhbGwgdGhyZWUgb2YgJ2xlZnQnLCAnd2lkdGgnLCBh
bmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdt
YXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAuCisgICAgLy8gVGhlbiwgaWYgdGhl
ICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3Rh
dGljLXBvc2l0aW9uIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUg
c3RhdGljCisgICAgLy8gcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93
OyBvdGhlcndpc2UsIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5
IHJ1bGUgbnVtYmVyIG9uZSBiZWxvdy4KKyAgICAvLworICAgIC8vIElmIG5vbmUgb2YgdGhlIHRo
cmVlIGlzICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBh
cmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQg
dGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcywKKyAgICAvLyB1bmxlc3MgdGhp
cyB3b3VsZCBtYWtlIHRoZW0gbmVnYXRpdmUsIGluIHdoaWNoIGNhc2Ugd2hlbiBkaXJlY3Rpb24g
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdydGwnKSwgc2V0ICdtYXJnaW4tbGVm
dCcgKCdtYXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZAorICAgIC8vIHNvbHZlIGZvciAnbWFyZ2lu
LXJpZ2h0JyAoJ21hcmdpbi1sZWZ0JykuIElmIG9uZSBvZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJn
aW4tcmlnaHQnIGlzICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgor
ICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFs
dWUgZm9yICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNv
bnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yICdyaWdodCcKKyAgICAvLyAoaW4gY2FzZSAnZGly
ZWN0aW9uJyBpcyAnbHRyJykgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgorICAgIC8vCisgICAg
Ly8gT3RoZXJ3aXNlLCBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBhbmQgJ21h
cmdpbi1yaWdodCcgdG8gMCwgYW5kIHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBy
dWxlcyB0aGF0IGFwcGxpZXMuCisgICAgLy8KKyAgICAvLyAxLiAnbGVmdCcgYW5kICd3aWR0aCcg
YXJlICdhdXRvJyBhbmQgJ3JpZ2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBz
aHJpbmstdG8tZml0LiBUaGVuIHNvbHZlIGZvciAnbGVmdCcKKyAgICAvLyAyLiAnbGVmdCcgYW5k
ICdyaWdodCcgYXJlICdhdXRvJyBhbmQgJ3dpZHRoJyBpcyBub3QgJ2F1dG8nLCB0aGVuIGlmIHRo
ZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0
YXRpYy1wb3NpdGlvbiAKKyAgICAvLyAgICBjb250YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAn
bGVmdCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiwgb3RoZXJ3aXNlIHNldCAncmlnaHQnIHRvIHRo
ZSBzdGF0aWMgcG9zaXRpb24uCisgICAgLy8gICAgVGhlbiBzb2x2ZSBmb3IgJ2xlZnQnIChpZiAn
ZGlyZWN0aW9uIGlzICdydGwnKSBvciAncmlnaHQnIChpZiAnZGlyZWN0aW9uJyBpcyAnbHRyJyku
CisgICAgLy8gMy4gJ3dpZHRoJyBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnbGVmdCcgaXMg
bm90ICdhdXRvJywgdGhlbiB0aGUgd2lkdGggaXMgc2hyaW5rLXRvLWZpdCAuIFRoZW4gc29sdmUg
Zm9yICdyaWdodCcKKyAgICAvLyA0LiAnbGVmdCcgaXMgJ2F1dG8nLCAnd2lkdGgnIGFuZCAncmln
aHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnbGVmdCcKKyAgICAvLyA1LiAnd2lk
dGgnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNv
bHZlIGZvciAnd2lkdGgnCisgICAgLy8gNi4gJ3JpZ2h0JyBpcyAnYXV0bycsICdsZWZ0JyBhbmQg
J3dpZHRoJyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0JworCisgICAgYXV0
byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOworICAgIGF1
dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIGF1dG8gY29u
dGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwor
ICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGxheW91dEJveC5jb250YWluaW5nQmxv
Y2soKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICAKKyAgICBhdXRvIGxl
ZnQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKTsKKyAgICBhdXRvIHJpZ2h0ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsUmlnaHQo
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gd2lkdGggPSBvdmVycmlkZGVuSG9y
aXpvbnRhbFZhbHVlcy53aWR0aCA/IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoIDog
Y29tcHV0ZWRXaWR0aChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRv
IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICBV
c2VkSG9yaXpvbnRhbE1hcmdpbiB1c2VkSG9yaXpvbnRhbE1hcmdpbjsKKyAgICBhdXRvIHBhZGRp
bmdMZWZ0ID0gYm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOworICAgIGF1dG8g
cGFkZGluZ1JpZ2h0ID0gYm94R2VvbWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKKyAg
ICBhdXRvIGJvcmRlckxlZnQgPSBib3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCk7CisgICAgYXV0byBi
b3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCk7CisgICAgaWYgKCFsZWZ0ICYm
ICF3aWR0aCAmJiAhcmlnaHQpIHsKKyAgICAgICAgLy8gSWYgYWxsIHRocmVlIG9mICdsZWZ0Jywg
J3dpZHRoJywgYW5kICdyaWdodCcgYXJlICdhdXRvJzogRmlyc3Qgc2V0IGFueSAnYXV0bycgdmFs
dWVzIGZvciAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyB0byAwLgorICAgICAgICAv
LyBUaGVuLCBpZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQgZXN0YWJs
aXNoaW5nIHRoZSBzdGF0aWMtcG9zaXRpb24gY29udGFpbmluZyBibG9jayBpcyAnbHRyJyBzZXQg
J2xlZnQnIHRvIHRoZSBzdGF0aWMKKyAgICAgICAgLy8gcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUg
bnVtYmVyIHRocmVlIGJlbG93OyBvdGhlcndpc2UsIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMg
cG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIG9uZSBiZWxvdy4KKyAgICAgICAgdXNlZEhv
cml6b250YWxNYXJnaW4gPSB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9y
KDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsKKworICAgICAg
ICBhdXRvIHN0YXRpY0hvcml6b250YWxQb3NpdGlvbiA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlv
bkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMp
OworICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbikKKyAgICAgICAgICAgIGxlZnQg
PSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJp
Z2h0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOworICAgIH0gZWxzZSBpZiAobGVmdCAmJiB3
aWR0aCAmJiByaWdodCkgeworICAgICAgICAvLyBJZiBub25lIG9mIHRoZSB0aHJlZSBpcyAnYXV0
byc6IElmIGJvdGggJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgYXJlICdhdXRvJywg
c29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBjb25zdHJhaW50IHRoYXQgdGhlIHR3
byBtYXJnaW5zIGdldCBlcXVhbCB2YWx1ZXMsCisgICAgICAgIC8vIHVubGVzcyB0aGlzIHdvdWxk
IG1ha2UgdGhlbSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZSB3aGVuIGRpcmVjdGlvbiBvZiB0aGUg
Y29udGFpbmluZyBibG9jayBpcyAnbHRyJyAoJ3J0bCcpLCBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21h
cmdpbi1yaWdodCcpIHRvIHplcm8gYW5kCisgICAgICAgIC8vIHNvbHZlIGZvciAnbWFyZ2luLXJp
Z2h0JyAoJ21hcmdpbi1sZWZ0JykuIElmIG9uZSBvZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4t
cmlnaHQnIGlzICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgorICAg
ICAgICAvLyBJZiB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZh
bHVlIGZvciAnbGVmdCcgKGluIGNhc2UgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBj
b250YWluaW5nIGJsb2NrIGlzICdydGwnKSBvciAncmlnaHQnCisgICAgICAgIC8vIChpbiBjYXNl
ICdkaXJlY3Rpb24nIGlzICdsdHInKSBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCisgICAgICAg
IGlmICghY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmICFjb21wdXRlZEhvcml6b250
YWxNYXJnaW4uZW5kKSB7CisgICAgICAgICAgICBhdXRvIG1hcmdpblN0YXJ0QW5kRW5kID0gY29u
dGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAq
d2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7CisgICAgICAgICAg
ICBpZiAobWFyZ2luU3RhcnRBbmRFbmQgPj0gMCkKKyAgICAgICAgICAgICAgICB1c2VkSG9yaXpv
bnRhbE1hcmdpbiA9IHsgbWFyZ2luU3RhcnRBbmRFbmQgLyAyLCBtYXJnaW5TdGFydEFuZEVuZCAv
IDIgfTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0ID0gMF9sdTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4u
ZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdo
dCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSAwX2x1OworICAgICAg
ICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNvbnRhaW5pbmdCbG9j
a1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmln
aHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
ICghY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0KSB7CisgICAgICAgICAgICB1c2VkSG9y
aXpvbnRhbE1hcmdpbi5lbmQgPSAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZDsKKyAgICAg
ICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGgg
LSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmln
aHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKKyAgICAg
ICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gKmNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5zdGFydDsKKyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9IGNvbnRh
aW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBi
b3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJS
aWdodCArICpyaWdodCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1c2VkSG9yaXpv
bnRhbE1hcmdpbiA9IHsgKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCwgKmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbi5lbmQgfTsKKyAgICAgICAgICAgIC8vIE92ZXJjb25zdHJhaW5lZD8g
SWdub3JlIHJpZ2h0IChsZWZ0KS4KKyAgICAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKQorICAgICAgICAgICAgICAgIHJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNl
ZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyAqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVm
dCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxN
YXJnaW4uZW5kKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZWZ0ID0gY29u
dGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJM
ZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCAr
IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBPdGhlcndpc2UsIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2lu
LWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyB0byAwLCBhbmQgcGljayB0aGUgb25lIG9mIHRoZSBm
b2xsb3dpbmcgc2l4IHJ1bGVzIHRoYXQgYXBwbGllcy4KKyAgICAgICAgdXNlZEhvcml6b250YWxN
YXJnaW4gPSB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApLCBjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsKKyAgICB9CisKKyAgICBpZiAo
IWxlZnQgJiYgIXdpZHRoICYmIHJpZ2h0KSB7CisgICAgICAgIC8vICMxCisgICAgICAgIC8vIENh
bGN1bGF0ZSB0aGUgYXZhaWxhYmxlIHdpZHRoIGJ5IHNvbHZpbmcgZm9yICd3aWR0aCcgYWZ0ZXIg
c2V0dGluZyAnbGVmdCcgKGluIGNhc2UgMSkgdG8gMAorICAgICAgICBsZWZ0ID0gTGF5b3V0VW5p
dCB7IDAgfTsKKyAgICAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChs
YXlvdXRCb3gsIGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgbGVmdCA9IGNvbnRhaW5pbmdCbG9j
a1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRp
bmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6
b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKKyAgICB9IGVsc2UgaWYgKCFsZWZ0ICYmICFyaWdo
dCAmJiB3aWR0aCkgeworICAgICAgICAvLyAjMgorICAgICAgICBhdXRvIHN0YXRpY0hvcml6b250
YWxQb3NpdGlvbiA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9u
ZWQobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworICAgICAgICBpZiAoaXNMZWZ0
VG9SaWdodERpcmVjdGlvbikgeworICAgICAgICAgICAgbGVmdCA9IHN0YXRpY0hvcml6b250YWxQ
b3NpdGlvbjsKKyAgICAgICAgICAgIHJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxl
ZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVm
dCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxN
YXJnaW4uZW5kKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJpZ2h0ID0gc3RhdGlj
SG9yaXpvbnRhbFBvc2l0aW9uOworICAgICAgICAgICAgbGVmdCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdM
ZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRh
bE1hcmdpbi5lbmQgKyAqcmlnaHQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghd2lkdGgg
JiYgIXJpZ2h0ICYmIGxlZnQpIHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgLy8gQ2FsY3VsYXRl
IHRoZSBhdmFpbGFibGUgd2lkdGggYnkgc29sdmluZyBmb3IgJ3dpZHRoJyBhZnRlciBzZXR0aW5n
ICdyaWdodCcgKGluIGNhc2UgMykgdG8gMAorICAgICAgICByaWdodCA9IExheW91dFVuaXQgeyAw
IH07CisgICAgICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBjb250YWluaW5nQmxvY2tXaWR0aCAt
ICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRp
bmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5lbmQgKyAqcmlnaHQpOworICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgobGF5b3V0
Qm94LCBhdmFpbGFibGVXaWR0aCk7CisgICAgICAgIHJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBw
YWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhv
cml6b250YWxNYXJnaW4uZW5kKTsKKyAgICB9IGVsc2UgaWYgKCFsZWZ0ICYmIHdpZHRoICYmIHJp
Z2h0KSB7CisgICAgICAgIC8vICM0CisgICAgICAgIGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0
aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVm
dCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxN
YXJnaW4uZW5kICsgKnJpZ2h0KTsKKyAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiBsZWZ0ICYmIHJp
Z2h0KSB7CisgICAgICAgIC8vICM1CisgICAgICAgIHdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBw
YWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxN
YXJnaW4uZW5kICsgKnJpZ2h0KTsKKyAgICB9IGVsc2UgaWYgKCFyaWdodCAmJiBsZWZ0ICYmIHdp
ZHRoKSB7CisgICAgICAgIC8vICM2CisgICAgICAgIHJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBw
YWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhv
cml6b250YWxNYXJnaW4uZW5kKTsKKyAgICB9CisKKyAgICBBU1NFUlQobGVmdCk7CisgICAgQVNT
RVJUKHJpZ2h0KTsKKyAgICBBU1NFUlQod2lkdGgpOworCisgICAgLy8gRm9yIG91dC1vZi1mbG93
IGVsZW1lbnRzIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBl
ZGdlIG9mIHRoZSBhbmNlc3Rvci4KKyAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVk
IHZhbHVlIGlzIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExl
dCdzIGNvbnZlcnQgaXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBhdXRv
IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSBob3Jpem9udGFsQ29uc3RyYWlu
dHMubG9naWNhbExlZnQ7CisgICAgKmxlZnQgKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRp
Y2FsRWRnZTsKKyAgICAqcmlnaHQgKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRn
ZTsKKworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFt
IDw8ICJbUG9zaXRpb25dW1dpZHRoXVtNYXJnaW5dIC0+IG91dC1vZi1mbG93IG5vbi1yZXBsYWNl
ZCAtPiBsZWZ0KCIgPDwgKmxlZnQgPDwgInB4KSByaWdodCgiICA8PCAqcmlnaHQgPDwgInB4KSB3
aWR0aCgiIDw8ICp3aWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0IDw8ICJweCwgIiAgPDwgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kIDw8ICJweCkgbGF5
b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOworICAgIHJldHVybiB7ICpsZWZ0LCAqcmln
aHQsIHsgKndpZHRoLCB1c2VkSG9yaXpvbnRhbE1hcmdpbiB9IH07Cit9CisKK1ZlcnRpY2FsR2Vv
bWV0cnkgRm9ybWF0dGluZ0dlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0
cnkoY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYg
dmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlcGxhY2VkQm94Lmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQodmVydGljYWxDb25zdHJhaW50cy5s
b2dpY2FsSGVpZ2h0KTsKKworICAgIC8vIDEwLjYuNSBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHJl
cGxhY2VkIGVsZW1lbnRzCisgICAgLy8KKyAgICAvLyBUaGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0
JyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCisgICAgLy8g
SWYgJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyBpcyBzcGVjaWZpZWQgYXMgJ2F1dG8n
IGl0cyB1c2VkIHZhbHVlIGlzIGRldGVybWluZWQgYnkgdGhlIHJ1bGVzIGJlbG93LgorICAgIC8v
IDEuIElmIGJvdGggJ3RvcCcgYW5kICdib3R0b20nIGhhdmUgdGhlIHZhbHVlICdhdXRvJywgcmVw
bGFjZSAndG9wJyB3aXRoIHRoZSBlbGVtZW50J3Mgc3RhdGljIHBvc2l0aW9uLgorICAgIC8vIDIu
IElmICdib3R0b20nIGlzICdhdXRvJywgcmVwbGFjZSBhbnkgJ2F1dG8nIG9uICdtYXJnaW4tdG9w
JyBvciAnbWFyZ2luLWJvdHRvbScgd2l0aCAnMCcuCisgICAgLy8gMy4gSWYgYXQgdGhpcyBwb2lu
dCBib3RoICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIGFyZSBzdGlsbCAnYXV0bycs
IHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0
d28gbWFyZ2lucyBtdXN0IGdldCBlcXVhbCB2YWx1ZXMuCisgICAgLy8gNC4gSWYgYXQgdGhpcyBw
b2ludCB0aGVyZSBpcyBvbmx5IG9uZSAnYXV0bycgbGVmdCwgc29sdmUgdGhlIGVxdWF0aW9uIGZv
ciB0aGF0IHZhbHVlLgorICAgIC8vIDUuIElmIGF0IHRoaXMgcG9pbnQgdGhlIHZhbHVlcyBhcmUg
b3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgJ2JvdHRvbScgYW5kIHNvbHZl
IGZvciB0aGF0IHZhbHVlLgorCisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5m
b3JtYXR0aW5nQ29udGV4dCgpOworICAgIGF1dG8mIHN0eWxlID0gcmVwbGFjZWRCb3guc3R5bGUo
KTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9y
Qm94KHJlcGxhY2VkQm94KTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9ICp2ZXJ0
aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQ7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tX
aWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7CisKKyAgICBhdXRvIHRv
cCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0
aCk7CisgICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxCb3R0b20o
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gaGVpZ2h0ID0gaW5saW5lUmVwbGFj
ZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIHZlcnRpY2FsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykuY29udGVu
dEhlaWdodDsKKyAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBGb3JtYXR0aW5nR2Vv
bWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cyk7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpbkJlZm9yZSA9IGNv
bXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlOworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVz
ZWRNYXJnaW5BZnRlciA9IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXI7CisgICAgYXV0byBw
YWRkaW5nVG9wID0gYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgYXV0
byBwYWRkaW5nQm90dG9tID0gYm94R2VvbWV0cnkucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7
CisgICAgYXV0byBib3JkZXJUb3AgPSBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKTsKKyAgICBhdXRv
IGJvcmRlckJvdHRvbSA9IGJveEdlb21ldHJ5LmJvcmRlckJvdHRvbSgpOworCisgICAgaWYgKCF0
b3AgJiYgIWJvdHRvbSkgeworICAgICAgICAvLyAjMQorICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0
aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChyZXBsYWNlZEJveCwgdmVydGljYWxD
b25zdHJhaW50cyk7CisgICAgfQorCisgICAgaWYgKCFib3R0b20pIHsKKyAgICAgICAgLy8gIzIK
KyAgICAgICAgdXNlZE1hcmdpbkJlZm9yZSA9IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3Jl
LnZhbHVlT3IoMCk7CisgICAgICAgIHVzZWRNYXJnaW5BZnRlciA9IHVzZWRNYXJnaW5CZWZvcmU7
CisgICAgfQorCisgICAgaWYgKCF1c2VkTWFyZ2luQmVmb3JlICYmICF1c2VkTWFyZ2luQWZ0ZXIp
IHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgYXV0byBtYXJnaW5CZWZvcmVBbmRBZnRlciA9IGNv
bnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhl
aWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqYm90dG9tKTsKKyAgICAgICAg
dXNlZE1hcmdpbkJlZm9yZSA9IG1hcmdpbkJlZm9yZUFuZEFmdGVyIC8gMjsKKyAgICAgICAgdXNl
ZE1hcmdpbkFmdGVyID0gdXNlZE1hcmdpbkJlZm9yZTsKKyAgICB9CisKKyAgICAvLyAjNAorICAg
IGlmICghdG9wKQorICAgICAgICB0b3AgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnVzZWRN
YXJnaW5CZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0Jv
dHRvbSArIGJvcmRlckJvdHRvbSArICp1c2VkTWFyZ2luQWZ0ZXIgKyAqYm90dG9tKTsKKworICAg
IGlmICghYm90dG9tKQorICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAo
KnRvcCArICp1c2VkTWFyZ2luQmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdo
dCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyKTsKKwor
ICAgIGlmICghdXNlZE1hcmdpbkJlZm9yZSkKKyAgICAgICAgdXNlZE1hcmdpbkJlZm9yZSA9IGNv
bnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhl
aWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyICsg
KmJvdHRvbSk7CisKKyAgICBpZiAoIXVzZWRNYXJnaW5BZnRlcikKKyAgICAgICAgdXNlZE1hcmdp
bkFmdGVyID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyAqdXNlZE1hcmdpbkJlZm9y
ZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9y
ZGVyQm90dG9tICsgKmJvdHRvbSk7CisKKyAgICAvLyAjNQorICAgIGF1dG8gYm94SGVpZ2h0ID0g
KnRvcCArICp1c2VkTWFyZ2luQmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdo
dCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyICsgKmJv
dHRvbTsKKyAgICBpZiAoYm94SGVpZ2h0ID4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KQorICAgICAg
ICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArICp1c2VkTWFyZ2luQmVm
b3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBi
b3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyKTsgCisKKyAgICAvLyBGb3Igb3V0LW9mLWZs
b3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5n
IGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgorICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9u
ZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4g
TGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IHZlcnRpY2FsQ29uc3RyYWlu
dHMubG9naWNhbFRvcDsKKyAgICAqdG9wICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNh
bEVkZ2U7CisgICAgKmJvdHRvbSArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdl
OworCisgICAgQVNTRVJUKHRvcCk7CisgICAgQVNTRVJUKGJvdHRvbSk7CisgICAgQVNTRVJUKHVz
ZWRNYXJnaW5CZWZvcmUpOworICAgIEFTU0VSVCh1c2VkTWFyZ2luQWZ0ZXIpOworICAgIExPR19X
SVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbUG9zaXRpb25d
W0hlaWdodF1bTWFyZ2luXSAtPiBvdXQtb2YtZmxvdyByZXBsYWNlZCAtPiB0b3AoIiA8PCAqdG9w
IDw8ICJweCkgYm90dG9tKCIgIDw8ICpib3R0b20gPDwgInB4KSBoZWlnaHQoIiA8PCBoZWlnaHQg
PDwgInB4KSBtYXJnaW4oIiA8PCAqdXNlZE1hcmdpbkJlZm9yZSA8PCAicHgsICIgIDw8ICp1c2Vk
TWFyZ2luQWZ0ZXIgPDwgInB4KSBsYXlvdXRCb3goIiA8PCAmcmVwbGFjZWRCb3ggPDwgIikiKTsK
KyAgICByZXR1cm4geyAqdG9wLCAqYm90dG9tLCB7IGhlaWdodCwgeyAqdXNlZE1hcmdpbkJlZm9y
ZSwgKnVzZWRNYXJnaW5BZnRlciB9IH0gfTsKK30KKworSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1h
dHRpbmdHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3Qg
UmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxD
b25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5I
b3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChyZXBsYWNlZEJveC5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSk7CisKKyAgICAvLyAxMC4zLjggQWJzb2x1dGVseSBwb3NpdGlvbmVkLCByZXBs
YWNlZCBlbGVtZW50cworICAgIC8vIEluIHRoaXMgY2FzZSwgc2VjdGlvbiAxMC4zLjcgYXBwbGll
cyB1cCB0aHJvdWdoIGFuZCBpbmNsdWRpbmcgdGhlIGNvbnN0cmFpbnQgZXF1YXRpb24sIGJ1dCB0
aGUgcmVzdCBvZiBzZWN0aW9uIDEwLjMuNyBpcyByZXBsYWNlZCBieSB0aGUgZm9sbG93aW5nIHJ1
bGVzOgorICAgIC8vCisgICAgLy8gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1p
bmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuIElmICdtYXJnaW4tbGVmdCcgb3Ig
J21hcmdpbi1yaWdodCcgaXMgc3BlY2lmaWVkIGFzICdhdXRvJyBpdHMgdXNlZCB2YWx1ZSBpcyBk
ZXRlcm1pbmVkIGJ5IHRoZSBydWxlcyBiZWxvdy4KKyAgICAvLyAxLiBJZiBib3RoICdsZWZ0JyBh
bmQgJ3JpZ2h0JyBoYXZlIHRoZSB2YWx1ZSAnYXV0bycsIHRoZW4gaWYgdGhlICdkaXJlY3Rpb24n
IHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBvc2l0aW9u
IGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicsCisgICAgLy8gICBzZXQgJ2xlZnQnIHRvIHRoZSBz
dGF0aWMgcG9zaXRpb247IGVsc2UgaWYgJ2RpcmVjdGlvbicgaXMgJ3J0bCcsIHNldCAncmlnaHQn
IHRvIHRoZSBzdGF0aWMgcG9zaXRpb24uCisgICAgLy8gMi4gSWYgJ2xlZnQnIG9yICdyaWdodCcg
YXJlICdhdXRvJywgcmVwbGFjZSBhbnkgJ2F1dG8nIG9uICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdp
bi1yaWdodCcgd2l0aCAnMCcuCisgICAgLy8gMy4gSWYgYXQgdGhpcyBwb2ludCBib3RoICdtYXJn
aW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIGFyZSBzdGlsbCAnYXV0bycsIHNvbHZlIHRoZSBl
cXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBt
dXN0IGdldCBlcXVhbCB2YWx1ZXMsCisgICAgLy8gICB1bmxlc3MgdGhpcyB3b3VsZCBtYWtlIHRo
ZW0gbmVnYXRpdmUsIGluIHdoaWNoIGNhc2Ugd2hlbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBjb250
YWluaW5nIGJsb2NrIGlzICdsdHInICgncnRsJyksIHNldCAnbWFyZ2luLWxlZnQnICgnbWFyZ2lu
LXJpZ2h0JykgdG8gemVybyBhbmQKKyAgICAvLyAgIHNvbHZlIGZvciAnbWFyZ2luLXJpZ2h0JyAo
J21hcmdpbi1sZWZ0JykuCisgICAgLy8gNC4gSWYgYXQgdGhpcyBwb2ludCB0aGVyZSBpcyBhbiAn
YXV0bycgbGVmdCwgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgorICAgIC8vIDUu
IElmIGF0IHRoaXMgcG9pbnQgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3Jl
IHRoZSB2YWx1ZSBmb3IgZWl0aGVyICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicgcHJv
cGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yCisgICAgLy8gICAncmln
aHQnIChpbiBjYXNlICdkaXJlY3Rpb24nIGlzICdsdHInKSBhbmQgc29sdmUgZm9yIHRoYXQgdmFs
dWUuCisKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250
ZXh0KCk7CisgICAgYXV0byYgc3R5bGUgPSByZXBsYWNlZEJveC5zdHlsZSgpOworICAgIGF1dG8m
IGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocmVwbGFjZWRC
b3gpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWlu
dHMubG9naWNhbFdpZHRoOworICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IHJlcGxh
Y2VkQm94LmNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
OworCisgICAgYXV0byBsZWZ0ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsTGVmdCgpLCBj
b250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byByaWdodCA9IGNvbXB1dGVkVmFsdWUoc3R5
bGUubG9naWNhbFJpZ2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworICAgIE9wdGlv
bmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5TdGFydCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydDsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luRW5kID0gY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZDsKKyAgICBhdXRvIHdpZHRoID0gaW5saW5lUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywg
dmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpLmNvbnRlbnRX
aWR0aDsKKyAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gYm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52
YWx1ZU9yKDApOworICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gYm94R2VvbWV0cnkucGFkZGluZ1Jp
Z2h0KCkudmFsdWVPcigwKTsKKyAgICBhdXRvIGJvcmRlckxlZnQgPSBib3hHZW9tZXRyeS5ib3Jk
ZXJMZWZ0KCk7CisgICAgYXV0byBib3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0
KCk7CisKKyAgICBpZiAoIWxlZnQgJiYgIXJpZ2h0KSB7CisgICAgICAgIC8vICMxCisgICAgICAg
IGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9u
Rm9yT3V0T2ZGbG93UG9zaXRpb25lZChyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
KTsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCisgICAgICAgICAgICBsZWZ0
ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
aWdodCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAoIWxlZnQg
fHwgIXJpZ2h0KSB7CisgICAgICAgIC8vICMyCisgICAgICAgIHVzZWRNYXJnaW5TdGFydCA9IGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApOworICAgICAgICB1c2VkTWFy
Z2luRW5kID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApOworICAgIH0K
KworICAgIGlmICghdXNlZE1hcmdpblN0YXJ0ICYmICF1c2VkTWFyZ2luRW5kKSB7CisgICAgICAg
IC8vICMzCisgICAgICAgIGF1dG8gbWFyZ2luU3RhcnRBbmRFbmQgPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGlu
Z1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOworICAgICAgICBpZiAobWFyZ2luU3RhcnRB
bmRFbmQgPj0gMCkgeworICAgICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gbWFyZ2luU3RhcnRB
bmRFbmQgLyAyOworICAgICAgICAgICAgdXNlZE1hcmdpbkVuZCA9IHVzZWRNYXJnaW5TdGFydDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KSB7CisgICAgICAgICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gMF9sdTsKKyAgICAgICAgICAg
ICAgICB1c2VkTWFyZ2luRW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqdXNl
ZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5n
UmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHVzZWRNYXJnaW5FbmQgPSAwX2x1OworICAgICAgICAgICAgICAgIHVzZWRN
YXJnaW5TdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCAr
IHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2Vk
TWFyZ2luRW5kICsgKnJpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vICM0CisgICAgaWYgKCFsZWZ0KQorICAgICAgICBsZWZ0ID0gY29udGFpbmluZ0Jsb2Nr
V2lkdGggLSAoKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdp
ZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCArICpyaWdo
dCk7CisKKyAgICBpZiAoIXJpZ2h0KQorICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVm
dCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCk7
CisKKyAgICBpZiAoIXVzZWRNYXJnaW5TdGFydCkKKyAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0g
Y29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQg
KyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJnaW5FbmQgKyAq
cmlnaHQpOworCisgICAgaWYgKCF1c2VkTWFyZ2luRW5kKQorICAgICAgICB1c2VkTWFyZ2luRW5k
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArICpyaWdodCk7CisKKyAgICBhdXRvIGJveFdpZHRoID0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5T
dGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCArICpyaWdodCk7CisgICAgaWYgKGJveFdpZHRo
ID4gY29udGFpbmluZ0Jsb2NrV2lkdGgpIHsKKyAgICAgICAgLy8gIzUgT3Zlci1jb25zdHJhaW5l
ZD8KKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCisgICAgICAgICAgICByaWdo
dCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5TdGFydCArIGJv
cmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyAqdXNlZE1hcmdpbkVuZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxlZnQgPSBj
b250YWluaW5nQmxvY2tXaWR0aCAtICgqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBh
ZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFy
Z2luRW5kICsgKnJpZ2h0KTsKKyAgICB9CisKKyAgICBBU1NFUlQobGVmdCk7CisgICAgQVNTRVJU
KHJpZ2h0KTsKKyAgICBBU1NFUlQodXNlZE1hcmdpblN0YXJ0KTsKKyAgICBBU1NFUlQodXNlZE1h
cmdpbkVuZCk7CisKKyAgICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5p
bmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgor
ICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3Jk
aW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3Jk
ZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGlu
Z1ZlcnRpY2FsRWRnZSA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKKyAgICAq
bGVmdCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOworICAgICpyaWdodCAr
PSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOworCisgICAgTE9HX1dJVEhfU1RS
RUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlvbl1bV2lkdGhd
W01hcmdpbl0gLT4gb3V0LW9mLWZsb3cgcmVwbGFjZWQgLT4gbGVmdCgiIDw8ICpsZWZ0IDw8ICJw
eCkgcmlnaHQoIiAgPDwgKnJpZ2h0IDw8ICJweCkgd2lkdGgoIiA8PCB3aWR0aCA8PCAicHgpIG1h
cmdpbigiIDw8ICp1c2VkTWFyZ2luU3RhcnQgPDwgInB4LCAiICA8PCAqdXNlZE1hcmdpbkVuZCA8
PCAicHgpIGxheW91dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOworICAgIHJldHVybiB7
ICpsZWZ0LCAqcmlnaHQsIHsgd2lkdGgsIHsgKnVzZWRNYXJnaW5TdGFydCwgKnVzZWRNYXJnaW5F
bmQgfSB9IH07Cit9CisKK0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5
Ojpjb21wbGljYXRlZENhc2VzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRp
Y2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsKKyAgICAvLyBUT0RPOiBVc2UgY29tcGxpY2F0
ZWQtY2FzZSBmb3IgZG9jdW1lbnQgcmVuZGVyZXIgZm9yIG5vdyAoc2VlIEJsb2NrRm9ybWF0dGlu
Z0dlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4pLgorICAgIEFTU0VSVCgobGF5b3V0Qm94
LmlzQmxvY2tMZXZlbEJveCgpICYmIGxheW91dEJveC5pc0luRmxvdygpICYmICFsYXlvdXRCb3gu
aXNPdmVyZmxvd1Zpc2libGUoKSkgfHwgbGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSB8fCBs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNEb2N1bWVudEJv
eCgpIHx8IGxheW91dEJveC5pc1RhYmxlQm94KCkpOworCisgICAgLy8gMTAuNi42IENvbXBsaWNh
dGVkIGNhc2VzCisgICAgLy8KKyAgICAvLyBCbG9jay1sZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1l
bnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292ZXJmbG93JyBkb2VzIG5vdCBjb21wdXRlIHRvICd2
aXNpYmxlJyAoZXhjZXB0IGlmIHRoZSAnb3ZlcmZsb3cnIHByb3BlcnR5J3MgdmFsdWUgaGFzIGJl
ZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQpLgorICAgIC8vICdJbmxpbmUtYmxvY2snLCBu
b24tcmVwbGFjZWQgZWxlbWVudHMuCisgICAgLy8gRmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVt
ZW50cy4KKyAgICAvLworICAgIC8vIDEuIElmICdtYXJnaW4tdG9wJywgb3IgJ21hcmdpbi1ib3R0
b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMgMC4KKyAgICAvLyAyLiBJZiAnaGVp
Z2h0JyBpcyAnYXV0bycsIHRoZSBoZWlnaHQgZGVwZW5kcyBvbiB0aGUgZWxlbWVudCdzIGRlc2Nl
bmRhbnRzIHBlciAxMC42LjcuCisKKyAgICBhdXRvIGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkg
OiBjb21wdXRlZEhlaWdodChsYXlvdXRCb3gpOworICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgLy8gIzEKKyAgICBhdXRvIHVzZWRWZXJ0
aWNhbE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbi5hZnRlci52YWx1ZU9yKDApIH07IAorICAgIC8vICMyCisgICAgaWYgKCFoZWlnaHQpIHsK
KyAgICAgICAgQVNTRVJUKGlzSGVpZ2h0QXV0byhsYXlvdXRCb3gpKTsKKyAgICAgICAgaWYgKCFp
czxDb250YWluZXJCb3g+KGxheW91dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lckJveD4obGF5
b3V0Qm94KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKKyAgICAgICAgICAgIGhlaWdodCA9
IDBfbHU7CisgICAgICAgIGVsc2UgaWYgKGxheW91dEJveC5pc0RvY3VtZW50Qm94KCkgJiYgIWxh
eW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50Qm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpOworICAg
ICAgICAgICAgYXV0byB0b3AgPSBCb3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpkb2N1bWVudEJveC5maXJzdEluRmxvd0NoaWxkKCkp
KS50b3AoKTsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tID0gQm94R2VvbWV0cnk6Om1hcmdpbkJv
eFJlY3QoZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqZG9jdW1lbnRCb3gubGFz
dEluRmxvd0NoaWxkKCkpKS5ib3R0b20oKTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVj
aWFsIChxdWlyaz8pIGJlaGF2aW9yIHNpbmNlIHRoZSBkb2N1bWVudCBib3ggaXMgbm90IGEgZm9y
bWF0dGluZyBjb250ZXh0IHJvb3QgYW5kCisgICAgICAgICAgICAvLyBhbGwgdGhlIGZsb2F0IGJv
eGVzIGVuZCB1cCBhdCB0aGUgSUNCIGxldmVsLgorICAgICAgICAgICAgYXV0byYgaW5pdGlhbENv
bnRhaW5pbmdCbG9jayA9IGRvY3VtZW50Qm94LmZvcm1hdHRpbmdDb250ZXh0Um9vdCgpOworICAg
ICAgICAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBmb3JtYXR0
aW5nQ29udGV4dCgpLCBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlu
aXRpYWxDb250YWluaW5nQmxvY2spLmZsb2F0aW5nU3RhdGUoKSB9OworICAgICAgICAgICAgaWYg
KGF1dG8gZmxvYXRCb3R0b20gPSBmbG9hdGluZ0NvbnRleHQuYm90dG9tKCkpIHsKKyAgICAgICAg
ICAgICAgICBib3R0b20gPSBzdGQ6Om1heDxMYXlvdXRVbml0PigqZmxvYXRCb3R0b20sIGJvdHRv
bSk7CisgICAgICAgICAgICAgICAgYXV0byBmbG9hdFRvcCA9IGZsb2F0aW5nQ29udGV4dC50b3Ao
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZmxvYXRUb3ApOworICAgICAgICAgICAgICAgIHRv
cCA9IHN0ZDo6bWluPExheW91dFVuaXQ+KCpmbG9hdFRvcCwgdG9wKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGhlaWdodCA9IGJvdHRvbSAtIHRvcDsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVChsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgp
KTsKKyAgICAgICAgICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4
dFJvb3QoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEFTU0VSVChoZWlnaHQpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRp
bmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWlnaHRdW01hcmdpbl0gLT4gZmxvYXRpbmcg
bm9uLXJlcGxhY2VkIC0+IGhlaWdodCgiIDw8ICpoZWlnaHQgPDwgInB4KSBtYXJnaW4oIiA8PCB1
c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlIDw8ICJweCwgIiA8PCB1c2VkVmVydGljYWxNYXJnaW4u
YWZ0ZXIgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAg
cmV0dXJuIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4geyAqaGVpZ2h0LCB1c2VkVmVydGljYWxNYXJn
aW4gfTsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdHZW9tZXRyeTo6Zmxv
YXRpbmdOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNv
bnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cykKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgJiYgIWxh
eW91dEJveC5pc1JlcGxhY2VkQm94KCkpOworCisgICAgLy8gMTAuMy41IEZsb2F0aW5nLCBub24t
cmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vIDEuIElmICdtYXJnaW4tbGVmdCcsIG9y
ICdtYXJnaW4tcmlnaHQnIGFyZSBjb21wdXRlZCBhcyAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUg
aXMgJzAnLgorICAgIC8vIDIuIElmICd3aWR0aCcgaXMgY29tcHV0ZWQgYXMgJ2F1dG8nLCB0aGUg
dXNlZCB2YWx1ZSBpcyB0aGUgInNocmluay10by1maXQiIHdpZHRoLgorCisgICAgYXV0byBjb21w
dXRlZEhvcml6b250YWxNYXJnaW4gPSBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisKKyAgICAvLyAj
MQorICAgIGF1dG8gdXNlZEhvcml6b250YWxsTWFyZ2luID0gVXNlZEhvcml6b250YWxNYXJnaW4g
eyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07CisgICAgLy8gIzIKKyAgICBhdXRvIHdpZHRo
ID0gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkV2lkdGgobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3Ry
YWludHMubG9naWNhbFdpZHRoKTsKKyAgICBpZiAoIXdpZHRoKQorICAgICAgICB3aWR0aCA9IHNo
cmlua1RvRml0V2lkdGgobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdp
ZHRoKTsKKworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3Ry
ZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gZmxvYXRpbmcgbm9uLXJlcGxhY2VkIC0+IHdpZHRo
KCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZEhvcml6b250YWxsTWFyZ2luLnN0
YXJ0IDw8ICJweCwgIiA8PCB1c2VkSG9yaXpvbnRhbGxNYXJnaW4uZW5kIDw8ICJweCkgLT4gbGF5
b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOworICAgIHJldHVybiBDb250ZW50V2lkdGhB
bmRNYXJnaW4geyAqd2lkdGgsIHVzZWRIb3Jpem9udGFsbE1hcmdpbiB9OworfQorCitDb250ZW50
SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZENvbnRl
bnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJp
ZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKHJlcGxhY2VkQm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOworCisgICAgLy8g
MTAuNi4yIElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxl
bWVudHMgaW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snCisgICAgLy8gcmVwbGFjZWQgZWxl
bWVudHMgaW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1lbnRzCisgICAg
TE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWln
aHRdW01hcmdpbl0gLT4gZmxvYXRpbmcgcmVwbGFjZWQgLT4gcmVkaXJlY3RlZCB0byBpbmxpbmUg
cmVwbGFjZWQiKTsKKyAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFy
Z2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwgb3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzKTsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdHZW9t
ZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBsYWNl
ZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRl
bkhvcml6b250YWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKHJlcGxhY2VkQm94LmlzRmxvYXRpbmdQ
b3NpdGlvbmVkKCkpOworCisgICAgLy8gMTAuMy42IEZsb2F0aW5nLCByZXBsYWNlZCBlbGVtZW50
cworICAgIC8vCisgICAgLy8gMS4gSWYgJ21hcmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBh
cmUgY29tcHV0ZWQgYXMgJ2F1dG8nLCB0aGVpciB1c2VkIHZhbHVlIGlzICcwJy4KKyAgICAvLyAy
LiBUaGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSBy
ZXBsYWNlZCBlbGVtZW50cy4KKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZv
cm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKHJlcGxhY2VkQm94LCBo
b3Jpem9udGFsQ29uc3RyYWludHMpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdD
b250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWlnaHRdW01hcmdpbl0gLT4gZmxvYXRpbmcgcmVw
bGFjZWQgLT4gcmVkaXJlY3RlZCB0byBpbmxpbmUgcmVwbGFjZWQiKTsKKyAgICBhdXRvIHVzZWRN
YXJnaW4gPSBVc2VkSG9yaXpvbnRhbE1hcmdpbiB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5z
dGFydC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkg
fTsKKyAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFj
ZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCB7IG92ZXJyaWRkZW5Ib3Jpem9udGFs
VmFsdWVzLndpZHRoLCB1c2VkTWFyZ2luIH0pOworfQorCitWZXJ0aWNhbEdlb21ldHJ5IEZvcm1h
dHRpbmdHZW9tZXRyeTo6b3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91
dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMs
IGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92
ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAor
eworICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOworCisgICAg
aWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQorICAgICAgICByZXR1cm4gb3V0T2ZGbG93
Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0
Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlk
ZGVuVmVydGljYWxWYWx1ZXMpOworICAgIHJldHVybiBvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2Fs
R2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25z
dHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsK
K30KKworSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdHZW9tZXRyeTo6b3V0T2ZGbG93SG9y
aXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29u
c3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50
cyYgdmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMm
IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCkpOworCisgICAgaWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJv
eCgpKQorICAgICAgICByZXR1cm4gb3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0
cnkoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKKyAgICByZXR1cm4gb3V0T2ZGbG93UmVw
bGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCks
IGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMpOworfQorCitDb250ZW50SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdH
ZW9tZXRyeTo6ZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywg
Y29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMp
IGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsK
KworICAgIGlmICghbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKKyAgICAgICAgcmV0dXJuIGNv
bXBsaWNhdGVkQ2FzZXMobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcyk7CisgICAgcmV0dXJuIGZsb2F0aW5nUmVwbGFjZWRDb250ZW50SGVp
Z2h0QW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFs
Q29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Cit9CisKK0NvbnRlbnRXaWR0
aEFuZE1hcmdpbiBGb3JtYXR0aW5nR2VvbWV0cnk6OmZsb2F0aW5nQ29udGVudFdpZHRoQW5kTWFy
Z2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9h
dGluZ1Bvc2l0aW9uZWQoKSk7CisKKyAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkp
CisgICAgICAgIHJldHVybiBmbG9hdGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2lu
KGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZh
bHVlcyk7CisgICAgcmV0dXJuIGZsb2F0aW5nUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4o
ZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywg
b3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOworfQorCitDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
IEZvcm1hdHRpbmdHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIE9wdGlvbmFsPFZlcnRpY2FsQ29uc3RyYWludHM+
IHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3Zl
cnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAoreworICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVw
bGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBm
bG93LCAnaW5saW5lLWJsb2NrJyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQg
ZmxvYXRpbmcgcmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vIDEuIElmICdtYXJnaW4t
dG9wJywgb3IgJ21hcmdpbi1ib3R0b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMg
MC4KKyAgICAvLyAyLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUgY29tcHV0ZWQg
dmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgYWxzbyBoYXMgYW4gaW50cmluc2ljIGhl
aWdodCwgdGhlbiB0aGF0IGludHJpbnNpYyBoZWlnaHQgaXMgdGhlIHVzZWQgdmFsdWUgb2YgJ2hl
aWdodCcuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiAnaGVpZ2h0JyBoYXMgYSBjb21wdXRlZCB2
YWx1ZSBvZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIHRo
ZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcgaXM6CisgICAgLy8gICAgKHVzZWQgd2lkdGgp
IC8gKGludHJpbnNpYyByYXRpbykKKyAgICAvLyA0LiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhh
cyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRy
aW5zaWMgaGVpZ2h0LCB0aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0aGUgdXNlZCB2YWx1
ZSBvZiAnaGVpZ2h0Jy4KKyAgICAvLyA1LiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNv
bXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYnV0IG5vbmUgb2YgdGhlIGNvbmRpdGlvbnMgYWJvdmUg
YXJlIG1ldCwgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBtdXN0IGJlIHNldCB0bwor
ICAgIC8vICAgIHRoZSBoZWlnaHQgb2YgdGhlIGxhcmdlc3QgcmVjdGFuZ2xlIHRoYXQgaGFzIGEg
MjoxIHJhdGlvLCBoYXMgYSBoZWlnaHQgbm90IGdyZWF0ZXIgdGhhbiAxNTBweCwgYW5kIGhhcyBh
IHdpZHRoIG5vdCBncmVhdGVyIHRoYW4gdGhlIGRldmljZSB3aWR0aC4KKworICAgIC8vICMxCisg
ICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwor
ICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsK
KyAgICBhdXRvIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29s
bGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwg
Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CisgICAgYXV0byYgc3R5
bGUgPSByZXBsYWNlZEJveC5zdHlsZSgpOworCisgICAgYXV0byBoZWlnaHQgPSBvdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMuaGVpZ2h0ID8gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodC52
YWx1ZSgpIDogY29tcHV0ZWRIZWlnaHQocmVwbGFjZWRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMg
PyB2ZXJ0aWNhbENvbnN0cmFpbnRzLT5sb2dpY2FsSGVpZ2h0IDogV1RGOjpudWxsb3B0KTsKKyAg
ICBhdXRvIGhlaWdodElzQXV0byA9ICFvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0ICYm
IGlzSGVpZ2h0QXV0byhyZXBsYWNlZEJveCk7CisgICAgYXV0byB3aWR0aElzQXV0byA9IHN0eWxl
LmxvZ2ljYWxXaWR0aCgpLmlzQXV0bygpOworCisgICAgaWYgKGhlaWdodElzQXV0byAmJiB3aWR0
aElzQXV0byAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNIZWlnaHQoKSkgeworICAgICAgICAv
LyAjMgorICAgICAgICBoZWlnaHQgPSByZXBsYWNlZEJveC5pbnRyaW5zaWNIZWlnaHQoKTsKKyAg
ICB9IGVsc2UgaWYgKGhlaWdodElzQXV0byAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNSYXRp
bygpKSB7CisgICAgICAgIC8vICMzCisgICAgICAgIGF1dG8gdXNlZFdpZHRoID0gZm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocmVwbGFjZWRCb3gpLmNvbnRlbnRCb3hXaWR0aCgpOwor
ICAgICAgICBoZWlnaHQgPSB1c2VkV2lkdGggLyByZXBsYWNlZEJveC5pbnRyaW5zaWNSYXRpbygp
OworICAgIH0gZWxzZSBpZiAoaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNp
Y0hlaWdodCgpKSB7CisgICAgICAgIC8vICM0CisgICAgICAgIGhlaWdodCA9IHJlcGxhY2VkQm94
LmludHJpbnNpY0hlaWdodCgpOworICAgIH0gZWxzZSBpZiAoaGVpZ2h0SXNBdXRvKSB7CisgICAg
ICAgIC8vICM1CisgICAgICAgIGhlaWdodCA9IHsgMTUwIH07CisgICAgfQorCisgICAgQVNTRVJU
KGhlaWdodCk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQs
IHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAtPiBpbmZsb3cgcmVwbGFjZWQgLT4gaGVpZ2h0
KCIgPDwgKmhlaWdodCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZv
cmUgPDwgInB4LCAiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciA8PCAicHgpIC0+IGxheW91
dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOworICAgIHJldHVybiB7ICpoZWlnaHQsIHVz
ZWRWZXJ0aWNhbE1hcmdpbiB9OworfQorCitDb250ZW50V2lkdGhBbmRNYXJnaW4gRm9ybWF0dGlu
Z0dlb21ldHJ5OjppbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBs
YWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCBPcHRpb25hbDxWZXJ0aWNhbENvbnN0cmFpbnRzPiB2ZXJ0aWNhbENv
bnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMpCit7CisgICAgLy8gMTAuMy4yIElubGluZSwgcmVwbGFjZWQgZWxlbWVu
dHMKKyAgICAvLworICAgIC8vIEEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nIGZvciAnbWFyZ2lu
LWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGJlY29tZXMgYSB1c2VkIHZhbHVlIG9mICcwJy4KKyAg
ICAvLworICAgIC8vIDEuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgnIGJvdGggaGF2ZSBjb21wdXRl
ZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBhbHNvIGhhcyBhbiBpbnRyaW5zaWMg
d2lkdGgsIHRoZW4gdGhhdCBpbnRyaW5zaWMgd2lkdGggaXMgdGhlIHVzZWQgdmFsdWUgb2YgJ3dp
ZHRoJy4KKyAgICAvLworICAgIC8vIDIuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgnIGJvdGggaGF2
ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBoYXMgbm8gaW50cmlu
c2ljIHdpZHRoLCBidXQgZG9lcyBoYXZlIGFuIGludHJpbnNpYyBoZWlnaHQgYW5kIGludHJpbnNp
YyByYXRpbzsKKyAgICAvLyAgICBvciBpZiAnd2lkdGgnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9m
ICdhdXRvJywgJ2hlaWdodCcgaGFzIHNvbWUgb3RoZXIgY29tcHV0ZWQgdmFsdWUsIGFuZCB0aGUg
ZWxlbWVudCBkb2VzIGhhdmUgYW4gaW50cmluc2ljIHJhdGlvOworICAgIC8vICAgIHRoZW4gdGhl
IHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpczogKHVzZWQgaGVpZ2h0KSAqIChpbnRyaW5zaWMgcmF0
aW8pCisgICAgLy8KKyAgICAvLyAzLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUg
Y29tcHV0ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgaGFzIGFuIGludHJpbnNp
YyByYXRpbyBidXQgbm8gaW50cmluc2ljIGhlaWdodCBvciB3aWR0aCwKKyAgICAvLyAgICB0aGVu
IHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgdW5kZWZpbmVkIGluIENTUyAyLjIuIEhvd2V2
ZXIsIGl0IGlzIHN1Z2dlc3RlZCB0aGF0LCBpZiB0aGUgY29udGFpbmluZyBibG9jaydzIHdpZHRo
IGRvZXMgbm90IGl0c2VsZiBkZXBlbmQgb24gdGhlIHJlcGxhY2VkCisgICAgLy8gICAgZWxlbWVu
dCdzIHdpZHRoLCB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgY2FsY3VsYXRlZCBm
cm9tIHRoZSBjb25zdHJhaW50IGVxdWF0aW9uIHVzZWQgZm9yIGJsb2NrLWxldmVsLCBub24tcmVw
bGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cuCisgICAgLy8KKyAgICAvLyA0LiBPdGhlcndp
c2UsIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhlIGVs
ZW1lbnQgaGFzIGFuIGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0IGludHJpbnNpYyB3aWR0aCBp
cyB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnLgorICAgIC8vCisgICAgLy8gNS4gT3RoZXJ3aXNl
LCBpZiAnd2lkdGgnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYnV0IG5vbmUgb2Yg
dGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG1ldCwgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lk
dGgnIGJlY29tZXMgMzAwcHguCisgICAgLy8gICAgSWYgMzAwcHggaXMgdG9vIHdpZGUgdG8gZml0
IHRoZSBkZXZpY2UsIFVBcyBzaG91bGQgdXNlIHRoZSB3aWR0aCBvZiB0aGUgbGFyZ2VzdCByZWN0
YW5nbGUgdGhhdCBoYXMgYSAyOjEgcmF0aW8gYW5kIGZpdHMgdGhlIGRldmljZSBpbnN0ZWFkLgor
CisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBGb3JtYXR0aW5nR2VvbWV0cnk6
OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFp
bnRzKTsKKworICAgIGF1dG8gdXNlZE1hcmdpblN0YXJ0ID0gWyZdIHsKKyAgICAgICAgaWYgKG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbikKKyAgICAgICAgICAgIHJldHVybiBvdmVy
cmlkZGVuSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4tPnN0YXJ0OworICAgICAgICByZXR1cm4gY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMF9sdSk7CisgICAgfTsKKworICAg
IGF1dG8gdXNlZE1hcmdpbkVuZCA9IFsmXSB7CisgICAgICAgIGlmIChvdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcy5tYXJnaW4pCisgICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGRlbkhvcml6b250
YWxWYWx1ZXMubWFyZ2luLT5lbmQ7CisgICAgICAgIHJldHVybiBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uZW5kLnZhbHVlT3IoMF9sdSk7CisgICAgfTsKKworICAgIGF1dG8gd2lkdGggPSBvdmVy
cmlkZGVuSG9yaXpvbnRhbFZhbHVlcy53aWR0aCA/IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVz
LndpZHRoIDogY29tcHV0ZWRXaWR0aChyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LmxvZ2ljYWxXaWR0aCk7CisgICAgYXV0byBoZWlnaHRJc0F1dG8gPSBpc0hlaWdodEF1dG8ocmVw
bGFjZWRCb3gpOworICAgIGF1dG8gaGVpZ2h0ID0gY29tcHV0ZWRIZWlnaHQocmVwbGFjZWRCb3gs
IHZlcnRpY2FsQ29uc3RyYWludHMgPyB2ZXJ0aWNhbENvbnN0cmFpbnRzLT5sb2dpY2FsSGVpZ2h0
IDogV1RGOjpudWxsb3B0KTsKKworICAgIGlmICghd2lkdGggJiYgaGVpZ2h0SXNBdXRvICYmIHJl
cGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkpIHsKKyAgICAgICAgLy8gIzEKKyAgICAgICAg
d2lkdGggPSByZXBsYWNlZEJveC5pbnRyaW5zaWNXaWR0aCgpOworICAgIH0gZWxzZSBpZiAoKCF3
aWR0aCAmJiBoZWlnaHRJc0F1dG8gJiYgIXJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkg
JiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkgJiYgcmVwbGFjZWRCb3guaGFzSW50
cmluc2ljUmF0aW8oKSkKKyAgICAgICAgfHwgKCF3aWR0aCAmJiBoZWlnaHQgJiYgcmVwbGFjZWRC
b3guaGFzSW50cmluc2ljUmF0aW8oKSkpIHsKKyAgICAgICAgLy8gIzIKKyAgICAgICAgd2lkdGgg
PSBoZWlnaHQudmFsdWVPcihyZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNIZWlnaHQoKSkgKiByZXBs
YWNlZEJveC5pbnRyaW5zaWNSYXRpbygpOworICAgIH0gZWxzZSBpZiAoIXdpZHRoICYmIGhlaWdo
dElzQXV0byAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNSYXRpbygpICYmICFyZXBsYWNlZEJv
eC5oYXNJbnRyaW5zaWNXaWR0aCgpICYmICFyZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNIZWlnaHQo
KSkgeworICAgICAgICAvLyAjMworICAgICAgICAvLyBGSVhNRTogdW5kZWZpbmVkIGJ1dCBzdXJl
bHkgZG9hYmxlLgorICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgIH0g
ZWxzZSBpZiAoIXdpZHRoICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkpIHsKKyAg
ICAgICAgLy8gIzQKKyAgICAgICAgd2lkdGggPSByZXBsYWNlZEJveC5pbnRyaW5zaWNXaWR0aCgp
OworICAgIH0gZWxzZSBpZiAoIXdpZHRoKSB7CisgICAgICAgIC8vICM1CisgICAgICAgIHdpZHRo
ID0geyAzMDAgfTsKKyAgICB9CisKKyAgICBBU1NFUlQod2lkdGgpOworCisgICAgTE9HX1dJVEhf
U1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0aF1bTWFyZ2lu
XSAtPiBpbmZsb3cgcmVwbGFjZWQgLT4gd2lkdGgoIiA8PCAqd2lkdGggPDwgInB4KSBtYXJnaW4o
IiA8PCB1c2VkTWFyZ2luU3RhcnQoKSA8PCAicHgsICIgPDwgdXNlZE1hcmdpbkVuZCgpIDw8ICJw
eCkgLT4gbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8ICIpIik7CisgICAgcmV0dXJuIHsg
KndpZHRoLCB7IHVzZWRNYXJnaW5TdGFydCgpLCB1c2VkTWFyZ2luRW5kKCkgfSB9OworfQorCitM
YXlvdXRTaXplIEZvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zm
c2V0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cykgY29uc3QKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5G
bG93UG9zaXRpb25lZCgpKTsKKworICAgIC8vIDkuNC4zIFJlbGF0aXZlIHBvc2l0aW9uaW5nCisg
ICAgLy8KKyAgICAvLyBUaGUgJ3RvcCcgYW5kICdib3R0b20nIHByb3BlcnRpZXMgbW92ZSByZWxh
dGl2ZWx5IHBvc2l0aW9uZWQgZWxlbWVudChzKSB1cCBvciBkb3duIHdpdGhvdXQgY2hhbmdpbmcg
dGhlaXIgc2l6ZS4KKyAgICAvLyBUb3AnIG1vdmVzIHRoZSBib3hlcyBkb3duLCBhbmQgJ2JvdHRv
bScgbW92ZXMgdGhlbSB1cC4gU2luY2UgYm94ZXMgYXJlIG5vdCBzcGxpdCBvciBzdHJldGNoZWQg
YXMgYSByZXN1bHQgb2YgJ3RvcCcgb3IgJ2JvdHRvbScsIHRoZSB1c2VkIHZhbHVlcyBhcmUgYWx3
YXlzOiB0b3AgPSAtYm90dG9tLgorICAgIC8vCisgICAgLy8gMS4gSWYgYm90aCBhcmUgJ2F1dG8n
LCB0aGVpciB1c2VkIHZhbHVlcyBhcmUgYm90aCAnMCcuCisgICAgLy8gMi4gSWYgb25lIG9mIHRo
ZW0gaXMgJ2F1dG8nLCBpdCBiZWNvbWVzIHRoZSBuZWdhdGl2ZSBvZiB0aGUgb3RoZXIuCisgICAg
Ly8gMy4gSWYgbmVpdGhlciBpcyAnYXV0bycsICdib3R0b20nIGlzIGlnbm9yZWQgKGkuZS4sIHRo
ZSB1c2VkIHZhbHVlIG9mICdib3R0b20nIHdpbGwgYmUgbWludXMgdGhlIHZhbHVlIG9mICd0b3An
KS4KKworICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byBjb250
YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7CisK
KyAgICBhdXRvIHRvcCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxv
Z2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworCisgICAgaWYgKCF0b3AgJiYg
IWJvdHRvbSkgeworICAgICAgICAvLyAjMQorICAgICAgICB0b3AgPSBib3R0b20gPSB7IDAgfTsK
KyAgICB9IGVsc2UgaWYgKCF0b3ApIHsKKyAgICAgICAgLy8gIzIKKyAgICAgICAgdG9wID0gLSpi
b3R0b207CisgICAgfSBlbHNlIGlmICghYm90dG9tKSB7CisgICAgICAgIC8vICMzCisgICAgICAg
IGJvdHRvbSA9IC0qdG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vICM0CisgICAgICAgIGJv
dHRvbSA9IFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAvLyBGb3IgcmVsYXRpdmVseSBwb3Np
dGlvbmVkIGVsZW1lbnRzLCAnbGVmdCcgYW5kICdyaWdodCcgbW92ZSB0aGUgYm94KGVzKSBob3Jp
em9udGFsbHksIHdpdGhvdXQgY2hhbmdpbmcgdGhlaXIgc2l6ZS4KKyAgICAvLyAnTGVmdCcgbW92
ZXMgdGhlIGJveGVzIHRvIHRoZSByaWdodCwgYW5kICdyaWdodCcgbW92ZXMgdGhlbSB0byB0aGUg
bGVmdC4KKyAgICAvLyBTaW5jZSBib3hlcyBhcmUgbm90IHNwbGl0IG9yIHN0cmV0Y2hlZCBhcyBh
IHJlc3VsdCBvZiAnbGVmdCcgb3IgJ3JpZ2h0JywgdGhlIHVzZWQgdmFsdWVzIGFyZSBhbHdheXM6
IGxlZnQgPSAtcmlnaHQuCisgICAgLy8KKyAgICAvLyAxLiBJZiBib3RoICdsZWZ0JyBhbmQgJ3Jp
Z2h0JyBhcmUgJ2F1dG8nICh0aGVpciBpbml0aWFsIHZhbHVlcyksIHRoZSB1c2VkIHZhbHVlcyBh
cmUgJzAnIChpLmUuLCB0aGUgYm94ZXMgc3RheSBpbiB0aGVpciBvcmlnaW5hbCBwb3NpdGlvbiku
CisgICAgLy8gMi4gSWYgJ2xlZnQnIGlzICdhdXRvJywgaXRzIHVzZWQgdmFsdWUgaXMgbWludXMg
dGhlIHZhbHVlIG9mICdyaWdodCcgKGkuZS4sIHRoZSBib3hlcyBtb3ZlIHRvIHRoZSBsZWZ0IGJ5
IHRoZSB2YWx1ZSBvZiAncmlnaHQnKS4KKyAgICAvLyAzLiBJZiAncmlnaHQnIGlzIHNwZWNpZmll
ZCBhcyAnYXV0bycsIGl0cyB1c2VkIHZhbHVlIGlzIG1pbnVzIHRoZSB2YWx1ZSBvZiAnbGVmdCcu
CisgICAgLy8gNC4gSWYgbmVpdGhlciAnbGVmdCcgbm9yICdyaWdodCcgaXMgJ2F1dG8nLCB0aGUg
cG9zaXRpb24gaXMgb3Zlci1jb25zdHJhaW5lZCwgYW5kIG9uZSBvZiB0aGVtIGhhcyB0byBiZSBp
Z25vcmVkLgorICAgIC8vICAgIElmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBpcyAnbHRyJywgdGhlIHZhbHVlIG9mICdsZWZ0JyB3aW5zIGFuZCAncmln
aHQnIGJlY29tZXMgLSdsZWZ0Jy4KKyAgICAvLyAgICBJZiAnZGlyZWN0aW9uJyBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBpcyAncnRsJywgJ3JpZ2h0JyB3aW5zIGFuZCAnbGVmdCcgaXMgaWdub3Jl
ZC4KKworICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbExlZnQoKSwg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gcmlnaHQgPSBjb21wdXRlZFZhbHVlKHN0
eWxlLmxvZ2ljYWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisKKyAgICBpZiAoIWxl
ZnQgJiYgIXJpZ2h0KSB7CisgICAgICAgIC8vICMxCisgICAgICAgIGxlZnQgPSByaWdodCA9IHsg
MCB9OworICAgIH0gZWxzZSBpZiAoIWxlZnQpIHsKKyAgICAgICAgLy8gIzIKKyAgICAgICAgbGVm
dCA9IC0qcmlnaHQ7CisgICAgfSBlbHNlIGlmICghcmlnaHQpIHsKKyAgICAgICAgLy8gIzMKKyAg
ICAgICAgcmlnaHQgPSAtKmxlZnQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gIzQKKyAgICAg
ICAgYXV0byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgICAgICBpZiAoaXNMZWZ0
VG9SaWdodERpcmVjdGlvbikKKyAgICAgICAgICAgIHJpZ2h0ID0gLSpsZWZ0OworICAgICAgICBl
bHNlCisgICAgICAgICAgICBsZWZ0ID0gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIEFTU0VS
VCghYm90dG9tIHx8ICp0b3AgPT0gLSpib3R0b20pOworICAgIEFTU0VSVCghbGVmdCB8fCAqbGVm
dCA9PSAtKnJpZ2h0KTsKKworICAgIGF1dG8gdG9wUG9zaXRpb25PZmZzZXQgPSAqdG9wOworICAg
IGF1dG8gbGVmdFBvc2l0aW9uT2Zmc2V0ID0gbGVmdC52YWx1ZU9yKC0qcmlnaHQpOworCisgICAg
TE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3Np
dGlvbl0gLT4gcG9zaXRpb25lZCBpbmZsb3cgLT4gdG9wIG9mZnNldCgiIDw8IHRvcFBvc2l0aW9u
T2Zmc2V0IDw8ICJweCkgbGVmdCBvZmZzZXQoIiA8PCBsZWZ0UG9zaXRpb25PZmZzZXQgPDwgInB4
KSBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAgcmV0dXJuIHsgbGVmdFBv
c2l0aW9uT2Zmc2V0LCB0b3BQb3NpdGlvbk9mZnNldCB9OworfQorCitpbmxpbmUgc3RhdGljIFdy
aXRpbmdNb2RlIHVzZWRXcml0aW5nTW9kZShjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXdyaXRpbmctbW9kZXMtNC8jbG9naWNhbC1kaXJl
Y3Rpb24tbGF5b3V0CisgICAgLy8gRmxvdy1yZWxhdGl2ZSBkaXJlY3Rpb25zIGFyZSBjYWxjdWxh
dGVkIHdpdGggcmVzcGVjdCB0byB0aGUgd3JpdGluZyBtb2RlIG9mIHRoZSBjb250YWluaW5nIGJs
b2NrIG9mIHRoZSBib3guCisgICAgLy8gRm9yIGlubGluZS1sZXZlbCBib3hlcywgdGhlIHdyaXRp
bmcgbW9kZSBvZiB0aGUgcGFyZW50IGJveCBpcyB1c2VkIGluc3RlYWQuCisgICAgcmV0dXJuIGxh
eW91dEJveC5pc0lubGluZUxldmVsQm94KCkgPyBsYXlvdXRCb3gucGFyZW50KCkuc3R5bGUoKS53
cml0aW5nTW9kZSgpIDogbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCkud3JpdGlu
Z01vZGUoKTsKK30KKworRWRnZXMgRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZEJvcmRlcihj
b25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3sKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJv
eC5zdHlsZSgpOworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwg
c3RyZWFtIDw8ICJbQm9yZGVyXSAtPiBsYXlvdXRCb3g6ICIgPDwgJmxheW91dEJveCk7CisgICAg
cmV0dXJuIHsKKyAgICAgICAgeyBMYXlvdXRVbml0KHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpKSwg
TGF5b3V0VW5pdChzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCkpIH0sCisgICAgICAgIHsgTGF5b3V0
VW5pdChzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKSwgTGF5b3V0VW5pdChzdHlsZS5ib3JkZXJCb3R0
b21XaWR0aCgpKSB9CisgICAgfTsKK30KKworT3B0aW9uYWw8RWRnZXM+IEZvcm1hdHRpbmdHZW9t
ZXRyeTo6Y29tcHV0ZWRQYWRkaW5nKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBMYXlvdXRV
bml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSBjb25zdAoreworICAgIGlmICghbGF5b3V0Qm94Lmlz
UGFkZGluZ0FwcGxpY2FibGUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZv
cm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQYWRkaW5nXSAtPiBsYXlvdXRCb3g6
ICIgPDwgJmxheW91dEJveCk7CisgICAgcmV0dXJuIEVkZ2VzIHsKKyAgICAgICAgeyB2YWx1ZUZv
ckxlbmd0aChzdHlsZS5wYWRkaW5nTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIHZhbHVl
Rm9yTGVuZ3RoKHN0eWxlLnBhZGRpbmdSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkgfSwK
KyAgICAgICAgeyB2YWx1ZUZvckxlbmd0aChzdHlsZS5wYWRkaW5nVG9wKCksIGNvbnRhaW5pbmdC
bG9ja1dpZHRoKSwgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFkZGluZ0JvdHRvbSgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCkgfQorICAgIH07Cit9CisKK0NvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiBG
b3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxh
eW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWlu
dHMpIGNvbnN0Cit7CisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICBh
dXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxX
aWR0aDsKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUodXNlZFdyaXRpbmdNb2RlKGxh
eW91dEJveCkpKQorICAgICAgICByZXR1cm4geyBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpbkxl
ZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblJp
Z2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9OworICAgIHJldHVybiB7IGNvbXB1dGVkVmFs
dWUoc3R5bGUubWFyZ2luVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRWYWx1
ZShzdHlsZS5tYXJnaW5Cb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07Cit9CisKK0Nv
bXB1dGVkVmVydGljYWxNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2Fs
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cykgY29uc3QKK3sKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91
dEJveC5zdHlsZSgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFs
Q29uc3RyYWludHMubG9naWNhbFdpZHRoOworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSh1c2VkV3JpdGluZ01vZGUobGF5b3V0Qm94KSkpCisgICAgICAgIHJldHVybiB7IGNvbXB1dGVk
VmFsdWUoc3R5bGUubWFyZ2luVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRW
YWx1ZShzdHlsZS5tYXJnaW5Cb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07CisgICAg
cmV0dXJuIHsgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5MZWZ0KCksIGNvbnRhaW5pbmdCbG9j
a1dpZHRoKSwgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5SaWdodCgpLCBjb250YWluaW5nQmxv
Y2tXaWR0aCkgfTsKK30KKworSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBGb3JtYXR0aW5nR2Vv
bWV0cnk6OmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGgpIGNvbnN0Cit7CisgICAgYXV0byYg
c3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICBhdXRvIG1pbldpZHRoID0gZml4ZWRWYWx1
ZShzdHlsZS5sb2dpY2FsTWluV2lkdGgoKSk7CisgICAgYXV0byBtYXhXaWR0aCA9IGZpeGVkVmFs
dWUoc3R5bGUubG9naWNhbE1heFdpZHRoKCkpOworICAgIGlmICghbWluV2lkdGggJiYgIW1heFdp
ZHRoKQorICAgICAgICByZXR1cm4gaW50cmluc2ljV2lkdGg7CisKKyAgICBpZiAobWF4V2lkdGgp
IHsKKyAgICAgICAgaW50cmluc2ljV2lkdGgubWluaW11bSA9IHN0ZDo6bWluKCptYXhXaWR0aCwg
aW50cmluc2ljV2lkdGgubWluaW11bSk7CisgICAgICAgIGludHJpbnNpY1dpZHRoLm1heGltdW0g
PSBzdGQ6Om1pbigqbWF4V2lkdGgsIGludHJpbnNpY1dpZHRoLm1heGltdW0pOworICAgIH0KKwor
ICAgIGlmIChtaW5XaWR0aCkgeworICAgICAgICBpbnRyaW5zaWNXaWR0aC5taW5pbXVtID0gc3Rk
OjptYXgoKm1pbldpZHRoLCBpbnRyaW5zaWNXaWR0aC5taW5pbXVtKTsKKyAgICAgICAgaW50cmlu
c2ljV2lkdGgubWF4aW11bSA9IHN0ZDo6bWF4KCptaW5XaWR0aCwgaW50cmluc2ljV2lkdGgubWF4
aW11bSk7CisgICAgfQorCisgICAgQVNTRVJUKGludHJpbnNpY1dpZHRoLm1pbmltdW0gPD0gaW50
cmluc2ljV2lkdGgubWF4aW11bSk7CisgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoOworfQorCitD
b25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQgRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb25zdHJh
aW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gp
Cit7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5
Rm9yQm94KGNvbnRhaW5lckJveCk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgeyBib3hHZW9tZXRy
eS5wYWRkaW5nQm94TGVmdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94V2lkdGgoKSB9LAorICAg
ICAgICB7IGJveEdlb21ldHJ5LnBhZGRpbmdCb3hUb3AoKSwgYm94R2VvbWV0cnkucGFkZGluZ0Jv
eEhlaWdodCgpIH0sCisgICAgICAgIGJveEdlb21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpIH07Cit9
CisKK0NvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbnN0
cmFpbnRzRm9ySW5GbG93Q29udGVudChjb25zdCBDb250YWluZXJCb3gmIGNvbnRhaW5lckJveCwg
T3B0aW9uYWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbj4gZXNjYXBlUmVhc29uKSBj
b25zdAoreworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9t
ZXRyeUZvckJveChjb250YWluZXJCb3gsIGVzY2FwZVJlYXNvbik7CisgICAgcmV0dXJuIHsgeyBi
b3hHZW9tZXRyeS5jb250ZW50Qm94TGVmdCgpLCBib3hHZW9tZXRyeS5jb250ZW50Qm94V2lkdGgo
KSB9LCB7IGJveEdlb21ldHJ5LmNvbnRlbnRCb3hUb3AoKSwgY29tcHV0ZWRIZWlnaHQoY29udGFp
bmVyQm94KSB9IH07Cit9CisKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWM5OTM2N2Q2YWYwMDUwZDg3NWY2ODMxOTdiM2M2MjQ0MmUxZDM0MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
Rm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5j
bHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIExheW91dCB7CisKK2NsYXNzIFJlcGxhY2VkQm94Oworc3RydWN0IENvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbjsKK3N0cnVjdCBDb21wdXRlZFZlcnRpY2FsTWFyZ2luOworY2xhc3MgQ29udGFp
bmVyQm94Oworc3RydWN0IENvbnRlbnRIZWlnaHRBbmRNYXJnaW47CitzdHJ1Y3QgQ29udGVudFdp
ZHRoQW5kTWFyZ2luOworc3RydWN0IEVkZ2VzOworc3RydWN0IEhvcml6b250YWxHZW9tZXRyeTsK
K2NsYXNzIExheW91dFN0YXRlOworc3RydWN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzOwor
c3RydWN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlczsKK3N0cnVjdCBWZXJ0aWNhbEdlb21ldHJ5
OworCisvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgZ2VuZXJpYyBwb3NpdGlvbmluZyBhbmQgc2l6
aW5nLgorY2xhc3MgRm9ybWF0dGluZ0dlb21ldHJ5IHsKK3B1YmxpYzoKKyAgICBGb3JtYXR0aW5n
R2VvbWV0cnkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmKTsKKworICAgIFZlcnRpY2FsR2VvbWV0
cnkgb3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRl
blZlcnRpY2FsVmFsdWVzJikgY29uc3Q7CisgICAgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxv
d0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250
YWxWYWx1ZXMmKTsKKworICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gZmxvYXRpbmdDb250ZW50
SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYs
IGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OworICAgIENvbnRlbnRXaWR0
aEFuZE1hcmdpbiBmbG9hdGluZ0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cyYpOworCisgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbmxpbmVSZXBsYWNlZENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmLCBPcHRpb25hbDxWZXJ0aWNhbENvbnN0cmFpbnRzPiwgY29uc3QgT3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzJikgY29uc3Q7CisgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGlubGluZVJl
cGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiwgT3B0aW9uYWw8VmVydGljYWxDb25zdHJhaW50cz4sIGNvbnN0
IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7CisKKyAgICBMYXlvdXRTaXplIGluRmxvd1Bv
c2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmKSBjb25zdDsKKworICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gY29tcGxpY2F0ZWRD
YXNlcyhjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNocmlua1RvRml0
V2lkdGgoY29uc3QgQm94JiwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCk7CisKKyAgICBFZGdl
cyBjb21wdXRlZEJvcmRlcihjb25zdCBCb3gmKSBjb25zdDsKKyAgICBPcHRpb25hbDxFZGdlcz4g
Y29tcHV0ZWRQYWRkaW5nKGNvbnN0IEJveCYsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lk
dGgpIGNvbnN0OworCisgICAgQ29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luIGNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25z
dDsKKyAgICBDb21wdXRlZFZlcnRpY2FsTWFyZ2luIGNvbXB1dGVkVmVydGljYWxNYXJnaW4oY29u
c3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CisKKyAgICBPcHRp
b25hbDxMYXlvdXRVbml0PiBjb21wdXRlZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9w
ZXJ0eSwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3Q7CisgICAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gZml4ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHkp
IGNvbnN0OworCisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRNaW5IZWlnaHQoY29u
c3QgQm94JiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gV1RG
OjpudWxsb3B0KSBjb25zdDsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZE1heEhl
aWdodChjb25zdCBCb3gmLCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250YWluaW5nQmxvY2tIZWln
aHQgPSBXVEY6Om51bGxvcHQpIGNvbnN0OworCisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29t
cHV0ZWRNaW5XaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRo
KTsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZE1heFdpZHRoKGNvbnN0IEJveCYs
IExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworCisgICAgSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyBjb25zdHJhaW5CeU1pbk1heFdpZHRoKGNvbnN0IEJveCYsIEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9y
Rm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IENvbnRhaW5lckJveCYpIGNvbnN0OworCisgICAg
Q29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50IGNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29u
dGVudChjb25zdCBDb250YWluZXJCb3gmKTsKKyAgICBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRl
bnQgY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnN0IENvbnRhaW5lckJveCYsIE9wdGlv
bmFsPEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVSZWFzb24+ID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKKworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkSGVpZ2h0KGNvbnN0IEJveCYs
IE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IFdURjo6bnVsbG9w
dCkgY29uc3Q7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRXaWR0aChjb25zdCBC
b3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKworcHJvdGVjdGVkOgorICAg
IGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0
dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQorICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0
ZSgpIHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQorICAgIGNv
bnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9ybWF0dGluZ0NvbnRleHQ7IH0KKworcHJpdmF0ZToKKyAgICBWZXJ0aWNhbEdlb21ldHJ5
IG91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmLCBj
b25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKKyAgICBIb3Jpem9udGFsR2Vv
bWV0cnkgb3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgUmVwbGFjZWRC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFp
bnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIFZlcnRpY2Fs
R2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IENvbnRh
aW5lckJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IFZlcnRpY2FsQ29u
c3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKKyAgICBI
b3Jpem9udGFsR2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnko
Y29uc3QgQ29udGFpbmVyQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3Qg
T3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIENvbnRlbnRIZWlnaHRBbmRNYXJn
aW4gZmxvYXRpbmdSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGlj
YWxWYWx1ZXMmKSBjb25zdDsKKyAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdSZXBs
YWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7CisK
KyAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdOb25SZXBsYWNlZENvbnRlbnRXaWR0
aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25z
dCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOworCisgICAgTGF5b3V0VW5pdCBzdGF0aWNW
ZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBCb3gmLCBjb25zdCBW
ZXJ0aWNhbENvbnN0cmFpbnRzJikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzdGF0aWNIb3Jpem9u
dGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYpIGNvbnN0OworCisgICAgZW51bSBjbGFzcyBIZWlnaHRUeXBlIHsg
TWluLCBNYXgsIE5vcm1hbCB9OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkSGVp
Z2h0VmFsdWUoY29uc3QgQm94JiwgSGVpZ2h0VHlwZSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29u
dGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdDsKKworICAgIGVudW0gY2xhc3MgV2lkdGhUeXBlIHsg
TWluLCBNYXgsIE5vcm1hbCB9OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkV2lk
dGhWYWx1ZShjb25zdCBCb3gmLCBXaWR0aFR5cGUsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpOworCisgICAgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIG1fZm9ybWF0dGluZ0NvbnRl
eHQ7Cit9OworCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDU2OGFlZWMxZjVhNjgyOTM2ZDQ2YmJlNTJmZjY5NGU0YjE2MGY1NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0
dGluZ1F1aXJrcy5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGb3JtYXR0aW5nUXVpcmtzLmgiCisKKyNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1
ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5p
bmdCbG9jay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKwor
Rm9ybWF0dGluZ1F1aXJrczo6Rm9ybWF0dGluZ1F1aXJrcyhjb25zdCBGb3JtYXR0aW5nQ29udGV4
dCYgZm9ybWF0dGluZ0NvbnRleHQpCisgICAgOiBtX2Zvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRp
bmdDb250ZXh0KQoreworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdRdWlya3M6OmhlaWdodFZh
bHVlT2ZOZWFyZXN0Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGNvbnN0IEJveCYgbGF5
b3V0Qm94KSBjb25zdAoreworICAgIC8vIEluIHF1aXJrcyBtb2RlLCB3ZSBnbyBhbmQgdHJhdmVy
cyB0aGUgY29udGFpbmluZyBibG9jayBjaGFpbiB0byBmaW5kIGEgYmxvY2sgbGV2ZWwgYm94IHdp
dGggZml4ZWQgaGVpZ2h0IHZhbHVlLCBldmVuIGlmIGl0IG1lYW5zIGxlYXZpbmcKKyAgICAvLyB0
aGUgY3VycmVudCBmb3JtYXR0aW5nIGNvbnRleHQuIEZJWE1FOiBzdXJlbHkgd2UgbmVlZCB0byBk
byBzb21lIHRyaWNrcyBoZXJlIHdoZW4gYmxvY2sgZGlyZWN0aW9uIHN1cHBvcnQgaXMgYWRkZWQu
CisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgp
OworICAgIGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9ICZsYXlvdXRCb3guY29udGFpbmluZ0Jsb2Nr
KCk7CisgICAgTGF5b3V0VW5pdCBib2R5QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdpblBhZGRpbmdB
bmRCb3JkZXI7CisgICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jaykgeworICAgICAgICBhdXRvIGNv
bnRhaW5pbmdCbG9ja0hlaWdodCA9IGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS5sb2dpY2FsSGVp
Z2h0KCk7CisgICAgICAgIGlmIChjb250YWluaW5nQmxvY2tIZWlnaHQuaXNGaXhlZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIExheW91dFVuaXQoY29udGFpbmluZ0Jsb2NrSGVpZ2h0LnZhbHVlKCkg
LSBib2R5QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXIpOworCisgICAg
ICAgIC8vIElmIHRoZSBvbmx5IGZpeGVkIHZhbHVlIGJveCB3ZSBmaW5kIGlzIHRoZSBJQ0IsIHRo
ZW4gaWdub3JlIHRoZSBib2R5IGFuZCB0aGUgZG9jdW1lbnQgKHZlcnRpY2FsKSBtYXJnaW4sIHBh
ZGRpbmcgYW5kIGJvcmRlci4gU28gbXVjaCBxdWlya2luZXNzLgorICAgICAgICAvLyAtYW5kIGl0
J3MgdG90YWxseSBpbnNhbmUgYmVjYXVzZSBub3cgd2UgZnJlZWx5IHRyYXZlbCBhY3Jvc3MgZm9y
bWF0dGluZyBjb250ZXh0IGJvdW5kYXJpZXMgYW5kIGNvbXB1dGVkIG1hcmdpbnMgYXJlIG5vbmV4
aXN0ZW50LgorICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0JvZHlCb3goKSB8fCBjb250
YWluaW5nQmxvY2stPmlzRG9jdW1lbnRCb3goKSkgeworCisgICAgICAgICAgICBhdXRvIGdlb21l
dHJ5ID0gRm9ybWF0dGluZ0dlb21ldHJ5IHsgZm9ybWF0dGluZ0NvbnRleHQgfTsKKyAgICAgICAg
ICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRzID0gZ2VvbWV0cnkuY29uc3RyYWludHNGb3JJ
bkZsb3dDb250ZW50KGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCksIEZvcm1hdHRp
bmdDb250ZXh0OjpFc2NhcGVSZWFzb246OkZpbmRGaXhlZEhlaWdodEFuY2VzdG9yUXVpcmspLmhv
cml6b250YWw7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0gZ2VvbWV0cnkuY29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbigqY29udGFpbmluZ0Jsb2NrLCBob3Jpem9udGFsQ29uc3RyYWlu
dHMpOworCisgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0
Lmdlb21ldHJ5Rm9yQm94KCpjb250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdDb250ZXh0OjpFc2Nh
cGVSZWFzb246OkZpbmRGaXhlZEhlaWdodEFuY2VzdG9yUXVpcmspOworICAgICAgICAgICAgYXV0
byB2ZXJ0aWNhbFBhZGRpbmcgPSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSAr
IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApOworICAgICAgICAgICAgYXV0
byB2ZXJ0aWNhbEJvcmRlciA9IGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnku
Ym9yZGVyQm90dG9tKCk7CisgICAgICAgICAgICBib2R5QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdp
blBhZGRpbmdBbmRCb3JkZXIgKz0gdmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCkgKyB2
ZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApICsgdmVydGljYWxQYWRkaW5nICsgdmVydGlj
YWxCb3JkZXI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXM8SW5pdGlhbENvbnRhaW5pbmdC
bG9jaz4oKmNvbnRhaW5pbmdCbG9jaykpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY29u
dGFpbmluZ0Jsb2NrID0gJmNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAg
fQorICAgIC8vIEluaXRpYWwgY29udGFpbmluZyBibG9jayBoYXMgdG8gaGF2ZSBhIGhlaWdodC4K
KyAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94Lmlu
aXRpYWxDb250YWluaW5nQmxvY2soKSwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6
RmluZEZpeGVkSGVpZ2h0QW5jZXN0b3JRdWlyaykuY29udGVudEJveCgpLmhlaWdodCgpIC0gYm9k
eUFuZERvY3VtZW50VmVydGljYWxNYXJnaW5QYWRkaW5nQW5kQm9yZGVyOworfQorCit9Cit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL0Zvcm1hdHRpbmdRdWlya3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2YwZDgyNDEyYmE1ZWI5
Zjk5NGY4ZTk2ZWM4MDdmMjkzMDZhMDkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmgKQEAgLTAsMCAr
MSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgRm9ybWF0dGlu
Z1F1aXJrcyB7CitwdWJsaWM6CisgICAgRm9ybWF0dGluZ1F1aXJrcyhjb25zdCBGb3JtYXR0aW5n
Q29udGV4dCYpOworCisgICAgTGF5b3V0VW5pdCBoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5p
bmdCbG9ja1dpdGhGaXhlZEhlaWdodChjb25zdCBCb3gmKSBjb25zdDsKKworcHJvdGVjdGVkOgor
ICAgIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9y
bWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQorICAgIGNvbnN0IEZvcm1hdHRpbmdDb250
ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRl
eHQ7IH0KKworICAgIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBtX2Zvcm1hdHRpbmdDb250ZXh0
OworfTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0
dGluZ0NvbnRleHQuY3BwCmluZGV4IDBmNTU1ZjgxOTM4MWU3M2FmM2UxOWMwMmYzOGIwZmNmM2Jk
MTIwNGIuLmZmNWM1MDNmNGQwNTFjYzU4N2UzYzAzY2FjZDRhMzNjMGY2YmVlOGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tG
b3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMjgsNyArMjgs
OSBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRl
ICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0
YXRlLmgiCisjaW5jbHVkZSAiQmxvY2tNYXJnaW5Db2xsYXBzZS5oIgogI2luY2x1ZGUgIkZsb2F0
aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbnZh
bGlkYXRpb25TdGF0ZS5oIgpAQCAtMjg0LDE1ICsyODYsMTYgQEAgdm9pZCBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpwcmVjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckJveEFuZEFuY2VzdG9ycyhj
b25zdAogICAgIC8vCiAgICAgLy8gVGhlIGlkZWEgaGVyZSBpcyB0aGF0IGFzIGxvbmcgYXMgd2Ug
ZG9uJ3QgY3Jvc3MgdGhlIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCBib3VuZGFyeSwgd2Ugc2hv
dWxkIGJlIGFibGUgdG8gcHJlLWNvbXB1dGUgdGhlIGZpbmFsIHRvcCBwb3NpdGlvbi4KICAgICAv
LyBGSVhNRTogd2UgY3VycmVudGx5IGRvbid0IGFjY291bnQgZm9yIHRoZSAiY2xlYXIiIHByb3Bl
cnR5IHdoZW4gY29tcHV0aW5nIHRoZSBmaW5hbCBwb3NpdGlvbiBmb3IgYW4gYW5jZXN0b3IuCisg
ICAgYXV0byBmb3JtYXR0aW5nR2VvbWV0cnkgPSBnZW9tZXRyeSgpOwogICAgIGZvciAoYXV0byog
YW5jZXN0b3IgPSAmbGF5b3V0Qm94OyBhbmNlc3RvciAmJiBhbmNlc3RvciAhPSAmcm9vdCgpOyBh
bmNlc3RvciA9ICZhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgYXV0byBj
b25zdHJhaW50c0ZvckFuY2VzdG9yID0gWyZdIHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRhaW5p
bmdCbG9jayA9IGFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHJldHVy
biAmY29udGFpbmluZ0Jsb2NrID09ICZyb290KCkgPyBjb25zdHJhaW50c1BhaXIuZm9ybWF0dGlu
Z0NvbnRleHRSb290IDogZ2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29u
dGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiAmY29udGFpbmluZ0Jsb2NrID09ICZy
b290KCkgPyBjb25zdHJhaW50c1BhaXIuZm9ybWF0dGluZ0NvbnRleHRSb290IDogZm9ybWF0dGlu
Z0dlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb250YWluaW5nQmxvY2spOwog
ICAgICAgICB9KCk7CiAKLSAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gZ2Vv
bWV0cnkoKS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKCphbmNlc3RvciwgY29uc3RyYWludHNGb3JB
bmNlc3Rvci5ob3Jpem9udGFsKTsKKyAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2lu
ID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkVmVydGljYWxNYXJnaW4oKmFuY2VzdG9yLCBj
b25zdHJhaW50c0ZvckFuY2VzdG9yLmhvcml6b250YWwpOwogICAgICAgICBhdXRvIHVzZWROb25D
b2xsYXBzZWRNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7
IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGlj
YWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwotICAgICAgICBhdXRvIHByZWNvbXB1dGVkTWFy
Z2luQmVmb3JlID0gbWFyZ2luQ29sbGFwc2UoKS5wcmVjb21wdXRlZE1hcmdpbkJlZm9yZSgqYW5j
ZXN0b3IsIHVzZWROb25Db2xsYXBzZWRNYXJnaW4pOworICAgICAgICBhdXRvIHByZWNvbXB1dGVk
TWFyZ2luQmVmb3JlID0gbWFyZ2luQ29sbGFwc2UoKS5wcmVjb21wdXRlZE1hcmdpbkJlZm9yZSgq
YW5jZXN0b3IsIHVzZWROb25Db2xsYXBzZWRNYXJnaW4sIGZvcm1hdHRpbmdHZW9tZXRyeSk7CiAK
ICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRy
eSgqYW5jZXN0b3IpOwogICAgICAgICBhdXRvIG5vbkNvbGxhcHNlZFZhbHVlcyA9IFVzZWRWZXJ0
aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUu
bm9uQ29sbGFwc2VkVmFsdWUsIHsgfSB9OwpAQCAtNDIwLDEwICs0MjMsMTAgQEAgdm9pZCBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBjb25zdAogICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hIZWlnaHQoY29udGVu
dEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KTsKICAgICBib3hHZW9tZXRyeS5zZXRWZXJ0
aWNhbE1hcmdpbih7IG1hcmdpbkJlZm9yZSh2ZXJ0aWNhbE1hcmdpbiksIG1hcmdpbkFmdGVyKHZl
cnRpY2FsTWFyZ2luKSB9KTsKICAgICAvLyBBZGp1c3QgdGhlIHByZXZpb3VzIHNpYmxpbmcncyBt
YXJnaW4gYm90dG9tIG5vdyB0aGF0IHRoaXMgYm94J3MgdmVydGljYWwgbWFyZ2luIGlzIGNvbXB1
dGVkLgotICAgIE1hcmdpbkNvbGxhcHNlOjp1cGRhdGVNYXJnaW5BZnRlckZvclByZXZpb3VzU2li
bGluZygqdGhpcywgbWFyZ2luQ29sbGFwc2UsIGxheW91dEJveCk7CisgICAgdXBkYXRlTWFyZ2lu
QWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcobGF5b3V0Qm94KTsKIH0KIAotRm9ybWF0dGluZ0NvbnRl
eHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkKK0ludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCkKIHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3Rh
dGUoKTsKICAgICBBU1NFUlQoIWZvcm1hdHRpbmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCkpOwpAQCAtNTU3LDYgKzU2MCw1OCBAQCBMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OnZlcnRpY2FsUG9zaXRpb25XaXRoTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0QgogICAg
IHJldHVybiBjb250YWluaW5nQmxvY2tDb250ZW50Qm94VG9wICsgbWFyZ2luQmVmb3JlKHZlcnRp
Y2FsTWFyZ2luKTsKIH0KIAordm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojp1cGRhdGVNYXJn
aW5BZnRlckZvclByZXZpb3VzU2libGluZyhjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBh
dXRvIG1hcmdpbkNvbGxhcHNlID0gdGhpcy0+bWFyZ2luQ29sbGFwc2UoKTsKKyAgICBhdXRvJiBm
b3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKKyAgICAvLyAxLiBHZXQg
dGhlIG1hcmdpbiBiZWZvcmUgdmFsdWUgZnJvbSB0aGUgbmV4dCBpbi1mbG93IHNpYmxpbmcuIFRo
aXMgaXMgdGhlIHNhbWUgYXMgdGhpcyBib3gncyBtYXJnaW4gYWZ0ZXIgdmFsdWUgbm93IHNpbmNl
IHRoZXkgYXJlIGNvbGxhcHNlZC4KKyAgICAvLyAyLiBVcGRhdGUgdGhlIGNvbGxhcHNlZCBtYXJn
aW4gYWZ0ZXIgdmFsdWUgYXMgd2VsbCBhcyB0aGUgcG9zaXRpdmUvbmVnYXRpdmUgY2FjaGUuCisg
ICAgLy8gMy4gQ2hlY2sgaWYgdGhlIGJveCdzIG1hcmdpbnMgY29sbGFwc2UgdGhyb3VnaC4KKyAg
ICAvLyA0LiBJZiBzbywgdXBkYXRlIHRoZSBwb3NpdGl2ZS9uZWdhdGl2ZSBjYWNoZS4KKyAgICAv
LyA1LiBJbiBjYXNlIG9mIGNvbGxhcHNlZCB0aHJvdWdoIG1hcmdpbnMgY2hlY2sgaWYgdGhlIGJl
Zm9yZSBtYXJnaW4gY29sbGFwZXMgd2l0aCB0aGUgcHJldmlvdXMgaW5mbG93IHNpYmxpbmcncyBh
ZnRlciBtYXJnaW4uCisgICAgLy8gNi4gSWYgc28sIGp1bXAgdG8gIzIuCisgICAgLy8gNy4gTm8g
bmVlZCB0byBwcm9wYWdhdGUgdG8gcGFyZW50IGJlY2F1c2UgaXRzIG1hcmdpbiBpcyBub3QgY29t
cHV0ZWQgeWV0IChwcmUtY29tcHV0ZWQgYXQgbW9zdCkuCisgICAgYXV0byogY3VycmVudEJveCA9
ICZsYXlvdXRCb3g7CisgICAgd2hpbGUgKG1hcmdpbkNvbGxhcHNlLm1hcmdpbkJlZm9yZUNvbGxh
cHNlc1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRlcigqY3VycmVudEJveCkpIHsKKyAgICAg
ICAgYXV0byYgcHJldmlvdXNTaWJsaW5nID0gKmN1cnJlbnRCb3gtPnByZXZpb3VzSW5GbG93U2li
bGluZygpOworICAgICAgICBhdXRvIHByZXZpb3VzU2libGluZ1ZlcnRpY2FsTWFyZ2luID0gZm9y
bWF0dGluZ1N0YXRlLnVzZWRWZXJ0aWNhbE1hcmdpbihwcmV2aW91c1NpYmxpbmcpOworCisgICAg
ICAgIGF1dG8gY29sbGFwc2VkVmVydGljYWxNYXJnaW5CZWZvcmUgPSBwcmV2aW91c1NpYmxpbmdW
ZXJ0aWNhbE1hcmdpbi5jb2xsYXBzZWRWYWx1ZXMuYmVmb3JlOworICAgICAgICBhdXRvIGNvbGxh
cHNlZFZlcnRpY2FsTWFyZ2luQWZ0ZXIgPSBnZW9tZXRyeUZvckJveCgqY3VycmVudEJveCkubWFy
Z2luQmVmb3JlKCk7CisKKyAgICAgICAgYXV0byBtYXJnaW5zQ29sbGFwc2VUaHJvdWdoID0gbWFy
Z2luQ29sbGFwc2UubWFyZ2luc0NvbGxhcHNlVGhyb3VnaChwcmV2aW91c1NpYmxpbmcpOworICAg
ICAgICBpZiAobWFyZ2luc0NvbGxhcHNlVGhyb3VnaCkKKyAgICAgICAgICAgIGNvbGxhcHNlZFZl
cnRpY2FsTWFyZ2luQmVmb3JlID0gY29sbGFwc2VkVmVydGljYWxNYXJnaW5BZnRlcjsKKworICAg
ICAgICAvLyBVcGRhdGUgcG9zaXRpdmUvbmVnYXRpdmUgY2FjaGUuCisgICAgICAgIGF1dG8gcHJl
dmlvdXNTaWJsaW5nUG9zaXRpdmVOZWdhdGl2ZU1hcmdpbiA9IGZvcm1hdHRpbmdTdGF0ZS51c2Vk
VmVydGljYWxNYXJnaW4ocHJldmlvdXNTaWJsaW5nKS5wb3NpdGl2ZUFuZE5lZ2F0aXZlVmFsdWVz
OworICAgICAgICBhdXRvIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUgPSBmb3JtYXR0aW5n
U3RhdGUudXNlZFZlcnRpY2FsTWFyZ2luKCpjdXJyZW50Qm94KS5wb3NpdGl2ZUFuZE5lZ2F0aXZl
VmFsdWVzLmJlZm9yZTsKKworICAgICAgICBhdXRvIGFkanVzdGVkUHJldmlvdXNTaWJsaW5nVmVy
dGljYWxNYXJnaW4gPSBwcmV2aW91c1NpYmxpbmdWZXJ0aWNhbE1hcmdpbjsKKyAgICAgICAgYWRq
dXN0ZWRQcmV2aW91c1NpYmxpbmdWZXJ0aWNhbE1hcmdpbi5wb3NpdGl2ZUFuZE5lZ2F0aXZlVmFs
dWVzLmFmdGVyID0gbWFyZ2luQ29sbGFwc2UuY29tcHV0ZWRQb3NpdGl2ZUFuZE5lZ2F0aXZlTWFy
Z2luKHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUsIHByZXZpb3VzU2libGluZ1Bvc2l0aXZl
TmVnYXRpdmVNYXJnaW4uYWZ0ZXIpOworICAgICAgICBpZiAobWFyZ2luc0NvbGxhcHNlVGhyb3Vn
aCkgeworICAgICAgICAgICAgYWRqdXN0ZWRQcmV2aW91c1NpYmxpbmdWZXJ0aWNhbE1hcmdpbi5w
b3NpdGl2ZUFuZE5lZ2F0aXZlVmFsdWVzLmJlZm9yZSA9IG1hcmdpbkNvbGxhcHNlLmNvbXB1dGVk
UG9zaXRpdmVBbmROZWdhdGl2ZU1hcmdpbihwcmV2aW91c1NpYmxpbmdQb3NpdGl2ZU5lZ2F0aXZl
TWFyZ2luLmJlZm9yZSwgYWRqdXN0ZWRQcmV2aW91c1NpYmxpbmdWZXJ0aWNhbE1hcmdpbi5wb3Np
dGl2ZUFuZE5lZ2F0aXZlVmFsdWVzLmFmdGVyKTsKKyAgICAgICAgICAgIGFkanVzdGVkUHJldmlv
dXNTaWJsaW5nVmVydGljYWxNYXJnaW4ucG9zaXRpdmVBbmROZWdhdGl2ZVZhbHVlcy5hZnRlciA9
IGFkanVzdGVkUHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW4ucG9zaXRpdmVBbmROZWdhdGl2
ZVZhbHVlcy5iZWZvcmU7CisgICAgICAgIH0KKyAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldFVz
ZWRWZXJ0aWNhbE1hcmdpbihwcmV2aW91c1NpYmxpbmcsIGFkanVzdGVkUHJldmlvdXNTaWJsaW5n
VmVydGljYWxNYXJnaW4pOworCisgICAgICAgIGlmICghbWFyZ2luc0NvbGxhcHNlVGhyb3VnaCkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGN1cnJlbnRCb3ggPSAmcHJldmlvdXNTaWJs
aW5nOworICAgIH0KK30KKworQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Z2VvbWV0cnkoKSBjb25zdAoreworICAgIHJldHVybiBCbG9ja0Zvcm1hdHRpbmdH
ZW9tZXRyeSB7ICp0aGlzIH07Cit9CisKK0Jsb2NrTWFyZ2luQ29sbGFwc2UgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6bWFyZ2luQ29sbGFwc2UoKSBjb25zdAoreworICAgIHJldHVybiBCbG9ja01h
cmdpbkNvbGxhcHNlIHsgbGF5b3V0U3RhdGUoKSwgZm9ybWF0dGluZ1N0YXRlKCkgfTsKK30KKwog
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4
IDYzZDk5NjkzZTg3Y2QwYjBmMTMyZWFjNzEzNjkwZTBiNzA1MmUxMjkuLjNjYTkwNzViOTQyZDBk
YTc3NzhhMjc2MWIyOTZhODQzNDA0MTg4OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tG
b3JtYXR0aW5nQ29udGV4dC5oCkBAIC0zOSw2ICszOSw4IEBAIGNsYXNzIExheW91dFVuaXQ7CiBu
YW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgQm94OworY2xhc3MgQmxvY2tGb3JtYXR0aW5nR2Vv
bWV0cnk7CitjbGFzcyBCbG9ja01hcmdpbkNvbGxhcHNlOwogY2xhc3MgRmxvYXRpbmdDb250ZXh0
OwogCiAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGxheW91dCBsb2dpYyBmb3IgYmxvY2sg
Zm9ybWF0dGluZyBjb250ZXh0cy4KQEAgLTUxLDYgKzUzLDggQEAgcHVibGljOgogICAgIHZvaWQg
bGF5b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYsIGNvbnN0IENvbnN0cmFpbnRz
Rm9ySW5GbG93Q29udGVudCYpIG92ZXJyaWRlOwogICAgIExheW91dFVuaXQgdXNlZENvbnRlbnRI
ZWlnaHQoKSBjb25zdCBvdmVycmlkZTsKIAorICAgIGNvbnN0IEJsb2NrRm9ybWF0dGluZ1N0YXRl
JiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxCbG9ja0Zvcm1hdHRp
bmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQorCiBwcm90
ZWN0ZWQ6CiAgICAgc3RydWN0IENvbnN0cmFpbnRzUGFpciB7CiAgICAgICAgIENvbnN0cmFpbnRz
Rm9ySW5GbG93Q29udGVudCBmb3JtYXR0aW5nQ29udGV4dFJvb3Q7CkBAIC03Miw5OSArNzYsMTIg
QEAgcHJvdGVjdGVkOgogCiAgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdp
bihjb25zdCBCb3gmLCBjb25zdCBVc2VkVmVydGljYWxNYXJnaW4mLCBjb25zdCBWZXJ0aWNhbENv
bnN0cmFpbnRzJikgY29uc3Q7CiAKLSAgICAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgcG9zaXRp
b25pbmcgYW5kIHNpemluZyBmb3IgYm94ZXMgcGFydGljaXBhdGluZyBpbiBhIGJsb2NrIGZvcm1h
dHRpbmcgY29udGV4dC4KLSAgICBjbGFzcyBHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnkgewotICAgIHB1YmxpYzoKLSAgICAgICAgR2VvbWV0cnkoY29uc3QgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dCYpOwotCi0gICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4g
aW5GbG93Q29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKTsKLSAgICAgICAg
Q29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcyYpOwotCi0gICAgICAgIFBvaW50IHN0YXRpY1Bvc2l0aW9uKGNvbnN0IEJveCYs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMm
KSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0
IEJveCYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmKSBjb25zdDsKLSAgICAgICAgTGF5b3V0
VW5pdCBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJikgY29uc3Q7Ci0KLSAgICAgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEJveCYpOwotCi0gICAgICAgIENvbnRl
bnRXaWR0aEFuZE1hcmdpbiBjb21wdXRlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gm
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBPcHRpb25hbDxMYXlvdXRVbml0PiBhdmFp
bGFibGVXaWR0aEZsb2F0QXZvaWRlcik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDb250ZW50
SGVpZ2h0QW5kTWFyZ2luIGluRmxvd05vblJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihj
b25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMmKTsKLSAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd05v
blJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0gICAg
ICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbkZsb3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1h
cmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNv
bnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAgICAgY29uc3QgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3du
Y2FzdDxCbG9ja0Zvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9Ci0gICAgfTsKLSAgICBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIEdlb21ldHJ5KCp0aGlzKTsg
fQotCi0gICAgLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIG1hcmdpbiBjb2xsYXBzaW5nIGZvciBi
bG9jayBmb3JtYXR0aW5nIGNvbnRleHQuCi0gICAgY2xhc3MgTWFyZ2luQ29sbGFwc2UgewotICAg
IHB1YmxpYzoKLSAgICAgICAgVXNlZFZlcnRpY2FsTWFyZ2luIGNvbGxhcHNlZFZlcnRpY2FsVmFs
dWVzKGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzKTsK
LQotICAgICAgICBQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSBwcmVjb21wdXRlZE1hcmdpbkJlZm9y
ZShjb25zdCBCb3gmLCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyk7Ci0g
ICAgICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlSWdub3JpbmdDb2xsYXBzaW5nVGhyb3VnaChj
b25zdCBCb3gmLCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyk7Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHVwZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlvdXNTaWJsaW5nKEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQmLCBjb25zdCBNYXJnaW5Db2xsYXBzZSYsIGNvbnN0IEJveCYpOwot
Ci0gICAgICAgIGJvb2wgbWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkJlZm9y
ZShjb25zdCBCb3gmKSBjb25zdDsKLSAgICAgICAgYm9vbCBtYXJnaW5CZWZvcmVDb2xsYXBzZXNX
aXRoRmlyc3RJbkZsb3dDaGlsZE1hcmdpbkJlZm9yZShjb25zdCBCb3gmKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3Qg
Qm94JikgY29uc3Q7Ci0gICAgICAgIGJvb2wgbWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFByZXZp
b3VzU2libGluZ01hcmdpbkFmdGVyKGNvbnN0IEJveCYpIGNvbnN0OwotCi0gICAgICAgIGJvb2wg
bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgQm94JikgY29u
c3Q7Ci0gICAgICAgIGJvb2wgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0NoaWxk
TWFyZ2luQWZ0ZXIoY29uc3QgQm94JikgY29uc3Q7Ci0gICAgICAgIGJvb2wgbWFyZ2luQWZ0ZXJD
b2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGNvbnN0IEJveCYpIGNvbnN0OwotICAgICAg
ICBib29sIG1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aE5leHRTaWJsaW5nTWFyZ2luQmVmb3JlKGNv
bnN0IEJveCYpIGNvbnN0OwotICAgICAgICBib29sIG1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFNp
YmxpbmdNYXJnaW5CZWZvcmVXaXRoQ2xlYXJhbmNlKGNvbnN0IEJveCYpIGNvbnN0OwotCi0gICAg
ICAgIGJvb2wgbWFyZ2luc0NvbGxhcHNlVGhyb3VnaChjb25zdCBCb3gmKSBjb25zdDsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Owot
ICAgICAgICBNYXJnaW5Db2xsYXBzZShjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Jik7Ci0K
LSAgICAgICAgZW51bSBjbGFzcyBNYXJnaW5UeXBlIHsgQmVmb3JlLCBBZnRlciB9OwotICAgICAg
ICBVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgcG9z
aXRpdmVOZWdhdGl2ZVZhbHVlcyhjb25zdCBCb3gmLCBNYXJnaW5UeXBlKSBjb25zdDsKLSAgICAg
ICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIHBv
c2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUoY29uc3QgQm94JiwgVXNlZFZlcnRpY2FsTWFyZ2lu
OjpOb25Db2xsYXBzZWRWYWx1ZXMpIGNvbnN0OwotICAgICAgICBVc2VkVmVydGljYWxNYXJnaW46
OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgcG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkFm
dGVyKGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzKSBj
b25zdDsKLQotICAgICAgICBVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQ
YWlyOjpWYWx1ZXMgcHJlY29tcHV0ZWRQb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKGNvbnN0
IEJveCYsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzKSBjb25zdDsKLSAg
ICAgICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVz
IHByZWNvbXB1dGVkUG9zaXRpdmVOZWdhdGl2ZVZhbHVlcyhjb25zdCBCb3gmKSBjb25zdDsKLQot
ICAgICAgICBVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1
ZXMgY29tcHV0ZWRQb3NpdGl2ZUFuZE5lZ2F0aXZlTWFyZ2luKFVzZWRWZXJ0aWNhbE1hcmdpbjo6
UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcywgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3Np
dGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzKSBjb25zdDsKLSAgICAgICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gbWFyZ2luVmFsdWUoVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0
aXZlUGFpcjo6VmFsdWVzKSBjb25zdDsKLQotICAgICAgICBib29sIGhhc0NsZWFyYW5jZShjb25z
dCBCb3gmKSBjb25zdDsKLQotICAgICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSB7IHJl
dHVybiBtX2Jsb2NrRm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQotICAgICAgICBj
b25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrRm9y
bWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQotICAgICAgICBjb25zdCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tG
b3JtYXR0aW5nQ29udGV4dDsgfQotCi0gICAgICAgIGNvbnN0IEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQmIG1fYmxvY2tGb3JtYXR0aW5nQ29udGV4dDsKLSAgICB9OwotICAgIE1hcmdpbkNvbGxhcHNl
IG1hcmdpbkNvbGxhcHNlKCkgY29uc3QgeyByZXR1cm4gTWFyZ2luQ29sbGFwc2UoKnRoaXMpOyB9
Ci0KLSAgICBjbGFzcyBRdWlya3MgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyB7
Ci0gICAgcHVibGljOgotICAgICAgICBRdWlya3MoY29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dCYpOwotCi0gICAgICAgIGJvb2wgbmVlZHNTdHJldGNoaW5nKGNvbnN0IEJveCYpIGNvbnN0Owot
ICAgICAgICBMYXlvdXRVbml0IHN0cmV0Y2hlZEluRmxvd0hlaWdodChjb25zdCBCb3gmLCBDb250
ZW50SGVpZ2h0QW5kTWFyZ2luKTsKLQotICAgICAgICBib29sIHNob3VsZElnbm9yZUNvbGxhcHNl
ZFF1aXJrTWFyZ2luKGNvbnN0IEJveCYpIGNvbnN0OwotICAgICAgICBib29sIHNob3VsZENvbGxh
cHNlTWFyZ2luQmVmb3JlV2l0aFBhcmVudE1hcmdpbkJlZm9yZShjb25zdCBCb3gmKSBjb25zdDsK
LSAgICAgICAgYm9vbCBzaG91bGRDb2xsYXBzZU1hcmdpbkFmdGVyV2l0aFBhcmVudE1hcmdpbkFm
dGVyKGNvbnN0IEJveCYpIGNvbnN0OwotCi0gICAgICAgIGNvbnN0IEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8QmxvY2tG
b3JtYXR0aW5nQ29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6Zm9ybWF0dGluZ0Nv
bnRleHQoKSk7IH0KLSAgICAgICAgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgZ2Vv
bWV0cnkoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5KCk7IH0K
LQotICAgIH07Ci0gICAgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzIHF1aXJrcygpIGNv
bnN0IHsgcmV0dXJuIFF1aXJrcygqdGhpcyk7IH0KLQogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+
IHVzZWRBdmFpbGFibGVXaWR0aEZvckZsb2F0QXZvaWRlcihjb25zdCBGbG9hdGluZ0NvbnRleHQm
LCBjb25zdCBCb3gmLCBjb25zdCBDb25zdHJhaW50c1BhaXImKTsKKyAgICB2b2lkIHVwZGF0ZU1h
cmdpbkFmdGVyRm9yUHJldmlvdXNTaWJsaW5nKGNvbnN0IEJveCYpOwogCi0gICAgY29uc3QgQmxv
Y2tGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25j
YXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0
YXRlKCkpOyB9CiAgICAgQmxvY2tGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsg
cmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6
Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CisgICAgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgZ2VvbWV0
cnkoKSBjb25zdDsKKyAgICBCbG9ja01hcmdpbkNvbGxhcHNlIG1hcmdpbkNvbGxhcHNlKCkgY29u
c3Q7CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIHZvaWQgc2V0UHJlY29tcHV0ZWRNYXJnaW5C
ZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFByZWNvbXB1dGVkTWFyZ2luQmVmb3Jl
JiBwcmVjb21wdXRlZE1hcmdpbkJlZm9yZSkgeyBtX3ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlTGlz
dC5zZXQoJmxheW91dEJveCwgcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUpOyB9CkBAIC0xNzUsMjEg
KzkyLDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPGNvbnN0IEJveCosIFByZWNvbXB1dGVkTWFy
Z2luQmVmb3JlPiBtX3ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlTGlzdDsKIH07CiAKLWlubGluZSBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkoY29uc3QgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dCYgYmxvY2tGb3JtYXR0aW5nQ29udGV4dCkKLSAgICA6IEZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeShibG9ja0Zvcm1hdHRpbmdDb250ZXh0KQotewotfQotCi1pbmxpbmUg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpRdWlya3MoY29uc3QgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dCYgYmxvY2tGb3JtYXR0aW5nQ29udGV4dCkKLSAgICA6IEZvcm1hdHRpbmdDb250
ZXh0OjpRdWlya3MoYmxvY2tGb3JtYXR0aW5nQ29udGV4dCkKLXsKLX0KLQotaW5saW5lIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjpNYXJnaW5Db2xsYXBzZShjb25zdCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBibG9ja0Zvcm1hdHRpbmdDb250ZXh0KQotICAgIDogbV9i
bG9ja0Zvcm1hdHRpbmdDb250ZXh0KGJsb2NrRm9ybWF0dGluZ0NvbnRleHQpCi17Ci19Ci0KIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTFhMmI0MTZjNjdk
ZTVmMjQ1ZDUyYzE1ZGI2MzQzNThkY2NiNWIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nU3RhdGUuaCIKLSNp
bmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdT
dGF0ZS5oIgotI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCi0jaW5jbHVkZSAiTGF5b3V0
Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxheW91dENvbnRleHQuaCIKLSNpbmNsdWRlICJM
YXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRC
b3guaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotQ29udGVu
dEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93
Tm9uUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3Qg
T3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpCi17Ci0g
ICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpICYmICFsYXlvdXRCb3guaXNSZXBsYWNlZEJv
eCgpKTsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3ZlcmZsb3dWaXNpYmxlKCkpOwotCi0gICAg
YXV0byBjb21wdXRlID0gWyZdKGNvbnN0IGF1dG8mIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykg
LT4gQ29udGVudEhlaWdodEFuZE1hcmdpbiB7Ci0KLSAgICAgICAgLy8gMTAuNi4zIEJsb2NrLWxl
dmVsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyB3aGVuICdvdmVyZmxvdycg
Y29tcHV0ZXMgdG8gJ3Zpc2libGUnCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmICdtYXJnaW4t
dG9wJywgb3IgJ21hcmdpbi1ib3R0b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMg
MC4KLSAgICAgICAgLy8gSWYgJ2hlaWdodCcgaXMgJ2F1dG8nLCB0aGUgaGVpZ2h0IGRlcGVuZHMg
b24gd2hldGhlciB0aGUgZWxlbWVudCBoYXMgYW55IGJsb2NrLWxldmVsIGNoaWxkcmVuIGFuZCB3
aGV0aGVyIGl0IGhhcyBwYWRkaW5nIG9yIGJvcmRlcnM6Ci0gICAgICAgIC8vIFRoZSBlbGVtZW50
J3MgaGVpZ2h0IGlzIHRoZSBkaXN0YW5jZSBmcm9tIGl0cyB0b3AgY29udGVudCBlZGdlIHRvIHRo
ZSBmaXJzdCBhcHBsaWNhYmxlIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgIC8vIDEuIHRoZSBi
b3R0b20gZWRnZSBvZiB0aGUgbGFzdCBsaW5lIGJveCwgaWYgdGhlIGJveCBlc3RhYmxpc2hlcyBh
IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgd2l0aCBvbmUgb3IgbW9yZSBsaW5lcwotICAgICAg
ICAvLyAyLiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJvdHRvbSAocG9zc2libHkgY29sbGFwc2Vk
KSBtYXJnaW4gb2YgaXRzIGxhc3QgaW4tZmxvdyBjaGlsZCwgaWYgdGhlIGNoaWxkJ3MgYm90dG9t
IG1hcmdpbgotICAgICAgICAvLyAgICBkb2VzIG5vdCBjb2xsYXBzZSB3aXRoIHRoZSBlbGVtZW50
J3MgYm90dG9tIG1hcmdpbgotICAgICAgICAvLyAzLiB0aGUgYm90dG9tIGJvcmRlciBlZGdlIG9m
IHRoZSBsYXN0IGluLWZsb3cgY2hpbGQgd2hvc2UgdG9wIG1hcmdpbiBkb2Vzbid0IGNvbGxhcHNl
IHdpdGggdGhlIGVsZW1lbnQncyBib3R0b20gbWFyZ2luCi0gICAgICAgIC8vIDQuIHplcm8sIG90
aGVyd2lzZQotICAgICAgICAvLyBPbmx5IGNoaWxkcmVuIGluIHRoZSBub3JtYWwgZmxvdyBhcmUg
dGFrZW4gaW50byBhY2NvdW50IChpLmUuLCBmbG9hdGluZyBib3hlcyBhbmQgYWJzb2x1dGVseSBw
b3NpdGlvbmVkIGJveGVzIGFyZSBpZ25vcmVkLAotICAgICAgICAvLyBhbmQgcmVsYXRpdmVseSBw
b3NpdGlvbmVkIGJveGVzIGFyZSBjb25zaWRlcmVkIHdpdGhvdXQgdGhlaXIgb2Zmc2V0KS4gTm90
ZSB0aGF0IHRoZSBjaGlsZCBib3ggbWF5IGJlIGFuIGFub255bW91cyBibG9jayBib3guCi0KLSAg
ICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9y
Qm94KGxheW91dEJveCk7Ci0gICAgICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdl
b21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzKTsKLSAgICAgICAgYXV0byBub25Db2xsYXBzZWRNYXJnaW4gPSBVc2VkVmVydGljYWxN
YXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3Jl
LnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OyAK
LSAgICAgICAgYXV0byBib3JkZXJBbmRQYWRkaW5nVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9w
KCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKLSAgICAgICAgYXV0byBo
ZWlnaHQgPSBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0ID8gb3ZlcnJpZGRlblZlcnRp
Y2FsVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRIZWlnaHQobGF5b3V0Qm94KTsKLQot
ICAgICAgICBpZiAoaGVpZ2h0KQotICAgICAgICAgICAgcmV0dXJuIHsgKmhlaWdodCwgbm9uQ29s
bGFwc2VkTWFyZ2luIH07Ci0KLSAgICAgICAgaWYgKCFpczxDb250YWluZXJCb3g+KGxheW91dEJv
eCkgfHwgIWRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KS5oYXNJbkZsb3dDaGlsZCgp
KQotICAgICAgICAgICAgcmV0dXJuIHsgMCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07Ci0KLSAgICAg
ICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0aGUgYm94
IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBvciBtb3Jl
IGxpbmVzCi0gICAgICAgIGF1dG8mIGxheW91dENvbnRhaW5lciA9IGRvd25jYXN0PENvbnRhaW5l
ckJveD4obGF5b3V0Qm94KTsKLSAgICAgICAgaWYgKGxheW91dENvbnRhaW5lci5lc3RhYmxpc2hl
c0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGlubGluZUZv
cm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5n
U3RhdGUobGF5b3V0Q29udGFpbmVyKTsKLSAgICAgICAgICAgIGF1dG8mIGxpbmVzID0gaW5saW5l
Rm9ybWF0dGluZ1N0YXRlLmxpbmVzKCk7Ci0gICAgICAgICAgICAvLyBFdmVuIGVtcHR5IGNvbnRh
aW5lcnMgZ2VuZXJhdGUgb25lIGxpbmUuIAotICAgICAgICAgICAgQVNTRVJUKCFsaW5lcy5pc0Vt
cHR5KCkpOwotICAgICAgICAgICAgcmV0dXJuIHsgdG9MYXlvdXRVbml0KGxpbmVzLmxhc3QoKS5s
aW5lQm94TG9naWNhbFJlY3QoKS5ib3R0b20oKSArIGlubGluZUZvcm1hdHRpbmdTdGF0ZS5jbGVh
ckdhcEFmdGVyTGFzdExpbmUoKSkgLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xsYXBzZWRN
YXJnaW4gfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDIuIHRoZSBib3R0b20gZWRnZSBvZiB0
aGUgYm90dG9tIChwb3NzaWJseSBjb2xsYXBzZWQpIG1hcmdpbiBvZiBpdHMgbGFzdCBpbi1mbG93
IGNoaWxkLCBpZiB0aGUgY2hpbGQncyBib3R0b20gbWFyZ2luLi4uCi0gICAgICAgIGF1dG8mIGxh
c3RJbkZsb3dDaGlsZCA9ICpsYXlvdXRDb250YWluZXIubGFzdEluRmxvd0NoaWxkKCk7Ci0gICAg
ICAgIGlmICghZm9ybWF0dGluZ0NvbnRleHQoKS5tYXJnaW5Db2xsYXBzZSgpLm1hcmdpbkFmdGVy
Q29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkFmdGVyKGxhc3RJbkZsb3dDaGlsZCkpIHsKLSAgICAg
ICAgICAgIGF1dG8mIGxhc3RJbkZsb3dCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3gobGFzdEluRmxvd0NoaWxkKTsKLSAgICAgICAgICAgIGF1dG8gYm90dG9t
RWRnZU9mQm90dG9tTWFyZ2luID0gQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QobGFzdEluRmxv
d0JveEdlb21ldHJ5KS5ib3R0b20oKSArIGxhc3RJbkZsb3dCb3hHZW9tZXRyeS5tYXJnaW5BZnRl
cigpOwotICAgICAgICAgICAgcmV0dXJuIHsgYm90dG9tRWRnZU9mQm90dG9tTWFyZ2luIC0gYm9y
ZGVyQW5kUGFkZGluZ1RvcCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyAzLiB0aGUgYm90dG9tIGJvcmRlciBlZGdlIG9mIHRoZSBsYXN0IGluLWZsb3cgY2hp
bGQgd2hvc2UgdG9wIG1hcmdpbiBkb2Vzbid0IGNvbGxhcHNlIHdpdGggdGhlIGVsZW1lbnQncyBi
b3R0b20gbWFyZ2luCi0gICAgICAgIGF1dG8qIGluRmxvd0NoaWxkID0gJmxhc3RJbkZsb3dDaGls
ZDsKLSAgICAgICAgd2hpbGUgKGluRmxvd0NoaWxkICYmIGZvcm1hdHRpbmdDb250ZXh0KCkubWFy
Z2luQ29sbGFwc2UoKS5tYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIo
KmluRmxvd0NoaWxkKSkKLSAgICAgICAgICAgIGluRmxvd0NoaWxkID0gaW5GbG93Q2hpbGQtPnBy
ZXZpb3VzSW5GbG93U2libGluZygpOwotICAgICAgICBpZiAoaW5GbG93Q2hpbGQpIHsKLSAgICAg
ICAgICAgIGF1dG8mIGluRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9t
ZXRyeUZvckJveCgqaW5GbG93Q2hpbGQpOwotICAgICAgICAgICAgcmV0dXJuIHsgQm94R2VvbWV0
cnk6OmJvcmRlckJveFRvcChpbkZsb3dCb3hHZW9tZXRyeSkgKyBpbkZsb3dCb3hHZW9tZXRyeS5i
b3JkZXJCb3goKS5oZWlnaHQoKSAtIGJvcmRlckFuZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1h
cmdpbiB9OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC4gemVybywgb3RoZXJ3aXNlCi0gICAg
ICAgIHJldHVybiB7IDAsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwotICAgIH07Ci0KLSAgICAvLyAx
MC42LjcgJ0F1dG8nIGhlaWdodHMgZm9yIGJsb2NrLWxldmVsIGZvcm1hdHRpbmcgY29udGV4dCBi
b3hlcy4KLSAgICBhdXRvIGlzQXV0b0hlaWdodCA9ICFvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMu
aGVpZ2h0ICYmICFjb21wdXRlZEhlaWdodChsYXlvdXRCb3gpOwotICAgIGlmIChpc0F1dG9IZWln
aHQgJiYgKGxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkgJiYgIWxheW91
dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpKQotICAgICAgICByZXR1
cm4gY29tcHV0ZSggT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzIHsgY29udGVudEhlaWdodEZvckZv
cm1hdHRpbmdDb250ZXh0Um9vdChkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpIH0p
OwotICAgIHJldHVybiBjb21wdXRlKG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci19Ci0KLUNv
bnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5G
bG93Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25z
dCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMp
Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpKTsKLQotICAgIGF1dG8gY29tcHV0
ZSA9IFsmXSgpIHsKLQotICAgICAgICAvLyAxMC4zLjMgQmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNl
ZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdwotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgZm9s
bG93aW5nIGNvbnN0cmFpbnRzIG11c3QgaG9sZCBhbW9uZyB0aGUgdXNlZCB2YWx1ZXMgb2YgdGhl
IG90aGVyIHByb3BlcnRpZXM6Ci0gICAgICAgIC8vICdtYXJnaW4tbGVmdCcgKyAnYm9yZGVyLWxl
ZnQtd2lkdGgnICsgJ3BhZGRpbmctbGVmdCcgKyAnd2lkdGgnICsgJ3BhZGRpbmctcmlnaHQnICsg
J2JvcmRlci1yaWdodC13aWR0aCcgKyAnbWFyZ2luLXJpZ2h0JyA9IHdpZHRoIG9mIGNvbnRhaW5p
bmcgYmxvY2sKLSAgICAgICAgLy8KLSAgICAgICAgLy8gMS4gSWYgJ3dpZHRoJyBpcyBub3QgJ2F1
dG8nIGFuZCAnYm9yZGVyLWxlZnQtd2lkdGgnICsgJ3BhZGRpbmctbGVmdCcgKyAnd2lkdGgnICsg
J3BhZGRpbmctcmlnaHQnICsgJ2JvcmRlci1yaWdodC13aWR0aCcgCi0gICAgICAgIC8vICAgIChw
bHVzIGFueSBvZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIHRoYXQgYXJlIG5vdCAn
YXV0bycpIGlzIGxhcmdlciB0aGFuIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmluZyBibG9jaywg
dGhlbgotICAgICAgICAvLyAgICBhbnkgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBv
ciAnbWFyZ2luLXJpZ2h0JyBhcmUsIGZvciB0aGUgZm9sbG93aW5nIHJ1bGVzLCB0cmVhdGVkIGFz
IHplcm8uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIDIuIElmIGFsbCBvZiB0aGUgYWJvdmUgaGF2
ZSBhIGNvbXB1dGVkIHZhbHVlIG90aGVyIHRoYW4gJ2F1dG8nLCB0aGUgdmFsdWVzIGFyZSBzYWlk
IHRvIGJlICJvdmVyLWNvbnN0cmFpbmVkIiBhbmQgb25lIG9mIHRoZSB1c2VkIHZhbHVlcyB3aWxs
Ci0gICAgICAgIC8vICAgIGhhdmUgdG8gYmUgZGlmZmVyZW50IGZyb20gaXRzIGNvbXB1dGVkIHZh
bHVlLiBJZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sg
aGFzIHRoZSB2YWx1ZSAnbHRyJywgdGhlIHNwZWNpZmllZCB2YWx1ZQotICAgICAgICAvLyAgICBv
ZiAnbWFyZ2luLXJpZ2h0JyBpcyBpZ25vcmVkIGFuZCB0aGUgdmFsdWUgaXMgY2FsY3VsYXRlZCBz
byBhcyB0byBtYWtlIHRoZSBlcXVhbGl0eSB0cnVlLiBJZiB0aGUgdmFsdWUgb2YgJ2RpcmVjdGlv
bicgaXMgJ3J0bCcsCi0gICAgICAgIC8vICAgIHRoaXMgaGFwcGVucyB0byAnbWFyZ2luLWxlZnQn
IGluc3RlYWQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIDMuIElmIHRoZXJlIGlzIGV4YWN0bHkg
b25lIHZhbHVlIHNwZWNpZmllZCBhcyAnYXV0bycsIGl0cyB1c2VkIHZhbHVlIGZvbGxvd3MgZnJv
bSB0aGUgZXF1YWxpdHkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIDQuIElmICd3aWR0aCcgaXMg
c2V0IHRvICdhdXRvJywgYW55IG90aGVyICdhdXRvJyB2YWx1ZXMgYmVjb21lICcwJyBhbmQgJ3dp
ZHRoJyBmb2xsb3dzIGZyb20gdGhlIHJlc3VsdGluZyBlcXVhbGl0eS4KLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gNS4gSWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUg
J2F1dG8nLCB0aGVpciB1c2VkIHZhbHVlcyBhcmUgZXF1YWwuIFRoaXMgaG9yaXpvbnRhbGx5IGNl
bnRlcnMgdGhlIGVsZW1lbnQgd2l0aCByZXNwZWN0IHRvIHRoZQotICAgICAgICAvLyAgICBlZGdl
cyBvZiB0aGUgY29udGFpbmluZyBibG9jay4KLQotICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9j
a1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICAgICAgYXV0
byYgY29udGFpbmluZ0Jsb2NrU3R5bGUgPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5
bGUoKTsKLSAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdl
b21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0KLSAgICAgICAgYXV0byB3aWR0aCA9IG92ZXJyaWRk
ZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lk
dGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAg
ICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhv
cml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgICAg
ICBVc2VkSG9yaXpvbnRhbE1hcmdpbiB1c2VkSG9yaXpvbnRhbE1hcmdpbjsKLSAgICAgICAgYXV0
byBib3JkZXJMZWZ0ID0gYm94R2VvbWV0cnkuYm9yZGVyTGVmdCgpOwotICAgICAgICBhdXRvIGJv
cmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKLSAgICAgICAgYXV0byBwYWRk
aW5nTGVmdCA9IGJveEdlb21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKLSAgICAgICAg
YXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDAp
OwotCi0gICAgICAgIC8vICMxCi0gICAgICAgIGlmICh3aWR0aCkgewotICAgICAgICAgICAgYXV0
byBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gPSBjb250YWluaW5nQmxvY2tXaWR0aCAtIChjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSArIGJvcmRlckxlZnQgKyBwYWRk
aW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApKTsKLSAgICAgICAgICAgIGlmIChob3Jpem9u
dGFsU3BhY2VGb3JNYXJnaW4gPCAwKQotICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFy
Z2luID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyAjMgotICAgICAgICBpZiAod2lkdGggJiYgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ICYmIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKLSAgICAgICAgICAgIGlmIChj
b250YWluaW5nQmxvY2tTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKLSAgICAgICAg
ICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9ICpjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uc3RhcnQ7Ci0gICAgICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0g
Y29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3Jk
ZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kOwotICAgICAgICAgICAg
ICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAo
Ym9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVy
UmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gIzMKLSAgICAgICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJn
aW4uc3RhcnQgJiYgd2lkdGggJiYgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgewotICAg
ICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gKmNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5lbmQ7Ci0gICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNvbnRh
aW5pbmdCbG9ja1dpZHRoIC0gKGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCAgKyAqd2lkdGggKyBw
YWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmICF3aWR0
aCAmJiBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKSB7Ci0gICAgICAgICAgICB1c2VkSG9y
aXpvbnRhbE1hcmdpbiA9IHsgKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCwgKmNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQgfTsKLSAgICAgICAgICAgIHdpZHRoID0gY29udGFpbmlu
Z0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0ICYmIHdpZHRoICYmICFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKSB7Ci0gICAg
ICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9ICpjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uc3RhcnQ7Ci0gICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250
YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxl
ZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0KTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vICM0Ci0gICAgICAgIGlmICghd2lkdGgpIHsKLSAgICAg
ICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4u
c3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDAp
IH07Ci0gICAgICAgICAgICB3aWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1Jp
Z2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gIzUKLSAgICAgICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4u
c3RhcnQgJiYgIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKLSAgICAgICAgICAgIGF1
dG8gaG9yaXpvbnRhbFNwYWNlRm9yTWFyZ2luID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJp
Z2h0KTsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBob3Jpem9udGFsU3Bh
Y2VGb3JNYXJnaW4gLyAyLCBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gLyAyIH07Ci0gICAgICAg
IH0KLQotICAgICAgICBhdXRvIHNob3VsZEFwcGx5Q2VudGVyQWxpZ25Gb3JCbG9ja0NvbnRlbnQg
PSBjb250YWluaW5nQmxvY2tTdHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJL
aXRDZW50ZXIgJiYgKGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCB8fCBjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uZW5kKTsKLSAgICAgICAgaWYgKHNob3VsZEFwcGx5Q2VudGVyQWxpZ25G
b3JCbG9ja0NvbnRlbnQpIHsKLSAgICAgICAgICAgIGF1dG8gYm9yZGVyQm94V2lkdGggPSAoYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJp
Z2h0KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnQgPSBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uc3RhcnQudmFsdWVPcigwKTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2luRW5kID0gY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApOwotICAgICAgICAgICAgYXV0byBj
ZW50ZXJlZExvZ2ljYWxMZWZ0Rm9yTWFyZ2luQm94ID0gc3RkOjptYXgoKGNvbnRhaW5pbmdCbG9j
a1dpZHRoIC0gYm9yZGVyQm94V2lkdGggLSBtYXJnaW5TdGFydCAtIG1hcmdpbkVuZCkgLyAyLCAw
X2x1KTsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY2VudGVyZWRM
b2dpY2FsTGVmdEZvck1hcmdpbkJveCArIG1hcmdpblN0YXJ0OwotICAgICAgICAgICAgdXNlZEhv
cml6b250YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSBib3JkZXJCb3hXaWR0
aCAtIG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCh3
aWR0aCk7Ci0KLSAgICAgICAgcmV0dXJuIENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7ICp3aWR0aCwg
dXNlZEhvcml6b250YWxNYXJnaW4gfTsKLSAgICB9OwotCi0gICAgYXV0byBjb250ZW50V2lkdGhB
bmRNYXJnaW4gPSBjb21wdXRlKCk7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250
ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0aF1bTWFyZ2luXSAtPiBpbmZsb3cgbm9uLXJlcGxh
Y2VkIC0+IHdpZHRoKCIgPDwgY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8PCAi
cHgpIG1hcmdpbigiIDw8IGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLnN0YXJ0IDw8
ICJweCwgIiA8PCBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5lbmQgPDwgInB4KSAt
PiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIGNvbnRlbnRX
aWR0aEFuZE1hcmdpbjsKLX0KLQotQ29udGVudFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihj
b25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKHJlcGxhY2VkQm94
LmlzSW5GbG93KCkpOwotCi0gICAgLy8gMTAuMy40IEJsb2NrLWxldmVsLCByZXBsYWNlZCBlbGVt
ZW50cyBpbiBub3JtYWwgZmxvdwotICAgIC8vCi0gICAgLy8gMS4gVGhlIHVzZWQgdmFsdWUgb2Yg
J3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCi0g
ICAgLy8gMi4gVGhlbiB0aGUgcnVsZXMgZm9yIG5vbi1yZXBsYWNlZCBibG9jay1sZXZlbCBlbGVt
ZW50cyBhcmUgYXBwbGllZCB0byBkZXRlcm1pbmUgdGhlIG1hcmdpbnMuCi0KLSAgICAvLyAjMQot
ICAgIGF1dG8gdXNlZFdpZHRoID0gaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4o
cmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCBvdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcykuY29udGVudFdpZHRoOwotICAgIC8vICMyCi0gICAgYXV0byBub25SZXBsYWNl
ZFdpZHRoQW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4o
cmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgT3ZlcnJpZGRlbkhvcml6b250YWxW
YWx1ZXMgeyB1c2VkV2lkdGgsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbiB9KTsK
LQotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8
ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5mbG93IHJlcGxhY2VkIC0+IHdpZHRoKCIgPDwgdXNlZFdp
ZHRoICA8PCAicHgpIG1hcmdpbigiIDw8IG5vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4udXNlZE1h
cmdpbi5zdGFydCA8PCAicHgsICIgPDwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51c2VkTWFy
Z2luLmVuZCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOwot
ICAgIHJldHVybiB7IHVzZWRXaWR0aCwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51c2VkTWFy
Z2luIH07Ci19Ci0KLUxheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFZlcnRp
Y2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zpc3VyZW4uaHRtbCNibG9jay1mb3JtYXR0aW5nCi0g
ICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQsIGJveGVzIGFyZSBsYWlkIG91dCBv
bmUgYWZ0ZXIgdGhlIG90aGVyLCB2ZXJ0aWNhbGx5LCBiZWdpbm5pbmcgYXQgdGhlIHRvcCBvZiBh
IGNvbnRhaW5pbmcgYmxvY2suCi0gICAgLy8gVGhlIHZlcnRpY2FsIGRpc3RhbmNlIGJldHdlZW4g
dHdvIHNpYmxpbmcgYm94ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgJ21hcmdpbicgcHJvcGVydGll
cy4KLSAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zIGJldHdlZW4gYWRqYWNlbnQgYmxvY2stbGV2ZWwg
Ym94ZXMgaW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgY29sbGFwc2UuCi0gICAgaWYgKGF1
dG8qIHByZXZpb3VzSW5GbG93U2libGluZyA9IGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxp
bmcoKSkgewotICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0
dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqcHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKLSAg
ICAgICAgcmV0dXJuIEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KHByZXZpb3VzSW5GbG93Qm94
R2VvbWV0cnkpLmJvdHRvbSgpICsgcHJldmlvdXNJbkZsb3dCb3hHZW9tZXRyeS5tYXJnaW5BZnRl
cigpOwotICAgIH0KLSAgICByZXR1cm4gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOwot
fQotCi1MYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNI
b3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAotewotICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1cmVuLmh0bWwjYmxvY2stZm9ybWF0dGluZwotICAg
IC8vIEluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LCBlYWNoIGJveCdzIGxlZnQgb3V0ZXIg
ZWRnZSB0b3VjaGVzIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgKGZvciBy
aWdodC10by1sZWZ0IGZvcm1hdHRpbmcsIHJpZ2h0IGVkZ2VzIHRvdWNoKS4KLSAgICByZXR1cm4g
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0ICsgZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdpblN0YXJ0KCk7Ci19Ci0KLVBvaW50IEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNQb3NpdGlvbihjb25zdCBCb3gmIGxh
eW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHsgc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGxheW91dEJveCwgaG9y
aXpvbnRhbENvbnN0cmFpbnRzKSwgc3RhdGljVmVydGljYWxQb3NpdGlvbihsYXlvdXRCb3gsIHZl
cnRpY2FsQ29uc3RyYWludHMpIH07Ci19Ci0KLUNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4o
Y29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcykKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOwot
Ci0gICAgLy8gMTAuNi4yIElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVw
bGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snCi0gICAgLy8gcmVw
bGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1l
bnRzCi0gICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAgICAgIHJldHVybiBp
bmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+
KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCBvdmVycmlkZGVuVmVydGlj
YWxWYWx1ZXMpOwotCi0gICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBjb250ZW50SGVpZ2h0QW5k
TWFyZ2luOwotICAgIGlmIChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSAmJiAhbGF5b3V0
Qm94LmlzRG9jdW1lbnRCb3goKSkgewotICAgICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHRoZSBj
YXNlIGZvciB0aGUgZG9jdW1lbnQgZWxlbWVudC4gTGV0J3MganVzdCBjb21wbGljYXRlZC1jYXNl
IGl0IGZvciBub3cuCi0gICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBpbkZsb3dOb25S
ZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3Ry
YWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2VzCi0gICAgICAgIC8vIEJsb2NrLWxldmVsLCBub24t
cmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgd2hlbiAnb3ZlcmZsb3cnIGRvZXMgbm90
IGNvbXB1dGUgdG8gJ3Zpc2libGUnIChleGNlcHQgaWYgdGhlICdvdmVyZmxvdycgcHJvcGVydHkn
cyB2YWx1ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIHRvIHRoZSB2aWV3cG9ydCkuCi0gICAgICAgIGNv
bnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wbGljYXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotICAgIH0KLQotICAg
IGF1dG8gcXVpcmtzID0gZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKTsKLSAgICBpZiAoIXF1
aXJrcy5uZWVkc1N0cmV0Y2hpbmcobGF5b3V0Qm94KSkKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRI
ZWlnaHRBbmRNYXJnaW47Ci0KLSAgICBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWln
aHQgPSBxdWlya3Muc3RyZXRjaGVkSW5GbG93SGVpZ2h0KGxheW91dEJveCwgY29udGVudEhlaWdo
dEFuZE1hcmdpbik7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlv
dXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAtPiBpbmZsb3cgbm9uLXJlcGxhY2VkIC0+
IHN0cmVjaGVkIHRvIHZpZXdwb3J0IC0+IGhlaWdodCgiIDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJn
aW4uY29udGVudEhlaWdodCA8PCAicHgpIG1hcmdpbigiIDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJn
aW4ubm9uQ29sbGFwc2VkTWFyZ2luLmJlZm9yZSA8PCAicHgsICIgPDwgY29udGVudEhlaWdodEFu
ZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8
PCAmbGF5b3V0Qm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW47
Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW5GbG93Q29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3Qg
T3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQot
ewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSk7Ci0KLSAgICBpZiAoIWxheW91dEJv
eC5pc1JlcGxhY2VkQm94KCkpCi0gICAgICAgIHJldHVybiBpbkZsb3dOb25SZXBsYWNlZENvbnRl
bnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMpOwotICAgIHJldHVybiBpbkZsb3dSZXBsYWNlZENvbnRlbnRX
aWR0aEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRh
bENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7Ci19Ci0KLUNvbnRlbnRX
aWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBPcHRpb25hbDxMYXlvdXRVbml0
PiBhdmFpbGFibGVXaWR0aEZsb2F0QXZvaWRlcikKLXsKLSAgICBhdXRvIGNvbXB1dGUgPSBbJl0g
KGF1dG8gY29uc3RyYWludHNGb3JXaWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdpZHRo
KSB7Ci0gICAgICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmbG9hdGluZ0NvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNv
bnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNlZFdpZHRoLCB7IH0gfSk7Ci0KLSAgICAgICAgaWYgKGxh
eW91dEJveC5pc0luRmxvdygpKQotICAgICAgICAgICAgcmV0dXJuIGluRmxvd0NvbnRlbnRXaWR0
aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNlZFdpZHRoLCB7
IH0gfSk7Ci0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBD
b250ZW50V2lkdGhBbmRNYXJnaW4geyB9OwotICAgIH07Ci0KLSAgICBhdXRvIGhvcml6b250YWxD
b25zdHJhaW50c0ZvcldpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzOwotICAgIGlmIChsYXlv
dXRCb3guc3R5bGUoKS5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSAmJiBhdmFpbGFibGVXaWR0aEZs
b2F0QXZvaWRlcikgewotICAgICAgICAvLyBXaGlsZSB0aGUgbm9uLWF1dG8gd2lkdGggdmFsdWVz
IHNob3VsZCBhbGwgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgY29udGFpbmluZyBibG9jaydzIHdp
ZHRoLCB3aGVuCi0gICAgICAgIC8vIHRoZSB3aWR0aCBpcyBhdXRvIHRoZSBhdmFpbGFibGUgaG9y
aXpvbnRhbCBzcGFjZSBpcyBzaHJ1bmsgYnkgbmVpZ2hib3JpbmcgZmxvYXRzLgotICAgICAgICBo
b3Jpem9udGFsQ29uc3RyYWludHNGb3JXaWR0aC5sb2dpY2FsV2lkdGggPSAqYXZhaWxhYmxlV2lk
dGhGbG9hdEF2b2lkZXI7Ci0gICAgfQotICAgIGF1dG8gY29udGVudFdpZHRoQW5kTWFyZ2luID0g
Y29tcHV0ZShob3Jpem9udGFsQ29uc3RyYWludHNGb3JXaWR0aCwgeyB9KTsKLSAgICBhdXRvIGF2
YWlsYWJsZVdpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICBp
ZiAoYXV0byBtYXhXaWR0aCA9IGNvbXB1dGVkTWF4V2lkdGgobGF5b3V0Qm94LCBhdmFpbGFibGVX
aWR0aCkpIHsKLSAgICAgICAgYXV0byBtYXhXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUoaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCBtYXhXaWR0aCk7Ci0gICAgICAgIGlmIChjb250ZW50V2lkdGhBbmRN
YXJnaW4uY29udGVudFdpZHRoID4gbWF4V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKQotICAg
ICAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWF4V2lkdGhBbmRNYXJnaW47Ci0gICAg
fQotCi0gICAgYXV0byBtaW5XaWR0aCA9IGNvbXB1dGVkTWluV2lkdGgobGF5b3V0Qm94LCBhdmFp
bGFibGVXaWR0aCkudmFsdWVPcigwKTsKLSAgICBhdXRvIG1pbldpZHRoQW5kTWFyZ2luID0gY29t
cHV0ZShob3Jpem9udGFsQ29uc3RyYWludHMsIG1pbldpZHRoKTsKLSAgICBpZiAoY29udGVudFdp
ZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbldpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0
aCkKLSAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWluV2lkdGhBbmRNYXJnaW47Ci0g
ICAgcmV0dXJuIGNvbnRlbnRXaWR0aEFuZE1hcmdpbjsKLX0KLQotRm9ybWF0dGluZ0NvbnRleHQ6
OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgQm94JiBsYXlvdXRCb3gpCi17Ci0g
ICAgYXV0byBmaXhlZE1hcmdpbkJvcmRlckFuZFBhZGRpbmcgPSBbJl0oYXV0byYgbGF5b3V0Qm94
KSB7Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgICAgIHJl
dHVybiBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpblN0YXJ0KCkpLnZhbHVlT3IoMCkKLSAgICAgICAg
ICAgICsgTGF5b3V0VW5pdCB7IHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpIH0KLSAgICAgICAgICAg
ICsgZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nTGVmdCgpKS52YWx1ZU9yKDApCi0gICAgICAgICAg
ICArIGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ1JpZ2h0KCkpLnZhbHVlT3IoMCkKLSAgICAgICAg
ICAgICsgTGF5b3V0VW5pdCB7IHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSB9Ci0gICAgICAgICAg
ICArIGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luRW5kKCkpLnZhbHVlT3IoMCk7Ci0gICAgfTsKLQot
ICAgIGF1dG8gY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gWyZdKCkgLT4gSW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyB7Ci0gICAgICAgIGF1dG8gbG9naWNhbFdpZHRoID0gbGF5
b3V0Qm94LnN0eWxlKCkubG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIC8vIE1pbmltdW0vbWF4aW11
bSB3aWR0aCBjYW4ndCBiZSBkZXBlbmRpbmcgb24gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyB3aWR0
aC4KLSAgICAgICAgYXV0byBuZWVkc1Jlc29sdmVkQ29udGFpbmluZ0Jsb2NrV2lkdGggPSBsb2dp
Y2FsV2lkdGguaXNDYWxjdWxhdGVkKCkgfHwgbG9naWNhbFdpZHRoLmlzUGVyY2VudCgpIHx8IGxv
Z2ljYWxXaWR0aC5pc1JlbGF0aXZlKCk7Ci0gICAgICAgIGlmIChuZWVkc1Jlc29sdmVkQ29udGFp
bmluZ0Jsb2NrV2lkdGgpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIGlmIChh
dXRvIHdpZHRoID0gZml4ZWRWYWx1ZShsb2dpY2FsV2lkdGgpKQotICAgICAgICAgICAgcmV0dXJu
IHsgKndpZHRoLCAqd2lkdGggfTsKLQotICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRC
b3goKSkgewotICAgICAgICAgICAgYXV0byYgcmVwbGFjZWRCb3ggPSBkb3duY2FzdDxSZXBsYWNl
ZEJveD4obGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGlmIChyZXBsYWNlZEJveC5oYXNJbnRyaW5z
aWNXaWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXBsYWNlZFdpZHRoID0gcmVwbGFj
ZWRCb3guaW50cmluc2ljV2lkdGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyByZXBsYWNl
ZFdpZHRoLCByZXBsYWNlZFdpZHRoIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4geyB9OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpczxDb250YWluZXJCb3g+KGxheW91
dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KS5oYXNJbkZsb3dPckZs
b2F0aW5nQ2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAgaWYgKGxh
eW91dEJveC5pc1NpemVDb250YWlubWVudEJveCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgaW50
cmluc2ljIHNpemVzIG9mIHRoZSBzaXplIGNvbnRhaW5tZW50IGJveCBhcmUgZGV0ZXJtaW5lZCBh
cyBpZiB0aGUgZWxlbWVudCBoYWQgbm8gY29udGVudCwKLSAgICAgICAgICAgIC8vIGZvbGxvd2lu
ZyB0aGUgc2FtZSBsb2dpYyBhcyB3aGVuIHNpemluZyBhcyBpZiBlbXB0eS4KLSAgICAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGF5b3V0Qm94LmVzdGFibGlz
aGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZG93
bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0gICAgICAgICAgICBpZiAobG9naWNhbFdpZHRo
LmlzTWluQ29udGVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMubWluaW11bSwgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtIH07
Ci0gICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzTWF4Q29udGVudCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB7IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSwgaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtIH07Ci0gICAgICAgICAgICByZXR1cm4gaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50czsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gaW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyA9IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OwotICAgICAg
ICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmZvcm1hdHRpbmdTdGF0ZUZv
ckJveChsYXlvdXRCb3gpOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5
cGU8Qm94Pihkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpKSB7Ci0gICAgICAgICAg
ICBpZiAoY2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgKGNoaWxkLmlzRmxvYXRBdm9p
ZGVyKCkgJiYgIWNoaWxkLmhhc0Zsb2F0Q2xlYXIoKSkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBhdXRvIGNoaWxkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGZv
cm1hdHRpbmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNoaWxkKTsKLSAg
ICAgICAgICAgIEFTU0VSVChjaGlsZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOwotCi0gICAg
ICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0gPSBzdGQ6Om1heChpbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGNoaWxkSW50cmluc2ljV2lkdGhDb25zdHJh
aW50cy0+bWluaW11bSk7Ci0gICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1h
eGltdW0gPSBzdGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0sIGNoaWxk
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cy0+bWF4aW11bSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0gICAgfTsKLSAgICAvLyBGSVhNRSBD
aGVjayBmb3IgYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAgICBhdXRvIGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgPSBjb25zdHJhaW5CeU1pbk1heFdpZHRoKGxheW91dEJveCwgY29tcHV0ZWRJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpOwotICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMuZXhwYW5kKGZpeGVkTWFyZ2luQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gpKTsKLSAgICBy
ZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKLX0KLQotfQotfQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2sv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWIwODg0MjAzZGM4NmE2NzM2YWJjOGVi
ZGFmMmE1ZWYxZDU4NmFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKLQotI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiTGF5b3V0
Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKLSNpbmNsdWRlICJMYXlvdXRD
b250YWluZXJCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNw
YWNlIExheW91dCB7Ci0KLXN0YXRpYyBib29sIGlzUXVpcmtDb250YWluZXIoY29uc3QgQm94JiBs
YXlvdXRCb3gpCi17Ci0gICAgcmV0dXJuIGxheW91dEJveC5pc0JvZHlCb3goKSB8fCBsYXlvdXRC
b3guaXNEb2N1bWVudEJveCgpIHx8IGxheW91dEJveC5pc1RhYmxlQ2VsbCgpOwotfQotCi1ib29s
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bmVlZHNTdHJldGNoaW5nKGNvbnN0IEJv
eCYgbGF5b3V0Qm94KSBjb25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSk7
Ci0gICAgLy8gSW4gcXVpcmtzIG1vZGUsIGluLWZsb3cgYm9keSBhbmQgaHRtbCBzdHJldGNoIHRv
IHRoZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxvY2sgKGhlaWdodDogYXV0byBvbmx5KS4KLSAgICBp
ZiAoIWxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSAmJiAhbGF5b3V0Qm94LmlzQm9k
eUJveCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbGF5b3V0Qm94LnN0
eWxlKCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygpOwotfQotCi1MYXlvdXRVbml0IEJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4p
Ci17Ci0gICAgQVNTRVJUKG5lZWRzU3RyZXRjaGluZyhsYXlvdXRCb3gpKTsKLSAgICBhdXRvJiBm
b3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0gICAgYXV0byBu
b25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbiA9IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4ubm9uQ29s
bGFwc2VkTWFyZ2luLmJlZm9yZSArIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2Vk
TWFyZ2luLmFmdGVyOwotCi0gICAgaWYgKGxheW91dEJveC5pc0RvY3VtZW50Qm94KCkpIHsKLSAg
ICAgICAgLy8gTGV0J3Mgc3RyZXRjaCB0aGUgaW5mbG93IGRvY3VtZW50IGJveCg8aHRtbD4pIHRv
IHRoZSBoZWlnaHQgb2YgdGhlIGluaXRpYWwgY29udGFpbmluZyBibG9jayAodmlldykuCi0gICAg
ICAgIGF1dG8gZG9jdW1lbnRCb3hDb250ZW50SGVpZ2h0ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2Vv
bWV0cnlGb3JCb3gobGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxvY2soKSwgRXNjYXBlUmVh
c29uOjpEb2N1bWVudEJveFN0cmV0Y2hlc1RvVmlld3BvcnRRdWlyaykuY29udGVudEJveEhlaWdo
dCgpOwotICAgICAgICAvLyBEb2N1bWVudCBib3gncyBvd24gdmVydGljYWwgbWFyZ2luL2JvcmRl
ci9wYWRkaW5nIHZhbHVlcyBhbHdheXMgc2hyaW5rIHRoZSBjb250ZW50IGhlaWdodC4KLSAgICAg
ICAgYXV0byYgZG9jdW1lbnRCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5
Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgIGRvY3VtZW50Qm94Q29udGVudEhlaWdodCAtPSBu
b25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbiArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGljYWxC
b3JkZXIoKSArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigw
KTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVu
dEhlaWdodCwgIGRvY3VtZW50Qm94Q29udGVudEhlaWdodCk7Ci0gICAgfQotCi0gICAgLy8gSGVy
ZSBpcyB0aGUgcXVpcmt5IHBhcnQgZm9yIGJvZHkgYm94IHdoZW4gaXQgc3RyZXRjaGVzIGFsbCB0
aGUgd2F5IHRvIHRoZSBJQ0IgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBib3ggZG9lcyBub3QgKGUu
Zy4gb3V0LW9mLWZsb3cgcG9zaXRpb25lZCkuCi0gICAgQVNTRVJUKGxheW91dEJveC5pc0JvZHlC
b3goKSk7Ci0gICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9jayA9IGxheW91dEJveC5pbml0
aWFsQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9ja0dl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goaW5pdGlhbENvbnRhaW5p
bmdCbG9jaywgRXNjYXBlUmVhc29uOjpCb2R5U3RyZXRjaGVzVG9WaWV3cG9ydFF1aXJrKTsKLSAg
ICAvLyBTdGFydCB0aGUgY29udGVudCBoZWlnaHQgd2l0aCB0aGUgSUNCLgotICAgIGF1dG8gYm9k
eUJveENvbnRlbnRIZWlnaHQgPSBpbml0aWFsQ29udGFpbmluZ0Jsb2NrR2VvbWV0cnkuY29udGVu
dEJveEhlaWdodCgpOwotICAgIC8vIEJvZHkgYm94J3Mgb3duIGJvcmRlciBhbmQgcGFkZGluZyBz
aHJpbmsgdGhlIGNvbnRlbnQgaGVpZ2h0LgotICAgIGF1dG8mIGJvZHlCb3hHZW9tZXRyeSA9IGZv
cm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgYm9keUJveENv
bnRlbnRIZWlnaHQgLT0gYm9keUJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib2R5Qm94
R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKTsKLSAgICAvLyBCb2R5IGJveCBu
ZXZlciBjb2xsYXBzZXMgaXRzIHZlcnRpY2FsIG1hcmdpbnMgd2l0aCB0aGUgZG9jdW1lbnQgYm94
IGJ1dCBpdCBtaWdodCBjb2xsYXBzZSBpdHMgbWFyZ2luIHdpdGggaXRzIGRlc2NlbmRhbnRzLgot
ICAgIGF1dG8gbm9uQ29sbGFwc2VkTWFyZ2luID0gY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25D
b2xsYXBzZWRNYXJnaW47Ci0gICAgYXV0byBjb2xsYXBzZWRNYXJnaW4gPSBmb3JtYXR0aW5nQ29u
dGV4dC5tYXJnaW5Db2xsYXBzZSgpLmNvbGxhcHNlZFZlcnRpY2FsVmFsdWVzKGxheW91dEJveCwg
bm9uQ29sbGFwc2VkTWFyZ2luKS5jb2xsYXBzZWRWYWx1ZXM7Ci0gICAgYXV0byB1c2VkVmVydGlj
YWxNYXJnaW4gPSBjb2xsYXBzZWRNYXJnaW4uYmVmb3JlLnZhbHVlT3Iobm9uQ29sbGFwc2VkTWFy
Z2luLmJlZm9yZSk7Ci0gICAgdXNlZFZlcnRpY2FsTWFyZ2luICs9IGNvbGxhcHNlZE1hcmdpbi5p
c0NvbGxhcHNlZFRocm91Z2ggPyBub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIgOiBjb2xsYXBzZWRN
YXJnaW4uYWZ0ZXIudmFsdWVPcihub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIpOwotICAgIGJvZHlC
b3hDb250ZW50SGVpZ2h0IC09IHVzZWRWZXJ0aWNhbE1hcmdpbjsKLSAgICAvLyBEb2N1bWVudCBi
b3gncyBwYWRkaW5nIGFuZCBib3JkZXIgYWxzbyBzaHJpbmsgdGhlIGJvZHkgYm94J3MgY29udGVu
dCBoZWlnaHQuCi0gICAgYXV0byYgZG9jdW1lbnRCb3ggPSBsYXlvdXRCb3gucGFyZW50KCk7Ci0g
ICAgYXV0byYgZG9jdW1lbnRCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5
Rm9yQm94KGRvY3VtZW50Qm94LCBFc2NhcGVSZWFzb246OkJvZHlTdHJldGNoZXNUb1ZpZXdwb3J0
UXVpcmspOwotICAgIGJvZHlCb3hDb250ZW50SGVpZ2h0IC09IGRvY3VtZW50Qm94R2VvbWV0cnku
dmVydGljYWxCb3JkZXIoKSArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCku
dmFsdWVPcigwKTsKLSAgICAvLyBIb3dldmVyIHRoZSBub24taW4tZmxvdyBkb2N1bWVudCBib3gn
cyB2ZXJ0aWNhbCBtYXJnaW5zIGFyZSBpZ25vcmVkLiBUaGV5IGRvbid0IGFmZmVjdCB0aGUgYm9k
eSBib3gncyBjb250ZW50IGhlaWdodC4KLSAgICBpZiAoZG9jdW1lbnRCb3guaXNJbkZsb3coKSkg
ewotICAgICAgICBhdXRvIGdlb21ldHJ5ID0gdGhpcy0+Z2VvbWV0cnkoKTsKLSAgICAgICAgYXV0
byBwcmVjb21wdXRlRG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbiA9IGdlb21ldHJ5LmNvbXB1dGVk
VmVydGljYWxNYXJnaW4oZG9jdW1lbnRCb3gsIGdlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93
Q29udGVudChpbml0aWFsQ29udGFpbmluZ0Jsb2NrLCBFc2NhcGVSZWFzb246OkJvZHlTdHJldGNo
ZXNUb1ZpZXdwb3J0UXVpcmspLmhvcml6b250YWwpOwotICAgICAgICBib2R5Qm94Q29udGVudEhl
aWdodCAtPSBwcmVjb21wdXRlRG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVP
cigwKSArIHByZWNvbXB1dGVEb2N1bWVudEJveFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3Io
MCk7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om1heChjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNv
bnRlbnRIZWlnaHQsICBib2R5Qm94Q29udGVudEhlaWdodCk7Ci19Ci0KLWJvb2wgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6UXVpcmtzOjpzaG91bGRJZ25vcmVDb2xsYXBzZWRRdWlya01hcmdpbihj
b25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5p
blF1aXJrc01vZGUoKSAmJiBpc1F1aXJrQ29udGFpbmVyKGxheW91dEJveCk7Ci19Ci0KLWVudW0g
Y2xhc3MgVmVydGljYWxNYXJnaW4geyBCZWZvcmUsIEFmdGVyIH07Ci1zdGF0aWMgaW5saW5lIGJv
b2wgaGFzUXVpcmtNYXJnaW5Ub0NvbGxhcHNlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBWZXJ0aWNh
bE1hcmdpbiB2ZXJ0aWNhbE1hcmdpbikKLXsKLSAgICBpZiAoIWxheW91dEJveC5pc0luRmxvdygp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5
bGUoKTsKLSAgICByZXR1cm4gKHZlcnRpY2FsTWFyZ2luID09IFZlcnRpY2FsTWFyZ2luOjpCZWZv
cmUgJiYgc3R5bGUuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSkgfHwgKHZlcnRpY2FsTWFyZ2luID09
IFZlcnRpY2FsTWFyZ2luOjpBZnRlciAmJiBzdHlsZS5oYXNNYXJnaW5BZnRlclF1aXJrKCkpOwot
fQotCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c2hvdWxkQ29sbGFwc2VN
YXJnaW5CZWZvcmVXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBj
b25zdAotewotICAgIHJldHVybiBsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpICYmIGhhc1F1
aXJrTWFyZ2luVG9Db2xsYXBzZShsYXlvdXRCb3gsIFZlcnRpY2FsTWFyZ2luOjpCZWZvcmUpICYm
IGlzUXVpcmtDb250YWluZXIobGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKLX0KLQotYm9v
bCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OnNob3VsZENvbGxhcHNlTWFyZ2luQWZ0
ZXJXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkgJiYgaGFzUXVpcmtNYXJnaW5U
b0NvbGxhcHNlKGxheW91dEJveCwgVmVydGljYWxNYXJnaW46OkFmdGVyKSAmJiBpc1F1aXJrQ29u
dGFpbmVyKGxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7Ci19Ci0KLX0KLX0KLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjA0NzdkY2FjZjM4NWFlMDcxMGM5N2E5NTU5ZDcxMjE3ZjA4OGI1MTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2Nr
L0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtMCwwICsxLDQwNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRy
eS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRl
ICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94
R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
TGF5b3V0Q29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2su
aCIKKyNpbmNsdWRlICJMYXlvdXRSZXBsYWNlZEJveC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K25hbWVzcGFjZSBMYXlvdXQgeworCitCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6QmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkoY29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYgYmxvY2tGb3JtYXR0
aW5nQ29udGV4dCkKKyAgICA6IEZvcm1hdHRpbmdHZW9tZXRyeShibG9ja0Zvcm1hdHRpbmdDb250
ZXh0KQoreworfQorCitDb250ZW50SGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5OjppbkZsb3dOb25SZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBs
YXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFp
bnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcykKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkgJiYgIWxheW91dEJveC5p
c1JlcGxhY2VkQm94KCkpOworICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUo
KSk7CisKKyAgICBhdXRvIGNvbXB1dGUgPSBbJl0oY29uc3QgYXV0byYgb3ZlcnJpZGRlblZlcnRp
Y2FsVmFsdWVzKSAtPiBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIHsKKworICAgICAgICAvLyAxMC42
LjMgQmxvY2stbGV2ZWwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IHdoZW4g
J292ZXJmbG93JyBjb21wdXRlcyB0byAndmlzaWJsZScKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
SWYgJ21hcmdpbi10b3AnLCBvciAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywgdGhlaXIgdXNl
ZCB2YWx1ZSBpcyAwLgorICAgICAgICAvLyBJZiAnaGVpZ2h0JyBpcyAnYXV0bycsIHRoZSBoZWln
aHQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyBhbnkgYmxvY2stbGV2ZWwgY2hp
bGRyZW4gYW5kIHdoZXRoZXIgaXQgaGFzIHBhZGRpbmcgb3IgYm9yZGVyczoKKyAgICAgICAgLy8g
VGhlIGVsZW1lbnQncyBoZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGZyb20gaXRzIHRvcCBjb250ZW50
IGVkZ2UgdG8gdGhlIGZpcnN0IGFwcGxpY2FibGUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAg
Ly8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0aGUgYm94IGVz
dGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBvciBtb3JlIGxp
bmVzCisgICAgICAgIC8vIDIuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm90dG9tIChwb3NzaWJs
eSBjb2xsYXBzZWQpIG1hcmdpbiBvZiBpdHMgbGFzdCBpbi1mbG93IGNoaWxkLCBpZiB0aGUgY2hp
bGQncyBib3R0b20gbWFyZ2luCisgICAgICAgIC8vICAgIGRvZXMgbm90IGNvbGxhcHNlIHdpdGgg
dGhlIGVsZW1lbnQncyBib3R0b20gbWFyZ2luCisgICAgICAgIC8vIDMuIHRoZSBib3R0b20gYm9y
ZGVyIGVkZ2Ugb2YgdGhlIGxhc3QgaW4tZmxvdyBjaGlsZCB3aG9zZSB0b3AgbWFyZ2luIGRvZXNu
J3QgY29sbGFwc2Ugd2l0aCB0aGUgZWxlbWVudCdzIGJvdHRvbSBtYXJnaW4KKyAgICAgICAgLy8g
NC4gemVybywgb3RoZXJ3aXNlCisgICAgICAgIC8vIE9ubHkgY2hpbGRyZW4gaW4gdGhlIG5vcm1h
bCBmbG93IGFyZSB0YWtlbiBpbnRvIGFjY291bnQgKGkuZS4sIGZsb2F0aW5nIGJveGVzIGFuZCBh
YnNvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGlnbm9yZWQsCisgICAgICAgIC8vIGFuZCBy
ZWxhdGl2ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGNvbnNpZGVyZWQgd2l0aG91dCB0aGVpciBv
ZmZzZXQpLiBOb3RlIHRoYXQgdGhlIGNoaWxkIGJveCBtYXkgYmUgYW4gYW5vbnltb3VzIGJsb2Nr
IGJveC4KKworICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2Fs
TWFyZ2luID0gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91
dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAgICAgYXV0byBub25Db2xsYXBzZWRN
YXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4u
YWZ0ZXIudmFsdWVPcigwKSB9OyAKKyAgICAgICAgYXV0byBib3JkZXJBbmRQYWRkaW5nVG9wID0g
Ym94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVP
cigwKTsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVp
Z2h0ID8gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRI
ZWlnaHQobGF5b3V0Qm94KTsKKworICAgICAgICBpZiAoaGVpZ2h0KQorICAgICAgICAgICAgcmV0
dXJuIHsgKmhlaWdodCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07CisKKyAgICAgICAgaWYgKCFpczxD
b250YWluZXJCb3g+KGxheW91dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0
Qm94KS5oYXNJbkZsb3dDaGlsZCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgMCwgbm9uQ29sbGFw
c2VkTWFyZ2luIH07CisKKyAgICAgICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0
IGxpbmUgYm94LCBpZiB0aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29u
dGV4dCB3aXRoIG9uZSBvciBtb3JlIGxpbmVzCisgICAgICAgIGF1dG8mIGxheW91dENvbnRhaW5l
ciA9IGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KTsKKyAgICAgICAgaWYgKGxheW91
dENvbnRhaW5lci5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAg
ICAgICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJs
aXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUobGF5b3V0Q29udGFpbmVyKTsKKyAgICAgICAgICAg
IGF1dG8mIGxpbmVzID0gaW5saW5lRm9ybWF0dGluZ1N0YXRlLmxpbmVzKCk7CisgICAgICAgICAg
ICAvLyBFdmVuIGVtcHR5IGNvbnRhaW5lcnMgZ2VuZXJhdGUgb25lIGxpbmUuIAorICAgICAgICAg
ICAgQVNTRVJUKCFsaW5lcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgcmV0dXJuIHsgdG9MYXlv
dXRVbml0KGxpbmVzLmxhc3QoKS5saW5lQm94TG9naWNhbFJlY3QoKS5ib3R0b20oKSArIGlubGlu
ZUZvcm1hdHRpbmdTdGF0ZS5jbGVhckdhcEFmdGVyTGFzdExpbmUoKSkgLSBib3JkZXJBbmRQYWRk
aW5nVG9wLCBub25Db2xsYXBzZWRNYXJnaW4gfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDIu
IHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm90dG9tIChwb3NzaWJseSBjb2xsYXBzZWQpIG1hcmdp
biBvZiBpdHMgbGFzdCBpbi1mbG93IGNoaWxkLCBpZiB0aGUgY2hpbGQncyBib3R0b20gbWFyZ2lu
Li4uCisgICAgICAgIGF1dG8gbWFyZ2luQ29sbGFwc2UgPSBCbG9ja01hcmdpbkNvbGxhcHNlIHsg
bGF5b3V0U3RhdGUoKSwgZm9ybWF0dGluZ0NvbnRleHQoKS5mb3JtYXR0aW5nU3RhdGUoKSB9Owor
ICAgICAgICBhdXRvJiBsYXN0SW5GbG93Q2hpbGQgPSAqbGF5b3V0Q29udGFpbmVyLmxhc3RJbkZs
b3dDaGlsZCgpOworICAgICAgICBpZiAoIW1hcmdpbkNvbGxhcHNlLm1hcmdpbkFmdGVyQ29sbGFw
c2VzV2l0aFBhcmVudE1hcmdpbkFmdGVyKGxhc3RJbkZsb3dDaGlsZCkpIHsKKyAgICAgICAgICAg
IGF1dG8mIGxhc3RJbkZsb3dCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0
cnlGb3JCb3gobGFzdEluRmxvd0NoaWxkKTsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tRWRnZU9m
Qm90dG9tTWFyZ2luID0gQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QobGFzdEluRmxvd0JveEdl
b21ldHJ5KS5ib3R0b20oKSArIGxhc3RJbkZsb3dCb3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpOwor
ICAgICAgICAgICAgcmV0dXJuIHsgYm90dG9tRWRnZU9mQm90dG9tTWFyZ2luIC0gYm9yZGVyQW5k
UGFkZGluZ1RvcCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07CisgICAgICAgIH0KKworICAgICAgICAv
LyAzLiB0aGUgYm90dG9tIGJvcmRlciBlZGdlIG9mIHRoZSBsYXN0IGluLWZsb3cgY2hpbGQgd2hv
c2UgdG9wIG1hcmdpbiBkb2Vzbid0IGNvbGxhcHNlIHdpdGggdGhlIGVsZW1lbnQncyBib3R0b20g
bWFyZ2luCisgICAgICAgIGF1dG8qIGluRmxvd0NoaWxkID0gJmxhc3RJbkZsb3dDaGlsZDsKKyAg
ICAgICAgd2hpbGUgKGluRmxvd0NoaWxkICYmIG1hcmdpbkNvbGxhcHNlLm1hcmdpbkJlZm9yZUNv
bGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcigqaW5GbG93Q2hpbGQpKQorICAgICAgICAgICAg
aW5GbG93Q2hpbGQgPSBpbkZsb3dDaGlsZC0+cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7CisgICAg
ICAgIGlmIChpbkZsb3dDaGlsZCkgeworICAgICAgICAgICAgYXV0byYgaW5GbG93Qm94R2VvbWV0
cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCppbkZsb3dDaGlsZCk7Cisg
ICAgICAgICAgICByZXR1cm4geyBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94VG9wKGluRmxvd0JveEdl
b21ldHJ5KSArIGluRmxvd0JveEdlb21ldHJ5LmJvcmRlckJveCgpLmhlaWdodCgpIC0gYm9yZGVy
QW5kUGFkZGluZ1RvcCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07CisgICAgICAgIH0KKworICAgICAg
ICAvLyA0LiB6ZXJvLCBvdGhlcndpc2UKKyAgICAgICAgcmV0dXJuIHsgMCwgbm9uQ29sbGFwc2Vk
TWFyZ2luIH07CisgICAgfTsKKworICAgIC8vIDEwLjYuNyAnQXV0bycgaGVpZ2h0cyBmb3IgYmxv
Y2stbGV2ZWwgZm9ybWF0dGluZyBjb250ZXh0IGJveGVzLgorICAgIGF1dG8gaXNBdXRvSGVpZ2h0
ID0gIW92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgJiYgIWNvbXB1dGVkSGVpZ2h0KGxh
eW91dEJveCk7CisgICAgaWYgKGlzQXV0b0hlaWdodCAmJiAobGF5b3V0Qm94LmVzdGFibGlzaGVz
Rm9ybWF0dGluZ0NvbnRleHQoKSAmJiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQoKSkpCisgICAgICAgIHJldHVybiBjb21wdXRlKCBPdmVycmlkZGVuVmVydGlj
YWxWYWx1ZXMgeyBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGRvd25jYXN0
PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSkgfSk7CisgICAgcmV0dXJuIGNvbXB1dGUob3ZlcnJp
ZGRlblZlcnRpY2FsVmFsdWVzKTsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9y
bWF0dGluZ0dlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihj
b25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9u
dGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlk
ZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkp
OworCisgICAgYXV0byBjb21wdXRlID0gWyZdKCkgeworCisgICAgICAgIC8vIDEwLjMuMyBCbG9j
ay1sZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93CisgICAgICAgIC8v
CisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29uc3RyYWludHMgbXVzdCBob2xkIGFtb25nIHRo
ZSB1c2VkIHZhbHVlcyBvZiB0aGUgb3RoZXIgcHJvcGVydGllczoKKyAgICAgICAgLy8gJ21hcmdp
bi1sZWZ0JyArICdib3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGluZy1sZWZ0JyArICd3aWR0aCcg
KyAncGFkZGluZy1yaWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyArICdtYXJnaW4tcmlnaHQn
ID0gd2lkdGggb2YgY29udGFpbmluZyBibG9jaworICAgICAgICAvLworICAgICAgICAvLyAxLiBJ
ZiAnd2lkdGgnIGlzIG5vdCAnYXV0bycgYW5kICdib3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGlu
Zy1sZWZ0JyArICd3aWR0aCcgKyAncGFkZGluZy1yaWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRo
JyAKKyAgICAgICAgLy8gICAgKHBsdXMgYW55IG9mICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1y
aWdodCcgdGhhdCBhcmUgbm90ICdhdXRvJykgaXMgbGFyZ2VyIHRoYW4gdGhlIHdpZHRoIG9mIHRo
ZSBjb250YWluaW5nIGJsb2NrLCB0aGVuCisgICAgICAgIC8vICAgIGFueSAnYXV0bycgdmFsdWVz
IGZvciAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGFyZSwgZm9yIHRoZSBmb2xsb3dp
bmcgcnVsZXMsIHRyZWF0ZWQgYXMgemVyby4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMi4gSWYg
YWxsIG9mIHRoZSBhYm92ZSBoYXZlIGEgY29tcHV0ZWQgdmFsdWUgb3RoZXIgdGhhbiAnYXV0bycs
IHRoZSB2YWx1ZXMgYXJlIHNhaWQgdG8gYmUgIm92ZXItY29uc3RyYWluZWQiIGFuZCBvbmUgb2Yg
dGhlIHVzZWQgdmFsdWVzIHdpbGwKKyAgICAgICAgLy8gICAgaGF2ZSB0byBiZSBkaWZmZXJlbnQg
ZnJvbSBpdHMgY29tcHV0ZWQgdmFsdWUuIElmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0
aGUgY29udGFpbmluZyBibG9jayBoYXMgdGhlIHZhbHVlICdsdHInLCB0aGUgc3BlY2lmaWVkIHZh
bHVlCisgICAgICAgIC8vICAgIG9mICdtYXJnaW4tcmlnaHQnIGlzIGlnbm9yZWQgYW5kIHRoZSB2
YWx1ZSBpcyBjYWxjdWxhdGVkIHNvIGFzIHRvIG1ha2UgdGhlIGVxdWFsaXR5IHRydWUuIElmIHRo
ZSB2YWx1ZSBvZiAnZGlyZWN0aW9uJyBpcyAncnRsJywKKyAgICAgICAgLy8gICAgdGhpcyBoYXBw
ZW5zIHRvICdtYXJnaW4tbGVmdCcgaW5zdGVhZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMy4g
SWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgdmFsdWUgc3BlY2lmaWVkIGFzICdhdXRvJywgaXRzIHVz
ZWQgdmFsdWUgZm9sbG93cyBmcm9tIHRoZSBlcXVhbGl0eS4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gNC4gSWYgJ3dpZHRoJyBpcyBzZXQgdG8gJ2F1dG8nLCBhbnkgb3RoZXIgJ2F1dG8nIHZhbHVl
cyBiZWNvbWUgJzAnIGFuZCAnd2lkdGgnIGZvbGxvd3MgZnJvbSB0aGUgcmVzdWx0aW5nIGVxdWFs
aXR5LgorICAgICAgICAvLworICAgICAgICAvLyA1LiBJZiBib3RoICdtYXJnaW4tbGVmdCcgYW5k
ICdtYXJnaW4tcmlnaHQnIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWVzIGFyZSBlcXVhbC4g
VGhpcyBob3Jpem9udGFsbHkgY2VudGVycyB0aGUgZWxlbWVudCB3aXRoIHJlc3BlY3QgdG8gdGhl
CisgICAgICAgIC8vICAgIGVkZ2VzIG9mIHRoZSBjb250YWluaW5nIGJsb2NrLgorCisgICAgICAg
IGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNh
bFdpZHRoOworICAgICAgICBhdXRvJiBjb250YWluaW5nQmxvY2tTdHlsZSA9IGxheW91dEJveC5j
b250YWluaW5nQmxvY2soKS5zdHlsZSgpOworICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZv
cm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKworICAgICAgICBh
dXRvIHdpZHRoID0gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVu
SG9yaXpvbnRhbFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkV2lkdGgobGF5b3V0Qm94LCBjb250YWlu
aW5nQmxvY2tXaWR0aCk7CisgICAgICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0g
Rm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBo
b3Jpem9udGFsQ29uc3RyYWludHMpOworICAgICAgICBVc2VkSG9yaXpvbnRhbE1hcmdpbiB1c2Vk
SG9yaXpvbnRhbE1hcmdpbjsKKyAgICAgICAgYXV0byBib3JkZXJMZWZ0ID0gYm94R2VvbWV0cnku
Ym9yZGVyTGVmdCgpOworICAgICAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9y
ZGVyUmlnaHQoKTsKKyAgICAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGJveEdlb21ldHJ5LnBhZGRp
bmdMZWZ0KCkudmFsdWVPcigwKTsKKyAgICAgICAgYXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9t
ZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOworCisgICAgICAgIC8vICMxCisgICAgICAg
IGlmICh3aWR0aCkgeworICAgICAgICAgICAgYXV0byBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4g
PSBjb250YWluaW5nQmxvY2tXaWR0aCAtIChjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQu
dmFsdWVPcigwKSArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdS
aWdodCArIGJvcmRlclJpZ2h0ICsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9y
KDApKTsKKyAgICAgICAgICAgIGlmIChob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gPCAwKQorICAg
ICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1
ZU9yKDApIH07CisgICAgICAgIH0KKworICAgICAgICAvLyAjMgorICAgICAgICBpZiAod2lkdGgg
JiYgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmIGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5lbmQpIHsKKyAgICAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2tTdHlsZS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7CisgICAgICAgICAgICAg
ICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNl
ZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lk
dGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9ICpjb21wdXRlZEhvcml6
b250YWxNYXJnaW4uZW5kOworICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsg
KndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5lbmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gIzMKKyAgICAg
ICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgJiYgd2lkdGggJiYgY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgeworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJn
aW4uZW5kID0gKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQ7CisgICAgICAgICAgICB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKGJvcmRlckxl
ZnQgKyBwYWRkaW5nTGVmdCAgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCAr
IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmICF3aWR0aCAmJiBjb21wdXRlZEhvcml6b250YWxNYXJn
aW4uZW5kKSB7CisgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgKmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbi5zdGFydCwgKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQgfTsK
KyAgICAgICAgICAgIHdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250
YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQg
KyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmIHdpZHRoICYmICFjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uZW5kKSB7CisgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7CisgICAgICAgICAgICB1
c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9y
aXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCAr
IHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICM0
CisgICAgICAgIGlmICghd2lkdGgpIHsKKyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2lu
ID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07CisgICAgICAgICAgICB3aWR0aCA9IGNv
bnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVy
TGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9y
aXpvbnRhbE1hcmdpbi5lbmQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gIzUKKyAgICAgICAg
aWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgJiYgIWNvbXB1dGVkSG9yaXpvbnRh
bE1hcmdpbi5lbmQpIHsKKyAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbFNwYWNlRm9yTWFyZ2lu
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICArICp3
aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0KTsKKyAgICAgICAgICAgIHVzZWRIb3Jp
em9udGFsTWFyZ2luID0geyBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gLyAyLCBob3Jpem9udGFs
U3BhY2VGb3JNYXJnaW4gLyAyIH07CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHNob3VsZEFw
cGx5Q2VudGVyQWxpZ25Gb3JCbG9ja0NvbnRlbnQgPSBjb250YWluaW5nQmxvY2tTdHlsZS50ZXh0
QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXIgJiYgKGNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydCB8fCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKTsKKyAgICAg
ICAgaWYgKHNob3VsZEFwcGx5Q2VudGVyQWxpZ25Gb3JCbG9ja0NvbnRlbnQpIHsKKyAgICAgICAg
ICAgIGF1dG8gYm9yZGVyQm94V2lkdGggPSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICArICp3
aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0KTsKKyAgICAgICAgICAgIGF1dG8gbWFy
Z2luU3RhcnQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKTsKKyAg
ICAgICAgICAgIGF1dG8gbWFyZ2luRW5kID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52
YWx1ZU9yKDApOworICAgICAgICAgICAgYXV0byBjZW50ZXJlZExvZ2ljYWxMZWZ0Rm9yTWFyZ2lu
Qm94ID0gc3RkOjptYXgoKGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gYm9yZGVyQm94V2lkdGggLSBt
YXJnaW5TdGFydCAtIG1hcmdpbkVuZCkgLyAyLCAwX2x1KTsKKyAgICAgICAgICAgIHVzZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0ID0gY2VudGVyZWRMb2dpY2FsTGVmdEZvck1hcmdpbkJveCArIG1h
cmdpblN0YXJ0OworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gY29udGFp
bmluZ0Jsb2NrV2lkdGggLSBib3JkZXJCb3hXaWR0aCAtIG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5k
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVCh3aWR0aCk7CisKKyAgICAgICAgcmV0dXJuIENv
bnRlbnRXaWR0aEFuZE1hcmdpbiB7ICp3aWR0aCwgdXNlZEhvcml6b250YWxNYXJnaW4gfTsKKyAg
ICB9OworCisgICAgYXV0byBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBjb21wdXRlKCk7CisgICAg
TE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0
aF1bTWFyZ2luXSAtPiBpbmZsb3cgbm9uLXJlcGxhY2VkIC0+IHdpZHRoKCIgPDwgY29udGVudFdp
ZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IGNvbnRlbnRXaWR0
aEFuZE1hcmdpbi51c2VkTWFyZ2luLnN0YXJ0IDw8ICJweCwgIiA8PCBjb250ZW50V2lkdGhBbmRN
YXJnaW4udXNlZE1hcmdpbi5lbmQgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94
IDw8ICIpIik7CisgICAgcmV0dXJuIGNvbnRlbnRXaWR0aEFuZE1hcmdpbjsKK30KKworQ29udGVu
dFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dSZXBsYWNlZENv
bnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0
IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVy
cmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCit7Cisg
ICAgQVNTRVJUKHJlcGxhY2VkQm94LmlzSW5GbG93KCkpOworCisgICAgLy8gMTAuMy40IEJsb2Nr
LWxldmVsLCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdworICAgIC8vCisgICAgLy8g
MS4gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUg
cmVwbGFjZWQgZWxlbWVudHMuCisgICAgLy8gMi4gVGhlbiB0aGUgcnVsZXMgZm9yIG5vbi1yZXBs
YWNlZCBibG9jay1sZXZlbCBlbGVtZW50cyBhcmUgYXBwbGllZCB0byBkZXRlcm1pbmUgdGhlIG1h
cmdpbnMuCisKKyAgICAvLyAjMQorICAgIGF1dG8gdXNlZFdpZHRoID0gaW5saW5lUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywg
eyB9LCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykuY29udGVudFdpZHRoOworICAgIC8vICMy
CisgICAgYXV0byBub25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywg
T3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMgeyB1c2VkV2lkdGgsIG92ZXJyaWRkZW5Ib3Jpem9u
dGFsVmFsdWVzLm1hcmdpbiB9KTsKKworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29u
dGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5mbG93IHJlcGxhY2Vk
IC0+IHdpZHRoKCIgPDwgdXNlZFdpZHRoICA8PCAicHgpIG1hcmdpbigiIDw8IG5vblJlcGxhY2Vk
V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCA8PCAicHgsICIgPDwgbm9uUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLmVuZCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZy
ZXBsYWNlZEJveCA8PCAiKSIpOworICAgIHJldHVybiB7IHVzZWRXaWR0aCwgbm9uUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luIH07Cit9CisKK0xheW91dFVuaXQgQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gs
IGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0Cit7
CisgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zpc3VyZW4uaHRtbCNibG9jay1m
b3JtYXR0aW5nCisgICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQsIGJveGVzIGFy
ZSBsYWlkIG91dCBvbmUgYWZ0ZXIgdGhlIG90aGVyLCB2ZXJ0aWNhbGx5LCBiZWdpbm5pbmcgYXQg
dGhlIHRvcCBvZiBhIGNvbnRhaW5pbmcgYmxvY2suCisgICAgLy8gVGhlIHZlcnRpY2FsIGRpc3Rh
bmNlIGJldHdlZW4gdHdvIHNpYmxpbmcgYm94ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgJ21hcmdp
bicgcHJvcGVydGllcy4KKyAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zIGJldHdlZW4gYWRqYWNlbnQg
YmxvY2stbGV2ZWwgYm94ZXMgaW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgY29sbGFwc2Uu
CisgICAgaWYgKGF1dG8qIHByZXZpb3VzSW5GbG93U2libGluZyA9IGxheW91dEJveC5wcmV2aW91
c0luRmxvd1NpYmxpbmcoKSkgeworICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0JveEdlb21l
dHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqcHJldmlvdXNJbkZsb3dT
aWJsaW5nKTsKKyAgICAgICAgcmV0dXJuIEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KHByZXZp
b3VzSW5GbG93Qm94R2VvbWV0cnkpLmJvdHRvbSgpICsgcHJldmlvdXNJbkZsb3dCb3hHZW9tZXRy
eS5tYXJnaW5BZnRlcigpOworICAgIH0KKyAgICByZXR1cm4gdmVydGljYWxDb25zdHJhaW50cy5s
b2dpY2FsVG9wOworfQorCitMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjpzdGF0
aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAoreworICAgIC8vIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1cmVuLmh0bWwjYmxvY2stZm9ybWF0dGluZwor
ICAgIC8vIEluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LCBlYWNoIGJveCdzIGxlZnQgb3V0
ZXIgZWRnZSB0b3VjaGVzIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgKGZv
ciByaWdodC10by1sZWZ0IGZvcm1hdHRpbmcsIHJpZ2h0IGVkZ2VzIHRvdWNoKS4KKyAgICByZXR1
cm4gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0ICsgZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdpblN0YXJ0KCk7Cit9CisKK1BvaW50IEJs
b2NrRm9ybWF0dGluZ0dlb21ldHJ5OjpzdGF0aWNQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNv
bnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHsgc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGxheW91dEJveCwgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKSwgc3RhdGljVmVydGljYWxQb3NpdGlvbihsYXlvdXRCb3gsIHZlcnRpY2Fs
Q29uc3RyYWludHMpIH07Cit9CisKK0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnk6OmluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlv
dXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVl
cykKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOworCisgICAgLy8gMTAuNi4y
IElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMg
aW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snCisgICAgLy8gcmVwbGFjZWQgZWxlbWVudHMg
aW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1lbnRzCisgICAgaWYgKGxh
eW91dEJveC5pc1JlcGxhY2VkQm94KCkpCisgICAgICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENv
bnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhv
cml6b250YWxDb25zdHJhaW50cywgeyB9LCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOworCisg
ICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBjb250ZW50SGVpZ2h0QW5kTWFyZ2luOworICAgIGlm
IChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSAmJiAhbGF5b3V0Qm94LmlzRG9jdW1lbnRC
b3goKSkgeworICAgICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHRoZSBjYXNlIGZvciB0aGUgZG9j
dW1lbnQgZWxlbWVudC4gTGV0J3MganVzdCBjb21wbGljYXRlZC1jYXNlIGl0IGZvciBub3cuCisg
ICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBpbkZsb3dOb25SZXBsYWNlZENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gMTAuNi42IENvbXBs
aWNhdGVkIGNhc2VzCisgICAgICAgIC8vIEJsb2NrLWxldmVsLCBub24tcmVwbGFjZWQgZWxlbWVu
dHMgaW4gbm9ybWFsIGZsb3cgd2hlbiAnb3ZlcmZsb3cnIGRvZXMgbm90IGNvbXB1dGUgdG8gJ3Zp
c2libGUnIChleGNlcHQgaWYgdGhlICdvdmVyZmxvdycgcHJvcGVydHkncyB2YWx1ZSBoYXMgYmVl
biBwcm9wYWdhdGVkIHRvIHRoZSB2aWV3cG9ydCkuCisgICAgICAgIGNvbnRlbnRIZWlnaHRBbmRN
YXJnaW4gPSBjb21wbGljYXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOworICAgIH0KKworICAgIGlmIChsYXlvdXRTdGF0
ZSgpLmluUXVpcmtzTW9kZSgpKSB7CisgICAgICAgIGlmIChhdXRvIHN0cmV0Y2hlZEluRmxvd0hl
aWdodCA9IEJsb2NrRm9ybWF0dGluZ1F1aXJrcyhmb3JtYXR0aW5nQ29udGV4dCgpKS5zdHJldGNo
ZWRJbkZsb3dIZWlnaHRJZkFwcGxpY2FibGUobGF5b3V0Qm94LCBjb250ZW50SGVpZ2h0QW5kTWFy
Z2luKSkKKyAgICAgICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA9
ICpzdHJldGNoZWRJbkZsb3dIZWlnaHQ7ICAgICAKKyAgICB9CisKKyAgICBMT0dfV0lUSF9TVFJF
QU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAt
PiBpbmZsb3cgbm9uLXJlcGxhY2VkIC0+IHN0cmVjaGVkIHRvIHZpZXdwb3J0IC0+IGhlaWdodCgi
IDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA8PCAicHgpIG1hcmdpbigi
IDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luLmJlZm9yZSA8PCAi
cHgsICIgPDwgY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIg
PDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAgcmV0dXJu
IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW47Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93Q29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJv
eCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25z
dHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jp
em9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSk7CisKKyAg
ICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCisgICAgICAgIHJldHVybiBpbkZsb3dO
b25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOworICAgIHJldHVybiBpbkZsb3dS
ZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0
Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7
Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6Y29t
cHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBPcHRpb25hbDxMYXlv
dXRVbml0PiBhdmFpbGFibGVXaWR0aEZsb2F0QXZvaWRlcikKK3sKKyAgICBhdXRvIGNvbXB1dGUg
PSBbJl0gKGF1dG8gY29uc3RyYWludHNGb3JXaWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNl
ZFdpZHRoKSB7CisgICAgICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkK
KyAgICAgICAgICAgIHJldHVybiBmbG9hdGluZ0NvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRC
b3gsIGNvbnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNlZFdpZHRoLCB7IH0gfSk7CisKKyAgICAgICAg
aWYgKGxheW91dEJveC5pc0luRmxvdygpKQorICAgICAgICAgICAgcmV0dXJuIGluRmxvd0NvbnRl
bnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNlZFdp
ZHRoLCB7IH0gfSk7CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBDb250ZW50V2lkdGhBbmRNYXJnaW4geyB9OworICAgIH07CisKKyAgICBhdXRvIGhvcml6
b250YWxDb25zdHJhaW50c0ZvcldpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzOworICAgIGlm
IChsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSAmJiBhdmFpbGFibGVX
aWR0aEZsb2F0QXZvaWRlcikgeworICAgICAgICAvLyBXaGlsZSB0aGUgbm9uLWF1dG8gd2lkdGgg
dmFsdWVzIHNob3VsZCBhbGwgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgY29udGFpbmluZyBibG9j
aydzIHdpZHRoLCB3aGVuCisgICAgICAgIC8vIHRoZSB3aWR0aCBpcyBhdXRvIHRoZSBhdmFpbGFi
bGUgaG9yaXpvbnRhbCBzcGFjZSBpcyBzaHJ1bmsgYnkgbmVpZ2hib3JpbmcgZmxvYXRzLgorICAg
ICAgICBob3Jpem9udGFsQ29uc3RyYWludHNGb3JXaWR0aC5sb2dpY2FsV2lkdGggPSAqYXZhaWxh
YmxlV2lkdGhGbG9hdEF2b2lkZXI7CisgICAgfQorICAgIGF1dG8gY29udGVudFdpZHRoQW5kTWFy
Z2luID0gY29tcHV0ZShob3Jpem9udGFsQ29uc3RyYWludHNGb3JXaWR0aCwgeyB9KTsKKyAgICBh
dXRvIGF2YWlsYWJsZVdpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsK
KyAgICBpZiAoYXV0byBtYXhXaWR0aCA9IGNvbXB1dGVkTWF4V2lkdGgobGF5b3V0Qm94LCBhdmFp
bGFibGVXaWR0aCkpIHsKKyAgICAgICAgYXV0byBtYXhXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUo
aG9yaXpvbnRhbENvbnN0cmFpbnRzLCBtYXhXaWR0aCk7CisgICAgICAgIGlmIChjb250ZW50V2lk
dGhBbmRNYXJnaW4uY29udGVudFdpZHRoID4gbWF4V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRo
KQorICAgICAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWF4V2lkdGhBbmRNYXJnaW47
CisgICAgfQorCisgICAgYXV0byBtaW5XaWR0aCA9IGNvbXB1dGVkTWluV2lkdGgobGF5b3V0Qm94
LCBhdmFpbGFibGVXaWR0aCkudmFsdWVPcigwKTsKKyAgICBhdXRvIG1pbldpZHRoQW5kTWFyZ2lu
ID0gY29tcHV0ZShob3Jpem9udGFsQ29uc3RyYWludHMsIG1pbldpZHRoKTsKKyAgICBpZiAoY29u
dGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbldpZHRoQW5kTWFyZ2luLmNvbnRl
bnRXaWR0aCkKKyAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWluV2lkdGhBbmRNYXJn
aW47CisgICAgcmV0dXJuIGNvbnRlbnRXaWR0aEFuZE1hcmdpbjsKK30KKworSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6aW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyhjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBhdXRvIGZpeGVkTWFyZ2luQm9y
ZGVyQW5kUGFkZGluZyA9IFsmXShhdXRvJiBsYXlvdXRCb3gpIHsKKyAgICAgICAgYXV0byYgc3R5
bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICAgICAgcmV0dXJuIGZpeGVkVmFsdWUoc3R5bGUu
bWFyZ2luU3RhcnQoKSkudmFsdWVPcigwKQorICAgICAgICAgICAgKyBMYXlvdXRVbml0IHsgc3R5
bGUuYm9yZGVyTGVmdFdpZHRoKCkgfQorICAgICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLnBh
ZGRpbmdMZWZ0KCkpLnZhbHVlT3IoMCkKKyAgICAgICAgICAgICsgZml4ZWRWYWx1ZShzdHlsZS5w
YWRkaW5nUmlnaHQoKSkudmFsdWVPcigwKQorICAgICAgICAgICAgKyBMYXlvdXRVbml0IHsgc3R5
bGUuYm9yZGVyUmlnaHRXaWR0aCgpIH0KKyAgICAgICAgICAgICsgZml4ZWRWYWx1ZShzdHlsZS5t
YXJnaW5FbmQoKSkudmFsdWVPcigwKTsKKyAgICB9OworCisgICAgYXV0byBjb21wdXRlZEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgPSBbJl0oKSAtPiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
IHsKKyAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2Fs
V2lkdGgoKTsKKyAgICAgICAgLy8gTWluaW11bS9tYXhpbXVtIHdpZHRoIGNhbid0IGJlIGRlcGVu
ZGluZyBvbiB0aGUgY29udGFpbmluZyBibG9jaydzIHdpZHRoLgorICAgICAgICBhdXRvIG5lZWRz
UmVzb2x2ZWRDb250YWluaW5nQmxvY2tXaWR0aCA9IGxvZ2ljYWxXaWR0aC5pc0NhbGN1bGF0ZWQo
KSB8fCBsb2dpY2FsV2lkdGguaXNQZXJjZW50KCkgfHwgbG9naWNhbFdpZHRoLmlzUmVsYXRpdmUo
KTsKKyAgICAgICAgaWYgKG5lZWRzUmVzb2x2ZWRDb250YWluaW5nQmxvY2tXaWR0aCkKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBmaXhlZFZhbHVl
KGxvZ2ljYWxXaWR0aCkpCisgICAgICAgICAgICByZXR1cm4geyAqd2lkdGgsICp3aWR0aCB9Owor
CisgICAgICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKSB7CisgICAgICAgICAgICBh
dXRvJiByZXBsYWNlZEJveCA9IGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpOworICAg
ICAgICAgICAgaWYgKHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIHJlcGxhY2VkV2lkdGggPSByZXBsYWNlZEJveC5pbnRyaW5zaWNXaWR0aCgp
OworICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcGxhY2VkV2lkdGgsIHJlcGxhY2VkV2lkdGgg
fTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIWlzPENvbnRhaW5lckJveD4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8Q29u
dGFpbmVyQm94PihsYXlvdXRCb3gpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBpZiAobGF5b3V0Qm94LmlzU2l6ZUNvbnRhaW5t
ZW50Qm94KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBpbnRyaW5zaWMgc2l6ZXMgb2YgdGhlIHNp
emUgY29udGFpbm1lbnQgYm94IGFyZSBkZXRlcm1pbmVkIGFzIGlmIHRoZSBlbGVtZW50IGhhZCBu
byBjb250ZW50LAorICAgICAgICAgICAgLy8gZm9sbG93aW5nIHRoZSBzYW1lIGxvZ2ljIGFzIHdo
ZW4gc2l6aW5nIGFzIGlmIGVtcHR5LgorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgp
KSB7CisgICAgICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBMYXlvdXRD
b250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChkb3duY2FzdDxDb250YWluZXJCb3g+KGxh
eW91dEJveCksIGxheW91dFN0YXRlKCkpLT5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMoKTsKKyAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNNaW5Db250ZW50KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtLCBp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0gfTsKKyAgICAgICAgICAgIGlmIChsb2dp
Y2FsV2lkdGguaXNNYXhDb250ZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtLCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1h
eGltdW0gfTsKKyAgICAgICAgICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOwor
ICAgICAgICB9CisKKyAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gSW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH07CisgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0
ZSA9IGxheW91dFN0YXRlKCkuZm9ybWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCk7CisgICAg
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxCb3g+KGRvd25jYXN0PENvbnRh
aW5lckJveD4obGF5b3V0Qm94KSkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC5pc091dE9mRmxv
d1Bvc2l0aW9uZWQoKSB8fCAoY2hpbGQuaXNGbG9hdEF2b2lkZXIoKSAmJiAhY2hpbGQuaGFzRmxv
YXRDbGVhcigpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8g
Y2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0YXRlLmludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHNGb3JCb3goY2hpbGQpOworICAgICAgICAgICAgQVNTRVJUKGNoaWxk
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk7CisKKyAgICAgICAgICAgIGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMubWluaW11bSA9IHN0ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMu
bWluaW11bSwgY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLT5taW5pbXVtKTsKKyAgICAg
ICAgICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSA9IHN0ZDo6bWF4KGludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSwgY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzLT5tYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50cmluc2ljV2lkdGhD
b25zdHJhaW50czsKKyAgICB9OworICAgIC8vIEZJWE1FIENoZWNrIGZvciBib3gtc2l6aW5nOiBi
b3JkZXItYm94OworICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGNvbnN0cmFp
bkJ5TWluTWF4V2lkdGgobGF5b3V0Qm94LCBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMoKSk7CisgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5leHBhbmQoZml4ZWRNYXJnaW5C
b3JkZXJBbmRQYWRkaW5nKGxheW91dEJveCkpOworICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzOworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRy
eS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyMjY2ZTM0OGE5NjMwOTU5NDllYjg3
NjM5NDQxM2E0MWRhNGUzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAg
LTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nR2VvbWV0cnku
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKKy8vIFRoaXMg
Y2xhc3MgaW1wbGVtZW50cyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nIGZvciBib3hlcyBwYXJ0aWNp
cGF0aW5nIGluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LgorY2xhc3MgQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKK3B1YmxpYzoKKyAgICBC
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Jik7CisK
KyAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4o
Y29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRl
blZlcnRpY2FsVmFsdWVzJik7CisgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd0NvbnRl
bnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOworCisgICAgUG9pbnQgc3RhdGlj
UG9zaXRpb24oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3Qg
VmVydGljYWxDb25zdHJhaW50cyYpIGNvbnN0OworICAgIExheW91dFVuaXQgc3RhdGljVmVydGlj
YWxQb3NpdGlvbihjb25zdCBCb3gmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJikgY29uc3Q7
CisgICAgTGF5b3V0VW5pdCBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiwgY29u
c3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CisKKyAgICBJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgQm94Jik7CisKKyAgICBD
b250ZW50V2lkdGhBbmRNYXJnaW4gY29tcHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3Qg
Qm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4g
YXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXIpOworCitwcml2YXRlOgorICAgIENvbnRlbnRIZWln
aHRBbmRNYXJnaW4gaW5GbG93Tm9uUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0
IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcyYpOworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbkZsb3dOb25SZXBsYWNl
ZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOworICAgIENvbnRlbnRX
aWR0aEFuZE1hcmdpbiBpbkZsb3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBS
ZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRk
ZW5Ib3Jpem9udGFsVmFsdWVzJik7CisKKyAgICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ+KEZvcm1hdHRpbmdHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0K
K307CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z1F1aXJrcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmExOTFhOTMyNTEyZjljZTQzY2E5NTg4ODAzZWIxNWI2
ZDRmMDBiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcApAQCAtMCwwICsxLDEz
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCbG9ja0Zv
cm1hdHRpbmdRdWlya3MuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQorCisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJCbG9j
a0Zvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUgIkxh
eW91dEJveEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCisjaW5j
bHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgorI2luY2x1ZGUgIkxheW91dFN0
YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitzdGF0
aWMgYm9vbCBpc1F1aXJrQ29udGFpbmVyKGNvbnN0IEJveCYgbGF5b3V0Qm94KQoreworICAgIHJl
dHVybiBsYXlvdXRCb3guaXNCb2R5Qm94KCkgfHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSB8
fCBsYXlvdXRCb3guaXNUYWJsZUNlbGwoKTsKK30KKworQmxvY2tGb3JtYXR0aW5nUXVpcmtzOjpC
bG9ja0Zvcm1hdHRpbmdRdWlya3MoY29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYgYmxvY2tG
b3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IEZvcm1hdHRpbmdRdWlya3MoYmxvY2tGb3JtYXR0aW5n
Q29udGV4dCkKK3sKKyAgICBBU1NFUlQobGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUoKSk7Cit9
CisKK3N0YXRpYyBib29sIG5lZWRzU3RyZXRjaGluZyhjb25zdCBCb3gmIGxheW91dEJveCkKK3sK
KyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOworICAgIC8vIEluIHF1aXJrcyBtb2Rl
LCBpbi1mbG93IGJvZHkgYW5kIGh0bWwgc3RyZXRjaCB0byB0aGUgaW5pdGlhbCBjb250YWluaW5n
IGJsb2NrIChoZWlnaHQ6IGF1dG8gb25seSkuCisgICAgaWYgKCFsYXlvdXRCb3guaXNEb2N1bWVu
dEJveCgpICYmICFsYXlvdXRCb3guaXNCb2R5Qm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gbGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygpOwor
fQorCitPcHRpb25hbDxMYXlvdXRVbml0PiBCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OnN0cmV0Y2hl
ZEluRmxvd0hlaWdodElmQXBwbGljYWJsZShjb25zdCBCb3gmIGxheW91dEJveCwgQ29udGVudEhl
aWdodEFuZE1hcmdpbiBjb250ZW50SGVpZ2h0QW5kTWFyZ2luKSBjb25zdAoreworICAgIGlmICgh
bmVlZHNTdHJldGNoaW5nKGxheW91dEJveCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0
byYgZm9ybWF0dGluZ0NvbnRleHQgPSBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Pih0
aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICBhdXRvIG5vbkNvbGxhcHNlZFZlcnRpY2Fs
TWFyZ2luID0gY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYmVmb3Jl
ICsgY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXI7CisKKyAg
ICBpZiAobGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgeworICAgICAgICAvLyBMZXQncyBzdHJl
dGNoIHRoZSBpbmZsb3cgZG9jdW1lbnQgYm94KDxodG1sPikgdG8gdGhlIGhlaWdodCBvZiB0aGUg
aW5pdGlhbCBjb250YWluaW5nIGJsb2NrICh2aWV3KS4KKyAgICAgICAgYXV0byBkb2N1bWVudEJv
eENvbnRlbnRIZWlnaHQgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRC
b3guaW5pdGlhbENvbnRhaW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVh
c29uOjpEb2N1bWVudEJveFN0cmV0Y2hlc1RvVmlld3BvcnRRdWlyaykuY29udGVudEJveEhlaWdo
dCgpOworICAgICAgICAvLyBEb2N1bWVudCBib3gncyBvd24gdmVydGljYWwgbWFyZ2luL2JvcmRl
ci9wYWRkaW5nIHZhbHVlcyBhbHdheXMgc2hyaW5rIHRoZSBjb250ZW50IGhlaWdodC4KKyAgICAg
ICAgYXV0byYgZG9jdW1lbnRCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5
Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgIGRvY3VtZW50Qm94Q29udGVudEhlaWdodCAtPSBu
b25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbiArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGljYWxC
b3JkZXIoKSArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigw
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVu
dEhlaWdodCwgIGRvY3VtZW50Qm94Q29udGVudEhlaWdodCk7CisgICAgfQorCisgICAgLy8gSGVy
ZSBpcyB0aGUgcXVpcmt5IHBhcnQgZm9yIGJvZHkgYm94IHdoZW4gaXQgc3RyZXRjaGVzIGFsbCB0
aGUgd2F5IHRvIHRoZSBJQ0IgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBib3ggZG9lcyBub3QgKGUu
Zy4gb3V0LW9mLWZsb3cgcG9zaXRpb25lZCkuCisgICAgQVNTRVJUKGxheW91dEJveC5pc0JvZHlC
b3goKSk7CisgICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9jayA9IGxheW91dEJveC5pbml0
aWFsQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9ja0dl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goaW5pdGlhbENvbnRhaW5p
bmdCbG9jaywgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6Qm9keVN0cmV0Y2hlc1Rv
Vmlld3BvcnRRdWlyayk7CisgICAgLy8gU3RhcnQgdGhlIGNvbnRlbnQgaGVpZ2h0IHdpdGggdGhl
IElDQi4KKyAgICBhdXRvIGJvZHlCb3hDb250ZW50SGVpZ2h0ID0gaW5pdGlhbENvbnRhaW5pbmdC
bG9ja0dlb21ldHJ5LmNvbnRlbnRCb3hIZWlnaHQoKTsKKyAgICAvLyBCb2R5IGJveCdzIG93biBi
b3JkZXIgYW5kIHBhZGRpbmcgc2hyaW5rIHRoZSBjb250ZW50IGhlaWdodC4KKyAgICBhdXRvJiBi
b2R5Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRC
b3gpOworICAgIGJvZHlCb3hDb250ZW50SGVpZ2h0IC09IGJvZHlCb3hHZW9tZXRyeS52ZXJ0aWNh
bEJvcmRlcigpICsgYm9keUJveEdlb21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7
CisgICAgLy8gQm9keSBib3ggbmV2ZXIgY29sbGFwc2VzIGl0cyB2ZXJ0aWNhbCBtYXJnaW5zIHdp
dGggdGhlIGRvY3VtZW50IGJveCBidXQgaXQgbWlnaHQgY29sbGFwc2UgaXRzIG1hcmdpbiB3aXRo
IGl0cyBkZXNjZW5kYW50cy4KKyAgICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9IGNvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luOworICAgIGF1dG8gbWFyZ2luQ29sbGFw
c2UgPSBCbG9ja01hcmdpbkNvbGxhcHNlIHsgZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUo
KSwgZm9ybWF0dGluZ0NvbnRleHQuZm9ybWF0dGluZ1N0YXRlKCkgfTsKKyAgICBhdXRvIGNvbGxh
cHNlZE1hcmdpbiA9IG1hcmdpbkNvbGxhcHNlLmNvbGxhcHNlZFZlcnRpY2FsVmFsdWVzKGxheW91
dEJveCwgbm9uQ29sbGFwc2VkTWFyZ2luKS5jb2xsYXBzZWRWYWx1ZXM7CisgICAgYXV0byB1c2Vk
VmVydGljYWxNYXJnaW4gPSBjb2xsYXBzZWRNYXJnaW4uYmVmb3JlLnZhbHVlT3Iobm9uQ29sbGFw
c2VkTWFyZ2luLmJlZm9yZSk7CisgICAgdXNlZFZlcnRpY2FsTWFyZ2luICs9IGNvbGxhcHNlZE1h
cmdpbi5pc0NvbGxhcHNlZFRocm91Z2ggPyBub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIgOiBjb2xs
YXBzZWRNYXJnaW4uYWZ0ZXIudmFsdWVPcihub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIpOworICAg
IGJvZHlCb3hDb250ZW50SGVpZ2h0IC09IHVzZWRWZXJ0aWNhbE1hcmdpbjsKKyAgICAvLyBEb2N1
bWVudCBib3gncyBwYWRkaW5nIGFuZCBib3JkZXIgYWxzbyBzaHJpbmsgdGhlIGJvZHkgYm94J3Mg
Y29udGVudCBoZWlnaHQuCisgICAgYXV0byYgZG9jdW1lbnRCb3ggPSBsYXlvdXRCb3gucGFyZW50
KCk7CisgICAgYXV0byYgZG9jdW1lbnRCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdl
b21ldHJ5Rm9yQm94KGRvY3VtZW50Qm94LCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29u
OjpCb2R5U3RyZXRjaGVzVG9WaWV3cG9ydFF1aXJrKTsKKyAgICBib2R5Qm94Q29udGVudEhlaWdo
dCAtPSBkb2N1bWVudEJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBkb2N1bWVudEJveEdl
b21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7CisgICAgLy8gSG93ZXZlciB0aGUg
bm9uLWluLWZsb3cgZG9jdW1lbnQgYm94J3MgdmVydGljYWwgbWFyZ2lucyBhcmUgaWdub3JlZC4g
VGhleSBkb24ndCBhZmZlY3QgdGhlIGJvZHkgYm94J3MgY29udGVudCBoZWlnaHQuCisgICAgaWYg
KGRvY3VtZW50Qm94LmlzSW5GbG93KCkpIHsKKyAgICAgICAgYXV0byBmb3JtYXR0aW5nR2VvbWV0
cnkgPSBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSB7IGZvcm1hdHRpbmdDb250ZXh0IH07CisgICAg
ICAgIGF1dG8gcHJlY29tcHV0ZURvY3VtZW50Qm94VmVydGljYWxNYXJnaW4gPSBmb3JtYXR0aW5n
R2VvbWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihkb2N1bWVudEJveCwgZm9ybWF0dGluZ0dl
b21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChpbml0aWFsQ29udGFpbmluZ0Jsb2Nr
LCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpCb2R5U3RyZXRjaGVzVG9WaWV3cG9y
dFF1aXJrKS5ob3Jpem9udGFsKTsKKyAgICAgICAgYm9keUJveENvbnRlbnRIZWlnaHQgLT0gcHJl
Y29tcHV0ZURvY3VtZW50Qm94VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCkgKyBwcmVj
b21wdXRlRG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApOworICAgIH0K
KyAgICByZXR1cm4gc3RkOjptYXgoY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0
LCAgYm9keUJveENvbnRlbnRIZWlnaHQpOworfQorCitib29sIEJsb2NrRm9ybWF0dGluZ1F1aXJr
czo6c2hvdWxkSWdub3JlQ29sbGFwc2VkUXVpcmtNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gp
Cit7CisgICAgcmV0dXJuIGlzUXVpcmtDb250YWluZXIobGF5b3V0Qm94KTsKK30KKworZW51bSBj
bGFzcyBWZXJ0aWNhbE1hcmdpbiB7IEJlZm9yZSwgQWZ0ZXIgfTsKK3N0YXRpYyBpbmxpbmUgYm9v
bCBoYXNRdWlya01hcmdpblRvQ29sbGFwc2UoY29uc3QgQm94JiBsYXlvdXRCb3gsIFZlcnRpY2Fs
TWFyZ2luIHZlcnRpY2FsTWFyZ2luKQoreworICAgIGlmICghbGF5b3V0Qm94LmlzSW5GbG93KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHls
ZSgpOworICAgIHJldHVybiAodmVydGljYWxNYXJnaW4gPT0gVmVydGljYWxNYXJnaW46OkJlZm9y
ZSAmJiBzdHlsZS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpKSB8fCAodmVydGljYWxNYXJnaW4gPT0g
VmVydGljYWxNYXJnaW46OkFmdGVyICYmIHN0eWxlLmhhc01hcmdpbkFmdGVyUXVpcmsoKSk7Cit9
CisKK2Jvb2wgQmxvY2tGb3JtYXR0aW5nUXVpcmtzOjpzaG91bGRDb2xsYXBzZU1hcmdpbkJlZm9y
ZVdpdGhQYXJlbnRNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpCit7CisgICAgcmV0
dXJuIGhhc1F1aXJrTWFyZ2luVG9Db2xsYXBzZShsYXlvdXRCb3gsIFZlcnRpY2FsTWFyZ2luOjpC
ZWZvcmUpICYmIGlzUXVpcmtDb250YWluZXIobGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsK
K30KKworYm9vbCBCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OnNob3VsZENvbGxhcHNlTWFyZ2luQWZ0
ZXJXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpCit7CisgICAgcmV0
dXJuIGhhc1F1aXJrTWFyZ2luVG9Db2xsYXBzZShsYXlvdXRCb3gsIFZlcnRpY2FsTWFyZ2luOjpB
ZnRlcikgJiYgaXNRdWlya0NvbnRhaW5lcihsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOwor
fQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVp
cmtzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2NmYmMyYzY1OTk1ZDUyNTQ2OGJhMWE1NjkyYjA5NzZiYjViYTJm
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgKQEAgLTAsMCArMSw1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nUXVpcmtzLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitjbGFzcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OworCitjbGFzcyBCbG9ja0Zvcm1hdHRpbmdRdWlya3MgOiBwdWJsaWMgRm9ybWF0dGluZ1F1aXJr
cyB7CitwdWJsaWM6CisgICAgQmxvY2tGb3JtYXR0aW5nUXVpcmtzKGNvbnN0IEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQmKTsKKworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHN0cmV0Y2hlZEluRmxv
d0hlaWdodElmQXBwbGljYWJsZShjb25zdCBCb3gmLCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luKSBj
b25zdDsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVDb2xsYXBzZWRRdWlya01hcmdpbihj
b25zdCBCb3gmKTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRDb2xsYXBzZU1hcmdpbkJlZm9yZVdp
dGhQYXJlbnRNYXJnaW5CZWZvcmUoY29uc3QgQm94Jik7CisgICAgc3RhdGljIGJvb2wgc2hvdWxk
Q29sbGFwc2VNYXJnaW5BZnRlcldpdGhQYXJlbnRNYXJnaW5BZnRlcihjb25zdCBCb3gmKTsKK307
CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja01hcmdpbkNvbGxhcHNl
LmNwcAppbmRleCBmMWZkNWJiZTIyYTFhYjkyZTg1MWQ4NTBkZTBmNGE2YWQxODcxMGRiLi5jNjc1
MmY1YjgwNjQ1YTliY2ViNjAxMzY5ZDA0ZWE3NmJhMjI2NDJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrTWFyZ2luQ29sbGFw
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxv
Y2svQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKQEAgLTI0LDEwICsyNCwxMSBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiQmxvY2tNYXJnaW5Db2xsYXBzZS5oIgogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCIKICNp
bmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUu
aCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKQEAgLTgxLDE2ICs4MiwyMyBA
QCBzdGF0aWMgYm9vbCBlc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQm94
JiBsYXlvdXRCb3gpCiAgICAgcmV0dXJuIGxheW91dEJveC5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0
dGluZ0NvbnRleHQoKTsKIH0KIAotYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5D
b2xsYXBzZTo6aGFzQ2xlYXJhbmNlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAorQmxvY2tN
YXJnaW5Db2xsYXBzZTo6QmxvY2tNYXJnaW5Db2xsYXBzZShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIGNvbnN0IEJsb2NrRm9ybWF0dGluZ1N0YXRlJiBibG9ja0Zvcm1hdHRpbmdTdGF0
ZSkKKyAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUpCisgICAgLCBtX2Jsb2NrRm9ybWF0
dGluZ1N0YXRlKGJsb2NrRm9ybWF0dGluZ1N0YXRlKQorICAgICwgbV9pblF1aXJrc01vZGUobGF5
b3V0U3RhdGUuaW5RdWlya3NNb2RlKCkpCit7Cit9CisKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBz
ZTo6aGFzQ2xlYXJhbmNlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogewogICAgIGlmICgh
bGF5b3V0Qm94Lmhhc0Zsb2F0Q2xlYXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8v
IEZJWE1FOiBwcmVjb21wdXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JGb3JtYXR0aW5nUm9vdCBsb2dp
YyBlbmRzIHVwIGNhbGxpbmcgaW50byB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIGxheW91dEJveCAo
Zmlyc3QgaW5mbG93IGNoaWxkKSBoYXMKICAgICAvLyBub3QgYmVlbiBsYWlkIG91dC4KLSAgICBy
ZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5mb3JtYXR0aW5nU3RhdGUoKS5oYXNDbGVhcmFuY2Uo
bGF5b3V0Qm94KTsKKyAgICByZXR1cm4gZm9ybWF0dGluZ1N0YXRlKCkuaGFzQ2xlYXJhbmNlKGxh
eW91dEJveCk7CiB9CiAKLWJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFw
c2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcihjb25zdCBCb3gm
IGxheW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3Jl
Q29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkFmdGVyKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25z
dAogewogICAgIC8vIDEuIFRoaXMgaXMgdGhlIGxhc3QgaW4tZmxvdyBjaGlsZCBhbmQgaXRzIG1h
cmdpbnMgY29sbGFwc2UgdGhyb3VnaCBhbmQgdGhlIG1hcmdpbiBhZnRlciBjb2xsYXBzZXMgd2l0
aCBwYXJlbnQncyBtYXJnaW4gYWZ0ZXIgb3IKICAgICAvLyAyLiBUaGlzIGJveCdzIG1hcmdpbiBh
ZnRlciBjb2xsYXBzZXMgd2l0aCB0aGUgbmV4dCBzaWJsaW5nJ3MgbWFyZ2luIGJlZm9yZSBhbmQg
dGhhdCBzaWJsaW5nIGNvbGxhcHNlcyB0aHJvdWdoIGFuZApAQCAtMTA4LDEzICsxMTYsMTMgQEAg
Ym9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3Jl
Q29sbGFwc2VzV2l0aFBhcmVudE1hcmcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNl
c1dpdGhQYXJlbnRNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Citib29s
IEJsb2NrTWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJn
aW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAgICAgLy8gVGhlIGZpcnN0
IGluZmxvdyBjaGlsZCBjb3VsZCBwcm9wYWdhdGUgaXRzIHRvcCBtYXJnaW4gdG8gcGFyZW50Lgog
ICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9ib3guaHRtbCNjb2xsYXBzaW5nLW1h
cmdpbnMKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKIAotICAgIGlm
IChmb3JtYXR0aW5nQ29udGV4dCgpLnF1aXJrcygpLnNob3VsZENvbGxhcHNlTWFyZ2luQmVmb3Jl
V2l0aFBhcmVudE1hcmdpbkJlZm9yZShsYXlvdXRCb3gpKQorICAgIGlmIChpblF1aXJrc01vZGUo
KSAmJiBCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OnNob3VsZENvbGxhcHNlTWFyZ2luQmVmb3JlV2l0
aFBhcmVudE1hcmdpbkJlZm9yZShsYXlvdXRCb3gpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIC8vIE1hcmdpbnMgYmV0d2VlbiBhIGZsb2F0ZWQgYm94IGFuZCBhbnkgb3RoZXIgYm94IGRv
IG5vdCBjb2xsYXBzZS4KQEAgLTE1MSw3ICsxNTksNyBAQCBib29sIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUGFyZW50TWFy
ZwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1h
cmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFy
Z2luQWZ0ZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Citib29sIEJsb2NrTWFyZ2luQ29s
bGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRl
cihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94Lmlz
QmxvY2tMZXZlbEJveCgpKTsKIApAQCAtMTgwLDcgKzE4OCw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2
aW91c1NpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhGaXJzdEluRmxvd0No
aWxkTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAorYm9vbCBCbG9ja01h
cmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoRmlyc3RJbkZsb3dDaGlsZE1h
cmdpbkJlZm9yZShjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5
b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKICAgICAvLyBNYXJnaW5zIG9mIGVsZW1lbnRzIHRo
YXQgZXN0YWJsaXNoIG5ldyBibG9jayBmb3JtYXR0aW5nIGNvbnRleHRzIGRvIG5vdCBjb2xsYXBz
ZSB3aXRoIHRoZWlyIGluLWZsb3cgY2hpbGRyZW4uCkBAIC0yMTQsNyArMjIyLDcgQEAgYm9vbCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFw
c2VzV2l0aEZpcnN0SW5GbG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoU2li
bGluZ01hcmdpbkJlZm9yZVdpdGhDbGVhcmFuY2UoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0
Citib29sIEJsb2NrTWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFNpYmxp
bmdNYXJnaW5CZWZvcmVXaXRoQ2xlYXJhbmNlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAog
ewogICAgIC8vIElmIHRoZSB0b3AgYW5kIGJvdHRvbSBtYXJnaW5zIG9mIGFuIGVsZW1lbnQgd2l0
aCBjbGVhcmFuY2UgYXJlIGFkam9pbmluZywgaXRzIG1hcmdpbnMgY29sbGFwc2Ugd2l0aCB0aGUg
YWRqb2luaW5nIG1hcmdpbnMKICAgICAvLyBvZiBmb2xsb3dpbmcgc2libGluZ3MgYnV0IHRoYXQg
cmVzdWx0aW5nIG1hcmdpbiBkb2VzIG5vdCBjb2xsYXBzZSB3aXRoIHRoZSBib3R0b20gbWFyZ2lu
IG9mIHRoZSBwYXJlbnQgYmxvY2suCkBAIC0yMzAsNyArMjM4LDcgQEAgYm9vbCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoU2li
bGluZ01hcmcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdp
bkJlZm9yZShjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xs
YXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGNvbnN0IEJv
eCYgbGF5b3V0Qm94KSBjb25zdAogewogICAgIC8vIDEuIFRoaXMgaXMgdGhlIGZpcnN0IGluLWZs
b3cgY2hpbGQgYW5kIGl0cyBtYXJnaW5zIGNvbGxhcHNlIHRocm91Z2ggYW5kIHRoZSBtYXJnaW4g
YmVmb3JlIGNvbGxhcHNlcyB3aXRoIHBhcmVudCdzIG1hcmdpbiBiZWZvcmUgb3IKICAgICAvLyAy
LiBUaGlzIGJveCdzIG1hcmdpbiBiZWZvcmUgY29sbGFwc2VzIHdpdGggdGhlIHByZXZpb3VzIHNp
YmxpbmcncyBtYXJnaW4gYWZ0ZXIgYW5kIHRoYXQgc2libGluZyBjb2xsYXBzZXMgdGhyb3VnaCBh
bmQKQEAgLTI0OCwxMSArMjU2LDExIEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFy
Z2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxh
cHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcihjb25zdCBCb3gm
IGxheW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJD
b2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSk7CiAKLSAgICBpZiAo
Zm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5zaG91bGRDb2xsYXBzZU1hcmdpbkFmdGVyV2l0
aFBhcmVudE1hcmdpbkFmdGVyKGxheW91dEJveCkpCisgICAgaWYgKGluUXVpcmtzTW9kZSgpICYm
IEJsb2NrRm9ybWF0dGluZ1F1aXJrczo6c2hvdWxkQ29sbGFwc2VNYXJnaW5BZnRlcldpdGhQYXJl
bnRNYXJnaW5BZnRlcihsYXlvdXRCb3gpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8v
IE1hcmdpbnMgYmV0d2VlbiBhIGZsb2F0ZWQgYm94IGFuZCBhbnkgb3RoZXIgYm94IGRvIG5vdCBj
b2xsYXBzZS4KQEAgLTMwMCw3ICszMDgsNyBAQCBib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaQogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNv
bGxhcHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhMYXN0SW5GbG93Q2hpbGRNYXJnaW5BZnRl
cihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBzZTo6
bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0NoaWxkTWFyZ2luQWZ0ZXIoY29uc3Qg
Qm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Jsb2NrTGV2
ZWxCb3goKSk7CiAKQEAgLTM0MywxMyArMzUxLDE0IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aExhc3RJbkZsb3dD
CiAKICAgICAvLyBUaGlzIGlzIGEgcXVpcmsgYmVoYXZpb3I6IFdoZW4gdGhlIG1hcmdpbiBhZnRl
ciBvZiB0aGUgbGFzdCBpbmZsb3cgY2hpbGQgKG9yIGEgcHJldmlvdXMgc2libGluZyB3aXRoIGNv
bGxhcHNlZCB0aHJvdWdoIG1hcmdpbnMpCiAgICAgLy8gY29sbGFwc2VzIHdpdGggYSBxdWlyayBw
YXJlbnQncyB0aGUgbWFyZ2luIGJlZm9yZSwgdGhlbiB0aGUgc2FtZSBtYXJnaW4gYWZ0ZXIgZG9l
cyBub3QgY29sbGFwc2VzIHdpdGggdGhlIHBhcmVudCdzIG1hcmdpbiBhZnRlci4KLSAgICBpZiAo
Zm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5zaG91bGRJZ25vcmVDb2xsYXBzZWRRdWlya01h
cmdpbihsYXlvdXRCb3gpICYmIG1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkJl
Zm9yZShsYXN0SW5GbG93Q2hpbGQpKQorICAgIGF1dG8gc2hvdWxkSWdub3JlQ29sbGFwc2VkTWFy
Z2luID0gaW5RdWlya3NNb2RlKCkgJiYgQmxvY2tGb3JtYXR0aW5nUXVpcmtzOjpzaG91bGRJZ25v
cmVDb2xsYXBzZWRRdWlya01hcmdpbihsYXlvdXRCb3gpOworICAgIGlmIChzaG91bGRJZ25vcmVD
b2xsYXBzZWRNYXJnaW4gJiYgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVm
b3JlKGxhc3RJbkZsb3dDaGlsZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNl
OjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhOZXh0U2libGluZ01hcmdpbkJlZm9yZShjb25zdCBC
b3gmIGxheW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0
ZXJDb2xsYXBzZXNXaXRoTmV4dFNpYmxpbmdNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRC
b3gpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSk7CiAK
QEAgLTM1OSw3ICszNjgsNyBAQCBib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNv
bGxhcHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhOZXh0U2libGluZwogICAgIHJldHVybiBt
YXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFyZ2luQWZ0ZXIoKmxheW91
dEJveC5uZXh0SW5GbG93U2libGluZygpKTsKIH0KIAotYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luc0NvbGxhcHNlVGhyb3VnaChjb25zdCBCb3gmIGxh
eW91dEJveCkgY29uc3QKK2Jvb2wgQmxvY2tNYXJnaW5Db2xsYXBzZTo6bWFyZ2luc0NvbGxhcHNl
VGhyb3VnaChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0
Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKIApAQCAtNDMxLDcgKzQ0MCw3IEBAIGJvb2wgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbnNDb2xsYXBzZVRocm91Z2go
Y29uc3QgQm94JiBsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVVzZWRWZXJ0aWNhbE1hcmdpbjo6
UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpN
YXJnaW5Db2xsYXBzZTo6Y29tcHV0ZWRQb3NpdGl2ZUFuZE5lZ2F0aXZlTWFyZ2luKFVzZWRWZXJ0
aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBhLCBVc2VkVmVydGlj
YWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgYikgY29uc3QKK1VzZWRW
ZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBCbG9ja01hcmdp
bkNvbGxhcHNlOjpjb21wdXRlZFBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW4oVXNlZFZlcnRpY2Fs
TWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIGEsIFVzZWRWZXJ0aWNhbE1h
cmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBiKSBjb25zdAogewogICAgIFVz
ZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBjb21wdXRl
ZFZhbHVlczsKICAgICBpZiAoYS5wb3NpdGl2ZSAmJiBiLnBvc2l0aXZlKQpAQCAtNDU0LDcgKzQ2
Myw3IEBAIFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVl
cyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnCiAgICAgcmV0dXJuIGNvbXB1dGVkVmFsdWVz
OwogfQogCi1PcHRpb25hbDxMYXlvdXRVbml0PiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJn
aW5Db2xsYXBzZTo6bWFyZ2luVmFsdWUoVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5l
Z2F0aXZlUGFpcjo6VmFsdWVzIG1hcmdpblZhbHVlcykgY29uc3QKK09wdGlvbmFsPExheW91dFVu
aXQ+IEJsb2NrTWFyZ2luQ29sbGFwc2U6Om1hcmdpblZhbHVlKFVzZWRWZXJ0aWNhbE1hcmdpbjo6
UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBtYXJnaW5WYWx1ZXMpIGNvbnN0CiB7CiAg
ICAgLy8gV2hlbiB0d28gb3IgbW9yZSBtYXJnaW5zIGNvbGxhcHNlLCB0aGUgcmVzdWx0aW5nIG1h
cmdpbiB3aWR0aCBpcyB0aGUgbWF4aW11bSBvZiB0aGUgY29sbGFwc2luZyBtYXJnaW5zJyB3aWR0
aHMuCiAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgbmVnYXRpdmUgbWFyZ2lucywgdGhlIG1heGltdW0g
b2YgdGhlIGFic29sdXRlIHZhbHVlcyBvZiB0aGUgbmVnYXRpdmUgYWRqb2luaW5nIG1hcmdpbnMg
aXMgZGVkdWN0ZWQgZnJvbSB0aGUgbWF4aW11bQpAQCAtNDY4LDU4ICs0NzcsMTYgQEAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1h
cmdpblZhbHVlKFVzZWRWZXIKICAgICByZXR1cm4gKm1hcmdpblZhbHVlcy5wb3NpdGl2ZSArICpt
YXJnaW5WYWx1ZXMubmVnYXRpdmU7CiB9CiAKLXZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
TWFyZ2luQ29sbGFwc2U6OnVwZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlvdXNTaWJsaW5nKEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQmIGJsb2NrRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IE1hcmdpbkNv
bGxhcHNlJiBtYXJnaW5Db2xsYXBzZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCi17Ci0gICAgLy8g
MS4gR2V0IHRoZSBtYXJnaW4gYmVmb3JlIHZhbHVlIGZyb20gdGhlIG5leHQgaW4tZmxvdyBzaWJs
aW5nLiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoaXMgYm94J3MgbWFyZ2luIGFmdGVyIHZhbHVlIG5v
dyBzaW5jZSB0aGV5IGFyZSBjb2xsYXBzZWQuCi0gICAgLy8gMi4gVXBkYXRlIHRoZSBjb2xsYXBz
ZWQgbWFyZ2luIGFmdGVyIHZhbHVlIGFzIHdlbGwgYXMgdGhlIHBvc2l0aXZlL25lZ2F0aXZlIGNh
Y2hlLgotICAgIC8vIDMuIENoZWNrIGlmIHRoZSBib3gncyBtYXJnaW5zIGNvbGxhcHNlIHRocm91
Z2guCi0gICAgLy8gNC4gSWYgc28sIHVwZGF0ZSB0aGUgcG9zaXRpdmUvbmVnYXRpdmUgY2FjaGUu
Ci0gICAgLy8gNS4gSW4gY2FzZSBvZiBjb2xsYXBzZWQgdGhyb3VnaCBtYXJnaW5zIGNoZWNrIGlm
IHRoZSBiZWZvcmUgbWFyZ2luIGNvbGxhcGVzIHdpdGggdGhlIHByZXZpb3VzIGluZmxvdyBzaWJs
aW5nJ3MgYWZ0ZXIgbWFyZ2luLgotICAgIC8vIDYuIElmIHNvLCBqdW1wIHRvICMyLgotICAgIC8v
IDcuIE5vIG5lZWQgdG8gcHJvcGFnYXRlIHRvIHBhcmVudCBiZWNhdXNlIGl0cyBtYXJnaW4gaXMg
bm90IGNvbXB1dGVkIHlldCAocHJlLWNvbXB1dGVkIGF0IG1vc3QpLgotICAgIGF1dG8qIGN1cnJl
bnRCb3ggPSAmbGF5b3V0Qm94OwotICAgIGF1dG8mIGJsb2NrRm9ybWF0dGluZ1N0YXRlID0gYmxv
Y2tGb3JtYXR0aW5nQ29udGV4dC5mb3JtYXR0aW5nU3RhdGUoKTsKLSAgICB3aGlsZSAobWFyZ2lu
Q29sbGFwc2UubWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFByZXZpb3VzU2libGluZ01hcmdpbkFm
dGVyKCpjdXJyZW50Qm94KSkgewotICAgICAgICBhdXRvJiBwcmV2aW91c1NpYmxpbmcgPSAqY3Vy
cmVudEJveC0+cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7Ci0gICAgICAgIGF1dG8gcHJldmlvdXNT
aWJsaW5nVmVydGljYWxNYXJnaW4gPSBibG9ja0Zvcm1hdHRpbmdTdGF0ZS51c2VkVmVydGljYWxN
YXJnaW4ocHJldmlvdXNTaWJsaW5nKTsKLQotICAgICAgICBhdXRvIGNvbGxhcHNlZFZlcnRpY2Fs
TWFyZ2luQmVmb3JlID0gcHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW4uY29sbGFwc2VkVmFs
dWVzLmJlZm9yZTsKLSAgICAgICAgYXV0byBjb2xsYXBzZWRWZXJ0aWNhbE1hcmdpbkFmdGVyID0g
YmxvY2tGb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveCgqY3VycmVudEJveCkubWFyZ2lu
QmVmb3JlKCk7Ci0KLSAgICAgICAgYXV0byBtYXJnaW5zQ29sbGFwc2VUaHJvdWdoID0gbWFyZ2lu
Q29sbGFwc2UubWFyZ2luc0NvbGxhcHNlVGhyb3VnaChwcmV2aW91c1NpYmxpbmcpOwotICAgICAg
ICBpZiAobWFyZ2luc0NvbGxhcHNlVGhyb3VnaCkKLSAgICAgICAgICAgIGNvbGxhcHNlZFZlcnRp
Y2FsTWFyZ2luQmVmb3JlID0gY29sbGFwc2VkVmVydGljYWxNYXJnaW5BZnRlcjsKLQotICAgICAg
ICAvLyBVcGRhdGUgcG9zaXRpdmUvbmVnYXRpdmUgY2FjaGUuCi0gICAgICAgIGF1dG8gcHJldmlv
dXNTaWJsaW5nUG9zaXRpdmVOZWdhdGl2ZU1hcmdpbiA9IGJsb2NrRm9ybWF0dGluZ1N0YXRlLnVz
ZWRWZXJ0aWNhbE1hcmdpbihwcmV2aW91c1NpYmxpbmcpLnBvc2l0aXZlQW5kTmVnYXRpdmVWYWx1
ZXM7Ci0gICAgICAgIGF1dG8gcG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZSA9IGJsb2NrRm9y
bWF0dGluZ1N0YXRlLnVzZWRWZXJ0aWNhbE1hcmdpbigqY3VycmVudEJveCkucG9zaXRpdmVBbmRO
ZWdhdGl2ZVZhbHVlcy5iZWZvcmU7Ci0KLSAgICAgICAgYXV0byBhZGp1c3RlZFByZXZpb3VzU2li
bGluZ1ZlcnRpY2FsTWFyZ2luID0gcHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW47Ci0gICAg
ICAgIGFkanVzdGVkUHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW4ucG9zaXRpdmVBbmROZWdh
dGl2ZVZhbHVlcy5hZnRlciA9IG1hcmdpbkNvbGxhcHNlLmNvbXB1dGVkUG9zaXRpdmVBbmROZWdh
dGl2ZU1hcmdpbihwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlLCBwcmV2aW91c1NpYmxpbmdQ
b3NpdGl2ZU5lZ2F0aXZlTWFyZ2luLmFmdGVyKTsKLSAgICAgICAgaWYgKG1hcmdpbnNDb2xsYXBz
ZVRocm91Z2gpIHsKLSAgICAgICAgICAgIGFkanVzdGVkUHJldmlvdXNTaWJsaW5nVmVydGljYWxN
YXJnaW4ucG9zaXRpdmVBbmROZWdhdGl2ZVZhbHVlcy5iZWZvcmUgPSBtYXJnaW5Db2xsYXBzZS5j
b21wdXRlZFBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW4ocHJldmlvdXNTaWJsaW5nUG9zaXRpdmVO
ZWdhdGl2ZU1hcmdpbi5iZWZvcmUsIGFkanVzdGVkUHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJn
aW4ucG9zaXRpdmVBbmROZWdhdGl2ZVZhbHVlcy5hZnRlcik7Ci0gICAgICAgICAgICBhZGp1c3Rl
ZFByZXZpb3VzU2libGluZ1ZlcnRpY2FsTWFyZ2luLnBvc2l0aXZlQW5kTmVnYXRpdmVWYWx1ZXMu
YWZ0ZXIgPSBhZGp1c3RlZFByZXZpb3VzU2libGluZ1ZlcnRpY2FsTWFyZ2luLnBvc2l0aXZlQW5k
TmVnYXRpdmVWYWx1ZXMuYmVmb3JlOwotICAgICAgICB9Ci0gICAgICAgIGJsb2NrRm9ybWF0dGlu
Z1N0YXRlLnNldFVzZWRWZXJ0aWNhbE1hcmdpbihwcmV2aW91c1NpYmxpbmcsIGFkanVzdGVkUHJl
dmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW4pOwotCi0gICAgICAgIGlmICghbWFyZ2luc0NvbGxh
cHNlVGhyb3VnaCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGN1cnJlbnRCb3ggPSAm
cHJldmlvdXNTaWJsaW5nOwotICAgIH0KLX0KLQotVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2
ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNv
bGxhcHNlOjpwb3NpdGl2ZU5lZ2F0aXZlVmFsdWVzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBNYXJn
aW5UeXBlIG1hcmdpblR5cGUpIGNvbnN0CitVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5k
TmVnYXRpdmVQYWlyOjpWYWx1ZXMgQmxvY2tNYXJnaW5Db2xsYXBzZTo6cG9zaXRpdmVOZWdhdGl2
ZVZhbHVlcyhjb25zdCBCb3gmIGxheW91dEJveCwgTWFyZ2luVHlwZSBtYXJnaW5UeXBlKSBjb25z
dAogewotICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZm9y
bWF0dGluZ1N0YXRlKCk7CiAgICAgLy8gQnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUgaW4gQkZDIGxh
eW91dCB0byBnYXRoZXIgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIG1hcmdpbiB2YWx1ZXMgZm9yIGVp
dGhlciBhIHByZXZpb3VzIHNpYmxpbmcgb3IgYSBjaGlsZCBib3gsCiAgICAgLy8gd2UgbXVzaCBo
YXZlIGNvbXB1dGVkIGFuZCBjYWNoZWQgdGhvc2UgdmFsdWVzLgotICAgIEFTU0VSVChmb3JtYXR0
aW5nU3RhdGUuaGFzVXNlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCkpOwotICAgIGF1dG8gcG9z
aXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luID0gZm9ybWF0dGluZ1N0YXRlLnVzZWRWZXJ0
aWNhbE1hcmdpbihsYXlvdXRCb3gpLnBvc2l0aXZlQW5kTmVnYXRpdmVWYWx1ZXM7CisgICAgQVNT
RVJUKGZvcm1hdHRpbmdTdGF0ZSgpLmhhc1VzZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gpKTsK
KyAgICBhdXRvIHBvc2l0aXZlQW5kTmVnYXRpdmVWZXJ0aWNhbE1hcmdpbiA9IGZvcm1hdHRpbmdT
dGF0ZSgpLnVzZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gpLnBvc2l0aXZlQW5kTmVnYXRpdmVW
YWx1ZXM7CiAgICAgcmV0dXJuIG1hcmdpblR5cGUgPT0gTWFyZ2luVHlwZTo6QmVmb3JlID8gcG9z
aXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luLmJlZm9yZSA6IHBvc2l0aXZlQW5kTmVnYXRp
dmVWZXJ0aWNhbE1hcmdpbi5hZnRlcjsgCiB9CiAKLVVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRp
dmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5D
b2xsYXBzZTo6cG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZShjb25zdCBCb3gmIGxheW91dEJv
eCwgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgbm9uQ29sbGFwc2VkVmFs
dWVzKSBjb25zdAorVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6
VmFsdWVzIEJsb2NrTWFyZ2luQ29sbGFwc2U6OnBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUo
Y29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFs
dWVzIG5vbkNvbGxhcHNlZFZhbHVlcykgY29uc3QKIHsKICAgICBhdXRvIGZpcnN0Q2hpbGRDb2xs
YXBzZWRNYXJnaW5CZWZvcmUgPSBbJl0oKSAtPiBVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZl
QW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgewogICAgICAgICBpZiAoIW1hcmdpbkJlZm9yZUNvbGxh
cHNlc1dpdGhGaXJzdEluRmxvd0NoaWxkTWFyZ2luQmVmb3JlKGxheW91dEJveCkpCkBAIC01Mzcs
NyArNTA0LDggQEAgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6
VmFsdWVzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmcKICAgICAvLyAyLiBHYXRoZXIgcG9z
aXRpdmUgYW5kIG5lZ2F0aXZlIG1hcmdpbiB2YWx1ZXMgZnJvbSBwcmV2aW91cyBpbmZsb3cgc2li
bGluZyBpZiBtYXJnaW5zIGFyZSBhZGpvaW5pbmcuCiAgICAgLy8gMy4gQ29tcHV0ZSBtaW4vbWF4
IHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBjb2xsYXBzZWQgbWFyZ2luIHZhbHVlcyB1c2luZyBub24t
Y29sbHBhc2VkIGNvbXB1dGVkIG1hcmdpbiBiZWZvcmUuCiAgICAgYXV0byBjb2xsYXBzZWRNYXJn
aW5CZWZvcmUgPSBjb21wdXRlZFBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW4oZmlyc3RDaGlsZENv
bGxhcHNlZE1hcmdpbkJlZm9yZSgpLCBwcmV2aW91U2libGluZ0NvbGxhcHNlZE1hcmdpbkFmdGVy
KCkpOwotICAgIGlmIChjb2xsYXBzZWRNYXJnaW5CZWZvcmUuaXNRdWlyayAmJiBmb3JtYXR0aW5n
Q29udGV4dCgpLnF1aXJrcygpLnNob3VsZElnbm9yZUNvbGxhcHNlZFF1aXJrTWFyZ2luKGxheW91
dEJveCkpCisgICAgYXV0byBzaG91bGRJZ25vcmVDb2xsYXBzZWRNYXJnaW4gPSBjb2xsYXBzZWRN
YXJnaW5CZWZvcmUuaXNRdWlyayAmJiBpblF1aXJrc01vZGUoKSAmJiBCbG9ja0Zvcm1hdHRpbmdR
dWlya3M6OnNob3VsZElnbm9yZUNvbGxhcHNlZFF1aXJrTWFyZ2luKGxheW91dEJveCk7CisgICAg
aWYgKHNob3VsZElnbm9yZUNvbGxhcHNlZE1hcmdpbikKICAgICAgICAgY29sbGFwc2VkTWFyZ2lu
QmVmb3JlID0geyB9OwogCiAgICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0
aXZlUGFpcjo6VmFsdWVzIG5vbkNvbGxhcHNlZEJlZm9yZTsKQEAgLTU0OSw3ICs1MTcsNyBAQCBV
c2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6TWFyZwogICAgIHJldHVybiBjb21wdXRlZFBvc2l0aXZlQW5kTmVn
YXRpdmVNYXJnaW4oY29sbGFwc2VkTWFyZ2luQmVmb3JlLCBub25Db2xsYXBzZWRCZWZvcmUpOwog
fQogCi1Vc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6OnBvc2l0aXZlTmVnYXRpdmVN
YXJnaW5BZnRlcihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25D
b2xsYXBzZWRWYWx1ZXMgbm9uQ29sbGFwc2VkVmFsdWVzKSBjb25zdAorVXNlZFZlcnRpY2FsTWFy
Z2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIEJsb2NrTWFyZ2luQ29sbGFwc2U6
OnBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRlcihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZFZl
cnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgbm9uQ29sbGFwc2VkVmFsdWVzKSBjb25z
dAogewogICAgIGF1dG8gbGFzdENoaWxkQ29sbGFwc2VkTWFyZ2luQWZ0ZXIgPSBbJl0oKSAtPiBV
c2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgewogICAg
ICAgICBpZiAoIW1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aExhc3RJbkZsb3dDaGlsZE1hcmdpbkFm
dGVyKGxheW91dEJveCkpCkBAIC01NjgsMTMgKzUzNiwxMyBAQCBVc2VkVmVydGljYWxNYXJnaW46
OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
TWFyZwogICAgIHJldHVybiBjb21wdXRlZFBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW4obGFzdENo
aWxkQ29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSwgbm9uQ29sbGFwc2VkQWZ0ZXIpOwogfQogCi1MYXlv
dXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZv
cmVJZ25vcmluZ0NvbGxhcHNpbmdUaHJvdWdoKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkVmVy
dGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyBub25Db2xsYXBzZWRWYWx1ZXMpCitMYXlv
dXRVbml0IEJsb2NrTWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUlnbm9yaW5nQ29sbGFwc2lu
Z1Rocm91Z2goY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29s
bGFwc2VkVmFsdWVzIG5vbkNvbGxhcHNlZFZhbHVlcykKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94
LmlzQmxvY2tMZXZlbEJveCgpKTsKICAgICByZXR1cm4gbWFyZ2luVmFsdWUocG9zaXRpdmVOZWdh
dGl2ZU1hcmdpbkJlZm9yZShsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZFZhbHVlcykpLnZhbHVlT3Io
bm9uQ29sbGFwc2VkVmFsdWVzLmJlZm9yZSk7CiB9CiAKLVVzZWRWZXJ0aWNhbE1hcmdpbiBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6Y29sbGFwc2VkVmVydGljYWxWYWx1
ZXMoY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2Vk
VmFsdWVzIG5vbkNvbGxhcHNlZFZhbHVlcykKK1VzZWRWZXJ0aWNhbE1hcmdpbiBCbG9ja01hcmdp
bkNvbGxhcHNlOjpjb2xsYXBzZWRWZXJ0aWNhbFZhbHVlcyhjb25zdCBCb3gmIGxheW91dEJveCwg
VXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgbm9uQ29sbGFwc2VkVmFsdWVz
KQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNCbG9ja0xldmVsQm94KCkpOwogICAgIC8vIDEu
IEdldCBtaW4vbWF4IG1hcmdpbiB0b3AgdmFsdWVzIGZyb20gdGhlIGZpcnN0IGluLWZsb3cgY2hp
bGQgaWYgd2UgYXJlIGNvbGxhcHNpbmcgbWFyZ2luIHRvcCB3aXRoIGl0LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja01hcmdp
bkNvbGxhcHNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL0Jsb2NrTWFyZ2luQ29sbGFwc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDc1NmMxNjEzMTg5ZGExMjQx
YTA4NzFiZGQ4ODg5MDE2NTNhMWI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja01hcmdpbkNvbGxhcHNlLmgKQEAg
LTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJNYXJnaW5UeXBlcy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgQm94OworY2xh
c3MgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk7CitjbGFzcyBCbG9ja0Zvcm1hdHRpbmdTdGF0ZTsK
K2NsYXNzIExheW91dFN0YXRlOworCisvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgbWFyZ2luIGNv
bGxhcHNpbmcgZm9yIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dC4KK2NsYXNzIEJsb2NrTWFyZ2lu
Q29sbGFwc2UgeworcHVibGljOgorICAgIEJsb2NrTWFyZ2luQ29sbGFwc2UoY29uc3QgTGF5b3V0
U3RhdGUmLCBjb25zdCBCbG9ja0Zvcm1hdHRpbmdTdGF0ZSYpOworCisgICAgVXNlZFZlcnRpY2Fs
TWFyZ2luIGNvbGxhcHNlZFZlcnRpY2FsVmFsdWVzKGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbE1h
cmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzKTsKKworICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3Jl
SWdub3JpbmdDb2xsYXBzaW5nVGhyb3VnaChjb25zdCBCb3gmLCBVc2VkVmVydGljYWxNYXJnaW46
Ok5vbkNvbGxhcHNlZFZhbHVlcyk7CisKKyAgICBib29sIG1hcmdpbkJlZm9yZUNvbGxhcHNlc1dp
dGhQYXJlbnRNYXJnaW5CZWZvcmUoY29uc3QgQm94JikgY29uc3Q7CisgICAgYm9vbCBtYXJnaW5C
ZWZvcmVDb2xsYXBzZXNXaXRoRmlyc3RJbkZsb3dDaGlsZE1hcmdpbkJlZm9yZShjb25zdCBCb3gm
KSBjb25zdDsKKyAgICBib29sIG1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5B
ZnRlcihjb25zdCBCb3gmKSBjb25zdDsKKyAgICBib29sIG1hcmdpbkJlZm9yZUNvbGxhcHNlc1dp
dGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRlcihjb25zdCBCb3gmKSBjb25zdDsKKworICAgIGJv
b2wgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgQm94Jikg
Y29uc3Q7CisgICAgYm9vbCBtYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhMYXN0SW5GbG93Q2hpbGRN
YXJnaW5BZnRlcihjb25zdCBCb3gmKSBjb25zdDsKKyAgICBib29sIG1hcmdpbkFmdGVyQ29sbGFw
c2VzV2l0aFBhcmVudE1hcmdpbkJlZm9yZShjb25zdCBCb3gmKSBjb25zdDsKKyAgICBib29sIG1h
cmdpbkFmdGVyQ29sbGFwc2VzV2l0aE5leHRTaWJsaW5nTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYp
IGNvbnN0OworICAgIGJvb2wgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoU2libGluZ01hcmdpbkJl
Zm9yZVdpdGhDbGVhcmFuY2UoY29uc3QgQm94JikgY29uc3Q7CisKKyAgICBVc2VkVmVydGljYWxN
YXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgY29tcHV0ZWRQb3NpdGl2ZUFu
ZE5lZ2F0aXZlTWFyZ2luKFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBh
aXI6OlZhbHVlcywgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6
VmFsdWVzKSBjb25zdDsKKworICAgIGJvb2wgbWFyZ2luc0NvbGxhcHNlVGhyb3VnaChjb25zdCBC
b3gmKSBjb25zdDsKKworICAgIFByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHByZWNvbXB1dGVkTWFy
Z2luQmVmb3JlKGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFs
dWVzLCBjb25zdCBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSYpOworCitwcml2YXRlOgorICAgIGVu
dW0gY2xhc3MgTWFyZ2luVHlwZSB7IEJlZm9yZSwgQWZ0ZXIgfTsKKyAgICBVc2VkVmVydGljYWxN
YXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgcG9zaXRpdmVOZWdhdGl2ZVZh
bHVlcyhjb25zdCBCb3gmLCBNYXJnaW5UeXBlKSBjb25zdDsKKyAgICBVc2VkVmVydGljYWxNYXJn
aW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgcG9zaXRpdmVOZWdhdGl2ZU1hcmdp
bkJlZm9yZShjb25zdCBCb3gmLCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVl
cykgY29uc3Q7CisgICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFp
cjo6VmFsdWVzIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRlcihjb25zdCBCb3gmLCBVc2VkVmVy
dGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcykgY29uc3Q7CisKKyAgICBVc2VkVmVydGlj
YWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgcHJlY29tcHV0ZWRQb3Np
dGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6
Tm9uQ29sbGFwc2VkVmFsdWVzLCBjb25zdCBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSYpIGNvbnN0
OworICAgIFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVl
cyBwcmVjb21wdXRlZFBvc2l0aXZlTmVnYXRpdmVWYWx1ZXMoY29uc3QgQm94JiwgY29uc3QgQmxv
Y2tGb3JtYXR0aW5nR2VvbWV0cnkmKSBjb25zdDsKKworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+
IG1hcmdpblZhbHVlKFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6
OlZhbHVlcykgY29uc3Q7CisKKyAgICBib29sIGhhc0NsZWFyYW5jZShjb25zdCBCb3gmKSBjb25z
dDsKKworICAgIGJvb2wgaW5RdWlya3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblF1aXJrc01v
ZGU7IH0KKyAgICBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX2xheW91dFN0YXRlOyB9CisgICAgY29uc3QgQmxvY2tGb3JtYXR0aW5nU3RhdGUmIGZvcm1h
dHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tGb3JtYXR0aW5nU3RhdGU7IH0KKwor
ICAgIGNvbnN0IExheW91dFN0YXRlJiBtX2xheW91dFN0YXRlOworICAgIGNvbnN0IEJsb2NrRm9y
bWF0dGluZ1N0YXRlJiBtX2Jsb2NrRm9ybWF0dGluZ1N0YXRlOworICAgIGJvb2wgbV9pblF1aXJr
c01vZGUgeyBmYWxzZSB9OworfTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svUHJlY29tcHV0ZWRCbG9j
a01hcmdpbkNvbGxhcHNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvYmxvY2svUHJlY29tcHV0ZWRCbG9ja01hcmdpbkNvbGxhcHNlLmNwcAppbmRleCBkZWZi
M2Q1NTRmZTY4ZGU0MjczMWZmOGUyZDRiMjBlYWJmNjU5ZWMyLi41YWFmYTNmYWIwM2U3ZjZhM2Qz
ZmU5YmRlYTcyNGJjZDVlMGMzZTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL1ByZWNvbXB1dGVkQmxvY2tNYXJnaW5Db2xsYXBzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9Q
cmVjb21wdXRlZEJsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCkBAIC0yNCwxMCArMjQsMTEgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nQ29udGV4
dC5oIgorI2luY2x1ZGUgIkJsb2NrTWFyZ2luQ29sbGFwc2UuaCIKIAogI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nR2VvbWV0
cnkuaCIKICNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91
dEJveC5oIgogI2luY2x1ZGUgIkxheW91dENvbnRhaW5lckJveC5oIgpAQCAtMzgsMjUgKzM5LDI0
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotVXNlZFZlcnRp
Y2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjpwcmVjb21wdXRlZFBvc2l0aXZlTmVnYXRpdmVWYWx1
ZXMoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CitVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0
aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgQmxvY2tNYXJnaW5Db2xsYXBzZTo6cHJlY29tcHV0
ZWRQb3NpdGl2ZU5lZ2F0aXZlVmFsdWVzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBCbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeSYgZm9ybWF0dGluZ0dlb21ldHJ5KSBjb25zdAogewogICAgIGF1
dG8mIGJsb2NrRm9ybWF0dGluZ1N0YXRlID0gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nU3RhdGU+
KGxheW91dFN0YXRlKCkuZm9ybWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCkpOwogICAgIGlm
IChibG9ja0Zvcm1hdHRpbmdTdGF0ZS5oYXNVc2VkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94KSkK
ICAgICAgICAgcmV0dXJuIGJsb2NrRm9ybWF0dGluZ1N0YXRlLnVzZWRWZXJ0aWNhbE1hcmdpbihs
YXlvdXRCb3gpLnBvc2l0aXZlQW5kTmVnYXRpdmVWYWx1ZXMuYmVmb3JlOwogCi0gICAgYXV0byBn
ZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnkoKTsKLSAgICBhdXRvIGhvcml6
b250YWxDb25zdHJhaW50cyA9IGdlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChs
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmhvcml6b250YWw7Ci0gICAgYXV0byBjb21wdXRl
ZFZlcnRpY2FsTWFyZ2luID0gZ2VvbWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgYXV0byBob3Jpem9udGFsQ29uc3RyYWlu
dHMgPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGxheW91
dEJveC5jb250YWluaW5nQmxvY2soKSkuaG9yaXpvbnRhbDsKKyAgICBhdXRvIGNvbXB1dGVkVmVy
dGljYWxNYXJnaW4gPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihs
YXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAgYXV0byBub25Db2xsYXBzZWRN
YXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4u
YWZ0ZXIudmFsdWVPcigwKSB9OwotICAgIHJldHVybiBwcmVjb21wdXRlZFBvc2l0aXZlTmVnYXRp
dmVNYXJnaW5CZWZvcmUobGF5b3V0Qm94LCBub25Db2xsYXBzZWRNYXJnaW4pOworICAgIHJldHVy
biBwcmVjb21wdXRlZFBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUobGF5b3V0Qm94LCBub25D
b2xsYXBzZWRNYXJnaW4sIGZvcm1hdHRpbmdHZW9tZXRyeSk7CiB9CiAKLVVzZWRWZXJ0aWNhbE1h
cmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpNYXJnaW5Db2xsYXBzZTo6cHJlY29tcHV0ZWRQb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVm
b3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNl
ZFZhbHVlcyBub25Db2xsYXBzZWRWYWx1ZXMpIGNvbnN0CitVc2VkVmVydGljYWxNYXJnaW46OlBv
c2l0aXZlQW5kTmVnYXRpdmVQYWlyOjpWYWx1ZXMgQmxvY2tNYXJnaW5Db2xsYXBzZTo6cHJlY29t
cHV0ZWRQb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBV
c2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyBub25Db2xsYXBzZWRWYWx1ZXMs
IGNvbnN0IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5JiBmb3JtYXR0aW5nR2VvbWV0cnkpIGNvbnN0
CiB7CiAgICAgYXV0byBmaXJzdENoaWxkQ29sbGFwc2VkTWFyZ2luQmVmb3JlID0gWyZdKCkgLT4g
VXNlZFZlcnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIHsKICAg
ICAgICAgaWYgKCFtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoRmlyc3RJbkZsb3dDaGlsZE1hcmdp
bkJlZm9yZShsYXlvdXRCb3gpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmV0
dXJuIHByZWNvbXB1dGVkUG9zaXRpdmVOZWdhdGl2ZVZhbHVlcygqZG93bmNhc3Q8Q29udGFpbmVy
Qm94PihsYXlvdXRCb3gpLmZpcnN0SW5GbG93Q2hpbGQoKSk7CisgICAgICAgIHJldHVybiBwcmVj
b21wdXRlZFBvc2l0aXZlTmVnYXRpdmVWYWx1ZXMoKmRvd25jYXN0PENvbnRhaW5lckJveD4obGF5
b3V0Qm94KS5maXJzdEluRmxvd0NoaWxkKCksIGZvcm1hdHRpbmdHZW9tZXRyeSk7CiAgICAgfTsK
IAogICAgIGF1dG8gcHJldmlvdVNpYmxpbmdDb2xsYXBzZWRNYXJnaW5BZnRlciA9IFsmXSgpIC0+
IFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBhaXI6OlZhbHVlcyB7CkBA
IC03MSw3ICs3MSw4IEBAIFVzZWRWZXJ0aWNhbE1hcmdpbjo6UG9zaXRpdmVBbmROZWdhdGl2ZVBh
aXI6OlZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnCiAgICAgLy8gMi4gR2F0aGVy
IHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW4gdmFsdWVzIGZyb20gcHJldmlvdXMgaW5mbG93
IHNpYmxpbmcgaWYgbWFyZ2lucyBhcmUgYWRqb2luaW5nLgogICAgIC8vIDMuIENvbXB1dGUgbWlu
L21heCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgY29sbGFwc2VkIG1hcmdpbiB2YWx1ZXMgdXNpbmcg
bm9uLWNvbGxwYXNlZCBjb21wdXRlZCBtYXJnaW4gYmVmb3JlLgogICAgIGF1dG8gY29sbGFwc2Vk
TWFyZ2luQmVmb3JlID0gY29tcHV0ZWRQb3NpdGl2ZUFuZE5lZ2F0aXZlTWFyZ2luKGZpcnN0Q2hp
bGRDb2xsYXBzZWRNYXJnaW5CZWZvcmUoKSwgcHJldmlvdVNpYmxpbmdDb2xsYXBzZWRNYXJnaW5B
ZnRlcigpKTsKLSAgICBpZiAoY29sbGFwc2VkTWFyZ2luQmVmb3JlLmlzUXVpcmsgJiYgZm9ybWF0
dGluZ0NvbnRleHQoKS5xdWlya3MoKS5zaG91bGRJZ25vcmVDb2xsYXBzZWRRdWlya01hcmdpbihs
YXlvdXRCb3gpKQorICAgIGF1dG8gc2hvdWxkSWdub3JlQ29sbGFwc2VkTWFyZ2luID0gY29sbGFw
c2VkTWFyZ2luQmVmb3JlLmlzUXVpcmsgJiYgaW5RdWlya3NNb2RlKCkgJiYgQmxvY2tGb3JtYXR0
aW5nUXVpcmtzOjpzaG91bGRJZ25vcmVDb2xsYXBzZWRRdWlya01hcmdpbihsYXlvdXRCb3gpOwor
ICAgIGlmIChzaG91bGRJZ25vcmVDb2xsYXBzZWRNYXJnaW4pCiAgICAgICAgIGNvbGxhcHNlZE1h
cmdpbkJlZm9yZSA9IHsgfTsKIAogICAgIGF1dG8gbm9uQ29sbGFwc2VkQmVmb3JlID0gVXNlZFZl
cnRpY2FsTWFyZ2luOjpQb3NpdGl2ZUFuZE5lZ2F0aXZlUGFpcjo6VmFsdWVzIHsgfTsKQEAgLTgz
LDE0ICs4NCwxNCBAQCBVc2VkVmVydGljYWxNYXJnaW46OlBvc2l0aXZlQW5kTmVnYXRpdmVQYWly
OjpWYWx1ZXMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZwogICAgIHJldHVybiBjb21wdXRl
ZFBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW4oY29sbGFwc2VkTWFyZ2luQmVmb3JlLCBub25Db2xs
YXBzZWRCZWZvcmUpOwogfQogCi1QcmVjb21wdXRlZE1hcmdpbkJlZm9yZSBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6cHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHVz
ZWROb25Db2xsYXBzZWRNYXJnaW4pCitQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSBCbG9ja01hcmdp
bkNvbGxhcHNlOjpwcmVjb21wdXRlZE1hcmdpbkJlZm9yZShjb25zdCBCb3gmIGxheW91dEJveCwg
VXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgdXNlZE5vbkNvbGxhcHNlZE1h
cmdpbiwgY29uc3QgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkmIGZvcm1hdHRpbmdHZW9tZXRyeSkK
IHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKICAgICAvLyBEb24n
dCBwcmUtY29tcHV0ZSB2ZXJ0aWNhbCBtYXJnaW5zIGZvciBvdXQgb2YgZmxvdyBib3hlcy4KICAg
ICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3Np
dGlvbmVkKCkpOwogICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7CiAKLSAg
ICBhdXRvIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUgPSBwcmVjb21wdXRlZFBvc2l0aXZl
TmVnYXRpdmVNYXJnaW5CZWZvcmUobGF5b3V0Qm94LCB1c2VkTm9uQ29sbGFwc2VkTWFyZ2luKTsK
KyAgICBhdXRvIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUgPSBwcmVjb21wdXRlZFBvc2l0
aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUobGF5b3V0Qm94LCB1c2VkTm9uQ29sbGFwc2VkTWFyZ2lu
LCBmb3JtYXR0aW5nR2VvbWV0cnkpOwogICAgIGF1dG8gY29sbGFwc2VkTWFyZ2luQmVmb3JlID0g
bWFyZ2luVmFsdWUocG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZSk7CiAgICAgcmV0dXJuIHsg
dXNlZE5vbkNvbGxhcHNlZE1hcmdpbi5iZWZvcmUsIGNvbGxhcHNlZE1hcmdpbkJlZm9yZSwgcG9z
aXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZSB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0LmNwcAppbmRleCBhYzZkZjY1Y2E0YmI3MTM2MDRlYWI3MDAxNmNmN2RlZjFj
MjJmMDRkLi5hYTc3NTQ2MzAyZThlOWU4ZDlkZWYwZTExMzMwYTY4Mjc2NTE4YjhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxl
d3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9U
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJCbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgi
CiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRCb3hHZW9t
ZXRyeS5oIgpAQCAtMzYsNiArMzcsNyBAQAogI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWlu
aW5nQmxvY2suaCIKICNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiVGFibGVGb3JtYXR0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJUYWJsZVdyYXBwZXJCbG9ja0Zv
cm1hdHRpbmdRdWlya3MuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91
dCB7CkBAIC0yMTcsMTAgKzIxOSwxNiBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdAogICAgIEFT
U0VSVCh0YWJsZUJveC5pc1RhYmxlQm94KCkpOwogICAgIC8vIFRhYmxlIGlzIGEgc3BlY2lhbCBC
RkMgY29udGVudC4gSXRzIGhlaWdodCBpcyBtYWlubHkgZHJpdmVuIGJ5IHRoZSBjb250ZW50LiBD
b21wdXRlZCBoZWlnaHQsIG1pbi1oZWlnaHQgYW5kIG1heC1oZWlnaHQgYXJlIGFsbAogICAgIC8v
IGFscmVhZHkgYmVlbiB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nIHRoZSBURkMgbGF5b3V0Lgot
ICAgIGF1dG8gaGVpZ2h0QW5kTWFyZ2luID0gZ2VvbWV0cnkoKS5pbkZsb3dDb250ZW50SGVpZ2h0
QW5kTWFyZ2luKHRhYmxlQm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IHF1aXJrcygpLm92
ZXJyaWRkZW5UYWJsZUhlaWdodCh0YWJsZUJveCkgfSk7Ci0KLSAgICBhdXRvIG1hcmdpbkNvbGxh
cHNlID0gdGhpcy0+bWFyZ2luQ29sbGFwc2UoKTsKLSAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0g
bWFyZ2luQ29sbGFwc2UuY29sbGFwc2VkVmVydGljYWxWYWx1ZXModGFibGVCb3gsIGhlaWdodEFu
ZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4pOworICAgIGF1dG8gb3ZlcnJpZGRlblRhYmxlSGVp
Z2h0ID0gWyZdKCkgLT4gT3B0aW9uYWw8TGF5b3V0VW5pdD4geworICAgICAgICBpZiAobGF5b3V0
U3RhdGUoKS5pblF1aXJrc01vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBUYWJsZVdyYXBwZXJR
dWlya3MoKnRoaXMpLm92ZXJyaWRkZW5UYWJsZUhlaWdodCh0YWJsZUJveCk7CisgICAgICAgIGlm
ICh0YWJsZUJveC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKKyAgICAgICAgICAgIHJldHVy
biBnZW9tZXRyeSgpLmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QodGFibGVC
b3gpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0oKTsKKworICAgIGF1dG8gaGVpZ2h0QW5k
TWFyZ2luID0gZ2VvbWV0cnkoKS5pbkZsb3dDb250ZW50SGVpZ2h0QW5kTWFyZ2luKHRhYmxlQm94
LCBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IG92ZXJyaWRkZW5UYWJsZUhlaWdodCB9KTsKKyAg
ICBhdXRvIHZlcnRpY2FsTWFyZ2luID0gbWFyZ2luQ29sbGFwc2UoKS5jb2xsYXBzZWRWZXJ0aWNh
bFZhbHVlcyh0YWJsZUJveCwgaGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbik7CiAg
ICAgLy8gQ2FjaGUgdGhlIGNvbXB1dGVkIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW4gdmFs
dWUgcGFpci4KICAgICBmb3JtYXR0aW5nU3RhdGUoKS5zZXRVc2VkVmVydGljYWxNYXJnaW4odGFi
bGVCb3gsIHZlcnRpY2FsTWFyZ2luKTsKIApAQCAtMjI5LDcgKzIzNyw3IEBAIHZvaWQgVGFibGVX
cmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbkZvclRh
YmxlQm94KGNvbnN0CiAgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChoZWlnaHRB
bmRNYXJnaW4uY29udGVudEhlaWdodCk7CiAgICAgYm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJn
aW4oeyBtYXJnaW5CZWZvcmUodmVydGljYWxNYXJnaW4pLCBtYXJnaW5BZnRlcih2ZXJ0aWNhbE1h
cmdpbikgfSk7CiAgICAgLy8gQWRqdXN0IHRoZSBwcmV2aW91cyBzaWJsaW5nJ3MgbWFyZ2luIGJv
dHRvbSBub3cgdGhhdCB0aGlzIGJveCdzIHZlcnRpY2FsIG1hcmdpbiBpcyBjb21wdXRlZC4KLSAg
ICBNYXJnaW5Db2xsYXBzZTo6dXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcoKnRo
aXMsIG1hcmdpbkNvbGxhcHNlLCB0YWJsZUJveCk7CisgICAgdXBkYXRlTWFyZ2luQWZ0ZXJGb3JQ
cmV2aW91c1NpYmxpbmcodGFibGVCb3gpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdy
YXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0LmgKaW5kZXggMGRlYTE1N2NjNTIxNmY4ODRmZDI4OTgzNGEzYzg2Njk1Mzc0
MjdhNS4uZDc2M2NhYTkzMzQ3OTdjMTUzNzcxMjY3NDY1OGIzNWFmZjY3ZGJiZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdy
YXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxl
V3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiQmxvY2tGb3JtYXR0
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMTQgKzQ2
LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SG9yaXpvbnRhbENvbnN0cmFpbnRzSWdub3JpbmdG
bG9hdHMoY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMp
IHsgbV9ob3Jpem9udGFsQ29uc3RyYWludHNJZ25vcmluZ0Zsb2F0cyA9IGhvcml6b250YWxDb25z
dHJhaW50czsgfQogCiBwcml2YXRlOgotICAgIGNsYXNzIFF1aXJrcyA6IHB1YmxpYyBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpRdWlya3MgewotICAgIHB1YmxpYzoKLSAgICAgICAgUXVpcmtzKGNv
bnN0IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQmKTsKLQotICAgICAgICBPcHRp
b25hbDxMYXlvdXRVbml0PiBvdmVycmlkZGVuVGFibGVIZWlnaHQoY29uc3QgQ29udGFpbmVyQm94
JiB0YWJsZUJveCkgY29uc3Q7Ci0gICAgfTsKLSAgICBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpRdWlya3MgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gUXVpcmtzKCp0aGlzKTsg
fQotCiAgICAgdm9pZCBsYXlvdXRUYWJsZUJveChjb25zdCBDb250YWluZXJCb3gmIHRhYmxlQm94
LCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKTsKIAogICAgIHZvaWQgY29tcHV0
ZUJvcmRlckFuZFBhZGRpbmdGb3JUYWJsZUJveChjb25zdCBDb250YWluZXJCb3gmLCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmKTsKQEAgLTYzLDExICs1Niw2IEBAIHByaXZhdGU6CiAgICAg
SG9yaXpvbnRhbENvbnN0cmFpbnRzIG1faG9yaXpvbnRhbENvbnN0cmFpbnRzSWdub3JpbmdGbG9h
dHM7CiB9OwogCi1pbmxpbmUgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVp
cmtzOjpRdWlya3MoY29uc3QgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYgZm9y
bWF0dGluZ0NvbnRleHQpCi0gICAgOiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpRdWlya3MoZm9y
bWF0dGluZ0NvbnRleHQpCi17Ci19Ci0KIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZWFkYTkyZWQyOGY3OTdmM2I4MjZiMGZiOTE1NDI1ZWI3ODliYjk5NS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGFibGVXcmFwcGVy
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oIgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCi0KLSNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpvdmVycmlkZGVuVGFibGVIZWlnaHQo
Y29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCkgY29uc3QKLXsKLSAgICBpZiAobGF5b3V0U3Rh
dGUoKS5pblF1aXJrc01vZGUoKSkgewotICAgICAgICAvLyBJbiBxdWlya3MgbW9kZSBhbHdheXMg
dXNlIHRoZSBjb250ZW50IGhlaWdodC4gTm90ZSB0aGF0IHRoZSB0YWJsZXMgd2l0aCBjb250ZW50
IHRha2UgY29tcHV0ZWQgdmFsdWVzIGludG8gYWNjb3VudC4KLSAgICAgICAgcmV0dXJuIGdlb21l
dHJ5KCkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCk7Ci0g
ICAgfQotICAgIHJldHVybiB0YWJsZUJveC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSA/IGdl
b21ldHJ5KCkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCkg
OiBPcHRpb25hbDxMYXlvdXRVbml0PiB7IH07Ci19Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxl
d3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVX
cmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjcwOWM2OTVlNDY3
YTg1MzMxMDVmMDhjYjU1NWM5MDNkMGM3ZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVX
cmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRhYmxlV3JhcHBlckJsb2NrRm9y
bWF0dGluZ1F1aXJrcy5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CisKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkxheW91
dFN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitU
YWJsZVdyYXBwZXJRdWlya3M6OlRhYmxlV3JhcHBlclF1aXJrcyhjb25zdCBUYWJsZVdyYXBwZXJC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IEJsb2NrRm9y
bWF0dGluZ1F1aXJrcyhmb3JtYXR0aW5nQ29udGV4dCkKK3sKKyAgICBBU1NFUlQobGF5b3V0U3Rh
dGUoKS5pblF1aXJrc01vZGUoKSk7Cit9CisKK0xheW91dFVuaXQgVGFibGVXcmFwcGVyUXVpcmtz
OjpvdmVycmlkZGVuVGFibGVIZWlnaHQoY29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCkgY29u
c3QKK3sKKyAgICAvLyBJbiBxdWlya3MgbW9kZSBhbHdheXMgdXNlIHRoZSBjb250ZW50IGhlaWdo
dC4gTm90ZSB0aGF0IHRoZSB0YWJsZXMgd2l0aCBjb250ZW50IHRha2UgY29tcHV0ZWQgdmFsdWVz
IGludG8gYWNjb3VudC4KKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IGRvd25jYXN0PEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ+KHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCkpOworICAgIHJl
dHVybiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeShmb3JtYXR0aW5nQ29udGV4dCkuY29udGVudEhl
aWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCk7Cit9CisKK30KK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFw
cGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjMmUz
MzYyYmMyZTk5YjAwMzg2MGZhYjA1MzgwZDgyYTllZDFkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBl
ci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaApAQCAtMCwwICsxLDQ1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKKworI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgVGFibGVXcmFwcGVyUXVp
cmtzIDogcHVibGljIEJsb2NrRm9ybWF0dGluZ1F1aXJrcyB7CitwdWJsaWM6CisgICAgVGFibGVX
cmFwcGVyUXVpcmtzKGNvbnN0IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQmKTsK
KworICAgIExheW91dFVuaXQgb3ZlcnJpZGRlblRhYmxlSGVpZ2h0KGNvbnN0IENvbnRhaW5lckJv
eCYgdGFibGVCb3gpIGNvbnN0OworfTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGlu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9m
bGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMzE1N2ZkNjk5MDQyODY5N2U4NWQx
NzFmNmQzYWM4ZDU4N2FjYWNmOC4uNjM2MWY4ZTkxZTc0NDc0MzQ2MzQyMDE0ODg2ZTVmMTBkYTNh
OGRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQog
CisjaW5jbHVkZSAiRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsZXhGb3Jt
YXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxpbmVSZWN0LmgiCiAjaW5jbHVkZSAiSW52YWxp
ZGF0aW9uU3RhdGUuaCIKQEAgLTU4LDcgKzU5LDcgQEAgTGF5b3V0VW5pdCBGbGV4Rm9ybWF0dGlu
Z0NvbnRleHQ6OnVzZWRDb250ZW50SGVpZ2h0KCkgY29uc3QKICAgICByZXR1cm4gTGF5b3V0VW5p
dCB7IGxpbmVzLmxhc3QoKS5ib3R0b20oKSAtIGxpbmVzLmZpcnN0KCkudG9wKCkgfTsKIH0KIAot
Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgRmxleEZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKQorSW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2lj
V2lkdGhDb25zdHJhaW50cygpCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTExNyw2ICsxMTgs
MTEgQEAgdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzRm9yRmxleEl0ZW1zKCkKICAgICB9CiB9CiAKK0ZsZXhGb3JtYXR0aW5nR2VvbWV0
cnkgRmxleEZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkoKnRoaXMpOworfQorCiB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0
dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
ZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCA4MWEwZTQwNjlmZmQxMDI5Njg4Y2M1
MTZjZmQ5NTkwY2NjOTM2NTJiLi4zZWVmYzVlNDljZmI2MjhjOTE2N2E1MjU0ZTA4MzlmZGY1NzM4
MGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC0zNCw2
ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorY2xh
c3MgRmxleEZvcm1hdHRpbmdHZW9tZXRyeTsKIGNsYXNzIEludmFsaWRhdGlvblN0YXRlOwogLy8g
VGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBsYXlvdXQgbG9naWMgZm9yIGZsZXggZm9ybWF0dGlu
ZyBjb250ZXh0cy4KIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtZmxleGJveC0xLwpAQCAt
NDcsMTcgKzQ4LDcgQEAgcHVibGljOgogICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0g
ICAgLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHBvc2l0aW9uaW5nIGFuZCBzaXppbmcgZm9yIGZs
ZXggaXRlbXMuCi0gICAgY2xhc3MgR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEdlb21ldHJ5KGNvbnN0IEZsZXhGb3Jt
YXR0aW5nQ29udGV4dCYpOwotCi0gICAgICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyhjb25zdCBDb250YWluZXJCb3gmKTsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIGNvbnN0IEZsZXhGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxGbGV4Rm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KLSAgICB9Owot
ICAgIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdCB7IHJl
dHVybiBHZW9tZXRyeSgqdGhpcyk7IH0KKyAgICBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5IGdlb21l
dHJ5KCkgY29uc3Q7CiAKICAgICB2b2lkIHNpemVBbmRQbGFjZUZsZXhJdGVtcyhjb25zdCBDb25z
dHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKTsKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzRm9yRmxleEl0ZW1zKCk7CkBAIC02NiwxMSArNTcsNiBAQCBwcml2YXRlOgog
ICAgIEZsZXhGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsgcmV0dXJuIGRvd25j
YXN0PEZsZXhGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3Rh
dGUoKSk7IH0KIH07CiAKLWlubGluZSBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpH
ZW9tZXRyeShjb25zdCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQmIGZsZXhGb3JtYXR0aW5nQ29udGV4
dCkKLSAgICA6IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeShmbGV4Rm9ybWF0dGluZ0NvbnRl
eHQpCi17Ci19Ci0KIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRj
N2M4ZGQwOTgwOWQxZDBiNTg0YWJmZjc4ZGQxNzkxYmZmNDY4OTguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRmxleEZvcm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5nU3RhdGUu
aCIKLSNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dENvbnRl
eHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLUZvcm1h
dHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEZsZXhGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgQ29udGFpbmVy
Qm94JiBmbGV4SXRlbSkKLXsKLSAgICBhdXRvIGZpeGVkTWFyZ2luQm9yZGVyQW5kUGFkZGluZyA9
IFsmXShhdXRvJiBsYXlvdXRCb3gpIHsKLSAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3gu
c3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luU3RhcnQoKSku
dmFsdWVPcigwKQotICAgICAgICAgICAgKyBMYXlvdXRVbml0IHsgc3R5bGUuYm9yZGVyTGVmdFdp
ZHRoKCkgfQotICAgICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLnBhZGRpbmdMZWZ0KCkpLnZh
bHVlT3IoMCkKLSAgICAgICAgICAgICsgZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nUmlnaHQoKSku
dmFsdWVPcigwKQotICAgICAgICAgICAgKyBMYXlvdXRVbml0IHsgc3R5bGUuYm9yZGVyUmlnaHRX
aWR0aCgpIH0KLSAgICAgICAgICAgICsgZml4ZWRWYWx1ZShzdHlsZS5tYXJnaW5FbmQoKSkudmFs
dWVPcigwKTsKLSAgICB9OwotCi0gICAgYXV0byBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMgPSBbJl0oKSAtPiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsKLSAgICAgICAgYXV0
byBsb2dpY2FsV2lkdGggPSBmbGV4SXRlbS5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpOwotICAgICAg
ICAvLyBNaW5pbXVtL21heGltdW0gd2lkdGggY2FuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoZSBjb250
YWluaW5nIGJsb2NrJ3Mgd2lkdGguCi0gICAgICAgIGF1dG8gbmVlZHNSZXNvbHZlZENvbnRhaW5p
bmdCbG9ja1dpZHRoID0gbG9naWNhbFdpZHRoLmlzQ2FsY3VsYXRlZCgpIHx8IGxvZ2ljYWxXaWR0
aC5pc1BlcmNlbnQoKSB8fCBsb2dpY2FsV2lkdGguaXNSZWxhdGl2ZSgpOwotICAgICAgICBpZiAo
bmVlZHNSZXNvbHZlZENvbnRhaW5pbmdCbG9ja1dpZHRoKQotICAgICAgICAgICAgcmV0dXJuIHsg
fTsKLQotICAgICAgICBpZiAoYXV0byB3aWR0aCA9IGZpeGVkVmFsdWUobG9naWNhbFdpZHRoKSkK
LSAgICAgICAgICAgIHJldHVybiB7ICp3aWR0aCwgKndpZHRoIH07Ci0KLSAgICAgICAgQVNTRVJU
KGZsZXhJdGVtLmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7Ci0gICAgICAgIGF1dG8g
aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRp
bmdDb250ZXh0KGZsZXhJdGVtLCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzKCk7Ci0gICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNNaW5Db250ZW50KCkp
Ci0gICAgICAgICAgICByZXR1cm4geyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0s
IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSB9OwotICAgICAgICBpZiAobG9naWNh
bFdpZHRoLmlzTWF4Q29udGVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgaW50cmluc2ljV2lk
dGhDb25zdHJhaW50cy5tYXhpbXVtLCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0g
fTsKLSAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0gICAgfTsKLSAg
ICBhdXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBjb25zdHJhaW5CeU1pbk1heFdpZHRo
KGZsZXhJdGVtLCBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSk7Ci0gICAgaW50
cmluc2ljV2lkdGhDb25zdHJhaW50cy5leHBhbmQoZml4ZWRNYXJnaW5Cb3JkZXJBbmRQYWRkaW5n
KGZsZXhJdGVtKSk7Ci0gICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci19Ci0K
LX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRy
eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2U5NjIyMmRmY2M3OThkYzBmMTIzYWI3YjZkMzE1NmFiNGRkMDNk
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5n
R2VvbWV0cnkuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisj
aW5jbHVkZSAiRmxleEZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgTGF5b3V0IHsKKworRmxleEZvcm1hdHRpbmdHZW9tZXRyeTo6RmxleEZvcm1h
dHRpbmdHZW9tZXRyeShjb25zdCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQmIGZsZXhGb3JtYXR0aW5n
Q29udGV4dCkKKyAgICA6IEZvcm1hdHRpbmdHZW9tZXRyeShmbGV4Rm9ybWF0dGluZ0NvbnRleHQp
Cit7Cit9CisKK0ludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgRmxleEZvcm1hdHRpbmdHZW9tZXRy
eTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhjb25zdCBDb250YWluZXJCb3gmIGZsZXhJdGVt
KQoreworICAgIGF1dG8gZml4ZWRNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nID0gWyZdKGF1dG8mIGxh
eW91dEJveCkgeworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAg
ICAgICByZXR1cm4gZml4ZWRWYWx1ZShzdHlsZS5tYXJnaW5TdGFydCgpKS52YWx1ZU9yKDApCisg
ICAgICAgICAgICArIExheW91dFVuaXQgeyBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSB9CisgICAg
ICAgICAgICArIGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ0xlZnQoKSkudmFsdWVPcigwKQorICAg
ICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLnBhZGRpbmdSaWdodCgpKS52YWx1ZU9yKDApCisg
ICAgICAgICAgICArIExheW91dFVuaXQgeyBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCkgfQorICAg
ICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpbkVuZCgpKS52YWx1ZU9yKDApOworICAg
IH07CisKKyAgICBhdXRvIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IFsmXSgp
IC0+IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeworICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0
aCA9IGZsZXhJdGVtLnN0eWxlKCkubG9naWNhbFdpZHRoKCk7CisgICAgICAgIC8vIE1pbmltdW0v
bWF4aW11bSB3aWR0aCBjYW4ndCBiZSBkZXBlbmRpbmcgb24gdGhlIGNvbnRhaW5pbmcgYmxvY2sn
cyB3aWR0aC4KKyAgICAgICAgYXV0byBuZWVkc1Jlc29sdmVkQ29udGFpbmluZ0Jsb2NrV2lkdGgg
PSBsb2dpY2FsV2lkdGguaXNDYWxjdWxhdGVkKCkgfHwgbG9naWNhbFdpZHRoLmlzUGVyY2VudCgp
IHx8IGxvZ2ljYWxXaWR0aC5pc1JlbGF0aXZlKCk7CisgICAgICAgIGlmIChuZWVkc1Jlc29sdmVk
Q29udGFpbmluZ0Jsb2NrV2lkdGgpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAg
IGlmIChhdXRvIHdpZHRoID0gZml4ZWRWYWx1ZShsb2dpY2FsV2lkdGgpKQorICAgICAgICAgICAg
cmV0dXJuIHsgKndpZHRoLCAqd2lkdGggfTsKKworICAgICAgICBBU1NFUlQoZmxleEl0ZW0uZXN0
YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZmxl
eEl0ZW0sIGxheW91dFN0YXRlKCkpLT5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMo
KTsKKyAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc01pbkNvbnRlbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiB7IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgaW50cmluc2ljV2lk
dGhDb25zdHJhaW50cy5taW5pbXVtIH07CisgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNNYXhD
b250ZW50KCkpCisgICAgICAgICAgICByZXR1cm4geyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
Lm1heGltdW0sIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSB9OworICAgICAgICBy
ZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKKyAgICB9OworICAgIGF1dG8gaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyA9IGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoZmxleEl0ZW0sIGNv
bXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpKTsKKyAgICBpbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzLmV4cGFuZChmaXhlZE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoZmxleEl0ZW0pKTsK
KyAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKK30KKworfQorfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
ZmxleC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE4OWNmODJkNjBjZjBkYjhmN2NlNjg3MjczNTY4ZDQyMDZmZWZkMzcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZv
cm1hdHRpbmdHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVk
ZSAiRm9ybWF0dGluZ0dlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFj
ZSBMYXlvdXQgeworCisvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgcG9zaXRpb25pbmcgYW5kIHNp
emluZyBmb3IgZmxleCBpdGVtcy4KK2NsYXNzIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkgOiBwdWJs
aWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKK3B1YmxpYzoKKyAgICBGbGV4Rm9ybWF0dGluZ0dlb21l
dHJ5KGNvbnN0IEZsZXhGb3JtYXR0aW5nQ29udGV4dCYpOworCisgICAgSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IENvbnRhaW5lckJveCYp
OworCitwcml2YXRlOgorICAgIGNvbnN0IEZsZXhGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGlu
Z0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxGbGV4Rm9ybWF0dGluZ0NvbnRleHQ+
KEZvcm1hdHRpbmdHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KK307CisKK30KK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5jcHAKaW5kZXggYTUxZWFmZmNkYTNlZWNjNDNlMjE1ZDFkOTY0NjEwNmMwY2M1YTk3Mi4uODZj
ODM0YzMxMmY1Y2E1ZGVmNjQwNGE1ZjcyMDljMTMzZWE2ZWRkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMzAsNiArMzAsOCBAQAog
CiAjaW5jbHVkZSAiRmxvYXRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
KyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJJbmxpbmVG
b3JtYXR0aW5nUXVpcmtzLmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAj
aW5jbHVkZSAiSW5saW5lTGluZUJveC5oIgogI2luY2x1ZGUgIklubGluZUxpbmVSdW4uaCIKQEAg
LTE5Myw3ICsxOTUsMTIgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91
dChJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIExpbmVCdWlsZGVyOjoKICAgICAgICAgLy8gInNw
WzwtbGluZSBicmVhay0+XWxpdF9jb250ZW50IiAtPiBvdmVyZmxvdyBsZW5ndGg6IDExIC0+IGxl
YWRpbmcgcGFydGlhbCBjb250ZW50IGxlbmd0aDogMTEuCiAgICAgICAgIGF1dG8gcGFydGlhbExl
YWRpbmdDb250ZW50TGVuZ3RoID0gcHJldmlvdXNMaW5lID8gcHJldmlvdXNMaW5lLT5vdmVyZmxv
d0NvbnRlbnRMZW5ndGggOiAwOwogICAgICAgICBhdXRvIGxlYWRpbmdMb2dpY2FsV2lkdGggPSBw
cmV2aW91c0xpbmUgPyBwcmV2aW91c0xpbmUtPm92ZXJmbG93TG9naWNhbFdpZHRoIDogV1RGOjpu
dWxsb3B0OwotICAgICAgICBhdXRvIGluaXRpYWxMaW5lQ29uc3RyYWludHMgPSBJbmxpbmVSZWN0
IHsgbGluZUxvZ2ljYWxUb3AsIGNvbnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbExlZnQsIGNv
bnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbFdpZHRoLCBxdWlya3MoKS5pbml0aWFsTGluZUhl
aWdodCgpIH07CisgICAgICAgIGF1dG8gaW5pdGlhbExpbmVIZWlnaHQgPSBbJl0oKSAtPiBJbmxp
bmVMYXlvdXRVbml0IHsKKyAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluU3RhbmRhcmRz
TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiByb290KCkuc3R5bGUoKS5jb21wdXRlZExp
bmVIZWlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzKCp0
aGlzKS5pbml0aWFsTGluZUhlaWdodCgpOworICAgICAgICB9KCk7CisgICAgICAgIGF1dG8gaW5p
dGlhbExpbmVDb25zdHJhaW50cyA9IElubGluZVJlY3QgeyBsaW5lTG9naWNhbFRvcCwgY29uc3Ry
YWludHMuaG9yaXpvbnRhbC5sb2dpY2FsTGVmdCwgY29uc3RyYWludHMuaG9yaXpvbnRhbC5sb2dp
Y2FsV2lkdGgsIGluaXRpYWxMaW5lSGVpZ2h0IH07CiAgICAgICAgIGF1dG8gbGluZUNvbnRlbnQg
PSBsaW5lQnVpbGRlci5sYXlvdXRJbmxpbmVDb250ZW50KG5lZWRzTGF5b3V0UmFuZ2UsIHBhcnRp
YWxMZWFkaW5nQ29udGVudExlbmd0aCwgbGVhZGluZ0xvZ2ljYWxXaWR0aCwgaW5pdGlhbExpbmVD
b25zdHJhaW50cywgaXNGaXJzdExpbmUpOwogICAgICAgICBhdXRvIGxpbmVMb2dpY2FsUmVjdCA9
IGNvbXB1dGVHZW9tZXRyeUZvckxpbmVDb250ZW50KGxpbmVDb250ZW50LCBjb25zdHJhaW50cy5o
b3Jpem9udGFsKTsKIApAQCAtMjM2LDcgKzI0Myw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lQnVpbGRlcjo6
CiAgICAgfQogfQogCi1Gb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCkKK0ludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpCiB7CiAgICAgYXV0byYgbGF5b3V0
U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogICAgIEFTU0VSVCghZm9ybWF0dGluZ1N0YXRl
KCkuaW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpKTsKQEAgLTYwNSw2ICs2MTIsMTEgQEAgdm9p
ZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW52YWxpZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25z
dCBJbnZhbGlkYXRpb25TdGF0ZSYKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbHNvIHdoZXJlIHdl
IHdvdWxkIGRlbGV0ZSBpbmxpbmUgaXRlbXMgaWYgdGhlaXIgY29udGVudCBjaGFuZ2VkLgogfQog
CitJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21l
dHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlz
KTsKK30KKwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaAppbmRleCBhZDdlYzk3MjM3YzFlODhkNzg4NjAyNjdhMTgwN2UyMDQ4YWY0MzJlLi4w
Zjk5ZjlmOTM0ZWM4ZWY1OTQ0YmZhYjk3Yzc1Y2M3NDQ3ZGE3MmY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTM0LDYgKzM0LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCitjbGFzcyBJbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnk7CiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nU3RhdGU7CiBjbGFzcyBJbnZh
bGlkYXRpb25TdGF0ZTsKIGNsYXNzIExpbmVCb3g7CkBAIC00NywyMSArNDgsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiwgY29uc3Qg
Q29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50Jikgb3ZlcnJpZGU7CiAgICAgTGF5b3V0VW5pdCB1
c2VkQ29udGVudEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgY2xhc3MgUXVpcmtzIDog
cHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3MgewotICAgIHB1YmxpYzoKLSAgICAgICAg
SW5saW5lTGF5b3V0VW5pdCBpbml0aWFsTGluZUhlaWdodCgpIGNvbnN0OwotICAgICAgICBib29s
IGhhc1NvZnRXcmFwT3Bwb3J0dW5pdHlBdEltYWdlKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaW5s
aW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYs
IGNvbnN0IExpbmVCb3gmKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLSAgICAgICAgUXVpcmtzKGNvbnN0IElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Jik7Ci0KLSAgICAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmZvcm1hdHRpbmdD
b250ZXh0KCkpOyB9Ci0KLSAgICB9OwotICAgIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWly
a3MgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gUXVpcmtzKCp0aGlzKTsgfQotCiAgICAgY29uc3Qg
SW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBk
b3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0
aW5nU3RhdGUoKSk7IH0KICAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0
ZSgpIHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0Nv
bnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQogCkBAIC03MCwyMiArNTYsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7CiAKLSAgICBjbGFzcyBHZW9tZXRyeSA6IHB1
YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgewotICAgIHB1YmxpYzoKLSAgICAgICAg
TGluZUJveCBsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250
ZW50Jik7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcEZvck5leHRMaW5lKGNv
bnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYsIElubGluZUxheW91dFVuaXQgcHJldmlvdXNM
aW5lTG9naWNhbEJvdHRvbSwgY29uc3QgRmxvYXRpbmdDb250ZXh0JikgY29uc3Q7Ci0KLSAgICAg
ICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbmxpbmVCbG9ja0NvbnRlbnRIZWlnaHRBbmRNYXJn
aW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJp
ZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIENvbnRlbnRXaWR0aEFuZE1hcmdp
biBpbmxpbmVCbG9ja0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OwotICAgICAgICBHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwot
Ci0gICAgICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdDb250ZXh0PihGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9Ci0KLSAgICB9
OwotICAgIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0
IHsgcmV0dXJuIEdlb21ldHJ5KCp0aGlzKTsgfQorICAgIElubGluZUZvcm1hdHRpbmdHZW9tZXRy
eSBnZW9tZXRyeSgpIGNvbnN0OwogCiAgICAgdm9pZCBsaW5lTGF5b3V0KElubGluZUl0ZW1zJiwg
TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SYW5nZSwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dD
b250ZW50Jik7CiAKQEAgLTEwMSwxNiArNzIsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgaW52YWxp
ZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYpOwogfTsKIAotaW5s
aW5lIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkoY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgIDogRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotewotfQot
Ci1pbmxpbmUgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6UXVpcmtzKGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKLSAgICA6IEZv
cm1hdHRpbmdDb250ZXh0OjpRdWlya3MoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi17Ci19Ci0K
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI0ZTc4
ODMzMzgwZmI0Y2MyMDUxMzU5YTM2YjUwNDk1NDliOWFkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDcyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkZsb2F0aW5nQ29udGV4dC5o
IgotI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW5saW5lTGluZUJv
eC5oIgotI2luY2x1ZGUgIkxheW91dEJveC5oIgotI2luY2x1ZGUgIkxheW91dENvbnRhaW5lckJv
eC5oIgotI2luY2x1ZGUgIkxheW91dFJlcGxhY2VkQm94LmgiCi0jaW5jbHVkZSAiTGVuZ3RoRnVu
Y3Rpb25zLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1j
bGFzcyBMaW5lQm94QnVpbGRlciB7Ci1wdWJsaWM6Ci0gICAgTGluZUJveEJ1aWxkZXIoY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmKTsKLSAgICBMaW5lQm94IGJ1aWxkKGNvbnN0IExpbmVC
dWlsZGVyOjpMaW5lQ29udGVudCYpOwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBTaW1wbGlmaWVk
VmVydGljYWxBbGlnbm1lbnQgewotICAgICAgICBTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQo
Y29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gpOwotCi0gICAgICAg
IHN0YXRpYyBib29sIGNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQoY29uc3QgTGluZUJveDo6SW5s
aW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gsIGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94
JiwgT3B0aW9uYWw8Y29uc3QgQm94R2VvbWV0cnk+IGlubGluZUxldmVsQm94R2VvbWV0cnkpOwot
Ci0gICAgICAgIHZvaWQgYWxpZ24oTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmKTsKLQotICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IHJvb3RJbmxpbmVCb3hMb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1
cm4gbV9yb290SW5saW5lQm94TG9naWNhbFRvcDsgfQotICAgICAgICBJbmxpbmVMYXlvdXRVbml0
IGxpbmVCb3hIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hMb2dpY2FsQm90dG9tIC0g
bV9saW5lQm94TG9naWNhbFRvcDsgfQotCi0gICAgICAgIHZvaWQgc2V0RW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9pc0VuYWJsZWQgPSBlbmFibGVkOyB9Ci0gICAgICAgIGJvb2wgaXNFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0VuYWJsZWQ7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IHZvaWQgYWRqdXN0KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94Jik7Ci0KLSAgICAgICAg
Y29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIG1fcm9vdElubGluZUJveDsKLSAgICAgICAg
Ym9vbCBtX2lzRW5hYmxlZCB7IHRydWUgfTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2xp
bmVCb3hMb2dpY2FsVG9wIHsgMCB9OwotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fbGluZUJv
eExvZ2ljYWxCb3R0b20geyAwIH07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbV9yb290SW5s
aW5lQm94TG9naWNhbFRvcCB7IDAgfTsKLSAgICB9OwotCi0gICAgdm9pZCBzZXRWZXJ0aWNhbEdl
b21ldHJ5Rm9ySW5saW5lQm94KExpbmVCb3g6OklubGluZUxldmVsQm94JikgY29uc3Q7Ci0gICAg
dm9pZCBjb25zdHJ1Y3RBbmRBbGlnbklubGluZUxldmVsQm94ZXMoTGluZUJveCYsIGNvbnN0IExp
bmU6OlJ1bkxpc3QmKTsKLSAgICB2b2lkIGNvbXB1dGVMaW5lQm94SGVpZ2h0QW5kQWxpZ25Jbmxp
bmVMZXZlbEJveGVzVmVydGljYWxseShMaW5lQm94Jik7Ci0KLSAgICBjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OyB9Ci0gICAgY29uc3QgQm94JiByb290Qm94KCkgY29uc3QgeyBy
ZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7IH0KLSAgICBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRl
KCk7IH0KLQotICAgIGJvb2wgaXNSb290TGF5b3V0Qm94KGNvbnN0IENvbnRhaW5lckJveCYgY29u
dGFpbmVyQm94KSBjb25zdCB7IHJldHVybiAmY29udGFpbmVyQm94ID09ICZyb290Qm94KCk7IH0K
LQotcHJpdmF0ZToKLSAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDsKLX07Ci0KLXN0cnVjdCBIYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNl
Q29udGVudCB7Ci1wdWJsaWM6Ci0gICAgdm9pZCByZXNldCgpOwotCi0gICAgSW5saW5lTGF5b3V0
VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICBib29sIGlzQ29uZGl0
aW9uYWwoKSBjb25zdCB7IHJldHVybiBtX2lzQ29uZGl0aW9uYWw7IH0KLQotICAgIHZvaWQgc2V0
SXNDb25kaXRpb25hbCgpIHsgbV9pc0NvbmRpdGlvbmFsID0gdHJ1ZTsgfQotICAgIHZvaWQgZXhw
YW5kKElubGluZUxheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCArPSB3aWR0aDsgfQotCi1wcml2
YXRlOgotICAgIGJvb2wgbV9pc0NvbmRpdGlvbmFsIHsgZmFsc2UgfTsKLSAgICBJbmxpbmVMYXlv
dXRVbml0IG1fd2lkdGggeyAwIH07Ci19OwotCi12b2lkIEhhbmdpbmdUcmFpbGluZ1doaXRlc3Bh
Y2VDb250ZW50OjpyZXNldCgpCi17Ci0gICAgbV9pc0NvbmRpdGlvbmFsID0gZmFsc2U7Ci0gICAg
bV93aWR0aCA9ICAwOwotfQotCi1zdGF0aWMgSGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRl
bnQgY29sbGVjdEhhbmdpbmdUcmFpbGluZ1doaXRlc3BhY2VDb250ZW50KGNvbnN0IExpbmU6OlJ1
bkxpc3QmIHJ1bnMsIGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQotewotICAgIGF1
dG8gaGFuZ2luZ0NvbnRlbnQgPSBIYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudCB7IH07
Ci0gICAgaWYgKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKLSAgICAgICAgaGFuZ2luZ0Nv
bnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOwotICAgIGZvciAoYXV0byYgcnVuIDogV1RGOjptYWtl
UmV2ZXJzZWRSYW5nZShydW5zKSkgewotICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94U3RhcnQo
KSB8fCBydW4uaXNJbmxpbmVCb3hFbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIGhhbmdpbmdDb250ZW50LnNl
dElzQ29uZGl0aW9uYWwoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNw
YWNlLgotICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6
OlByZVdyYXApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gVGhpcyBpcyBlaXRoZXIg
YSBub3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0g
ICAgICAgIGhhbmdpbmdDb250ZW50LmV4cGFuZChydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgo
KSk7Ci0gICAgfQotICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKLX0KLQotc3RhdGljIE9wdGlv
bmFsPElubGluZUxheW91dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoY29uc3QgTGlu
ZTo6UnVuTGlzdCYgcnVucywgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIElubGluZUxheW91dFVu
aXQgbGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRo
LCBib29sIGlzTGFzdExpbmUpCi17Ci0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxpbmVMb2dp
Y2FsV2lkdGggLSBjb250ZW50TG9naWNhbFdpZHRoOwotICAgIGF1dG8gaGFuZ2luZ1RyYWlsaW5n
V2hpdGVzcGFjZUNvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRl
bnQocnVucywgaXNMYXN0TGluZSk7Ci0gICAgYXZhaWxhYmxlV2lkdGggKz0gaGFuZ2luZ1RyYWls
aW5nV2hpdGVzcGFjZUNvbnRlbnQud2lkdGgoKTsKLSAgICBpZiAoYXZhaWxhYmxlV2lkdGggPD0g
MCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsQWxp
Z25tZW50ID0gWyZdIHsKLSAgICAgICAgaWYgKHRleHRBbGlnbiAhPSBUZXh0QWxpZ25Nb2RlOjpK
dXN0aWZ5KQotICAgICAgICAgICAgcmV0dXJuIHRleHRBbGlnbjsKLSAgICAgICAgLy8gVGV4dCBp
cyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0ZXh0
LWp1c3RpZnkgcHJvcGVydHksCi0gICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmlsbCB0
aGUgbGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24tbGFz
dCwKLSAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhl
IGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KLSAgICAgICAgaWYgKGlzTGFzdExp
bmUgfHwgKCFydW5zLmlzRW1wdHkoKSAmJiBydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpKSkKLSAg
ICAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKLSAgICAgICAgcmV0dXJuIFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnk7Ci0gICAgfTsKLQotICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jp
em9udGFsQWxpZ25tZW50KCkpIHsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6Ci0gICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
U3RhcnQ6Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdo
dDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6RW5kOgotICAgICAgICByZXR1cm4gYXZhaWxhYmxlV2lkdGg7Ci0gICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50
ZXI6Ci0gICAgICAgIHJldHVybiBhdmFpbGFibGVXaWR0aCAvIDI7Ci0gICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpKdXN0aWZ5OgotICAgICAgICAvLyBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5IGlzIGEg
cnVuIGFsaWdubWVudCAoYW5kIHdlIG9ubHkgZG8gaW5saW5lIGJveCBhbGlnbm1lbnQgaGVyZSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX0lN
UExFTUVOVEVEX1lFVCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1MaW5lQm94QnVpbGRlcjo6TGlu
ZUJveEJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCkKLXsKLX0KLQotTGluZUJveCBMaW5lQm94QnVpbGRlcjo6YnVpbGQoY29uc3Qg
TGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCkKLXsKLSAgICBhdXRvJiBydW5z
ID0gbGluZUNvbnRlbnQucnVuczsKLSAgICBhdXRvIGxpbmVMb2dpY2FsV2lkdGggPSBsaW5lQ29u
dGVudC5saW5lTG9naWNhbFdpZHRoOwotICAgIGF1dG8gY29udGVudExvZ2ljYWxXaWR0aCA9IGxp
bmVDb250ZW50LmNvbnRlbnRMb2dpY2FsV2lkdGg7Ci0gICAgYXV0byBob3Jpem9udGFsQWxpZ25t
ZW50T2Zmc2V0ID0gTGF5b3V0Ojpob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KHJ1bnMsIHJvb3RC
b3goKS5zdHlsZSgpLnRleHRBbGlnbigpLCBsaW5lTG9naWNhbFdpZHRoLCBjb250ZW50TG9naWNh
bFdpZHRoLCBsaW5lQ29udGVudC5pc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwotICAgIGF1
dG8gbGluZUJveCA9IExpbmVCb3ggeyByb290Qm94KCksIGxpbmVDb250ZW50LmxvZ2ljYWxUb3BM
ZWZ0LCBsaW5lTG9naWNhbFdpZHRoLCBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0LnZhbHVlT3Io
SW5saW5lTGF5b3V0VW5pdCB7IH0pLCBjb250ZW50TG9naWNhbFdpZHRoLCBsaW5lQ29udGVudC5u
b25TcGFubmluZ0lubGluZUxldmVsQm94Q291bnQgfTsKLSAgICBjb25zdHJ1Y3RBbmRBbGlnbklu
bGluZUxldmVsQm94ZXMobGluZUJveCwgcnVucyk7Ci0gICAgcmV0dXJuIGxpbmVCb3g7Ci19Ci0K
LXZvaWQgTGluZUJveEJ1aWxkZXI6OnNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goTGlu
ZUJveDo6SW5saW5lTGV2ZWxCb3gmIGlubGluZUxldmVsQm94KSBjb25zdAotewotICAgIEFTU0VS
VChpbmxpbmVMZXZlbEJveC5pc0lubGluZUJveCgpIHx8IGlubGluZUxldmVsQm94LmlzTGluZUJy
ZWFrQm94KCkpOwotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gaW5saW5lTGV2ZWxCb3guc3R5bGUo
KS5mb250TWV0cmljcygpOwotICAgIElubGluZUxheW91dFVuaXQgYXNjZW50ID0gZm9udE1ldHJp
Y3MuYXNjZW50KCk7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50ID0gZm9udE1ldHJpY3Mu
ZGVzY2VudCgpOwotICAgIGF1dG8gbG9naWNhbEhlaWdodCA9IGFzY2VudCArIGRlc2NlbnQ7Ci0g
ICAgLy8gV2UgbmVlZCBmbG9vci9jZWlsIHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwg
cG9zaXRpb25pbmcuCi0gICAgaW5saW5lTGV2ZWxCb3guc2V0QmFzZWxpbmUoZmxvb3JmKGFzY2Vu
dCkpOwotICAgIGlubGluZUxldmVsQm94LnNldERlc2NlbnQoY2VpbChkZXNjZW50KSk7Ci0gICAg
aW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KTsKLQotICAgIC8v
IEZJWE1FOiBBZGp1c3QgbGF5b3V0IGJvdW5kcyB3aXRoIGZhbGxiYWNrIGZvbnQgd2hlbiBhcHBs
aWNhYmxlLgotICAgIGF1dG8mIHN0eWxlID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5
bGUoKTsKLSAgICBhdXRvIGxpbmVIZWlnaHQgPSBzdHlsZS5saW5lSGVpZ2h0KCk7Ci0gICAgaWYg
KGxpbmVIZWlnaHQuaXNOZWdhdGl2ZSgpKSB7Ci0gICAgICAgIC8vIElmIGxpbmUtaGVpZ2h0IGNv
bXB1dGVzIHRvIG5vcm1hbCBhbmQgZWl0aGVyIHRleHQtZWRnZSBpcyBsZWFkaW5nIG9yIHRoaXMg
aXMgdGhlIHJvb3QgaW5saW5lIGJveCwKLSAgICAgICAgLy8gdGhlIGZvbnTigJlzIGxpbmUgZ2Fw
IG1ldHJpYyBtYXkgYWxzbyBiZSBpbmNvcnBvcmF0ZWQgaW50byBBIGFuZCBEIGJ5IGFkZGluZyBo
YWxmIHRvIGVhY2ggc2lkZSBhcyBoYWxmLWxlYWRpbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9jc3MtaW5saW5lLTMvI2lubGluZS1oZWlnaHQKLSAgICAgICAgLy8gU2luY2Ug
dGV4dC1lZGdlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGFuZCB0aGUgaW5pdGlhbCB2YWx1ZSBpcyBs
ZWFkaW5nLCB3ZSBzaG91bGQganVzdCBhcHBseSBpdCB0bwotICAgICAgICAvLyBhbGwgaW5saW5l
IGJveGVzLgotICAgICAgICBhdXRvIGhhbGZMaW5lR2FwID0gKGZvbnRNZXRyaWNzLmxpbmVTcGFj
aW5nKCkgLSBsb2dpY2FsSGVpZ2h0KSAvIDI7Ci0gICAgICAgIGFzY2VudCArPSBoYWxmTGluZUdh
cDsKLSAgICAgICAgZGVzY2VudCArPSBoYWxmTGluZUdhcDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQo
KTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBoYWxmTGVhZGluZyA9IChsaW5lSGVpZ2h0IC0g
KGFzY2VudCArIGRlc2NlbnQpKSAvIDI7Ci0gICAgICAgIGFzY2VudCArPSBoYWxmTGVhZGluZzsK
LSAgICAgICAgZGVzY2VudCArPSBoYWxmTGVhZGluZzsKLSAgICB9Ci0gICAgLy8gV2UgbmVlZCBm
bG9vci9jZWlsIHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwgcG9zaXRpb25pbmcuCi0g
ICAgaW5saW5lTGV2ZWxCb3guc2V0TGF5b3V0Qm91bmRzKExpbmVCb3g6OklubGluZUxldmVsQm94
OjpMYXlvdXRCb3VuZHMgeyBmbG9vcmYoYXNjZW50KSwgY2VpbChkZXNjZW50KSB9KTsKLX0KLQot
dm9pZCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExp
bmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMpCi17Ci0gICAgYXV0byYg
cm9vdElubGluZUJveCA9IGxpbmVCb3gucm9vdElubGluZUJveCgpOwotICAgIHNldFZlcnRpY2Fs
R2VvbWV0cnlGb3JJbmxpbmVCb3gocm9vdElubGluZUJveCk7Ci0KLSAgICBhdXRvIHNpbXBsaWZp
ZWRWZXJ0aWNhbEFsaWdubWVudCA9IFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudCB7IHJvb3RJ
bmxpbmVCb3ggfTsKLSAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aCBzdXBwb3J0IGZvciBsaW5l
LWhlaWdodCBjb250ZW50LgotICAgIHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5zZXRFbmFi
bGVkKGxheW91dFN0YXRlKCkuaW5TdGFuZGFyZHNNb2RlKCkgJiYgcm9vdEJveCgpLnN0eWxlKCku
bGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSk7Ci0KLSAgICBhdXRvIHNpbXBsaWZpZWRBbGlnblZl
cnRpY2FsbHlJZkFwcGxpY2FibGUgPSBbJl0oYXV0byYgaW5saW5lTGV2ZWxCb3gsIE9wdGlvbmFs
PGNvbnN0IEJveEdlb21ldHJ5PiBib3hHZW9tZXRyeSkgewotICAgICAgICBpZiAoIXNpbXBsaWZp
ZWRWZXJ0aWNhbEFsaWdubWVudC5pc0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKCFTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmNhblVzZVNpbXBsaWZpZWRB
bGlnbm1lbnQocm9vdElubGluZUJveCwgaW5saW5lTGV2ZWxCb3gsIGJveEdlb21ldHJ5KSkgewot
ICAgICAgICAgICAgc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LnNldEVuYWJsZWQoZmFsc2Up
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNpbXBsaWZpZWRWZXJ0
aWNhbEFsaWdubWVudC5hbGlnbihpbmxpbmVMZXZlbEJveCk7Ci0gICAgfTsKLQotICAgIGF1dG8g
Y3JlYXRlV3JhcHBlZElubGluZUJveGVzID0gWyZdIHsKLSAgICAgICAgaWYgKHJ1bnMuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAvLyBBbiBpbmxpbmUgYm94IG1heSBu
b3QgbmVjZXNzYXJpbHkgc3RhcnQgb24gdGhlIGN1cnJlbnQgbGluZToKLSAgICAgICAgLy8gPHNw
YW4gaWQ9b3V0ZXI+bGluZSBicmVhazxicj50aGlzIGNvbnRlbnQncyBwYXJlbnQgaW5saW5lIGJv
eCgnb3V0ZXInKSA8c3BhbiBpZD1pbm5lcj5zdGFydHMgb24gdGhlIHByZXZpb3VzIGxpbmU8L3Nw
YW4+PC9zcGFuPgotICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlJ3Mg
YW4gTGluZUJveDo6SW5saW5lTGV2ZWxCb3ggZm9yIGV2ZXJ5IGlubGluZSBib3ggdGhhdCdzIHBy
ZXNlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgLy8gSW4gbmVzdGluZyBjYXNlIHdl
IG5lZWQgdG8gY3JlYXRlIExpbmVCb3g6OklubGluZUxldmVsQm94ZXMgZm9yIHRoZSBpbmxpbmUg
Ym94IGFuY2VzdG9ycy4KLSAgICAgICAgLy8gV2Ugb25seSBoYXZlIHRvIGRvIGl0IG9uIHRoZSBm
aXJzdCBydW4gYXMgYW55IHN1YnNlcXVlbnQgaW5saW5lIGNvbnRlbnQgaXMgZWl0aGVyIGF0IHRo
ZSBzYW1lL2hpZ2hlciBuZXN0aW5nIGxldmVsIG9yCi0gICAgICAgIC8vIG5lc3RlZCB3aXRoIGEg
W2lubGluZSBib3ggc3RhcnRdIHJ1bi4KLSAgICAgICAgYXV0byYgZmlyc3RSdW4gPSBydW5zWzBd
OwotICAgICAgICBhdXRvJiBmaXJzdFJ1blBhcmVudExheW91dEJveCA9IGZpcnN0UnVuLmxheW91
dEJveCgpLnBhcmVudCgpOwotICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIHRoZSBmb3JtYXR0
aW5nIHJvb3QsIHdlIGNhbiBzdG9wIGhlcmUuIFRoaXMgaXMgcm9vdCBpbmxpbmUgYm94IGNvbnRl
bnQsIHRoZXJlJ3Mgbm8gbmVzdGluZyBpbmxpbmUgYm94IGZyb20gdGhlIHByZXZpb3VzIGxpbmUo
cykKLSAgICAgICAgLy8gdW5sZXNzIHRoZSBpbmxpbmUgYm94IGNsb3NpbmcgaXMgZm9yY2VkIG92
ZXIgdG8gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgLy8gZS5nLgotICAgICAgICAvLyA8c3Bh
bj5ub3JtYWxseSB0aGUgaW5saW5lIGJveCBjbG9zaW5nIGZvcm1zIGEgY29udGludW91cyBjb250
ZW50PC9zcGFuPgotICAgICAgICAvLyA8c3Bhbj51bmxlc3MgaXQncyBmb3JjZWQgdG8gdGhlIG5l
eHQgbGluZTxicj48L3NwYW4+Ci0gICAgICAgIGF1dG8gZmlyc3RSdW5OZWVkc0lubGluZUJveCA9
IGZpcnN0UnVuLmlzSW5saW5lQm94RW5kKCk7Ci0gICAgICAgIGlmICghZmlyc3RSdW5OZWVkc0lu
bGluZUJveCAmJiBpc1Jvb3RMYXlvdXRCb3goZmlyc3RSdW5QYXJlbnRMYXlvdXRCb3gpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gbGF5b3V0Qm94ZXNX
aXRob3V0SW5saW5lQm94ZXM7Ci0gICAgICAgIGlmIChmaXJzdFJ1bk5lZWRzSW5saW5lQm94KQot
ICAgICAgICAgICAgbGF5b3V0Qm94ZXNXaXRob3V0SW5saW5lQm94ZXMuYXBwZW5kKCZmaXJzdFJ1
bi5sYXlvdXRCb3goKSk7Ci0gICAgICAgIGF1dG8qIGFuY2VzdG9yID0gJmZpcnN0UnVuUGFyZW50
TGF5b3V0Qm94OwotICAgICAgICB3aGlsZSAoIWlzUm9vdExheW91dEJveCgqYW5jZXN0b3IpKSB7
Ci0gICAgICAgICAgICBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlcy5hcHBlbmQoYW5jZXN0
b3IpOwotICAgICAgICAgICAgYW5jZXN0b3IgPSAmYW5jZXN0b3ItPnBhcmVudCgpOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgbWlzc2luZyBMaW5lQm94OjpJbmxpbmVCb3hl
cyBzdGFydGluZyB3aXRoIHRoZSB0b3Btb3N0IGxheW91dCBib3guCi0gICAgICAgIGZvciAoYXV0
byogbGF5b3V0Qm94IDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShsYXlvdXRCb3hlc1dpdGhvdXRJ
bmxpbmVCb3hlcykpIHsKLSAgICAgICAgICAgIGF1dG8gaW5saW5lQm94ID0gTGluZUJveDo6SW5s
aW5lTGV2ZWxCb3g6OmNyZWF0ZUlubGluZUJveCgqbGF5b3V0Qm94LCByb290SW5saW5lQm94Lmxv
Z2ljYWxMZWZ0KCksIGxpbmVCb3guY29udGVudExvZ2ljYWxXaWR0aCgpKTsKLSAgICAgICAgICAg
IHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goaW5saW5lQm94KTsKLSAgICAgICAgICAg
IHNpbXBsaWZpZWRBbGlnblZlcnRpY2FsbHlJZkFwcGxpY2FibGUoaW5saW5lQm94LCB7IH0pOwot
ICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChXVEZNb3ZlKGlubGluZUJveCkp
OwotICAgICAgICB9Ci0gICAgfTsKLSAgICBjcmVhdGVXcmFwcGVkSW5saW5lQm94ZXMoKTsKLQot
ICAgIGF1dG8gbGluZUhhc0NvbnRlbnQgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IHJ1
bnMpIHsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAg
ICBhdXRvIHJ1bkhhc0NvbnRlbnQgPSBbJl0gKCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBBU1NF
UlQoIWxpbmVIYXNDb250ZW50KTsKLSAgICAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVu
LmlzQm94KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygpIHx8IHJ1bi5pc0hhcmRMaW5lQnJlYWso
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8mIGlubGlu
ZUJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRC
b3gpOwotICAgICAgICAgICAgLy8gRXZlbiBuZWdhdGl2ZSBob3Jpem9udGFsIG1hcmdpbiBtYWtl
cyB0aGUgbGluZSAiY29udGVudGZ1bCIuCi0gICAgICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94
U3RhcnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5lQm94R2VvbWV0cnkubWFyZ2lu
U3RhcnQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCkgfHwgaW5saW5lQm94R2Vv
bWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDBfbHUpOwotICAgICAgICAgICAgaWYgKHJ1bi5p
c0lubGluZUJveEVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVCb3hHZW9tZXRy
eS5tYXJnaW5FbmQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5ib3JkZXJSaWdodCgpIHx8IGlubGlu
ZUJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMF9sdSk7Ci0gICAgICAgICAgICBp
ZiAocnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9OwotICAgICAgICBsaW5lSGFzQ29udGVudCA9IGxpbmVIYXND
b250ZW50IHx8IHJ1bkhhc0NvbnRlbnQoKTsKLSAgICAgICAgYXV0byBsb2dpY2FsTGVmdCA9IHJv
b3RJbmxpbmVCb3gubG9naWNhbExlZnQoKSArIHJ1bi5sb2dpY2FsTGVmdCgpOwotICAgICAgICBp
ZiAocnVuLmlzQm94KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGlubGluZUxldmVsQm94R2VvbWV0
cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAg
ICAgICAgICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGlubGluZUxldmVsQm94R2VvbWV0cnkubWFy
Z2luQm94SGVpZ2h0KCk7Ci0gICAgICAgICAgICBhdXRvIGFzY2VudCA9IElubGluZUxheW91dFVu
aXQgeyB9OwotICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlKCkuc2hvdWxkTm90U3ludGhlc2l6
ZUlubGluZUJsb2NrQmFzZWxpbmUoKSkgewotICAgICAgICAgICAgICAgIC8vIEludGVncmF0aW9u
IGNvZGVwYXRoIGNvbnN0cnVjdHMgcmVwbGFjZWQgYm94ZXMgZm9yIGlubGluZS1ibG9jayBjb250
ZW50LgotICAgICAgICAgICAgICAgIEFTU0VSVChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsK
LSAgICAgICAgICAgICAgICBhc2NlbnQgPSAqZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJv
eCkuYmFzZWxpbmUoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5l
QmxvY2tCb3goKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBiYXNlbGluZSBvZiBhbiAnaW5s
aW5lLWJsb2NrJyBpcyB0aGUgYmFzZWxpbmUgb2YgaXRzIGxhc3QgbGluZSBib3ggaW4gdGhlIG5v
cm1hbCBmbG93LCB1bmxlc3MgaXQgaGFzIGVpdGhlciBubyBpbi1mbG93IGxpbmUgYm94ZXMgb3IK
LSAgICAgICAgICAgICAgICAvLyBpZiBpdHMgJ292ZXJmbG93JyBwcm9wZXJ0eSBoYXMgYSBjb21w
dXRlZCB2YWx1ZSBvdGhlciB0aGFuICd2aXNpYmxlJywgaW4gd2hpY2ggY2FzZSB0aGUgYmFzZWxp
bmUgaXMgdGhlIGJvdHRvbSBtYXJnaW4gZWRnZS4KLSAgICAgICAgICAgICAgICBhdXRvIHN5bnRo
ZXNpemVCYXNlbGluZSA9ICFsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCgpIHx8ICFsYXlvdXRCb3guc3R5bGUoKS5pc092ZXJmbG93VmlzaWJsZSgpOwotICAgICAg
ICAgICAgICAgIGlmIChzeW50aGVzaXplQmFzZWxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGFz
Y2VudCA9IG1hcmdpbkJveEhlaWdodDsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxp
c2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOwotICAgICAgICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZSA9IGZvcm1hdHRpbmdTdGF0
ZS5saW5lcygpLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jh
c2VsaW5lID0gbGFzdExpbmUubGluZUJveExvZ2ljYWxSZWN0KCkudG9wKCkgKyBsYXN0TGluZS5i
YXNlbGluZSgpOwotICAgICAgICAgICAgICAgICAgICBhc2NlbnQgPSBpbmxpbmVMZXZlbEJveEdl
b21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5ib3JkZXJUb3Ao
KSArIGlubGluZUxldmVsQm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxp
bmVCbG9ja0Jhc2VsaW5lOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKLSAgICAgICAgICAgICAgICBhc2NlbnQgPSBk
b3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KS5iYXNlbGluZSgpLnZhbHVlT3IobWFyZ2lu
Qm94SGVpZ2h0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhc2NlbnQgPSBt
YXJnaW5Cb3hIZWlnaHQ7Ci0gICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBzdGQ6Om1heCgwX2x1
LCBpbmxpbmVMZXZlbEJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkpOwotICAgICAgICAgICAgYXV0
byBhdG9taWNJbmxpbmVMZXZlbEJveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVB
dG9taWNJbmxpbmVMZXZlbEJveChsYXlvdXRCb3gsIGxvZ2ljYWxMZWZ0LCB7IGlubGluZUxldmVs
Qm94R2VvbWV0cnkuYm9yZGVyQm94V2lkdGgoKSwgbWFyZ2luQm94SGVpZ2h0IH0pOwotICAgICAg
ICAgICAgYXRvbWljSW5saW5lTGV2ZWxCb3guc2V0QmFzZWxpbmUoYXNjZW50KTsKLSAgICAgICAg
ICAgIGF0b21pY0lubGluZUxldmVsQm94LnNldExheW91dEJvdW5kcyhMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveDo6TGF5b3V0Qm91bmRzIHsgYXNjZW50LCBtYXJnaW5Cb3hIZWlnaHQgLSBhc2NlbnQg
fSk7Ci0gICAgICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGF0
b21pY0lubGluZUxldmVsQm94LCBpbmxpbmVMZXZlbEJveEdlb21ldHJ5KTsKLSAgICAgICAgICAg
IGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShhdG9taWNJbmxpbmVMZXZlbEJveCkp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bi5pc0lu
bGluZUJveFN0YXJ0KCkpIHsKLSAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgZG9uJ3Qg
a25vdyB5ZXQgaG93IHdpZGUgdGhpcyBpbmxpbmUgYm94IGlzLiBMZXQncyBhc3N1bWUgaXQncyBh
cyBsb25nIGFzIHRoZSBsaW5lIGlzCi0gICAgICAgICAgICAvLyBhbmQgYWRqdXN0IGl0IGxhdGVy
IGlmIHdlIGNvbWUgYWNyb3NzIGFuIGlubGluZUJveEVuZCBydW4gKHNlZSBiZWxvdykuCi0gICAg
ICAgICAgICBhdXRvIGluaXRpYWxMb2dpY2FsV2lkdGggPSBsaW5lQm94LmNvbnRlbnRMb2dpY2Fs
V2lkdGgoKSAtIHJ1bi5sb2dpY2FsTGVmdCgpOwotICAgICAgICAgICAgQVNTRVJUKGluaXRpYWxM
b2dpY2FsV2lkdGggPj0gMCk7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgYm94IHJ1biBpcyBiYXNl
ZCBvbiBtYXJnaW4gYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3guCi0gICAgICAg
ICAgICBhdXRvIG1hcmdpblN0YXJ0ID0gc3RkOjptYXgoMF9sdSwgZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdpblN0YXJ0KCkpOwotICAgICAgICAgICAg
bG9naWNhbExlZnQgKz0gbWFyZ2luU3RhcnQ7Ci0gICAgICAgICAgICBpbml0aWFsTG9naWNhbFdp
ZHRoIC09IG1hcmdpblN0YXJ0OwotICAgICAgICAgICAgYXV0byBpbmxpbmVCb3ggPSBMaW5lQm94
OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KGxheW91dEJveCwgbG9naWNhbExlZnQs
IGluaXRpYWxMb2dpY2FsV2lkdGgpOwotICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZv
cklubGluZUJveChpbmxpbmVCb3gpOwotICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGlj
YWxseUlmQXBwbGljYWJsZShpbmxpbmVCb3gsIHsgfSk7Ci0gICAgICAgICAgICBsaW5lQm94LmFk
ZElubGluZUxldmVsQm94KFdURk1vdmUoaW5saW5lQm94KSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94RW5kKCkpIHsKLSAgICAg
ICAgICAgIC8vIEFkanVzdCB0aGUgbG9naWNhbCB3aWR0aCB3aGVuIHRoZSBpbmxpbmUgYm94IGNs
b3NlcyBvbiB0aGlzIGxpbmUuCi0gICAgICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBsaW5lQm94
LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBBU1NF
UlQoaW5saW5lQm94LmlzSW5saW5lQm94KCkpOwotICAgICAgICAgICAgLy8gSW5saW5lIGJveCBy
dW4gaXMgYmFzZWQgb24gbWFyZ2luIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94
LgotICAgICAgICAgICAgYXV0byBtYXJnaW5FbmQgPSBzdGQ6Om1heCgwX2x1LCBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkubWFyZ2luRW5kKCkpOwotICAgICAg
ICAgICAgYXV0byBpbmxpbmVCb3hMb2dpY2FsUmlnaHQgPSBsb2dpY2FsTGVmdCArIHJ1bi5sb2dp
Y2FsV2lkdGgoKSAtIG1hcmdpbkVuZDsKLSAgICAgICAgICAgIGlubGluZUJveC5zZXRMb2dpY2Fs
V2lkdGgoaW5saW5lQm94TG9naWNhbFJpZ2h0IC0gaW5saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwot
ICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZShpbmxpbmVC
b3gsIHsgfSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
cnVuLmlzVGV4dCgpIHx8IHJ1bi5pc1NvZnRMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8g
RklYTUU6IEFkanVzdCBub24tZW1wdHkgaW5saW5lIGJveCBoZWlnaHQgd2hlbiBnbHlwaHMgZnJv
bSB0aGUgbm9uLXByaW1hcnkgZm9udCBzdHJldGNoIHRoZSBib3guCi0gICAgICAgICAgICBsaW5l
Qm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSkuc2V0SGFz
Q29udGVudCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHJ1bi5pc0hhcmRMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgYXV0byBsaW5lQnJlYWtCb3gg
PSBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlTGluZUJyZWFrQm94KGxheW91dEJveCwg
bG9naWNhbExlZnQpOwotICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJv
eChsaW5lQnJlYWtCb3gpOwotICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlm
QXBwbGljYWJsZShsaW5lQnJlYWtCb3gsIHsgfSk7Ci0gICAgICAgICAgICBsaW5lQm94LmFkZElu
bGluZUxldmVsQm94KFdURk1vdmUobGluZUJyZWFrQm94KSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSkg
ewotICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveDo6Y3JlYXRlR2VuZXJpY0lubGluZUxldmVsQm94KGxheW91dEJveCwgbG9naWNhbExl
ZnQpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGxpbmVCb3guc2V0SGFzQ29udGVudChsaW5lSGFz
Q29udGVudCk7Ci0gICAgaWYgKHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5pc0VuYWJsZWQo
KSB8fCAhbGluZUhhc0NvbnRlbnQpIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBh
YmxlIHRvIGV4ZXJjaXNlIHRoZSBmYXN0IHBhdGggd2hlbiB0aGUgbGluZSBoYXMgbm8gY29udGVu
dCBhdCBhbGwsIGV2ZW4gaW4gbm9uLXN0YW5kYXJkcyBtb2RlIG9yIHdpdGggbGluZS1oZWlnaHQg
c2V0LgotICAgICAgICByb290SW5saW5lQm94LnNldExvZ2ljYWxUb3AobGluZUhhc0NvbnRlbnQg
PyBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQucm9vdElubGluZUJveExvZ2ljYWxUb3AoKSA6
IC1yb290SW5saW5lQm94LmJhc2VsaW5lKCkpOwotICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxI
ZWlnaHQobGluZUhhc0NvbnRlbnQgPyBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQubGluZUJv
eEhlaWdodCgpIDogSW5saW5lTGF5b3V0VW5pdCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29t
cHV0ZUxpbmVCb3hIZWlnaHRBbmRBbGlnbklubGluZUxldmVsQm94ZXNWZXJ0aWNhbGx5KGxpbmVC
b3gpOwotfQotCi12b2lkIExpbmVCb3hCdWlsZGVyOjpjb21wdXRlTGluZUJveEhlaWdodEFuZEFs
aWduSW5saW5lTGV2ZWxCb3hlc1ZlcnRpY2FsbHkoTGluZUJveCYgbGluZUJveCkKLXsKLSAgICBB
U1NFUlQobGluZUJveC5oYXNDb250ZW50KCkpOwotICAgIC8vIFRoaXMgZnVuY3Rpb24gKHBhcnRp
YWxseSkgaW1wbGVtZW50czoKLSAgICAvLyAyLjIuIExheW91dCBXaXRoaW4gTGluZSBCb3hlcwot
ICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtaW5saW5lLTMvI2xpbmUtbGF5b3V0Ci0g
ICAgLy8gMS4gQ29tcHV0ZSB0aGUgbGluZSBib3ggaGVpZ2h0IHVzaW5nIHRoZSBsYXlvdXQgYm91
bmRzIGdlb21ldHJ5LiBUaGlzIGhlaWdodCBjb21wdXRhdGlvbiBzdHJpY3RseSB1c2VzIGxheW91
dCBib3VuZHMgYW5kIG5vdCBub3JtYWwgaW5saW5lIGxldmVsIGJveCBnZW9tZXRyaWVzLgotICAg
IC8vIDIuIENvbXB1dGUgdGhlIGJhc2VsaW5lL2xvZ2ljYWwgdG9wIHBvc2l0aW9uIG9mIHRoZSBy
b290IGlubGluZSBib3guIEFsaWduZWQgYm94ZXMgcHVzaCB0aGUgcm9vdCBpbmxpbmUgYm94IGFy
b3VuZCBpbnNpZGUgdGhlIGxpbmUgYm94LgotICAgIC8vIDMuIEZpbmFsbHkgYWxpZ24gdGhlIGlu
bGluZSBsZXZlbCBib3hlcyB1c2luZyAobW9zdGx5KSBub3JtYWwgaW5saW5lIGxldmVsIGJveCBn
ZW9tZXRyaWVzLgotICAgIGF1dG8gcXVpcmtzID0gZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3Mo
KTsKLSAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGluZUJveC5yb290SW5saW5lQm94KCk7Ci0K
LSAgICBhdXRvIGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodCA9IFsmXSB7Ci0gICAgICAgIC8v
IExpbmUgYm94IGhlaWdodCBjb21wdXRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgbGF5b3V0IGJvdW5k
cyBvZiB0aGUgaW5saW5lIGJveGVzIGFuZCBub3QgdGhlaXIgbG9naWNhbCAoYXNjZW50L2Rlc2Nl
bnQpIGRpbWVuc2lvbnMuCi0gICAgICAgIHN0cnVjdCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7Ci0g
ICAgICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRvcCB7IDAgfTsKLSAgICAgICAgICAgIElubGlu
ZUxheW91dFVuaXQgYm90dG9tIHsgMCB9OwotICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPGNv
bnN0IExpbmVCb3g6OklubGluZUxldmVsQm94KiwgQWJzb2x1dGVUb3BBbmRCb3R0b20+IGlubGlu
ZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXA7Ci0KLSAgICAgICAgYXV0byBtaW5pbXVt
TG9naWNhbFRvcCA9IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsKLSAgICAgICAgYXV0
byBtYXhpbXVtTG9naWNhbEJvdHRvbSA9IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsK
LSAgICAgICAgaWYgKHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KHJvb3RJbmxp
bmVCb3gsIGxpbmVCb3gpKSB7Ci0gICAgICAgICAgICBtaW5pbXVtTG9naWNhbFRvcCA9IElubGlu
ZUxheW91dFVuaXQgeyB9OwotICAgICAgICAgICAgbWF4aW11bUxvZ2ljYWxCb3R0b20gPSByb290
SW5saW5lQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpOwotICAgICAgICAgICAgaW5saW5lTGV2
ZWxCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbU1hcC5hZGQoJnJvb3RJbmxpbmVCb3gsIEFic29sdXRl
VG9wQW5kQm90dG9tIHsgKm1pbmltdW1Mb2dpY2FsVG9wLCAqbWF4aW11bUxvZ2ljYWxCb3R0b20g
fSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZVRv
cEFuZEJvdHRvbU1hcC5hZGQoJnJvb3RJbmxpbmVCb3gsIEFic29sdXRlVG9wQW5kQm90dG9tIHsg
fSk7Ci0KLSAgICAgICAgVmVjdG9yPExpbmVCb3g6OklubGluZUxldmVsQm94Kj4gbGluZUJveFJl
bGF0aXZlSW5saW5lTGV2ZWxCb3hlczsKLSAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJv
eCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVsQm94ZXMoKSkgewotICAgICAgICAgICAgYXV0
byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBp
ZiAoaW5saW5lTGV2ZWxCb3guaGFzTGluZUJveFJlbGF0aXZlQWxpZ25tZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVzLmFwcGVuZCgmaW5saW5l
TGV2ZWxCb3gpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVMZXZlbEJveEZv
ckxheW91dEJveChsYXlvdXRCb3gucGFyZW50KCkpOwotICAgICAgICAgICAgLy8gTG9naWNhbCB0
b3AgaXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBpbmxpbmUgYm94J3MgbGF5b3V0IGJvdW5kcy4K
LSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGxvZ2ljYWwgdG9wIGlzIG5vdCB0aGUgZmlu
YWwgbG9naWNhbCB0b3Agb2YgdGhlIGlubGluZSBsZXZlbCBib3guCi0gICAgICAgICAgICAvLyBU
aGlzIGlzIHRoZSBsb2dpY2FsIHRvcCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGF5b3V0IGJvdW5k
cyBnZW9tZXRyeSB3aGljaCBtYXkgYmUgdmVyeSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5saW5lIGJv
eCdzIG5vcm1hbCBnZW9tZXRyeS4KLSAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGlu
ZUxheW91dFVuaXQgeyB9OwotICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0
aWNhbEFsaWduKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6
IHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxp
bmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0gICAgICAgICAgICAg
ICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBs
b2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6
IHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxp
bmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAvIDIgKyBwYXJlbnRJ
bmxpbmVCb3guc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDI7Ci0gICAgICAgICAg
ICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQg
LSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNl
bGluZU1pZGRsZTogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21Q
YXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpIC8g
MjsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxheW91dEJv
dW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246Okxlbmd0aDogewotICAgICAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gaW5saW5l
TGV2ZWxCb3guc3R5bGUoKTsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmUgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHN0eWxlLnZlcnRpY2FsQWxp
Z25MZW5ndGgoKSwgc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpICsgaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm91bmRzKCkuYXNjZW50OwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJl
bnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNhbFRvcE9mZnNldEZyb21Q
YXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDogewotICAgICAgICAgICAgICAg
IC8vIE5vdGUgdGhhdCB0ZXh0LXRvcCBhbGlnbnMgd2l0aCB0aGUgaW5saW5lIGJveCdzIGZvbnQg
bWV0cmljcyB0b3AgKGFzY2VudCkgYW5kIG5vdCB0aGUgbGF5b3V0IGJvdW5kcyB0b3AuCi0gICAg
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5h
c2NlbnQgLSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJv
dHRvbTogewotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0ZXh0LWJvdHRvbSBhbGlnbnMg
d2l0aCB0aGUgaW5saW5lIGJveCdzIGZvbnQgbWV0cmljcyBib3R0b20gKGRlc2NlbnQpIGFuZCBu
b3QgdGhlIGxheW91dCBib3VuZHMgYm90dG9tLgotICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50
SW5saW5lQm94TGF5b3V0Qm91bmRzID0gcGFyZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpOwot
ICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50SW5saW5lQm94TG9naWNhbEJvdHRvbSA9IHBhcmVu
dElubGluZUJveExheW91dEJvdW5kcy5oZWlnaHQoKSAtIHBhcmVudElubGluZUJveExheW91dEJv
dW5kcy5kZXNjZW50ICsgcGFyZW50SW5saW5lQm94LmRlc2NlbnQoKS52YWx1ZU9yKElubGluZUxh
eW91dFVuaXQoKSk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJv
eExvZ2ljYWxCb3R0b20gLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gcGFyZW50
SW5saW5lQm94QWJzb2x1dGVUb3BBbmRCb3R0b20gPSBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9w
QW5kQm90dG9tTWFwLmdldCgmcGFyZW50SW5saW5lQm94KTsKLSAgICAgICAgICAgIGF1dG8gYWJz
b2x1dGVMb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94QWJzb2x1dGVUb3BBbmRCb3R0b20udG9w
ICsgbG9naWNhbFRvcDsKLSAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVMb2dpY2FsQm90dG9tID0g
YWJzb2x1dGVMb2dpY2FsVG9wICsgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0
KCk7Ci0gICAgICAgICAgICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmFk
ZCgmaW5saW5lTGV2ZWxCb3gsIEFic29sdXRlVG9wQW5kQm90dG9tIHsgYWJzb2x1dGVMb2dpY2Fs
VG9wLCBhYnNvbHV0ZUxvZ2ljYWxCb3R0b20gfSk7Ci0gICAgICAgICAgICAvLyBTdHJldGNoIHRo
ZSBtaW4vbWF4IGFic29sdXRlIHZhbHVlcyBpZiBhcHBsaWNhYmxlLgotICAgICAgICAgICAgaWYg
KHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGlubGluZUxldmVsQm94LCBsaW5l
Qm94KSkgewotICAgICAgICAgICAgICAgIG1pbmltdW1Mb2dpY2FsVG9wID0gc3RkOjptaW4obWlu
aW11bUxvZ2ljYWxUb3AudmFsdWVPcihhYnNvbHV0ZUxvZ2ljYWxUb3ApLCBhYnNvbHV0ZUxvZ2lj
YWxUb3ApOwotICAgICAgICAgICAgICAgIG1heGltdW1Mb2dpY2FsQm90dG9tID0gc3RkOjptYXgo
bWF4aW11bUxvZ2ljYWxCb3R0b20udmFsdWVPcihhYnNvbHV0ZUxvZ2ljYWxCb3R0b20pLCBhYnNv
bHV0ZUxvZ2ljYWxCb3R0b20pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8v
IFRoZSBsaW5lIGJveCBoZWlnaHQgY29tcHV0YXRpb24gaXMgYXMgZm9sbG93czoKLSAgICAgICAg
Ly8gMS4gU3RyZXRjaCB0aGUgbGluZSBib3ggd2l0aCB0aGUgbm9uLWxpbmUtYm94IHJlbGF0aXZl
IGFsaWduZWQgaW5saW5lIGJveCBhYnNvbHV0ZSB0b3AgYW5kIGJvdHRvbSB2YWx1ZXMuCi0gICAg
ICAgIC8vIDIuIENoZWNrIGlmIHRoZSBsaW5lIGJveCByZWxhdGl2ZSBhbGlnbmVkIGlubGluZSBi
b3hlcyAodG9wLCBib3R0b20gZXRjKSBoYXZlIGVub3VnaCByb29tIGFuZCBzdHJldGNoIHRoZSBs
aW5lIGJveCBmdXJ0aGVyIGlmIG5lZWRlZC4KLSAgICAgICAgYXV0byBsaW5lQm94TG9naWNhbEhl
aWdodCA9IG1heGltdW1Mb2dpY2FsQm90dG9tLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCgpKSAt
IG1pbmltdW1Mb2dpY2FsVG9wLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKLSAgICAgICAg
Zm9yIChhdXRvKiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveCA6IGxpbmVCb3hSZWxhdGl2
ZUlubGluZUxldmVsQm94ZXMpIHsKLSAgICAgICAgICAgIGlmICghcXVpcmtzLmlubGluZUxldmVs
Qm94QWZmZWN0c0xpbmVCb3goKmxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94LCBsaW5lQm94
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGxpbmVCb3hMb2dpY2Fs
SGVpZ2h0ID0gc3RkOjptYXgobGluZUJveExvZ2ljYWxIZWlnaHQsIGxpbmVCb3hSZWxhdGl2ZUlu
bGluZUxldmVsQm94LT5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KGxpbmVCb3hMb2dpY2FsSGVpZ2h0KTsKLSAgICB9
OwotICAgIGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodCgpOwotCi0gICAgYXV0byBjb21wdXRl
Um9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24gPSBbJl0gewotICAgICAgICBIYXNoTWFwPGNv
bnN0IExpbmVCb3g6OklubGluZUxldmVsQm94KiwgSW5saW5lTGF5b3V0VW5pdD4gaW5saW5lTGV2
ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwOwotICAgICAgICBpbmxpbmVMZXZlbEJveEFi
c29sdXRlQmFzZWxpbmVPZmZzZXRNYXAuYWRkKCZyb290SW5saW5lQm94LCBJbmxpbmVMYXlvdXRV
bml0IHsgfSk7Ci0KLSAgICAgICAgYXV0byBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVC
b3hCYXNlbGluZSA9IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsKLSAgICAgICAgaWYg
KHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KHJvb3RJbmxpbmVCb3gsIGxpbmVC
b3gpKQotICAgICAgICAgICAgbWF4aW11bVRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxp
bmUgPSByb290SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsKLQotICAgICAgICBmb3Ig
KGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygp
KSB7Ci0gICAgICAgICAgICBhdXRvIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBJbmxpbmVMYXlv
dXRVbml0IHsgfTsKLSAgICAgICAgICAgIGlmICghaW5saW5lTGV2ZWxCb3guaGFzTGluZUJveFJl
bGF0aXZlQWxpZ25tZW50KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKLSAgICAgICAgICAgICAgICBhdXRvJiBwYXJlbnRJ
bmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5w
YXJlbnQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRC
YXNlbGluZSA9IElubGluZUxheW91dFVuaXQgeyB9OwotCi0gICAgICAgICAgICAgICAgc3dpdGNo
IChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOgotICAgICAgICAgICAgICAgICAgICBiYXNlbGluZU9m
ZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6IHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gKGlu
bGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpIC8gMiArIHBhcmVudElubGluZUJv
eC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gMik7Ci0gICAgICAgICAgICAgICAg
ICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZy
b21QYXJlbnRCYXNlbGluZSAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmVNaWRkbGU6IHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5l
TGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLyAyOwotICAgICAgICAgICAgICAgICAg
ICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGxvZ2ljYWxUb3BPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Okxlbmd0aDogewotICAgICAgICAgICAgICAgICAgICBh
dXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94LnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gdmVydGljYWxBbGlnbk9mZnNldCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoc3R5bGUudmVy
dGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHZl
cnRpY2FsQWxpZ25PZmZzZXQgKyBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAgICAgICAg
ICAgICAgICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGxvZ2ljYWxUb3BP
ZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOgotICAgICAgICAgICAgICAgICAgICBiYXNl
bGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgp
IC0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0
b206Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5l
ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtICpwYXJlbnRJbmxpbmVC
b3guZGVzY2VudCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lF
VCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYWJzb2x1dGVCYXNlbGluZU9mZnNldCA9IGlubGluZUxldmVsQm94QWJzb2x1
dGVCYXNlbGluZU9mZnNldE1hcC5nZXQoJnBhcmVudElubGluZUJveCkgKyBiYXNlbGluZU9mZnNl
dEZyb21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDogewotICAgICAgICAgICAgICAgICAgICBhYnNv
bHV0ZUJhc2VsaW5lT2Zmc2V0ID0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQg
LSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OkJvdHRvbTogewotICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUJhc2VsaW5l
T2Zmc2V0ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtIHJvb3RJbmxp
bmVCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlubGluZUxldmVsQm94QWJzb2x1dGVCYXNlbGluZU9mZnNldE1hcC5hZGQoJmlubGluZUxldmVs
Qm94LCBhYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0KTsKLSAgICAgICAgICAgIGF1dG8gYWZmZWN0c1Jv
b3RJbmxpbmVCb3hWZXJ0aWNhbFBvc2l0aW9uID0gcXVpcmtzLmlubGluZUxldmVsQm94QWZmZWN0
c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpOwotICAgICAgICAgICAgaWYgKGFmZmVj
dHNSb290SW5saW5lQm94VmVydGljYWxQb3NpdGlvbikgewotICAgICAgICAgICAgICAgIGF1dG8g
dG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IGFic29sdXRlQmFzZWxpbmVPZmZz
ZXQgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lKQotICAgICAg
ICAgICAgICAgICAgICBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9
IHN0ZDo6bWF4KCptYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSwgdG9w
T2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBpcyBxdWlyayBtb2RlIGFuZCB0aGUgcm9v
dCBpbmxpbmUgYm94IGhhcyBubyBjb250ZW50LiBUaGUgcm9vdCBpbmxpbmUgYm94J3MgYmFzZWxp
bmUgaXMgYW5jaG9yZWQgYXQgMC4KLSAgICAgICAgICAgICAgICAgICAgLy8gSG93ZXZlciBuZWdh
dGl2ZSBhc2NlbnQgKGUuZyBuZWdhdGl2ZSB0b3AgbWFyZ2luKSBjYW4gInB1c2giIHRoZSByb290
IGlubGluZSBib3ggdXB3YXJkcyBhbmQgaGF2ZSBhIG5lZ2F0aXZlIHZhbHVlLgotICAgICAgICAg
ICAgICAgICAgICBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IGlu
bGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudCA+PSAwCi0gICAgICAgICAgICAgICAg
ICAgICAgICA/IHN0ZDo6bWF4KDAuMGYsIHRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxp
bmUpCi0gICAgICAgICAgICAgICAgICAgICAgICA6IHRvcE9mZnNldEZyb21Sb290SW5saW5lQm94
QmFzZWxpbmU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGF1dG8gcm9vdElubGluZUJveExvZ2ljYWxUb3AgPSBtYXhpbXVtVG9wT2Zmc2V0RnJv
bVJvb3RJbmxpbmVCb3hCYXNlbGluZS52YWx1ZU9yKDAuZikgLSByb290SW5saW5lQm94LmJhc2Vs
aW5lKCk7Ci0gICAgICAgIHJvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRvcChyb290SW5saW5lQm94
TG9naWNhbFRvcCk7Ci0gICAgfTsKLSAgICBjb21wdXRlUm9vdElubGluZUJveFZlcnRpY2FsUG9z
aXRpb24oKTsKLQotICAgIGF1dG8gYWxpZ25JbmxpbmVMZXZlbEJveGVzID0gWyZdIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVs
Qm94ZXMoKSkgewotICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94
LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7Ci0gICAgICAg
ICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgICAg
IHN3aXRjaCAoaW5saW5lTGV2ZWxCb3gudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOgotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3Ag
PSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
Ok1pZGRsZTogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJl
bnRCYXNlbGluZSA9IChpbmxpbmVMZXZlbEJveC5sb2dpY2FsSGVpZ2h0KCkgLyAyICsgcGFyZW50
SW5saW5lQm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyKTsKLSAgICAgICAg
ICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2Fs
VG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZU1pZGRs
ZTogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNl
bGluZSA9IGlubGluZUxldmVsQm94LmxvZ2ljYWxIZWlnaHQoKSAvIDI7Ci0gICAgICAgICAgICAg
ICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gbG9naWNhbFRvcE9m
ZnNldEZyb21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TGVuZ3RoOiB7Ci0gICAgICAg
ICAgICAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVMZXZlbEJveC5zdHlsZSgpOwotICAgICAgICAg
ICAgICAgIGF1dG8gdmVydGljYWxBbGlnbk9mZnNldCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoc3R5
bGUudmVydGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0g
dmVydGljYWxBbGlnbk9mZnNldCArIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAg
ICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gbG9naWNh
bFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCAodGV4dCl0b3AvYm90dG9tIGFs
aWduIHRoZWlyIGxheW91dCBib3VuZHMuCi0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OlRleHRUb3A6Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0
b206Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sb2dpY2Fs
SGVpZ2h0KCkgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50IC0gaW5saW5l
TGV2ZWxCb3guYmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGxvZ2ljYWwgdG9wIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGlubGluZSBib3gu
Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5k
cygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAg
ICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBsb2dpY2FsIHRvcCBpcyBub3QgcmVsYXRpdmUgdG8g
dGhlIHBhcmVudCBpbmxpbmUgYm94LgotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBsaW5l
Qm94LmxvZ2ljYWxIZWlnaHQoKSAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmRlc2Nl
bnQgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVO
VEVEX1lFVCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbFRvcChsb2dpY2FsVG9wKTsKLSAgICAgICAg
fQotICAgIH07Ci0gICAgYWxpZ25JbmxpbmVMZXZlbEJveGVzKCk7Ci19Ci0KLUxpbmVCb3hCdWls
ZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OlNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdu
bWVudChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgcm9vdElubGluZUJveCkKLSAgICA6
IG1fcm9vdElubGluZUJveChyb290SW5saW5lQm94KQotewotICAgIGFkanVzdChyb290SW5saW5l
Qm94KTsKLX0KLQotYm9vbCBMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25t
ZW50OjpjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVs
Qm94JiByb290SW5saW5lQm94LCBjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgaW5saW5l
TGV2ZWxCb3gsIE9wdGlvbmFsPGNvbnN0IEJveEdlb21ldHJ5PiBpbmxpbmVMZXZlbEJveEdlb21l
dHJ5KQotewotICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0F0b21pY0lubGluZUxldmVsQm94KCkp
IHsKLSAgICAgICAgQVNTRVJUKGlubGluZUxldmVsQm94R2VvbWV0cnkpOwotICAgICAgICAvLyBC
YXNlbGluZSBhbGlnbmVkLCBub24tc3RyZXRjaHkgZGlyZWN0IGNoaWxkcmVuIGFyZSBjb25zaWRl
cmVkIHRvIGJlIHNpbXBsZSBmb3Igbm93LgotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxp
bmVMZXZlbEJveC5sYXlvdXRCb3goKTsKLSAgICAgICAgcmV0dXJuICZsYXlvdXRCb3gucGFyZW50
KCkgPT0gJnJvb3RJbmxpbmVCb3gubGF5b3V0Qm94KCkKLSAgICAgICAgICAgICYmIGxheW91dEJv
eC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZQotICAg
ICAgICAgICAgJiYgIWlubGluZUxldmVsQm94R2VvbWV0cnktPm1hcmdpbkJlZm9yZSgpCi0gICAg
ICAgICAgICAmJiAhaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQWZ0ZXIoKQotICAgICAg
ICAgICAgJiYgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQm94SGVpZ2h0KCkgPD0gcm9v
dElubGluZUJveC5iYXNlbGluZSgpOwotICAgIH0KLSAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNM
aW5lQnJlYWtCb3goKSkgewotICAgICAgICAvLyBCYXNlbGluZSBhbGlnbmVkLCBub24tc3RyZXRj
aHkgbGluZSBicmVha3MgZS5nLiA8ZGl2PjxzcGFuPjxicj48L3NwYW4+PC9kaXY+IGJ1dCBub3Qg
PGRpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMDBweDsiPjxicj48L3NwYW4+PC9kaXY+Lgot
ICAgICAgICByZXR1cm4gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNh
bEFsaWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUgJiYgaW5saW5lTGV2ZWxCb3guYmFz
ZWxpbmUoKSA8PSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7Ci0gICAgfQotICAgIGlmIChpbmxp
bmVMZXZlbEJveC5pc0lubGluZUJveCgpKSB7Ci0gICAgICAgIC8vIEJhc2VsaW5lIGFsaWduZWQs
IG5vbi1zdHJldGNoeSBpbmxpbmUgYm94ZXMgZS5nLiA8ZGl2PjxzcGFuPjwvc3Bhbj48L2Rpdj4g
YnV0IG5vdCA8ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwMHB4OyI+PC9zcGFuPjwvZGl2
Pi4KLSAgICAgICAgcmV0dXJuIGlubGluZUxldmVsQm94LmxheW91dEJveCgpLnN0eWxlKCkudmVy
dGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lICYmIGlubGluZUxldmVsQm94
LmxheW91dEJvdW5kcygpID09IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCk7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZl
cnRpY2FsQWxpZ25tZW50OjphbGlnbihMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgaW5saW5lTGV2
ZWxCb3gpCi17Ci0gICAgaWYgKGlubGluZUxldmVsQm94LmlzQXRvbWljSW5saW5lTGV2ZWxCb3go
KSB8fCBpbmxpbmVMZXZlbEJveC5pc0xpbmVCcmVha0JveCgpIHx8IGlubGluZUxldmVsQm94Lmlz
SW5saW5lQm94KCkpIHsKLSAgICAgICAgLy8gT25seSBiYXNlbGluZSBhbGlnbm1lbnQgZm9yIG5v
dy4KLSAgICAgICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbFRvcChtX3Jvb3RJbmxpbmVCb3gu
YmFzZWxpbmUoKSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCkpOwotICAgICAgICBhZGp1c3Qo
aW5saW5lTGV2ZWxCb3gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVF9OT1Rf
SU1QTEVNRU5URURfWUVUKCk7Ci19Ci0KLXZvaWQgTGluZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRW
ZXJ0aWNhbEFsaWdubWVudDo6YWRqdXN0KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94JiBp
bmxpbmVMZXZlbEJveCkKLXsKLSAgICBhdXRvIGxheW91dEJvdW5kc0xvZ2ljYWxUb3AgPSBtX3Jv
b3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gaW5saW5lTGV2ZWxCb3gubGF5b3V0
Qm91bmRzKCkuYXNjZW50OwotICAgIG1fbGluZUJveExvZ2ljYWxUb3AgPSBzdGQ6Om1pbihtX2xp
bmVCb3hMb2dpY2FsVG9wLCBsYXlvdXRCb3VuZHNMb2dpY2FsVG9wKTsKLSAgICBtX2xpbmVCb3hM
b2dpY2FsQm90dG9tID0gc3RkOjptYXgobV9saW5lQm94TG9naWNhbEJvdHRvbSwgbGF5b3V0Qm91
bmRzTG9naWNhbFRvcCArIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpKTsK
LSAgICBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wID0gc3RkOjptYXgobV9yb290SW5saW5lQm94
TG9naWNhbFRvcCwgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbV9yb290
SW5saW5lQm94LmJhc2VsaW5lKCkpOwotfQotCi1MaW5lQm94IElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6bGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpM
aW5lQ29udGVudCYgbGluZUNvbnRlbnQpCi17Ci0gICAgcmV0dXJuIExpbmVCb3hCdWlsZGVyKGZv
cm1hdHRpbmdDb250ZXh0KCkpLmJ1aWxkKGxpbmVDb250ZW50KTsKLX0KLQotSW5saW5lTGF5b3V0
VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmxvZ2ljYWxUb3BGb3JOZXh0
TGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBJbmxpbmVM
YXlvdXRVbml0IHByZXZpb3VzTGluZUxvZ2ljYWxCb3R0b20sIGNvbnN0IEZsb2F0aW5nQ29udGV4
dCYgZmxvYXRpbmdDb250ZXh0KSBjb25zdAotewotICAgIC8vIE5vcm1hbGx5IHRoZSBuZXh0IGxp
bmUncyBsb2dpY2FsIHRvcCBpcyB0aGUgcHJldmlvdXMgbGluZSdzIGxvZ2ljYWwgYm90dG9tLCBi
dXQgd2hlbiB0aGUgbGluZSBlbmRzCi0gICAgLy8gd2l0aCB0aGUgY2xlYXIgcHJvcGVydHkgc2V0
LCB0aGUgbmV4dCBsaW5lIG5lZWRzIHRvIGNsZWFyIHRoZSBleGlzdGluZyBmbG9hdHMuCi0gICAg
aWYgKGxpbmVDb250ZW50LnJ1bnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcHJldmlvdXNM
aW5lTG9naWNhbEJvdHRvbTsKLSAgICBhdXRvJiBsYXN0UnVuTGF5b3V0Qm94ID0gbGluZUNvbnRl
bnQucnVucy5sYXN0KCkubGF5b3V0Qm94KCk7IAotICAgIGlmIChsYXN0UnVuTGF5b3V0Qm94LnN0
eWxlKCkuY2xlYXIoKSA9PSBDbGVhcjo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIHByZXZpb3VzTGlu
ZUxvZ2ljYWxCb3R0b207Ci0gICAgYXV0byBwb3NpdGlvbldpdGhDbGVhcmFuY2UgPSBmbG9hdGlu
Z0NvbnRleHQudmVydGljYWxQb3NpdGlvbldpdGhDbGVhcmFuY2UobGFzdFJ1bkxheW91dEJveCk7
Ci0gICAgaWYgKCFwb3NpdGlvbldpdGhDbGVhcmFuY2UpCi0gICAgICAgIHJldHVybiBwcmV2aW91
c0xpbmVMb2dpY2FsQm90dG9tOwotICAgIHJldHVybiBzdGQ6Om1heChwcmV2aW91c0xpbmVMb2dp
Y2FsQm90dG9tLCBJbmxpbmVMYXlvdXRVbml0KHBvc2l0aW9uV2l0aENsZWFyYW5jZS0+cG9zaXRp
b24pKTsKLX0KLQotQ29udGVudFdpZHRoQW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6aW5saW5lQmxvY2tDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBm
b3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGZvcm1hdHRpbmdDb250ZXh0Um9v
dC5pc0luRmxvdygpKTsKLQotICAgIC8vIDEwLjMuMTAgJ0lubGluZS1ibG9jaycsIHJlcGxhY2Vk
IGVsZW1lbnRzIGluIG5vcm1hbCBmbG93Ci0KLSAgICAvLyBFeGFjdGx5IGFzIGlubGluZSByZXBs
YWNlZCBlbGVtZW50cy4KLSAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHRSb290LmlzUmVwbGFjZWRC
b3goKSkKLSAgICAgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2lu
KGRvd25jYXN0PFJlcGxhY2VkQm94Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpLCBob3Jpem9udGFs
Q29uc3RyYWludHMsIHsgfSwgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOwotCi0gICAgLy8g
MTAuMy45ICdJbmxpbmUtYmxvY2snLCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZs
b3cKLQotICAgIC8vIElmICd3aWR0aCcgaXMgJ2F1dG8nLCB0aGUgdXNlZCB2YWx1ZSBpcyB0aGUg
c2hyaW5rLXRvLWZpdCB3aWR0aCBhcyBmb3IgZmxvYXRpbmcgZWxlbWVudHMuCi0gICAgLy8gQSBj
b21wdXRlZCB2YWx1ZSBvZiAnYXV0bycgZm9yICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdo
dCcgYmVjb21lcyBhIHVzZWQgdmFsdWUgb2YgJzAnLgotICAgIC8vICMxCi0gICAgYXV0byB3aWR0
aCA9IGNvbXB1dGVkVmFsdWUoZm9ybWF0dGluZ0NvbnRleHRSb290LnN0eWxlKCkubG9naWNhbFdp
ZHRoKCksIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOwotICAgIGlmICghd2lk
dGgpCi0gICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChmb3JtYXR0aW5nQ29udGV4dFJv
b3QsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOwotCi0gICAgLy8gIzIKLSAg
ICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6
b250YWxNYXJnaW4oZm9ybWF0dGluZ0NvbnRleHRSb290LCBob3Jpem9udGFsQ29uc3RyYWludHMp
OwotCi0gICAgcmV0dXJuIENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7ICp3aWR0aCwgeyBjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwX2x1KSwgY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLmVuZC52YWx1ZU9yKDBfbHUpIH0gfTsKLX0KLQotQ29udGVudEhlaWdodEFuZE1hcmdp
biBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZUJsb2NrQ29udGVudEhl
aWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIEFTU0VSVChsYXlv
dXRCb3guaXNJbkZsb3coKSk7Ci0KLSAgICAvLyAxMC42LjIgSW5saW5lIHJlcGxhY2VkIGVsZW1l
bnRzLCBibG9jay1sZXZlbCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdywgJ2lubGlu
ZS1ibG9jaycgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJl
cGxhY2VkIGVsZW1lbnRzCi0gICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAg
ICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNhc3Q8
UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCBvdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMpOwotCi0gICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2Vz
Ci0gICAgLy8gLSAnSW5saW5lLWJsb2NrJywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzLgotICAgIHJl
dHVybiBjb21wbGljYXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBv
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotfQotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWJlNjVkYWQ1Y2M1ZjU2YjI5ZWIwNzAzZTZj
ZGM5NDM5MGFjMmE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklubGluZUZv
cm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKLQotI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1JbmxpbmVMYXlvdXRVbml0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpRdWlya3M6OmluaXRpYWxMaW5lSGVpZ2h0KCkgY29uc3QKLXsKLSAgICAvLyBO
ZWdhdGl2ZSBsaW5lSGVpZ2h0IHZhbHVlIG1lYW5zIHRoZSBsaW5lLWhlaWdodCBpcyBub3Qgc2V0
Ci0gICAgYXV0byYgcm9vdCA9IGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpOwotICAgIGlmIChs
YXlvdXRTdGF0ZSgpLmluU3RhbmRhcmRzTW9kZSgpIHx8ICFyb290LnN0eWxlKCkubGluZUhlaWdo
dCgpLmlzTmVnYXRpdmUoKSkKLSAgICAgICAgcmV0dXJuIHJvb3Quc3R5bGUoKS5jb21wdXRlZExp
bmVIZWlnaHQoKTsKLSAgICByZXR1cm4gcm9vdC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuZmxvYXRI
ZWlnaHQoKTsKLX0KLQotYm9vbCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjppbmxp
bmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94JiBp
bmxpbmVMZXZlbEJveCwgY29uc3QgTGluZUJveCYgbGluZUJveCkgY29uc3QKLXsKLSAgICBpZiAo
aW5saW5lTGV2ZWxCb3guaXNMaW5lQnJlYWtCb3goKSkgewotICAgICAgICBpZiAobGF5b3V0U3Rh
dGUoKS5pblN0YW5kYXJkc01vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAvLyBJbiBxdWlya3MgbW9kZSBsaW5lYnJlYWsgYm94ZXMgKDxicj4pIHN0b3AgYWZmZWN0aW5n
IHRoZSBsaW5lIGJveCB3aGVuIChhc3N1bWUgPGJyPiBpcyBuZXN0ZWQgZS5nLiA8c3BhbiBzdHls
ZT0iZm9udC1zaXplOiAxMDBweCI+PGJyPjwvc3Bhbj4pCi0gICAgICAgIC8vIDEuIHRoZSByb290
IGlubGluZSBib3ggaGFzIGNvbnRlbnQgPGRpdj5jb250ZW50PGJyPi9kaXY+Ci0gICAgICAgIC8v
IDIuIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGF0b21pYyBpbmxpbmUgbGV2ZWwgYm94IG9uIHRoZSBs
aW5lIGUuZyA8ZGl2PjxpbWc+PGJyPjwvZGl2PiBvciA8ZGl2PjxzcGFuPjxpbWc+PC9zcGFuPjxi
cj48L2Rpdj4KLSAgICAgICAgLy8gMy4gdGhlcmUncyBhdCBsZWFzdCBvbmUgaW5saW5lIGJveCB3
aXRoIGNvbnRlbnQgZS5nLiA8ZGl2PjxzcGFuPmNvbnRlbnQ8L3NwYW4+PGJyPjwvZGl2PgotICAg
ICAgICBpZiAobGluZUJveC5yb290SW5saW5lQm94KCkuaGFzQ29udGVudCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobGluZUJveC5oYXNBdG9taWNJbmxpbmVMZXZl
bEJveCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBBdCB0aGlzIHBv
aW50IHdlIGVpdGhlciBoYXZlIG9ubHkgdGhlIDxicj4gb24gdGhlIGxpbmUgb3IgaW5saW5lIGJv
eGVzIHdpdGggb3Igd2l0aG91dCBjb250ZW50LgotICAgICAgICBhdXRvJiBpbmxpbmVMZXZlbEJv
eGVzID0gbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpOwotICAgICAgICBBU1NFUlQo
IWlubGluZUxldmVsQm94ZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgaWYgKGlubGluZUxldmVsQm94
ZXMuc2l6ZSgpID09IDEpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZm9yIChh
dXRvJiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVsQm94ZXMoKSkg
ewotICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBlbXB0eSBpbmxpbmUgYm94ZXMgZS5nLiA8ZGl2
PjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PGJyPjwvZGl2PgotICAgICAgICAgICAgaWYgKGlu
bGluZUxldmVsQm94LmlzSW5saW5lQm94KCkgJiYgaW5saW5lTGV2ZWxCb3guaGFzQ29udGVudCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGlubGluZUxldmVsQm94LmlzSW5saW5lQm94KCkpIHsK
LSAgICAgICAgLy8gSW5saW5lIGJveGVzIChlLmcuIHJvb3QgaW5saW5lIGJveCBvciA8c3Bhbj4p
IGFmZmVjdHMgbGluZSBib3hlcyBlaXRoZXIgdGhyb3VnaCB0aGUgc3RydXQgb3IgYWN0dWFsIGNv
bnRlbnQuCi0gICAgICAgIGF1dG8gaW5saW5lQm94SGFzSW1hZ2luYXJ5U3RydXQgPSBsYXlvdXRT
dGF0ZSgpLmluU3RhbmRhcmRzTW9kZSgpOwotICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3guaGFz
Q29udGVudCgpIHx8IGlubGluZUJveEhhc0ltYWdpbmFyeVN0cnV0KQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc1Jvb3RJbmxpbmVCb3goKSkg
ewotICAgICAgICAgICAgYXV0byBzaG91bGRSb290SW5saW5lQm94V2l0aE5vQ29udGVudFN0cmV0
Y2hMaW5lQm94ID0gWyZdIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3gubGF5
b3V0Qm94KCkuc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHJvb3QgaW5saW5l
IGJveCB3aXRoIG5vbi1pbml0aWFsIGxpbmUgaGVpZ2h0IHZhbHVlIHN0cmV0Y2hlcyB0aGUgbGlu
ZSBib3ggZXZlbiB3aGVuIHJvb3QgaGFzIG5vIGNvbnRlbnQKLSAgICAgICAgICAgICAgICAvLyBi
dXQgdGhlcmUncyBhdCBsZWFzdCBvbmUgaW5saW5lIGJveCB3aXRoIGNvbnRlbnQuCi0gICAgICAg
ICAgICAgICAgLy8gZS5nLiA8ZGl2IHN0eWxlPSJsaW5lLWhlaWdodDogMTAwcHg7Ij48c3Bhbj5j
b250ZW50PC9zcGFuPjwvZGl2PgotICAgICAgICAgICAgICAgIGlmICghbGluZUJveC5oYXNJbmxp
bmVCb3goKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94Lm5vblJvb3RJbmxpbmVMZXZl
bEJveGVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVMZXZlbEJveC5pc0lu
bGluZUJveCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChpbmxpbmVMZXZlbEJveC5oYXNDb250ZW50KCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHJldHVybiBzaG91
bGRSb290SW5saW5lQm94V2l0aE5vQ29udGVudFN0cmV0Y2hMaW5lQm94KCk7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gTm9uLXJvb3QgaW5saW5lIGJveGVzIChlLmcuIDxzcGFuPikuCi0gICAgICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKSk7Ci0gICAgICAgIGlmIChib3hHZW9tZXRyeS5ob3Jp
em9udGFsQm9yZGVyKCkgfHwgYm94R2VvbWV0cnkuaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1ZU9y
KDBfbHUpKSB7Ci0gICAgICAgICAgICAvLyBIb3Jpem9udGFsIGJvcmRlciBhbmQgcGFkZGluZyBt
YWtlIHRoZSBpbmxpbmUgYm94IHN0cmV0Y2ggdGhlIGxpbmUgKGUuZy4gPHNwYW4gc3R5bGU9InBh
ZGRpbmc6IDEwcHg7Ij48L3NwYW4+KS4KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGlubGluZUxldmVsQm94
LmlzQXRvbWljSW5saW5lTGV2ZWxCb3goKSkgewotICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgLy8gV2hpbGUgaW4gcHJhY3RpY2Ugd2hlbiB0aGUgbmVnYXRpdmUgdmVydGljYWwgbWFyZ2lu
IG1ha2VzIHRoZSBsYXlvdXQgYm91bmRzIGVtcHR5IChlLmc6IGhlaWdodDogMTAwcHg7IG1hcmdp
bi10b3A6IC0xMDBweDspLCBhbmQgdGhpcyBpbmxpbmUKLSAgICAgICAgLy8gbGV2ZWwgYm94IGNv
bnRyaWJ1dGVzIDBweCB0byB0aGUgbGluZSBib3ggaGVpZ2h0LCBpdCBzdGlsbCBuZWVkcyB0byBi
ZSB0YWtlbiBpbnRvIGFjY291bnQgd2hpbGUgY29tcHV0aW5nIGxpbmUgYm94IGdlb21ldHJpZXMu
Ci0gICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRy
eUZvckJveChpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKSk7Ci0gICAgICAgIHJldHVybiBib3hH
ZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSB8fCBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OlF1aXJrczo6aGFzU29mdFdyYXBPcHBvcnR1bml0eUF0SW1hZ2UoKSBjb25zdAotewotICAgIHJl
dHVybiAhZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCkuaXNUYWJsZUNlbGwoKTsKLX0KLQotfQot
fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2Vv
bWV0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4ZjQ3NTFmNTk1NzMwZDJhMjVmZTgwOTc0YWNlMzRkYjE3
YmY4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEs
NzQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCisKKyNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJGb3JtYXR0
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdRdWlya3MuaCIKKyNpbmNs
dWRlICJJbmxpbmVMaW5lQm94LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCisjaW5jbHVkZSAi
TGF5b3V0Q29udGFpbmVyQm94LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIKKyNp
bmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIExheW91dCB7CisKK2NsYXNzIExpbmVCb3hCdWlsZGVyIHsKK3B1YmxpYzoKKyAgICBMaW5l
Qm94QnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOworICAgIExpbmVCb3gg
YnVpbGQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50Jik7CisKK3ByaXZhdGU6CisgICAg
c3RydWN0IFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudCB7CisgICAgICAgIFNpbXBsaWZpZWRW
ZXJ0aWNhbEFsaWdubWVudChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgcm9vdElubGlu
ZUJveCk7CisKKyAgICAgICAgc3RhdGljIGJvb2wgY2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChj
b25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgcm9vdElubGluZUJveCwgY29uc3QgTGluZUJv
eDo6SW5saW5lTGV2ZWxCb3gmLCBPcHRpb25hbDxjb25zdCBCb3hHZW9tZXRyeT4gaW5saW5lTGV2
ZWxCb3hHZW9tZXRyeSk7CisKKyAgICAgICAgdm9pZCBhbGlnbihMaW5lQm94OjpJbmxpbmVMZXZl
bEJveCYpOworCisgICAgICAgIElubGluZUxheW91dFVuaXQgcm9vdElubGluZUJveExvZ2ljYWxU
b3AoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wOyB9CisgICAgICAg
IElubGluZUxheW91dFVuaXQgbGluZUJveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJv
eExvZ2ljYWxCb3R0b20gLSBtX2xpbmVCb3hMb2dpY2FsVG9wOyB9CisKKyAgICAgICAgdm9pZCBz
ZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2lzRW5hYmxlZCA9IGVuYWJsZWQ7IH0KKyAgICAg
ICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRW5hYmxlZDsgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgdm9pZCBhZGp1c3QoY29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxC
b3gmKTsKKworICAgICAgICBjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgbV9yb290SW5s
aW5lQm94OworICAgICAgICBib29sIG1faXNFbmFibGVkIHsgdHJ1ZSB9OworICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IG1fbGluZUJveExvZ2ljYWxUb3AgeyAwIH07CisgICAgICAgIElubGluZUxh
eW91dFVuaXQgbV9saW5lQm94TG9naWNhbEJvdHRvbSB7IDAgfTsKKyAgICAgICAgSW5saW5lTGF5
b3V0VW5pdCBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wIHsgMCB9OworICAgIH07CisKKyAgICB2
b2lkIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goTGluZUJveDo6SW5saW5lTGV2ZWxC
b3gmKSBjb25zdDsKKyAgICB2b2lkIGNvbnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhM
aW5lQm94JiwgY29uc3QgTGluZTo6UnVuTGlzdCYpOworICAgIHZvaWQgY29tcHV0ZUxpbmVCb3hI
ZWlnaHRBbmRBbGlnbklubGluZUxldmVsQm94ZXNWZXJ0aWNhbGx5KExpbmVCb3gmKTsKKworICAg
IGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KKyAgICBjb25zdCBCb3gmIHJv
b3RCb3goKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKTsgfQorICAg
IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250
ZXh0KCkubGF5b3V0U3RhdGUoKTsgfQorCisgICAgYm9vbCBpc1Jvb3RMYXlvdXRCb3goY29uc3Qg
Q29udGFpbmVyQm94JiBjb250YWluZXJCb3gpIGNvbnN0IHsgcmV0dXJuICZjb250YWluZXJCb3gg
PT0gJnJvb3RCb3goKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworfTsKKworc3RydWN0IEhhbmdpbmdU
cmFpbGluZ1doaXRlc3BhY2VDb250ZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHJlc2V0KCk7CisK
KyAgICBJbmxpbmVMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIGJvb2wgaXNDb25kaXRpb25hbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb25kaXRpb25hbDsg
fQorCisgICAgdm9pZCBzZXRJc0NvbmRpdGlvbmFsKCkgeyBtX2lzQ29uZGl0aW9uYWwgPSB0cnVl
OyB9CisgICAgdm9pZCBleHBhbmQoSW5saW5lTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3dpZHRoICs9
IHdpZHRoOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzQ29uZGl0aW9uYWwgeyBmYWxzZSB9
OworICAgIElubGluZUxheW91dFVuaXQgbV93aWR0aCB7IDAgfTsKK307CisKK3ZvaWQgSGFuZ2lu
Z1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRlbnQ6OnJlc2V0KCkKK3sKKyAgICBtX2lzQ29uZGl0aW9u
YWwgPSBmYWxzZTsKKyAgICBtX3dpZHRoID0gIDA7Cit9CisKK3N0YXRpYyBIYW5naW5nVHJhaWxp
bmdXaGl0ZXNwYWNlQ29udGVudCBjb2xsZWN0SGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRl
bnQoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucywgYm9vbCBpc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQpCit7CisgICAgYXV0byBoYW5naW5nQ29udGVudCA9IEhhbmdpbmdUcmFpbGluZ1doaXRl
c3BhY2VDb250ZW50IHsgfTsKKyAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQor
ICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7CisgICAgZm9yIChhdXRv
JiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKHJ1bnMpKSB7CisgICAgICAgIGlmIChydW4u
aXNJbmxpbmVCb3hTdGFydCgpIHx8IHJ1bi5pc0lubGluZUJveEVuZCgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAg
aGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFydW4uaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHByZXNlcnZl
ZCBvciBodW5nIHdoaXRlc3BhY2UuCisgICAgICAgIGlmIChydW4uc3R5bGUoKS53aGl0ZVNwYWNl
KCkgIT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAv
LyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBjb25kaXRpb25hbGx5IGhhbmdpbmcgdHJhaWxp
bmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaGFuZ2luZ0NvbnRlbnQuZXhwYW5kKHJ1bi50cmFpbGlu
Z1doaXRlc3BhY2VXaWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGhhbmdpbmdDb250ZW50Owor
fQorCitzdGF0aWMgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gaG9yaXpvbnRhbEFsaWdubWVu
dE9mZnNldChjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBUZXh0QWxpZ25Nb2RlIHRleHRBbGln
biwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGNv
bnRlbnRMb2dpY2FsV2lkdGgsIGJvb2wgaXNMYXN0TGluZSkKK3sKKyAgICBhdXRvIGF2YWlsYWJs
ZVdpZHRoID0gbGluZUxvZ2ljYWxXaWR0aCAtIGNvbnRlbnRMb2dpY2FsV2lkdGg7CisgICAgYXV0
byBoYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudCA9IGNvbGxlY3RIYW5naW5nVHJhaWxp
bmdXaGl0ZXNwYWNlQ29udGVudChydW5zLCBpc0xhc3RMaW5lKTsKKyAgICBhdmFpbGFibGVXaWR0
aCArPSBoYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudC53aWR0aCgpOworICAgIGlmIChh
dmFpbGFibGVXaWR0aCA8PSAwKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBjb21w
dXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0geworICAgICAgICBpZiAodGV4dEFsaWduICE9
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisgICAgICAgICAgICByZXR1cm4gdGV4dEFsaWduOwor
ICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVj
aWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKKyAgICAgICAgLy8gaW4gb3JkZXIg
dG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQg
YnkgdGV4dC1hbGlnbi1sYXN0LAorICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZv
cmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgorICAg
ICAgICBpZiAoaXNMYXN0TGluZSB8fCAoIXJ1bnMuaXNFbXB0eSgpICYmIHJ1bnMubGFzdCgpLmlz
TGluZUJyZWFrKCkpKQorICAgICAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6OlN0YXJ0Owor
ICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKKyAgICB9OworCisgICAgc3dp
dGNoIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQoKSkgeworICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6TGVmdDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OlJpZ2h0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6
CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgIHJldHVybiBhdmFpbGFibGVX
aWR0aDsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKKyAgICBjYXNlIFRleHRBbGln
bk1vZGU6OldlYktpdENlbnRlcjoKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVdpZHRoIC8gMjsK
KyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgICAgIC8vIFRleHRBbGlnbk1v
ZGU6Okp1c3RpZnkgaXMgYSBydW4gYWxpZ25tZW50IChhbmQgd2Ugb25seSBkbyBpbmxpbmUgYm94
IGFsaWdubWVudCBoZXJlKQorICAgICAgICByZXR1cm4geyB9OworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK0xp
bmVCb3hCdWlsZGVyOjpMaW5lQm94QnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250
ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQoreworfQorCitMaW5lQm94IExpbmVCb3hCdWls
ZGVyOjpidWlsZChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50KQor
eworICAgIGF1dG8mIHJ1bnMgPSBsaW5lQ29udGVudC5ydW5zOworICAgIGF1dG8gbGluZUxvZ2lj
YWxXaWR0aCA9IGxpbmVDb250ZW50LmxpbmVMb2dpY2FsV2lkdGg7CisgICAgYXV0byBjb250ZW50
TG9naWNhbFdpZHRoID0gbGluZUNvbnRlbnQuY29udGVudExvZ2ljYWxXaWR0aDsKKyAgICBhdXRv
IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQgPSBMYXlvdXQ6Omhvcml6b250YWxBbGlnbm1lbnRP
ZmZzZXQocnVucywgcm9vdEJveCgpLnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmVMb2dpY2FsV2lk
dGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGxpbmVDb250ZW50LmlzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudCk7CisgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7IHJvb3RCb3goKSwgbGluZUNv
bnRlbnQubG9naWNhbFRvcExlZnQsIGxpbmVMb2dpY2FsV2lkdGgsIGhvcml6b250YWxBbGlnbm1l
bnRPZmZzZXQudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSksIGNvbnRlbnRMb2dpY2FsV2lk
dGgsIGxpbmVDb250ZW50Lm5vblNwYW5uaW5nSW5saW5lTGV2ZWxCb3hDb3VudCB9OworICAgIGNv
bnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhsaW5lQm94LCBydW5zKTsKKyAgICByZXR1
cm4gbGluZUJveDsKK30KKwordm9pZCBMaW5lQm94QnVpbGRlcjo6c2V0VmVydGljYWxHZW9tZXRy
eUZvcklubGluZUJveChMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgaW5saW5lTGV2ZWxCb3gpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlubGluZUxldmVsQm94LmlzSW5saW5lQm94KCkgfHwgaW5saW5l
TGV2ZWxCb3guaXNMaW5lQnJlYWtCb3goKSk7CisgICAgYXV0byYgZm9udE1ldHJpY3MgPSBpbmxp
bmVMZXZlbEJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAgSW5saW5lTGF5b3V0VW5pdCBh
c2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKKyAgICBJbmxpbmVMYXlvdXRVbml0IGRlc2Nl
bnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7CisgICAgYXV0byBsb2dpY2FsSGVpZ2h0ID0gYXNj
ZW50ICsgZGVzY2VudDsKKyAgICAvLyBXZSBuZWVkIGZsb29yL2NlaWwgdG8gbWF0Y2ggbGVnYWN5
IGxheW91dCBpbnRlZ3JhbCBwb3NpdGlvbmluZy4KKyAgICBpbmxpbmVMZXZlbEJveC5zZXRCYXNl
bGluZShmbG9vcmYoYXNjZW50KSk7CisgICAgaW5saW5lTGV2ZWxCb3guc2V0RGVzY2VudChjZWls
KGRlc2NlbnQpKTsKKyAgICBpbmxpbmVMZXZlbEJveC5zZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxI
ZWlnaHQpOworCisgICAgLy8gRklYTUU6IEFkanVzdCBsYXlvdXQgYm91bmRzIHdpdGggZmFsbGJh
Y2sgZm9udCB3aGVuIGFwcGxpY2FibGUuCisgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVMZXZlbEJv
eC5sYXlvdXRCb3goKS5zdHlsZSgpOworICAgIGF1dG8gbGluZUhlaWdodCA9IHN0eWxlLmxpbmVI
ZWlnaHQoKTsKKyAgICBpZiAobGluZUhlaWdodC5pc05lZ2F0aXZlKCkpIHsKKyAgICAgICAgLy8g
SWYgbGluZS1oZWlnaHQgY29tcHV0ZXMgdG8gbm9ybWFsIGFuZCBlaXRoZXIgdGV4dC1lZGdlIGlz
IGxlYWRpbmcgb3IgdGhpcyBpcyB0aGUgcm9vdCBpbmxpbmUgYm94LAorICAgICAgICAvLyB0aGUg
Zm9udOKAmXMgbGluZSBnYXAgbWV0cmljIG1heSBhbHNvIGJlIGluY29ycG9yYXRlZCBpbnRvIEEg
YW5kIEQgYnkgYWRkaW5nIGhhbGYgdG8gZWFjaCBzaWRlIGFzIGhhbGYtbGVhZGluZy4KKyAgICAg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1pbmxpbmUtMy8jaW5saW5lLWhlaWdodAor
ICAgICAgICAvLyBTaW5jZSB0ZXh0LWVkZ2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQgYW5kIHRoZSBp
bml0aWFsIHZhbHVlIGlzIGxlYWRpbmcsIHdlIHNob3VsZCBqdXN0IGFwcGx5IGl0IHRvCisgICAg
ICAgIC8vIGFsbCBpbmxpbmUgYm94ZXMuCisgICAgICAgIGF1dG8gaGFsZkxpbmVHYXAgPSAoZm9u
dE1ldHJpY3MubGluZVNwYWNpbmcoKSAtIGxvZ2ljYWxIZWlnaHQpIC8gMjsKKyAgICAgICAgYXNj
ZW50ICs9IGhhbGZMaW5lR2FwOworICAgICAgICBkZXNjZW50ICs9IGhhbGZMaW5lR2FwOworICAg
IH0gZWxzZSB7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbGluZUhlaWdodCA9IHN0eWxlLmNv
bXB1dGVkTGluZUhlaWdodCgpOworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGhhbGZMZWFkaW5n
ID0gKGxpbmVIZWlnaHQgLSAoYXNjZW50ICsgZGVzY2VudCkpIC8gMjsKKyAgICAgICAgYXNjZW50
ICs9IGhhbGZMZWFkaW5nOworICAgICAgICBkZXNjZW50ICs9IGhhbGZMZWFkaW5nOworICAgIH0K
KyAgICAvLyBXZSBuZWVkIGZsb29yL2NlaWwgdG8gbWF0Y2ggbGVnYWN5IGxheW91dCBpbnRlZ3Jh
bCBwb3NpdGlvbmluZy4KKyAgICBpbmxpbmVMZXZlbEJveC5zZXRMYXlvdXRCb3VuZHMoTGluZUJv
eDo6SW5saW5lTGV2ZWxCb3g6OkxheW91dEJvdW5kcyB7IGZsb29yZihhc2NlbnQpLCBjZWlsKGRl
c2NlbnQpIH0pOworfQorCit2b2lkIExpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RBbmRBbGlnbklu
bGluZUxldmVsQm94ZXMoTGluZUJveCYgbGluZUJveCwgY29uc3QgTGluZTo6UnVuTGlzdCYgcnVu
cykKK3sKKyAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGluZUJveC5yb290SW5saW5lQm94KCk7
CisgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChyb290SW5saW5lQm94KTsKKwor
ICAgIGF1dG8gc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50ID0gU2ltcGxpZmllZFZlcnRpY2Fs
QWxpZ25tZW50IHsgcm9vdElubGluZUJveCB9OworICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBwYXRo
IHN1cHBvcnQgZm9yIGxpbmUtaGVpZ2h0IGNvbnRlbnQuCisgICAgc2ltcGxpZmllZFZlcnRpY2Fs
QWxpZ25tZW50LnNldEVuYWJsZWQobGF5b3V0U3RhdGUoKS5pblN0YW5kYXJkc01vZGUoKSAmJiBy
b290Qm94KCkuc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpKTsKKworICAgIGF1dG8g
c2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZSA9IFsmXShhdXRvJiBpbmxpbmVM
ZXZlbEJveCwgT3B0aW9uYWw8Y29uc3QgQm94R2VvbWV0cnk+IGJveEdlb21ldHJ5KSB7CisgICAg
ICAgIGlmICghc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LmlzRW5hYmxlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIVNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudDo6
Y2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChyb290SW5saW5lQm94LCBpbmxpbmVMZXZlbEJveCwg
Ym94R2VvbWV0cnkpKSB7CisgICAgICAgICAgICBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQu
c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LmFsaWduKGlubGluZUxldmVsQm94KTsKKyAg
ICB9OworCisgICAgYXV0byBjcmVhdGVXcmFwcGVkSW5saW5lQm94ZXMgPSBbJl0geworICAgICAg
ICBpZiAocnVucy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIEFu
IGlubGluZSBib3ggbWF5IG5vdCBuZWNlc3NhcmlseSBzdGFydCBvbiB0aGUgY3VycmVudCBsaW5l
OgorICAgICAgICAvLyA8c3BhbiBpZD1vdXRlcj5saW5lIGJyZWFrPGJyPnRoaXMgY29udGVudCdz
IHBhcmVudCBpbmxpbmUgYm94KCdvdXRlcicpIDxzcGFuIGlkPWlubmVyPnN0YXJ0cyBvbiB0aGUg
cHJldmlvdXMgbGluZTwvc3Bhbj48L3NwYW4+CisgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRoYXQgdGhlcmUncyBhbiBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCBmb3IgZXZlcnkgaW5s
aW5lIGJveCB0aGF0J3MgcHJlc2VudCBvbiB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICAvLyBJ
biBuZXN0aW5nIGNhc2Ugd2UgbmVlZCB0byBjcmVhdGUgTGluZUJveDo6SW5saW5lTGV2ZWxCb3hl
cyBmb3IgdGhlIGlubGluZSBib3ggYW5jZXN0b3JzLgorICAgICAgICAvLyBXZSBvbmx5IGhhdmUg
dG8gZG8gaXQgb24gdGhlIGZpcnN0IHJ1biBhcyBhbnkgc3Vic2VxdWVudCBpbmxpbmUgY29udGVu
dCBpcyBlaXRoZXIgYXQgdGhlIHNhbWUvaGlnaGVyIG5lc3RpbmcgbGV2ZWwgb3IKKyAgICAgICAg
Ly8gbmVzdGVkIHdpdGggYSBbaW5saW5lIGJveCBzdGFydF0gcnVuLgorICAgICAgICBhdXRvJiBm
aXJzdFJ1biA9IHJ1bnNbMF07CisgICAgICAgIGF1dG8mIGZpcnN0UnVuUGFyZW50TGF5b3V0Qm94
ID0gZmlyc3RSdW4ubGF5b3V0Qm94KCkucGFyZW50KCk7CisgICAgICAgIC8vIElmIHRoZSBwYXJl
bnQgaXMgdGhlIGZvcm1hdHRpbmcgcm9vdCwgd2UgY2FuIHN0b3AgaGVyZS4gVGhpcyBpcyByb290
IGlubGluZSBib3ggY29udGVudCwgdGhlcmUncyBubyBuZXN0aW5nIGlubGluZSBib3ggZnJvbSB0
aGUgcHJldmlvdXMgbGluZShzKQorICAgICAgICAvLyB1bmxlc3MgdGhlIGlubGluZSBib3ggY2xv
c2luZyBpcyBmb3JjZWQgb3ZlciB0byB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICAvLyBlLmcu
CisgICAgICAgIC8vIDxzcGFuPm5vcm1hbGx5IHRoZSBpbmxpbmUgYm94IGNsb3NpbmcgZm9ybXMg
YSBjb250aW51b3VzIGNvbnRlbnQ8L3NwYW4+CisgICAgICAgIC8vIDxzcGFuPnVubGVzcyBpdCdz
IGZvcmNlZCB0byB0aGUgbmV4dCBsaW5lPGJyPjwvc3Bhbj4KKyAgICAgICAgYXV0byBmaXJzdFJ1
bk5lZWRzSW5saW5lQm94ID0gZmlyc3RSdW4uaXNJbmxpbmVCb3hFbmQoKTsKKyAgICAgICAgaWYg
KCFmaXJzdFJ1bk5lZWRzSW5saW5lQm94ICYmIGlzUm9vdExheW91dEJveChmaXJzdFJ1blBhcmVu
dExheW91dEJveCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFZlY3Rvcjxjb25zdCBC
b3gqPiBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlczsKKyAgICAgICAgaWYgKGZpcnN0UnVu
TmVlZHNJbmxpbmVCb3gpCisgICAgICAgICAgICBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hl
cy5hcHBlbmQoJmZpcnN0UnVuLmxheW91dEJveCgpKTsKKyAgICAgICAgYXV0byogYW5jZXN0b3Ig
PSAmZmlyc3RSdW5QYXJlbnRMYXlvdXRCb3g7CisgICAgICAgIHdoaWxlICghaXNSb290TGF5b3V0
Qm94KCphbmNlc3RvcikpIHsKKyAgICAgICAgICAgIGxheW91dEJveGVzV2l0aG91dElubGluZUJv
eGVzLmFwcGVuZChhbmNlc3Rvcik7CisgICAgICAgICAgICBhbmNlc3RvciA9ICZhbmNlc3Rvci0+
cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBtaXNzaW5nIExp
bmVCb3g6OklubGluZUJveGVzIHN0YXJ0aW5nIHdpdGggdGhlIHRvcG1vc3QgbGF5b3V0IGJveC4K
KyAgICAgICAgZm9yIChhdXRvKiBsYXlvdXRCb3ggOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKGxh
eW91dEJveGVzV2l0aG91dElubGluZUJveGVzKSkgeworICAgICAgICAgICAgYXV0byBpbmxpbmVC
b3ggPSBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KCpsYXlvdXRCb3gs
IHJvb3RJbmxpbmVCb3gubG9naWNhbExlZnQoKSwgbGluZUJveC5jb250ZW50TG9naWNhbFdpZHRo
KCkpOworICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChpbmxpbmVC
b3gpOworICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZShp
bmxpbmVCb3gsIHsgfSk7CisgICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdU
Rk1vdmUoaW5saW5lQm94KSk7CisgICAgICAgIH0KKyAgICB9OworICAgIGNyZWF0ZVdyYXBwZWRJ
bmxpbmVCb3hlcygpOworCisgICAgYXV0byBsaW5lSGFzQ29udGVudCA9IGZhbHNlOworICAgIGZv
ciAoYXV0byYgcnVuIDogcnVucykgeworICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5
b3V0Qm94KCk7CisgICAgICAgIGF1dG8gcnVuSGFzQ29udGVudCA9IFsmXSAoKSAtPiBib29sIHsK
KyAgICAgICAgICAgIEFTU0VSVCghbGluZUhhc0NvbnRlbnQpOworICAgICAgICAgICAgaWYgKHJ1
bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSB8fCBydW4uaXNTb2Z0TGluZUJyZWFrKCkgfHwgcnVu
LmlzSGFyZExpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgYXV0byYgaW5saW5lQm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21l
dHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICAvLyBFdmVuIG5lZ2F0aXZlIGhvcml6
b250YWwgbWFyZ2luIG1ha2VzIHRoZSBsaW5lICJjb250ZW50ZnVsIi4KKyAgICAgICAgICAgIGlm
IChydW4uaXNJbmxpbmVCb3hTdGFydCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVC
b3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpIHx8IGlubGluZUJveEdlb21ldHJ5LmJvcmRlckxlZnQo
KSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMF9sdSk7CisgICAg
ICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94RW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGlubGluZUJveEdlb21ldHJ5Lm1hcmdpbkVuZCgpIHx8IGlubGluZUJveEdlb21ldHJ5LmJvcmRl
clJpZ2h0KCkgfHwgaW5saW5lQm94R2VvbWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwX2x1
KTsKKyAgICAgICAgICAgIGlmIChydW4uaXNXb3JkQnJlYWtPcHBvcnR1bml0eSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisgICAgICAgIGxpbmVIYXND
b250ZW50ID0gbGluZUhhc0NvbnRlbnQgfHwgcnVuSGFzQ29udGVudCgpOworICAgICAgICBhdXRv
IGxvZ2ljYWxMZWZ0ID0gcm9vdElubGluZUJveC5sb2dpY2FsTGVmdCgpICsgcnVuLmxvZ2ljYWxM
ZWZ0KCk7CisgICAgICAgIGlmIChydW4uaXNCb3goKSkgeworICAgICAgICAgICAgYXV0byYgaW5s
aW5lTGV2ZWxCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3go
bGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gaW5saW5lTGV2
ZWxCb3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKKyAgICAgICAgICAgIGF1dG8gYXNjZW50
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUoKS5z
aG91bGROb3RTeW50aGVzaXplSW5saW5lQmxvY2tCYXNlbGluZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gSW50ZWdyYXRpb24gY29kZXBhdGggY29uc3RydWN0cyByZXBsYWNlZCBib3hlcyBmb3Ig
aW5saW5lLWJsb2NrIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgQVNTRVJUKGxheW91dEJveC5p
c1JlcGxhY2VkQm94KCkpOworICAgICAgICAgICAgICAgIGFzY2VudCA9ICpkb3duY2FzdDxSZXBs
YWNlZEJveD4obGF5b3V0Qm94KS5iYXNlbGluZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChs
YXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGJh
c2VsaW5lIG9mIGFuICdpbmxpbmUtYmxvY2snIGlzIHRoZSBiYXNlbGluZSBvZiBpdHMgbGFzdCBs
aW5lIGJveCBpbiB0aGUgbm9ybWFsIGZsb3csIHVubGVzcyBpdCBoYXMgZWl0aGVyIG5vIGluLWZs
b3cgbGluZSBib3hlcyBvcgorICAgICAgICAgICAgICAgIC8vIGlmIGl0cyAnb3ZlcmZsb3cnIHBy
b3BlcnR5IGhhcyBhIGNvbXB1dGVkIHZhbHVlIG90aGVyIHRoYW4gJ3Zpc2libGUnLCBpbiB3aGlj
aCBjYXNlIHRoZSBiYXNlbGluZSBpcyB0aGUgYm90dG9tIG1hcmdpbiBlZGdlLgorICAgICAgICAg
ICAgICAgIGF1dG8gc3ludGhlc2l6ZUJhc2VsaW5lID0gIWxheW91dEJveC5lc3RhYmxpc2hlc0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0KCkgfHwgIWxheW91dEJveC5zdHlsZSgpLmlzT3ZlcmZsb3dW
aXNpYmxlKCk7CisgICAgICAgICAgICAgICAgaWYgKHN5bnRoZXNpemVCYXNlbGluZSkKKyAgICAg
ICAgICAgICAgICAgICAgYXNjZW50ID0gbWFyZ2luQm94SGVpZ2h0OworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlv
dXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRh
aW5lckJveD4obGF5b3V0Qm94KSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGxhc3RMaW5l
ID0gZm9ybWF0dGluZ1N0YXRlLmxpbmVzKCkubGFzdCgpOworICAgICAgICAgICAgICAgICAgICBh
dXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBsYXN0TGluZS5saW5lQm94TG9naWNhbFJlY3QoKS50
b3AoKSArIGxhc3RMaW5lLmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGFzY2VudCA9
IGlubGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBpbmxpbmVMZXZlbEJveEdl
b21ldHJ5LmJvcmRlclRvcCgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5wYWRkaW5nVG9wKCku
dmFsdWVPcigwKSArIGlubGluZUJsb2NrQmFzZWxpbmU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQorICAgICAgICAg
ICAgICAgIGFzY2VudCA9IGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLmJhc2VsaW5l
KCkudmFsdWVPcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGFzY2VudCA9IG1hcmdpbkJveEhlaWdodDsKKyAgICAgICAgICAgIGxvZ2ljYWxMZWZ0
ICs9IHN0ZDo6bWF4KDBfbHUsIGlubGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKSk7
CisgICAgICAgICAgICBhdXRvIGF0b21pY0lubGluZUxldmVsQm94ID0gTGluZUJveDo6SW5saW5l
TGV2ZWxCb3g6OmNyZWF0ZUF0b21pY0lubGluZUxldmVsQm94KGxheW91dEJveCwgbG9naWNhbExl
ZnQsIHsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5ib3JkZXJCb3hXaWR0aCgpLCBtYXJnaW5Cb3hI
ZWlnaHQgfSk7CisgICAgICAgICAgICBhdG9taWNJbmxpbmVMZXZlbEJveC5zZXRCYXNlbGluZShh
c2NlbnQpOworICAgICAgICAgICAgYXRvbWljSW5saW5lTGV2ZWxCb3guc2V0TGF5b3V0Qm91bmRz
KExpbmVCb3g6OklubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHMgeyBhc2NlbnQsIG1hcmdpbkJv
eEhlaWdodCAtIGFzY2VudCB9KTsKKyAgICAgICAgICAgIHNpbXBsaWZpZWRBbGlnblZlcnRpY2Fs
bHlJZkFwcGxpY2FibGUoYXRvbWljSW5saW5lTGV2ZWxCb3gsIGlubGluZUxldmVsQm94R2VvbWV0
cnkpOworICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChXVEZNb3ZlKGF0b21p
Y0lubGluZUxldmVsQm94KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocnVuLmlzSW5saW5lQm94U3RhcnQoKSkgeworICAgICAgICAgICAgLy8gQXQgdGhp
cyBwb2ludCB3ZSBkb24ndCBrbm93IHlldCBob3cgd2lkZSB0aGlzIGlubGluZSBib3ggaXMuIExl
dCdzIGFzc3VtZSBpdCdzIGFzIGxvbmcgYXMgdGhlIGxpbmUgaXMKKyAgICAgICAgICAgIC8vIGFu
ZCBhZGp1c3QgaXQgbGF0ZXIgaWYgd2UgY29tZSBhY3Jvc3MgYW4gaW5saW5lQm94RW5kIHJ1biAo
c2VlIGJlbG93KS4KKyAgICAgICAgICAgIGF1dG8gaW5pdGlhbExvZ2ljYWxXaWR0aCA9IGxpbmVC
b3guY29udGVudExvZ2ljYWxXaWR0aCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCk7CisgICAgICAgICAg
ICBBU1NFUlQoaW5pdGlhbExvZ2ljYWxXaWR0aCA+PSAwKTsKKyAgICAgICAgICAgIC8vIElubGlu
ZSBib3ggcnVuIGlzIGJhc2VkIG9uIG1hcmdpbiBib3guIExldCdzIGNvbnZlcnQgaXQgdG8gYm9y
ZGVyIGJveC4KKyAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnQgPSBzdGQ6Om1heCgwX2x1LCBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkubWFyZ2luU3RhcnQo
KSk7CisgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBtYXJnaW5TdGFydDsKKyAgICAgICAgICAg
IGluaXRpYWxMb2dpY2FsV2lkdGggLT0gbWFyZ2luU3RhcnQ7CisgICAgICAgICAgICBhdXRvIGlu
bGluZUJveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVJbmxpbmVCb3gobGF5b3V0
Qm94LCBsb2dpY2FsTGVmdCwgaW5pdGlhbExvZ2ljYWxXaWR0aCk7CisgICAgICAgICAgICBzZXRW
ZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KGlubGluZUJveCk7CisgICAgICAgICAgICBzaW1w
bGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGlubGluZUJveCwgeyB9KTsKKyAgICAg
ICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShpbmxpbmVCb3gpKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChydW4uaXNJbmxpbmVC
b3hFbmQoKSkgeworICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBsb2dpY2FsIHdpZHRoIHdoZW4g
dGhlIGlubGluZSBib3ggY2xvc2VzIG9uIHRoaXMgbGluZS4KKyAgICAgICAgICAgIGF1dG8mIGlu
bGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsK
KyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVCb3guaXNJbmxpbmVCb3goKSk7CisgICAgICAgICAg
ICAvLyBJbmxpbmUgYm94IHJ1biBpcyBiYXNlZCBvbiBtYXJnaW4gYm94LiBMZXQncyBjb252ZXJ0
IGl0IHRvIGJvcmRlciBib3guCisgICAgICAgICAgICBhdXRvIG1hcmdpbkVuZCA9IHN0ZDo6bWF4
KDBfbHUsIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS5tYXJn
aW5FbmQoKSk7CisgICAgICAgICAgICBhdXRvIGlubGluZUJveExvZ2ljYWxSaWdodCA9IGxvZ2lj
YWxMZWZ0ICsgcnVuLmxvZ2ljYWxXaWR0aCgpIC0gbWFyZ2luRW5kOworICAgICAgICAgICAgaW5s
aW5lQm94LnNldExvZ2ljYWxXaWR0aChpbmxpbmVCb3hMb2dpY2FsUmlnaHQgLSBpbmxpbmVCb3gu
bG9naWNhbExlZnQoKSk7CisgICAgICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZB
cHBsaWNhYmxlKGlubGluZUJveCwgeyB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogQWRqdXN0IG5vbi1lbXB0eSBpbmxpbmUgYm94IGhlaWdo
dCB3aGVuIGdseXBocyBmcm9tIHRoZSBub24tcHJpbWFyeSBmb250IHN0cmV0Y2ggdGhlIGJveC4K
KyAgICAgICAgICAgIGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
LnBhcmVudCgpKS5zZXRIYXNDb250ZW50KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocnVuLmlzSGFyZExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBh
dXRvIGxpbmVCcmVha0JveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVMaW5lQnJl
YWtCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCk7CisgICAgICAgICAgICBzZXRWZXJ0aWNhbEdl
b21ldHJ5Rm9ySW5saW5lQm94KGxpbmVCcmVha0JveCk7CisgICAgICAgICAgICBzaW1wbGlmaWVk
QWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGxpbmVCcmVha0JveCwgeyB9KTsKKyAgICAgICAg
ICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShsaW5lQnJlYWtCb3gpKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChydW4uaXNXb3JkQnJl
YWtPcHBvcnR1bml0eSgpKSB7CisgICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94
KExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVHZW5lcmljSW5saW5lTGV2ZWxCb3gobGF5
b3V0Qm94LCBsb2dpY2FsTGVmdCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgbGluZUJveC5zZXRI
YXNDb250ZW50KGxpbmVIYXNDb250ZW50KTsKKyAgICBpZiAoc2ltcGxpZmllZFZlcnRpY2FsQWxp
Z25tZW50LmlzRW5hYmxlZCgpIHx8ICFsaW5lSGFzQ29udGVudCkgeworICAgICAgICAvLyBXZSBz
aG91bGQgYWx3YXlzIGJlIGFibGUgdG8gZXhlcmNpc2UgdGhlIGZhc3QgcGF0aCB3aGVuIHRoZSBs
aW5lIGhhcyBubyBjb250ZW50IGF0IGFsbCwgZXZlbiBpbiBub24tc3RhbmRhcmRzIG1vZGUgb3Ig
d2l0aCBsaW5lLWhlaWdodCBzZXQuCisgICAgICAgIHJvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRv
cChsaW5lSGFzQ29udGVudCA/IHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5yb290SW5saW5l
Qm94TG9naWNhbFRvcCgpIDogLXJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKSk7CisgICAgICAgIGxp
bmVCb3guc2V0TG9naWNhbEhlaWdodChsaW5lSGFzQ29udGVudCA/IHNpbXBsaWZpZWRWZXJ0aWNh
bEFsaWdubWVudC5saW5lQm94SGVpZ2h0KCkgOiBJbmxpbmVMYXlvdXRVbml0KCkpOworICAgIH0g
ZWxzZQorICAgICAgICBjb21wdXRlTGluZUJveEhlaWdodEFuZEFsaWduSW5saW5lTGV2ZWxCb3hl
c1ZlcnRpY2FsbHkobGluZUJveCk7Cit9CisKK3ZvaWQgTGluZUJveEJ1aWxkZXI6OmNvbXB1dGVM
aW5lQm94SGVpZ2h0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseShMaW5lQm94JiBs
aW5lQm94KQoreworICAgIEFTU0VSVChsaW5lQm94Lmhhc0NvbnRlbnQoKSk7CisgICAgLy8gVGhp
cyBmdW5jdGlvbiAocGFydGlhbGx5KSBpbXBsZW1lbnRzOgorICAgIC8vIDIuMi4gTGF5b3V0IFdp
dGhpbiBMaW5lIEJveGVzCisgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1pbmxpbmUt
My8jbGluZS1sYXlvdXQKKyAgICAvLyAxLiBDb21wdXRlIHRoZSBsaW5lIGJveCBoZWlnaHQgdXNp
bmcgdGhlIGxheW91dCBib3VuZHMgZ2VvbWV0cnkuIFRoaXMgaGVpZ2h0IGNvbXB1dGF0aW9uIHN0
cmljdGx5IHVzZXMgbGF5b3V0IGJvdW5kcyBhbmQgbm90IG5vcm1hbCBpbmxpbmUgbGV2ZWwgYm94
IGdlb21ldHJpZXMuCisgICAgLy8gMi4gQ29tcHV0ZSB0aGUgYmFzZWxpbmUvbG9naWNhbCB0b3Ag
cG9zaXRpb24gb2YgdGhlIHJvb3QgaW5saW5lIGJveC4gQWxpZ25lZCBib3hlcyBwdXNoIHRoZSBy
b290IGlubGluZSBib3ggYXJvdW5kIGluc2lkZSB0aGUgbGluZSBib3guCisgICAgLy8gMy4gRmlu
YWxseSBhbGlnbiB0aGUgaW5saW5lIGxldmVsIGJveGVzIHVzaW5nIChtb3N0bHkpIG5vcm1hbCBp
bmxpbmUgbGV2ZWwgYm94IGdlb21ldHJpZXMuCisgICAgYXV0byBxdWlya3MgPSBJbmxpbmVGb3Jt
YXR0aW5nUXVpcmtzIHsgZm9ybWF0dGluZ0NvbnRleHQoKSB9OworICAgIGF1dG8mIHJvb3RJbmxp
bmVCb3ggPSBsaW5lQm94LnJvb3RJbmxpbmVCb3goKTsKKworICAgIGF1dG8gY29tcHV0ZUxpbmVC
b3hMb2dpY2FsSGVpZ2h0ID0gWyZdIHsKKyAgICAgICAgLy8gTGluZSBib3ggaGVpZ2h0IGNvbXB1
dGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBsYXlvdXQgYm91bmRzIG9mIHRoZSBpbmxpbmUgYm94ZXMg
YW5kIG5vdCB0aGVpciBsb2dpY2FsIChhc2NlbnQvZGVzY2VudCkgZGltZW5zaW9ucy4KKyAgICAg
ICAgc3RydWN0IEFic29sdXRlVG9wQW5kQm90dG9tIHsKKyAgICAgICAgICAgIElubGluZUxheW91
dFVuaXQgdG9wIHsgMCB9OworICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBib3R0b20geyAw
IH07CisgICAgICAgIH07CisgICAgICAgIEhhc2hNYXA8Y29uc3QgTGluZUJveDo6SW5saW5lTGV2
ZWxCb3gqLCBBYnNvbHV0ZVRvcEFuZEJvdHRvbT4gaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZVRvcEFu
ZEJvdHRvbU1hcDsKKworICAgICAgICBhdXRvIG1pbmltdW1Mb2dpY2FsVG9wID0gT3B0aW9uYWw8
SW5saW5lTGF5b3V0VW5pdD4geyB9OworICAgICAgICBhdXRvIG1heGltdW1Mb2dpY2FsQm90dG9t
ID0gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4geyB9OworICAgICAgICBpZiAocXVpcmtzLmlu
bGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3gocm9vdElubGluZUJveCwgbGluZUJveCkpIHsKKyAg
ICAgICAgICAgIG1pbmltdW1Mb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAg
ICAgICAgICBtYXhpbXVtTG9naWNhbEJvdHRvbSA9IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRz
KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90
dG9tTWFwLmFkZCgmcm9vdElubGluZUJveCwgQWJzb2x1dGVUb3BBbmRCb3R0b20geyAqbWluaW11
bUxvZ2ljYWxUb3AsICptYXhpbXVtTG9naWNhbEJvdHRvbSB9KTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmFkZCgmcm9v
dElubGluZUJveCwgQWJzb2x1dGVUb3BBbmRCb3R0b20geyB9KTsKKworICAgICAgICBWZWN0b3I8
TGluZUJveDo6SW5saW5lTGV2ZWxCb3gqPiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVz
OworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5s
aW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVM
ZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVMZXZlbEJveC5oYXNM
aW5lQm94UmVsYXRpdmVBbGlnbm1lbnQoKSkgeworICAgICAgICAgICAgICAgIGxpbmVCb3hSZWxh
dGl2ZUlubGluZUxldmVsQm94ZXMuYXBwZW5kKCZpbmxpbmVMZXZlbEJveCk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvJiBwYXJlbnRJ
bmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5w
YXJlbnQoKSk7CisgICAgICAgICAgICAvLyBMb2dpY2FsIHRvcCBpcyByZWxhdGl2ZSB0byB0aGUg
cGFyZW50IGlubGluZSBib3gncyBsYXlvdXQgYm91bmRzLgorICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgbG9naWNhbCB0b3AgaXMgbm90IHRoZSBmaW5hbCBsb2dpY2FsIHRvcCBvZiB0aGUg
aW5saW5lIGxldmVsIGJveC4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvZ2ljYWwgdG9w
IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXlvdXQgYm91bmRzIGdlb21ldHJ5IHdoaWNoIG1heSBi
ZSB2ZXJ5IGRpZmZlcmVudCBmcm9tIHRoZSBpbmxpbmUgYm94J3Mgbm9ybWFsIGdlb21ldHJ5Lgor
ICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAg
ICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRpY2FsQWxpZ24oKSkgeworICAgICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogeworICAgICAgICAgICAgICAgIGF1
dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50
SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFy
ZW50QmFzZWxpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogeworICAgICAgICAgICAgICAgIGF1
dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmhlaWdodCgpIC8gMiArIHBhcmVudElubGluZUJveC5zdHlsZSgpLmZvbnRN
ZXRyaWNzKCkueEhlaWdodCgpIC8gMjsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFy
ZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lTWlkZGxlOiB7CisgICAgICAg
ICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5l
TGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLyAyOworICAgICAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNh
bFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TGVuZ3RoOiB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVMZXZlbEJveC5zdHlsZSgpOworICAg
ICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGZs
b2F0VmFsdWVGb3JMZW5ndGgoc3R5bGUudmVydGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21w
dXRlZExpbmVIZWlnaHQoKSkgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7
CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3Vu
ZHMoKS5hc2NlbnQgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNh
bEFsaWduOjpUZXh0VG9wOiB7CisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRleHQtdG9w
IGFsaWducyB3aXRoIHRoZSBpbmxpbmUgYm94J3MgZm9udCBtZXRyaWNzIHRvcCAoYXNjZW50KSBh
bmQgbm90IHRoZSBsYXlvdXQgYm91bmRzIHRvcC4KKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9w
ID0gcGFyZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIHBhcmVudElubGluZUJv
eC5iYXNlbGluZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0Qm90dG9tOiB7CisgICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IHRleHQtYm90dG9tIGFsaWducyB3aXRoIHRoZSBpbmxpbmUgYm94J3Mg
Zm9udCBtZXRyaWNzIGJvdHRvbSAoZGVzY2VudCkgYW5kIG5vdCB0aGUgbGF5b3V0IGJvdW5kcyBi
b3R0b20uCisgICAgICAgICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hMYXlvdXRCb3VuZHMg
PSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCk7CisgICAgICAgICAgICAgICAgYXV0byBw
YXJlbnRJbmxpbmVCb3hMb2dpY2FsQm90dG9tID0gcGFyZW50SW5saW5lQm94TGF5b3V0Qm91bmRz
LmhlaWdodCgpIC0gcGFyZW50SW5saW5lQm94TGF5b3V0Qm91bmRzLmRlc2NlbnQgKyBwYXJlbnRJ
bmxpbmVCb3guZGVzY2VudCgpLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKKyAgICAgICAg
ICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94TG9naWNhbEJvdHRvbSAtIGlubGlu
ZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hBYnNvbHV0ZVRvcEFu
ZEJvdHRvbSA9IGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAuZ2V0KCZwYXJl
bnRJbmxpbmVCb3gpOworICAgICAgICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxUb3AgPSBwYXJl
bnRJbmxpbmVCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbS50b3AgKyBsb2dpY2FsVG9wOworICAgICAg
ICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxCb3R0b20gPSBhYnNvbHV0ZUxvZ2ljYWxUb3AgKyBp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgIGlubGlu
ZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAuYWRkKCZpbmxpbmVMZXZlbEJveCwgQWJz
b2x1dGVUb3BBbmRCb3R0b20geyBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGFic29sdXRlTG9naWNhbEJv
dHRvbSB9KTsKKyAgICAgICAgICAgIC8vIFN0cmV0Y2ggdGhlIG1pbi9tYXggYWJzb2x1dGUgdmFs
dWVzIGlmIGFwcGxpY2FibGUuCisgICAgICAgICAgICBpZiAocXVpcmtzLmlubGluZUxldmVsQm94
QWZmZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpKSB7CisgICAgICAgICAgICAg
ICAgbWluaW11bUxvZ2ljYWxUb3AgPSBzdGQ6Om1pbihtaW5pbXVtTG9naWNhbFRvcC52YWx1ZU9y
KGFic29sdXRlTG9naWNhbFRvcCksIGFic29sdXRlTG9naWNhbFRvcCk7CisgICAgICAgICAgICAg
ICAgbWF4aW11bUxvZ2ljYWxCb3R0b20gPSBzdGQ6Om1heChtYXhpbXVtTG9naWNhbEJvdHRvbS52
YWx1ZU9yKGFic29sdXRlTG9naWNhbEJvdHRvbSksIGFic29sdXRlTG9naWNhbEJvdHRvbSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlIGxpbmUgYm94IGhlaWdodCBj
b21wdXRhdGlvbiBpcyBhcyBmb2xsb3dzOgorICAgICAgICAvLyAxLiBTdHJldGNoIHRoZSBsaW5l
IGJveCB3aXRoIHRoZSBub24tbGluZS1ib3ggcmVsYXRpdmUgYWxpZ25lZCBpbmxpbmUgYm94IGFi
c29sdXRlIHRvcCBhbmQgYm90dG9tIHZhbHVlcy4KKyAgICAgICAgLy8gMi4gQ2hlY2sgaWYgdGhl
IGxpbmUgYm94IHJlbGF0aXZlIGFsaWduZWQgaW5saW5lIGJveGVzICh0b3AsIGJvdHRvbSBldGMp
IGhhdmUgZW5vdWdoIHJvb20gYW5kIHN0cmV0Y2ggdGhlIGxpbmUgYm94IGZ1cnRoZXIgaWYgbmVl
ZGVkLgorICAgICAgICBhdXRvIGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gbWF4aW11bUxvZ2ljYWxC
b3R0b20udmFsdWVPcihJbmxpbmVMYXlvdXRVbml0KCkpIC0gbWluaW11bUxvZ2ljYWxUb3AudmFs
dWVPcihJbmxpbmVMYXlvdXRVbml0KCkpOworICAgICAgICBmb3IgKGF1dG8qIGxpbmVCb3hSZWxh
dGl2ZUlubGluZUxldmVsQm94IDogbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3hlcykgewor
ICAgICAgICAgICAgaWYgKCFxdWlya3MuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveCgqbGlu
ZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgbGluZUJveExvZ2ljYWxIZWlnaHQgPSBzdGQ6Om1heChsaW5l
Qm94TG9naWNhbEhlaWdodCwgbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3gtPmxheW91dEJv
dW5kcygpLmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxI
ZWlnaHQobGluZUJveExvZ2ljYWxIZWlnaHQpOworICAgIH07CisgICAgY29tcHV0ZUxpbmVCb3hM
b2dpY2FsSGVpZ2h0KCk7CisKKyAgICBhdXRvIGNvbXB1dGVSb290SW5saW5lQm94VmVydGljYWxQ
b3NpdGlvbiA9IFsmXSB7CisgICAgICAgIEhhc2hNYXA8Y29uc3QgTGluZUJveDo6SW5saW5lTGV2
ZWxCb3gqLCBJbmxpbmVMYXlvdXRVbml0PiBpbmxpbmVMZXZlbEJveEFic29sdXRlQmFzZWxpbmVP
ZmZzZXRNYXA7CisgICAgICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVCYXNlbGluZU9mZnNldE1h
cC5hZGQoJnJvb3RJbmxpbmVCb3gsIElubGluZUxheW91dFVuaXQgeyB9KTsKKworICAgICAgICBh
dXRvIG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gT3B0aW9uYWw8
SW5saW5lTGF5b3V0VW5pdD4geyB9OworICAgICAgICBpZiAocXVpcmtzLmlubGluZUxldmVsQm94
QWZmZWN0c0xpbmVCb3gocm9vdElubGluZUJveCwgbGluZUJveCkpCisgICAgICAgICAgICBtYXhp
bXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IHJvb3RJbmxpbmVCb3gubGF5
b3V0Qm91bmRzKCkuYXNjZW50OworCisgICAgICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3gg
OiBsaW5lQm94Lm5vblJvb3RJbmxpbmVMZXZlbEJveGVzKCkpIHsKKyAgICAgICAgICAgIGF1dG8g
YWJzb2x1dGVCYXNlbGluZU9mZnNldCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAg
ICAgaWYgKCFpbmxpbmVMZXZlbEJveC5oYXNMaW5lQm94UmVsYXRpdmVBbGlnbm1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LmxheW91dEJv
eCgpOworICAgICAgICAgICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5s
aW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gSW5saW5lTGF5b3V0
VW5pdCB7IH07CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRp
Y2FsQWxpZ24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxp
bmU6CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5l
ID0geyB9OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2lj
YWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSAoaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91
bmRzKCkuaGVpZ2h0KCkgLyAyICsgcGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9udE1ldHJpY3Mo
KS54SGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmUgPSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lIC0gaW5s
aW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZU1pZGRsZTogeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxU
b3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMo
KS5oZWlnaHQoKSAvIDI7CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBh
cmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSAtIGlubGlu
ZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6TGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gaW5saW5lTGV2
ZWxCb3guc3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduT2Zm
c2V0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3RoKCksIHN0
eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBsb2dp
Y2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gdmVydGljYWxBbGlnbk9mZnNldCArIGlu
bGluZUxldmVsQm94LmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zm
c2V0RnJvbVBhcmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGlu
ZSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OlRleHRUb3A6CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJh
c2VsaW5lID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBpbmxpbmVMZXZlbEJveC5sYXlv
dXRCb3VuZHMoKS5hc2NlbnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbToKKyAgICAgICAgICAgICAgICAg
ICAgYmFzZWxpbmVPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlv
dXRCb3VuZHMoKS5kZXNjZW50IC0gKnBhcmVudElubGluZUJveC5kZXNjZW50KCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhYnNvbHV0ZUJh
c2VsaW5lT2Zmc2V0ID0gaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwLmdl
dCgmcGFyZW50SW5saW5lQm94KSArIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVs
Qm94LnZlcnRpY2FsQWxpZ24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6VG9wOiB7CisgICAgICAgICAgICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBy
b290SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmxheW91
dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7Cisg
ICAgICAgICAgICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBpbmxpbmVMZXZlbEJv
eC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50IC0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5k
ZXNjZW50OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9J
TVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0
ZUJhc2VsaW5lT2Zmc2V0TWFwLmFkZCgmaW5saW5lTGV2ZWxCb3gsIGFic29sdXRlQmFzZWxpbmVP
ZmZzZXQpOworICAgICAgICAgICAgYXV0byBhZmZlY3RzUm9vdElubGluZUJveFZlcnRpY2FsUG9z
aXRpb24gPSBxdWlya3MuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChpbmxpbmVMZXZlbEJv
eCwgbGluZUJveCk7CisgICAgICAgICAgICBpZiAoYWZmZWN0c1Jvb3RJbmxpbmVCb3hWZXJ0aWNh
bFBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgYXV0byB0b3BPZmZzZXRGcm9tUm9vdElubGlu
ZUJveEJhc2VsaW5lID0gYWJzb2x1dGVCYXNlbGluZU9mZnNldCArIGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICBpZiAobWF4aW11bVRvcE9mZnNl
dEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUpCisgICAgICAgICAgICAgICAgICAgIG1heGltdW1U
b3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gc3RkOjptYXgoKm1heGltdW1Ub3BP
ZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lLCB0b3BPZmZzZXRGcm9tUm9vdElubGluZUJv
eEJhc2VsaW5lKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgYXJlIGlzIHF1aXJrIG1vZGUgYW5kIHRoZSByb290IGlubGluZSBib3ggaGFzIG5vIGNv
bnRlbnQuIFRoZSByb290IGlubGluZSBib3gncyBiYXNlbGluZSBpcyBhbmNob3JlZCBhdCAwLgor
ICAgICAgICAgICAgICAgICAgICAvLyBIb3dldmVyIG5lZ2F0aXZlIGFzY2VudCAoZS5nIG5lZ2F0
aXZlIHRvcCBtYXJnaW4pIGNhbiAicHVzaCIgdGhlIHJvb3QgaW5saW5lIGJveCB1cHdhcmRzIGFu
ZCBoYXZlIGEgbmVnYXRpdmUgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIG1heGltdW1Ub3BP
ZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91
bmRzKCkuYXNjZW50ID49IDAKKyAgICAgICAgICAgICAgICAgICAgICAgID8gc3RkOjptYXgoMC4w
ZiwgdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDogdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXV0byByb290SW5saW5l
Qm94TG9naWNhbFRvcCA9IG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5l
LnZhbHVlT3IoMC5mKSAtIHJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgcm9vdElu
bGluZUJveC5zZXRMb2dpY2FsVG9wKHJvb3RJbmxpbmVCb3hMb2dpY2FsVG9wKTsKKyAgICB9Owor
ICAgIGNvbXB1dGVSb290SW5saW5lQm94VmVydGljYWxQb3NpdGlvbigpOworCisgICAgYXV0byBh
bGlnbklubGluZUxldmVsQm94ZXMgPSBbJl0geworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxl
dmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAg
ICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlv
dXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9
IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJv
eC52ZXJ0aWNhbEFsaWduKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFz
ZWxpbmU6CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNl
bGluZSgpIC0gaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7CisgICAgICAgICAg
ICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gKGlubGluZUxl
dmVsQm94LmxvZ2ljYWxIZWlnaHQoKSAvIDIgKyBwYXJlbnRJbmxpbmVCb3guc3R5bGUoKS5mb250
TWV0cmljcygpLnhIZWlnaHQoKSAvIDIpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBw
YXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFz
ZWxpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lTWlkZGxlOiB7CisgICAgICAgICAgICAgICAg
YXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gu
bG9naWNhbEhlaWdodCgpIC8gMjsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50
SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5l
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBWZXJ0aWNhbEFsaWduOjpMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9
IGlubGluZUxldmVsQm94LnN0eWxlKCk7CisgICAgICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFs
aWduT2Zmc2V0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3Ro
KCksIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxv
Z2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSB2ZXJ0aWNhbEFsaWduT2Zmc2V0ICsg
aW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0g
cGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJh
c2VsaW5lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0ICh0ZXh0KXRvcC9ib3R0b20gYWxpZ24gdGhlaXIgbGF5b3V0IGJvdW5k
cy4KKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDoKKyAgICAgICAgICAg
ICAgICBsb2dpY2FsVG9wID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0g
aW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbToKKyAgICAgICAgICAgICAgICBs
b2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIGlubGluZUxldmVs
Qm94LmxheW91dEJvdW5kcygpLmRlc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpU
b3A6CisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbG9naWNhbCB0b3AgaXMgbm90
IHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgaW5saW5lIGJveC4KKyAgICAgICAgICAgICAgICBsb2dp
Y2FsVG9wID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gaW5saW5lTGV2
ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgorICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGxvZ2ljYWwgdG9wIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGlubGluZSBib3gu
CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGxpbmVCb3gubG9naWNhbEhlaWdodCgpIC0g
aW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtIGlubGluZUxldmVsQm94LmJh
c2VsaW5lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmxpbmVMZXZlbEJveC5z
ZXRMb2dpY2FsVG9wKGxvZ2ljYWxUb3ApOworICAgICAgICB9CisgICAgfTsKKyAgICBhbGlnbklu
bGluZUxldmVsQm94ZXMoKTsKK30KKworTGluZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRWZXJ0aWNh
bEFsaWdubWVudDo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50KGNvbnN0IExpbmVCb3g6Oklu
bGluZUxldmVsQm94JiByb290SW5saW5lQm94KQorICAgIDogbV9yb290SW5saW5lQm94KHJvb3RJ
bmxpbmVCb3gpCit7CisgICAgYWRqdXN0KHJvb3RJbmxpbmVCb3gpOworfQorCitib29sIExpbmVC
b3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmNhblVzZVNpbXBsaWZpZWRB
bGlnbm1lbnQoY29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gsIGNv
bnN0IExpbmVCb3g6OklubGluZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveCwgT3B0aW9uYWw8Y29u
c3QgQm94R2VvbWV0cnk+IGlubGluZUxldmVsQm94R2VvbWV0cnkpCit7CisgICAgaWYgKGlubGlu
ZUxldmVsQm94LmlzQXRvbWljSW5saW5lTGV2ZWxCb3goKSkgeworICAgICAgICBBU1NFUlQoaW5s
aW5lTGV2ZWxCb3hHZW9tZXRyeSk7CisgICAgICAgIC8vIEJhc2VsaW5lIGFsaWduZWQsIG5vbi1z
dHJldGNoeSBkaXJlY3QgY2hpbGRyZW4gYXJlIGNvbnNpZGVyZWQgdG8gYmUgc2ltcGxlIGZvciBu
b3cuCisgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LmxheW91dEJveCgp
OworICAgICAgICByZXR1cm4gJmxheW91dEJveC5wYXJlbnQoKSA9PSAmcm9vdElubGluZUJveC5s
YXlvdXRCb3goKQorICAgICAgICAgICAgJiYgbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGln
bigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lCisgICAgICAgICAgICAmJiAhaW5saW5lTGV2
ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQmVmb3JlKCkKKyAgICAgICAgICAgICYmICFpbmxpbmVMZXZl
bEJveEdlb21ldHJ5LT5tYXJnaW5BZnRlcigpCisgICAgICAgICAgICAmJiBpbmxpbmVMZXZlbEJv
eEdlb21ldHJ5LT5tYXJnaW5Cb3hIZWlnaHQoKSA8PSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7
CisgICAgfQorICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0xpbmVCcmVha0JveCgpKSB7CisgICAg
ICAgIC8vIEJhc2VsaW5lIGFsaWduZWQsIG5vbi1zdHJldGNoeSBsaW5lIGJyZWFrcyBlLmcuIDxk
aXY+PHNwYW4+PGJyPjwvc3Bhbj48L2Rpdj4gYnV0IG5vdCA8ZGl2PjxzcGFuIHN0eWxlPSJmb250
LXNpemU6IDEwMHB4OyI+PGJyPjwvc3Bhbj48L2Rpdj4uCisgICAgICAgIHJldHVybiBpbmxpbmVM
ZXZlbEJveC5sYXlvdXRCb3goKS5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZSAmJiBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpIDw9IHJvb3RJbmxpbmVC
b3guYmFzZWxpbmUoKTsKKyAgICB9CisgICAgaWYgKGlubGluZUxldmVsQm94LmlzSW5saW5lQm94
KCkpIHsKKyAgICAgICAgLy8gQmFzZWxpbmUgYWxpZ25lZCwgbm9uLXN0cmV0Y2h5IGlubGluZSBi
b3hlcyBlLmcuIDxkaXY+PHNwYW4+PC9zcGFuPjwvZGl2PiBidXQgbm90IDxkaXY+PHNwYW4gc3R5
bGU9ImZvbnQtc2l6ZTogMTAwcHg7Ij48L3NwYW4+PC9kaXY+LgorICAgICAgICByZXR1cm4gaW5s
aW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGlj
YWxBbGlnbjo6QmFzZWxpbmUgJiYgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkgPT0gcm9v
dElubGluZUJveC5sYXlvdXRCb3VuZHMoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIExpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmFsaWdu
KExpbmVCb3g6OklubGluZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveCkKK3sKKyAgICBpZiAoaW5s
aW5lTGV2ZWxCb3guaXNBdG9taWNJbmxpbmVMZXZlbEJveCgpIHx8IGlubGluZUxldmVsQm94Lmlz
TGluZUJyZWFrQm94KCkgfHwgaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSkgeworICAgICAg
ICAvLyBPbmx5IGJhc2VsaW5lIGFsaWdubWVudCBmb3Igbm93LgorICAgICAgICBpbmxpbmVMZXZl
bEJveC5zZXRMb2dpY2FsVG9wKG1fcm9vdElubGluZUJveC5iYXNlbGluZSgpIC0gaW5saW5lTGV2
ZWxCb3guYmFzZWxpbmUoKSk7CisgICAgICAgIGFkanVzdChpbmxpbmVMZXZlbEJveCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30K
Kwordm9pZCBMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50OjphZGp1
c3QoY29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIGlubGluZUxldmVsQm94KQoreworICAg
IGF1dG8gbGF5b3V0Qm91bmRzTG9naWNhbFRvcCA9IG1fcm9vdElubGluZUJveC5sYXlvdXRCb3Vu
ZHMoKS5hc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7CisgICAg
bV9saW5lQm94TG9naWNhbFRvcCA9IHN0ZDo6bWluKG1fbGluZUJveExvZ2ljYWxUb3AsIGxheW91
dEJvdW5kc0xvZ2ljYWxUb3ApOworICAgIG1fbGluZUJveExvZ2ljYWxCb3R0b20gPSBzdGQ6Om1h
eChtX2xpbmVCb3hMb2dpY2FsQm90dG9tLCBsYXlvdXRCb3VuZHNMb2dpY2FsVG9wICsgaW5saW5l
TGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkpOworICAgIG1fcm9vdElubGluZUJveExv
Z2ljYWxUb3AgPSBzdGQ6Om1heChtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wLCBpbmxpbmVMZXZl
bEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBtX3Jvb3RJbmxpbmVCb3guYmFzZWxpbmUoKSk7
Cit9CisKK0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkK
KyAgICA6IEZvcm1hdHRpbmdHZW9tZXRyeShpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKK3sKK30K
KworTGluZUJveCBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6OmxpbmVCb3hGb3JMaW5lQ29udGVu
dChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50KQoreworICAgIHJl
dHVybiBMaW5lQm94QnVpbGRlcihmb3JtYXR0aW5nQ29udGV4dCgpKS5idWlsZChsaW5lQ29udGVu
dCk7Cit9CisKK0lubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5Ojpsb2dp
Y2FsVG9wRm9yTmV4dExpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29u
dGVudCwgSW5saW5lTGF5b3V0VW5pdCBwcmV2aW91c0xpbmVMb2dpY2FsQm90dG9tLCBjb25zdCBG
bG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCkgY29uc3QKK3sKKyAgICAvLyBOb3JtYWxs
eSB0aGUgbmV4dCBsaW5lJ3MgbG9naWNhbCB0b3AgaXMgdGhlIHByZXZpb3VzIGxpbmUncyBsb2dp
Y2FsIGJvdHRvbSwgYnV0IHdoZW4gdGhlIGxpbmUgZW5kcworICAgIC8vIHdpdGggdGhlIGNsZWFy
IHByb3BlcnR5IHNldCwgdGhlIG5leHQgbGluZSBuZWVkcyB0byBjbGVhciB0aGUgZXhpc3Rpbmcg
ZmxvYXRzLgorICAgIGlmIChsaW5lQ29udGVudC5ydW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHByZXZpb3VzTGluZUxvZ2ljYWxCb3R0b207CisgICAgYXV0byYgbGFzdFJ1bkxheW91dEJv
eCA9IGxpbmVDb250ZW50LnJ1bnMubGFzdCgpLmxheW91dEJveCgpOyAKKyAgICBpZiAobGFzdFJ1
bkxheW91dEJveC5zdHlsZSgpLmNsZWFyKCkgPT0gQ2xlYXI6Ok5vbmUpCisgICAgICAgIHJldHVy
biBwcmV2aW91c0xpbmVMb2dpY2FsQm90dG9tOworICAgIGF1dG8gcG9zaXRpb25XaXRoQ2xlYXJh
bmNlID0gZmxvYXRpbmdDb250ZXh0LnZlcnRpY2FsUG9zaXRpb25XaXRoQ2xlYXJhbmNlKGxhc3RS
dW5MYXlvdXRCb3gpOworICAgIGlmICghcG9zaXRpb25XaXRoQ2xlYXJhbmNlKQorICAgICAgICBy
ZXR1cm4gcHJldmlvdXNMaW5lTG9naWNhbEJvdHRvbTsKKyAgICByZXR1cm4gc3RkOjptYXgocHJl
dmlvdXNMaW5lTG9naWNhbEJvdHRvbSwgSW5saW5lTGF5b3V0VW5pdChwb3NpdGlvbldpdGhDbGVh
cmFuY2UtPnBvc2l0aW9uKSk7Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBJbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnk6OmlubGluZUJsb2NrQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJv
eCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4
dFJvb3QuaXNJbkZsb3coKSk7CisKKyAgICAvLyAxMC4zLjEwICdJbmxpbmUtYmxvY2snLCByZXBs
YWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdworCisgICAgLy8gRXhhY3RseSBhcyBpbmxpbmUg
cmVwbGFjZWQgZWxlbWVudHMuCisgICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5pc1JlcGxh
Y2VkQm94KCkpCisgICAgICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1h
cmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KSwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCB7IH0sIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKKworICAg
IC8vIDEwLjMuOSAnSW5saW5lLWJsb2NrJywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1h
bCBmbG93CisKKyAgICAvLyBJZiAnd2lkdGgnIGlzICdhdXRvJywgdGhlIHVzZWQgdmFsdWUgaXMg
dGhlIHNocmluay10by1maXQgd2lkdGggYXMgZm9yIGZsb2F0aW5nIGVsZW1lbnRzLgorICAgIC8v
IEEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nIGZvciAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4t
cmlnaHQnIGJlY29tZXMgYSB1c2VkIHZhbHVlIG9mICcwJy4KKyAgICAvLyAjMQorICAgIGF1dG8g
d2lkdGggPSBjb21wdXRlZFZhbHVlKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5zdHlsZSgpLmxvZ2lj
YWxXaWR0aCgpLCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKKyAgICBpZiAo
IXdpZHRoKQorICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgoZm9ybWF0dGluZ0NvbnRl
eHRSb290LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKKworICAgIC8vICMy
CisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBGb3JtYXR0aW5nR2VvbWV0cnk6
OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGhvcml6b250
YWxDb25zdHJhaW50cyk7CisKKyAgICByZXR1cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsgKndp
ZHRoLCB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDBfbHUpLCBjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMF9sdSkgfSB9OworfQorCitDb250ZW50
SGVpZ2h0QW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6aW5saW5lQmxvY2tDb250
ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRp
Y2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGxheW91dEJveC5pc0luRmxvdygpKTsKKworICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQg
ZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAn
aW5saW5lLWJsb2NrJyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRp
bmcgcmVwbGFjZWQgZWxlbWVudHMKKyAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkK
KyAgICAgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihkb3du
Y2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0s
IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7CisKKyAgICAvLyAxMC42LjYgQ29tcGxpY2F0ZWQg
Y2FzZXMKKyAgICAvLyAtICdJbmxpbmUtYmxvY2snLCBub24tcmVwbGFjZWQgZWxlbWVudHMuCisg
ICAgcmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Cit9CisKK2Jvb2wgSW5saW5lRm9ybWF0dGlu
Z0dlb21ldHJ5OjppbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGNvbnN0IExpbmVCb3g6Oklu
bGluZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveCwgY29uc3QgTGluZUJveCYgbGluZUJveCkgY29u
c3QKK3sKKyAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSB8fCBpbmxpbmVMZXZl
bEJveC5pc0xpbmVCcmVha0JveCgpKQorICAgICAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5pblN0
YW5kYXJkc01vZGUoKSA/IHRydWUgOiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzKGZvcm1hdHRpbmdD
b250ZXh0KCkpLmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxp
bmVCb3gpOworICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0F0b21pY0lubGluZUxldmVsQm94KCkp
IHsKKyAgICAgICAgaWYgKGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIFdoaWxlIGluIHByYWN0aWNlIHdo
ZW4gdGhlIG5lZ2F0aXZlIHZlcnRpY2FsIG1hcmdpbiBtYWtlcyB0aGUgbGF5b3V0IGJvdW5kcyBl
bXB0eSAoZS5nOiBoZWlnaHQ6IDEwMHB4OyBtYXJnaW4tdG9wOiAtMTAwcHg7KSwgYW5kIHRoaXMg
aW5saW5lCisgICAgICAgIC8vIGxldmVsIGJveCBjb250cmlidXRlcyAwcHggdG8gdGhlIGxpbmUg
Ym94IGhlaWdodCwgaXQgc3RpbGwgbmVlZHMgdG8gYmUgdGFrZW4gaW50byBhY2NvdW50IHdoaWxl
IGNvbXB1dGluZyBsaW5lIGJveCBnZW9tZXRyaWVzLgorICAgICAgICBhdXRvJiBib3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goaW5saW5lTGV2ZWxCb3gubGF5
b3V0Qm94KCkpOworICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgfHwg
Ym94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2ZkODRjYjA1M2Q3ZGE0YzZiNGI1YmMyYmRjNTc3ZmU2
MTE1YjIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAgLTAsMCArMSw1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIElubGluZUZvcm1h
dHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nR2VvbWV0cnkgeworcHVibGljOgorICAg
IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYp
OworCisgICAgTGluZUJveCBsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6
OkxpbmVDb250ZW50Jik7CisgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yTmV4dExp
bmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgSW5saW5lTGF5b3V0VW5pdCBwcmV2
aW91c0xpbmVMb2dpY2FsQm90dG9tLCBjb25zdCBGbG9hdGluZ0NvbnRleHQmKSBjb25zdDsKKwor
ICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5saW5lQmxvY2tDb250ZW50SGVpZ2h0QW5kTWFy
Z2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJy
aWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBp
bmxpbmVCbG9ja0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9u
dGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOworCisg
ICAgYm9vbCBpbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGNvbnN0IExpbmVCb3g6OklubGlu
ZUxldmVsQm94JiwgY29uc3QgTGluZUJveCYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGNvbnN0
IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5nR2VvbWV0cnk6
OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CisKK307CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9Jbmxp
bmVGb3JtYXR0aW5nUXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdRdWlya3MuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5
NGQ5NWExYjc3ZDU0MTliODhhM2Y2MGFiYTkzMjE2NzI0ODkzZjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVG
b3JtYXR0aW5nUXVpcmtzLmNwcApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmgiCisKKyNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkxheW91dEJv
eEdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgewor
CitJbmxpbmVGb3JtYXR0aW5nUXVpcmtzOjpJbmxpbmVGb3JtYXR0aW5nUXVpcmtzKGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IEZv
cm1hdHRpbmdRdWlya3MoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCit7Cit9CisKK0lubGluZUxh
eW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ1F1aXJrczo6aW5pdGlhbExpbmVIZWlnaHQoKSBjb25z
dAoreworICAgIEFTU0VSVCghbGF5b3V0U3RhdGUoKS5pblN0YW5kYXJkc01vZGUoKSk7CisgICAg
Ly8gTmVnYXRpdmUgbGluZUhlaWdodCB2YWx1ZSBtZWFucyB0aGUgbGluZS1oZWlnaHQgaXMgbm90
IHNldAorICAgIGF1dG8mIHJvb3RTdHlsZSA9IGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpLnN0
eWxlKCk7CisgICAgcmV0dXJuIHJvb3RTdHlsZS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpID8g
cm9vdFN0eWxlLmZvbnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKSA6IHJvb3RTdHlsZS5jb21wdXRl
ZExpbmVIZWlnaHQoKTsKK30KKworYm9vbCBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzOjppbmxpbmVM
ZXZlbEJveEFmZmVjdHNMaW5lQm94KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94JiBpbmxp
bmVMZXZlbEJveCwgY29uc3QgTGluZUJveCYgbGluZUJveCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
IWxheW91dFN0YXRlKCkuaW5TdGFuZGFyZHNNb2RlKCkpOworICAgIGlmIChpbmxpbmVMZXZlbEJv
eC5pc0xpbmVCcmVha0JveCgpKSB7CisgICAgICAgIC8vIEluIHF1aXJrcyBtb2RlIGxpbmVicmVh
ayBib3hlcyAoPGJyPikgc3RvcCBhZmZlY3RpbmcgdGhlIGxpbmUgYm94IHdoZW4gKGFzc3VtZSA8
YnI+IGlzIG5lc3RlZCBlLmcuIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwMHB4Ij48YnI+PC9z
cGFuPikKKyAgICAgICAgLy8gMS4gdGhlIHJvb3QgaW5saW5lIGJveCBoYXMgY29udGVudCA8ZGl2
PmNvbnRlbnQ8YnI+L2Rpdj4KKyAgICAgICAgLy8gMi4gdGhlcmUncyBhdCBsZWFzdCBvbmUgYXRv
bWljIGlubGluZSBsZXZlbCBib3ggb24gdGhlIGxpbmUgZS5nIDxkaXY+PGltZz48YnI+PC9kaXY+
IG9yIDxkaXY+PHNwYW4+PGltZz48L3NwYW4+PGJyPjwvZGl2PgorICAgICAgICAvLyAzLiB0aGVy
ZSdzIGF0IGxlYXN0IG9uZSBpbmxpbmUgYm94IHdpdGggY29udGVudCBlLmcuIDxkaXY+PHNwYW4+
Y29udGVudDwvc3Bhbj48YnI+PC9kaXY+CisgICAgICAgIGlmIChsaW5lQm94LnJvb3RJbmxpbmVC
b3goKS5oYXNDb250ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChsaW5lQm94Lmhhc0F0b21pY0lubGluZUxldmVsQm94KCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgZWl0aGVyIGhhdmUgb25seSB0aGUg
PGJyPiBvbiB0aGUgbGluZSBvciBpbmxpbmUgYm94ZXMgd2l0aCBvciB3aXRob3V0IGNvbnRlbnQu
CisgICAgICAgIGF1dG8mIGlubGluZUxldmVsQm94ZXMgPSBsaW5lQm94Lm5vblJvb3RJbmxpbmVM
ZXZlbEJveGVzKCk7CisgICAgICAgIEFTU0VSVCghaW5saW5lTGV2ZWxCb3hlcy5pc0VtcHR5KCkp
OworICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3hlcy5zaXplKCkgPT0gMSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJv
eC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0
IGVtcHR5IGlubGluZSBib3hlcyBlLmcuIDxkaXY+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj48
YnI+PC9kaXY+CisgICAgICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSAm
JiBpbmxpbmVMZXZlbEJveC5oYXNDb250ZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoaW5s
aW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSkgeworICAgICAgICAvLyBJbmxpbmUgYm94ZXMgKGUu
Zy4gcm9vdCBpbmxpbmUgYm94IG9yIDxzcGFuPikgYWZmZWN0cyBsaW5lIGJveGVzIGVpdGhlciB0
aHJvdWdoIHRoZSBzdHJ1dCBvciBhY3R1YWwgY29udGVudC4KKyAgICAgICAgaWYgKGlubGluZUxl
dmVsQm94Lmhhc0NvbnRlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoaW5saW5lTGV2ZWxCb3guaXNSb290SW5saW5lQm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8g
c2hvdWxkUm9vdElubGluZUJveFdpdGhOb0NvbnRlbnRTdHJldGNoTGluZUJveCA9IFsmXSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlubGluZUxldmVsQm94LmxheW91dEJveCgpLnN0eWxlKCkubGlu
ZUhlaWdodCgpLmlzTmVnYXRpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIC8vIFRoZSByb290IGlubGluZSBib3ggd2l0aCBub24taW5pdGlh
bCBsaW5lIGhlaWdodCB2YWx1ZSBzdHJldGNoZXMgdGhlIGxpbmUgYm94IGV2ZW4gd2hlbiByb290
IGhhcyBubyBjb250ZW50CisgICAgICAgICAgICAgICAgLy8gYnV0IHRoZXJlJ3MgYXQgbGVhc3Qg
b25lIGlubGluZSBib3ggd2l0aCBjb250ZW50LgorICAgICAgICAgICAgICAgIC8vIGUuZy4gPGRp
diBzdHlsZT0ibGluZS1oZWlnaHQ6IDEwMHB4OyI+PHNwYW4+Y29udGVudDwvc3Bhbj48L2Rpdj4K
KyAgICAgICAgICAgICAgICBpZiAoIWxpbmVCb3guaGFzSW5saW5lQm94KCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGlubGlu
ZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5l
TGV2ZWxCb3guaGFzQ29udGVudCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gc2hvdWxkUm9vdElubGluZUJveFdpdGhO
b0NvbnRlbnRTdHJldGNoTGluZUJveCgpOworICAgICAgICB9CisgICAgICAgIC8vIE5vbi1yb290
IGlubGluZSBib3hlcyAoZS5nLiA8c3Bhbj4pLgorICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goaW5saW5lTGV2ZWxCb3gubGF5b3V0
Qm94KCkpOworICAgICAgICBpZiAoYm94R2VvbWV0cnkuaG9yaXpvbnRhbEJvcmRlcigpIHx8IGJv
eEdlb21ldHJ5Lmhvcml6b250YWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSkgeworICAgICAgICAg
ICAgLy8gSG9yaXpvbnRhbCBib3JkZXIgYW5kIHBhZGRpbmcgbWFrZSB0aGUgaW5saW5lIGJveCBz
dHJldGNoIHRoZSBsaW5lIChlLmcuIDxzcGFuIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyI+PC9zcGFu
PikuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzOjpoYXNTb2Z0V3JhcE9wcG9ydHVu
aXR5QXRJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFmb3JtYXR0aW5nQ29udGV4dCgpLnJv
b3QoKS5pc1RhYmxlQ2VsbCgpOworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0
dGluZ1F1aXJrcy5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9p
bmxpbmUvSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5MjdhMDg0NzQ2MDgz
MDY2OTFjYWY5ZWY5MWE1NTM0ZDc5MGMwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nUXVp
cmtzLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5n
UXVpcmtzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitj
bGFzcyBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzIDogcHVibGljIEZvcm1hdHRpbmdRdWlya3Mgewor
cHVibGljOgorICAgIElubGluZUZvcm1hdHRpbmdRdWlya3MoY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmKTsKKworICAgIElubGluZUxheW91dFVuaXQgaW5pdGlhbExpbmVIZWlnaHQoKSBj
b25zdDsKKyAgICBib29sIGhhc1NvZnRXcmFwT3Bwb3J0dW5pdHlBdEltYWdlKCkgY29uc3Q7Cisg
ICAgYm9vbCBpbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGNvbnN0IExpbmVCb3g6OklubGlu
ZUxldmVsQm94JiwgY29uc3QgTGluZUJveCYpIGNvbnN0OworfTsKKworfQorfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5s
aW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcAppbmRleCA2YzYyNmVhMGVl
NWE2M2E0YTk2MmIxNTVjZTYxMDY1MzBmY2UyMmYyLi4xNTgwMGIxOGFmNzJhZWE1ZmJhZjk4ODUy
MGEyYmRjMzI5Njc2NzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJ1aWxkZXIu
Y3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzQXRTb2Z0V3JhcE9w
cG9ydHVuaXR5KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmUKICAgICBpZiAo
Y3VycmVudC5pc0JveCgpIHx8IG5leHQuaXNCb3goKSkgewogICAgICAgICBhdXRvIGlzSW1hZ2VD
b250ZW50ID0gY3VycmVudC5sYXlvdXRCb3goKS5pc0ltYWdlKCkgfHwgbmV4dC5sYXlvdXRCb3go
KS5pc0ltYWdlKCk7CiAgICAgICAgIGlmIChpc0ltYWdlQ29udGVudCkKLSAgICAgICAgICAgIHJl
dHVybiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5xdWlya3MoKS5oYXNTb2Z0V3JhcE9wcG9ydHVu
aXR5QXRJbWFnZSgpOworICAgICAgICAgICAgcmV0dXJuIElubGluZUZvcm1hdHRpbmdRdWlya3Mo
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQpLmhhc1NvZnRXcmFwT3Bwb3J0dW5pdHlBdEltYWdlKCk7
CiAgICAgICAgIC8vIFt0ZXh0XVtpbmxpbmUgYm94IHN0YXJ0XVtpbmxpbmUgYm94IGVuZF1baW5s
aW5lIGJveF0gKHRleHQ8c3Bhbj48L3NwYW4+PGltZz4pIDogdGhlcmUncyBhIHNvZnQgd3JhcCBv
cHBvcnR1bml0eSBiZXR3ZWVuIHRoZSBbdGV4dF0gYW5kIFtpbWddLgogICAgICAgICAvLyBUaGUg
bGluZSBicmVha2luZyBiZWhhdmlvciBvZiBhIHJlcGxhY2VkIGVsZW1lbnQgb3Igb3RoZXIgYXRv
bWljIGlubGluZSBpcyBlcXVpdmFsZW50IHRvIGFuIGlkZW9ncmFwaGljIGNoYXJhY3Rlci4KICAg
ICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdD
b250ZXh0LmNwcAppbmRleCA5MDJhZjdjNWVkODhkNTA0Y2FjNDI1YTEzNTIxMDA4YjZlNThiOWFj
Li41NDFhMDRhNjQzMzQ0OGVhNWIyYmMyMWUxMThiMDY1ZjVmZGJkZWYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0
dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4
dC5oIgogI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKKyNpbmNsdWRl
ICJUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1N0
YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMzAzLDcgKzMw
NCw3IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Q2VsbChjb25zdCBUYWJs
ZUdyaWQ6OkNlbGwmIGNlbGwsIExheW91dFVuaXQKICAgICBjZWxsQm94R2VvbWV0cnkuc2V0Q29u
dGVudEJveEhlaWdodChnZW9tZXRyeSgpLmNlbGxIZWlnaChjZWxsQm94KSk7CiB9CiAKLUZvcm1h
dHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRhYmxlRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpCitJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cygpCiB7CiAgICAgQVNTRVJUKCFyb290KCkuaXNTaXplQ29udGFpbm1lbnRC
b3goKSk7CiAgICAgLy8gVGFibGVzIGhhdmUgYSBzbGlnaHR5IGRpZmZlcmVudCBjb25jZXB0IG9m
IHNocmluayB0byBmaXQuIEl0J3MgcmVhbGx5IG9ubHkgZGlmZmVyZW50IHdpdGggbm9uLWF1dG8g
IndpZHRoIiB2YWx1ZXMsIHdoZXJlCkBAIC0zNzAsNyArMzcxLDcgQEAgVW5pcXVlUmVmPFRhYmxl
R3JpZD4gVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6ZW5zdXJlVGFibGVHcmlkKGNvbnN0IENvbnRh
aW5lckJveCYKICAgICByZXR1cm4gdGFibGVHcmlkOwogfQogCi1Gb3JtYXR0aW5nQ29udGV4dDo6
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
ZFByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucygpCitJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKCkK
IHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsK
ICAgICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlLnRhYmxlR3JpZCgpOwpAQCAtNDEyLDcg
KzQxMyw3IEBAIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkUHJlCiAgICAgICAgIGZpeGVkV2lkdGhDb2x1
bW5zLmFwcGVuZChmaXhlZFdpZHRoKCkpOwogICAgIH0KIAotICAgIFZlY3RvcjxGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cz4gY29sdW1uSW50cmluc2ljV2lkdGhz
KGNvbHVtbkxpc3Quc2l6ZSgpKTsKKyAgICBWZWN0b3I8SW50cmluc2ljV2lkdGhDb25zdHJhaW50
cz4gY29sdW1uSW50cmluc2ljV2lkdGhzKGNvbHVtbkxpc3Quc2l6ZSgpKTsKICAgICAvLyAzLiBD
b2xsZWN0IGhlIG1pbi9tYXggd2lkdGggZm9yIGVhY2ggY29sdW1uIGJ1dCBpZ25vcmUgY29sdW1u
IHNwYW5zIGZvciBub3cuCiAgICAgVmVjdG9yPFNsb3RQb3NpdGlvbj4gc3Bhbm5pbmdDZWxsUG9z
aXRpb25MaXN0OwogICAgIHNpemVfdCBudW1iZXJPZkFjdHVhbENvbHVtbnMgPSAwOwpAQCAtNDI4
LDcgKzQyOSw3IEBAIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkUHJlCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvIGNvbHVtbkZpeGVkV2lkdGgg
PSBmaXhlZFdpZHRoQ29sdW1uc1tjb2x1bW5JbmRleF07Ci0gICAgICAgICAgICBhdXRvIHdpZHRo
Q29uc3RyYWludHMgPSAhY29sdW1uRml4ZWRXaWR0aCA/IHNsb3Qud2lkdGhDb25zdHJhaW50cygp
IDogRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyAqY29sdW1u
Rml4ZWRXaWR0aCwgKmNvbHVtbkZpeGVkV2lkdGggfTsKKyAgICAgICAgICAgIGF1dG8gd2lkdGhD
b25zdHJhaW50cyA9ICFjb2x1bW5GaXhlZFdpZHRoID8gc2xvdC53aWR0aENvbnN0cmFpbnRzKCkg
OiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgKmNvbHVtbkZpeGVkV2lkdGgsICpjb2x1bW5G
aXhlZFdpZHRoIH07CiAgICAgICAgICAgICBjb2x1bW5JbnRyaW5zaWNXaWR0aHNbY29sdW1uSW5k
ZXhdLm1pbmltdW0gPSBzdGQ6Om1heCh3aWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGNvbHVtbklu
dHJpbnNpY1dpZHRoc1tjb2x1bW5JbmRleF0ubWluaW11bSk7CiAgICAgICAgICAgICBjb2x1bW5J
bnRyaW5zaWNXaWR0aHNbY29sdW1uSW5kZXhdLm1heGltdW0gPSBzdGQ6Om1heCh3aWR0aENvbnN0
cmFpbnRzLm1heGltdW0sIGNvbHVtbkludHJpbnNpY1dpZHRoc1tjb2x1bW5JbmRleF0ubWF4aW11
bSk7CiAgICAgICAgIH0KQEAgLTUxNCw2ICs1MTUsMTEgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlQW5kRGlzdHJpYnV0ZUV4dHJhU3BhY2UoTGF5b3V0VW5pdCBhdmFpbGFi
bGUKICAgICB9CiB9CiAKK1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IFRhYmxlRm9ybWF0dGluZ0Nv
bnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGFibGVGb3JtYXR0aW5nR2Vv
bWV0cnkoKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpKTsKK30KKwogfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3Rh
YmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDFmMzBk
ZTEzNTQ1NjY1NTgxZWI5NDlhMjdiODBkZjRlMTIyMjVlNmYuLjJiMWYwYWI5NGEzMTQwMmFmMzRh
YThhY2NkYWMwMzJiY2FjYTJhMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0
aW5nQ29udGV4dC5oCkBAIC0zNyw2ICszNyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBMYXlvdXQgewogCiBjbGFzcyBJbnZhbGlkYXRpb25TdGF0ZTsKK2NsYXNzIFRhYmxlRm9y
bWF0dGluZ0dlb21ldHJ5OworCiAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGxheW91dCBs
b2dpYyBmb3IgdGFibGUgZm9ybWF0dGluZyBjb250ZXh0cy4KIC8vIGh0dHBzOi8vd3d3LnczLm9y
Zy9UUi9DU1MyMi90YWJsZXMuaHRtbAogY2xhc3MgVGFibGVGb3JtYXR0aW5nQ29udGV4dCBmaW5h
bCA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4dCB7CkBAIC02NCwzNCArNjYsNiBAQCBwcml2YXRl
OgogICAgICAgICBjb25zdCBUYWJsZUdyaWQmIG1fZ3JpZDsKICAgICB9OwogCi0gICAgY2xhc3Mg
R2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIExheW91dFVuaXQgY2VsbEhlaWdoKGNvbnN0IENvbnRhaW5lckJveCYpIGNv
bnN0OwotICAgICAgICBFZGdlcyBjb21wdXRlZENlbGxCb3JkZXIoY29uc3QgVGFibGVHcmlkOjpD
ZWxsJikgY29uc3Q7Ci0gICAgICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkQ29sdW1u
V2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1bW5Cb3gpOwotICAgICAgICBGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzRm9yQ2VsbChjb25zdCBUYWJsZUdyaWQ6OkNlbGwmKTsKLSAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCB1c2VkQmFzZWxpbmVGb3JDZWxsKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCk7Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgVGFibGVGb3JtYXR0aW5nQ29udGV4
dDsKLSAgICAgICAgR2VvbWV0cnkoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0
IFRhYmxlR3JpZCYpOwotCi0gICAgICAgIGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIGZv
cm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8VGFibGVGb3JtYXR0aW5n
Q29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCgp
KTsgfQotICAgICAgICBjb25zdCBUYWJsZUdyaWQmIG1fZ3JpZDsKLSAgICB9OwotICAgIFRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gR2Vv
bWV0cnkoKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpKTsgfQotCi0gICAgY2xh
c3MgUXVpcmtzIDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3MgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgUXVpcmtzKGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmKTsKLQotICAg
ICAgICBib29sIHNob3VsZElnbm9yZUNoaWxkQ29udGVudFZlcnRpY2FsTWFyZ2luKGNvbnN0IENv
bnRhaW5lckJveCYpIGNvbnN0OwotCi0gICAgICAgIGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRl
eHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8VGFibGVGb3Jt
YXR0aW5nQ29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6Zm9ybWF0dGluZ0NvbnRl
eHQoKSk7IH0KLSAgICAgICAgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgZ2VvbWV0
cnkoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5KCk7IH0KLSAg
ICB9OwotICAgIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyBxdWlya3MoKSBjb25zdCB7
IHJldHVybiBRdWlya3MoKnRoaXMpOyB9Ci0KICAgICBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpU
YWJsZUxheW91dCB0YWJsZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIFRhYmxlTGF5b3V0KCp0aGlz
LCBmb3JtYXR0aW5nU3RhdGUoKS50YWJsZUdyaWQoKSk7IH0KIAogICAgIEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7
CkBAIC0xMDMsMjEgKzc3LDExIEBAIHByaXZhdGU6CiAgICAgSW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyBjb21wdXRlZFByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucygpOwogICAgIHZvaWQgY29tcHV0
ZUFuZERpc3RyaWJ1dGVFeHRyYVNwYWNlKExheW91dFVuaXQgYXZhaWxhYmxlSG9yaXpvbnRhbFNw
YWNlLCBPcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlKTsKIAorICAg
IFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3Q7CiAgICAgY29uc3QgVGFi
bGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25j
YXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0
YXRlKCkpOyB9CiAgICAgVGFibGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsg
cmV0dXJuIGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6
Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiB9OwogCi1pbmxpbmUgVGFibGVGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6Okdlb21ldHJ5KGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIHRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IFRhYmxlR3JpZCYgZ3JpZCkKLSAgICA6IEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeSh0YWJsZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV9ncmlk
KGdyaWQpCi17Ci19Ci0KLWlubGluZSBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OlF1
aXJrcyhjb25zdCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0JiB0YWJsZUZvcm1hdHRpbmdDb250ZXh0
KQotICAgIDogRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyh0YWJsZUZvcm1hdHRpbmdDb250ZXh0
KQotewotfQotCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDczMjM5MjY5NGY2ZTdhODI0MjljMjBhNWU2MTA5ODQwZTJhZWRjOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIklubGluZUZvcm1hdHRp
bmdTdGF0ZS5oIgotI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCi0jaW5jbHVkZSAiTGF5
b3V0Q29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dERlc2NlbmRhbnRJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKLSNpbmNsdWRlICJUYWJsZUZv
cm1hdHRpbmdTdGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0
IHsKLQotTGF5b3V0VW5pdCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y2VsbEhl
aWdoKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCkgY29uc3QKLXsKLSAgICBBU1NFUlQoY2Vs
bEJveC5pc0luRmxvdygpKTsKLSAgICBhdXRvIGNvbnRlbnRIZWlnaHQgPSBMYXlvdXRVbml0IHsg
fTsKLSAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5zaG91bGRJZ25vcmVDaGls
ZENvbnRlbnRWZXJ0aWNhbE1hcmdpbihjZWxsQm94KSkgewotICAgICAgICBBU1NFUlQoY2VsbEJv
eC5maXJzdEluRmxvd0NoaWxkKCkpOwotICAgICAgICBhdXRvIGZvcm1hdHRpbmdDb250ZXh0ID0g
dGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKLSAgICAgICAgYXV0byYgZmlyc3RJbkZsb3dDaGls
ZCA9ICpjZWxsQm94LmZpcnN0SW5GbG93Q2hpbGQoKTsKLSAgICAgICAgYXV0byYgbGFzdEluRmxv
d0NoaWxkID0gKmNlbGxCb3gubGFzdEluRmxvd0NoaWxkKCk7Ci0gICAgICAgIGF1dG8mIGZpcnN0
SW5GbG93Q2hpbGRHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGZp
cnN0SW5GbG93Q2hpbGQsIEVzY2FwZVJlYXNvbjo6VGFibGVRdWlya05lZWRzR2VvbWV0cnlGcm9t
RXN0YWJsaXNoZWRGb3JtYXR0aW5nQ29udGV4dCk7Ci0gICAgICAgIGF1dG8mIGxhc3RJbkZsb3dD
aGlsZEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGFzdEluRmxv
d0NoaWxkLCBFc2NhcGVSZWFzb246OlRhYmxlUXVpcmtOZWVkc0dlb21ldHJ5RnJvbUVzdGFibGlz
aGVkRm9ybWF0dGluZ0NvbnRleHQpOwotCi0gICAgICAgIGF1dG8gdG9wID0gZmlyc3RJbkZsb3dD
aGlsZC5zdHlsZSgpLmhhc01hcmdpbkJlZm9yZVF1aXJrKCkgPyBCb3hHZW9tZXRyeTo6Ym9yZGVy
Qm94UmVjdChmaXJzdEluRmxvd0NoaWxkR2VvbWV0cnkpLnRvcCgpIDogQm94R2VvbWV0cnk6Om1h
cmdpbkJveFJlY3QoZmlyc3RJbkZsb3dDaGlsZEdlb21ldHJ5KS50b3AoKTsKLSAgICAgICAgYXV0
byBib3R0b20gPSBsYXN0SW5GbG93Q2hpbGQuc3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCkg
PyBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChsYXN0SW5GbG93Q2hpbGRHZW9tZXRyeSkuYm90
dG9tKCkgOiBCb3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChsYXN0SW5GbG93Q2hpbGRHZW9tZXRy
eSkuYm90dG9tKCk7Ci0gICAgICAgIGNvbnRlbnRIZWlnaHQgPSBib3R0b20gLSB0b3A7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGNvbnRlbnRIZWlnaHQgPSBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGlu
Z0NvbnRleHRSb290KGNlbGxCb3gpOwotICAgIHJldHVybiBzdGQ6Om1heChjb21wdXRlZEhlaWdo
dChjZWxsQm94KS52YWx1ZU9yKDBfbHUpLCBjb250ZW50SGVpZ2h0KTsKLX0KLQotRWRnZXMgVGFi
bGVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkQ2VsbEJvcmRlcihjb25zdCBU
YWJsZUdyaWQ6OkNlbGwmIGNlbGwpIGNvbnN0Ci17Ci0gICAgYXV0byYgY2VsbEJveCA9IGNlbGwu
Ym94KCk7Ci0gICAgYXV0byBib3JkZXIgPSBjb21wdXRlZEJvcmRlcihjZWxsQm94KTsKLSAgICBh
dXRvIGNvbGxhcHNlZEJvcmRlciA9IG1fZ3JpZC5jb2xsYXBzZWRCb3JkZXIoKTsKLSAgICBpZiAo
IWNvbGxhcHNlZEJvcmRlcikKLSAgICAgICAgcmV0dXJuIGJvcmRlcjsKLQotICAgIC8vIFdlIG1p
Z2h0IHdhbnQgdG8gY2FjaGUgdGhlc2UgY29sbGFwc2VkIGJvcmRlcnMgb24gdGhlIGdyaWQuCi0g
ICAgYXV0byBjZWxsUG9zaXRpb24gPSBjZWxsLnBvc2l0aW9uKCk7Ci0gICAgLy8gQ29sbGFwc2Vk
IGJvcmRlciBsZWZ0IGZyb20gdGFibGUgYW5kIGFkamFjZW50IGNlbGxzLgotICAgIGlmICghY2Vs
bFBvc2l0aW9uLmNvbHVtbikKLSAgICAgICAgYm9yZGVyLmhvcml6b250YWwubGVmdCA9IGNvbGxh
cHNlZEJvcmRlci0+aG9yaXpvbnRhbC5sZWZ0IC8gMjsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0
byBhZGphY2VudEJvcmRlclJpZ2h0ID0gY29tcHV0ZWRCb3JkZXIobV9ncmlkLnNsb3QoeyBjZWxs
UG9zaXRpb24uY29sdW1uIC0gMSwgY2VsbFBvc2l0aW9uLnJvdyB9KS0+Y2VsbCgpLmJveCgpKS5o
b3Jpem9udGFsLnJpZ2h0OwotICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5sZWZ0ID0gc3RkOjpt
YXgoYm9yZGVyLmhvcml6b250YWwubGVmdCwgYWRqYWNlbnRCb3JkZXJSaWdodCkgLyAyOwotICAg
IH0KLSAgICAvLyBDb2xsYXBzZWQgYm9yZGVyIHJpZ2h0IGZyb20gdGFibGUgYW5kIGFkamFjZW50
IGNlbGxzLgotICAgIGlmIChjZWxsUG9zaXRpb24uY29sdW1uID09IG1fZ3JpZC5jb2x1bW5zKCku
c2l6ZSgpIC0gMSkKLSAgICAgICAgYm9yZGVyLmhvcml6b250YWwucmlnaHQgPSBjb2xsYXBzZWRC
b3JkZXItPmhvcml6b250YWwucmlnaHQgLyAyOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGFk
amFjZW50Qm9yZGVyTGVmdCA9IGNvbXB1dGVkQm9yZGVyKG1fZ3JpZC5zbG90KHsgY2VsbFBvc2l0
aW9uLmNvbHVtbiArIDEsIGNlbGxQb3NpdGlvbi5yb3cgfSktPmNlbGwoKS5ib3goKSkuaG9yaXpv
bnRhbC5sZWZ0OwotICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5yaWdodCA9IHN0ZDo6bWF4KGJv
cmRlci5ob3Jpem9udGFsLnJpZ2h0LCBhZGphY2VudEJvcmRlckxlZnQpIC8gMjsKLSAgICB9Ci0g
ICAgLy8gQ29sbGFwc2VkIGJvcmRlciB0b3AgZnJvbSB0YWJsZSwgcm93IGFuZCBhZGphY2VudCBj
ZWxscy4KLSAgICBhdXRvJiByb3dzID0gbV9ncmlkLnJvd3MoKS5saXN0KCk7Ci0gICAgaWYgKCFj
ZWxsUG9zaXRpb24ucm93KQotICAgICAgICBib3JkZXIudmVydGljYWwudG9wID0gY29sbGFwc2Vk
Qm9yZGVyLT52ZXJ0aWNhbC50b3AgLyAyOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGFkamFj
ZW50Qm9yZGVyQm90dG9tID0gY29tcHV0ZWRCb3JkZXIobV9ncmlkLnNsb3QoeyBjZWxsUG9zaXRp
b24uY29sdW1uLCBjZWxsUG9zaXRpb24ucm93IC0gMSB9KS0+Y2VsbCgpLmJveCgpKS52ZXJ0aWNh
bC5ib3R0b207Ci0gICAgICAgIGF1dG8gYWRqYWNlbnRSb3dCb3R0b20gPSBjb21wdXRlZEJvcmRl
cihyb3dzW2NlbGxQb3NpdGlvbi5yb3cgLSAxXS5ib3goKSkudmVydGljYWwuYm90dG9tOwotICAg
ICAgICBhdXRvIGFkamFjZW50Q29sbGFwc2VkQm9yZGVyID0gc3RkOjptYXgoYWRqYWNlbnRCb3Jk
ZXJCb3R0b20sIGFkamFjZW50Um93Qm90dG9tKTsKLSAgICAgICAgYm9yZGVyLnZlcnRpY2FsLnRv
cCA9IHN0ZDo6bWF4KGJvcmRlci52ZXJ0aWNhbC50b3AsIGFkamFjZW50Q29sbGFwc2VkQm9yZGVy
KSAvIDI7Ci0gICAgfQotICAgIC8vIENvbGxhcHNlZCBib3JkZXIgYm90dG9tIGZyb20gdGFibGUs
IHJvdyBhbmQgYWRqYWNlbnQgY2VsbHMuCi0gICAgaWYgKGNlbGxQb3NpdGlvbi5yb3cgPT0gbV9n
cmlkLnJvd3MoKS5zaXplKCkgLSAxKQotICAgICAgICBib3JkZXIudmVydGljYWwuYm90dG9tID0g
Y29sbGFwc2VkQm9yZGVyLT52ZXJ0aWNhbC5ib3R0b20gLyAyOwotICAgIGVsc2UgewotICAgICAg
ICBhdXRvIGFkamFjZW50Qm9yZGVyVG9wID0gY29tcHV0ZWRCb3JkZXIobV9ncmlkLnNsb3QoeyBj
ZWxsUG9zaXRpb24uY29sdW1uLCBjZWxsUG9zaXRpb24ucm93ICsgMSB9KS0+Y2VsbCgpLmJveCgp
KS52ZXJ0aWNhbC50b3A7Ci0gICAgICAgIGF1dG8gYWRqYWNlbnRSb3dUb3AgPSBjb21wdXRlZEJv
cmRlcihyb3dzW2NlbGxQb3NpdGlvbi5yb3cgKyAxXS5ib3goKSkudmVydGljYWwudG9wOwotICAg
ICAgICBhdXRvIGFkamFjZW50Q29sbGFwc2VkQm9yZGVyID0gc3RkOjptYXgoYWRqYWNlbnRCb3Jk
ZXJUb3AsIGFkamFjZW50Um93VG9wKTsKLSAgICAgICAgYm9yZGVyLnZlcnRpY2FsLmJvdHRvbSA9
IHN0ZDo6bWF4KGJvcmRlci52ZXJ0aWNhbC5ib3R0b20sIGFkamFjZW50Q29sbGFwc2VkQm9yZGVy
KSAvIDI7Ci0gICAgfQotICAgIHJldHVybiBib3JkZXI7Ci19Ci0KLU9wdGlvbmFsPExheW91dFVu
aXQ+IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZENvbHVtbldpZHRo
KGNvbnN0IENvbnRhaW5lckJveCYgY29sdW1uQm94KQotewotICAgIC8vIENoZWNrIGJvdGggc3R5
bGUgYW5kIDxjb2w+J3Mgd2lkdGggYXR0cmlidXRlLgotICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0
IHdoYXQgdG8gZG8gd2l0aCBjYWxjdWxhdGVkIHZhbHVlcywgbGlrZSA8Y29sIHN0eWxlPSJ3aWR0
aDogMTAlIj4uCi0gICAgaWYgKGF1dG8gY29tcHV0ZWRXaWR0aFZhbHVlID0gY29tcHV0ZWRXaWR0
aChjb2x1bW5Cb3gsIHsgfSkpCi0gICAgICAgIHJldHVybiBjb21wdXRlZFdpZHRoVmFsdWU7Ci0g
ICAgcmV0dXJuIGNvbHVtbkJveC5jb2x1bW5XaWR0aCgpOwotfQotCi1Gb3JtYXR0aW5nQ29udGV4
dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGwoY29uc3QgVGFibGVHcmlkOjpD
ZWxsJiBjZWxsKQotewotICAgIGF1dG8mIGNlbGxCb3ggPSBjZWxsLmJveCgpOwotICAgIGF1dG8m
IHN0eWxlID0gY2VsbEJveC5zdHlsZSgpOwotCi0gICAgYXV0byBjb21wdXRlZEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMgPSBbJl0oKSAtPiBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyB7Ci0gICAgICAgIC8vIEV2ZW4gZml4ZWQgd2lkdGggY2VsbHMgZXhwYW5k
IHRvIHRoZWlyIG1pbmltdW0gY29udGVudCB3aWR0aAotICAgICAgICAvLyA8dGQgc3R5bGU9Indp
ZHRoOiAxMHB4Ij50ZXN0X2NvbnRlbnQ8L3RkPiB3aWxsIHNpemUgdG8gbWF4KG1pbmltdW0gY29u
dGVudCB3aWR0aCwgY29tcHV0ZWQgd2lkdGgpLgotICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgPSBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyB7IH07Ci0gICAgICAgIGlmIChjZWxsQm94Lmhhc0NoaWxkKCkpCi0gICAgICAgICAgICBpbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0Nv
bnRleHQoY2VsbEJveCwgbGF5b3V0U3RhdGUoKSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25z
dHJhaW50cygpOwotICAgICAgICBpZiAoYXV0byBmaXhlZFdpZHRoID0gZml4ZWRWYWx1ZShzdHls
ZS5sb2dpY2FsV2lkdGgoKSkpCi0gICAgICAgICAgICByZXR1cm4geyBzdGQ6Om1heChpbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sICpmaXhlZFdpZHRoKSwgc3RkOjptYXgoaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtLCAqZml4ZWRXaWR0aCkgfTsKLSAgICAgICAgcmV0
dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0gICAgfTsKLSAgICAvLyBGSVhNRSBDaGVj
ayBmb3IgYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgPSBjb25zdHJhaW5CeU1pbk1heFdpZHRoKGNlbGxCb3gsIGNvbXB1dGVkSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cygpKTsKLSAgICAvLyBFeHBhbmQgd2l0aCBib3JkZXIKLSAgICBp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLmV4cGFuZChjb21wdXRlZENlbGxCb3JkZXIoY2VsbCku
d2lkdGgoKSk7Ci0gICAgLy8gcGFkZGluZwotICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMu
ZXhwYW5kKGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ0xlZnQoKSkudmFsdWVPcigwKSArIGZpeGVk
VmFsdWUoc3R5bGUucGFkZGluZ1JpZ2h0KCkpLnZhbHVlT3IoMCkpOwotICAgIC8vIGFuZCBtYXJn
aW4KLSAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLmV4cGFuZChmaXhlZFZhbHVlKHN0eWxl
Lm1hcmdpblN0YXJ0KCkpLnZhbHVlT3IoMCkgKyBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpbkVuZCgp
KS52YWx1ZU9yKDApKTsKLSAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKLX0K
LQotCi1JbmxpbmVMYXlvdXRVbml0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojp1
c2VkQmFzZWxpbmVGb3JDZWxsKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCkKLXsKLSAgICAv
LyBUaGUgYmFzZWxpbmUgb2YgYSBjZWxsIGlzIGRlZmluZWQgYXMgdGhlIGJhc2VsaW5lIG9mIHRo
ZSBmaXJzdCBpbi1mbG93IGxpbmUgYm94IGluIHRoZSBjZWxsLAotICAgIC8vIG9yIHRoZSBmaXJz
dCBpbi1mbG93IHRhYmxlLXJvdyBpbiB0aGUgY2VsbCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0Lgot
ICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1Y2ggbGluZSBib3gsIHRoZSBiYXNlbGluZSBpcyB0aGUg
Ym90dG9tIG9mIGNvbnRlbnQgZWRnZSBvZiB0aGUgY2VsbCBib3guCi0gICAgaWYgKGNlbGxCb3gu
ZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gbGF5
b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShjZWxsQm94KS5saW5l
cygpWzBdLmJhc2VsaW5lKCk7Ci0gICAgZm9yIChhdXRvJiBjZWxsRGVzY2VuZGFudCA6IGRlc2Nl
bmRhbnRzT2ZUeXBlPENvbnRhaW5lckJveD4oY2VsbEJveCkpIHsKLSAgICAgICAgaWYgKGNlbGxE
ZXNjZW5kYW50LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAg
ICAgICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlRm9yQ2VsbCA9IGxheW91dFN0YXRlKCku
ZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoY2VsbERlc2NlbmRhbnQpOwotICAgICAg
ICAgICAgaWYgKCFpbmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsLmxpbmVzKCkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsLmxp
bmVzKClbMF0uYmFzZWxpbmUoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2VsbERlc2NlbmRh
bnQuZXN0YWJsaXNoZXNUYWJsZUZvcm1hdHRpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICByZXR1
cm4gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZFRhYmxlRm9ybWF0dGluZ1N0YXRlKGNlbGxEZXNj
ZW5kYW50KS50YWJsZUdyaWQoKS5yb3dzKCkubGlzdCgpWzBdLmJhc2VsaW5lKCk7Ci0gICAgfQot
ICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGNlbGxCb3gpLmNv
bnRlbnRCb3hCb3R0b20oKTsKLX0KLQotfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5n
Q29udGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiNjRhNjJkZmYwNzE0YWQ2OGZhNzg5Njg1ZmJiYjIxMzc0ZmYxNTMy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29u
dGV4dFF1aXJrcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ0NvbnRleHQu
aCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAi
TGF5b3V0Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCi0jaW5jbHVkZSAi
TGF5b3V0U3RhdGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7
Ci0KLWJvb2wgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpzaG91bGRJZ25vcmVDaGls
ZENvbnRlbnRWZXJ0aWNhbE1hcmdpbihjb25zdCBDb250YWluZXJCb3gmIGNlbGxCb3gpIGNvbnN0
Ci17Ci0gICAgLy8gTm9ybWFsbHkgQkZDIHJvb3QgY29udGVudCBoZWlnaHQgdGFrZXMgdGhlIG1h
cmdpbiBib3ggb2YgdGhlIGNoaWxkIGNvbnRlbnQgYXMgdmVydGljYWwgbWFyZ2lucyBkb24ndCBj
b2xsYXBzZSB3aXRoIEJGQyByb290cywKLSAgICAvLyBidXQgdGFibGUgY2VsbCBib3hlcyBkbyBj
b2xsYXBzZSB0aGVpciAobm9uLWV4aXN0aW5nKSBtYXJnaW5zIHdpdGggY2hpbGQgcXVpcmsgbWFy
Z2lucyAoc28gbXVjaCBxdWlyayksIHNvIGhlcmUgd2UgY2hlY2sKLSAgICAvLyBpZiB0aGUgY29u
dGVudCBoZWlnaHQgc2hvdWxkIGluY2x1ZGUgbWFyZ2lucyBvciBub3QuCi0gICAgLy8gZS5nIDx0
YWJsZT48dHI+PHRkPjxwPnRleHQgY29udGVudDwvdGQ+PC90cj48L3RhYmxlPiA8LSA8cD4ncyBx
dWlyayBtYXJnaW4gY29sbGFwc2VzIHdpdGggdGhlIDx0ZD4gc28gaXRzIGNvbnRlbnQKLSAgICAv
LyBoZWlnaHQgc2hvdWxkIG5vdCBpbmNsdWRlIHZlcnRpY2FsIG1hcmdpbnMuCi0gICAgaWYgKCFs
YXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGNlbGxCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFjZWxsQm94Lmhhc0luRmxvd0NoaWxkKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY2VsbEJveC5maXJzdEluRmxvd0NoaWxkKCkt
PnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSB8fCBjZWxsQm94Lmxhc3RJbkZsb3dDaGls
ZCgpLT5zdHlsZSgpLmhhc01hcmdpbkFmdGVyUXVpcmsoKTsKLX0KLQotfQotfQotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFi
bGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzc5NWMzNjc0Mjc5NGExZWNiMGE5MGJkMDM4ZTc0OTFjYTdkOTRlYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUv
VGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5
LmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUg
IklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5Lmgi
CisjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dERlc2NlbmRhbnRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKKyNp
bmNsdWRlICJUYWJsZUZvcm1hdHRpbmdRdWlya3MuaCIKKyNpbmNsdWRlICJUYWJsZUZvcm1hdHRp
bmdTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKwor
VGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OlRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KGNvbnN0IFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQmIHRhYmxlRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IFRhYmxl
R3JpZCYgZ3JpZCkKKyAgICA6IEZvcm1hdHRpbmdHZW9tZXRyeSh0YWJsZUZvcm1hdHRpbmdDb250
ZXh0KQorICAgICwgbV9ncmlkKGdyaWQpCit7Cit9CisKK0xheW91dFVuaXQgVGFibGVGb3JtYXR0
aW5nR2VvbWV0cnk6OmNlbGxIZWlnaChjb25zdCBDb250YWluZXJCb3gmIGNlbGxCb3gpIGNvbnN0
Cit7CisgICAgQVNTRVJUKGNlbGxCb3guaXNJbkZsb3coKSk7CisgICAgYXV0byBjb250ZW50SGVp
Z2h0ID0gTGF5b3V0VW5pdCB7IH07CisgICAgaWYgKGxheW91dFN0YXRlKCkuaW5RdWlya3NNb2Rl
KCkgJiYgVGFibGVGb3JtYXR0aW5nUXVpcmtzOjpzaG91bGRJZ25vcmVDaGlsZENvbnRlbnRWZXJ0
aWNhbE1hcmdpbihjZWxsQm94KSkgeworICAgICAgICBBU1NFUlQoY2VsbEJveC5maXJzdEluRmxv
d0NoaWxkKCkpOworICAgICAgICBhdXRvIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0
dGluZ0NvbnRleHQoKTsKKyAgICAgICAgYXV0byYgZmlyc3RJbkZsb3dDaGlsZCA9ICpjZWxsQm94
LmZpcnN0SW5GbG93Q2hpbGQoKTsKKyAgICAgICAgYXV0byYgbGFzdEluRmxvd0NoaWxkID0gKmNl
bGxCb3gubGFzdEluRmxvd0NoaWxkKCk7CisgICAgICAgIGF1dG8mIGZpcnN0SW5GbG93Q2hpbGRH
ZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGZpcnN0SW5GbG93Q2hp
bGQsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVSZWFzb246OlRhYmxlUXVpcmtOZWVkc0dlb21l
dHJ5RnJvbUVzdGFibGlzaGVkRm9ybWF0dGluZ0NvbnRleHQpOworICAgICAgICBhdXRvJiBsYXN0
SW5GbG93Q2hpbGRHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxh
c3RJbkZsb3dDaGlsZCwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6VGFibGVRdWly
a05lZWRzR2VvbWV0cnlGcm9tRXN0YWJsaXNoZWRGb3JtYXR0aW5nQ29udGV4dCk7CisKKyAgICAg
ICAgYXV0byB0b3AgPSBmaXJzdEluRmxvd0NoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVp
cmsoKSA/IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGZpcnN0SW5GbG93Q2hpbGRHZW9tZXRy
eSkudG9wKCkgOiBCb3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmaXJzdEluRmxvd0NoaWxkR2Vv
bWV0cnkpLnRvcCgpOworICAgICAgICBhdXRvIGJvdHRvbSA9IGxhc3RJbkZsb3dDaGlsZC5zdHls
ZSgpLmhhc01hcmdpbkFmdGVyUXVpcmsoKSA/IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGxh
c3RJbkZsb3dDaGlsZEdlb21ldHJ5KS5ib3R0b20oKSA6IEJveEdlb21ldHJ5OjptYXJnaW5Cb3hS
ZWN0KGxhc3RJbkZsb3dDaGlsZEdlb21ldHJ5KS5ib3R0b20oKTsKKyAgICAgICAgY29udGVudEhl
aWdodCA9IGJvdHRvbSAtIHRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgY29udGVudEhlaWdodCA9
IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY2VsbEJveCk7CisgICAgcmV0
dXJuIHN0ZDo6bWF4KGNvbXB1dGVkSGVpZ2h0KGNlbGxCb3gpLnZhbHVlT3IoMF9sdSksIGNvbnRl
bnRIZWlnaHQpOworfQorCitFZGdlcyBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRD
ZWxsQm9yZGVyKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCkgY29uc3QKK3sKKyAgICBhdXRv
JiBjZWxsQm94ID0gY2VsbC5ib3goKTsKKyAgICBhdXRvIGJvcmRlciA9IGNvbXB1dGVkQm9yZGVy
KGNlbGxCb3gpOworICAgIGF1dG8gY29sbGFwc2VkQm9yZGVyID0gbV9ncmlkLmNvbGxhcHNlZEJv
cmRlcigpOworICAgIGlmICghY29sbGFwc2VkQm9yZGVyKQorICAgICAgICByZXR1cm4gYm9yZGVy
OworCisgICAgLy8gV2UgbWlnaHQgd2FudCB0byBjYWNoZSB0aGVzZSBjb2xsYXBzZWQgYm9yZGVy
cyBvbiB0aGUgZ3JpZC4KKyAgICBhdXRvIGNlbGxQb3NpdGlvbiA9IGNlbGwucG9zaXRpb24oKTsK
KyAgICAvLyBDb2xsYXBzZWQgYm9yZGVyIGxlZnQgZnJvbSB0YWJsZSBhbmQgYWRqYWNlbnQgY2Vs
bHMuCisgICAgaWYgKCFjZWxsUG9zaXRpb24uY29sdW1uKQorICAgICAgICBib3JkZXIuaG9yaXpv
bnRhbC5sZWZ0ID0gY29sbGFwc2VkQm9yZGVyLT5ob3Jpem9udGFsLmxlZnQgLyAyOworICAgIGVs
c2UgeworICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyUmlnaHQgPSBjb21wdXRlZEJvcmRlciht
X2dyaWQuc2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4gLSAxLCBjZWxsUG9zaXRpb24ucm93IH0p
LT5jZWxsKCkuYm94KCkpLmhvcml6b250YWwucmlnaHQ7CisgICAgICAgIGJvcmRlci5ob3Jpem9u
dGFsLmxlZnQgPSBzdGQ6Om1heChib3JkZXIuaG9yaXpvbnRhbC5sZWZ0LCBhZGphY2VudEJvcmRl
clJpZ2h0KSAvIDI7CisgICAgfQorICAgIC8vIENvbGxhcHNlZCBib3JkZXIgcmlnaHQgZnJvbSB0
YWJsZSBhbmQgYWRqYWNlbnQgY2VsbHMuCisgICAgaWYgKGNlbGxQb3NpdGlvbi5jb2x1bW4gPT0g
bV9ncmlkLmNvbHVtbnMoKS5zaXplKCkgLSAxKQorICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5y
aWdodCA9IGNvbGxhcHNlZEJvcmRlci0+aG9yaXpvbnRhbC5yaWdodCAvIDI7CisgICAgZWxzZSB7
CisgICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJMZWZ0ID0gY29tcHV0ZWRCb3JkZXIobV9ncmlk
LnNsb3QoeyBjZWxsUG9zaXRpb24uY29sdW1uICsgMSwgY2VsbFBvc2l0aW9uLnJvdyB9KS0+Y2Vs
bCgpLmJveCgpKS5ob3Jpem9udGFsLmxlZnQ7CisgICAgICAgIGJvcmRlci5ob3Jpem9udGFsLnJp
Z2h0ID0gc3RkOjptYXgoYm9yZGVyLmhvcml6b250YWwucmlnaHQsIGFkamFjZW50Qm9yZGVyTGVm
dCkgLyAyOworICAgIH0KKyAgICAvLyBDb2xsYXBzZWQgYm9yZGVyIHRvcCBmcm9tIHRhYmxlLCBy
b3cgYW5kIGFkamFjZW50IGNlbGxzLgorICAgIGF1dG8mIHJvd3MgPSBtX2dyaWQucm93cygpLmxp
c3QoKTsKKyAgICBpZiAoIWNlbGxQb3NpdGlvbi5yb3cpCisgICAgICAgIGJvcmRlci52ZXJ0aWNh
bC50b3AgPSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLnRvcCAvIDI7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJCb3R0b20gPSBjb21wdXRlZEJvcmRlcihtX2dyaWQu
c2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgLSAxIH0pLT5jZWxs
KCkuYm94KCkpLnZlcnRpY2FsLmJvdHRvbTsKKyAgICAgICAgYXV0byBhZGphY2VudFJvd0JvdHRv
bSA9IGNvbXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyAtIDFdLmJveCgpKS52ZXJ0
aWNhbC5ib3R0b207CisgICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6
Om1heChhZGphY2VudEJvcmRlckJvdHRvbSwgYWRqYWNlbnRSb3dCb3R0b20pOworICAgICAgICBi
b3JkZXIudmVydGljYWwudG9wID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLnRvcCwgYWRqYWNl
bnRDb2xsYXBzZWRCb3JkZXIpIC8gMjsKKyAgICB9CisgICAgLy8gQ29sbGFwc2VkIGJvcmRlciBi
b3R0b20gZnJvbSB0YWJsZSwgcm93IGFuZCBhZGphY2VudCBjZWxscy4KKyAgICBpZiAoY2VsbFBv
c2l0aW9uLnJvdyA9PSBtX2dyaWQucm93cygpLnNpemUoKSAtIDEpCisgICAgICAgIGJvcmRlci52
ZXJ0aWNhbC5ib3R0b20gPSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLmJvdHRvbSAvIDI7Cisg
ICAgZWxzZSB7CisgICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJUb3AgPSBjb21wdXRlZEJvcmRl
cihtX2dyaWQuc2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgKyAx
IH0pLT5jZWxsKCkuYm94KCkpLnZlcnRpY2FsLnRvcDsKKyAgICAgICAgYXV0byBhZGphY2VudFJv
d1RvcCA9IGNvbXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyArIDFdLmJveCgpKS52
ZXJ0aWNhbC50b3A7CisgICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6
Om1heChhZGphY2VudEJvcmRlclRvcCwgYWRqYWNlbnRSb3dUb3ApOworICAgICAgICBib3JkZXIu
dmVydGljYWwuYm90dG9tID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLmJvdHRvbSwgYWRqYWNl
bnRDb2xsYXBzZWRCb3JkZXIpIC8gMjsKKyAgICB9CisgICAgcmV0dXJuIGJvcmRlcjsKK30KKwor
T3B0aW9uYWw8TGF5b3V0VW5pdD4gVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkQ29s
dW1uV2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1bW5Cb3gpCit7CisgICAgLy8gQ2hlY2sg
Ym90aCBzdHlsZSBhbmQgPGNvbD4ncyB3aWR0aCBhdHRyaWJ1dGUuCisgICAgLy8gRklYTUU6IEZp
Z3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGNhbGN1bGF0ZWQgdmFsdWVzLCBsaWtlIDxjb2wgc3R5
bGU9IndpZHRoOiAxMCUiPi4KKyAgICBpZiAoYXV0byBjb21wdXRlZFdpZHRoVmFsdWUgPSBjb21w
dXRlZFdpZHRoKGNvbHVtbkJveCwgeyB9KSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhW
YWx1ZTsKKyAgICByZXR1cm4gY29sdW1uQm94LmNvbHVtbldpZHRoKCk7Cit9CisKK0ludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OmludHJpbnNpY1dpZHRo
Q29uc3RyYWludHNGb3JDZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCkKK3sKKyAgICBh
dXRvJiBjZWxsQm94ID0gY2VsbC5ib3goKTsKKyAgICBhdXRvJiBzdHlsZSA9IGNlbGxCb3guc3R5
bGUoKTsKKworICAgIGF1dG8gY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gWyZd
KCkgLT4gSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7CisgICAgICAgIC8vIEV2ZW4gZml4ZWQg
d2lkdGggY2VsbHMgZXhwYW5kIHRvIHRoZWlyIG1pbmltdW0gY29udGVudCB3aWR0aAorICAgICAg
ICAvLyA8dGQgc3R5bGU9IndpZHRoOiAxMHB4Ij50ZXN0X2NvbnRlbnQ8L3RkPiB3aWxsIHNpemUg
dG8gbWF4KG1pbmltdW0gY29udGVudCB3aWR0aCwgY29tcHV0ZWQgd2lkdGgpLgorICAgICAgICBh
dXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
IHsgfTsKKyAgICAgICAgaWYgKGNlbGxCb3guaGFzQ2hpbGQoKSkKKyAgICAgICAgICAgIGludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29u
dGV4dChjZWxsQm94LCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKCk7CisgICAgICAgIGlmIChhdXRvIGZpeGVkV2lkdGggPSBmaXhlZFZhbHVlKHN0eWxl
LmxvZ2ljYWxXaWR0aCgpKSkKKyAgICAgICAgICAgIHJldHVybiB7IHN0ZDo6bWF4KGludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgKmZpeGVkV2lkdGgpLCBzdGQ6Om1heChpbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sICpmaXhlZFdpZHRoKSB9OworICAgICAgICByZXR1
cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKKyAgICB9OworICAgIC8vIEZJWE1FIENoZWNr
IGZvciBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyA9IGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY2VsbEJveCwgY29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCkpOworICAgIC8vIEV4cGFuZCB3aXRoIGJvcmRlcgorICAgIGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGNvbXB1dGVkQ2VsbEJvcmRlcihjZWxsKS53
aWR0aCgpKTsKKyAgICAvLyBwYWRkaW5nCisgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5l
eHBhbmQoZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nTGVmdCgpKS52YWx1ZU9yKDApICsgZml4ZWRW
YWx1ZShzdHlsZS5wYWRkaW5nUmlnaHQoKSkudmFsdWVPcigwKSk7CisgICAgLy8gYW5kIG1hcmdp
bgorICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGZpeGVkVmFsdWUoc3R5bGUu
bWFyZ2luU3RhcnQoKSkudmFsdWVPcigwKSArIGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luRW5kKCkp
LnZhbHVlT3IoMCkpOworICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOworfQor
CisKK0lubGluZUxheW91dFVuaXQgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OnVzZWRCYXNlbGlu
ZUZvckNlbGwoY29uc3QgQ29udGFpbmVyQm94JiBjZWxsQm94KQoreworICAgIC8vIFRoZSBiYXNl
bGluZSBvZiBhIGNlbGwgaXMgZGVmaW5lZCBhcyB0aGUgYmFzZWxpbmUgb2YgdGhlIGZpcnN0IGlu
LWZsb3cgbGluZSBib3ggaW4gdGhlIGNlbGwsCisgICAgLy8gb3IgdGhlIGZpcnN0IGluLWZsb3cg
dGFibGUtcm93IGluIHRoZSBjZWxsLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCisgICAgLy8gSWYg
dGhlcmUgaXMgbm8gc3VjaCBsaW5lIGJveCwgdGhlIGJhc2VsaW5lIGlzIHRoZSBib3R0b20gb2Yg
Y29udGVudCBlZGdlIG9mIHRoZSBjZWxsIGJveC4KKyAgICBpZiAoY2VsbEJveC5lc3RhYmxpc2hl
c0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBsYXlvdXRTdGF0ZSgp
LmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGNlbGxCb3gpLmxpbmVzKClbMF0uYmFz
ZWxpbmUoKTsKKyAgICBmb3IgKGF1dG8mIGNlbGxEZXNjZW5kYW50IDogZGVzY2VuZGFudHNPZlR5
cGU8Q29udGFpbmVyQm94PihjZWxsQm94KSkgeworICAgICAgICBpZiAoY2VsbERlc2NlbmRhbnQu
ZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICBhdXRv
JiBpbmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hl
ZElubGluZUZvcm1hdHRpbmdTdGF0ZShjZWxsRGVzY2VuZGFudCk7CisgICAgICAgICAgICBpZiAo
IWlubGluZUZvcm1hdHRpbmdTdGF0ZUZvckNlbGwubGluZXMoKS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGlubGluZUZvcm1hdHRpbmdTdGF0ZUZvckNlbGwubGluZXMoKVswXS5i
YXNlbGluZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChjZWxsRGVzY2VuZGFudC5lc3RhYmxp
c2hlc1RhYmxlRm9ybWF0dGluZ0NvbnRleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXRT
dGF0ZSgpLmVzdGFibGlzaGVkVGFibGVGb3JtYXR0aW5nU3RhdGUoY2VsbERlc2NlbmRhbnQpLnRh
YmxlR3JpZCgpLnJvd3MoKS5saXN0KClbMF0uYmFzZWxpbmUoKTsKKyAgICB9CisgICAgcmV0dXJu
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goY2VsbEJveCkuY29udGVudEJveEJv
dHRvbSgpOworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZv
cm1hdHRpbmdHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwY2E1OTFjMzU3ODY1Mjk4NTUxMmQwNWI4
Zjg5NmU2NzkxMmZjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAgLTAs
MCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nR2VvbWV0cnkuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIFRhYmxl
Rm9ybWF0dGluZ0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdHZW9tZXRyeSB7CitwdWJsaWM6
CisgICAgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4
dCYsIGNvbnN0IFRhYmxlR3JpZCYpOworCisgICAgTGF5b3V0VW5pdCBjZWxsSGVpZ2goY29uc3Qg
Q29udGFpbmVyQm94JikgY29uc3Q7CisgICAgRWRnZXMgY29tcHV0ZWRDZWxsQm9yZGVyKGNvbnN0
IFRhYmxlR3JpZDo6Q2VsbCYpIGNvbnN0OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1
dGVkQ29sdW1uV2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1bW5Cb3gpOworICAgIEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGwoY29u
c3QgVGFibGVHcmlkOjpDZWxsJik7CisgICAgSW5saW5lTGF5b3V0VW5pdCB1c2VkQmFzZWxpbmVG
b3JDZWxsKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCk7CisKK3ByaXZhdGU6CisgICAgY29u
c3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5nR2VvbWV0cnk6
OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CisgICAgY29uc3QgVGFibGVHcmlkJiBtX2dyaWQ7Cit9
OworCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdR
dWlya3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzMGViODE4YWMxMGQwM2RkOGUzNmUwMmE5NjM0ZDI5Njhk
MjViMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUYWJsZUZvcm1h
dHRpbmdRdWlya3MuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQor
CisjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94Lmgi
CisjaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIExheW91dCB7CisKK1RhYmxlRm9ybWF0dGluZ1F1aXJrczo6VGFibGVGb3JtYXR0aW5nUXVp
cmtzKGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIHRhYmxlRm9ybWF0dGluZ0NvbnRleHQp
CisgICAgOiBGb3JtYXR0aW5nUXVpcmtzKHRhYmxlRm9ybWF0dGluZ0NvbnRleHQpCit7CisgICAg
QVNTRVJUKGxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkpOworfQorCitib29sIFRhYmxlRm9y
bWF0dGluZ1F1aXJrczo6c2hvdWxkSWdub3JlQ2hpbGRDb250ZW50VmVydGljYWxNYXJnaW4oY29u
c3QgQ29udGFpbmVyQm94JiBjZWxsQm94KQoreworICAgIC8vIE5vcm1hbGx5IEJGQyByb290IGNv
bnRlbnQgaGVpZ2h0IHRha2VzIHRoZSBtYXJnaW4gYm94IG9mIHRoZSBjaGlsZCBjb250ZW50IGFz
IHZlcnRpY2FsIG1hcmdpbnMgZG9uJ3QgY29sbGFwc2Ugd2l0aCBCRkMgcm9vdHMsCisgICAgLy8g
YnV0IHRhYmxlIGNlbGwgYm94ZXMgZG8gY29sbGFwc2UgdGhlaXIgKG5vbi1leGlzdGluZykgbWFy
Z2lucyB3aXRoIGNoaWxkIHF1aXJrIG1hcmdpbnMgKHNvIG11Y2ggcXVpcmspLCBzbyBoZXJlIHdl
IGNoZWNrCisgICAgLy8gaWYgdGhlIGNvbnRlbnQgaGVpZ2h0IHNob3VsZCBpbmNsdWRlIG1hcmdp
bnMgb3Igbm90LgorICAgIC8vIGUuZyA8dGFibGU+PHRyPjx0ZD48cD50ZXh0IGNvbnRlbnQ8L3Rk
PjwvdHI+PC90YWJsZT4gPC0gPHA+J3MgcXVpcmsgbWFyZ2luIGNvbGxhcHNlcyB3aXRoIHRoZSA8
dGQ+IHNvIGl0cyBjb250ZW50CisgICAgLy8gaGVpZ2h0IHNob3VsZCBub3QgaW5jbHVkZSB2ZXJ0
aWNhbCBtYXJnaW5zLgorICAgIGlmIChjZWxsQm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghY2VsbEJveC5oYXNJ
bkZsb3dDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNlbGxCb3gu
Zmlyc3RJbkZsb3dDaGlsZCgpLT5zdHlsZSgpLmhhc01hcmdpbkJlZm9yZVF1aXJrKCkgfHwgY2Vs
bEJveC5sYXN0SW5GbG93Q2hpbGQoKS0+c3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCk7Cit9
CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWly
a3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iYWIzZTRmNmIyZDJiYzkyMGU5NGVkZWIzMzRiMGJlNjYzZDVlOTA1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuaApAQCAtMCwwICsxLDQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKKworI2luY2x1ZGUgIkZvcm1hdHRpbmdRdWlya3MuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIFRhYmxlRm9ybWF0dGluZ1F1aXJrcyA6
IHB1YmxpYyBGb3JtYXR0aW5nUXVpcmtzIHsKK3B1YmxpYzoKKyAgICBUYWJsZUZvcm1hdHRpbmdR
dWlya3MoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYpOworCisgICAgc3RhdGljIGJvb2wg
c2hvdWxkSWdub3JlQ2hpbGRDb250ZW50VmVydGljYWxNYXJnaW4oY29uc3QgQ29udGFpbmVyQm94
Jik7Cit9OworCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUdyaWQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVHcmlkLmgKaW5kZXggNjI1YTNm
NDRiZjYyMjFjZTQ2NTI1OTQwOTEzZWNlMTBiMDZhYWNlZi4uYWZlODQxN2M5YWUxOTU3OWE4ZTNi
NjBiNzFjYjNjMDNmM2RjMDljNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUdyaWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlR3JpZC5oCkBAIC01OCw4ICs1OCw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbGxhcHNlZEJvcmRlcihjb25zdCBFZGdlcyYgY29s
bGFwc2VkQm9yZGVyKSB7IG1fY29sbGFwc2VkQm9yZGVyID0gY29sbGFwc2VkQm9yZGVyOyB9CiAg
ICAgT3B0aW9uYWw8RWRnZXM+IGNvbGxhcHNlZEJvcmRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29s
bGFwc2VkQm9yZGVyOyB9CiAKLSAgICB2b2lkIHNldFdpZHRoQ29uc3RyYWludHMoRm9ybWF0dGlu
Z0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25zdHJh
aW50cykgeyBtX2ludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzOyB9Ci0gICAgT3B0aW9uYWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRo
Q29uc3RyYWludHM+IHdpZHRoQ29uc3RyYWludHMoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHM7IH0KKyAgICB2b2lkIHNldFdpZHRoQ29uc3RyYWludHMoSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKSB7IG1faW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyA9IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7IH0KKyAgICBP
cHRpb25hbDxJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzPiB3aWR0aENvbnN0cmFpbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOyB9CiAKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Nsb3RNYXAuaXNFbXB0eSgpOyB9CiAgICAgLy8gQ29s
dW1uIHJlcHJlc2VudHMgYSB2ZXJ0aWNhbCBzZXQgb2Ygc2xvdHMgaW4gdGhlIGdyaWQuIEEgY29s
dW1uIGhhcyBob3Jpem9udGFsIHBvc2l0aW9uIGFuZCB3aWR0aC4KQEAgLTE4Nyw4ICsxODcsOCBA
QCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IENlbGwmIGNlbGwoKSBjb25zdCB7IHJldHVybiAqbV9j
ZWxsOyB9CiAgICAgICAgIENlbGwmIGNlbGwoKSB7IHJldHVybiAqbV9jZWxsOyB9CiAKLSAgICAg
ICAgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIHdp
ZHRoQ29uc3RyYWludHMoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoQ29uc3RyYWludHM7IH0KLSAg
ICAgICAgdm9pZCBzZXRXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0OjpJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzJiB3aWR0aENvbnN0cmFpbnRzKSB7IG1fd2lkdGhDb25z
dHJhaW50cyA9IHdpZHRoQ29uc3RyYWludHM7IH0KKyAgICAgICAgY29uc3QgSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyYgd2lkdGhDb25zdHJhaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhD
b25zdHJhaW50czsgfQorICAgICAgICB2b2lkIHNldFdpZHRoQ29uc3RyYWludHMoY29uc3QgSW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyYgd2lkdGhDb25zdHJhaW50cykgeyBtX3dpZHRoQ29uc3Ry
YWludHMgPSB3aWR0aENvbnN0cmFpbnRzOyB9CiAKICAgICAgICAgLy8gSW5pdGlhbCBzbG90IHBv
c2l0aW9uIGZvciBhIHNwYW5uaW5nIGNlbGwuCiAgICAgICAgIC8vIDx0ZD48L3RkPjx0ZCBjb2xz
cGFuPTI+PC90ZD4gWzEsIDBdIHNsb3QgaGFzIGNvbHVtbiBzcGFuIG9mIDIuCkBAIC0yMDUsNyAr
MjA1LDcgQEAgcHVibGljOgogICAgICAgICBXZWFrUHRyPENlbGw+IG1fY2VsbDsKICAgICAgICAg
Ym9vbCBtX2lzQ29sdW1uU3Bhbm5lZCB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgbV9pc1Jvd1Nw
YW5uZWQgeyBmYWxzZSB9OwotICAgICAgICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyBtX3dpZHRoQ29uc3RyYWludHM7CisgICAgICAgIEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgbV93aWR0aENvbnN0cmFpbnRzOwogICAgIH07CiAKICAgICBjb25zdCBDb2x1
bW5zJiBjb2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5zOyB9CkBAIC0yMzEsNyArMjMx
LDcgQEAgcHJpdmF0ZToKIAogICAgIExheW91dFVuaXQgbV9ob3Jpem9udGFsU3BhY2luZzsKICAg
ICBMYXlvdXRVbml0IG1fdmVydGljYWxTcGFjaW5nOwotICAgIE9wdGlvbmFsPEZvcm1hdHRpbmdD
b250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzPiBtX2ludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHM7CisgICAgT3B0aW9uYWw8SW50cmluc2ljV2lkdGhDb25zdHJhaW50cz4gbV9pbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzOwogICAgIE9wdGlvbmFsPEVkZ2VzPiBtX2NvbGxhcHNlZEJvcmRl
cjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVy
LmNwcAppbmRleCA3ZDE3NmE3OWE1YjlkMjc5Zjc4ZGY2YzdjZjRkMmEzYmFiNGJhZWYwLi5jNjZi
NDNjNGUwNDQxN2IwNzE4OTczNmFkMzdjZTQ5ZWYzZWU3NjJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50
QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUg
IklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmgiCkBAIC0zNjYsNyArMzY3LDcg
QEAgdm9pZCBJbmxpbmVDb250ZW50QnVpbGRlcjo6Y3JlYXRlRGlzcGxheUxpbmVzKGNvbnN0IExh
eW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXQKIHZvaWQgSW5saW5lQ29udGVudEJ1aWxkZXI6OmNy
ZWF0ZURpc3BsYXlOb25Sb290SW5saW5lQm94ZXMoY29uc3QgTGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIElubGluZUNvbnRlbnQmIGlubGlu
ZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlID0gaW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuZm9ybWF0dGluZ1N0YXRlKCk7Ci0gICAgYXV0byBpbmxpbmVR
dWlya3MgPSBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5xdWlya3MoKTsKKyAgICBhdXRvIGlubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeSA9IExheW91dDo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5IHsg
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQgfTsKICAgICBmb3IgKHNpemVfdCBsaW5lSW5kZXggPSAw
OyBsaW5lSW5kZXggPCBpbmxpbmVGb3JtYXR0aW5nU3RhdGUubGluZUJveGVzKCkuc2l6ZSgpOyAr
K2xpbmVJbmRleCkgewogICAgICAgICBhdXRvJiBsaW5lQm94ID0gaW5saW5lRm9ybWF0dGluZ1N0
YXRlLmxpbmVCb3hlcygpW2xpbmVJbmRleF07CiAgICAgICAgIGlmICghbGluZUJveC5oYXNJbmxp
bmVCb3goKSkKQEAgLTM4MSw3ICszODIsNyBAQCB2b2lkIElubGluZUNvbnRlbnRCdWlsZGVyOjpj
cmVhdGVEaXNwbGF5Tm9uUm9vdElubGluZUJveGVzKGNvbnN0IExheW91dDo6SW5saW5lRgogICAg
ICAgICAgICAgYXV0byBpbmxpbmVCb3hSZWN0ID0gbGluZUJveC5sb2dpY2FsQm9yZGVyQm94Rm9y
SW5saW5lQm94KGxheW91dEJveCwgYm94R2VvbWV0cnkpOwogICAgICAgICAgICAgaW5saW5lQm94
UmVjdC5tb3ZlQnkobGluZUJveExvZ2ljYWxSZWN0LnRvcExlZnQoKSk7CiAKLSAgICAgICAgICAg
IGlubGluZUNvbnRlbnQubm9uUm9vdElubGluZUJveGVzLmFwcGVuZCh7IGxpbmVJbmRleCwgbGF5
b3V0Qm94LCBpbmxpbmVCb3hSZWN0LCBpbmxpbmVRdWlya3MuaW5saW5lTGV2ZWxCb3hBZmZlY3Rz
TGluZUJveChpbmxpbmVMZXZlbEJveCwgbGluZUJveCkgfSk7CisgICAgICAgICAgICBpbmxpbmVD
b250ZW50Lm5vblJvb3RJbmxpbmVCb3hlcy5hcHBlbmQoeyBsaW5lSW5kZXgsIGxheW91dEJveCwg
aW5saW5lQm94UmVjdCwgaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmlubGluZUxldmVsQm94QWZm
ZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpIH0pOwogICAgICAgICB9CiAgICAg
fQogfQo=
</data>
<flag name="review"
          id="449738"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>